目录

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)

结语

在之前审计的物流运输企业中,物理轨迹的精纬度是单独存放的,而运输订单只有行政区划代码和城市名称,有了这个库就可以不借助第三方接口,方便地解析出起运点和运达点的精纬度。

从而可以计算运输距离,再进一步进行数据分析和数据可视化。