MySQL говорить у документах для ST_Distance_Sphere
Розрахунки використовують сферичну землю і настроюваний радіус. Необов’язковий аргумент радіуса слід наводити в метрах. Якщо пропущено, радіус за замовчуванням - 6,370,986 метрів. Якщо аргумент радіуса присутній, але не є позитивним, виникає
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)