地址(地点)经纬度批量互转及坐标系转换方法(白嫖!!!)

在进行地理数据分析或地图服务开发及搞地理科研学术时,地址与经纬度的互转是一个常见的需求。本文将介绍如何利用免费资源和工具,实现地址到经纬度的批量互相转换,零成本彻底解决这个问题!

目录

1、小量级转换开源工具

2、较大量级的转换方法

3、坐标系转换

结语


1、小量级转换开源工具

首先推荐这个开源的网站:Map location:https://maplocation.sjfkai.com/

作者集成了api,可以进行地址和经纬度的互相转换

优点

  • 支持百度、谷歌、高德三家平台的服务。
  • 可以选择不同的坐标系。
  • 完全免费。

缺点

  • 只能通过网页版使用。
  • 每次处理的数据条数有限。
  • 需要手动复制粘贴数据。

一般的处理已经足够使用!

2、较大量级的转换方法

如果要处理大量的数据,就要借助api来进行处理。

经过多方比对,建议使用腾讯位置服务:https://lbs.qq.com/dev/console/quota/account

首先访问腾讯位置服务控制台,进去之后修改账户额度,将可分配额度全都给你需要的功能上(注意不要超了),处理完后大概就是下图这个样子:

在图中可以看到前面对应的有接口地址,我们设置完得到key之后我写个调用代码,通过在本地运行脚本进行批量的转换,代码无毒可放心食用:

import pandas as pd
import requests as req
from urllib.parse import quote
from tqdm import tqdm
import time

# 腾讯地图API的Key
# KEY = '' #可以申请多个key交替使用
KEY = '5xxBZ-xxxxL-6SxxPF-EYxxV-QxxRH-AxxxC'

# CSV文件路径
CSV_PATH= r"C:\Users\xx2\Desktop\111.xlsx"

# 每日配额成功处理上限
SUCCESS_LIMIT = 10000
# 连续失败上限
FAILURE_LIMIT = 20

# 请求URL前缀
URL_PREFIX = 'https://apis.map.qq.com/ws/geocoder/v1/?address='

def get_cor(address, key):
    """
    获取单个地址对应坐标
    :param address: 地址名称
    :param key: 腾讯地图API的Key
    :return: 字典类型的经纬度坐标,格式:{'lat': 36.112438, 'lng': 114.393631}
    """
    # 对地址进行URL编码
    address_encoded = quote(address)
    url = f'{URL_PREFIX}{address_encoded}&key={key}'
    response = req.get(url)
    data = response.json()

    if data.get('status') == 0:
        return data.get('result').get('location')
    else:
        return None

if __name__ == '__main__':
    # 读取CSV文件
    df = pd.read_excel(CSV_PATH,engine='openpyxl')

    # 如果不存在,则添加新列用于存储经纬度
    if 'longitude' not in df.columns:
        df['longitude'] = None
    if 'latitude' not in df.columns:
        df['latitude'] = None

    success_count = 0
    failure_count = 0

    # 遍历每一行,获取地址信息并调用API获取经纬度
    for index, row in tqdm(df.iterrows(), total=df.shape[0], desc="Processing"):
        if pd.isnull(row['longitude']) or pd.isnull(row['latitude']):
            address = row['地点']
            if pd.notnull(address):
                full_address = '北京市' + address  # 在地址前加上“北京市”
                cor = get_cor(full_address, KEY)
                if cor:
                    # 写入经纬度
                    df.at[index, 'longitude'] = cor.get('lng')
                    df.at[index, 'latitude'] = cor.get('lat')
                    success_count += 1
                    failure_count = 0  # 成功后重置失败计数
                    print(f"处理成功: {full_address} -> (lng: {cor.get('lng')}, lat: {cor.get('lat')})")
                else:
                    df.at[index, 'longitude'] = 0
                    df.at[index, 'latitude'] = 0
                    failure_count += 1
                    print(f"处理失败: {full_address}")
            else:
                df.at[index, 'longitude'] = 0
                df.at[index, 'latitude'] = 0

            # 每处理完5条记录,暂停1秒
            if success_count % 5 == 4:
                time.sleep(1)

            # 保存并中断条件
            if success_count >= SUCCESS_LIMIT or failure_count >= FAILURE_LIMIT:
                temp_save_path = CSV_PATH.replace('.csv', f'_temp_{index}.csv')
                df.to_csv(temp_save_path, index=False)
                print(f"由于达到限制,在记录 {index} 处保存到 {temp_save_path}")
                break

    # 保存最终更新后的CSV文件
    df.to_excel(CSV_PATH, index=False)
    print(f"最终保存到 {CSV_PATH}")

以上代码需要注意几点:

1、每次使用一个key

2、脚本是通过读取本地的csv或者excel文件来进行处理,读取其中的“地点”列来调用api进行处理,读取本地文件地址为csv_path,例子中用的是excel的文件类型,如果是csv的话在read函数那改改就行,小白的话建议直接让chatgpt或者kimi给你改。

3、改功能就改URL前缀。

4、此代码中处理的都为北京的数据,所以为了减少误差,在处理之前都加上了“北京市”前缀,如果你要处理全国的就把此前缀删了,处理确定的某地可以对其进行修改。

5、最终处理完是在文档中加上了对应的经纬度列,为了避免出错请先另存原文件。

最终可以完美实现将文件中每一条地点都批量转换成经纬度,经过测试,很快很好用(最麻烦的部分就是写代码了但是已经调试好了)!!!

如果你的需求还是比较大的话,可以多注册几个账号,得到多个key,交替使用,基本上几十万的数据一天就能全都转换完。

注意:腾讯位置服务转换出来的坐标系为GCJ02坐标系,需要其他坐标系的话可以借助坐标系转换工具进行转换,我也尝试了许多方法,最终选择以下工具。

3、坐标系转换

坐标系转换,推荐开源免费的工具,原创作者——地学大数据,需要安装包的直接搜也可以私聊。

结语

通过上述方法,您可以高效地实现地址到经纬度的批量转换,无论是小规模的数据处理还是大规模的数据转换需求,都有相应的解决方案。希望这篇文章能帮助到有需要的朋友。啊哒哒哒哒大!如果有想学习arcgis和arcgis pro的使用教程和地理分析方法的盆友们点点赞之后更新哦~

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 经纬度批量转换为xy坐标是地理信息系统 (GIS) 中的常见需求之一。这个过程涉及将地球表面上的经纬度坐标转换为平面坐标系中的x、y坐标点。 在转换经纬度为xy坐标的过程中,需要使用特定的坐标系和数学算法。常见的坐标系包括UTM坐标系和墨卡托投影坐标系。UTM坐标系是一种常用的区域性坐标系,适合小范围的地理数据处理,而墨卡托投影坐标系则适合于大范围的地理数据处理。 转换经纬度为xy坐标需要以下步骤: 1. 选择适当的坐标系:根据需要选择合适的坐标系,如UTM或墨卡托投影坐标系。 2. 确定中央经线和假东原点:根据所选的坐标系,确定中央经线和假东原点的位置。 3. 进行投影转换:使用指定的数学算法,将经纬度坐标投影到平面坐标系中的x、y坐标点。 4. 批量处理:对一批经纬度坐标进行相同的转换操作,以获取它们的xy坐标。 在实际操作中,可以使用GIS软件、编程语言或在线地图服务来进行经纬度批量转换为xy坐标。这些工具通常提供现成的坐标转换函数或API,使得转换过程更加方便和高效。 总之,经纬度批量转换为xy坐标是地理信息系统中常见的操作之一。这个过程需要选择适当的坐标系,使用特定的算法进行投影转换,并通过GIS软件、编程语言或在线地图服务来实现。 ### 回答2: 经纬度是一种用来表示地球表面任意位置的坐标系统,由纬度和经度两个角度值组成。而xy坐标则是平面直角坐标系统,通常用来表示二维平面上的位置。要将经纬度批量转换为xy坐标,需要考虑地球表面的曲率和投影方式。 首先,需要选择适当的地理坐标系统和地图投影方式。世界上常用的地理坐标系统包括WGS 84和GCJ 02等。这些系统使用不同的椭球体和坐标转换算法,对应不同的地图投影方式。根据具体需求和使用场景,选择合适的地理坐标系统和地图投影方式。 其次,需要借助相应的地理信息系统(GIS)软件或API来进行批量转换。常见的GIS软件或API能够提供经纬度到xy坐标的转换功能,并支持批量处理。在转换过程中,需要提供经纬度数据集,并选择合适的坐标系统和投影方式。 最后,进行经纬度到xy坐标的批量转换。根据提供的经纬度数据集,逐个将经度和纬度值输入到地理信息系统中,进行坐标转换。转换后的xy坐标可以保存为文件或导出到其他应用程序中进行进一步分析和处理。 总之,经纬度批量转换为xy坐标需要选择合适的地理坐标系统和地图投影方式,利用GIS软件或API进行批量转换操作。这样可以将地球表面的经纬度位置转换为平面上的xy坐标,方便进行地理空间数据的分析和可视化。 ### 回答3: 经纬度批量转换为xy坐标是一个常见的需求,可以通过使用地理信息系统(GIS)软件或在线服务来实现。以下是一种可能的方法: 首先,收集经纬度数据并保存在一个文件或数据库中。这些经纬度可以是一系列地点的坐标,如城市、景点或地址等。 然后,使用一个合适的GIS软件或在线服务来进行批量转换。这些工具通常提供了转换经纬度为xy坐标的功能。 在GIS软件中,你可以导入你之前收集的经纬度数据,并选择合适的投影系统来进行转换。不同的投影系统适用于不同的地理区域,选择正确的投影系统是确保准确转换的关键。 一旦导入了经纬度数据并选择了合适的投影系统,你可以执行批量转换操作。这将通过计算地球曲面上每个点的xy坐标来完成。 如果你选择使用在线服务,你可以找到一些提供地理编码和坐标转换功能的网站。你需要上传你的经纬度数据文件,并按照网站的指示进行转换。转换通常是自动完成的,并且可以下载转换后的xy坐标数据。 无论你选择使用GIS软件还是在线服务,转换后的xy坐标可以用于进一步的地理分析、可视化或其他应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值