2013-09-06 6 views
5

Sto usando com.google.android.gms.maps.GoogleMap in SherlockFragmentActivity.Calcola il livello di zoom per Google Map per due valori LatLong

codice XML è questo:

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

int zoomLevel =? // Come posso calcolare il livello di zoom per due valori LatLong diffrent come mappa per android v3 bisogno di dire a livello di zoom come int

map.setZoom(zoomLevel); 

ho avviare e valori di destinazione come com.google.android.gms.maps.model.LatLng

LatLng inizio, fine;

sto aggiungendo un pligon come GoogleLocation.addPolyLineOnGMap(mMap, startPoint, endPoint, startMarker, endMarker)

Il mio problema è come posso calcolare il livello di zoom per Google map in modo che possa mostrare sia indicatore appropriato sulla mappa.

+1

Google Maps per Android ha una V2 fino ad ora, non V3 (V3 è per JavaScript). Cosa intendi per "calcolare il livello di zoom"? – Emmanuel

+0

Utilizzare l'inglese corretto ed essere specifici sul problema – Anobik

+0

Aggiornare la mia domanda. –

risposta

14

Usa LatLngBounds.Builder aggiungi tutti i limiti e crealo, quindi crea l'oggetto CameraUpdate e passa i limiti in esso updatefactory con il riempimento. Usa questo oggetto CameraUpdate per animare la camera della mappa.

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

Per me, ho bisogno di calcolare lo zoom per la configurazione iniziale mappa GoogleMapOptions, in modo da utilizzare LatLngBounds.Builder non avrebbe funzionato e non ottimizzato. Questo è il modo a calcolare lo zoom in base a nord-est e sud-ovest di una città coordina

Si fa riferimento a here e this answer, si può semplicemente inserire il codice qui sotto al tuo classe helper:

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

Creazione LatLng semplicemente new LatLng(lat-double, lng-double)

width e height è la dimensione della mappa layout in pixel

Problemi correlati