com.supermap.realspace.networkanalyst
类 TransportationAnalyst3D

java.lang.Object
  继承者 com.supermap.realspace.networkanalyst.TransportationAnalyst3D

public class TransportationAnalyst3D
extends java.lang.Object

三维交通网络分析类。该类用于提供基于三维网络数据集的交通网络分析功能。目前只提供最佳路径分析。

道路、铁路、建筑物内通道、矿井巷道等可以使用交通网络进行模拟,与设施网络不同,交通网络是没有方向,即流通介质(行人或传输的资源)可以自行决定方向、速度和目的地。当然,也可以进行一定的限制,例如设置交通规则,如单行线、禁行线等。

三维交通网络分析是基于三维网络数据集的分析,是三维网络分析的重要内容,目前提供了最佳路径分析。对于交通网络,尤其是对建筑物的内部通道、矿井巷道这类在二维平面无法清晰展现的交通网络,三维网络能够更加真实的体现网络的空间拓扑结构和分析结果。

三维交通网络分析的一般步骤:

  1. 构建三维网络数据集。根据研究需求和已有数据选择合适的网络模型构建方法。SuperMap 提供了三种三维网络数据集的构建方法,具体介绍请参阅 NetworkBuilder3D 类;
  2. 设置三维交通网络分析环境(setAnalystSetting 方法);
  3. (可选)建议对用于分析的网络数据集进行数据检查(check 方法);
  4. 加载网络模型(load 方法);
  5. 使用 TransportationAnalyst3D 类提供的各种交通网络分析方法进行相应的分析。

示例:
请参见 findPath 方法的示例。

构造方法摘要
TransportationAnalyst3D()
          构造一个新的 TransportationAnalyst3D 对象。
 
方法摘要
 TransportationAnalystCheckResult3D check()
          已过时。 由于check不需要load,改为静态方法迁移到NetworkBuilder3D中,不再局限于交通网络分析,设施网络也可使用。
 void dispose()
          释放该对象所占用的资源。
 TransportationAnalystResult3D findPath(TransportationAnalystParameter3D parameter)
          最佳路径分析。
 TransportationAnalystSetting3D getAnalystSetting()
          返回三维交通网络分析环境设置。
 boolean load()
          根据三维交通网络分析环境设置,加载网络模型。
 void setAnalystSetting(TransportationAnalystSetting3D value)
          设置三维交通网络分析环境设置。
 
从类 java.lang.Object 继承的方法
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

TransportationAnalyst3D

public TransportationAnalyst3D()
构造一个新的 TransportationAnalyst3D 对象。

方法详细信息

getAnalystSetting

public TransportationAnalystSetting3D getAnalystSetting()
返回三维交通网络分析环境设置。

返回:
三维交通网络分析环境设置。
默认值:
默认值为一个初始化的 TransportationAnalystSetting3D 对象。

setAnalystSetting

public void setAnalystSetting(TransportationAnalystSetting3D value)
设置三维交通网络分析环境设置。

参数:
value - 三维交通网络分析环境设置。
示例:
请参见 findPath 方法的示例。

load

public boolean load()
根据三维交通网络分析环境设置,加载网络模型。

该方法根据三维交通网络分析环境设置(TransportationAnalystSetting3D)对象中的环境参数,加载网络模型。只有调用该方法,所做的交通网络分析环境设置才会在交通网络分析的过程中生效。该方法需要在设置 setAnalystSetting 方法之后调用。

注意:

  1. 出现以下两种情况都必须重新调用 load 方法来加载网络模型,然后再进行分析,并且在重新调用前,必须先调用 dispose 方法释放 TransportationAnalyst3D 对象所占用的资源,否则可能出错。
    • 对三维交通网络分析环境设置对象的参数进行了修改,需要重新调用该方法,否则所作修改不会生效从而导致分析结果错误;
    • 对所使用的网络数据集进行了任何修改,包括修改网络数据集中的数据、替换数据集等,都需要重新加载网络模型,否则分析可能出错。
  2. 已经调用 load 方法加载了网络模型,再次调用 load 方法之前,必须先调用 dispose 方法释放资源,否则加载可能失败。

返回:
一个布尔值,代表是否加载网络模型成功。如果成功返回 true,否则返回 false。
示例:
请参见 findPath 方法的示例。

check

public TransportationAnalystCheckResult3D check()
已过时。 由于check不需要load,改为静态方法迁移到NetworkBuilder3D中,不再局限于交通网络分析,设施网络也可使用。

对三维交通网络数据集进行数据检查,返回三维交通网络分析数据检查结果对象。

该方法用于对三维交通网络数据集进行检查,给出错误信息,便于用户针对错误信息对数据进行修改,以避免由于数据错误导致交通网络分析错误。

注意,该方法需要在设置三维交通网络分析环境(setAnalystSetting 方法)之后调用,但不需要加载网络模型(load 方法)。

该方法返回一个三维交通网络分析数据检查结果(TransportationAnalystCheckResult3D)对象,通过该对象的 getArcErrorInfos 方法和 getNodeErrorInfos 方法可以获取弧段错误信息和结点错误信息。错误信息存储在字典中,键代表错误弧段或结点的 SMID,值代表错误类型。错误类型以数字表示,代表的具体错误含义如下表所示。

返回:
三维交通网络分析数据检查结果。

findPath

public TransportationAnalystResult3D findPath(TransportationAnalystParameter3D parameter)
最佳路径分析。

最佳路径分析,用于在网络数据集中,找出经过给定的 N 个点(N 大于等于 2)的最佳路径,这条最佳路径具有以下两个特征:

  1. 这条路径必须按照给定的 N 点的次序依次经过这 N 个点,也就是说,最佳路径分析中经过的点是有序的;
  2. 这条路径的耗费最小。耗费根据交通网络分析参数所指定的权重来决定。权重可以是长度、时间、路况、费用等,因此最佳路径可以是距离最短的路径、花费时间最少的路径、路况最好的路径、费用最低的路径等等。

有两种方式来指定待分析的经过点:

  1. 结点方式:通过 TransportationAnalystParameter3D 类的 setNodes 方法指定最佳路径分析所经过的结点的 ID,此时,分析过程中经过的点就是相应的网络结点,而经过点的次序是网络结点在这个结点 ID 数组中的次序;
  2. 任意坐标点方式:通过 TransportationAnalystParameter3D 类的 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();        
        }
 

dispose

public void dispose()
释放该对象所占用的资源。当调用该方法之后,此对象不再可用。