交通网络分析 |
支持交通网络分析,如最佳路径分析、旅行商分析、多旅行商分析、选址分区、最近设施查找、服务区分析。站点参数可设置为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。