matplotlib的basemap怎样绘制分省地图

Python与开源GIS

matplotlib的basemap怎样绘制分省地图

2017-10-30 作者: xuzhiping 浏览: 3984 次

摘要: Basemap主要是将位置的经纬度坐标转换到图中的坐标的,因此要绘制某一个省的地图,需要知道对应的轮廓线信息,在Basemap中,它是通过shapefile来实现的。因此我们首先需要得到相关的文件信息,并再将其导入Basemap中就可以了。相关的shapefi....

Basemap主要是将位置的经纬度坐标转换到图中的坐标的,因此要绘制某一个省的地图,需要知道对应的轮廓线信息,在Basemap中,它是通过shapefile来实现的。因此我们首先需要得到相关的文件信息,并再将其导入Basemap中就可以了。相关的shapefile可以从GADM(http://www.gadm.org)中下载,不过网站不太容易打开。具体过程如下:

#-*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap 
from matplotlib.patches import Polygon

fig = plt.figure()
ax1 = fig.add_axes([0.1,0.1,0.8,0.8])
bmap = Basemap(llcrnrlon=115,llcrnrlat=23,urcrnrlon=121,urcrnrlat=29,
            projection='lcc',lat_1=33,lat_2=45,lon_0=120, ax=ax1)
shp_info = bmap.readshapefile('CHN_adm/CHN_adm3','states',drawbounds=False)

for info, shp in zip(bmap.states_info, bmap.states):
    proid = info['NAME_1']
    if proid == 'Fujian':
        poly = Polygon(shp,facecolor='w',edgecolor='b', lw=0.2)
        ax1.add_patch(poly)

bmap.drawcoastlines()
bmap.drawcountries()
bmap.drawparallels(np.arange(23,29,2),labels=[1,0,0,0])
bmap.drawmeridians(np.arange(115,121,2),labels=[0,0,0,1])
plt.title('Fujian Province')
plt.savefig('fig_province.png', dpi=100, bbox_inches='tight')
plt.clf()
plt.close()

结果大概是这样子的:

随机推荐

Copyright © 2014-2019 OSGeo中国中心 吉ICP备05002032号

Powered by TorCMS