Пространственный запрос (найти точки в многоугольнике) ничего не возвращает, когда должен

Плакат первый раз! У меня есть определенный замкнутый многоугольник с набором координат, которые я нарисовал на картах Google и определил в SQL-запросе. У меня есть база данных, которая содержит атрибут формы (я не уверен, что это геометрический или географический тип, но я как бы пробовал оба).

Я пытаюсь получить все записи в таблице базы данных, где фигура находится внутри многоугольника (координаты широты и долготы тоже будут в порядке). Я ничего не получаю, когда внутри многоугольника и за его пределами есть точки. Запуск WHERE @g.STIntersects(Shape) = 0 тоже ничего не извлекает, поэтому я уверен, что это не проблема ориентации кожуры.

Я использую SQL Server 2012. Я пробовал ST Содержит и ST Intersects, а также пытался взять необработанные координаты, добавив новый столбец геометрических точек из широты и долготы и наблюдая, пересекаются ли они с моим многоугольником, но возникает та же проблема . Различные другие сообщения были похожи, но не затрагивали корень моей проблемы.

DECLARE @g geometry = geometry::STGeomFromText('polygon ((
-123 45, 
... 
-123 44
-123 45 ))', 4326);

SELECT *
FROM [Database file].[schema name].[table name]
WHERE @g.STIntersects(Shape) = 1

Я должен получить список точек, которые находятся внутри многоугольника, и я ничего не получаю, хотя ручная проверка координат показывает, что некоторые точки находятся в многоугольнике, а некоторые нет.


person bassboink    schedule 02.07.2019    source источник


Ответы (1)


Я понял, в чем проблема: очевидно, что SRID шейп-файлов, которые были в моей базе данных, был не 4326, а каким-то другим странным значением. Из-за этого функция STIntersects возвращала NULL для всего, а не 0 или 1.

Я обещаю, что потратил гораздо больше времени на проблему, прежде чем опубликовать, чем час, который потребовался мне после моего поста, чтобы понять это самостоятельно.

person bassboink    schedule 02.07.2019