Pergunta

Assim: Eu tenho a função a seguir, adaptado de uma fórmula encontrados on-line, que leva lat / lon coordenadas dois e encontra a distância entre eles em milhas (ao longo de uma Terra esférica):

public static double distance (double lat1, double lon1, double lat2, double lon2) {
        double theta = toRadians(lon1-lon2);
        lat1 = toRadians(lat1);
        lon1 = toRadians(lon1);
        lat2 = toRadians(lat2);
        lon2 = toRadians(lon2);

        double dist = sin(lat1)*sin(lat2) + cos(lat1)*cos(lat2)*cos(theta);
        dist = toDegrees(acos(dist)) * 60 * 1.1515 * 1.609344 * 1000;

        return dist;
    }

Tanto quanto eu posso dizer isso funciona muito bem.

O que eu preciso é de uma segunda função que, usando exatamente o mesmo modelo da geometria da Terra, toma um único par latitude / longitude [A], um título e uma distância, e gera um novo par / lon lat [B ] de tal forma que se você começou no ponto [a], e viajou a distância dada no título dado, você ia acabar no ponto [B].

Este é o local onde o fato de que minhas habilidades de geometria ter me deixado inteiramente entra em jogo:)

Qualquer ajuda seria muito apreciada!

Obrigado, -Dan

Foi útil?

Solução

Eu recebo a maioria desses tipos de fórmulas de O Aviation Formulary .

A fórmula que ele dá é:

Lat / lon dada radial e distância

Um ponto de {lat, lon} é uma distância d para fora em o radial tc do ponto 1 se:

 lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
 IF (cos(lat)=0)
    lon=lon1      // endpoint a pole
 ELSE
    lon=mod(lon1-asin(sin(tc)*sin(d)/cos(lat))+pi,2*pi)-pi
 ENDIF 

Este algoritmo é limitado a distâncias tais que dlon

    lat =asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
     dlon=atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(lat))
     lon=mod( lon1-dlon +pi,2*pi )-pi

Note que ele está usando "tc" para representar verdadeiro curso (em radianos no sentido horário a partir do Norte) e as distâncias que ele dá são em radianos de arco ao longo da superfície da terra. Isto é explicado (juntamente com as fórmulas para converter para trás e para a frente a partir de milhas náuticas) na primeira secção do Formulary. Além disso, confira as "Notas de Implementação" e "exemplos trabalhados" na página.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top