Sedikit terjebak yang satu ini. Saya mengambil daftar koordinat geografis melalui JSON dan memunculkannya ke peta google. Semua berfungsi dengan baik kecuali dalam contoh ketika saya memiliki dua atau lebih penanda di tempat yang sama persis. API hanya menampilkan 1 penanda - yang teratas. Saya kira ini cukup adil, tetapi saya ingin menemukan cara untuk menampilkan semuanya.
Saya telah mencari di google dan menemukan beberapa solusi tetapi sebagian besar tampaknya untuk V2 dari API atau tidak terlalu bagus. Idealnya saya menginginkan solusi di mana Anda mengklik semacam penanda grup dan yang kemudian menunjukkan penanda yang berkerumun di sekitar tempat mereka semua berada.
Adakah yang punya masalah ini atau yang serupa dan mau berbagi solusi?
sumber
OverlappingMarkerSpiderfier
kombinasi dengan MarkerClusterer, opsi yang baik adalah menyetelmaxZoom
opsi pada konstruktor cluster. Ini "memisahkan" penanda setelah tingkat zoom yang ditentukan.Mengimbangi penanda bukanlah solusi nyata jika ditempatkan di gedung yang sama. Apa yang mungkin ingin Anda lakukan adalah memodifikasi markerclusterer.js seperti ini:
Tambahkan metode klik prototipe di kelas MarkerClusterer, seperti itu - kita akan menimpanya nanti di fungsi map initialize ():
Di kelas ClusterIcon, tambahkan kode berikut SETELAH pemicu clusterclick:
Kemudian, dalam fungsi initialize () tempat Anda menginisialisasi peta dan mendeklarasikan objek MarkerClusterer Anda:
Di mana multiChoice () adalah fungsi ANDA (belum ditulis) untuk memunculkan InfoWindow dengan daftar opsi untuk dipilih. Perhatikan bahwa objek markerClusterer diteruskan ke fungsi Anda, karena Anda akan memerlukan ini untuk menentukan berapa banyak marker yang ada di cluster itu. Sebagai contoh:
sumber
Saya menggunakan ini bersama jQuery dan itu melakukan pekerjaan:
sumber
Memperluas jawaban Chaoley , saya menerapkan fungsi itu, dengan daftar lokasi (objek dengan
lng
danlat
properti) yang koordinatnya persis sama, memindahkannya sedikit dari lokasi aslinya (memodifikasi objek di tempat). Mereka kemudian membentuk lingkaran yang bagus di sekitar titik tengah.Saya menemukan bahwa, untuk garis lintang saya (52 derajat Utara), radius lingkaran 0,0003 derajat bekerja paling baik, dan Anda harus mengimbangi perbedaan antara derajat garis lintang dan garis bujur ketika dikonversi ke kilometer. Anda dapat menemukan perkiraan konversi untuk garis lintang Anda di sini .
sumber
37.68625400000000000,-75.71669800000000000
menjadi37.686254,-75.716698
juga yang sama untuk semua nilai ... M mengharapkan sesuatu seperti ...37.68625400000000000,-75.71669800000000000
menjadi37.6862540000001234,-75.7166980000001234
37.6862540000005678,-75.7166980000005678
.. dll .. Saya juga mencoba mengubah sudut saya.@Ignatius jawaban paling luar biasa, diperbarui untuk bekerja dengan v2.0.7 dari MarkerClustererPlus.
Tambahkan metode klik prototipe di kelas MarkerClusterer, seperti itu - kita akan menimpanya nanti di fungsi map initialize ():
Di kelas ClusterIcon, tambahkan kode berikut SETELAH pemicu klik / clusterclick:
Kemudian, dalam fungsi initialize () tempat Anda menginisialisasi peta dan mendeklarasikan objek MarkerClusterer Anda:
Di mana multiChoice () adalah fungsi ANDA (belum ditulis) untuk memunculkan InfoWindow dengan daftar opsi untuk dipilih. Perhatikan bahwa objek markerClusterer diteruskan ke fungsi Anda, karena Anda akan memerlukan ini untuk menentukan berapa banyak marker yang ada di cluster itu. Sebagai contoh:
sumber
maxZoom
masalah Anda , saya pikir ini hanya masalah jika tidak ada set maxZoom atau maxZoom untuk cluster lebih besar dari zoom untuk peta. Saya telah mengganti hardcode Anda dengan potongan ini dan tampaknya berfungsi dengan baik:var maxZoom = mc.getMaxZoom(); if (null === maxZoom || maxZoom > mc.getMap().maxZoom) { maxZoom = mc.getMap().maxZoom; if (null === maxZoom) { maxZoom = 15; } }
clickedCluster.center_.lat()
/clickedCluster.center_.lng()
Jawaban di atas lebih elegan, tetapi saya menemukan cara cepat dan kotor yang benar-benar berfungsi dengan sangat baik. Anda dapat melihatnya beraksi di www.buildinglit.com
Yang saya lakukan hanyalah menambahkan offset acak ke garis lintang dan garis bujur ke halaman genxml.php saya sehingga mengembalikan hasil yang sedikit berbeda setiap kali dengan offset setiap kali peta dibuat dengan penanda. Ini terdengar seperti peretasan, tetapi pada kenyataannya Anda hanya perlu penanda untuk memindahkan sedikit dorongan ke arah acak agar dapat diklik di peta jika tumpang tindih. Ini benar-benar bekerja dengan sangat baik, saya akan mengatakan lebih baik daripada metode laba-laba karena siapa yang ingin menangani kerumitan itu dan membuatnya muncul di mana-mana. Anda hanya ingin dapat memilih penanda. Menyenggolnya secara acak bekerja dengan sempurna.
Berikut adalah contoh pembuatan node iterasi pernyataan while di php_genxml.php saya
Perhatikan di bawah garis lintang dan bujur ada + offset. dari 2 variabel di atas. Saya harus membagi acak dengan 0,1000 dengan 10000000 untuk mendapatkan desimal yang cukup kecil secara acak untuk hampir memindahkan penanda. Jangan ragu untuk mengotak-atik variabel itu untuk mendapatkan yang lebih tepat untuk kebutuhan Anda.
sumber
Untuk situasi di mana ada beberapa layanan di gedung yang sama, Anda dapat mengimbangi penanda hanya sedikit, (misalnya dengan 0,001 derajat), dalam radius dari titik sebenarnya. Ini juga harus menghasilkan efek visual yang bagus.
sumber
Ini lebih merupakan solusi sementara 'cepat dan kotor' yang mirip dengan yang disarankan Matthew Fox, kali ini menggunakan JavaScript.
Dalam JavaScript Anda bisa mengimbangi lintang dan bujur dari semua lokasi Anda dengan menambahkan offset acak kecil ke keduanya, misalnya
myLocation[i].Latitude+ = (Math.random() / 25000)
(Saya menemukan bahwa membagi dengan 25000 memberikan pemisahan yang cukup tetapi tidak memindahkan penanda secara signifikan dari lokasi yang sebenarnya, misalnya alamat tertentu)
Ini membuat pekerjaan yang cukup baik untuk mengimbangi satu sama lain, tetapi hanya setelah Anda memperbesarnya lebih dekat. Saat diperbesar, masih tidak jelas bahwa ada beberapa opsi untuk lokasi tersebut.
sumber
Lihat Marker Clusterer untuk V3 - pustaka ini mengelompokkan poin-poin terdekat ke dalam penanda grup. Peta diperbesar saat cluster diklik. Saya membayangkan ketika diperbesar Anda masih memiliki masalah yang sama dengan penanda di tempat yang sama.
sumber
Diperbarui untuk bekerja dengan MarkerClustererPlus.
sumber
Saya suka solusi sederhana jadi ini solusi saya. Alih-alih memodifikasi lib, yang akan membuatnya lebih sulit untuk dikelola. Anda cukup menonton acara seperti ini
maka Anda dapat mengelolanya
i, yaitu, menggunakan bootstrap untuk menampilkan panel dengan daftar. yang menurut saya jauh lebih nyaman dan bermanfaat daripada spiderfying di tempat-tempat "ramai". (jika Anda menggunakan clusterer kemungkinan besar Anda akan berakhir dengan tabrakan setelah Anda spiderfy). Anda juga dapat memeriksa zoom di sana.
btw. saya baru saja menemukan leaflet dan tampaknya bekerja jauh lebih baik, cluster DAN spiderfy bekerja dengan sangat lancar http://leaflet.github.io/Leaflet.markercluster/example/marker-clustering-realworld.10000.html dan ini open-source.
sumber
Periksa ini: https://github.com/plank/MarkerClusterer
Ini adalah MarkerCluster yang dimodifikasi untuk memiliki infoWindow di dalam penanda cluster, saat Anda memiliki beberapa penanda di posisi yang sama.
Anda dapat melihat cara kerjanya di sini: http://culturedays.ca/en/2013-activities
sumber
Memperluas jawaban yang diberikan di atas, cukup pastikan Anda menyetel opsi maxZoom saat menginisialisasi objek peta.
sumber
Pemberian offset akan membuat penanda jauh saat pengguna memperbesar hingga maks. Jadi saya menemukan cara untuk mencapai itu. ini mungkin bukan cara yang tepat tetapi berhasil dengan sangat baik.
atur zIndex penanda sehingga Anda akan melihat ikon penanda yang ingin Anda lihat di atas, jika tidak maka akan menganimasikan penanda seperti auto swapping. saat pengguna mengetuk penanda, tangani zIndex untuk membawa penanda di atas menggunakan zIndex Swap.
sumber
Bagaimana cara lolos begitu saja .. [Swift]
Penanda baru akan dibuat? periksa
clusterArray
dan manipulasi offsetnyahasil
sumber
Menambah jawaban jenius yang licik dari Matthew Fox, saya telah menambahkan offset acak kecil untuk setiap lat dan lng saat mengatur objek marker. Sebagai contoh:
sumber
Memperluas jawaban di atas, ketika Anda mendapatkan string yang digabungkan, bukan posisi yang ditambahkan / dikurangi (misalnya "37.12340-0.00069"), ubah garis lintang / bujur asli Anda menjadi float, misalnya menggunakan parseFloat (), lalu tambahkan atau kurangi koreksi.
sumber