GPS Google Maps und Co...

Hi!
Ich weiß nicht ob ich hier in der richtigen Kategorie bin, aber ich spiele gerade mit Google Maps, OSM und dem Zeugs herum. Jetzt habe ich ein paar Verständnisfragen bezüglich der Koordinaten. (Kenn mich da nicht so gut aus, war nie beim Bundesheer...)

Was sind quasi Standardkoordinaten wenn man einen Punkt angibt?
Wenn ich bei Google Maps z.B Punkte mit What's here wähle bekomme ich
47.086843,15.42375 bzw. 47.087106,15.424629
Wie würde man mit diesen Werten die Differenz in Metern berechnen?
 
Hi!

Ich war zwar auch nicht beim Heer, aber das ist relativ einfach (zumindest wenn man die Umrechnung für kleine Differenzen vornimmt und die Meter nicht aufs Komma genau braucht).
Für den Längengrad ist die Umrechnung ganz einfach. Eine Gradminute entspricht einer Seemeile (ca. 1852 m). Daraus kann man die Distanz für einen ganzen Längengrad berechnen: 1852 * 60 = 111.120 Meter. Für den Breitengrad ist die Umrechnung am Äquator die selbe. Ansonsten muss dazu noch der Kosinus des Breitengrads multipliziert werden.

Also für dein Beispiel:
47.087106 - 47.086843 = 0,000263° Differenz (Geographische Breite)
15.424629 - 15.42375 = 0,000879° Differenz (Geographische Länge)

0,000263 * 111.120 * cos(47) = 19,9 m
0,000879 * 111.120 = 97,7 m

Wenn die Angaben noch genauer sein sollen --> genauen Wert für eine Seemeile nutzen und für den Kosinus den Mittelwert der beiden Breitengrade nutzen

Ich hoffe das stimmt in etwa und hilft dir weiter. ;)
 
Also ganz trivial ist das leider nicht. Die Breitengrade haben immer den gleichen Abstand voneinander, aber die Längengrade aufgrund der "Kugelform" der Erde natürlich nicht.
Je nachdem, wie genau das sein muss, und für welche geografischen Bereiche du das einsetzen willst, könntest du die Berechnung aber mit Sicherheit vereinfachen.

Wenn du die Berechnung z.B. nur für Deutschland (oder sogar einen noch kleineren Bereich) haben möchtest, kannst du ja einfach mal gucken, wie weit die Längengrade in Norddeutschland und Süddeutschland auseinander sind und dann für deine Berechnung einfach den Mittelwert nehmen. Wenn du nun noch die Erdkrümmung vernachlässigst, dann hättest du schonmal ein sehr einfaches zweidimensionales Modell, bei dem du dann eine einfache Abstandsberechnung zwischen zwei Punkten durchführen könntest.

Wenn du es genauer benötigst, kannst du dich ja mal mit http://de.wikipedia.org/wiki/Sphärische_Geometrie auseinandersetzen, da dies genau das ist, was hier zutreffen dürfte (natürlich auch wieder mit gewissen Einschränkungen, da die Erde ja keine perfekte Kugel ist
 
Die Erde ist leider doch keine Kugel - sondern eher eine Kartoffel.
Was Du suchst sind Loxodrome und Großkreisnavigation.
Auf diesen Seiten sind die Formeln und deren Anwendung recht gut beschrieben.

Für Berechnungen bei größeren Entfernungen kannst Du auch die Vincety Formel oder (evtl genauer) die Haversine Formel verwenden.

Da aber fast immer (besonders bei Dir in Österreich) die Erdoberfläche nicht glatt ist, sind genaue Berechnungen einer Distanz fast unmöglich. Auch ein Grund, warum man immer mal Leute in orange mit Holzpinnen in der Landschaft beobachten kann - wenn es genau werden soll, dann hilft nur messen.
 
Je nach dem, was du vorhast musst du aber beachten, dass Google selbst die Mercator-Projektion verwendet
 
Infos zur Distance Calculation

Auch wenn es viele nicht wissen, es gibt auch noch Alternativen zu Google Maps ;)

Im Navteq Network for Developers (NN4D) findest neben einer kostenlosen AJAX API (etwas komplexer als Google, dafür mehr Features & performanter), einigen Tutorials, Forum und Doku, z.B. auch eine fertige Funktion zur Distance-Berechnung.

Infos zur Distance Calculation & Coordinates



Distance Calculation in JavaScript

The function below calculates the distance between Point1(lat1, long1) and Point2(lat2, long2) in meters :

function calculateDistance(lat1, long1, lat2, long2){
//conversion to radian
lat1 = (lat1 * 2.0 * Math.PI) / 60.0 / 360.0;
long1 = (long1 * 2.0 * Math.PI) / 60.0 / 360.0;
lat2 = (lat2 * 2.0 * Math.PI) / 60.0 / 360.0;
long2 = (long2 * 2.0 * Math.PI) / 60.0 / 360.0;

// use to different earth axis length
var a = 6378137.0; // Earth Major Axis (WGS84)
var b = 6356752.3142; // Minor Axis
var f = (a-b) / a; // "Flattening"
var e = 2.0*f - f*f; // "Eccentricity"

var beta = (a / Math.sqrt( 1.0 - e * Math.sin( lat1 ) * Math.sin( lat1 )));
var cos = Math.cos( lat1 );
var x = beta * cos * Math.cos( long1 );
var y = beta * cos * Math.sin( long1 );
var z = beta * ( 1 - e ) * Math.sin( lat1 );

beta = ( a / Math.sqrt( 1.0 - e * Math.sin( lat2 ) * Math.sin( lat2 )));
cos = Math.cos( lat2 );
x -= (beta * cos * Math.cos( long2 ));
y -= (beta * cos * Math.sin( long2 ));
z -= (beta * (1 - e) * Math.sin( lat2 ));

return Math.sqrt( (x*x) + (y*y) + (z*z) );


Distance Calculation in PHP

The function below calculates the distance between Point1(lat1, long1) and Point2 (lat2, long2) in meters.

function calculateDistance($lat1, $long1, $lat2, $long2){
//conversion to radian
$lat1 = ($lat1 * 2.0 * pi()) / 60.0 / 360.0;
$long1 = ($long1 * 2.0 * pi()) / 60.0 / 360.0;
$lat2 = ($lat2 * 2.0 * pi()) / 60.0 / 360.0;
$long2 = ($long2 * 2.0 * pi()) / 60.0 / 360.0;

// use to different earth axis length
$a = 6378137.0; // Earth Major Axis (WGS84)
$b = 6356752.3142; // Minor Axis
$f = ($a-$b) / $a; // "Flattening"
$e = 2*$f - $f*$f; // "Eccentricity"

$beta = ($a / sqrt(1-$e * sin( $lat1 ) * sin( $lat1 )));
$cos = cos( $lat1 );
$x = $beta * $cos * cos( $long1 );
$y = $beta * $cos * sin( $long1 );
$z = $beta * (1-$e) * sin( $lat1 );

$beta = ($a / sqrt( 1 - $e * sin( $lat2 ) * sin( $lat2 )));
$cos = cos( $lat2 );
$x -= ($beta * $cos * cos( $long2 ));
$y -= ($beta * $cos * sin( $long2 ));
$z -= ($beta * (1 - $e) * sin( $lat2 ));

return sqrt( ($x*$x) + ($y*$y) + ($z*$z) );
}


Viele Spaß :D
 
Zurück
Oben