外观
项目介绍
Scene Mapping GIS 是面向 Vue 3 项目的 2D/3D GIS 组件库。2D 模块建立在 Leaflet 与 Leaflet Draw 之上,3D 模块建立在 Cesium 之上;两者都提供声明式 Vue 组件,并保留原生 Map 或 Viewer 作为高级能力出口。
能力范围
| 类别 | 能力 |
|---|---|
| 底图 | 天地图影像与中文注记、OpenStreetMap、自定义 XYZ |
| 点位 | Marker 展示、拖拽、动态图标、命令式定位 |
| 区域 | 多边形绘制、选择、编辑、删除、洞、岛、净面积 |
| 轨迹 | 轨迹线、起终点、移动点位循环动画 |
| 图层 | 额外天地图或自定义瓦片图层 |
| 定位 | setView、panTo、fitBounds、业务搜索结果定位 |
| 3D 场景 | Cesium Viewer、影像图层、Entity、Marker、动态围墙、3D Tiles |
| 3D 控制 | 相机飞行、屏幕拾取、实体批量管理 |
| 场景切换 | 使用 SceneMap 在 2D 与 3D 容器之间切换 |
技术架构
text
业务页面
├─ TMap(地图容器与底图)
│ ├─ TMapMarker
│ ├─ TMapPolygonEditor
│ └─ TMapTileLayer
└─ TrailMap(轨迹场景封装)
└─ TMap + Leaflet 轨迹覆盖物
CesiumMap(3D Viewer 容器)
├─ CesiumImagery
├─ CesiumEntity / CesiumDropMarker
├─ CesiumDynamicWall
└─ Cesium3DTilesetTMap 通过 Vue provide/inject 向子组件提供同一个 Leaflet Map。覆盖物组件负责自己的创建、响应式更新和卸载,不请求任何业务 API。区域搜索、权限、保存策略和弹窗内容均由业务项目维护。
设计边界
- 组件库只处理通用地图交互,不内置行政区划搜索接口。
- 天地图 Key 和其他密钥必须由业务侧注入。
properties用于保存业务字段,组件编辑坐标时会保留这些字段。- 未覆盖的 Leaflet 高级能力可通过
TMap.getMap()获取原生实例实现。 - 未覆盖的 Cesium 高级能力可通过
CesiumMap.getViewer()获取 Viewer 实现。
源码目录
text
src/2d/
├─ components/ # 地图与覆盖物组件
├─ composables/ # 地图上下文 provide/inject
├─ types/ # 公共 TypeScript 类型
├─ utils/ # 坐标转换工具
└─ index.ts # 2D 独立导出入口
src/3d/
├─ components/ # Viewer、影像、实体与场景图元
├─ composables/ # 相机、屏幕事件、实体管理
├─ types/ # 3D 坐标与组件类型
├─ utils/ # 坐标转换、相机和拾取工具
└─ index.ts # 3D 独立导出入口