Una versión lenta (sin índices espaciales):
SELECT *
FROM mytable
WHERE MBRIntersects(mypolygon, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
Para hacer uso de los índices espaciales, debe desnormalizar su tabla para que cada vértice de polígono se almacene en su propio registro.
Luego crea el SPATIAL INDEX
en el campo que contiene las coordenadas de los vértices y simplemente emita esta consulta:
SELECT DISTINCT polygon_id
FROM vertices
WHERE MBRContains(vertex, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
Las cosas serán mucho más fáciles si almacenas UTM
coordenadas en su base de datos en lugar de latitud y longitud.