高德开发平台上申请个人开发者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)

Logo

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

更多推荐