15.1. GRASS 软件:模块化地理信息系统包

GRASS GIS是现存最古老的公共领域地理信息系统软件之一。它已拥有30多年的历史,由美国陆军建筑工程研究实验 室于1982年至1995年在美国与几所大学和联邦机构合作开发。1995年,贝勒大学(德克萨斯州韦科市)支持其开发, 尤其是在Linux上,并于1998年1月推出了GRASS 4.2.1版本,并进行了重大改进和新的图形界面。从GRASS 5(1999) 开始,公共许可证成为了GNU/GPL许可证。2006年2月, OSGeo 基金会成立,确保了GRASS在全球范围内的精心推广。 当前稳定版本(2016年12月发布)为GRASS 7.2.0。

GRASS 是一个模块化设计软件,也就是说,软件的每个功能都对应着一个模块。这使得只启动用户需要的模块来优化其操作成为可能。 这些模块被分成系列: g.* 用于一般函数(文件管理), d.* 用于显示函数, v.* 用于矢量函数, r.* 用于图像处理函数, r3.* 用于体积函数(三维栅格), t.* 用于时间序列, db.* 用于与数据库有关的函数, ps.* 用于生成后记地图, m.* 用于其他命令。

GRASS GIS软件集成了400多个数据处理模块。此外,社区维基站点( https://grasswiki.osgeo.org/wiki/GRASS-Wiki ). 还免费提供了100多个社区提供的模块和工具在下文中,我们仅介绍 v.*r.*i.*t.* 类型的主要命令, 它们出现在QGIS-GRASS接口的GRASS工具中(参见第3.2.2节),并按控制组标题的字母顺序列出。我们还提到了用于导入矢量和栅格的工具。

15.1.1. 矢量函数(v.*)

矢量函数可以分为以下几类:

  • 导入矢量函数 (v.in.*):

    • 以GDAL /OGR 库的标准格式导入矢量文件(地理空间数据抽象库, 请参见http://www.gdal.org/ogr_formats.html );

    • 导入DXF、ASCII(矢量或点)、ESRI e00、MapGen或MATLAB格式的矢量文件;

    • 从具有坐标的数据库中导入点矢量;

    • http://www.geonames.org/ 导入*geonames* 。

  • 管理矢量地图的功能

    • 拓扑管理:重构一个矢量(或所有的矢量数据集)的拓扑;

    • 用于清理矢量图的拓扑的工具;

    • 用于更改矢量图几何元素性质的工具(将线转换为边界,将点转换为质心,反之亦然);

    • 实体管理工具:将缺少的质心添加到闭合空间、沿直线创建点、将直线打断为线段等等;

    • 通过对高程栅格进行采样来转换2D和3D矢量;

    • 从另一个位置对矢量进行变换或重投影: 可以将仿射变换(平移、旋转、比例变化)应用于矢量地图(例如地理参考矢量数据),或更改投影;

    • 元数据支持:更新矢量地图的元数据;

    • 地图综合:这实际上是通过平滑来简化矢量地图。

  • 连接到数据库

    • 矢量地图和数据库的连接或断开;

    • 显示连接。

  • 空间分析

    • 矢量地图实体的提取:根据属性进行选择并提取向量,选择与另一地图实体重叠的实体(重叠);

    • 创建缓冲区;

    • 矢量几何分析:距离计算与搜索地图A的元素最接近地图B的元素;

    • 网络分析:网络的分配和维护,创建网络上节点的计算、最短路径的计算等;

    • 向量层上的逻辑运算:用于联合的工具,向量的交集、减法。

  • 更改字段

    • 添加或删除类别(点、线、边界、质心,等等)在地图上;

    • 根据属性或通过咨询对矢量进行重新分类数据库。

  • 点载体的工作工具

    • 创建标准向量:创建由当前区域的范围或创建网格(点、线或面);

    • 创建点:创建2D或3D随机位置文件,向矢量点的位置添加扰动;

    • 训练数据集的管理:随机分布点测试类别或消除矢量点的像差;

    • 三角剖分:Delaunay三角剖分、Voronoi图和凸信封。

  • 从其他地图更新的矢量数据:

    • 基于矢量的光栅统计计算与插入将统计数据添加到新的属性列中;

    • 将矢量地图上的点指定的矢量值添加到通过创建附加属性列;

    • 从矢量地图中的点指定的光栅地图中添加值通过创建附加属性列;

    • 使用矢量地图的点对光栅地图的值进行采样。

  • 统计数据和报告

    • 输出关于矢量层的基本信息;

    • 将几何变量从向量层发送到数据库;

    • 计算矢量层的几何统计量;

    • 计算矢量实体的统计数据;

    • 对一组向量点进行正态性检验。

15.1.2. 地理信息系统栅格功能(r.*)

GRASS 软件的特点是存在许多栅格地理信息系统功能,主要功能如下所述:

  • 导入光栅数据的函数:这些函数涉及导入外部光栅(r.in.gdal)或QGIS中显示的光栅(r.i.QGIS.gdal)对于GDAL库 接受的所有图像格式,可以创建在GRASS中,由导入光栅的地理范围定义的新区域。此外,某些功能涉及导入具有特定格式的 光栅数据例如光栅ASCII、二进制、SPOT-VGT NDVI、SRTM HGT、,Aster图像和数字高程模型(DEM)等,它们可以将 外部数据源链接到GRASS中,也就是说,将GDAL光栅层(甚至目录中的所有GDAL光栅)链接为输入GRASS光栅。

  • 管理光栅地图的功能

    • 光栅的压缩(或解压缩);

    • 光栅边界的定义(从光栅,从当前区域,从另一个光栅,从一个矢量,通过四个角的坐标等);

    • 光栅单元格值的管理:例如,转换单元格将值填入空单元格,反之亦然;

    • 空间分辨率的变化:通过聚合或重新采样光栅通过插值、专题地图重采样(无插值), 使用样条平滑进行重采样(可选根据高度光栅计算地形变量);

    • 创建或编辑光栅的基本信息(支持光栅)和更新光栅统计数据;

    • 通过使用光栅的地理投影来重新投影光栅当前位置。

  • 颜色表函数:目标是定义要分配给光栅的颜色表从现有表格或现有光栅中,或者基于从图像统计(平均值、标准偏差)导出的 用户定义规则。其他功能允许我们根据比例混合两个光栅组件的颜色,以从三个图像创建彩色合成图像(红色的加色合成, 屏幕上的绿色、蓝色层),并创建三个红色、绿色和蓝色层,从用作颜色值的三个图像中提取红色、绿色和蓝色分量, 强度和饱和度。

  • 空间分析

    • buffer:创建光栅,显示单元格周围的缓冲区具有非零值;

    • mask:从光栅或矢量创建掩码(二进制图像)以便能够将图像处理限制在掩码的非零值;

    • 制图代数(r.mapcalc):mapcalc是一个“光栅计算器”用于创建由算术或逻辑运算产生的光栅涉及多个光栅的操作;

    • 邻域分析:在指定大小的窗口(3×3像素,5×5像素等)计算各种统计量:均值、中值、,最小值、最大值、标准偏差等。; 另一个函数使它可以计算邻域中矢量点的数量窗户;

    • 覆盖图:通过组合多个光栅创建光栅(来自2至10)并获得相关联的统计数据;例如,使用将光栅A的单元格值设置为零值光栅B的单元;

    • 太阳能照明模型:本标题涵盖了两个功能,旨在使用高度光栅获得投影阴影的地图以及太阳的 位置(确切位置或根据日期估计)时间);

    • 地形分析:从高度栅格(DEM)计算对应于各种地形变量(坡度,方面、纹理统计、水流线等); 有还用于计算距离和累积成本根据DEM在位置之间移动;

    • 实体的转换:改变连续的范畴单元格,通过扩展相邻区域创建光栅,创建带有薄非零单元格的光栅单元格,表示存在线。

  • 空间建模:此类别中只有水文模型,即,对于流域,计算侵蚀和水文参数(RUSLE模型),创建子流域栅格等。

  • 类别和标签值的变化:考虑最小或最大面积大小对光栅进行重新分类,根据用户定义的规则对光栅进行重新分类, 光栅类别的重新编码,数值的改变为光栅的类别定义的范围。

  • 表面功能

    • 同心圆:创建包含同心圆的地图;

    • 随机点的创建:包含随机向量点的创建在光栅中,或创建新的光栅和/或一组随机光栅矢量点;

    • 生成曲面:创建给定曲面的分形曲面分形维数,矢量密度光栅的创建使用加权核函数创建平面光栅具有给定倾斜度的地图等;

    • 生成矢量轮廓线:例如,创建水平线来自光栅DEM;

    • 插值区域:目的是通过插值创建光栅从矢量点文件;各种插值算法建议:通过距离的倒数加权,双线性或双三次样条等; 还可以从以下内容生成光栅等高线(例如,从以下位置创建立面光栅数字化轮廓线)。

  • 报告和统计:报告涉及栅格的基本信息及其类别和标签; 提供的统计数据为栅格类别的表面统计和单变量统计;还可以计算多个栅格的协方差/相关矩阵、 网格值之间的回归线,建立两个栅格的类别之间的互现(重合)表, 并计算两个栅格中指定的类别对象之间的距离。

  • 查询光栅图层:通过定义坐标,我们可以获得归因于以下内容的值(类别,以及可选的标签)指定的光栅单元格**

15.1.3. 图像功能(i.*或r.*)

  • 开发组和图像:i.image.mosaic命令允许我们构建多个图像(最多4个)的马赛克,并将颜色表扩展到生成的图像。

  • 图像颜色管理

    • i.rgb.his:rgb=>his转换,允许我们从红-绿-蓝空间到色调-强度-饱和度(HIS)空间;-i.his.rgb: 逆变换HIS=>RGB,从HIS空间到红-绿-蓝空间;-i.颜色增强:红-绿-蓝彩色合成图像的自动色彩平衡; 这实际上是一个对比度增强过程,通过删除给定百分比(默认为2%)来拉伸每个通道的直方图 最低和最高值;该程序处理8位编码图像(256级),但可以适用于在更高级别上编码的数据i.pansharpen:pansharpening算法, 这是一个融合高分辨率全色和低分辨率多光谱的过程创建单个高分辨率彩色图像(见第3.7节)。

  • 图像过滤

    • i.zc:边缘检测算法;这是一种“过零”类型基于图像傅里叶变换的滤波算法使用高斯二维函数,然后使用逆函数转型; 边界像素是局部的(这些是值改变符号的结果图像)和方向边界也被检测到;

    • r.mfilter:图像卷积滤波算法*n x n*像素的矩阵(其中*n*是奇数:3,5,…);筛选器是用户提供的ASCII文件, 用于指定矩阵的值和结果的除数。

  • Tasselled Cap植被指数:所谓的“Tasseled Cap”植被指数,可以计算Landsat TM的相关指数, 陆地卫星ETM+和MODIS图像(见第3.8节)。

  • 图像变换:i.fft命令允许我们实现空间二维图像的变换(快速傅里叶变换)和逆变换。

  • 统计数据和报告

    • r.describe:显示包含在光栅层;

    • i.modis.qc:提取质量并将其记录在文件中的命令MODIS图像的控制参数(QC);

    • r.kappa:基于分类结果和基本事实光栅图像、混淆矩阵的计算及其推导 kappa 系数。

15.1.4. 时间函数(t.*)

这些功能使我们能够创建和处理时间序列数据,例如地球表面同一区域的多日期遥感图像。 处理这些系列图像的目的是监测土地利用/土地覆盖变化(多时分析)和地表的其他动态现象。

  • 数据库管理:

    • t.create:创建时空光栅数据集(STRDS),空间时间三维光栅数据集(STR3DS)或时空矢量数据集(STVDS);

    • t.rename:重命名时间序列;

    • t.remove:从时间数据库中删除时间序列;

    • t.support:修改与时间序列相关的元数据;

    • t.merge:将数据集的多个时间序列合并为一个时间序列;

    • t.shift:这允许时间序列数据集的层随着时间的推移而变化;

    • t.snap:此命令用于通过以下方式将时间序列相互关联将时间序列的最后一个数据与最近的数据相关联未来;

    • t.list:显示时间序列数据集和层的列表存储在时间数据库中;

    • t.connect:时态GIS数据库和当前数据库之间的连接数据集;默认情况下,在数据集中创建Sqlite数据库 目录(tgis.sqlite.db);在非常长的数据序列的情况下,我们可以选择PostgreSQL类型的时间数据库;

    • t.select:按时间序列数据集的层选择使用时态与其他数据集的拓扑关系代数;可选地,数据的空间和时间关系集合可以组合。

  • 管理数据集中的层:以时间序列保存栅格、栅格3D或载体层的命令,或者相反地删除层,并列出存储在系列中的层。

  • 导出和导入命令:允许我们将光栅或矢量文件导出到GRASS GIS存档文件,反之,也可以从存档中导入。

  • 光栅时间序列的3D表示:t.rast.to.rast3.py命令用于创建光栅层(xy)的体素平行六面体3D xyz表示,时间维度在z轴上。

  • 提取命令:从数据集中检索子集的命令(光栅、光栅3D或矢量)。

  • 其他命令

  • t.vect.db.select:打印存储在矢量数据时间序列中的矢量层的属性;

  • t.rast.colors.predefined:为每个光栅层分配一个预定义的颜色表;大约有50个预定义的颜色表,其中一些适合查看坡度、坡向、NDVI等参数;

  • t.rast.colors.rules:根据时间序列中光栅层集中观察到的值范围创建颜色表;

  • t.rast.colors.copy:参照光栅或3D光栅的颜色表创建颜色表;

  • t.rast.mapcalc:使用光栅计算器“mapcalc”对时间序列的光栅时间样本执行操作;

  • t.rast3d.mapcalc相当于3D光栅;

  • t.rast.capfill:如果时间序列中没有日期的数据,则创建一个光栅,其值由所讨论日期前后的光栅值插值得到。

  • 汇总

    • t.rast.neighbors:修改一个时间的光栅层的值通过对用户定义的像素执行计算来生成序列邻域(参见r.neighbors命令); 例如平均值平滑最近的四个邻居或八个邻居(计算中包括中心像素);

    • t.rast.series:对于时间序列,这相当于光栅命令r.series。它允许我们创建一个光栅, 作为结果对序列(或子集)中的光栅集进行计算,例如,回归线原点处的平均值、中值、最小值、最大值、斜率和纵坐标时间演变;

    • t.rast.aggregate:用于聚合时间序列光栅的命令用户定义的“时间粒度”(年、月、周等);例如从月度数据中获得年降雨量;

    • t.rast.aggregate.ds:操作与前一个命令相同,但粒度由光栅的另一时间序列的粒度定义; 这使得两次时间步长的均匀化成为可能系列;

    • t.rast.accumulate:此命令对一组时间序列的光栅(例如总和或平均值),考虑到最小阈值和最大阈值(在数据的情况下以度日表示);

    • t.rast.acc.detect:从创建的光栅开始t.rast.accumulate,检测最小值和观察到最大值

    (这些值可能对所有单元格都是固定的,或者为专用光栅中的每个单元格指定),用户定义计算的开始和结束日期以及

    周期的持续时间待分析(以及可能跳过的时间段循环),例如检测开始日期(发芽)和作为时间函数的营养周期 结束(收获)以“度日”表示的一系列温度。

  • 抽样

    • t.sample:根据参考时间对光栅的时间序列进行采样系列(光栅或矢量);

    • t.vect.what.strds:记录光栅时间序列的值从一组矢量点在空间和时间上定位为矢量属性;

    • t.vect.observe.strds:在给定的时间段内搜索值在矢量定义的位置处的一个或多个光栅时间序列中点层。

  • 统计数据和报告

    • t.info:列出数据时间序列的基本信息;

    • t.rast.univar、t.rast3d.univar、t.vect.univar:命令计算数据时间序列的单变量统计量(分别,光栅、光栅3D和矢量);

    • t.topology:列出了一系列的拖延(如开始、开始、结束、结束等关系),等于、包含等)。