Search in sources :

Example 1 with RouteResult

use of com.here.android.mpa.routing.RouteResult in project here-android-sdk-examples by heremaps.

the class MapFragmentView method createRoute.

/* Creates a route from 4350 Still Creek Dr to Langley BC with highways disallowed */
private void createRoute() {
    /* Initialize a CoreRouter */
    CoreRouter coreRouter = new CoreRouter();
    /* Initialize a RoutePlan */
    RoutePlan routePlan = new RoutePlan();
    /*
         * Initialize a RouteOption.HERE SDK allow users to define their own parameters for the
         * route calculation,including transport modes,route types and route restrictions etc.Please
         * refer to API doc for full list of APIs
         */
    RouteOptions routeOptions = new RouteOptions();
    /* Other transport modes are also available e.g Pedestrian */
    routeOptions.setTransportMode(RouteOptions.TransportMode.CAR);
    /* Disable highway in this route. */
    routeOptions.setHighwaysAllowed(false);
    /* Calculate the shortest route available. */
    routeOptions.setRouteType(RouteOptions.Type.SHORTEST);
    /* Calculate 1 route. */
    routeOptions.setRouteCount(1);
    /* Finally set the route option */
    routePlan.setRouteOptions(routeOptions);
    /* Define waypoints for the route */
    /* START: 4350 Still Creek Dr */
    RouteWaypoint startPoint = new RouteWaypoint(new GeoCoordinate(49.259149, -123.008555));
    /* END: Langley BC */
    RouteWaypoint destination = new RouteWaypoint(new GeoCoordinate(49.073640, -122.559549));
    /* Add both waypoints to the route plan */
    routePlan.addWaypoint(startPoint);
    routePlan.addWaypoint(destination);
    /* Trigger the route calculation,results will be called back via the listener */
    coreRouter.calculateRoute(routePlan, new Router.Listener<List<RouteResult>, RoutingError>() {

        @Override
        public void onProgress(int i) {
        /* The calculation progress can be retrieved in this callback. */
        }

        @Override
        public void onCalculateRouteFinished(List<RouteResult> routeResults, RoutingError routingError) {
            /* Calculation is done.Let's handle the result */
            if (routingError == RoutingError.NONE) {
                if (routeResults.get(0).getRoute() != null) {
                    /* Create a MapRoute so that it can be placed on the map */
                    m_mapRoute = new MapRoute(routeResults.get(0).getRoute());
                    /* Show the maneuver number on top of the route */
                    m_mapRoute.setManeuverNumberVisible(true);
                    /* Add the MapRoute to the map */
                    m_map.addMapObject(m_mapRoute);
                    /*
                                 * We may also want to make sure the map view is orientated properly
                                 * so the entire route can be easily seen.
                                 */
                    GeoBoundingBox gbb = routeResults.get(0).getRoute().getBoundingBox();
                    m_map.zoomTo(gbb, Map.Animation.NONE, Map.MOVE_PRESERVE_ORIENTATION);
                } else {
                    Toast.makeText(m_activity, "Error:route results returned is not valid", Toast.LENGTH_LONG).show();
                }
            } else {
                Toast.makeText(m_activity, "Error:route calculation returned error code: " + routingError, Toast.LENGTH_LONG).show();
            }
        }
    });
}
Also used : MapRoute(com.here.android.mpa.mapping.MapRoute) CoreRouter(com.here.android.mpa.routing.CoreRouter) CoreRouter(com.here.android.mpa.routing.CoreRouter) Router(com.here.android.mpa.routing.Router) GeoCoordinate(com.here.android.mpa.common.GeoCoordinate) RouteOptions(com.here.android.mpa.routing.RouteOptions) RouteWaypoint(com.here.android.mpa.routing.RouteWaypoint) RouteWaypoint(com.here.android.mpa.routing.RouteWaypoint) RoutingError(com.here.android.mpa.routing.RoutingError) RouteResult(com.here.android.mpa.routing.RouteResult) List(java.util.List) RoutePlan(com.here.android.mpa.routing.RoutePlan) GeoBoundingBox(com.here.android.mpa.common.GeoBoundingBox)

Example 2 with RouteResult

use of com.here.android.mpa.routing.RouteResult in project here-android-sdk-examples by heremaps.

the class NavigationController method calculateDefaultRoute.

private void calculateDefaultRoute(List<RouteWaypoint> waypointList) {
    Log.d(TAG, "calculateDefaultRoute() called ");
    RoutePlan routePlan = new RoutePlan();
    routePlan.setRouteOptions(defaultRouteOptions);
    for (RouteWaypoint routeWaypoint : waypointList) {
        routePlan.addWaypoint(routeWaypoint);
    }
    defeultCoreRouter.calculateRoute(routePlan, new Router.Listener<List<RouteResult>, RoutingError>() {

        @Override
        public void onProgress(int percentage) {
        // callback is used only for offline calculation
        }

        @Override
        public void onCalculateRouteFinished(@NonNull final List<RouteResult> response, @NonNull RoutingError error) {
            if (error != RoutingError.NONE || response.isEmpty()) {
                Log.e(TAG, "onDefaultCalculateRouteFinished with error " + error);
                return;
            }
            activity.runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    onDefaultRouteCalculated(response.get(0).getRoute());
                }
            });
        }
    });
}
Also used : RoutingError(com.here.android.mpa.routing.RoutingError) RouteResult(com.here.android.mpa.routing.RouteResult) FTCRRouter(com.here.android.mpa.ftcr.FTCRRouter) Router(com.here.android.mpa.routing.Router) CoreRouter(com.here.android.mpa.routing.CoreRouter) ArrayList(java.util.ArrayList) List(java.util.List) RoutePlan(com.here.android.mpa.routing.RoutePlan) FTCRRoutePlan(com.here.android.mpa.ftcr.FTCRRoutePlan) RouteWaypoint(com.here.android.mpa.routing.RouteWaypoint) RouteWaypoint(com.here.android.mpa.routing.RouteWaypoint)

Example 3 with RouteResult

use of com.here.android.mpa.routing.RouteResult in project here-android-sdk-examples by heremaps.

the class MapFragmentView method calculateAndStartNavigation.

private void calculateAndStartNavigation() {
    if (m_map == null) {
        Toast.makeText(m_activity, "Map is not ready yet", Toast.LENGTH_SHORT).show();
        return;
    }
    if (NavigationManager.getInstance().getRunningState() == NavigationManager.NavigationState.RUNNING) {
        Toast.makeText(m_activity, "Navigation is currently running", Toast.LENGTH_SHORT).show();
        return;
    }
    final RoutePlan routePlan = new RoutePlan();
    // these two waypoints cover suburban roads
    routePlan.addWaypoint(new RouteWaypoint(new GeoCoordinate(48.960497, 2.47351)));
    routePlan.addWaypoint(new RouteWaypoint(new GeoCoordinate(48.976, 2.49162)));
    // calculate a route for navigation
    CoreRouter coreRouter = new CoreRouter();
    coreRouter.calculateRoute(routePlan, new CoreRouter.Listener() {

        @Override
        public void onCalculateRouteFinished(List<RouteResult> list, RoutingError routingError) {
            if (routingError == RoutingError.NONE) {
                Route route = list.get(0).getRoute();
                m_currentRoute = new MapRoute(route);
                m_map.addMapObject(m_currentRoute);
                // move the map to the first waypoint which is starting point of
                // the route
                m_map.setCenter(routePlan.getWaypoint(0).getNavigablePosition(), Map.Animation.NONE);
                // setting MapUpdateMode to RoadView will enable automatic map
                // movements and zoom level adjustments
                NavigationManager navigationManager = NavigationManager.getInstance();
                navigationManager.setMapUpdateMode(NavigationManager.MapUpdateMode.ROADVIEW);
                // adjust tilt to show 3D view
                m_map.setTilt(80);
                // adjust transform center for navigation experience in portrait
                // view
                m_mapTransformCenter = new PointF(m_map.getTransformCenter().x, (m_map.getTransformCenter().y * 85 / 50));
                m_map.setTransformCenter(m_mapTransformCenter);
                // create a map marker to show current position
                Image icon = new Image();
                m_positionIndicatorFixed = new MapMarker();
                try {
                    icon.setImageResource(R.drawable.gps_position);
                    m_positionIndicatorFixed.setIcon(icon);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                m_positionIndicatorFixed.setVisible(true);
                m_positionIndicatorFixed.setCoordinate(m_map.getCenter());
                m_map.addMapObject(m_positionIndicatorFixed);
                m_mapFragment.getPositionIndicator().setVisible(false);
                navigationManager.setMap(m_map);
                // listen to real position updates. This is used when RoadView is
                // not active.
                PositioningManager.getInstance().addListener(new WeakReference<>(mapPositionHandler));
                // listen to updates from RoadView which tells you where the map
                // center should be situated. This is used when RoadView is active.
                navigationManager.getRoadView().addListener(new WeakReference<>(roadViewListener));
                // listen to navigation manager events.
                navigationManager.addNavigationManagerEventListener(new WeakReference<>(navigationManagerEventListener));
                navigationManager.addLaneInformationListener(new WeakReference<>(m_laneInformationListener));
                // start navigation simulation travelling at 13 meters per second
                navigationManager.simulate(route, 13);
            } else {
                Toast.makeText(m_activity, "Error:route calculation returned error code: " + routingError, Toast.LENGTH_LONG).show();
            }
        }

        @Override
        public void onProgress(int i) {
        }
    });
}
Also used : MapRoute(com.here.android.mpa.mapping.MapRoute) NavigationManager(com.here.android.mpa.guidance.NavigationManager) MapMarker(com.here.android.mpa.mapping.MapMarker) PointF(android.graphics.PointF) CoreRouter(com.here.android.mpa.routing.CoreRouter) GeoCoordinate(com.here.android.mpa.common.GeoCoordinate) IOException(java.io.IOException) RouteWaypoint(com.here.android.mpa.routing.RouteWaypoint) Image(com.here.android.mpa.common.Image) RouteWaypoint(com.here.android.mpa.routing.RouteWaypoint) RoutingError(com.here.android.mpa.routing.RoutingError) RouteResult(com.here.android.mpa.routing.RouteResult) WeakReference(java.lang.ref.WeakReference) RoutePlan(com.here.android.mpa.routing.RoutePlan) Route(com.here.android.mpa.routing.Route) MapRoute(com.here.android.mpa.mapping.MapRoute)

Example 4 with RouteResult

use of com.here.android.mpa.routing.RouteResult in project here-android-sdk-examples by heremaps.

the class MapFragmentView method roadSlopes.

/**
 * Method contains logic for extracting data about slopes and showing it on a route
 */
private void roadSlopes() {
    final java.util.Map<String, Integer> slopesMap = new HashMap<>();
    final java.util.Map<String, List<GeoCoordinate>> geometryMap = new HashMap<>();
    /*
         * Create a route plan for route calculation
         */
    RoutePlan rp = new RoutePlan();
    rp.addWaypoint(new RouteWaypoint(new GeoCoordinate(37.79513, -122.47603)));
    rp.addWaypoint(new RouteWaypoint(new GeoCoordinate(37.78166, -122.44450)));
    CoreRouter router = new CoreRouter();
    /*
         * For getting list of Link IDs routing should be forced to work online
         */
    router.setConnectivity(CoreRouter.Connectivity.ONLINE);
    router.calculateRoute(rp, new CoreRouter.Listener() {

        @Override
        public void onCalculateRouteFinished(List<RouteResult> list, RoutingError routingError) {
            if (routingError == RoutingError.NONE) {
                Route route = list.get(0).getRoute();
                /*
                     * Show route on the map and zoom to the route
                     */
                GeoBoundingBox bbox = route.getBoundingBox();
                map.addMapObject(new MapRoute(route));
                map.zoomTo(bbox, Map.Animation.NONE, 0);
                /*
                     * Get list of Link IDs for the route
                     */
                final List<Long> ids = route.getPermanentLinkIds();
                for (Long id : ids) {
                    pvids.add(id);
                }
                Set<String> layers = new HashSet<>(Arrays.asList(ADAS_LAYER, ROAD_GEOM_LAYER));
                PlatformDataRequest request = PlatformDataRequest.createBoundingBoxRequest(layers, bbox);
                request.execute(new PlatformDataRequest.Listener<PlatformDataResult>() {

                    @Override
                    public void onCompleted(PlatformDataResult data, PlatformDataRequest.Error error) {
                        if (error == null) {
                            /*
                                 * Process route geometry from PDE
                                 */
                            PlatformDataItemCollection roadDataCollection = data.get(ROAD_GEOM_LAYER);
                            for (PlatformDataItem item : roadDataCollection) {
                                geometryMap.put(item.getLinkId(), item.getCoordinates());
                            }
                            /*
                                 * Process ADAS data from PDE
                                 */
                            PlatformDataItemCollection adasDataCollection = data.get(ADAS_LAYER);
                            for (PlatformDataItem item : adasDataCollection) {
                                List<String> values = new ArrayList<>();
                                /*
                                     * Split slopes data
                                     */
                                StringTokenizer tokenizer = new StringTokenizer(item.get("SLOPES"));
                                while (tokenizer.hasMoreTokens()) {
                                    String token = tokenizer.nextToken(",");
                                    /*
                                         * Filter out invalid data
                                         */
                                    if (!token.equals("NULL") && !token.equals("1000000000")) {
                                        values.add(token);
                                    }
                                }
                                /*
                                     * Mark slopes data if it contains either high or low value
                                     */
                                int max = 0;
                                int min = 0;
                                for (String str : values) {
                                    int temp = Integer.valueOf(str);
                                    if (temp > max)
                                        max = temp;
                                    if (temp < min)
                                        min = temp;
                                }
                                if ((min * -1) > max && min <= -5_000)
                                    slopesMap.put(item.getLinkId(), LOW_COLOR);
                                else if ((min * -1) < max && max >= 5_000)
                                    slopesMap.put(item.getLinkId(), HIGH_COLOR);
                            }
                            /*
                                 * Process list of geometry
                                 * find route segment with high or low slopes value
                                 * and add this geometry to the list
                                 */
                            List<MapObject> polylines = new ArrayList<>();
                            for (java.util.Map.Entry<String, List<GeoCoordinate>> entry : geometryMap.entrySet()) {
                                if (pvids.contains(Long.parseLong(entry.getKey()))) {
                                    GeoPolyline polyline = new GeoPolyline();
                                    polyline.add(entry.getValue());
                                    MapPolyline line = new MapPolyline(polyline);
                                    if (slopesMap.containsKey(entry.getKey())) {
                                        line.setLineColor(slopesMap.get(entry.getKey()));
                                        line.setLineWidth(15);
                                        polylines.add(line);
                                    }
                                }
                            }
                            /*
                                 * Show a list of slopes geometry on the map
                                 */
                            map.addMapObjects(polylines);
                        } else {
                            /*
                                 * Process PDE request error
                                 */
                            Log.i(TAG, "PDE error: " + error.getFaultCode());
                            Log.i(TAG, "PDE error: " + error.getMessage());
                            Log.i(TAG, "PDE error: " + error.getResponseCode());
                            Log.i(TAG, "PDE error: " + error.getType().toString());
                        }
                    }
                });
            } else {
                Log.e(TAG, "Routing error: " + routingError);
            }
        }

        @Override
        public void onProgress(int i) {
            Log.i(TAG, String.format("Route calculation progress: %d%%", i));
        }
    });
}
Also used : HashSet(java.util.HashSet) Set(java.util.Set) OnEngineInitListener(com.here.android.mpa.common.OnEngineInitListener) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) PlatformDataItemCollection(com.here.android.mpa.pde.PlatformDataItemCollection) GeoCoordinate(com.here.android.mpa.common.GeoCoordinate) RouteResult(com.here.android.mpa.routing.RouteResult) PlatformDataResult(com.here.android.mpa.pde.PlatformDataResult) ArrayList(java.util.ArrayList) List(java.util.List) RoutePlan(com.here.android.mpa.routing.RoutePlan) MapObject(com.here.android.mpa.mapping.MapObject) Route(com.here.android.mpa.routing.Route) MapRoute(com.here.android.mpa.mapping.MapRoute) PlatformDataItem(com.here.android.mpa.pde.PlatformDataItem) MapRoute(com.here.android.mpa.mapping.MapRoute) CoreRouter(com.here.android.mpa.routing.CoreRouter) RoutingError(com.here.android.mpa.routing.RoutingError) RouteWaypoint(com.here.android.mpa.routing.RouteWaypoint) RouteWaypoint(com.here.android.mpa.routing.RouteWaypoint) StringTokenizer(java.util.StringTokenizer) RoutingError(com.here.android.mpa.routing.RoutingError) PlatformDataRequest(com.here.android.mpa.pde.PlatformDataRequest) MapPolyline(com.here.android.mpa.mapping.MapPolyline) GeoBoundingBox(com.here.android.mpa.common.GeoBoundingBox) HashMap(java.util.HashMap) Map(com.here.android.mpa.mapping.Map) GeoPolyline(com.here.android.mpa.common.GeoPolyline)

Example 5 with RouteResult

use of com.here.android.mpa.routing.RouteResult in project here-android-sdk-examples by heremaps.

the class MapFragmentView method createRoute.

private void createRoute() {
    /* Initialize a CoreRouter */
    CoreRouter coreRouter = new CoreRouter();
    /* Initialize a RoutePlan */
    RoutePlan routePlan = new RoutePlan();
    /*
         * Initialize a RouteOption. HERE Mobile SDK allow users to define their own parameters for the
         * route calculation,including transport modes,route types and route restrictions etc.Please
         * refer to API doc for full list of APIs
         */
    RouteOptions routeOptions = new RouteOptions();
    /* Other transport modes are also available e.g Pedestrian */
    routeOptions.setTransportMode(RouteOptions.TransportMode.CAR);
    /* Disable highway in this route. */
    routeOptions.setHighwaysAllowed(false);
    /* Calculate the shortest route available. */
    routeOptions.setRouteType(RouteOptions.Type.SHORTEST);
    /* Calculate 1 route. */
    routeOptions.setRouteCount(1);
    /* Finally set the route option */
    routePlan.setRouteOptions(routeOptions);
    /* Define waypoints for the route */
    /* START: 4350 Still Creek Dr */
    RouteWaypoint startPoint = new RouteWaypoint(new GeoCoordinate(49.259149, -123.008555));
    /* END: Langley BC */
    RouteWaypoint destination = new RouteWaypoint(new GeoCoordinate(49.073640, -122.559549));
    /* Add both waypoints to the route plan */
    routePlan.addWaypoint(startPoint);
    routePlan.addWaypoint(destination);
    /* Trigger the route calculation,results will be called back via the listener */
    coreRouter.calculateRoute(routePlan, new Router.Listener<List<RouteResult>, RoutingError>() {

        @Override
        public void onProgress(int i) {
        /* The calculation progress can be retrieved in this callback. */
        }

        @Override
        public void onCalculateRouteFinished(List<RouteResult> routeResults, RoutingError routingError) {
            /* Calculation is done.Let's handle the result */
            if (routingError == RoutingError.NONE) {
                if (routeResults.get(0).getRoute() != null) {
                    m_route = routeResults.get(0).getRoute();
                    /* Create a MapRoute so that it can be placed on the map */
                    MapRoute mapRoute = new MapRoute(routeResults.get(0).getRoute());
                    /* Show the maneuver number on top of the route */
                    mapRoute.setManeuverNumberVisible(true);
                    /* Add the MapRoute to the map */
                    m_map.addMapObject(mapRoute);
                    /*
                                 * We may also want to make sure the map view is orientated properly
                                 * so the entire route can be easily seen.
                                 */
                    m_geoBoundingBox = routeResults.get(0).getRoute().getBoundingBox();
                    m_map.zoomTo(m_geoBoundingBox, Map.Animation.NONE, Map.MOVE_PRESERVE_ORIENTATION);
                    startNavigation();
                } else {
                    Toast.makeText(m_activity, "Error:route results returned is not valid", Toast.LENGTH_LONG).show();
                }
            } else {
                Toast.makeText(m_activity, "Error:route calculation returned error code: " + routingError, Toast.LENGTH_LONG).show();
            }
        }
    });
}
Also used : MapRoute(com.here.android.mpa.mapping.MapRoute) CoreRouter(com.here.android.mpa.routing.CoreRouter) Router(com.here.android.mpa.routing.Router) CoreRouter(com.here.android.mpa.routing.CoreRouter) GeoCoordinate(com.here.android.mpa.common.GeoCoordinate) RouteOptions(com.here.android.mpa.routing.RouteOptions) RouteWaypoint(com.here.android.mpa.routing.RouteWaypoint) RouteWaypoint(com.here.android.mpa.routing.RouteWaypoint) RoutingError(com.here.android.mpa.routing.RoutingError) RouteResult(com.here.android.mpa.routing.RouteResult) List(java.util.List) RoutePlan(com.here.android.mpa.routing.RoutePlan)

Aggregations

CoreRouter (com.here.android.mpa.routing.CoreRouter)8 RoutePlan (com.here.android.mpa.routing.RoutePlan)8 RouteResult (com.here.android.mpa.routing.RouteResult)8 RoutingError (com.here.android.mpa.routing.RoutingError)8 MapRoute (com.here.android.mpa.mapping.MapRoute)7 RouteWaypoint (com.here.android.mpa.routing.RouteWaypoint)7 List (java.util.List)7 GeoCoordinate (com.here.android.mpa.common.GeoCoordinate)6 Router (com.here.android.mpa.routing.Router)5 RouteOptions (com.here.android.mpa.routing.RouteOptions)4 Route (com.here.android.mpa.routing.Route)3 ArrayList (java.util.ArrayList)3 GeoBoundingBox (com.here.android.mpa.common.GeoBoundingBox)2 DynamicPenalty (com.here.android.mpa.routing.DynamicPenalty)2 PointF (android.graphics.PointF)1 GeoPolygon (com.here.android.mpa.common.GeoPolygon)1 GeoPolyline (com.here.android.mpa.common.GeoPolyline)1 Image (com.here.android.mpa.common.Image)1 OnEngineInitListener (com.here.android.mpa.common.OnEngineInitListener)1 RoadElement (com.here.android.mpa.common.RoadElement)1