数据获取|通过高德API批量获取地址经纬度(Python)

一、背景与目标

  • 需求场景:
    • 批量获取Excel表格中地址的经纬度坐标,用于地图可视化或数据分析。

  • 解决的问题:
    • 地址标准化:非结构化地址需清洗为API可解析的格式。

    • API调用限制:并发请求、日调用量限制。

    • 错误处理:应对API返回的多种错误类型(如密钥错误、并发超限、地址解析失败等)

  • 核心代码逻辑:
    • 读取Excel文件,遍历地址列。

    • 调用高德地理编码API。

    • 解析返回的JSON数据,提取经纬度。

    • 错误处理与重试机制。

  • 代码优化点:
    • 添加请求间隔(如time.sleep(0.5))。

    • 记录失败地址,支持重试和二次修改。

二、完整流程与步骤

1.环境准备(安装Python、VSCode及扩展插件)
2.API获取
  • 注册开发者账号:

  • 进入以下页面,完善信息,如图所示。

  • 创建应用并获取 API Key : 
    • 回到首页,鼠标点击右上角“控制台”,如图所示。

    • 侧边栏里,点击"应用管理"下的“我的应用” -> 点击右侧“创建新应用”,如图所示。
    • 根据自身需要,填写“应用名称”和选择“应用类型” ,然后点击“新建”即可。

    • 鼠标点击右上角“添加Key”,如图所示。
    •  自命名Key名称 -> 选择“Web服务”平台,勾选阅读并同意相关协议 -> 点击“提交”,即可获取API Key,如图所示。

3.数据准备
  • 数据格式:
  • 地址清洗:
    • 确保地址包含省市区(如“广东生深圳市南山区科技园”)。(tip:没有“省”“市”也没关系,如果报错则需相应添加)

    •  移除模糊词(如“附近”“对面”)、特殊符号(如#、())。(tip:可以借助Excel的“查找和选择”功能批量处理,如图所示)

4.代码实现      
  • 打开VS Code -> 点击“打开文件夹”,选择存放目标Excel表格的文件夹,如图所示。

  • 点击“新建文件” -> 输入Python文件名称(如test.py),如图所示。

  •  复制粘贴如下代码,注意:代码中的API key表格名称都需要替换成自己的。

    import requests
    import pandas as pd
    import time
    
    # 高德API参数
    key = "你的API Key"
    url = "https://restapi.amap.com/v3/geocode/geo"
    
    # 读取Excel数据
    df = pd.read_excel("你的表格名称及后缀")
    
    # 请求参数
    max_retries = 3
    retry_delay = 1  # 秒
    request_interval = 0.5  # 秒
    
    failed_addresses = []
    
    for index, row in df.iterrows():
        address = row["地址"] #如果报错,可检查这里表格储存地址的列名是否对应
        params = {
            "address": address,
            "key": key,
        }
        for attempt in range(max_retries):
            try:
                response = requests.get(url, params=params)
                result = response.json()
                if result["status"] == "1" and result["geocodes"]:
                    location = result["geocodes"][0]["location"]
                    lng, lat = location.split(",")
                    df.at[index, "经度"] = lng
                    df.at[index, "纬度"] = lat
                    break
                else:
                    #如果报错,可复制粘贴“返回结果”的内容,询问AI进行调试
                    print(f"地址 {address} 第{attempt+1}次尝试失败:{result.get('info')},返回结果:{result}") 
                    time.sleep(retry_delay)
            except Exception as e:
                print(f"请求异常:{e}")
                time.sleep(retry_delay)
        else:
            df.at[index, "经度"] = "失败"
            df.at[index, "纬度"] = "失败"
            failed_addresses.append(address)
        
        time.sleep(request_interval)  # 控制请求频率
    
    # 保存结果
    df.to_excel("你的表格名称_带坐标.xlsx", index=False)
    
    # 保存失败地址
    if failed_addresses:
        with open("failed_addresses.txt", "w") as f:
            f.write("\n".join(failed_addresses))
        print(f"有{len(failed_addresses)}个地址解析失败,已保存到文件。")

    • 找到菜单栏 -> 点击“终端” -> “新建终端”,如图所示。

    • 输入以下命令:
      • 安装依赖
        pip install pandas requests openpyxl

      • 运行Python文件(tip:python+自己创建的Python文件名称及后缀)
        python test.py
    4.常见报错与解决方案                
    • DAILY_QUERY_OVER_LIMIT(原因:日调用量超限)(解决:升级商用套餐或等待次日重置)
    • CUQPS_HAS_EXCEEDED_THE_LIMIT(原因:并发请求超限)(解决:降低请求频率(如每秒1次),分批处理数据)
    • USERKEY_PLAT_NOMATCH(原因:API Key与平台类型不匹配)(解决:检查Key绑定的平台,注意需选“Web服务”)
    • ENGINE_RESPONSE_DATA_ERROR(原因:地址无法解析)(解决:根据failed_addresses.txt文件,找到错误地址,打开高德官网输入目标名称检查地址是否更新,手动修正表格里的失败地址)

    希望以上流程总结和复用代码对大家有所帮助,欢迎各位在评论区指正或留下新遇到的问题,一起交流进步!

    使用高德地图API批量获取经纬度,通常涉及到地点批量编码或逆地理编码功能。以下是基本步骤: 1. **注册并获取API key**:首先,登录高德地图开放平台(https://lbs.amap.com),注册成为开发者并创建项目,申请到API Key。 2. **选择合适的API**:对于批量地点转换,可以选择`batchgeocode`或者`reverse_geocode`接口。`batchgeocode`用于将一组地点名称转换为经纬度,`reverse_geocode`则相反,给定经纬度返回对应的位置信息。 3. **构造请求**: - 对于`batchgeocode`,通常的请求格式是POST,传递一个包含地点列表的JSON数组。例如: ```json { " pois": [ {"name": "地点1", "location": null}, {"name": "地点2", "location": null}, ... ] } ``` - 对于`reverse_geocode`,如果只想获取经纬度,需要设置`output`参数为`json`,只返回坐标部分。 4. **发起请求**:使用HTTP客户端(如Python的requests、JavaScript的fetch)发送POST请求到指定的API URL,并带上你的API Key。 5. **解析响应**:收到API返回的JSON数据后,查找`regeocode`或`result`部分,从中提取经纬度信息。 6. **处理错误和分页**:高德地图API可能有限制,如单次请求的地点数限制,以及分页处理。注意检查错误码并按需处理。 7. **代码示例**:如果你使用的是JavaScript,可以参考高德地图JavaScript SDK的文档(https://lbs.amap.com/api/jsapi/example/#reverse-geocode-batch)来编写代码。
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值