设施网络路径分析,即根据给定的起始和终止结点 ID,查找其间耗费最小的路径,返回该路径包含的弧段、结点及耗费。
命名空间:
SuperMap.Analyst.NetworkAnalyst程序集: SuperMap.Analyst.NetworkAnalyst (in SuperMap.Analyst.NetworkAnalyst)
版本: dll
语法
C# |
---|
public FacilityAnalystResult FindPathFromNodes( int startNodeID, int endNodeID, string weightName, bool isUncertainDirectionValid ) |
参数
- startNodeID
- Type: System..::.Int32
指定的起始结点 ID。
- endNodeID
- Type: System..::.Int32
指定的终止结点 ID。
- weightName
- Type: System..::.String
指定的权值字段信息对象的名称,即设施网络分析环境中指定的权值字段信息集合(WeightFieldInfos)中某一个权值信息对象(WeightFieldInfo)的名称(Name)。
- isUncertainDirectionValid
- Type: System..::.Boolean
指定不确定流向是否有效。指定为 true,表示不确定流向有效,遇到不确定流向时分析继续进行;指定为 false,表示不确定流向无效,遇到不确定流向将停止在该方向上继续查找。流向字段的值为 2 时代表该弧段的流向为不确定流向。详细介绍请参阅 BuildFacilityNetworkDirections 方法的介绍。
返回值
设施网络分析结果。备注
两结点间的最小耗费路径的查找过程为:从给定的起始结点出发,根据流向,查找到给定的终止结点的所有路径,然后从其中找出耗费最小的一条返回。
下图是两结点最小耗费路径的示意图。从起始结点 B 出发,沿着网络流向,有三条路径能够到达终止结点 P,分别为 B-D-L-P、B-C-G-I-J-K-P 和 E-E-F-H-M-N-O-P,其中路径 B-C-G-I-J-K-P 的耗费最小,为 105,因此该路径是结点 B 到 P 的最小耗费路径。
示例
以下代码示范了如何查找两个结点或弧段之间的最小耗费路径。
假设下面函数操作的网络数据集为安装目录\SampleData\changchun\下的 changchun.udb 数据源中的名为 RoadNet 的网络数据集,并且已经为该网络数据集建立了流向以及等级。有关建立网络数据集的流向及等级,请参见 NetworkBuilder.BuildFacilityNetworkDirections 方法。
CopyC#
public void FindPathBetween(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 startEdgeID = 3855; Int32 endEdgeID = 7887; Int32 startNodeID = 2996; Int32 endNodeID = 4239; //查找两个弧段间的最小耗费路径 FacilityAnalystResult PathLeastE = facilityAnalyst.FindPathFromEdges(startEdgeID, endEdgeID, "Length", true); //查找两个结点间的最小耗费路径 FacilityAnalystResult PathLeastN = facilityAnalyst.FindPathFromNodes(startNodeID, endNodeID, "Length", true); }