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

Pilih semua titik geospasial di dalam kotak pembatas

Agaknya item x dan y dalam data POINT Anda di geometry kolom dalam derajat lintang dan bujur.

Untuk melakukan pencarian ini secara efisien di MySQL, Anda memerlukan beberapa hal.

  • Tabel MyISAM (atau MySQL Versi 5.7 dan lebih tinggi dan InnoDB atau MyISAM)
  • Kualifikasi NOT NULL pada kolom geometri Anda
  • Indeks spasial ALTER TABLE flags ADD SPATIAL INDEX (coordinates)
  • Kode untuk membuat representasi tekstual dari persegi panjang yang ingin Anda telusuri
  • Penggunaan fungsi GeomFromText dan MBRContains / MBRWithin dalam pernyataan SELECT Anda.

Misalkan kotak lat/long Anda adalah persegi panjang satu derajat dengan luas berpusat di sekitar Katedral Winchester (51.0606, -1.3131) . Anda membutuhkan kotak pembatas di sekitar titik itu. Kueri MySQL ini akan menghasilkan LINESTRING (teks) untuk garis yang melintasi kotak pembatas itu secara diagonal.

SELECT 
       CONCAT('LINESTRING(',
              latitude-0.5,' ',longitude-0.5,
              ',', 
              latitude+0.5 ,' ',longitude +0.5,
              ')') AS box
   FROM (
      SELECT 51.0606 AS latitude, -1.3131 AS longitude
   ) AS coord

Kueri memberi Anda ini:

LINESTRING(50.5606 -1.8131,51.5606 -0.8131)

Anda juga dapat menggunakan pemrosesan string dalam bahasa host untuk menghasilkan jenis string teks yang serupa. Format yang Anda butuhkan adalah ini.

 LINESTRING(lat1 long1, lat2 long2) 

Kemudian Anda dapat menggunakannya untuk mencari tabel spasial Anda sebagai berikut:

SELECT whatever, whatever 
  FROM flags
 WHERE MBRContains(
        GeomFromText( 'LINESTRING(50.5606 -1.8131,51.5606 -0.8131)' ),
        flags.coordinates)     

Ini akan mengeksploitasi indeks spasial dan menemukan setiap baris flags yang koordinatnya terletak di dalam kotak pembatas dari garis diagonal tersebut.

Berikut beberapa dokumentasi .

Jika flags . Anda tabel berisi kurang dari beberapa ratus ribu baris, Anda mungkin menemukan bahwa tabel biasa (bukan tabel spasial) dengan kolom lintang dan bujur (tipe data FLOAT, diindeks) berfungsi dengan baik dan lebih mudah untuk dikembangkan dan di-debug.

Saya telah menulis tutorial tentang teknik itu. http://www.plumislandmedia.net/mysql/haversine-mysql- lokasi terdekat/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menyimpan tanda tangan di MySQL

  2. Masalah C# MySqlParameter

  3. Berapa banyak tabel yang dapat dibuat dalam database mysql?

  4. Cara Menggunakan MySql Di Mac

  5. Cara mudah menghasilkan kolom nama siput dari kolom nama?