python获取行政区划的精纬度
目录
在处理空间地理信息时,我们常常需要与精纬度打交道。例如,物流运输行业,我们需要计算行驶轨迹的距离,或者对位置信息的可视化,都需要用到精纬度信息。
但有时候,我们获取到的可能只是一个行政区划代码或者是地址信息。我们需要解析出精纬度,从而为下一步计算和可视化打下基础。
之前我们介绍过 python 的cpca
库将地址解析成省、市、区信息,而它自身还带有全国行政区划的精纬度信息。
地址拆分为行政区划
通过pip install cpca
安装好 cpca 库后,我们通过简单几行代码就可以将地址拆分成省市区信息,以及对应的行政区划代码。
location_str = ["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘西工业区", "北京朝阳区北苑华贸城"]
import cpca
df = cpca.transform(location_str)
print(df)
解析行政区划精纬度
这个库本身并没有解析精纬度的函数,但是我在查看源代码的时候,发现他这个adcodes.csv
文件中有行政区划的精纬度信息。
一下就来了精神。
首先我们查看下 cpca 库包装的路径在哪,才能找到这个文件:
pip3 show cpca
我发现在我的电脑上文件是在/home/nigo/.local/lib/python3.10/site-packages
路径下。
这下我们可以本地直接解析出行政区划的精纬度了,这个目前最小单位是到“区”一级。
import pandas as pd
# 读取数据(需要修改成你本地自己的路径)
df = pd.read_csv('/home/nigo/.local/lib/python3.10/site-packages/cpca/resources/adcodes.csv',converters={'adcode':str})
data = {}
# 循环数据,建立行政区划与经纬度的关系字典
for index,row in df.iterrows():
area_code = row['adcode']
area_code = area_code[:6]
data[area_code] = (row['longitude'],row['latitude'])
def get_lon_lat(area_code):
"""根据行政区划代码查询经纬度"""
return data[area_code]
if __name__ == "__main__":
lon,lat = get_lon_lat('310104')
print(lon,lat)
结语
在之前审计的物流运输企业中,物理轨迹的精纬度是单独存放的,而运输订单只有行政区划代码和城市名称,有了这个库就可以不借助第三方接口,方便地解析出起运点和运达点的精纬度。
从而可以计算运输距离,再进一步进行数据分析和数据可视化。