Wolna wersja (bez indeksów przestrzennych):
SELECT *
FROM mytable
WHERE MBRIntersects(mypolygon, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
Aby skorzystać z indeksów przestrzennych, musisz zdenormalizować swoją tabelę, aby każdy wierzchołek wielokąta był przechowywany we własnym rekordzie.
Następnie utwórz SPATIAL INDEX
na polu zawierającym współrzędne wierzchołków i po prostu wydaj to zapytanie:
SELECT DISTINCT polygon_id
FROM vertices
WHERE MBRContains(vertex, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
Sprawy będą znacznie prostsze, jeśli przechowujesz UTM
współrzędne w Twojej bazie danych, a nie szerokość i długość geograficzna.