硬核 GIS | Python 批量抓取高德 POI:攻克坐标偏移,实现 WGS84 无缝对接!
文末有代码获取方式,着急的朋友可以直接拉到文末。一、 为什么要写这个脚本?
起初,我只想快速抓取某个城市的餐厅、学校等 POI 数据。但在实操时踩了个大坑:直接调用高德 API 获取的坐标,放到地图上是错位的!
这就是经典的“坐标系陷阱”:国内地图普遍使用加密的火星坐标系(GCJ-02)。如果直接导入 ArcGIS Pro 与标准底图(WGS-84,如 OSM)叠加,会出现几十甚至上百米的偏差。
大家看下方的图(以“隽水阁”为例):
- • 🔴 红点(原始高德坐标):直接飘到了马路对面。
- • 🟢 绿点(转换后坐标):精准贴合真实建筑轮廓。

为了彻底解决这个问题,我在获取数据的脚本中直接内置了坐标转换算法。用这个脚本,批量抓取 POI 与坐标纠偏,一步到位!今天分享的脚本,重点就在于抓取的同时完成坐标纠偏。
二、 核心秘籍:坐标转换逻辑
为了解决偏移,我封装了一个 CoordinateConverter 类。它能将高德的加密坐标逆向还原为全球通用的 WGS84 坐标。
关键代码片段:
# utils.py 核心算法def gcj02_to_wgs84(self, lng, lat): dlat = self._transformlat(lng - 105.0, lat - 35.0) dlng = self._transformlng(lng - 105.0, lat - 35.0) radlat = lat / 180.0 * self.pi # ... (中间省略复杂的三角函数计算) mglat = lat + dlat mglng = lng + dlng # 最终输出 WGS-84 坐标,精准对接 ArcGIS Pro return [lng * 2 - mglng, lat * 2 - mglat]
三、 爬取与转换一体化
有了转换器,我们就可以编写主程序进行数据请求了。这里我们以“餐饮美食”为例。
关键爬取逻辑:
def fetch_and_convert(api_key): params = { "key": api_key, "types": "050000", # 餐饮类代码 "city": "330106", # 目标区域行政区号 "offset": 20, "page": page } response = requests.get(url, params=params) # ... 获取数据后立即调用转换 lng_wgs, lat_wgs = converter.gcj02_to_wgs84(lng_gcj, lat_gcj) all_data.append({ "name": poi['name'], "wgs_lng": lng_wgs, # 转换后的经度 "wgs_lat": lat_wgs # 转换后的纬度 })
四、 高德 API 能获取哪些 POI?
除了美食,修改代码中的 types 参数,你还可以获取:
| |
|---|
| 美食餐饮 | 050000 |
| 风景名胜 | 110000 |
| 医疗保健 | 090000 |
| 生活服务 | 070000 |
| 交通设施 | 150000 |
五、 快速上手指南
- 1. 申请 Key:前往高德开放平台(https://lbs.amap.com/),注册登录后,首页“控制台”—“应用管理”—“创建新应用”申请“Web 服务”类型的 API Key。

- 3. 配置虚拟环境:需安装
requests 和 pandas 库。 - 4. 运行脚本:填入 Key 后运行,数据将自动保存为 CSV。
- 5. ArcGIS 预览:将 CSV 拖入 ArcGIS Pro,使用“XY 绑定表”功能,坐标系务必选 GCS_WGS_1984。
结语
掌握了坐标转换,你的 POI 数据才真正具备了空间分析的价值。不再为几十米的偏移发愁,让数据真正精准落地。
想要获取完整 Python 脚本(含坐标转换库 utils.py 及完整爬取代码)?欢迎在公众号后台留言:AMAP点