Sto sviluppando un'applicazione che deve ruotare la mappa con una bussola. So come ruotare la fotocamera ma ho bisogno di ruotare il mapView con la bussola. il punto centrale dovrebbe essere la posizione corrente. Ho trovato i codici per Maps V1 ma ho bisogno di farlo con Maps V2Mappe Android v2 ruota mapView con bussola
risposta
OK, l'ho capito da solo. per prima cosa devi calcolare il rilevamento dalla bussola. quindi è possibile ruotare la fotocamera di Maps api-2.
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));
}
impostare SensorListener
nel codice e chiamare questo metodo in onSensorChanged
evento. ho aggiunto un valore di inclinazione per far ruotare la mappa in 3D.
nell'oggetto GoogleMap è possibile accedere al metodo getMyLocation. Quest'ultimo restituisce un oggetto Location che contiene il metodo getBearing. Questo restituisce un float [0..360] calcolato dall'ultima posizione nota e posizione corrente, 0 ° è l'asse nord, la rotazione è nell'orologio.
Per riprendere, è possibile utilizzare un codice come:
GoogleMap gMap = .....
float bearing = gMap.getMyLocation().getBearing();
CameraPosition newCamPos = new CameraPosition(latLngObject,
zoomValue,
tiltValue,
bearing);
gMap.animateCamera(CameraUpdateFactory.newCameraPosition(newCamPos), durationValue, null);
Come possiamo farlo in V3? Si prega di suggerire. Anch'io ho postato una domanda simile per ruotare la mappa di 360 gradi cambiando il cuscinetto 3 volte (ogni volta di 120 gradi per ruotare di un ciclo attorno a un punto centrale) ma ci sono attenuazione e scatti. Come posso evitarlo. https://stackoverflow.com/questions/48123738/gmap-bearing-rotation-in-smooth-motion –
Non che sia importante troppo, ma .bearing è un galleggiante. – Chrispix
Come si ottiene il cuscinetto? – sealskej
Se si utilizza GoogleMap anziché MapView, è possibile utilizzare l'evento mMap.setOnMyLocationChangeListener. –