作者:黄宁
本文介绍了点云数据在Yukon中的存储及可视化方法,基于LOPoCS (用Python编写的点云数据服务器)工具实现点云数据入库,切片及可视化。
说明
本次使用操作系统为 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 13.6 (以下简称 PG)安装
我们从 [官网](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
目录所有权改为 postgreschown -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
到此数据库已经全部安装完成
Yukon 1.0 安装
-
下载安装包
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
pgPointCloud 安装
-
下载源码
git clone https://github.com/pgpointcloud/pointcloud.git
-
进入 pointcloud 目录,生成 configure
cd pointcloud && ./autogen.sh
-
configure
./configure
-
编译安装
make && make install
-
连接到数据库,安装 pointcloud 扩展
create extension pointcloud;
PDAL 安装
-
下载源码
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
LOPOCS 安装
下载源码
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 数据
浏览器截图如下: