赞
踩
利用Python来批量自动获取指定位置的经纬度信息,并且将之保存到csv文件中。
首先,我们需要一个接口,可以自动将地理位置转换为经纬度信息。可以采用百度地图开放平台。
进入页面后,点击顶部【控制台】,按照指示经过注册后即可创建一个地图可视化应用,应用类别选择【浏览器端】,获取访问应用(AK)
,如下图所示。它相当于访问接口的钥匙。
接下来,我们可以查看接口功能介绍 Web接口功能介绍-地理编码,里面包含请求参数
、返回结果参数
等信息,可以根据自己的需要来确定要请求和返回哪些信息。
代码如下所示,根据地理位置name
和刚获取的AK
来调用接口,返回结果,并且将结果转化为json
格式,最终返回经纬度。
import pandas as pd
import requests
AK = "xx" # 将刚刚获取到的AK复制到这里
def get_position(name, AK):
url = f'http://api.map.baidu.com/geocoding/v3/?address={name}&output=json&ak={AK}'
res = requests.get(url)
val = res.json()
retval = {'地址': name,
'经度': val['result']['location']['lng'],
'维度': val['result']['location']['lat'],
'地区标签': val['result']['level'],
'是否精确查找': val['result']['precise']}
print(val)
longitude = retval['经度']
latitude = retval['维度']
return longitude, latitude
测试一下
addr = '北京理工大学'
lo, la = get_position(addr, AK)
print(lo, la)
我们发现,最终的val
结果中包含状态、经纬度、精度、标签、准确度等信息,功能十分强大。可以通过这个 查询经纬度 的网站,来验证结果是否正确。
在现实情况中,我们可能面临的问题是有很多个地理位置,想借助接口实现批量坐标生成。那么接下来,将借助Pandans
中apply()
函数实现这个功能。
关于apply()
函数的介绍,这篇文章 pandas apply() 函数用法 讲得通俗易懂,以后就没必要一个个写for循环啦!
首先,我们假设已经有了一个csv
或者excel
文件,用来保存位置信息。将之命名为school.csv
首先获取文件中的位置这一列,命名为df
。接着采用apply()
函数,对于这一列的每一个元素执行get_position()
,得到的结果为(经度,维度)
这样一个元组。为了将经纬度区分开(个人需要,也可以不拆分),又对于元组元素进行了提取,加在了原先的dataSet
上。最终保存为新的csv
文件。
# 获取地理信息
dataSet = pd.read_csv("school.csv")
df = dataSet["location"]
df_location = df.apply(get_position)
dataSet["longitude"] = df_location.map(lambda x: x[0])
dataSet["latitude"] = df_location.map(lambda x: x[1])
print(dataSet)
dataSet.to_csv('school_info.csv', encoding='utf_8_sig')
最终结果
在获取对应坐标时,要注意国内国外使用的坐标系标准是不一致的,一般有三种形式。若是想最终在地图上对于位置进行标注的话,一定要使获取的坐标和地图本身的坐标相对应,否则会出现偏移。关于坐标转换,请查看该文章。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。