2013-09-06 15 views
5

Używam com.google.android.gms.maps.GoogleMap w SherlockFragmentActivity.Obliczyć poziom powiększenia dla Google Map dla dwóch wartości LatLong

kod XML jest taka:

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

int zoomLevel =? // W jaki sposób można obliczyć stopień powiększenia do dwóch rozróżnianie wartości LatLong jak android map v3 trzeba powiedzieć poziom powiększenia jako int

map.setZoom(zoomLevel); 

mam zacząć i wartości docelowe jako com.google.android.gms.maps.model.LatLng

długość i szerokość geograficzną początek, koniec;

dodaję do pligon jak GoogleLocation.addPolyLineOnGMap(mMap, startPoint, endPoint, startMarker, endMarker)

Moim problemem jest to, jak można obliczyć poziom powiększenia na mapie Google, dzięki czemu można go pokazać zarówno odpowiednio znacznik na mapie.

+1

Mapy Google dla Androida ma V2 aż do teraz, nie V3 (V3 jest dla JavaScript). Co masz na myśli przez "obliczyć poziom powiększenia"? – Emmanuel

+0

Proszę używać właściwego języka angielskiego i dokładnie opisać problem. – Anobik

+0

Zaktualizuj moje pytanie. –

Odpowiedz

14

Użyj LatLngBounds.Builder dodaj wszystkie granice w nim i zbuduj, Następnie stwórz obiekt CameraUpdate i przeprowadź w nim aktualizację z dopełnieniem. Użyj tego obiektu CameraUpdate, aby animować kamerę mapy.

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

Dla mnie, muszę obliczyć zoom do początkowej konfiguracji mapy przez GoogleMapOptions, więc korzystanie LatLngBounds.Builder nie będzie działać i nie zoptymalizowane. Jest to, jak obliczyć zoom na podstawie Northeast, z miasta i południowym współrzędne

To przedstawieniu here i this answer, wystarczy umieścić poniższy kod do klasy pomocnika:

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); 
} 

Tworzenie LatLng prostu new LatLng(lat-double, lng-double)

width i height jest wielkość układ map w pikselach

Powiązane problemy