EsdrasXavier / Trekking

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Cálculos entre pontos

EsdrasXavier opened this issue · comments

Nesse projeto deve-se calcular distancia entre pontos e o ângulos entre pontos, esse seria o core do app.
Para realizar esses cálculos veja:

Exemplo de código em python

from math import sqrt, pi, radians, degrees, sin, cos, atan2

sq = lambda x: (x * x)  # Eleva ao quadrado
EARTH_RADIUS = 6372795 # Tecnicamente o raio da terra é de 6372795

def course_to(lat1, long1, lat2, long2):
    '''Retorna para qual angulo deve-se ir para chegar ao ponto
    '''
    dlon = radians(long2 - long1)
    lat1 = radians(lat1)
    lat2 = radians(lat2)
    y0 = sin(dlon) * cos(lat2)
    x0 = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dlon)
    x0 = atan2(y0, x0)

    if x0 < 0.0:
        x0 += 2 * pi

    return degrees(x0)

def distance_between(lat1, long1, lat2, long2):
    '''Retorna a distância em metros, para retornar
    em KM divida o resultado por 1000
    '''

    delta = radians(long1 - long2)
    sdlong = sin(delta)
    cdlong = cos(delta)
    lat1 = radians(lat1)
    lat2 = radians(lat2)
    slat1 = sin(lat1)
    clat1 = cos(lat1)
    slat2 = sin(lat2)
    clat2 = cos(lat2)

    y0 = (clat1 * slat2) - (slat1 * clat2 * cdlong)
    y0 = sq(y0) + sq(clat2 * sdlong)
    y0 = sqrt(y0)
    x0 = (slat1 * slat2) + (clat1 * clat2 * cdlong)
    delta = atan2(y0, x0) * EART_RADIUS

    return delta

if __name__ == '__main__':
    lat1 = -26.593514
    long1 = -49.1298725
    lat2 = -26.5935555
    long2 = -49.1288856

    angle = course_to(lat1, long1, lat2, long2)
    distance = distance_between(lat1, long1, lat2, long2)

    print("Angle: {}".format(angle))
    print("Distance: {}".format(distance))