Cómo agrupar superposición kml de Google Maps

8

Tengo varios miles de marcadores almacenados en un archivo kmz que cargo en un Google Maps (v3 API).

He buscado alrededor para encontrar una manera de agrupar los datos de superposición, pero fue en vano.
MarkerClusterer se ve bien, pero solo parece funcionar con una matriz de marcadores.

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

¿Cómo puedo agrupar los marcadores en la superposición, tal como lo hace el marcador de marcadores?

reggie
fuente

Respuestas:

5

El archivo KML en realidad lo lee un servidor de Google, luego se sirve al mapa como mosaicos de imágenes. Por lo tanto, no tiene acceso a los objetos puntuales reales. Si desea hacer clustering, debería cargar el KML de otra manera y analizar los puntos en una matriz, y luego puede usar cualquier clustering del lado del cliente que desee.

De los documentos de la API de Google Maps V3 :

Debido a que los componentes dentro de un KmlLayer se representan bajo demanda, la capa le permite administrar fácilmente la representación de miles de marcadores, polilíneas y polígonos. Tenga en cuenta que no puede acceder a estos objetos constitutivos directamente, aunque cada uno proporciona eventos de clic que devuelven datos sobre esos objetos individuales.

Anthony -GISCOE-
fuente
1
Tengo alrededor de 3500 marcadores en el archivo kml / kmz. ¿No consumiría mucha memoria cargarlos en una matriz de JavaScript? Además, me imagino que tomaría bastante tiempo cargar los marcadores.
Reggie
1
Existen varias soluciones para el enfoque de agrupamiento. En general, las opciones del lado del servidor son las mejores. Sin embargo, si desea ir solo del lado del cliente, no necesariamente necesita cargar todos los 3500 puntos todo el tiempo, por ejemplo, simplemente puede cargarlos para una escala y / o extensión específica.
Anthony -GISCOE-
1
Entonces, ¿cuál es una buena solución del lado del servidor? ¿Usa simpleXML para cargar el kml y luego generarlo como una matriz (muy grande) en el JavaScript de google maps?
Reggie
1
Use el servidor para hacer clustering (por ejemplo, solo google para 'clustering del lado del servidor google maps'). El cliente entonces haría solicitudes para obtener solo los puntos para las ubicaciones del clúster, no todos los datos.
Anthony -GISCOE-
2

Esto es posible. Puede usar una biblioteca de analizador KML Javascript que le permite acceder a todos los datos en cada marcador.

En Maps V2, el mejor estaba aquí:

econym.org.uk/gmap/egeoxml.htm

En V3 puedes usar uno de estos 2:

code.google.com/p/geoxml3/

code.google.com/p/geoxml/

Una vez utilizado, puede hacer cosas como recorrer cada marcador KML, y usar javascript para agrupar puntos en la misma ubicación, y usar JS para mostrar diferentes ventanas de información para cada marcador en el mismo lugar.

Lo hago en mi sitio de Your Mapper aquí. Haga clic en un marcador numerado negro para verlo en acción:

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

Michael Schnuerle
fuente