曾几何时,逆地址编码悄然在项目中兴起使用,给个经纬度,查询一个详细地址。在进行数据录入时,特别是大批量的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,结果如下所示。