Apakah MySQL menyimpan titik data sebagai LAT LNG atau LNG LAT?

9

Saya terbiasa melihat format lokasi sebagai garis lintang diikuti oleh garis bujur, tetapi menggunakan perpustakaan, saya yakin saya mengerti MySQL untuk menyimpannya sebagai POINT(LNG LAT), urutan terbalik. Apakah perpustakaan saya salah, atau ini format yang sebenarnya? Sepertinya saya tidak dapat menemukan detail ini di dokumentasi MySQL.

Lazlo
sumber
Anda mungkin dapat membaca ini: stackoverflow.com/questions/159255/…
codedawg82

Jawaban:

14

Sintaks Konstruktor

Mencari referensi fungsi spasial, Anda akan melihat

Point(x, y)
Constructs a Point using its coordinates

Ini tidak sepenuhnya benar. Semua implementasi GIS harus dilakukan (x,y)untuk koordinat yang diproyeksikan (long,lat). Tetapi, pada sistem kordinat geodidik ada beberapa ketidaksepakatan tentang apa yang harus dilakukan. MySQL (dan SQL Server) melakukan (lat,long)tetapi PostGIS mempertahankan di (long,lat)mana-mana.

Ini disentuh dalam spesifikasi Standar Implementasi OpenGIS® untuk informasi Geografis - Akses fitur sederhana - Bagian 2: opsi SQL ,

  • Untuk CRS geodetik yang memiliki sistem koordinat 2-D ellipsoidal, sumbu sistem koordinat ellipsoidal dua dimensi adalah lintang geodetik, positif ke utara, dan bujur geodetik, positif ke arah timur. Arah sumbu akan menjadi 'utara' dan 'timur'.
  • Untuk CRS geodetik yang memiliki sistem koordinat ellipsoidal tiga dimensi, nama dan singkatan sumbu horizontal dalam string WKT harus mengikuti persyaratan dalam (ii). Nama sumbu vertikal harus 'tinggi ellipsoidal'; singkatan sumbu vertikal harus 'h' dan harus dimasukkan ketika singkatan untuk sumbu horizontal dimasukkan.

Perhatikan kata-kata di atas ditemukan kata demi kata dalam informasi Geografis - Representasi teks yang terkenal dari sistem referensi koordinat

Bahkan sejauh spesifikasi 1.1,

Sistem referensi spasial, juga disebut sebagai sistem koordinat, adalah sistem geografis (garis lintang-bujur) , proyeksi (X, Y), atau sistem koordinat geosentris (X, Y, Z).

Yang mengatakan, tampaknya PostGIS dan Oracle dan banyak perpustakaan pihak ketiga mempertahankan (x,y,[z])untuk semua jenis poin. Ini melanggar spesifikasi untuk WKT, tetapi merupakan konvensi yang cukup umum. Misalnya GeoJSON juga melakukan ini,

Koordinat titik berada dalam urutan x, y (arah timur, utara untuk koordinat yang diproyeksikan, bujur, dan lintang untuk koordinat geografis)

Dan, (lat, panjang) pemesanan secara eksplisit ditentukan oleh EPSG untuk SRSID 4326 ,.

Sistem koordinat 2D atau 3D di mana posisi ditentukan oleh lintang geodetik, bujur geodetik, dan (dalam kasus tiga dimensi) tinggi ellipsoidal, digunakan dalam Geographic CRSs.

Anda juga dapat mempertimbangkan untuk memeriksa blog Paul Ramsey (Kapten PostGIS) mengenai hal ini yang berjudul, "Mari Panggil Seluruh Hal Ini"

Kebaikan

Sebagai catatan khusus, MySQL membawa dua fungsi baru ke dalam campuran,

Fungsi-fungsi ini berdiri di samping ST_X(), dan ST_Y()dan membutuhkan SRS geografis atau mereka mengeluarkan pengecualian dan kesalahan.

Penyimpanan

Dari dokumen

Secara internal, MySQL menyimpan nilai-nilai geometri dalam format yang tidak identik dengan format WKT atau WKB. (Format internal seperti WKB tetapi dengan 4 byte awal untuk menunjukkan SRID.)

Menyimpan didefinisikan di sini .

Table 11.1 WKB Components Example

Component       Size    Value
Byte order      1 byte  01
WKB type        4 bytes 01000000
X coordinate    8 bytes 000000000000F03F
Y coordinate    8 bytes 000000000000F0BF
Evan Carroll
sumber
0

Cara mudah untuk memeriksa pesanan adalah melewati batas lintang:

SELECT ST_Longitude(ST_SRID(POINT(45, 160), 4326));

Memberikan ERROR 3732 (22S03): Parameter fungsi st_srid berisi geometri dengan garis lintang 160.000000, yang berada di luar jangkauan. Itu harus dalam [-90.000000, 90.000000];

Berhati-hatilah bahwa pesanan dapat berubah tergantung pada fungsi yang Anda gunakan:

SELECT ST_Longitude(ST_SRID(POINT(45, 90), 4326));
SELECT ST_Longitude(ST_GeomFromText('POINT(45 90)', 4326));
nfroidure
sumber