根据指定网络数据集中源与汇的位置,为网络数据集创建流向。创建流向以后的网络数据集才可以进行各种设施网络分析。

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

语法

C#
public static bool BuildFacilityNetworkDirections(
	FacilityAnalystSetting facilityAnalystSetting,
	int[] sourceIDs,
	int[] sinkIDs,
	string weightName,
	string nodeTypeField
)

参数

facilityAnalystSetting
Type: SuperMap.Analyst.NetworkAnalyst..::.FacilityAnalystSetting
指定的设施网络分析环境设置对象。注意:在构建设施网络流向或等级时,参数 facilityAnalystSetting 的障碍弧段(BarrierEdges)和障碍结点(BarrierNodes)属性的设置将会无效,因为障碍弧段和障碍结点只在进行设施网络相关分析操作时有效,与网络拓扑结构无关。
sourceIDs
Type: array< System..::.Int32 >[]()[]
源对应的网络结点 ID 数组。源与汇都是用来建立网络数据集的流向的。网络数据集的流向与源和汇的位置决定。
sinkIDs
Type: array< System..::.Int32 >[]()[]
汇对应的网络结点 ID 数组。源与汇都是用来建立网络数据集的流向的。网络数据集的流向与源和汇的位置决定。
weightName
Type: System..::.String
给定的权值字段信息对象的名称,即 WeightFieldInfo.Name。
nodeTypeField
Type: System..::.String
结点类型字段名称,结点类型分为源结点、交汇结点、普通结点。该字段是网络结点数据集中的字段,如果不存在则创建该字段。

返回值

如果创建成功返回 true,否则 false。

备注

设施网络是具有方向的网络,因此,在创建网络数据集之后,必须为其创建流向,才能够用于进行各种设施网络路径分析、连通性分析、上下游追踪等。

流向是指网络中资源流动的方向。网络中的流向由源和汇决定:资源总是从源点流出,流向汇点。该方法通过给定的源和汇,以及设施网络分析参数设置为三维网络数据集创建流向。创建流向成功后,会在网络数据集中写入两方面的信息:流向和结点类型。

  • 流向
  • 流向信息将写入流向字段中,该字段由 FacilityAnalystSetting 类的 DirectionField 属性设置(注意,必须设置该属性,才能创建流向),如果不存在则创建该字段。

    流向字段的值共有四个:0,1,2,3,其含义如下图所示。以线段 AB 为例:

    0 代表流向与数字化方向相同。线段 AB 的数字化方向为 A-->B,且 A 为源点,因此 AB 的流向为从 A 流到 B,即与其数字化方向相同。

    1 代表流向与数字化方向相反。线段 AB 的数字化方向为 A-->B,且 A 为汇点,因此 AB 的流向为从 B 流向 A,即与其数字化方向相反。

    2 代表无效方向,也称不确定流向。A 和 B 均为源点,则资源既可以从 A 流向 B,又可以从 B 流向 A,这就构成了一个无效的流向。

    3 代表不连通边,也称未初始化方向。线段 AB 与源点、汇点所在的结点不连通,则称为不连通边。

    注:

    数字化方向是对象绘制时的方向,即对象的节点序列的方向。

  • 结点类型
  • 建立流向后,系统还会将结点类型信息写入指定的网络数据集的子点数据集的结点类型字段中。结点类型分为源点、汇点和普通结点。下表列出了结点类型字段的值及其含义:

示例

以下代码示范了如何基于网络数据集构建能够用于设施网络分析的网络数据集,即为网络数据集建立流向和等级。

下面函数中操作的网络数据集为安装目录\SampleData\changchun\下的 changchun.udb 数据源中的名为 RoadNet 的网络数据集。

CopyC#
public void BuildNetworkForFacilityAnalyst(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;

    //指定用来建立网络流向的源所对应的网络结点
    Int32[] sourceIDs = new Int32[] { 3534 };

    //调用方法为网络数据集建立流向
    Boolean isDirectionSuccessful = NetworkBuilder.BuildFacilityNetworkDirections(facilityAnalystSetting, sourceIDs, null, "Length", "NodeType");

    //在建立流向的基础上为网络数据集建立等级
    Boolean isHierarchiesSuccessful = NetworkBuilder.BuildFacilityNetworkHierarchies(facilityAnalystSetting, sourceIDs, null, "Length", "Grade", false);
}

请参见