检查网络环路,返回构成环路的弧段 ID 数组。
命名空间:
SuperMap.Analyst.NetworkAnalyst程序集: SuperMap.Analyst.NetworkAnalyst (in SuperMap.Analyst.NetworkAnalyst)
版本: dll
语法
C# |
---|
public int[] CheckLoops() |
返回值
构成环路的弧段 ID 数组。备注
设施网络中,环路是指两条或两条以上流向值为 2(即不确定流向)的弧段构成的闭合路径。这意味着环路必须同时满足以下两个条件:
- 是由至少两条弧段构成的闭合路径;
- 构成环路的弧段的流向均为 2,即不确定流向。有关流向请参阅 NetworkBuilder 类的 BuildFacilityNetworkDirections 方法。
下图是设施网络的一部分,使用不同的符号显示网络弧段的流向。对该网络进行环路检查,检查出两个环路,即图中的红色闭合路径。而右上方有一条流向为 2 的弧段,由于它未与其他流向同样为 2 的弧段构成闭合路径,因此不是环路。
示例
以下代码示范了如何查找网络环路。
假设下面函数操作的网络数据集为安装目录\SampleData\changchun\下的 changchun.udb 数据源中的名为 RoadNet 的网络数据集,并且已经为该网络数据集建立了流向以及等级。 有关建立网络数据集的流向及等级,请参见 NetworkBuilder.BuildFacilityNetworkDirections 的方法。
CopyC#
public void CheckLoops(DatasetVector networkDataset) { //设置用于设施网络分析的环境 FacilityAnalystSetting facilityAnalystSetting = new FacilityAnalystSetting(); facilityAnalystSetting.NetworkDataset = networkDataset; facilityAnalystSetting.DirectionField = "Direction"; facilityAnalystSetting.EdgeIDField = "SmID"; facilityAnalystSetting.NodeIDField = "SmNodeID"; facilityAnalystSetting.FNodeIDField = "SmFNode"; facilityAnalystSetting.TNodeIDField = "SmTNode"; facilityAnalystSetting.Tolerance = 0.0015; WeightFieldInfo weightFieldInfo = new WeightFieldInfo(); weightFieldInfo.Name = "Length"; weightFieldInfo.FTWeightField = "SmLength"; weightFieldInfo.TFWeightField = "SmLength"; WeightFieldInfos weightFieldInfos = new WeightFieldInfos(); weightFieldInfos.Add(weightFieldInfo); facilityAnalystSetting.WeightFieldInfos = weightFieldInfos; FacilityAnalyst facilityAnalyst = new FacilityAnalyst(); facilityAnalyst.AnalystSetting = facilityAnalystSetting; facilityAnalyst.Load(); //调用方法查找网络环路 Int32[] edgeIDs = facilityAnalyst.CheckLoops(); //输出构成环路的弧段 ID Console.WriteLine("构成环路的弧段 ID 数组如下:"); for (Int32 i = 0; i < edgeIDs.Length; i++) { Console.WriteLine(edgeIDs[i].ToString()); } }