Rumbos y Azimutales, un script en Python para convertirlos.

Todos hemos visto una brújula, pero pocos saben usarla correctamente (me incluyo). El detalle es que actualmente la mayoría de los teléfonos celulares cuentan con una brújula en la que la lectura es azimutal (de 0 a 360º). De esa forma es sencillo establecer una dirección (o rumbo) a partir de nuestra posición.

Brújula de una aplicación en android - Rumbos y Azimutales
Este es un ejemplo de una aplicación para android. La lectura me dice que el rumbo es de 281º.

Pero existe la costumbre de establecer un rumbo partiendo de cuadrantes, empezando por el norte o sur, indicando un número de grados hacia el este o el oeste. Por ejemplo, 281º azimutales serían N 79º W.

O sea 79º del Norte hacia el Oeste.

Si, lo se, suena algo complicado, pero este tipo de problemas me gustan mucho, mezclar algo de geometría con programación es la onda. Así que me puse a hacer un pequeño programa en Python que haga la conversión entre un rumbo azimutal (o circular) a un rumbo cuadrantal.

Las operaciones son diferentes dependiendo de en que cuadrante se encuentre la lectura azimutal. Agregué los rumbos francos que son el norte, sur, este y el oeste. Y además un mensaje de error en caso de que se introduzca un valor fuera de rango.

Una vez que hice la función, me di a la tarea de construirle una sencilla interfaz gráfica usando PySimpleGUI , no es la interfaz más bonita, pero es realmente sencillo de hacer, me tomó una mañana más o menos entenderle a la construcción de la interfaz y al manejo de eventos.

#! /usr/bin/env python3

import PySimpleGUI as sg

# Esta función hace la conversión de grados azimutales a rumbos.
def azimutal_rumbo(azimutal):
    # Rumbos Francos
    if (azimutal == 0) or (azimutal == 360):
        rumbo = 'N'
    elif azimutal == 90:
        rumbo = 'E'
    elif azimutal == 180:
        rumbo = 'S'
    elif azimutal == 270:
        rumbo = 'W'
    #Identificar los cuadrantes.
    #Cuadrante I
    elif (azimutal > 0) and (azimutal < 90):
        rumbo = 'N ' + str(azimutal)  +'º E'
    #Cuadrante II
    elif (azimutal > 90) and (azimutal < 180):
        rumbo = 'S ' + str(180 - azimutal) + 'º E'
    #Cuadrante III
    elif (azimutal > 180) and (azimutal < 270):
        rumbo = 'S ' + str(azimutal - 180) + 'º W'
    #Cuadrante IV
    elif (azimutal > 270) and (azimutal < 360):
        rumbo = 'N ' + str(360 - azimutal) + 'º W'
    else:
        rumbo = 'Valor Incorrecto'

    return rumbo


# Construir la interfaz gráfica.
sg.theme('SystemDefault')
layout = [
    [sg.Text('Teclear el rumbo azimutal [0-360º]:',font='Default 12')],
    [sg.InputText(key='-GRADOSAZ-', size=(10,1), font='Default 12')],
    [sg.Button('Convertir', font='Default 12')],
    [sg.Text(size=(20,1), font='Default 18 bold', key='-RUMBO-')]]

window = sg.Window('Azimutales a Rumbos').Layout(layout)

while True:                             # The Event Loop
    event, values = window.read()
    # print(event, values)
    if event in (None, 'Exit'):
        break
    if event == 'Convertir':
        # Update the "output" text element to be the value of "input" element
        resultado = azimutal_rumbo(int(values['-GRADOSAZ-']))
        window['-RUMBO-'].update(resultado)

window.close()
El programa haciendo la conversión de azimutales a rumbos.
El resultado de la conversión.

Les quiero pedir disculpas si no uso los términos adecuados, no soy topógrafo, así que si existe una mejor manera de nombrar las cosas o si ofrecen algún consejo en cuanto a la programación les agradeceré su comentario.

Para entender mejor.

¡Me encantaría saber que opinas!

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