14.16.7.3 Функции свойств LineString и MultiLineString
Значение LineString состоит из значений Point. Вы можете извлечь конкретные точки LineString, посчитать количество точек, которые она содержит, или получить ее длину.
Некоторые функции в этом разделе также работают со значениями MultiLineString.
Если не указано иное, функции в этом разделе обрабатывают свои геометрические аргументы следующим образом:
Если какой-либо аргумент является значением
NULL, или любой геометрический аргумент является пустой геометрией, возвращаемое значение равноNULL.Если какой-либо геометрический аргумент не является синтаксически корректной геометрией, возникает ошибка.
Если какой-либо геометрический аргумент является синтаксически корректной геометрией в неопределенной пространственной системе координат (SRS), возникает ошибка.
В противном случае, возвращаемое значение является ненулевым
NULL.
Эти функции доступны для получения свойств линии:
-
Возвращает
Point, являющуюся конечной точкой значенияLineStringls.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) | +----------------------------------------------+ -
Для значения
LineStringls,ST_IsClosed()возвращает 1, еслиlsзамкнута (то есть, ее значенияST_StartPoint()иST_EndPoint()совпадают).Для значения
MultiLineStringls,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 | +------------------------------------+ -
Возвращает число с двойной точностью, указывающее длину значения
LineStringилиMultiLineStringlsв его связанной пространственной системе координат. Длина значения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_SCHEMAST_UNITS_OF_MEASURE. См. Раздел 28.3.39, «Таблица 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 | +------------------------+ -
Возвращает количество объектов
Pointв значенииLineStringls.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 | +------------------------------------+ -
Возвращает
N-юPointв значенииLinestringls. Точки нумеруются, начиная с 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) | +----------------------------------------------+ -
Возвращает
Point, являющуюся начальной точкой значенияLineStringls.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.