domingo, 14 de diciembre de 2008

Mysql Y google maps, retornar puntos dentro de el area visible(BOUNDS)

En mi caso tengo una base de datos con alrededor de 25.000 lugares georeferenciados, de ellos alrededor de 500 estan sin latitud y longitud.

Inicialmente hice un sistema que recogia datos a partir de un radio determinado y lo dibujaba en google maps, afortunadamente me "Hackearon ese sitio", aprovechando el metodo put de apache y mi descuido en los permisos de una carpeta, lo que me llevo a replantearme la forma de hacer las cosas.

Ahora pensaba en algo mas automatizado, que fuera como panoramio por ejemplo, el problema es que yo no cuento con una base de datos geoespacial, solo cuento con Postgresql y Mysql en mi hosting y ambos estan sin extensiones GIS(Postgis por ejemplo).

Asi que me puse a investigar aquello de los Bounds o limites que maneja google, y me di cuenta que se basa solo en 2 referencia, una esquina sud oeste y una esquina Sudeste.

Asi que primero probe un codigo HTML de ejemeplo sacado de la pagina de google maps y le agregue esto:

var bounds = map.getBounds();

var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();

document.write("NORESTE"+northEast+"
Sudoeste" +southWest);

De este modo logre imprimir en pantalla:

NORESTE(-37.429069455303306, -72.27424621582031)
Sudoeste(-37.510815198076536, -72.44590759277344)

Y como yo sabia que en ese lugar tenia aprox 120 lugares georeferenciados hice la consulta correspondiente:

select titulo, latitud, longitud from lugares where latitud BETWEEN '-37.429069455303306' and '-37.510815198076536' AND longitud between '-72.27424621582031' and '-72.44590759277344'

primero le digo que latitud este entrela latitud del noreste y la latitud del sudoeste, luego le digo que la longitud debe estar entre las longitude del noreste y sudoeste, bueno si no tuviera between, podria usar < >, pero creo que BETWEEN era lo que necesitaba.

Teniendo esto, es solo cuestion de programar la aplicacion JS/Ajax que pida los datos a un archivo php que genere un kml, json o lo que prefieran con el listado de latitud y longitud de cada lugar que quieran mostrar en el mapa.

Pero y si tienen 25.000 lugares como yo?

y alguien pone el mapa en zoom 0 ?

ahi lo que queda es manejar clusters, definir que cosas mostrar o cuantas segun el nivel de zoom que nos indique la api de google.

Cuando tenga un codigo funcional con todo esto implementado lo publicare

No hay comentarios: