1. 页面概览

地图视图是 LightGotham 的空间情报展示页,路由 /gotham/map,对应源码 action/web/src/views/GothamMapPage.vue。页面用 Leaflet + OpenStreetMap 渲染地理要素(GET /map/features):点要素以彩色圆点(divIcon,免图片资源)、线要素以红色 polyline 展示,点击要素弹出详情(名称/描述/类型/区域/属性)。

左侧为操作面板:bbox 包围盒查询新增要素(point/linestring)、区域聚合统计(条形图)、图层控制(时空增强)——图层显隐、热力图(leaflet.heat,按当前视野)、轨迹回放(polyline + marker 动画)。一句话总结:地图视图是"要素浏览 + 空间检索 + 时空增强"的地理情报工作台。

2. 访问入口

3. 界面布局

+------------------------------+------------------------------+
| 页头:Gotham 地图视图 要素<n> [刷新要素]  alert              |
+------------------------------+------------------------------+
| 左面板(map-sidebar 340px)  | 右地图(map-wrap 640px)      |
|  bbox 包围盒查询[框选查询]    | Leaflet 地图:点要素彩色圆点  |
|   minLng/minLat/maxLng/maxLat|  / 线要素红色polyline / 热力  |
|  新增要素(名称/类型/区域/坐标)|  / 轨迹(红色虚线+移动标记)    |
|   属性JSON [新增要素]         |                             |
|  区域聚合统计(区域名+条形+数量)|                             |
|  图层控制:图层显隐/热力图/    |                             |
|   轨迹回放(实体ID+回放/停止)  |                             |
+------------------------------+------------------------------+

各板块职责:

4. 交互元素

控件位置含义与作用
刷新要素按钮页头重拉 /map/features(limit 200)并渲染,随后刷新区域聚合
bbox 框选查询左侧面板四个数值框必填,命中要素渲染并 fitBounds
新增要素表单左侧面板名称*、geometry_type(point(点)/linestring(线))、区域、坐标*、属性 JSON,提交 POST /map/features
区域聚合统计左侧面板区域名 + 蓝色条形(归一化)+ 数量;空态「暂无聚合数据,点击刷新要素。」
图层列表图层控制勾选/取消即时 PUT /map/layers/:idvisible;空态「暂无图层,请新增。」
新增图层图层控制名称必填 + 类型(point/line/heat/entity),POST /map/layers
热力图开关 + 刷新热力图层控制勾选「启用热力图(按当前视野)」后按 grid_size 拉 /map/heatmap;取消移除热力层
轨迹回放 / 停止回放图层控制实体 ID(默认 graph:person:zhy)「回放」红色虚线 polyline + marker 800ms 步进;「停止回放」清理

5. 后端关联

API 客户端gothamClient.jsaxios.create({ baseURL: '/gotham-api/v1', timeout: 30000 });请求拦截器注入 Bearer token,响应 401 自动 refresh 重放。

端点表

方法路径用途
GET/map/features要素列表,params limit=200
POST/map/features新增要素 {name, description, geometry_type, coordinates, properties, region}
GET/map/features/bboxbbox 框选,params minLng/minLat/maxLng/maxLat
GET/map/aggregate/regions区域聚合统计 {region, count}
GET/map/layers图层列表
POST/map/layers新增图层 {name, layer_type, visible: true}
PUT/map/layers/:id更新图层 {visible}(显隐切换)
GET/map/heatmap热力网格,params min_lng/max_lng/min_lat/max_lat/grid_size,返回 {lat, lng, intensity}
GET/map/trajectory/:entity_id实体轨迹点列表

关键机制

6. 权限与安全

7. 常见问题与排错

问题 1:地图底图空白但要素能显示

现象:地图区域空白,只有彩色圆点。

原因:OpenStreetMap 在线瓦片加载失败(无外网)。

处理:确认可访问 {s}.tile.openstreetmap.org;内网环境需替换 tileLayer 为内网瓦片源。

问题 2:新增要素报「点坐标格式:lng,lat」

现象:提交被前端拦截。

原因:坐标输入与 geometry_type 不匹配。

处理:point 输入如 116.4,39.9;linestring 输入如 116.4,39.9;121.4,31.2

问题 3:热力图点了「刷新热力」没反应

现象:地图不出现热力层。

原因:未勾选「启用热力图(按当前视野)」,loadHeatmap 开头直接 return;或该视野无数据。

处理:先勾选启用热力图再点「刷新热力」;确认 /map/heatmap 返回非空网格。

问题 4:轨迹回放提示「该实体暂无轨迹点」

现象:实体 ID 正确但无轨迹。

原因/map/trajectory/:entity_id 返回空数组。

处理:换成有轨迹数据的实体(如默认 graph:person:zhy),或先在「情报工作台」确认实体存在。

8. 已知缺陷与边界

说明
依赖在线瓦片底图为 OpenStreetMap,离线/内网环境底图空白
bbox 默认值写死初始 bbox 为华北四角,不感知当前视野
无要素编辑/删除 UI编辑/删除接口存在但未暴露
要素列表截断/map/features 固定 limit=200,无分页

注:图层勾选不真正过滤要素已于 2026-09-06 修复(按图层归属过滤并真实重绘,heat 联动)。