Как очистить или удалить маршрут на Here Maps Android Kotlin - PullRequest
0 голосов
/ 27 августа 2018

Я работаю над базовым позиционированием и навигацией по маршруту (направление).

Я создал один из фрагментов NavigateRoute.

public class RouteNavigateFragmentView { 
private MapFragment m_mapFragment = null;
private Activity m_activity;
private Map m_map; 
private MapRoute mapRoute;
private double startLangitude, startLatitude, endLatitude = 18.467373, endLangitude = 73.777706;

public RouteNavigateFragmentView(Activity activity, Double startLat, Double startLang) {
    m_activity = activity;
    /*
     * The map fragment is not required for executing search requests. However in this example,
     * we will put some markers on the map to visualize the location of the search results.
     */
    startLatitude = startLat;
    startLangitude = startLang;

    initMapFragment();

}

private void initMapFragment() {
    /* Locate the mapFragment UI element */
    m_mapFragment = (MapFragment) m_activity.getFragmentManager()
            .findFragmentById(R.id.mapfragment);
    progressBar_cyclic = (ProgressBar) m_activity.findViewById(R.id.progressBar_cyclic);

    if (m_mapFragment != null) {
        /* Initialize the MapFragment, results will be given via the called back. */
        m_mapFragment.init(new OnEngineInitListener() {
            @Override
            public void onEngineInitializationCompleted(OnEngineInitListener.Error error) {
                if (error == Error.NONE) {
                    m_map = m_mapFragment.getMap();
                    m_map.setCenter(new GeoCoordinate(18.467518, 73.777694, 0.0),
                            Map.Animation.NONE);
                    m_map.setZoomLevel(13.2);
                    m_map.getPositionIndicator().setVisible(false);
                } else {
                    Toast.makeText(m_activity,
                            "ERROR: Cannot initialize Map with error " + error,
                            Toast.LENGTH_LONG).show();
                }
            }
        });
        getDirections(); 
    }

}

// Functionality for taps of the "Get Directions" button
public void getDirections() {

    if (m_map != null && mapRoute != null) {
        m_map.removeMapObject(mapRoute);
        mapRoute = null;
    }

    RouteManager routeManager = new RouteManager();

    RoutePlan routePlan = new RoutePlan();

    RouteOptions routeOptions = new RouteOptions();
    routeOptions.setTransportMode(RouteOptions.TransportMode.CAR);
    routeOptions.setRouteType(RouteOptions.Type.FASTEST);
    routePlan.setRouteOptions(routeOptions); 
    routePlan.addWaypoint(new GeoCoordinate(startLatitude, startLangitude)); 
    routePlan.addWaypoint(new GeoCoordinate(endLatitude, endLangitude));

    RouteManager.Error error = routeManager.calculateRoute(routePlan, routeManagerListener);
    if (error != RouteManager.Error.NONE) {
        Toast.makeText(m_activity,
                "Route calculation failed with: " + error.toString(), Toast.LENGTH_SHORT)
                .show();
    }
}

private RouteManager.Listener routeManagerListener = new RouteManager.Listener() {
    public void onCalculateRouteFinished(RouteManager.Error errorCode,
                                         List<RouteResult> result) {

        if (errorCode == RouteManager.Error.NONE && result.get(0).getRoute() != null) {
            // create a map route object and place it on the map
            mapRoute = new MapRoute(result.get(0).getRoute());
            m_map.addMapObject(mapRoute);

            // Get the bounding box containing the route and zoom in (no animation)
            GeoBoundingBox gbb = result.get(0).getRoute().getBoundingBox();
            m_map.zoomTo(gbb, Map.Animation.NONE, Map.MOVE_PRESERVE_ORIENTATION); 
        }  
    }

    public void onProgress(int percentage) {

    }
 };
}

Предположим, у меня есть вызов этой функции два раза, затем Карта будет перемещаться по двум маршрутам. Также я использовал функцию ниже, но она не работает

if (m_map != null && mapRoute != null) {
        m_map.removeMapObject(mapRoute);
        mapRoute = null;
    }

Showing Map like that

Итак, как мне очистить Навигация по маршруту или Диспетчер маршрутов . Я хочу показать один маршрут за раз.

Заранее спасибо!

1 Ответ

0 голосов
/ 18 сентября 2018

В обратном вызове onCalculateRouteFinished проверьте, не является ли mapRoute не null, если так - удалите его. В противном случае вы потеряете ссылку на него, и следующий вызов m_map.removeMapObject(mapRoute) не удалит старый mapRoute объект.

Так что обратный вызов будет выглядеть примерно так:

void onCalculateRouteFinished(Error errorCode, List<RouteResult> result) {
    if (errorCode == NONE && !result.isEmpty()) {
        if (mapRoute != null) m_map.removeMapObject(mapRoute);

        mapRoute = new MapRoute(result.get(0).getRoute());
        m_map.addMapObject(mapRoute);

        // your code here
    }
 }
...