W Mapach Google dla Androida v1 , MapView miał wygodną metodą:
getMapCenter()
. Teraz nie mogę dowiedzieć się, jak uzyskać centrum mapy w wersji 2 tego interfejsu API. Przejrzałem dokumentację API, ale nie ma wzmianki o takiej funkcji. Proszę doradź.
Dzięki, Igor
android
google-maps-api-2
IgorGanapolsky
źródło
źródło
Znalazłem na to dwa sposoby:
1) Najłatwiejszy, pierwszy polega na użyciu właściwości target w obiekcie CameraPosition mapy
2) Drugi używa obiektu VisibleRegion:
VisibleRegion visibleRegion = mMap.getProjection() .getVisibleRegion(); Point x = mMap.getProjection().toScreenLocation( visibleRegion.farRight); Point y = mMap.getProjection().toScreenLocation( visibleRegion.nearLeft); Point centerPoint = new Point(x.x / 2, y.y / 2); LatLng centerFromPoint = mMap.getProjection().fromScreenLocation( centerPoint);
Porównałem obie odpowiedzi:
Log.d("MapFragment: ", "Center From camera: Long: " + center.longitude + " Lat" + center.latitude); Log.d("Punto x", "x:" + x.x + "y:" + x.y); Log.d("Punto y", "y:" + y.x + "y:" + y.y); Log.d("MapFragment: ", "Center From Point: Long: " + centerFromPoint.longitude + " Lat" + centerFromPoint.latitude);
źródło
Możesz użyć :
latlng=map.getProjection().getVisibleRegion().latLngBounds.getCenter();
źródło
aby uzyskać środek mapy, użyłem metody onMapReady () w działaniu, a następnie użyłem
googleMap.setOnCameraChangeListener() method to get position of Came
:@Override public void onMapReady(GoogleMap googMap) { googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() { @Override public void onCameraChange(CameraPosition cameraPosition) { Log.i("centerLat",cameraPosition.target.latitude); Log.i("centerLong",cameraPosition.target.longitude); } }); }
źródło
Jeśli chcesz uzyskać pozycję tylko raz (np. Po tym, jak użytkownik przestał przesuwać mapę), użyj
setOnCameraIdleListener
:https://developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap.OnCameraIdleListener
mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() { @Override public void onCameraIdle() { LatLng position = mMap.getCameraPosition().target; Log.d("MapActivity", "Position: " + position); } });
lub używając lambdy Java 8:
mMap.setOnCameraIdleListener(() -> { LatLng position = mMap.getCameraPosition().target; Log.d("MapActivity", "Position: " + position); });
Zwróć uwagę, że odbiornik zarejestrowany w programie
setOnCameraChangeListener
jest wywoływany wiele razy i zgodnie z dokumentacją :źródło
najlepiej użyć cameraPosition
Jawa:
kotlin:
googleMap?.cameraPosition?.target?.let { // it is LatLng center }
źródło