Python脚本 百度地图API 输入经纬度得到所在位置/逆向地址解析
1.百度地图API需要申请并创建应用才能使用,申请地址:http://lbsyun.baidu.com/apiconsole/center#/home
2.参考文档:http://lbsyun.baidu.com/index.php?title=uri/api/web
3.例子中输入纬度,经度,输出所在城市名,实际返回的data中包含更详细的地址,这里只取了城市名
脚本如下:
import requests
import urllib
import hashlib
#1 输入纬度、经度
lat,lon=input("输入地区所属的纬度、经度\n").split(" ")
#2 计算校验SN(百度API文档说明需要此步骤)
ak="xxxxxx" # 参照自己的应用
sk="xxxxxx" # 参照自己的应用
url = "http://api.map.baidu.com"
query ="/geocoder/v2/?callback=renderReverse&location={0},{1}&output=json&pois=1&latest_admin=1&ak={2}".format(lat, lon, ak)
encodedStr = urllib.parse.quote(query, safe="/:=&?#+!$,;'@()*[]")
sn=hashlib.md5(urllib.parse.quote_plus(encodedStr + sk).encode()).hexdigest()
#3 使用requests获取返回的json
response=requests.get("{0}{1}&sn={2}".format(url,query,sn))
data=response.text
#4 处理json
city_name=eval(data[29:-1])['result']['addressComponent']['province']
print(data)
print(city_name)
最重要的SN和AK:
测试:
data:
renderReverse&&renderReverse({"status":0,"result":{"location":{"lng":139.69999999999988,"lat":35.699999896690439},"formatted_address":"大久保通り, Nakano, Tokyo, Japan","business":"","addressComponent":{"country":"Japan","country_code":26000,"country_code_iso":"JPN","country_code_iso2":"JP","province":"Tokyo","city":"Nakano","city_level":1,"district":"","town":"","adcode":"0","street":"大久保通り","street_number":"","direction":"","distance":""},"pois":[],"roads":[],"poiRegions":[],"sematic_description":"","cityCode":26041}})