Anda harus menyimpan poin dalam satu kolom tipe data Point
yang dapat Anda indeks dengan SPATIAL
index (jika tipe tabel Anda adalah MyISAM
):
CREATE SPATIAL INDEX sx_place_location ON place (location)
SELECT *
FROM mytable
WHERE MBRContains
(
LineString
(
Point($x - $radius, $y - $radius),
Point($x + $radius, $y + $radius)
)
location
)
AND Distance(Point($x, $y), location) <= $radius
Ini akan secara drastis meningkatkan kecepatan kueri seperti "temukan semua dalam radius tertentu".
Perhatikan bahwa lebih baik menggunakan TM
biasa koordinat metrik (timur dan utara) bukan kutub (lintang dan bujur). Untuk jari-jari kecil, mereka cukup akurat, dan perhitungannya sangat disederhanakan. Jika semua titik Anda berada dalam satu hemishpere dan jauh dari kutub, Anda dapat menggunakan satu meridian pusat.
Anda masih dapat menggunakan koordinat kutub tentunya, tetapi rumus untuk menghitung MBR
dan jaraknya akan lebih kompleks.