Domanda

E 'anche questo inesatte? I ri-implented il tutto con Apfloat precisione arbitraria e non faceva alcuna differenza che avrei dovuto sapere per iniziare con !!

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);
 }

La prima affermazione nel test dà questo:

  

java.lang.AssertionError:   atteso: <270,0> ma   era: <270,29389750911355>

0,29 sembra abbastanza lontano? E 'questa la formula ho scelto di implementare?

È stato utile?

Soluzione

Se hai fatto quello che ti sembra di avere fatto e fatto correttamente che hanno capito il cuscinetto di A da B lungo il percorso più breve da A a B, che, sulla superficie della sfera (ish) Terra è il arco di cerchio tra A e B, non l'arco della linea di latitudine tra A e B.

funzioni geodetiche di Mathematica danno i cuscinetti, per le posizioni di prova, come 89.7061 e 270.294.

Quindi, sembra come se (a) il calcolo è corretto, ma (b) le tue abilità di navigazione bisogno di lucidare.

Altri suggerimenti

Sei sicuro che questo è dovuto a problemi numerici? Devo ammettere, che io non so esattamente che cosa si sta cercando di calcolare, ma quando si tratta di angoli su una sfera, piccole deviazioni da quello che ci si aspetterebbe in geometria euclidea.

  

java.lang.AssertionError: atteso: <270,0> ma era: <270,29389750911355>

Questo errore assoluto 0.29 rappresenta un errore relativo del 0,1%. Come è questo "molto lontano"?

Galleggianti darà 7 cifre significative; doppie sono buoni per 16 potrebbe essere la funzioni trigonometriche o dei gradi alla conversione radianti.

Formula guarda a destra, se questa fonte è da credere .

Se inserisco il vostro inizio ed i valori finali in quella pagina, il risultato che essi rapporto è 089 ° 42'22 ". Se sottraggo il risultato da 360 e convertire in gradi, minuti e secondi il risultato è identico a loro. O sei sia corretto o siete entrambi torto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top