ArcGIS Pro实操第三期:多模式道路网构建原理及实操案例
- [1 概述](#1 概述)
-
- [1.1 原理](#1.1 原理)
- [2 GIS实操](#2 GIS实操)
-
- [2.1 新建文件并导入数据](#2.1 新建文件并导入数据)
- [2.2 创建网络数据集](#2.2 创建网络数据集)
- [2.3 设置连接策略(Setting up connectivity policies)](#2.3 设置连接策略(Setting up connectivity policies))
- [2.4 添加成本(Adding cost attributes)](#2.4 添加成本(Adding cost attributes))
- [2.5 添加限制和描述符(Adding restrictions)](#2.5 添加限制和描述符(Adding restrictions))
- [2.6 添加出行模式(Configuring travel modes)](#2.6 添加出行模式(Configuring travel modes))
- [2.7 配置方向(Configuring directions)](#2.7 配置方向(Configuring directions))
- [2.8 创建和构建网络数据集(Creating and building the network dataset)](#2.8 创建和构建网络数据集(Creating and building the network dataset))
- [2.9 基于多式联运网络寻找最快路线(Finding the quickest route based on the multimodal network)](#2.9 基于多式联运网络寻找最快路线(Finding the quickest route based on the multimodal network))
- [报错-ERROR 030024: Solve returned a failure.](#报错-ERROR 030024: Solve returned a failure.)
- 参考
多模式道路网构建(Multi-modal road network construction)是指在一个综合的交通网络中,同时考虑多种交通模式(如步行、骑行、公共交通和驾车等),并将它们集成到一个统一的道路网络模型中。这种方法旨在更好地反映真实世界中的复杂交通需求和行为,以便进行更准确的交通分析和规划。
1 概述
1.1 原理
多模式道路网构建主要涉及以下几个关键步骤:
-
数据收集与预处理:
- 道路数据:获取详细的道路网络数据,包括道路类型、长度、宽度、限速等信息。
- 交通模式数据:获取不同交通模式(如公共交通路线、站点、时刻表、自行车道、人行道等)的数据。
- 地理信息数据:获取地理信息系统(GIS)数据以便进行空间分析和匹配。
-
网络建模:
- 节点与边的定义:在道路网络中定义节点(如交叉口、站点)和边(道路段、轨道段等),并为不同交通模式创建相应的节点和边。
- 模式间转换节点:定义不同交通模式之间的转换节点(如公交站点、自行车租赁点、停车场等),以便用户可以在不同模式之间切换。
-
网络集成:
- 网络合并:将不同交通模式的网络合并到一个综合的网络中,确保各模式之间的节点和边能够正确连接。
- 权重和成本分配:为每条边分配相应的权重或成本(如时间、距离、费用等),并考虑不同模式之间的转换成本。
-
路径规划与分析:
- 多模式路径规划:使用图算法(如Dijkstra算法、A*算法等)进行多模式路径规划,计算从起点到终点的最优路径,可以考虑时间、距离、费用等多种因素。
- 交通模拟与优化:进行交通模拟和优化分析,以评估和改进交通网络的性能。
多模式道路网构建可以帮助城市规划者和交通工程师更好地理解和优化城市交通系统,提高交通效率和便利性。
2 GIS实操
2.1 新建文件并导入数据
1、打开ArcGIS Pro,并新建文件(Start without a template):
新建地图(Create a new map),如下图:
2、链接至已有数据,具体步骤如下:
2.1 在"视图"功能区的"Windows"组中,单击"编目窗格"以打开"编目"。
2.2 在Catalog中,右键单击Folders并选择Add Folder Connection
导航到包含数据的文件夹。强烈建议将所有数据存储在D:\驱动器中,以避免潜在的问题。
在目录中,展开Lab2 → Paris→Transport,界面如下:
或者,直接导入数据(Map→Add Data,将包含道路的数据直接导入至图层中)。
数据导入后,界面如下:
2.3 检查道路属性
在Contents窗格中,右键单击Streets图层,选择Attribute Table。
- FT_Minutes、TF_Minutes、KPH和Meters等字段可用于设置成本属性,以告知网络数据集遍历每条边的成本。这些字段通常是双精度或浮点类型字段。
- FUNC_CLASS字段是一个整数字段,用于为每条道路分配一个类别。此字段将用于在网络数据集上设置层次结构属性。同样,此字段和层次结构将在本教程的后续部分中介绍。
检查完毕后,关闭属性表(Attribute Table)。
2.2 创建网络数据集
在Catalog中,右键单击Transport特征数据集,然后单击New → Network dataset。
打开"新建网络数据集(Create Network Dataset)"向导,如下:
- 网络数据集重命名:ParisMultimodal_ND
- 单击"全选",选择网络中作为源参与的所有特征类。
- 由于此数据集不存在高程数据,因此在elevation Model参数中选择No elevation。
elevation字段在网络数据集中用于细化线端点的连通性。它们包含从参与网络的特征类的字段派生的高程信息。这与基于z-坐标值建立连接不同,在z-坐标值中,物理高程信息存储在特征的每个顶点上。高程场适用于边缘和接点源。使用高程字段的边缘特征源有两个字段来描述高程(一个用于线特征的每个端点)。 - 单击窗格底部的Run。
设定完成后,界面如下:
运行完成后,网络数据集(ParisMultimodal_ND)将会添加至地图(Map)图层中。
右键单击Contents中的ParisMultimodal_ND层,选择Remove,将网络数据集层从地图中移除。
说明: 当网络数据集图层位于地图中时,无法编辑网络数据集属性。您必须从地图中移除该图层才能继续本教程的其余部分。
2.3 设置连接策略(Setting up connectivity policies)
ArcGIS Network Analyst扩展中的连接性从连接性组的定义开始。每个边缘源只分配给一个连接组,每个连接源可以分配给一个或多个连接组。连通性组可以包含任意数量的源。网络元素如何连接取决于元素所在的连接组。例如,从两个不同的源特征类创建的两条边可以连接,如果它们在相同的连接组中。如果它们在单独的连接组中,则除非它们被参与两个连接组的连接点连接,否则这些边不会连接。
操作步骤如下:
1、在目录(Catalog)窗格中,右键单击ParisMultimodal_ND网络数据集并选择 属性(Properties) 以打开网络数据集属性对话框。
2、单击"源设置(Source setting)" → "源(Source )"。
该页面显示当前参与网络数据集的所有源要素类。
单击"源设置(Source setting)" → "(Group Connectivity )",设置网络的连通性模型。
3、为Group Count输入2,将连接组的数量增加到2。在Groups中创建第二个连接组的列。
- 连接性组1代表地铁系统(metro system)
- 连接性组2代表街道网络(Street network)
4、单击Streets行并选中Groups第二列下的复选框,将Streets源移动到连接组2。
5、单击metro_entries行并选中Groups第二列下的复选框,以在组1和组2中包含源特性类。地铁入口是街道和通往地铁站的人行道之间的换乘点。
metro_entrance的每个特征都与街道特征类的一个顶点相一致。但是,streets特性类具有端点连接策略。由于地铁入口需要连接到重合顶点的街道,您必须设置metro_entries来覆盖街道的默认端点连接。
6、将地铁入口的策略从荣誉(Honor)改为覆盖(Override)
7、确认(OK)
2.4 添加成本(Adding cost attributes)
这个网络数据集的一个目标是对步行时间 和驾驶时间 进行建模。当在网络上执行分析时,这允许您在两种时间成本之间进行选择。
例如,你可以选择回答这样一个问题:对于一个可以沿着街道走路和乘坐地铁的行人来说,从a点到B点最快的路线是什么?或者对于开车的人来说,最快的路线是什么?
要做到这一点,必须设置两个时间成本属性:行人时间(PedesstrianTime)和驾驶时间(DriveTime)。
操作步骤如下:
1、在"Catalog"窗格中,右键单击"ParisMultimodal_ND"网络数据集,选择"Properties"打开"network dataset Properties"对话框。
2、单击旅行属性(Travel Attributes)页,然后单击成本(Costs)选项卡。
修改距离成本
3、单击开销(Costs)的"距离(Distance)"部分中的"长度(Length)"属性。
4、在"属性"部分的"名称(Name)"文本框中输入"米(Meters)",然后按enter键。单位应该是米。
在Evaluators部分中,您可以查看和编辑网络中每个源的评估器类型及其值。你可以看到结点和转弯源总是有一个相关的评估器,但是边缘源有两个:每个方向一个(沿和逆)。
5、在Evaluators部分,在Edges组中,对于Metro_Lines(Along)行 ,类型应该是字段脚本,并双击Metro_Lines(Along)的Value列,使字段脚本设置按钮可用。
然后单击字段脚本设置按钮
有许多类型的评估器,可以在成本、限制和描述符中使用。字段脚本求值器是最常用的,因为它们使用基于字段的单个字段或简单表达式来确定遍历边缘的成本。
6、在"结果"框中输入[METERS],单击"确定"。
7、对Streets (Along)行 重复步骤5和6。
8、在Evaluators部分,在Edges组中,对于Transfer_Stations(Along)行,类型应该是字段脚本,双击Transfer_Stations(Along)的Value列,使字段脚本设置按钮可用,然后单击字段脚本设置按钮
9、在"结果"框中输入[SHAPE_LENGTH],单击"确定"
10、对Transfer_Street_Station(Along)行重复步骤8和9。
增加时间成本-DriveTime
接下来,继续增加时间成本(Add time costs)。
11、单击"菜单(Menu)"按钮并选择"新建(New)"
12、输入DriveTime作为新开销的名称。将单位改为分钟。将数据类型设置为Double,如下:
13、在Evaluators部分的Edges组中,对于Streets (Along)行,将Type从Same as Default更改为Field Script
14、双击"沿街Streets (Along)"的"值(Value)"列,使"字段脚本设置(Field Script Settings)"按钮可用,然后单击"字段脚本设置"按钮。
注意: 您可能有一个字段表示沿某条边沿任何方向移动的成本,该成本是通过将线的长度除以速度限制来计算的,该字段适用于顺方向和反方向 。如果相同的字段可以用于两个方向的移动,则可以对Streets (Along)行使用字段脚本评估器。然后,不是为Streets (Against)方向设置字段脚本评估器,而是将评估器类型更改为Same As Along。
对于这个数据,有不同的字段来表示顺方向和反方向,因此您将设置两个方向
15、在"结果"框中输入[FT_MINUTES],单击"确定"。
16、重复步骤13和14的街道(对)(Streets (Against))行。
17、在"结果"框中输入[TF_MINUTES],单击"确定"。
18、对于Metro_Lines(Along)行,将Type从Same as Default更改为Constant。
19、在"Value"框中输入"-1",按"enter"。
Network Analyst将成本值为-1的任何元素视为受限元素。因此,无论何时在网络分析中使用DriveTime属性作为阻抗,这些源都是不可遍历的。
20、对Transfer_Stations(Along)行重复步骤18和19。
21、对Transfer_Street_Station(Along)行重复步骤18和19。
22、在Evaluators部分的junction组中,对Metro_Stations行重复步骤18和19
增加时间成本-PedestrianTime
23、重复步骤11和12,创建一个名为 行人时间(PedestrianTime) 的新时间成本。
行人时间网络属性表示行人在网络上行走所需的时间。在接下来的步骤中,您将为可以乘坐地铁系统或沿着街道行走的行人分配适当的旅行时间。
24、在Evaluators部分,在Edges组中,对于Metro_Lines(Along)行,将Type从Same as Default更改为Field Script。
25、双击Metro_Lines的Value列,使字段脚本设置按钮可用,然后单击字段脚本设置按钮
26、在"结果"框中输入[TRANSITTIM]并单击"确定"。
27、对Transfer_Stations(Along)行重复步骤24-26。
28、对Transfer_Street_Station(Along)行重复步骤24-26
29、重复步骤24和25的街道(沿)行(Streets(Along) )。
对于Streets源,行人时间的值是步行时间。假设行人以3公里/小时的速度行走,则步行时间(分钟)为[米]* 60 / 3000,其中[米]是包含以米为单位的边缘长度的属性
30、在"结果"框中输入[METERS] * 60 / 3000,单击"确定"。
这个网络没有任何turn特性类,所以我们不改变Evaluators部分的turn组中的元素。
增加距离成本-DriveMeters
接下来,为开车的人增加新的距离成本。
31、单击"菜单(Menu)"按钮并选择"新建(New)"
32、为新开销的名称键入driveremeters。将单位改为米。将数据类型设置为Double。
33、在Evaluators部分的Edges组中,对于Streets (Along)行,将Type从Same as Default更改为Field Script。
34、双击"沿街"的"值"列,使"字段脚本设置"按钮可用,然后单击"字段脚本设置"按钮。
35、在"结果"框中输入[METERS],单击"确定"。
36、对于Metro_Lines(Along)行,将Type从Same as Default更改为Constant。
37、在"Value"框中输入"-1",按"enter"。
说明: Network Analyst将成本值为-1的任何元素视为受限元素。因此,无论何时在网络分析中使用DriveMeters属性作为阻抗,这些源都是不可遍历的
38、对Transfer_Stations(Along)行重复步骤36和37。
39、对Transfer_Street_Station(Along)行重复步骤36和37。
40、在Evaluators部分的junction组中,对Metro_Stations行重复步骤36和37。
2.5 添加限制和描述符(Adding restrictions)
Oneway属性与DriveTime属性是松散关联的,因为它模拟了驾驶员需要遵循的单向交通限制。稍后,当您使用DriveTime作为代价执行分析时,您应该启用单向限制,以便生成的路由遵循单行道。另外,在建模行人的运动时,不应该使用单向限制,因为行人可以自由地朝他们选择的方向行走。
操作步骤如下:
1、在"Catalog"窗格中,右键单击"ParisMultimodal_ND"网络数据集,选择"Properties"打开"network dataset Properties"对话框。
2、单击旅行属性(Travel attributions)页,然后单击限制(Restrictions)选项卡。
3、单击Restrictions选项卡右上角的Menu按钮,然后选择New
4、输入Oneway作为新限制的名称
5、将"使用类型( Usage Type)"保留为"禁止(Prohibited)"
6、在Evaluators部分的Edges组中,对于Streets (Along)行,将Type从Same As Default更改为Field Script。
7、在"结果"框中输入受限制的类型,在"代码块"框中输入以下表达式:
bash
restricted = False
Select Case UCase([Oneway])
Case "N", "T": restricted = True
End Select
8、单击评估器设置对话框中的OK以接受更改。
9、对于Streets (Against),将评估器类型更改为Field Script。
10、现在打开街道(反对)(Streets (Against))行的评估器设置对话框:
11、在"结果"框中输入受限制的类型,在"代码块"框中输入以下表达式:
bash
restricted = False
Select Case UCase([Oneway])
Case "N", "F": restricted = True
End Select
12、单击评估器设置对话框中的OK以接受更改。
与地铁系统相关的源不需要单向限制。
13、单击"网络数据集属性"对话框中的"确定",提交所做的更改并关闭对话框。
2.6 添加出行模式(Configuring travel modes)
传输模式由一组网络数据集设置组成,这些设置定义了网络上允许的操作以及如何执行这些操作。通过在网络数据集上配置一种或多种传输模式,可以简化以后的工作流程。在分析时,您可以选择想要使用的模式,而不是设置许多不同的属性。如果您对特定的旅行模式或车辆执行了许多分析,那么设置一个旅行模式可能是值得的。
操作步骤如下:
1、在"Catalog"窗格中,右键单击"ParisMultimodal_ND"网络数据集,选择"Properties"打开"network dataset Properties"对话框。
2、单击"旅行属性(Travel attributions)"页,然后单击"旅行模式(Travel Mode)"选项卡。
3、单击Travel Mode选项卡右上角的Menu按钮,然后选择New
添加出行模式-Drive
4、命名旅行模式驾驶时间(DriveTime)
5、将类型保留为Driving
6、在成本(Costs)部分,确保阻抗设置为驱动时间(分钟),距离成本可以是驱动里程(米)或米(米)。
7、在"限制(Restriction)"部分中,选中单向限制的复选框。
8、确保u型转弯设置为允许。
9、增加一个新的旅行模式(Travel Mode)叫驾驶距离(DrivingDistance)。
10、将阻抗更改为驱动仪表(仪表),将时间成本更改为驱动时间,并勾选单向限制框。
11、确保u型转弯设置为允许。
添加出行模式-Pedestrians
接下来,可以设置另一种旅行模式来模拟行人。
12、单击Travel Mode选项卡右上角的Menu按钮,然后选择New
13、命名出行模式为行人时间(Pedestrian Time)
14、选择类型为步行(Walking)。
15、在成本部分,确保阻抗设置为行人时间(分钟),距离成本应设置为米(米)。
16、在"限制"部分,取消选中单向限制的复选框。
行人可以去该网络上禁止车辆通行的地方,也可以在单行道上双向行走。
17、确保u型转弯设置为允许。
18、增加一个新的旅行模式(Travel Mode)叫做步行距离(Pedestrian Distance)。
19、选择类型为步行。
20、将阻抗改为米(米),时间成本改为行人时间(分钟)。
21、取消选中单向限制的复选框。
22、确保u型转弯设置为允许。
23、单击"网络数据集属性"对话框中的"确定",提交所做的更改并关闭对话框
2.7 配置方向(Configuring directions)
当在您的网络数据集上计算路线时,您可以生成伴随结果的驾驶方向。网络数据集需要至少有一个带有文本属性(用于街道名称信息)和距离属性的边缘源,以显示在需要下一次相关操作之前它将有多远。
操作步骤如下:
1、在"Catalog"窗格中,右键单击"ParisMultimodal_ND"网络数据集,选择"Properties"打开"network dataset Properties"对话框。
2、单击"方向(Directions)"页,然后单击"常规(General)"选项卡。
3、选中"支持说明(Support Directions)"旁边的复选框。
"方向"页和"字段映射"选项卡将被标记为具有无效状态(红色虚线下划线)。现在不用担心这个。当您到达Field Mappings选项卡时,您将纠正这些问题。
4、单击"字段映射(Field Mappings)"选项卡。
可以为网络中的每个边缘源设置地铁线和街道名称字段。这些名字是用来报告方向的。
5、在Metro_Lines(Edge)部分,将Base Name从更改为Name。
6、在Streets (Edge)部分,将Base Name从更改为FULL_NAME。
7、单击"网络数据集属性"对话框中的"确定",提交所做的更改并关闭对话框。
2.8 创建和构建网络数据集(Creating and building the network dataset)
设置好网络数据集的功能后,需要创建和构建它。
操作步骤如下:
1、在Analysis功能区的Geoprocessing组中,单击Tools以打开Geoprocessing窗格。
2、单击Geoprocessing窗格中的搜索栏并键入Build Network。
3、单击第一个结果以打开Build Network工具。
4、对于Input Network Dataset参数,单击Browse按钮并浏览到ParisMultimodal_ND网络数据集,然后单击OK。
5、单击底部的Run按钮。
运行完成后,结果如下:
2.9 基于多式联运网络寻找最快路线(Finding the quickest route based on the multimodal network)
在构建多模式网络后,您可以使用不同的交通方式(例如步行,开车,在本实验中乘坐地铁)找到任意点之间最快的路线。
操作步骤如下:
1、将已构建的多式联运网络(Paris.gdb\Transportation\ParisMultimodal_ND)拖到Contents中。
2、在Analysistab的"工作流(Workflows)"组中,单击"网络分析(Network analysis)→路线(Route)"
注意: 要查看或更改将用于创建网络分析层的网络数据源,在"分析"选项卡上,在"工作流"组中,您可以单击"网络分析"下拉菜单并查看"网络数据源"。
完成后,目录(Contents)中出现以下内容:
3、单击"网络分析(Network analysis)→路线(Route)→ "创建功能(Create Features)"按钮
4、在"路线(Route):站点(Stop)"下,单击"站点(Stop)"。
5、使用点工具在地图上网络数据集覆盖的区域创建几个站点。
6、在"路线(Route)"选项卡的"旅行设置(Travel Setting)"组中,选择"驾驶时间(Driving Time)"为"模型",选择"顺序(Sequence)"为"最佳查找(Find Best)"
7、在"路线(Route)"页中,单击"运行(Run)"
8、在"路线(Route)"选项卡的"方向(Directions)"组中,单击"显示方向(Show Directions)"
报错-ERROR 030024: Solve returned a failure.
报错内容:The network dataset has no edge elements. It may be unbuilt. Failed to execute (Solve).
解决方案:"The network dataset has no edge elements. It may be unbuilt."
错误原因:
- The feature class that acts as a feature source for the edge element has a geometry problem. For a list of geometry problems, see the following document: Check Geometry用于边缘元素的特征类存在几何问题。有关几何问题的详细列表,请参阅以下文档:检查几何体。
- The network dataset is not rebuilt after it is edited.编辑网络数据集后未重新生成。
参考
1、ArcGIS Pro-创建网络数据集
2、ESRI-解决报错-错误:网络数据集没有边元素。 可能未构建