com.supermap.services.providers

类 UGCTransportationAnalystProvider

  • java.lang.Object
    • com.supermap.services.providers.UGCTransportationAnalystProvider
  • 所有已实现的接口:
    Disposable, ProviderContextAware, TransportationAnalystProvider


    public class UGCTransportationAnalystProvider
    extends java.lang.Object
    implements Disposable, ProviderContextAware, TransportationAnalystProvider
    

    SuperMap 交通网络分析服务提供者。

    UGCTransportationAnalystProvider 提供了 SuperMap 交通网络分析的相关服务,封装了与 SuperMap 交通网络分析相关的 GIS 功能。

    当用坐标表示站点,该点又不在网络结点或弧段上时,交通网络分析过程中, 会取容限范围(参见 TransportationAnalystSetting.tolerance)内对应弧段的起始结点 和终止结点作为站点分别计算,然后取最小的计算结果。

    使用 SuperMap 数据构建交通网络分析服务提供者(自动构建 SuperMap 数据服务提供者)的示例代码如下:

     public UGCTransportationAnalystProvider buildUGCTransportationAnalystProviderSample(){
     ///构建交通网络分析环境设置
     TransportationAnalystSetting setting = new TransportationAnalystSetting();
     //所用的 SuperMap 数据,并制定数据源和网络数据集。
     setting.workspaceConnectString = "../data/networkanalyst/network.sxwu";
     //指定数据源。
     setting.datasourceName = "network";
     //指定进行交通网络分析的网络数据集。
     setting.datasetName = "netfindpath";
     //设置可用的权值信息集合。
     //名为 CostInformation 的权值信息。
     WeightFieldInfo fieldInfo1 = new WeightFieldInfo();
     fieldInfo1.name = "CostInformation";
     fieldInfo1.forwardWeightField = "cost";
     fieldInfo1.backWeightField = "cost";
     //名为 LengthInformateion 的权值信息。
     WeightFieldInfo fieldInfo2 = new WeightFieldInfo();
     fieldInfo2.name = "LengthInformateion";
     fieldInfo2.forwardWeightField = "smLength";
     fieldInfo2.backWeightField = "smLength";
     //构建可用的权值信息集合。
     WeightFieldInfo[] weightFieldInfos=new WeightFieldInfo[]{fieldInfo1,fieldInfo2};
     //设置可用的权值信息集合。
     setting.weightFieldInfos = weightFieldInfos;
     //设置结点到弧段的距离容限。
     setting.tolerance = 0.01;
     //设置表示弧段 ID 的字段名。
     setting.edgeIDField="SmEdgeID";
     //设置表示弧段名称的字段名。
     setting.edgeNameField="SmEdgeID";
     //设置表示结点 ID 的字段名。
     setting.nodeIDField="SmNodeID";
     //设置表示结点名称的字段名。
     setting.nodeNameField="NodeLabel";
     //标识弧段起始结点 ID 的字段名。
     setting.fromNodeIDField="smFNode";
     //标识弧段终止结点 ID 的字段名。
     setting.toNodeIDField="SmTNode";
     //设置转向表
     TurnDatasetInfo turnDatasetInfo = new TurnDatasetInfo();
     turnDatasetInfo.workspaceConnectString = "../data/networkanalyst/network.sxwu";
     turnDatasetInfo.datasourceName = "network";
     turnDatasetInfo.datasetName = "netfindpath_TRN";
     turnDatasetInfo.fromEdgeIDField = "FEdgeID";
     turnDatasetInfo.toEdgeIDField = "TEdgeID";
     turnDatasetInfo.nodeIDField = "NodeID";
     turnDatasetInfo.weightFields = new String[]{"TurnCost","TurnCost2"};
     turnDatasetInfo.workspaceType = "SXWU";
     setting.turnDatasetInfo=turnDatasetInfo;
     ///利用交通网络分析环境设置构建 SuperMap 交通网络分析服务提供者
     UGCTransportationAnalystProvider analystProvider = new UGCTransportationAnalystProvider(setting);
     return analystProvider;
     }
     
    
    • 构造器详细资料

      • UGCTransportationAnalystProvider

        public UGCTransportationAnalystProvider()
        

        构造函数。

      • UGCTransportationAnalystProvider

        public UGCTransportationAnalystProvider(TransportationAnalystSetting setting,
                                        UGCDataProvider provider)
        

        通过交通网络分析设置、使用的 SuperMap 数据服务提供者对象构建一个 UGCTransportationAnalystProvider 对象。

        参数:
        setting - 交通网络分析设置对象。
        provider - uperMap 数据服务提供者对象。
    • 方法详细资料

      • computeWeightMatrix

        public double[][] computeWeightMatrix(int[] nodeIDs,
                                     TransportationAnalystParameter parameter)
        

        通过交通网络分析参数,得出一个耗费矩阵。

        该矩阵是一个二维 double 数组,用来存储任意两点间的资源消耗。要计算耗费矩阵的目标点和权值字段在 parameter 参数中指定。

        示例如下,其中 SuperMap 交通网络分析服务提供者的构建请参见buildUGCTransportationAnalystProviderSample

         public double[][] computeWeightMatrixSample(){
         //构建 UGCTransportationAnalystProvider 的过程请参见 buildUGCTransportationAnalystProviderSample。
         UGCTransportationAnalystProvider analystProvider=buildUGCTransportationAnalystProviderSample();
         ///构建交通网络分析参数对象,即计算耗费矩阵需要的信息
         TransportationAnalystParameter analystParameter = new TransportationAnalystParameter();
         //设置计算耗费矩阵的目标点集合。
         int[] nodeIDs = new int[]{1,5,10,20};
         //设置计算耗费矩阵所用的权值信息的名称,该权值信息必须是交通网络分析环境的可用权值信息集合中所包含的。
         analystParameter.weightFieldName="CostInformation";
         //设置转向耗费字段,该字段必须是在交通网络分析环境的转向表中已经设置的。
         analystParameter.turnWeightField="TurnCost";
         //使用交通网络分析参数,执行耗费矩阵的计算。
         double[][] matrix=analystProvider.computeWeightMatrix(nodeIDs, analystParameter);
         return matrix;
         }
         
        
        指定者:
        computeWeightMatrix 在接口中 TransportationAnalystProvider
        参数:
        parameter - 交通网络分析参数对象,指定计算耗费矩阵的目标点集合、所用权值字段等计算耗费矩阵需要的信息,参见 TransportationAnalystParameter 类。
        nodeIDs - 需要计算耗费矩阵的点的ID的集合
        返回:
        存储任意两点间耗费的二维矩阵。
      • computeWeightMatrix

        public double[][] computeWeightMatrix(Point2D[] points,
                                     TransportationAnalystParameter parameter)
        

        通过点坐标和交通网络分析参数,得出一个耗费矩阵。

        该矩阵是一个二维 double 数组,用来存储任意两点间的资源消耗。要计算耗费矩阵的目标点和权值字段在 parameter 参数中指定。

        指定者:
        computeWeightMatrix 在接口中 TransportationAnalystProvider
        参数:
        points - 需要计算耗费矩阵的点集合。
        parameter - 交通网络分析参数对象,指定计算耗费矩阵的目标点集合、所用权值字段等计算耗费矩阵需要的信息,参见 TransportationAnalystParameter 类。
        返回:
        存储任意两点间耗费的二维矩阵。
      • findClosestFacility

        public ClosestFacilityPaths<java.lang.Integer> findClosestFacility(int[] facilityIDs,
                                                                  int event,
                                                                  int expectFacilityCount,
                                                                  boolean fromEvent,
                                                                  double maxWeight,
                                                                  TransportationAnalystParameter parameter)
        

        最近设施查找分析,事件点以网络结点 ID 表示。

        最近设施分析是指在网络上给定一个事件点和一组设施点,为事件点查找以最小耗费能到达的一个或几个设施点,结果为从事件点到设施点(或从设施点到事件点)的最佳路径。

        • 设施点:最近设施分析的基本要素,也就是学校、超市、加油站等服务设施。
        • 事件点:为最近设施分析的基本要素,就是需要服务设施的事件位置。

        使用场景一:例如事件发生点是一起交通事故,要求查找在10分钟内能到达的最近医院,超过10分钟能到达的都不予考虑。此例中,事故发生地即是一个事件点,周边的医院则是设施点。最近设施查找实际上也是一种路径分析,因此,同样可以应用障碍边和障碍点的设置,在行驶路途上这些障碍将不能被穿越,在路径分析中会予以考虑。

        在进行最近设施查找分析时,事件点的指定方式有两种,一个是可以以坐标点的形式指定;一个是以网络数据集中的结点ID指定, 也就是将该网络结点看做事件点,本方法中事件点的指定是采用结点 ID 号的方式。

        指定者:
        findClosestFacility 在接口中 TransportationAnalystProvider
        参数:
        facilityIDs - 表示设施点的结点 ID 数组,必设参数。
        event - 表示事件点的结点 ID,必设参数。
        expectFacilityCount - 要查找的设施点数量,可选参数,默认值为1。
        fromEvent - 是否从事件点到设施点进行查找,可选参数,默认值为false。
        maxWeight - 权值的最大限值,必设参数。单位同 parameter(交通网络分析通用参数)中设置的权值字段一致,如果要查找整个网络,该值设为 0。
        networkDataName - 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()的返回的数组的元素之一。
        parameter - 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。
        返回:
        最近设施分析结果路径集合。
      • findClosestFacility

        public ClosestFacilityPaths<Point2D> findClosestFacility(Point2D[] facilityPoints,
                                                        Point2D event,
                                                        int expectFacilityCount,
                                                        boolean fromEvent,
                                                        double maxWeight,
                                                        TransportationAnalystParameter parameter)
        

        最近设施查找分析,事件点以点坐标表示。

        近设施分析是指在网络上给定一个事件点和一组设施点,为事件点查找以最小耗费能到达的一个或几个设施点,结果为从事件点到设施点(或从设施点到事件点)的最佳路径。

        • 设施点:最近设施分析的基本要素,也就是学校、超市、加油站等服务设施。
        • 事件点:为最近设施分析的基本要素,就是需要服务设施的事件位置。

        使用场景一:例如事件发生点是一起交通事故,要求查找在10分钟内能到达的最近医院,超过10分钟能到达的都不予考虑。此例中,事故发生地即是一个事件点,周边的医院则是设施点。最近设施查找实际上也是一种路径分析,因此,同样可以应用障碍边和障碍点的设置,在行驶路途上这些障碍将不能被穿越,在路径分析中会予以考虑。

        在进行最近设施查找分析时,事件点的指定方式有两种,一个是可以以坐标点的形式指定;一个是以网络数据集中的结点ID指定, 也就是将该网络结点看做事件点,本方法中事件点的指定是采用坐标点的方式。

        指定者:
        findClosestFacility 在接口中 TransportationAnalystProvider
        参数:
        facilityPoints - 表示设施点的坐标点数组,必设参数。
        event - 表示事件点的坐标点,必设参数。
        expectFacilityCount - 要查找的设施点数量,可选参数,默认值为1。
        fromEvent - 是否从事件点到设施点进行查找,可选参数,默认值为false。
        maxWeight - 权值的最大限值,必设参数。单位同 parameter(交通网络分析通用参数)中设置的权值字段一致,如果要查找整个网络,该值设为 0。
        networkDataName - 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()的返回的数组的元素之一。
        parameter - 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。
        返回:
        最近设施分析结果路径集合。
      • findMTSPPath

        public MTSPPaths<java.lang.Integer> findMTSPPath(int[] nodeIDs,
                                                int[] centerIDs,
                                                boolean hasLeastTotalCost,
                                                TransportationAnalystParameter parameter)
        

        多旅行商(物流配送)分析,配送中心以网络结点 ID 数组表示。

        多旅行商分析也称为物流配送,是指在网络数据集中,给定 M 个配送中心点和 N 个配送目的地(M,N 为大于零的整数),查找经济有效的配送路径,并给出相应的行走路线。

        物流配送功能就是解决如何合理分配配送次序和送货路线,使配送总花费达到最小或每个配送中心的花费达到最小。

        多旅行商分析的结果将给出每个配送中心所负责的配送目的地,和每个配送中心向其负责的配送目的地配送货物时,经过各个配送目的地的顺序和相应的行走路线。 从而使各个配送中心的配送花费相对平均,或者使所有的配送中心的总花费最小。

        指定者:
        findMTSPPath 在接口中 TransportationAnalystProvider
        参数:
        nodeIDs - 配送目标结点 ID 数组,必设参数。
        centerIDs - 配送中心结点 ID 数组,必设参数。
        hasLeastTotalCost - 配送模式是否为总花费最小方案。可选参数,默认为false,表示采用局部最优方案,设置为 true 表示采用总花费最小方案。

        总花费最小方案中,可能会出现某些配送中心点配送的花费较多,而其他的配送中心点的花费较少的情况。 局部最优方案中,会控制每个配送中心点的花费,使各个中心点花费相对平均,此时总花费不一定最小。

        networkDataName - 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()的返回的数组的元素之一。
        parameter - 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。
        返回:
        多旅行商分析结果集。
      • findMTSPPath

        public MTSPPaths<Point2D> findMTSPPath(Point2D[] points,
                                      Point2D[] centers,
                                      boolean hasLeastTotalCost,
                                      TransportationAnalystParameter parameter)
        

        多旅行商(物流配送)分析,配送中心以点坐标串表示。

        多旅行商分析也称为物流配送,是指在网络数据集中,给定 M 个配送中心点和 N 个配送目的地(M,N 为大于零的整数),查找经济有效的配送路径,并给出相应的行走路线。

        物流配送功能就是解决如何合理分配配送次序和送货路线,使配送总花费达到最小或每个配送中心的花费达到最小。

        多旅行商分析的结果将给出每个配送中心所负责的配送目的地,和每个配送中心向其负责的配送目的地配送货物时,经过各个配送目的地的顺序和相应的行走路线。 从而使各个配送中心的配送花费相对平均,或者使所有的配送中心的总花费最小。

        指定者:
        findMTSPPath 在接口中 TransportationAnalystProvider
        参数:
        points - 配送目标坐标点数组,必设参数。
        centerIDs - 配送中心坐标点数组,必设参数。
        hasLeastTotalCost - 配送模式是否为总花费最小方案。默认为false 表示采用局部最优方案,设置为 true 则表示采用总花费最小方案。

        总花费最小方案中,可能会出现某些配送中心点配送的花费较多,而其他的配送中心点的花费较少的情况。 局部最优方案中,会控制每个配送中心点的花费,使各个中心点花费相对平均,此时总花费不一定最小。

        networkDataName - 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()的返回的数组的元素之一。
        parameter - 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。
        返回:
        多旅行商分析结果集。
      • findPath

        public Paths findPath(int[] nodeIDs,
                     boolean hasLeastEdgeCount,
                     TransportationAnalystParameter parameter)
        

        最佳路径分析。

        最佳路经分析解决的问题是,在网络数据集中,给定 N 个点(N 大于等于2),找出按照给定点的次序依次经过这 N 个点的阻抗最小的路经。 “阻抗最小”有多种理解,如时间最短、费用最低、风景最好、路况最佳、过桥最少、收费站最少、经过乡村最多等。

        调用该方法实现路径查找,查找的结果就是依次经过 N 个点(N 大于等于2)的最佳路径。

        最佳路径分析与旅行商分析的异同:

        • 相同点:都是在网络中寻找遍历所有经过点的花费最少的路径。
        • 不同点:在遍历所有经过点的过程,对访问经过点的顺序处理有所不同。 最佳路径分析必须按照指定的顺序访问所有经过点,而旅行商分析需要确定最优次序来访问所有点, 而并不一定按照指定的经过点的次序。有关旅行商分析的详细内容,请参见#findTSPPath(Point2D[],boolean,String,TransportationAnalystParameter)方法。

        指定者:
        findPath 在接口中 TransportationAnalystProvider
        参数:
        nodeIDs - 需要经过的网络结点 ID 数组,必设参数。
        hasLeastEdgeCount - 是否按弧段数最少的模式查询。可选参数,默认为false, 代表不按照弧段最少进行查询。

        networkDataName - 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()的返回的数组的元素之一。
        parameter - 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。
        返回:
        最佳路径分析结果集合,目前实际上其中只包含一个元素。
      • findPath

        public Paths findPath(Point2D[] points,
                     boolean hasLeastEdgeCount,
                     TransportationAnalystParameter parameter)
        

        最佳路径分析。

        最佳路经分析解决的问题是,在网络数据集中,给定 N 个点(N 大于等于2),找出按照给定点的次序依次经过这 N 个点的阻抗最小的路经。 “阻抗最小”有多种理解,如时间最短、费用最低、风景最好、路况最佳、过桥最少、收费站最少、经过乡村最多等。

        调用该方法实现路径查找,查找的结果就是依次经过 N 个点(N 大于等于2)的最佳路径。

        最佳路径分析与旅行商分析的异同:

        • 相同点:都是在网络中寻找遍历所有经过点的花费最少的路径。
        • 不同点:在遍历所有经过点的过程,对访问经过点的顺序处理有所不同。 最佳路径分析必须按照指定的顺序访问所有经过点,而旅行商分析需要确定最优次序来访问所有点, 而并不一定按照指定的经过点的次序。有关旅行商分析的详细内容,请参见方法。

        指定者:
        findPath 在接口中 TransportationAnalystProvider
        参数:
        points - 需要经过的坐标点数组,必设参数。
        hasLeastEdgeCount - 是否按弧段数最少的模式查询。可选参数,默认为false, 代表不按照弧段最少进行查询。

        networkDataName - 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()的返回的数组的元素之一。
        parameter - 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。
        返回:
        最佳路径分析结果集合,目前实际上其中只包含一个元素。
      • findServiceArea

        public ServiceAreaResults<java.lang.Integer> findServiceArea(int[] centerIDs,
                                                            double[] weights,
                                                            boolean isFromCenter,
                                                            boolean isCenterMutuallyExclusive,
                                                            TransportationAnalystParameter parameter)
        

        服务区分析。

        服务区分析是为网络上指定的服务中心点查找其服务范围。

        服务区:以指定点为中心,在一定阻力范围内,包含所有可通达边、通达点的一个区域。 单的说就是提供某种特定服务的位置按一定的条件所服务的区域。

        服务区分析:为网络上指定的位置点计算服务范围。例如:为网络上某点计算其30分钟的服务区,则结果服务区内,任意点出发到该点的时间都不会超过30分钟。

        如下面的示意图所示,展示了服务区分析将要解决的问题以及结果会提供什么样的信息。 图中的蓝色圆点代表提供服务的服务中心点, 各种颜色的面状区域就是以相应的服务中心点为中心,在给定的阻力范围内的服务区。

        指定者:
        findServiceArea 在接口中 TransportationAnalystProvider
        参数:
        centerIDs - 服务中心结点 ID 数组,必设参数。
        weights - 服务半径集合,必设参数。该集合的大小跟服务中心个数一致, 标识了在对每个服务中心进行服务区分析时,所用的范围值。例如设置 weights[0] 为 30.0,可表明在第一个服务中心的结果服务区内, 任意点出发到该服务中心的时间都不应超过30分钟。
        isFromCenter - 是否从中心点开始分析,可选参数,默认为false 表示不从中心点开始分析。

        从中心点开始分析和不从中心点开始分析,体现了服务中心和需要该服务的需求地的关系模式。 从中心点开始分析,是一个服务中心向服务需求地提供服务;而不从中心点开始分析, 是一个服务需求地主动到服务中心获得服务。

        例如:某个奶站向各个居民点送牛奶,如果要对这个奶站进行服务区分析,看这个奶站在允许的条件下所能服务的范围,那么在实际分析过程中就应当使用从中心点开始分析的模式;另一个例子,如果想分析一个区域的某个学校在允许的条件下所能服务的区域时,在现实中,都是学生主动来到学校学习,接受学校提供的服务,那么在实际分析过程中就应当使用不从中心点开始分析的模式。

        isCenterMutuallyExclusive - 是否对分析结果服务区进行互斥处理,可选参数,默认为False 表示不进行互斥处理, 若设置为 true, 表示如果分析出的服务区有重叠的部分,则进行互斥处理。注意:中心点互斥分析暂不支持。

        互斥处理的示例如下图所示,左图未进行互斥处理,右图进行了互斥处理。

        未进行互斥处理的效果 进行了互斥处理的效果

        networkDataName - 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()的返回的数组的元素之一。
        parameter - 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。
        返回:
        服务区分析结果。为一个数组,数组的大小跟服务中心的个数一致,数组中每一个元素对应了每一个服务中心的服务区描述。
      • findServiceArea

        public ServiceAreaResults<Point2D> findServiceArea(Point2D[] centerPoints,
                                                  double[] weights,
                                                  boolean isFromCenter,
                                                  boolean isCenterMutuallyExclusive,
                                                  TransportationAnalystParameter parameter)
        

        服务区分析。

        服务区分析是为网络上指定的服务中心点查找其服务范围。

        服务区:以指定点为中心,在一定阻力范围内,包含所有可通达边、通达点的一个区域。 单的说就是提供某种特定服务的位置按一定的条件所服务的区域。

        服务区分析:为网络上指定的位置点计算服务范围。例如:为网络上某点计算其30分钟的服务区,则结果服务区内,任意点出发到该点的时间都不会超过30分钟。

        如下面的示意图所示,展示了服务区分析将要解决的问题以及结果会提供什么样的信息。 图中的蓝色圆点代表提供服务的服务中心点, 各种颜色的面状区域就是以相应的服务中心点为中心,在给定的阻力范围内的服务区。

        指定者:
        findServiceArea 在接口中 TransportationAnalystProvider
        参数:
        centerPoints - 服务中心坐标点数组,必设参数。
        weights - 服务半径集合,必设参数。该集合的大小跟服务中心个数一致, 标识了在对每个服务中心进行服务区分析时,所用的范围值。例如设置 weights[0] 为 30.0,可表明在第一个服务中心的结果服务区内, 任意点出发到该服务中心的时间都不应超过30分钟。
        isFromCenter - 是否从中心点开始分析,可选参数,默认为false 表示不从中心点开始分析。

        从中心点开始分析和不从中心点开始分析,体现了服务中心和需要该服务的需求地的关系模式。 从中心点开始分析,是一个服务中心向服务需求地提供服务;而不从中心点开始分析, 是一个服务需求地主动到服务中心获得服务。

        例如:某个奶站向各个居民点送牛奶,如果要对这个奶站进行服务区分析,看这个奶站在允许的条件下所能服务的范围,那么在实际分析过程中就应当使用从中心点开始分析的模式;另一个例子,如果想分析一个区域的某个学校在允许的条件下所能服务的区域时,在现实中,都是学生主动来到学校学习,接受学校提供的服务,那么在实际分析过程中就应当使用不从中心点开始分析的模式。

        isCenterMutuallyExclusive - 是否对分析结果服务区进行互斥处理,可选参数,默认为False 表示不进行互斥处理, 若设置为 true, 表示如果分析出的服务区有重叠的部分,则进行互斥处理。注意:中心点互斥分析暂不支持。

        互斥处理的示例如下图所示,左图未进行互斥处理,右图进行了互斥处理。

        未进行互斥处理的效果 进行了互斥处理的效果

        networkDataName - 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()的返回的数组的元素之一。
        parameter - 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。
        返回:
        服务区分析结果。为一个数组,数组的大小跟服务中心的个数一致,数组中每一个元素对应了每一个服务中心的服务区描述。
      • findServiceArea

        public ServiceAreaResults<java.lang.Integer> findServiceArea(int[] centerIDs,
                                                            double[] weights,
                                                            ServiceAreaAnalystParameter analystParameter)
        
        指定者:
        findServiceArea 在接口中 TransportationAnalystProvider
        参数:
        centerIDs - 服务中心节点ID数组,必设参数。
        weights - 服务半径集合,必设参数。该集合的大小跟服务中心个数一致, 标识了在对每个服务中心进行服务区分析时,所用的范围值。例如设置 weights[0] 为 30.0,可表明在第一个服务中心的结果服务区内, 任意点出发到该服务中心的时间都不应超过30分钟。
        analystParameter - 服务区交通网络分析参数。包含服务区分析的可选参数
        返回:
        服务区分析结果。为一个数组,数组的大小跟服务中心的个数一致,数组中每一个元素对应了每一个服务中心的服务区描述。
      • findServiceArea

        public ServiceAreaResults<Point2D> findServiceArea(Point2D[] centerPoints,
                                                  double[] weights,
                                                  ServiceAreaAnalystParameter parameter)
        
        指定者:
        findServiceArea 在接口中 TransportationAnalystProvider
        参数:
        centerPoints - 服务中心点坐标数组,必设参数。
        weights - 服务半径集合,必设参数。该集合的大小跟服务中心个数一致, 标识了在对每个服务中心进行服务区分析时,所用的范围值。例如设置 weights[0] 为 30.0,可表明在第一个服务中心的结果服务区内, 任意点出发到该服务中心的时间都不应超过30分钟。
        parameter - 服务区交通网络分析参数。包含服务区分析的可选参数
        返回:
        服务区分析结果。为一个数组,数组的大小跟服务中心的个数一致,数组中每一个元素对应了每一个服务中心的服务区描述。
      • findTSPPath

        public TSPPaths findTSPPath(int[] nodeIDsToVisit,
                           boolean endNodeAssigned,
                           TransportationAnalystParameter parameter)
        

        旅行商分析。

        旅行商分析是查找经过指定一系列点的路径,旅行商分析是无序的路径分析。旅行商可以自己决定访问结点的顺序,目标是旅行路线阻抗总和最小(或接近最小)。

        在旅行商分析中,如果指定了终止点,则旅行商必须最后一个访问终止点,而其他经过点的访问次序有旅行商自己决定。

        在旅行商分析中,需要途经的点是在 parameter 参数中指定的,其中点序列中的第一个点为旅行商的出发点。

        最佳路径分析与旅行商分析的异同:

        • 相同点:都是在网络中寻找遍历所有经过点的花费最少的路径。
        • 不同点:在遍历所有经过点的过程,对访问经过点的顺序处理有所不同。 最佳路径分析必须按照指定的顺序访问所有经过点,而旅行商分析需要确定最优次序来访问所有点, 而并不一定按照指定的经过点的次序。有关最佳路径分析的详细内容,请参见#findPath(Point2D[],boolean,String,TransportationAnalystParameter)方法。

        指定者:
        findTSPPath 在接口中 TransportationAnalystProvider
        参数:
        nodeIDsToVisit - 需要途经的网络结点的 ID 数组,必设参数。
        endNodeAssigned - 是否指定终止点。可选参数,默认为False,如果设置为true ,则表示指定终止点,则旅行商必须最后一个访问终止点,即途经的最后一个点。
        networkDataName - 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()的返回的数组的元素之一。
        parameter - 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。
        返回:
        旅行商分析结果集合,目前实际上其中只包含一个元素。
      • removeRepeat

        protected int[] removeRepeat(int[] nodeIDsToVisit)
        
      • findTSPPath

        public TSPPaths findTSPPath(Point2D[] pointsToVisit,
                           boolean endNodeAssigned,
                           TransportationAnalystParameter parameter)
        

        旅行商分析。

        旅行商分析是查找经过指定一系列点的路径,旅行商分析是无序的路径分析。旅行商可以自己决定访问结点的顺序,目标是旅行路线阻抗总和最小(或接近最小)。

        在旅行商分析中,如果指定了终止点,则旅行商必须最后一个访问终止点,而其他经过点的访问次序有旅行商自己决定。

        在旅行商分析中,需要途经的点是在 parameter 参数中指定的,其中点序列中的第一个点为旅行商的出发点。

        最佳路径分析与旅行商分析的异同:

        • 相同点:都是在网络中寻找遍历所有经过点的花费最少的路径。
        • 不同点:在遍历所有经过点的过程,对访问经过点的顺序处理有所不同。 最佳路径分析必须按照指定的顺序访问所有经过点,而旅行商分析需要确定最优次序来访问所有点, 而并不一定按照指定的经过点的次序。有关最佳路径分析的详细内容,请参见#findPath(Point2D[],boolean,String,TransportationAnalystParameter)方法。

        指定者:
        findTSPPath 在接口中 TransportationAnalystProvider
        参数:
        pointsToVisit - 需要途经的坐标点数组,必设参数。
        endNodeAssigned - 是否指定终止点。可选参数,默认为False,如果设置为true ,则表示指定终止点,则旅行商必须最后一个访问终止点,即途经的最后一个点。
        networkDataName - 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()的返回的数组的元素之一。
        parameter - 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。
        返回:
        旅行商分析结果集合,目前实际上其中只包含一个元素。
      • removeRepeat

        protected Point2D[] removeRepeat(Point2D[] pointsToVisit)
        
      • getPrjCoordSys

        public PrjCoordSys getPrjCoordSys()
        

        获取指定网络数据的投影信息。

        指定者:
        getPrjCoordSys 在接口中 TransportationAnalystProvider
        参数:
        networkDataName - 用于唯一标识一个网络数据的字符串。#getNetworkDataNames()的返回的数组的元素之一。
        返回:
        指定网络数据对应的投影信息。
      • init

        protected TransportationAnalyst init(com.supermap.services.providers.SettingChecked settingChecked)
        

        UGCTransportationAnalystProvider 的初始化。即通过交通网络分析环境设置,获取 SuperMap Objects Java 中的 TransportationAnalyst 对象,用于交通网络分析。

        参数:
        settingChecked - 交通网络分析环境设置。
        返回:
        SuperMap Objects Java 中的 TransportationAnalyst 对象。
      • initFacilityAnalyst

        protected com.supermap.analyst.networkanalyst.FacilityAnalyst initFacilityAnalyst(com.supermap.services.providers.SettingChecked settingChecked)
        
      • createUGOSettingForCheck

        protected com.supermap.analyst.networkanalyst.TransportationAnalystSetting createUGOSettingForCheck(com.supermap.analyst.networkanalyst.TransportationAnalystSetting ugoSetting)
        
      • createUGOSetting

        protected com.supermap.analyst.networkanalyst.TransportationAnalystSetting createUGOSetting()
        

        获取 SuperMap Object Java 中默认的交通网络分析环境设置对象。

        返回:
        SuperMap Object Java 中的默认交通网络分析环境设置对象。
      • createTransportationAnalyst

        protected TransportationAnalyst createTransportationAnalyst()
        

        创建一个新的 SuperMap Objects Java 中的交通网络分析对象(TransportationAnalyst)。

        返回:
        空的 SuperMap Objects Java 中的交通网络分析对象。
      • dispose

        public void dispose()
        

        释放本 SuperMap 交通网络分析服务提供者所占用的资源。

        指定者:
        dispose 在接口中 Disposable
      • setProviderContext

        public void setProviderContext(ProviderContext context)
        

        设置 SuperMap 交通网络分析服务提供者上下文。

        指定者:
        setProviderContext 在接口中 ProviderContextAware
        参数:
        context - SuperMap 交通网络分析服务提供者上下文。
      • findLocation

        public LocationAnalystResult findLocation(LocationAnalystParameter parameter)
        

        选址分区分析。

        选址分区分析是为了确定一个或多个待建设施的最佳或最优位置, 使得设施可以用一种最经济有效的方式为需求方提供服务或者商品。 选址分区不仅仅是一个选址过程,还要将需求点的需求分配到相应的新建设施的服务区中,因此称之为选址与分区。

        在选址分区分析过程中,资源供给中心以及分析模式的设定是在 LocationAnalystParameter 类型的参数 parameter 中实现的,具体细节参见 LocationAnalystParameter 类。

        在分析过程中使用的需求点都为网络结点,即除了各种类型的中心点所对应的网络结点, 所有网络结点都作为资源需求点参与选址分区分析,如果要排除某部分结点,可以将其设置为障碍点。

        例子:如下图所示,某个区域还没有邮局,现在想在这个区域内建立邮局,有15个待选地点(如图一所示,蓝色方框代表 15个候选地点),将在这些待选点中选择7个最佳地点建立邮局。最佳选址要满足,居民点中的居民步行去邮局办理业务的 步行时间要在30分钟以内,同时每个邮局能够服务的居民总人数有限,在同时满足这两个条件的基础上,选址分区分析会 给出以个最佳的选址位置,并且圈出每个邮局的服务区域(如图二所示,红色点表示最后选出的7个建立邮局的最佳位置)。

        备注:下面两幅中的网络数据集的所有网络结点被看做是该区域的居民点全部参与选址分区分析, 居民点中的居民数目即为该居民点所需服务的数量。


        图一 用于分析的网络数据集和15个候选中心示意图


        图二 选址分区分析结果示意图

        示例如下,其中 SuperMap 交通网络分析服务提供者的构建请参见buildUGCTransportationAnalystProviderSample

         public LocationAnalystResult findLocationSample(){
         //构建 UGCTransportationAnalystProvider 的过程请参见 buildUGCTransportationAnalystProviderSample。
         UGCTransportationAnalystProvider analystProvider=buildUGCTransportationAnalystProviderSample();
         ///构建交通网络分析参数对象,即选址分区分析需要的信息
         LocationAnalystParameter locationAnalystParameter = new LocationAnalystParameter();
         locationAnalystParameter.expectedSupplyCenterCount=3;
         locationAnalystParameter.isFromCenter=true;
         locationAnalystParameter.nodeDemandField ="NodeCost";
         locationAnalystParameter.turnWeightField="TurnCost";
         locationAnalystParameter.weightName="CostInformation";
         SupplyCenter center1 = new SupplyCenter(2, 30.0, 20.0, SupplyCenterType.FIXEDCENTER);
         SupplyCenter center2 = new SupplyCenter(15, 50.0, 20.0, SupplyCenterType.OPTIONALCENTER);
         SupplyCenter center3 = new SupplyCenter(12, 30.0, 20.0, SupplyCenterType.OPTIONALCENTER);
         SupplyCenter center4 = new SupplyCenter(10, 30.0, 20.0, SupplyCenterType.OPTIONALCENTER);
         SupplyCenterCollection collection = new SupplyCenterCollection();
         collection.add(center1);
         collection.add(center2);
         collection.add(center3);
         collection.add(center4);
         locationAnalystParameter.supplyCenters=collection;
         LocationAnalystResult result = analystProvider.findLocation(locationAnalystParameter);
         return result;
         }
         
        
        指定者:
        findLocation 在接口中 TransportationAnalystProvider
        参数:
        parameter - 选址分区分析参数对象。
        返回:
        选址分区分析结果。
      • updateEdgeWeight

        public double updateEdgeWeight(int edgeID,
                              int fromNodeID,
                              int toNodeID,
                              java.lang.String weightField,
                              double weight)
        

        更新弧段的权值。

        指定者:
        updateEdgeWeight 在接口中 TransportationAnalystProvider
        参数:
        edgeID - 目标弧段 ID。
        fromNodeID - 目标弧段的起始结点 ID。
        toNodeID - 目标弧段的终止结点 ID。
        weightField - 目标弧段对应的权值信息(即 WeightFieldInfo)的名称,fromNodeID 和 toNodeID 参数决定了更新其中的正向字段还是反向字段。
        weight - 新的权值。
        返回:
        更新成功返回更新前的权值,失败返回 double 类型数据的最小值。
      • updateTurnNodeWeight

        public double updateTurnNodeWeight(int nodeID,
                                  int fromEdgeID,
                                  int toEdgeID,
                                  java.lang.String turnWeightField,
                                  double weight)
        

        更新转向结点的权值。

        指定者:
        updateTurnNodeWeight 在接口中 TransportationAnalystProvider
        参数:
        nodeID - 目标转向结点 ID。
        fromEdgeID - 目标转向结点的起始弧段 ID。
        toEdgeID - 目标转向结点的终止弧段 ID。
        turnWeightField - 转向权值字段的名称。
        weight - 新的权值。
        返回:
        成功返回更新前的权值,失败返回 double 类型数据的最小值。
      • getTurnWeightNames

        public java.lang.String[] getTurnWeightNames()
        

        获取网络数据的转向权值字段名称列表。

        指定者:
        getTurnWeightNames 在接口中 TransportationAnalystProvider
        返回:
        返回网络数据的转向权值字段名称列表。
      • getWeightNames

        public java.lang.String[] getWeightNames()
        

        获取网络数据的弧段权值字段名称列表。

        指定者:
        getWeightNames 在接口中 TransportationAnalystProvider
        返回:
        返回网络数据的弧段权值字段名称列表。
      • pauseForRefreshWorkspace

        public void pauseForRefreshWorkspace()
        

        阻止请求,以便刷新工作空间。

      • refreshWorkspaceFinished

        public void refreshWorkspaceFinished()
        

        刷新工作空间结束,继续请求。

      • refreshWorkspace

        public void refreshWorkspace()
        

        刷新工作空间。

      • findConnectedEdgesFromEdges

        public FacilityAnalyst2DResult findConnectedEdgesFromEdges(int[] edgeIDs,
                                                          boolean returnFeatures,
                                                          boolean connected)
        
        从接口复制的说明: TransportationAnalystProvider
        根据给定的弧段 ID 数组,查找与这些弧段相连通的弧段,返回弧段 ID 数组、要素数组
        指定者:
        findConnectedEdgesFromEdges 在接口中 TransportationAnalystProvider
        参数:
        edgeIDs - 给定的弧段 ID 数组
        returnFeatures - 返回要素,为true,返回要素,反之,则不返回
        connected - 相连通或者不相联通,为true,则返回相连通的弧段;为false,则返回不相连通的弧段
        返回:
      • findConnectedEdgesFromNodes

        public FacilityAnalyst2DResult findConnectedEdgesFromNodes(int[] nodeIDs,
                                                          boolean returnFeatures,
                                                          boolean connected)
        
        从接口复制的说明: TransportationAnalystProvider
        根据给定的结点 ID 数组,查找与这些结点相连通或者不相连通的弧段,返回弧段 ID 数组、要素数组
        指定者:
        findConnectedEdgesFromNodes 在接口中 TransportationAnalystProvider
        参数:
        nodeIDs - 给定的结点 ID 数组
        returnFeatures - 返回要素,为true,返回要素,反之,则不返回
        connected - 相连通或者不相联通,为true,则返回相连通的弧段;为false,则返回不相连通的弧段
        返回: