Uma versão lenta (sem índices espaciais):
SELECT *
FROM mytable
WHERE MBRIntersects(mypolygon, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
Para fazer uso dos índices espaciais, você precisa desnormalizar sua tabela para que cada vértice do polígono seja armazenado em seu próprio registro.
Em seguida, crie o
SPATIAL INDEX
no campo que contém as coordenadas dos vértices e apenas emita esta consulta:SELECT DISTINCT polygon_id
FROM vertices
WHERE MBRContains(vertex, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
As coisas serão muito mais fáceis se você armazenar
UTM
coordenadas em seu banco de dados em vez de latitude e longitude.