程序集: SuperMap.Analyst.NetworkAnalyst (in SuperMap.Analyst.NetworkAnalyst)
版本: dll
语法
C# |
---|
public TransportationAnalystResult FindTSPPath( TransportationAnalystParameter parameter, bool isEndNodeAssigned ) |
参数
- parameter
- Type: SuperMap.Analyst.NetworkAnalyst..::.TransportationAnalystParameter
交通网络分析参数对象。
- isEndNodeAssigned
- Type: System..::.Boolean
是否指定终点。指定为 true 表示指定终点,此时给定的经过点集合中最后一个点即为终点;否则不指定终点。
返回值
分析结果对象。备注
旅行商分析是查找经过指定一系列点的路径,旅行商分析是无序的路径分析。旅行商可以自己决定访问结点的顺序,目标是旅行路线阻抗总和最小(或接近最小)。
旅行商分析的经过点是在 TransportationAnalystParameter 类型的参数 parameter 中指定的。通过 TransportationAnalystParameter 对象有两种方式可以指定经过点:
- 使用该对象的 Nodes 属性,以网络数据集中结点 ID 数组的形式指定旅行商分析经过的点,因此分析过程中经过的点就是相应的网络结点;
- 使用该对象的 Points 属性,以坐标点串的形式指定旅行商分析经过的点,因此分析过程中经过的点就是相应的坐标点。
需要强调的是,此方法默认将给定的经过点集合中的第一个点(结点或坐标点)作为旅行商的起点。此外,用户还可以指定终点(对应方法中的 isEndNodeAssigned 参数)。如果选择指定终点,则给定的经过点集合的最后一个点为终点,此时旅行商从第一个给定点出发,到指定的终点结束,而其他经过点的访问次序由旅行商自己决定。
另外,如果选择指定终点,终点可以与起点相同,即经过点集合中的最后一个点与第一个点相同。此时,旅行商分析的结果是一条闭合路径,即从起点出发,最终回到该点。
注意:使用该方法时,如果选择指定终点(对应方法中的 hasLeastEdgeCount 参数),指定的经过点集合的第一个点与最后一点可以相同,也可以不同;其他点不允许有相同的点,否则会分析失败;当不指定终点时,不允许有相同的点,如果有相同点,分析会失败。
此外,通过 TransportationAnalystParameter 对象还可以指定旅行商分析需要的其他信息,如障碍点(边),分析结果是否包含路由、行驶导引、途经弧段或结点等。具体内容请参见 TransportationAnalystParameter 类。
需要注意,网络分析中的最佳路径分析(FindPath 方法)与旅行商分析类似,都是在网络中寻找遍历所有经过点的花费最少的路径。但二者具有明显的区别,即在遍历所有经过点时,二者对访问经过点的顺序处理有所不同:
- 最佳路径分析:必须按照给定的经过点的次序访问所有点;
- 旅行商分析:需要确定最优次序来访问所有点,而并不一定按照指定的经过点的次序。
示例
以下代码示范了如何进行旅行商分析。
下面函数中操作的网络数据集为安装目录\SampleData\changchun\下的 changchun.udb 数据源中的名为 RoadNet 的网络数据集。
public void FindTSPPath(DatasetVector networkDataset) { //创建交通网络分析对象和交通网络分析参数对象并相应设置属性 TransportationAnalyst transportationAnalyst = new TransportationAnalyst(); TransportationAnalystSetting Setting = new TransportationAnalystSetting(); Setting.NetworkDataset = networkDataset; transportationAnalyst.AnalystSetting = Setting; //加载网络模型 transportationAnalyst.Load(); //构建并设置一个交通网络分析参数对象 TransportationAnalystParameter Parameter = new TransportationAnalystParameter(); Parameter.Nodes = new Int32[] { 2772, 3114, 2878 }; Parameter.IsNodesReturn = true; //进行旅行商分析 TransportationAnalystResult Result = transportationAnalyst.FindTSPPath(Parameter, false); //循环输出途径结点的 ID for (Int32 i = 0; i < Result.Nodes.Length; i++) { for (Int32 j = i; j < Result.Nodes[i].Length; j++) { Console.WriteLine(Result.Nodes[i][j].ToString()); } } }