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.