12.1. 课: GRASS安装
在QGIS中使用GRASS,需要适应略微不同工作方式的界面。请记住,您不是直接使用QGIS,而是 通过 QGIS在GRASS中工作。因此,请确保已经安装了支持GRASS的 QGIS Desktop。
要在Windows使用GRASS打开QGIS会话,您必须单击 QGIS Desktop with GRASS
图标。
本课目标: 在QGIS中创建GRASS工程。
12.1.1. 跟我做: 新建GRASS会话
要从QGIS启动GRASS,您需要像使用任何其他插件一样先进行激活:
首先,打开一个新的QGIS工程。
在 插件管理器 的列表中启用 GRASS :
GRASS工具栏和GRASS面板将出现:
GRASS面板未激活,因为在使用GRASS之前,需要创建 地图集
。GRASS始终在数据库环境中工作,这意味着您需要将所有要使用的数据导入GRASS数据库。
GRASS数据库的结构非常简单,尽管第一次看到时感觉似乎非常复杂。您应该知道的最重要的一点是,数据库的上层是 位置
。每个 位置
可以包含不同的 地图集
:在 每个 地图集
中,您都会找到 永久
地图集,因为它默认由GRASS创建。每个 地图集
都包含特定结构的数据 (栅格、矢量等),但不用担心,GRASS会为您处理这些数据。
Just remember: Location
contains Mapset
that contains the data. For more
information visit the GRASS website.
12.1.2. 跟我做: 启动新的GRASS工程
单击 插件 --> GRASS --> 新建地图集 菜单:
系统首先要求您选择GRASS数据库的位置 - 注意:文件夹及路径不能有中文等其他字符,否则创建失败。
将所选文件夹设置为GRASS用于设置其数据库的目录:
单击 下一步 。
GRASS需要创建一个 位置
,它描述了您将要使用的地理区域的最大范围,也称为 Grass 域
。
备注
域对GRASS极其重要,因为它描述了GRASS将解释所有被纳入图层的区域,而外面的一切都不会顾及。不用担心,在创建位置后,随时可以更改GRASS域的范围。
新建位置并命名为
SouthAfrica
:单击 下一步 。
我们将使用
WGS 84
,因此搜索并选择此CRS:单击 下一步 。
现在从下拉列表中选择域 South Africa ,然后单击 设置 :
单击 下一步 。
创建地图集,这将是您使用的地图文件。
完成后,您将看到一个对话框,其中包含所有输入信息的摘要。
单击 完成 。
在成功创建对话框中单击 确定 按钮。
您将看到GRASS面板变为激活状态,并可以使用所有GRASS工具。
12.1.3. 跟我做: 将矢量数据加载到GRASS
您现在有一个空白地图,在开始使用所有GRASS工具之前,必须将数据加载到GRASS数据库,特别是加载至 地图集
。不能对未加载到GRASS 地图集
中的图层使用GRASS工具。
在GRASS数据库中加载数据有许多不同的方法,让我们从第一个开始。
跟我做: 使用QGIS浏览器加载数据
在 浏览器面板 中我们发现,QGIS加载数据最简单快捷的方法是使用浏览器面板。
GRASS数据在QGIS浏览器中被识别为 真正 的GRASS数据,您可能会注意到它,因为您将在GRASS地图集旁边看到GRASS图标。此外,也可以在打开的地图集旁边看到 图标。
可以轻松地将图层从文件夹 拖放 到GRASS地图集。
让我们尝试将 roads
图层导入到 SouthAfrica
位置的 grass_mapset
地图集。
转到浏览器,只需将 roads
图层从 training_data.gpkg
GeoPackage 文件拖进 grass_mapset
地图集。
就这样!如果展开地图集,您将看到导入的 roads
图层。现在,您可以像其他所有图层一样,在QGIS中加载导入的图层。
小技巧
也可以将图层从图层图例面板加载到浏览器面板中的地图集,这将大大加快您的工作流程!
跟我做: 使用GRASS面板加载数据
我们现在使用 long 方法将 rivers.shp
图层加载到同一地图集中。
像往常一样将数据加载到QGIS中。使用
rivers.shp
数据集 (在exercise_data/shapefile/
文件夹中查找)加载后,单击
GRASS
面板的 过滤器 输入框,通过输入术语v.in.ogr.qgis
查找矢量导入工具:警告
有两个类似的工具:
v.in.ogr.qgis
和v.in.ogr.qgis.loc
,我们正在寻找 第一个 。v
代表 矢量 ,in
意味着将数据导入GRASS数据库的函数,ogr
是用于读取矢量数据的程序库,qgis
表示工具将从已加载到QGIS中的矢量进行查找。找到此工具后,单击打开。在 Loaded Layer 框中选择 rivers 图层,然后键入并将其命名为
g_rivers
,以防混淆:备注
请注意 高级选项 中提供的其他导入选项,其中包括为用于导入数据的SQL查询添加WHERE子句的功能。
单击 运行 开始导入。
完成后,单击 查看输出 按钮,在地图中查看新导入的GRASS图层。
首先关闭导入工具 (单击 查看输出 右侧的 关闭 按钮),然后关闭 GRASS工具 窗口。
移除原 rivers 图层。
现在只剩下QGIS地图中仅显示导入的GRASS图层。
12.1.4. 跟我做: 将栅格数据加载到GRASS
可以使用与导入矢量图层相同的方法导入栅格图层。
我们将在GRASS地图集中导入图层 srtm_41_19_4326.tif
。
备注
栅格图层已在恰当的 CRS WGS 84
中。如果您的图层处于不同的CRS,则必须在GRASS地图集的相同CRS中进行重投影。
在QGIS中加载
srtm_41_19_4326.tif
图层。再次打开 GRASS工具 对话框。
单击 模块 选项卡。
搜索
r.in.gdal.qgis
并双击以打开该工具的对话框。将输入图层设置为
srtm_41_19_4326.tif
,输出为g_dem
。单击 运行 。
完成该处理后,单击 查看输出 。
关闭 当前选项卡,然后 关闭 整个对话框。
您现在可以移除原
srtm_41_19_4326.tif
图层。
12.1.5. 试一试 添加图层到地图集
尝试从 exercise_data/shapefile/
文件夹在GRASS地图集中导入矢量图层 water.shp
和 places.shp
。正如我们对 rivers
所做的那样,将导入的图层重命名为 g_water
和 g_places
,避免混淆。
回答
可以在浏览器中拖放图层 (矢量和栅格),将其添加到GRASS地图集中 (请参阅 跟我做: 使用QGIS浏览器加载数据) 或者使用 v.in.gdal.qgis
(矢量图层) 和 r.in.gdal.qgis
(栅格图层)。
12.1.6. 打开现有GRASS地图集
如果您已经有了GRASS地图集,可以在QGIS的另一个会话中轻松地重新打开。
有几种方法可以打开GRASS地图集,让我们来探索其中的一些方法。
单击 GRASS工具 窗口的 关闭地图集 按钮来关闭地图集。
跟我做: 使用GRASS插件
单击我们在上一节中看到的 插件 --> GRASS --> 新建地图集 菜单旁边的 插件 --> GRASS --> 打开地图集 菜单。
浏览到GRASS数据库文件夹:小心!您必须选择父文件夹,而不是GRASS地图集文件夹。实际上,GRASS将读取数据库的所有
位置
以及每个位置
的所有地图集
:选择我们之前创建的
位置
SouthAfrica 和地图集
grass_mapset 。
就是这样!GRASS面板将变为激活状态,表示地图集已正确打开。
跟我做: 使用QGIS浏览器
使用QGIS浏览器打开 地图集
更快捷、更简单:
通过单击 GRASS工具 窗口的 关闭地图集 按钮来关闭地图集 (如果已打开)。
在QGIS浏览器,浏览到GRASS数据库的文件夹。
单击 打开地图集:
地图集现已打开,并可以使用了!
小技巧
右键单击GRASS地图集可为您提供许多不同的设置。尝试探索,并查看所有有用的选项。
12.1.7. 综上所述
GRASS获取数据的工作流程与QGIS方法有所不同,这是因为GRASS将其数据加载到空间数据库结构中。但是,使用QGIS作为前端,可以通过使用QGIS中的现有图层作为GRASS的数据源,简化GRASS地图集的设置。
12.1.8. 下节引言
现在数据已经导入到GRASS,我们可以看看GRASS提供的高级分析运算。