Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/07/2012, 05:52
gistdt08
 
Fecha de Ingreso: junio-2012
Mensajes: 18
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: Puntos cercanos a coordenadas

Cita:
Iniciado por phyronx Ver Mensaje
Buenas, he buscado y buscado sin encontrarlo.

Necesito eso mismo, tengo un punto (lat,long), dado por el usuario, y tengo que buscar en la base de datos sitios cercanos a esa coordenada.

He encontrado 3 soluciones, aunque necesito aclaracion:

1. Un grado de longitud son 111,11 km, y uno de latitud son 113,3km.
Asi seria facil cotejar los datos de mysql para encontrar cercanos, pero encontre que no es muy fiable.

2. Usando la formula de haversine, usandola en php o javascript, aunque el problema que veo es el exceso de calculos que debo realizar en el caso de tener 10.000 registros en la tabla.

3. He encontrado una formula en este foro dada por Freedatos, es la siguiente:

Código PHP:
Ver original
  1. $query = sprintf("SELECT *, ( 3959 * acos( cos( radians('%s') ) * cos( radians( latitud ) ) * cos( radians( longitud ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( latitud ) ) ) ) AS distance FROM deinteres HAVING distance < '%s' ORDER BY distance",

El problema aqui es que no se usar tanto mysql como para entenderla del todo, y por ello no se si sobrecarga igual ke la formula de haversine. E imagino que solo debo incluir latitud y longitud del punto que me dan,y "deinteres"sea la tabla, peor no se donde lee lat y lang de esa tabla.


Espero me puedan ayudar, poruqe ando loco.Gracias

Hola phyronx, ¿no te has planteado en lugar de mysql usar postgreSQL con su extensión PostGIS? Dicho SGBD junto con su módulo para GIS permite obtener dichos parámetros a través de un conjunto de funciones precalculadas en PostGIS, con lo cual sólo debes tener tus puntos y ejecutar la función correspondiente.

Aquí tienes una referencia al respecto.

[URL="http://postgis.refractions.net/documentation/manual-1.3/ch06.html"]http://postgis.refractions.net/documentation/manual-1.3/ch06.html[/URL]

Saludos.
Francisco J.