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项 图标将添加到浏览器树中包含草地位置的每个文件夹项下。转到文件夹
grassdata
并扩展位置 alaska
和MAPSET demo
.
通过双击图层项目或拖放到地图画布或图例,可以从浏览器中加载草地栅格和矢量图层,就像任何其他图层一样。
小技巧
草数据加载
如果您没有看到草地位置项目,请在
如果加载了Grass Vector Provider。本节提供了如何将栅格和矢量数据导入草地地图集的示例。
当栅格数据位于不同的CRS中时,可以使用 Approximate (快)或 Exact (精确)变换。如果创建到源栅格的链接(使用 r.external
)源数据在同一个CRS中,格式为GDAL已知,将使用源数据CRS。您可以在 Browser 制表符 草料选项 .
如果源栅格具有更多条带,则会为每个层创建一个新的草地地图,其后缀为**。<band number>>**并将所有地图分组为 图标已创建。外部栅格具有不同的图标
.
要在QGIS中使用Grass功能,必须使用插件管理器选择并加载Grass插件。要执行此操作,请转到菜单 选择
GRASS 然后点击 OK .
草菜单提供以下主要功能(
)启动Grass插件时:Grass数据存储在一个称为gisdbase的目录中。此目录,通常称为 grassdata
必须在开始使用QGIS中的Grass插件之前创建。在这个目录中,Grass GIS数据由存储在名为 LOCATIONs
.每个 LOCATION
由其坐标系、地图投影和地理边界定义。各 LOCATION
可以有几个 MAPSETs
(的子目录 LOCATION
)用于将项目细分为不同的主题或子区域,或作为单个团队成员的工作区(参见Neteler&Mitasova 2008年 文献和网络参考 )为了使用Grass模块分析矢量和栅格图层,通常必须将它们导入到草地中。 LOCATION
. (这不是严格意义上的——草模块 r.external
和 v.external
您可以创建到外部GDAL/OGR支持的数据集的只读链接,而无需导入它们。这不是初学者使用草地的常见方法,因此此处不介绍此功能。)
阿拉斯加地区的草地数据
见节 通过拖放将数据导入草地位置 通过在浏览器中拖放来查找如何轻松导入数据。
本节给出了如何将栅格和矢量数据导入“阿拉斯加”草地的示例。 LOCATION
由QGIS“阿拉斯加”数据集以传统方式提供,使用标准Grass模块。因此,我们使用土地覆盖栅格图 landcover.img
和矢量GML文件 lakes.gml
来自QGIS“阿拉斯加”数据集(参见 下载示例数据 )
grassdata
在qgis阿拉斯加数据集中, LOCATION
“阿拉斯加” MAPSET
“演示”并单击 OK .landcover.img
,单击模块 r.in.gdal
在 Modules Tree 标签。此Grass模块允许您将gdal支持的栅格文件导入Grass LOCATION
. 的模块对话框 r.in.gdal
出现。raster
在qgis“阿拉斯加”数据集中选择文件 landcover.img
.landcover_grass
然后点击 Run . 在 Output 选项卡,您将看到当前正在运行的grass命令 r.in.gdal -o input=/path/to/landcover.img output=landcover_grass
.landcover_grass
栅格层现在导入到草地中,并将在QGIS画布中可视化。lakes.gml
,单击模块 v.in.ogr
在 Modules Tree 标签。此Grass模块允许您将支持OGR的矢量文件导入到Grass中 LOCATION
. 的模块对话框 v.in.ogr
出现。gml
在qgis“阿拉斯加”数据集中选择文件 lakes.gml
作为OGR文件。lakes_grass
然后点击 Run . 您不必关心本例中的其他选项。在 Output 选项卡您可以看到当前正在运行的草地命令 v.in.ogr -o dsn=/path/to/lakes.gml output=lakes\_grass
.lakes_grass
矢量层现在导入到草地中,并将在qgis画布中可视化。举个例子,这里是草的样本 LOCATION alaska
以英尺为单位,在阿尔伯斯等面积投影中进行投影。这草样品 LOCATION alaska
将用于以下草地相关章节中的所有示例和练习。在您的计算机上下载和安装数据集非常有用(请参见 下载示例数据 )
alaska.shp
形状文件(参见第节 从文件加载层 )来自QGIS阿拉斯加数据集(参见 下载示例数据 )grassdata
或者为新的 LOCATION
使用计算机上的文件管理器。然后点击 Next .MAPSET
在现有的 LOCATION
(见章节) 添加新地图集 )或创建新的 LOCATION
总而言之。选择 LOCATION
--我们用了“阿拉斯加”——然后点击 Next .LOCATION
和投影,还没有记住EPSG ID,点击 LOCATION
北、南、东、西三个方向的边界。这里,我们只需点击按钮 Set Current QGIS Extent ,以应用加载层的范围 alaska.shp
作为草地默认区域范围。MAPSET
在我们的新 LOCATION
(创建新的 LOCATION
)你可以随意命名-我们使用了“演示”。草会自动创建一个特殊的 MAPSET
打电话 PERMANENT
,用于存储项目的核心数据,其默认空间范围和坐标系定义(参见Neteler&Mitasova 2008年 文献和网络参考 )LOCATION
“阿拉斯加”和两个 MAPSETs
创建了“demo”和“permanent”。如您所定义,当前打开的工作集是“demo”。在QGIS中创建新的草地位置或新地图集
如果这看起来像是很多步骤,那么它并不是那么糟糕,而且是一个非常快速的方法来创建一个 LOCATION
. 这个 LOCATION
“阿拉斯加”现在可以导入数据了(参见 将数据导入草地位置 )您还可以在示例草地中使用现有的矢量和栅格数据 LOCATION
“阿拉斯加”,包含在QGIS“阿拉斯加”数据集中 下载示例数据 ,然后转到分区 草地矢量数据模型 .
用户只能对草地进行写访问 MAPSET
他或她创造的。这意味着除了你自己的 MAPSET
,您可以在其他用户的 MAPSETs
(他们可以阅读你的地图),但你只能修改或删除你自己的地图。 MAPSET
.
所有 MAPSETs
包括一个 WIND
存储当前边界坐标值和当前选定栅格分辨率的文件(请参见Neteler&Mitasova 2008中的 文献和网络参考 和截面 草地工具 )
grassdata
与 LOCATION
“阿拉斯加”,我们想在这里再加一个 MAPSET
称为“测试”。MAPSET
在现有的 LOCATION
或创建新的 LOCATION
总而言之。单击单选按钮 text
为了新的 MAPSET
. 在向导的下面,您可以看到现有的 MAPSETs
以及相应的所有者。了解 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数字化工具对草地矢量层进行数字化。但是,由于一些特殊性,您应该知道
以下部分将讨论这些特殊性。
保存、放弃更改、撤消、重做
警告
编辑期间所做的所有更改都会立即写入矢量图和相关属性表。
每次操作后都会写入更改,但是在关闭编辑时,可以执行撤消/重做或放弃所有更改。如果使用“撤消”或“放弃”更改,则会在向量映射和属性表中重写原始状态。
这种行为有两个主要原因:
工具栏
编辑草层时,“数字化工具栏”有一些特定的工具:
偶像 | 工具 | 目的 |
---|---|---|
![]() |
新观点 | 数字化新点 |
![]() |
新品系 | 数字化新行 |
![]() |
新境界 | 数字化新边界 |
![]() |
新形心 | 数字化新质心(标记现有区域) |
![]() |
新的封闭边界 | 数字化新的闭合边界 |
表草地数字化:草地数字化工具
小技巧
数字化草地中的多边形
如果要在草地中创建多边形,首先要数字化多边形的边界。然后将质心(标签点)添加到闭合边界中。这是因为拓扑向量模型总是将多边形的属性信息链接到质心而不是边界。
类别
分类,通常被称为cat,是一种ID。这个名字来自于草向量只有一个属性“category”的时候。类别用作几何图形和属性之间的链接。一个几何图形可以有多个类别,从而在不同的图层中表示多个特征。目前,使用QGIS编辑工具,每个图层只能分配一个类别。新功能已自动分配新的唯一类别,但边界除外。边界通常只形成区域,不代表线性特征,但是可以稍后为边界定义属性,例如在不同的层中。
新类别始终只在当前正在编辑的图层中创建。
无法使用QGIS编辑为几何图形指定更多类别,这些数据正确表示为多个特征,甚至可以删除不同图层的单个特征。
属性
当前编辑层的属性只能修改。如果矢量图包含更多层,其他层的功能将所有属性设置为“<不可编辑(层)>”,以警告您此类属性不可编辑。原因是,其他层可能具有并且通常具有不同的字段集,而QGIS仅支持每层一组固定字段。
如果几何体基元没有指定类别,则会自动指定新的唯一类别,并在更改该几何体的属性时在属性表中创建新记录。
小技巧
如果要批量更新表中的属性,例如使用“字段计算器”( 使用现场计算器 ,并且有一些没有类别的功能您不想更新(通常是边界),您可以通过将“高级筛选”设置为来筛选它们。 cat is not null
.
编辑样式
拓扑符号学是有效编辑拓扑数据的基础。编辑开始时,将在图层上自动设置专用的“草编辑”渲染器,并且在编辑关闭时还原原始渲染器。样式可以在图层属性“样式”选项卡中自定义。该样式也可以存储在项目文件中,或作为任何其他样式存储在单独的文件中。如果自定义样式,请不要更改其名称,因为它用于在重新开始编辑时重置样式。
小技巧
编辑图层时不要保存项目文件,图层将以“编辑样式”存储,如果不编辑图层,则没有任何意义。
该样式基于拓扑信息,拓扑信息作为字段“topo_符号”临时添加到属性表中。当编辑关闭时,该字段将自动删除。
小技巧
不要从属性表中删除“topo_symbol”字段,这将使功能不可见,因为渲染器基于该列。
抢购
要形成一个区域,连接边界的顶点必须 exactly 相同的坐标。只有当画布和矢量地图具有相同的CRS时,才可以使用捕捉工具来实现这一点。否则,由于从地图坐标转换到画布和画布背面,由于表示错误和CRS转换,坐标可能会略有不同。
小技巧
编辑时,对画布也使用层的CRS。
限制
不支持同时编辑同一矢量内的多个层。这主要是由于无法为单个数据源处理多个撤消堆栈。
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
文件,它定义了北、南、东、西边界、列和行数、水平和垂直空间分辨率。
可以使用 Display current GRASS region 按钮。
可以在“草地收费”停靠小部件的“区域”选项卡中修改该区域。键入新的区域边界和分辨率,然后单击 Apply . 如果你点击 Select the extent by dragging on canvas 您可以在QGIS画布上拖动矩形,用鼠标交互选择一个新区域。
草地模块 g.region
提供了更多的参数来为栅格分析定义适当的区域范围和分辨率。可以将这些参数与Grass工具箱一起使用,如第节所述。 草地工具箱 .
这个 Open GRASS Tools Box提供了Grass模块功能,用于处理选定草地中的数据。
LOCATION
和 MAPSET
. 要使用草地工具箱,需要打开 LOCATION
和 MAPSET
您拥有的写入权限(如果创建了 MAPSET
)这是必要的,因为在分析过程中创建的新栅格或矢量图层需要写入当前选定的 LOCATION
和 MAPSET
.
草地工具箱和模块树
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 标签。
通过单击图形模块图标,将向工具箱对话框添加一个新选项卡,提供三个新的子选项卡: Options , Output 和 Manual .
选项
这个 Options 选项卡提供了一个简化的模块对话框,在该对话框中,您通常可以选择在QGIS画布中可视化的栅格或矢量层,并输入更多模块特定参数以运行模块。
草地工具箱模块选项
为了保持对话框的简单性,提供的模块参数通常不完整。如果要使用更多的模块参数和标志,则需要启动Grass Shell并在命令行中运行模块。
qgis 1.8以来的一个新特性是支持 Show Advanced Options 按钮位于 Options 标签。目前,它只添加到模块中 v.in.ascii
作为一个使用示例,但在未来的QGIS版本中,它可能是Grass工具箱中更多或所有模块的一部分。这允许您使用完整的草地模块选项,而无需切换到草地外壳。
输出
Grass工具箱模块输出
这个 Output 选项卡提供有关模块输出状态的信息。当你点击 Run 按钮,模块切换到 Output 选项卡,您将看到有关分析过程的信息。如果一切正常,你最终会看到 Successfully finished
消息。
手册
草地工具箱模块手册
这个 Manual 选项卡显示Grass模块的HTML帮助页。您可以使用它来检查更多的模块参数和标志,或者更深入地了解模块的用途。在每个模块手册页的末尾,您可以看到到 Main Help index
, the Thematic index
以及 Full index
. 这些链接提供与模块相同的信息 g.manual
.
小技巧
立即显示结果
如果要在地图画布中立即显示计算结果,可以使用“模块”选项卡底部的“查看输出”按钮。
以下示例将演示一些草地模块的电源。
第一个示例从高程栅格(DEM)创建矢量等高线地图。这里,假设你有阿拉斯加 LOCATION
如第节所述设置 将数据导入草地位置 .
gtopo30
.ctour_100
.Successfully finished
出现在输出窗口中。然后点击 View Output 和 Close .因为这是一个很大的区域,所以需要一段时间才能显示出来。渲染完成后,可以打开“图层属性”窗口更改线条颜色,以便轮廓清晰地显示在高程栅格上,如中所示。 矢量属性对话框 .
接下来,放大到阿拉斯加中心的一个小山区。放大,你会发现轮廓有尖角。草地提供了 v.generalize 工具可以稍微改变矢量图,同时保持其整体形状。该工具使用不同目的的几种不同算法。一些算法(如Douglas Peuker和Vertex Reduction)通过删除一些顶点来简化线条。结果向量将更快地加载。当您有一个非常详细的向量时,这个过程很有用,但是您正在创建一个非常小的比例图,因此不需要详细信息。
小技巧
简化工具
注意,QGIS有一个
像草一样工作的工具 v.generalize 道格拉斯-普克算法。然而,这个例子的目的是不同的。由创建的轮廓线 r.contour
有应该平滑的锐角。其中 v.generalize 算法,有柴肯的,这只是做(也赫敏样条)。请注意,这些算法可以 add 向量的附加顶点,使其加载更慢。
Successfully finished
出现在输出窗口中,单击 View Output 然后 Close .小技巧
R.Contour的其他用途
上述程序可用于其他等效情况。例如,如果您有降水数据的栅格图,那么将使用相同的方法创建等雨量线(恒定降雨量)的矢量图。
有几种方法可用于显示立面图层,并为地图提供三维效果。如上图所示,使用等高线是制作地形图常用的一种方法。另一种显示三维效果的方法是使用Hillshading。通过首先计算每个单元的坡度和侧面,然后模拟太阳在天空中的位置,并为每个单元提供反射值,可以从DEM(高程)栅格创建Hillshade效果。因此,面向太阳的斜坡会被照亮;背离太阳的斜坡(在阴影中)会变暗。
gtopo30
高程栅格。启动Grass工具箱,然后在“栅格”类别下双击以打开 .gtopo30_shade
对于新的Hillshade栅格,单击 Run .gtopo30
一起,将Hillshade地图移到 gtopo30
在目录中映射,然后打开 窗口 gtopo30
切换到 Transparency 选项卡并将其透明度级别设置为25%左右。你现在应该有 gtopo30
显示其颜色图和透明度设置的高程 above 灰度山影图。要查看山体阴影的视觉效果,请关闭 gtopo30_shade
地图,然后再打开。
使用草壳
qgis中的grass插件是为那些不熟悉所有模块和选项的新手设计的。因此,工具箱中的某些模块不显示所有可用选项,而某些模块根本不显示。Grass Shell(或控制台)允许用户访问工具箱树中未显示的其他Grass模块,以及工具箱中具有最简单默认参数的模块的一些其他选项。此示例演示在 r.shaded.relief 上面显示的模块。
草壳,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
.gtopo30_shade2
栅格显示在qgis中。gtopo30
在目录中设置栅格,然后检查颜色的透明度 gtopo30
层。你应该看到,与第一张阴影地形图相比,三维效果更突出。下一个示例展示了Grass模块如何聚合栅格数据并为矢量地图中的每个多边形添加统计数据列。
shapefiles/trees.shp
锉入草地。forest_areas
矢量和显示森林类型-落叶,常绿,混合-不同颜色:在层 Properties 窗口, Symbology 选项卡,从中选择 Legend type gtopo30
和 forest_areas
.elev
然后点击 Run . 这是一个计算量很大的操作,运行时间很长(可能长达两个小时)。forest_areas
属性表,并验证是否添加了几个新列,包括 elev_min
, elev_max
, elev_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.