与上篇高德地图API的有微小差别,主要是接口获取数据格式的差异,也放上来记录一下。
import pandas as pd
import requests
import json
AK = "*******" # 注册百度地图开发者后获得的key
def getLocation(address):
url = f"https://api.map.baidu.com/geocoding/v3/?address={address}&output=json&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:
return "no data", json_data["status"]
return str(lat) + "," + str(lng), json_data["status"]
def getDistance(start, end):
url = f"https://api.map.baidu.com/directionlite/v1/driving?origin={start}&destination={end}&ak={AK}"
res = requests.get(url)
json_data = json.loads(res.text)
if json_data["status"] == 0:
return json_data["result"]["routes"][0]["distance"]
else:
return -1
def calDistance(startAddr, endAddr):
start, status1 = getLocation(startAddr)
end, status2 = getLocation(endAddr)
if status1 == 0 and status2 == 0:
return getDistance(start, end)
else:
return -1
if __name__ == "__main__":
data = pd.read_excel("bj.xlsx")
result = []
for i in range(0, len(data)):
startAddr = data.iloc[i,0]
endAddr = data.iloc[i,1]
dist = calDistance(startAddr, endAddr)
result.append([startAddr, endAddr, dist/1000])
pd.DataFrame(result).to_excel(
"result.xlsx",
header=["出发地", "目的地", "距离"],
encoding="utf-8"
)


