百度地圖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代碼的文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM