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?
quelle
(2*minorAxis+majorAxis)/3
... obwohl dieser Wert für WGS84 noch einige Meter größer ist (6.371.008.771)Antworten:
Ok, das ist hilarriuusss . Ich habe das aufgespürt. In einer alten Kopie von
lwgeom/lwgeom_spheroid.c
in PostGIS 1.0.0rc4 können Sie dies sehen,Wenn Sie zu den Dokumenten von übergehen
earthdistance
, finden Sie Folgendes:Und diese fest verdrahtete Nummer:
EARTH_RADIUS
kann hier gesehen werdenSo können Sie ein einfaches tun.
Und du hast deine
6370986.884258304
. Schneiden Sie das natürlich einfach ab und speichern Sie es in a,long
weil warum nicht.Im Grunde genommen wurde der Radius in MySQL von einem Lazy-Copy-Job aus PostGIS entfernt , der einen Radius in Meilen in Meter von einer dunklen Konstante eines zufälligen 20 Jahre alten PostgreSQL-Moduls umwandelte .
earth_distance
ist ein Pre-PostGIS-Modul von Bruce Momjian. Ich proklamiere hiermit 6370986 die Bmomjian-Konstante: eine gute Nuff'-Näherung der Erde in Metern, um MySQL zu befriedigen. Aber vielleicht nicht lange.quelle