web-dev-qa-db-de.com

Android: Einstellen der Zoomstufe in Google Maps, um alle Markerpunkte einzuschließen

Ich versuche, die Zoomstufe für Karten in Android so einzustellen, dass sie alle Punkte in meiner Liste enthält. Ich verwende folgenden Code. 

int minLatitude = Integer.MAX_VALUE;
int maxLatitude = Integer.MIN_VALUE;
int minLongitude = Integer.MAX_VALUE;
int maxLongitude = Integer.MIN_VALUE;

// Find the boundaries of the item set
// item contains a list of GeoPoints
for (GeoPoint item : items) { 
    int lat = item.getLatitudeE6();
    int lon = item.getLongitudeE6();

    maxLatitude = Math.max(lat, maxLatitude);
    minLatitude = Math.min(lat, minLatitude);
    maxLongitude = Math.max(lon, maxLongitude);
    minLongitude = Math.min(lon, minLongitude);
}
objMapController.zoomToSpan(
    Math.abs(maxLatitude - minLatitude), 
    Math.abs(maxLongitude - minLongitude));

das funktioniert manchmal. Manchmal werden jedoch einige Punkte nicht angezeigt, und ich muss die Ansicht dann verkleinern, um diese Punkte anzuzeigen. Gibt es eine Möglichkeit, dieses Problem zu lösen? 

42

Ich fand die Antwort selbst heraus, die Zoomstufe war korrekt. Ich muss folgenden Code hinzufügen, um alle Punkte auf dem Bildschirm anzuzeigen.

objMapController.animateTo(new GeoPoint( 
    (maxLatitude + minLatitude)/2, 
    (maxLongitude + minLongitude)/2 )); 

Der Mittelpunkt war nicht auf den Eigenbedarf ausgerichtet, was zu einem Problem für mich führte. Das funktioniert.

31

Ein weiterer Ansatz mit Android Map API v2:

private void fixZoom() {
    List<LatLng> points = route.getPoints(); // route is instance of PolylineOptions 

    LatLngBounds.Builder bc = new LatLngBounds.Builder();

    for (LatLng item : points) {
        bc.include(item);
    }

    map.moveCamera(CameraUpdateFactory.newLatLngBounds(bc.build(), 50));
}
67
iutinvg

Ein Teil des Problems könnte darin bestehen, dass MIN_VALUE immer noch eine positive Zahl ist, während Breiten und Längen negative Werte sein können. Versuchen Sie es mit NEGATIVE_INFINITY anstelle von MIN_VALUE.

0
charlest