基本网络可视化和路由(QGIS3)

创建,可视化和管理网络是GIS的重要组成部分。将许多类型的物理基础结构(例如道路,铁路,公用事业)建模为具有线和节点的网络-并附加属性。在本教程中,我们将学习如何对道路网络进行通用建模,并应用一些样式化技术来可视化路线属性。我们还将使用QGIS3的内置工具进行网络分析,以找到沿网络两点之间的最短路径。

任务概述

我们将为华盛顿特区设置一条道路中心线,可视化连接性并建立网络以查找城市中任何两个点之间的最短路径。

您将会学习的其他技能

  • 如何使用定义的数据替代来基于线方向对齐箭头符号。

获取数据

哥伦比亚特区政府在 Open Data Catalog 上自由共享数百个数据集。

下载由DCGISopendata数据共享的 Street Centerlines 作为shapefile。

../../_images/data1.png

为了方便起见,您可以直接从下面的链接下载数据集的副本:

Street_Centerlines.zip

资料来源:[DCOPENDATA]

程序

  1. Browser 面板中找到下载的 Street_Centerlines.zip 文件。展开并将 Street_Centerlines.shp 文件拖到画布上。

../../_images/112.png
  1. 您会看到一个新的线层,称为 Street_Centerlines ,添加到了 Layers 面板中。该层代表华盛顿特区的每条道路。在 Attributes Toolbar 中选择 Identify 工具。单击任意路段以查看附加了哪些属性。有一些标准属性,例如道路名称,类型等。还有一个名为 DIRECTIONA 的属性。这是路由的导入属性,因为它指定段是双向还是单向。它包含4个不同的值。双向街道的 Two Way 。单向街道的 单向(数字化方向) ,直线方向(起点至终点)允许通行的单向街道,单向街道的 单向(反对数字化方向) 交通沿直线相反方向流动的街道。还有一个 Unknown 值,我们将在此假设双向流量。现在,我们将使用该属性中的信息在单向街道上显示箭头。

../../_images/210.png
  1. 单击 Layers 面板中的 Open the layer Styling Panel 按钮。从下拉菜单中选择 Rule-based 渲染器。

../../_images/310.png
  1. 我们将为单向道路创建带有过滤器的新样式。点击添加规则+按钮。

../../_images/43.png
  1. Edit rule 对话框中,单击 Expression 按钮。

../../_images/53.png
  1. Expression string builder 对话框中,展开中间面板中的 Fields and Values 部分。选择 DIRECTIONA 属性,然后在右侧面板中单击 All Unique 。将会出现我们前面讨论的4个值。在构建表达式时,将这些值用作参考会很有帮助。另外,您可以双击任何值以将它们添加到表达式中。

../../_images/63.png
  1. 目标是创建一个选择所有单向街道的表达式。 输入以下表达式,然后单击确定。

"DIRECTIONA" = 'One way (Against digitizing direction)' OR  "DIRECTIONA" ='One Way (Digitizing direction)'
../../_images/73.png
  1. 接下来,将 Symbol layer type 符号层更改为 Marker line

../../_images/83.png
  1. Marker placement 下选择 on center point

../../_images/93.png
  1. 单击 Simple marker 符号。向下滚动并选择 filled_arrowhead 标记。您将看到单向街道上现在出现了箭头状的符号。但是所有这些都指向一个方向,而我们知道我们的过滤器包含多个方向的道路。我们可以使用数据定义的 Rotation 值替代值进一步细化符号。

../../_images/103.png
  1. 点击 Rotation 旁边的 Data defined override 按钮。

../../_images/113.png
  1. 我们可以放置一个条件表达式,该条件表达式根据单向方向返回不同的旋转值。简单的0或180度旋转即可说明方向,但仅适用于水平线。为了使箭头垂直于所有直线对齐-我们还需要在表达式中考虑直线的角度。 angle_at_vertex 函数可以帮助我们找到角度并在表达式中使用它。输入以下表达式,然后单击确定。

CASE
  WHEN "DIRECTIONA" =  'One Way (Digitizing direction)'
    THEN angle_at_vertex($geometry, 1) - 90
  WHEN "DIRECTIONA" =  'One way (Against digitizing direction)'
    THEN angle_at_vertex($geometry, 1) - 90 + 180
END
../../_images/123.png
  1. 现在,您将看到箭头与正确的道路方向和角度对齐。为了使样式整洁,我们选择仅在单向街道上显示箭头。假定未标记的街道为双向。现在我们已经正确设置了网络样式,我们可以进行一些分析。进入 Processing ‣ Toolbox

../../_images/133.png
  1. 搜索并找到 Network analysis ‣ Shortest path (point to point) 算法。双击以启动它。

../../_images/143.png
  1. Shortest Path (Point to Point) 对话框中,选择 Street_Centerlines 作为 Vector layer representing network 。保持 Path type to calculateShortest 。接下来,我们需要选择一个起点和终点。您可以单击 按钮,然后单击画布中网络上的任何点。如果要在本教程中复制结果,则可以输入-76.99730092166396,38.887624846748984作为 Start point ,并输入-76.991548310622152,38.89151000569929作为 End point 。展开 Advanced parameter 部分。选择 DIRECTIONA 作为 Direction field 。您必须熟悉前进和后退交通流的单向方向值。输入 One Way (Digitizing direction) 作为 Value for forward direction ,并输入 One way (Against digitizing direction) 作为 Value for backward direction 。将其他选项保留为其默认值,然后单击 Run

../../_images/153.png
  1. 该算法将使用图层的几何形状并提供参数来构建网络图。然后使用该图查找起点和终点之间的最短路径。算法完成后,您将看到一个新层 Shortest path 添加到 Layers 面板中,该图层显示了起点和终点之间的最短路径。

../../_images/163.png
  1. 您将看到起点和终点之间有许多可能的路径。但是考虑到网络的限制(例如单向),结果是最短的路径。验证您的分析和假设始终是一个好主意。一种简单的验证方法是使用第三方映射服务,以查看其结果是否与我们得出的结果匹配。这是相同起点和终点之间 suggested by Google Maps 最短路径。如您所见,建议的最短路径与我们的结果完全匹配-验证了我们的分析。

../../_images/173.png