public class TransportationAnalyst
extends com.supermap.data.InternalHandleDisposable
交通网络分析类。该类用于提供最佳路径分析、旅行商分析、服务区分析、物流配送分析、最近设施查找和选址分区分析等交通网络分析的功能。
交通网络分析是网络分析的重要组成部分,是基于交通网络模型的分析。与设施网络模型不同,交通网络是没有方向的,即使可以为网络边线指定方向,但流通介质(行人或传输的资源)可以自行决定方向、速度和目的地。
使用该类进行交通网络分析的数据基础是拥有网络数据集,可通过 NetworkBuilder
类的 buildNetwork 方法来构建网络数据集。在分析前,需要通过 setAnalystSetting
方法设置交通网络分析环境(TransportationAnalystSetting
)。
还可以阅读《网络分析》技术文档以便了解更多有关网络分析的基本概念和功能介绍。
同时还新增了多网络数据集模型 loadMultiAnalyst
,适用于新的需求,例如移动端室内导航、数据厂商的数据为分块的情况以及数据需要局部更新时。
构造器和说明 |
---|
TransportationAnalyst()
构造一个新的交通网络分析对象。
|
限定符和类型 | 方法和说明 |
---|---|
static void |
addSteppedListener(SteppedListener l)
添加一个进度条事件(
SteppedEvent )的监听器。 |
AllocationAnalystResult |
allocate(AllocationAnalystParameter parameter)
资源分配分析。
|
TransportationAnalystCheckResult |
check()
已过时。
由于check不需要load,改为静态方法迁移到
NetworkBuilder.check(NetworkCheckParameter, SteppedListener...) 中,不再局限于交通网络分析,设施网络也可使用。 |
boolean |
check(ArrayList<Integer> networks,
ArrayList<Integer> turns)
已过时。
使用
check() 替代。
对网络数据集和转向表进行数据检查。 |
double[][] |
computeWeightMatrix(TransportationAnalystParameter parameter)
计算给定点的耗费矩阵。
|
boolean |
createModel(String filePath)
创建内存文件。
|
void |
dispose()
释放对象所占用的资源。
|
TransportationAnalystResult |
findClosestFacility(TransportationAnalystParameter parameter,
int eventID,
int facilityCount,
boolean isFromEvent,
double maxWeight)
根据指定的参数进行最近设施查找分析,事件点为结点 ID。
|
TransportationAnalystResult |
findClosestFacility(TransportationAnalystParameter parameter,
Point2D eventPoint,
int facilityCount,
boolean isFromEvent,
double maxWeight)
根据指定的参数进行最近设施查找分析,事件点为坐标点。
|
int[] |
findCriticalEdges(int startPoint,
int endPoint)
关键弧段查询。
|
int[] |
findCriticalNodes(int startPoint,
int endPoint)
关键结点查询。
|
GroupAnalystResult |
findGroup(GroupAnalystParameter parameter,
GroupPointInfo[] pointInfo,
double maxCost,
double maxLoad)
分组分析。
|
LocationAnalystResult |
findLocation(LocationAnalystParameter parameter)
根据给定的参数进行选址分区分析。
|
TransportationAnalystResult |
findMTSPPath(TransportationAnalystParameter parameter,
int[] centerNodes,
boolean hasLeastTotalCost)
多旅行商(物流配送)分析,配送中心为结点 ID 数组。
|
TransportationAnalystResult |
findMTSPPath(TransportationAnalystParameter parameter,
Point2Ds centerPoints,
boolean hasLeastTotalCost)
多旅行商(物流配送)分析,配送中心为点坐标串。
|
TransportationAnalystResult |
findPath(TransportationAnalystParameter parameter,
boolean hasLeastEdgeCount)
最佳路径分析。
|
TransportationAnalystResult |
findPathByMultiNetwork(MultiTransportationAnalystParameter parameter)
多路网数据集分析结果。
|
ServiceAreaResult |
findServiceArea(TransportationAnalystParameter parameter,
double[] weights,
boolean isFromCenter,
boolean isCenterMutuallyExclusive)
服务区分析。
|
TransportationAnalystResult |
findTSPPath(TransportationAnalystParameter parameter,
boolean isEndNodeAssigned)
旅行商分析。
|
VRPAnalystResult |
findVRPPath(VRPAnalystParameter parameter,
VehicleInfo[] vehicleInfos,
CenterPointInfo[] centerInfos,
DemandPointInfo[] demandInfos)
物流配送分析。
|
TransportationAnalystSetting |
getAnalystSetting()
返回交通网络分析环境设置对象。
|
boolean |
load()
加载网络模型。
|
boolean |
loadModel(String filePath,
DatasetVector networkDataset)
加载内存文件。
|
boolean |
loadMultiAnalyst()
加载多路网数据集分析。
|
static void |
removeSteppedListener(SteppedListener l)
移除一个进度条事件(
SteppedEvent )的监听器。 |
void |
setAnalystSetting(TransportationAnalystSetting value)
设置交通网络分析环境设置对象。
|
void |
setMultiAnalystSetting(MultiTransportationAnalystSetting value)
设置多路网数据集分析环境设置对象。
|
double |
updateEdgeWeight(int edgeID,
int fromNodeID,
int toNodeID,
String weightName,
double weight)
该方法用来更新弧段的权值。
|
double |
updateTurnNodeWeight(int nodeID,
int fromEdgeID,
int toEdgeID,
String turnWeightField,
double weight)
该方法用来更新转向结点的权值。
|
public void dispose()
public boolean load()
该方法根据交通网络分析环境设置(TransportationAnalystSetting
)对象中的环境参数,加载网络模型。在设置好交通网络分析环境的参数后,只有调用该方法,所做的交通网络分析环境设置才会在交通网络分析的过程中生效。
注意:
public TransportationAnalystSetting getAnalystSetting()
在利用交通网络分析类进行各种交通网络分析时,都要首先设置交通网络分析的环境,而交通网络分析环境的设置就是通过 TransportationAnalyst
类对象的 setAnalystSetting()
方法来完成的,具体该方法中都设置了哪些相关信息,请参见 TransportationAnalystSetting
类。
TransportationAnalystSetting
对象的默认值。public void setAnalystSetting(TransportationAnalystSetting value)
在利用交通网络分析类进行各种交通网络分析时,都要首先设置交通网络分析的环境,都要首先设置交通网络分析的环境,而交通网络分析环境的设置就是通过 TransportationAnalyst
类对象的 setAnalystSetting()
方法来完成的,具体该方法中都设置了哪些相关信息,请参见 TransportationAnalystSetting
类。
value
- 交通网络分析环境设置对象。public double updateEdgeWeight(int edgeID, int fromNodeID, int toNodeID, String weightName, double weight)
该方法用于对加载到内存中的网络模型的弧段权值进行修改,并不会修改网络数据集。
该方法可以更新弧段的正向权值或反向权值。正向权重是指从弧段的起始结点到达终止结点的花费,反向权值为从弧段的终止结点到达起始结点的花费。因此,指定 fromNodeID 为网络数据集中被更新弧段的起始结点 ID,toNodeID 为该弧段的终止结点 ID,则更新正向权值,反之,指定 fromNodeID 为网络数据集中该弧段的终止结点 ID,toNodeID 为该弧段的起始结点 ID,则更新反向权值。
注意,权值为负数表示弧段在该方向禁止通行。
edgeID
- 被更新的弧段的 ID。fromNodeID
- 被更新的弧段的起始结点 ID。toNodeID
- 被更新的弧段的终止结点 ID。weightName
- 被更新的权值字段所属的权值字段信息对象的名称,即在交通网络分析环境(TransportationAnalystSetting
)中指定的 WeightFieldInfos
对象中相应的 WeightFieldInfo
对象的 getName()
方法的返回值。weight
- 权值,即用该值更新旧值。单位与 weightName 指定的权值信息字段对象中权值字段的单位相同。public void UpdateEdgeWeightExample(DatasetVector networkDataset) { //创建交通网络分析对象和交通网络分析参数对象并进行相应设置 TransportationAnalyst transportationAnalyst = new TransportationAnalyst(); TransportationAnalystSetting transportationAnalystSetting = new TransportationAnalystSetting(); transportationAnalystSetting.setNetworkDataset ( networkDataset); transportationAnalyst.setAnalystSetting ( transportationAnalystSetting); //加载网络模型 transportationAnalyst.load(); //构建一个交通网络分析参数对象 TransportationAnalystParameter parameter = new TransportationAnalystParameter(); parameter.setNodes ( new int[] { 6901, 6783 }); TransportationAnalystResult result1 = transportationAnalyst.findPath(parameter, true); System.out.println("The weight is " + result1.getWeights()[0]); //修改更新弧段的权值 transportationAnalyst.updateEdgeWeight(10, 6901, 6783, "Length", 200); TransportationAnalystResult result2 = transportationAnalyst.findPath(parameter, true); System.out.println("The weight is " + result2.getWeights()[0]); }
public double updateTurnNodeWeight(int nodeID, int fromEdgeID, int toEdgeID, String turnWeightField, double weight)
该方法用于对加载到内存中的网络模型的转向权值进行修改,并不会修改转向表。
在一个结点处,可能产生多种转向。转弯的方向通过给定的转向结点的起始弧段 ID 和终止弧段 ID 确定。详细介绍请参阅 createTurnTable
方法。
注意,转向权值为负数表示该转弯方向禁止通行。
nodeID
- 被更新的转向结点 ID。fromEdgeID
- 被更新的转向结点的起始弧段 ID。toEdgeID
- 被更新的转向结点的终止弧段 ID。turnWeightField
- 转向权值字段名称。weight
- 权值,即用该值更新旧值。单位与 turnWeightField 指定的转向权值字段的单位相同。public TransportationAnalystResult findPath(TransportationAnalystParameter parameter, boolean hasLeastEdgeCount)
最佳路径分析解决的问题是,在网络数据集中,给定 N 个点(N 大于等于2),找出按照给定点的次序依次经过这 N 个点的花费最小的路径。“花费最小”有多种理解,如时间最短、费用最低、风景最好、路况最佳、过桥最少、收费站最少、经过乡村最多等。
最佳路径分析的经过点是在 TransportationAnalystParameter
类型的参数 parameter 中指定的。通过 TransportationAnalystParameter
对象有两种方式可以指定经过点:
setNodes
方法,以网络数据集中结点 ID 数组的形式指定最佳路径分析经过的点,因此分析过程中经过的点就是相应的网络结点;setPoints
方法,以坐标点串的形式指定最佳路径分析经过的点,因此分析过程中经过的点就是相应的坐标点。此外,通过 TransportationAnalystParameter
对象还可以指定最佳路径分析需要的其他信息,如障碍点(边),分析结果是否包含路由、行驶导引、途经弧段或结点等。具体内容请参见 TransportationAnalystParameter
类。
需要注意,网络分析中的旅行商分析(findTSPath
方法)与最佳路径分析类似,都是在网络中寻找遍历所有经过点的花费最少的路径。但二者具有明显的区别,即在遍历经过点时,二者对访问经过点的顺序处理有所不同:
parameter
- 交通网络分析参数对象。hasLeastEdgeCount
- 是否弧段数最少。true 代表按照弧段数最少进行查询,由于弧段数少不代表弧段长度短,所以此时查出的结果可能不是最短路径。如下图所示,如果连接AB 的绿色路径的弧段数少于黄色路径,当本参数设置为 true 时,绿色路径就是查询得到的路径,当参数设置为 false 时,黄色路径就是查询得到的路径。
updateEdgeWeight()方法的示例。
public TransportationAnalystResult findTSPPath(TransportationAnalystParameter parameter, boolean isEndNodeAssigned)
旅行商分析是查找经过指定一系列点的路径,旅行商分析是无序的路径分析。旅行商可以自己决定访问结点的顺序,目标是旅行路线阻抗总和最小(或接近最小)。
旅行商分析的经过点是在 TransportationAnalystParameter
类型的参数 parameter 中指定的。通过 TransportationAnalystParameter
对象有两种方式可以指定经过点:
setNodes
方法,以网络数据集中结点 ID 数组的形式指定旅行商分析经过的点,因此分析过程中经过的点就是相应的网络结点;setPoints
方法,以坐标点串的形式指定旅行商分析经过的点,因此分析过程中经过的点就是相应的坐标点。需要强调的是,此方法默认将给定的经过点集合中的第一个点(结点或坐标点)作为旅行商的起点。此外,用户还可以指定终点(对应方法中的 isEndNodeAssigned 参数)。如果选择指定终点,则给定的经过点集合的最后一个点为终点,此时旅行商从第一个给定点出发,到指定的终点结束,而其他经过点的访问次序由旅行商自己决定。
另外,如果选择指定终点,终点可以与起点相同,即经过点集合中的最后一个点与第一个点相同。此时,旅行商分析的结果是一条闭合路径,即从起点出发,最终回到该点。
注意:使用该方法时,如果选择指定终点(对应方法中的 hasLeastEdgeCount 参数),指定的经过点集合的第一个点与最后一点可以相同,也可以不同;其他点不允许有相同的点,否则会分析失败;当不指定终点时,不允许有相同的点,如果有相同点,分析会失败。
此外,通过 TransportationAnalystParameter
对象还可以指定旅行商分析需要的其他信息,如障碍点(边),分析结果是否包含路由、行驶导引、途经弧段或结点等。具体内容请参见 TransportationAnalystParameter
类。
需要注意,网络分析中的最佳路径分析(findPath
方法)与旅行商分析类似,都是在网络中寻找遍历所有经过点的花费最少的路径。但二者具有明显的区别,即在遍历经过点时,二者对访问经过点的顺序处理有所不同:
parameter
- 交通网络分析参数对象。isEndNodeAssigned
- 是否指定终点。指定为 true 表示指定终点,此时给定的经过点集合中最后一个点即为终点;否则不指定终点。public void FindTSPPath(DatasetVector networkDataset) { //创建交通网络分析对象和交通网络分析参数对象并进行相应设置 TransportationAnalyst transportationAnalyst = new TransportationAnalyst(); TransportationAnalystSetting Setting = new TransportationAnalystSetting(); Setting.setNetworkDataset (networkDataset); transportationAnalyst.setAnalystSetting(Setting); //加载网络模型 transportationAnalyst.load(); //构建并设置一个交通网络分析参数对象 TransportationAnalystParameter Parameter = new TransportationAnalystParameter(); Parameter.setNodes ( new int[] { 2772, 3114, 2878 }); Parameter.setNodesReturn ( true); //进行旅行商分析 TransportationAnalystResult Result = transportationAnalyst.findTSPPath(Parameter, false); //循环输出途径结点的ID for (int i = 0; i < Result.getNodes().length; i++) { for (int j = i; j < Result.getNodes()[i].length; j++) { System.out.println(Result.getNodes()[i][j]); } } }
public TransportationAnalystResult findClosestFacility(TransportationAnalystParameter parameter, int eventID, int facilityCount, boolean isFromEvent, double maxWeight)
最近设施查找分析是指在网络上给定一个事件点和一组设施点,为事件点查找以最小耗费能到达的一个或几个设施点,结果为从事件点到设施点(或从设施点到事件点)的最佳路径。
有关最近设施查找分析的详细介绍,请参见另一重载方法 findClosestFacility
方法。这两个方法的区别在于,该方法通过坐标点指定事件点,而本方法通过结点 ID 指定事件点。
注意:
事件点和设施点必须为相同的类型,即都以坐标点形式指定,或都以结点 ID 形式指定。本方法要求设施点与事件点均为结点 ID,即需要通过 TransportationAnalystParameter 对象的 setNodes
方法来设置设施点。
parameter
- 交通网络分析参数对象。eventID
- 事件点 ID。facilityCount
- 要查找的设施点数量。isFromEvent
- 是否从事件点到设施点进行查找。maxWeight
- 查找半径。单位同网络分析环境中设置的阻力字段,如果要查找整个网络,该值设为0。public void FindClosesetFacilityExample(DatasetVector networkDataset,DatasetVector pointDataset) { //创建交通网络分析参数对象并进行相应设置 TransportationAnalystSetting transportationAnalystSetting = new TransportationAnalystSetting(); transportationAnalystSetting.setNetworkDataset(networkDataset); transportationAnalystSetting.setNodeIDField ( "SmNodeID"); transportationAnalystSetting.setEdgeIDField ( "SmID"); transportationAnalystSetting.setTolerance ( 89.00); //设置权重信息 WeightFieldInfos weightInfos = new WeightFieldInfos(); WeightFieldInfo weightInfo = new WeightFieldInfo(); weightInfo.setFTWeightField ( "SmLength"); weightInfo.setTFWeightField ( "Smlength"); weightInfo.setName ( "Name"); weightInfos.add(weightInfo); transportationAnalystSetting.setWeightFieldInfos (weightInfos); //创建交通网络分析对象,设置分析环境对象,加载网络模型 TransportationAnalyst transportationAnalyst = new TransportationAnalyst(); transportationAnalyst.setAnalystSetting (transportationAnalystSetting); transportationAnalyst.load(); //从设施点数据集中直接得到记录集 Recordset recordset = pointDataset.getRecordset(false, CursorType.DYNAMIC); //返回医院的ID赋值给途径结点ID int[] nodes = new int[recordset.getRecordCount()]; for (int i = 0; i < recordset.getRecordCount(); i++) { nodes[i] = i; } //构造交通网络分析参数对象,进行相应设置 TransportationAnalystParameter parameter = new TransportationAnalystParameter(); parameter.setNodes (nodes); parameter.setWeightName (weightInfo.getName()); parameter.setEdgesReturn (true); parameter.setNodesReturn (true); parameter.setRoutesReturn (true); //进行最近设施分析 int eventPoint = 100; int facilityCount = 3; double maxWeight = 0.0; TransportationAnalystResult result = transportationAnalyst.findClosestFacility(parameter, eventPoint, facilityCount, true, maxWeight); }
public TransportationAnalystResult findClosestFacility(TransportationAnalystParameter parameter, Point2D eventPoint, int facilityCount, boolean isFromEvent, double maxWeight)
最近设施分析是指在网络上给定一个事件点和一组设施点,为事件点查找以最小耗费能到达的一个或几个设施点,结果为从事件点到设施点(或从设施点到事件点)的最佳路径。
设施点和事件点是最近设施查找分析的基本要素。设施点是提供服务的设施,如学校、超市、加油站等;事件点则是需要设施点的服务的事件位置。
例如,在某位置发生一起交通事故,要求查找在 10 分钟内最快到达的 3 家医院,超过 10 分钟能到达的都不予考虑。此例中,事故发生地即是一个事件点,周边的医院则是设施点。
事件点的指定方式有两种,一是通过坐标点来指定;二是以网络数据集中的结点 ID 指定,也就是将该网络结点看做事件点,本方法中事件点的指定是采用坐标点的方式。在另一重载方法 findClosestFacility
中,事件点通过结点 ID 来指定。
设施点则是在 TransportationAnalystParameter
类型的参数 parameter 中指定的。通过 TransportationAnalystParameter
对象有两种方式可以指定经过点:
setNodes
方法,以网络数据集中结点 ID 数组的形式指定设施点,因此分析过程中使用到的设施点就是相应的网络结点;setPoints
方法,以坐标点串的形式指定设施点,因此分析过程中使用到的设施点就是相应的坐标点。注意:
事件点和设施点必须为相同的类型,即都以坐标点形式指定,或都以结点 ID 形式指定。本方法要求设施点与事件点均为坐标点,即需要通过 TransportationAnalystParameter 对象的 setPoints
方法来设置设施点。
另外,最近设施查找实际上也是一种路径分析,因此,同样可以应用障碍边和障碍点的设置,在行驶路途上这些障碍将不能被穿越,在路径分析中会予以考虑。
通过 TransportationAnalystParameter
对象还可以指定最佳路径分析需要的其他信息,如权重信息,分析结果是否包含路由、行驶导引、途经弧段或结点等。具体内容请参见 TransportationAnalystParameter
类。
parameter
- 交通网络分析参数对象。eventPoint
- 事件点坐标。facilityCount
- 要查找的设施点数量。isFromEvent
- 是否从事件点到设施点进行查找。maxWeight
- 查找半径。单位同网络分析环境中设置的阻力字段,如果要查找整个网络,该值设为 0。public void FindClosesetFacilityExample(DatasetVector networkDataset,DatasetVector pointDataset) { //创建交通网络分析参数对象并进行相应设置 TransportationAnalystSetting transportationAnalystSetting = new TransportationAnalystSetting(); transportationAnalystSetting.setNetworkDataset(networkDataset); transportationAnalystSetting.setNodeIDField ("SmNodeID"); transportationAnalystSetting.setEdgeIDField ("SmID"); transportationAnalystSetting.setTolerance ( 89.00); //设置权重信息 WeightFieldInfos weightInfos = new WeightFieldInfos(); WeightFieldInfo weightInfo = new WeightFieldInfo(); weightInfo.setFTWeightField ("SmLength"); weightInfo.setTFWeightField ("Smlength"); weightInfo.setName ("Name"); weightInfos.add(weightInfo); transportationAnalystSetting.setWeightFieldInfos (weightInfos); //创建交通网络分析对象并设置分析环境对象 TransportationAnalyst transportationAnalyst = new TransportationAnalyst(); transportationAnalyst.setAnalystSetting (transportationAnalystSetting); //加载网络模型 transportationAnalyst.load(); //从设施点数据集中直接得到记录集 Recordset recordset = pointDataset.getRecordset(false, CursorType.DYNAMIC); //遍历设施点记录集中的每条记录,得到几何对象 //得到点几何对象的X、Y坐标构造点对象,并添加到点集合对象中 Point2Ds points = new Point2Ds(); for (int i = 0; i < recordset.getRecordCount(); i++) { GeoPoint geoPoint = (GeoPoint)recordset.getGeometry(); Point2D point = new Point2D(geoPoint.getX(), geoPoint.getY()); points.add(point); recordset.moveNext(); } //构造交通网络分析参数对象,进行相应设置 TransportationAnalystParameter parameter = new TransportationAnalystParameter(); parameter.setPoints ( points); parameter.setWeightName (weightInfo.getName()); parameter.setEdgesReturn ( true); parameter.setNodesReturn ( true); parameter.setRoutesReturn (true); //进行最近设施分析 Point2D eventPoint = new Point2D(3534, 3820); int facilityCount = 3; double maxWeight = 0.0; TransportationAnalystResult result = transportationAnalyst.findClosestFacility(parameter, eventPoint, facilityCount, true, maxWeight); }
public TransportationAnalystResult findMTSPPath(TransportationAnalystParameter parameter, int[] centerNodes, boolean hasLeastTotalCost)
多旅行商分析也称为物流配送,是指在网络数据集中,给定 M 个配送中心点和 N 个配送目的地(M,N 为大于零的整数),查找经济有效的配送路径,并给出相应的行走路线。如何合理分配配送次序和送货路线,使配送总花费达到最小或每个配送中心的花费达到最小,是物流配送所解决的问题。
有关多旅行商分析的详细介绍,请参见另一重载方法 findMTSPPath
方法。这两个方法的区别在于,该方法通过坐标点集合指定配送中心点,而本方法通过结点 ID 数组指定配送中心点。
注意:
配送中心点和配送目的地必须为相同的类型,即都以坐标点形式指定,或都以结点 ID 形式指定。本方法要求配送目的地与配送中心点均为结点 ID,即需要通过 TransportationAnalystParameter 对象的 setNodes
方法来设置配送目的地。
parameter
- 交通网络分析参数对象。centerNodes
- 配送中心结点 ID 数组。hasLeastTotalCost
- 配送模式是否为总花费最小方案。若为 true,则按照总花费最小的模式进行配送,此时可能会出现某些配送中心点配送的花费较多而其他的配送中心点的花费较少的情况。若为 false,则为局部最优,此方案会控制每个配送中心点的花费,使各个中心点花费相对平均,此时总花费不一定最小。public TransportationAnalystResult findMTSPPath(TransportationAnalystParameter parameter, Point2Ds centerPoints, boolean hasLeastTotalCost)
多旅行商分析也称为物流配送,是指在网络数据集中,给定 M 个配送中心点和 N 个配送目的地(M,N 为大于零的整数),查找经济有效的配送路径,并给出相应的行走路线。如何合理分配配送次序和送货路线,使配送总花费达到最小或每个配送中心的花费达到最小,是物流配送所解决的问题。
配送中心点的指定方式有两种,一是通过坐标点集合指定,二是以网络结点 ID 数组指定。本方法中配送中心点要求以坐标点集合的方式给出(centerPoints 参数),因此相应的坐标点就是配送中心点。在另一重载方法 findMTSPPath
中,配送中心点通过结点 ID 数组来指定,此时,相应的网络结点就被看成是配送中心。
配送目的地则是在 TransportationAnalystParameter
类型的参数 parameter 中指定。通过 TransportationAnalystParameter
对象有两种方式可以指定配送目的地:
setNodes
方法,以网络数据集中结点 ID 数组的形式指定配送目的地,因此分析过程中使用到的配送目的地就是相应的网络结点;setPoints
方法,以坐标点串的形式指定配送目的地,因此分析过程中使用到的配送目的地就是相应的坐标点。注意:
配送中心点和配送目的地必须为相同的类型,即都以坐标点形式指定,或都以结点 ID 形式指定。本方法要求配送目的地与配送中心点均为坐标点,即需要通过 TransportationAnalystParameter 对象的 setPoints
方法来设置配送目的地。
此外,通过 TransportationAnalystParameter
对象还可以指定最佳路径分析需要的其他信息,如障碍点(边),分析结果是否包含路由、行驶导引、途经弧段或结点等。具体内容请参见 TransportationAnalystParameter
类。
多旅行商分析的结果将给出每个配送中心所负责的配送目的地,以及这些配送目的地的经过顺序,和相应的行走路线,从而使该配送中心的配送花费最少,或者使得所有的配送中心的总花费最小。并且,配送中心点在完成其所负责的配送目的地的配送任务后,最终会回到配送中心点。
应用实例:现有 50 个报刊零售地(配送目的地),和 4 个报刊供应地(配送中心),现寻求这 4 个供应地向报刊零售地发送报纸的最优路线,属物流配送问题。
下图为报刊配送的分析结果,其中红色大一点的圆点代表 4 个报刊供应地(配送中心),而其他小一点的圆点代表报刊零售地(配送目的地),每个配送中心的配送方案采用不同的颜色标示,包括它所负责的配送目的地、配送次序以及配送线路。
下图为上图中矩形框圈出的第 2 号配送中心的配送方案。蓝色的标有数字的小圆点是2号配送中心所负责的配送目的地(共有 18 个),2 号配送中心将按照配送目的地上标有数字的顺序依次发送报纸,即先送 1 号报刊零售地,再送 2 号报刊零售地,依次类推,并且沿着分析得出的蓝色线路完成配送,最终回到配送中心。
需要注意,由于物流配送的目的是寻找使配送总花费最小或每个配送中心的花费最小的方案,因此,分析结果中有可能某些物流配送中心点不参与配送。
parameter
- 交通网络分析参数对象。centerPoints
- 配送中心点坐标串。hasLeastTotalCost
- 配送模式是否为总花费最小方案。若为 true,则按照总花费最小的模式进行配送,此时可能会出现某些配送中心点配送的花费较多而其他的配送中心点的花费较少的情况。若为 false,则为局部最优,此方案会控制每个配送中心点的花费,使各个中心点花费相对平均,此时总花费不一定最小。public void FindMTSPPath1(DatasetVector networkDataset) { //创建交通网络分析对象和交通网络分析参数对象并进行相应设置 TransportationAnalyst transportationAnalyst = new TransportationAnalyst(); TransportationAnalystSetting transportationAnalystSetting = new TransportationAnalystSetting(); transportationAnalystSetting.setNetworkDataset ( networkDataset); transportationAnalyst.setAnalystSetting ( transportationAnalystSetting); //加载网络模型 transportationAnalyst.load(); //构建并设置交通网络分析参数对象 TransportationAnalystParameter parameter = new TransportationAnalystParameter(); Point2Ds pt2Ds=new Point2Ds(new Point2D[] { new Point2D(14, 50),new Point2D(30, 28),new Point2D(40,50) }); parameter.setPoints (pt2Ds); parameter.setPathGuidesReturn ( true); parameter.setStopIndexesReturn ( true); parameter.setWeightName("Length"); //设置配送中心点坐标串 Point2D[] point2D = { new Point2D(10, 20), new Point2D(30, 40), new Point2D(50, 60) }; Point2Ds point2Ds = new Point2Ds(point2D); new Point2Ds(new Point2D[] { new Point2D(14, 50),new Point2D(30, 28),new Point2D(40,50) }); //进行多旅行商分析,返回多旅行商分析结果 TransportationAnalystResult Result = transportationAnalyst.findMTSPPath(parameter, point2Ds, false); }
public ServiceAreaResult findServiceArea(TransportationAnalystParameter parameter, double[] weights, boolean isFromCenter, boolean isCenterMutuallyExclusive)
服务区是以指定点为中心,在一定阻力范围内,包含所有可通达边、通达点的一个区域。服务区分析就是依据给定的阻力值(即服务半径)为网络上提供某种特定服务的位置(即中心点)查找其服务的范围(即服务区)的过程。阻力可以是到达的时间、距离或其他任何花费。例如:为网络上某点计算其 30 分钟的服务区,则结果服务区内,任意点出发到该点的时间都不会超过 30 分钟。
服务区分析的结果包含了每个服务中心点所能服务到的路由和区域。路由是指从服务中心点出发,按照阻力值不大于所指定的服务半径的原则,沿网络弧段延伸出的路径;服务区则是按照一定算法将路由包围起来所形成的面状区域。如下图所示,红色圆点代表提供服务或资源的服务中心点,各种颜色的面状区域就是以相应的服务中心点为中心,在给定的阻力范围内的服务区,每个服务中心点所服务到的路由也以对应的颜色标示。
调用本方法时,需要通过 parameter 参数指定一个交通分析参数设置(TransportationAnalystParameter
)对象,通过该对象的方法指定服务区分析的有关参数,包括服务区的位置、权值(即阻力)信息、障碍信息,以及分析结果中是否返回行驶导引、路由对象、经过的弧段和结点的集合等。
服务中心点
通过 TransportationAnalystParameter
对象有两种方式可以指定服务中心点的位置:
setNodes()
方法,以网络数据集中结点 ID 数组的形式指定服务中心点,因此分析过程中使用到的服务中心点就是相应的网络结点。setPoints()
方法,以服务中心点的坐标点串的形式指定服务中心点,因此分析过程中使用到的服务中心点就是相应的坐标点集合。是否从中心点分析
是否从中心点开始分析,体现了服务中心和需要该服务的需求地的关系模式。从中心点开始分析,表示服务中心向服务需求地提供服务;而不从中心点开始分析,则代表服务需求地主动到服务中心获得服务。例如:某个奶站向各个居民点送牛奶,如果要对这个奶站进行服务区分析,查看这个奶站在允许的条件下所能服务的范围,那么在实际分析过程中应当使用从中心点开始分析的模式;另一个例子,如果想分析一个区域的某个学校在允许的条件下所能服务的区域时,由于在现实中都是学生主动来到学校学习,接受学校提供的服务,那么在实际分析过程中就应当使用不从中心点开始分析的模式。
服务区分析种类
服务区分析有两种。有简单服务区分析和详细服务区分析。选择简单服务区,将构造能覆盖结果路由的凸面作为结果服务区面。选择详细服务区,生成的分析结果会严格按照结果路由生成面轮廓结果。相较于简单服务区,详细服务区更能准确的对服务区进行建模。
服务区互斥
若两个或多个相邻的服务区有交集,可将它们进行互斥处理。互斥处理后,这些服务区不会有交叠。如图所示左图未进行互斥处理,右图进行了互斥处理。
parameter
- 交通网络分析参数对象。weights
- 服务区半径数组。数组长度应与给定的服务中心点的数量一致,且数组元素按照顺序与中心点一一对应。服务区半径的单位与指定的权值信息中的正向、反向阻力字段的单位一致。isFromCenter
- 是否从中心点开始分析。isCenterMutuallyExclusive
- 是否进行服务区互斥处理。如果设置为 true,则进行互斥处理,设置为 false,则不进行互斥处理。public void FindServiceArea(DatasetVector networkDataset) { //创建交通网络分析对象和交通网络分析参数对象并进行相应设置 TransportationAnalystSetting Setting = new TransportationAnalystSetting(); Setting.setNetworkDataset (networkDataset); TransportationAnalyst transportationAnalyst = new TransportationAnalyst(); transportationAnalyst.setAnalystSetting (Setting); //加载网络模型 transportationAnalyst.load(); //构建并设置交通网络分析参数对象 TransportationAnalystParameter Parameter = new TransportationAnalystParameter(); Parameter.setNodes (new int[] { 3, 40 }); Parameter.setRoutesReturn(true); //进行网络分析,查找服务区 ServiceAreaResult serviceAreaResult = transportationAnalyst.findServiceArea(Parameter, new double[] { 28.0, 50.0 }, false, false); }
public AllocationAnalystResult allocate(AllocationAnalystParameter parameter)
资源分配分析模拟现实世界网络中资源的供需关系模型,资源根据网络阻力值的设置,由供应点逐步向需求点(包括弧段或结点)分配,并确保供应点能以最经济有效的方式为需求点提供资源。离中心点阻力值最小的需求点(包括弧段或结点)先得到资源,然后再分配剩余资源给阻力值次小的需求点(包括弧段或结点),依此类推,直到中心点的资源耗尽,分配中止。
parameter
- 资源分配分析参数对象。public LocationAnalystResult findLocation(LocationAnalystParameter parameter)
选址分区分析是为了确定一个或多个待建设施的最佳位置,使得设施可以用一种最经济有效的方式为需求方提供服务或者商品。选址分区不仅仅是一个选址过程,还要将需求点的需求分配到相应的设施的服务区中,因此称之为选址与分区。
资源供给中心:即中心点,是提供资源和服务的设施,对应于网络结点,资源供给中心的相关信息包括最大阻力值、资源供给中心类型,资源供给中心在网络中所处结点的 ID 等。
需求点:通常是指需要资源供给中心提供的服务和资源的位置,也对应于网络结点。
最大阻力值用来限制需求点到资源供给中心的花费。如果需求点到此资源供给中心的花费大于最大阻力值,则该需求点被过滤掉,即该资源供给中心不能服务到此需求点。
资源供给中心分为三种:非中心点,固定中心点和可选中心点。固定中心点是指网络中已经存在的、已建成或已确定要建立的服务设施(扮演资源供给角色);可选中心点是指可以建立服务设施的资源供给中心,即待建服务设施将从这些可选中心点中选址;非中心点在分析时不予考虑,在实际中可能是不允许建立这项设施或者已经存在了其他设施。
另外,分析过程中使用的需求点都为网络结点,即除了各种类型的中心点所对应的网络结点,所有网络结点都作为资源需求点参与选址分区分析,如果要排除某部分结点,可以将其设置为障碍点。
选址分区可以选择从资源供给中心开始分配资源,或不从资源供给中心分配:
电能是从电站产生,并通过电网传送到客户那里去的。在这里,电站就是网络模型中的中心,因为它可以提供电力供应。电能的客户沿电网的线路(网络模型中的弧段)分布,他们产生了“需求”。在这种情况下,资源是通过网络由供方传输到需要来实现资源分配的。
学校与学生的关系也构成一种在网络中供需分配关系。学校是资源提供方,它负责提供名额供适龄儿童入学。适龄儿童是资源的需求方,他们要求入学。作为需求方的适龄儿童沿街道网络分布,他们产生了对作为供给方的学校的资源--学生名额的需求。
某个区域目前有 3 所小学,根据需求,拟在该区域内再建立 3 所小学。选择了 9 个地点作为待选地点,将在这些待选点中选择 3 个最佳地点建立新的小学。如图 1 所示,已有的 3 所小学为固定中心点,7 个候选位置为可选中心点。新建小学要满足的条件为:居民点中的居民步行去学校的时间要在 30 分钟以内。选址分区分析会根据这一条件给出最佳的选址位置,并且圈出每个学校,包括已有的 3 所学校的服务区域。如图 2 所示,最终序号为 5、6、8 的可选中心点被选为建立新学校的最佳地点。
备注:下面两幅中的网络数据集的所有网络结点被看做是该区域的居民点全部参与选址分区分析,居民点中的居民数目即为该居民点所需服务的数量。
资源供给中心及其类型和最大阻力值,是否从资源供给中心分配,期望分析出的资源供给中心数目等,均在 LocationAnalystParameter
类型的参数 parameter 中指定,具体含义参见 LocationAnalystParameter
类。
parameter
- 选址分析参数对象。public void FindLocationExample(DatasetVector networkDataset) { //构造交通网络分析环境设置对象,进行相应设置 TransportationAnalystSetting setting = new TransportationAnalystSetting(); setting.setNetworkDataset (networkDataset); setting.setEdgeIDField ("SmID"); setting.setNodeIDField ("SmNodeID"); setting.setTolerance (89.00); //设置权重信息 WeightFieldInfos weightFieldInfos = new WeightFieldInfos(); WeightFieldInfo weightFieldInfo = new WeightFieldInfo(); weightFieldInfo.setFTWeightField ("SmLength"); weightFieldInfo.setTFWeightField ("SmLength"); weightFieldInfo.setName ("Length"); weightFieldInfos.add(weightFieldInfo); setting.setWeightFieldInfos (weightFieldInfos); setting.setFNodeIDField ("SmFNode"); setting.setTNodeIDField ("SmTNode"); //构造交通网络分析对象,加载环境设置对象 TransportationAnalyst transportationAnalyst = new TransportationAnalyst(); transportationAnalyst.setAnalystSetting (setting); transportationAnalyst.load(); //构造交通网络分析参数,进行相应设置 LocationAnalystParameter parameter = new LocationAnalystParameter(); //构造5个资源供给中心对象并进行相应设置 int[] id = { 3534, 1190, 1384, 4503, 5416 }; for (int i = 0; i < id.length; i++) { SupplyCenter supplyCenter = new SupplyCenter(); supplyCenter.setID (id[i]); supplyCenter.setMaxWeight( 7000); supplyCenter.setType (SupplyCenterType.OPTIONALCENTER); // 添加资源供给中心对象到集合 parameter.getSupplyCenters().add(supplyCenter); } parameter.setFromCenter ( true); parameter.setExpectedSupplyCenterCount (5); parameter.setWeightName (weightFieldInfo.getName()); //进行选址分析,返回选址分析结果 LocationAnalystResult result = transportationAnalyst.findLocation(parameter); //返回需求结果的相关信息 DemandResult[] demandResult = result.getDemandResults(); System.out.println(demandResult[1].getID()); System.out.println(demandResult[1].getSupplyCenterID()); }
public double[][] computeWeightMatrix(TransportationAnalystParameter parameter)
该方法可以计算指定的结点(或坐标点)间的耗费矩阵。可以通过 TransportationAnalystParameter
对象的 setNodes
方法指定待计算耗费矩阵的结点,通过 setPoints
方法指定待计算的坐标点,注意二者互斥,如果同时设置,则只有分析前最后的设置有效。例如,先指定了结点集合,又指定了坐标点集合,然后分析,此时只对坐标点进行分析。
该方法将计算两点间的最小耗费,也就是两点间最佳路径的耗费,并且设置障碍点或障碍边有效,与 findPath
方法的结果耗费一致。
耗费矩阵为一个等长二维数组,元素的索引与指定的被计算点的索引一致,例如,元素 [1,2] 的值为点集合中索引为 1 的点到索引为 2 的点的最小耗费。注意,计算结果包含点自身到自身的耗费,并且为 0。
parameter
- 指定的交通网络分析参数。public void ComputeWeightMatrixExample(DatasetVector networkDataset) { //创建交通网络分析参数对象并进行相应设置 TransportationAnalystSetting transportationAnalystSetting = new TransportationAnalystSetting(); transportationAnalystSetting.setNetworkDataset(networkDataset); transportationAnalystSetting.setNodeIDField ("SmNodeID"); transportationAnalystSetting.setEdgeIDField ("SmID"); transportationAnalystSetting.setTolerance (89.00); //设置权重信息 WeightFieldInfos weightInfos = new WeightFieldInfos(); WeightFieldInfo weightInfo = new WeightFieldInfo(); weightInfo.setFTWeightField ("SmLength"); weightInfo.setTFWeightField ("Smlength"); weightInfo.setName ("Name"); weightInfos.add(weightInfo); transportationAnalystSetting.setWeightFieldInfos (weightInfos); //创建交通网络分析对象并设置分析环境对象 TransportationAnalyst transportationAnalyst = new TransportationAnalyst(); transportationAnalyst.setAnalystSetting (transportationAnalystSetting); //加载网络模型 transportationAnalyst.load(); //构造交通网络分析参数设置对象,设置权重名称、设置结点ID数组 TransportationAnalystParameter parameter = new TransportationAnalystParameter(); parameter.setWeightName(weightInfo.getName()); int[] nodes = { 3534, 3000, 3820 }; parameter.setNodes (nodes); //创建耗费矩阵分析,返回二维数组 double[][] matrix = transportationAnalyst.computeWeightMatrix(parameter); //释放资源 workspace.dispose(); }
@Deprecated public TransportationAnalystCheckResult check()
NetworkBuilder.check(NetworkCheckParameter, SteppedListener...)
中,不再局限于交通网络分析,设施网络也可使用。该方法用于对交通网络数据集和转向表进行检查,给出错误信息,便于用户针对错误信息对数据进行修改,以避免由于数据错误导致交通网络分析错误。
注意,该方法需要在设置交通网络分析环境(setAnalystSetting
方法)之后调用,但不需要加载网络模型(load
方法)。
如果在交通网络分析环境(TransportationAnalystSetting
)中没有指定转向表,则不会检查转向表。
该方法返回一个交通网络分析数据检查结果(TransportationAnalystCheckResult)对象,通过该对象的 getArcErrorInfos
方法和 getNodeErrorInfos
方法可以返回网络数据集的弧段错误信息和结点错误信息;通过 getTurnErrorInfos
方法可以返回转向表的错误信息。错误信息分别存储在三个映射(HashMap)中,键代表错误弧段或结点的 SMID,值代表错误类型。错误类型以数字表示,代表的具体错误含义如下表所示。
@Deprecated public boolean check(ArrayList<Integer> networks, ArrayList<Integer> turns)
check()
替代。
对网络数据集和转向表进行数据检查。该方法用于在进行交通网络分析之前,对网络数据集和转向表进行数据检查,给出错误信息,便于用户针对错误信息对数据进行修改,以避免由于数据错误导致交通网络分析的结果错误。
注意:该方法必须在使用 load
方法加载了网络模型之后调用,否则对数据的检查操作无效。
调用该方法之前,需要先实例化一个 TransportationAnalyst
对象,并通过 setAnalystSetting
方法设置该对象的交通网络分析环境(TransportationAnalystSetting
),通过一个实例化的 TransportationAnalystSetting
对象,可以设置交通网络分析的相关参数,包括网络数据集、转向表数据集、弧段 ID 字段、结点 ID 字段等,之后再调用该方法进行数据检查。该方法可以只检查网络数据集的数据错误,此时可以不指定转向表数据集,但当检查转向表数据时,必须指定对应的网络数据集。
数据检查结果说明:
该方法需要传入两个数组,数据检查的结果会存入其中。
网络数据集数据错误记录数组(方法中的 networks 参数)的结构为:位于奇数位的元素代表检查出错误的弧段的 SMID,该奇数位的下一个偶数位的元素代表了该弧段的错误类型,以数字表示,代表的具体错误含义如下表所示:
转向表数据集数据错误记录数组(方法中的 turns 参数)的结构与网络数据集错误记录数组类似,位于奇数位的元素代表检查出的错误的结点的 SMID,该奇数位的下一个偶数位的元素代表了该结点的错误类型,以数字表示,对应的具体错误含义如下表所示:
networks
- 指定的用于存储对网络数据集检查出的错误结果。该集合的元素含义请参见备注部分。turns
- 指定的用于存储对转向表检查出的错误结果。该集合的元素含义请参见备注部分。public boolean loadModel(String filePath, DatasetVector networkDataset)
生成文件所用到的网络数据集需和该接口传入的网络数据集一样,否则加载会失败。
为了提高分析效率,建议为网络数据集创建空间索引以及字段索引。
filePath
- 内存文件所处的路径。networkDataset
- 所用到的网络数据集。public boolean createModel(String filePath)
该接口需要在调用完load()接口之后调用,可以生成对应load()的内存文件。
filePath
- 创建内存文件的路径。public VRPAnalystResult findVRPPath(VRPAnalystParameter parameter, VehicleInfo[] vehicleInfos, CenterPointInfo[] centerInfos, DemandPointInfo[] demandInfos)
该接口和之前的物流配送接口 findMTSPPath
相比,多出了车辆信息、需求量等的设置,可以更充分的满足不同情况下的需求。
物流配送分析参数对象 VRPAnalystParameter
可以设置障碍边、障碍点、权值字段信息的名字标识、转向权值字段,还可以对分析结果进行一些设置,即在分析结果中是否包含分析途经的以下内容:结点集合,弧段集合,路由对象集合以及站点集合。
车辆信息 VehicleInfo
中可以设置每辆车各自的负载量、最大耗费等条件,VehicleInfo[1]表示所有车辆为同一规格,VehicleInfo[N]表示可以提供N辆车;中心点信息 CenterPointInfo
中可以设置包括中心的坐标或者结点ID;需求点信息 DemandPointInfo
中可以设置每个需求点的坐标或者结点ID,以及各自的需求量。
通过对车辆、需求点和中心点相关信息的设置,该接口可以根据这些条件来合理划分路线,完成相应的分配任务。
parameter
- 物流配送分析参数对象。vehicleInfos
- 车辆信息数组。centerInfos
- 中心点信息数组。demandInfos
- 需求点信息数组。public void FindVRPPathExample(DatasetVector networkDataset) { //创建交通网络分析参数对象并进行相应设置 TransportationAnalystSetting transportationAnalystSetting = new TransportationAnalystSetting(); transportationAnalystSetting.setNetworkDataset(networkDataset); transportationAnalystSetting.setNodeIDField ("SmNodeID"); transportationAnalystSetting.setEdgeIDField ("SmID"); transportationAnalystSetting.setTolerance (89.00); //设置权重信息 WeightFieldInfos weightInfos = new WeightFieldInfos(); WeightFieldInfo weightInfo = new WeightFieldInfo(); weightInfo.setFTWeightField ("SmLength"); weightInfo.setTFWeightField ("Smlength"); weightInfo.setName ("Name"); weightInfos.add(weightInfo); transportationAnalystSetting.setWeightFieldInfos (weightInfos); //创建交通网络分析对象并设置分析环境对象 TransportationAnalyst transportationAnalyst = new TransportationAnalyst(); transportationAnalyst.setAnalystSetting (transportationAnalystSetting); //加载网络模型 transportationAnalyst.load(); //构造物流分析参数设置对象,设置权重名称、分析模式: VRPAnalystParameter parameter = new VRPAnalystParameter(); parameter.setWeightName(weightInfo.getName()); parameter.setAnalystType(AnalystType.LEASTCOST); //设置车辆信息数组: VehicleInfo[] vehicles = new VehicleInfo[2]; vehicles[0] = new VehicleInfo(); vehicles[0].setCost(5000); vehicles[0].setLoadWeights(new double[]{50}); vehicles[1] = new VehicleInfo(); vehicles[1].setCost(8000); vehicles[1].setLoadWeights(new double[]{60}); //设置中心点信息数组: CenterPointInfo[] centers = new CenterPointInfo[1]; centers[0] = new CenterPointInfo(); centers[0].setCenterID(2695); //设置需求点信息数组: DemandPointInfo[] demands = new DemandPointInfo[5]; double[][] demandsValue = {{15},{18},{15},{15},{20}}; int[] demandsID = {2718,4449,2572,5028,1749}; for (int i=0;i<5;i++){ demands[i].setDemandID(demandsID[i]); demands[i].setDemands(demandsValue[i]);} //进行物流分析,返回物流分析方案 VRPAnalystResult result = transportationAnalyst.findVRPPath(parameter, vehicles, centers, demands); //释放资源 workspace.dispose(); }
public int[] findCriticalNodes(int startPoint, int endPoint)
关键结点,表示两点间必定会经过的结点。
通过调用该接口,可以获得两点间必定经过的结点ID数组,如果返回值为空,则说明该两点不存在关键结点。
该接口与 findCriticalEdges
类似。
startPoint
- 分析起点。endPoint
- 分析终点。public int[] findCriticalEdges(int startPoint, int endPoint)
关键弧段,表示两点间必定会经过的弧段。
通过调用该接口,可以获得两点间必定经过的弧段ID数组,如果返回值为空,则说明该两点不存在关键弧段。
该接口与 findCriticalNodes
类似。
startPoint
- 分析起点。endPoint
- 分析终点。public GroupAnalystResult findGroup(GroupAnalystParameter parameter, GroupPointInfo[] pointInfo, double maxCost, double maxLoad)
分组分析是基于网络分析模型,将分配点GroupPointInfo
按照一定的规则(分配点到达中心点setPoints
的距离不能大于最大耗费值maxCost,并且每一个中心点的负载量不能大于最大负载量maxLoad)寻找出所属的中心点,每当一个中心点被分配了一个分配点,则中心点所在的分组的负载量会增加该分配点对应的负载量。
parameter
- 分组分析参数对象。pointInfo
- 分组分析分配点信息集合。maxCost
- 最大耗费值。maxLoad
- 最大负载量。public static void addSteppedListener(SteppedListener l)
SteppedEvent
)的监听器。l
- 一个用于接收进度条事件的监听器。public static void removeSteppedListener(SteppedListener l)
SteppedEvent
)的监听器。l
- 一个用于接收进度条事件的监听器。public boolean loadMultiAnalyst()
多网络数据集分析和传统的网络分析不同点在于,传统的网络分析需要将所有道路要素全部合并到一个网络数据集中,并且需要保证整个网络数据集的连通性。而现实实现的多网络数据集的分析可以将网络数据进行分块存储,即不必将所有道路要素全部存储到一个网络数据集中,网络数据集之间的联系使用属性进行连接。因此非常适用于室内导航场景。
多网络数据集分析模型,各个网络数据集之间是通过关联点相连接的,如下图所示,A1点与B1点关联,A2点与B2点关联,然后就可以从网络数据集A中的P1点分析到网络数据集B中的P2点了。
多网络数据集模型结构即网络数据集数组和关联关系(可参考MultiTransportationAnalystRelation
)。例如在室内导航场景中,室内各层为各网络数据集,关联关系为楼梯关系等,构建完多网络数据集模型后,再进行后续导航分析。
因此多网络数据集模型拥有以下优势:
public void setMultiAnalystSetting(MultiTransportationAnalystSetting value)
value
- 多路网数据集分析环境设置对象。public TransportationAnalystResult findPathByMultiNetwork(MultiTransportationAnalystParameter parameter)
parameter
- 多路网数据集分析参数。Copyright © 2021–2024 SuperMap. All rights reserved.