İşaretçilerinizi kümeleyerek, bir haritaya çok sayıda işaretçi yerleştirebilirsiniz bu sayede Haritalar'ın okunabilirliğini yitirmeyin.
Giriş
Bu videoda, işaretleyici kümelemenin kullanımı harita üzerinde çok sayıda veri noktası bulunması gerektiğini unutmayın.
İşaretçi kümeleme yardımcı programı, farklı konumlardaki birden fazla işaretçiyi yönetmenize yardımcı olur. yakınlaştırma seviyeleridir. Daha kesin konuşmak gerekirse "işaretçiler" aslında "öğeler" bu noktada sadece 'İşaretçi' olun işlenebilirler. Ancak daha net ifadelerle bu belgede onlara 'işaretçiler' adı verilir devam edeceğiz.
Bir kullanıcı haritayı yüksek bir yakınlaştırma düzeyinde görüntülediğinde, ve işaretçileri görebilirsiniz. Kullanıcı görüntüyü uzaklaştırdığında işaretçiler toplanır. kümeler halinde birleştirir. İşaretçi kümeleme yardımcı programı Android Yardımcı Program Kitaplığı için Haritalar SDK'sının bir parçasıdır. Kitaplığı henüz ayarlamadıysanız kurulum kılavuzundaki talimatları uygulayın okuyun.
İşaretçi kümeleme yardımcı programını kullanmak için işaretçileri
ClusterManager
öğesine ClusterItem
nesne eklendi. İlgili içeriği oluşturmak için kullanılan
ClusterManager
, işaretçileri Algorithm
noktasına geçirir,
Bu da onları bir küme kümesine dönüştürür. ClusterRenderer
oluşturma işlemini, tek tek kullanıcı kümeleri ve tek tek
kullanabilirsiniz. ClusterRenderer
ve Algorithm
takılabilir ve özelleştirilebilir.
Yardımcı program kitaplığı, örnek uygulamalar sağlayan bir demo uygulaması içerir çok daha fazlasıdır. Demo uygulamasını çalıştırma konusunda yardım almak için kurulum kılavuzuna bakın. Demo uygulaması aşağıdaki işaretçi küme örneklerini içerir:
ClusteringDemoActivity
: Bir sonraki videoda, işaretçi kümelemesi.BigClusteringDemoActivity
: 2.000 ile kümeleme kullanabilirsiniz.CustomMarkerClusteringDemoActivity
: Özel tasarım oluşturma iki yolu vardır.
Basit bir işaretçi kümeleyici ekleyin
On işaretçiden oluşan basit bir küme oluşturmak için aşağıdaki adımları uygulayın. Sonuç bu şekilde görünür, ancak gösterilen/kümelenen işaretçilerin sayısı değişiklik gösterir:
Gerekli adımların özeti aşağıda verilmiştir:
- Uygulama
ClusterItem
harita üzerinde bir işaretçiyi temsil etmek için kullanılır. Küme öğesi, işaretçinin konumunu döndürür LatLng nesnesi olarak ve isteğe bağlı bir başlık veya snippet olarak da kullanabilirsiniz. - Yeni ekle
ClusterManager
kullanarak küme öğelerini (işaretçiler) yakınlaştırma düzeyine göre gruplandırabilirsiniz. - Haritanın
OnCameraIdleListener()
değerini şuna ayarlayın:ClusterManager
, uygulandığındanClusterManager
dinleyicidir. - İşaretçi tıklamasına yanıt olarak belirli bir işlev eklemek istiyorsanız
etkinliği için, haritanın
OnMarkerClickListener()
ayarınıClusterManager
, uygulandığındanClusterManager
dinleyicidir. - İşaretçileri
ClusterManager
içine yerleştirin.
Adımları daha ayrıntılı inceleyelim: 10'luk basit kümemizi oluşturmak için
işaretçileri kullanmak istiyorsanız önce şunu uygulayan bir MyItem
sınıfı oluşturun:
ClusterItem
.
Kotlin
inner class MyItem( lat: Double, lng: Double, title: String, snippet: String ) : ClusterItem { private val position: LatLng private val title: String private val snippet: String override fun getPosition(): LatLng { return position } override fun getTitle(): String { return title } override fun getSnippet(): String { return snippet } override fun getZIndex(): Float { return 0f } init { position = LatLng(lat, lng) this.title = title this.snippet = snippet } }
Java
public class MyItem implements ClusterItem { private final LatLng position; private final String title; private final String snippet; public MyItem(double lat, double lng, String title, String snippet) { position = new LatLng(lat, lng); this.title = title; this.snippet = snippet; } @Override public LatLng getPosition() { return position; } @Override public String getTitle() { return title; } @Override public String getSnippet() { return snippet; } @Nullable @Override public Float getZIndex() { return 0f; } }
Harita etkinliğinize ClusterManager
ekleyin ve
küme öğelerinden yararlanabilirsiniz. Not:
tür
bağımsız değişkeni <MyItem>
ClusterManager
, MyItem
türünde olacak.
Kotlin
// Declare a variable for the cluster manager. private lateinit var clusterManager: ClusterManager<MyItem> private fun setUpClusterer() { // Position the map. map.moveCamera(CameraUpdateFactory.newLatLngZoom(LatLng(51.503186, -0.126446), 10f)) // Initialize the manager with the context and the map. // (Activity extends context, so we can pass 'this' in the constructor.) clusterManager = ClusterManager(context, map) // Point the map's listeners at the listeners implemented by the cluster // manager. map.setOnCameraIdleListener(clusterManager) map.setOnMarkerClickListener(clusterManager) // Add cluster items (markers) to the cluster manager. addItems() } private fun addItems() { // Set some lat/lng coordinates to start with. var lat = 51.5145160 var lng = -0.1270060 // Add ten cluster items in close proximity, for purposes of this example. for (i in 0..9) { val offset = i / 60.0 lat += offset lng += offset val offsetItem = MyItem(lat, lng, "Title $i", "Snippet $i") clusterManager.addItem(offsetItem) } }
Java
// Declare a variable for the cluster manager. private ClusterManager<MyItem> clusterManager; private void setUpClusterer() { // Position the map. map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(51.503186, -0.126446), 10)); // Initialize the manager with the context and the map. // (Activity extends context, so we can pass 'this' in the constructor.) clusterManager = new ClusterManager<MyItem>(context, map); // Point the map's listeners at the listeners implemented by the cluster // manager. map.setOnCameraIdleListener(clusterManager); map.setOnMarkerClickListener(clusterManager); // Add cluster items (markers) to the cluster manager. addItems(); } private void addItems() { // Set some lat/lng coordinates to start with. double lat = 51.5145160; double lng = -0.1270060; // Add ten cluster items in close proximity, for purposes of this example. for (int i = 0; i < 10; i++) { double offset = i / 60d; lat = lat + offset; lng = lng + offset; MyItem offsetItem = new MyItem(lat, lng, "Title " + i, "Snippet " + i); clusterManager.addItem(offsetItem); } }
İsterseniz yakınlaştırma ve uzaklaştırma sırasında kümeleme animasyonlarını devre dışı bırakabilirsiniz.
Animasyon kapalıysa işaretçiler
ve kümelerden çıkarımda bulunabilirsiniz.
Animasyonları devre dışı bırakmak için ClusterManager
uygulamasında setAnimation()
işlevini kullanın
aşağıdaki gibidir:
Kotlin
clusterManager.setAnimation(false)
Java
clusterManager.setAnimation(false);
Tek bir kümelenmiş işaretçi için bilgi penceresi ekleme
Belirli kümelenmiş işaretçiler için bir bilgi penceresi eklemek üzere
ClusterItem
uygulamanızın oluşturucusu.
Aşağıdaki örnekte, bilgi penceresi içeren bir işaretçi eklendi
addItems()
yönteminde bir başlık ve snippet ayarlayarak:
Kotlin
// Set the lat/long coordinates for the marker. val lat = 51.5009 val lng = -0.122 // Set the title and snippet strings. val title = "This is the title" val snippet = "and this is the snippet." // Create a cluster item for the marker and set the title and snippet using the constructor. val infoWindowItem = MyItem(lat, lng, title, snippet) // Add the cluster item (marker) to the cluster manager. clusterManager.addItem(infoWindowItem)
Java
// Set the lat/long coordinates for the marker. double lat = 51.5009; double lng = -0.122; // Set the title and snippet strings. String title = "This is the title"; String snippet = "and this is the snippet."; // Create a cluster item for the marker and set the title and snippet using the constructor. MyItem infoWindowItem = new MyItem(lat, lng, title, snippet); // Add the cluster item (marker) to the cluster manager. clusterManager.addItem(infoWindowItem);
İşaretçi kümelerini özelleştir
ClusterManager
oluşturucusu,
DefaultClusterRenderer
ve bir
NonHierarchicalDistanceBasedAlgorithm
. Bu ayarı değiştirmek için
ClusterRenderer
ve Algorithm
setAlgorithm(Algorithm<T> algorithm)
ve
setRenderer(ClusterRenderer<T> view)
yöntem
ClusterManager
.
Oluşturma işlemini özelleştirmek için ClusterRenderer
görebilirsiniz. DefaultClusterRenderer
iyi bir temel oluşturur
başlangıç noktasıdır. DefaultClusterRenderer
alt sınıfını kullanarak şunları yapabilirsiniz:
varsayılanları geçersiz kılar.
Özelleştirmenin daha ayrıntılı bir örneği için
Kargolanan demo uygulamada CustomMarkerClusteringDemoActivity
yardımcı olur.
CustomMarkerClusteringDemoActivity
kendi kümesini tanımlar
bir Person
öğesi belirtir ve
PersonRenderer
olarak DefaultClusterRenderer
.
Demo ayrıca
ClusterManager.OnClusterClickListener<Person>
arayüzünü
küme tıklandığında kişi hakkında daha fazla bilgi görüntüler. Şunları yapabilirsiniz:
diğer ürünleri de
ClusterManager.OnClusterItemClickListener<Person>
sağlayabilirsiniz.
Demo uygulamasını çalıştırma konusunda yardım almak için kurulum kılavuzuna bakın.