Une version lente (sans index spatiaux) :
SELECT *
FROM mytable
WHERE MBRIntersects(mypolygon, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
Pour utiliser les index spatiaux, vous devez dénormaliser votre table afin que chaque sommet de polygone soit stocké dans son propre enregistrement.
Créez ensuite l'SPATIAL INDEX sur le champ qui contient les coordonnées des sommets et lancez simplement cette requête :
SELECT DISTINCT polygon_id
FROM vertices
WHERE MBRContains(vertex, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
Les choses seront beaucoup plus faciles si vous stockez UTM coordonnées dans votre base de données plutôt que la latitude et la longitude.