2009-04-29 18 views

Respuesta

0

maneras posibles para resolver este problema:

  • construir el JSON en serverside, dependiendo de la zoomLevel (CON: necesidades de recarga después de un zoom, pro: sólo pequeñas amouts de datos necesitan pueden cargar)
  • Incluir las informaciones acerca de cómo un marcador es accesible en los datos JSON (pro: necesitan ser cargados, con sólo un dato de tiempo: iterar a través de los datos con JavaScript)
  • Calcular marcadores visibles en JavaScript (pro: muy dinámico, con: Cálculo de Carga pesada)
8

está la noción de un "rectángulo de delimitación" para una vista del mapa. La api del mapa se lo proporciona a usted como dos pares de coordenadas lat/long, una para la esquina SW y otra para la esquina NE.

Así que si tiene un servicio de datos personalizado que devuelve puntos JSON, tendrá que aceptar estas coordenadas como entrada, y ajustar el conjunto de datos devuelto en consecuencia (muy probablemente como una cláusula WHERE en su instrucción SELECT).

No tengo los detalles para obtener este rectángulo delimitador memorizado, pero para eso están API docs.

1

Sí, hice algo similar en una solicitud para una autoridad local donde mostramos el volumen de cada casa reciclada en 6.000 hogares. Como el volumen total de datos (que incluía la dirección y la información estadística para cada hogar) era bastante grande, retirar todo el archivo de datos de una vez hacía que pareciera que el navegador se cuelga.

Así que en lugar de la llamada AJAX a la base de datos que envían las coordenadas del rectángulo delimitador (latitud, longitud) de la zona del mapa a continuación sólo volvió aquellos puntos que nos visibles. Debido a la naturaleza de la aplicación, un botón manejado por el usuario para "buscar datos" fue bastante aceptable, pero obviamente hay muchas otras variaciones que puede jugar en el tema: una vez que entregue las coordenadas de límite al servidor, puede decidir qué hacer allí; por ejemplo, solo devuelve un subconjunto si el nivel de zoom es demasiado alto. Debería poder atrapar el evento de sorteo del mapa también y actuar de esta manera automáticamente.

1

Cuando el zoom cambie, envíe el nuevo nivel de zoom a su servicio JSON y devuelva los marcadores que deberían estar visibles en ese nivel. Use addMarkers() para agregar los resultados a MarkerManager y hacerlos visibles solo en el nivel de zoom actual.

Las otras respuestas aquí han sugerido devolver sólo los marcadores dentro de la vista actual, pero también se puede simplemente devolver todos los marcadores en ese nivel de zoom. Depende de cuánto sabe sobre qué marcadores desea mostrar en cada nivel.

6

Hay una nueva biblioteca llamada MarketClustered que le ayudará a

alt text http://gmaps-samples.googlecode.com/svn/trunk/images/screenshot_clusterereffect.jpg

Incluso si los datos son demasiado grandes, yo creo que va a ser mejor para alimentar el mapa hará todos los datos, y dejar que se hazlo es cosa

+7

Cualquier cosa por encima de 2.000 marcadores con MarkerClusterer se vuelve demasiado lenta para mí (eso es en Firefox: Chrome y Safari 4 son buenos hasta unos 8,000). Aunque depende de cuán densos sean los marcadores. Estoy de acuerdo en que probablemente sea mejor importar los datos de una sola vez, en lugar de enviar fragmentos cuando cambia el zoom. –

+1

Bien, tienes datos reales. Comentario upvoted –

Cuestiones relacionadas