MySQL dice en los documentos para ST_Distance_Sphere
Los cálculos utilizan una tierra esférica y un radio configurable. El argumento del radio opcional debe darse en metros. Si se omite, el radio predeterminado es de 6.370.986 metros. Si el argumento del radio está presente pero no es positivo,
ER_WRONG_ARGUMENTS
se produce un error.
PostGIS dice en los documentos de ST_Distance_Sphere
, (aunque los documentos ya no son precisos )
Utiliza una tierra esférica y radio de 6370986 metros.
¿De dónde obtuvieron los 6,370,986 metros predeterminados? WGS84 dice que el radio del eje mayor es de 6.378.137,0 m. PostGIS que ahora usa un Radio promedio esencialmente usa 6371008.
Mirando el código
#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)
eso significa
-- 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
Las versiones más nuevas son mucho menos eficientes, más complejas y usan Pro4j, pero parecen hacer lo mismo.
¿De dónde viene el 6370986?
fuente
(2*minorAxis+majorAxis)/3
... aunque ese valor para WGS84 todavía es unos metros más grande (6,371,008.771)Respuestas:
Ok, esto es hilarriuusss . Seguí esto abajo. En una copia anterior de
lwgeom/lwgeom_spheroid.c
PostGIS 1.0.0rc4 puede ver esto,Pasando a los documentos de
earthdistance
, encontrarás esto:Y ese número cableado:
EARTH_RADIUS
se puede ver aquíEntonces puedes hacer un simple.
Y tienes tu
6370986.884258304
. Por supuesto, solo trunca eso y guárdalo en unlong
porque porque no.Entonces, en esencia, el radio en MySQL se levantó de un trabajo de copia perezosa de PostGIS que convirtió un radio en millas a metros de una constante oscura de un módulo PostgreSQL de 20 años de antigüedad .
earth_distance
es un módulo anterior a PostGIS por Bruce Momjian. Por la presente proclamo 6370986 la constante de Bmomjian: una buena aproximación de la Tierra en metros para satisfacer MySQL. Aunque tal vez no por mucho tiempo.fuente