6.2. Lesson: 向量分析

还可以分析矢量数据,以揭示不同的要素如何在空间中相互作用。有许多不同的与分析相关的函数,所以我们不会一一介绍。相反,我们将提出一个问题,并尝试使用QGIS提供的工具来解决它。

The goal for this lesson: 提出问题并使用分析工具解决问题。

6.2.1. 基本信息 地理信息系统流程

在我们开始之前,给出一个可用于解决问题的过程的简要概述将是有用的。解决这一问题的方法是:

  1. 陈述问题

  2. 获取数据

  3. 分析问题

  4. 展示结果

6.2.2. 基本信息 问题所在

让我们从决定一个要解决的问题开始这个过程。例如,你是一名房地产经纪人,正在寻找一处位于 Swellendam 对于符合以下条件的客户:

  1. 它需要放在 Swellendam

  2. 它必须在学校的合理驾驶距离内(比如1公里)

  3. 它的大小必须超过100米平方

  4. 距离一条主干道不到50米

  5. 离餐厅不到500米

6.2.3. 基本信息 数据

要回答这些问题,我们需要以下数据:

  1. 该地区的住宅物业(建筑物)

  2. 镇上和周围的道路

  3. 学校和餐馆的位置

  4. 建筑物的大小

这些数据可以通过OSM获得,您应该会发现本手册中使用的数据集也可以用于本课。

如果您想从其他区域下载数据,请跳转到 Introduction Chapter 阅读如何做到这一点。

备注

尽管OSM下载具有一致的数据字段,但覆盖范围和详细信息确实有所不同。例如,如果您发现所选区域不包含有关餐馆的信息,则可能需要选择其他区域。

6.2.4. 基本信息 Follow Along: Start a Project and get the Data

我们首先需要加载要使用的数据。

  1. 启动新的QGIS项目

  2. 如果您愿意,您可以添加背景地图。打开 Browser 并加载 OSM 背景地图来自 XYZ Tiles 菜单。

    ../../../_images/osm_swellendam.png
  3. training_data.gpkg Geopackage数据库,您将找到本章中将使用的大多数数据集:

    1. buildings

    2. roads

    3. restaurants

    4. schools

    加载它们,并且还 landuse.sqlite

  4. 缩放至层范围以查看 Swellendam ,南非

    在继续之前,我们将筛选 roads 层,以便只有一些特定的道路类型可用。

    OSM数据集中的一些道路列出如下 unclassifiedtrackspathfootway 。我们希望从我们的数据集中排除这些类型,并将重点放在更适合本练习的其他道路类型上。

    此外,OSM数据可能不会在所有地方更新,我们也将排除 NULL 价值观。

  5. 右键单击 roads 分层并选择 Filter...

  6. 在弹出的对话框中,我们使用以下表达式过滤这些功能:

    "highway" NOT IN ('footway', 'path', 'unclassified', 'track') AND "highway" IS NOT NULL
    

    两个运算符的连接 NOTIN 中包含这些属性值的所有要素 highway 菲尔德。

    IS NOT NULL 结合了 AND 运算符不包括在 highway 菲尔德。

    请注意 指示器过滤器 图标旁边的 roads 一层。它有助于您记住,此图层已激活过滤器,因此某些功能可能在项目中不可用。

包含所有数据的地图应如下所示:

../../../_images/osm_swellendam_2.png

6.2.5. 基本信息 Try Yourself Convert Layers' CRS

因为我们要测量层内的距离,所以需要更改层的CRS。要做到这一点,我们需要依次选择每个层,用我们的新投影将该层保存到一个新的层,然后将该新层导入我们的地图。

您有许多不同的选项,例如,可以将每个图层导出为ESRI Shapefile格式的数据集,可以将图层附加到现有的GeoPackage文件,或者可以创建另一个GeoPackage文件并使用新的重新投影的图层填充该文件。我们将显示最后一个选项,因此 training_data.gpkg 都会保持清白。您可以自由选择最适合自己的工作流程。

备注

在本例中,我们使用 WGS 84 / UTM zone 34S CRS,但您应该使用更适合您所在地区的UTM CRS。

  1. 右键单击 roads 中的层 Layers 嵌板

  2. 单击 Export --> Save Features As...

  3. Save Vector Layer As 对话框选择 GeoPackage AS Format

  4. 点击 ... 对于 File name ,并将新的地理包命名为 vector_analysis

  5. 更改 Layer nameroads_34S

  6. 更改 CRSWGS 84 / UTM zone 34S

  7. 点击 OK

    ../../../_images/save_roads_34S.png

    这将创建新的GeoPackage数据库并添加 roads_34S 一层。

  8. 对每个层重复此过程,在中创建新层 vector_analysis.gpkg 包含的GeoPackage文件 _34S 附加在原始名称之后。

    在MacOS上,按下 Replace 弹出对话框中的按钮,允许QGIS覆盖现有的GeoPackage。

    备注

    选择将图层保存到现有GeoPackage时,QGIS将 add GeoPackage中现有层旁边的该层(如果尚不存在同名的层)。

  9. 从项目中移除每个旧的图层

  10. 完成所有层的过程后,右键单击任意层,然后单击 Zoom to layer extent 将地图聚焦到感兴趣的区域。

现在我们已经将OSM数据转换为UTM投影,我们可以开始计算了。

6.2.6. 基本信息 Follow Along: Analyzing the Problem: Distances From Schools and Roads

QGIS允许您计算任何矢量对象之间的距离。

  1. 确保只有 roads_34Sbuildings_34S 层是可见的(以便在您工作时简化地图)

  2. 按下 Processing ► Toolbox 打开分析的步骤 core Q地理信息系统。基本上, all 算法(用于向量 and 栅格分析)在此工具箱中可用。

  3. 我们首先计算周围的面积 roads_34S 通过使用 Buffer 算法。您可以在 Vector Geometry 一群人。

    ../../../_images/processing_buffer_1.png

    或者你也可以输入 buffer 在工具箱上部的搜索菜单中:

    ../../../_images/processing_buffer_2.png
  4. 双击它以打开算法对话框

  5. 选择 roads_34S AS Input layer ,设置 Distance 设置为50,并使用其余参数的默认值。

    ../../../_images/vector_buffer_setup.png
  6. 默认设置 Distance 是以米为单位的,因为我们的输入数据集位于使用米作为其基本测量单位的投影坐标系中。您可以使用组合框选择其他投影单位,如公里、码等。

    备注

    如果您尝试在具有地理坐标系的图层上创建缓冲区,处理过程将向您发出警告并建议您将该图层重新投影到公制坐标系。

  7. 默认情况下, Processing 创建临时层并将其添加到 Layers 面板。您还可以通过以下方式将结果追加到GeoPackage数据库:

    1. 点击 ... 按钮,然后选择 Save to GeoPackage...

    2. 命名新层 roads_buffer_50m

    3. 将其保存在 vector_analysis.gpkg 文件

    ../../../_images/buffer_saving.png
  8. 点击 Run ,然后关闭 Buffer 对话框

    现在,您的地图将如下所示:

    ../../../_images/roads_buffer_result.png

如果您的新层位于 Layers 列表,它可能会模糊你的地图的大部分,但这给你的地区的所有地区,在一条道路的50米以内。

请注意,缓冲区中有不同的区域,与每条单独的道路相对应。要摆脱这个问题,请执行以下操作:

  1. 取消选中 roads_buffer_50m 层,并使用重新创建缓冲区 Dissolve results 已启用。

    ../../../_images/dissolve_buffer_setup.png
  2. 将输出另存为 roads_buffer_50m_dissolved

  3. 单击 Run 并关闭 Buffer 对话框

将该层添加到 Layers 面板中,它将如下所示:

../../../_images/dissolve_buffer_results.png

现在没有不必要的细分。

备注

这个 Short Help 对话框右侧说明了该算法的工作原理。如果您需要更多信息,只需点击 Help 按钮在底部打开更详细的算法指南。

6.2.7. 基本信息 Try Yourself Distance from schools

使用与上述相同的方法,为您的学校创建一个缓冲区。

它应该是 1 km 半径。将新层保存在 vector_analysis.gpkg 文件为 schools_buffer_1km_dissolved

6.2.8. 基本信息 Follow Along: Overlapping Areas

现在我们已经确定了距离公路不到50米的地区,以及1公里内有学校的地区(直达,而不是公路)。但显然,我们只想要这两个标准都满足的领域。要做到这一点,我们需要使用 Intersect 工具。您可以在以下位置找到 Vector Overlay 组中的 Processing Toolbox

  1. 将这两个缓冲层用作 Input layerOverlay layer ,选择 vector_analysis.gpkg GeoPackage in Intersection 使用 Layer name road_school_buffers_intersect 。将其余部分保留为建议(默认)。

    ../../../_images/school_roads_intersect.png
  2. 单击 Run

    在下图中,蓝色区域是满足两个距离标准的区域。

    ../../../_images/intersect_result.png
  3. 您可以删除两个缓冲层,只保留显示它们重叠的那个层,因为这才是我们首先真正想知道的:

    ../../../_images/final_intersect_result.png

6.2.9. 基本信息 Follow Along: Extract the Buildings

现在,您已经获得了建筑物必须重叠的区域。接下来,您要提取该区域中的建筑。

  1. 查找菜单项 Vector Selection ► Extract by locationProcessing Toolbox

  2. 选择 buildings_34S 在……里面 Extract features from 。检查 intersect 在……里面 Where the features (geometric predicate) ,在中选择缓冲区交叉点图层 By comparing to the features from 。保存到 vector_analysis.gpkg ,并将层命名为 well_located_houses

    ../../../_images/location_select_dialog.png
  3. 单击 Run 并关闭该对话框

  4. 你可能会发现,似乎没有太多变化。如果是,则将 well_located_houses 层到层列表的顶部,然后放大。

    ../../../_images/select_zoom_result.png

    红色的建筑符合我们的标准,绿色的建筑不符合我们的标准。

  5. 现在您有两个分离的层,可以删除 buildings_34S 从层列表中。

6.2.10. 适度 Try Yourself Further Filter our Buildings

我们现在有一个层,它显示了一所学校1公里内和一条道路50米内的所有建筑。我们现在需要减少选择,只显示距离餐厅500米以内的建筑。

使用上述过程创建一个名为的新图层 houses_restaurants_500m 它会进一步过滤您的 well_located_houses 层,仅显示餐厅周围500米范围内的区域。

6.2.11. 基本信息 Follow Along: Select Buildings of the Right Size

要查看哪些建筑的大小正确(超过100平方米),我们需要计算它们的大小。

  1. 选择 houses_restaurants_500m 层,然后打开 Field Calculator 通过单击 计算字段 Open Field Calculator 主工具栏或属性表窗口中的按钮

  2. 选择 Create a new field ,设置 Output field nameAREA ,选择 Decimal number (real) AS Output field type ,然后选择 $areaGeometry 一群人。

    ../../../_images/buildings_area_calculator.png

    新领域 AREA 每栋建筑的面积将以平方米为单位。

  3. 单击 OK 。这个 AREA 已在属性表的末尾添加了字段。

  4. 单击 ToggleEditing Toggle Editing 按钮完成编辑,并在出现提示时保存您的编辑。

  5. Source 选项卡中,设置 Provider Feature Filter"AREA >= 100

    ../../../_images/buildings_area_query.png
  6. 单击 OK

您的地图现在应该只向您显示那些符合我们的起始标准且大小超过100平方米的建筑。

6.2.12. 基本信息 Try Yourself

使用您在上面学到的方法将您的解决方案保存为新的层。该文件应保存在相同的GeoPackage数据库中,名称为 solution

6.2.13. In Conclusion

结合使用GIS问题求解方法和QGIS矢量分析工具,您能够快速、轻松地解决具有多个标准的问题。

6.2.14. What's Next?

在下一课中,我们将学习如何计算从一点到另一点的道路上的最短距离。