Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/07/2014, 20:35
Avatar de salbatore
salbatore
 
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 1 mes
Puntos: 19
Agrupar puntos en el mapa (muy loco)

Buenas a todos,

Estoy intentado hacer algo que actualmente hago con Javascript, pero que resulta bastante más complicado hacer con mediante una consulta.

La idea es hacer eso: EJEMPLO

Actualmente ese ejemplo fuciona con JS, recibe todos los puntos y luego realiza una serie de calculos para agrupar los puntos. No me gusta nada por que cuando andas con 100.000 registros la cosa pinta lenta.

La intención que tengo es hacerlo con MYSQL y hacerlo mediante una sola consulta, pues mediante varias consultas ya lo he conseguido, pero va lentillo.

Esta es la segunda versión (en una sola consulta):

Código MySQL:
Ver original
  1.     (ROUND(lat -".$cube_lat.")) AS rlat,
  2.     (ROUND(lng - ".$cube_lng.")) AS rlng,
  3.     AVG(lat) AS alat,
  4.     AVG(lng) AS alng,
  5.     COUNT(*) AS numpoints
  6.     FROM supermapa
  7.         WHERE
  8.     lat >= ".$southWest_x." AND
  9.     lat <= ".$northEast_x." AND
  10.     lng >= ".$southWest_y." AND
  11.     lng <= ".$northEast_y."
  12. GROUP BY rlat, rlng";

Esta consulta lo que hace es agrupar los puntos mediante rlat y rlng que es basicamente un redondeo de su posición. Esto parece que es buena idea, pero no lo es, ya que no hace natural la posición de los marcadores. La posición natural, no estoy seguro, se debe pillar no de la media si no de la media de un poligono circular. La variable "$cube_lat" y "$cube_lng" es la división que he hecho de las dimensiones del div donde esta contenido el mapa. Osea, que divido el mapa en trozos de 70 pixeles y luego divido la latitud y la longitud entre los trozos que me salgan.

Como veis le he dedicado bastantes horas y cada vez estoy más perdido. Estoy seguro que tiene que haber una tecnica 100% efectiva que funcione con un par de lineas, sin tantas locuras.

¿Alguien sabe como hacerlo mediante una consulta?