# 大屏 — 集中化 GIS 地图对接技术方案 > 依据《中国移动集中化 GIS 平台 JSAPI 接口协议 v1.0》(`集中化GIS系统JSAPI接口文档.docx`)。 > 前端引擎为 **cmmap GL JS**(API 形态与 Mapbox GL JS 接近),全局对象 **`cmmapgl`**。 --- ## 1. 对接前提(向 GIS 平台申请) | 项 | 说明 | | --- | --- | | **GIS 服务根地址** | 文档中的「GIS 服务地址」,如 `https://gis.example.com` | | **地图密钥 accessToken** | 文档 §2.2;初始化前赋值 `cmmapgl.accessToken` | | **底图样式 style** | Mapbox Style 规范 JSON 或样式 URL(`MapOptions.style`) | | **跨域** | 生产由 GIS/Nginx 放行;开发可用 Vite 代理 `/gis-dev-proxy` | --- ## 2. 静态资源引入 文档 §2.1 要求在页面引入(将 `GIS服务地址` 替换为实际根地址): ```html ``` `ruoyi-screen` 通过 `src/utils/gisLoader.js` **按需动态加载**,避免未配置 GIS 时阻塞整站。 --- ## 3. 初始化流程 ```text loadGisSdk() → cmmapgl.accessToken = token → new cmmapgl.Map({ container, center, zoom, style }) ``` | 参数 | 说明 | | --- | --- | | `container` | 地图容器 DOM 或 id | | `center` | **`[经度, 纬度]`**(与 GeoJSON 一致,勿写反) | | `zoom` | 0–24,默认约 2–9 | | `style` | 底图样式 URL 或 JSON | | `accessToken` | 也可在 `MapOptions` 中传 `accessToken`,会覆盖全局 `cmmapgl.accessToken` | 巴青县默认中心(可在页面覆盖):`[94.05, 31.92]`,缩放 `9`。 --- ## 4. 常用能力(按大屏场景) | 文档章节 | 能力 | 大屏典型用途 | | --- | --- | --- | | §3.1 | `cmmapgl.Map` | 底图展示 | | §3.3 | `NavigationControl` / `ScaleControl` | 导航、比例尺(大屏可关闭交互) | | §4 | `addSource` + `addLayer` | 矢量/栅格/GeoJSON 业务图层 | | §5.1 | `cmmapgl.Marker` | 牧场、检疫站、交易市场点位 | | §5.2 | `Popup` | 点位详情气泡 | | §7 | 热力图、散点、轨迹等 | 疫病风险、资源分布 | | §8 | `agis.turf` | 空间计算(点线面关系) | | §10–11 | POI / 路线 | 后续扩展 | --- ## 5. ruoyi-screen 工程约定 ### 5.1 环境变量(`.env.development` / `.env.production`) ```bash # GIS 服务根地址(勿带末尾 /) VITE_GIS_BASE_URL=/gis-dev-proxy # 地图密钥(§2.2,由 GIS 平台发放) VITE_GIS_ACCESS_TOKEN= # 底图样式 URL 或 JSON 路径 VITE_GIS_MAP_STYLE= # 默认中心:经度,纬度 VITE_GIS_DEFAULT_CENTER=94.05,31.92 VITE_GIS_DEFAULT_ZOOM=9 ``` 开发环境在 `vite.config.js` 将 `/gis-dev-proxy` 代理到真实 GIS 服务(`VITE_GIS_PROXY_TARGET`)。 ### 5.2 代码入口 | 文件 | 职责 | | --- | --- | | `src/utils/gisLoader.js` | 动态加载 cmmap-gl.js/css、读取 env | | `src/components/GisMap.vue` | 通用地图容器,`@ready` 抛出 `map` 实例 | ### 5.3 页面使用示例 ```vue ``` ```javascript function onMapReady(map) { // map 为 cmmapgl.Map 实例 // map.addSource / addLayer / Marker 等见文档 §4–§5 } ``` --- ## 6. 注意事项 1. **坐标顺序**:一律 `[lng, lat]`。 2. **容器尺寸**:父级须有明确宽高(大屏组件内 `width/height: 100%`)。 3. **销毁**:路由离开须 `map.remove()`(`GisMap.vue` 已在 `onUnmounted` 处理)。 4. **resize**:大屏 `screenFit` 缩放后若地图空白,在布局稳定后调用 `map.resize()`。 5. **token 缺失**:未配置 `VITE_GIS_ACCESS_TOKEN` 时组件展示占位提示,不抛白屏。 --- ## 7. 交付清单 - [x] `gisLoader.js` 动态加载 SDK - [x] `GisMap.vue` 基础地图组件 - [x] Vite 开发代理占位 - [x] 业务页嵌入地图(`ScreenLayout` 中间栏共用底图,各子页左右面板叠在两侧) - [ ] 业务点位/GeoJSON 与后端接口联调