4

如何使用Python将经纬度坐标转换成地址

 3 years ago
source link: https://zhuanlan.zhihu.com/p/358847780
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

如何使用Python将经纬度坐标转换成地址

上海市新能源汽车公共数据采集与监测研究中心 数据分析师

利用下面网页可以不写代码实现经纬度坐标转换文字地址

v2-57fa72de44d9445c935c5763c096ace7_720w.jpg

本文主要讲述如何利用Python将经纬度坐标转换成文字形式的地址

第一步,注册高德地图API账号,申请Web服务密钥

第二步,了解并测试逆地理编码接口

逆地理编码接口地址:地理/逆地理编码-API文档-开发指南-Web服务 API | 高德地图API

逆地理编码接口API服务地址:

v2-960597bb67c4d4b34b42448473322281_720w.jpg

逆地理编码接口请求参数:

v2-41ae540cfb4b15c7d7888be72c9b9253_720w.jpg

逆地理编码接口主要返回参数:

v2-b8fa7c2fef2e099a5ac7ef10087194cd_720w.jpg

接下来,对上述逆地理编码API进行一次简单的测试。

当前请求参数为:

  • key:365ac412d6e22f49ce3d345270ecc643
  • location:121.49912,31.236729|121.475538,31.228207
  • batch:true
  • output:json

组合后的Url为:https://restapi.amap.com/v3/geocode/regeo?key=365ac412d6e22f49ce3d345270ecc643&location=121.49912,31.236729|121.475538,31.228207&batch=true&output=json

下图为返回结果,可以看到两处红线标住的地方为返回的地址

第三步,利用Python和高德逆地理编码接口实现经纬度坐标转文字地址

import requests

# 执行一次高德地图地理逆编码的查询
# 输入值:coordList -> 经纬度的序列,currentKey -> 当前使用的Key
# 返回值:resultList -> 查询成功,返回结果地址的序列
#        -1 -> 执行当前查询时Key的配额用完了
#        -2 -> 执行当前查询出错
def ExcuteSingleQuery(coordList ,currentkey):
    # 1-将coordList中的经纬度坐标连接成高德地图API能够识别的样子
    coordString = ""     # 当前coordList组成的string
    for currentCoord in coordList:
        coordString += str(currentCoord[0]) + "," + str(currentCoord[1]) + '|'
    # 2-地理编码查询需要的Url
    output = 'json'    # 查询返回的形式
    batch = 'true'     # 是否支持多个查询
    base = 'https://restapi.amap.com/v3/geocode/regeo?'    # 逆地理编码查询Url的头
    currentUrl = base + "output=" + output + "&batch=" + batch + "&location=" + coordString+ "&key=" + currentkey
    # 3-提交请求
    response = requests.get(currentUrl)    # 提交请求
    answer = response.json()   # 接收返回
    # 4-解析Json的内容
    resultList = []    # 用来存放逆地理编码结果的空序列
    if answer['status'] == '1' and answer['info'] == 'OK':
        # 4.1-请求和返回都成功,则进行解析
        tmpList = answer['regeocodes']    # 获取所有结果坐标点
        for i in range(0,len(tmpList)):
            try:
                # 解析','分隔的经纬度
                addressString = tmpList[i]['formatted_address']
                # 放入结果序列
                resultList.append(addressString)
            except:
                # 如果发生错误则存入None
                resultList.append(None)
        return resultList
    elif answer['info'] == 'DAILY_QUERY_OVER_LIMIT':
        # 4.2-当前账号的余额用完了,返回-1
        return -1
    else:
        # 4.3-如果发生其他错误则返回-2
        return -2

输入测试数据,对上述代码进行测试

if __name__ == '__main__':

    # 创建测试地址经纬度坐标集
    coordList = [
        "121.475538,31.228207",
        "121.479475,31.235831",
        "121.459444,31.233372",
        "121.50825,31.2296841",
        "121.518464,31.231464"
    ]

    # 进行地理编码
    print(ExcuteSingleQuery(coordList = coordList, currentkey="365ac412d6e22f49ce3d345270ecc643"))

代码测试的结果如下图所示

C:\Users\Administrator\AppData\Local\Programs\Python\Python37\python.exe E:/地理信息计算器历史版本/20210301/20210301/giscalculator/gc_method/test.py

上海市黄浦区南京东路街道上海人民广场上海博物馆
上海市黄浦区南京东路街道上海旅游品商厦南京路步行街
上海市静安区石门二路街道国际丽都城(北京西路)
上海市浦东新区陆家嘴街道仁恒滨江园
上海市浦东新区陆家嘴街道世纪大道299号陆家嘴1885广场

Process finished with exit code 0

利用上述Python代码可实现经纬度坐标到文字地址的转换,值得注意的是输入的坐标必须是GCJ-02坐标系,在使用代码之前需要将输入经纬度进行坐标系转换

下面的网址提供了一个不写代码就可以进行地理坐标系统转换的工具

如果觉得本文对你的学习或工作有帮助,请点赞收藏并关注,谢谢!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK