Spec-Zone.ru › MySQL 9.2

14.16.7.4 Функции свойств многоугольников и полигонов

Функции в этом разделе возвращают свойства значений Polygon или MultiPolygon.

Если не указано иное, функции в этом разделе обрабатывают свои аргументы геометрии следующим образом:

  • Если какой-либо аргумент является NULL или какой-либо аргумент геометрии является пустой геометрией, возвращаемое значение равно NULL.

  • Если какой-либо аргумент геометрии не является синтаксически правильной геометрией, возникает ошибка.

  • Если какой-либо аргумент геометрии является синтаксически правильной геометрией в неопределенной системе пространственной привязки (SRS), возникает ошибка.

  • Для функций, принимающих несколько аргументов геометрии, если эти аргументы не находятся в одной и той же системе SRS, возникает ошибка.

  • В противном случае возвращаемое значение является ненулевым NULL.

Эти функции доступны для получения свойств многоугольников:

  • ST_Area({poly|mpoly})

    Возвращает число с двойной точностью, указывающее площадь Polygon или MultiPolygon аргумента, измеренную в его системе пространственной привязки.

    ST_Area() обрабатывает свои аргументы, как описано во введении к этому разделу, за исключением следующих случаев:

    • Если геометрия геометрически неверна, результат — неопределённая площадь (то есть любое число) или возникает ошибка.

    • Если геометрия верна, но не является объектом Polygon или MultiPolygon, возникает ошибка.

    • Если геометрия является допустимым Polygon в декартовой системе SRS, результатом является декартова площадь многоугольника.

    • Если геометрия является допустимым MultiPolygon в декартовой системе SRS, результатом является сумма декартовых площадей многоугольников.

    • Если геометрия является допустимым Polygon в географической системе SRS, результатом является геодезическая площадь многоугольника в этой системе SRS в квадратных метрах.

    • Если геометрия является допустимым MultiPolygon в географической системе SRS, результатом является сумма геодезических площадей многоугольников в этой системе SRS в квадратных метрах.

    • Если вычисление площади приводит к +inf, возникает ошибка.

    • Если геометрия имеет географическую систему SRS с долготой или широтой, выходящей за пределы диапазона, возникает ошибка:

      • Если значение долготы не находится в диапазоне (−180, 180], возникает ошибка.

      • Если значение широты не находится в диапазоне [−90, 90], возникает ошибка.

      Указанные диапазоны приведены в градусах. Точные пределы диапазона несколько отличаются из-за арифметики с плавающей запятой.

    mysql> SET @poly =
           'Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))';
    mysql> SELECT ST_Area(ST_GeomFromText(@poly));
    +---------------------------------+
    | ST_Area(ST_GeomFromText(@poly)) |
    +---------------------------------+
    |                               4 |
    +---------------------------------+
    
    mysql> SET @mpoly =
           'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))';
    mysql> SELECT ST_Area(ST_GeomFromText(@mpoly));
    +----------------------------------+
    | ST_Area(ST_GeomFromText(@mpoly)) |
    +----------------------------------+
    |                                8 |
    +----------------------------------+
    
  • ST_Centroid({poly|mpoly})

    Возвращает математический центр Polygon или MultiPolygon аргумента в качестве Point. Результат не гарантируется для нахождения на MultiPolygon.

    Эта функция обрабатывает коллекции геометрий, вычисляя центральную точку для компонентов наивысшей размерности в коллекции. Такие компоненты извлекаются и формируются в одну MultiPolygon, MultiLineString или MultiPoint для вычисления центра.

    ST_Centroid() обрабатывает свои аргументы, как описано во введении к этому разделу, за исключением следующих случаев:

    • Возвращаемое значение — NULL для дополнительного условия, что аргументом является пустая коллекция геометрий.

    • Если геометрия имеет значение SRID для географической системы пространственной привязки (SRS), возникает ошибка.

    mysql> SET @poly =
           ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))');
    mysql> SELECT ST_GeometryType(@poly),ST_AsText(ST_Centroid(@poly));
    +------------------------+--------------------------------------------+
    | ST_GeometryType(@poly) | ST_AsText(ST_Centroid(@poly))              |
    +------------------------+--------------------------------------------+
    | POLYGON                | POINT(4.958333333333333 4.958333333333333) |
    +------------------------+--------------------------------------------+
    
  • ST_ExteriorRing(poly)

    Возвращает внешний контур значения Polygon poly в качестве LineString.

    ST_ExteriorRing() обрабатывает свои аргументы, как описано во введении к этому разделу.

    mysql> SET @poly =
           'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
    mysql> SELECT ST_AsText(ST_ExteriorRing(ST_GeomFromText(@poly)));
    +----------------------------------------------------+
    | ST_AsText(ST_ExteriorRing(ST_GeomFromText(@poly))) |
    +----------------------------------------------------+
    | LINESTRING(0 0,0 3,3 3,3 0,0 0)                    |
    +----------------------------------------------------+
    
  • ST_InteriorRingN(poly, N)

    Возвращает N-ый внутренний контур значения Polygon poly в качестве LineString. Номера контуров начинаются с 1.

    ST_InteriorRingN() обрабатывает свои аргументы, как описано во введении к этому разделу.

    mysql> SET @poly =
           'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
    mysql> SELECT ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1));
    +-------------------------------------------------------+
    | ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1)) |
    +-------------------------------------------------------+
    | LINESTRING(1 1,1 2,2 2,2 1,1 1)                       |
    +-------------------------------------------------------+
    
  • ST_NumInteriorRing(poly), ST_NumInteriorRings(poly)

    Возвращает количество внутренних контуров в значении Polygon poly.

    ST_NumInteriorRing() и ST_NuminteriorRings() обрабатывают свои аргументы, как описано во введении к этому разделу.

    mysql> SET @poly =
           'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
    mysql> SELECT ST_NumInteriorRings(ST_GeomFromText(@poly));
    +---------------------------------------------+
    | ST_NumInteriorRings(ST_GeomFromText(@poly)) |
    +---------------------------------------------+
    |                                           1 |
    +---------------------------------------------+
    

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/gis-polygon-property-functions.html

Spec-Zone.ru

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