Eine langsame Version (ohne räumliche Indizes):
SELECT *
FROM mytable
WHERE MBRIntersects(mypolygon, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
Um die räumlichen Indizes nutzen zu können, müssen Sie Ihre Tabelle denormalisieren, sodass jeder Polygonscheitel in einem eigenen Datensatz gespeichert wird.
Erstellen Sie dann den SPATIAL INDEX
auf das Feld, das die Koordinaten der Scheitelpunkte enthält, und geben Sie einfach diese Abfrage ein:
SELECT DISTINCT polygon_id
FROM vertices
WHERE MBRContains(vertex, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
Die Dinge werden viel einfacher, wenn Sie UTM
speichern Koordinaten in Ihrer Datenbank statt Längen- und Breitengrad.