基于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=
如果没有金币下载,可以私聊我,我发给你

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值