public class TransportationAnalyst3D
extends com.supermap.data.InternalHandleDisposable
道路、铁路、建筑物内通道、矿井巷道等可以使用交通网络进行模拟,与设施网络不同,交通网络是没有方向,即流通介质(行人或传输的资源)可以自行决定方向、速度和目的地。当然,也可以进行一定的限制,例如设置交通规则,如单行线、禁行线等。
三维交通网络分析是基于三维网络数据集的分析,是三维网络分析的重要内容,目前提供了最佳路径分析。对于交通网络,尤其是对建筑物的内部通道、矿井巷道这类在二维平面无法清晰展现的交通网络,三维网络能够更加真实的体现网络的空间拓扑结构和分析结果。
三维交通网络分析的一般步骤:
NetworkBuilder3D
类;setAnalystSetting
方法);NetworkBuilder3D.check(NetworkCheckParameter3D, SteppedListener...)
check} 方法); load
方法);findPath
方法的示例。构造器和说明 |
---|
TransportationAnalyst3D()
构造一个新的 TransportationAnalyst3D 对象。
|
限定符和类型 | 方法和说明 |
---|---|
TransportationAnalystCheckResult3D |
check()
已过时。
由于check不需要load,改为静态方法迁移到NetworkBuilder3D中,不再局限于交通网络分析,设施网络也可使用。
|
void |
dispose()
释放该对象所占用的资源。
|
TransportationAnalystResult3D |
findPath(TransportationAnalystParameter3D parameter)
最佳路径分析。
|
TransportationAnalystSetting3D |
getAnalystSetting()
返回三维交通网络分析环境设置。
|
boolean |
load()
根据三维交通网络分析环境设置,加载网络模型。
|
void |
setAnalystSetting(TransportationAnalystSetting3D value)
设置三维交通网络分析环境设置。
|
public void dispose()
public boolean load()
该方法根据三维交通网络分析环境设置(TransportationAnalystSetting3D
)对象中的环境参数,加载网络模型。只有调用该方法,所做的交通网络分析环境设置才会在交通网络分析的过程中生效。该方法需要在设置 setAnalystSetting
方法之后调用。
注意:
load
方法来加载网络模型,然后再进行分析,并且在重新调用前,必须先调用 dispose
方法释放 TransportationAnalyst3D
对象所占用的资源,否则可能出错。dispose
方法释放资源,否则加载可能失败。findPath
方法的示例。public TransportationAnalystSetting3D getAnalystSetting()
public void setAnalystSetting(TransportationAnalystSetting3D value)
value
- 三维交通网络分析环境设置。findPath
方法的示例。public TransportationAnalystResult3D findPath(TransportationAnalystParameter3D parameter)
最佳路径分析,用于在网络数据集中,找出经过给定的 N 个点(N 大于等于 2)的最佳路径,这条最佳路径具有以下两个特征:
有两种方式来指定待分析的经过点:
setNodes
方法指定最佳路径分析所经过的结点的 ID,此时,分析过程中经过的点就是相应的网络结点,而经过点的次序是网络结点在这个结点 ID 数组中的次序;setPoints
方法指定最佳路径分析所经过的点的坐标,此时,分析过程中经过的点就是相应的坐标点集合,分析过程中经过点的次序是坐标点在点集合中的次序。注意:两种方式只能选择一种使用,不能同时使用。
parameter
- 指定的三维交通网络分析环境设置。假设在数据源中存在一个三维网络数据集 networkDataset,数据集中存在一个名为“TrafficRule”的交通规则字段,以弧段长度作为权重,分析经过结点 69, 106, 43 的最佳路径,并输出该最佳路径依次经过的结点和弧段的 ID。
private void findPathExample(DatasetVector networkDataset) { //构造三维交通网络分析环境设置对象,并设置相关参数 TransportationAnalystSetting3D transportationAnalystSetting = new TransportationAnalystSetting3D(); transportationAnalystSetting.setNetworkDataset(networkDataset); transportationAnalystSetting.setNodeIDField("SMNODEID"); transportationAnalystSetting.setEdgeIDField("SMEDGEID"); transportationAnalystSetting.setFNodeIDField("SMFNODE"); transportationAnalystSetting.setTNodeIDField("SMTNODE"); transportationAnalystSetting.setTolerance(20); //设置权重信息 WeightFieldInfo3D weightFieldInfo = new WeightFieldInfo3D(); weightFieldInfo.setName("Length"); weightFieldInfo.setFTWeightField("SMLENGTH"); weightFieldInfo.setTFWeightField("SMLENGTH"); WeightFieldInfos3D weightFieldInfos = new WeightFieldInfos3D(); weightFieldInfos.add(weightFieldInfo); transportationAnalystSetting.setWeightFieldInfos(weightFieldInfos); //设置障碍点和障碍边 transportationAnalystSetting.setBarrierNodes(new int[] { 17, 104 }); transportationAnalystSetting.setBarrierEdges(new int[] { 80, 310, 309 }); //设置交通规则 transportationAnalystSetting.setRuleField("TrafficRule"); transportationAnalystSetting.setFTSingleWayRuleValues(new String[] { "FT" }); transportationAnalystSetting.setTFSingleWayRuleValues(new String[] { "TF" }); transportationAnalystSetting.setTwoWayRuleValues(new String[] { "Two" }); transportationAnalystSetting.setProhibitedWayRuleValues(new String[] { "Prohibite" }); //构造一个三维交通网络分析对象,并设置分析环境 TransportationAnalyst3D transportationAnalyst = new TransportationAnalyst3D(); transportationAnalyst.setAnalystSetting(transportationAnalystSetting); //加载网络模型 Boolean isLoad = transportationAnalyst.load(); if (isLoad) { //构造三维交通网络分析参数对象,并设置相关参数 TransportationAnalystParameter3D parameter = new TransportationAnalystParameter3D(); parameter.setNodes(new int[] { 69, 106, 43 }); parameter.setWeightName("Length"); parameter.setNodesReturn(true); parameter.setEdgesReturn(true); parameter.setRoutesReturn(true); parameter.setStopIndexesReturn(true); //进行最佳路径分析 TransportationAnalystResult3D result = transportationAnalyst.findPath(parameter); //输出最佳路径经过的结点 int[][] nodes = result.getNodes(); System.out.println("最佳路径经过的结点依次为:"); for (int i = 0; i < nodes[0].length; i++) { System.out.print(nodes[0][i] + " "); } System.out.println(); //输出最佳路径经过的弧段 int[][] edges = result.getEdges(); System.out.println("最佳路径经过的弧段依次为:"); for (int i = 0; i < edges[0].length; i++) { System.out.print(edges[0][i] + " "); } System.out.println(); } //分析完毕,释放三维交通网络分析对象所占的资源 transportationAnalyst.dispose(); }
@Deprecated public TransportationAnalystCheckResult3D check()
该方法用于对三维交通网络数据集进行检查,给出错误信息,便于用户针对错误信息对数据进行修改,以避免由于数据错误导致交通网络分析错误。
注意,该方法需要在设置三维交通网络分析环境(setAnalystSetting
方法)之后调用,但不需要加载网络模型(load
方法)。
该方法返回一个三维交通网络分析数据检查结果(TransportationAnalystCheckResult3D)对象,通过该对象的 getArcErrorInfos
方法和 getNodeErrorInfos
方法可以获取弧段错误信息和结点错误信息。错误信息存储在字典中,键代表错误弧段或结点的 SMID,值代表错误类型。错误类型以数字表示,代表的具体错误含义如下表所示。
Copyright © 2021–2024 SuperMap. All rights reserved.