MySQL mówi w dokumentacji dla ST_Distance_Sphere
Obliczenia wykorzystują kulistą ziemię i konfigurowalny promień. Opcjonalny argument promienia powinien być podany w metrach. Jeśli zostanie pominięty, domyślny promień wynosi 6370986 metrów. Jeśli argument promienia jest obecny, ale nie dodatni,
ER_WRONG_ARGUMENTS
pojawia się błąd.
PostGIS mówi w dokumentach ST_Distance_Sphere
(choć dokumenty nie są już dokładne )
Wykorzystuje sferyczną ziemię i promień 6370986 metrów.
Skąd wzięli domyślnie 6370986 metrów? WGS84 twierdzi, że promień osi głównej wynosi 6,378,137,0 m. PostGIS, który teraz używa średniego promienia, zasadniczo używa 6371008.
Patrząc na kod
#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)
to znaczy
-- 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
Nowsze wersje są znacznie mniej wydajne, bardziej złożone i używają Pro4j, ale wydają się robić to samo.
Nadal skąd pochodzi 6370986?
źródło
(2*minorAxis+majorAxis)/3
... chociaż ta wartość dla WGS84 jest wciąż kilka metrów większa (6 371 008,771)Odpowiedzi:
Ok, to jest hilarriuusss . Wyśledziłem to. W starej kopii
lwgeom/lwgeom_spheroid.c
PostGIS 1.0.0rc4 możesz to zobaczyć,Przechodząc do dokumentów
earthdistance
, znajdziesz to:I ten numer na stałe:
EARTH_RADIUS
można go zobaczyć tutajMożesz zrobić prosty.
I masz swoje
6370986.884258304
. Oczywiście, po prostu skróć to i przechowuj w,long
ponieważ dlaczego nie.Zasadniczo promień w MySQL został usunięty z leniwego zadania kopiowania z PostGIS, które przekształciło promień w milach na metry z niejasnej stałej z losowego 20-letniego modułu PostgreSQL .
earth_distance
jest modułem pre-PostGIS autorstwa Bruce'a Momjiana. Ogłaszam 6370986 stałą Bmomjiana: dobre przybliżenie Ziemi w metrach dla zadowolenia MySQL. Chociaż może nie na długo.źródło