在之前博客中记录了如何获取省界经纬度数据
下面介绍如何获取城市区域的边界经纬度数据,具体思路同上一篇博客
/weixin_43718675/article/details/93410875
import shapefileimport numpy as npfrom mpl_toolkits.basemap import Basemapimport matplotlibimport matplotlib.pyplot as pltimport osimport h5pyfile=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() #写入完成后,记得关掉。
生成结果如下:
下载使用链接为:
/forum.php?mod=viewthread&tid=92137&extra=
如果没有金币下载,可以私聊我,我发给你