Pergunta

Será que é mesmo que impreciso? Eu re-implented a coisa toda com precisão arbitrária Apfloat e isso não fez diferença que eu deveria ter sabido que começar com !!

public static double bearing(LatLng latLng1, LatLng latLng2) {
 double deltaLong = toRadians(latLng2.longitude - latLng1.longitude);

 double lat1 = toRadians(latLng1.latitude);
 double lat2 = toRadians(latLng2.latitude);

 double y = sin(deltaLong) * cos(lat2);
 double x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(deltaLong);
 double result = toDegrees(atan2(y, x));
 return (result + 360.0) % 360.0;
}

@Test
 public void testBearing() {

  LatLng first = new LatLng(36.0, 174.0);
  LatLng second = new LatLng(36.0, 175.0);
  assertEquals(270.0, LatLng.bearing(second, first), 0.005);
  assertEquals(90.0, LatLng.bearing(first, second), 0.005);
 }

A primeira afirmação no teste dá a este:

java.lang.AssertionError: esperado: <270,0> mas foi: <270,29389750911355>

0,29 parece bastante longe? Não é a fórmula i escolheu para implementar?

Foi útil?

Solução

Se você já fez o que você parece ter feito e feito corretamente você descobriu o rolamento de A de B ao longo do caminho mais curto de A para B que, na superfície do esférico (ish) Terra é o arco do grande círculo entre a e B, não o arco da linha de latitude entre a e B.

funções geodésicas do Mathematica dar os rolamentos, para as suas posições de ensaio, como 89.7061 e 270.294.

Assim, parece que (a) o seu cálculo é correto, mas (b) suas habilidades de navegação precisa polir.

Outras dicas

Tem certeza que isso é devido a problemas numéricos? Devo admitir que eu não sei exatamente o que você está tentando calcular, mas quando você lidar com ângulos em uma esfera, pequenos desvios do que seria de esperar na geometria euclidiana.

java.lang.AssertionError: esperado: <270,0> mas foi: <270,29389750911355>

Este erro absoluto 0,29 representa um erro relativo de 0,1%. Como isso é "muito longe"?

flutua dará 7 dígitos significativos; duplos são bons para 16. Poderia ser as funções trigonométricas ou os graus de conversão radianos.

aparência fórmula certa, se esta fonte é para ser acreditado .

Se eu ligar o seu início e os valores finais para essa página, o resultado que eles relatam é 089 ° 42'22 ". Se eu subtrair o resultado de 360 ??e converter em graus, minutos e segundos, o resultado é idêntico ao deles. Ou você é tanto correto ou que ambos estão errados.

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