Estou querendo encontrar um ponto de latitude e longitude, dado um rumo, uma distância e uma latitude e longitude inicial.
Parece ser o oposto desta pergunta ( distância entre pontos lat / long ).
Eu já examinei a fórmula do haversine e acho que a aproximação do mundo provavelmente está próxima o suficiente.
Estou assumindo que preciso resolver a fórmula de Haversine para meu lat / long desconhecido, isso está correto? Existem bons sites que falam sobre esse tipo de coisa? Parece que isso seria comum, mas meu Google apenas apresentou perguntas semelhantes à acima.
O que realmente estou procurando é apenas uma fórmula para isso. Gostaria de fornecer um lat / lng inicial, um rumo e uma distância (milhas ou quilômetros) e gostaria de extrair dele um par de lat / lng que representa onde um teria terminado se eles viajassem ao longo essa rota.
fonte
Respostas:
Gostaria de saber como os resultados desta fórmula se comparam ao pe.dll da Esri .
( citação ).
Aqui está uma página html para teste .
fonte
Se você estivesse em um avião, então o ponto que é r metros de distância em um rolamento de uma graus a leste de North é deslocado por r * cos (a) na direção norte e r * sin (a) na direção leste. (Essas declarações definem mais ou menos o seno e o cosseno.)
Embora você não esteja em um avião - você está trabalhando na superfície de um elipsóide curvado que modela a superfície da Terra - qualquer distância inferior a algumas centenas de quilômetros cobre uma parte tão pequena da superfície que, para fins mais práticos, pode ser considerado plano. A única complicação restante é que um grau de longitude não cobre a mesma distância que um grau de latitude. Em um modelo esférico da Terra, um grau de longitude é apenas cos (latitude) contanto que um grau de latitude. (Em um modelo elipsóide, essa ainda é uma excelente aproximação, boa para cerca de 2,5 algarismos significativos.)
Finalmente, um grau de latitude é de aproximadamente 10 ^ 7/90 = 111.111 metros. Agora temos todas as informações necessárias para converter medidores em graus:
O deslocamento para o norte é r * cos (a) / 111111 graus;
O deslocamento para o leste é r * sin (a) / cos (latitude) / 111111 graus.
Por exemplo, a uma latitude de -0,31399 graus e um rolamento de a = 30 graus a leste do norte, podemos calcular
De onde, começando em (-78.4437, -0.31399), o novo local está em (-78.4437 + 0.00045, -0.31399 + 0.0007794) = (-78.4432, -0.313211).
Uma resposta mais precisa, no moderno sistema de referência ITRF00, é (-78.4433, -0.313207): está a 0,43 metros da resposta aproximada, indicando que a aproximação erra 0,43% neste caso. Para obter maior precisão, você deve usar fórmulas de distância elipsoidal (que são muito mais complicadas) ou uma projeção conforme de alta fidelidade com divergência zero (para que o rolamento esteja correto).
fonte
Se você precisar de uma solução JavaScript, considere estes
functions
e este violino :Portanto, se você deseja calcular uma nova coordenada, pode ser assim:
fonte
Eu consegui isso trabalhando no ObjectiveC. A chave aqui é saber que você precisa de pontos lat / lng em radianos e precisa convertê-los novamente em lat / lng após aplicar a equação. Além disso, saiba que a distância e tc estão em radianos.
Aqui está a equação original:
Aqui, ele é implementado na ObjC, onde radiano é um radiano medido no sentido anti-horário de N (por exemplo, PI / 2 é W, PI é S, 2 PI / 3 é E) e a distância é em quilômetros.
fonte
Se você estiver interessado em uma melhor precisão, existe o Vincenty . (O link é para o formulário "direto", que é exatamente o que você procura).
Existem algumas implementações existentes, se você estiver atrás do código.
Além disso, uma pergunta: você não está assumindo que o viajante mantém o mesmo rumo durante toda a viagem, não é? Nesse caso, esses métodos não estão respondendo à pergunta certa. (É melhor você projetar para o mercator, desenhar uma linha reta e depois não projetar o resultado.)
fonte
Aqui está uma solução Python:
fonte
Utilizo a abordagem descrita abaixo para determinar a próxima coordenada, considerando o rumo e a distância da coordenada anterior. Tenho problemas de precisão com outra abordagem que li na internet.
Eu uso isso para determinar a área da terra, que é um polígono, e traçar esse polígono no google earth. Um título de terra possui rolamentos e distâncias escritos da seguinte maneira: "NorthOrSouth x graus e minutos EastOrWest, z metros ao ponto n;".
Portanto, partindo das coordenadas fornecidas do ponto de referência, primeiro calculo a distância por um grau de latitude e um grau de longitude usando a fórmula haversine, pois isso varia dependendo da localização. Em seguida, determino a próxima coordenada a partir da fórmula trigonométrica seno e cosseno.
Abaixo está o javascript:
fonte