2010-11-18 17 views
1

verwende Ich versuche, die Formel von (www.movable-type.co.uk/scripts/latlong.html) zu verwenden, um einen Zielpunkt zurückzugeben, der einen Start gibt Punkt, Entfernung und Peilung. Das sind meine Werte:Ich komme immer wieder mit der falschen Berechnung, wenn ich die Vincenty-Formel

int radius_km = 6371; 
double d = 74.02; 
double st_lat = 39.4450; 
st_lat = Math.toRadians(st_lat); 
double bearing = 106.1607; 
bearing = Math.toRadians(bearing); 

double end_lat = Math.asin(Math.sin(st_lat)*Math.cos(d/radius_km) + 
      Math.cos(st_lat)*Math.sin(d/radius_km)*Math.cos 
      (bearing)); 

end_lat = Math.toDegrees(end_lat); 

Als ich die d, st_lat eingeben und Lager auf der Website, bekomme ich diese: 39 ° 33'28 "N. Wenn ich den obigen Code (den ich von der Website kopiert habe) benutze, bekomme ich folgendes: 39.25679699255662.

Ich sah mich um mehr und jemand sagte die Division das Dezimalsystem Betrag nicht zurückgeben kann, so ersetzte ich die Division mit:

BigDecimal distance = new BigDecimal("74.02"); 
BigDecimal strradius = new BigDecimal("6371"); 
BigDecimal d2 = distance.divide(strradius, 6, RoundingMode.HALF_EVEN); 
double d = d2.doubleValue(); 

und verändert die Formel:

end_lat=Math.asin(Math.sin(st_lat)* 
Math.cos(d)+Math.cos(st_lat)*Math.sin(d)*Math.cos(bearing)); 

Die Antwort, die ich Holen Sie jetzt ist 39.25680143864117. Ich bin sicher, dass ich etwas vermisse, aber ich bin nicht in der Lage, jeden Schritt der Berechnung zu durchlaufen, um zu sehen, wo ich aus bin. Hat jemand eine Schritt-für-Schritt-Anleitung, wie man das macht? Ich würde es sehr begrüßen. Danke.

+0

Warum ist Radius eine ganze Zahl? –

+1

Kleine Entfernungen sind nicht sehr genau, wenn Sie die Triggerfunktionen verwenden. –

+0

Was würden Sie vorschlagen? – Dave

Antwort

0

Sind Sie sicher, dass Sie die korrekte Konvertierung von Minuten/Sekunden in Dezimalzahlen vornehmen?

Es sind 60 Minuten in einem Grad, 60 Sekunden in einer Minute. Wenn der Startpunkt 39,4450 ist; angenommen, dass positiv bedeutet nördlich des Äquators. Wenn angenommen wird, dass das Peil von 106.1607 von Norden im Uhrzeigersinn gemessen wird; würde bedeuten, dass du nach Südosten reist.

Sie sagten, die Website sagt Ihnen die Antwort ist 39 ° 33'28 "N, aber wenn ich dies in Dezimal konvertieren, ist das gleich 39+ (33 + 28/60)/60 = 39.5578. Dieses Ergebnis ist größer als Ihr Startpunkt, d. H. Sie reisen in südöstlicher Richtung, landen jedoch nördlich von Ihrem Punkt.

Ich habe noch nicht die Mathematik in Ihrem Code angeschaut, aber aus der Hand würde ich sagen, Ihr Problem liegt in der Konvertierung von Minuten/Sekunden zu Dezimalzahlen und zurück.

+0

Vorausgesetzt, dass das Original-Poster keine Konvertierung in Minuten/Sekunden durchgeführt hat, meinen Sie, dass das Problem darin besteht, dass die Website, die er als Referenz verwendet, falsch ist? Ich kann diese Website nicht selbst laden, so kann ich nicht wirklich überprüfen, was es tut ... – Chris

+0

Ich vermute, dass die Website Eingabe als Minuten/Sekunden nimmt und er es als Dezimalzahl eingibt ... 39 ° 44'50 " N, statt 39 ° 26'42 "N – aepryus

+0

Ah, ich verstehe was du meinst. Definitiv möglich.Ich fragte mich, ob es so etwas wie die Webseite war, die Eingaben für ganze Zahlen oder etwas ähnliches auf Bearign und Entfernung abgeschnitten hat. – Chris

Verwandte Themen