绘制地图库Basemap的安装与使用


绘制地图库Basemap的安装与使用_第1张图片

  • Basemap 的安装
    • 安装Python包
    • 安装VC环境
    • 编译安装GEOS
    • 为GEOS设置环境变量
    • 安装Basemap
  • Basemap 的使用
    • 在地图上绘制坐标点
    • 在地图上添加街道数据
  • 参考文献

作者:金良([email protected]) csdn博客:http://blog.csdn.net/u012176591

Basemap 的安装

安装Python包

  • Python 2.7
  • numpy
  • pandas

安装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。

下载解压后的目录如下图所示:
绘制地图库Basemap的安装与使用_第2张图片

如果VC已经安装完毕,我们就能打开“Visual Studio 命令提示窗”,打开方式如下图所示,点击图中黑色框中的CMD即可。
绘制地图库Basemap的安装与使用_第3张图片

在命令提示窗中切换到你的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的全过程
绘制地图库Basemap的安装与使用_第4张图片

编译完成后软件包体积陡增,从10多M增加到200M左右,下图是编译结束的提示
绘制地图库Basemap的安装与使用_第5张图片

为GEOS设置环境变量

因为安装Basemap需要调用GEOS包中的一些头文件和编译生成库,所以需要设置环境变量

为了方便,我把编译后的GEOS包(近200M)复制到C盘根目录下,如下图

设置的环境变量依次是:

  • 新建环境变量GEOS_DIR = C:\geos-3.3.3
    绘制地图库Basemap的安装与使用_第6张图片
  • 新建环境变量include = C:\geos-3.3.3\capi
    绘制地图库Basemap的安装与使用_第7张图片
  • 新建环境变量 lib = C:\geos-3.3.3\src;
    绘制地图库Basemap的安装与使用_第8张图片

后面的两个环境变量名如果已存在,就改为添加即可。

安装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

在地图上绘制坐标点

绘制地图库Basemap的安装与使用_第9张图片
相关的代码如下:

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文件目录如下所示:
绘制地图库Basemap的安装与使用_第10张图片

给出一个网址http://www.statsilk.com/maps/download-free-shapefile-maps,可以下载某个国家、城市等的地理数据。

参考文献

  • GEOS
    http://trac.osgeo.org/geos/
  • Basemap install
    http://matplotlib.org/basemap/users/installing.html
  • Windows、VS下(以Visual Studio 2010为例)配置GDAL+GEOS库
    http://blog.sina.com.cn/s/blog_46ed5b1001019lbt.html
  • 如何在cmd命令行中查看、修改、删除与添加环境变量
    http://blog.csdn.net/wzsbll/article/details/6690895

  • basemap API
    http://matplotlib.org/basemap/
    http://matplotlib.org/basemap/api/basemap_api.html#module-mpl_toolkits.basemap

  • shp文件查看器ShapeExplorer
    http://www.liangchan.net/liangchan/4558.html

你可能感兴趣的:(绘制地图-图形化,basemap)