Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   GMLib (Google Map), wer kennt sich aus? (https://www.delphipraxis.net/182662-gmlib-google-map-wer-kennt-sich-aus.html)

SiggiP 8. Nov 2014 15:44

GMLib (Google Map), wer kennt sich aus?
 
Hallo Zusammen
In einem Projekt (Delphi) benutze ich GMLib um diverse Routen zu berechnen.
Das funktioniert auch ganz gut. Ich brauche aber auch die Funktion, um die
Luftlinie zwischen zwei Markern zu berechnen. Diverse Funktionen dafür habe
ich in der GMLib gefunden, die liefern aber nicht die erwarteten Werte.
Wenn jemand eine Lösung weiß...?

Grüße, Siggi

Perlsau 8. Nov 2014 17:27

AW: GMLib (Google Map), wer kennt sich aus?
 
Kein Link zur GMLib, kein Code, keine Fehlerbeschreibung – ich würde daher mal so ins Blaue raten: Die Lösung besteht darin, daß du deine Erwartungen änderst, was die Werte angeht, und schon paßt's :stupid:

Oder mal so ausgedrückt: Wenn eine Library falsche Ergebnisse liefert, taugt sie vielleicht nix?

Die Forensuche wäre vielleicht auch mal einen Blick wert ... da gibt's z.B. das hier zu finden :thumb:

GPRSNerd 8. Nov 2014 18:19

AW: GMLib (Google Map), wer kennt sich aus?
 
Folgenden Code benutze ich zur Distanzberechnung mittels Haversine-Formel (http://en.wikipedia.org/wiki/Haversine_formula) auf der Erdkugel zwischen zwei GPS-Koordinaten, der ist recht genau:

Delphi-Quellcode:
const
  EarthRadius = 6371.0; //Mean Earth radius in Km
  pi         = System.Pi;
  half_pi    = pi/2;
  rad        = pi/180; //conversion factor for degrees into radians

Function atan2(const y, x: Extended): Extended;
begin
  Result := 0.0; //temp.

  if x = 0.0 then
  begin
    if y = 0.0 then
      raise EMathError.Create('Math Error in atan2: undefined for y=x=0')
    else if y > 0.0 then
      Result := + half_pi
    else
      Result := - half_pi;
  end
  else
  begin
    if x > 0.0 then
        Result := arctan(y/x)
    else if x < 0.0 then
    begin
      if y >= 0.0 then
        Result := arctan(y/x)+pi
      else
        Result := arctan(y/x)-pi;
    end;
  end;
end;

Function CalcDistance(const lonFrom, lonTo, latFrom, latTo: Extended): Extended;
Var
   dlon, dlat, a, c: Extended;
begin
  if ((latFrom = latTo) and (lonFrom = lonTo)) then //Trivialfall, identische Punkte
    Result := 0.0
  else
  begin
    dlon := (lonTo-lonFrom)*rad;
    dlat := (latTo-latFrom)*rad;

    //The Haversine formula
    a:= sqr(sin(dlat/2)) + cos(latFrom*rad) * cos(latTo*rad) * sqr(sin(dlon/2));
    try
      c := 2 * atan2(sqrt(a), sqrt(1-a));
    except
      c := 0;
    end;

    //Distanz/Großkreis auf dem Erdradius
    Result := EarthRadius * c;
  end;
end;

SiggiP 8. Nov 2014 19:20

AW: GMLib (Google Map), wer kennt sich aus?
 
Hi GPRSNerd


Habe den Code umgesetzt. Es gibt da noch ein paar kleine Differenzen zwischen www.luftlinie.org
und meinen Berechnungen. Das werde ich aber noch mit dem Navi checken... :)

Hier der Link zur GMLib: http://www.cadetill.com/category/programacion/delphi/

Danke für die Antworten.



Grüsse, Siggi

GPRSNerd 8. Nov 2014 19:42

AW: GMLib (Google Map), wer kennt sich aus?
 
Die Formel geht von einer idealen sphärischen Kugel aus, der Radius ist auch "umstritten" und wird verschiedentlich anders gesetzt, daher sind kleine Abweichungen normal.

Zitat:

Either formula is only an approximation when applied to the Earth, which is not a perfect sphere: the "Earth radius" R varies from 6356.752 km at the poles to 6378.137 km at the equator. More importantly, the radius of curvature of a north-south line on the earth's surface is 1% greater at the poles (≈6399.594 km) than at the equator (≈6335.439 km)— so the haversine formula and law of cosines can't be guaranteed correct to better than 0.5%.

DelphiFan2008 25. Mai 2015 18:28

AW: GMLib (Google Map), wer kennt sich aus?
 
Falls noch aktuell, schau mal hier
Orthodrome


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz