Бавна версия (без пространствени индекси):
SELECT *
FROM mytable
WHERE MBRIntersects(mypolygon, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
За да използвате пространствените индекси, трябва да денормализирате вашата таблица, така че всеки многоъгълен връх да се съхранява в собствен запис.
След това създайте SPATIAL INDEX
в полето, което съдържа координатите на върховете и просто издайте тази заявка:
SELECT DISTINCT polygon_id
FROM vertices
WHERE MBRContains(vertex, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
Нещата ще бъдат много по-лесни, ако съхранявате UTM
координати във вашата база данни, а не географска ширина и дължина.