public class UGCTransportationAnalystProvider extends java.lang.Object implements Disposable, ProviderContextAware, TransportationAnalystProvider
SuperMap 交通网络分析服务提供者。
UGCTransportationAnalystProvider 提供了 SuperMap 交通网络分析的相关服务,封装了与 SuperMap 交通网络分析相关的 GIS 功能。
当用坐标表示站点,该点又不在网络结点或弧段上时,交通网络分析过程中, 会取容限范围(参见 TransportationAnalystSetting.tolerance
)内对应弧段的起始结点 和终止结点作为站点分别计算,然后取最小的计算结果。
使用 SuperMap 数据构建交通网络分析服务提供者(自动构建 SuperMap 数据服务提供者)的示例代码如下:
public UGCTransportationAnalystProvider buildUGCTransportationAnalystProviderSample(){ ///构建交通网络分析环境设置 TransportationAnalystSetting setting = new TransportationAnalystSetting(); //所用的 SuperMap 数据,并制定数据源和网络数据集。 setting.workspaceConnectString = "../data/networkanalyst/network.sxwu"; //指定数据源。 setting.datasourceName = "network"; //指定进行交通网络分析的网络数据集。 setting.datasetName = "netfindpath"; //设置可用的权值信息集合。 //名为 CostInformation 的权值信息。 WeightFieldInfo fieldInfo1 = new WeightFieldInfo(); fieldInfo1.name = "CostInformation"; fieldInfo1.forwardWeightField = "cost"; fieldInfo1.backWeightField = "cost"; //名为 LengthInformateion 的权值信息。 WeightFieldInfo fieldInfo2 = new WeightFieldInfo(); fieldInfo2.name = "LengthInformateion"; fieldInfo2.forwardWeightField = "smLength"; fieldInfo2.backWeightField = "smLength"; //构建可用的权值信息集合。 WeightFieldInfo[] weightFieldInfos=new WeightFieldInfo[]{fieldInfo1,fieldInfo2}; //设置可用的权值信息集合。 setting.weightFieldInfos = weightFieldInfos; //设置结点到弧段的距离容限。 setting.tolerance = 0.01; //设置表示弧段 ID 的字段名。 setting.edgeIDField="SmEdgeID"; //设置表示弧段名称的字段名。 setting.edgeNameField="SmEdgeID"; //设置表示结点 ID 的字段名。 setting.nodeIDField="SmNodeID"; //设置表示结点名称的字段名。 setting.nodeNameField="NodeLabel"; //标识弧段起始结点 ID 的字段名。 setting.fromNodeIDField="smFNode"; //标识弧段终止结点 ID 的字段名。 setting.toNodeIDField="SmTNode"; //设置转向表 TurnDatasetInfo turnDatasetInfo = new TurnDatasetInfo(); turnDatasetInfo.workspaceConnectString = "../data/networkanalyst/network.sxwu"; turnDatasetInfo.datasourceName = "network"; turnDatasetInfo.datasetName = "netfindpath_TRN"; turnDatasetInfo.fromEdgeIDField = "FEdgeID"; turnDatasetInfo.toEdgeIDField = "TEdgeID"; turnDatasetInfo.nodeIDField = "NodeID"; turnDatasetInfo.weightFields = new String[]{"TurnCost","TurnCost2"}; turnDatasetInfo.workspaceType = "SXWU"; setting.turnDatasetInfo=turnDatasetInfo; ///利用交通网络分析环境设置构建 SuperMap 交通网络分析服务提供者 UGCTransportationAnalystProvider analystProvider = new UGCTransportationAnalystProvider(setting); return analystProvider; }
构造器和说明 |
---|
UGCTransportationAnalystProvider()
构造函数。
|
UGCTransportationAnalystProvider(TransportationAnalystSetting setting)
通过交通网络分析设置构建一个
UGCTransportationAnalystProvider 对象。 |
UGCTransportationAnalystProvider(TransportationAnalystSetting setting, UGCDataProvider provider)
通过交通网络分析设置、使用的 SuperMap 数据服务提供者对象构建一个
UGCTransportationAnalystProvider 对象。 |
限定符和类型 | 方法和说明 |
---|---|
BurstAnalyseResult |
burstAnalyseFromEdge(int[] sourceNodeIDs, int edgeID, FacilityAnalystParameter parameter) |
BurstAnalyseResult |
burstAnalyseFromNode(int[] sourceNodeIDs, int nodeID, FacilityAnalystParameter parameter) |
static TransportationCheckUtil.CheckNetworkResult |
check(TransportationAnalystSetting setting) |
double[][] |
computeWeightMatrix(int[] nodeIDs, TransportationAnalystParameter parameter)
通过交通网络分析参数,得出一个耗费矩阵。
|
double[][] |
computeWeightMatrix(Point2D[] points, TransportationAnalystParameter parameter)
通过点坐标和交通网络分析参数,得出一个耗费矩阵。
|
protected UGCDataProvider |
createDataProvider(TransportationAnalystSetting config) |
protected TransportationAnalyst |
createTransportationAnalyst()
创建一个新的 SuperMap Objects Java 中的交通网络分析对象(TransportationAnalyst)。
|
protected com.supermap.analyst.networkanalyst.TransportationAnalystSetting |
createUGOSetting()
获取 SuperMap Object Java 中默认的交通网络分析环境设置对象。
|
protected com.supermap.analyst.networkanalyst.TransportationAnalystSetting |
createUGOSettingForCheck(com.supermap.analyst.networkanalyst.TransportationAnalystSetting ugoSetting) |
void |
dispose()
释放本 SuperMap 交通网络分析服务提供者所占用的资源。
|
ClosestFacilityPaths<java.lang.Integer> |
findClosestFacility(int[] facilityIDs, int event, int expectFacilityCount, boolean fromEvent, double maxWeight, TransportationAnalystParameter parameter)
最近设施查找分析,事件点以网络结点 ID 表示。
|
ClosestFacilityPaths<Point2D> |
findClosestFacility(Point2D[] facilityPoints, Point2D event, int expectFacilityCount, boolean fromEvent, double maxWeight, TransportationAnalystParameter parameter)
最近设施查找分析,事件点以点坐标表示。
|
FacilityAnalyst2DResult |
findConnectedEdgesFromEdges(int[] edgeIDs, boolean returnFeatures, boolean connected)
根据给定的弧段 ID 数组,查找与这些弧段相连通的弧段,返回弧段 ID 数组、要素数组
|
FacilityAnalyst2DResult |
findConnectedEdgesFromNodes(int[] nodeIDs, boolean returnFeatures, boolean connected)
根据给定的结点 ID 数组,查找与这些结点相连通或者不相连通的弧段,返回弧段 ID 数组、要素数组
|
FacilityAnalyst2DResult |
findCriticalFacilitiesDownFromEdge(int[] sourceNodeIDs, int edgeID, FacilityAnalystParameter parameter) |
FacilityAnalyst2DResult |
findCriticalFacilitiesDownFromNode(int[] sourceNodeIDs, int nodeID, FacilityAnalystParameter parameter) |
FacilityAnalyst2DResult |
findCriticalFacilitiesUpFromEdge(int[] sourceNodeIDs, int edgeID, FacilityAnalystParameter parameter) |
FacilityAnalyst2DResult |
findCriticalFacilitiesUpFromNode(int[] sourceNodeIDs, int nodeID, FacilityAnalystParameter parameter) |
LocationAnalystResult |
findLocation(LocationAnalystParameter parameter)
选址分区分析。
|
MTSPPaths<java.lang.Integer> |
findMTSPPath(int[] nodeIDs, int[] centerIDs, boolean hasLeastTotalCost, TransportationAnalystParameter parameter)
多旅行商(物流配送)分析,配送中心以网络结点 ID 数组表示。
|
MTSPPaths<Point2D> |
findMTSPPath(Point2D[] points, Point2D[] centers, boolean hasLeastTotalCost, TransportationAnalystParameter parameter)
多旅行商(物流配送)分析,配送中心以点坐标串表示。
|
Paths |
findPath(int[] nodeIDs, boolean hasLeastEdgeCount, TransportationAnalystParameter parameter)
最佳路径分析。
|
Paths |
findPath(Point2D[] points, boolean hasLeastEdgeCount, TransportationAnalystParameter parameter)
最佳路径分析。
|
ServiceAreaResults<java.lang.Integer> |
findServiceArea(int[] centerIDs, double[] weights, boolean isFromCenter, boolean isCenterMutuallyExclusive, TransportationAnalystParameter parameter)
服务区分析。
|
ServiceAreaResults<java.lang.Integer> |
findServiceArea(int[] centerIDs, double[] weights, ServiceAreaAnalystParameter analystParameter) |
ServiceAreaResults<Point2D> |
findServiceArea(Point2D[] centerPoints, double[] weights, boolean isFromCenter, boolean isCenterMutuallyExclusive, TransportationAnalystParameter parameter)
服务区分析。
|
ServiceAreaResults<Point2D> |
findServiceArea(Point2D[] centerPoints, double[] weights, ServiceAreaAnalystParameter parameter) |
TSPPaths |
findTSPPath(int[] nodeIDsToVisit, boolean endNodeAssigned, TransportationAnalystParameter parameter)
旅行商分析。
|
TSPPaths |
findTSPPath(Point2D[] pointsToVisit, boolean endNodeAssigned, TransportationAnalystParameter parameter)
旅行商分析。
|
java.lang.String |
getNetworkDataName()
获取网络数据名称。
|
PrjCoordSys |
getPrjCoordSys()
获取指定网络数据的投影信息。
|
java.lang.String[] |
getTurnWeightNames()
获取网络数据的转向权值字段名称列表。
|
java.lang.String[] |
getWeightNames()
获取网络数据的弧段权值字段名称列表。
|
protected TransportationAnalyst |
init(com.supermap.services.providers.SettingChecked settingChecked)
UGCTransportationAnalystProvider 的初始化。
|
protected com.supermap.analyst.networkanalyst.FacilityAnalyst |
initFacilityAnalyst(com.supermap.services.providers.SettingChecked settingChecked) |
void |
pauseForRefreshWorkspace()
阻止请求,以便刷新工作空间。
|
void |
refreshWorkspace()
刷新工作空间。
|
void |
refreshWorkspaceFinished()
刷新工作空间结束,继续请求。
|
boolean |
reloadModel()
重新加载网络模型。
|
protected int[] |
removeRepeat(int[] nodeIDsToVisit) |
protected Point2D[] |
removeRepeat(Point2D[] pointsToVisit) |
void |
setProviderContext(ProviderContext context)
设置 SuperMap 交通网络分析服务提供者上下文。
|
FacilityAnalyst2DResult |
traceDownFromEdge(int edgeID, FacilityAnalystParameter parameter)
根据给定的弧段 ID 进行下游追踪,即查找给定弧段的下游,返回下游包含的弧段、结点及总耗费
|
FacilityAnalyst2DResult |
traceDownFromNode(int nodeID, FacilityAnalystParameter parameter)
根据给定的结点 ID 进行下游追踪,即查找给定结点的下游,返回下游包含的弧段、结点及总耗费
|
FacilityAnalyst2DResult |
traceUpFromEdge(int edgeID, FacilityAnalystParameter parameter)
根据给定的弧段 ID 进行上游追踪,即查找给定弧段的上游,返回上游包含的弧段、结点及总耗费
|
FacilityAnalyst2DResult |
traceUpFromNode(int nodeID, FacilityAnalystParameter parameter)
根据给定的结点 ID 进行上游追踪,即查找给定结点的上游,返回上游包含的弧段、结点及总耗费
|
double |
updateEdgeWeight(int edgeID, int fromNodeID, int toNodeID, java.lang.String weightField, double weight)
更新弧段的权值。
|
double |
updateTurnNodeWeight(int nodeID, int fromEdgeID, int toEdgeID, java.lang.String turnWeightField, double weight)
更新转向结点的权值。
|
public UGCTransportationAnalystProvider()
构造函数。
public UGCTransportationAnalystProvider(TransportationAnalystSetting setting)
通过交通网络分析设置构建一个 UGCTransportationAnalystProvider
对象。
setting
- 交通网络分析设置对象。public UGCTransportationAnalystProvider(TransportationAnalystSetting setting, UGCDataProvider provider)
通过交通网络分析设置、使用的 SuperMap 数据服务提供者对象构建一个 UGCTransportationAnalystProvider
对象。
setting
- 交通网络分析设置对象。provider
- uperMap 数据服务提供者对象。public double[][] computeWeightMatrix(int[] nodeIDs, TransportationAnalystParameter parameter)
通过交通网络分析参数,得出一个耗费矩阵。
该矩阵是一个二维 double 数组,用来存储任意两点间的资源消耗。要计算耗费矩阵的目标点和权值字段在 parameter 参数中指定。
示例如下,其中 SuperMap 交通网络分析服务提供者的构建请参见buildUGCTransportationAnalystProviderSample。
public double[][] computeWeightMatrixSample(){ //构建 UGCTransportationAnalystProvider 的过程请参见 buildUGCTransportationAnalystProviderSample。 UGCTransportationAnalystProvider analystProvider=buildUGCTransportationAnalystProviderSample(); ///构建交通网络分析参数对象,即计算耗费矩阵需要的信息 TransportationAnalystParameter analystParameter = new TransportationAnalystParameter(); //设置计算耗费矩阵的目标点集合。 int[] nodeIDs = new int[]{1,5,10,20}; //设置计算耗费矩阵所用的权值信息的名称,该权值信息必须是交通网络分析环境的可用权值信息集合中所包含的。 analystParameter.weightFieldName="CostInformation"; //设置转向耗费字段,该字段必须是在交通网络分析环境的转向表中已经设置的。 analystParameter.turnWeightField="TurnCost"; //使用交通网络分析参数,执行耗费矩阵的计算。 double[][] matrix=analystProvider.computeWeightMatrix(nodeIDs, analystParameter); return matrix; }
computeWeightMatrix
在接口中 TransportationAnalystProvider
parameter
- 交通网络分析参数对象,指定计算耗费矩阵的目标点集合、所用权值字段等计算耗费矩阵需要的信息,参见 TransportationAnalystParameter
类。nodeIDs
- 需要计算耗费矩阵的点的ID的集合public double[][] computeWeightMatrix(Point2D[] points, TransportationAnalystParameter parameter)
通过点坐标和交通网络分析参数,得出一个耗费矩阵。
该矩阵是一个二维 double 数组,用来存储任意两点间的资源消耗。要计算耗费矩阵的目标点和权值字段在 parameter 参数中指定。
computeWeightMatrix
在接口中 TransportationAnalystProvider
points
- 需要计算耗费矩阵的点集合。parameter
- 交通网络分析参数对象,指定计算耗费矩阵的目标点集合、所用权值字段等计算耗费矩阵需要的信息,参见 TransportationAnalystParameter
类。public ClosestFacilityPaths<java.lang.Integer> findClosestFacility(int[] facilityIDs, int event, int expectFacilityCount, boolean fromEvent, double maxWeight, TransportationAnalystParameter parameter)
最近设施查找分析,事件点以网络结点 ID 表示。
最近设施分析是指在网络上给定一个事件点和一组设施点,为事件点查找以最小耗费能到达的一个或几个设施点,结果为从事件点到设施点(或从设施点到事件点)的最佳路径。
使用场景一:例如事件发生点是一起交通事故,要求查找在10分钟内能到达的最近医院,超过10分钟能到达的都不予考虑。此例中,事故发生地即是一个事件点,周边的医院则是设施点。最近设施查找实际上也是一种路径分析,因此,同样可以应用障碍边和障碍点的设置,在行驶路途上这些障碍将不能被穿越,在路径分析中会予以考虑。
在进行最近设施查找分析时,事件点的指定方式有两种,一个是可以以坐标点的形式指定;一个是以网络数据集中的结点ID指定, 也就是将该网络结点看做事件点,本方法中事件点的指定是采用结点 ID 号的方式。
findClosestFacility
在接口中 TransportationAnalystProvider
facilityIDs
- 表示设施点的结点 ID 数组,必设参数。event
- 表示事件点的结点 ID,必设参数。expectFacilityCount
- 要查找的设施点数量,可选参数,默认值为1。fromEvent
- 是否从事件点到设施点进行查找,可选参数,默认值为false。maxWeight
- 权值的最大限值,必设参数。单位同 parameter(交通网络分析通用参数)中设置的权值字段一致,如果要查找整个网络,该值设为 0。networkDataName
- 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()
的返回的数组的元素之一。parameter
- 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。public ClosestFacilityPaths<Point2D> findClosestFacility(Point2D[] facilityPoints, Point2D event, int expectFacilityCount, boolean fromEvent, double maxWeight, TransportationAnalystParameter parameter)
最近设施查找分析,事件点以点坐标表示。
近设施分析是指在网络上给定一个事件点和一组设施点,为事件点查找以最小耗费能到达的一个或几个设施点,结果为从事件点到设施点(或从设施点到事件点)的最佳路径。
使用场景一:例如事件发生点是一起交通事故,要求查找在10分钟内能到达的最近医院,超过10分钟能到达的都不予考虑。此例中,事故发生地即是一个事件点,周边的医院则是设施点。最近设施查找实际上也是一种路径分析,因此,同样可以应用障碍边和障碍点的设置,在行驶路途上这些障碍将不能被穿越,在路径分析中会予以考虑。
在进行最近设施查找分析时,事件点的指定方式有两种,一个是可以以坐标点的形式指定;一个是以网络数据集中的结点ID指定, 也就是将该网络结点看做事件点,本方法中事件点的指定是采用坐标点的方式。
findClosestFacility
在接口中 TransportationAnalystProvider
facilityPoints
- 表示设施点的坐标点数组,必设参数。event
- 表示事件点的坐标点,必设参数。expectFacilityCount
- 要查找的设施点数量,可选参数,默认值为1。fromEvent
- 是否从事件点到设施点进行查找,可选参数,默认值为false。maxWeight
- 权值的最大限值,必设参数。单位同 parameter(交通网络分析通用参数)中设置的权值字段一致,如果要查找整个网络,该值设为 0。networkDataName
- 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()
的返回的数组的元素之一。parameter
- 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。public MTSPPaths<java.lang.Integer> findMTSPPath(int[] nodeIDs, int[] centerIDs, boolean hasLeastTotalCost, TransportationAnalystParameter parameter)
多旅行商(物流配送)分析,配送中心以网络结点 ID 数组表示。
多旅行商分析也称为物流配送,是指在网络数据集中,给定 M 个配送中心点和 N 个配送目的地(M,N 为大于零的整数),查找经济有效的配送路径,并给出相应的行走路线。
物流配送功能就是解决如何合理分配配送次序和送货路线,使配送总花费达到最小或每个配送中心的花费达到最小。
多旅行商分析的结果将给出每个配送中心所负责的配送目的地,和每个配送中心向其负责的配送目的地配送货物时,经过各个配送目的地的顺序和相应的行走路线。 从而使各个配送中心的配送花费相对平均,或者使所有的配送中心的总花费最小。
findMTSPPath
在接口中 TransportationAnalystProvider
nodeIDs
- 配送目标结点 ID 数组,必设参数。centerIDs
- 配送中心结点 ID 数组,必设参数。hasLeastTotalCost
- 配送模式是否为总花费最小方案。可选参数,默认为false,表示采用局部最优方案,设置为 true 表示采用总花费最小方案。
总花费最小方案中,可能会出现某些配送中心点配送的花费较多,而其他的配送中心点的花费较少的情况。 局部最优方案中,会控制每个配送中心点的花费,使各个中心点花费相对平均,此时总花费不一定最小。
networkDataName
- 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()
的返回的数组的元素之一。parameter
- 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。public MTSPPaths<Point2D> findMTSPPath(Point2D[] points, Point2D[] centers, boolean hasLeastTotalCost, TransportationAnalystParameter parameter)
多旅行商(物流配送)分析,配送中心以点坐标串表示。
多旅行商分析也称为物流配送,是指在网络数据集中,给定 M 个配送中心点和 N 个配送目的地(M,N 为大于零的整数),查找经济有效的配送路径,并给出相应的行走路线。
物流配送功能就是解决如何合理分配配送次序和送货路线,使配送总花费达到最小或每个配送中心的花费达到最小。
多旅行商分析的结果将给出每个配送中心所负责的配送目的地,和每个配送中心向其负责的配送目的地配送货物时,经过各个配送目的地的顺序和相应的行走路线。 从而使各个配送中心的配送花费相对平均,或者使所有的配送中心的总花费最小。
findMTSPPath
在接口中 TransportationAnalystProvider
points
- 配送目标坐标点数组,必设参数。centerIDs
- 配送中心坐标点数组,必设参数。hasLeastTotalCost
- 配送模式是否为总花费最小方案。默认为false 表示采用局部最优方案,设置为 true 则表示采用总花费最小方案。
总花费最小方案中,可能会出现某些配送中心点配送的花费较多,而其他的配送中心点的花费较少的情况。 局部最优方案中,会控制每个配送中心点的花费,使各个中心点花费相对平均,此时总花费不一定最小。
networkDataName
- 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()
的返回的数组的元素之一。parameter
- 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。public Paths findPath(int[] nodeIDs, boolean hasLeastEdgeCount, TransportationAnalystParameter parameter)
最佳路径分析。
最佳路经分析解决的问题是,在网络数据集中,给定 N 个点(N 大于等于2),找出按照给定点的次序依次经过这 N 个点的阻抗最小的路经。 “阻抗最小”有多种理解,如时间最短、费用最低、风景最好、路况最佳、过桥最少、收费站最少、经过乡村最多等。
调用该方法实现路径查找,查找的结果就是依次经过 N 个点(N 大于等于2)的最佳路径。
最佳路径分析与旅行商分析的异同:
#findTSPPath(Point2D[],boolean,String,TransportationAnalystParameter)
方法。findPath
在接口中 TransportationAnalystProvider
nodeIDs
- 需要经过的网络结点 ID 数组,必设参数。hasLeastEdgeCount
- 是否按弧段数最少的模式查询。可选参数,默认为false, 代表不按照弧段最少进行查询。
networkDataName
- 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()
的返回的数组的元素之一。parameter
- 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。public Paths findPath(Point2D[] points, boolean hasLeastEdgeCount, TransportationAnalystParameter parameter)
最佳路径分析。
最佳路经分析解决的问题是,在网络数据集中,给定 N 个点(N 大于等于2),找出按照给定点的次序依次经过这 N 个点的阻抗最小的路经。 “阻抗最小”有多种理解,如时间最短、费用最低、风景最好、路况最佳、过桥最少、收费站最少、经过乡村最多等。
调用该方法实现路径查找,查找的结果就是依次经过 N 个点(N 大于等于2)的最佳路径。
最佳路径分析与旅行商分析的异同:
方法。
findPath
在接口中 TransportationAnalystProvider
points
- 需要经过的坐标点数组,必设参数。hasLeastEdgeCount
- 是否按弧段数最少的模式查询。可选参数,默认为false, 代表不按照弧段最少进行查询。
networkDataName
- 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()
的返回的数组的元素之一。parameter
- 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。public ServiceAreaResults<java.lang.Integer> findServiceArea(int[] centerIDs, double[] weights, boolean isFromCenter, boolean isCenterMutuallyExclusive, TransportationAnalystParameter parameter)
服务区分析。
服务区分析是为网络上指定的服务中心点查找其服务范围。
服务区:以指定点为中心,在一定阻力范围内,包含所有可通达边、通达点的一个区域。 单的说就是提供某种特定服务的位置按一定的条件所服务的区域。
服务区分析:为网络上指定的位置点计算服务范围。例如:为网络上某点计算其30分钟的服务区,则结果服务区内,任意点出发到该点的时间都不会超过30分钟。
如下面的示意图所示,展示了服务区分析将要解决的问题以及结果会提供什么样的信息。 图中的蓝色圆点代表提供服务的服务中心点, 各种颜色的面状区域就是以相应的服务中心点为中心,在给定的阻力范围内的服务区。
findServiceArea
在接口中 TransportationAnalystProvider
centerIDs
- 服务中心结点 ID 数组,必设参数。weights
- 服务半径集合,必设参数。该集合的大小跟服务中心个数一致, 标识了在对每个服务中心进行服务区分析时,所用的范围值。例如设置 weights[0] 为 30.0,可表明在第一个服务中心的结果服务区内, 任意点出发到该服务中心的时间都不应超过30分钟。isFromCenter
- 是否从中心点开始分析,可选参数,默认为false 表示不从中心点开始分析。
从中心点开始分析和不从中心点开始分析,体现了服务中心和需要该服务的需求地的关系模式。 从中心点开始分析,是一个服务中心向服务需求地提供服务;而不从中心点开始分析, 是一个服务需求地主动到服务中心获得服务。
例如:某个奶站向各个居民点送牛奶,如果要对这个奶站进行服务区分析,看这个奶站在允许的条件下所能服务的范围,那么在实际分析过程中就应当使用从中心点开始分析的模式;另一个例子,如果想分析一个区域的某个学校在允许的条件下所能服务的区域时,在现实中,都是学生主动来到学校学习,接受学校提供的服务,那么在实际分析过程中就应当使用不从中心点开始分析的模式。
isCenterMutuallyExclusive
- 是否对分析结果服务区进行互斥处理,可选参数,默认为False 表示不进行互斥处理, 若设置为 true, 表示如果分析出的服务区有重叠的部分,则进行互斥处理。注意:中心点互斥分析暂不支持。
互斥处理的示例如下图所示,左图未进行互斥处理,右图进行了互斥处理。
未进行互斥处理的效果 | 进行了互斥处理的效果 |
networkDataName
- 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()
的返回的数组的元素之一。parameter
- 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。public ServiceAreaResults<Point2D> findServiceArea(Point2D[] centerPoints, double[] weights, boolean isFromCenter, boolean isCenterMutuallyExclusive, TransportationAnalystParameter parameter)
服务区分析。
服务区分析是为网络上指定的服务中心点查找其服务范围。
服务区:以指定点为中心,在一定阻力范围内,包含所有可通达边、通达点的一个区域。 单的说就是提供某种特定服务的位置按一定的条件所服务的区域。
服务区分析:为网络上指定的位置点计算服务范围。例如:为网络上某点计算其30分钟的服务区,则结果服务区内,任意点出发到该点的时间都不会超过30分钟。
如下面的示意图所示,展示了服务区分析将要解决的问题以及结果会提供什么样的信息。 图中的蓝色圆点代表提供服务的服务中心点, 各种颜色的面状区域就是以相应的服务中心点为中心,在给定的阻力范围内的服务区。
findServiceArea
在接口中 TransportationAnalystProvider
centerPoints
- 服务中心坐标点数组,必设参数。weights
- 服务半径集合,必设参数。该集合的大小跟服务中心个数一致, 标识了在对每个服务中心进行服务区分析时,所用的范围值。例如设置 weights[0] 为 30.0,可表明在第一个服务中心的结果服务区内, 任意点出发到该服务中心的时间都不应超过30分钟。isFromCenter
- 是否从中心点开始分析,可选参数,默认为false 表示不从中心点开始分析。
从中心点开始分析和不从中心点开始分析,体现了服务中心和需要该服务的需求地的关系模式。 从中心点开始分析,是一个服务中心向服务需求地提供服务;而不从中心点开始分析, 是一个服务需求地主动到服务中心获得服务。
例如:某个奶站向各个居民点送牛奶,如果要对这个奶站进行服务区分析,看这个奶站在允许的条件下所能服务的范围,那么在实际分析过程中就应当使用从中心点开始分析的模式;另一个例子,如果想分析一个区域的某个学校在允许的条件下所能服务的区域时,在现实中,都是学生主动来到学校学习,接受学校提供的服务,那么在实际分析过程中就应当使用不从中心点开始分析的模式。
isCenterMutuallyExclusive
- 是否对分析结果服务区进行互斥处理,可选参数,默认为False 表示不进行互斥处理, 若设置为 true, 表示如果分析出的服务区有重叠的部分,则进行互斥处理。注意:中心点互斥分析暂不支持。
互斥处理的示例如下图所示,左图未进行互斥处理,右图进行了互斥处理。
未进行互斥处理的效果 | 进行了互斥处理的效果 |
networkDataName
- 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()
的返回的数组的元素之一。parameter
- 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。public ServiceAreaResults<java.lang.Integer> findServiceArea(int[] centerIDs, double[] weights, ServiceAreaAnalystParameter analystParameter)
findServiceArea
在接口中 TransportationAnalystProvider
centerIDs
- 服务中心节点ID数组,必设参数。weights
- 服务半径集合,必设参数。该集合的大小跟服务中心个数一致, 标识了在对每个服务中心进行服务区分析时,所用的范围值。例如设置 weights[0] 为 30.0,可表明在第一个服务中心的结果服务区内, 任意点出发到该服务中心的时间都不应超过30分钟。analystParameter
- 服务区交通网络分析参数。包含服务区分析的可选参数public ServiceAreaResults<Point2D> findServiceArea(Point2D[] centerPoints, double[] weights, ServiceAreaAnalystParameter parameter)
findServiceArea
在接口中 TransportationAnalystProvider
centerPoints
- 服务中心点坐标数组,必设参数。weights
- 服务半径集合,必设参数。该集合的大小跟服务中心个数一致, 标识了在对每个服务中心进行服务区分析时,所用的范围值。例如设置 weights[0] 为 30.0,可表明在第一个服务中心的结果服务区内, 任意点出发到该服务中心的时间都不应超过30分钟。parameter
- 服务区交通网络分析参数。包含服务区分析的可选参数public TSPPaths findTSPPath(int[] nodeIDsToVisit, boolean endNodeAssigned, TransportationAnalystParameter parameter)
旅行商分析。
旅行商分析是查找经过指定一系列点的路径,旅行商分析是无序的路径分析。旅行商可以自己决定访问结点的顺序,目标是旅行路线阻抗总和最小(或接近最小)。
在旅行商分析中,如果指定了终止点,则旅行商必须最后一个访问终止点,而其他经过点的访问次序有旅行商自己决定。
在旅行商分析中,需要途经的点是在 parameter 参数中指定的,其中点序列中的第一个点为旅行商的出发点。
最佳路径分析与旅行商分析的异同:
#findPath(Point2D[],boolean,String,TransportationAnalystParameter)
方法。findTSPPath
在接口中 TransportationAnalystProvider
nodeIDsToVisit
- 需要途经的网络结点的 ID 数组,必设参数。endNodeAssigned
- 是否指定终止点。可选参数,默认为False,如果设置为true ,则表示指定终止点,则旅行商必须最后一个访问终止点,即途经的最后一个点。networkDataName
- 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()
的返回的数组的元素之一。parameter
- 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。protected int[] removeRepeat(int[] nodeIDsToVisit)
public TSPPaths findTSPPath(Point2D[] pointsToVisit, boolean endNodeAssigned, TransportationAnalystParameter parameter)
旅行商分析。
旅行商分析是查找经过指定一系列点的路径,旅行商分析是无序的路径分析。旅行商可以自己决定访问结点的顺序,目标是旅行路线阻抗总和最小(或接近最小)。
在旅行商分析中,如果指定了终止点,则旅行商必须最后一个访问终止点,而其他经过点的访问次序有旅行商自己决定。
在旅行商分析中,需要途经的点是在 parameter 参数中指定的,其中点序列中的第一个点为旅行商的出发点。
最佳路径分析与旅行商分析的异同:
#findPath(Point2D[],boolean,String,TransportationAnalystParameter)
方法。findTSPPath
在接口中 TransportationAnalystProvider
pointsToVisit
- 需要途经的坐标点数组,必设参数。endNodeAssigned
- 是否指定终止点。可选参数,默认为False,如果设置为true ,则表示指定终止点,则旅行商必须最后一个访问终止点,即途经的最后一个点。networkDataName
- 必设参数,用于唯一标识一个网络数据集的字符串。#getNetworkDataNames()
的返回的数组的元素之一。parameter
- 交通网络分析通用参数。可选参数,默认使用TransportationAnalystSetting中的设置。public java.lang.String getNetworkDataName()
获取网络数据名称。
getNetworkDataName
在接口中 TransportationAnalystProvider
public PrjCoordSys getPrjCoordSys()
获取指定网络数据的投影信息。
getPrjCoordSys
在接口中 TransportationAnalystProvider
networkDataName
- 用于唯一标识一个网络数据的字符串。#getNetworkDataNames()
的返回的数组的元素之一。protected TransportationAnalyst init(com.supermap.services.providers.SettingChecked settingChecked)
UGCTransportationAnalystProvider 的初始化。即通过交通网络分析环境设置,获取 SuperMap Objects Java 中的 TransportationAnalyst 对象,用于交通网络分析。
settingChecked
- 交通网络分析环境设置。protected com.supermap.analyst.networkanalyst.FacilityAnalyst initFacilityAnalyst(com.supermap.services.providers.SettingChecked settingChecked)
protected com.supermap.analyst.networkanalyst.TransportationAnalystSetting createUGOSettingForCheck(com.supermap.analyst.networkanalyst.TransportationAnalystSetting ugoSetting)
protected com.supermap.analyst.networkanalyst.TransportationAnalystSetting createUGOSetting()
获取 SuperMap Object Java 中默认的交通网络分析环境设置对象。
protected TransportationAnalyst createTransportationAnalyst()
创建一个新的 SuperMap Objects Java 中的交通网络分析对象(TransportationAnalyst)。
public void dispose()
释放本 SuperMap 交通网络分析服务提供者所占用的资源。
dispose
在接口中 Disposable
public void setProviderContext(ProviderContext context)
设置 SuperMap 交通网络分析服务提供者上下文。
setProviderContext
在接口中 ProviderContextAware
context
- SuperMap 交通网络分析服务提供者上下文。protected UGCDataProvider createDataProvider(TransportationAnalystSetting config)
public LocationAnalystResult findLocation(LocationAnalystParameter parameter)
选址分区分析。
选址分区分析是为了确定一个或多个待建设施的最佳或最优位置, 使得设施可以用一种最经济有效的方式为需求方提供服务或者商品。 选址分区不仅仅是一个选址过程,还要将需求点的需求分配到相应的新建设施的服务区中,因此称之为选址与分区。
在选址分区分析过程中,资源供给中心以及分析模式的设定是在 LocationAnalystParameter 类型的参数 parameter 中实现的,具体细节参见 LocationAnalystParameter
类。
在分析过程中使用的需求点都为网络结点,即除了各种类型的中心点所对应的网络结点, 所有网络结点都作为资源需求点参与选址分区分析,如果要排除某部分结点,可以将其设置为障碍点。
例子:如下图所示,某个区域还没有邮局,现在想在这个区域内建立邮局,有15个待选地点(如图一所示,蓝色方框代表 15个候选地点),将在这些待选点中选择7个最佳地点建立邮局。最佳选址要满足,居民点中的居民步行去邮局办理业务的 步行时间要在30分钟以内,同时每个邮局能够服务的居民总人数有限,在同时满足这两个条件的基础上,选址分区分析会 给出以个最佳的选址位置,并且圈出每个邮局的服务区域(如图二所示,红色点表示最后选出的7个建立邮局的最佳位置)。
备注:下面两幅中的网络数据集的所有网络结点被看做是该区域的居民点全部参与选址分区分析, 居民点中的居民数目即为该居民点所需服务的数量。
图一 用于分析的网络数据集和15个候选中心示意图
图二 选址分区分析结果示意图
示例如下,其中 SuperMap 交通网络分析服务提供者的构建请参见buildUGCTransportationAnalystProviderSample。
public LocationAnalystResult findLocationSample(){ //构建 UGCTransportationAnalystProvider 的过程请参见 buildUGCTransportationAnalystProviderSample。 UGCTransportationAnalystProvider analystProvider=buildUGCTransportationAnalystProviderSample(); ///构建交通网络分析参数对象,即选址分区分析需要的信息 LocationAnalystParameter locationAnalystParameter = new LocationAnalystParameter(); locationAnalystParameter.expectedSupplyCenterCount=3; locationAnalystParameter.isFromCenter=true; locationAnalystParameter.nodeDemandField ="NodeCost"; locationAnalystParameter.turnWeightField="TurnCost"; locationAnalystParameter.weightName="CostInformation"; SupplyCenter center1 = new SupplyCenter(2, 30.0, 20.0, SupplyCenterType.FIXEDCENTER); SupplyCenter center2 = new SupplyCenter(15, 50.0, 20.0, SupplyCenterType.OPTIONALCENTER); SupplyCenter center3 = new SupplyCenter(12, 30.0, 20.0, SupplyCenterType.OPTIONALCENTER); SupplyCenter center4 = new SupplyCenter(10, 30.0, 20.0, SupplyCenterType.OPTIONALCENTER); SupplyCenterCollection collection = new SupplyCenterCollection(); collection.add(center1); collection.add(center2); collection.add(center3); collection.add(center4); locationAnalystParameter.supplyCenters=collection; LocationAnalystResult result = analystProvider.findLocation(locationAnalystParameter); return result; }
findLocation
在接口中 TransportationAnalystProvider
parameter
- 选址分区分析参数对象。public double updateEdgeWeight(int edgeID, int fromNodeID, int toNodeID, java.lang.String weightField, double weight)
更新弧段的权值。
updateEdgeWeight
在接口中 TransportationAnalystProvider
edgeID
- 目标弧段 ID。fromNodeID
- 目标弧段的起始结点 ID。toNodeID
- 目标弧段的终止结点 ID。weightField
- 目标弧段对应的权值信息(即 WeightFieldInfo
)的名称,fromNodeID 和 toNodeID 参数决定了更新其中的正向字段还是反向字段。weight
- 新的权值。public double updateTurnNodeWeight(int nodeID, int fromEdgeID, int toEdgeID, java.lang.String turnWeightField, double weight)
更新转向结点的权值。
updateTurnNodeWeight
在接口中 TransportationAnalystProvider
nodeID
- 目标转向结点 ID。fromEdgeID
- 目标转向结点的起始弧段 ID。toEdgeID
- 目标转向结点的终止弧段 ID。turnWeightField
- 转向权值字段的名称。weight
- 新的权值。public java.lang.String[] getTurnWeightNames()
获取网络数据的转向权值字段名称列表。
getTurnWeightNames
在接口中 TransportationAnalystProvider
public java.lang.String[] getWeightNames()
获取网络数据的弧段权值字段名称列表。
getWeightNames
在接口中 TransportationAnalystProvider
public void pauseForRefreshWorkspace()
阻止请求,以便刷新工作空间。
public void refreshWorkspaceFinished()
刷新工作空间结束,继续请求。
public void refreshWorkspace()
刷新工作空间。
public boolean reloadModel()
重新加载网络模型。
reloadModel
在接口中 TransportationAnalystProvider
public static TransportationCheckUtil.CheckNetworkResult check(TransportationAnalystSetting setting)
public FacilityAnalyst2DResult findCriticalFacilitiesUpFromEdge(int[] sourceNodeIDs, int edgeID, FacilityAnalystParameter parameter)
public FacilityAnalyst2DResult findCriticalFacilitiesDownFromEdge(int[] sourceNodeIDs, int edgeID, FacilityAnalystParameter parameter)
public FacilityAnalyst2DResult findCriticalFacilitiesUpFromNode(int[] sourceNodeIDs, int nodeID, FacilityAnalystParameter parameter)
public FacilityAnalyst2DResult findCriticalFacilitiesDownFromNode(int[] sourceNodeIDs, int nodeID, FacilityAnalystParameter parameter)
public BurstAnalyseResult burstAnalyseFromNode(int[] sourceNodeIDs, int nodeID, FacilityAnalystParameter parameter)
public BurstAnalyseResult burstAnalyseFromEdge(int[] sourceNodeIDs, int edgeID, FacilityAnalystParameter parameter)
public FacilityAnalyst2DResult findConnectedEdgesFromEdges(int[] edgeIDs, boolean returnFeatures, boolean connected)
TransportationAnalystProvider
findConnectedEdgesFromEdges
在接口中 TransportationAnalystProvider
edgeIDs
- 给定的弧段 ID 数组returnFeatures
- 返回要素,为true,返回要素,反之,则不返回connected
- 相连通或者不相联通,为true,则返回相连通的弧段;为false,则返回不相连通的弧段public FacilityAnalyst2DResult findConnectedEdgesFromNodes(int[] nodeIDs, boolean returnFeatures, boolean connected)
TransportationAnalystProvider
findConnectedEdgesFromNodes
在接口中 TransportationAnalystProvider
nodeIDs
- 给定的结点 ID 数组returnFeatures
- 返回要素,为true,返回要素,反之,则不返回connected
- 相连通或者不相联通,为true,则返回相连通的弧段;为false,则返回不相连通的弧段public FacilityAnalyst2DResult traceDownFromNode(int nodeID, FacilityAnalystParameter parameter)
TransportationAnalystProvider
traceDownFromNode
在接口中 TransportationAnalystProvider
public FacilityAnalyst2DResult traceUpFromNode(int nodeID, FacilityAnalystParameter parameter)
TransportationAnalystProvider
traceUpFromNode
在接口中 TransportationAnalystProvider
nodeID
- 指定的结点 IDpublic FacilityAnalyst2DResult traceDownFromEdge(int edgeID, FacilityAnalystParameter parameter)
TransportationAnalystProvider
traceDownFromEdge
在接口中 TransportationAnalystProvider
edgeID
- 指定的弧段 IDpublic FacilityAnalyst2DResult traceUpFromEdge(int edgeID, FacilityAnalystParameter parameter)
TransportationAnalystProvider
traceUpFromEdge
在接口中 TransportationAnalystProvider
edgeID
- 指定的弧段 ID