2010-06-30 19 views
5

Estoy construyendo un sitio ASP.NET MVC donde quiero tener un mapa Google Maps JavaScript API que muestra los marcadores cargados desde mi backend a través de AJAX.Estrategia para los marcadores de carga diferida en un mapa Google Maps JavaScript API

Como no quiero que el cliente se encuentre con problemas de memoria, quiero cargar los marcadores y aplicarlos a Fluster2 para ponerlos en los clústeres. Creo que la mejor manera de cargar los marcadores de forma perezosa es agregar un detector de eventos al evento idle del mapa, que se produce después de que el mapa se panoramice o se amplíe.


Aquí está mi estrategia actual:

  1. Añadir evento a idle evento.
  2. Cuando se lanza el evento idle, use jQuery para hacer una llamada AJAX HTTP POST a mi backend, suministrando la ventana/límites actuales del mapa.
  3. El servidor devuelve todos los puntos dentro de la ventana gráfica.
  4. Los puntos se crean en marcadores y se agregan a Fluster2, que los agrega al mapa. Los puntos antiguos NO se descartan.
  5. Repita

Sin embargo, esto puede crear problemas, ya que los puntos de edad no se descartan. No quiero descartarlos, ya que no quiero volver a cargarlos, pero con mi estrategia actual, los cargaré por segunda vez y crearé marcadores para ellos una segunda vez.

Aunque creo que no es una buena idea decirle de alguna manera el back-end en la llamada AJAX que ya tengo algunos de los marcadores, que sería bueno para aplicar algún tipo de una tabla hash que no permite duplicados .

De esta forma, cuando cargo los puntos, puedo intentar agregarlos primero a la tabla hash: si eso tiene éxito, aún no los he mostrado, así que puedo agregarlos como marcadores; si falla, ya están en el mapa.


Es esta una buena estrategia? En caso afirmativo, ¿cómo puedo implementar una tabla hash que no permita duplicados?

Respuesta

3

Recientemente he implementado algo bastante similar; aunque personalmente opté por eliminar todos los marcadores y rellenar completamente los mapas, en realidad me gusta su estrategia general y creo que también puede hacer que la experiencia del usuario sea más fluida, ya que desaparece el breve parpadeo entre eliminar todos los marcadores y agregar los nuevos. Así que sí, diría que es una buena estrategia.

Idle es un evento interesante; Descubrí que onZoom, etc., no funcionaba muy bien y resolvía TileLoaded (o algo similar). Funciona bien para mí, pero parece un poco como un truco.

Con respecto a su pregunta de hashtable, hay dos lugares posibles donde podría almacenar dicho mapa.

a) Servidor Si puede realizar un seguimiento de la página a la que está enviando las coordenadas, puede mantener una tabla Hashtable de los marcadores en el estado de la sesión.Esto puede evitar que envíe coordenadas innecesarias al cliente, pero es más errorprone imo

b) Cliente Esto es probablemente lo que desea hacer de todos modos. Aquí, una matriz asociativa Javascript normal debería ser tu amiga.

var x = {"some key": "some value"}; 
document.write ("some key" in x); // True 
document.write ("some other key" in x); // False 

A menos que encuentre una buena manera de mapear lat y lng en un solo valor hashable, puede que tenga que mantener una matriz de matrices:

var markers = {lat1: {lng11: 1, lng12: 1, lng13: 1}, lat2: ...} 

y después comprobar como

... 
if (checklat in markers) 
    if (checklng in markers[checklat]) 
     return True 
return False 

Acabo de ver que esta es una pregunta anterior. Bueno, es demasiado tarde, tal vez todavía ayude.

+0

¡Gracias por su ayuda! Trataré de implementar esto. –

+0

Para la clave hash, puede crear un objeto google.maps.latLng a partir de su latitud/longitud y usar su método toString(). – dsas

Cuestiones relacionadas