立项原因:三维地理可视化项目里,几个高频需求在主流方案中长期缺失可
靠实现——翻山路径按地表直线算距离、高纬度区域用平面公式算面积产生
明显偏差、标记点上万后地图直接卡死。这些问题每个项目都要重写一遍,
所以把它们抽成可复用的工具库。
行业场景:面向国土测绘、智慧城市、能源与管线巡检、环境监测等需要在
真实地形上做量算与态势展示的业务。典型用法是把业务点位、巡检轨迹、
监测断面接入三维地球,做距离/面积量算、沿线高程剖面分析、大规模点位
态势渲染与历史轨迹回放。工具库不绑定具体业务数据,各图层提供统一的
数据接入接口,可直接对接已有业务系统。
六个核心模块:
1. 贴地距离测量:沿大圆路径采样地形高程,返回真实坡面长度,而非地表
直线距离。翻山连线的结果与实际步行/管线长度一致。
2. 球面面积计算:采用球面角超法,任意纬度均准确(平面鞋带公式在高纬
度会显著偏差),同时输出大地测量周长。
3. 高程剖面与坡度:沿线采样地形,输出距离-高程曲线,并统计累计爬升、
累计下降与最大坡度。
4. 大规模点位渲染:PointPrimitiveCollection 配合距离 LOD,5 万点位
批处理进少量 GPU 缓冲,解决点位过千即卡顿的问题。
5. 轨迹时间轴回放:SampledPositionProperty 驱动时间轴,支持进度拖拽、
播放、循环,兼容 CZML 格式。
6. 绘制与编辑:交互式点/线/面绘制,顶点可拖拽调整,支持 GeoJSON 导出。
工程实现:
- 模块化设计,各工具可单独引入,互不依赖
- 核心几何算法有单元测试覆盖(Vitest,11 项全通过)
- GitHub Actions CI 执行 lint、测试、生产构建三段流水线
- Docker 一键启动,Nginx 生产配置
- 已部署上线,链接可直接操作(首次加载需等待数秒,三维地形与影像
瓦片体积较大)
- 未配置地图服务 token 时自动降级为 OpenStreetMap 底图,功能不中断
数据来源均公开且许可清晰(OpenStreetMap ODbL、Cesium ion World
Terrain、Copernicus DEM 30m);演示点云与轨迹由固定种子生成,可离线
运行,通过各图层 load() 接口替换为真实业务数据。
技术栈:CesiumJS 1.126、JavaScript (ES Module)、Vite 6、Vitest、
Docker、Nginx、GitHub
项目角色:独立开发者,从需求梳理、架构设计、算法实现到测试、部署全流程由我一人完成,无团队协作。
架构:按「视图层 / 工具层」分离。viewer.js 统一负责 Cesium 实例创建与影像、地形服务的初始化和降级;六个功能模块各自独立在 tools/ 下,对外只暴露 load()、start()、clear() 一组接口,互不依赖,可单独摘出来接进别的项目。
实现难点一,量算精度。贴地距离不能用两点直线,需沿大圆路径采样地形高程再逐段累加;面积不能用平面鞋带公式,纬度一高误差会明显放大,改用球面角超法计算,并配套单元测试用已知经纬度多边形校验结果。
难点二,大数据量渲染。逐个 Entity 加载几万个点会直接卡死,改用 PointPrimitiveCollection 批量提交并做 LOD 分级,5 万点位下交互仍保持流畅。
难点三,工程可交付性。Vitest 覆盖几何算法核心用例(11 项全部通过),GitHub Actions 配置 lint、测试、构建三段流水线,Docker + Nginx 提供一键部署,并已实际部署上线可直接访问。
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!

下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
评论