在python中使用geopy的百度API解析经纬度

需求

将经纬度解析为地址,使用geopy默认提供的东西解析单个经纬度够用了,但是成批的解析会经常超时。查阅资料发现可以在geopy中使用百度的api。超时的问题就容易解决了。

百度api

webapi/guide/webservice-geocoding-abroad - Wiki点击链接到百度的全球逆地理编码服务,在服务文档中可以查看到详细的接口信息。按步骤很容易创建自己的服务接口。http://lbsyun.baidu.com/apiconsole/key 在这个链接中创建服务。默认全部勾选就不管了。重要的是应用AK和请求校验方式改为sn校验方式得到的SK
在python中使用geopy的百度API解析经纬度_第1张图片

geopy

参考时经常出现的用法

from geopy.geocoders import Nominatim
geolocator=Nominatim()
location= geolocator.reverse("39.8694900405,116.0013866959")
print(location.address)
# 京昆路, 房山区, 中国
print(location.raw['address']['country'])
# 中国
print(location.raw)
# {'place_id': '187024808', 
#'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright',
#'osm_type': 'way', 'osm_id': '537178945', 'lat': '39.8730714477888', 'lon': '116.000163834226', 
#'display_name': '京昆路, 房山区, 中国',
# 'address': {'road': '京昆路', 'county': '房山区', 'country': '中国', 'country_code': 'cn'},
# 'boundingbox': ['39.8639144', '39.8769233', '115.9720381', '116.015403']}

Welcome to GeoPy’s documentation! — GeoPy 1.17.0 documentation链接给出了geopy的官方地址,遇到问题还可以去github上找一找看看源码。
不管是地址到经纬度还是经纬度到地址,最后都和代码中的location相关。我们重点关注location.raw,可以把location.raw的内容放到json可视化工具查看。想要用的时候location.raw[‘key’]轻松解决。
在python中使用geopy的百度API解析经纬度_第2张图片

百度API的用法

from geopy.geocoders import Baidu
geocoder = Baidu(
            api_key='ak',#自己修改
            security_key='sk',#自己修改
            timeout=200
        )
lr=[]
ilb=[('a',39.8694900405,116.0013866959),('b',39.8694900405,116.0013866959)]
for _,i in enumerate(ilb):
    location= geocoder.reverse(i[1]+','+i[2])
    lr.append((i[0],location.raw))
for _,i in enumerate(lr):
	addr=i[1]['addressComponent']
	addr['country']
	print(addr)  
	#     print(i)
	if _>1:
		break

如果容易超时建议把timeout调高

你可能感兴趣的:(教程)