2013-09-06 11 views
5

SherlockFragmentActivity numaralı telefondan com.google.android.gms.maps.GoogleMap kullanıyorum.İki LatLong değeri için Google Map için Yakınlaştırma Seviyesini Hesaplayın

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

int zoomLevel =:

XML kodu bu nedir? // Ben android haritası v3 olarak İki ayrı LatLong değerler için yakınlaştırma düzeyini hesaplayabilir nasıl başlayıp

başlamak LatLng com.google.android.gms.maps.model.LatLng olarak hedef değerleri, son gibi

map.setZoom(zoomLevel); 

int yakınlaştırma düzeyini anlatmak gerekir;

Ben GoogleLocation.addPolyLineOnGMap(mMap, startPoint, endPoint, startMarker, endMarker)

Benim sorun gibi bir pligon ekliyorum harita üzerinde uygun şekilde hem işaretleyici gösterebilir bu yüzden Google harita için yakınlaştırma düzeyini hesaplayabilir nasıl.

+1

Android için Google Maps sahip bir V2 şimdi değil, V3 kadar (V3, JavaScript içindir). "Zum seviyesini hesapla" ile ne demek istiyorsun? – Emmanuel

+0

Lütfen doğru İngilizce'yi kullanın ve sorunla ilgili sorun olması için – Anobik

+0

Soruyu güncelleyin. –

cevap

14

LatLngBounds.Builder öğesinin içindeki tüm sınırları ekleyin ve onu oluşturun, sonra CameraUpdate nesnesini oluşturun ve dolgu içindeki dolguları bu dosyayla doldurun. Harita kamerasını canlandırmak için bu CameraUpdate nesnesini kullanın.

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

Benim için ben çok LatLngBounds.Builder çalışmaz ve optimize olmaz kullanarak, GoogleMapOptions tarafından ilk harita kurulumu için zoom hesaplamak gerekir. Bu Bir şehrin kuzeydoğu ve güneybatı dayalı zoom hesaplamak nasıl Bu here ve this answer referans oluyor

, sadece aşağıya yardımcı sınıfına kod koyabilirsiniz koordinatları: basitçe new LatLng(lat-double, lng-double)

tarafından

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

LatLng oluşturma

width ve height piksel haritası düzeni boyutudur

İlgili konular