Phiên bản chậm (không có chỉ mục không gian):
SELECT *
FROM mytable
WHERE MBRIntersects(mypolygon, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
Để sử dụng các chỉ mục không gian, bạn cần chuẩn hóa bảng của mình để mỗi đỉnh đa giác được lưu trữ trong bản ghi của chính nó.
Sau đó, tạo SPATIAL INDEX
trên trường chứa tọa độ của các đỉnh và chỉ cần đưa ra truy vấn này:
SELECT DISTINCT polygon_id
FROM vertices
WHERE MBRContains(vertex, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
Mọi thứ sẽ dễ dàng hơn nhiều nếu bạn lưu trữ UTM
tọa độ trong cơ sở dữ liệu của bạn thay vì vĩ độ và kinh độ.