Иногда бывает необходимо пересечь объекты в рамках одного слоя, к примеру получить список задвижек, расположенных на участках подчиняющихся какому либо признаку: один тип, режим, балансодержатель или диаметр.
Данную задачу можно решить с применением SQL запросов
SELECT distinct b.sys -- уникальные ID(sys) задвижек
From [Структура СТО Газпром]as a, [Структура СТО Газпром]as b
Where
a.typeid = 2 -- тип участки
and a.modeid = 1 -- 1 - режим участки высокого давления
and a.[Диаметр внутренний, м]>=0.1 --диаметр больше 100мм
and b.typeid = 7 -- 7 - тип задвижки
and a.geometry.STTouches(b.Geometry)-- участки высокого давления КАСАЮТСЯ задвижек
Сравнение пространственных объектов между собой
STDistance(<объект_сравнения>)
Возвращает расстояние между ближайшими точками сравниваемых объектов.
STEquals(<объект_сравнения>)
Выполняет сравнение пространственного объекта для которого вызвана функция с пространственным объектом <объект_сравнения>. Сравнение выполняется по типу объектов, размерам и положению в пространстве.
Возвращает 1 (True) если объекты равны и 0 (False) в обратном случае.
STDisjoint(<объект_взаимодействия>)
Проверяет отсутствие пересечений и касаний пространственного объекта для которого вызвана функция с пространственным объектом <объект_взаимодействия>.
Возвращает 1 (True) если <объект_взаимодействия> пространственно никак не накладывается, не пересекает и не касается данного объекта и 0 (False) в обратном случае.
STTouches(<объект_касания>)
Проверяет, не касается ли <объект_касания> пространственного объекта, для которого вызвана функция.
Возвращает 1 (True) в случае касания и 0 (False) в обратном случае.
STWithin(<объект_вхождения>)
Проверяет объект для которого вызвана функция на вхождение в пространственный объект <объект_вхождения>. Пространственный объект считается входящим в другой объект если все его точки лежат внутри границ другого объекта.
Возвращает 1 (True) в случае вхождения и 0 (False) в обратном случае.
STOverlaps(<объект_перекрытия>)
Проверяет, не перекрывает ли пространственный объект для которого вызвана функция, пространственный объект <объект_перекрытия>. Считается что один пространственный объект перекрывает другой если часть его точек лежит внутри границ второго объекта, а часть - снаружи.
STCrosses(<объект_пересечения>)
Проверяет пересекает ли пространственный объект для которого вызвана функция, объект <объект_пересечения>. Пересекать другие объекты могут пространственные объекты типов LineString и Point.
Пересечением считается случай в котором точки пересекающего объекта располагаются от одной границы пересекаемого объекта до другой, либо, в случае пересечения ломаной, достаточно расположения хотя бы одной точки пересекающего объекта на пересекаемой ломаной.
Возвращает 1 (True) в случае пересечения и 0 (False) в обратном случае.
STIntersects(<объект_взаимодействия>)
Проверяет пространственный объект для которого вызвана функция на пространственное взаимодействие с с объектом <объект_взаимодействия>. Взаимодействием считается касание, перекрытие, пересечение одного объекта другим и включение одного объекта в другой.
Возвращает 1 (True) в случае взаимодействия и 0 (False) в обратном случае.
STContains(<объект_вхождения>)
Проверяет, не включает ли пространственный объект для которого вызвана функция в себя пространственный объект <объект_вхождения>.
Возвращает 1 (True) в случае вхождения и 0 (False) в обратном случае.
STRelate(<объект_сравнения>,<матрица_сравнения>)
Выполняет сравнение пространственного объекта для которого вызывает функция с объектом <объект_сравнения> в соответствии с заданной матрицей сравнения <матрица_сравнения>.
Матрица сравнения является матрицей 3x3, в ячейках которой задается тип взаимодействия между внутренними областями, границами и внешними областями сравниваемых пространственных объектов. Матрица имеет вид, представленный таблицей (). Столбцы матрицы отвечают за один сравниваемый объект, строки - за другой.
В ячейках таблицы сравнения записывается какое количество измерений должно иметь взаимодействие соответствующих частей объектов:
- F- не должно быть взаимодействия;
- T- должно быть взаимодействие, количество измерений неважно;
- *- не имеет значения, есть ли взаимодействие или нет;
- 0, 1, 2- взаимодействие должно иметь указанное количество измерений.
В аргументе функции Relate матрица взаимодействия записывается в виде строки, в которой перечислены требуемые значения всех ячеек матрицы сравнения, слева-направо, сверху-внизу.
Например, для двух пространственных объектов a и b строка a.Relate(b, "TFFFTFFFT") аналогична строке a.Equals(b).