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.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 | +------------------------+ -
Возвращает количество объектов
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.