Spec-Zone.ru › MySQL 5.7

12.16.8 Функции пространственных операторов

OpenGIS предлагает ряд функций, которые могут создавать геометрии. Они предназначены для реализации пространственных операторов.

Эти функции поддерживают все комбинации типов аргументов, кроме тех, которые неприменимы в соответствии со спецификацией Open Geospatial Consortium.

Кроме того, в разделе 12.16.7 «Функции свойств геометрий» рассматриваются несколько функций, которые строят новые геометрии из существующих. Смотрите этот раздел для описания этих функций:

  • ST_Envelope(g)

  • ST_StartPoint(ls)

  • ST_EndPoint(ls)

  • ST_PointN(ls, N)

  • ST_ExteriorRing(poly)

  • ST_InteriorRingN(poly, N)

  • ST_GeometryN(gc, N)

Доступны следующие функции пространственных операторов:

  • Buffer(g, d [, strategy1 [, strategy2 [, strategy3]]])

    ST_Buffer() и Buffer() являются синонимами. Дополнительную информацию см. в описании ST_Buffer().

    Buffer() устарела; ожидается её удаление в будущей версии MySQL. Используйте ST_Buffer() вместо неё.

  • ConvexHull(g)

    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().

  • ST_ConvexHull(g)

    Возвращает геометрию, представляющую выпуклую оболочку геометрического значения 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() являются синонимами.

  • ST_Difference(g1, g2)

    Возвращает геометрию, представляющую разность множеств точек геометрических значений 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)                         |
    +------------------------------------+
    
  • ST_Intersection(g1, g2)

    Возвращает геометрию, представляющую пересечение множеств точек геометрических значений 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)                           |
    +--------------------------------------+
    
  • ST_SymDifference(g1, g2)

    Возвращает геометрию, представляющую симметричную разность множеств точек геометрических значений g1 и g2, которая определяется как:

    g1 symdifference g2 := (g1 union g2) difference (g1 intersection g2)
    

    Или, в обозначении вызова функции:

    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))               |
    +---------------------------------------+
    
  • ST_Union(g1, g2)

    Возвращает геометрию, представляющую объединение множеств точек геометрических значений 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/spatial-operator-functions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API