Grass GIS集成¶

Docs in progress for 'QGIS testing'. Visit https://docs.qgis.org/3.4 for QGIS 3.4 docs and translations.

Grass集成提供了对Grass GIS数据库和功能的访问(请参阅中的Grass-Project 文献和网络参考 )集成由两部分组成:提供者和插件。提供程序允许浏览、管理和可视化草地栅格和矢量层。该插件可用于创建新的草地位置和地图集,更改草地区域,创建和编辑矢量层,并使用400多个草地模块分析草地二维和三维数据。在本节中,我们将介绍提供者和插件功能,并给出一些管理和使用Grass数据的示例。

提供程序支持Grass版本6和7,插件支持Grass 6和7(从qgis 2.12开始)。QGIS发行版可能同时包含Grass 6或Grass 7或这两个版本的提供程序/插件(二进制文件具有不同的文件名)。但是,在运行时上只能加载一个版本的提供程序/插件。

演示数据集

作为一个例子,我们将使用qgis阿拉斯加数据集(参见第节 下载示例数据 )它包括一小样草 LOCATION 有三个矢量层和一个栅格高程图。创建一个名为 grassdata ,下载qgis“阿拉斯加”数据集 qgis_sample_data.zip 从https://qgis.org/downloads/data/并将文件解压缩到 grassdata .

更多样品草 LOCATIONs 可在Grass网站https://grass.osgeo.org/download/sample data/获取。

加载草地栅格和矢量图层

如果提供者加载到qgis中,则包含grass的location项 grass 图标将添加到浏览器树中包含草地位置的每个文件夹项下。转到文件夹 grassdata 并扩展位置 alaska 和MAPSET demo .

通过双击图层项目或拖放到地图画布或图例,可以从浏览器中加载草地栅格和矢量图层,就像任何其他图层一样。

小技巧

草数据加载

如果您没有看到草地位置项目,请在 Help ‣ About ‣ Providers 如果加载了Grass Vector Provider。

通过拖放将数据导入草地位置

本节提供了如何将栅格和矢量数据导入草地地图集的示例。

  1. 在QGIS浏览器中,导航到要导入数据的地图集。
  2. 在qgis浏览器中,找到要导入到草地的图层,请注意,可以打开浏览器的另一个实例。( Browser Panel (2) )如果源数据离树中的映射集太远。
  3. 拖动层并将其放到目标地图集上。对于较大的层,导入可能需要一些时间,您将看到动画图标。 import 在新图层项前面,直到导入完成。

当栅格数据位于不同的CRS中时,可以使用 Approximate (快)或 Exact (精确)变换。如果创建到源栅格的链接(使用 r.external )源数据在同一个CRS中,格式为GDAL已知,将使用源数据CRS。您可以在 Browser 制表符 草料选项 .

如果源栅格具有更多条带,则会为每个层创建一个新的草地地图,其后缀为**。<band number>>**并将所有地图分组为 rasterGroup 图标已创建。外部栅格具有不同的图标 rasterLink .

在QGIS浏览器中管理草地数据

草料选项

草地选项可以设置在 GRASS Options 对话框,右键单击浏览器中的位置或地图集项,然后选择 GRASS Options .

启动Grass插件

要在QGIS中使用Grass功能,必须使用插件管理器选择并加载Grass插件。要执行此操作,请转到菜单 Plugins ‣ showPluginManager Manage and Install Plugins... 选择 checkbox GRASS 然后点击 OK .

草菜单提供以下主要功能( Plugins ‣ GRASS )启动Grass插件时:

打开草地地图集

必须打开草地地图集才能访问插件中的草地工具(如果没有打开地图集,则禁用工具)。可以从浏览器中打开地图集:右键单击地图集项,然后选择 Open mapset 从上下文菜单。

草地位置和地图集

Grass数据存储在一个称为gisdbase的目录中。此目录,通常称为 grassdata 必须在开始使用QGIS中的Grass插件之前创建。在这个目录中,Grass GIS数据由存储在名为 LOCATIONs .每个 LOCATION 由其坐标系、地图投影和地理边界定义。各 LOCATION 可以有几个 MAPSETs (的子目录 LOCATION )用于将项目细分为不同的主题或子区域,或作为单个团队成员的工作区(参见Neteler&Mitasova 2008年 文献和网络参考 )为了使用Grass模块分析矢量和栅格图层,通常必须将它们导入到草地中。 LOCATION . (这不是严格意义上的——草模块 r.externalv.external 您可以创建到外部GDAL/OGR支持的数据集的只读链接,而无需导入它们。这不是初学者使用草地的常见方法,因此此处不介绍此功能。)

../../../_images/grass_location.png

阿拉斯加地区的草地数据

将数据导入草地位置

见节 通过拖放将数据导入草地位置 通过在浏览器中拖放来查找如何轻松导入数据。

本节给出了如何将栅格和矢量数据导入“阿拉斯加”草地的示例。 LOCATION 由QGIS“阿拉斯加”数据集以传统方式提供,使用标准Grass模块。因此,我们使用土地覆盖栅格图 landcover.img 和矢量GML文件 lakes.gml 来自QGIS“阿拉斯加”数据集(参见 下载示例数据

  1. 启动QGIS并确保加载了Grass插件。
  2. 在“草地”工具栏中,单击 grassOpenMapset Open MAPSET 图标显示 MAPSET 巫师。
  3. 选择文件夹作为Grass数据库 grassdata 在qgis阿拉斯加数据集中, LOCATION “阿拉斯加” MAPSET “演示”并单击 OK .
  4. 现在点击 grassTools Open GRASS tools 偶像。草地工具箱(参见第节 草地工具箱 )对话框出现。
  5. 导入栅格地图 landcover.img ,单击模块 r.in.gdalModules Tree 标签。此Grass模块允许您将gdal支持的栅格文件导入Grass LOCATION . 的模块对话框 r.in.gdal 出现。
  6. 浏览到文件夹 raster 在qgis“阿拉斯加”数据集中选择文件 landcover.img .
  7. 作为栅格输出名称,定义 landcover_grass 然后点击 Run . 在 Output 选项卡,您将看到当前正在运行的grass命令 r.in.gdal -o input=/path/to/landcover.img output=landcover_grass .
  8. 当它说 已成功完成, 点击 View Output . 这个 landcover_grass 栅格层现在导入到草地中,并将在QGIS画布中可视化。
  9. 导入矢量GML文件 lakes.gml ,单击模块 v.in.ogrModules Tree 标签。此Grass模块允许您将支持OGR的矢量文件导入到Grass中 LOCATION . 的模块对话框 v.in.ogr 出现。
  10. 浏览到文件夹 gml 在qgis“阿拉斯加”数据集中选择文件 lakes.gml 作为OGR文件。
  11. 作为矢量输出名称,定义 lakes_grass 然后点击 Run . 您不必关心本例中的其他选项。在 Output 选项卡您可以看到当前正在运行的草地命令 v.in.ogr -o dsn=/path/to/lakes.gml output=lakes\_grass .
  12. 当它说 成功完成, 点击 View Output . 这个 lakes_grass 矢量层现在导入到草地中,并将在qgis画布中可视化。

创建新的草地位置

举个例子,这里是草的样本 LOCATION alaska 以英尺为单位,在阿尔伯斯等面积投影中进行投影。这草样品 LOCATION alaska 将用于以下草地相关章节中的所有示例和练习。在您的计算机上下载和安装数据集非常有用(请参见 下载示例数据

  1. 启动QGIS并确保加载了Grass插件。
  2. 形象化 alaska.shp 形状文件(参见第节 从文件加载层 )来自QGIS阿拉斯加数据集(参见 下载示例数据
  3. 在草地工具栏中,单击 grassNewMapset New mapset 图标显示 MAPSET 巫师。
  4. 选择现有的Grass数据库(gisdbase)文件夹 grassdata 或者为新的 LOCATION 使用计算机上的文件管理器。然后点击 Next .
  5. 我们可以使用此向导创建新的 MAPSET 在现有的 LOCATION (见章节) 添加新地图集 )或创建新的 LOCATION 总而言之。选择 radioButtonOn Create new location (参见图“草地新位置”)。
  6. 输入的名称 LOCATION --我们用了“阿拉斯加”——然后点击 Next .
  7. 单击单选按钮定义投影 radioButtonOn Projection 启用投影列表。
  8. 我们使用阿尔伯斯等面积阿拉斯加(英尺)投影。因为我们碰巧知道它由epsg id 2964表示,所以我们在搜索框中输入它。(注意:如果您想为另一个重复此过程 LOCATION 和投影,还没有记住EPSG ID,点击 projectionEnabled CRS Status 状态栏右下角的图标(参见第节 使用投影
  9. Filter ,插入2964以选择投影。
  10. 点击 Next .
  11. 要定义默认区域,必须输入 LOCATION 北、南、东、西三个方向的边界。这里,我们只需点击按钮 Set Current QGIS Extent ,以应用加载层的范围 alaska.shp 作为草地默认区域范围。
  12. 点击 Next .
  13. 我们还需要定义 MAPSET 在我们的新 LOCATION (创建新的 LOCATION )你可以随意命名-我们使用了“演示”。草会自动创建一个特殊的 MAPSET 打电话 PERMANENT ,用于存储项目的核心数据,其默认空间范围和坐标系定义(参见Neteler&Mitasova 2008年 文献和网络参考
  14. 查看摘要以确保其正确,然后单击 Finish .
  15. 新的 LOCATION “阿拉斯加”和两个 MAPSETs 创建了“demo”和“permanent”。如您所定义,当前打开的工作集是“demo”。
  16. 请注意,现在启用了草地工具栏中禁用的一些工具。
../../../_images/create_grass_location.png

在QGIS中创建新的草地位置或新地图集

如果这看起来像是很多步骤,那么它并不是那么糟糕,而且是一个非常快速的方法来创建一个 LOCATION . 这个 LOCATION “阿拉斯加”现在可以导入数据了(参见 将数据导入草地位置 )您还可以在示例草地中使用现有的矢量和栅格数据 LOCATION “阿拉斯加”,包含在QGIS“阿拉斯加”数据集中 下载示例数据 ,然后转到分区 草地矢量数据模型 .

添加新地图集

用户只能对草地进行写访问 MAPSET 他或她创造的。这意味着除了你自己的 MAPSET ,您可以在其他用户的 MAPSETs (他们可以阅读你的地图),但你只能修改或删除你自己的地图。 MAPSET .

所有 MAPSETs 包括一个 WIND 存储当前边界坐标值和当前选定栅格分辨率的文件(请参见Neteler&Mitasova 2008中的 文献和网络参考 和截面 草地工具

  1. 启动QGIS并确保加载了Grass插件。
  2. 在草地工具栏中,单击 grassNewMapset New mapset 图标显示 MAPSET 巫师。
  3. 选择Grass数据库(gisdbase)文件夹 grassdataLOCATION “阿拉斯加”,我们想在这里再加一个 MAPSET 称为“测试”。
  4. 点击 Next .
  5. 我们可以使用此向导创建新的 MAPSET 在现有的 LOCATION 或创建新的 LOCATION 总而言之。单击单选按钮 radioButtonOn Select location (参见图“草地新位置”)并单击 Next .
  6. 输入名称 text 为了新的 MAPSET . 在向导的下面,您可以看到现有的 MAPSETs 以及相应的所有者。
  7. 点击 Next ,查看摘要以确保所有内容都正确,然后单击 Finish .

草地矢量数据模型

了解 GRASS vector data model 数字化之前。一般来说,Grass使用拓扑向量模型。这意味着区域不表示为闭合多边形,而是由一个或多个边界表示。两个相邻区域之间的边界只数字化一次,由两个区域共享。边界必须连接和闭合,不得有间隙。区域由 centroid 这个地区的

除了边界和质心之外,矢量地图还可以包含点和线。所有这些几何元素都可以混合在一个向量中,并将在一个草向量图中以不同的所谓“层”表示。所以在草地上,一个图层不是矢量或栅格图,而是矢量图层中的一个图层。这很重要,要仔细区分。(虽然可以混合几何元素,但这是不常见的,即使在草地上,也只在向量网络分析等特殊情况下使用。通常,您应该更喜欢将不同的几何元素存储在不同的层中。)

可以在一个矢量数据集中存储多个“层”。例如,田地、森林和湖泊可以存储在一个向量中。相邻的森林和湖泊可以共享相同的边界,但它们有单独的属性表。也可以将属性附加到边界。例如,湖泊和森林之间的边界是一条道路,因此它可以具有不同的属性表。

特征的“层”由草地内部的“层”定义。layer'是定义数据集中是否有多个层的数字(例如,如果几何图形是森林或湖泊)。现在,它只能是一个数字。将来,Grass还将在用户界面中支持名称作为字段。

属性可以存储在草地中 LOCATION 作为dbase、sqlite3或在外部数据库表中,例如postgresql、mysql、oracle等。

数据库表中的属性使用“category”值链接到几何元素。

“category”(键,id)是一个附加到几何基元的整数,它用作数据库表中一个键列的链接。

小技巧

学习草矢量模型

The best way to learn the GRASS vector model and its capabilities is to download one of the many GRASS tutorials where the vector model is described more deeply. See https://grass.osgeo.org/documentation/manuals/ for more information, books and tutorials in several languages.

创建新的草地矢量层

要创建新的草地矢量层,请从浏览器中的“地图集”上下文菜单中选择以下项目之一:

并在对话框中输入名称。一个新的矢量地图将被创建和层将被添加到画布和编辑开始。选择层的类型并不限制可以在矢量图中数字化的几何体类型。在草地中,可以在一个矢量地图中组织各种几何类型(点、线和多边形)。类型仅用于将层添加到画布,因为QGIS要求层具有特定类型。

也可以将层添加到现有矢量图中,从现有矢量图的上下文菜单中选择上述项目之一。

在草地中,可以在一个图层中组织各种几何类型(点、线和区域),因为草地使用拓扑矢量模型,所以在创建新草地矢量时不需要选择几何类型。这与使用qgis创建形状文件不同,因为形状文件使用简单的特征向量模型(请参见第节 创建新的矢量层

数字化和编辑草地矢量层

可以使用标准的QGIS数字化工具对草地矢量层进行数字化。但是,由于一些特殊性,您应该知道

以下部分将讨论这些特殊性。

保存、放弃更改、撤消、重做

警告

编辑期间所做的所有更改都会立即写入矢量图和相关属性表。

每次操作后都会写入更改,但是在关闭编辑时,可以执行撤消/重做或放弃所有更改。如果使用“撤消”或“放弃”更改,则会在向量映射和属性表中重写原始状态。

这种行为有两个主要原因:

工具栏

编辑草层时,“数字化工具栏”有一些特定的工具:

偶像 工具 目的
capturePoint 新观点 数字化新点
captureLine 新品系 数字化新行
captureBoundary 新境界 数字化新边界
captureCentroid 新形心 数字化新质心(标记现有区域)
capturePolygon 新的封闭边界 数字化新的闭合边界

表草地数字化:草地数字化工具

小技巧

数字化草地中的多边形

如果要在草地中创建多边形,首先要数字化多边形的边界。然后将质心(标签点)添加到闭合边界中。这是因为拓扑向量模型总是将多边形的属性信息链接到质心而不是边界。

类别

分类,通常被称为cat,是一种ID。这个名字来自于草向量只有一个属性“category”的时候。类别用作几何图形和属性之间的链接。一个几何图形可以有多个类别,从而在不同的图层中表示多个特征。目前,使用QGIS编辑工具,每个图层只能分配一个类别。新功能已自动分配新的唯一类别,但边界除外。边界通常只形成区域,不代表线性特征,但是可以稍后为边界定义属性,例如在不同的层中。

新类别始终只在当前正在编辑的图层中创建。

无法使用QGIS编辑为几何图形指定更多类别,这些数据正确表示为多个特征,甚至可以删除不同图层的单个特征。

属性

当前编辑层的属性只能修改。如果矢量图包含更多层,其他层的功能将所有属性设置为“<不可编辑(层)>”,以警告您此类属性不可编辑。原因是,其他层可能具有并且通常具有不同的字段集,而QGIS仅支持每层一组固定字段。

如果几何体基元没有指定类别,则会自动指定新的唯一类别,并在更改该几何体的属性时在属性表中创建新记录。

小技巧

如果要批量更新表中的属性,例如使用“字段计算器”( 使用现场计算器 ,并且有一些没有类别的功能您不想更新(通常是边界),您可以通过将“高级筛选”设置为来筛选它们。 cat is not null .

编辑样式

拓扑符号学是有效编辑拓扑数据的基础。编辑开始时,将在图层上自动设置专用的“草编辑”渲染器,并且在编辑关闭时还原原始渲染器。样式可以在图层属性“样式”选项卡中自定义。该样式也可以存储在项目文件中,或作为任何其他样式存储在单独的文件中。如果自定义样式,请不要更改其名称,因为它用于在重新开始编辑时重置样式。

小技巧

编辑图层时不要保存项目文件,图层将以“编辑样式”存储,如果不编辑图层,则没有任何意义。

该样式基于拓扑信息,拓扑信息作为字段“topo_符号”临时添加到属性表中。当编辑关闭时,该字段将自动删除。

小技巧

不要从属性表中删除“topo_symbol”字段,这将使功能不可见,因为渲染器基于该列。

抢购

要形成一个区域,连接边界的顶点必须 exactly 相同的坐标。只有当画布和矢量地图具有相同的CRS时,才可以使用捕捉工具来实现这一点。否则,由于从地图坐标转换到画布和画布背面,由于表示错误和CRS转换,坐标可能会略有不同。

小技巧

编辑时,对画布也使用层的CRS。

限制

不支持同时编辑同一矢量内的多个层。这主要是由于无法为单个数据源处理多个撤消堆栈。

nix osx On Linux and macOS only one GRASS layer can be edited at time. This is due to a bug in GRASS which does not allow to close database drivers in random order. This is being solved with GRASS developers.

小技巧

草编辑权限

你一定是草的主人 MAPSET 您要编辑。无法在中编辑数据层 MAPSET 这不是你的,即使你有写许可。

草地工具

草地中的区域定义(设置空间工作窗口)对于使用栅格图层很重要。矢量分析默认不限于任何定义的区域定义。但是,所有新创建的栅格将具有当前定义的草地区域的空间扩展和分辨率,而不管其原始扩展和分辨率如何。当前草区存储在 $LOCATION/$MAPSET/WIND 文件,它定义了北、南、东、西边界、列和行数、水平和垂直空间分辨率。

可以使用 grassRegion Display current GRASS region 按钮。

可以在“草地收费”停靠小部件的“区域”选项卡中修改该区域。键入新的区域边界和分辨率,然后单击 Apply . 如果你点击 Select the extent by dragging on canvas 您可以在QGIS画布上拖动矩形,用鼠标交互选择一个新区域。

草地模块 g.region 提供了更多的参数来为栅格分析定义适当的区域范围和分辨率。可以将这些参数与Grass工具箱一起使用,如第节所述。 草地工具箱 .

草地工具箱

这个 grassTools Open GRASS Tools Box提供了Grass模块功能,用于处理选定草地中的数据。 LOCATIONMAPSET . 要使用草地工具箱,需要打开 LOCATIONMAPSET 您拥有的写入权限(如果创建了 MAPSET )这是必要的,因为在分析过程中创建的新栅格或矢量图层需要写入当前选定的 LOCATIONMAPSET .

../../../_images/grass_toolbox_moduletree.png

草地工具箱和模块树

使用草地模块

Grass工具箱中的Grass Shell提供了对命令行界面中几乎所有(超过300个)Grass模块的访问。为了提供更加用户友好的工作环境,Grass插件工具箱中的图形对话框还提供了大约200个可用的Grass模块和功能。

QGIS版本的图形工具箱中提供的草地模块的完整列表 2.18 可在Grass wiki上获取,网址为https://grass.osgeo.org/wiki/grass-qgis_-relevant_-module_list。

还可以自定义草地工具箱内容。本程序在第节中进行了描述。 自定义草地工具箱 .

如图“草地工具箱”所示,您可以使用按主题分组的草地模块来查找适当的草地模块。 Modules Tree 或可搜索的 Modules List 标签。

通过单击图形模块图标,将向工具箱对话框添加一个新选项卡,提供三个新的子选项卡: OptionsOutputManual .

选项

这个 Options 选项卡提供了一个简化的模块对话框,在该对话框中,您通常可以选择在QGIS画布中可视化的栅格或矢量层,并输入更多模块特定参数以运行模块。

../../../_images/grass_module_option.png

草地工具箱模块选项

为了保持对话框的简单性,提供的模块参数通常不完整。如果要使用更多的模块参数和标志,则需要启动Grass Shell并在命令行中运行模块。

qgis 1.8以来的一个新特性是支持 Show Advanced Options 按钮位于 Options 标签。目前,它只添加到模块中 v.in.ascii 作为一个使用示例,但在未来的QGIS版本中,它可能是Grass工具箱中更多或所有模块的一部分。这允许您使用完整的草地模块选项,而无需切换到草地外壳。

输出

../../../_images/grass_module_output.png

Grass工具箱模块输出

这个 Output 选项卡提供有关模块输出状态的信息。当你点击 Run 按钮,模块切换到 Output 选项卡,您将看到有关分析过程的信息。如果一切正常,你最终会看到 Successfully finished 消息。

手册

../../../_images/grass_module_manual.png

草地工具箱模块手册

这个 Manual 选项卡显示Grass模块的HTML帮助页。您可以使用它来检查更多的模块参数和标志,或者更深入地了解模块的用途。在每个模块手册页的末尾,您可以看到到 Main Help index , the Thematic index 以及 Full index . 这些链接提供与模块相同的信息 g.manual .

小技巧

立即显示结果

如果要在地图画布中立即显示计算结果,可以使用“模块”选项卡底部的“查看输出”按钮。

草模块示例

以下示例将演示一些草地模块的电源。

创建轮廓线

第一个示例从高程栅格(DEM)创建矢量等高线地图。这里,假设你有阿拉斯加 LOCATION 如第节所述设置 将数据导入草地位置 .

  • 首先,单击 grassOpenMapset Open mapset 选择阿拉斯加的位置。
  • 现在打开工具箱 grassTools Open GRASS tools 按钮。
  • 在工具类别列表中,双击 Raster ‣ Surface Management ‣ Generate vector contour lines .
  • 现在单击工具 r.contour 将打开如上所述的工具对话框(请参见 使用草地模块
  • Name of input raster map 进入 gtopo30 .
  • 键入 Increment between Contour levels selectNumber 值100。(这将以100米的间隔创建轮廓线。)
  • 键入 Name for output vector map 名字 ctour_100 .
  • 点击 Run 开始这个过程。等几分钟直到消息 Successfully finished 出现在输出窗口中。然后点击 View OutputClose .

因为这是一个很大的区域,所以需要一段时间才能显示出来。渲染完成后,可以打开“图层属性”窗口更改线条颜色,以便轮廓清晰地显示在高程栅格上,如中所示。 矢量属性对话框 .

接下来,放大到阿拉斯加中心的一个小山区。放大,你会发现轮廓有尖角。草地提供了 v.generalize 工具可以稍微改变矢量图,同时保持其整体形状。该工具使用不同目的的几种不同算法。一些算法(如Douglas Peuker和Vertex Reduction)通过删除一些顶点来简化线条。结果向量将更快地加载。当您有一个非常详细的向量时,这个过程很有用,但是您正在创建一个非常小的比例图,因此不需要详细信息。

小技巧

简化工具

注意,QGIS有一个 Vector ‣ Geometry Tools ‣ Simplify geometries 像草一样工作的工具 v.generalize 道格拉斯-普克算法。

然而,这个例子的目的是不同的。由创建的轮廓线 r.contour 有应该平滑的锐角。其中 v.generalize 算法,有柴肯的,这只是做(也赫敏样条)。请注意,这些算法可以 add 向量的附加顶点,使其加载更慢。

  • 打开草地工具箱,双击类别 Vector ‣ Develop map ‣ Generalization ,然后单击 v.generalize 模块打开其选项窗口。
  • 检查“ctour_100”向量是否显示为 Name of input vector .
  • 从算法列表中,选择chaiken。保留所有其他选项的默认值,并向下滚动到字段中要输入的最后一行。 Name for output vector map ‘ctour_100_平滑’,然后单击 Run .
  • 这个过程需要几分钟。一次 Successfully finished 出现在输出窗口中,单击 View Output 然后 Close .
  • 您可以更改矢量的颜色,使其在栅格背景上清晰显示,并与原始轮廓线形成对比。你会注意到新的轮廓线有比原来更平滑的角,同时忠实于原来的整体形状。
../../../_images/grass_toolbox_vgeneralize.png

草模块v.推广到平滑矢量图

小技巧

R.Contour的其他用途

上述程序可用于其他等效情况。例如,如果您有降水数据的栅格图,那么将使用相同的方法创建等雨量线(恒定降雨量)的矢量图。

创建Hillshade三维效果

有几种方法可用于显示立面图层,并为地图提供三维效果。如上图所示,使用等高线是制作地形图常用的一种方法。另一种显示三维效果的方法是使用Hillshading。通过首先计算每个单元的坡度和侧面,然后模拟太阳在天空中的位置,并为每个单元提供反射值,可以从DEM(高程)栅格创建Hillshade效果。因此,面向太阳的斜坡会被照亮;背离太阳的斜坡(在阴影中)会变暗。

  • 从加载 gtopo30 高程栅格。启动Grass工具箱,然后在“栅格”类别下双击以打开 Spatial analysis ‣ Terrain analysis .
  • 然后点击 r.shaded.relief 打开模块。
  • 改变 azimuth angle selectNumber 270到315。
  • 进入 gtopo30_shade 对于新的Hillshade栅格,单击 Run .
  • 过程完成后,将Hillshade栅格添加到地图中。您应该看到它以灰度显示。
  • 查看 gtopo30 一起,将Hillshade地图移到 gtopo30 在目录中映射,然后打开 Properties 窗口 gtopo30 切换到 Transparency 选项卡并将其透明度级别设置为25%左右。

你现在应该有 gtopo30 显示其颜色图和透明度设置的高程 above 灰度山影图。要查看山体阴影的视觉效果,请关闭 gtopo30_shade 地图,然后再打开。

使用草壳

qgis中的grass插件是为那些不熟悉所有模块和选项的新手设计的。因此,工具箱中的某些模块不显示所有可用选项,而某些模块根本不显示。Grass Shell(或控制台)允许用户访问工具箱树中未显示的其他Grass模块,以及工具箱中具有最简单默认参数的模块的一些其他选项。此示例演示在 r.shaded.relief 上面显示的模块。

../../../_images/grass_toolbox_shell.png

草壳,R.阴影。浮雕模块

模块 r.shaded.relief 可以接受参数 zmult 使相对于X-Y坐标单位的高程值相乘,从而使Hillshade效果更加明显。

  • 载入 gtopo30 如上图所示,启动Grass工具箱并单击Grass外壳。在shell窗口中,键入命令 r.shaded.relief map=gtopo30 shade=gtopo30_shade2 azimuth=315 zmult=3 新闻界 Enter .
  • 流程完成后,切换到 Browse 选项卡并双击新的 gtopo30_shade2 栅格显示在qgis中。
  • 如上所述,将阴影浮雕栅格移动到 gtopo30 在目录中设置栅格,然后检查颜色的透明度 gtopo30 层。你应该看到,与第一张阴影地形图相比,三维效果更突出。
../../../_images/grass_toolbox_shadedrelief.png

显示用草模块R.Shaded.Relief创建的阴影浮雕

矢量地图中的栅格统计

下一个示例展示了Grass模块如何聚合栅格数据并为矢量地图中的每个多边形添加统计数据列。

  • 再次使用阿拉斯加数据,请参阅 将数据导入草地位置 导入 shapefiles/trees.shp 锉入草地。
  • 现在需要一个中间步骤:必须将质心添加到导入的树映射中,以使其成为完整的草地矢量(包括边界和质心)。
  • 从工具箱中,选择 Vector ‣ Manage features ,然后打开模块 质心.
  • 输入为 output vector map “森林区域”并运行模块。
  • 现在加载 forest_areas 矢量和显示森林类型-落叶,常绿,混合-不同颜色:在层 Properties 窗口, Symbology 选项卡,从中选择 Legend type selectString “唯一值”并设置 Classification field 到“VEGDESC”。(请参阅中的“符号”选项卡的说明 符号学性质 矢量部分。)
  • 接下来,重新打开草地工具箱并打开 Vector ‣ Vector update 其他地图。
  • 点击 v.rast.stats 模块。进入 gtopo30forest_areas .
  • 只需要一个附加参数:Enter column prefix elev 然后点击 Run . 这是一个计算量很大的操作,运行时间很长(可能长达两个小时)。
  • 最后,打开 forest_areas 属性表,并验证是否添加了几个新列,包括 elev_minelev_maxelev_mean 等,对于每个森林多边形。

自定义草地工具箱

几乎所有草地模块都可以添加到草地工具箱中。提供了一个XML接口来解析非常简单的XML文件,这些文件配置了工具箱中模块的外观和参数。

用于生成模块的示例XML文件 v.buffer (v.buffer.qgm)如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE qgisgrassmodule SYSTEM "http://mrcc.com/qgisgrassmodule.dtd">

<qgisgrassmodule label="Vector buffer" module="v.buffer">
        <option key="input" typeoption="type" layeroption="layer" />
        <option key="buffer"/>
        <option key="output" />
</qgisgrassmodule>

The parser reads this definition and creates a new tab inside the Toolbox when you select the module. A more detailed description for adding new modules, changing a module's group, etc., can be found at https://qgis.org/en/site/getinvolved/development/addinggrasstools.html.