25. 草地地理信息系统集成

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

提供商支持GRASS版本6和7,插件支持GRASS 6和7(从QGIS2.12开始)。QGIS发行版可能包含GRASS 6或GRASS 7的提供程序/插件,也可能同时包含这两个版本的提供程序/插件(二进制文件具有不同的文件名)。然而,在运行时只能加载一个版本的提供程序/插件。

25.1. 演示数据集

作为示例,我们将使用QGIS Alaska数据集(请参阅部分 下载样本数据 )。它包括一小块草样 LOCATION 有三个矢量层和一个栅格高程图。创建一个名为的新文件夹 grassdata ,下载QGIS‘Alaska’数据集 qgis_sample_data.zip 从https://qgis.org/downloads/data/将文件解压缩到 grassdata

更多的草样 LOCATIONs 可在GRASS网站上找到,网址为https://grass.osgeo.org/download/data/.

25.2. 加载草栅格和矢量层

如果在QGIS中加载了提供程序,则位置项包含GRASS 草皮徽标 图标添加到浏览器树中包含GRASS位置的每个文件夹项目下。转到文件夹 grassdata 并扩展位置 alaska 和地图集 demo

您可以通过双击层项目或通过拖放到地图画布或图例来从浏览器加载草栅层和矢量层。

小技巧

GRASS Data Loading

如果没有看到草地位置项,请在中进行验证 Help ► About ► Providers 如果加载了GRASS向量提供程序。

25.3. 通过拖放将数据导入到GRASS位置

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

  1. 在QGIS浏览器中,导航到要将数据导入到的映射集。

  2. 在QGIS浏览器中查找想要导入到GRASS的图层,请注意,您可以打开浏览器的另一个实例 (Browser Panel (2) )如果源数据距离树中的映射集太远。

  3. 拖动一个图层并将其放到目标地图集上。对于较大的层,导入可能需要一些时间,您将看到动画图标 进口 在新的层项目前面,直到导入完成。

当栅格数据位于不同的CRS中时,可以使用 Approximate (快速)或 Exact (精确的)转变。如果创建了指向源栅格的链接(使用 r.external ),源数据在相同的CRS中,并且格式为GDAL所知,则将使用源数据CRS。您可以在 Browser 按Tab键进入 草地选项

如果源栅格具有更多波段,则会使用为每个图层创建新的GRASS地图 .<band number> 所有地图的后缀和组均带有 栅格组 图标即被创建。外部栅格具有不同的图标 栅格链接

25.4. 在QGIS浏览器中管理GRASS数据

  • 复制地图:可以使用拖放在同一位置的地图集之间复制草地地图。

  • 删除地图:在草地地图上单击鼠标右键并选择 Delete 从上下文菜单中。

  • 重命名地图:在草地地图上单击鼠标右键并选择 Rename 从上下文菜单中。

25.5. 草地选项

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

25.6. 启动GRASS插件

To use GRASS functionalities in QGIS, you must select and load the GRASS plugin using the Plugin Manager. To do this, go to the menu Plugins ► ShowPluginManager Manage and Install Plugins..., select 复选框 GRASS and click OK.

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

  • Gras OpenMapset Open Mapset

  • GrasNewMapset New Mapset

  • GrasCloseMapset Close Mapset

  • GratTool Open GRASS Tools

  • 草区 Display Current GRASS Region

  • 一般信息 GRASS Options

25.7. 打开GRASS地图集

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

25.8. GRASS定位和MAPSET

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

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

图 25.1 阿拉斯加地区的GRASS数据

25.9. 将数据导入到GRASS位置

请参见部分 通过拖放将数据导入到GRASS位置 了解如何通过在浏览器中拖放轻松导入数据。

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

  1. 启动QGIS并确保GRASS插件已加载。

  2. 在GRASS工具栏中,单击 Gras OpenMapset Open MAPSET 图标以调出 MAPSET 巫师。

  3. 选择文件夹作为GRASS数据库 grassdata 在QGIS Alaska数据集中,如 LOCATION “阿拉斯加”,就像 MAPSET ‘demo’并点击 OK

  4. 现在,请单击 GratTool Open GRASS tools 偶像。GRASS工具箱(请参见部分 草类工具箱 )对话框出现。

  5. 输入栅格地图的步骤 landcover.img ,点击该模块 r.in.gdalModules Tree 标签。此GRASS模块允许您将支持GDAL的栅格文件导入到GRASS中 LOCATION 。用于的模块对话框 r.in.gdal 出现了。

  6. 浏览到该文件夹 raster 在QGIS‘Alaska’数据集中,然后选择文件 landcover.img

  7. 作为栅格输出名称,定义 landcover_grass 并点击 Run 。在 Output 选项卡中,您将看到当前正在运行的GRASS命令 r.in.gdal -o input=/path/to/landcover.img output=landcover_grass

  8. 当它说 Successfully finished ,请点击 View Output 。这个 landcover_grass 栅格层现在被导入到GRASS中,并将在QGIS画布中可视化。

  9. 输入矢量GML文件的步骤 lakes.gml ,点击该模块 v.in.ogrModules Tree 标签。此GRASS模块允许您将OGR支持的矢量文件导入到GRASS中 LOCATION 。用于的模块对话框 v.in.ogr 出现了。

  10. 浏览到该文件夹 gml 在QGIS‘Alaska’数据集中,然后选择文件 lakes.gml 作为OGR文件。

  11. 作为矢量输出名称,定义 lakes_grass 并点击 Run 。您不必关心本例中的其他选项。在 Output 选项卡您会看到当前正在运行的GRASS命令 v.in.ogr -o dsn=/path/to/lakes.gml output=lakes\_grass

  12. 当它说 Succesfully finished ,请点击 View Output 。这个 lakes_grass 矢量层现在被导入到GRASS中,并将在QGIS画布中可视化。

25.9.1. 创建新的草地位置

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

  1. 启动QGIS并确保GRASS插件已加载。

  2. 想象一下 alaska.shp Shapefile(请参见部分 从文件加载图层 来自QGIS Alaska数据集(请参见 下载样本数据 )。

  3. 在GRASS工具栏中,单击 GrasNewMapset New mapset 图标以调出 MAPSET 巫师。

  4. 选择现有的GRASS数据库(GISDBASE)文件夹 grassdata ,或为新的 LOCATION 使用计算机上的文件管理器。然后单击 Next

  5. We can use this wizard to create a new MAPSET within an existing LOCATION (see section 添加新的MAPSET) or to create a new LOCATION altogether. Select 单选按钮打开 Create new location (see 图 25.2).

  6. 输入的名称 LOCATION --我们使用了‘Alaska’--然后点击 Next

  7. 通过单击单选按钮定义投影 单选按钮打开 Projection 要启用投影列表,请执行以下操作。

  8. 我们使用阿尔伯斯等面积阿拉斯加(英尺)投影。由于我们碰巧知道它由EPSG ID 2964表示,因此我们在搜索框中输入它。(注意:如果您想对另一个用户重复此过程 LOCATION 和投影,但没有记住EPSG ID,请点击 项目已启用 CRS Status 状态栏右下角的图标(请参见 使用投影 ))。

  9. 在……里面 Filter ,插入2964以选择投影。

  10. 单击 Next

  11. 要定义默认区域,我们必须输入 LOCATION 北向、南向、东向和西向的边界。在这里,我们只需点击按钮 Set Current QGIS Extent ,以应用加载的层的范围 alaska.shp 作为草默认区域范围。

  12. 单击 Next

  13. 我们还需要定义一个 MAPSET 在我们新的 LOCATION (在创建新的 LOCATION )。你可以随心所欲地给它命名--我们用的是“DEMO”。GRASS自动创建一个特殊的 MAPSET 被呼叫 PERMANENT ,旨在存储项目的核心数据、其默认空间范围和坐标系定义(请参阅Neteler&Mitasova 2008 in 文献和网络参考文献 )。

  14. 查看摘要以确保其正确无误,然后单击 Finish

  15. 新的 LOCATION ,‘阿拉斯加’,和两个 MAPSETs ,‘演示’和‘永久’,创建。正如您定义的那样,当前打开的工作集是‘demo’。

  16. 请注意,GRASS工具栏中禁用的某些工具现在已启用。

../../../_images/create_grass_location.png

图 25.2 在QGIS中创建新的GRASS位置或新的MAPSET

如果这看起来像是很多步骤,那么它实际上并不是那么糟糕,而且是创建一个 LOCATION 。这个 LOCATION ‘Alaska’现已准备好进行数据导入(请参阅部分 将数据导入到GRASS位置 )。您还可以使用样例GRASS中已有的矢量和栅格数据 LOCATION ‘Alaska’,包含在QGIS‘Alaska’数据集中 下载样本数据 ,然后转到部分 GRASS矢量数据模型

25.9.2. 添加新的MAPSET

用户仅具有对GRASS的写入访问权限 MAPSET 是他或她创造的。这意味着除了访问您自己的 MAPSET ,您可以阅读其他用户的地图 MAPSETs (他们可以读取您的地图),但您只能修改或移除您自己的地图 MAPSET

MAPSETs 包括一个 WIND 存储当前边界坐标值和当前所选栅格分辨率的文件(请参阅Neteler&Mitasova 2008 文献和网络参考文献 和横断面 草地区域工具 )。

  1. 启动QGIS并确保GRASS插件已加载。

  2. 在GRASS工具栏中,单击 GrasNewMapset New mapset 图标以调出 MAPSET 巫师。

  3. 选择GRASS数据库(GISDBASE)文件夹 grassdataLOCATION ‘阿拉斯加’,我们想要在那里再增加一个 MAPSET 被称为“测试”。

  4. 单击 Next

  5. We can use this wizard to create a new MAPSET within an existing LOCATION or to create a new LOCATION altogether. Click on the radio button 单选按钮打开 Select location (see 图 25.2) and click Next.

  6. 输入名称 test 对于新的 MAPSET 。在下面的向导中,您可以看到现有的 MAPSETs 和相应的所有者。

  7. 单击 Next ,请查看摘要以确保其全部正确,然后单击 Finish

25.10. GRASS矢量数据模型

重要的是要了解 GRASS vector data model 在数字化之前。通常,GRASS使用拓扑向量模型。这意味着区域不是用闭合的多边形表示的,而是用一个或多个边界表示的。两个相邻区域之间的边界只数字化一次,并且由两个区域共享。边界必须连接并闭合,没有间隙。区域由标识(和标记) centroid 这一地区的。

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

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

要素的‘层’由GRASS内部的‘层’定义。Layer是定义数据集中是否有多个层的数字(例如,如果几何图形是森林或湖泊)。目前,它只能是一个数字。未来,GRASS还将在用户界面中支持将名称作为字段。

属性可以存储在GRASS内部 LOCATION 如dBASE、SQLite3或外部数据库表,如PostgreSQL、MySQL、Oracle等。

数据库表中的属性使用‘CATEGORY’值链接到几何元素。

‘Category’(键,ID)是一个附加到几何基元的整数,它用作到数据库表中一个键列的链接。

小技巧

Learning the GRASS Vector Model

了解草向量模型及其功能的最好方法是下载许多草教程中的一个,其中对向量模型进行了更深入的描述。有关几种语言的更多信息、书籍和教程,请访问https://grass.osgeo.org/learn/manuals/。

25.11. 创建新的草矢量层

要创建新的草向量层,请从浏览器的地图集关联菜单中选择以下项目之一:

  • 新建点图层

  • 新线图层

  • 新建多边形层

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

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

在GRASS中,可以在一个层中组织各种几何体类型(点、线和面),因为GRASS使用拓扑向量模型,因此在创建新的GRASS向量时不需要选择几何体类型。这不同于使用QGIS创建shapefile,因为shapefile使用简单的要素矢量模型(请参阅部分 创建新的矢量层 )。

25.12. 数字化和编辑草向量图层

可以使用标准的QGIS数字化工具来数字化草地矢量图层。然而,由于以下原因,您应该了解一些特殊性

  • GRASS拓扑模型与QGIS简单要素

  • GRASS模型的复杂性

    • 单个地图中的多个图层

    • 一张地图中有多种几何图形类型

    • 多个图层中的多个要素共享几何

以下各节将讨论这些特殊性。

Save, discard changes, undo, redo

警告

在编辑过程中所做的所有更改都会立即写入矢量地图和相关属性表。

更改是在每次操作后写入的,但是,也可以在关闭编辑时撤消/重做或放弃所有更改。如果使用撤消或放弃更改,则在矢量地图和属性表中重写原始状态。

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

  • 来自确信的草矢量的本质是用户想要做他正在做的事情,当工作突然中断(例如,停电)时最好保存数据

  • 对拓扑数据进行有效编辑的必要条件是有关拓扑正确性的可视化信息,这种信息只有在向地图写入更改的情况下才能从草矢量地图中获取。

Toolbar

当编辑草层时,‘数字化工具栏’有一些特定的工具:

图标

工具

目的

CapturePoint

新点

数字化新点

捕获线路

新线路

将新线路数字化

捕获边界

新边界

数字化新边界

捕获质心

新质心

数字化新质心(标记现有区域)

捕获多边形

新的闭合边界

数字化新的闭合边界

餐桌草数字化:草数字化工具

小技巧

Digitizing polygons in GRASS

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

Category

类别,通常被称为猫,是一种ID。这个名字来自于草类载体只有一个属性“类别”的时代。类别用作几何图形和属性之间的链接。单个几何图形可能具有多个类别,因此表示不同层中的多个要素。目前,使用QGIS编辑工具只能为每个层指定一个类别。新要素已自动分配新的唯一类别(边界除外)。边界通常只形成区域,并不表示线状要素,但也可以稍后为边界定义属性,例如在不同的层中。

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

使用QGIS编辑无法为几何图形分配更多类别,此类数据将正确地表示为多个要素,并且可能会删除单个要素,即使是来自不同图层的要素。

Attributes

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

如果未为几何图形基本体指定类别,则当该几何图形的属性更改时,将自动指定新的唯一类别,并在属性表中创建新记录。

小技巧

如果您想成批更新表中的属性,例如使用‘字段计算器’ (使用字段计算器 ),并且存在您不想更新的没有类别的要素(通常是边界),您可以通过将‘Advanced Filter’设置为 cat is not null

Editing style

拓扑符号系统是有效编辑拓扑数据的关键。当编辑开始时,会自动在层上设置一个专门的‘GRASS编辑’渲染器,并在编辑关闭时恢复原来的渲染器。该样式可以在层属性的‘Style’选项卡中自定义。该样式也可以存储在项目文件中或与任何其他样式一样存储在单独的文件中。如果您自定义样式,请不要更改其名称,因为它用于在再次开始编辑时重置样式。

小技巧

当层被编辑时不要保存项目文件,层将与‘编辑样式’一起存储,如果层不被编辑则没有意义。

该样式基于拓扑信息,该信息被临时添加到属性表中,作为字段‘topo_Symbol’。关闭编辑时,该字段将自动删除。

小技巧

不要从属性表中删除‘topo_symbol’字段,这会使特征不可见,因为呈现器基于该列。

Snapping

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

小技巧

在编辑画布时,也可以使用层的CRS。

Limitations

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

尼克斯 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.

小技巧

GRASS Edit Permissions

你一定是这片草地的主人 MAPSET 你想要编辑。无法在中编辑数据图层 MAPSET 这不是您的,即使您有写入权限。

25.13. 草地区域工具

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

可以在QGIS画布中打开和关闭草地区域的可视化 草区 Display current GRASS region 纽扣。

该地区可以修改在‘地区’标签的‘草通行证’停靠小工具。键入新的区域边界和分辨率,然后单击 Apply 。如果您点击 Select the extent by dragging on canvas 您可以用鼠标在QGIS画布上拖出一个矩形,以交互方式选择一个新区域。

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

25.14. 草类工具箱

这个 GratTool Open GRASS Tools Box提供GRASS模块功能以处理选定GRASS中的数据 LOCATIONMAPSET 。要使用GRASS工具箱,您需要打开一个 LOCATIONMAPSET 您对其具有写入权限(通常授予,如果您创建 MAPSET )。这是必要的,因为在分析过程中创建的新栅格或矢量图层需要写入当前选定的 LOCATIONMAPSET

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

图 25.3 GRASS工具箱和模块树

25.14.1. 使用GRASS模块

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

QGIS版本的图形工具箱中提供的GRASS模块的完整列表 3.28 可在https://grasswiki.osgeo.org/wiki/GRASS-QGIS_relevant_module_list.的GRASS维基上找到

还可以自定义GRASS工具箱内容。此过程在一节中介绍 自定义GRASS工具箱

As shown in 图 25.3, you can look for the appropriate GRASS module using the thematically grouped Modules Tree or the searchable Modules List tab.

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

Options

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

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

图 25.4 GRASS工具箱模块选项

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

QGIS1.8以来的一项新功能是支持 Show Advanced Options 中的简化模块对话框下面的按钮 Options 标签。目前,它只添加到模块中 v.in.ascii 作为一个用法示例,但它可能会成为未来QGIS版本中GRASS工具箱中更多或所有模块的一部分。这允许您使用完整的GRASS模块选项,而无需切换到GRASSShell。

Output

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

图 25.5 GRASS工具箱模块输出

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

Manual

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

图 25.6 GRASS工具箱模块手册

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

小技巧

Display results immediately

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

25.14.2. GRASS模块示例

以下示例将演示一些GRASS模块的功能。

25.14.2.1. 创建等高线

第一个样例从高程栅格(DEM)创建矢量等高线地图。在这里,假设你有阿拉斯加 LOCATION 按照部分中的说明进行设置 将数据导入到GRASS位置

  • 首先,通过单击 Gras OpenMapset Open mapset 按钮,并选择阿拉斯加的位置。

  • 现在,使用 GratTool Open GRASS tools 纽扣。

  • 在工具类别列表中,双击 Raster ► Surface Management ► Generate vector contour lines

  • 现在只需单击该工具即可 r.contour 将打开如上所述的工具对话框(请参见 使用GRASS模块 )。

  • Name of input raster map 请输入 gtopo30

  • Type into the Increment between Contour levels 选择编号 the value 100. (This will create contour lines at intervals of 100 meters.)

  • 在中键入 Name for output vector map 名字 ctour_100

  • 单击 Run 才能开始这一过程。等待片刻,直到收到消息 Successfully finished 显示在“输出”窗口中。然后单击 View OutputClose

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

接下来,放大到阿拉斯加中部的一个小山区。放大后,您会注意到轮廓有尖锐的拐角。Grass提供了 v.generalize 该工具可在保持矢量地图整体形状不变的情况下对其进行轻微更改。该工具使用几种不同的算法来实现不同的目的。一些算法(例如,Douglas Peuker和Vertex Reducing)通过删除一些顶点来简化直线。生成的向量加载速度会更快。当您有一个非常详细的矢量,但您正在创建一个非常小比例的地图时,此过程很有用,因此细节是不必要的。

小技巧

The simplify tool

请注意,QGIS有一个 Vector ► Geometry Tools ► Simplify geometries 像草一样工作的工具 v.generalize Douglas-Peuker算法。

然而,此示例的目的不同。由创建的等高线 r.contour 有尖锐的角度,应该被平滑。在这些人中 v.generalize 算法方面,有Chaiken的,它就是这样做的(还有Hermite样条线)。请注意,这些算法可以 add 向向量添加其他顶点,使其加载速度更慢。

  • 打开GRASS工具箱,然后双击类别 Vector ► Develop map ► Generalization ,然后单击 v.generalize 模块以打开其选项窗口。

  • 检查‘cour_100’向量是否显示为 Name of input vector

  • 从算法列表中选择Chaiken‘s。保留所有其他选项的默认设置,然后向下滚动到最后一行以进入该字段 Name for output vector map ‘cTour_100_Smooth’,然后点击 Run

  • 这个过程需要几分钟的时间。一次 Successfully finished 出现在“输出”窗口中,请单击 View Output 然后 Close

  • 您可以更改矢量的颜色,使其在栅格背景上清晰显示,并与原始轮廓线形成对比。您会注意到,新的轮廓线具有比原始轮廓线更平滑的拐角,同时保持了原始的整体形状。

../../../_images/grass_toolbox_vgeneralize.png

图 25.7 GRASS模块v.概化以平滑矢量地图

小技巧

Other uses for r.contour

上述步骤也可用于其他同等情况。例如,如果您有降水数据的栅格地图,则将使用相同的方法来创建等雨量(恒定降雨量)线的矢量地图。

25.14.2.2. 创建山体阴影3-D效果

有几种方法可用于显示立面图层并为地图提供3D效果。如上图所示,使用等高线是制作地形图时常用的一种方法。另一种显示3-D效果的方法是山体阴影。山体阴影效果是从DEM(高程)栅格创建的,方法是首先计算每个单元的坡度和纵横比,然后模拟太阳在天空中的位置,并为每个单元提供反射率值。因此,朝阳的坡度变亮;背向太阳的坡度(在阴影中)变暗。

  • 开始此示例时,请将 gtopo30 高程栅格。启动GRASS工具箱,然后在栅格类别下,双击以打开 Spatial analysis ► Terrain analysis

  • 然后单击 r.shaded.relief 以打开模块。

  • Change the azimuth angle 选择编号 270 to 315.

  • 请输入 gtopo30_shade 用于新的山体阴影栅格,然后单击 Run

  • 该过程完成后,将山体阴影栅格添加到地图中。您应该看到它以灰度显示。

  • 要同时查看山体阴影和 gtopo30 一起,将山体阴影地图移动到 gtopo30 在内容列表中映射,然后打开 Properties 的窗口 gtopo30 ,切换到 Transparency 选项卡,并将其透明度级别设置为约25%。

您现在应该有了 gtopo30 显示其色彩映射表和透明度设置的高程 above 灰度山体阴影地图。要查看山体阴影的视觉效果,请关闭 gtopo30_shade 贴图,然后将其重新打开。

Using the GRASS shell

QGIS中的GRASS插件是为刚接触GRASS且不熟悉所有模块和选项的用户而设计的。因此,工具箱中的某些模块不会显示所有可用选项,而有些模块则根本不会显示。GRASSShell(或控制台)使用户可以访问那些没有出现在工具箱树中的附加GRASS模块,以及使用最简单的默认参数访问工具箱中的模块的一些附加选项。此示例演示如何使用 r.shaded.relief 如上所示的模块。

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

图 25.8 草壳r.shaded.Relation模块

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

  • 加载 gtopo30 高程栅格如上,然后启动草工具箱,并点击草壳。在Shell窗口中,键入命令 r.shaded.relief map=gtopo30 shade=gtopo30_shade2 azimuth=315 zmult=3 并按下 Enter

  • 在该过程完成后,切换到 Browse 选项卡,然后双击新的 gtopo30_shade2 用于在QGIS中显示它的栅格。

  • 如上所述,将阴影地貌栅格移动到 gtopo30 在栅格的内容列表中,然后检查该颜色的透明度 gtopo30 一层。您应该看到,与第一个着色地形图相比,3D效果更加突出。

../../../_images/grass_toolbox_shadedrelief.png

图 25.9 显示使用GRASS模块r.shaded.lide创建的着色地貌

25.14.2.3. 矢量地图中的栅格统计数据

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

  • 再次使用阿拉斯加的数据,请参阅 将数据导入到GRASS位置 要导入 shapefiles/trees.shp 鱼贯而入草地。

  • 现在需要一个中间步骤:必须将质心添加到导入的树贴图中,以使其成为完整的草地向量(包括边界和质心)。

  • 从工具箱中选择 Vector ► Manage features ,并打开模块 v.centroids

  • 输入为 output vector map ‘FOREST_ARAIES’并运行模块。

  • Now load the forest_areas vector and display the types of forests - deciduous, evergreen, mixed - in different colors: In the layer Properties window, Symbology tab, choose from Legend type 选择字符串 'Unique value' and set the Classification field to 'VEGDESC'. (Refer to the explanation of the symbology tab in 符号系统属性 of the vector section.)

  • 接下来,重新打开GRASS工具箱并打开 Vector ► Vector update 通过其他地图。

  • 按下 v.rast.stats 模块。请输入 gtopo30forest_areas

  • 只需要一个额外的参数:输入 column prefix elev ,然后点击 Run 。这是一个计算量很大的操作,将运行很长时间(可能长达两个小时)。

  • 最后,打开 forest_areas 属性表,并验证是否添加了几个新列,包括 elev_minelev_maxelev_mean 等等,用于每个森林多边形。

25.14.3. 自定义GRASS工具箱

几乎所有的GRASS模块都可以添加到GRASS工具箱中。提供了一个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>

当您选择该模块时,分析器将读取此定义并在工具箱中创建一个新选项卡。有关添加新模块、更改模块组等的更详细说明,请访问https://qgis.org/en/site/getinvolved/development/addinggrasstools.html.