核心用法
Map Grabber 是一款面向建筑、城市规划与 GIS 领域的 OpenStreetMap 数据抓取工具。用户仅需提供地址或地名,即可自动下载指定半径范围内的街道网络及可选建筑轮廓,并导出为 SVG(可视化)、GeoPackage(GIS 标准格式)或 DXF(CAD/Rhino 兼容)三种格式。工具基于 osmnx 库构建,依赖 geopandas 与 networkx 进行空间数据处理,DXF 导出需额外安装 ezdxf。
典型工作流
1. 快速预览:--png 生成地图图片,适合 Telegram 等即时通讯场景直接展示
2. GIS 分析:--gpkg 输出 GeoPackage,保留完整空间属性,兼容 QGIS、ArcGIS
3. CAD 建模:--dxf 生成 Rhino/AutoCAD 可直接导入的矢量文件,--buildings 追加建筑底面
4. 设计出图:--svg 获取可编辑的矢量插图,用于 Adobe Illustrator 后期美化
显著优点
- 零门槛地址解析:内置 OSM Nominatim 地理编码,支持模糊地址输入如 "SoHo, New York"
- 多格式闭环:从快速预览到深度建模,覆盖设计全流程,避免格式转换的繁琐操作
- 开源生态:基于成熟 Python 库(osmnx ≥ 1.0),社区活跃,数据更新及时
- 轻量部署:纯 Python 实现,无重型 GIS 软件依赖,适合云端或本地轻量环境
潜在缺点与局限性
- 数据质量波动:OSM 为众包数据,部分地区街道或建筑覆盖不完整,精度参差不齐
- Python 依赖管理:需手动执行
pip install -r requirements.txt,osmnx 及其依赖(GEOS、PROJ)在部分系统上编译复杂 - 网络限制:访问 OSM API 需稳定国际网络,大规模或高频抓取可能触发速率限制
- DXF 功能受限:依赖 ezdxf 的有限实现,复杂图层样式或块定义可能丢失
适合人群
- 建筑师/城市设计师:快速获取场地底图,用于 Rhino/SketchUp 初期建模
- GIS 分析师:需要标准化 GeoPackage 进行进一步空间统计与可视化
- 教学研究者:获取开放数据用于城市规划、交通网络分析等学术场景
- 远程协作团队:通过 Telegram 快速共享场地概况,缩短沟通链路
常规风险
- 代码执行权限:
shell:exec权限意味着脚本可执行任意系统命令,若 skill 代码被篡改,存在命令注入风险 - 依赖供应链:osmnx 及 geopandas 依赖大量 C 扩展(shapely、pyproj、GDAL),二进制分发来源需可信
- 数据合规:OSM 数据遵循 ODbL 开放数据库许可,商用项目需遵守署名与共享条款
- 路径遍历:输出路径由用户参数控制,若未校验可能写入敏感系统目录(尽管当前版本仅用于临时文件)