Entfernung berechnen durch Datenbank

T

theboss22

Ambitioniertes Mitglied
0
Hey Leute,
ich habe gestern in mühevoller Arbeit folgenden Code entwickelt:
Code:
public class Entfernung_berechnen {


	
    public static void main(String[] args) {
			       
			        double x1,y1,x2,y2,gradx,grady;
			        gradx= 111.12;
			        grady=66;
			        
			       
			        x1=54.10180;
			        y1=10.81534;  //aktuelle Position 
			       
			        x2=53.94966;
			        y2=10.70343;   [B] //Position eines Ortes [/B]
		 
		      
		       
			        double distanz_x =(x1-x2)*gradx;
			        double distanz_y =(y1-y2)*grady;
			        
			        double entfernung = (distanz_x*distanz_x)+(distanz_y*distanz_y);
			        double km = Math.sqrt(entfernung);
			        
			        
			        if (km >=0){
			            
			        }
			        else if(km < 0){
			            km = (km*-1);
			        }
			
			    
			
			        
			        System.out.println("Die Entfernung beträgt " + km + " km");
			    
			        
			        /*Es wurden Koordinaten von http://gpso.de/maps/ im Format dd.ddddd° verwendet */ 
			        
			        
			        
			        			        
    }
}

Nun möchte ich, dass die //Position eines Ortes aus einer Datenbank ausgelesen wird. Ich hatte Idee einen Array mit einem Enhanced-For-Loop zu erstellen, anstelle einer Datenbank. Mein Code dafür sieht nun so aus:

Code:
public class datenbank {
 
    public static void main(String[] args) {
 
        String[] Häfen_Länge = {"53.99321", "54.10509", "54.37455", "54.13570"};   
        String[] Häfen_Breite = {"10.81323", "10.81117", "10.98445", "10.94760"}; 
 
        for(String index:Häfen_Länge){								
            							
   
          }
      }
}

Der Code zur Entfernungsberechnung (oben) soll nun auf diesen Array zugreifen können und ihn an der Stelle //Position eines Ortes einsetzen, um die Entfernung zu berechnen ?

Könnt ihr mir da helfen ?

LG und vielen Dank im voraus!,
theboss22
 
Nur mal nebenbei, dir ist klar das du Differenzen von Längen-/Breitengraden nicht einfach mittels einer Konstanten in km umrechnen kannst?

cu
 
rihntrha schrieb:
mittels einer Konstanten in km umrechnen kannst?

cu

meine App soll nur in der Region Ostholstein funktionieren, dort ist der Breitengrad genau 66 km lang, also müsste das gehen :) oder nicht ?
 
Ja, wenn die Ungenauigkeiten akzeptabel sind... und das sind sie anscheinend.

Wollte nur sichergehen das dir das klar ist. Häfen klang irgendwie nach Weltweit ;-)

cu
 
  • Danke
Reaktionen: theboss22
Wenn die App tatsächlich auf einem so kleinen Bereich beschränkt ist, wird sich das in erster Näherung berechnen lassen. Wenn Du einen Bereich in Deiner App abbildest, der eine Nord/Süd Ausdehnung von 111 km hat (also über einen Breitengrad geht), liegt der Fehler bei ca 1% - 1,5% (näher am Pol wir der Fehler drastischer, am Äquator ist er am geringsten)

Die Bezeichnung, der Breitengrad ist 66 km lang ist m.E. ein gewisses Potential an Missverständnis möglich.

Ich würde es sicherheitshalber so beschreiben:

  • Der Abstand zwischen zwei Breitengraden überall konstant.
  • Der Abstand zwischen zwei Längengraden kann auf einem Breitengrad x errechnet werden durch: (10000 km/90) * cos (x)
 
Danke, das Gebiet beschränkt sich auf ein ca. 40*30 km großes Gebiet
aber benötige ich zwingend eine Datenbank für die Speicherung der Orte oder kann ich das auch in Arrays machen ?
 
Eine Bessere Näherungsformel wäre übrigens die folgende:

ax, ay := Startpunkt Längengrad,Breitengrad
bx, by := Zielpunkt Längengrad,Breitengrad

dy = |by-ay| * 10000 / 90 (Nord/Süd Anstand in km)
dx = |bx-ax| * 10000 / 90 * cos ((ay+by)/2) (Ost/West Abstand auf dem Mittleren Breitengrad in km)

d = sqrt ( dx² + dy²) (Genäherter Gesamtabstand Luftlinie)

So mittelst Du Fehler in dem Abstand zwischen zwei Längengraden zumindest linear aus

Der ursprüngliche Beitrag von 15:54 Uhr wurde um 15:58 Uhr ergänzt:

Ob Du eine Datenbank, ein Property-File oder die Daten direkt im Code eingibst, das ist letztlich Deine Sache.

Du kannst auch erst mal klein Anfangen (Daten im Code) und später auf ein mächtigeres Mittel (z.B. Datenbank) umsteigen.
 
u.k-f schrieb:
[/COLOR]Ob Du eine Datenbank, ein Property-File oder die Daten direkt im Code eingibst, das ist letztlich Deine Sache.
(z.B. Datenbank) umsteigen.

ist denn mein bisheriger Versuch oben richtig ?
 
Wie soll man letztendlich beurteilen, ob ein Teilstück richtig oder falsch ist :confused2:

Richtig ist es immer dann wenn das Gesamte tut, was es soll. :thumbup:

Ich kann mir durchaus vorstellen, dass (je nach dem was an Code dazu kommt) es zu einem funktionierenden Ganzen werden kann.

Worüber Du vielleicht sofort nachdenken kannst, warum Du die Koordinaten als String[] speicherst und nicht als double[].

Optimieren kann man bestimmt auch noch, wenn man irgendwann mal eine Suche nach Ortsnamen mit drin haben möchte, und nicht über den Index gehen will, um die Entfernung zu bestimmen, dann sollte man auch den Namen des Ortes mit speichern.
 
u.k-f schrieb:
Worüber Du vielleicht sofort nachdenken kannst, warum Du die Koordinaten als String[] speicherst und nicht als double[].
.

du meinst ich sollte sie lieber als double speichern ?

Code:
   double[] Hafen_Länge = {"53.99321", "54.10509", "54.37455", "54.13570"};   
            double[] Hafen_Breite = {"10.81323", "10.81117", "10.98445", "10.94760"};
sooo ?

Dann kommt bei mir als Fehler: type mismatch: can't convert from double to int java:sad::sad:
 
Dann dürfen die Werte nicht in 'Tüttelchen' stehen:

Code:
   double[] Hafen_Länge = {53.99321d, 54.10509d, 54.37455d, 54.13570d};   
   double[] Hafen_Breite = {10.81323d, 10.81117d, 10.98445d, 10.94760d};


Der ursprüngliche Beitrag von 16:32 Uhr wurde um 16:37 Uhr ergänzt:

Oder alternativ gleich als Array of Arrays of double:

Code:
   double[] Hafen_Länge_Breite = {
        {53.99321d,10.81323d},
        {54.10509d,10.81117d},
        {54.37455d,10.98445d}, 
        {54.13570d,10.94760d}
    };

Dann Hast Du vier Array of double, in denen jeweils Länge und Breite drin steht.

BTW: Ich kann mich irren, aber ich glaube, Du hast Länge und Breite verwechselt: Geographische Breite
 
  • Danke
Reaktionen: theboss22
Die Klasse Location im Android SDK hat eine statische Methode "distancebetween" (oder so), die sollte die Berechnung korrekt machen. Dann musst du nicht mit Näherungen arbeiten.

Zu Datenbanken gibt es auf d.Android.com tutorials.

edit:
Link
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: theboss22 und Kiwi++Soft
u.k-f schrieb:
Code:
   double[] Hafen_Länge = {53.99321d, 54.10509d, 54.37455d, 54.13570d};   
   double[] Hafen_Breite = {10.81323d, 10.81117d, 10.98445d, 10.94760d};


[


ahhh vielen Dank! :)

Überlege nun wie ich für die Arrays (oben) am besten die Entfernung zur aktuellen Position berechnen kann und diese temporär speichern kann. Eignet sich dafür eine for-schleife ?

Als Modell müsste diese ja so aussehen:
-for(double index:Hafen_Länge){
- speichere (Hafen_Länge[0]) temporär
- speichere (Hafen_Breite[0]) temporär
- setze Variable x2,y2 = Breite/Länge
--> durch die Entfernungsberechnung berechnen

Hab ich zu kompliziert gedacht ? Wie lässt sich das am besten umsetzen ?
Vielen Dank schonmal :)

PS:. Hattest Recht, Längen/Breitengerade hatte ich vertauscht :biggrin:
 

Ähnliche Themen

S
Antworten
33
Aufrufe
2.670
Sempervivum
S
S
  • softwareunkundig
Antworten
1
Aufrufe
886
jogimuc
J
Zurück
Oben Unten