2013-09-06 4 views
5

Ich verwende com.google.android.gms.maps.GoogleMap in SherlockFragmentActivity.Berechnen Zoom-Ebene für Google Map für zwei LatLong-Werte

XML-Code ist dies:

  <fragment 
       android:id="@+id/map" 
       android:name="com.google.android.gms.maps.SupportMapFragment" 
       android:layout_width="fill_parent" 
       android:layout_height="150dip" /> 

int zoomLevel =? // Wie kann ich die Zoomstufe für zwei diffrent latlong Werte als Android-Karte v3 berechnen müssen Zoomstufe sagen, wie int

map.setZoom(zoomLevel); 

ich anfangen haben und Zielwerte als com.google.android.gms.maps.model.LatLng

latLng Start, Ende;

Ich füge einen pligon wie GoogleLocation.addPolyLineOnGMap(mMap, startPoint, endPoint, startMarker, endMarker)

Mein Problem ist, wie ich Zoomstufe für Google Maps berechnen kann, so dass es sowohl Marker in geeigneter Weise auf der Karte zeigen.

+1

Google maps für Android hat ein V2 bis jetzt, nicht V3 (V3 ist für JavaScript). Was meinst du mit "Zoomstufe berechnen"? – Emmanuel

+0

Bitte verwenden Sie das richtige Englisch und seien Sie spezifisch in Bezug auf das Problem – Anobik

+0

Aktualisieren Sie meine Frage. –

Antwort

14

Verwenden Sie LatLngBounds.Builder fügen Sie alle Grenzen darin hinzu und erstellen Sie es. Erstellen Sie dann das CameraUpdate-Objekt und übergeben Sie die Grenzen darin updatefactory mit padding. Verwenden Sie dieses CameraUpdate-Objekt, um die Kartenkamera zu animieren.

LatLngBounds.Builder builder = new LatLngBounds.Builder(); 
     for (Marker m : markers) { 
      builder.include(m.getPosition()); 
     } 
     LatLngBounds bounds = builder.build(); 
     int padding = ((width * 10)/100); // offset from edges of the map 
              // in pixels 
     CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 
       padding); 
     mMap.animateCamera(cu); 
2

Für mich, ich brauche von GoogleMapOptions des Zooms für die Anfangs-Karte Setup zu berechnen, so mit LatLngBounds.Builder nicht funktionieren würde und nicht optimiert. Dies ist, wie ich den Zoom basierend auf einer Stadt Nordosten und Südwesten Koordinaten berechnen

Es here und this answer Verweisen Sie einfach den Code unten an deine Hilfsklasse stellen können:

final static int GLOBE_WIDTH = 256; // a constant in Google's map projection 
final static int ZOOM_MAX = 21; 

public static int getBoundsZoomLevel(LatLng northeast,LatLng southwest, 
            int width, int height) { 
    double latFraction = (latRad(northeast.latitude) - latRad(southwest.latitude))/Math.PI; 
    double lngDiff = northeast.longitude - southwest.longitude; 
    double lngFraction = ((lngDiff < 0) ? (lngDiff + 360) : lngDiff)/360; 
    double latZoom = zoom(height, GLOBE_WIDTH, latFraction); 
    double lngZoom = zoom(width, GLOBE_WIDTH, lngFraction); 
    double zoom = Math.min(Math.min(latZoom, lngZoom),ZOOM_MAX); 
    return (int)(zoom); 
} 
private static double latRad(double lat) { 
    double sin = Math.sin(lat * Math.PI/180); 
    double radX2 = Math.log((1 + sin)/(1 - sin))/2; 
    return Math.max(Math.min(radX2, Math.PI), -Math.PI)/2; 
} 
private static double zoom(double mapPx, double worldPx, double fraction) { 
    final double LN2 = .693147180559945309417; 
    return (Math.log(mapPx/worldPx/fraction)/LN2); 
} 

Erstellen LatLng einfach durch new LatLng(lat-double, lng-double)

width und height ist die Karte Layoutgröße in Pixel

Verwandte Themen