MySQL sagt in den Dokumenten für ST_Distance_Sphere
Berechnungen verwenden eine sphärische Erde und einen konfigurierbaren Radius. Das optionale Radiusargument sollte in Metern angegeben werden. Ohne Angabe beträgt der Standardradius 6.370.986 Meter. Wenn das Argument radius vorhanden, aber nicht positiv ist, tritt ein
ER_WRONG_ARGUMENTS
Fehler auf.
PostGIS sagt in den Dokumenten von ST_Distance_Sphere
, (obwohl die Dokumente nicht mehr korrekt sind )
Verwendet eine kugelförmige Erde und einen Radius von 6370986 Metern.
Woher haben sie die voreingestellten 6.370.986 Meter? Laut WGS84 beträgt der Radius der Hauptachse 6.378.137,0 m. PostGIS, das jetzt einen durchschnittlichen Radius verwendet, verwendet im Wesentlichen 6371008.
Betrachtet man den Code
#define WGS84_MAJOR_AXIS 6378137.0
#define WGS84_INVERSE_FLATTENING 298.257223563
#define WGS84_MINOR_AXIS (WGS84_MAJOR_AXIS - WGS84_MAJOR_AXIS / WGS84_INVERSE_FLATTENING)
#define WGS84_RADIUS ((2.0 * WGS84_MAJOR_AXIS + WGS84_MINOR_AXIS ) / 3.0)
das bedeutet
-- SELECT 6378137.0 - 6378137.0 / 298.257223563;
WGS84_MINOR_AXIS = 6356752.314245179498
-- SELECT ( 2.0 * 6378137.0 + ( 6378137.0 - 6378137.0 / 298.257223563) ) / 3.0;
WGS84_RADIUS = 6371008.771415059833
Neuere Versionen sind viel weniger effizient, komplexer und verwenden Pro4j, aber sie scheinen dasselbe zu tun.
Woher kommt noch 6370986?
(2*minorAxis+majorAxis)/3
... obwohl dieser Wert für WGS84 noch einige Meter größer ist (6.371.008.771)