Search code examples
here-api

HERE-SDK lite drag marker in MapView


I am just trying out the SDK Lite API and I am wondering how I can achieve to drag a MapMarker object from one place to another. I suggest, it works somehow with disabling the default onPan gesture, but actually the problem starts with picking an existing object.

Here is my code so far:

public void pickMarker(Point2D p) {
    map.getGestures().disableDefaultAction(GestureType.PAN);
    map.pickMapItems(p, 20f, pickMapItemsResult -> {
        if (pickMapItemsResult != null) {
            pickedMarker = pickMapItemsResult.getTopmostMarker();
        } else {
            map.getGestures().enableDefaultAction(GestureType.PAN);
        }
    });
}

public void dragMarker(Point2D p) {
    if (pickedMarker != null) {
        pickedMarker.setCoordinates(map.getCamera().viewToGeoCoordinates(p));
    }
}

public boolean releaseMarker(Point2D p) {

    map.getGestures().enableDefaultAction(GestureType.PAN);
    if (pickedMarker != null) {
        GeoCoordinates newCoordinates = map.getCamera().viewToGeoCoordinates(p);
        pickedMarker.setCoordinates(newCoordinates);
        pickedMarker = null;
        return true;
    }
    return false;
}

while these functions are called on the three states of the onPanListener:

mapView.getGestures().setPanListener((gestureState, point2D, point2DUpdate, v) -> {
        if (gestureState.equals(GestureState.BEGIN)) {
            mapViewUIEngine.pickMarker(point2D);
        }
        if (gestureState.equals(GestureState.UPDATE)) {
            mapViewUIEngine.dragMarker(point2DUpdate);
        }
        if (gestureState.equals(GestureState.END)) {
            if (mapViewUIEngine.releaseMarker(point2DUpdate)) {
                regionController.movePoint(0,
                        updateNewLocation(point2D, point2DUpdate);
            }
        }
    });

From one of the developer in Github I now know, that the polygon is returned instead of the marker (which is lying on a polygon line, but how can I get the marker instead?


Solution

  • You can use map markers to precisely point to a location on the map.

    The following method will add a custom map marker to the map:

    MapImage mapImage = MapImageFactory.fromResource(context.getResources(), R.drawable.here_car);
    
    MapMarker mapMarker = new MapMarker(geoCoordinates);
    mapMarker.addImage(mapImage, new MapMarkerImageStyle());
    
    mapView.getMapScene().addMapMarker(mapMarker);
    

    For more details, please refer

    https://developer.here.com/documentation/android-sdk/dev_guide/topics/map-items.html#add-map-markers