类 FacilityAnalyst
- java.lang.Object
-
- com.supermap.data.InternalHandle
-
- com.supermap.data.InternalHandleDisposable
-
- com.supermap.analyst.networkanalyst.FacilityAnalyst
-
- 所有已实现的接口:
- IDisposable
public class FacilityAnalyst extends com.supermap.data.InternalHandleDisposable
设施网络分析类。设施网络分析类。它是网络分析功能类之一,主要用于进行各类连通性分析和追踪分析。
设施网络分析属于网络分析功能的一种,所以在进行设施网络分析之前,您需要具备的前提知识是:
- 了解网络分析中的基本知识:
- 什么是网络模型,如何创建网络模型;
- 网络模型中的术语:结点、弧段、障碍点、障碍边、环路等;
- 了解网络数据集属性表与普通的线数据集属性表的区别,主要是了解网络数据集属性表中的字段信息。
- 学会建立用于设施网络分析的数据集:
- 了解设施网络分析环境参数的设置:
- 了解追踪分析的相关知识,如上游、下游、源、汇、流向等。
设施网络是具有方向的网络。即介质(水流、电流等)会根据网络本身的规则在网络中流动。
设施网络分析的前提是已经建立了用于设施网络分析的数据集,建立用于设施网络分析的数据集的基础是建立网络数据集,在此基础上利用
NetworkBuilder
类的buildFacilityNetworkDirections
方法赋予网络数据集特有的用于进行设施网络分析的数据信息,也就是为网络数据集建立流向,使原有的网络数据集具有了能够进行设施网络分析的最基本的条件 ,此时,就可以进行各种设施网络分析了。如果你的设施网络具有等级信息,还可以进一步使用NetworkBuilder
类的buildFacilityNetworkHierarchies()
方法添加等级信息。详细信息请参见NetworkBuilder
类的buildFacilityNetworkDirections
和buildFacilityNetworkHierarchies()
方法。在利用设施网络分析类进行分析时,以及上面提到的建立用于设施网络分析的数据集,都要进行设施网络分析环境参数的设置,即使用到
FacilityAnalystSetting
类所做的设置。详细信息请参见FacilityAnalystSetting
类。当具备了以上知识,您就可以使用
FacilityAnalyst
类提供的各种方法来实现各种设施网络分析功能。目前,FacilityAnalyst
类提供的设施网络分析功能包括:- 根据给定的结点 ID 数组查找与结点连通的环路;
- 根据给定的弧段 ID 数组查找与弧段连通的环路;
- 根据给定的结点 ID 数组查找与结点相连通的弧段;
- 根据给定的弧段 ID 数组查找与弧段相连通的弧段;
- 根据给定的结点 ID 数组查找与结点不相连通的弧段;
- 根据给定的弧段 ID 数组查找与弧段不相连通的弧段;
- 根据给定的结点 ID 数组查找这些结点共同的上游弧段;
- 根据给定的弧段 ID 数组查找这些弧段共同的上游弧段;
- 根据给定的结点 ID 数组查找这些结点共同的下游弧段;
- 根据给定的弧段 ID 数组查找这些弧段共同的下游弧段;
- 查找某个结点到源之间的所有弧段;
- 查找某条弧段到源之间的所有弧段;
- 查找某个结点到汇之间的所有弧段;
- 查找某条弧段到汇之间的所有弧段;
- 查找某个结点上游追踪所流经的弧段;
- 查找某条弧段上游追踪所流经的弧段;
- 查找某个结点下游追踪所流经的弧段;
- 查找某条弧段下游追踪所流经的弧段;
- 设施网络路径分析,包括查找起始结点和终止结点间的最小耗费路径、查找起始弧段和终止弧段间的最小耗费路径、根据给定的结点沿上游或者下游查询最小耗费路径、 根据给定的弧段沿上游或者下游查询最小耗费路径。
还可以阅读《设施网络分析》技术文档以便了解更多有关设施网络分析的介绍。
- 示范代码:
- 请参见
findSourceFromNode
、traceUpFromNode
、findCommonAncestorsFromNodes
、findPathFromNodes
以及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, String weightName, boolean isUncertainDirectionValid)
设施网络下游路径分析,根据给定的参与分析的弧段 ID,查询该弧段下游耗费最小的路径,返回该路径包含的弧段、结点及耗费。FacilityAnalystResult
findPathDownFromNode(int nodeID, String weightName, boolean isUncertainDirectionValid)
设施网络下游路径分析,根据给定的参与分析的结点 ID,查询该结点下游耗费最小的路径,返回该路径包含的弧段、结点及耗费。FacilityAnalystResult
findPathFromEdges(int startEdgeID, int endEdgeID, String weightName, boolean isUncertainDirectionValid)
设施网络路径分析,即根据给定的起始和终止弧段 ID,查找其间耗费最小的路径,返回该路径包含的弧段、结点及耗费。FacilityAnalystResult
findPathFromNodes(int startNodeID, int endNodeID, String weightName, boolean isUncertainDirectionValid)
设施网络路径分析,即根据给定的起始和终止结点 ID,查找其间耗费最小的路径,返回该路径包含的弧段、结点及耗费。FacilityAnalystResult
findPathUpFromEdge(int edgeID, String weightName, boolean isUncertainDirectionValid)
设施网络上游路径分析,根据给定的弧段 ID,查询该弧段上游耗费最小的路径,返回该路径包含的弧段、结点及耗费。FacilityAnalystResult
findPathUpFromNode(int nodeID, String weightName, boolean isUncertainDirectionValid)
设施网络上游路径分析,根据给定的结点 ID,查询该结点上游耗费最小的路径,返回该路径包含的弧段、结点及耗费。FacilityAnalystResult
findSinkFromEdge(int edgeID, String weightName, boolean isUncertainDirectionValid)
根据给定的弧段 ID 查找汇,即从给定弧段出发,根据流向查找流出该弧段的下游汇点,并返回给定弧段到达该汇的最小耗费路径所包含的弧段、结点及耗费。FacilityAnalystResult
findSinkFromNode(int nodeID, String weightName, boolean isUncertainDirectionValid)
根据给定的结点 ID 查找汇,即从给定结点出发,根据流向查找流出该结点的下游汇点,并返回给定结点到达该汇的最小耗费路径所包含的弧段、结点及耗费。FacilityAnalystResult
findSourceFromEdge(int edgeID, String weightName, boolean isUncertainDirectionValid)
根据给定的弧段 ID 查找源,即从给定弧段出发,根据流向查找流向该弧段的网络源头,并返回该源到达给定弧段的最小耗费路径所包含的弧段、结点及耗费。FacilityAnalystResult
findSourceFromNode(int nodeID, String weightName, boolean isUncertainDirectionValid)
根据给定的结点 ID 查找源,即从给定结点出发,根据流向查找流向该结点的网络源头,并返回该源到达给定结点的最小耗费路径所包含的弧段、结点及耗费。int[]
findUnconnectedEdgesFromEdges(int[] edgeIDs)
根据给定的弧段 ID 数组,查找与这些弧段不相连通的弧段,返回弧段 ID 数组。int[]
findUnconnectedEdgesFromNodes(int[] nodeIDs)
根据给定的结点 ID 数组,查找与这些结点不相连通的弧段,返回弧段 ID 数组。FacilityAnalystSetting
getAnalystSetting()
返回设施网络分析的环境。boolean
load()
根据设施网络分析环境设置加载设施网络模型。void
setAnalystSetting(FacilityAnalystSetting value)
设置设施网络分析的环境。FacilityAnalystResult
traceDownFromEdge(int edgeID, String weightName, boolean isUncertainDirectionValid)
根据给定的弧段 ID 进行下游追踪,即查找给定弧段的下游,返回下游包含的弧段、结点及总耗费。FacilityAnalystResult
traceDownFromNode(int nodeID, String weightName, boolean isUncertainDirectionValid)
根据给定的结点 ID 进行下游追踪,即查找给定结点的下游,返回下游包含的弧段、结点及总耗费。FacilityAnalystResult
traceUpFromEdge(int edgeID, String weightName, boolean isUncertainDirectionValid)
根据给定的弧段 ID 进行上游追踪,即查找给定弧段的上游,返回上游包含的弧段、结点及总耗费。FacilityAnalystResult
traceUpFromNode(int nodeID, String weightName, boolean isUncertainDirectionValid)
根据给定的结点 ID 进行上游追踪,即查找给定结点的上游,返回上游包含的弧段、结点及总耗费。
-
-
-
方法详细资料
-
getAnalystSetting
public FacilityAnalystSetting getAnalystSetting()
返回设施网络分析的环境。设施网络分析环境参数的设置,直接影响到设施网络分析的结果。设施网络分析所需要的参数包括:用于进行设施网络分析的数据集( 即建立了流向的网络数据集或者同时建立了流向和等级的网络数据集,也就是说该方法对应的
FacilityAnalystSetting
类对象的setNetworkDataset()
方法所指定的网络数据集必须有流向或者流向和等级信息)、结点 ID 字段、弧段 ID 字段、弧段起始结点 ID 字段、弧段终止结点 ID 字段、权值信息、点到弧段的距离容限、障碍结点、障碍弧段、流向等。有关设施网络分析环境参数的设置,请参见FacilityAnalystSetting
类。- 返回:
- 设施网络分析的环境。
- 另请参阅:
FacilityAnalystSetting
- 默认值:
- 默认值为一个新构造的
FacilityAnalystSetting
对象。
-
setAnalystSetting
public void setAnalystSetting(FacilityAnalystSetting value)
设置设施网络分析的环境。设施网络分析环境参数的设置,直接影响到设施网络分析的结果。设施网络分析所需要的参数包括:用于进行设施网络分析的数据集( 即建立了流向的网络数据集或者同时建立了流向和等级的网络数据集,也就是说该方法对应的 FacilityAnalystSetting 类对象的 setNetworkDataset() 方法所指定的网络数据集必须有流向或者流向和等级信息)、结点 ID 字段、弧段 ID 字段、弧段起始结点 ID 字段、弧段终止结点 ID 字段、权值信息、点到弧段的距离容限、障碍结点、障碍弧段、流向等。有关设施网络分析环境参数的设置,请参见
FacilityAnalystSetting
类。- 参数:
value
- 设施网络分析环境参数。- 另请参阅:
FacilityAnalystSetting
-
load
public boolean load()
根据设施网络分析环境设置加载设施网络模型。该方法根据设施网络分析环境设置(
FacilityAnalystSetting
)对象中的环境参数,加载网络模型。在设置好设施网络分析环境的参数后,只有调用该方法,所做的设施网络分析环境设置才会在设施网络分析的过程中生效。注意:
- 返回:
- 一个布尔值,用于指示加载设施网络模型是否成功。如果成功返回 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
方法的示例。
-
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); }
-
findCommonAncestorsFromEdges
public int[] findCommonAncestorsFromEdges(int[] edgeIDs, boolean isUncertainDirectionValid)
根据给定的弧段 ID 数组,查找这些弧段的共同上游弧段,返回弧段 ID 数组。有关“上游”的介绍,请参阅
traceUpFromNode
方法。共同上游是指多个结点(或弧段)的公共上游网络。该方法用于查找多条弧段的共同上游弧段,即取这些弧段的各自上游弧段的交集部分,结果返回这些弧段的弧段 ID。
请参阅
findCommonAncestorsFromNodes
方法获得更多关于“查找共同上游弧段”的介绍。- 参数:
edgeIDs
- 指定的弧段 ID 数组。isUncertainDirectionValid
- 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅buildFacilityNetworkDirections
方法的介绍。- 返回:
- 给定弧段的共同上游的弧段 ID 数组。
- 示范代码:
- 请参见
findCommonAncestorsFromNodes
方法的示例。
-
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
方法的示例。
-
findSourceFromNode
public FacilityAnalystResult findSourceFromNode(int nodeID, String weightName, boolean isUncertainDirectionValid)
根据给定的结点 ID 查找源,即从给定结点出发,根据流向查找流向该结点的网络源头,并返回该源到达给定结点的最小耗费路径所包含的弧段、结点及耗费。该方法从给定结点出发,按照流向,查找流向该结点的网络源头结点(即源点),分析的结果为查找到的源到达给定结点的最小耗费路径所包含的弧段、结点及耗费。 如果网络中有多个源,将查找最远的也就是到达给定结点的最小耗费最大的那个源。为了便于理解,可将该功能的实现过程分为三步:
- 从给定结点出发,根据流向,找到该结点上游所有的源点;
- 分析每个源到达给定结点的最小耗费路径并计算耗费;
- 选择上一步中计算出的耗费中的最大值所对应的路径作为结果,给出该路径上的弧段 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, String weightName, boolean isUncertainDirectionValid)
根据给定的弧段 ID 查找源,即从给定弧段出发,根据流向查找流向该弧段的网络源头,并返回该源到达给定弧段的最小耗费路径所包含的弧段、结点及耗费。该方法从给定弧段出发,按照流向,查找流向该弧段的网络源头结点(即源点),分析的结果为查找到的源到达给定弧段的最小耗费路径所包含的弧段、结点及耗费。 如果网络中有多个源,将查找最远的也就是到达给定弧段的最小耗费最大的那个源。为了便于理解,可将该功能的实现过程分为三步:
- 从给定弧段出发,根据流向,找到该弧段上游所有的源点;
- 分析每个源到达给定弧段的最小耗费路径并计算耗费;
- 选择上一步中计算出的耗费中的最大值所对应的路径作为结果,给出该路径上的弧段 ID 数组、结点 ID 数组以及该路径的耗费。
注意:分析结果中的弧段 ID 数组不包括分析弧段本身。
多介绍还可参阅
findSourceFromNode
方法,该方法根据给定的结点 ID 查找源。- 参数:
edgeID
- 指定的弧段 ID。weightName
- 指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合(setWeightFieldInfos
)中某一个权值信息对象(WeightFieldInfo
) 的名称(getName
)。isUncertainDirectionValid
- 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅buildFacilityNetworkDirections
方法的介绍。- 返回:
- 设施网络分析结果。
- 从以下版本开始:
- SuperMap iObjects Java 7.0.0
- 示范代码:
- 请参见
findSourceFromNode
方法的示例。
-
findSinkFromNode
public FacilityAnalystResult findSinkFromNode(int nodeID, String weightName, boolean isUncertainDirectionValid)
根据给定的结点 ID 查找汇,即从给定结点出发,根据流向查找流出该结点的下游汇点,并返回给定结点到达该汇的最小耗费路径所包含的弧段、结点及耗费。该方法从给定结点出发,按照流向,查找流出该结点的下游汇点,分析的结果为该结点到达查找到的汇的最小耗费路径所包含的弧段、结点及耗费。 如果网络中有多个汇,将查找最远的也就是从给定结点出发最小耗费最大的那个汇。为了便于理解,可将该功能的实现过程分为三步:
- 从给定结点出发,根据流向,找到该结点下游所有的汇点;
- 分析给定结点到每个汇的最小耗费路径并计算耗费;
- 选择上一步中计算出的耗费中的最大值所对应的路径作为结果,给出该路径上的弧段 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, String weightName, boolean isUncertainDirectionValid)
根据给定的弧段 ID 查找汇,即从给定弧段出发,根据流向查找流出该弧段的下游汇点,并返回给定弧段到达该汇的最小耗费路径所包含的弧段、结点及耗费。该方法从给定弧段出发,按照流向,查找流出该弧段的下游汇点,分析的结果为该弧段到达查找到的汇的最小耗费路径所包含的弧段、结点及耗费。 如果网络中有多个汇,将查找最远的也就是从给定弧段出发最小耗费最大的那个汇。为了便于理解,可将该功能的实现过程分为三步:
- 从给定弧段出发,根据流向,找到该弧段下游所有的汇点;
- 分析给定弧段到每个汇的最小耗费路径并计算耗费;
- 选择上一步中计算出的耗费中的最大值所对应的路径作为结果,给出该路径上的弧段 ID 数组、结点 ID 数组以及该路径的耗费。
注意:分析结果中的弧段 ID 数组不包括分析弧段本身。
更多介绍还可参阅
findSinkFromNode
方法,该方法根据给定的结点 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, String weightName, boolean isUncertainDirectionValid)
根据给定的结点 ID 进行上游追踪,即查找给定结点的上游,返回上游包含的弧段、结点及总耗费。- 上游和下游
- 上游追踪与下游追踪
- 应用实例
- 当水质监测站的监测数据显示水质发生异常,首先确定发生异常的位置,从而在河流网络(网络数据集)上找出该位置所在(或最近)的弧段或结点, 作为上游追踪的起点;
- 如果知道在起点的上游中距离起点最近的水质监测正常的位置,可以将这些位置或其所在的河段设置为障碍,可以帮助进一步缩小分析的范围。因为可以认为, 水质监测正常的位置的上游,不可能存在此次调查的污染源。设置为障碍后,进行上游追踪分析,追踪到该位置后,将不会继续追踪该位置的上游;
- 进行上游追踪分析,查找到向发生水质异常位置所在河段汇流的所有河段;
- 使用空间查询、分析找出位于这些河段附近的所有可能的污染源,如化工厂、垃圾处理厂等;
- 根据发生水质异常的监测数据对污染源进行进一步筛选;
- 分析筛选出的污染源的排污负荷,按照其造成污染的可能性进行排序;
- 对可能的污染源按照顺序进行实地调查与研究,最终确定污染物来源。
对于设施网络的某个结点(或弧段)来说,网络中的资源最终流入该结点(或弧段)所经过的弧段和结点称为它的上游;从该结点(或弧段) 流出最终流入汇点所经过的弧段和网络称为它的下游。
下面以结点的上游和下游为例。下图是一个简单的设施网络的示意图,使用箭头标出了网络的流向。根据流向,可以看出,资源流经结点 2、4、3、7、8 以及弧段 10、9、3、4、8 最终流入结点 10,因此这些结点和弧段称为结点 10 的上游,其中的结点称为它的上游结点,弧段称为它的上游弧段。同样的,资源从结点 10 流出,流经结点9、11、12 以及弧段 5、7、11 最终流出网络,因此,这些结点和弧段称为结点 10 的下游,其中的结点称为它的下游结点,弧段称为它的下游弧段。
上游追踪,是从给定结点(或弧段)出发,根据流向,查找其上游的过程。类似的,下游追踪是从给定结点(或弧段)出发,根据流向,查找其下游的过程。 FacilityAnalyst 类分别提供了从结点或弧段出发,进行上游或下游追踪的方法,分析的结果为查找到的上游或下游所包含的弧段 ID 数组、结点 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, 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, String weightName, boolean isUncertainDirectionValid)
根据给定的结点 ID 进行下游追踪,即查找给定结点的下游,返回下游包含的弧段、结点及总耗费。下游追踪,是从给定结点(或弧段)出发,根据流向,查找其下游的过程。该方法用于查找给定弧段的下游,分析结果为其下游所包含的弧段、结点, 及流经整个下游的耗费。
有关“上下游”和“上下游追踪”的详细介绍,请参阅
traceUpFromNode
方法。下游追踪常用于影响范围的分析。例如:
- 自来水供水管道爆管后,通过下游追踪分析事故位置的所有下游管道,然后通过空间查询,确定受影响的供水区域,从而及时发放通知,并采取应急措施, 如由消防车或自来水公司安排车辆为停水小区送水。
- 当发现河流的某个位置发生污染时,可以通过下游追踪,分析出可能受到影响的所有下游河段,如下图所示。在分析前,还可以根据污染物的种类、
排放量等结合恰当的水质管理模型,分析出在污染清除前不会遭到污染的下游河段或位置,设置为障碍(在
FacilityAnalystSetting
中设置),下游追踪时,到达障碍即追踪停止 ,这样可以缩小分析的范围。确定了可能受影响的河段后,通过空间查询和分析标记出位于结果河段附近的所有用水单位和居民区 ,及时下发通知,并采取紧急措施,防止污染的危害进一步扩大。
- 参数:
nodeID
- 指定的结点 ID。weightName
- 指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合(setWeightFieldInfos
)中某一个权值信息对象(WeightFieldInfo
) 的名称(getName
)。isUncertainDirectionValid
- 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅buildFacilityNetworkDirections
方法的介绍。- 返回:
- 设施网络分析结果。
- 从以下版本开始:
- SuperMap iObjects Java 7.0.0
- 示范代码:
- 请参见
traceUpFromNode
方法的示例。
-
traceDownFromEdge
public FacilityAnalystResult traceDownFromEdge(int edgeID, String weightName, boolean isUncertainDirectionValid)
根据给定的弧段 ID 进行下游追踪,即查找给定弧段的下游,返回下游包含的弧段、结点及总耗费。下游追踪,是从给定结点(或弧段)出发,根据流向,查找其下游的过程。该方法用于查找给定弧段的下游,分析结果为其下游所包含的弧段、结点, 及流经整个下游的耗费。
有关“上下游”和“上下游追踪”的详细介绍,请参阅
traceDownFromNode
和traceUpFromNode
方法。- 参数:
edgeID
- 指定的弧段 ID。weightName
- 指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合(setWeightFieldInfos
)中某一个权值信息对象(WeightFieldInfo
) 的名称(getName
)。isUncertainDirectionValid
- 指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅buildFacilityNetworkDirections
方法的介绍。- 返回:
- 设施网络分析结果。
- 从以下版本开始:
- SuperMap iObjects Java 7.0.0
- 示范代码:
- 请参见
traceUpFromNode
方法的示例。
-
checkLoops
public int[] checkLoops()
检查网络环路,返回构成环路的弧段 ID 数组。设施网络中,环路是指两条或两条以上流向值为 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, 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, 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, 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, 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, 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, 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} 方法的示例。
-
dispose
public void dispose()
释放该对象所占用的资源。当调用该方法之后,此对象不再可用。- 从以下版本开始:
- SuperMap iObjects Java 7.0.0
-
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
方法的示例。
-
findCriticalFacilitiesUpFromEdge
public FacilityAnalystResult findCriticalFacilitiesUpFromEdge(int[] sourceNodeIDs, int edgeID, boolean isUncertainDirectionValid)
上游关键设施查找,即查找给定弧段的上游中的关键设施结点,返回关键结点 ID 数组及其下游弧段 ID 数组。在进行上游关键设施查找分析时,我们将设施网络的结点划分为普通结点和设施结点两类,其中设施结点认为是能够影响网络连通性的结点,例如供水管网中的阀门;普通结点是不影响网络连通性的结点,如供水管网中的消防栓或三通等。上游关键设施查找分析需要指定设施结点和分析结点,其中分析结点可以是设施结点也可以是普通结点。
上游关键设施查找分析将从给定的设施结点中筛选出关键结点,这些关键结点是分析弧段与其上游保持连通性的最基本的结点,也就是说,关闭这些关键结点后,分析结点与上游无法连通。同时,该分析的结果还包含查找出的关键结点的下游弧段的并集。关键设施结点和它们的下游分别通过设施网络分析结果(FacilityAnalystResult)类的
getNodes
和getEdges
方法返回。关键设施结点的查找方式可以归纳为:从分析弧段出发,向它的上游回溯,每个方向上遇到的第一个设施结点,就是要查找的关键设施结点。如下图所示,从分析弧段(红色)出发,查找到的关键设施结点包括: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(); }
-
findCriticalFacilitiesDownFromNode
public FacilityAnalystResult findCriticalFacilitiesDownFromNode(int[] sourceNodeIDs, int nodeID, boolean isUncertainDirectionValid)
下游关键设施查找,即查找给定结点的下游关键设施结点,返回关键结点 ID 数组及给定结点影响到的下游弧段 ID 数组。此方法根据给定的结点 ID 和设施结点的 ID 数组,查找该结点的下游中的关键设施结点。有关下游关键设施查找的详细介绍,请参阅另一重载方法
FacilityAnalyst.findCriticalFacilitiesDownFromEdge(int[], int, boolean)
,该方法用来查找给定弧段的下游中的关键设施结点。- 参数:
sourceNodeIDs
- 指定的设施结点 ID 数组。不能为空。nodeID
- 指定的分析结点 ID。isUncertainDirectionValid
- 指定不确定流向是否有效。指定为 true,表示不确定流向有效,具有不确定流向的弧段仍然参与分析;指定为 false,分析时遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅buildFacilityNetworkDirections
方法的介绍。- 返回:
- 施网络分析结果。未查找到关键设施结点返回 null。
- 从以下版本开始:
- SuperMap iObjects Java 8.1.0
-
findCriticalFacilitiesDownFromEdge
public FacilityAnalystResult findCriticalFacilitiesDownFromEdge(int[] sourceNodeIDs, int edgeID, boolean isUncertainDirectionValid)
下游关键设施查找,即查找给定弧段的关键下游设施结点,返回关键设施结点 ID 数组及给定弧段影响到的下游弧段 ID 数组。在进行下游关键设施查找分析时,我们将设施网络的结点划分为普通结点和设施结点两类,其中设施结点认为是能够影响网络连通性的结点,例如供水管网中的阀门;普通结点是不影响网络连通性的结点,如供水管网中的消防栓或三通等。
下游关键设施查找分析将从给定的设施结点中筛选出关键结点,这些关键结点是分析弧段与其下游保持连通性的最基本的结点,也就是说,关闭这些关键结点后,分析结点与下游无法连通。同时,该分析的结果还包含给定弧段影响的下游弧段并集。关键设施结点和下游弧段分别通过设施网络分析结果类的
getNodes()
和getEdges()
方法返回。关键设施结点的查找方式可以归纳为:从分析弧段出发,向它的下游查找,每个方向上遇到的第一个设施结点,就是要查找的关键设施结点。
此方法根据给定的弧段 ID 和设施结点的 ID 数组,查找该弧段的下游中的关键设施结点。还可以通过
FacilityAnalyst.findCriticalFacilitiesDownFromNode(int[], int, boolean)
方法来查找给定结点的下游关键设施结点。- 参数:
sourceNodeIDs
- 指定的设施结点 ID 数组。不能为空。edgeID
- 指定的分析弧段 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
-
-
Copyright © 2021–2024 SuperMap. All rights reserved.