作者:高玉涵
时间:2023.6.25
环境:Windows 10 专业版 22H2,Python 3.10.4
第三方包:geo-tool 1.1.2
近日,在做一个项目需要使用百度地图提供的地理编码 API 来完成从物理地址到经纬度的转化。实践过程中纯手工调用百度 API 较为繁琐,就想查找一下是否有人已经实现了这个服务的通信协议。
因此查阅了 Python 包索引(https://pypi.python.org)输入关键字百度地理搜索,返回结果中的第一条记录为 geo-tool 的包(https://pypi.org/project/geo-tool/)这个包提供了简洁的接口来获取百度、高德和谷歌的地理编码服务(从包名可以注意到,这个包并非由官方提供,而是第三方开发者开发的)。遂安装并按着示例使用,意外收到 {‘status’: 240, ‘message’: ‘APP 服务被禁用’} 的错误信息。
搜索百度给出的结论是自己创建 AK 时设置有问题,实际检查设置没有问题。
继续搜索找到以下官方回复。
参考最新官方文档发现更新之后请求的 URL 发生了改变。
旧 URL:
http://api.map.baidu.com/geocoder/v2/?location=34.35555,107.32518&output=json&ak=你的AK&pois=1
新 URL:
http://api.map.baidu.com/reverse_geocoding/v3/?ak=你的AK&output=json&coordtype=wgs84ll&location=31.225696,121.49884
在上述 URL 填上自己的 AK 来测试。
知道故障原因,接下来的事情就好办了。进入到存放 geo-tool 包源文件位置,修改 URL 为新的即可。步骤如下:
Lib\site-packages\geo_tool
baidu_geo.py(因我只使用了百度,所以只需修改这个文件)
在 BaiduGeo 类,修改 geo2address (将经纬度转成地址)方法中的 url 变量指向。
继续用示例来测试。
from geo_tool import BaiduGeo
baidu_map_key = '你的 AK'
print(BaiduGeo(baidu_map_key).geo2address(22.52955, 113.93078))
print(BaiduGeo(baidu_map_key).get_city_name_by_geo(22.52955, 113.93078))
print(BaiduGeo(baidu_map_key).address2geo('北京市海淀区上地十街10号'))
物理地址到经纬度的转化成功,故障排除。
{'status': 0, 'result': {'location': {'lng': 113.93077999999997, 'lat': 22.52954999936777}, 'formatted_address': '广东省深圳市南山区桂庙路65', 'edz': {'name': ''}, 'business': '南油,南头,桂庙路口', 'addressComponent': {'country': '中国', 'country_code': 0, 'country_code_iso': 'CHN', 'country_code_iso2': 'CN', 'province': '广东省', 'city': '深圳市', 'city_level': 2, 'district': '南山区', 'town': '南
山街道', 'town_code': '440305002', 'distance': '31', 'direction': '附近', 'adcode': '440305', 'street': '桂庙路', 'street_number': '65'}, 'pois': [], 'roads': [], 'poiRegions': [], 'sematic_description': '', 'formatted_address_poi': '', 'cityCode': 340}}
深圳市
{'status': 0, 'result': {'location': {'lng': 116.3076223267197, 'lat': 40.05682848596073}, 'precise': 1, 'confidence': 80, 'comprehension': 100, 'level': '门址'}}
geo-tool · PyPI
百度地图API报{“status”:240,“message”:“APP 服务被禁用”},APP服务被禁用_振钧的博客-CSDN博客
逆地理编码 gc | 百度地图API SDK (baidu.com)