Una versione lenta (senza indici spaziali):
SELECT *
FROM mytable
WHERE MBRIntersects(mypolygon, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
Per utilizzare gli indici spaziali, devi denormalizzare la tua tabella in modo che ogni vertice del poligono sia memorizzato nel proprio record.
Quindi crea l'SPATIAL INDEX
sul campo che contiene le coordinate dei vertici e basta emettere questa query:
SELECT DISTINCT polygon_id
FROM vertices
WHERE MBRContains(vertex, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
Le cose saranno molto più facili se memorizzi UTM
coordinate nel database anziché latitudine e longitudine.