在之前博客中記錄瞭如何獲取省界經緯度數據
下面介紹如何獲取城市區域的邊界經緯度數據,具體思路同上一篇博客
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=
如果沒有金幣下載,可以私聊我,我發給你