地图距离计算,调用高德地图api
地图地址距离计算,调用高德地图api
·
高德开发平台上申请个人开发者API,文档与支持里的Web服务 API进行申请,每天有免费调用额度。
替换程序中的API,固定地址,通勤距离表中放入一列地址。
实现了固定地址到表中每一个地址的实际距离计算,后续修改后也可实现两列不同地址之间的距离批量计算
结果将在后面生成一列,保存副本,生成距离单位为km。
注意事项:地址务必填写省、市,否则容易出错。
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 7 14:49:37 2025
@author: admin
"""
import pandas as pd
import requests
from geopy.distance import geodesic
import time
from urllib.parse import quote
# 高德地图API配置
AMAP_KEY = "替换为你的高德API Key" # 替换为你的高德API Key
AMAP_GEOCODE_URL = "https://restapi.amap.com/v3/geocode/geo"
# 读取Excel文件
df = pd.read_excel(r"D:\conda0\通勤距离.xlsx", index_col=None, header=0)
# 获取坐标的函数(使用高德API)
def get_amap_coordinates(address):
try:
params = {"address": address, "key": AMAP_KEY, "output": "json"}
response = requests.get(AMAP_GEOCODE_URL, params=params)
data = response.json()
if data.get("status") == "1" and int(data.get("count", 0)) > 0:
location = data["geocodes"][0]["location"].split(",")
return (float(location[1]), float(location[0])) # 纬度, 经度
else:
print(f"地址解析失败: {address}, 原因: {data.get('info', '未知原因')}")
return None
except Exception as e:
print(f"解析地址 {address} 时出错: {str(e)}")
return None
# 固定居住地址的坐标
home_address = "固定居住地址"
home_coord = get_amap_coordinates(home_address)
time.sleep(0.2) # 控制请求频率
# 定义计算距离的函数
def calculate_distance(row):
work_address = row["现住址"] # 使用现住址作为工作地址
work_coord = get_amap_coordinates(work_address)
time.sleep(0.5) # 控制请求频率
if work_coord and home_coord:
distance = geodesic(work_coord, home_coord).kilometers
return round(distance, 2)
else:
return None # 或返回空值/默认值
# 应用函数计算距离(并行计算可能更高效,但免费API需注意频率)
df["Distance"] = df.apply(calculate_distance, axis=1)
# 保存结果
df.to_excel("通勤距离_结果.xlsx", index=False)

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)