

如果你也想:
那这篇内容应该能给你灵感。下面我会按“问题 → 方案 → 实现抓手 → 可复制性”展开。
我沉迷浏览建筑/场所资讯(专业网站 + 社交平台)。每天看到“这儿开了新咖啡”“那儿竣工了个漂亮剧院”,传统收藏方式的问题是:
传统方式 | 痛点 |
|---|---|
App 内收藏 | 数据被平台“锁住”,难以批量导出 / 分析 |
手动复制地址再查地图 | 步骤多、易错、效率低 |
零散截图或链接 | 不结构化,后期无法空间分析 |
于是目标非常清晰:把“我看到的一切有空间含义的资讯”→ 结构化地落成“项目点(Point)+ 可选范围(Polygon)+ 丰富属性”。
资讯来源(网页 / 文本 / 链接) → AI 解析提取地点语义 → 地理编码工具获取标准地址与经纬度 → 校验 / 补充属性 → 写入数据库(ProjectData + Geofence)→ 前端地图渲染 + 交互(收藏 / 访问 / 忽略)→ 可选:进入围栏触发通知。
我在AI 代替手动搜索:我如何只用“一句话”,就可以在地图上自动标点 \| Renhai 实验室[1]一文中说明了我用 AI 替代我标点的想法,感兴趣的可以看看。
关键点:大量“枯燥手工”被 AI + 地理编码外部工具替代,人做“判断 + 调整”而不是“重复搬运”。
模块 | 选择 | 备选 | 取舍理由 |
|---|---|---|---|
后端 | Django + GeoDjango + DRF | FastAPI / Node | Geo 模型成熟 + 管理后台天然加成 |
存储 | PostGIS | 纯 Postgres + 手写几何 | 省去大量空间运算轮子 |
前端 | Vue 3 + MapLibre GL | React + Mapbox GL | 熟悉 + MapLibre 开源不锁定 Token |
数据获取 | AI Agent + 地理编码 MCP 工具 | 全人工 | 降低重复劳动、速度数量级提升 |
通知 | 地理围栏 + 位置上报 | 定时轮询 | 精准触发、减少无效请求 |
静态资源 | S3/MinIO | 本地文件 | 便于后期云化与多实例 |
django 的后端非常完善,方便管理,后台页面:

django的后端界面

后台界面的点组件
经验:不要一上来追“最炫栈”,先保留扩展点(比如预留矢量瓦片 / 聚合),再循序渐进。
详细实操在另一篇《AI 代替手动搜索:我如何只用“一句话”,就可以在地图上自动标点》。这里浓缩关键做法:

好处:
心得:一开始就定义“最终落库 JSON schema”极其重要,AI 输出更稳定、调试也更快。

homeassistant通知界面截图
使用场景:
本质:判断“设备位置点 P 是否进入/离开 Polygon G” + 状态去抖(避免 GPS 抖动导致反复进出)。
最小实现(伪流程):
ST_Contains(geofence.geom, ST_SetSRID(ST_Point(lon,lat),4326)) 判断。device_geofence_state(device_id, geofence_id, in_state, updated_at)。去噪技巧:
问题 | 解决 | 说明 |
|---|---|---|
GPS 漂移反复触发 | 加最小停留时间 / 距离阈值 | 进入后先计时,再确认 |
大面积围栏价值低 | 分层:核心区 + 缓冲区 | 不同区触发不同级别提示 |
通知疲劳 | 设冷却(cooldown) | 同一围栏 X 分钟内最多一次 |
一句话总结:地理围栏 ≠ 复杂黑科技;它就是“点在不在多边形里 + 状态变化记录”。
关键数据模型(简化概念版):
模型 | 作用 | 关键字段 |
|---|---|---|
ProjectData | 结构化地点/项目 | name, category, lon/lat, city, features, geofence(one-to-one) |
Geofence | 多边形范围 | polygon, active, source_id |
LocationUpdate | 设备位置轨迹 | device_id, point, timestamp |
DeviceGeofenceState | 进出状态 | device_id, geofence_id, in_state |
Favorite / Visited / Ignored | 用户行为 | user_id + object_id + ts |
前端渲染策略:
方面 | 问题 | 措施 | 效果 |
|---|---|---|---|
频繁移动地图 | 请求风暴 | 防抖 + 视窗扩展缓存 | 请求次数明显下降 |
点位刷新闪烁 | 重绘全部 | diff 更新 / 分层管理 | 视觉更稳定 |
围栏过密 | 视觉噪声 | 缩放级别过滤 | 减少遮挡 |
数据获取延迟 | 首屏空白 | 骨架态 / loading 提示 | 心理预期良好 |
把下面几块拼起来,你就能快速复制一个类似平台:
方向 | 思路 | 价值 |
|---|---|---|
瓦片化 | martin / tippecanoe 预处理 | 海量点加载提速 |
服务端聚合 | H3 / quadbin 栅格聚类 | 分布洞察更直观 |
语义标签挖掘 | LLM 继续抽特征 | 形成“语义地图” |
实时性 | WebSocket / SSE | 轨迹 & 动态提醒 |
推荐 | 根据足迹/收藏协同过滤 | 主动提示“可能感兴趣” |
Place(name, point),用 DRF 暴露 List API,在 MapLibre 上渲染。radius 字段,生成临时圆形围栏,并计算“是否在范围内”。{name, lon, lat, city}。README.md(部署 / 模型 / API 结构)当你把“看到的信息 → 结构化 → 空间化 → 可触发”这条链路打通后,地图不再只是“展示”,而是一个可以编排各种自动化的“连接器”。
希望这篇文章能启发你:
欢迎基于这些思路做你自己的版本。如果你也做出了有趣的“地图工作流”,欢迎分享。🙌
参考资料
[1]
AI代替手动搜索:我如何只用“一句话”,就可以在地图上自动标点 | Renhai实验室: https://www.renhai.online/blog/geospatial-data-analysis/interest-point-extraction-assistant
[2]
AI代替手动搜索:我如何只用“一句话”,就可以在地图上自动标点 | Renhai实验室: https://www.renhai.online/blog/geospatial-data-analysis/interest-point-extraction-assistant
[3]
PostGIS 文档: https://postgis.net/
[4]
MapLibre GL 官方文档: https://maplibre.org/maplibre-gl-js/docs/