Tipe data untuk menyimpan lng / lat di MySQL


14

Saya menyimpan daftar besar poin lnt / lat di database MySQL. Saat ini ini adalah poin yang diproyeksikan untuk Inggris dalam M, tetapi dalam jangka panjang saya ingin memastikan bahwa saya dapat menyimpan koordinat poin untuk seluruh dunia. Jenis data apa yang harus saya gunakan?

Saya mulai menggunakan decimal(18,12), tetapi tidak yakin apakah ketepatan ini diperlukan atau apakah saya hanya dapat menggunakan float. Saya memasukkan kode saya, kalau-kalau ada hal lain yang harus saya pertimbangkan:

CREATE TABLE UKTest
(
lat FLOAT,
lng FLOAT
)

Saya cukup baru untuk SQL jadi saya tidak yakin apakah tipe data signifikan ketika menjalankan kueri. Saya berasumsi bahwa memori keseluruhan akan bervariasi berdasarkan tipe variabel. Apakah ada manfaat menggunakan basis data spasial di atas basis data MySQL dasar untuk jenis pekerjaan ini?

Jawaban:


16

Ini pertanyaan juga diminta pada StackOverlow .

Jawaban teratas menyarankan Ekstensi Spasial MySQL . Ada banyak tautan untuk bekerja dengan ekstensi ini di sini .

Jika Anda tidak ingin menggunakan tipe spasial dan Anda mendapatkan nilai dari unit GPS, atau layanan geocoding maka Anda dapat mencocokkan ketepatan desimal Anda dengan sumber data. Aturan umum adalah untuk menyimpan data ke akurasi dua tempat lebih besar dari yang Anda akan ditampilkan dalam suatu aplikasi.

Dalam contoh kode dari Google yang menampilkan titik pada peta, mereka menyatakan:

Saat Anda membuat tabel MySQL, Anda ingin memberi perhatian khusus pada atribut lat dan lng. Dengan kemampuan zoom Google Maps saat ini, Anda seharusnya hanya membutuhkan 6 digit presisi setelah desimal.

Untuk menjaga ruang penyimpanan yang diperlukan untuk tabel kami minimal, Anda dapat menentukan bahwa atribut lat dan lng adalah ukuran float (10,6). Itu akan membiarkan bidang menyimpan 6 digit setelah desimal, ditambah hingga 4 digit sebelum desimal, misalnya -123.456789 derajat

Saya tidak akan khawatir tentang perbedaan kinerja antara tipe numerik. Indeks yang layak akan memiliki efek yang jauh lebih besar.


+1 untuk jawaban yang bagus! Inilah yang akan saya katakan dan lakukan.
OptimizePrime

Terima kasih atas jawabannya - Saya telah membaca dokumentasi MySQL Spatial Extensions, tetapi bagaimana Anda mulai menggunakannya? Saya hanya memiliki DB DB default di GoDaddy; Saya tidak tahu harus mulai dari mana.
djq


1
Dan jawab diperbarui dengan tautan ke lebih banyak tautan
geografi

Mengapa 4 digit bilangan bulat?
Alix Axel

6

Kecuali Anda terikat ke MySQL untuk beberapa alasan lain, Anda harus benar-benar mempertimbangkan untuk menggunakan database yang diaktifkan secara spasial seperti postgis yang memiliki objek Point (dan Line, Polygon, dll) untuk menangani detail ini untuk Anda. Anda juga mendapatkan dukungan proyeksi ketika Anda membuat perubahan itu ke seluruh dunia.

2019 : Untuk orang-orang seperti saya yang juga tidak membaca komentar - MySQL mendukung tipe data spasial, konon lebih lambat, tanpa bukti.


Catatan: Bagi mereka yang baru dan membaca di atas, MySql 5.7+ sekarang bekerja dengan Indeks Spasial.
HopeKing

tetapi masih lambat
Ian Turton

Bisakah Anda membantu dengan sumber daya yang menunjukkan seberapa lambat? Saya sedang mempertimbangkan menggunakannya pada proyek dengan kurang dari satu juta catatan. Terima kasih.
Harapan

pengalaman pribadi tidak ada data publik. Terlalu banyak masalah dengan geometri yang tidak valid, dll.
Ian Turton

Terima kasih. Kebutuhan saya hanyalah jarak antara titik berdasarkan catatan basis data (dan tidak ada persyaratan kompleks seperti Polygon) - karena itu mungkin akan aman untuk menggunakan mysql untuk saat ini.
Harapan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.