-
Buat poin Anda menggunakan
Point
nilaiGeometry
tipe data diMyISAM
meja. Mulai Mysql 5.7.5,InnoDB
tabel sekarang juga mendukungSPATIAL
indeks. -
Buat
SPATIAL
indeks pada titik-titik ini -
Gunakan
MBRContains()
untuk menemukan nilai:SELECT * FROM table WHERE MBRContains(LineFromText(CONCAT( '(' , @lon + 10 / ( 111.1 / cos(RADIANS(@lat))) , ' ' , @lat + 10 / 111.1 , ',' , @lon - 10 / ( 111.1 / cos(RADIANS(@lat))) , ' ' , @lat - 10 / 111.1 , ')' ) ,mypoint)
, atau, di MySQL 5.1
dan di atasnya:
SELECT *
FROM table
WHERE MBRContains
(
LineString
(
Point (
@lon + 10 / ( 111.1 / COS(RADIANS(@lat))),
@lat + 10 / 111.1
),
Point (
@lon - 10 / ( 111.1 / COS(RADIANS(@lat))),
@lat - 10 / 111.1
)
),
mypoint
)
Ini akan memilih semua titik kira-kira di dalam kotak (@lat +/- 10 km, @lon +/- 10km)
.
Ini sebenarnya bukan kotak, tetapi persegi panjang bulat:garis lintang dan garis bujur yang terikat segmen bola. Ini mungkin berbeda dari persegi panjang polos di Franz Joseph Land , tetapi cukup dekat dengannya di sebagian besar tempat berpenghuni.
-
Terapkan pemfilteran tambahan untuk memilih semua yang ada di dalam lingkaran (bukan persegi)
-
Mungkin menerapkan pemfilteran halus tambahan untuk memperhitungkan jarak lingkaran besar (untuk jarak yang jauh)