SORU
12 ŞUBAT 2013, Salı


Android v2 tüm harita işaretleri göstermek için zoom

GoogleMap 10 işaretleri var. Mümkün olduğunca zoom görünümünde tüm işaretleri tutmak istiyorum? Önceki sürümde bu zoomToSpan() dan elde edilebilir ama v2 nasıl yaptığı hakkında hiçbir fikrim yok. Ayrıca, görünür olması gereken dairenin yarıçapı biliyorum.

CEVAP
12 ŞUBAT 2013, Salı


(Muhtemelen) tüm programlı göster hareketleri CameraUpdate sınıf kullanmanız gerekir.

Bunu yapmak için önce: bütün işaretler sınırları hesaplamak

LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (Marker marker : markers) {
    builder.include(marker.getPosition());
}
LatLngBounds bounds = builder.build();

Sonra fabrika kullanarak hareket açıklama nesnesi elde edilir: CameraUpdateFactory:

int padding = 0; // offset from edges of the map in pixels
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);

Nihayet hareket ettirerek harita:

googleMap.moveCamera(cu);

Ya da eğer bir animasyon istiyorsanız:

googleMap.animateCamera(cu);

Hepsi bu :)

Açıklama 1

Neredeyse tüm hareket yöntemleri Map nesne düzeni sürecinden geçmiştir gerektirir. Bunun olmasını addOnGlobalLayoutListener yapı kullanma bekleyebilirsin. Ayrıntılar bu cevap ve kalan cevaplar için yorumlarda bulunabilir. Ayrıca complete code for setting map extent using addOnGlobalLayoutListener here bir bulabilirsiniz.

Açıklama 2

Bir yorum göster sadece bir marker sonuçları için bu yöntemi kullanarak bir "tuhaf" yakınlaştırma düzeyi düzeyde verilen konum için kullanılabilir maksimum zoom olduğuna inanıyorum. set zoom notları Bu nedenle bekleniyor sanırım

  1. LatLngBounds bounds örnek northeast emlak southwest dünya bounds bu sigorta kapsamına alan bölümü tam olarak sıfır olduğunu, yani eşit olacaktır. (Bu tek bir işaret yok alana sahip olduğu için mantıklı.)
  2. bounds 20* *ileterek aslında bounds (sıfır alana sahip) tüm harita görünümü kapsayacak böyle bir yakınlaştırma düzeyinde bir hesaplama isteği.
  3. Aslında kağıt üzerinde bu hesaplama yapabilirsiniz. Teorik cevabı olan yakınlaştırma düzeyi&; (artı sonsuz) oo. Uygulamada Map nesnenin belirli bir konum için izin verilen maksimum daha makul bir seviyeye sabitlenmiş bu yüzden bu değeri desteklemiyor.

Başka bir yaklaşım: nasıl Map nesne zum ne düzeyde bir seçim olabilirtek bir konum? Belki de en iyi değeri 20 ise belirli bir adresi temsil eder (eğer) olmalıdır. Belki de 11 eğer bir şehri temsil ediyor. Ya da belki 6 eğer bir ülkeyi temsil ediyor. API o kadar zeki değil ve kararı size kalmış.

Yani, sadece markers tek bir yer vardır, ve eğer öyleyse, birini kullanın olup olmadığını kontrol etmelisiniz:

  • CameraUpdate cu = CameraUpdateFactory.newLatLng(marker.getPosition()) işareti yerine git, mevcut seviye bozulmadan zoom bırakın.
  • CameraUpdate cu = CameraUpdateFactory.newLatLngZoom(marker.getPosition(), 12F) işareti yerine git, keyfi olarak seçilen bir değer için yakınlaştırma düzeyini ayarlayın 12.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BetterCoder

    BetterCoder

    17 Aralık 2012
  • FD2097

    FD2097

    21 HAZİRAN 2009
  • RogerBuckChrist

    RogerBuckChr

    9 Temmuz 2011