Spec-Zone.ru › MySQL 8.4

14.16.7.3 Функции свойств LineString и MultiLineString

Значение LineString состоит из значений Point. Вы можете извлечь определённые точки LineString, подсчитать количество точек, которые оно содержит, или получить его длину.

Некоторые функции в этом разделе также работают со значениями MultiLineString.

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

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

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

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

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

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

  • ST_EndPoint(ls)

    Возвращает Point, являющуюся конечной точкой значения LineString ls.

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

    mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT ST_AsText(ST_EndPoint(ST_GeomFromText(@ls)));
    +----------------------------------------------+
    | ST_AsText(ST_EndPoint(ST_GeomFromText(@ls))) |
    +----------------------------------------------+
    | POINT(3 3)                                   |
    +----------------------------------------------+
    
  • ST_IsClosed(ls)

    Для значения LineString ls, ST_IsClosed() возвращает 1, если ls замкнуто (то есть его значения ST_StartPoint() и ST_EndPoint() совпадают).

    Для значения MultiLineString ls, ST_IsClosed() возвращает 1, если ls замкнуто (то есть значения ST_StartPoint() и ST_EndPoint() совпадают для каждого элемента LineString в ls).

    ST_IsClosed() возвращает 0, если ls не замкнуто, и NULL, если ls является NULL.

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

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

    mysql> SET @ls1 = 'LineString(1 1,2 2,3 3,2 2)';
    mysql> SET @ls2 = 'LineString(1 1,2 2,3 3,1 1)';
    
    mysql> SELECT ST_IsClosed(ST_GeomFromText(@ls1));
    +------------------------------------+
    | ST_IsClosed(ST_GeomFromText(@ls1)) |
    +------------------------------------+
    |                                  0 |
    +------------------------------------+
    
    mysql> SELECT ST_IsClosed(ST_GeomFromText(@ls2));
    +------------------------------------+
    | ST_IsClosed(ST_GeomFromText(@ls2)) |
    +------------------------------------+
    |                                  1 |
    +------------------------------------+
    
    mysql> SET @ls3 = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';
    
    mysql> SELECT ST_IsClosed(ST_GeomFromText(@ls3));
    +------------------------------------+
    | ST_IsClosed(ST_GeomFromText(@ls3)) |
    +------------------------------------+
    |                                  0 |
    +------------------------------------+
    
  • ST_Length(ls [, unit])

    Возвращает число двойной точности, указывающее длину значения LineString или MultiLineString ls в его связанной системе пространственных ссылок. Длина значения MultiLineString равна сумме длин его элементов.

    ST_Length() вычисляет результат следующим образом:

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

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

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

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

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

    • Если геометрия не является LineString или MultiLineString, возвращаемое значение равно NULL.

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

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

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

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

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

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

    ST_Length() допускает необязательный аргумент unit, который указывает линейную единицу для возвращаемого значения длины. Применяются эти правила:

    • Если единица указана, но не поддерживается MySQL, возникает ошибка.

    • Если указана поддерживаемая линейная единица, а SRID равен 0, возникает ошибка.

    • Если указана поддерживаемая линейная единица, а SRID не равен 0, результат будет в этой единице.

    • Если единица не указана, результат будет в единице системы SRS геометрий, будь то декартова или географическая. В настоящее время все системы SRS MySQL выражены в метрах.

    Единица поддерживается, если она найдена в таблице INFORMATION_SCHEMA ST_UNITS_OF_MEASURE. См. Раздел 28.3.37, «Таблица INFORMATION_SCHEMA ST_UNITS_OF_MEASURE».

    mysql> SET @ls = ST_GeomFromText('LineString(1 1,2 2,3 3)');
    mysql> SELECT ST_Length(@ls);
    +--------------------+
    | ST_Length(@ls)     |
    +--------------------+
    | 2.8284271247461903 |
    +--------------------+
    
    mysql> SET @mls = ST_GeomFromText('MultiLineString((1 1,2 2,3 3),(4 4,5 5))');
    mysql> SELECT ST_Length(@mls);
    +-------------------+
    | ST_Length(@mls)   |
    +-------------------+
    | 4.242640687119286 |
    +-------------------+
    
    mysql> SET @ls = ST_GeomFromText('LineString(1 1,2 2,3 3)', 4326);
    mysql> SELECT ST_Length(@ls);
    +-------------------+
    | ST_Length(@ls)    |
    +-------------------+
    | 313701.9623204328 |
    +-------------------+
    mysql> SELECT ST_Length(@ls, 'metre');
    +-------------------------+
    | ST_Length(@ls, 'metre') |
    +-------------------------+
    |       313701.9623204328 |
    +-------------------------+
    mysql> SELECT ST_Length(@ls, 'foot');
    +------------------------+
    | ST_Length(@ls, 'foot') |
    +------------------------+
    |     1029205.9131247795 |
    +------------------------+
    
  • ST_NumPoints(ls)

    Возвращает количество объектов Point в значении LineString ls.

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

    mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT ST_NumPoints(ST_GeomFromText(@ls));
    +------------------------------------+
    | ST_NumPoints(ST_GeomFromText(@ls)) |
    +------------------------------------+
    |                                  3 |
    +------------------------------------+
    
  • ST_PointN(ls, N)

    Возвращает N-ую Point в значении Linestring ls. Точки нумеруются, начиная с 1.

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

    mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT ST_AsText(ST_PointN(ST_GeomFromText(@ls),2));
    +----------------------------------------------+
    | ST_AsText(ST_PointN(ST_GeomFromText(@ls),2)) |
    +----------------------------------------------+
    | POINT(2 2)                                   |
    +----------------------------------------------+
    
  • ST_StartPoint(ls)

    Возвращает Point, являющуюся начальной точкой значения LineString ls.

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

    mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT ST_AsText(ST_StartPoint(ST_GeomFromText(@ls)));
    +------------------------------------------------+
    | ST_AsText(ST_StartPoint(ST_GeomFromText(@ls))) |
    +------------------------------------------------+
    | POINT(1 1)                                     |
    +------------------------------------------------+
    

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

Spec-Zone.ru

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