| 
 
	积分9244贡献 精华在线时间 小时注册时间2016-12-4最后登录1970-1-1 
 | 
 
| 
https://blog.csdn.net/weixin_43718675/article/details/93410875  这是我在CSDN上写的文章目前画地图的软件都能很方便的调用省界数据,但是如果想要单独对省界做一些个性化设置,如设置宽度、样式、颜色什么的,就需要将省界数据单独拿出来进行设置了。
x
登录后查看更多精彩内容~您需要 登录 才可以下载或查看,没有帐号?立即注册 
  
 软件在画地图时,描述的边界都是一些列经纬度格点的集合。目前常用的存储边界信息的文件格式为.shp格式(虽然我也不太明白为什么要用这种稀罕的格式)。
 接下来详细介绍如何通过python获取省界数据
 1. 下载边界数据
 可以参考如下链接:
 https://blog.csdn.net/weixin_36677127/article/details/83314583
 https://gadm.org/download_country_v3.html  这个链接进去后,
 如下:
 
 
 
 
 下载完成,解压缩,文件信息如下:
 
 
 
 从这个文件夹中可以看到尾号为0 1 2 3 的文件,应该是分别表示 国界、省界、市界和县(区)界;
 虽然相同尾号的文件有5个,但是最为重要的还是.shp文件。该文件包含了重要的地理边界信息。
 
 
 2.  读取.shp文件
 
 现在读取的.shp文件的库有很多,
 https://mp.weixin.qq.com/s/aAucKybX_FE8aImja_M8VQ  可以参考这个链接
 这里使用 pyshp库进行处理
 可以参考这个链接:https://blog.csdn.net/GISuuser/article/details/81664223
 
 ```
 import shapefile
 import numpy as np
 from mpl_toolkits.basemap import Basemap
 
 file=shapefile.Reader('gadm36_CHN_shp/gadm36_CHN_1.shp')  #读取省界.shp文件
 shapes=file.shapes()   #获取point
 records=file.records() #获取省名称
 ```
 打开shapes文件:
 
 
 
 打开第一个shapes的第一个Shape文件,可以看到地理信息保存在points里面,每一个点是一个经纬度二元组。
 
 
 打开records文件,可以看到一些具体省名称信息:
 records=file.records()
 records
 
 
 
 ```
 pro_points=[]  #建立省边界列表
 pro_names=[] #建立省名称列表
 
 for i in range(len(shapes)):
 points=shapes.points #h获取经纬度数据
 pro_name=file.records()[3]  #获取省名称
 lon =[]
 lat  =[]
 #将每个tuple的lon和lat组合起来
 [lon.append(points[0]) for i in range(len(points))]
 [lat.append(points[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_points.append(loc)
 pro_names.append(pro_name)
 ```
 形成的pro_names和pro_points如下:
 
 
 
 
 现在将
 
 ```
 lat_min,lat_max=37,55
 lon_min,lon_max=115,135
 
 fig = plt.figure(figsize=(18,10))
 ax1 = fig.add_axes([0.1,0.1,0.8,0.8])
 
 m=Basemap(projection='cyl',llcrnrlat=lat_min,llcrnrlon=lon_min,
 urcrnrlat=lat_max,urcrnrlon=lon_max,resolution='l',ax=ax1)
 
 m.drawcoastlines()
 m.drawcountries()
 
 name_list=['Liaoning','Jilin','Beijing','Hebei','Heilongjiang']  #画出这几个省的边界
 
 for name,point in zip(pro_names,pro_points):
 
 if name in name_list:
 
 lon=point[:,0]
 lat=point[:,1]
 
 plt.scatter(lon,lat,marker='.',c='k',s=0.5)
 ```
 
 
 
 3. 将省界数据保存下来
 为了方便后面调用,可以考虑所有数据保存为.hdf文件,调用h5py库就好了
 
 ```
 import h5py
 
 file_name='province_boundary_lon_lat.hdf'  #保存的目标文件名和路径
 f=h5py.File(file_name,mode='w')  #创建一个hdf文件
 
 for pro_name,points in zip(pro_names,pro_points):
 #每一个省份创建一个群组
 a=f.create_group(pro_name)
 a['longitude']=points[:,0]
 a['latitude']=points[:,1]
 
 f.close() #写入完成后,记得关掉。
 ```
 
 
 创建完成以后,由相关hdf软件打开以后,结果如上图
 
 attention !!!
 台湾是中国领土不可分割的一部分!
 还是在那个网址
 
 
 一样的下载方式。后面获取台湾边界的经纬度格点的方式和上述一样,这里就不详细介绍了。
 
 
 生成的这个hdf文件,在气象家家园上有,下载链接为 http://bbs.06climate.com/forum.php?mod=viewthread&tid=91308
 
 
 
 
 
 
 
 
 | 
 |