So gruppieren Sie Google Maps kml-Overlay

8

Ich habe mehrere tausend Marker in einer kmz-Datei gespeichert, die ich in eine Google Maps (v3-API) lade.

Ich habe mich umgesehen, um einen Weg zu finden, die Overlay-Daten zu gruppieren, aber ohne Erfolg.
MarkerClusterer sieht gut aus, scheint aber nur mit einem Marker-Array zu funktionieren?

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

Wie kann ich die Marker im Overlay gruppieren, genau wie es der Markerclusterer tut?

Reggie
quelle

Antworten:

5

Die KML-Datei wird tatsächlich von einem Google-Server gelesen und dann als Bildkachel auf der Karte angezeigt. Sie haben also keinen Zugriff auf die eigentlichen Punktobjekte. Wenn Sie Clustering durchführen möchten, müssen Sie die KML auf eine andere Weise laden und die Punkte in einem Array analysieren. Anschließend können Sie das gewünschte clientseitige Clustering verwenden.

Aus den Google Maps V3-API-Dokumenten :

Da die Komponenten in einer KmlLayer bei Bedarf gerendert werden, können Sie mit der Ebene das Rendern von Tausenden von Markern, Polylinien und Polygonen einfach verwalten. Beachten Sie, dass Sie nicht direkt auf diese konstituierenden Objekte zugreifen können, obwohl sie jeweils Klickereignisse bereitstellen, die Daten zu diesen einzelnen Objekten zurückgeben.

Anthony -GISCOE-
quelle
1
Ich habe ungefähr 3500 Marker in der kml / kmz-Datei. Wäre es nicht sehr speicherintensiv, sie in ein Javascript-Array zu laden? Ich kann mir auch vorstellen, dass das Laden der Marker eine Weile dauern würde.
Reggie
1
Es gibt verschiedene Lösungen für den Clustering-Ansatz. Im Allgemeinen sind serverseitige Optionen die besten. Wenn Sie jedoch nur clientseitig arbeiten möchten, müssen Sie nicht unbedingt alle 3500 Punkte ständig laden, z. B. können Sie sie nur für einen bestimmten Maßstab und / oder Umfang laden.
Anthony-GISCOE-
1
Was ist eine gute serverseitige Lösung? Verwenden Sie simpleXML, um die kml zu laden und sie dann als (sehr großes) Array im Javascript von Google Maps auszugeben?
Reggie
1
Verwenden Sie den Server für das Clustering (z. B. nur Google für "serverseitiges Clustering von Google Maps"). Der Client würde dann Anforderungen stellen, um nur die Punkte für die Clusterstandorte zu erhalten, nicht alle Daten.
Anthony-GISCOE-
2

Das ist möglich. Sie können eine Javascript-KML-Parser-Bibliothek verwenden, mit der Sie auf alle Daten in jedem Marker zugreifen können.

In Maps V2 war der beste hier:

econym.org.uk/gmap/egeoxml.htm

In V3 können Sie eine der folgenden 2 verwenden:

code.google.com/p/geoxml3/

code.google.com/p/geoxml/

Einmal verwendet, können Sie beispielsweise jeden KML-Marker durchlaufen und mithilfe von Javascript Punkte an derselben Stelle gruppieren und mithilfe von JS verschiedene Infofenster für jeden Marker an derselben Stelle anzeigen.

Ich mache das auf meiner Your Mapper-Seite hier. Klicken Sie auf eine schwarz nummerierte Markierung, um sie in Aktion zu sehen:

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

Michael Schnuerle
quelle