程序集: SuperMap.Analyst.NetworkAnalyst (in SuperMap.Analyst.NetworkAnalyst)
版本: dll
语法
C# |
---|
public FacilityAnalystResult FindCriticalFacilitiesUpFromEdge( int[] sourceNodeIDs, int edgeID, bool isUncertainDirectionValid ) |
参数
- sourceNodeIDs
- Type: array<
System..::.Int32
>[]()[]
指定的设施结点 ID 数组。不能为空。
- edgeID
- Type: System..::.Int32
指定的分析弧段 ID。
- isUncertainDirectionValid
- Type: System..::.Boolean
指定不确定流向是否有效。指定为 true,表示不确定流向有效,具有不确定流向的弧段仍然参与分析;指定为 false,分析时遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 BuildFacilityNetworkDirections 方法的介绍。
返回值
设施网络分析结果。未查找到关键设施结点返回 null。备注
在进行上游关键设施查找分析时,我们将设施网络的结点划分为普通结点和设施结点两类,其中设施结点认为是能够影响网络连通性的结点,例如供水管网中的阀门;普通结点是不影响网络连通性的结点,如供水管网中的消防栓或三通等。上游关键设施查找分析需要指定设施结点和分析结点,其中分析结点可以是设施结点也可以是普通结点。
上游关键设施查找分析将从给定的设施结点中筛选出关键结点,这些关键结点是分析弧段与其上游保持连通性的最基本的结点,也就是说,关闭这些关键结点后,分析结点与上游无法连通。同时,该分析的结果还包含查找出的关键结点的下游弧段的并集。关键设施结点和它们的下游分别通过设施网络分析结果(FacilityAnalystResult)类的 Nodes 和 Edges 方法返回。
关键设施结点的查找方式可以归纳为:从分析弧段出发,向它的上游回溯,每个方向上遇到的第一个设施结点,就是要查找的关键设施结点。如下图所示,从分析弧段(红色)出发,查找到的关键设施结点包括:2、8、9 和 7。而结点 4 和 11 不是回溯方向上遇到的第一个设施结点,因此不是关键设施结点。作为示意,这里仅给出了分析弧段的上游部分,但注意分析结果还会给出关键设施结点 2、8、9 和 7 的下游弧段。
此方法根据给定的弧段 ID 和设施结点的 ID 数组,查找该弧段的上游中的关键设施结点。还可以通过 FindCriticalFacilitiesUpFromNode 方法来查找给定结点的上游的关键设施结点。
应用实例
供水管网发生爆管后,可以将所有的阀门作为设施结点,将发生爆裂的管段或管点作为分析弧段或分析结点,进行上游关键设施查找分析,迅速找到上游中需要关闭的最少数量的阀门。关闭这些阀门后,爆裂管段或管点与它的上游不再连通,从而阻止水的流出,防止灾情加重和资源浪费。同时,分析得出需要关闭的阀门的下游弧段的并集,也就是关闭阀门后的影响范围,从而确定停水区域,及时做好通知工作和应急措施。
示例
以下代码示范了如何进行上游关键设施查找分析。
假设在数据源“datasource”中存在一个名为“FacilityNet”的网络数据集,查找弧段 ID 为 16 的弧段的上游中的关键设施结点有哪些。
/// <summary> /// 根据给定的弧段 ID 和设施结点 ID 数组进行上游关键设施查找分析。 /// </summary> /// <param name="datasource">指定的网络数据集所在的数据源。</param> private void FindCriticalFacilitiesUpExample(Datasource datasource) { //获取用于分析的网络数据集 DatasetVector network = datasource.Datasets["FacilityNet"] as DatasetVector; //构造一个设施网络分析环境设置对象,并设置相关参数 FacilityAnalystSetting facilityAnalystSetting = new FacilityAnalystSetting(); facilityAnalystSetting.NetworkDataset = network; facilityAnalystSetting.DirectionField = "direction"; facilityAnalystSetting.EdgeIDField = "SMEDGEID"; facilityAnalystSetting.NodeIDField = "SMNODEID"; facilityAnalystSetting.FNodeIDField = "SMFNODE"; facilityAnalystSetting.TNodeIDField = "SMTNODE"; facilityAnalystSetting.Tolerance = 0.001; //由于上游关键设施查找不需要权值信息,因此不需要设置WeightFieldInfos //是否设置WeightFieldInfos需要根据具体的分析功能确定 //构造一个设施网络分析对象,并设置设施网络分析环境 FacilityAnalyst facilityAnalyst = new FacilityAnalyst(); facilityAnalyst.AnalystSetting = facilityAnalystSetting; //加载网络模型 Boolean isLoad = facilityAnalyst.Load(); if (isLoad) { //指定待分析弧段 Int32 edgeID = 16; //指定网络中的设施结点 Int32[] facilitiyNodeIDs = new Int32[] { 1, 9, 10, 13, 17, 20, 21, 29, 30, 35, 35, 37 }; //对给定弧段进行上游关键设施查找分析 FacilityAnalystResult result = facilityAnalyst.FindCriticalFacilitiesUpFromEdge(facilitiyNodeIDs, edgeID, true); if (result != null) { //从设施网络分析结果中获取查找到的关键设施结点数组 Int32[] criticalFacilities = result.Nodes; //从设施网络分析结果中获取关键设施结点的下游弧段数组 Int32[] catchmentEdges = result.Edges; } //对给定结点进行上游关键设施查找分析(略,参考“对给定弧段进行上游关键设施查找分析”) } // 分析完毕,释放设施网络分析对象所占的资源 facilityAnalyst.Dispose(); }