检查网络环路,返回构成环路的弧段 ID 数组。

命名空间:  SuperMap.Analyst.NetworkAnalyst
程序集:  SuperMap.Analyst.NetworkAnalyst (in SuperMap.Analyst.NetworkAnalyst)
版本: dll

语法

C#
public int[] CheckLoops()

返回值

构成环路的弧段 ID 数组。

备注

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

  1. 是由至少两条弧段构成的闭合路径;
  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());
    }
}

请参见