Python调用百度地图API计算两地驾车距离完整教程
本文详解如何利用Python调用百度地图开放平台的地点检索服务(Place API)获取经纬度,并结合批量算路服务(RouteMatrix API)计算两地间的驾车规划距离。文章包含从创建应用获取AK、编写核心函数到批量处理Excel数据的完整代码示例与操作步骤。
百度地图开放平台
登录百度地图开放平台控制台,激活并创建服务端应用。应用名称可自定义,白名单校验建议设置为0.0.0.0/0以允许所有IP访问。创建完成后,务必妥善保管控制台显示的访问应用AK(密钥),该字符串是后续调用API的凭证,严禁泄露。

介绍需要用到的API
本方案仅使用百度地图Web服务API,具体文档参考官方开发指南。
1.地点检索服务
地点检索服务(Place API)提供城市、圆形区域及矩形区域的POI检索功能,开发者可借此获取地点的基础或详细地理信息。
本例利用该接口提取指定地点的经纬度(lat, lng)参数。
2.批量算路服务
批量算路服务(RouteMatrix API)通过HTTP/HTTPS提供轻量级路线规划接口,支持中国大陆地区。用户输入起点和终点坐标,即可获取驾车路线距离与行驶时间,当前支持V2.0版本。
本例利用该接口计算两个地点(基于经纬度)之间的路线规划距离。
编写Python程序
0.需要用到的模块
- requests
- json
1.获取对应地点的经纬度
将传入的address参数通过地点检索服务解析,返回格式为“纬度,经度”的字符串及查询状态码。若查询失败,状态码将非0。
请注意将代码中的AK替换为前文控制台获取的真实密钥。
def getPosition(address):
url = r"http://api.map.baidu.com/place/v2/search?query={}®ion=全国&output=json&ak={}".format(
address,
AK # 这里是一开始截图用红色圈起来的部分
)
res = requests.get(url)
json_data = json.loads(res.text)
if json_data['status'] == 0:
lat = json_data["results"][0]["location"]["lat"] # 纬度
lng = json_data["results"][0]["location"]["lng"] # 经度
else:
print("[ERROR] Can not find {}.".format(address))
return "0,0", json_data["status"]
return str(lat) + "," + str(lng), json_data["status"]
2.获取两地之间的距离
将两个地点的经纬度传入批量算路服务,计算路线规划距离。本示例默认采用驾车模式(参数为'driving')。
同样需确保代码中的AK已替换为有效密钥。
def getDistance(start, end):
url = "http://api.map.baidu.com/routematrix/v2/driving?output=json&origins={}&destinations={}&ak={}".format(
start,
end,
AK # 这里是一开始截图用红色圈起来的部分
)
res = requests.get(url)
content = res.content
jsonv = json.loads(str(content, "utf-8"))
dist = jsonv["result"][0]["distance"]["value"]
return dist
3.合并函数调用
封装函数,输入两个地点名称并返回距离。若任一地点查询失败,则返回值设为-1。
def calcDistance(startName, endName):
start, status1 = getPosition(startName)
end, status2 = getPosition(endName)
if status1 == 0 and status2 == 0:
return getDistance(start, end)
else:
return -1
4.进行简单的功能测试
运行代码输出北京至成都的驾车距离,单位默认为米。

5.对Excel中的批量地点计算距离
读取data.xlsx文件中的所有地点数据,计算每对地点间的距离,并将结果保存至本地result.xlsx文件。此处将距离单位转换为千米。主模块代码如下:
if __name__ == "__main__":
data = pd.read_excel("data.xlsx")
res = []
for i in range(0, len(data)):
startName = data.iloc[i, 0]
endName = data.iloc[i, 1]
dist = calcDistance(startName, endName)
res.append([startName, endName, dist / 1000])
pd.DataFrame(res).to_excel(
"result.xlsx",
header=["起点", "终点", "距离"],
index=None,
encoding="utf-8"
)
其中data.xlsx文件的内容为:

对应的输出result.xlsx文件内容如下:

附录
# 本次整体的源代码
AK = "修改为你自己的AK码即可使用"
import pandas as pd
import requests
import json
def getPosition(address):
url = r"http://api.map.baidu.com/place/v2/search?query={}®ion=全国&output=json&ak={}".format(
address,
AK # 这里是一开始截图用红色圈起来的部分
)
res = requests.get(url)
json_data = json.loads(res.text)
if json_data['status'] == 0:
lat = json_data["results"][0]["location"]["lat"] # 纬度
lng = json_data["results"][0]["location"]["lng"] # 经度
else:
print("[ERROR] Can not find {}.".format(address))
return "0,0", json_data["status"]
return str(lat) + "," + str(lng), json_data["status"]
def getDistance(start, end):
url = "http://api.map.baidu.com/routematrix/v2/driving?output=json&origins={}&destinations={}&ak={}".format(
start,
end,
AK # 这里是一开始截图用红色圈起来的部分
)
res = requests.get(url)
content = res.content
jsonv = json.loads(str(content, "utf-8"))
dist = jsonv["result"][0]["distance"]["value"]
return dist
def calcDistance(startName, endName):
start, status1 = getPosition(startName)
end, status2 = getPosition(endName)
if status1 == 0 and status2 == 0:
return getDistance(start, end)
else:
return -1
if __name__ == "__main__":
data = pd.read_excel("data.xlsx")
res = []
for i in range(0, len(data)):
startName = data.iloc[i, 0]
endName = data.iloc[i, 1]
dist = calcDistance(startName, endName)
res.append([startName, endName, dist / 1000])
pd.DataFrame(res).to_excel(
"result.xlsx",
header=["起点", "终点", "距离"],
index=None,
encoding="utf-8"
)
到此这篇关于Python利用百度地图获取两地距离的文章就介绍到这了,更多相关Python 百度地图获取两地距离 内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









