12.16.8 Функции пространственных операторов
OpenGIS предлагает ряд функций, которые могут создавать геометрии. Они предназначены для реализации пространственных операторов.
Эти функции поддерживают все комбинации типов аргументов, кроме тех, которые неприменимы в соответствии со спецификацией Open Geospatial Consortium.
Кроме того, в разделе 12.16.7 «Функции свойств геометрий» рассматриваются несколько функций, которые строят новые геометрии из существующих. Смотрите этот раздел для описания этих функций:
Доступны следующие функции пространственных операторов:
-
Buffer(g,d[,strategy1[,strategy2[,strategy3]]])ST_Buffer()иBuffer()являются синонимами. Дополнительную информацию см. в описанииST_Buffer().Buffer()устарела; ожидается её удаление в будущей версии MySQL. ИспользуйтеST_Buffer()вместо неё. -
ST_ConvexHull()иConvexHull()являются синонимами. Дополнительную информацию см. в описанииST_ConvexHull().ConvexHull()устарела; ожидается её удаление в будущей версии MySQL. ИспользуйтеST_ConvexHull()вместо неё. -
ST_Buffer(g,d[,strategy1[,strategy2[,strategy3]]])Возвращает геометрию, представляющую все точки, расстояние от которых до геометрического значения
gне превышает заданного расстоянияd, илиNULL, если любой из аргументов являетсяNULL. SRID аргумента геометрии должен быть 0, так какST_Buffer()поддерживает только декартову систему координат. Если какой-либо геометрический аргумент не является синтаксически корректной геометрией, возникает ошибка.Если геометрический аргумент пуст,
ST_Buffer()возвращает пустую геометрию.Если расстояние равно 0,
ST_Buffer()возвращает аргумент геометрии без изменений:mysql>
SET @pt = ST_GeomFromText('POINT(0 0)');mysql>SELECT ST_AsText(ST_Buffer(@pt, 0));+------------------------------+ | ST_AsText(ST_Buffer(@pt, 0)) | +------------------------------+ | POINT(0 0) | +------------------------------+ST_Buffer()поддерживает отрицательные расстояния для значенийPolygonиMultiPolygon, а также для геометрических коллекций, содержащих значенияPolygonилиMultiPolygon. Результатом может быть пустая геометрия. Возникает ошибка дляST_Buffer()с отрицательным расстоянием для значенийPoint,MultiPoint,LineStringиMultiLineString, а также для геометрических коллекций, не содержащих значенийPolygonилиMultiPolygon.ST_Buffer()допускает до трех необязательных аргументов стратегии после аргумента расстояния. Стратегии влияют на вычисление буфера. Эти аргументы представляют собой значения байтовых строк, созданные функциейST_Buffer_Strategy(), используемые для точечных, соединительных и конечных стратегий:Точечные стратегии применяются к геометриям
PointиMultiPoint. Если точечная стратегия не указана, по умолчанию используетсяST_Buffer_Strategy('point_circle', 32).Соединительные стратегии применяются к геометриям
LineString,MultiLineString,PolygonиMultiPolygon. Если соединительная стратегия не указана, по умолчанию используетсяST_Buffer_Strategy('join_round', 32).Конечные стратегии применяются к геометриям
LineStringиMultiLineString. Если конечная стратегия не указана, по умолчанию используетсяST_Buffer_Strategy('end_round', 32).
Может быть указана до одной стратегии каждого типа, и они могут быть заданы в любом порядке. Если указано несколько стратегий одного типа, возникает ошибка.
mysql>
SET @pt = ST_GeomFromText('POINT(0 0)');mysql>SET @pt_strategy = ST_Buffer_Strategy('point_square');mysql>SELECT ST_AsText(ST_Buffer(@pt, 2, @pt_strategy));+--------------------------------------------+ | ST_AsText(ST_Buffer(@pt, 2, @pt_strategy)) | +--------------------------------------------+ | POLYGON((-2 -2,2 -2,2 2,-2 2,-2 -2)) | +--------------------------------------------+mysql>
SET @ls = ST_GeomFromText('LINESTRING(0 0,0 5,5 5)');mysql>SET @end_strategy = ST_Buffer_Strategy('end_flat');mysql>SET @join_strategy = ST_Buffer_Strategy('join_round', 10);mysql>SELECT ST_AsText(ST_Buffer(@ls, 5, @end_strategy, @join_strategy))+---------------------------------------------------------------+ | ST_AsText(ST_Buffer(@ls, 5, @end_strategy, @join_strategy)) | +---------------------------------------------------------------+ | POLYGON((5 5,5 10,0 10,-3.5355339059327373 8.535533905932738, | | -5 5,-5 0,0 0,5 0,5 5)) | +---------------------------------------------------------------+ST_Buffer()иBuffer()являются синонимами. -
ST_Buffer_Strategy(strategy[,points_per_circle])Эта функция возвращает байтовую строку стратегии для использования с
ST_Buffer()для управления вычислением буфера. Если какой-либо аргумент являетсяNULL, возвращаемое значение являетсяNULL. Если какой-либо аргумент некорректен, возникает ошибка.Сведения о стратегиях доступны на сайте Boost.org.
Первый аргумент должен быть строкой, указывающей параметр стратегии:
Для точечных стратегий допустимые значения являются
'point_circle'и'point_square'.Для соединительных стратегий допустимые значения являются
'join_round'и'join_miter'.Для конечных стратегий допустимые значения являются
'end_round'и'end_flat'.
Если первый аргумент является
'point_circle','join_round','join_miter'или'end_round', аргументpoints_per_circleдолжен быть задан как положительное числовое значение. Максимальное значениеpoints_per_circleравно значению системной переменнойmax_points_in_geometry. Если первый аргумент является'point_square'или'end_flat', аргументpoints_per_circleне должен быть задан, иначе произойдёт ошибка.Примеры см. в описании
ST_Buffer(). -
Возвращает геометрию, представляющую выпуклую оболочку геометрического значения
g. Если аргумент являетсяNULL, возвращаемое значение являетсяNULL.Эта функция вычисляет выпуклую оболочку геометрии, сначала проверяя, являются ли точки вершин коллинеарными. Если это так, функция возвращает линейную оболочку, в противном случае - полигональную. Эта функция обрабатывает геометрические коллекции, извлекая все точки вершин всех компонентов коллекции, создавая из них значение
MultiPointи вычисляет его выпуклую оболочку. Если аргумент представляет собой пустую геометрическую коллекцию, возвращаемое значение являетсяNULL.mysql>
SET @g = 'MULTIPOINT(5 0,25 0,15 10,15 25)';mysql>SELECT ST_AsText(ST_ConvexHull(ST_GeomFromText(@g)));+-----------------------------------------------+ | ST_AsText(ST_ConvexHull(ST_GeomFromText(@g))) | +-----------------------------------------------+ | POLYGON((5 0,25 0,15 25,5 0)) | +-----------------------------------------------+ST_ConvexHull()иConvexHull()являются синонимами. -
Возвращает геометрию, представляющую разность множеств точек геометрических значений
g1иg2. Если любой аргумент являетсяNULL, возвращаемое значение являетсяNULL.mysql>
SET @g1 = Point(1,1), @g2 = Point(2,2);mysql>SELECT ST_AsText(ST_Difference(@g1, @g2));+------------------------------------+ | ST_AsText(ST_Difference(@g1, @g2)) | +------------------------------------+ | POINT(1 1) | +------------------------------------+ -
Возвращает геометрию, представляющую пересечение множеств точек геометрических значений
g1иg2. Если любой аргумент являетсяNULL, возвращаемое значение являетсяNULL.mysql>
SET @g1 = ST_GeomFromText('LineString(1 1, 3 3)');mysql>SET @g2 = ST_GeomFromText('LineString(1 3, 3 1)');mysql>SELECT ST_AsText(ST_Intersection(@g1, @g2));+--------------------------------------+ | ST_AsText(ST_Intersection(@g1, @g2)) | +--------------------------------------+ | POINT(2 2) | +--------------------------------------+ -
Возвращает геометрию, представляющую симметричную разность множеств точек геометрических значений
g1иg2, которая определяется как:g1symdifferenceg2:= (g1uniong2) difference (g1intersectiong2)Или, в обозначении вызова функции:
ST_SymDifference(
g1,g2) = ST_Difference(ST_Union(g1,g2), ST_Intersection(g1,g2))Если любой аргумент является
NULL, возвращаемое значение являетсяNULL.mysql>
SET @g1 = ST_GeomFromText('MULTIPOINT(5 0,15 10,15 25)');mysql>SET @g2 = ST_GeomFromText('MULTIPOINT(1 1,15 10,15 25)');mysql>SELECT ST_AsText(ST_SymDifference(@g1, @g2));+---------------------------------------+ | ST_AsText(ST_SymDifference(@g1, @g2)) | +---------------------------------------+ | MULTIPOINT((1 1),(5 0)) | +---------------------------------------+ -
Возвращает геометрию, представляющую объединение множеств точек геометрических значений
g1иg2. Если любой аргумент являетсяNULL, возвращаемое значение являетсяNULL.mysql>
SET @g1 = ST_GeomFromText('LineString(1 1, 3 3)');mysql>SET @g2 = ST_GeomFromText('LineString(1 3, 3 1)');mysql>SELECT ST_AsText(ST_Union(@g1, @g2));+--------------------------------------+ | ST_AsText(ST_Union(@g1, @g2)) | +--------------------------------------+ | MULTILINESTRING((1 1,3 3),(1 3,3 1)) | +--------------------------------------+
© 2025 Oracle
Licensed under the GPLv2 License.