公司需求批量计算两地之间行车距离,故此记录一下,数据接口采用高德地图开发者api,需要注册,注册后免费版的数据量已够满足大多数使用。
import pandas as pd
import requests
import json
AK = "*******" #你自己的注册码。
def getLocation(address):
url = f"https://restapi.amap.com/v3/geocode/geo?address={address}&output=json&key={AK}" #高德地图
res = requests.get(url)
json_data = json.loads(res.text)
if json_data["status"] == "1": # 成功时返回1
lnglat = json_data["geocodes"][0]["location"]
else:
return "no data", json_data["status"]
return lnglat, json_data["status"]
def getDistance(start, end):
url = f"https://restapi.amap.com/v3/direction/driving?origin={start}&destination={end}&output=json&key={AK}"
res = requests.get(url)
json_data = json.loads(res.text)
if json_data["status"] == "1":
return json_data["route"]["paths"][0]["distance"]
else:
return -1
def calDistance(startAddr, endAddr):
start, status1 = getLocation(startAddr)
end, status2 = getLocation(endAddr)
if status1 == "1" and status2 == "1":
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 = int(calDistance(startAddr, endAddr))
result.append([startAddr, endAddr, dist/1000])
pd.DataFrame(result).to_excel(
"result.xlsx",
header=["出发地", "目的地", "距离"],
encoding="utf-8"
)
版权声明:本文为weixin_45249324原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。