# 12.17.7.3 LineString 和 MultiLineString 属性函数
一种线串
由组成观点
价值观。您可以提取特定点线串
,计算它包含的点数,或获取它的长度。
本节中的某些功能也适用于多行字符串
价值观。
除非另有说明,本节中的函数按如下方式处理其几何参数:
如果有任何论据
空值
或任何几何参数是空几何,返回值为空值
.如果任何几何参数不是语法上格式良好的几何,则
ER_GIS_INVALID_DATA
(opens new window)发生错误。如果任何几何参数是未定义的空间参考系统 (SRS) 中的语法结构良好的几何,则
ER_SRS_NOT_FOUND
(opens new window)发生错误。否则,返回值为非
空值
.这些函数可用于获取线串属性:
-
返回
观点
那是终点线串
价值*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) | +----------------------------------------------+
-
为一个
线串
价值*ls
,ST_IsClosed()
如果返回 1ls
*是封闭的(也就是说,它的ST_StartPoint()
和ST_EndPoint()
值相同)。为一个
多行字符串
价值*ls
,ST_IsClosed()
如果返回 1ls
是关闭的(也就是说,ST_StartPoint()
和ST_EndPoint()
每个值都相同线串
在ls
*)。ST_IsClosed()
如果返回 0*ls
没有关闭,并且空值
如果ls
*是空值
.ST_IsClosed()
如本节介绍中所述处理其参数,但有以下例外:- 如果几何具有地理空间参考系统 (SRS) 的 SRID 值,则
ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS
(opens new window)发生错误。
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 | +------------------------------------+
- 如果几何具有地理空间参考系统 (SRS) 的 SRID 值,则
-
返回一个表示长度的双精度数
线串
要么多行字符串
价值*ls
*在其相关的空间参考系中。一个长度多行字符串
value 等于其元素长度的总和。ST_长度()
计算结果如下:如果几何是有效的
线串
在笛卡尔 SRS 中,返回值是几何的笛卡尔长度。如果几何是有效的
多行字符串
在笛卡尔 SRS 中,返回值是其元素的笛卡尔长度之和。如果几何是有效的
线串
在地理 SRS 中,返回值是该 SRS 中几何的大地测量长度,以米为单位。如果几何是有效的
多行字符串
在地理 SRS 中,返回值是该 SRS 中其元素的大地长度之和,以米为单位。
ST_长度()
如本节介绍中所述处理其参数,但有以下例外:如果几何不是
线串
要么多行字符串
,返回值为空值
.如果几何在几何上无效,则结果要么是未定义的长度(即,它可以是任何数字),要么会发生错误。
如果长度计算结果是
+信息
, 一个ER_DATA_OUT_OF_RANGE
(opens new window)发生错误。如果几何图形的地理 SRS 的经度或纬度超出范围,则会发生错误:
如果经度值不在 (−180, 180] 范围内,则
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
(opens new window)发生错误(ER_LONGITUDE_OUT_OF_RANGE
(opens new window)在 MySQL 8.0.12 之前)。如果纬度值不在范围内[−90, 90], 一个
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
(opens new window)发生错误(ER_LATITUDE_OUT_OF_RANGE
(opens new window)在 MySQL 8.0.12 之前)。显示的范围以度为单位。由于浮点运算,确切的范围限制略有偏差。
从 MySQL 8.0.16 开始,
ST_长度()
允许一个可选的*单元
*指定返回长度值的线性单位的参数。这些规则适用:如果指定了一个单位但 MySQL 不支持,则
ER_UNIT_NOT_FOUND
(opens new window)发生错误。如果指定了支持的线性单位并且 SRID 为 0,则
ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT
(opens new window)发生错误。如果指定了支持的线性单位并且 SRID 不为 0,则结果采用该单位。
如果未指定单位,则结果采用几何的 SRS 单位,无论是笛卡尔还是地理。目前,所有 MySQL SRS 都以米表示。
如果在
INFORMATION_SCHEMA
ST_UNITS_OF_MEASURE
桌子。看第 26.3.37 节,“信息_架构 ST_单位_的_测量表”.
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 | +------------------------+
-
返回数量
观点
中的对象线串
价值*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 | +------------------------------------+
-
返回*
ñ
-th观点
在里面线串
价值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) | +----------------------------------------------+
-
返回
观点
那是的起点线串
价值*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) | +------------------------------------------------+