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)Ответы:
Хорошо, это весело ! Я отследил это. В старой копии
lwgeom/lwgeom_spheroid.c
PostGIS 1.0.0rc4 вы можете увидеть это,Переходя к документам
earthdistance
, вы найдете это:И этот аппаратный номер:
EARTH_RADIUS
можно увидеть здесьТак что вы можете сделать это просто.
И у тебя есть
6370986.884258304
. Конечно, просто обрежьте это и сохраните,long
потому что почему бы и нет.Таким образом, в сущности, радиус в MySQL был взят из задания отложенного копирования из PostGIS, которое преобразовало радиус в милях в метры из непонятной константы из случайного 20-летнего модуля PostgreSQL .
earth_distance
это модуль, предшествующий PostGIS Брюса Момджяна. Настоящим я провозглашаю 6370986 постоянную Бомджяна: хорошее приближение Земли в метрах, чтобы удовлетворить MySQL. Хотя, возможно, ненадолго.источник