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/