Ich versuche, die Entfernung zwischen zwei Orten zu berechnen, indem ich räumliche Funktionen sowohl in Mysql als auch in PostgresSQL verwende. Ich habe den Längen- und Breitengrad von Google übernommen. Die Details sind unter
Ort eins - Breite: 42,260223; Lon: -71.800010
Ort zwei - Breite: 42,245647; Lon: -71.802521
SQL Query verwendet:
SELECT DISTANCE (GEOMFROMTEXT ('Punkt (42.260223 -71.800010)'), GEOMFROMTEXT ('Punkt (42.245647 -71.802521)'))
Beide Datenbanken liefern das gleiche Ergebnis 0.014790703059697. Aber wenn ich die Entfernung in anderen Systemen berechne, sind die Ergebnisse unterschiedlich. Bitte beachten Sie die folgenden Links
Ссылка = 1,44 Meilen
Ссылка = 1,53 Meilen
Ich möchte also wissen, ob meine Berechnungsmethode / Abfrage richtig ist oder nicht. Und wenn es falsch ist, was ist der richtige Weg, um die db für die Entfernung abzufragen.
Die einfache Antwort ist die Haversine-Formel. Dies setzt voraus, dass die Erde eine Kugel ist, was sie nicht ist, aber es ist keine schlechte Annäherung. Dies wird mit vielen anderen Details in dieser Präsentation beschrieben:
Im obigen Fall wendet MySql einfach den Satz des Pythagoras an: c2 = a ^ 2 + b ^ 2. In diesem speziellen Fall ist SQRT ((42.245647 - 42.260223) ^ 2 + (-71.802521 ^ 2 - -71.800010) ^ 2) = 0.014790703.
Es gibt tatsächlich zwei Probleme bei der Verwendung der MySql-Abstandsfunktion für die Entfernung mit Koordinaten auf einer Kugel. (1) MySql ist die Distanz auf einer Ebene und nicht auf einer Kugel. (2) Das Ergebnis kommt in einer Form von Graden zurück, nicht in Meilen. Um eine echte, sphärische Entfernung in Meilen, km, ft usw. zu erhalten, müssen Sie Ihre Breiten- und Längengrade in die Einheiten umwandeln, die Sie messen möchten, indem Sie den Radius von einer Linie durch den Mittelpunkt der Erde für die Breite (n) bestimmen. du machst.
Um eine echte Maßnahme zu erhalten, ist es ziemlich kompliziert, viele Einzelpersonen und Firmen haben daraus Karriere gemacht.