com.supermap.realspace.networkanalyst

类 TransportationAnalyst3D

  • java.lang.Object
    • com.supermap.data.InternalHandle
      • com.supermap.data.InternalHandleDisposable
        • com.supermap.realspace.networkanalyst.TransportationAnalyst3D
  • 所有已实现的接口:
    IDisposable


    public class TransportationAnalyst3D
    extends com.supermap.data.InternalHandleDisposable
    三维交通网络分析类。该类用于提供基于三维网络数据集的交通网络分析功能。目前只提供最佳路径分析。

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

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

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

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

      • TransportationAnalyst3D

        public TransportationAnalyst3D()
        构造一个新的 TransportationAnalyst3D 对象。
    • 方法详细资料

      • dispose

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

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

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

        注意:

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

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

        public void setAnalystSetting(TransportationAnalystSetting3D value)
        设置三维交通网络分析环境设置。
        参数:
        value - 三维交通网络分析环境设置。
        示范代码:
        请参见 findPath 方法的示例。
      • 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();        
                }
         
      • check

        @Deprecated
        public TransportationAnalystCheckResult3D check()
        已过时。 由于check不需要load,改为静态方法迁移到NetworkBuilder3D中,不再局限于交通网络分析,设施网络也可使用。
        对三维交通网络数据集进行数据检查,返回三维交通网络分析数据检查结果对象。

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

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

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

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

Copyright © 2021–2024 SuperMap. All rights reserved.