下载地图包,并基于python的pyshp库读取.shp数据来获取中国省界的经纬度数据
目前畫地圖的軟件都能很方便的調用省界數據,但是如果想要單獨對省界做一些個性化設置,如設置寬度、樣式、顏色什么的,就需要將省界數據單獨拿出來進行設置了。
軟件在畫地圖時,描述的邊界都是一些列經緯度格點的集合。目前常用的存儲邊界信息的文件格式為.shp格式(雖然我也不太明白為什么要用這種稀罕的格式)。
接下來詳細介紹如何通過python獲取省界數據
下載邊界數據
可以參考如下鏈接:
https://blog.csdn.net/weixin_36677127/article/details/83314583
https://gadm.org/download_country_v3.html 這個鏈接進去后,
如下:
點擊Shapefile,
下載完成,解壓縮,文件信息如下:
從這個文件夾中可以看到尾號為0 1 2 3 的文件,應該是分別表示 國界、省界、市界和縣(區)界;
雖然相同尾號的文件有5個,但是最為重要的還是.shp文件。該文件包含了重要的地理邊界信息。
讀取.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() #獲取省名稱
1
2
3
4
5
6
7
打開shapes文件:
打開第一個shapes的第一個Shape文件,可以看到地理信息保存在points里面,每一個點是一個經緯度二元組。
打開records文件,可以看到一些具體省名稱信息:
records=file.records()
records
pro_points=[] ?#建立省邊界列表
pro_names=[] #建立省名稱列表
for i in range(len(shapes)):
? ? points=shapes[i].points #h獲取經緯度數據 ? ?
? ? pro_name=file.records()[i][3] ?#獲取省名稱
? ? 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_points.append(loc)
? ? pro_names.append(pro_name)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
形成的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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
將省界數據保存下來
為了方便后面調用,可以考慮所有數據保存為.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() #寫入完成后,記得關掉。?
1
2
3
4
5
6
7
8
9
10
11
12
創建完成以后,由相關hdf軟件打開以后,結果如上圖
attention !!!
臺灣是中國領土不可分割的一部分!
還是在那個網址
一樣的下載方式。后面獲取臺灣邊界的經緯度格點的方式和上述一樣,這里就不詳細介紹了。
由于CSDN似乎不方便上傳文件,因此我把剛創建的.hdf文件放在了氣象家園里面,
下載鏈接如下:http://bbs.06climate.com/forum.php?mod=viewthread&tid=91308,
不過下載這個需要金幣。如果沒有的話,可以私戳我,我免費發給你。
————————————————
版權聲明:本文為CSDN博主「fangzuliang」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_43718675/article/details/93410875
總結
以上是生活随笔為你收集整理的下载地图包,并基于python的pyshp库读取.shp数据来获取中国省界的经纬度数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pandas速查手册(中文版)
- 下一篇: 男孩带淞字高雅名字 淞的名字有哪些