Cara mengelompokkan Google Maps kml overlay

8

Saya memiliki beberapa ribu penanda yang disimpan dalam file kmz yang saya muat ke Google Maps (v3 API).

Saya telah mencari-cari cara untuk mengelompokkan data overlay, tetapi tidak berhasil.
MarkerClusterer terlihat bagus, tetapi sepertinya hanya berfungsi dengan array penanda?

function initialize() {
    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(25,-20);
    var myOptions = {
        zoom: 2,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    var ctaLayer = new google.maps.KmlLayer('thedata.kmz');
    ctaLayer.setMap(map);

    //cluster
    var mcOptions = {gridSize: 50, maxZoom: 15};
    var mc = new MarkerClusterer(map, ctaLayer, mcOptions);
}

Bagaimana saya bisa mengelompokkan penanda dalam hamparan, seperti halnya markerclusterer melakukannya?

reggie
sumber

Jawaban:

5

File KML sebenarnya dibaca oleh server Google, kemudian disajikan ke peta sebagai ubin gambar. Dengan demikian, Anda tidak memiliki akses ke objek titik aktual. Jika Anda ingin melakukan pengelompokan, Anda harus memuat KML dengan cara lain dan mem-parsing poin ke dalam array, dan kemudian Anda bisa menggunakan pengelompokan sisi klien apa pun yang Anda inginkan.

Dari dokumen Google Maps V3 API :

Karena komponen dalam KmlLayer diberikan sesuai permintaan, lapisan ini memungkinkan Anda untuk dengan mudah mengelola rendering ribuan marker, polyline, dan poligon. Perhatikan bahwa Anda tidak dapat mengakses objek konstituen ini secara langsung, meskipun mereka masing-masing memberikan peristiwa klik yang mengembalikan data pada masing-masing objek tersebut.

Anthony -GISCOE-
sumber
1
Saya memiliki sekitar 3.500 penanda dalam file kml / kmz. Bukankah sangat memakan memori untuk memuatnya ke dalam javascript array? Juga, saya membayangkan akan butuh waktu cukup lama untuk memuat spidol.
Reggie
1
Ada berbagai solusi untuk pendekatan clustering. Secara umum, opsi sisi server adalah yang terbaik. Namun, jika Anda ingin pergi ke sisi klien saja, Anda tidak perlu memuat semua 3500 poin sepanjang waktu, misalnya Anda bisa memuatnya untuk skala dan / atau tingkat tertentu.
Anthony -GISCOE-
1
Jadi apa solusi sisi server yang bagus? Menggunakan simpleXML untuk memuat kml dan kemudian menampilkannya sebagai array (sangat besar) di javascript google maps?
Reggie
1
Gunakan server untuk melakukan pengelompokan (misalnya hanya google untuk 'pengelompokan sisi server google maps'). Klien kemudian akan membuat permintaan untuk mendapatkan hanya poin untuk lokasi cluster, tidak semua data.
Anthony -GISCOE-
2

Ini mungkin. Anda bisa menggunakan perpustakaan parser Javascript KML yang memberi Anda akses ke semua data di setiap penanda.

Di Maps V2 yang terbaik ada di sini:

econym.org.uk/gmap/egeoxml.htm

Di V3 Anda dapat menggunakan salah satu dari 2 ini:

code.google.com/p/geoxml3/

code.google.com/p/geoxml/

Setelah digunakan, Anda dapat melakukan hal-hal seperti perulangan melalui setiap penanda KML, dan menggunakan javascript untuk mengelompokkan poin di lokasi yang sama, dan menggunakan JS untuk menampilkan jendela info berbeda untuk setiap penanda di tempat yang sama.

Saya melakukannya di situs Mapper Anda di sini. Klik penanda bernomor hitam untuk melihatnya beraksi:

http://www.yourmapper.com/map/111/crime-reports/crime-in-metro-louisville-ky-since-jan-2003.htm

Michael Schnuerle
sumber