用python呼叫百度地圖API實現 地址轉經緯度並計算兩地之間的距離(下)
阿新 • • 發佈:2021-01-22
接上篇,我用的AK是瀏覽器端的
第一段根據給出的地址返回經緯度
輸入地址越詳細經緯度越準確
import json
from math import radians, cos, sin, asin, sqrt
import requests
#根據地址返回經緯度
def getPosition(ak, dw):
url = 'http://api.map.baidu.com/geocoding/v3/?address={Address}&output=json&ak={Ak}'.format(Address=dw, Ak= ak)
res = requests.get(url)
json_data = json.loads(res.text)
if json_data['status'] == 0:
lat = json_data['result']['location']['lat'] # 緯度
lng = json_data['result']['location']['lng'] # 經度
else:
print("Error output!")
print(json_data)
return json_data['status']
return lat,lng
第二段根據經緯度計算距離`
def calDistance(ak,place1,place2):
'''
輸入兩個地點名,輸出直線距離(千米)
place1:地點1
place2:地點2
'''
lat1,lng1 = getPosition(ak,place1)#經緯度1
lat2,lng2 = getPosition(ak,place2)#經緯度2
lng1, lat1, lng2, lat2 = map(radians, [float(lng1) , float(lat1), float(lng2), float(lat2)]) # 經緯度轉換成弧度
dlon=lng2-lng1
dlat=lat2-lat1
a=sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
distances =2*asin(sqrt(a))*6371*1000 # 地球平均半徑,6371km
distance= round(distances/1000,3)
return distance
第三段,有時候我們會進行模糊搜尋,但是我們不確定,搜尋的和我們想要的是不是同一個,這個時候就需要把返回的詳細地址拿到
#返回詳細地址
def getplace_update(ak, dw):
add_url = 'http://api.map.baidu.com/geocoding/v3/?address={Address}&output=json&ak={Ak}'.format(Address=dw, Ak=ak)
(lat, lng) = getPosition(ak,add_url)
url = 'http://api.map.baidu.com/reverse_geocoding/v3/?ak=' + ak + '&output=json&coordtype=wgs84ll&location='+str(lat)+','+str(lng)
result = requests.get(url)
text = json.loads(result.text)
address = text.get('result').get('addressComponent')
city = address.get('city')
province = address.get('province')
district = address.get('district')
if city == province:
place = province+district
else:
place = province + city + district
return place
剩下的事就是寫main函式呼叫的事了
if __name__ == '__main__':
ak = '你的ak'
place1=input("輸入起點:")
place11=getplace_update(ak,place1)
print(place11)
place2=input("輸入終點:")
place22=getplace_update(ak,place2)
print(place22)
distance = calDistance(ak,place1,place2)
print("%s"%place11,"和%s之間的距離"%place22,"為%d千米"%distance)
最後看下執行結果吧
這個計算的直線距離,好了根據兩個地址計算兩地之間的距離就是這樣了