python調用百度地圖API得到兩地經緯度計算直線距離


程序簡介

程序封裝了兩個函數
一、調用百度地圖的API來獲得地點的經緯度
二、調用python的geopy模塊來計算兩個經緯度的直線距離
輸入:地點名稱
輸出:經緯度、直線距離

程序/數據集下載

點擊進入下載地址

代碼分析

申請百度地圖API(懶得申請可以直接點擊上面的下載地址,里面有我個人的應用)
進入網站http://lbsyun.baidu.com/apiconsole/key登錄后進入控制台創建應用,點擊應用可以看到應用的AK和SK碼

導入模塊、填寫AK、SK碼

# -*- coding: utf-8 -*-
from geopy.distance import geodesic
import urllib.parse
import hashlib
import requests

ak = "xxxxxxxxxxx"#百度地圖ak碼
sk = "xxxxxxxxxxx"#百度地圖sk碼

getCoordinate函數可以根據地名來獲得對應經緯度,這里拿秦皇島做測試

def getCoordinate(address):
    '''
    輸入地址輸出坐標(經度,維度)
    address:城市名
    '''
    #產生sn碼
    queryStr = "/geocoder/v2/?address="+address+'&output=json&ak='+ak
    encodedStr = urllib.parse.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
    rawStr = encodedStr+sk
    sn = (hashlib.md5(urllib.parse.quote_plus(rawStr).encode("utf8")).hexdigest())
    #生成url      
    url = urllib.parse.quote("http://api.map.baidu.com"+queryStr+"&sn="+sn,safe="/:=&?#+!$,;'@()*[]")
    result = requests.get(url).json()
    coordinate = (result['result']['location']['lng'],result['result']['location']['lat'])
    return coordinate
print('秦皇島經緯度',getCoordinate('秦皇島'))
秦皇島經緯度 (119.60853063334328, 39.941748102377936)

calDistance函數可以根據兩地名來獲得對應其直線距離,其中需要調用到上面的getCoordinate函數來獲取坐標,這里拿北京、秦皇島做測試

def calDistance(place1,place2):
    '''
    輸入兩個地點名,輸出直線距離(米)
    place1:地點1
    place2:地點2
    '''
    coor1 = getCoordinate(place1)#經緯度1
    coor2 = getCoordinate(place2)#經緯度2
    #這里輸入緯度在前,經度在后,所以做一下反轉
    distance = geodesic(coor1[::-1],coor2[::-1]).m#距離(米)
    return distance
distance = calDistance("北京市","秦皇島市")
print("秦皇島、北京距離約為%d米"%distance)
秦皇島、北京距離約為273145米


免責聲明!

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



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