Python实现利用天地图的地理编码api将文字地址解析成经纬度

今天碰巧看到政府公共数据网,发现有很多不错的对工作有很大用处的数据。以前没用过这些数据,不知道怎么样,所以试着下载到了一些表格数据,基本上是很标准很规范的,表的情况都有一些说明,非常好理解,就是都是文本格式。其他属性信息倒是不影响,但是里面的地址都是“某某省某某市某某县某某村几号”类似的东西,作为一名GISER,看起来很别扭,既然都有地址说明了,那就直接出经纬度,然后展示在地图上,那做做基于位置的数据分析工作岂不方便多了去了。所以考虑一下得想办法把这些表格数据弄成能作为地图显示的矢量数据,核心就是将这些文字描述的地址信息转为经纬度数据。

记得天地图服务里面有个地理编码功能不错,然后今天正好有一点点闲时间,就搞一搞试试,目标就是将原始的文字表格弄成地图显示,经过2个多小时的摸索尝试,成功实现了在地图上的显示,具体请参考下面的说明。

一、做好准备:

VScode,python3(pandas,xlrs,xlmt),arcgis10.2,

二、注册天地图,申请key。

三、下载官方数据。从政府公共数据网站找到感兴趣的数据,下载excel表格数据

四、python代码

from encodings import utf_8

import requests

import pandas as pd

application_key='自己申请的天地图key'(注意是浏览器端的)

input_filename ="下载的数据.xls"

output_filename="result.xls"

txt = pd.read_excel(input_filename,engine="xlrd")

def getParam(searchWord):    

    url = 'http://api.tianditu.gov.cn/geocoder?ds={"keyWord":"'+searchWord+'"}&tk='+application_key

    try:

        response = requests.request('GET',url)        

        response.encoding = 'utf-8'

        location = response.json()

        #print(location)

        return location['location']

    except Exception as ex:

        print(ex)          

    csvFile = open('error.csv','a',encoding='utf-8')

    csvFile.write(url+',')

    return ''

shp_lat_list = []

shp_lon_list = []

for address in txt.values:

     shape = getParam(address[4].strip())

     #print(shape)

     shp_lat_list.append(shape['lat'])

     print(shp_lat_list)

     shp_lon_list.append(shape['lon'])     

txt['lat'] = shp_lat_list

txt['lon'] = shp_lon_list

txt.to_excel(output_filename)

里面某些参数或者变量需要结合自己的数据和表格情况进行适当的修改,以满足各自不同要求。

五、运行,批量获取坐标并存到表格里。

六、在arcgis中加载表格,添加xy事件,导出shp数据,进行后续分析。

总体来说,经过尝试,非常方便的将官方发布的文字记录搞成易于进行空间分析的空间数据,为下一步的数据分析做好了数据上的准备,分享给大家使用,不是啥宝贝,不喜勿喷。

七、注意:Pandas写入csv的那个函数不知道为什么一直异常,总是写的乱七八糟,乱码、列窜位等等,后来读取和写入我都换成了excel对应的函数就好用多了,我没有研究是为啥,不太关心那个,能完成我的目标就好,各位如果会搞的话可以自己再试试csv格式。

八、Arcgis字段计算器的扩展:

理论上讲也可以直接在arcgis字段计算器中写入代码,直接进行计算获取经纬度数据。

基本思路:以文字地址字段为参数,循环request天地图服务地址,获取json对象,解析出lon和lat,然后赋值到经纬度字段。不过arcgis的字段计算器比较弱,可能有点麻烦,我就不试了,各位有兴趣自己试试。

 文中代码参考了https://www.cnblogs.com/ShirleyLoveGIS/p/10179293.html里面的部分代码。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GADFLYGIS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值