交通网络分析

发送反馈


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