Seleccionar con SQL puntos geográficos dentro de un radio, conocidas sus coordenadas geográficas

El problema planteado surge constantemente hoy en día. Supongamos que conocemos la localización geográfica (latitud y longitud) de un conjunto de elementos (personas, comercios, poblaciones, …) y nos preguntamos cuáles de esos elementos se encuentran dentro de un determinado radio de acción conocida nuestra posición geográfica actual (latitud y longitud).

Mapa con radio de acciónComo muestra la imagen, ese radio de acción se puede representar como un círculo en cuyo centro nos encontramos. El problema se puede resolver entonces preguntándonos ¿Cuáles de los elementos conocidos se encuentra dentro del círculo?

Si los elementos buscados se encuentran en una base de datos MySQL, en una tabla que contenga las coordenadas geográficas de cada elemento, podremos extraerlos utilizando una única sentencia SQL, basándonos en el uso de funciones trigonométricas, como expongo a continuación.

Supongamos que esos elementos cuya posición conocemos se encuentran en una tabla llamada “mitabla” que contiene las coordenadas geográficas de cada elemento (campos que llamo “lat” y “lon”) y además, por ejemplo, el nombre del elemento (campo “nombre”).

Supongamos además que el radio dentro del cual quiero buscar es 70 kilómetros, y que estamos situados en el siguiente punto geográfico que tomaremos como centro:

Centro (latitud, longitud) = (41.671958, -3.685049)

La sentencia sql sería:

 

Sobre el autor

Pablo Blanco

Llevo 17 años dedicado al desarrollo de software de forma profesional. En la actualidad centrado en la docencia, como profesor técnico de F.P., en ciclos formativos de informática.
Titulado en Ingeniería Tec. Informática y Diplomado en CC. Empresariales.

7 Comentarios

Deja un comentario
  • Muchas gracias por el aporte. Sólo quisiera preguntar por qué debe usarse el valor “6371”. ¿Qué indica?

  • Hola Jessrom:

    6371 es el radio medio de la tierra medido en Km. Se usa el radio medio porque no en todos los puntos es igual (en los polos es 6357 Km y en el ecuador 6378 Km).

    Tengo pendiente hacer una ampliación de este artículo, con la explicación geométrica/trigonométrica de la fórmula.

    ¡Un saludo!

  • Excelente aporte, esto es justo lo que necesitaba y no tenia idea de como hacerlo.
    Muchas gracias !

  • Tengo una duda..
    si el rango que quiero medir no son 70km sino 7 metros como serian los valores de la consulta ?
    muchas gracias… muy buen articulo

  • Hola Camilo:

    Las unidades de la fórmula son los kilómetros. Como un kilómetros son mil metros, haciendo una regla de tres puedes comprobar que siete metros son 0,007 Km.

    Por lo tanto, en el ejemplo, sustituirías 70 por 0,007.

    ¡Un saludo!

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Puede usar estas etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Copyright © 2018. Pablo Blanco.