Formeln zur Berechnung der Geo-Nähe

Brauche ich zur Umsetzung einer Geo-Umkreissuche in meiner Anwendung, aber ich bin sehr verwirrt in Bezug auf die richtige Formel zu verwenden. Nach einigen Recherchen im Web und in StackOverflow fand ich, dass die Lösungen sind:

  1. Verwenden Sie die Haversine Formel
  2. Verwenden Sie die Great-Circle-Distance-Formel
  3. Verwenden Räumliche Suchmaschinen - in der Datenbank

Option #3 ist nicht wirklich eine option für mich ATM. Jetzt bin ich ein wenig verwirrt, da ich immer dachte, dass der Great-Circle-Distance-Formel und Haversine Formel wurden Synonym aber anscheinend war ich falsch?

Haversine Formel http://i46.tinypic.com/30shbn6.png

Oben im Bild war genommen von der atemberaubenden Geo (Nähe) - Suche mit MySQL Papier, und nutzt die folgenden Funktionen:

ASIN, SQRT, POWER, SIN, PI, COS

Habe ich auch gesehen, die Abweichungen von der gleiche Formel (Sphärische Gesetz der Cosinus)wie diese:

(3956 * ACOS(COS(RADIANS(o_lat)) * COS(RADIANS(d_lat)) * COS(RADIANS(d_lon) - RADIANS(o_lon)) + SIN(RADIANS(o_lat)) * SIN(RADIANS(d_lat))))

Verwendet, die folgenden Funktionen:

ACOS, COS, RADIANS, SIN

Ich bin kein Mathe-Experte, aber sind diese Formeln das gleiche? Ich habe über einige mehr Variationen und Formeln (wie die Sphärische Gesetz der Cosinus und die Vincenty ist Formeln - das scheint die Genaueste) und das macht mich noch mehr verwirrt...

Brauche ich, um wählen Sie ein gutes Allzweck-Formel zur Umsetzung in PHP /MySQL. Kann jemand mir erklären die Unterschiede zwischen den Formeln, die ich oben erwähnte?

  • Welches ist das am schnellsten zu berechnen?
  • Die eine liefert die genauesten Ergebnisse?
  • Welche ist die beste in Bezug auf Geschwindigkeit /Genauigkeit der Ergebnisse?

Ich Schätze Ihre Einsicht auf diese Fragen.


Basierend auf theonlytheory Antwort getestet habe ich die folgenden Great-Circle-Distance-Formeln:

  • Vincenty-Formel
  • Haversine Formel
  • Sphärische Gesetz der Cosinus

Den Vincenty-Formel tot ist langsam, aber es ist ziemlich genau (bis 0,5 mm).

Den Haversine Formel ist wesentlich schneller als die Vincenty-Formel, ich war in der Lage zu laufen 1 million Berechnungen in etwa 6 Sekunden, was ziemlich viel ist akzeptabel für meine Bedürfnisse.

Den Sphärische Gesetz der Cosinus-Formel offenbart werden fast doppelt so schnell als die Haversine Formel, und die Präzision Unterschied ist neglectfulness für die meisten Einsatzszenarien.


Hier sind einige test-Standorte:

  • Google HQ (37.422045-122.084347)
  • San Francisco, CA (37.77493-122.419416)
  • Eiffelturm, Frankreich (48.85822.294407)
  • Opera House, Sydney (-33.856553151.214696)

Google-HQ - San Francisco, CA:

  • Vincenty-Formel: 49 087.066 meters
  • Haversine-Formel: 49 103.006 meters
  • Sphärische Gesetz des Cosinus: 49 103.006 meters

Google-HQ - Eiffel Tower, Frankreich:

  • Vincenty-Formel: 8 989 724.399 meters
  • Haversine-Formel: 8 967 042.917 meters
  • Sphärische Gesetz des Cosinus: 8 967 042.917 meters

Google-HQ - Opera House, Sydney:

  • Vincenty-Formel: 11 939 773.640 meters
  • Haversine-Formel: 11 952 717.240 meters
  • Sphärische Gesetz des Cosinus: 11 952 717.240 meters

Wie Sie sehen können gibt es keinen spürbaren Unterschied zwischen der Haversine-Formel und das Sphärische Gesetz des Cosinus, aber beide haben Entfernung offsets so hoch wie der 22 Kilometer im Vergleich zu der Vincenty-Formel, da es verwendet eine längliche Annäherung an die Erde statt einer sphärischen.

InformationsquelleAutor der Frage Alix Axel | 2010-01-19

Schreibe einen Kommentar