写在前面:
本文通过调用百度API,实现经纬度转换为省市县,适合2019.6.18之后的注册百度地图开放平台的新用户,为v3.0版本,原因会在后面讲。
第一步:申请百度地图的密钥AK
- 只有申请完才能调用百度API,实现这个功能。申请网址:http://lbsyun.baidu.com/apiconsole/key?application=key。
- 详细步骤可以看链接:https://blog.csdn.net/qq_27512271/article/details/82994240。
- 在“功能与服务”里面可以看到“逆地理编码”的服务文档,请求参数和返回结果参数都有,可以按需使用。服务文档链接:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding-abroad,如下图:
第二步:python实现
输入:某点的经度和纬度的float格式信息,坐标格式是WGS84
输出:该点的省、市、区/县
注意:url变量为需要修改成你自己的密钥
url = 'http://api.map.baidu.com/reverse_geocoding/v3/?ak=‘你刚才申请的密钥' \
'&output=json&coordtype=wgs84ll&location=' + loc
- 代码如下
def getarea(lat, lng):
loc = str(lat) + "," + str(lng)
url = 'http://api.map.baidu.com/reverse_geocoding/v3/?ak=‘你刚才申请的密钥' \
'&output=json&coordtype=wgs84ll&location=' + loc
req = urllib.request.urlopen(url) # json格式的返回数据
res = req.read().decode("utf-8") # 将其他编码的字符串解码成unicode
mystr = json.loads(res)
# #get()获取json里面的数据
jsonResult = mystr.get('result')
address = jsonResult.get('addressComponent')
province = address.get('province') # 省
city = address.get('city') # 市
district = address.get('district') # 县级
area = province + city + district
return area
前期存在的问题:
网上有很多经纬度定位地区的例子,但申请完百度AK之后,还是不能用,显示KeyError: ('result', 'occurred at index 0')。最后通过查看百度API的服务文档才发现,网上博客的代码大多都是v2.0版本,但2019.6.18起注册的新用户不能使用,所以一直报错,改成v3.0版本接口就可以用了。