三维 GIS 开发工具清单:从数据处理到地图展示,这一篇就够了
做三维地理信息系统(GIS)开发,最耗时的其实不是写业务代码,而是选工具和造轮子。数据格式五花八门,坐标系动不动就乱,点云要处理,倾斜模型要转 3D Tiles,最后还得找个引擎放地图上给大家看。每一步都有坑。
好消息是,这几件事在开源社区里基本都有人替你解决了,而且免费、稳定、在持续维护。这篇我把从"数据进来"到"地图展示"这条链路常用的成熟工具整理成一张单子,每个都写清楚能做什么、官网在哪、仓库在哪,方便你直接上手。
栅格与矢量数据读写:GDAL / OGR
做 GIS 绕不开的第一个问题:读数据。现实里的地理数据格式多到吓人,栅格有 GeoTIFF、Cloud Optimized GeoTIFF(COG)、SRTM,矢量有 Shapefile、GeoPackage、DXF、GPX、GeoJSON 等等。每一样都自己写解析,工程量巨大。
GDAL/OGR 就是为这个而生。GDRAL 管栅格,OGR 管矢量,一个库就覆盖了几十种格式的读写。配套的命令行工具也很好用:gdal_translate 做格式互转,ogr2ogr 做矢量转换和重投影,gdaldem 做地形分析。多数桌面 GIS 软件、遥感处理工具,底层用的都是它。
项目仓库在 GitHub: OSGeo/gdal,由 OSGeo 基金会维护,二十多年历史,文档、测试、社区都非常成熟。Python 里还有配套的 rasterio 和 fiona 封装,写起来更顺手。
坐标与投影换算:PROJ
坐标系混乱,是 GIS 里最磨人的一件事。不同数据源有时用的坐标系不一样,经纬度、Web 墨卡托、各种投影坐标系混在一起,转换没做好,图层就直接错位,地图上两个点差出一大截。
PROJ 是坐标系换算的事实标准,几乎所有 GIS 软件在内部都靠它。命令行工具 proj、cs2cs 能快速验证转换结果,Python 封装 pyproj 用起来很顺手。投影换算这件事,交给它比自己写公式靠谱得多。
仓库在 GitHub: OSGeo/PROJ,同样是 OSGeo 基金会维护的成熟项目。
几何运算与拓扑判断:GEOS
判断多边形相不相交、要不要缓冲、求个并集差集,这类几何运算写起来似乎不难,但边界情况极多,真要自己实现会发现到处是坑。
GEOS 把几何引擎做透了。PostGIS 的空间函数、Python 的 Shapely,底层调用的都是它。要几何运算,先找 GEOS 的绑定,通常比自己从零实现靠谱得多。仓库在 GitHub: libgeos/geos。
点云处理:PDAL、LAStools、CloudCompare、PotreeConverter
激光雷达和摄影测量会不断产出点云,处理起来是个体力活:读 LAS/LAZ、滤波、抽稀、剪裁、转成浏览器能加载的 Potree 瓦片,每一步都有现成工具。
- PDAL 是点云处理的核心,把读取、滤波、裁剪、抽稀这些操作串成一条管道,写一次配置就能反复跑,仓库在 GitHub: PDAL/PDAL。
- LAStools 是经典的老牌点云工具集,LAS/LAZ 的处理效率很高。
- CloudCompare 侧重可视化,能加载点云、检查质量、手工编辑,仓库在 GitHub: CloudCompare/CloudCompare。
- PotreeConverter 把点云转成 Potree 瓦片,之后配合 Potree 就能在网页里流畅浏览超大点云,仓库在 GitHub: potree/PotreeConverter。
高程数据与空间插值:SAGA GIS、PyKrige
生成 DEM、做克里金插值、算坡度坡向,这些地表分析需求,桌面端有 SAGA GIS 提供一大堆现成模块;要在代码里做克里金,用 PyKrige 就够了,它支持二维和三维的普通克里金、泛克里金,内置多种变异函数模型,仓库在 GitHub: GeoStat-Framework/pykrige。
三维数据转 3D Tiles:CesiumLab
把倾斜摄影的 OSGB、BIM、人工模型转成 3D Tiles,再发布成瓦片服务,这是三维 GIS 里最常见的一条链路。自己从零搭转换管线工作量非常大,而 CesiumLab 把它做成了桌面工具,拖进去点转换就行。
CesiumLab 基于 Cesium 开源生态构建,是一款 B/S 架构的三维数据转换与发布平台。支持影像数据转地图瓦片、地形数据切片、OSGB 倾斜模型转 3D Tiles、BIM 转 3D Tiles,以及 Obj、Fbx 等人工模型转换,还能处理点云、实例模型、建筑体块。它自带一个轻量的 HTTP 分发服务,转换完可以直接一键部署成私有化云服务,不需要额外搭服务器。基础的数据转换功能免费,少数压缩、轻量化这类功能需要付费。
需要说明的是,CesiumLab 本身是免费但闭源的商业工具,没有对外开放源码仓库,官网是 cesiumlab.com,官方帮助文档在 m.cesiumlab.com/doc/CesiumLab。如果团队在乎完全开源,后面介绍的方案会更合适。
网页三维地球展示:CesiumJS
数据转成 3D Tiles 之后,得有东西在浏览器里把它展示出来,CesiumJS 是最主流的选择。它是一个纯 JavaScript 的 3D 地球库,基于 WebGL 做硬件加速,不需要任何浏览器插件,跨平台、跨浏览器都能跑。
CesiumJS 的核心能力是高效加载和展示大规模三维数据,比如 3D Tiles、矢量数据、影像,而且是基于高精度 WGS84 椭球模型实现的,能处理好全球尺度的数据。它本身只负责"渲染和展示",不负责把原始模型转成 3D Tiles,格式转换一般交给 CesiumLab 或 Cesium ion 这类工具。安装也很简单,npm install cesium 就能用。
项目在 GitHub: CesiumGS/cesium,作为开源项目由 Cesium 团队维护,示例(Sandcastle)、文档、论坛都非常全。
国产三维地球开发平台:Mars3D
如果更习惯中文生态、想要现成的项目模板和更贴国内场景的封装,可以看看 Mars3D。它是基于 Cesium 优化提升的一款国产三维客户端开发平台,同样是 WebGL + B/S 架构,支持智慧城市、数字孪生等常见行业场景的二次开发。
Mars3D 的一大特点是开放:它的示例和部分项目模板在 GitHub 和 Gitee 上开源,可以免费无限制使用,官方也提供更完整的 SDK 和模板(付费是一次性的)。仓库在 GitHub: marsgis/mars3d,国内镜像在 Gitee: marsgis/mars3d。它官方还维护了一系列配套模板,比如 mars3d-vue-app、mars3d-es5-project,方便快速拉起一个项目。
GNSS 后处理:RTKLIB
做无人机测绘或者需要厘米级定位时,会遇到 GNSS 数据的 PPK、RTK 后处理。开源这一块 RTKLIB 是公认的标准,它自带 RTKPOST 等工具,支持 GNSS 观测数据的后处理解算。如果要做二次开发,常用的维护分支仓库在 GitHub: rtklibexplorer/RTKLIB,原作者的站点在 rtklib.com。
参数化 CAD 建模:OpenCASCADE 与 FreeCAD
如果需求是代码层面的参数化建模,需要一个靠谱的几何内核,那直接看 OpenCASCADE(简称 OCCT)。它是成熟的开源几何建模内核,仓库在 GitHub: Open-Cascade-SAS/OCCT。在它之上,FreeCAD 提供了一个能直接用的建模界面,仓库在 GitHub: FreeCAD/FreeCAD。自己从零写拓扑几何引擎的成本高出一个数量级,通常不值得。
一张表收尾:手头的事,第一选择给谁
| 你想做的事 | 直接使用 | 官网 | 仓库 |
|---|---|---|---|
| 读/写各种栅格与矢量格式 | GDAL/OGR | gdal.org | OSGeo/gdal |
| 坐标系与投影换算 | PROJ + pyproj | proj.org | OSGeo/PROJ |
| 几何运算、拓扑判定 | GEOS + Shapely | libgeos.org | libgeos/geos |
| 点云读取/处理/可视化 | PDAL、LAStools、CloudCompare | pdal.io | PDAL/PDAL |
| 点云转 Potree 瓦片 | PotreeConverter | potree.org | potree/PotreeConverter |
| DEM、克里金、地形分析 | SAGA GIS、PyKrige | saga-gis | GeoStat-Framework/pykrige |
| OSGB/BIM/模型转 3D Tiles | CesiumLab | cesiumlab.com | 闭源工具(无公开仓库) |
| 网页三维地球展示 | CesiumJS | cesium.com/cesiumjs | CesiumGS/cesium |
| 国产三维地球二次开发 | Mars3D | mars3d.cn | marsgis/mars3d |
| GNSS PPK/RTK 后处理 | RTKLIB | rtklib.com | rtklibexplorer/RTKLIB |
| 参数化 CAD 建模 | OpenCASCADE、FreeCAD | opencascade.com | Open-Cascade-SAS/OCCT |
这几样工具基本把三维 GIS 从数据处理到地图展示的主流程盖全了。真开工一个项目,值得先到对应工具的官网和文档逛一圈,很多体力活其实已经有人替你做好了。如果你在哪一步踩过坑,或者觉得哪个工具更好用,欢迎在评论区补上来,大家一起少走弯路。