Функции пространственных операций для ST_Geometry
Пространственные операции используют геометрические функции для получения пространственных данных в качестве входных, анализируют их и создают выходные данные, являющиеся результатом анализа входных.
Следующие операции могут быть выполнены для создания новых данных из входных данных.
Построение геометрии буфера
Функция ST_Buffer создает геометрию, окружая заданную геометрию на выбранном расстоянии. Результат в виде отдельного полигона получается, когда строится буфер для первичной геометрии, или когда буферные полигоны из набора близки достаточно, чтобы перекрываться. Если существует достаточное разделяющее расстояние между элементами из коллекции буферов, отдельные элементы буферов ST_Polygon объединяются в ST_MultiPolygon.
Функция ST_Buffer принимает как положительные, так и отрицательные расстояния, но буфер с отрицательным расстоянием может быть применен только к двухмерной геометрии (ST_Polygon и ST_MultiPolygon). Абсолютное значение буферного расстояния используется, когда исходная геометрия имеет размерность меньше 2; другими словами, во всех случаях, кроме ST_Polygon или ST_MultiPolygon. Обобщая, положительные буферные расстояния создают полигональные кольца, которые находятся дальше от центра исходной геометрии и - для внешнего кольца объекта ST_Polygon или ST_MultiPolygon - ближе к центру, если расстояние отрицательное. Для внутренних колец ST_Polygon или ST_MultiPolygon, буферное кольцо находится ближе к центру исходной геометрии, если расстояние положительное, и дальше от центра, если расстояние отрицательное. Процесс построения буфера выполняет слияние полигонов, которые перекрываются. Отрицательные расстояния, которые составляют более чем половину максимальной ширины полигона, дают в результате пустую геометрию.
![]() |
В разделе ST_Buffer можно увидеть синтаксис и пример использования.
ConvexHull
Функция ST_ConvexHull возвращает выпуклую оболочку полигона для любой геометрии, имеющей как минимум 3 вершины, формирующие выпуклую форму. Если вершины геометрии не формируют выпуклую форму, ST_ConvexHull возвращает null. Например, использование ST_ConvexHull для линии, состоящей из двух вершин, вернет null. Аналогично, использование операции ST_ConvexHull для точечного объекта вернет null. Создание выпуклой оболочки часто является первым шагом при составлении мозаики из набора точек для создания нерегулярной триангуляционной сети (TIN).
В разделе ST_ConvexHull можно увидеть синтаксис и пример использования.
Разность геометрий
Функция ST_Difference возвращает часть основной геометрии, которая не пересекается второй геометрией - логическое AND NOT в пространстве. Функция ST_Difference работает только для геометрий с одинаковыми размерностями и возвращает набор с той же размерностью, что и исходные геометрии. В случае если исходные геометрии совпадают, возвращается пустая геометрия.
![Примечание Примечание](rsrc/note.png)
На следующих четырех диаграммах первая входная геометрия показана черным цветом, а вторая входная геометрия - оранжевым.
![]() |
В разделе ST_Difference можно увидеть синтаксис и пример использования.
Пересечение геометрий
Функция ST_Intersection возвращает пересечение двух геометрий. Пересечение всегда возвращается, как набор, имеющий минимальную размерность из размерностей входных геометрий. Например, для ST_LineString, которая пересекает ST_Polygon, функция ST_Intersection возвращает ту часть ST_LineString, которая является общей с внутренней частью и границей ST_Polygon, как объект ST_MultiLineString. Объект ST_MultiLineString содержит более чем один элемент ST_LineString, если исходный ST_LineString пересекает исходный ST_Polygon в двух или более отдельных (не непрерывных) сегментах. Если геометрии не пересекаются, или результат пересечения имеет размерность меньше, чем обе исходные геометрии, то возвращается пустая геометрия. Следующий рисунок иллюстрирует некоторые примеры функции ST_Intersection.
![]() |
Функция ST_Intersection возвращает набор пересечения, как геометрию, имеющую минимальную размерность из размерностей входных геометрий. |
Симметричная разность геометрий
Функция ST_SymmetricDiff возвращает симметричную разность двух геометрий - логическое XOR в пространстве. Входные геометрии должны иметь одинаковую размерность. Если геометрии совпадают, функция ST_SymmetricDiff вернет пустую геометрию; в противном случае, функция вернет результат в виде набора.
![]() |
Функция ST_SymmetricDiff возвращает те части входных геометрий, которые не являются частью набора пересечения. Входные геометрии должны иметь одинаковую размерность. |
В разделе ST_SymmetricDiff можно увидеть синтаксис и пример использования.
Объединение геометрий
Функция ST_Union возвращает объединение двух геометрий - логическое булево OR в пространстве. Входные геометрии должны иметь одинаковую размерность. ST_Union всегда возвращает результат в виде набора.
![]() |
Функция ST_Union возвращает объединение двух геометрий. |
В разделе ST_Union можно увидеть синтаксис и пример использования.
Минимальное расстояние
Предыдущие функции вернули новые геометрии. Функция ST_Distance получает два объекта в качестве входных данных и возвращает минимальное расстояние между ними.
Минимальное расстояние, разделяющее объекты, представляет собой кратчайшее расстояние между двумя положениями (по прямой). Это не то расстояние, которое вы преодолеете, передвигаясь на машине из одной точки в другую, а то расстояние, которое вы сможете посчитать, прочертив прямую линию между двумя точками на карте. Функция ST_Distance выдает минимальное расстояние, разделяющее две несмежные геометрии. Если геометрии не являются несмежными (другими словами, они совпадают), функция выдает нулевое минимальное расстояние.
![]() |
Агрегирование
Функции агрегации возвращают отдельную геометрию, как результат выполнения анализа для набора геометрий. Функция ST_Aggr_ConvexHull возвращает мультиполигон, составленный из выпуклых оболочек полигонов каждой из входных геометрий. Любая входная геометрия, у которой будет меньше трех вершин, не будет иметь выпуклой оболочки. Если все входные геометрии имеют менее трех вершин, то функция ST_Aggr_ConvexHull вернет null.
Функция ST_Aggr_Intersection возвращает отдельную геометрию, которая является агрегацией пересечений всех входных геометрий. Запрос может обнаружить некоторое число пересекающихся объектов. Если вы использовали оператор ST_Intersection, будет возвращено множество объектов, представляющих пересечение каждого набора геометрий. Например, если вы выполняли пересечение линейного и точечного классов объектов, для каждого пересечения будет возвращена одна геометрия ST_Point.
Используя вместо этого оператор ST_Aggr_Intersection, вы получите один набор геометрий. Например, если вам нужно получить одну геометрию, представляющую пересечение линейного и точечного классов объектов, упомянутых ранее, ST_Aggr_Intersection вернет одну геометрию ST_MultiPoint, составленную из всех точек пересечения. Однако если пересекаются одна точка и одна линия, вы получите одну геометрию ST_Point.
ST_Aggr_Intersection позволяет вам найти пересечение множества геометрий, в то время как ST_Intersection находит пересечение только между двумя геометриями. Например, если вы хотите найти объект недвижимости, который принадлежит различным специальным сервисам, таким, как заданный район школы, телефонный сервис, и высокоскоростной Интернет-провайдер, и представляется определенным членом совета, вам необходимо найти пересечение всех этих областей. Нахождение пересечений только двух из этих областей не даст всей необходимой информации, поэтому вам необходимо использовать функцию sde.ST_Aggr_Intersection, чтобы все эти области могли быть оценены в одном запросе.
Функция ST_Aggr_Union возвращает одну геометрию, которая является объединением всех заданных геометрий. Входные геометрии должны быть одного типа; например, вы можете объединить объекты ST_LineString с объектами ST_LineString, или объекты ST_Polygon с объектами ST_Polygon, но не можете объединить класс объектов ST_LineString с классом объектов ST_Polygon. Геометрия, которая является результатом объединения агрегации, обычно представляет собой набор. Например, если вы хотите агрегировать объединение всех свободных участков с площадью менее половины акра, геометрия, которая будет получена, будет мультиполигоном. В случае если все удовлетворяющие критерию участки являются смежными, будет возвращен один полигон.