作者:黄宁
本次使用操作系统为 Centos7.6 版本
安装软件源
sudo yum install -y epel-release
sudo yum install -y centos-release-scl-rh
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
安装 gcc g++
sudo yum install -y devtoolset-10-gcc-c++ devtoolset-10-gcc
安装 readline-devel
sudo yum install -y readline-devel
安装 zlib-devel
sudo yum install -y zlib-devel
安装 libxml2-devel
sudo yum install -y libxml2-devel
安装 cmake3
yum install -y cmake3
安装 gdal31-devel
yum install -y gdal31-devel
安装 geos310-devel
yum install geos310-devel
安装 geotiff
yum install -y libgeotiff17-devel
安装 libcurl-devel
yum install -y libcurl-devel
安装 openssl11-devel openssl11-libs
yum install -y openssl11-devel openssl11-libs
同时删除 /usr/lib64/libssl.so 文件,重新创建一个软连接指向 libssl.so.1.1.1k
安装编译可能会用到的其他软件
sudo yum groupinstall "Development Tools"
我们从 [官网](PostgreSQL: File Browser)下载 PG 13.6 的源码包,下载链接.
解压文件
tar -xf postgresql-13.6.tar.gz
进入目录并配置
cd postgresql-13.6 && ./configure --prefix=/opt/pg13
编译
make -j
安装
make install
添加 postgres 用户
useradd postgres
将 /opt/pg13 目录所有权改为 postgres
chown -R postgres:postgres /opt/pg13
切换到 postgres 用户
su postgres
创建数据库存储目录
mkdir -p /opt/pg13/data
修改 /home/postgres/.bashrc 文件,添加如下内容
export PATH=$PATH:/opt/pg13/bin
export PGDATA=/opt/pg13/data
使其生效
source /home/postgres/.bashrc
数据库初始化
initdb
启动数据库并连接
pg_ctl start
psql
到此数据库已经全部安装完成
下载安装包
wget https://gitee.com/isupermap/yukon4pgsql/attach_files/1108783/download/Yukon-1.0-postgres13-CentOS_x64.tar.gz
安装 boost
yum install boost
安装 Yukon
#在 root 用户下 解压安装包,导出 pg_config 和 PGDATA 环境变量,这两个环境变量,我们在 /home/postgres/.bashrc 定义,直接导出即可
sh install -i
下载源码
git clone https://github.com/pgpointcloud/pointcloud.git
进入 pointcloud 目录,生成 configure
cd pointcloud && ./autogen.sh
configure
./configure
编译安装
make && make install
连接到数据库,安装 pointcloud 扩展
create extension pointcloud;
下载源码
wget https://github.com/PDAL/PDAL/releases/download/2.4.1/PDAL-2.4.1-src.tar.gz
解压文件
tar -xf PDAL-2.4.1-src.tar.gz
导出环境变量
export CMAKE_INCLUDE_PATH=/opt/pg13/include:/usr/gdal31/include:/usr/libgeotiff17/include:/usr/include/openssl11/
export CMAKE_LIBRARY_PATH=/opt/pg13/lib:/usr/gdal31/lib:/usr/libgeotiff17/lib
使用 g++ 10 编译器
source /opt/rh/devtoolset-10/enable
进入 pdal 目录,创建编译目录
cd PDAL-2.4.1-src && mkdir build
进入 build 目录,执行 cmake3 命令
cmake3 .. -DBUILD_PLUGIN_PGPOINTCLOUD=ON
开始编译,安装
make && make install
git clone https://github.com/Oslandia/lopocs.git
安装 virtualenv
pip3 install virtualenv
安装 python3-devel
yum install python-devel
安装 pgmorton
# 下载 pgmorton
git clone https://github.com/Oslandia/pgmorton.git
# 进入 pgmorton 目录
# 创建 build 目录
mkdir build
# 进入 build 目录,然后 cmake3 编译
cd build
cmake3 ..
make
make install
# 连接数据库创建扩展
psql
create extension morton;
进入 lopocs 目录安装 python 依赖包
# 激活虚拟环境
virtualenv -p /usr/bin/python3 venv
source venv/bin/activate
# 安装 numpy
pip3 install 'numpy==1.14.3'
# 安装其他
pip install -e .
pip3 install --upgrade Werkzeug==0.16.0
复制 conf/lopocs.sample.yml 文件为 conf/lopocs.yml 修改其中的参数,其中数据库的名字为 lopocs 后边我们会创建这个数据库
flask:
DEBUG: False
PG_HOST: 127.0.0.1
PG_NAME: lopocs
PG_PORT: 5432
PG_USER: supermap
PG_PASSWORD: supermap
CACHE_DIR: /home/postgres/cache
创建数据库及其扩展
createdb lopocs
psql -d lopocs -c 'create extension postgis'
psql -d lopocs -c 'create extension pointcloud'
psql -d lopocs -c 'create extension pointcloud_postgis'
psql -d lopocs -c 'create extension morton'
检查是否安装成功
# lopocs check 查看输出
lopocs check
# 输出如下
Pdal ... 2.4.1
Pdal plugin pgpointcloud ... ok
PostgreSQL ... 13.6
PostGIS extension ... 3.1.2dev
PgPointcloud extension ... 1.2.2
PgPointcloud-PostGIS extension ... 1.2.2
修改 lopocs 代码,显示 demo 案例
# 将 cli.py 中的 266-278 替换如下
offset_x = summary['bounds']['minx'] + (summary['bounds']['maxx'] - summary['bounds']['minx']) / 2
offset_y = summary['bounds']['miny'] + (summary['bounds']['maxy'] - summary['bounds']['miny']) / 2
offset_z = summary['bounds']['minz'] + (summary['bounds']['maxz'] - summary['bounds']['minz']) / 2
# 将 cli.py 中的 289-290 替换如下
xmin, ymin, zmin = transform(pini, pout, summary['bounds']['minx'], summary['bounds']['miny'], summary['bounds']['minz'])
xmax, ymax, zmax = transform(pini, pout, summary['bounds']['maxx'], summary['bounds']['maxy'], summary['bounds']['maxz'])
# 将 database.py 中 193 行修改如下
cls.pool = ThreadedConnectionPool(1, 50, query_con)
导入 demo 数据
# 在 lopocs 创建 demos 目录
mkdir demos
# 导入 demo 数据,导入时间较长,需要等待一会
lopocs demo --server-url "http:192.168.90.127:5000" --work-dir demos/ --sample lyon --cesium
#启动服务
lopocs serve
# 导入完成后,可以在 demos 目录下有一个 cesium-lyon.html 文件,在浏览器中打开就可以看到点云数据
数据库中的点云数据:

浏览器请求 3D Tiles 数据
浏览器截图如下:
