设施网络下游路径分析,根据给定的参与分析的结点 ID,查询该结点下游耗费最小的路径,返回该路径包含的弧段、结点及耗费。
命名空间:
SuperMap.Analyst.NetworkAnalyst程序集: SuperMap.Analyst.NetworkAnalyst (in SuperMap.Analyst.NetworkAnalyst)
版本: dll
语法
C# |
---|
public FacilityAnalystResult FindPathDownFromNode( int nodeID, string weightName, bool isUncertainDirectionValid ) |
参数
- nodeID
- Type: System..::.Int32
指定的结点 ID。
- weightName
- Type: System..::.String
指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合(WeightFieldInfos)中某一个权值信息对象(WeightFieldInfo)的名称(Name)。
- isUncertainDirectionValid
- Type: System..::.Boolean
指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 BuildFacilityNetworkDirections 方法的介绍。
返回值
设施网络分析结果。备注
有关“下游”的介绍,请参阅 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。
示例
以下代码示范了如何查找给定弧段或结点的下游或上游的最小耗费路径。
假设下面函数操作的网络数据集为安装目录\SampleData\changchun\下的 changchun.udb 数据源中的名为 RoadNet 的网络数据集,并且已经为该网络数据集建立了流向以及等级。有关建立网络数据集的流向及等级,请参见 NetworkBuilder.BuildFacilityNetworkDirections 方法。
CopyC#
public void FindPathDownandUp(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 edgeID = 3855; Int32 nodeID = 2996; //查找给定弧段的上游和下游的最小耗费路径 FacilityAnalystResult PathUpLeastE = facilityAnalyst.FindPathUpFromEdge(edgeID, "Length", true); FacilityAnalystResult PathDownLeastE = facilityAnalyst.FindPathDownFromEdge(edgeID, "Length", true); //查找给定结点的上游和下游的最小耗费路径 FacilityAnalystResult PathUpLeastN = facilityAnalyst.FindPathUpFromNode(nodeID, "Length", true); FacilityAnalystResult PathDownLeastN = facilityAnalyst.FindPathDownFromNode(nodeID, "Length", true); }