跳转至

17_执行空间查询 QGIS3

原文链接: https://www.qgistutorials.com/en/docs/3/performing_spatial_queries.html

执行空间查询 (QGIS3)

空间查询是许多 GIS 分析类型的核心。空间查询允许您根据一个图层中的要素与另一个图层中的要素的空间关系(相交、包含、接触等)来选择该图层中的要素。在 QGIS 中,此功能可通过 按位置选择(Select by Location)按位置提取(Extract by Location) 处理工具实现。

任务概述

我们将使用澳大利亚墨尔本市的两个数据层。给定城市中酒吧和酒馆的数据层以及所有地铁站的位置,我们想要找出距离地铁站 500 米范围内的所有酒吧和酒馆。

您将学到的其他技能

  • 选择合适的投影并重新投影矢量数据。
  • 创建缓冲区。
  • 使用 GeoPackage (.gpkg) 数据格式。

获取数据

墨尔本市政府的开放数据平台为该市提供了许多可直接用于 GIS 的数据集。

下载墨尔本地铁公司提供的带无障碍设施信息的地铁站数据集。以 原始 格式导出数据。

../../_images/data117.png

下载墨尔本市土地利用与就业普查(CLUE)提供的酒吧和酒馆(含容纳人数)数据集。将数据导出为 CSV 格式。

../../_images/data27.png

操作步骤

  1. 在 QGIS 浏览器中找到 metro_stations_accessbility.zip 文件并展开。选择 metro_stations_accessbility.shp 文件并将其拖拽到画布上。一个新图层 metro_stations_accessbility 将被加载到图层面板中。

../../_images/1137.png

  1. 酒吧和酒馆的数据层为 CSV 格式。要将其加载到 QGIS 中,请转到图层 ‣ 添加图层 ‣ 添加分隔文本图层…。(有关导入 CSV 文件的更多详情,请参见导入电子表格或 CSV 文件 (QGIS3)

../../_images/2108.png

  1. 在数据源管理器 | 分隔文本对话框中,浏览并选择下载的 Bars_and_pubs__with_patron_capacity.csv 文件作为文件名。X 字段和 Y 字段列应自动分别选择为 x coordinatey coordinate。点击添加。

../../_images/356.png

注意

QGIS 会保存此对话框上次选择的选项,因此如果您之前使用其他选项配置过此对话框,它们可能仍然被选中。请特别注意,确保记录和字段选项部分中要丢弃的标题行数选项设置为 0

  1. 您将看到一个新的 Bars_and_pubs__with_patron_capacity 图层被添加到图层面板中。两个输入图层都使用地理坐标系(CRS)EPSG:4326 WGS84。为了执行空间分析,建议使用投影坐标系(CRS)。因此,我们现在将把这两个图层重新投影到一个合适的区域 CRS,该 CRS 能够最大限度地减少变形,并允许我们使用距离单位(例如米)而不是度数进行工作。转到处理(Processing) ‣ 工具箱(Toolbox)。

../../_images/428.png

  1. 搜索并找到矢量常规(Vector general) ‣ 重新投影图层(Reproject layer)工具。双击启动它。

../../_images/526.png

  1. 选择 Bars_and_pubs__with_patron_capacity 作为输入图层(Input layer)。点击目标 CRS(Target CRS)旁边的选择 CRS 按钮。

../../_images/626.png

  1. 为您的分析选择投影坐标系时,首先要寻找的是感兴趣区域的区域 CRS。对于澳大利亚,澳大利亚地图网格(MGA)2020 是一个基于 UTM 的网格系统,用于局部和区域制图。墨尔本位于 UTM 55 区,因此我们可以选择 GDA 2020 / MGA zone 55 EPSG:7855` CRS。

../../_images/725.png

注意

如果您不确定所在区域的本地 CRS,选择基于 WGS84 基准的 UTM 区域 CRS 是一个安全的选择。您可以使用世界 UTM 网格区来查找您所在区域的 UTM 区号。

  1. 接下来,点击重新投影后(Reprojected)旁边的 … 按钮并选择 保存到 GeoPackageGeoPackage 是推荐的开放数据格式空间数据,也是 QGIS3 的默认数据交换格式。单个 GeoPackage .gpkg 文件可以包含多个矢量和栅格图层。

../../_images/825.png

  1. 将 GeoPackage 命名为 spatialquery 并点击保存。

../../_images/925.png

  1. 当提示输入图层名称时,输入 bars_and_pubs 并点击确定。点击运行以重新投影图层。

../../_images/1032.png

  1. 窗口将切换到日志(Log)选项卡,您将看到算法运行并创建新的输出图层 bars_and_pubs

../../_images/1138.png

  1. 现在我们将重新投影 metro_stations_accessbility 图层。切换回重新投影图层窗口中的参数(Paramters)选项卡。选择 metro_stations_accessbility 作为输入图层(Input layer)。保持相同的目标 CRS(Target CRS)。接下来,点击重新投影后(Reprojected)旁边的 … 按钮并选择 保存到 GeoPackage。选择相同的输出文件 spatialquery(请记住,单个 GeoPackage 文件可以包含多个图层,因此我们将把新图层保存到同一个 GeoPackage 文件中)。输入 metro_stations 作为图层名称(Layer name)。点击运行。

../../_images/1233.png

  1. 回到主 QGIS 窗口,您将看到图层面板中加载了 2 个新图层:bars_and_pubsmetro_stations。您可以关闭原始图层的可见性。现在,我们准备好执行空间查询了。由于我们对选择距离地铁站 500 米范围内的酒吧和酒馆感兴趣,第一步是围绕地铁站创建一个代表我们搜索区域的缓冲区。在处理工具箱中搜索并找到矢量几何(Vector geometry) ‣ 缓冲区(Buffer)工具,双击启动它。

../../_images/1331.png

  1. 在缓冲区对话框中,选择 metro_stations 作为输入图层(Input layer)。将距离(Distance)设置为 500 米。将输出保存到同一个 spatialquery GeoPackage,并输入 metro_stations_buffers 作为图层名称(Layer name)。点击运行。

../../_images/1429.png

  1. 您将看到一个新的 metro_stations_buffers 图层加载到图层面板中。现在我们可以找出 bars_and_pubs 图层中哪些点落在 metro_stations_buffers 图层的多边形内。从处理工具箱中找到矢量选择(Vector selection) ‣ 按位置提取(Extract by location)工具并双击启动它。

../../_images/1524.png

注意

按位置提取 将创建一个新图层,包含来自空间查询的匹配要素。如果您只想选择要素,请使用按位置选择 工具。

  1. 在按位置提取对话框中,选择 bars_and_pubs 作为从中提取要素(Extract features from)。勾选相交(Intersect)作为几何谓词(geometry predicate)。设置 metro_stations_buffers 作为通过比较来自(By comparing to the features from)。将输出保存到 spatialquery GeoPackage,图层名为 selected。点击运行。

../../_images/1622.png

  1. 处理完成后,您将看到 selected 图层被添加到图层面板中。请注意,此图层仅包含 bars_and_pubs 中落在缓冲区多边形内的点。

../../_images/1724.png

  1. 我们的分析完成了。您可能会注意到缓冲区多边形看起来是椭圆形的。这是因为我们的项目 CRS 仍然设置为 EPSG:4326 WGS84。为了更好地可视化结果,您可以转到项目(Project) ‣ 属性(Properties) ‣ CRS 并选择我们在分析中使用的 GDA 2020 / MGA zone 55 EPSG:7855。一旦设置为此 CRS,缓冲区将以正确的形状显示。

../../_images/1821.png


如果您想提供反馈或分享您学习本教程的体验,请在下方评论。(需要 GitHub 账户)