Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Struktur tabel untuk Data Geo Spasial

Simpan sebagai tipe data geometri . MySQL mendukung Geometry (generik), serta tipe data Point, Linestring dan Polygon, lihat membuat tipe data spasial . Nilai bujur atau lintang tunggal tidak dapat menjadi geometri sendiri, seperti yang Anda miliki di tangkapan layar Anda.

Jika Anda mengikuti rute menggunakan jenis geometri, ini memberi Anda dua keuntungan dibandingkan memiliki bidang garis lintang dan garis bujur yang terpisah:Anda dapat menambahkan indeks spasial dan Anda akan dapat menggunakan beberapa spasial MySQL fungsi operator seperti ST_Buffer, ST_Intersects, ST_Distance untuk melakukan analisis lebih lanjut. Indeks spasial didasarkan pada R-tree dan akan berkinerja jauh lebih baik daripada dua indeks B-tree pada kolom non spasial, lintang dan bujur -- dan perbedaan kinerja ini akan bertambah seiring dengan bertambahnya ukuran tabel Anda.

Anda masih bisa mendapatkan kembali nilai lintang dan bujur dengan menggunakan Fungsi titik X dan Y jadi Anda tidak akan kehilangan apapun dengan menyimpan data Anda sebagai Point.

Jika Anda sudah memiliki data dalam dua kolom lintang/bujur yang terpisah, dan Anda ingin pergi ke rute tipe data geometri/titik, Anda dapat menggunakan fungsi Titik untuk membuat tipe data Titik:

alter table mytable add column pt POINT;
update mytable set pt=Point(longitude, latitude);
alter table mytable modify pt POINT NOT NULL;
create spatial index ix_spatial_mytable_pt ON mytable(pt);

Perhatikan bahwa fungsi Point hanya diperkenalkan di MySQL 5.1.x (tidak didokumentasikan dengan baik, jadi saya tidak yakin dengan versi pastinya), dan sebelum itu Anda harus menggunakan concat dengan fungsi GeomFromText, lihat Memindahkan kolom teks lintang/bujur ke dalam kolom tipe 'titik' untuk beberapa informasi lebih lanjut tentang ini, meskipun perhatikan bahwa jawaban Quassnoi memiliki lon dan lat yang salah -- ini Point(lon, lat) bukan sebaliknya, meskipun ini adalah kesalahan yang sangat umum.

CATATAN: Sampai saat ini, Anda hanya dapat mengindeks kolom spasial jika menggunakan mesin MyISAM.

EDIT: Dalam rilis mendatang, MySQL 5.7 .5 , InnoDB akhirnya akan mendukung indeks pada tipe data spasial (dan tidak hanya menyimpan tipe spasial tanpa indeks, yang sangat kurang berguna). Ini berarti Anda dapat memiliki kunci asing, jaminan ACID, indeks spasial semua dalam satu mesin, yang telah lama datang.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengulang header kolom tabel di setiap halaman

  2. Tidak dapat terhubung ke MySQL melalui EF6 di Visual Studio 2013

  3. Berikan prioritas pada ORDER BY daripada GROUP BY di MySQL tanpa subquery

  4. Mysql:Konversi DB dari waktu lokal ke UTC

  5. Terbaik untuk menggunakan * saat memanggil banyak bidang di mysql?