jueves, 25 de mayo de 2023

Google colab

Hoy les voy a mostrar cómo calcular el perímetro de Nicaragua usando Google Colab y la librería de Folium. ¿Qué es Google Colab? Es una herramienta gratuita que nos permite ejecutar código de Python en la nube, sin necesidad de instalar nada en nuestro ordenador. ¿Y qué es Folium? Es una librería de Python que nos permite crear mapas web interactivos con Leaflet, una de las mejores librerías de JavaScript para visualizar datos geoespaciales.

Para empezar, necesitamos importar la librería de Folium y crear un mapa centrado en Nicaragua. Para ello, escribimos el siguiente código en una celda de Colab:

1) Importamos la librería Folium que es la que nos permite cargar el mapa de Nicaragua, la siguiente linea es para crear la localización del mapa, le decimos al software que nuestro mapa va a tener su centro en esas coordenadas con un zoom de 10.

import folium 

mapanicaragua=folium.Map(location=[12.491731, -85.12], zoom_start=10)

Posteriormente ubico los cuatro puntos sobre los que dibujamos el paralelogramo que forma el territorio de Nicaragua, para ello le proporcionamos las coordenadas de cada uno de los puntos al software, al igual le manifestamos que en cada uno de los puntos nos ubique una leyenda con un máximo de ancho de 50, posteriormente agregamos una linea entre cada uno de los puntos para formar la figura geométrica de un paralelogramo.

 # Puntos extremos del paralelogramo

folium.Marker(location=[13.091136, -87.57674], popup=folium.Popup("1", max_width=50), icon=folium.Icon(color="blue",icon_color="green")).add_to(mapanicaragua)

folium.Marker(location=[14.992983, -83.13119], popup=folium.Popup("2", max_width=50), icon=folium.Icon(color="red",icon_color="blue")).add_to(mapanicaragua)

folium.Marker(location=[11.079514, -85.69267], popup=folium.Popup("3", max_width=50), icon=folium.Icon(color="green",icon_color="purple")).add_to(mapanicaragua)

folium.Marker(location=[10.941381, -83.69962], popup=folium.Popup("4", max_width=50), icon=folium.Icon(color="orange",icon_color="gray")).add_to(mapanicaragua)

folium.PolyLine([[13.091136, -87.57674], [14.992983, -83.13119]], color="red").add_to(mapanicaragua)

folium.PolyLine([[13.091136, -87.57674], [11.079514, -85.69267]], color="red").add_to(mapanicaragua)

folium.PolyLine([[11.079514, -85.69267], [10.941381, -83.69962]], color="red").add_to(mapanicaragua)

folium.PolyLine([[14.992983, -83.13119], [10.941381, -83.69962]], color="red").add_to(mapanicaragua)

Posteriormente calculamos los triángulos isósceles que forman el paralelogramo de nuestro territorio, si tienen alguna duda consultar Geografía de Nicaragua de Íncer Barquero.

# Calcular los puntos del centro de los triángulos isósceles

centro1 = [(13.091136 + 11.079514) / 2, (-87.57674 - 85.69267) / 2]

centro2 = [(11.079514 + 10.941381) / 2, (-85.69267 - 83.69962) / 2]

#Trazar una linea entre el punto 2 y el centro 1 para el primer triángulo isósceles

folium.PolyLine([[14.992983, -83.13119], [12.085325, -86.634705]], color="blue").add_to(mapanicaragua)

folium.PolyLine([[14.992983, -83.13119], [11.0104475, -84.696145]], color="red").add_to(mapanicaragua)

En este punto es importante hacer hincapié en que la distancia entre dos puntos de la tierra se calcula a partir de la formula de Haversine, por favor revisar si tienen alguna duda https://www.genbeta.com/desarrollo/como-calcular-la-distancia-entre-dos-puntos-geograficos-en-c-formula-de-haversine

import math

def calcular_distancia(coord1, coord2):
    # Radio de la Tierra en kilómetros
    radio_tierra = 6371.0

    # Convertir las coordenadas a radianes
    latitud1 = math.radians(coord1[0])
    longitud1 = math.radians(coord1[1])
    latitud2 = math.radians(coord2[0])
    longitud2 = math.radians(coord2[1])

    # Diferencia de latitud y longitud
    dif_latitud = latitud2 - latitud1
    dif_longitud = longitud2 - longitud1

    # Calcular la distancia utilizando la fórmula de Haversine
    a = math.sin(dif_latitud/2)**2 + math.cos(latitud1) * math.cos(latitud2) * math.sin(dif_longitud/2)**2
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
    distancia = radio_tierra * c

    return distancia

# Coordenadas de los puntos
punto1 = [13.091136, -87.57674]
punto3 = [11.079514, -85.69267]
punto2=[14.992983, -83.13119]
centro1 = [12.085325, -86.634705]

# Calcular distancia entre punto2 y centro1
distancia_punto3_centro1 = calcular_distancia(punto3, centro1)
print(f"La distancia entre punto2 y centro1 es: {distancia_punto3_centro1} km")

# Calcular distancia entre punto1 y punto3
punto3 = [11.079514, -85.69267]
distancia_punto1_punto3 = calcular_distancia(punto1, punto3)
print(f"La distancia entre punto1 y punto3 es: {distancia_punto1_punto3} km")

import math

# Coordenadas de los puntos
punto1 = [13.091136, -87.57674]
punto2 = [14.992983, -83.13119]
punto3 = [11.079514, -85.69267]
centro1=[12.085325, -86.634705]

# Calcular la distancia entre dos puntos
def calcular_distancia(punto1, punto2):
    lat1, lon1 = punto1
    lat2, lon2 = punto2
    # Convertir las coordenadas de grados a radianes
    lat1_rad = math.radians(lat1)
    lon1_rad = math.radians(lon1)
    lat2_rad = math.radians(lat2)
    lon2_rad = math.radians(lon2)
    # Calcular la diferencia de latitud y longitud
    delta_lat = lat2_rad - lat1_rad
    delta_lon = lon2_rad - lon1_rad
    # Calcular la distancia usando la fórmula del arcoseno
    distancia = 6371.01 * math.acos(math.sin(lat1_rad) * math.sin(lat2_rad) + math.cos(lat1_rad) * math.cos(lat2_rad) * math.cos(delta_lon))
    return distancia

# Calcular la base del triángulo 1 (distancia entre punto1 y punto3)
base = calcular_distancia(punto1, punto3)

# Calcular la altura del triángulo 1 (distancia entre punto2 y centro1)
altura = calcular_distancia(punto2, centro1)

# Calcular el área del triángulo 1
area = (base * altura) / 2

# Cálculo de la base
base = 303.3060653764976

# Cálculo de la altura
altura = 497.94015458702205

# Cálculo del área
area = (base * altura) / 2

print("El área del triángulo 1 es:", area)

# Agregar marcadores adicionales para mostrar la base y la altura
folium.Marker(location=[13.531379, -85.364746], popup=f"Altura: 497.94 km", icon=folium.Icon(color="blue")).add_to(mapanicaragua)
folium.Marker(location=[12.798600, -86.633667], popup=f"Base: 303.30 km", icon=folium.Icon(color="red")).add_to(mapanicaragua)
folium.Marker(location=[12.085325, -86.634705], popup=f"Perimetro triángulo1:75,512.601 km", icon=folium.Icon(color="green")).add_to(mapanicaragua)


Posteriormente realizamos los cálculos para el segundo triángulo. 
import math

def calcular_distancia(coord1, coord2):
    # Radio de la Tierra en kilómetros
    radio_tierra = 6371.0

    # Convertir las coordenadas a radianes
    latitud1 = math.radians(coord1[0])
    longitud1 = math.radians(coord1[1])
    latitud2 = math.radians(coord2[0])
    longitud2 = math.radians(coord2[1])

    # Diferencia de latitud y longitud
    dif_latitud = latitud2 - latitud1
    dif_longitud = longitud2 - longitud1

    # Calcular la distancia utilizando la fórmula de Haversine
    a = math.sin(dif_latitud/2)**2 + math.cos(latitud1) * math.cos(latitud2) * math.sin(dif_longitud/2)**2
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
    distancia = radio_tierra * c

    return distancia

# Coordenadas de los puntos
punto1 = [14.992983, -83.133119]
punto3 = [11.079514, -85.69267]
punto4= [10.941381, -83.69962]
centro2 = [11.0104475, -84.696145]

# Calcular distancia entre punto2 y centro2
distancia_punto2_centro2 = calcular_distancia(punto2, centro2)
print(f"La distancia entre punto2 y centro2 es: {distancia_punto2_centro2} km")

# Calcular distancia entre punto3 y punto4
punto3 = [11.079514, -85.69267]
distancia_punto3_punto4 = calcular_distancia(punto3, punto4)
print(f"La distancia entre punto3 y punto4 es: {distancia_punto3_punto4} km")

import math

# Coordenadas de los puntos
punto1 = [14.992983, -83.133119]
punto3 = [11.079514, -85.69267]
punto4 = [11.0104475, -83.69962]
centro2 = [11.0104475, -84.696145]

# Calcular la distancia entre dos puntos
def calcular_distancia(punto1, punto3):
    lat1, lon1 = punto1
    lat2, lon2 = punto2
    # Convertir las coordenadas de grados a radianes
    lat1_rad = math.radians(lat1)
    lon1_rad = math.radians(lon1)
    lat2_rad = math.radians(lat2)
    lon2_rad = math.radians(lon2)
    # Calcular la diferencia de latitud y longitud
    delta_lat = lat2_rad - lat1_rad
    delta_lon = lon2_rad - lon1_rad
    # Calcular la distancia usando la fórmula del arcoseno
    distancia = 6371.01 * math.acos(math.sin(lat1_rad) * math.sin(lat2_rad) + math.cos(lat1_rad) * math.cos(lat2_rad) * math.cos(delta_lon))
    return distancia

# Calcular la base del triángulo 2 (distancia entre punto1 y punto3)
base = calcular_distancia(punto3, punto4)

# Calcular la altura del triángulo 2 (distancia entre punto2 y punto1)
altura = calcular_distancia(punto2, centro2)

# Calcular el área del triángulo 2
area = (base * altura) / 2

# Cálculo de la base
base = 218.07872427190495

# Cálculo de la altura
altura = 474.1732485968053

# Cálculo del área
area = (base * altura) / 2

print("El área del triángulo 2 es:", area)

# Agregar marcadores adicionales para mostrar la base y la altura
folium.Marker(location=[12.304193, -84.426904], popup=f"Altura: 474.17 km", icon=folium.Icon(color="blue")).add_to(mapanicaragua)
folium.Marker(location=[11.270866, -84.224009], popup=f"Base: 218.07 km", icon=folium.Icon(color="red")).add_to(mapanicaragua)
folium.Marker(location=[11.461718, -84.500933], popup=f"Perimetro triángulo2:51,701.12 km", icon=folium.Icon(color="green")).add_to(mapanicaragua)

# Agregar marcadores adicionales para mostrar el perimetro 
folium.Marker(location=[12.089799, -83.809993], popup=f"Perimetro total: 127,215.2545 km", max_width=50, icon=folium.Icon(color="orange", icon_color="blue")).add_to(mapanicaragua)

#muestra el mapa mapanicaragua
mapanicaragua.save ('mapanicaragua.html')

Para aprender un poco mas este tutorial nos ayudará a entender un poco sobre esta forma de programación, esperando esto ayude a mejorar nuestro nivel de desempeño profesional.

Cualquier duda me la hacen saber, gracias