MySQL говорит в документах для ST_Distance_Sphere
В расчетах используется сферическая земля и настраиваемый радиус. Необязательный аргумент радиуса должен быть указан в метрах. Если опущен, радиус по умолчанию составляет 6 370 986 метров. Если аргумент radius присутствует, но не является положительным, возникает
ER_WRONG_ARGUMENTS
ошибка.
PostGIS говорит в документах ST_Distance_Sphere
, (хотя документы уже не точны )
Использует сферическую землю и радиус 6370986 метров.
Откуда они взяли по умолчанию 6 370 986 метров? В WGS84 говорится, что радиус большой оси составляет 6 378 137,0 м. PostGIS, который сейчас использует средний радиус, по существу использует 6371008.
Глядя на код
#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)
это значит
-- 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
Более новые версии гораздо менее эффективны, более сложны и используют Pro4j, но, похоже, делают то же самое.
Тем не менее, откуда приходит 6370986?
(2*minorAxis+majorAxis)/3
... хотя это значение для WGS84 все еще на несколько метров больше (6 371 008,771)