public class TransportationAnalyst3D extends InternalHandleDisposable
三维交通网络分析类。该类用于提供基于三维网络数据集的交通网络分析功能。目前只提供最佳路径分析。
道路、铁路、建筑物内通道、矿井巷道等可以使用交通网络进行模拟,与设施网络不同,交通网络是没有方向,即流通介质(行人或传输的资源)可以自行决定方向、速度和目的地。当然,也可以进行一定的限制,例如设置交通规则,如单行线、禁行线等。
三维交通网络分析是基于三维网络数据集的分析,是三维网络分析的重要内容,目前提供了最佳路径分析。对于交通网络,尤其是对建筑物的内部通道、矿井巷道这类在二维平面无法清晰展现的交通网络,三维网络能够更加真实的体现网络的空间拓扑结构和分析结果。
三维交通网络分析的一般步骤:1.设置三维交通网络分析环境(setAnalystSetting() 方法)。
2.(可选)建议对用于分析的网络数据集进行数据检查( check() 方法);
3.加载网络模型( load() 方法);
4.使用 TransportationAnalyst3D 类提供的各种交通网络分析方法进行相应的分析。
| 构造器和说明 |
|---|
TransportationAnalyst3D()
构造一个新的 TransportationAnalyst3D对象。
|
| 限定符和类型 | 方法和说明 |
|---|---|
TransportationAnalystCheckResult3D |
check()
对三维交通网络数据集进行数据检查,返回三维交通网络分析数据检查结果对象。
|
void |
dispose()
释放该对象所占用的资源。
|
TransportationAnalystResult3D |
findPath(TransportationAnalystParameter3D parameter)
最佳路径分析。
|
TransportationAnalystSetting3D |
getAnalystSetting()
返回三维交通网络分析环境设置。
|
boolean |
load()
根据三维交通网络分析环境设置,加载网络模型。
|
void |
setAnalystSetting(TransportationAnalystSetting3D value)
设置三维交通网络分析环境设置。
|
public void dispose()
public boolean load()
TransportationAnalystSetting3D)对象中的环境参数,加载网络模型。
只有调用该方法,所做的交通网络分析环境设置才会在交通网络分析的过程中生效。该方法需要在设置 setAnalystSetting() 方法之后调用。
注意:
1、出现以下两种情况都必须重新调用 load() 方法来加载网络模型,然后再进行分析,并且在重新调用前,必须先调用 dispose() 方法释放 TransportationAnalystSetting3D 对象所占用的资源,否则可能出错。
①对三维交通网络分析环境设置对象的参数进行了修改,需要重新调用该方法,否则所作修改不会生效从而导致分析结果错误;
②对所使用的网络数据集进行了任何修改,包括修改网络数据集中的数据、替换数据集等,都需要重新加载网络模型,否则分析可能出错。
2、已经调用 load() 方法加载了网络模型,再次调用 load() 方法之前,必须先调用 dispose() 方法释放资源,否则加载可能失败。public TransportationAnalystSetting3D getAnalystSetting()
public void setAnalystSetting(TransportationAnalystSetting3D value)
value - 三维交通网络分析环境设置。public TransportationAnalystResult3D findPath(TransportationAnalystParameter3D parameter)
TransportationAnalystParameter3D 类的 setNodes() 方法指定最佳路径分析所经过的结点的 ID,此时,分析过程中经过的点就是相应的网络结点,而经过点的次序是网络结点在这个结点 ID 数组中的次序;
2、任意坐标点方式:通过 TransportationAnalystParameter3D 类的 setPoints( 方法指定最佳路径分析所经过的点的坐标,此时,分析过程中经过的点就是相应的坐标点集合,分析过程中经过点的次序是坐标点在点集合中的次序。
注意:两种方式只能选择一种使用,不能同时使用。parameter - 指定的三维交通网络分析环境设置。
private void findPathExample(DatasetVector networkDataset) {
//构造三维交通网络分析环境设置对象,并设置相关参数
TransportationAnalystSetting3D transportationAnalystSetting = new TransportationAnalystSetting3D();
transportationAnalystSetting.setNetworkDataset(networkDataset);
transportationAnalystSetting.setNodeIDField("SMNODEID");
transportationAnalystSetting.setEdgeIDField("SMEDGEID");
transportationAnalystSetting.setFNodeIDField("SMFNODE");
transportationAnalystSetting.setTNodeIDField("SMTNODE");
transportationAnalystSetting.setTolerance(20);
//设置权重信息
WeightFieldInfo3D weightFieldInfo = new WeightFieldInfo3D();
weightFieldInfo.setName("Length");
weightFieldInfo.setFTWeightField("SMLENGTH");
weightFieldInfo.setTFWeightField("SMLENGTH");
WeightFieldInfos3D weightFieldInfos = new WeightFieldInfos3D();
weightFieldInfos.add(weightFieldInfo);
transportationAnalystSetting.setWeightFieldInfos(weightFieldInfos);
//设置障碍点和障碍边
transportationAnalystSetting.setBarrierNodes(new int[] { 17, 104 });
transportationAnalystSetting.setBarrierEdges(new int[] { 80, 310, 309 });
//设置交通规则
transportationAnalystSetting.setRuleField("TrafficRule");
transportationAnalystSetting.setFTSingleWayRuleValues(new String[] { "FT" });
transportationAnalystSetting.setTFSingleWayRuleValues(new String[] { "TF" });
transportationAnalystSetting.setTwoWayRuleValues(new String[] { "Two" });
transportationAnalystSetting.setProhibitedWayRuleValues(new String[] { "Prohibite" });
//构造一个三维交通网络分析对象,并设置分析环境
TransportationAnalyst3D transportationAnalyst = new TransportationAnalyst3D();
transportationAnalyst.setAnalystSetting(transportationAnalystSetting);
//加载网络模型
Boolean isLoad = transportationAnalyst.load();
if (isLoad) {
//构造三维交通网络分析参数对象,并设置相关参数
TransportationAnalystParameter3D parameter = new TransportationAnalystParameter3D();
parameter.setNodes(new int[] { 69, 106, 43 });
parameter.setWeightName("Length");
parameter.setNodesReturn(true);
parameter.setEdgesReturn(true);
parameter.setRoutesReturn(true);
parameter.setStopIndexesReturn(true);
//进行最佳路径分析
TransportationAnalystResult3D result = transportationAnalyst.findPath(parameter);
//输出最佳路径经过的结点
int[][] nodes = result.getNodes();
System.out.println("最佳路径经过的结点依次为:");
for (int i = 0; i < nodes[0].length; i++) {
System.out.print(nodes[0][i] + " ");
}
System.out.println();
//输出最佳路径经过的弧段
int[][] edges = result.getEdges();
System.out.println("最佳路径经过的弧段依次为:");
for (int i = 0; i < edges[0].length; i++) {
System.out.print(edges[0][i] + " ");
}
System.out.println();
}
//分析完毕,释放三维交通网络分析对象所占的资源
transportationAnalyst.dispose();
}
public TransportationAnalystCheckResult3D check()
