TSQL — География: какой полигон?

Используя SQL Server, когда я получаю результат 1 для выражения @multipolygon.STIntersects(@points), указывающий, что точка находится внутри одного из полигонов, составляющих мультиполигон

есть ли способ узнать, какой многоугольник внутри множества внутри мультиполигона на самом деле содержит точку?


person AAsk    schedule 10.11.2016    source источник
comment
Мультиполигон — это один объект, точно так же, как число 3 — это один объект. Кроме того, единственное, что отличает один полигон от другого, — это индекс в исходной спецификации. Как бы вы сами определили любой из полигонов? Если они идентифицируемы, их, вероятно, следует хранить в разных полях или строках, так же как элементы заказа должны храниться в отдельных OrderItem строках.   -  person Panagiotis Kanavos    schedule 10.11.2016


Ответы (2)


Я использовал что-то вроде этого раньше:

select *
from dbo.Numbers as n
where @point.STIntersects(@multipolygon.STGeometryN(n.Number)) = 1
   and n.Number <= @multipolygon.STNumGeometries();

Где dbo.Numbers - таблица подсчета. Этот запрос вернет отсчитываемый от 1 индекс совпадающих полигонов. Если вам нужны и сами полигоны, добавьте STGeometry(n.Number) в список выбора.

person Ben Thul    schedule 10.11.2016
comment
Спасибо. @multipolygon.STGeometry(n.Number) должен быть @multipolygon.STGeometryN(n.Number); похоже, это работает. - person AAsk; 20.12.2018

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

Я сам ничего подобного не делал, но эта ссылка может помочь https://social.msdn.microsoft.com/Forums/sqlserver/en-US/d99cef8e-d345-44ee-87e1-f9d4df851c35/multipolygon-results-split-to-polygons?forum=sqlspatial

person mendosi    schedule 10.11.2016