Search code examples
androidosmdroid

Rotate osmdroid map around arbitrary point


I need to rotate my map around current location marker. Current location marker will be placed at the boottom of map. Like on a picture. Map with location marker


Solution

  • I solved my task with this code:

    //rotate map
    map.setMapOrientation(angle);
    
    //center to current location
    GeoPoint point = mMyLocationNewOverlay.getMyLocation();
    if (point == null) return;
    mapController.setCenter(point);
    
    //calculate translation
    float bottomPadding = map.getHeight() * 0.1f;
    float radius = map.getHeight()/2 - bottomPadding;
    double deltaW = Math.sin(Math.toRadians(angle));
    double deltaH = Math.cos(Math.toRadians(angle));
    
    int width = map.getWidth()/2 - (int)(radius * deltaW);
    int height = map.getHeight()/2 - (int)(radius * deltaH);
    
    //Move current location marker to bottom of the map
    Projection projection = map.getProjection();
    GeoPoint centerPoint = (GeoPoint) projection.fromPixels(width, height);
    mapController.setCenter(centerPoint);