实现地图输出的相关知识

shapefile文件:Shapefile文件是描述空间数据的几何和属性特征的非拓扑实体矢量数据结构的一种格式,由ESRI公司开发。

一个Shapefile文件最少包括三个文件:
主文件(*.shp)、--存储地理要素的几何图形的文件。
索引文件(*.shx)、--存储图形要素与属性信息索引的文件。
dBASE表文件(*.dbf),--存储要素信息属性的dBase表文件。
除此之外还有很多可选的文件。
 
(1)到http://www.gadm.org/download 下载中国shapefile格式的资料,下载后的文件名为CHN_adm_shp.zip
Basemap主要是将位置的经纬度坐标转换到图中的坐标,因此要绘制某一个省的地图,需要知道对应的轮廓线信息,在Basemap中,这是通过shapefile来实现的。因此我们首先需要得到相关的文件信息,再将其导入Basemap中就可以了。
相关的shapefile可以从GADM()中下载,不过网站貌似不太容易打开。具体过程大致如下:
作者:何明涛
链接:https://www.zhihu.com/question/49669755/answer/117962271
来源:知乎
作者:何明涛
链接:https://www.zhihu.com/question/49669755/answer/117962271
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

#-*- 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()

  

tips:
1, 有非常详细的关于在Basemap中调用shapefile的说明。
2, 采用Basemap中自带的shapefile.py读取上述文件时,会提示错误,利下载解压后的shapefile.py替换就可以了。
主要用到的文件是CHN_adm.shp,另外CHM_adm.csv 可以用notepad打开查看一下文件内容
 
http://blog.csdn.net/ouening/article/details/55227364
 
posted @ 2017-04-11 18:58  小小财经  阅读(742)  评论(0编辑  收藏  举报