基於python的pyshp庫讀取.shp數據來獲取中國城市邊界的經緯度數據,並生成hdf文件

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章