曾几何时,逆地址编码悄然在项目中兴起使用,给个经纬度,查询一个详细地址。在进行数据录入时,特别是大批量的excel表格录入数据库时,缺失的地址怎么办?录入数据库后,再通过系统编辑重新请求接口更新地址。No!No!No!有个好方法,使用python调用天地图的逆地址编码接口,读取excel中的经纬度,返回的地址更新到excel中,真香!
解决思路:整理好一个excel表格,确保相关的经纬度填写准确——>python读取excel中单行数据,取出需要进行逆地址编码的经纬度,拼接到天地图的gis接口中——>查询得到详细地址并更新到对应字段,得到可用的excel表格
1、Excel表格如下
下表为某道路数据,含有起始经纬度,终止经纬度,且需要计算得到起始点位置和终止点位置详细地址。
2、代码
# Time:2023/09/18
# Author:XuWei
# Description:使用天地图逆地址编码接口获取详细地址完成对excel更新
from encodings import utf_8
import requests
import pandas as pd
import os
#天地图key,使用后端服务器端的key
application_key='4bb4ac93ef3dbc13b4605de1e0734ae6'
def updateAddressInExcel(file):
#打开excel
workbook = pd.read_excel(file)
# 获取行数
row_count = workbook.shape[0]
# 读取一行数据
for row in range(0,row_count):
print(row)
#某行数据
row_data = workbook.iloc[row]
print(row_data)
#起始位置
start_address = getParam(row_data.start_longitude, row_data.start_latitude)
#终止位置
end_address = getParam(row_data.end_longitude, row_data.end_latitude)
workbook.iloc[row, workbook.columns.get_loc('start_address')] = start_address
workbook.iloc[row, workbook.columns.get_loc('end_address')] = end_address
workbook.to_excel(file,index=None)
def getParam(jd,wd):
url="http://api.tianditu.gov.cn/geocoder?postStr={'lon':"+str(jd)+",'lat':"+str(wd)+",'ver':1}&type=geocode&tk="+application_key
try:
response = requests.request('GET',url)
response.encoding = 'utf-8'
location = response.json()
# print(location)
print(location['result']['formatted_address'])
return location['result']['formatted_address']
except Exception as ex:
print('')
updateAddressInExcel(r'C:\Users\Administrator\Desktop\comm_fire_road_test.xlsx')
3、运行脚本获取结果
运行python,结果如下所示。