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

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


发布日期: 2017-10-30 更新日期: 2017-10-30 编辑:xuzhiping 浏览次数: 6399

标签:

摘要: 1.安装Python包 Python 2.7 numpy pandas 安装VC环境 这里安装免费的精简的VC版本,下载链接[Microsoft Visual C++ 2008 Express Edition] Visual C++提供了一套开发环境:Vis...

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

下载解压后的目录如下图所示:

如果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)开发的一种空间数据开放格式。目前,该文件格式已经成为了地理信息软件界的一个开放标准,这表明ESRI公司在全球的地理信息系统市场的重要性。Shapefile也是一种重要的交换格式,它能够在ESRI与其他公司的产品之间进行数据互操作。

Shapefile文件用于描述几何体对象:点,折线与多边形。例如,Shapefile文件可以存储井、河流、湖泊等空间对象的几何位置。除了几何位置,shp文件也可以存储这些空间对象的属性,例如一条河流的名字,一个城市的温度等等。

本代码所调用的shapefile文件目录如下所示:

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

关注公众号
获取免费资源

随机推荐


Copyright © Since 2014. 开源地理空间基金会中文分会 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org