Python使用Basemap绘制中国地图:省界、河流与投影详解
本文介绍如何使用Python的Basemap库绘制包含海岸线、国界、河流及省界的详细中国地图。教程涵盖经纬度范围设定、Shapefile数据加载、台湾省单独处理以及LCC投影参数的配置,确保地图显示准确且无变形。
Basemap库简介与基础世界地图绘制
我们可以借助Basemap工具包来完成中国地图的绘制工作。
首先,需要导入必要的依赖库。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
Basemap是气象绘图领域的强力工具,现在我们可以开始进行地图绘制。
plt.figure(1)
map=Basemap()
map.drawcoastlines()
plt.title(r'$World\ Map$',fontsize=24)
plt.show()
代码第2行用于初始化地图对象,第3行负责绘制海岸线,此时即可生成一张世界地图,操作十分简便。其中,plt.show()函数用于在界面中显示生成的图像。

当前生成的仅是海岸线轮廓,若需添加国界线,只需增加一行代码即可实现。
添加国界与河流
map.drawcountries()

至于河流的绘制,想必大家已经猜到方法,即调用drawrivers()函数。
map.drawrivers(color='blue',linewidth=0.3)

接下来,我们开始绘制中国地图。只需在创建地图实例时指定具体的经纬度范围即可。经查阅,中国的地理范围大致为东经73度40分至135度2分30秒,北纬3度52分至53度33分。
设定中国地图经纬度范围
map=Basemap(llcrnrlon=70,llcrnrlat=3,urcrnrlon=139,urcrnrlat=54)

至此,中国地图的基本轮廓已生成。但观察发现,地图中缺少省界信息。我们可以从https://gadm.org/download_country_v3.html下载中国大陆及台湾省的行政区域Shape文件,解压后将路径配置到代码中。
加载Shapefile数据绘制省界
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)

此外,我们可以在地图上叠加经纬网格。例如,若需绘制5条经纬线,可参考以下实现方式:
添加经纬网格线
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])

功能基本实现,但仔细观察会发现地图存在轻微变形。这可以通过在创建地图时指定投影参数来解决。
配置LCC投影参数修正变形
map=Basemap(llcrnrlon=70,llcrnrlat=3,urcrnrlon=137,urcrnrlat=54,
projection = 'lcc', lat_1 = 33, lat_2 = 45, lon_0 = 100)

经过上述调整,地图绘制正式完成。
以下是完整的代码示例:
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()
以上即为利用Python绘制中国地图的详细步骤,更多关于Python绘图的资料可关注本站其他相关文章。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













