当前位置: 首页 > article >正文

地址转坐标:利用高德API进行批量地理编码

我们会遇到一些需要批量把地址数据转换成坐标的问题,一个个查的话通常会比较麻烦,那有没有比较方便的方法呢,我们可以利用高德的地理编码/逆地理编码 API功能, 通过 HTTP/HTTPS 协议访问远程服务的接口,提供结构化地址与经纬度之间的相互转化的能力;

这里我们先拿一些数据作为分析的基础,数据源来源:''上海市公共数据开放平台'',数据更新日期:2022年9月29日,网址:加油站-上海市经济和信息化委员会-上海市公共数据开放平台 (sh.gov.cn)

我们可以看到原始数据包含了油站名称、地址、电话等一些标签,但是没有坐标,我们要做的是把地址批量转化坐标。

直接利用批量地理坐标转经纬度工具:地理编码 (高德) 地址转经纬度 - 批量工具网 (piliang.tech)

直接把我们获取的位置放进去,城市选择数据所在的城市即可,这里是''上海'' ,这里需要申请一下高德是key,个人开发者地理编码api调用的限额是5000条/天,数量量大于这个的话,可以多天处理或者多个账号处理,这里放上开发文档,如何申请key看官方文档:创建应用和 Key-Web服务 API | 高德地图API (amap.com)

这里可以直接下载转换结果,坐标系GCJ-02,当然还有个别地址描述太模糊的,会查不出坐标,手动查一下坐标即可,大部分还是可以查到的,以上海加油站分布数据为例,830条数据仅有8条查不出来地址,可以手动调整一下地址,或者直接用高德坐标拾取器,拾取坐标:坐标拾取器 | 高德地图API (amap.com);

这里我们拿高德的坐标拾取器挑一个点验证一下,准确度还可以;

我们把它放到GIS里看一下,导入GIS里时要注意一下文件格式是.csv或者.xls,打开arcgis10.8——>添加数据——>右键显示xy数据——>选择x,y字段,arcgisPro的话是支持.xlsx的,流程一样;

结果如下图所示;

当然这里通过python脚本调用高德地图地理编码API也可以,只要把文件路径和 API 密钥改成自己的即可;

完整代码#运行环境 Python 3.11

import pandas as pd
import requests

def geocode(address, key):
    """
    使用高德地图API进行地理编码
    :param address: 地址字符串
    :param key: 高德地图API密钥
    :return: 返回地理编码结果的字典
    """
    base = 'https://restapi.amap.com/v3/geocode/geo'
    params = {
        'address': address,
        'key': key,
        'output': 'json'
    }
    response = requests.get(base, params=params)
    answer = response.json()
    return answer


def process_addresses_from_xlsx(file_path, key):
    """
    从XLSX文件中读取地址,并进行地理编码。

    :param file_path: XLSX文件路径
    :param key: 高德地图API密钥
    :return: None
    """
    # 读取XLSX文件
    df = pd.read_excel(file_path)

    # 假设地址在名为'地址'的列中
    addresses = df['地址']

    # 创建一个空列表以保存地理编码的结果
    results = []

    # 遍历地址列中的每一项
    for address in addresses:
        # 调用地理编码API
        result = geocode(address, key)

        # 尝试获取结果
        try:
            location = result['geocodes'][0]['location']
            lng, lat = location.split(',')
            # 添加经度和纬度到结果列表
            results.append({
                'Address': address,
                'Longitude': float(lng),
                'Latitude': float(lat)
            })
        except (KeyError, IndexError):
            # 如果地理编码失败,则跳过该地址
            continue

    # 将结果保存到一个新的DataFrame
    results_df = pd.DataFrame(results)

    # 保存结果到新的XLSX文件
    results_df.to_excel('加油站GCJ-02坐标.xlsx', index=False)


if __name__ == '__main__':
    # 替换这里的key为您自己的API密钥
    api_key = 'your_api_key_here'  # 替换为您的实际API密钥
    file_path = 'E:/data/加油站.xlsx'  # 根据实际情况进行更改文件路径

    # 处理XLSX文件并进行地理编码
    process_addresses_from_xlsx(file_path, api_key)

因为当前坐标系是GCJ02,需要批量转成WGS84/BD09的话可以用免费这个网站:地图坐标系转换 - 在线工具 (try8.cn)

文章仅用于分享个人学习成果与个人存档之用,分享知识,如有侵权,请联系作者进行删除。所有信息均基于作者的个人理解和经验,不代表任何官方立场或权威解读。


http://www.kler.cn/a/510156.html

相关文章:

  • 【python_钉钉群发图片】
  • 聊聊如何实现Android 放大镜效果
  • 后盾人JS -- 好用的 JavaScript Symbol 类型
  • cuda + cudnn安装
  • 【12】Word:张老师学术论文❗
  • Redis 性能优化:多维度技术解析与实战策略
  • C++(二十二)
  • 财务RPA就是财务机器人吗?有什么作用
  • 安装matlab2024a错误license checkout failed Error-8
  • MATLAB基础应用精讲-【数模应用】基于QPSK的调制和解调(附MATLAB代码实现)
  • 力扣动态规划-2【算法学习day.96】
  • 学习华为熵减模型:激发组织活力(系列之三)
  • PostgreSQL_安装部署
  • Golang——内存(内存管理、内存逃逸、垃圾回收 (GC) 机制)
  • 学生管理系统C++版(简单版)
  • 使用Emgu.CV将tif保存视频,并用AxWindowsMediaPlayer打开
  • ant design vue的级联选择器cascader的悬浮层样式怎么修改
  • Word中如何格式化与网页和 HTML 内容相关的元素
  • 基于python对抖音热门视频的数据分析与实现
  • Linux网络序列化与反序列化
  • LINUX编译LibreOffice
  • React进阶之react.js、jsx模板语法及babel编译
  • 数据结构---并查集
  • Python学习(十三)什么是模块、模块的引入、自定义模块、常见的内置模块(math、random、os、sys、uuid、时间模块、加密模块)
  • 搭建一个基于Spring Boot的数码分享网站
  • [Qt]窗口-QDialog、QMessageBox、QColorDialog、QFileDialog、QFontFialog、QInputDialog对话框