(最近在研究点云数据可视化的技术路线,中间经历了无尽的痛苦与挣扎,主要是国内这方面的资料太少了!现将近期的学习成果记录如下,期望帮大家避坑!
点云数据可视化我主要调研了两个方面的技术方案,一个是用potree加载,一个是用Cesium加载,下面分别介绍。
1.potree
介绍:Potree 是基于 WebGL 的开源大规模点云渲染器,其由维也纳工业大学计算机图形与算法研究中心开发。
数据切片软件:Releases · potree/PotreeConverter · GitHub
安装教程:2022-02-23 potree详细步骤 - 简书 /PotreeConvert官网
数据切片命令:PotreeConverter.exe point.las -o outputfile
鼠标操作:左键旋转,右键平移
优点:官网上提供了大量的示例,可以查看其源码、运行后的效果并且可以通过交互改变可视化的效果;数据处理的过程也十分简单,下载PotreeConverter输入命令切片后结果就可以直接使用。
2.Cesium
介绍:Cesium 是一个跨平台、跨浏览器的展示三维地球和地图的 javascript 库,它使用WebGL 来进行硬件加速图形,使用时不需要任何插件支持,但是浏览器必须支持WebGL。
官网链接:Cesium: The Platform for 3D Geospatial
数据切片软件:CesiumLab/python代码
鼠标操作:左键平移,右键缩放
优点:引入文件相对较少,可以在加载点云数据后,加载地理数据并且进行一些相应的操作。
3.点云数据转换
las格式与laz格式相互转换:CloudCompare——laz与las格式点云相互转换及代码实现_点云侠的博客-CSDN博客
4.点云数据切片
4.1 Cesium点云切片工具
1.CesiumLab
2.potree23dtiles-master
(核心是使用PotreeConverter进行点云数据切片,再用python代码读取生成的bin文件和json文件,生成Cesium支持的pnts文件及json)
GitHub - yeyan00/potree23dtiles: potree pointcloud to cesium 3dtiles
3.Py3dtiles
py3dtiles是一个CLI工具和一个用Python编写的库,用于创建和操作3DTiles
但这个插件输出坐标系好像默认是4978,不知道可不可以修改输出坐标系,没有深入研究
4.2 potree点云切片工具
1.potree官方提供的工具PotreeConverter
5.点云数据坐标系转换
5.1 arcgis(yyds)
可以利用提取Las数据为点云数据添加坐标系,但如果点云数据之前有经纬度坐标系,是不能通过arcgis清除该坐标系的,只能添加不能清除
5.2 PCL
之前查阅资料说PCL(Point Cloud Library)也可以实现点云数据坐标系的转换,这个我没试过,大家可以自行尝试
6.点云数据查看软件
6.1 arcgis/arcscene
arcgis查看的是二维,可以通过查看属性获得点云数据的范围或者查看点云数据的坐标
arcscene查看的是三维立体点云,但不能查看到点云的位置信息等
6.2 cloudCompare
cloudCompare中可以查看点云,但在这个软件中查看的点云是不带经纬度信息的!!!例如,现在我有一个公园的点云数据,这个点云数据是4326的经纬度投影,那么它的xy值最大值-最小值变化范围很小,z值高程值单位是米,范围变化很大,在arcscene中就可以正确查看到公园点云数据,但在cloudCompare中由于其计算xy变化很小,所以可视化的结果是一条在z轴变化范围比较大的线段。
在cloudCompare中也可以对点云数据进行scale缩放或者裁切等等,但注意处理过的数据导出会丢掉投影信息!!!
7.点云数据瓦片属性信息查看
如果你想查看切片的经纬度颜色等信息,也可以在控制台自己打断点
8.点云数据切片过程中踩过的坑记录
之前在点云数据切片过程中就遇到了上面我举的公园的例子,点云数据拥有经纬度坐标系(换句话说就是极坐标系,xy值是度,z值是米),所以在切片前计算点云盒子boundingBox的时候x、y的范围变化较小,所以导致scale在x、y范围特别小,导致切片数据最后可视化结果是一条线段。那该怎么办呢?我想到的就是给点云数据添加投影坐标系,这样xyz值都转换为米。在这里我是用arcgis的提取Las数据为点云数据添加投影坐标系。这样再对点云数据进行切片,其计算盒子范围就是使用的是投影坐标系的值了。
目前先记录这么多吧,以后如果有需要会再记录~ 希望上述能帮助到大家少踩雷~