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:

 

About the author

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.

3 Comments

Leave a comment
  • 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!

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

You may use these HTML tags and attributes: <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="">

*

Copyright © 2014. Pablo Blanco.