作者:金良([email protected]) csdn博客:http://blog.csdn.net/u012176591
这里安装免费的精简的VC版本,下载链接[Microsoft Visual C++ 2008 Express Edition]
Visual C++提供了一套开发环境:Visual Studio,它是以C++语言和C语言为蓝本的可视化编译、开发环境,用微软的C++语言编写程序,并兼容C语言,可以识别C/C++语言并进行编译等。
该软件包的主页是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分钟),屏幕如走马观花一般走过许多编译信息,希望中途没有差错吧。
编译完成后软件包体积陡增,从10多M增加到200M左右,下图是编译结束的提示
因为安装Basemap需要调用GEOS包中的一些头文件和编译生成库,所以需要设置环境变量
为了方便,我把编译后的GEOS包(近200M)复制到C盘根目录下,如下图
设置的环境变量依次是:
后面的两个环境变量名如果已存在,就改为添加即可。
只需要一个命令,然后等待即可
pip install 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文件也可以存储这些空间对象的属性,例如一条河流的名字,一个城市的温度等等。
给出一个网址http://www.statsilk.com/maps/download-free-shapefile-maps,可以下载某个国家、城市等的地理数据。
如何在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