程序簡介
程序封裝了兩個函數
一、調用百度地圖的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米
