12.1. 课: GRASS安装

在QGIS中使用GRASS,需要适应略微不同工作方式的界面。请记住,您不是直接使用QGIS,而是 通过 QGIS在GRASS中工作。因此,请确保已经安装了支持GRASS的 QGIS Desktop。

win 要在Windows使用GRASS打开QGIS会话,您必须单击 QGIS Desktop with GRASS 图标。

本课目标: 在QGIS中创建GRASS工程。

12.1.1. basic 跟我做: 新建GRASS会话

要从QGIS启动GRASS,您需要像使用任何其他插件一样先进行激活:

  1. 首先,打开一个新的QGIS工程。

  2. 插件管理器 的列表中启用 GRASS

    ../../../_images/enable_grass.png

    GRASS工具栏和GRASS面板将出现:

    ../../../_images/grass_toolbar.png

    图 12.10 GRASS工具栏

    ../../../_images/grass_panel.png

    图 12.11 GRASS面板

GRASS面板未激活,因为在使用GRASS之前,需要创建 地图集 。GRASS始终在数据库环境中工作,这意味着您需要将所有要使用的数据导入GRASS数据库。

GRASS数据库的结构非常简单,尽管第一次看到时感觉似乎非常复杂。您应该知道的最重要的一点是,数据库的上层是 位置 。每个 位置 可以包含不同的 地图集 :在 每个 地图集 中,您都会找到 永久 地图集,因为它默认由GRASS创建。每个 地图集 都包含特定结构的数据 (栅格、矢量等),但不用担心,GRASS会为您处理这些数据。

Just remember: Location contains Mapset that contains the data. For more information visit the GRASS website.

../../../_images/grass_database.png

图 12.12 GRASS数据库结构 (来自GRASS文档)

12.1.2. basic 跟我做: 启动新的GRASS工程

  1. 单击 插件 --> GRASS --> 新建地图集 菜单:

    ../../../_images/grass_menu.png

    系统首先要求您选择GRASS数据库的位置 - 注意:文件夹及路径不能有中文等其他字符,否则创建失败。

  2. 将所选文件夹设置为GRASS用于设置其数据库的目录:

    ../../../_images/grass_folder.png
  3. 单击 下一步

GRASS需要创建一个 位置 ,它描述了您将要使用的地理区域的最大范围,也称为 Grass

备注

域对GRASS极其重要,因为它描述了GRASS将解释所有被纳入图层的区域,而外面的一切都不会顾及。不用担心,在创建位置后,随时可以更改GRASS域的范围。

  1. 新建位置并命名为 SouthAfrica:

    ../../../_images/new_location.png
  2. 单击 下一步

  3. 我们将使用 WGS 84 ,因此搜索并选择此CRS:

    ../../../_images/wgs_84_selected.png
  4. 单击 下一步

  5. 现在从下拉列表中选择域 South Africa ,然后单击 设置 :

    ../../../_images/set_south_africa.png
  6. 单击 下一步

  7. 创建地图集,这将是您使用的地图文件。

    ../../../_images/grass_mapset.png

    完成后,您将看到一个对话框,其中包含所有输入信息的摘要。

    ../../../_images/grass_final.png
  8. 单击 完成

  9. 在成功创建对话框中单击 确定 按钮。

您将看到GRASS面板变为激活状态,并可以使用所有GRASS工具。

12.1.3. basic 跟我做: 将矢量数据加载到GRASS

您现在有一个空白地图,在开始使用所有GRASS工具之前,必须将数据加载到GRASS数据库,特别是加载至 地图集 。不能对未加载到GRASS 地图集 中的图层使用GRASS工具。

在GRASS数据库中加载数据有许多不同的方法,让我们从第一个开始。

basic 跟我做: 使用QGIS浏览器加载数据

浏览器面板 中我们发现,QGIS加载数据最简单快捷的方法是使用浏览器面板。

GRASS数据在QGIS浏览器中被识别为 真正 的GRASS数据,您可能会注意到它,因为您将在GRASS地图集旁边看到GRASS图标。此外,也可以在打开的地图集旁边看到 grassMapsetOpen 图标。

../../../_images/grass_browser.png

备注

您将看到GRASS位置可以作为普通文件夹进行复制:GRASS 地图集 数据是 grassLogo 文件夹中的数据。

可以轻松地将图层从文件夹 拖放 到GRASS地图集。

让我们尝试将 roads 图层导入到 SouthAfrica 位置的 grass_mapset 地图集。

转到浏览器,只需将 roads 图层从 training_data.gpkg GeoPackage 文件拖进 grass_mapset 地图集。

../../../_images/grass_browser_import.png

就这样!如果展开地图集,您将看到导入的 roads 图层。现在,您可以像其他所有图层一样,在QGIS中加载导入的图层。

小技巧

也可以将图层从图层图例面板加载到浏览器面板中的地图集,这将大大加快您的工作流程!

basic 跟我做: 使用GRASS面板加载数据

我们现在使用 long 方法将 rivers.shp 图层加载到同一地图集中。

  1. 像往常一样将数据加载到QGIS中。使用 rivers.shp 数据集 (在 exercise_data/shapefile/ 文件夹中查找)

  2. 加载后,单击 GRASS 面板的 过滤器 输入框,通过输入术语 v.in.ogr.qgis 查找矢量导入工具:

    警告

    有两个类似的工具: v.in.ogr.qgisv.in.ogr.qgis.loc ,我们正在寻找 第一个

    ../../../_images/grass_panel_import.png

    v 代表 矢量in 意味着将数据导入GRASS数据库的函数, ogr 是用于读取矢量数据的程序库, qgis 表示工具将从已加载到QGIS中的矢量进行查找。

  3. 找到此工具后,单击打开。在 Loaded Layer 框中选择 rivers 图层,然后键入并将其命名为 g_rivers ,以防混淆:

    ../../../_images/grass_tool_selected.png

    备注

    hard 请注意 高级选项 中提供的其他导入选项,其中包括为用于导入数据的SQL查询添加WHERE子句的功能。

  4. 单击 运行 开始导入。

  5. 完成后,单击 查看输出 按钮,在地图中查看新导入的GRASS图层。

  6. 首先关闭导入工具 (单击 查看输出 右侧的 关闭 按钮),然后关闭 GRASS工具 窗口。

  7. 移除原 rivers 图层。

现在只剩下QGIS地图中仅显示导入的GRASS图层。

12.1.4. basic 跟我做: 将栅格数据加载到GRASS

可以使用与导入矢量图层相同的方法导入栅格图层。

我们将在GRASS地图集中导入图层 srtm_41_19_4326.tif

备注

栅格图层已在恰当的 CRS WGS 84 中。如果您的图层处于不同的CRS,则必须在GRASS地图集的相同CRS中进行重投影。

  1. 在QGIS中加载 srtm_41_19_4326.tif 图层。

  2. 再次打开 GRASS工具 对话框。

  3. 单击 模块 选项卡。

  4. 搜索 r.in.gdal.qgis 并双击以打开该工具的对话框。

  5. 将输入图层设置为 srtm_41_19_4326.tif ,输出为 g_dem

    ../../../_images/g_dem_settings.png
  6. 单击 运行

  7. 完成该处理后,单击 查看输出

  8. 关闭 当前选项卡,然后 关闭 整个对话框。

    ../../../_images/g_dem_result.png
  9. 您现在可以移除原 srtm_41_19_4326.tif 图层。

12.1.5. basic 试一试 添加图层到地图集

尝试从 exercise_data/shapefile/ 文件夹在GRASS地图集中导入矢量图层 water.shpplaces.shp 。正如我们对 rivers 所做的那样,将导入的图层重命名为 g_waterg_places ,避免混淆。

12.1.6. basic 打开现有GRASS地图集

如果您已经有了GRASS地图集,可以在QGIS的另一个会话中轻松地重新打开。

有几种方法可以打开GRASS地图集,让我们来探索其中的一些方法。

单击 GRASS工具 窗口的 关闭地图集 按钮来关闭地图集。

basic 跟我做: 使用GRASS插件

  1. 单击我们在上一节中看到的 插件 --> GRASS --> 新建地图集 菜单旁边的 插件 --> GRASS --> 打开地图集 菜单。

  2. 浏览到GRASS数据库文件夹:小心!您必须选择父文件夹,而不是GRASS地图集文件夹。实际上,GRASS将读取数据库的所有 位置 以及每个 位置 的所有 地图集

    ../../../_images/grass_open_mapset1.png
  3. 选择我们之前创建的 位置 SouthAfrica地图集 grass_mapset

就是这样!GRASS面板将变为激活状态,表示地图集已正确打开。

basic 跟我做: 使用QGIS浏览器

使用QGIS浏览器打开 地图集 更快捷、更简单:

  1. 通过单击 GRASS工具 窗口的 关闭地图集 按钮来关闭地图集 (如果已打开)。

  2. 在QGIS浏览器,浏览到GRASS数据库的文件夹。

  3. 右键单击地图集 (请记住,地图集旁边有 grassLogo GRASS 图标),您会看到一些选项。

  4. 单击 打开地图集:

    ../../../_images/grass_open_mapset_browser.png

地图集现已打开,并可以使用了!

小技巧

右键单击GRASS地图集可为您提供许多不同的设置。尝试探索,并查看所有有用的选项。

12.1.7. 综上所述

GRASS获取数据的工作流程与QGIS方法有所不同,这是因为GRASS将其数据加载到空间数据库结构中。但是,使用QGIS作为前端,可以通过使用QGIS中的现有图层作为GRASS的数据源,简化GRASS地图集的设置。

12.1.8. 下节引言

现在数据已经导入到GRASS,我们可以看看GRASS提供的高级分析运算。