在之前博客中记录了如何获取省界经纬度数据
下面介绍如何获取城市区域的边界经纬度数据,具体思路同上一篇博客
https://blog.csdn.net/weixin_43718675/article/details/93410875
import shapefile
import numpy as np
from mpl_toolkits.basemap import Basemap
import matplotlib
import matplotlib.pyplot as plt
import os
import h5py
file=shapefile.Reader('gadm36_CHN_shp/gadm36_CHN_2.shp') #读取城市.shp文件
shapes=file.shapes() #获取point
records=file.records() #获取省-市名称
打开records文件,如下
pro_city_points=[] #建立城市边界列表
pro_city_names=[] #建立城市名称列表
pro_names=[] #建立省份列表
for i in range(len(shapes)):
points=shapes[i].points #h获取经纬度数据
pro_name=file.records()[i][3] #获取省名称
city_name=file.records()[i][6] #获取市区名称
city_ch_name=file.records()[i][8] #获取市区中文名称
pro_city_name=[pro_name,city_name,city_ch_name]
lon =[]
lat =[]
#将每个tuple的lon和lat组合起来
[lon.append(points[i][0]) for i in range(len(points))]
[lat.append(points[i][1]) for i in range(len(points))]
lon=np.array(lon).reshape(-1,1)
lat=np.array(lat).reshape(-1,1)
loc=np.concatenate((lon,lat),axis=1)
pro_city_points.append(loc)
pro_city_names.append(pro_city_name)
pro_names.append(pro_name)
pro_names=list(set(pro_names)) #使用集合去掉重复的省名称
打开,如下图
将各个城市的边界数据保存为hdf文件,
file_name='province_city_boundary_lon_lat.hdf' #保存的目标文件名和路径
f=h5py.File(file_name,mode='w') #创建一个hdf文件
for pro_name in pro_names[0:]:
#每一个省份创建一个群组
pro = f.create_group(pro_name)
for pro_city_name,points in zip(pro_city_names,pro_city_points):
#将对应省份的城市的放在一个group下
if pro_city_name[0]==pro_name:
city=pro.create_group(pro_city_name[1])
city['longitude']=points[:,0]
city['latitude']=points[:,1]
f.close() #写入完成后,记得关掉。
生成结果如下:
下载使用链接为:
http://bbs.06climate.com/forum.php?mod=viewthread&tid=92137&extra=
如果没有金币下载,可以私聊我,我发给你