- 安装Python包
- 安装VC环境
- 编译安装GEOS
- 为GEOS设置环境变量
- 安装Basemap
- Basemap 的使用
- 参考文献
作者:金良(golden1314521@gmail.com) csdn博客:http://blog.csdn.net/u012176591
Basemap 的安装
安装Python包安装VC环境这里安装免费的精简的VC版本,下载链接[Microsoft Visual C++ 2008 Express Edition]
Visual C++提供了一套开发环境:Visual Studio,它是以C++语言和C语言为蓝本的可视化编译、开发环境,用微软的C++语言编写程序,并兼容C语言,可以识别C/C++语言并进行编译等。
编译安装GEOS该软件包的主页是http://trac.osgeo.org/geos/ ,网址http://download.osgeo.org/geos/ 提供了GEOS各个版本的软件包,这里用的版本是geos-3.3.3.tar。
下载解压后的目录如下图所示:
如果VC已经安装完毕,我们就能打开“Visual Studio 命令提示窗”,打开方式如下图所示,点击图中黑色框中的CMD即可。
在命令提示窗中切换到你的VC\bin目录(即C:\Program Files\Microsoft Visual Studio 9.0\VC>,打开命令提示窗就已经进入到VC目录,直接输入cd bin即可),然后键入以下命令
C:\Program Files\Microsoft Visual Studio 9.0\VC\bin>vcvars32.bat
然后在刚才的命令提示窗中切换到GEOS的解压目录,也就是上面那张图所示的目录,看到我用红色框标注的那两个文件了吗,它们与下面我们要执行的两个命令有关。
依次执行如下连个命令:
E:\geos-3.3.3\geos-3.3.3>autogen.bat
E:\geos-3.3.3\geos-3.3.3>nmake /f makefile.vc src_dir
经过漫长的等待(大约3-4分钟),屏幕如走马观花一般走过许多编译信息,希望中途没有差错吧。
下面这张图展示了编译GEOS的全过程
编译完成后软件包体积陡增,从10多M增加到200M左右,下图是编译结束的提示
为GEOS设置环境变量因为安装Basemap需要调用GEOS包中的一些头文件和编译生成库,所以需要设置环境变量
为了方便,我把编译后的GEOS包(近200M)到C盘根目录下,如下图
设置的环境变量依次是:
- 新建环境变量GEOS_DIR = C:\geos-3.3.3
- 新建环境变量include = C:\geos-3.3.3\capi
- 新建环境变量 lib = C:\geos-3.3.3\src;
后面的两个环境变量名如果已存在,就改为添加即可。
安装Basemap只需要一个命令,然后等待即可
pip install basemap
Basemap 的使用
首先要引入basemap包
from mpl_toolkits.basemap import Basemap
定义一个绘制地图的函数basic_map_plot
#程序输入是4个经度纬度参数,表示绘制范围,默认的纬度范围是17.25到20.25度,经度范围是-75到-71度。def basic_map_plot(ax=None, lllat=17.25, urlat=20.25, lllon=-75, urlon=-71): # 创建极球面投影的Basemap实例,projection='stere'表示地图类型是极球面,lon_0和lat_0表示地图中心点. m = Basemap(ax=ax, projection='stere', lon_0=(urlon + lllon) / 2, lat_0=(urlat + lllat) / 2, llcrnrlat=lllat, urcrnrlat=urlat, llcrnrlon=lllon, urcrnrlon=urlon, resolution='f') m.drawcoastlines() #绘制海岸线 m.drawstates() #绘制州界 m.drawcountries() #绘制国界 return m在地图上绘制坐标点
相关的代码如下:
fig = plt.figure()ax = fig.add_subplot(1,1,1)#下面根据中心点的维度和扩展范围计算4个边界参数lat0 = 18.533333;lon0 = -72.333333;change = 3;lllat=lat0-change; urlat=lat0+change; lllon=lon0-change; urlon=lon0+change;#调用basic_map_plot函数绘制基本地图,包括海岸线,国界等。m = basic_map_plot(ax, lllat=lllat, urlat=urlat,lllon=lllon, urlon=urlon)下面两行获得下一步要绘制的点的坐标(以经度和纬度表示)数据,不必深究,只知道cat_data是个DataFrame对象code = '2a'cat_data = data[data['category_%s' % code] == 1]# 将初始经纬度数据(cat_data.LONGITUDE.values, cat_data.LATITUDE.values)计算经过极球面映射后的坐标.x, y = m(cat_data.LONGITUDE.values, cat_data.LATITUDE.values)添加数据m.plot(x, y, 'k.', alpha=0.5)ax.set_title('Food shortages reported in Port-au-Prince')plt.savefig('myfig.png',dpi=400,bbox_inches='tight')在地图上添加街道数据
源码与前一个基本相同,Python源码如下:
#街道数据的路径shapefilepath = 'ch08/PortAuPrince_Roads/PortAuPrince_Roads'fig = plt.figure()ax = fig.add_subplot(1,1,1)lat0 = 18.533333;lon0 = -72.333333;change = 0.13;lllat=lat0-change; urlat=lat0+change; lllon=lon0-change; urlon=lon0+change;m = basic_map_plot(ax, lllat=lllat, urlat=urlat,lllon=lllon, urlon=urlon)m.readshapefile(shapefilepath,'roads') #添加街道数据code = '2a'cat_data = data[data['category_%s' % code] == 1]# compute map proj coordinates.x, y = m(cat_data.LONGITUDE.values, cat_data.LATITUDE.values)m.plot(x, y, 'k.', alpha=0.5)ax.set_title('Food shortages reported in Port-au-Prince')plt.savefig('myfig.png',dpi=400,bbox_inches='tight')上面代码调用的街道数据是shapefile类型的,ESRI Shapefile(shp),或简称shapefile,是美国环境系统研究所公司(ESRI)开发的一种空间数据开放格式。[1]目前,该文件格式已经成为了地理信息软件界的一个开放标准,这表明ESRI公司在全球的地理信息系统市场的重要性。Shapefile也是一种重要的交换格式,它能够在ESRI与其他公司的产品之间进行数据互操作。
Shapefile文件用于描述几何体对象:点,折线与多边形。例如,Shapefile文件可以存储井、河流、湖泊等空间对象的几何位置。除了几何位置,shp文件也可以存储这些空间对象的属性,例如一条河流的名字,一个城市的温度等等。
本代码所调用的shapefile文件目录如下所示:
给出一个网址http://www.statsilk.com/maps/download-free-shapefile-maps,可以下载某个国家、城市等的地理数据。
参考文献
链接:http://blog.sina.com.cn/s/blog_6ab074c30102w1an.html