python畫中國地圖(含省界、河流等)

我們可以使用Basemap這個工具包來實現(xiàn)中國地圖的繪制

首先需要加載一些包:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

Basemap包就是氣象畫圖的利器,現(xiàn)在我們就可以愉快的畫圖了!

plt.figure(1)
map=Basemap()
map.drawcoastlines()
plt.title(r'$World\ Map$',fontsize=24)
plt.show()

第2行創(chuàng)建一個地圖,第3行添加海岸線,這樣一個世界地圖就出來了,怎么樣,很簡單吧。(plt.show()這行代碼是用來顯示圖片的)

![wordmap_國界線.png](https://upload-images.jianshu.io/upload_images/15011972-506e6a107e6c56eb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

我們發(fā)現(xiàn)這只是海岸線圖,那么怎么將國界線添加上去呢?很簡單,只要添加一行代碼就可以了。

map.drawcountries()
wordmap_國界線.png

那么怎么添加河流呢?可能有些同學已經(jīng)猜到了,就是drawrivers()

map.drawrivers(color='blue',linewidth=0.3)
wordmap_河流.png

好了,現(xiàn)在我們可以開始畫中國地圖了!
其實只要在創(chuàng)建地圖時指定一下范圍就可以了,查閱資料發(fā)現(xiàn),中國的經(jīng)緯度范圍是東經(jīng)135度2分30秒-東經(jīng)73度40分,北緯3度52分-北緯53度33分。

map=Basemap(llcrnrlon=70,llcrnrlat=3,urcrnrlon=139,urcrnrlat=54)

chinamap.png

好了,一個中國地圖就出來了!但是我們發(fā)現(xiàn),好像少了點什么,沒錯就是省界。我們可以在https://gadm.org/download_country_v3.html下載中國大陸和臺灣省的行政區(qū)域的shape文件,下載后解壓,然后加入下面的代碼。

CHN='G:\python_material\MapOfChina'

CHN的值就是解壓后的地圖文件所在的地址。
下面我們就可以加入省界了!

map.readshapefile(CHN+'\gadm36_CHN_shp\gadm36_CHN_1',
                  'states',drawbounds=True)

別忘了把臺灣省加上去

map.readshapefile(CHN+'\gadm36_TWN_shp\gadm36_TWN_1',
                  'taiwan',drawbounds=True)
chinamap_省界.png

還可以在地圖上加上經(jīng)緯度,比如我們要畫5條經(jīng)緯線,可以這么做:

parallels = np.linspace(3,55,5)
map.drawparallels(parallels,labels=[True,False,False,False])
meridians = np.linspace(70,140,5)
map.drawmeridians(meridians,labels=[False,False,False,True])

chinamap_省界,經(jīng)緯線.png

大功告成!但是,emmm,我們發(fā)現(xiàn)好像有點歪?我們可以在創(chuàng)建地圖時選擇投影參數(shù)。

map=Basemap(llcrnrlon=70,llcrnrlat=3,urcrnrlon=137,urcrnrlat=54,
            projection = 'lcc', lat_1 = 33, lat_2 = 45, lon_0 = 100)
chinamap_省界,經(jīng)緯線,投影.png

這回正式的完成了!

附上所有代碼:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

plt.figure(1)
map=Basemap(llcrnrlon=70,llcrnrlat=3,urcrnrlon=139,urcrnrlat=54,
            projection = 'lcc', lat_1 = 33, lat_2 = 45, lon_0 = 100)
map.drawcoastlines()
map.drawcountries()
map.drawrivers(color='blue',linewidth=0.3)
CHN='G:\python_material\MapOfChina'
map.readshapefile(CHN+'\gadm36_CHN_shp\gadm36_CHN_1',
                  'states',drawbounds=True)
map.readshapefile(CHN+'\gadm36_TWN_shp\gadm36_TWN_1',
                  'taiwan',drawbounds=True)
parallels = np.linspace(3,55,5)
map.drawparallels(parallels,labels=[True,False,False,False])
meridians = np.linspace(70,140,5)
map.drawmeridians(meridians,labels=[False,False,False,True])
plt.title(r'$China\ Map$',fontsize=24)

plt.show()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容