使用geopy调用ArcGIS地理编码未返回经纬度的原因排查
问题根源
直接打印arcgis.geocode()的返回值时,触发的是返回结果Location对象的默认字符串转换逻辑,这个逻辑只会输出匹配到的标准地址文本,不会主动展示经纬度、服务端原始响应等其他属性,不是接口没返回完整数据,是打印方式不对。
正确取值方式
你需要显式调用返回对象的对应属性,才能拿到经纬度等扩展信息,参考代码如下:
from geopy.geocoders import ArcGIS arcgis = ArcGIS() location = arcgis.geocode("2810 Fannin Ave, Midland, TX 79705") # 匹配到的标准地址(即你之前打印看到的内容) print("匹配地址:", location.address) # 纬度、经度 print("纬度:", location.latitude) print("经度:", location.longitude) # 坐标点元组(格式为(纬度, 经度, 海拔)) print("坐标点:", location.point) # ArcGIS服务返回的全量原始响应,包含地址分区、匹配度评分等所有字段 print("原始响应:", location.raw)
注意事项
- 只有当
geocode()返回None时,才代表地址无匹配结果、请求失败;你当前能返回地址文本,说明接口请求正常、地址已经匹配成功。 - ArcGIS公开地理编码接口有默认请求频率限制,批量查询时建议设置合理的
timeout参数,每次请求间隔1秒以上,避免被服务端拦截。 - 如果需要拆分获取街道、城市、邮编等细分地址字段,可以直接解析
location.raw中返回的结构化地址数据。
内容的提问来源于stack exchange,提问作者Bryson Lichtenberg
相关产品推荐
相关产品推荐

