Cómo medir distancias de dos puntos geográficos y marcar los puntos en un mapa con Python y las librerías Folium y Geopy.
En este post vamos ha realizar un script en Python con el que vamos a poder ver la distancia entre dos puntos gracias a sus coordenadas geográficas y luego gracias a la librería Folium podremos visualizar los dos puntos que añadamos en un mapa.
¿Qué librerías vamos ha usar?
• Folium: Librería que usaremos para poder visualizar el mapa, en un post anterior vimos como visualizar mapas con Python y dicha librería, en este artículo explicamos como instalar está librería para poder usarla.
• Geopy: es una librería de Python para acceder a servicios de geocodificación que nos va ha facilitar localizar las coordenadas de direcciones en todo el mundo
Instalación y puesto en marcha
Primero vamos ha instalar la librería de Folium para ello abrimos la terminal donde tengamos instalado para introducir el siguiente comando:
pip install folium
Segundo vamos a instalar la librería Geopy en la misma terminal una vez instalado Folium introducimos el siguiente comando:
pip install geopy
Una vez instalado todo ya podemos crear el script.py para poder programar todo, lo primero es importar las librerías que vamos ha usar:
import folium from geopy.distance import geodesic from geopy.geocoders import Nominatim app = Nominatim(user_agent="tycgis")
Una vez importadas las librerías procedemos a crear un input o entrada de texto para que el usuario pueda introducir una de la los localizaciones que quiere saber la distancia.
localizacion1 = input("Introduze la primera localización: ") print("Primer punto -> " , localizacion1)
Una vez tengamos el primer punto, buscamos las coordenadas con el primer punto gracias a la librería Geopy, y de todo lo que Geopy nos ofrece solo necesitamos los puntos de latitud y longitud y lo imprimimos por pantalla para ver que todo esta correcto.
location1 = app.geocode(localizacion1).raw latitude1 = location1["lat"] longitude1 = location1["lon"] punto1 = (latitude1, longitude1) print(punto1)
Ejemplo de lo hace esta primera parte del código:
Para el segundo punto vamos hacer lo mismo que el primer punto pero cambiando los número 1 por el número 2 para poder diferenciar una dirección de otra.
localizacion2 = input("Introduze la segunda localización: ") print("Segundo punto -> " , localizacion2) location2 = app.geocode(localizacion2).raw latitude2 = location2["lat"] longitude2 = location2["lon"] punto2 = (latitude2, longitude2) print(punto2)
Una vez tengamos las dos direcciones ya podemos medir la distancia entre ellos para poder medir la distancia usamos una parte de la librería Geopy llamada geodesic para poder distancia entre las dos coordenadas:
distancia = geodesic((latitude1, longitude1), (latitude2, longitude2)) print("La distancia entre ", localizacion1 , " y " , localizacion2 , " es de ", distancia)
Ejemplo de lo hace esta parte del código:
Y ya solo nos queda representar los dos punto en un mapa gracias a Folium, esta parte del código la introducimos en los dos puntos explicados abajo, las dos direcciones que tenemos para que los pueda representar en un mapa.
map = folium.Map(localizacion1=[latitude1, longitude1], zoom_start=1) # Punto 1 map.add_child(folium.Marker(punto1, popup=localizacion1, icon=folium.Icon(color='green'))) # Punto 2 map.add_child(folium.Marker(punto2, popup=localizacion2, icon=folium.Icon(color='red'))) map
Ejemplo de lo hace esta parte del código:
Hola, buenas tardes
¿Sabe si habria alguna manera de obtener las coordenadas de un punto mediante un click en el mapa?
Hola Jaime,
Con la librería que usamos en el post no se puede obtener las coordenadas mediante un clic, pero Folium tiene una opción para poder saber las coordenadas de un punto mediante la posición del ratón.
Para poder saberlo tenemos que importar un plugin llamado “Mouse Position”, aquí te pongo un ejemplo
de cómo se utilizaría dicho plugin, las coordenadas cuando mueves el ratón por el mapa salen en la parte de arriba a la derecha.
import folium
from folium.plugins import MousePosition
m = folium.Map(
location=[40.4167047, -3.7035825],
zoom_start=12,
)
MousePosition(
position=’topright’,
separator=’ | ‘,
empty_string=’Mueve el ratón por la pantalla para ver las coordenadas’,
lng_first=True,
num_digits=20,
prefix=’Coordendas (Longuitud, Latitud):’,
lat_formatter=None,
lng_formatter=None,
extra_classes=’mouseposition’,
auto_start=True,
use_mouse_wheel=True,
display_empty_string=True,
).add_to(m)
m
Espero que te haya servido mi respuesta.
Un saludo.
Yo estaba buscando algo asi. Gracias