Distanz zwischen Geokoordinaten

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Iguan

Betreff: Distanz zwischen Geokoordinaten

BeitragDi, Jul 24, 2012 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo allerseits!

Vielleicht könnt ihr mir ein Tip geben:
Ich möchte die Distanz (Luftlinie) zwischen zwei geokoordinaten berechnen.
Dazu habe ich die Berechnungsformel von http://www.koordinaten.de/info...rmel.shtml
in BB umgesetzt:

Code: [AUSKLAPPEN]

Print CalculateDistanceKM#(47.4595,8.40126,47.4595,8.40326)
waitkey
end

Function CalculateDistanceKM#(lat1#,lon1#,lat2#,lon2#)

   Pi1# = 3.141592654
   R# = 6378.137  ;// Erdradius
   
   a# = Sin(lat1#) * Sin(lat2#) + Cos(lat1#) * Cos(lat2#) * Cos((lon2#-lon1#))
   c# = ACos(a#) /180 * Pi1#
   
    d# = R# * c#
    Return d#
End Function



Allerdings ergibt das bei mir 0.0 anstelle 0.150 Km.


Wenn ich die Koordinaten von http://www.koordinaten.de/info...tenmodell/ (siehe unter dem Titel "Das Kugelphänomen") verwende dann kommt das richtige Resultat raus, nähmlich 6853 km. Hier der Code:

Code: [AUSKLAPPEN]

Print CalculateDistanceKM#(50,8.27,50,-97.25)
waitkey
end

Function CalculateDistanceKM#(lat1#,lon1#,lat2#,lon2#)

   Pi1# = 3.141592654
   R# = 6378.137  ;// Erdradius
   
   a# = Sin(lat1#) * Sin(lat2#) + Cos(lat1#) * Cos(lat2#) * Cos((lon2#-lon1#))
   c# = ACos(a#) /180 * Pi1#
   
    d# = R# * c#
    Return d#
End Function



Was mache ich falsch? Entfernungen von ca. 100m sollten doch mit der Genauigkeit von Floats berechenbar sein? Rolling Eyes


mfg

Iguan


PS: Hier kann man das Ergebnis kontrollieren: http://www.mapit.ch/tools/point/distance.html
  • Zuletzt bearbeitet von Iguan am Di, Jul 24, 2012 21:23, insgesamt einmal bearbeitet

Holzchopf

Meisterpacker

BeitragDi, Jul 24, 2012 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Schreibe bei der Division /180.0 anstatt /180 - denn sonst handhabt BB das als Integerdivision und schneidet dabei Nachkommastellen einfach ab.

mfG
Holzchopf

Edit
Sorry, war ein Irrtum meinerseits. ACos liefert ja schon Float zurück, also sollte die Division so oder so ein Float ergeben =/
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
  • Zuletzt bearbeitet von Holzchopf am Di, Jul 24, 2012 21:27, insgesamt einmal bearbeitet

Iguan

BeitragDi, Jul 24, 2012 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab jetzt 180.0 gemacht, aber da kommt leider immer noch 0.0 raus.

BladeRunner

Moderator

BeitragDi, Jul 24, 2012 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
liegt in der tat an der ungenauigkeit von floats. Da bringt es auch nix dass du ein pi1 definierst, pi ist schon so genau wei es unter blitz sein kann.

EDIT: wenn ich es unter BMax mit Doubles laufen lasse kommt das erwartete Ergebnis raus.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
  • Zuletzt bearbeitet von BladeRunner am Di, Jul 24, 2012 21:43, insgesamt einmal bearbeitet

Iguan

BeitragDi, Jul 24, 2012 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann man das irgendwie umgehen (bestimmte berechnungsweise)? auf der Website http://www.mapit.ch/tools/point/distance.html geht das doch... hat html / java "bessere" Floats?

BladeRunner

Moderator

BeitragDi, Jul 24, 2012 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Java wird doubles verwenden.
Du könntest einen Stringrechner nutzen, ist aber eine eher langsame und aufwändige Geschichte.
Ansonsten keine Chance, so wie ich das sehe.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Mr.Hyde

Newsposter

BeitragDi, Jul 24, 2012 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe deinen Code gerade in BlitzMax ausprobiert, dort liefert er tadellos das Ergebnis "0.150517806", du könntest es höchstens umgehen, indem du die Berechnung in Integer belässt und nur dass Ergebnis dividiert ausgibst. Das ist allerdings in diesem Fall nicht ganz so einfach.
BBP News RSS | Chaos Interactive | Watanien 2 Screens, Infos und Download | Watanien 2 Worklog | PuzzleMasters
http://abgeordnetenwatch.de - http://www.regierungs-beratung.de - Der Regierung auf die Finger schauen

Iguan

BeitragDi, Jul 24, 2012 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Könntest du das bitte etwas genauer erklären? Wenn ich cos() oder sin() mit Integer berechne kommt doch "0" raus..? Rolling Eyes

BladeRunner

Moderator

BeitragDi, Jul 24, 2012 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Deswegen geht das was hyde meint ja so auch nicht, weshalb er selbst sagt dass dies in diesem Fall eher schwer wird. Such im Codearchiv einen Stringrechner und mach es damit.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Iguan

BeitragDi, Jul 24, 2012 22:14
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm... leider beherschen die Stringrechner im Codearchiv keine Kommazahlen und auch keine funktionen wie cos() sin() und acos() Rolling Eyes

Mr.Hyde

Newsposter

BeitragDi, Jul 24, 2012 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe hier leider kein BB, aber du könntest probieren herauszufinden wo die Ungenauigkeit am größten ist. Sollte sie wirklich im Bereich der Sin / Cos Befehle auftreten ist es sehr ungünstig, dann wäre deine Genauigkeit auf 1km eingeschränkt. Sollte sie aber woanders auftreten hättest du eventuell noch eine Chance. Am besten arbeitest du mit Zwischenergebnissen und lässt dir die Alternativen parallel ausgeben.
BBP News RSS | Chaos Interactive | Watanien 2 Screens, Infos und Download | Watanien 2 Worklog | PuzzleMasters
http://abgeordnetenwatch.de - http://www.regierungs-beratung.de - Der Regierung auf die Finger schauen

Iguan

BeitragDi, Jul 24, 2012 22:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, so wies aussieht muss ich wohl das Problem in einer anderen Programmiersprache lösen... Sad
trotzdem vielen Dank!!
 

sddsmhr

BeitragDi, Jul 31, 2012 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
liegt in der tat an der ungenauigkeit von floats. Da bringt es auch nix dass du ein pi1 definierst, pi ist schon so genau wei es unter blitz sein kann.
In diesem Fall könnte eine bessere Kondition des Algorithmus Abhilfe schaffen, falls möglich...

Vielleicht schaue ich mich das später auch noch einmal an. Muss aber erst einmal wech...

Hummelpups

BeitragMi, Aug 01, 2012 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
oder du lässt dir eine exe datei per BMax mit startparametern und rückgabe
kompilieren und verwendest diese irgendwie aus BB heraus.

Grüße
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group