1. 程式人生 > 其它 >用python呼叫百度地圖API實現 地址轉經緯度並計算兩地之間的距離(下)

用python呼叫百度地圖API實現 地址轉經緯度並計算兩地之間的距離(下)

技術標籤:python小工具python

接上篇,我用的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)

最後看下執行結果吧
在這裡插入圖片描述
這個計算的直線距離,好了根據兩個地址計算兩地之間的距離就是這樣了