tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
10
ZUGRIFFE
2748
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Dynamaik Dynamaik ist offline Grünschnabel
    Registriert seit
    Nov 2009
    Beiträge
    4
    Hallo!

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

    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    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
    Geändert von Dynamaik (05.11.09 um 21:20 Uhr)
     

  2. #2
    jgraber jgraber ist offline Mitglied
    Registriert seit
    Apr 2007
    Beiträge
    13
    Hallo,
    Versuche es mal so:

    Code java:
    1
    2
    3
    4
    
    double laenge2 = 6.0939;
    double breite2 = 50.78999167;
    double laenge1 = 7.181563889;
    double breite1 = 50.78023889;

    So sind die X und Y Koordinaten getrennt.
     

  3. #3
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Das ganze hatten wir gerade hier: http://www.tutorials.de/forum/archiv...d-zurueck.html

    Dort findest du auch Lösungen.
     

  4. #4
    whity82 whity82 ist offline Grünschnabel
    Registriert seit
    Nov 2010
    Beiträge
    3
    ...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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    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
     

  5. #5
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    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.
     

  6. #6
    whity82 whity82 ist offline Grünschnabel
    Registriert seit
    Nov 2010
    Beiträge
    3
    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?
    Geändert von whity82 (06.11.10 um 12:31 Uhr)
     

  7. #7
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    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.
     

  8. #8
    whity82 whity82 ist offline Grünschnabel
    Registriert seit
    Nov 2010
    Beiträge
    3
    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);
     

  9. #9
    favorite favorite ist offline Grünschnabel
    Registriert seit
    Nov 2010
    Beiträge
    2
    Zitat Zitat von whity82 Beitrag anzeigen
    ...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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    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
     

  10. #10
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    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.
     

  11. #11
    favorite favorite ist offline Grünschnabel
    Registriert seit
    Nov 2010
    Beiträge
    2
    was ich aber nicht verstehe, warum du den erdradius nochmal durch 360 dividierst ?!
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 14.12.10, 16:10
  2. Entfernung berechnen anhand der PLZ
    Von Sascha1976 im Forum Coders Talk
    Antworten: 32
    Letzter Beitrag: 05.08.10, 20:54
  3. Funktion für Entfernung berechnen
    Von Martin287 im Forum Stellenangebote (entgeltlich)
    Antworten: 1
    Letzter Beitrag: 29.12.09, 13:11
  4. Entfernung von 2 Orten
    Von oppa im Forum PHP
    Antworten: 7
    Letzter Beitrag: 30.09.07, 12:20
  5. Textur aus Entfernung
    Von AMIBC im Forum Cinema 4D
    Antworten: 11
    Letzter Beitrag: 06.07.06, 00:48