MySQL mengatakan dalam dokumen untuk ST_Distance_Sphere
Perhitungan menggunakan bumi bulat dan radius yang dapat dikonfigurasi. Argumen radius opsional harus diberikan dalam meter. Jika dihilangkan, jari-jari standar adalah 6.370.986 meter. Jika argumen radius hadir tetapi tidak positif,
ER_WRONG_ARGUMENTS
kesalahan terjadi.
PostGIS mengatakan dalam dokumen ST_Distance_Sphere
, (meskipun dokumen tidak akurat lagi )
Menggunakan bumi bulat dan radius 6370986 meter.
Dari mana mereka mendapatkan standar 6.370.996 meter dari? WGS84 mengatakan jari-jari poros utama adalah 6.378.137,0 m. PostGIS yang sekarang menggunakan Radius Rata-rata pada dasarnya menggunakan 6371008.
Melihat kodenya
#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)
itu berarti
-- 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
Versi yang lebih baru jauh lebih efisien, lebih kompleks, dan menggunakan Pro4j tetapi mereka tampaknya melakukan hal yang sama.
Masih dari mana 6370986 berasal?
sumber
(2*minorAxis+majorAxis)/3
... meskipun nilai WGS84 masih beberapa meter lebih besar (6.371.008.771)Jawaban:
Ok, ini hilarriuusss . Saya melacak ini. Dalam salinan lama
lwgeom/lwgeom_spheroid.c
di PostGIS 1.0.0rc4 Anda dapat melihat ini,Pindah ke dokumen
earthdistance
, Anda akan menemukan ini:Dan nomor terprogram itu:
EARTH_RADIUS
bisa dilihat di siniJadi Anda bisa melakukan yang sederhana.
Dan Anda punya
6370986.884258304
. Tentu saja, cukup potong saja dan simpan dilong
karna mengapa tidak.Jadi pada intinya, jari-jari di MySQL diangkat dari malas-salin-pekerjaan dari PostGIS yang mengkonversi radius dalam mil ke meter dari konstanta tidak jelas dari modul PostgreSQL berusia 20 tahun acak .
earth_distance
adalah modul pra-PostGIS oleh Bruce Momjian. Dengan ini saya menyatakan 6370986 Konstanta Bmomjian: perkiraan Bumi yang baik dalam meter untuk memuaskan MySQL. Meskipun mungkin tidak lama.sumber