QGIS 3.10 路径分析

2022-09-23 10:48:10 浏览数 (3)

大家好,又见面了,我是你们的朋友全栈君。

网络数据集(networks )的创建、管理和可视化是GIS的重要组成部分。公路、铁路、管线等公用基础设施都可以建模为由线和节点组成的带有属性信息的网络数据。本教程将学习如何对路网进行建模,如何运用样式对路网属性可视化,同时通过QGIS 3.10内置的路径分析工具找出两点之间的最短路径。

任务概述

通过华盛顿地区道路中心线图层,建立路网并查找城市中任意两点之间的最短路径。

将会学到的其他技巧

使用数据定义覆盖(data defined overrides ),根据线的方向对齐箭头符号。

获取示范数据

本教程使用华盛顿地区街道中心线数据,下载地址:

http://www.qgistutorials.com/downloads/Street_Centerlines.zip

将QGIS界面设置为中文

制作地图之前,请将您的QGIS软件界面设置为简体中文(如果您已经设置过了,可以忽略本节后续内容)。操作方式为:通过菜单【Settings】->【Options…】打开对话框,选择其中的【General】标签,找到“Override system locale”前面的复选框并打勾,在“User Interface Transaction”下拉框中找到并选择“简体中文”,单击【OK】,退出QGIS。重新启动QGIS后即可看到简体中文界面。

详细操作步骤

  1. 下载并解压缩Street_Centerlines.zip ,在QGIS的【浏览】面板中找到“Street_Centerlines.shp”文件,拖拽到地图画布中。
  1. 【图层】面板中添加了华盛顿地区街道线图层“Street_Centerlines”。点击【属性】工具栏中的【识别要素】按钮,然后点击地图上任意要素,在【识别结果】面板中查看要素属性字段。可以看到,“Street_Centerlines”图层包含了道路基础属性信息,如道路名称、道路类型等。其中,字段“DIRECTIONA”存储的是道路方向信息,该字段包含4种取值:“Two Way”代表双向道路;“One Way (Digitizing direction)”表示沿着线要素方向的单向道路,即方向从线要素的起点到终点;“One way (Against digitizing direction)”表示单向街道,方向与线要素数字化的方向相反,即方向为线要素的终点到起点;对于存在部分“Unknown”取值的要素,表示方向不确定,本教程将其假设为双向道路。在路径分析中,“DIRECTIONA”字段有着重要作用。接下来通过该字段筛选出图层中的单向街道,并设置适当的箭头样式,以显示该街道的交通方向。
  1. 点击【图层】面板上方的【打开图层样式面板】按钮,【图层样式】面板显示在地图窗口右侧,从下拉列表框中选择【基于规则】渲染器。
  1. 点击【 】按钮,为单向道路设置过滤条件,并为其创建新样式。
  1. 在【编辑规则】面板中,点击【Ɛ】按钮,打开【表达式字符串构建器】对话框。
  1. 在【表达式字符串构建器】对话框中,展开中间面板内的【字段和值】节点,选中“DIRECTIONA ”字段,点击右侧面板的【全部唯一】按钮,下方的文本框列出了该字段4种可能取值,可为构建表达式提供取值参考,也可以通过双击将取值将其添加到表达式中。
  1. 在【表达式】文本框中输入下面表达式,以选中图层中所有单向街道。点击【OK】按钮。
代码语言:javascript复制
"DIRECTIONA" = 'One way (Against digitizing direction)' OR "DIRECTIONA" ='One Way (Digitizing direction)'
  1. 点击【符号图层类型】下拉框,选择“标记线”。
  1. 【标记位置】选择【在中心点】。
  1. 点击符号中的【简单标记】,从下方的符号类型框中选择“filled_arrowhead”符号,这是一个类似箭头的符号,用于表达单向街道的方向。此时,地图窗口中所有符号都朝着同一个方向,与实际情况不符,现实中街道的交通流向各不相同,这就需要通过数据定义覆盖(data-defined override )得到符号旋转角度取值,使符号方向与交通流向保持一致。
  1. 点击【旋转角度】右侧的【由数据定义覆盖】按钮,从下拉菜单中点击【编辑】。
  1. 在【表达式字符串构建器】对话框中,构建条件表达式,根据单向街道方向的不同,获取不同的旋转角度。最简单的方法是根据方向进行0度或者180度旋转,但该方法只适用于水平方向的线要素。为了让箭头方向与所有道路线方向对齐,需要在表达式中计算出道路线的角度,所以需要使用“angle_at_vertex”函数以得到要素角度值。在表达式文本框中输入下面的表达式,点击【OK】按钮。
代码语言:javascript复制
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
  1. 地图窗口中可以看到,根据道路的方向和角度,箭头随之进行了适当的旋转以达到正确对齐。为了保持整洁,地图中仅显示了单向道路的方向箭头,没有标明方向的道路(即DIRECTION取值为“UNKNOWN”)默认为双向道路,此时并没有添加箭头来显示方向。点击菜单【处理】->【工具箱】,调出【处理工具箱】面板,开始进行路径分析。
  1. 在【处理工具箱】面板中依次找到【网络分析】->【最短路径(点到点)】,双击运行。
  1. 在弹出的【最短路径(点到点)】对话框中,【描绘网络的矢量图层】下拉框选择“Street_Centerlines”,【要计算的路径类型】保持默认值“最短”。点击【起点】右侧的【…】按钮,在地图中点击路网图层任意点作为路径分析的起点,同样步骤设置路径分析的终点。如果想使用与本教程相同的起点/终点参数,可以在【起点】文本框填入“-76.99730092166396,38.887624846748984”,【终点】文本框填入“-76.99154831062152,38.89151000569929”。展开【高级参数】面板,【方向字段】下拉框选择“DIRECTIONA”字段。根据前面步骤中对“DIRECTIONA”字段取值的解释,“One Way (Digitizing direction)”表示单向道路为线要素的正方向,因此,在【正向值】文本框中填入“One Way (Digitizing direction)”;“One way (Against digitizing direction)”表示单向道路为线要素的反方向,因此,在【反向值】文本框中填入“One way (Against digitizing direction)”。其他选项保持默认值,点击【运行】按钮。
  1. 最短路径算法使用图层中的路网要素和上述步骤提供的参数构建路网图,使用路网图可查找起点到终点之间的最短路径。算法运行结束后,【图层】面板中添加了结果图层“最短路径”,该图层是线图层,包含起点与终点之间的最短路径。
  1. 实际生活中,起点与终点之间可能存在多个可达路径,但是,考虑到路网的约束条件,比如单向,路径分析的结果是最短可能路径。验证分析结果是否正确是一个好习惯,最简单的验证方式是使用第三方地图服务,以相同的起点和终点作为参数计算最短路径,看看第三方地图服务计算得到的最短路径是否与前面的计算结果相吻合。本教程使用谷歌地图验证,从下图可以看到,谷歌地图所推荐的最短路径与上述步骤的计算结果完全相同。

本教程到此结束。

吴建玲

2020年6月29日


版权声明

本文欢迎转载,转载时请注明出处。

本文主要翻译并改编自qgistutorials网站,原文链接为https://www.qgistutorials.com/en/docs/3/basic_network_analysis.html,原文已根据《知识共享署名4.0国际许可协议(Creative Commons Attribution 4.0 International License)》获得许可,在此向原文作者乌加尔·甘地(Ujaval Gandhi)致以敬意,感谢他为分享QGIS技术做出的贡献。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/172667.html原文链接:https://javaforall.cn

1 人点赞