GRASS GIS:三十年历史的开源GIS软件
目录
GRASS GIS是开源平台下一个重量级的GIS软件。20世纪80年代初,美国军方建筑工程研究实验室(USA/CERL)的Bill Gorgan负责遴选一款具有土地管理、环境规划、环境评估的GIS软件。但最终竟没有一款软件符合上述要求,不得已Gorgan开始组织一批志愿者进行GIS软件设计及开发。1982年第一款名为FHIS(Fort Hood Geographic Information System)的GIS软件在VAX/Unix系统上实现了,它能支持基本的栅格数据Overlay与布尔计算。1983年在系统功能得到进一步完善,及成功移植到SUN-1 Microcomputer后,FHIS改名为IGIS(Installation Geographic Information System)。1984年,IGIS正式命名为GRASS(Geographic Resource Analysis Support System)。1991年,GRASS4.0使用Internet进行发布。1995年GRASS4.1.5 移植到Linux平台。1995年,资助并主导GRASS开发近13年的USA/CERL正式退出。直到1997年,由Baylor University成立的“GRASS Research Group”从USA/CERL接过了GRASS的开发工作,1998年发布了GRASS 4.2.1,从此GRASS在学术界迅速流行起来。1999年,GRASS 5.0发布,从此走上了良性发展的道路,也使GRASS GIS再一次成为开放源代码领域最优秀的GIS软件。目前GRASS GIS新版本不但继承了旧版本30多年的设计经验,还充分借鉴了其他开发源代码GIS软件包丰富程序资源和强大功能模块,成为了当之无愧的开源GIS软件的佼佼者。
GRASS GIS7.0.0下载地址如下:
New stable LTS release: GRASS GIS 7.0.0
Mac OSX
Windows
Linux
… and Addons
- GRASS GIS的结构
GRASS GIS使由一组分工明确、相互独立、功能强大的模块组成,具有良好的扩展性和伸缩性。
- GRASS 数据的Import/Export
GRASS 使用GDAL/OGR实现二维空间数据的Import/Export。该模块可以支持常见的空间数据文件格式与空间数据库访问。
- GRASS 数据的投影转换
GRASS使用PROJ4实现地图投影,可以支持120余种投影和地理坐标系统。
- GRASS的空间数据库实现方法
GRASS可以广泛利用DBF、ODBC等嵌入式数据库,还能利用PostgreSQL、MySQL、Sqlite等关系型数据库。特别是PostgreSQ已经成为GRASS处理海量数据的主要空间数据库环境。
- GRASS的地学统计实现方法
GRASS的地学统计部分利用了著名的GNU R,能进行各种统计模型的构建。
- GRASS的三维实现方法
GRASS引入了Voxel的概念,提供了3D体元的内插方法。如IDW、RST和三位可视化NVIZ模块,实现了二维与三维、矢量与栅格数据的融合显示环境。
GRASS GIS 快速入门
启动
在 Live 系统中,点击桌面上的 GRASS 图标,即可启动 GRASS GIS 。在“Welcome to GRASS”页面可以选择 Spearfish 或 simplified North Carolina (nc_basic_spm) 数据集,“user1”工程,并点击 [Start Grass] 启动。本文档中使用的示例数据集是 Spearfish 。
这将启动 GRASS GIS 。本版本的 GRASS 使用了 基于 wxPython 的新界面 。
Tip
若屏幕分辨率很小(例如 800×600),界面可能过于拥挤,以至于 [Start GRASS] 可能被覆盖。此时按住 Alt 将窗口部分拖出屏幕,并将窗口边框拖拽扩大可以解决问题。
地图显示
根据所选择的数据集位置,从 PERMANENT mapset 添加 elevation.10m 或elevation 数据集。在 Layer Manager 图层管理器点击显示一个格网和加号的图标,并从 “map to be displayed” 下拉菜单,点击 [Ok] 。
同样,点击 V 型折线和加号图标可以添加 roads 或 roadsmajor 等矢量线图层。
右键单击一个图层选择 Zoom to selected map(s) 可以缩放至全局。
绘制地形剖面
在 Layer Manager 图层管理窗口,选中 elevation 图层,点击工具栏中的折线图图标,并选择 Profile surface map 。若没有自动选中,在对话框中选中所需图层亦可。点击 [Ok] 。选择左侧第二个图标可以创建剖面线。
生成随机表面
首先,在 Settings ‣ Region ‣ Set region 选择 Set from default region 设定默认区域,点击 [Run] ,然后使用 Raster ‣ Generate surfaces ‣ Fractal surface 创建一个基于分形算法的随机表面。在 Optional 可以进一步调整设置。点击 [Run] 执行。点击 [Close] 可以关闭 r.surf.fractal 模块的界面。
颜色设置
执行前述步骤后,在 user1 地图集下应当存在两个栅格数据图层。取消勾选 elevation可以关闭该图层的显示。若需要,点击眼睛图标刷新显示。
这里要改变分形图层的渲染颜色设置。选中该图层,在 Raster 菜单选择 Manage colors ‣ Color tables 。在 Colors 选项卡的下拉菜单 Type of color table 中选择一个。示例截图中选择的是 srtm 。完成后点击 [Run] 并关闭 r.colors 窗口。
显示将自动刷新。通过改动图层的元数据设置也可以强制刷新显示缓存。工具栏上的刷新按钮(第二个)亦可用于刷新。
地形阴影图
这里使用 elevation 高程模型生成地形阴影图。首先,在主图层列表中右键单击elevation 图层,选择 Set computation region from selected map(s) ,然后在 raster 目录选择 Terrain analysis ‣ Shaded relief (位于菜单中部),参数面板将会显示。
确认输入数据选择无误后点击 [Run] 。完成后将生成的 elevation.shade @user1 加入显示,关闭其它的图层。
河流和汇水区分析。
同样选择 elevation @PERMANENT 图层,在 Raster 菜单选择 Hydrologic modeling ‣ Watershed analysis 。 r.watershed 模块将启动。设置 elevation 图层为输入,在 ‘Input options’ 设置 threshold 最小汇水区面积 为 10000 像元,在 ‘Output options’ 的 watershed basin 设置 “elev.basins” ,stream segments
设置 “elev.streams” 。点击 [Run] 执行。
在图层列表窗口选中新生成的两个图层,右击 “elev.basins” 选择 “Change opacity level 设置透明度” ,设为 50% 左右。若有需要,鼠标拖拽可以改变图层顺序,从而将该图层至于上方。
在图层窗口点击右侧第二个图标,选择 Add a grid layer 。在 size of grid 输入 0:03(0 度 3 分,格式为 D:M:S),在 “Optional” 选项卡勾选 </a>Draw geographic grid
,点击 [Ok] 并刷新。
下面添加比例尺。点击工具栏右侧的 Add map elements 按钮,选择 “Add scalebar and north arrow” 并勾选 show ,点击 [Ok] 。比例尺默认将出现在地图的左上角。拖拽可以改变其位置。同样,选择 “Add legend” ,点击 “Set Options” 并选中 “elev.basins” 并点击 [Ok] 可以生成其图例。
目前显示使用的是默认的字体。在图层管理窗口打开 Settings ‣ Preferences ,在 “Map Display” 选项卡点击 [Set font] ,选择偏好的字体,点击 [Apply] 。完成后刷新显示。
矢量处理模块
以上演示均为栅格数据操作。另一方面,作为一套完善的 GIS 系统,GRASS 同样具有强大的矢量数据处理能力,具备完备的拓扑构建和分析功能。
以上使用栅格方法生成了汇水区模型,这里要将其转换为矢量数据。在 Raster 菜单选择Map type conversions ‣ Raster to vector 在 r.to.vect 对话框中,选中 basins @user1 作为 input 输入 ,设置一饿该输出名称(例如 basins_areas,应当满足</span> <span>SQL</span> <span>语言的格式要求),</span> <span>`feature</span> <span>type`</span> <span>设为</span> <span>`area`</span> <span>。在</span> <span>`Attributes`</span> <span>选项卡选择</span> <span>“raster</span> <span>values</span> <span>as</span><span>category</span> <span>numbers”,使用之前创建的栅格数据的参数作为多边形号。点击</span> <span>[Run]</span> <span>运行即可。矢量数据生成并显示后,建议调整其透明度。右击</span> <span>
basins_areas 图层,在Properties 的 Selection 选项卡可以取消 rendering of area centroids 以关闭中心点显示。
下一步将要为新的多边形添加属性数据。这里输入的是各个汇水区的平均高程。在Vector 选择 :menuselection:Update attributes –> Update area attributes from raster
启动 v.rast.stats 模块。使用 basin_areas 作为多边形图层,使用 elevation 作为栅格输入,输入栏目名称的前缀如 ele ,点击 [Run] 运行。在地图显示窗口,点击工具栏第五个图标可以查询任意位置对应多边形的属性。
使用 v.colors 模块可以依据属性改变多边形的颜色显示。在 Vector 选择 :menuselection:Manage colors –> Color tables
,以 basin_areas 作为 “input vector map” ,以 ele_mean 标注上一项生成的统计参数栏,并在 Colors 选项卡中复制 elevation栅格的颜色数据。运行后,在图层列表点击 basin_areas 选择 Properties ,在 Colors 勾选 “getting colors from the map table column” ,点击 [Apply] ,显示将刷新。
以下演示属性表和 SQL 工具的操作。在图层表点击形似表格的图标(底部第二个),将显示当前连接的数据表。这里仅就前述汇水盆地进行简单的标准差查询。在 SELECT * FROMbasin_areas WHERE 的下拉菜单选择 ele_stddev (标准差)作为查询对象,输入 < 50 并点击 [Apply] 确认。执行后,显示的数据项目将会减少,高程标准差较大的对象被排除了。右击表格选择 Select all 选中全部,再次右击选择 Highlight selected features 。选中的要素将会高亮显示。
3D 可视化
在 File ‣ NVIZ 开启 3D 可视化工具。选择 elevation 作为 “raster elevation” 。在开启的界面中,选择 Visualize ‣ Raster Surfaces ,设置 fine resolution 为 “1”。调节视角控制滚动条尝试不同的视角。
为在 DEM 上叠加影象,在 Raster Surfaces 选择 Surface Attributes 菜单,在 “color” 项目中创建 “New Map” 。在前述 Spearfish 数据集选择 spot.image 是较好的选择。在 North Carolina 数据集可用 lsat7_2002_50 。点击 “Accept” 并在主窗口点击 “Draw”(左上角)。
其它操作
很多用户可能想尝试 Cartographic Composer 制图工具和 object-oriented Graphical Modeling 面向对象的影象建模系统。其启动图标位于主界面底部工具栏。有关说明位于wxGUI 。
新图形界面系统是使用 Python 语言编写的。对于 Python 开发人员,以下工具可能会很有用: 在图层窗口底部点击 Python shell ,使用 help(grass.core) 可以查看全部的核心 Python GIS 组件。此外,array
(NumPy)、db
(database)、raster
和 vector 都是重要的组件。为使用 GRASS 丰富的 C 函数库,可使用 Pythons CTypes 。
命令行和关闭
使用 File ‣ Exit GUI 关闭图形界面。在关闭 GRASS 命令行之前,尝试使用 g.manual –help 获取帮助信息。GRASS 是一套倾向于丰富的命令行函数库功能而非图形界面开发的 GIS 系统,适用于通过脚本实现批处理。脚本语言支持 Bourne Shell 和 Python ,两者均有良好的开发环境。应用这些工具,一个包含语法分析器、图形界面和文档模板的 GRASS 模块框架只需 5 分钟左右即可完成。
使用 g.manual -i 可以于浏览器中开启帮助文档。
输入 exit 关闭 GRASS 系统。
其它信息
- GRASS 官方网站 http://grass.osgeo.org
- GRASS Wiki http://grasswiki.osgeo.org/wiki/
- 更多介绍与教程 here.
- GRASS 功能模块详解 <http://grass.osgeo.org/gdp/grassmanuals/grass64_module_list.pdf>`_, including 图形界面选项位置参考 (HTML 版本)
- 除了内建的约 400 个模块,GRASS 还提供大量用户制作的附加模块http://grass.osgeo.org/grass70/manuals/addons/