【已解决】调用百度地图API将城市转换为经纬度问题

来源:互联网 发布:淘宝美工工作内容介绍 编辑:程序博客网 时间:2024/06/10 13:06

先获取城市名,如:安徽合肥、上海...,再通过调取百度地图的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 parses='安徽合肥市'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')


另:论坛里会有百度地图的相关技术人员发的技术贴,各类错误解释,可以逛逛。

官方介绍


阅读全文
1 0
原创粉丝点击