概述
先获取城市名,如:安徽合肥、上海...,再通过调取百度地图的API来获取相应的经纬度。
url 正确格式应该为:
url = 'http://api.map.baidu.com/geocoder/v2/?address=%s&output=json&ak=你的密钥匙(AK)' % (name)
注意 3 点:
1、在百度地图开放端申请 ak 时,准备用浏览器访问,应用类型就选用 “ 浏览器端 ” ,“启用服务”这一项默认情况下没有全选,所以,打开 url 时若报错,如:{ status 240 message "APP 服务器被禁用" },那你一定要去看看这一项,检查相关的服务有没有打开。
2、url 格式一定要对。
格式不对,会报错:
INVALID_PARAMETERS 非法参数,参数错误时候给出。最后,打开 url 后,输出的形式为:
{"status":0,"result":{"location":{"lng":117.28269909168304,"lat":31.86694226068694},"precise":0,"confidence":12,"level":"城市"}}
3、对于url 中文混搭
如果 name是中文,那么在用urllib.request请求时会报错:
# url 含中文时
url = 'http://api.map.baidu.com/geocoder/v2/?address=安徽合肥市s&output=json&ak=uYr0vs7KOcs8I5y6e4Y479CyW6xOC3GV'
req = urllib.request.Request(url)
print(req)
html = urllib.request.urlopen(req) # 获取页面
jsons = html.read().decode('utf-8') #转化为str类型
#会报错:
UnicodeEncodeError: 'ascii' codec can't encode characters
解决:对中文部分进行编码 parse.quote()
#### 处理混合中文的 url,先用 parse.quote()
from urllib import parse
s='安徽合肥市'
h = parse.quote(s)
url = 'http://api.map.baidu.com/geocoder/v2/?address=%s&output=json&ak=uYr0vs7KOcs8I5y6e4Y479CyW6xOC3GV' % (h)
req = urllib.request.urlopen(url)
# print(req)
html=req.read().decode('UTF-8') #转为 str
# html=req.read() #<class 'bytes'>
# print(type(html))
## 输出为:{"status":0,"result":{"location":{"lng":117.28269909168304,"lat":31.86694226068694},"precise":0,"confidence":12,"level":"城市"}}
hjson = json.loads(html) # 转化为dict类型
lng_lat = ['', '']
if hjson['result']:
lng = hjson['result']['location']['lng'] # 经度
print(type(lng)) #<class 'float'>
# print(lng)
lat = hjson['result']['location']['lat'] # 纬度
lng_lat = [lng, lat]
print(lng_lat) # 如 :[117.28269909168304, 31.86694226068694]
else:
print('error')
另:论坛里会有百度地图的相关技术人员发的技术贴,各类错误解释,可以逛逛。
官方介绍
最后
以上就是谨慎飞鸟为你收集整理的【已解决】调用百度地图API将城市转换为经纬度问题的全部内容,希望文章能够帮你解决【已解决】调用百度地图API将城市转换为经纬度问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复