1. 程式人生 > WINDOWS開發 >百度地圖API呼叫

百度地圖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,;‘@()*[]")

# 在最後直接追加上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程式碼的檔案