zoukankan      html  css  js  c++  java
  • 百度地图API调用

    百度地图API调用

    这次主要用到的是地理编码服务

    1. 什么是地理编码服务

    1.1 介绍

    地理编码服务(又名Geocoder)是一类Web API接口服务;

    地理编码服务提供将结构化地址数据(如:北京市海淀区上地十街十号)转换为对应坐标点(经纬度)功能;

    地理编码服务当前未推出国际化服务,解析地址仅限国内;

    白话说就是把一个地点的经度和纬度返回

    1.2 功能介绍

    用户可通过该功能,将结构化地址(省/市/区/街道/门牌号)解析为对应的位置坐标。地址结构越完整,地址内容越准确,解析的坐标精度越高。

    lng: 经度 lat: 纬度

    2. 使用流程

    2.1 注册开发者

    http://lbsyun.baidu.com/apiconsole/center

    填写完信息后, 邮箱会收到一条激活开发者的邮件, 点击激活即可.

    2.2 创建应用

    http://lbsyun.baidu.com/apiconsole/key#/home

    应用名称可以随便填写, 请求校验方式为IP白名单校验/当然你也可以用sn校验方式, 但是sn后面还要写代码获取sn

    所以这里我就省事用ip白名单校验. 0.0.0.0/0 代表任何ip都可以访问.

    2.3 阅读官方文档

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

    http://api.map.baidu.com/geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation
    

    注意: 网上很多教程都是老版本的接口了, 老用户可以使用但是新用户不可以, 所以这一点一定要注意一下.

    具体参数, 返回值, 以及状态码我就不一一介绍了, 详情请看官方文档.

    2.4 实例代码

    如果你已经是一个经常写接口的老司机了, 那么这段话你可以选择不看, 主要是大致讲解一些关于接口的一些白话.

    首先这个接口的作用是返回一个地点的经纬度, 那么这个经纬度的查询是谁做的呢? 就是这个接口做的事. 你可以

    把接口想象成一个人, 这个人只会最一件事, 那就是你告诉他一个地点,他告诉你这个地点的经纬度. 具体这个人是

    怎么实现的, 这你就不需要考虑了.

    # 只需要把 ak=你创建应用的ak 改为你自己应用的ak就行了 
    
    import requests
    import json
    import re
    
    # 获取用户输入的地点
    region = input('请输入你要查询的地点:').strip()
    # api接口
    url = f'http://api.map.baidu.com/geocoding/v3/?address={region}&output=json&ak=你创建应用的ak&callback=showLocation'
    # 发送get请求
    response = requests.get(url=url)
    # 解析数据
    result = re.findall(r'showLocation&&showLocation((.*?))', response.text,re.S)[0]
    data = json.loads(result)
    # 获取 经度 纬度  
    lng = data['result']['location']['lng']
    lat = data['result']['location']['lat']
    level = data['result']['level']
    print('{} 经度:{} 纬度:{} 行业:{}'.format(region, lng, lat, level))
    

    查看应用ak

    如果返回的状态码为 240 建议重新创建一个应用即可

    3.补充

    3.1 sn校验

    如果有朋友选择了sn检验方式 就需要查看一下sn的校验方法

    官方文档: http://lbsyun.baidu.com/index.php?title=lbscloud/api/appendix

    这时你不但需要 ak 还需要 sk

    请求的url是:

    http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak&sn=7de5a22212ffaa9e326444c75a58f9a0
    //后面的sn就是要计算的,sk不需要在url里出现,但是在计算sn的时候需要sk(假设sk=yoursk) 下面提供java、PHP、C#、python 2.7的参考代码。
    

    3.2 计算sn

    看到这里你肯定会说我pycharm都打开了,你给我看python2.7 ?

    python 2.7参考代码如下:

    # -*- coding: utf-8 -*- 
    # 第一行必须有,否则报中文字符非ascii码错误
    import urllib
    import hashlib
    
    # 以get请求为例http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak
    queryStr = '/geocoder/v2/?address=百度大厦&output=json&ak=yourak'
    
    # 对queryStr进行转码,safe内的保留字符不转换
    encodedStr = urllib.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
    
    # 在最后直接追加上yoursk
    rawStr = encodedStr + 'yoursk'
    
    # md5计算出的sn值7de5a22212ffaa9e326444c75a58f9a0
    # 最终合法请求url是http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak&sn=7de5a22212ffaa9e326444c75a58f9a0
    print hashlib.md5(urllib.quote_plus(rawStr)).hexdigest()
    

    还好我准备了python3的实例代码:

    # -*- coding: utf-8 -*-
    # 第一行必须有,否则报中文字符非ascii码错误
    import urllib.request, urllib.parse, urllib.error
    import hashlib
    
    # 以get请求为例http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak
    queryStr = '/geocoder/v2/?address=百度大厦&output=json&ak=你的ak'
    
    # 对queryStr进行转码,safe内的保留字符不转换
    encodedStr = urllib.parse.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
    
    # 在最后直接追加上yoursk
    rawStr = encodedStr + '你的sk'
    
    # md5计算出的sn值7de5a22212ffaa9e326444c75a58f9a0
    # 最终合法请求url是http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak&sn=7de5a22212ffaa9e326444c75a58f9a0
    print(hashlib.md5(urllib.parse.quote_plus(rawStr).encode()).hexdigest())
    

    ok到这里就结束了, 只需要那把 url 改为你的 url 即可

    3.3 关与py2转py3

    不知道你好奇不好奇我是怎么将py2的代码转成py3的, 实际上很多官方文档里面的示例代码还是python2.X代码,

    当然有的也能直接在python3上运行, 但是为了保证万无一失, 最好还是转成python3

    这里采用的是python3自带的一个内置模块2to3.py

    上教程:

    1. 切换到你的python安装路径下找到 Tools/scripts/2to3.py

    2. 复制2to3.py到你需要转换代码的同目录下

      如: 这里我想把demo.py中的py2代码转换成python3代码

    1. 命令行/pycharm的Terminal 切换到这两个文件的路径下

    2. 执行命令 python 2to3.py -w demo.py 即可

    3. 新生成一个文件

    这时 demo.py中代码就是python3的代码了, demo.py.bak是原python2代码的文件

  • 相关阅读:
    Loj #6307. 「雅礼国庆 2017 Day1」Clique
    bzoj 4457: 游戏任务
    Codeforces 375 D Tree and Queries
    Codeforces 837 E Vasya's Function
    [POI2008]BLO
    Codeforces 451 E Devu and Flowers
    洛谷 P4318 完全平方数
    [JSOI2016]反质数序列
    bzoj 4320: ShangHai2006 Homework
    bzoj4454 C Language Practice
  • 原文地址:https://www.cnblogs.com/xcymn/p/13118131.html
Copyright © 2011-2022 走看看