zoukankan      html  css  js  c++  java
  • python3调取百度地图API输出某地点的经纬度信息

    1. 查看API接口说明

    地址:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding

    注:callback的功能暂未研究

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

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

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

    页面显示

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

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

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



    3.2 使用python验证

    注意:需要将示例重点callback参数去掉,才能返回标准的json格式,否则json.loads()函数会报错
    1 import requests
    2 import json
    3 import pprint
    4 
    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可以格式化打印结果

    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 import requests
     4 import json
     5 import pprint
     6 import urllib.parse
     7 
     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)
  • 相关阅读:
    给最小化托盘增加右键菜单
    (转)c#实现开机自启动
    Socket代码
    (转)C# Socket简单例子(服务器与客户端通信)
    (转)C# Socket异步通信
    (转)winform pictureBox后台显示图片
    验证DataGridView单元格的值
    批处理判断是否有.net环境
    Winform判断是否已启动
    linux 下 apache启动、停止、重启命令
  • 原文地址:https://www.cnblogs.com/aby321/p/10138360.html
Copyright © 2011-2022 走看看