com.supermap.analyst.networkanalyst
类 FacilityAnalyst

java.lang.Object
  继承者 com.supermap.analyst.networkanalyst.FacilityAnalyst

public class FacilityAnalyst
extends java.lang.Object

设施网络分析类。

设施网络分析类。它是网络分析功能类之一,主要用于进行各类连通性分析和追踪分析。

设施网络分析属于网络分析功能的一种,所以在进行设施网络分析之前,您需要具备的前提知识是:

  1. 了解网络分析中的基本知识:
  2. 学会建立用于设施网络分析的数据集:
  3. 设施网络是具有方向的网络。即介质(水流、电流等)会根据网络本身的规则在网络中流动。

    设施网络分析的前提是已经建立了用于设施网络分析的数据集,建立用于设施网络分析的数据集的基础是建立网络数据集,在此基础上利用 NetworkBuilder 类的 buildFacilityNetworkDirections 方法赋予网络数据集特有的用于进行设施网络分析的数据信息,也就是为网络数据集建立流向,使原有的网络数据集具有了能够进行设施网络分析的最基本的条件 ,此时,就可以进行各种设施网络分析了。如果你的设施网络具有等级信息,还可以进一步使用 NetworkBuilder 类的 buildFacilityNetworkHierarchies() 方法添加等级信息。详细信息请参见 NetworkBuilder 类的 buildFacilityNetworkDirectionsbuildFacilityNetworkHierarchies() 方法。

  4. 了解设施网络分析环境参数的设置:
  5. 在利用设施网络分析类进行分析时,以及上面提到的建立用于设施网络分析的数据集,都要进行设施网络分析环境参数的设置,即使用到 FacilityAnalystSetting 类所做的设置。详细信息请参见 FacilityAnalystSetting 类。

  6. 了解追踪分析的相关知识,如上游、下游、源、汇、流向等。

当具备了以上知识,您就可以使用 FacilityAnalyst 类提供的各种方法来实现各种设施网络分析功能。目前,FacilityAnalyst 类提供的设施网络分析功能包括:

  1. 根据给定的结点 ID 数组查找与结点连通的环路;
  2. 根据给定的弧段 ID 数组查找与弧段连通的环路;
  3. 根据给定的结点 ID 数组查找与结点相连通的弧段;
  4. 根据给定的弧段 ID 数组查找与弧段相连通的弧段;
  5. 根据给定的结点 ID 数组查找与结点不相连通的弧段;
  6. 根据给定的弧段 ID 数组查找与弧段不相连通的弧段;
  7. 根据给定的结点 ID 数组查找这些结点共同的上游弧段;
  8. 根据给定的弧段 ID 数组查找这些弧段共同的上游弧段;
  9. 根据给定的结点 ID 数组查找这些结点共同的下游弧段;
  10. 根据给定的弧段 ID 数组查找这些弧段共同的下游弧段;
  11. 查找某个结点到源之间的所有弧段;
  12. 查找某条弧段到源之间的所有弧段;
  13. 查找某个结点到汇之间的所有弧段;
  14. 查找某条弧段到汇之间的所有弧段;
  15. 查找某个结点上游追踪所流经的弧段;
  16. 查找某条弧段上游追踪所流经的弧段;
  17. 查找某个结点下游追踪所流经的弧段;
  18. 查找某条弧段下游追踪所流经的弧段;
  19. 设施网络路径分析,包括查找起始结点和终止结点间的最小耗费路径、查找起始弧段和终止弧段间的最小耗费路径、根据给定的结点沿上游或者下游查询最小耗费路径、 根据给定的弧段沿上游或者下游查询最小耗费路径。

还可以阅读《设施网络分析》技术文档以便了解更多有关设施网络分析的介绍。

示例:
请参见 findSourceFromNodetraceUpFromNodefindCommonAncestorsFromNodesfindPathFromNodes 以及 findPathDownFromNode 等方法的示例。

构造方法摘要
FacilityAnalyst()
          构造一个新的 FacilityAnalyst 对象。
 
方法摘要
 BurstAnalyseResult burstAnalyseFromEdge(int[] sourceNodeIDs, int edgeID, boolean isUncertainDirectionValid)
          双向爆管分析,通过指定爆管弧段,查找爆管弧段上下游中对爆管位置产生直接影响的结点以及受爆管位置直接影响的结点。
 BurstAnalyseResult burstAnalyseFromNode(int[] sourceNodeIDs, int nodeID, boolean isUncertainDirectionValid)
          双向爆管分析,通过指定爆管结点,查找爆管结点上下游中对爆管位置产生直接影响的结点以及受爆管位置直接影响的结点。
 int[] checkLoops()
          检查网络环路,返回构成环路的弧段 ID 数组。
 void dispose()
          释放该对象所占用的资源。
 int[] findCommonAncestorsFromEdges(int[] edgeIDs, boolean isUncertainDirectionValid)
          根据给定的弧段 ID 数组,查找这些弧段的共同上游弧段,返回弧段 ID 数组。
 int[] findCommonAncestorsFromNodes(int[] nodeIDs, boolean isUncertainDirectionValid)
          根据给定的结点 ID 数组,查找这些结点的共同上游弧段,返回弧段 ID 数组。
 int[] findCommonCatchmentsFromEdges(int[] edgeIDs, boolean isUncertainDirectionValid)
          根据给定的弧段 ID 数组,查找这些弧段的共同下游弧段,返回弧段 ID 数组。
 int[] findCommonCatchmentsFromNodes(int[] nodeIDs, boolean isUncertainDirectionValid)
          根据指定的结点 ID 数组,查找这些结点的共同下游弧段,返回弧段 ID 数组。
 int[] findConnectedEdgesFromEdges(int[] edgeIDs)
          根据给定的弧段 ID 数组,查找与这些弧段相连通的弧段,返回弧段 ID 数组。
 int[] findConnectedEdgesFromNodes(int[] nodeIDs)
          根据给定的结点 ID 数组,查找与这些结点相连通弧段,返回弧段 ID 数组。
 FacilityAnalystResult findCriticalFacilitiesDownFromEdge(int[] sourceNodeIDs, int edgeID, boolean isUncertainDirectionValid)
          下游关键设施查找,即查找给定弧段的关键下游设施结点,返回关键设施结点 ID 数组及给定弧段影响到的下游弧段 ID 数组。
 FacilityAnalystResult findCriticalFacilitiesDownFromNode(int[] sourceNodeIDs, int nodeID, boolean isUncertainDirectionValid)
          下游关键设施查找,即查找给定结点的下游关键设施结点,返回关键结点 ID 数组及给定结点影响到的下游弧段 ID 数组。
 FacilityAnalystResult findCriticalFacilitiesUpFromEdge(int[] sourceNodeIDs, int edgeID, boolean isUncertainDirectionValid)
          上游关键设施查找,即查找给定弧段的上游中的关键设施结点,返回关键结点 ID 数组及其下游弧段 ID 数组。
 FacilityAnalystResult findCriticalFacilitiesUpFromNode(int[] sourceNodeIDs, int nodeID, boolean isUncertainDirectionValid)
          上游关键设施查找,即查找给定结点的上游中的关键设施结点,返回关键结点 ID 数组及其影响到的下游弧段 ID 数组。
 int[] findLoopsFromEdges(int[] edgeIDs)
          根据给定的弧段 ID 数组查找与这些弧段相连通的环路,返回构成环路的弧段 ID 数组。
 int[] findLoopsFromNodes(int[] nodeIDs)
          根据给定的结点 ID 数组查找与这些结点相连通的环路,返回构成环路的弧段 ID 数组。
 FacilityAnalystResult findPathDownFromEdge(int edgeID, java.lang.String weightName, boolean isUncertainDirectionValid)
          设施网络下游路径分析,根据给定的参与分析的弧段 ID,查询该弧段下游耗费最小的路径,返回该路径包含的弧段、结点及耗费。
 FacilityAnalystResult findPathDownFromNode(int nodeID, java.lang.String weightName, boolean isUncertainDirectionValid)
          设施网络下游路径分析,根据给定的参与分析的结点 ID,查询该结点下游耗费最小的路径,返回该路径包含的弧段、结点及耗费。
 FacilityAnalystResult findPathFromEdges(int startEdgeID, int endEdgeID, java.lang.String weightName, boolean isUncertainDirectionValid)
          设施网络路径分析,即根据给定的起始和终止弧段 ID,查找其间耗费最小的路径,返回该路径包含的弧段、结点及耗费。
 FacilityAnalystResult findPathFromNodes(int startNodeID, int endNodeID, java.lang.String weightName, boolean isUncertainDirectionValid)
          设施网络路径分析,即根据给定的起始和终止结点 ID,查找其间耗费最小的路径,返回该路径包含的弧段、结点及耗费。
 FacilityAnalystResult findPathUpFromEdge(int edgeID, java.lang.String weightName, boolean isUncertainDirectionValid)
          设施网络上游路径分析,根据给定的弧段 ID,查询该弧段上游耗费最小的路径,返回该路径包含的弧段、结点及耗费。
 FacilityAnalystResult findPathUpFromNode(int nodeID, java.lang.String weightName, boolean isUncertainDirectionValid)
          设施网络上游路径分析,根据给定的结点 ID,查询该结点上游耗费最小的路径,返回该路径包含的弧段、结点及耗费。
 FacilityAnalystResult findSinkFromEdge(int edgeID, java.lang.String weightName, boolean isUncertainDirectionValid)
          根据给定的弧段 ID 查找汇,即从给定弧段出发,根据流向查找流出该弧段的下游汇点,并返回给定弧段到达该汇的最小耗费路径所包含的弧段、结点及耗费。
 FacilityAnalystResult findSinkFromNode(int nodeID, java.lang.String weightName, boolean isUncertainDirectionValid)
          根据给定的结点 ID 查找汇,即从给定结点出发,根据流向查找流出该结点的下游汇点,并返回给定结点到达该汇的最小耗费路径所包含的弧段、结点及耗费。
 FacilityAnalystResult findSourceFromEdge(int edgeID, java.lang.String weightName, boolean isUncertainDirectionValid)
          根据给定的弧段 ID 查找源,即从给定弧段出发,根据流向查找流向该弧段的网络源头,并返回该源到达给定弧段的最小耗费路径所包含的弧段、结点及耗费。
 FacilityAnalystResult findSourceFromNode(int nodeID, java.lang.String weightName, boolean isUncertainDirectionValid)
          根据给定的结点 ID 查找源,即从给定结点出发,根据流向查找流向该结点的网络源头,并返回该源到达给定结点的最小耗费路径所包含的弧段、结点及耗费。
 int[] findUnconnectedEdgesFromEdges(int[] edgeIDs)
          根据给定的弧段 ID 数组,查找与这些弧段不相连通的弧段,返回弧段 ID 数组。
 int[] findUnconnectedEdgesFromNodes(int[] nodeIDs)
          根据给定的结点 ID 数组,查找与这些结点不相连通的弧段,返回弧段 ID 数组。
 FacilityAnalystSetting getAnalystSetting()
          返回设施网络分析的环境。
 boolean load()
          根据设施网络分析环境设置加载设施网络模型。
 void setAnalystSetting(FacilityAnalystSetting facilityAnalystSetting)
          设置设施网络分析的环境。
 FacilityAnalystResult traceDownFromEdge(int edgeID, java.lang.String weightName, boolean isUncertainDirectionValid)
          根据给定的弧段 ID 进行下游追踪,即查找给定弧段的下游,返回下游包含的弧段、结点及总耗费。
 FacilityAnalystResult traceDownFromNode(int nodeID, java.lang.String weightName, boolean isUncertainDirectionValid)
          根据给定的结点 ID 进行下游追踪,即查找给定结点的下游,返回下游包含的弧段、结点及总耗费。
 FacilityAnalystResult traceUpFromEdge(int edgeID, java.lang.String weightName, boolean isUncertainDirectionValid)
          根据给定的弧段 ID 进行上游追踪,即查找给定弧段的上游,返回上游包含的弧段、结点及总耗费。
 FacilityAnalystResult traceUpFromNode(int nodeID, java.lang.String weightName, boolean isUncertainDirectionValid)
          根据给定的结点 ID 进行上游追踪,即查找给定结点的上游,返回上游包含的弧段、结点及总耗费。
 
从类 java.lang.Object 继承的方法
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

FacilityAnalyst

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

方法详细信息

getAnalystSetting

public FacilityAnalystSetting getAnalystSetting()
返回设施网络分析的环境。

设施网络分析环境参数的设置,直接影响到设施网络分析的结果。设施网络分析所需要的参数包括:用于进行设施网络分析的数据集( 即建立了流向的网络数据集或者同时建立了流向和等级的网络数据集,也就是说该方法对应的 FacilityAnalystSetting 类对象的 setNetworkDataset() 方法所指定的网络数据集必须有流向或者流向和等级信息)、结点 ID 字段、弧段 ID 字段、弧段起始结点 ID 字段、弧段终止结点 ID 字段、权值信息、点到弧段的距离容限、障碍结点、障碍弧段、流向等。有关设施网络分析环境参数的设置,请参见 FacilityAnalystSetting 类。

返回:
设施网络分析的环境。
另请参见:
FacilityAnalystSetting
默认值:
默认值为一个新构造的 FacilityAnalystSetting 对象。

setAnalystSetting

public void setAnalystSetting(FacilityAnalystSetting facilityAnalystSetting)
设置设施网络分析的环境。

设施网络分析环境参数的设置,直接影响到设施网络分析的结果。设施网络分析所需要的参数包括:用于进行设施网络分析的数据集( 即建立了流向的网络数据集或者同时建立了流向和等级的网络数据集,也就是说该方法对应的 FacilityAnalystSetting 类对象的 setNetworkDataset() 方法所指定的网络数据集必须有流向或者流向和等级信息)、结点 ID 字段、弧段 ID 字段、弧段起始结点 ID 字段、弧段终止结点 ID 字段、权值信息、点到弧段的距离容限、障碍结点、障碍弧段、流向等。有关设施网络分析环境参数的设置,请参见 FacilityAnalystSetting 类。

参数:
facilityAnalystSetting - 设施网络分析环境参数。
另请参见:
FacilityAnalystSetting

load

public boolean load()
根据设施网络分析环境设置加载设施网络模型。

该方法根据设施网络分析环境设置(FacilityAnalystSetting )对象中的环境参数,加载网络模型。在设置好设施网络分析环境的参数后,只有调用该方法,所做的设施网络分析环境设置才会在设施网络分析的过程中生效。

注意:

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

返回:
一个布尔值,用于指示加载设施网络模型是否成功。如果成功返回 true,否则返回 false。
示例:
请参见 CheckLoops 方法的示例。

findLoopsFromNodes

public int[] findLoopsFromNodes(int[] nodeIDs)
根据给定的结点 ID 数组查找与这些结点相连通的环路,返回构成环路的弧段 ID 数组。

设施网络中,两条或两条以上流向值为 2(即不确定流向)的弧段构成的闭合路径,称为环路。详细内容请参阅 checkLoops 方法的介绍。

参数:
nodeIDs - 指定的结点 ID 数组。
返回:
与给定结点相连通的环路的弧段 ID 数组。
示例:
请参见 findLoopsFromNodes 方法的示例。

findLoopsFromEdges

public int[] findLoopsFromEdges(int[] edgeIDs)
根据给定的弧段 ID 数组查找与这些弧段相连通的环路,返回构成环路的弧段 ID 数组。

设施网络中,两条或两条以上流向值为 2(即不确定流向)的弧段构成的闭合路径,称为环路。详细内容请参阅 checkLoops 方法的介绍。

参数:
edgeIDs - 指定的弧段 ID 数组。
返回:
与给定弧段相连通的环路的弧段 ID 数组。
示例:
以下代码示范了如何查找与给定的弧段或结点相连通的环路。假设下面函数操作的网络数据集为安装目录\SampleData\changchun \下的 changchun.udb 数据源中的名为 RoadNet 的网络数据集,并且已经为该网络数据集建立了流向以及等级。 有关建立网络数据集的流向及等级,请参见 buildFacilityNetworkDirections 方法的示例。
 public void FindLoopsFrom(DatasetVector networkDataset) {
        // 设置用于设施网络分析的环境
        FacilityAnalystSetting facilityAnalystSetting = new FacilityAnalystSetting();
        facilityAnalystSetting.setNetworkDataset(networkDataset);
        facilityAnalystSetting.setDirectionField("Direction");
        facilityAnalystSetting.setEdgeIDField("SmID");
        facilityAnalystSetting.setNodeIDField("SmNodeID");
        facilityAnalystSetting.setFNodeIDField("SmFNode");
        facilityAnalystSetting.setTNodeIDField("SmTNode");
        facilityAnalystSetting.setTolerance(0.0015);
        WeightFieldInfo weightFieldInfo = new WeightFieldInfo();
        weightFieldInfo.setName("Length");
        weightFieldInfo.setFTWeightField("SmLength");
        weightFieldInfo.setTFWeightField("SmLength");
        WeightFieldInfos weightFieldInfos = new WeightFieldInfos();
        weightFieldInfos.add(weightFieldInfo);
        facilityAnalystSetting.setWeightFieldInfos(weightFieldInfos);
        FacilityAnalyst facilityAnalyst = new FacilityAnalyst();
        facilityAnalyst.setAnalystSetting(facilityAnalystSetting);
        facilityAnalyst.load();
 
        // 获取参与分析的弧段或结点
        int[] edgeIDs = new int[] { 3855, 9073 };
        int[] nodeIDs = new int[] { 2996, 2682 };
 
        // 查找与给定弧段相连通的环路
        int[] loopsFromEdges = facilityAnalyst.findLoopsFromEdges(edgeIDs);
 
        // 查找与给定结点相连通的环路
        int[] loopsFromNodes = facilityAnalyst.findLoopsFromNodes(nodeIDs);
 }
 

findConnectedEdgesFromNodes

public int[] findConnectedEdgesFromNodes(int[] nodeIDs)
根据给定的结点 ID 数组,查找与这些结点相连通弧段,返回弧段 ID 数组。

在现实生活中,点与点之间并不总是连通的,如果我们想要知道哪些点之间是连通的,哪些点之间不连通,就可以使用连通性分析功能。 连通性分析的最大特点是不需要考虑网络阻力值的大小(禁止通行除外),网络上的结点和弧段只有连通和不连通之分。禁止通行可以通过设置障碍点和障碍边实现。

如下图所示,绿色部分是与分析结点相连通的弧段与结点,它们中的每一个都通过其他结点或弧段连接到分析结点;灰色部分的网络中的弧段与结点, 无法连接到分析结点,因此与分析结点是不连通的。

该方法用于查找与给定结点相连通的弧段,查找出连通弧段后,可根据网络拓扑关系,即弧段的起始结点、终止结点查询出相应的连通结点。

应用实例

在进行污染源调查的事件中,经过分析和判断之后发现可疑污染源的位置,可以通过查找连通弧段功能找出与可疑的污染源点相连的水路, 以方便监测船沿路监测污染物含量。

参数:
nodeIDs - 指定的结点 ID 数组。
返回:
弧段 ID 数组。
示例:
以下代码示范了如何查找与给定结点或弧段相连通或不相连通的弧段。假设下面函数操作的网络数据集为安装目录\SampleData\changchun \下的 changchun.udb 数据源中的名为 RoadNet 的网络数据集,并且已经为该网络数据集建立了流向以及等级。 有关建立网络数据集的流向及等级,请参见 buildFacilityNetworkDirections 方法的示例。
 {
        // 设置用于设施网络分析的环境
        FacilityAnalystSetting facilityAnalystSetting = new FacilityAnalystSetting();
        facilityAnalystSetting.setNetworkDataset(networkDataset);
        facilityAnalystSetting.setDirectionField("Direction");
        facilityAnalystSetting.setEdgeIDField("SmID");
        facilityAnalystSetting.setNodeIDField("SmNodeID");
        facilityAnalystSetting.setFNodeIDField("SmFNode");
        facilityAnalystSetting.setTNodeIDField("SmTNode");
        facilityAnalystSetting.setTolerance(0.0015);
        WeightFieldInfo weightFieldInfo = new WeightFieldInfo();
        weightFieldInfo.setName("Length");
        weightFieldInfo.setFTWeightField("SmLength");
        weightFieldInfo.setTFWeightField("SmLength");
        WeightFieldInfos weightFieldInfos = new WeightFieldInfos();
        weightFieldInfos.add(weightFieldInfo);
        facilityAnalystSetting.setWeightFieldInfos(weightFieldInfos);
        FacilityAnalyst facilityAnalyst = new FacilityAnalyst();
        facilityAnalyst.setAnalystSetting(facilityAnalystSetting);
        facilityAnalyst.load();
 
        // 获取参与分析的弧段或结点
        int[] edgeIDs = new int[] { 3855, 9073 };
        int[] nodeIDs = new int[] { 2996, 2682 };
 
        // 查找与给定弧段相连通和不相连通的弧段
        int[] connectEdges = facilityAnalyst.findConnectedEdgesFromEdges(edgeIDs);
        int[] unconnectEdges = facilityAnalyst
                        .findUnconnectedEdgesFromEdges(edgeIDs);
 
        // 查找与给定的结点相连通和不相连通的弧段
        int[] connectNodes = facilityAnalyst.findConnectedEdgesFromNodes(nodeIDs);
        int[] unconnectNodes = facilityAnalyst
                        .findUnconnectedEdgesFromNodes(nodeIDs);
 }
 

findConnectedEdgesFromEdges

public int[] findConnectedEdgesFromEdges(int[] edgeIDs)
根据给定的弧段 ID 数组,查找与这些弧段相连通的弧段,返回弧段 ID 数组。

该方法用于查找与给定弧段相连通的弧段,查找出连通弧段后,可根据网络拓扑关系,即弧段的起始结点、终止结点查询出相应的连通结点。

有关网络连通性的更多介绍,请参见 findConnectedEdgesFromNodes 方法。

参数:
edgeIDs - 指定的弧段 ID 数组。
返回:
弧段 ID 数组。
示例:
请参见 findConnectedEdgesFromNodes 方法的示例。

findUnconnectedEdgesFromNodes

public int[] findUnconnectedEdgesFromNodes(int[] nodeIDs)
根据给定的结点 ID 数组,查找与这些结点不相连通的弧段,返回弧段 ID 数组。

该方法用于查找与给定结点不连通的弧段,查找出连通弧段后,可根据网络拓扑关系,即弧段的起始结点、终止结点查询出相应的不连通结点。

有关网络连通性的更多介绍,请参见 findConnectedEdgesFromNodes 方法。

参数:
nodeIDs - 指定的结点 ID 数组。
返回:
弧段 ID 数组。
示例:
请参见 findConnectedEdgesFromNodes 方法的示例。

findUnconnectedEdgesFromEdges

public int[] findUnconnectedEdgesFromEdges(int[] edgeIDs)
根据给定的弧段 ID 数组,查找与这些弧段不相连通的弧段,返回弧段 ID 数组。

该方法用于查找与给定弧段不连通的弧段,查找出连通弧段后,可根据网络拓扑关系,即弧段的起始结点、终止结点查询出相应的不连通结点。

有关网络连通性的更多介绍,请参见 findConnectedEdgesFromNodes 方法。

参数:
edgeIDs - 指定的弧段 ID 数组。
返回:
弧段 ID 数组。
示例:
请参见 findConnectedEdgesFromNodes 方法的示例。

checkLoops

public int[] checkLoops()
检查网络环路,返回构成环路的弧段 ID 数组。

设施网络中,环路是指两条或两条以上流向值为 2(即不确定流向)的弧段构成的闭合路径。这意味着环路必须同时满足以下两个条件:

  1. 是由至少两条弧段构成的闭合路径;
  2. 构成环路的弧段的流向均为 2,即不确定流向。有关流向请参阅 NetworkBuilder 类的 buildFacilityNetworkDirections 方法。

下图是设施网络的一部分,使用不同的符号显示网络弧段的流向。对该网络进行环路检查,检查出两个环路,即图中的红色闭合路径。而右上方有一条流向为 2 的弧段,由于它未与其他流向同样为 2 的弧段构成闭合路径,因此不是环路。

返回:
构成环路的弧段 ID 数组。
从以下版本开始:
SuperMap iObjects Java 7.0.0
示例:
以下代码示范了如何查找网络环路。假设下面函数操作的网络数据集为安装目录\SampleData\changchun\下的 changchun.udb 数据源中的名为 RoadNet 的网络数据集,并且已经为该网络数据集建立了流向。有关建立网络数据集的流向及等级,请参见 buildFacilityNetworkDirections 方法的示例。
 public void CheckLoops(DatasetVector networkDataset) {
        // 设置用于设施网络分析的环境
        FacilityAnalystSetting facilityAnalystSetting = new FacilityAnalystSetting();
        facilityAnalystSetting.setNetworkDataset(networkDataset);
        facilityAnalystSetting.setDirectionField("Direction");
        facilityAnalystSetting.setEdgeIDField("SmID");
        facilityAnalystSetting.setNodeIDField("SmNodeID");
        facilityAnalystSetting.setFNodeIDField("SmFNode");
        facilityAnalystSetting.setTNodeIDField("SmTNode");
        facilityAnalystSetting.setTolerance(0.0015);
        WeightFieldInfo weightFieldInfo = new WeightFieldInfo();
        weightFieldInfo.setName("Length");
        weightFieldInfo.setFTWeightField("SmLength");
        weightFieldInfo.setTFWeightField("SmLength");
        WeightFieldInfos weightFieldInfos = new WeightFieldInfos();
        weightFieldInfos.add(weightFieldInfo);
        facilityAnalystSetting.setWeightFieldInfos(weightFieldInfos);
        FacilityAnalyst facilityAnalyst = new FacilityAnalyst();
        facilityAnalyst.setAnalystSetting(facilityAnalystSetting);
        facilityAnalyst.load();
 
        // 调用方法查找网络环路
        int[] edgeIDs = facilityAnalyst.checkLoops();
 
        // 输出构成环路的弧段ID
        System.out.println("构成环路的弧段ID数组如下:");
        for (int i = 0; i < edgeIDs.length; i++) {
                System.out.println(edgeIDs[i]);
        }
 }
 

findPathFromNodes

public FacilityAnalystResult findPathFromNodes(int startNodeID,
                                               int endNodeID,
                                               java.lang.String weightName,
                                               boolean isUncertainDirectionValid)
设施网络路径分析,即根据给定的起始和终止结点 ID,查找其间耗费最小的路径,返回该路径包含的弧段、结点及耗费。

两结点间的最小耗费路径的查找过程为:从给定的起始结点出发,根据流向,查找到给定的终止结点的所有路径,然后从其中找出耗费最小的一条返回。

下图是两结点最小耗费路径的示意图。从起始结点 B 出发,沿着网络流向,有三条路径能够到达终止结点 P,分别为 B-D-L-P、B-C-G-I-J-K-P 和 E-E-F-H-M-N-O-P,其中路径 B-C-G-I-J-K-P 的耗费最小,为 105,因此该路径是结点 B 到 P 的最小耗费路径。

参数:
startNodeID - 指定的起始结点 ID。
endNodeID - 指定的终止结点 ID。
weightName - 指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合( setWeightFieldInfos)中某一个权值信息对象(WeightFieldInfo) 的名称(getName)。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
设施网络分析结果。
从以下版本开始:
SuperMap iObjects Java 7.0.0
示例:
以下代码示范了如何查找两个结点或弧段之间的最小耗费路径。假设下面函数操作的网络数据集为安装目录\SampleData\changchun \下的 changchun.udb 数据源中的名为 RoadNet 的网络数据集,并且已经为该网络数据集建立了流向以及等级。 有关建立网络数据集的流向及等级,请参见 buildFacilityNetworkDirections 方法的示例。
 public void findPathBetween(DatasetVector networkDataset) {
        // 设置用于设施网络分析的环境
        FacilityAnalystSetting facilityAnalystSetting = new FacilityAnalystSetting();
        facilityAnalystSetting.setNetworkDataset(networkDataset);
        facilityAnalystSetting.setDirectionField("Direction");
        facilityAnalystSetting.setEdgeIDField("SmID");
        facilityAnalystSetting.setNodeIDField("SmNodeID");
        facilityAnalystSetting.setFNodeIDField("SmFNode");
        facilityAnalystSetting.setTNodeIDField("SmTNode");
        facilityAnalystSetting.setTolerance(0.0015);
        WeightFieldInfo weightFieldInfo = new WeightFieldInfo();
        weightFieldInfo.setName("Length");
        weightFieldInfo.setFTWeightField("SmLength");
        weightFieldInfo.setTFWeightField("SmLength");
        WeightFieldInfos weightFieldInfos = new WeightFieldInfos();
        weightFieldInfos.add(weightFieldInfo);
        facilityAnalystSetting.setWeightFieldInfos(weightFieldInfos);
        FacilityAnalyst facilityAnalyst = new FacilityAnalyst();
        facilityAnalyst.setAnalystSetting(facilityAnalystSetting);
        facilityAnalyst.load();
 
        // 获取参与分析的弧段或结点
        int startEdgeID = 3855;
        int endEdgeID = 7887;
        int startNodeID = 2996;
        int endNodeID = 4239;
 
        // 查找两个弧段间的最小耗费路径
        FacilityAnalystResult PathLeastE = facilityAnalyst.findPathFromEdges(
                        startEdgeID, endEdgeID, "Length", true);
        // 查找两个结点间的最小耗费路径
        FacilityAnalystResult PathLeastN = facilityAnalyst.findPathFromNodes(
                        startNodeID, endNodeID, "Length", true);
 }
 

findPathFromEdges

public FacilityAnalystResult findPathFromEdges(int startEdgeID,
                                               int endEdgeID,
                                               java.lang.String weightName,
                                               boolean isUncertainDirectionValid)
设施网络路径分析,即根据给定的起始和终止弧段 ID,查找其间耗费最小的路径,返回该路径包含的弧段、结点及耗费。

两弧段间的最小耗费路径的查找过程为:从给定的起始弧段出发,根据流向,查找到给定的终止弧段的所有路径,然后从其中找出耗费最小的一条返回。请参阅 findPathFromNodes 方法以获得更多有关“设施网络路径分析”的介绍,该方法用于查找两结点间的最小耗费路径。

注意:如果指定的待分析弧段的流向值为 2,即不确定流向,则分析结果返回 null。

参数:
startEdgeID - 指定的起始弧段 ID。
endEdgeID - 指定的终止弧段 ID。
weightName - 指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合( setWeightFieldInfos)中某一个权值信息对象(WeightFieldInfo) 的名称(getName)。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
设施网络分析结果。
示例:
请参见 findPathFromNodes 方法的示例。

findPathUpFromNode

public FacilityAnalystResult findPathUpFromNode(int nodeID,
                                                java.lang.String weightName,
                                                boolean isUncertainDirectionValid)
设施网络上游路径分析,根据给定的结点 ID,查询该结点上游耗费最小的路径,返回该路径包含的弧段、结点及耗费。

有关“上游”的介绍,请参阅 traceUpFromNode 方法。

上游最小耗费路径的查找过程可以理解为:从给定结点(或弧段)出发,根据流向,查找出该结点(或弧段)的所有上游路径,然后从其中找出耗费最小的一条返回。 该方法用于查找给定结点的上游最小耗费路径。

下图是一个简单的设施网络,在网络弧段上使用箭头标示了网络的流向,在弧段旁标注了权值。对于分析结点 I 进行上游最小耗费路径分析。首先从结点 I 出发,根据流向向上回溯,找出结点 I 的所有上游路径,共有 6 条,包括:E-F-I、A-F-I、B-G-J-I、D-G-J-I、C-G-J-I 和 H-J-I,然后根据网络阻力(即权值)计算这些路径的耗费,可以得出 E-F-I 这条路径的耗费最小,为 8.2,因此,结点 I 的上游最小耗费路径就是 E-F-I。

参数:
nodeID - 指定的结点 ID。
weightName - 指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合( setWeightFieldInfos)中某一个权值信息对象(WeightFieldInfo) 的名称(getName)。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
设施网络分析结果。
从以下版本开始:
SuperMap iObjects Java 7.0.0
示例:
请参见 findPathDownFromNode 方法的示例。

findPathUpFromEdge

public FacilityAnalystResult findPathUpFromEdge(int edgeID,
                                                java.lang.String weightName,
                                                boolean isUncertainDirectionValid)
设施网络上游路径分析,根据给定的弧段 ID,查询该弧段上游耗费最小的路径,返回该路径包含的弧段、结点及耗费。

有关“上游”的介绍,请参阅 traceUpFromNode 方法。

上游最小耗费路径的查找过程可以理解为:从给定结点(或弧段)出发,根据流向,查找出该结点(或弧段)的所有上游路径,然后从其中找出耗费最小的一条返回。 该方法用于查找给定弧段的上游最小耗费路径。

请参阅 findPathUpFromNode 方法,以获得更多关于“上游最小耗费路径”的介绍。

注意:如果指定的待分析弧段的流向值为 2,即不确定流向,则分析结果返回 null。

参数:
edgeID - 指定的弧段 ID。
weightName - 指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合( setWeightFieldInfos)中某一个权值信息对象(WeightFieldInfo) 的名称(getName)。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
设施网络分析结果。
从以下版本开始:
SuperMap iObjects Java 7.0.0
示例:
请参见 findPathDownFromNode 方法的示例。

findPathDownFromNode

public FacilityAnalystResult findPathDownFromNode(int nodeID,
                                                  java.lang.String weightName,
                                                  boolean isUncertainDirectionValid)
设施网络下游路径分析,根据给定的参与分析的结点 ID,查询该结点下游耗费最小的路径,返回该路径包含的弧段、结点及耗费。

有关“下游”的介绍,请参阅 traceUpFromNode 方法。

下游最小耗费路径的查找过程可以理解为:从给定结点(或弧段)出发,根据流向,查找出该结点(或弧段)的所有下游路径,然后从其中找出耗费最小的一条返回。 该方法用于查找给定结点的下游最小耗费路径。

下图是一个简单的设施网络,在网络弧段上使用箭头标示了网络的流向,在弧段旁标注了权值。对于分析结点 H 进行下游最小耗费路径分析。首先从结点 H 出发,根据流向向下查找,找出结点 H 的所有下游路径,共有 4 条,包括:H-L-G、H-L-K、H-M-S 和 H-M-Q-R,然后根据网络阻力(即权值)计算这些路径的耗费,可以得出 H-L-K 这条路径的耗费最小,为 11.1,因此,结点 H 的下最小耗费路径就是 H-L-K。

参数:
nodeID - 指定的结点 ID。
weightName - 指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合( setWeightFieldInfos)中某一个权值信息对象(WeightFieldInfo) 的名称(getName)。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
设施网络分析结果。
从以下版本开始:
SuperMap iObjects Java 7.0.0
示例:
以下代码示范了如何查找给定弧段或结点的下游或上游耗费最小的路径。假设下面函数操作的网络数据集为安装目录\SampleData\changchun \下的 changchun.udb 数据源中的名为 RoadNet 的网络数据集,并且已经为该网络数据集建立了流向以及等级。 有关建立网络数据集的流向及等级,请参见 NetworkBuilder.buildFacilityNetworkDirections 的方法。
 public void findPathDownandUp(DatasetVector networkDataset) {
        // 设置用于设施网络分析的环境
        FacilityAnalystSetting facilityAnalystSetting = new FacilityAnalystSetting();
        facilityAnalystSetting.setNetworkDataset(networkDataset);
        facilityAnalystSetting.setDirectionField("Direction");
        facilityAnalystSetting.setEdgeIDField("SmID");
        facilityAnalystSetting.setNodeIDField("SmNodeID");
        facilityAnalystSetting.setFNodeIDField("SmFNode");
        facilityAnalystSetting.setTNodeIDField("SmTNode");
        facilityAnalystSetting.setTolerance(0.0015);
        WeightFieldInfo weightFieldInfo = new WeightFieldInfo();
        weightFieldInfo.setName("Length");
        weightFieldInfo.setFTWeightField("SmLength");
        weightFieldInfo.setTFWeightField("SmLength");
        WeightFieldInfos weightFieldInfos = new WeightFieldInfos();
        weightFieldInfos.add(weightFieldInfo);
        facilityAnalystSetting.setWeightFieldInfos(weightFieldInfos);
        FacilityAnalyst facilityAnalyst = new FacilityAnalyst();
        facilityAnalyst.setAnalystSetting(facilityAnalystSetting);
        facilityAnalyst.load();
 
        // 获取参与分析的结点
        int nodeID = 2996;
 
        // 查找给定结点的上游和下游弧段数最小耗费路径
        FacilityAnalystResult PathUpLeast = facilityAnalyst.findPathUpFromNode(
                        nodeID, "Length", true);
        FacilityAnalystResult PathDownLeast = facilityAnalyst.findPathDownFromNode(
                        nodeID, "Length", true);
 }
 

findPathDownFromEdge

public FacilityAnalystResult findPathDownFromEdge(int edgeID,
                                                  java.lang.String weightName,
                                                  boolean isUncertainDirectionValid)
设施网络下游路径分析,根据给定的参与分析的弧段 ID,查询该弧段下游耗费最小的路径,返回该路径包含的弧段、结点及耗费。

有关“下游”的介绍,请参阅 traceUpFromNode 方法。

下游最小耗费路径的查找过程可以理解为:从给定结点(或弧段)出发,根据流向,查找出该结点(或弧段)的所有下游路径,然后从其中找出耗费最小的一条返回。 该方法用于查找给定弧段的下游最小耗费路径。

请参阅 findPathDownFromNode 方法,以获得更多关于“下游最小耗费路径”的介绍。

注意:如果指定的待分析弧段的流向值为 2,即不确定流向,则分析结果返回 null。

参数:
edgeID - 指定的弧段 ID。
weightName - 指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合( setWeightFieldInfos)中某一个权值信息对象(WeightFieldInfo) 的名称(getName)。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
设施网络分析结果。
从以下版本开始:
SuperMap iObjects Java 7.0.0
示例:
请参见 #findPathDownFromNode(int, String, boolean) findPathDownFromNode} 方法的示例。

findCommonAncestorsFromEdges

public int[] findCommonAncestorsFromEdges(int[] edgeIDs,
                                          boolean isUncertainDirectionValid)
根据给定的弧段 ID 数组,查找这些弧段的共同上游弧段,返回弧段 ID 数组。

有关“上游”的介绍,请参阅 traceUpFromNode 方法。

共同上游是指多个结点(或弧段)的公共上游网络。该方法用于查找多条弧段的共同上游弧段,即取这些弧段的各自上游弧段的交集部分,结果返回这些弧段的弧段 ID。

请参阅 findCommonAncestorsFromNodes 方法获得更多关于“查找共同上游弧段”的介绍。

参数:
edgeIDs - 指定的弧段 ID 数组。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
给定弧段的共同上游的弧段 ID 数组。
示例:
请参见 findCommonAncestorsFromNodes 方法的示例。

findCommonAncestorsFromNodes

public int[] findCommonAncestorsFromNodes(int[] nodeIDs,
                                          boolean isUncertainDirectionValid)
根据给定的结点 ID 数组,查找这些结点的共同上游弧段,返回弧段 ID 数组。

有关“上游”的介绍,请参阅 traceUpFromNode 方法。

共同上游是指多个结点(或弧段)的公共上游网络。该方法用于查找多个结点的共同上游弧段,即取这些结点的各自上游弧段的交集部分,结果返回这些弧段的弧段 ID。

如下图所示,流向如图中的箭头所示的方向,前两幅图分别是对结点 1 和结点 2 进行上游追踪的结果,查找出各自的上游弧段(绿色),第三幅图则是对结点 1 和结点 2 查找共同上游弧段(橙色),容易看出,结点 1 和结点 2 的共同上游弧段,就是它们各自的上游弧段的交集。

参数:
nodeIDs - 给定的结点 ID 数组。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
弧段 ID 数组。
从以下版本开始:
SuperMap iObjects Java 7.0.0
示例:
以下代码示范了如何查找给定弧段或结点的共同上游或共同下游。假设下面函数操作的网络数据集为安装目录\SampleData\changchun \下的 changchun.udb 数据源中的名为 RoadNet 的网络数据集,并且已经为该网络数据集建立了流向以及等级。有关建立网络数据集的流向及等级,请参见 buildFacilityNetworkDirections 方法的示例。
 public void FindCommonAncestorsandCatchementsEdges(DatasetVector networkDataset) {
        // 设置用于设施网络分析的环境
        FacilityAnalystSetting facilityAnalystSetting = new FacilityAnalystSetting();
        facilityAnalystSetting.setNetworkDataset(networkDataset);
        facilityAnalystSetting.setDirectionField("Direction");
        facilityAnalystSetting.setEdgeIDField("SmID");
        facilityAnalystSetting.setNodeIDField("SmNodeID");
        facilityAnalystSetting.setFNodeIDField("SmFNode");
        facilityAnalystSetting.setTNodeIDField("SmTNode");
        facilityAnalystSetting.setTolerance(0.0015);
        WeightFieldInfo weightFieldInfo = new WeightFieldInfo();
        weightFieldInfo.setName("Length");
        weightFieldInfo.setFTWeightField("SmLength");
        weightFieldInfo.setTFWeightField("SmLength");
        WeightFieldInfos weightFieldInfos = new WeightFieldInfos();
        weightFieldInfos.add(weightFieldInfo);
        facilityAnalystSetting.setWeightFieldInfos(weightFieldInfos);
        FacilityAnalyst facilityAnalyst = new FacilityAnalyst();
        facilityAnalyst.setAnalystSetting(facilityAnalystSetting);
        facilityAnalyst.load();
 
        // 获取参与分析的弧段或结点
        int[] edgeIDs = new int[] { 3855, 9073 };
        int[] nodeIDs = new int[] { 2996, 2682 };
 
        // 查找给定弧段的共同上游弧段和共同上游弧段
        int[] commonAncestorsofEdges = facilityAnalyst
                        .findCommonAncestorsFromEdges(edgeIDs, false);
        int[] commonCatchmentsofEdges = facilityAnalyst
                        .findCommonCatchmentsFromEdges(edgeIDs, false);
 
        // 查找给定结点的共同上游弧段和共同上游弧段
        int[] commonAncestorsofNodes = facilityAnalyst
                        .findCommonAncestorsFromNodes(nodeIDs, false);
        int[] commonCatchementsofNodes = facilityAnalyst
                        .findCommonCatchmentsFromNodes(nodeIDs, false);
 }
 

findCommonCatchmentsFromNodes

public int[] findCommonCatchmentsFromNodes(int[] nodeIDs,
                                           boolean isUncertainDirectionValid)
根据指定的结点 ID 数组,查找这些结点的共同下游弧段,返回弧段 ID 数组。

有关“下游”的介绍,请参阅 traceUpFromNode 方法。

共同下游是指多个结点(或弧段)的公共下游网络。该方法用于查找多个结点的共同下游弧段,即取这些结点的各自下游弧段的交集部分,结果返回这些弧段的弧段 ID。

如下图所示,流向如图中的箭头所示的方向,前两幅图分别是对结点 1 和结点 2 进行下游追踪的结果,查找出各自的下游弧段(绿色),第三幅图则是对结点 1 和结点 2 查找共同下游弧段(橙色),容易看出,结点 1 和结点 2 的共同下游弧段,就是它们各自的下游弧段的交集。

参数:
nodeIDs - 指定的结点 ID 数组。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
给定结点的共同下游的弧段 ID 数组。
从以下版本开始:
SuperMap iObjects Java 7.0.0
示例:
请参见 findCommonAncestorsFromNodes 方法的示例。

findCommonCatchmentsFromEdges

public int[] findCommonCatchmentsFromEdges(int[] edgeIDs,
                                           boolean isUncertainDirectionValid)
根据给定的弧段 ID 数组,查找这些弧段的共同下游弧段,返回弧段 ID 数组。

有关“下游”的介绍,请参阅 traceUpFromNode 方法。

共同下游是指多个结点(或弧段)的公共下游网络。该方法用于查找多条弧段的共同下游弧段,即取这些弧段的各自下游弧段的交集部分,结果返回这些弧段的弧段 ID。

请参阅 findCommonCatchmentsFromNodes 方法获得更多关于“查找共同下游弧段”的介绍。

参数:
edgeIDs - 指定的弧段 ID 数组。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
给定弧段的共同下游的弧段 ID 数组。
从以下版本开始:
SuperMap iObjects Java 7.0.0
示例:
请参见 findCommonAncestorsFromNodes 方法的示例。

findSinkFromNode

public FacilityAnalystResult findSinkFromNode(int nodeID,
                                              java.lang.String weightName,
                                              boolean isUncertainDirectionValid)
根据给定的结点 ID 查找汇,即从给定结点出发,根据流向查找流出该结点的下游汇点,并返回给定结点到达该汇的最小耗费路径所包含的弧段、结点及耗费。

该方法从给定结点出发,按照流向,查找流出该结点的下游汇点,分析的结果为该结点到达查找到的汇的最小耗费路径所包含的弧段、结点及耗费。 如果网络中有多个汇,将查找最远的也就是从给定结点出发最小耗费最大的那个汇。为了便于理解,可将该功能的实现过程分为三步:

  1. 从给定结点出发,根据流向,找到该结点下游所有的汇点;
  2. 分析给定结点到每个汇的最小耗费路径并计算耗费;
  3. 选择上一步中计算出的耗费中的最大值所对应的路径作为结果,给出该路径上的弧段 ID 数组、结点 ID 数组以及该路径的耗费。

注意:分析结果中的结点 ID 数组不包括分析结点本身。

下图是一个简单的设施网络,在网络弧段上使用箭头标示了网络的流向,在弧段旁标注了权值。对于分析结点 D 进行查找汇分析。可以知道,从 结点 D 出发,根据流向向下查找,共有 4 个汇,从结点 D 到达汇的最小耗费路径分别为:E-H-L-G、E-H-L-K、E-H-M-S 和 E-H-M-Q-R,根据网络阻力,也就是弧段权值,可以计算得出 E-H-M-Q-R 这条路径的耗费最大,为 16.6,因此,结点 R 就是查找到的汇。

参数:
nodeID - 指定的参与分析的结点 ID。
weightName - 指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合( setWeightFieldInfos)中某一个权值信息对象(WeightFieldInfo) 的名称(getName)。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
设施网络分析结果。
从以下版本开始:
SuperMap iObjects Java 7.0.0
示例:
请参见 findSourceFromNode 方法的示例。

findSinkFromEdge

public FacilityAnalystResult findSinkFromEdge(int edgeID,
                                              java.lang.String weightName,
                                              boolean isUncertainDirectionValid)
根据给定的弧段 ID 查找汇,即从给定弧段出发,根据流向查找流出该弧段的下游汇点,并返回给定弧段到达该汇的最小耗费路径所包含的弧段、结点及耗费。

该方法从给定弧段出发,按照流向,查找流出该弧段的下游汇点,分析的结果为该弧段到达查找到的汇的最小耗费路径所包含的弧段、结点及耗费。 如果网络中有多个汇,将查找最远的也就是从给定弧段出发最小耗费最大的那个汇。为了便于理解,可将该功能的实现过程分为三步:

  1. 从给定弧段出发,根据流向,找到该弧段下游所有的汇点;
  2. 分析给定弧段到每个汇的最小耗费路径并计算耗费;
  3. 选择上一步中计算出的耗费中的最大值所对应的路径作为结果,给出该路径上的弧段 ID 数组、结点 ID 数组以及该路径的耗费。

注意:分析结果中的弧段 ID 数组不包括分析弧段本身。

更多介绍还可参阅 findSinkFromNode 方法,该方法根据给定的结点 ID 查找汇。

参数:
edgeID - 指定的弧段 ID。
weightName - 指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合( setWeightFieldInfos)中某一个权值信息对象(WeightFieldInfo) 的名称(getName)。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
设施网络分析结果。
从以下版本开始:
SuperMap iObjects Java 7.0.0
示例:
请参见 findSourceFromNode 方法的示例。

findSourceFromNode

public FacilityAnalystResult findSourceFromNode(int nodeID,
                                                java.lang.String weightName,
                                                boolean isUncertainDirectionValid)
根据给定的结点 ID 查找源,即从给定结点出发,根据流向查找流向该结点的网络源头,并返回该源到达给定结点的最小耗费路径所包含的弧段、结点及耗费。

该方法从给定结点出发,按照流向,查找流向该结点的网络源头结点(即源点),分析的结果为查找到的源到达给定结点的最小耗费路径所包含的弧段、结点及耗费。 如果网络中有多个源,将查找最远的也就是到达给定结点的最小耗费最大的那个源。为了便于理解,可将该功能的实现过程分为三步:

  1. 从给定结点出发,根据流向,找到该结点上游所有的源点;
  2. 分析每个源到达给定结点的最小耗费路径并计算耗费;
  3. 选择上一步中计算出的耗费中的最大值所对应的路径作为结果,给出该路径上的弧段 ID 数组、结点 ID 数组以及该路径的耗费。

注意:分析结果中的结点 ID 数组不包括分析结点本身。

下图是一个简单的设施网络,在网络弧段上使用箭头标示了网络的流向,在弧段旁标注了权值。对于分析结点 M 进行查找源分析。可以知道,从 结点 M 出发,根据流向向上回溯,共有 7 个源,从源到结点 M 的最小耗费路径分别为:C-H-M、A-E-H-M、B-D-E-H-M、F-D-E-H-M、J-N-M、I-N-M 和 P-N-M,根据网络阻力,也就是弧段权值,可以计算得出 B-D-E-H-M 这条路径的耗费最大,为 18.4,因此,结点 B 就是查找到的源。

参数:
nodeID - 指定的结点 ID。
weightName - 指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合( setWeightFieldInfos)中某一个权值信息对象(WeightFieldInfo) 的名称(getName)。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
设施网络分析结果。
从以下版本开始:
SuperMap iObjects Java 7.0.0
示例:
以下代码示范了如何根据给定的结点或弧段查找源和汇。本例使用示范数据中的“FacilityNet.udb”数据源进行分析,该数据源中存在一个名为 “WaterNet”的网络数据集,以弧段 ID 为 336 的弧段和结点 ID 为 311 的结点为例,示范如何查找源和汇。
 /**
  * 根据给定的弧段 ID 或结点 ID 来查找源或汇。
  * 
  * @param datasource
  *            指定的网络数据集所在的数据源。
  */
 private void findSourceOrSinkExample(Datasource datasource) {
        // 获取用于分析的网络数据集
        DatasetVector network = (DatasetVector) datasource.getDatasets().get(
                        "WaterNet");
 
        // 构造一个设施网络分析环境设置对象,并设置相关参数
        FacilityAnalystSetting facilityAnalystSetting = new FacilityAnalystSetting();
        facilityAnalystSetting.setNetworkDataset(network);
        facilityAnalystSetting.setDirectionField("direction");
        facilityAnalystSetting.setEdgeIDField("SMEDGEID");
        facilityAnalystSetting.setNodeIDField("SMNODEID");
        facilityAnalystSetting.setFNodeIDField("SMFNODE");
        facilityAnalystSetting.setTNodeIDField("SMTNODE");
        facilityAnalystSetting.setTolerance(0.001);
 
        WeightFieldInfo weightFieldInfo = new WeightFieldInfo();
        weightFieldInfo.setName("Length");
        weightFieldInfo.setFTWeightField("SMLENGTH");
        weightFieldInfo.setTFWeightField("SMLENGTH");
        WeightFieldInfos weightFieldInfos = new WeightFieldInfos();
        weightFieldInfos.add(weightFieldInfo);
        facilityAnalystSetting.setWeightFieldInfos(weightFieldInfos);
 
        // 障碍结点和障碍弧段的设置对查找源/汇是有效的
        facilityAnalystSetting.setBarrierEdges(new int[] { 8, 199 });
        facilityAnalystSetting.setBarrierNodes(new int[] { 372 });
 
        // 构造一个设施网络分析对象,并设置设施网络分析环境
        FacilityAnalyst facilityAnalyst = new FacilityAnalyst();
        facilityAnalyst.setAnalystSetting(facilityAnalystSetting);
 
        // 加载网络模型
        Boolean isLoad = facilityAnalyst.load();
 
        if (isLoad) {
                // 获取参与分析的弧段或结点 ID
                int edgeID = 336;
                int nodeID = 311;
 
                // 根据给定弧段查找源
                FacilityAnalystResult resultSourceFromEdge = facilityAnalyst
                                .findSourceFromEdge(edgeID, "Length", true);
                if (resultSourceFromEdge != null) {
                        System.out.println("从弧段" + edgeID + "到源的耗费为"
                                        + resultSourceFromEdge.getCost);
                        System.out.println("从弧段" + edgeID + "到源的弧段 ID 包括:");
                        for (int i = 0; i < resultSourceFromEdge.getEdges.Length; i++) {
                                System.out.println(resultSourceFromEdge.getEdges[i]);
                        }
                        System.out.println("从弧段" + edgeID + "到源的结点 ID 包括:");
                        for (int i = 0; i < resultSourceFromEdge.getNodes.Length; i++) {
                                System.out.println(resultSourceFromEdge.getNodes[i]);
                        }
                }
                // 根据给定结点查找源(略,参考“根据给定弧段查找源”)
 
                // 根据给定结点查找汇
                FacilityAnalystResult resultSinkFromNode = facilityAnalyst
                                .findSinkFromNode(nodeID, "Length", true);
                if (resultSinkFromNode != null) {
                        System.out.println("从结点" + nodeID + "到汇的耗费为"
                                        + resultSinkFromNode.getCost);
                        System.out.println("从结点" + nodeID + "到汇的弧段 ID 包括:");
                        for (int i = 0; i < resultSinkFromNode.getEdges.Length; i++) {
                                System.out.println(resultSinkFromNode.getEdges[i]);
                        }
                        System.out.println("从结点" + nodeID + "到汇的结点 ID 包括:");
                        for (int i = 0; i < resultSinkFromNode.getNodes.Length; i++) {
                                System.out.println(resultSinkFromNode.getNodes[i]);
                        }
                }
                // 根据给定弧段查找汇(略,参考“根据给定结点查找汇”)
        }
 
        // 分析完毕,释放设施网络分析对象所占的资源
        facilityAnalyst.dispose();
 }
 

findSourceFromEdge

public FacilityAnalystResult findSourceFromEdge(int edgeID,
                                                java.lang.String weightName,
                                                boolean isUncertainDirectionValid)
根据给定的弧段 ID 查找源,即从给定弧段出发,根据流向查找流向该弧段的网络源头,并返回该源到达给定弧段的最小耗费路径所包含的弧段、结点及耗费。

该方法从给定弧段出发,按照流向,查找流向该弧段的网络源头结点(即源点),分析的结果为查找到的源到达给定弧段的最小耗费路径所包含的弧段、结点及耗费。 如果网络中有多个源,将查找最远的也就是到达给定弧段的最小耗费最大的那个源。为了便于理解,可将该功能的实现过程分为三步:

  1. 从给定弧段出发,根据流向,找到该弧段上游所有的源点;
  2. 分析每个源到达给定弧段的最小耗费路径并计算耗费;
  3. 选择上一步中计算出的耗费中的最大值所对应的路径作为结果,给出该路径上的弧段 ID 数组、结点 ID 数组以及该路径的耗费。

注意:分析结果中的弧段 ID 数组不包括分析弧段本身。

多介绍还可参阅 findSourceFromNode 方法,该方法根据给定的结点 ID 查找源。

参数:
edgeID - 指定的弧段 ID。
weightName - 指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合( setWeightFieldInfos)中某一个权值信息对象(WeightFieldInfo) 的名称(getName)。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
设施网络分析结果。
从以下版本开始:
SuperMap iObjects Java 7.0.0
示例:
请参见 findSourceFromNode 方法的示例。

traceUpFromNode

public FacilityAnalystResult traceUpFromNode(int nodeID,
                                             java.lang.String weightName,
                                             boolean isUncertainDirectionValid)
根据给定的结点 ID 进行上游追踪,即查找给定结点的上游,返回上游包含的弧段、结点及总耗费。

参数:
nodeID - 指定的结点 ID。
weightName - 指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合( setWeightFieldInfos)中某一个权值信息对象(WeightFieldInfo) 的名称(getName)。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
弧段 ID 数组。
从以下版本开始:
SuperMap iObjects Java 7.0.0
示例:
以下代码示范了如何根据给定的结点或弧段进行上下游追踪。本例使用示范数据中的“FacilityNet.udb”数据源进行分析, 该数据源中存在一个名为“WaterNet”的网络数据集,以弧段 ID 为 336 的弧段和结点 ID 为 311 的结点为例,示范如何进行上游追踪和下游追踪。
 /**
  * 根据给定的弧段 ID 或结点 ID 进行上游追踪或下游追踪。
  * 
  * @param datasource
  *            指定的网络数据集所在的数据源。
  */
 private void traceUpOrDownExample(Datasource datasource) {
        // 获取用于分析的网络数据集
        DatasetVector network = (DatasetVector) datasource.getDatasets().get(
                        "WaterNet");
 
        // 构造一个设施网络分析环境设置对象,并设置相关参数
        FacilityAnalystSetting facilityAnalystSetting = new FacilityAnalystSetting();
        facilityAnalystSetting.setNetworkDataset(network);
        facilityAnalystSetting.setDirectionField("direction");
        facilityAnalystSetting.setEdgeIDField("SMEDGEID");
        facilityAnalystSetting.setNodeIDField("SMNODEID");
        facilityAnalystSetting.setFNodeIDField("SMFNODE");
        facilityAnalystSetting.setTNodeIDField("SMTNODE");
        facilityAnalystSetting.setTolerance(0.001);
 
        WeightFieldInfo weightFieldInfo = new WeightFieldInfo();
        weightFieldInfo.setName("Length");
        weightFieldInfo.setFTWeightField("SMLENGTH");
        weightFieldInfo.setTFWeightField("SMLENGTH");
        WeightFieldInfos weightFieldInfos = new WeightFieldInfos();
        weightFieldInfos.add(weightFieldInfo);
        facilityAnalystSetting.setWeightFieldInfos(weightFieldInfos);
 
        // 障碍结点和障碍弧段的设置对查找源/汇是有效的
        facilityAnalystSetting.setBarrierEdges(new int[] { 8, 199 });
        facilityAnalystSetting.setBarrierNodes(new int[] { 372 });
 
        // 构造一个设施网络分析对象,并设置设施网络分析环境
        FacilityAnalyst facilityAnalyst = new FacilityAnalyst();
        facilityAnalyst.setAnalystSetting(facilityAnalystSetting);
 
        // 加载网络模型
        Boolean isLoad = facilityAnalyst.load();
 
        if (isLoad) {
                // 获取参与分析的弧段或结点 ID
                int edgeID = 336;
                int nodeID = 311;
 
                // 对给定的弧段进行上游追踪
                FacilityAnalystResult resultTraceUpFromEdge = facilityAnalyst
                                .traceUpFromEdge(edgeID, "Length", true);
                System.out.println("从弧段" + edgeID + "进行上游追踪的耗费为"
                                + resultTraceUpFromEdge.Cost);
                System.out.println("从弧段" + edgeID + "进行上游追踪,弧段 ID 包括:");
                for (int i = 0; i < resultTraceUpFromEdge.Edges.Length; i++) {
                        System.out.println(resultTraceUpFromEdge.Edges[i]);
                }
                System.out.println("从弧段" + edgeID + "进行上游追踪,结点 ID 包括:");
                for (int i = 0; i < resultTraceUpFromEdge.Nodes.Length; i++) {
                        System.out.println(resultTraceUpFromEdge.Nodes[i]);
                }
                // 对给定的结点进行上游追踪(略,参考"对给定的弧段进行上游追踪")
 
                // 对给定的结点进行下游追踪
                FacilityAnalystResult resultTraceDownFromNode = facilityAnalyst
                                .traceDownFromNode(nodeID, "Length", true);
                System.out.println("从结点" + nodeID + "进行下游追踪的耗费为"
                                + resultTraceDownFromNode.Cost);
                System.out.println("从结点" + nodeID + "进行下游追踪,弧段 ID 包括:");
                for (int i = 0; i < resultTraceDownFromNode.Edges.Length; i++) {
                        System.out.println(resultTraceDownFromNode.Edges[i]);
                }
                System.out.println("从结点" + nodeID + "进行下游追踪,结点 ID 包括:");
                for (int i = 0; i < resultTraceDownFromNode.Nodes.Length; i++) {
                        System.out.println(resultTraceDownFromNode.Nodes[i]);
                }
                // 对给定的弧段进行下游追踪(略,参考"对给定的结点进行下游追踪")
        }
 
        // 分析完毕,释放设施网络分析对象所占的资源
        facilityAnalyst.dispose();
 }
 

traceUpFromEdge

public FacilityAnalystResult traceUpFromEdge(int edgeID,
                                             java.lang.String weightName,
                                             boolean isUncertainDirectionValid)
根据给定的弧段 ID 进行上游追踪,即查找给定弧段的上游,返回上游包含的弧段、结点及总耗费。

上游追踪,是从给定结点(或弧段)出发,根据流向,查找其上游的过程。该方法用于查找给定弧段的下游,分析结果为其上游所包含的弧段、结点, 及流经整个下游的耗费。

有关“上下游”和“上下游追踪”的详细介绍,请参阅 traceUpFromNode 方法。

参数:
edgeID - 指定的弧段 ID。
weightName - 指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合( setWeightFieldInfos)中某一个权值信息对象(WeightFieldInfo) 的名称(getName)。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
设施网络分析结果。
从以下版本开始:
SuperMap iObjects Java 7.0.0
示例:
请参见 traceUpFromNode 方法的示例。

traceDownFromNode

public FacilityAnalystResult traceDownFromNode(int nodeID,
                                               java.lang.String weightName,
                                               boolean isUncertainDirectionValid)
根据给定的结点 ID 进行下游追踪,即查找给定结点的下游,返回下游包含的弧段、结点及总耗费。

下游追踪,是从给定结点(或弧段)出发,根据流向,查找其下游的过程。该方法用于查找给定弧段的下游,分析结果为其下游所包含的弧段、结点, 及流经整个下游的耗费。

有关“上下游”和“上下游追踪”的详细介绍,请参阅 traceUpFromNode 方法。

下游追踪常用于影响范围的分析。例如:

参数:
nodeID - 指定的结点 ID。
weightName - 指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合( setWeightFieldInfos)中某一个权值信息对象(WeightFieldInfo) 的名称(getName)。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
设施网络分析结果。
从以下版本开始:
SuperMap iObjects Java 7.0.0
示例:
请参见 traceUpFromNode 方法的示例。

traceDownFromEdge

public FacilityAnalystResult traceDownFromEdge(int edgeID,
                                               java.lang.String weightName,
                                               boolean isUncertainDirectionValid)
根据给定的弧段 ID 进行下游追踪,即查找给定弧段的下游,返回下游包含的弧段、结点及总耗费。

下游追踪,是从给定结点(或弧段)出发,根据流向,查找其下游的过程。该方法用于查找给定弧段的下游,分析结果为其下游所包含的弧段、结点, 及流经整个下游的耗费。

有关“上下游”和“上下游追踪”的详细介绍,请参阅 traceDownFromNodetraceUpFromNode 方法。

参数:
edgeID - 指定的弧段 ID。
weightName - 指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合( setWeightFieldInfos)中某一个权值信息对象(WeightFieldInfo) 的名称(getName)。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
设施网络分析结果。
从以下版本开始:
SuperMap iObjects Java 7.0.0
示例:
请参见 traceUpFromNode 方法的示例。

findCriticalFacilitiesUpFromEdge

public FacilityAnalystResult findCriticalFacilitiesUpFromEdge(int[] sourceNodeIDs,
                                                              int edgeID,
                                                              boolean isUncertainDirectionValid)
上游关键设施查找,即查找给定弧段的上游中的关键设施结点,返回关键结点 ID 数组及其下游弧段 ID 数组。

在进行上游关键设施查找分析时,我们将设施网络的结点划分为普通结点和设施结点两类,其中设施结点认为是能够影响网络连通性的结点,例如供水管网中的阀门;普通结点是不影响网络连通性的结点,如供水管网中的消防栓或三通等。上游关键设施查找分析需要指定设施结点和分析结点,其中分析结点可以是设施结点也可以是普通结点。

上游关键设施查找分析将从给定的设施结点中筛选出关键结点,这些关键结点是分析弧段与其上游保持连通性的最基本的结点,也就是说,关闭这些关键结点后,分析结点与上游无法连通。同时,该分析的结果还包含查找出的关键结点的下游弧段的并集。关键设施结点和它们的下游分别通过设施网络分析结果(FacilityAnalystResult)类的 getNodesgetEdges 方法返回。

关键设施结点的查找方式可以归纳为:从分析弧段出发,向它的上游回溯,每个方向上遇到的第一个设施结点,就是要查找的关键设施结点。如下图所示,从分析弧段(红色)出发,查找到的关键设施结点包括:2、8、9 和 7。而结点 4 和 11 不是回溯方向上遇到的第一个设施结点,因此不是关键设施结点。作为示意,这里仅给出了分析弧段的上游部分,但注意分析结果还会给出关键设施结点 2、8、9 和 7 的下游弧段。

此方法根据给定的弧段 ID 和设施结点的 ID 数组,查找该弧段的上游中的关键设施结点。还可以通过 findCriticalFacilitiesUpFromNode 方法来查找给定结点的上游的关键设施结点。

应用实例

供水管网发生爆管后,可以将所有的阀门作为设施结点,将发生爆裂的管段或管点作为分析弧段或分析结点,进行上游关键设施查找分析,迅速找到上游中需要关闭的最少数量的阀门。关闭这些阀门后,爆裂管段或管点与它的上游不再连通,从而阻止水的流出,防止灾情加重和资源浪费。同时,分析得出需要关闭的阀门的下游弧段的并集,也就是关闭阀门后的影响范围,从而确定停水区域,及时做好通知工作和应急措施。

参数:
sourceNodeIDs - 指定的设施结点 ID 数组。不能为空。
edgeID - 指定的分析弧段 ID。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
设施网络分析结果。未查找到关键设施结点返回 null。
从以下版本开始:
SuperMap iObjects Java 8.1.0
示例:
以下代码示范了如何进行上游关键设施查找分析。

假设在数据源“datasource”中存在一个名为“FacilityNet”的网络数据集,查找弧段 ID 为 16 的弧段的上游中的关键设施结点有哪些。

        /**
         * 根据给定的弧段 ID 和设施结点 ID 数组进行上游关键设施查找分析。
         * @param datasource 指定的网络数据集所在的数据源。
         */
        private void findCriticalFacilitiesUpExample(Datasource datasource)
        {
                //获取用于分析的网络数据集
                DatasetVector network = (DatasetVector)datasource.getDatasets().get("FacilityNet");
                //构造一个设施网络分析环境设置对象,并设置相关参数
                FacilityAnalystSetting facilityAnalystSetting = new FacilityAnalystSetting();
                facilityAnalystSetting.setNetworkDataset(network);
                facilityAnalystSetting.setDirectionField("direction");
                facilityAnalystSetting.setEdgeIDField("SMEDGEID");
                facilityAnalystSetting.setNodeIDField("SMNODEID");
                facilityAnalystSetting.setFNodeIDField("SMFNODE");
                facilityAnalystSetting.setTNodeIDField("SMTNODE");
                facilityAnalystSetting.setTolerance(0.001);
                //由于上游关键设施查找不需要权值信息,因此不需要设置WeightFieldInfos
                //是否设置WeightFieldInfos需要根据具体的分析功能确定

                //构造一个设施网络分析对象,并设置设施网络分析环境
                FacilityAnalyst facilityAnalyst = new FacilityAnalyst();
                facilityAnalyst.setAnalystSetting(facilityAnalystSetting);

                //加载网络模型
                boolean isLoad = facilityAnalyst.load();

                if (isLoad) {
                        // 指定待分析弧段
                        int edgeID = 16;
                        // 指定网络中的设施结点
                        int[] facilitiyNodeIDs = new int[] { 1, 9, 10, 13, 17, 20, 21, 29,
                                        30, 35, 35, 37 };
                        //对给定弧段进行上游关键设施查找分析
                        FacilityAnalystResult result = facilityAnalyst.findCriticalFacilitiesUpFromEdge(facilitiyNodeIDs, edgeID, true);
                        if (result != null)     {
                                //从设施网络分析结果中获取查找到的关键设施结点数组
                                int[] criticalFacilities = result.getNodes();
                                //从设施网络分析结果中获取关键设施结点的下游弧段数组
                                int[] catchmentEdges = result.getEdges();
                        }
                        //对给定结点进行上游关键设施查找分析(略,参考“对给定弧段进行上游关键设施查找分析”)
                }

                // 分析完毕,释放设施网络分析对象所占的资源
                facilityAnalyst.dispose();      
        }
 

findCriticalFacilitiesUpFromNode

public FacilityAnalystResult findCriticalFacilitiesUpFromNode(int[] sourceNodeIDs,
                                                              int nodeID,
                                                              boolean isUncertainDirectionValid)
上游关键设施查找,即查找给定结点的上游中的关键设施结点,返回关键结点 ID 数组及其影响到的下游弧段 ID 数组。

此方法根据给定的结点 ID 和设施结点的 ID 数组,查找该结点的上游中的关键设施结点。有关上游关键设施查找的详细介绍,请参阅另一重载方法 findCriticalFacilitiesUpFromEdge,该方法用来查找给定弧段的上游中的关键设施结点。

参数:
sourceNodeIDs - 指定的设施结点 ID 数组。不能为空。
nodeID - 指定的分析结点 ID。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
设施网络分析结果。设施网络分析结果。未查找到关键设施结点返回 null。
从以下版本开始:
SuperMap iObjects Java 8.1.0
示例:
请参见 findCriticalFacilitiesUpFromEdge 方法的示例。

findCriticalFacilitiesDownFromEdge

public FacilityAnalystResult findCriticalFacilitiesDownFromEdge(int[] sourceNodeIDs,
                                                                int edgeID,
                                                                boolean isUncertainDirectionValid)
下游关键设施查找,即查找给定弧段的关键下游设施结点,返回关键设施结点 ID 数组及给定弧段影响到的下游弧段 ID 数组。

在进行下游关键设施查找分析时,我们将设施网络的结点划分为普通结点和设施结点两类,其中设施结点认为是能够影响网络连通性的结点,例如供水管网中的阀门;普通结点是不影响网络连通性的结点,如供水管网中的消防栓或三通等。

下游关键设施查找分析将从给定的设施结点中筛选出关键结点,这些关键结点是分析弧段与其下游保持连通性的最基本的结点,也就是说,关闭这些关键结点后,分析结点与下游无法连通。同时,该分析的结果还包含给定弧段影响的下游弧段并集。关键设施结点和下游弧段分别通过设施网络分析结果类的 getNodes()getEdges() 方法返回。

关键设施结点的查找方式可以归纳为:从分析弧段出发,向它的下游查找,每个方向上遇到的第一个设施结点,就是要查找的关键设施结点。

此方法根据给定的弧段 ID 和设施结点的 ID 数组,查找该弧段的下游中的关键设施结点。还可以通过 findCriticalFacilitiesDownFromNode(int[], int, boolean)方法来查找给定结点的下游关键设施结点。

参数:
sourceNodeIDs - 指定的设施结点 ID 数组。不能为空。
edgeID - 指定的分析弧段 ID。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,具有不确定流向的弧段仍然参与分析;指定为 false,分析时遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
设施网络分析结果。未查找到关键设施结点返回 null。
从以下版本开始:
SuperMap iObjects Java 8.1.0

findCriticalFacilitiesDownFromNode

public FacilityAnalystResult findCriticalFacilitiesDownFromNode(int[] sourceNodeIDs,
                                                                int nodeID,
                                                                boolean isUncertainDirectionValid)
下游关键设施查找,即查找给定结点的下游关键设施结点,返回关键结点 ID 数组及给定结点影响到的下游弧段 ID 数组。

此方法根据给定的结点 ID 和设施结点的 ID 数组,查找该结点的下游中的关键设施结点。有关下游关键设施查找的详细介绍,请参阅另一重载方法findCriticalFacilitiesDownFromEdge(int[], int, boolean),该方法用来查找给定弧段的下游中的关键设施结点。

参数:
sourceNodeIDs - 指定的设施结点 ID 数组。不能为空。
nodeID - 指定的分析结点 ID。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,具有不确定流向的弧段仍然参与分析;指定为 false,分析时遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
施网络分析结果。未查找到关键设施结点返回 null。
从以下版本开始:
SuperMap iObjects Java 8.1.0

burstAnalyseFromNode

public BurstAnalyseResult burstAnalyseFromNode(int[] sourceNodeIDs,
                                               int nodeID,
                                               boolean isUncertainDirectionValid)
双向爆管分析,通过指定爆管结点,查找爆管结点上下游中对爆管位置产生直接影响的结点以及受爆管位置直接影响的结点。

参数:
sourceNodeIDs - 指定的设施结点 ID 数组。不能为空。
nodeID - 指定的分析结点 ID。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
爆管分析结果。
从以下版本开始:
SuperMap iObjects Java 8.0.2

burstAnalyseFromEdge

public BurstAnalyseResult burstAnalyseFromEdge(int[] sourceNodeIDs,
                                               int edgeID,
                                               boolean isUncertainDirectionValid)
双向爆管分析,通过指定爆管弧段,查找爆管弧段上下游中对爆管位置产生直接影响的结点以及受爆管位置直接影响的结点。

参数:
sourceNodeIDs - 指定的设施结点 ID 数组。不能为空。
edgeID - 指定的弧段结点 ID。
isUncertainDirectionValid - 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 buildFacilityNetworkDirections 方法的介绍。
返回:
爆管分析结果。
从以下版本开始:
SuperMap iObjects Java 8.0.2

dispose

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

从以下版本开始:
SuperMap iObjects Java 7.0.0