Ortskoordinaten deren Entfernung berechnen

Dynamaik

Grünschnabel
Hallo!

Ich möchte gerne die Entfernung zwischen zwei Punkten auf der Erdoberfläche ausrechnen. Allerdings hab ich dabei ein paar Probleme. :mad:

Die Aufgabe lautet wie folgt:
Geben Sie ein Java-Programman, das für zwei Erdkoordinatenangabenmit jeweils Laenge und Breite mit 0 kleiner gleich Laenge kleiner gleich 180 und 0 kleiner gleich Breite kleiner gleich 180 und einer positiven Distanz diese Oberflächenentfernung berechnet. Sie können als Beispielkoordinaten folgende Werte nehmen, die diese Annahmen erfüllen (Angabe als Länge Nord, Breite Ost): P1 = (7, 181563889, 50, 78023889) , P2 = (6, 0939, 50, 78999167).

P1 = (laenge1, breite1)
P2 = (laenge2, breite2)

Nun, als Hilfe habe ich noch eine Rechenformel für den Distanzfaktor:
distanzfaktor = arccos(sin(breite1) * sin(breite2) + cos(breite1) * cos(breite2)
* cos(laenge2 ? laenge1))

und für die Entfernung:

entfernung = radius * distanzfaktor falls distanz größer gleich 0
radius (distanzfaktor + Pi) falls distanz < 0


So, nun gut. Nun dachte ich mir das ich einfach erstmal mit Java den Distanzfaktor ausrechnen kann und zwar mit double, da ich nur so mit Kommazahlen rechnen kann. Doch leider kann ich die Koordinaten nicht so leicht ausrechnen da beide Zahlen zwei Kommas haben und eclipse dann meckert wenn ich versuche etwas auszurechnen.



Code:
public class Erdentfernung {

	
	public static void main(String[] args) {
		
		
		double laenge2 = 6.0939.50.78999167;
		double breite2 = 6.0939.50.78999167;
		double laenge1 = 7.181563889.50.78023889;
		double breite1 = 7.181563889.50.78023889;
		
		
		
		
double Distanzfaktor = arccos(Math.sin(breite1) * Math.sin(breite2) + Math.cos(breite1) * Math.cos(breite2) * Math.cos(laenge2 - laenge1));
		
		System.out.println (Distanzfaktor);
		
		
		

	}
	private static double arccos(double d) {
	
		return 0;
	}

}

Die Entfernung zu berechnen kann gar nicht so schwer sein. Ich stell mich wohl nur zu blöd an. Das ist echt frustrierend.

Für einen Tipp wäre ich dankbar!




Gruß,
Dynamaik
 
Zuletzt bearbeitet:
Hallo,
Versuche es mal so:

Java:
double laenge2 = 6.0939;
double breite2 = 50.78999167;
double laenge1 = 7.181563889;
double breite1 = 50.78023889;

So sind die X und Y Koordinaten getrennt.
 
...hallo mal an alle....

find das echt lustig..bin an der Fh in Sankt augustin und habe genau die gleiche aufgabe bekommen wie derjenige vor mir.....bin zwar schon weiter habe aber ne abweichung von 6 bis 8 kilometern...hatte andere werte genommen um zu testen ob ich auch die richtige entfernung gemessen habe...hänge aber noch irgendwo ..bzw. finde den fehler selber nicht...wäre schön wenn man mir antworten würde :)

Code:
public class Aufgabe2 {
	public static void main(String[] args) {
		
		double x1,y1,x2,y2,radius;
		double entfernung=0;
		radius= 6378.137/360; 
		
		x1=50.7754660;
		y1=6.0814780;
		
		x2=50.7724910;
		y2=7.1906860;

		//wert=78.084km
		
		double distanz =(x1-x2)+(y1-y2);
		System.out.println(distanz);
		double distanzfaktor = Math.acos((Math.sin(y1)*Math.sin(y2))+((Math.cos(y1)*Math.cos(y2))* (Math.cos(x2)-Math.cos(x1))));
		
		if (distanz >=0){
			entfernung = radius*distanzfaktor;
		}
		else if(distanz < 0){
			entfernung = radius*(distanzfaktor + Math.PI);
		}
		System.out.println("Entfernung: " + entfernung +" km");
	}
}

der wert der rauskommen müsste is 78.084km aber ich komm auf nen wert von 86.2825km ...kann mir jemand erklären warum ich diese abweichung habe...bin schon fast am verzweifeln...weil ich meinen eigenen fehler nicht sehe...

Danke schonmal im Voraus
 
Als erstes fällt mir auf, dass du Grad, statt Radian in die trigonometrischen Funktionen steckst.

Die Formel ist aber auch nicht allzu genau, was allerdings bei der kurzen Strecke nicht so ins Gewicht fallen sollte.
 
hmm hast du denn auch nen verbesserungsvorschlag? hmm ich meine ich hab noch nie mit solchen werten in java gearbeitet...deswegen hab ich davon auch nicht wirklich ahnung ....also ich meine wie rechne ich das denn dann bitte um...weil java doch normalerweise wenn ich nen grad wert eingebe automatisch nen radiantwert draus macht oder nicht?
 
Zuletzt bearbeitet:
Wie bitte soll Java dass denn wissen was du da für Werte reingibst? Dafür mußt du schon selber mit Math.toRadians(angle) sorgen.
 
hab das nu geändert aber hab immernoch ne abweichung von etwa 5 km ....


x1=Math.toRadians(50.7754660);
y1=Math.toRadians(6.0814780);

x2=Math.toRadians(50.7724910);
y2=Math.toRadians(7.1906860);
 
...hallo mal an alle....

find das echt lustig..bin an der Fh in Sankt augustin und habe genau die gleiche aufgabe bekommen wie derjenige vor mir.....bin zwar schon weiter habe aber ne abweichung von 6 bis 8 kilometern...hatte andere werte genommen um zu testen ob ich auch die richtige entfernung gemessen habe...hänge aber noch irgendwo ..bzw. finde den fehler selber nicht...wäre schön wenn man mir antworten würde :)

Code:
public class Aufgabe2 {
	public static void main(String[] args) {
		
		double x1,y1,x2,y2,radius;
		double entfernung=0;
		radius= 6378.137/360; 
		
		x1=50.7754660;
		y1=6.0814780;
		
		x2=50.7724910;
		y2=7.1906860;

		//wert=78.084km
		
		double distanz =(x1-x2)+(y1-y2);
		System.out.println(distanz);
		double distanzfaktor = Math.acos((Math.sin(y1)*Math.sin(y2))+((Math.cos(y1)*Math.cos(y2))* (Math.cos(x2)-Math.cos(x1))));
		
		if (distanz >=0){
			entfernung = radius*distanzfaktor;
		}
		else if(distanz < 0){
			entfernung = radius*(distanzfaktor + Math.PI);
		}
		System.out.println("Entfernung: " + entfernung +" km");
	}
}

der wert der rauskommen müsste is 78.084km aber ich komm auf nen wert von 86.2825km ...kann mir jemand erklären warum ich diese abweichung habe...bin schon fast am verzweifeln...weil ich meinen eigenen fehler nicht sehe...

Danke schonmal im Voraus






dann kannst du ja am dienstag beim prof. berrendorf uns allen mal deine lösung erklären :)
 
Meiner Meinung nach hast du die Formel wie sie oben steht nicht richtig angewendet. Achte darauf was Längen- und was Breitengrade sind und auf die letzte cos-Funktion.
 
Zurück