当前位置:首页>python>基于 Python 进行高德经纬度坐标查询

基于 Python 进行高德经纬度坐标查询

  • 2026-10-21 13:29:00
基于 Python 进行高德经纬度坐标查询

点击蓝字

关注我们

当日常工作中,如果遇到不确定经纬度的数据,可通过高德等地图平台基于地名查询经纬度信息,但如果数据量较大,这样逐一查询就会花费很多时间,此时可以通过调用这些地图平台的 API 编写代码,进行批量化查询,以节省时间,提高效率。

本文以高德开放平台为例,编写 Python 代码读取 Excel 表格文件中的地名信息,并在此基础上将查询到的经纬度信息填写到表格特定位置。

1

高德地图经纬度查询

进入高德开放平台 (https://lbs.amap.com/),注册并登录账号后,点击上方【产品介绍】中【高级地图工具】列的【坐标拾取器】,通过这一工具即可根据现有地名查询其对应地理坐标,其他地图软件的开放平台中也有类似功能。

在坐标拾取器页面,默认为按关键字搜索,输入地名关键字,点击【搜索】按钮,即可在右侧出现该地名的对应坐标。登录高德账号后,坐标文本框中将显示保留六位小数的经纬度坐标,如果没有登录账号,则只能显示两位小数。

建议在搜索时在关键字前后加上地区限定词,以免因同名原因搜索到其他位置。例如对于县级行政区,可在关键字搜索框里输入其对应人民政府名称,例如“长春市南关区人民政府”;对于经济开发区,可搜索其管委会位置,例如“长春经济技术开发区管理委员会”。搜索完成后点击坐标文本框右侧的【复制】按钮即可复制该坐标值,用户可自行将其粘贴到表格中的对应位置。

2

Python 代码编写

高德地理编码 API

高德开放平台的地理编码 API 可将详细的结构化地址转换为高德经纬度坐标。且支持对地标性名胜景区、建筑物名称解析为高德经纬度坐标。

类似于上文的坐标拾取器,地理编码 API 同样需要输入准确的地名,但它的返回输出内容为 JSON 形式,包含地名及经纬度等一系列信息。我们编写的代码就是需要逐一对基于地名得到的 JSON 信息进行处理,提取出我们所需要的经纬度数据。

高德开放平台地理编码 API 开发指南:

https://lbs.amap.com/api/webservice/guide/api/georegeo

Python 完整代码

import openpyxlimport requestsimport jsonprint("欢迎使用高德坐标获取工具!")print("请确保后续输入内容准确无误且符合程序要求!")print("请确认已申请高德开放平台 Web 服务 API Key,申请地址:https://console.amap.com/dev/key/app")gaode_key = input("请输入高德开放平台 API Key:")  # 输入高德 API Key# 构建函数,基于高德 API 根据地名获取经纬度坐标defreturn_coord(name):    url = "https://restapi.amap.com/v3/geocode/geo"    params = {"key": gaode_key, "address": name}    res = requests.get(url, params)    jd = json.loads(res.text)    coord = jd["geocodes"][0]["location"]    X, Y = coord.split(",")    X_num, Y_num = float(X), float(Y)return X_num, Y_num# 打开指定 Excel 文件,从中获取地名搜索关键字、经纬度的列号以及数据起始行号workbook_name = input("请输入 Excel 文件路径及名称,路径格式参考:D:\Data\data.xlsx:")workbook_name = workbook_name.replace("\\", "/")  # 路径中使用反斜杠转义workbook = openpyxl.load_workbook(workbook_name)sheet_name = input("请输入 Excel 文件中的 sheet 工作表名称:")sheet = workbook[sheet_name]name_col = input("请输入 Excel 文件中地名搜索关键字所在大写字母列号(A、B、C...):")X_col = input("请输入 Excel 文件中经度所在大写字母列号(A、B、C...):")Y_col = input("请输入 Excel 文件中纬度所在大写字母列号(A、B、C...):")start_row = int(input("请输入 Excel 文件中数据内容起始数字行号(不包括标题及表头,1、2、3...):"))X_col_num, Y_col_num = ord(X_col) - 64, ord(Y_col) - 64# 经纬度列号转数字# 从工作簿中的指定区域获取地名搜索关键字文本列表name_list = list()name_keys = sheet[name_col]for name_cell in name_keys[start_row - 1 :]:    name_list.append(name_cell.value)# 遍历地名搜索关键字列表,基于高德 API 获取其对应的经纬度坐标并写入工作簿for i inrange(len(name_list)):    name = name_list[i]    X, Y = return_coord(name)    print(name, X, Y)    row_num = start_row + i    sheet.cell(row=row_num, column=X_col_num).value = X    sheet.cell(row=row_num, column=Y_col_num).value = Ysave_name = input("请输入保存 Excel 文件的名称(如 data.xlsx):")save_name = save_name.replace("\\", "/")  # 路径中使用反斜杠转义workbook.save(save_name)print("包含坐标的 Excel 文件导出完成!")

3

程序使用介绍

以《2024 吉林统计年鉴》中吉林省各行政区及经济区为例,将其名称转换为 Excel 文件。其中用于匹配经纬度的地名查询关键字在 C 列,查询出来的经纬度分别存放于 D、E 列。第一行为表头,介绍各列内容,数据从第二行开始。

输入在高德开放平台申请的 API Key、Excel 文件路径及其中 Sheet 工作表名称、相关列名和行号后,即可开始读取地名列表,并以此为基础搜索经纬度填入表格对应位置。所有经纬度搜索完成后会提示输入保存表格名称,导出完成后的表格将和代码文件一同保存在同一位置。

注意:通过这种方法搜索到的个别经纬度可能会出现错误,例如长春中韩国际合作示范区,搜索结果中经度为 130.42°,这一经度明显超出长春市范围,通过开发指南中的网址进行搜索可发现,其搜索结果错误显示为珲春市国际合作示范区的位置。

对于这一类错误,可通过坐标拾取器单独查询其经纬度,并基于高德地图中所显示的地名对搜索关键词进行调整,使其后续能够更加精准地定位到正确的地理坐标。以长春中韩区为例,将此处搜索词改为中韩(长春)国际合作示范区管理委员会即可搜索到正确的地名及坐标。

4

参考资料

高德地图开放平台:https://lbs.amap.com/吉林省统计局-统计年鉴:https://tjj.jl.gov.cn/tjsj/tjnj/

注:

我们近期完成了团队第一份成体系的 GIS 教程:《SuperMap 在人文社科研究中的实践与应用》,以应用为导向,共七章,实操案例包括人口分布图以及夜间灯光指数等相关内容。

本文部分内容来自第六章第二节,单击 “阅读原文” 可跳转到该教程。鉴于编者水平所限,教程中难免存在疏漏与不足之处,恳请各位专家和读者不吝指正。

最新文章

随机文章