-
Tạo điểm của bạn bằng cách sử dụng
Point
các giá trị củaGeometry
kiểu dữ liệu trongMyISAM
bàn. Kể từ Mysql 5.7.5,InnoDB
bảng hiện nay cũng hỗ trợSPATIAL
chỉ số. -
Tạo một
SPATIAL
lập chỉ mục về những điểm này -
Sử dụng
MBRContains()
để tìm các giá trị: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)
hoặc trong MySQL 5.1
trở lên:
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
)
Thao tác này sẽ chọn tất cả các điểm gần trong ô (@lat +/- 10 km, @lon +/- 10km)
.
Đây thực sự không phải là một cái hộp, mà là một hình chữ nhật hình cầu:đoạn giới hạn kinh độ và vĩ độ của hình cầu. Hình này có thể khác với hình chữ nhật trơn trên Franz Joseph Land , nhưng khá gần với nó ở hầu hết những nơi có người ở.
-
Áp dụng bộ lọc bổ sung để chọn mọi thứ bên trong hình tròn (không phải hình vuông)
-
Có thể áp dụng bộ lọc tinh bổ sung để tính khoảng cách vòng tròn lớn (đối với khoảng cách lớn)