# 大屏 — 集中化 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 与后端接口联调