python 根据经纬度 调取和显示地图_python3调取百度地图API输出某地点的经纬度信息...

这篇博客介绍了如何使用Python调用百度地图API获取特定地址的经纬度信息。作者首先讲解了查看API接口和申请AK的过程,然后通过Python发送GET请求验证API,并展示了如何处理返回的非标准JSON格式。接着,博主探讨了在处理中文地址时遇到的问题及解决方案,最后给出了完整代码示例,展示如何根据用户输入的地址获取并输出其经度和纬度。
摘要由CSDN通过智能技术生成

1. 查看API接口说明

d47d4f46e532ea6d6d4fcd0fb02b34a0.png

注:callback的功能暂未研究

db175f93a884a0ad034913bfabe3dab3.png

4b3154579c446f508b9eab3c4e3fc32a.png

2. 申请自己的ak(类似于连通百度地图服务器的钥匙,请勿泄露)

6c2fdfc300289ebe865cd61a1955c1ff.png

注:调试阶段,应用名称随意填写即可

3.1 将下面的url输入到浏览器中(更换成自己的ak),验证返回参数

a60224e6212d5383f4ec38e7bfb0bb44.png

页面显示

showLocation&&showLocation({"status":0,"result":{"location":{"lng":116.3084202915042,"lat":40.05703033345938},"precise":1,"confidence":80,"comprehension":100,"level":"道路"}})

注意:返回的格式不是json格式(json格式是直接大括号开始的)

介绍一个基于Chrome的小插件——FeHelper,可以自动美化代码,如下图所示

61e2bb5366063755e2960643bae88307.png

3.2 使用python验证

注意:需要将示例重点callback参数去掉,才能返回标准的json格式,否则json.loads()函数会报错

1 importrequests2 importjson3 importpprint4

5 url = 'http://api.map.baidu.com/geocoder/v2/?address=北京市海淀区上地十街10号&output=json&ak=piQGckMZTubVw29GiBT1BDwDjwztm***'#隐藏掉了我的ak最后三位

6 res =requests.get(url)7

8 json_data =json.loads(res.text)9 pprint.pprint(json_data)#格式化打印,可读性更佳

结果

注意:使用pprint可以格式化打印结果

c74ec1d49d0329918cda9a61b15075bb.png

3.3 继续研究

1 #查询某城市中的具体地点,两种写法均可

2 url = 'http://api.map.baidu.com/geocoder/v2/?address=北京市海淀区上地十街10号&output=json&ak=piQGckMZTubVw29GiBT1BDwDjwztm***'

3 url = 'http://api.map.baidu.com/geocoder/v2/?address=海淀区上地十街10号city=北京市&output=json&ak=piQGckMZTubVw29GiBT1BDwDjwztm***'

4 #查询某个城市或者某个省

5 url = 'http://api.map.baidu.com/geocoder/v2/?address=北京市&output=json&ak=piQGckMZTubVw29GiBT1BDwDjwztm***'

4. 用户输入地点,输出经纬度(此处遇到了一个大坑!)

在使用requests.get(url)方法时,会将提交的url中的中文进行编码(即便你的python和网页的编码都是utf-8),url中的中文会显示成如下

http://api.map.baidu.com/geocoder/v2/?address=%E5%8C%97%E4%BA%AC%E5%B8%82&output=json&ak=piQGckMZTubVw29GiBT1BDwDjwztm***

需要使用urllib.parse.unquote()解码,但是解码完了虽然输出的url是正确的,但是再次使用requests.get()时又不对

注意一点是:这个方法不能在params中使用(params是字典格式,整体不支持;单独针对字典里的中文字符串进行这个操作也没有用,因为在字典里是正确的。只是在进行requests.get()时进行了url编码)

解决方案:

不使用reques.get(url,params)形式,使用format

url = 'http://api.map.baidu.com/geocoder/v2/?address={}&output=json&ak=piQGckMZTubVw29GiBT1BDwDjwztm***'.format(address)

5. 根据需求输出经度、纬度

全部代码

1 #-*- coding:utf-8 -*-

2 '''百度服务文档参考http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding'''

3 importrequests4 importjson5 importpprint6 importurllib.parse7

8 #查询某城市中的具体地点,两种写法均可

9 #url = 'http://api.map.baidu.com/geocoder/v2/?address=北京市海淀区上地十街10号&output=json&ak=piQGckMZTubVw29GiBT1BDwDjwztm***'

10 #url = 'http://api.map.baidu.com/geocoder/v2/?address=海淀区上地十街10号city=北京市&output=json&ak=piQGckMZTubVw29GiBT1BDwDjwztm***'

11 #查询某个城市

12 #url = 'http://api.map.baidu.com/geocoder/v2/?address=北京市&output=json&ak=piQGckMZTubVw29GiBT1BDwDjwztm***'

13

14 address = input('请输入地址:')15 '''

16 par = {17 'address':address,18 'output':'json',19 'ak':'piQGckMZTubVw29GiBT1BDwDjwztm***',20 }21 url = 'http://api.map.baidu.com/geocoder/v2/'22 res = requests.get(url,par)23 print(res.url)#中文进行了再编码24 url1 = urllib.parse.unquote(res.url)25 print(url1)#进行中文解码后,输出正确26 res1 = requests.get(url1)27 print(res1.url)#中文进行了再编码28 '''

29

30 url2 = 'http://api.map.baidu.com/geocoder/v2/?address={}&output=json&ak=piQGckMZTubVw29GiBT1BDwDjwztm***'.format(address)31 print(url2)32 res2 =requests.get(url2)33 print(res2)34 json_data =json.loads(res2.text)35 pprint.pprint(json_data)36 longitude = json_data['result']['location']['lng']37 latitude = json_data['result']['location']['lat']38 print(longitude,latitude)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值