MySQL diz nos documentos para ST_Distance_Sphere
Os cálculos usam uma terra esférica e um raio configurável. O argumento do raio opcional deve ser dado em metros. Se omitido, o raio padrão é 6.370.986 metros. Se o argumento do raio estiver presente, mas não positivo,
ER_WRONG_ARGUMENTS
ocorrerá um erro.
O PostGIS diz nos documentos de ST_Distance_Sphere
(embora os documentos não sejam mais precisos )
Usa uma terra esférica e raio de 6370986 metros.
De onde eles tiraram os 6.370.986 metros padrão? WGS84 diz que o raio do eixo principal é 6.378.137,0 m. O PostGIS que agora usa um raio médio usa essencialmente 6371008.
Olhando o 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)
que 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
As versões mais recentes são muito menos eficientes, mais complexas e usam o Pro4j, mas parecem fazer a mesma coisa.
Ainda de onde vem o 6370986?
fonte
(2*minorAxis+majorAxis)/3
... embora esse valor para WGS84 ainda é a poucos metros maior (6,371,008.771)Respostas:
Ok, isso é hilarriuusss . Eu localizei isso. Em uma cópia antiga do
lwgeom/lwgeom_spheroid.c
PostGIS 1.0.0rc4, você pode ver isso,Passando para os documentos de
earthdistance
, você encontrará o seguinte:E esse número conectado:
EARTH_RADIUS
pode ser visto aquiEntão você pode fazer um simples.
E você tem o seu
6370986.884258304
. Claro, apenas trunque isso e guarde-o em umlong
porque porque não.Então, em essência, o raio no MySQL foi aumentado de um trabalho de cópia preguiçoso do PostGIS que converteu um raio em milhas em metros de uma constante obscura de um módulo aleatório PostgreSQL de 20 anos .
earth_distance
é um módulo pré-PostGIS de Bruce Momjian. Proclamo por este meio 6370986 a constante Bmomjian: uma boa aproximação da Terra em metros para satisfazer o MySQL. Embora talvez não por muito tempo.fonte