交通网络分析 |
支持交通网络分析,如最佳路径分析、旅行商分析、多旅行商分析、选址分区、最近设施查找、服务区分析。站点参数可设置为ID数组或Point2D数组,分析结果的获取及展示可在主线程和监听器类中两种方式来实现。
最佳路径分析。站点参数设置为ID数组,分析结果可在主线程中进行获取及展示。
// 最佳路径分析结果
public FindPathResult result;
public void FindPath() throws InterruptedException, ExecutionException {
// 设置交通网络分析通用参数
TransportationAnalystParameter param = new TransportationAnalystParameter();
param.weightFieldName = "length";
param.turnWeightField = "TurnCost";
// 设置最佳路径分析参数
Integer[] nodes = { 2, 8 };
FindPathParameters parameters = new FindPathParameters();
parameters.nodes = nodes;
parameters.parameter = param;
FindPathService service = new FindPathService(
"http://MyServerIP:8090/iserver/services/transportationanalyst-sample/rest/networkanalyst/RoadNet@Changchun");
MyFindPathEventListener listener = new MyFindPathEventListener();
// 和服务端异步通讯
service.process(parameters, listener);
// 等待监听器执行完毕
try {
listener.waitUntilProcessed();
} catch (Exception e) {
e.printStackTrace();
}
// 获取分析结果以及展示
Path[] paths = result.pathList;
}
// 监听器类
class MyFindPathEventListener extends FindPathEventListener {
@Override
public void onFindPathStatusChanged(Object sourceObject, EventStatus status) {
// 返回分析结果
result = (FindPathResult) sourceObject;
}
}
旅行商分析。站点参数设置为Point2D数组,分析结果可在监听器中进行获取及展示。
// 旅行商分析结果
public FindTSPPathsResult result;
public void FindTSPPaths() throws InterruptedException, ExecutionException {
// 设置交通网络分析通用参数
TransportationAnalystParameter param = new TransportationAnalystParameter();
param.weightFieldName = "length";
param.turnWeightField = "TurnCost";
// 设置旅行商分析参数
Point2D point1 = new Point2D(5172.98, -1466.67);
Point2D point2 = new Point2D(4906.13, -2815.10);
Point2D point3 = new Point2D(5868.43, -1494.97);
Point2D point4 = new Point2D(4259.20, -2050.92);
Point2D point5 = new Point2D(6755.93, -2366.30);
Point2D[] points = { point1, point2, point3, point4, point5 };
FindTSPPathsParameters parameters = new FindTSPPathsParameters();
parameters.nodes = points;
parameters.parameter = param;
FindTSPPathsService service = new FindTSPPathsService(
"http://MyServerIP:8090/iserver/services/transportationanalyst-sample/rest/networkanalyst/RoadNet@Changchun");
MyFindTSPPathsEventListener listener = new MyFindTSPPathsEventListener();
// 和服务端异步通讯
service.process(parameters, listener);
}
// 监听器类
class MyFindTSPPathsEventListener extends FindTSPPathsEventListener {
@Override
public void onFindTSPPathsStatusChanged(Object sourceObject, EventStatus status) {
// 返回分析结果
result = (FindTSPPathsResult) sourceObject;
// 获取分析结果以及展示
Path[] paths = result.tspPathList;
}
}
多旅行商分析。站点参数设置为ID数组,分析结果可在主线程中进行获取及展示。
// 多旅行商分析结果
public FindMTSPPathsResult result;
public void FindMTSPPaths() throws InterruptedException, ExecutionException {
// 设置交通网络分析通用参数
TransportationAnalystParameter param = new TransportationAnalystParameter();
param.weightFieldName = "length";
param.turnWeightField = "TurnCost";
// 设置多旅行商分析参数
Integer[] centers = { 2, 50, 100 };
Integer[] nodes = { 1, 8, 9, 25, 16, 36, 68, 92, 58, 64, 90, 123, 215, 310 };
FindMTSPPathsParameters parameters = new FindMTSPPathsParameters();
parameters.centers = centers;
parameters.nodes = nodes;
parameters.parameter = param;
FindMTSPPathsService service = new FindMTSPPathsService(
"http://MyServerIP:8090/iserver/services/transportationanalyst-sample/rest/networkanalyst/RoadNet@Changchun");
MyFindMTSPPathsEventListener listener = new MyFindMTSPPathsEventListener();
// 和服务端异步通讯
service.process(parameters, listener);
// 等待监听器执行完毕
try {
listener.waitUntilProcessed();
} catch (Exception e) {
e.printStackTrace();
}
// 获取分析结果展示
Path[] paths = result.pathList;
}
// 监听器类
class MyFindMTSPPathsEventListener extends FindMTSPPathsEventListener {
@Override
public void onFindMTSPPathsStatusChanged(Object sourceObject, EventStatus status) {
// 返回分析结果
result = (FindMTSPPathsResult) sourceObject;
}
}
选址分区。站点参数设置为ID数组,分析结果可在主线程中进行获取及展示。
// 选址分区结果
public FindLocationResult result;
public void FindLocation() throws InterruptedException, ExecutionException {
// 设置选址分区参数
SupplyCenter center = new SupplyCenter();
center.maxWeight = 3;
center.nodeID = 7;
center.resourceValue = 100;
center.type = SupplyCenterType.OPTIONALCENTER;
SupplyCenter center2 = new SupplyCenter();
center2.maxWeight = 3;
center2.nodeID = 8;
center2.resourceValue = 100;
center2.type = SupplyCenterType.OPTIONALCENTER;
SupplyCenter[] centers = new SupplyCenter[] { center, center2 };
FindLocationParameters parameters = new FindLocationParameters();
parameters.supplyCenters = centers;
parameters.expectedSupplyCenterCount = 1;
parameters.weightName = "length";
FindLocationService service = new FindLocationService(
"http://MyServerIP:8090/iserver/services/transportationanalyst-sample/rest/networkanalyst/RoadNet@Changchun");
MyFindLocationEventListener listener = new MyFindLocationEventListener();
// 和服务端异步通讯
service.process(parameters, listener);
// 等待监听器执行完毕
try {
listener.waitUntilProcessed();
} catch (Exception e) {
e.printStackTrace();
}
// 获取分析结果展示
DemandResult[] demands = result.demandResults;
SupplyResult[] supplys = result.supplyResults;
}
// 监听器类
class MyFindLocationEventListener extends FindLocationEventListener {
@Override
public void onFindLocationStatusChanged(Object sourceObject, EventStatus status) {
// 返回分析结果
result = (FindLocationResult) sourceObject;
}
}
最近设施查找。站点参数设置为ID数组,分析结果可在主线程中进行获取及展示。
// 最近设施查找结果
public FindClosestFacilitiesResult result;
public void FindClosestFacilities() throws InterruptedException, ExecutionException {
// 设置交通网络分析通用参数
TransportationAnalystParameter param = new TransportationAnalystParameter();
param.weightFieldName = "length";
param.turnWeightField = "TurnCost";
// 设置最近设施查找参数
Integer[] nodes = { 1, 6, 21 };
FindClosestFacilitiesParameters parameters = new FindClosestFacilitiesParameters();
parameters.facilities = nodes;
parameters.event = 3;
parameters.parameter = param;
FindClosestFacilitiesService service = new FindClosestFacilitiesService(
"http://MyServerIP:8090/iserver/services/transportationanalyst-sample/rest/networkanalyst/RoadNet@Changchun");
MyFindClosestFacilitiesEventListener listener = new MyFindClosestFacilitiesEventListener();
// 和服务端异步通讯
service.process(parameters, listener);
// 等待监听器执行完毕
try {
listener.waitUntilProcessed();
} catch (Exception e) {
e.printStackTrace();
}
// 获取分析结果展示
ClosestFacilityPath[] paths = result.facilityPathList;
}
// 监听器类
class MyFindClosestFacilitiesEventListener extends FindClosestFacilitiesEventListener {
@Override
public void onFindClosestFacilitiesStatusChanged(Object sourceObject, EventStatus status) {
// 返回分析结果
result = (FindClosestFacilitiesResult) sourceObject;
}
}
服务区分析。站点参数设置为ID数组,分析结果可在主线程中进行获取及展示。
// 服务区分析结果
public FindServiceAreasResult result;
public void FindServiceAreas() throws InterruptedException, ExecutionException {
// 设置交通网络分析通用参数
TransportationAnalystParameter param = new TransportationAnalystParameter();
param.weightFieldName = "length";
param.turnWeightField = "TurnCost";
// 设置服务区分析参数
Integer[] centers = { 2, 4 };
double[] weights = { 500, 1000 };
FindServiceAreasParameters parameters = new FindServiceAreasParameters();
parameters.centers = centers;
parameters.weights = weights;
parameters.parameter = param;
FindServiceAreasService service = new FindServiceAreasService(
"http://MyServerIP:8090/iserver/services/transportationanalyst-sample/rest/networkanalyst/RoadNet@Changchun");
MyFindServiceAreasEventListener listener = new MyFindServiceAreasEventListener();
// 和服务端异步通讯
service.process(parameters, listener);
// 等待监听器执行完毕
try {
listener.waitUntilProcessed();
} catch (Exception e) {
e.printStackTrace();
}
// 获取分析结果展示
ServiceAreaResult[] areas = result.serviceAreaList;
}
// 监听器类
class MyFindServiceAreasEventListener extends FindServiceAreasEventListener {
@Override
public void onFindServiceAreasStatusChanged(Object sourceObject, EventStatus status) {
// 返回分析结果
result = (FindServiceAreasResult) sourceObject;
}
}
完整示例可参考Demo中的交通网络分析示例NetworkAnalystDemo。