2011-07-26 24 views
6

¿Hay una manera de conseguir la agrupación marcador (es decir makerclusterer) para trabajar con una capa de fusión tabla? Parece que tienes que asignar marcadores a markerclusterer pero al usar una capa de tabla de fusión, Google está manejando los marcadores/infowindows. Todavía estoy tratando de entender esta cosa de la mesa de fusión.marcador Clustering - Fusión Tabla de capa - Google Maps v3

Básicamente buscando una manera de agrupar grandes cantidades de marcadores que suministra a través de una tabla dinámica

Respuesta

0

Fusion Tables le permite ver miles de puntos a la vez mediante el uso de la representación del lado del servidor (de los servidores de Google). Marker Clusterer resuelve el problema construyendo un conjunto de clusters desde los puntos más cercanos (desde el navegador del cliente). No necesariamente los usaría a los dos al mismo tiempo, pero podría funcionar para su caso de uso, depende de usted.

Puede leer más información sobre cómo funcionan aquí:

http://code.google.com/apis/maps/articles/toomanymarkers.html

Si realmente quería también se puede utilizar la API de Google Fusion Tables para alimentar a los datos de las Tablas fusión al marcador Clusterer.

Espero que esto ayude.

1

no creo que usted conseguirá que funcione con una mesa de fusión. IMO, la tabla de fusión no tiene soporte para un índice espacial. Un si ayuda a reducir la complejidad 2d a una complejidad 1d. Se usa en muchas aplicaciones como heatmaps, treemaps, búsqueda de códigos postales, aplicación de mapas. Desea buscar el blog de Nick's hilbert curve spatial index quadtree.

5

Capas Fusión de mesa hacen que una imagen PNG adicional para cada baldosa que consigue superpone en la parte superior de la baldosa del mapa, que contiene los puntos de datos para esa ficha, esta es la parte del lado del servidor de representación. Por lo tanto, son varios puntos de datos por mosaico que contienen puntos de datos.

MapsIt.png map tile with data points already positioned on the layer

generar sus propios marcadores de datos, que es necesaria para MarkerClusterer, no superponer una imagen por azulejo, crea un marcador individual en el mapa para cada punto de datos y superposiciones de imágenes en un sprite a ese.

Marker Sprite image used for each data point

Basado en esto, no es posible utilizar MarkerClusterer y una FusionTablesLayer.

+0

corrió a través de este post investigar esto por mí mismo. Pensé que dejaría un comentario que sí, es posible según el equipo de Google Fusion Tables. [https://groups.google.com/d/msg/fusion-tables-users-group/eW-der8-diM/UnaqHkpgeDcJ] – danagerous

+0

@danagerous Hay una gran diferencia entre hacerlo en FusionTablesLayer y usar los datos de una Fusion Table como la publicación que mencionaste. Es posible hacerlo utilizando datos de una Fusion Table, aún no es posible hacerlo utilizando un FusionTablesLayer que se muestra en el servidor. Tendrían que crear una capa de los elementos agrupados en cada nivel de zoom en el lado del servidor. – Freddy

+0

@danagerous su enlace parece estar roto. ¿Tienes uno alternativo? – tentaclenorm

5

Este es mi propio código. Estaba probando la técnica en el enlace anterior, pero no funcionó para mí. Así que así es como lo hice.

En primer lugar me consulta la tabla de fusión con la consulta API de gráficos regulares

function initialize() { 
    mapMain = new google.maps.Map(document.getElementById('map-canvas'), { 
     center: new google.maps.LatLng(37.4, -100.1), 
     zoom: 3, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 
    mc = new MarkerClusterer(mapMain); 
    var queryText = encodeURIComponent("select wikipedia_article, xy from "+tableid); 
    var query = new google.visualization.Query("https://www.google.com/fusiontables/gvizdata?tq="+queryText); 
    query.send(handleQueryResponse); 
} 

marcadores A continuación, en mi handleQueryResponse, que dinámicamente crea y se añade a la Mapclusterer

function handleQueryResponse(response){ 
    dataTable = response.getDataTable(); 

    for(var i=0; i< dataTable.getNumberOfRows();i++){   
     var hrefval = dataTable.getValue(i,0).toString(); 

     var arr = dataTable.getValue(i,1).toString().split(" ");    
     var latlng = new google.maps.LatLng(arr[0], arr[1]); 

     var marker = new google.maps.Marker({ 
      position: latlng, 
      map:mapMain 
     }); 
     fn = markerClick(i, marker); 
     google.maps.event.addListener(marker,'click', fn);   
     markers.push(marker); 
    } 
    mc.addMarkers(markers); 
} 

En este caso, el mapa principal, la matriz de marcadores (mc en el código a continuación) son variables globales. Puede ver el ejemplo de trabajo completo here.

+2

¿Podría resumir lo que han hecho en ese sitio para que su respuesta no esté sujeta a link rot? – user7116

+0

Esto es interesante, me gustaría hacer lo mismo con los marcadores KML cargados en FusionTableLayer. ¿Tienes algún ejemplo? –

+0

Lo hice hace mucho tiempo, no he hecho ningún trabajo basado en Google Maps desde entonces. – Ayush

Cuestiones relacionadas