CrisisKit现已支持地图可视化,可在地理视图中查看所有紧急响应请求的位置分布。
- 技术: Leaflet + OpenStreetMap + React Leaflet
- 中心坐标: 香港 [22.3, 114.2]
- 响应式设计: 完全适配移动端和桌面端
- 容器高度: 600px,带圆角和阴影
支持格式:
22.12345, 114.54321 (±10m) https://maps.google.com/...
解析功能:
- 自动提取经纬度坐标
- 识别精度信息 (±Xm)
- 提取地图URL链接
- 验证香港区域范围(22.1-22.6 N, 113.8-114.5 E)
| 紧急度 | 颜色 | 效果 |
|---|---|---|
| CRITICAL | 红色 (#dc2626) | 脉动动画 |
| MODERATE | 黄色 (#f59e0b) | 静态标记 |
| LOW | 灰色 (#9ca3af) | 静态标记 |
| UNKNOWN | 灰色 (#9ca3af) | 静态标记 |
脉动动画: CRITICAL标记会以2秒循环脉动,吸引注意力
- 库: react-leaflet-cluster
- 聚类半径: 50px
- 功能:
- 自动合并相近标记
- 点击展开聚类(spider效果)
- 显示聚类内标记数量
- 缩放到聚类边界
显示内容:
- 姓名 + 紧急度徽章
- 状态徽章
- 可拨打的联系方式 (tel: 链接)
- 地区/区域信息
- GPS精度
- 需求描述(最多3行)
- AI评估理由
- 相对时间
- 在地图中打开链接
交互功能:
- 点击联系方式可直接拨打电话
- 点击地图链接在新窗口打开
- 响应式布局,最大宽度300px
视图切换:
- Map View: 显示地图
- List View: 显示表格
筛选功能保持:
- 地区筛选器工作正常
- 区域筛选器工作正常
- 筛选后的结果同步显示在地图上
自动适配边界:
- 地图自动缩放以包含所有标记
- 智能padding (50px)
- 最大缩放级别: 14
场景: 没有可映射的位置数据 显示: 友好的空状态提示
- 地图图标
- "No mappable locations"标题
- 说明文字
- 坐标格式示例
{
"react-leaflet": "^5.0.0",
"leaflet": "^1.9.4",
"react-leaflet-cluster": "^4.0.0",
"@types/leaflet": "^1.9.x"
}delete (L.Icon.Default.prototype as any)._getIconUrl;
L.Icon.Default.mergeOptions({
iconRetinaUrl: 'https://cdnjs.cloudflare.com/...',
iconUrl: 'https://cdnjs.cloudflare.com/...',
shadowUrl: 'https://cdnjs.cloudflare.com/...',
});创建了 react-leaflet-cluster.d.ts 以提供类型支持
import 'leaflet/dist/leaflet.css';-
访问Incident Dashboard
- 导航到任何incident详情页
-
切换到地图视图
- 点击顶部的 "Map View" 按钮
-
查看标记
- 红色脉动标记 = CRITICAL紧急
- 黄色标记 = MODERATE中等
- 灰色标记 = LOW/UNKNOWN
-
点击标记查看详情
- 弹出窗口显示完整信息
- 可直接拨打联系电话
- 可打开地图链接
-
使用聚类
- 缩小地图时,相近标记自动聚合
- 点击聚类数字展开查看
- 缩放到聚类位置
-
筛选功能
- 使用地区/区域筛选器
- 地图实时更新显示筛选结果
无需配置 - 地图功能开箱即用
数据要求:
- Response的
location字段需包含GPS坐标 - 格式: "lat, lng (±精度) URL"
- 示例: "22.123, 114.456 (±10m) https://maps.google.com/..."
- 懒加载: 地图库按需加载
- 聚类: 减少大量标记时的渲染压力
- Memoization: useMemo缓存标记数据解析
- 智能边界: 仅在响应数据变化时重新计算
- Chrome/Edge: 完全支持
- Firefox: 完全支持
- Safari: 完全支持
- 移动浏览器: 完全支持(触摸手势)
可能的功能扩展:
- 热力图层(密度可视化)
- 路径规划(响应者路线)
- 实时位置更新
- 地理围栏告警
- 自定义地图样式
- 卫星视图切换
解决:
- 检查浏览器控制台错误
- 确认 leaflet.css 已加载
- 验证网络连接(OpenStreetMap)
解决:
- 检查location字段格式
- 验证坐标在香港范围内
- 运行AI Triage分类紧急度
解决:
- 缩小地图查看效果
- 检查标记数量(>1)
- 验证聚类库已正确安装
crisiskit-lite/
├── components/
│ └── MapView.tsx # 主地图组件
├── pages/
│ └── IncidentDashboard.tsx # 集成地图视图
├── react-leaflet-cluster.d.ts # TypeScript类型
└── MAP_FEATURE_DOCS.md # 本文档
- 地图正确显示
- 标记颜色编码正确
- CRITICAL标记脉动动画
- 聚类功能工作
- 弹窗交互正常
- 联系方式可拨打
- 地图链接可打开
- 筛选器同步工作
- 响应式布局正常
- 无TypeScript错误
- 构建成功
- 思思狐狸 🦊 - 全栈开发与实现
思思指挥官任务完成!🗺️✨