爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 17467|回复: 8

[经验总结] 分享清风的新浪博客——绘制地图库Basemap的安装与使用

[复制链接]

新浪微博达人勋

发表于 2017-6-2 11:07:14 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

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


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

作者:金良(golden1314521@gmail.com) 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。

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


如果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



密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-6-2 11:12:32 | 显示全部楼层
又整回Python anaconda2.7版本,又在跟basemap战斗!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-6-2 11:25:41 | 显示全部楼层
本帖最后由 Swallow 于 2017-6-2 11:31 编辑

从网站上下载了最新的basemap1.1.0,死活装不上,还提示这个错误,究竟为何?


basemap安装出错信息

basemap安装出错信息

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-6-2 18:14:46 | 显示全部楼层
新版本的basemap有什么不同的东西吗
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-6-7 07:45:21 | 显示全部楼层
这个一般用anaconda来进行管理就行了,自己手动安装太累了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-6-7 12:50:42 | 显示全部楼层
又是那隻貓 发表于 2017-6-7 07:45
这个一般用anaconda来进行管理就行了,自己手动安装太累了

我们这里的网太不给力了,所以死活装不上!真是想方设法才装上!anaconda上没有集成basemap,每次都是单独装!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-8-5 23:04:42 | 显示全部楼层
Swallow 发表于 2017-6-2 11:25
从网站上下载了最新的basemap1.1.0,死活装不上,还提示这个错误,究竟为何?

需要安装同版本的Pyproj
http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyproj
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-8-6 07:06:52 | 显示全部楼层
有网就可以到清华开源镜像维护的源来安装这些东西。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-8-7 10:21:41 | 显示全部楼层
厉害。。。。。。。。。。。。。。
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表