11

I'm developing an app which needs to rotate the mapView with a compass. I know how to rotate the camera but I need to rotate the mapView with the compass. the center point should be the current location. I found codes for Maps V1 but I need to do it with Maps V2

Roham Rafii
  • 2,929
  • 7
  • 35
  • 49
Asanka Senavirathna
  • 4,570
  • 4
  • 18
  • 20

2 Answers2

22

OK, i figured it out myself. first you need to calculate the bearing from the compass. then the Maps api-2 camera can be rotated.

public void updateCamera(float bearing) {
            CameraPosition currentPlace = new CameraPosition.Builder()
                    .target(new LatLng(centerLatitude, centerLongitude))
                    .bearing(bearing).tilt(65.5f).zoom(18f).build();
            googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(currentPlace));

    }

set SensorListener in your code and call this method in onSensorChanged event. i have added a tilt value so the map will rotate in 3D.

Asanka Senavirathna
  • 4,570
  • 4
  • 18
  • 20
  • Not that it matters too much, but .bearing is a float. – Chrispix Feb 24 '13 at 18:53
  • 6
    How do you get bearing? – sealskej Oct 30 '13 at 15:14
  • If you are using GoogleMap instead of MapView, you can use the mMap.setOnMyLocationChangeListener event. – Joubert Vasconcelos Feb 15 '14 at 00:34
  • How can we do this in V3? Please suggest. Also, I have posted similar question in order to rotate map 360 Degree by changing bearing 3 times (each time by 120 Degree to rotate 1 cycle around a center point) but there are easing and jerks. How can I avoid that. https://stackoverflow.com/questions/48123738/gmap-bearing-rotation-in-smooth-motion – Nah Jan 08 '18 at 09:38
  • Sure would be nice if you would show how you got the bearing, pretty important piece if information. – lostintranslation Sep 25 '18 at 16:44
  • You can get bearing value form the Location (Current location) return by the location provider. – Nas Jan 15 '19 at 14:53
3

in your GoogleMap object you can access getMyLocation method. This last returns a Location object which contains getBearing method. This one returns a float [0..360] computed from last known location and current location, 0° is the north axis, rotation is in the clock sens.

To resume, you can use a code like:

GoogleMap gMap = ..... 
float bearing = gMap.getMyLocation().getBearing();
CameraPosition newCamPos = new CameraPosition(latLngObject,
            zoomValue,
            tiltValue,
            bearing);
gMap.animateCamera(CameraUpdateFactory.newCameraPosition(newCamPos), durationValue, null);
Yacine MEDDAH
  • 1,211
  • 13
  • 17
  • How can we do this in V3? Please suggest. Also I have posted similar question in order to rotate map 360 Degree by changing bearing 3 times (each time by 120 Degree to rotate 1 cycle around a center point) but there are easing and jerks. How can I avoid that. https://stackoverflow.com/questions/48123738/gmap-bearing-rotation-in-smooth-motion – Nah Jan 08 '18 at 09:38