一个 LineString
由 Point
值组成。您可以提取 LineString
的特定点,计算它包含的点数,或获取它的长度。
本节中的一些函数也适用于 MultiLineString
值。
除非另有说明,本节中的函数将按如下方式处理其几何参数
如果任何参数为
NULL
或任何几何参数为空几何,则返回值为NULL
。如果任何几何参数不是语法上格式良好的几何,则会发生
ER_GIS_INVALID_DATA
错误。如果任何几何参数是在未定义的空间参考系统 (SRS) 中的语法上格式良好的几何,则会发生
ER_SRS_NOT_FOUND
错误。否则,返回值为非
NULL
。
这些函数可用于获取线字符串属性
返回
LineString
值ls
的端点的Point
。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) | +----------------------------------------------+
对于
LineString
值ls
,ST_IsClosed()
如果ls
已关闭(即,它的ST_StartPoint()
和ST_EndPoint()
值相同),则返回 1。对于
MultiLineString
值ls
,ST_IsClosed()
如果ls
已关闭(即,ST_StartPoint()
和ST_EndPoint()
值对于ls
中的每个LineString
都是相同的),则返回 1。ST_IsClosed()
如果ls
未关闭,则返回 0,如果ls
为NULL
,则返回NULL
。ST_IsClosed()
按本节介绍中所述处理其参数,但有以下例外如果几何具有地理空间参考系统 (SRS) 的 SRID 值,则会发生
ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_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
或MultiLineString
值ls
在其关联的空间参考系统中的长度。MultiLineString
值的长度等于其元素长度的总和。ST_Length()
按如下方式计算结果如果几何是笛卡尔 SRS 中的有效
LineString
,则返回值为几何的笛卡尔长度。如果几何是笛卡尔 SRS 中的有效
MultiLineString
,则返回值为其元素的笛卡尔长度总和。如果几何是地理 SRS 中的有效
LineString
,则返回值为该 SRS 中几何的测地线长度(以米为单位)。如果几何是地理 SRS 中的有效
MultiLineString
,则返回值为该 SRS 中其元素的测地线长度总和(以米为单位)。
ST_Length()
按本节介绍中所述处理其参数,但有以下例外如果几何不是
LineString
或MultiLineString
,则返回值为NULL
。如果几何在几何上无效,则结果为未定义的长度(即,它可以是任何数字),或者发生错误。
如果长度计算结果为
+inf
,则会发生ER_DATA_OUT_OF_RANGE
错误。如果几何具有地理 SRS,其经度或纬度超出范围,则会发生错误
如果经度值不在 (−180, 180] 范围内,则会发生
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
错误。如果纬度值不在 [−90, 90] 范围内,则会发生
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
错误。
显示的范围以度为单位。由于浮点运算,确切的范围限制会略有偏差。
ST_Length()
允许可选的unit
参数,该参数指定返回长度值的线性单位。这些规则适用如果指定了单位,但 MySQL 不支持,则会发生
ER_UNIT_NOT_FOUND
错误。如果指定了受支持的线性单位,而 SRID 为 0,则会发生
ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT
错误。如果指定了受支持的线性单位,而 SRID 不为 0,则结果将以该单位表示。
如果没有指定单位,则结果将以几何图形的 SRS 单位表示,无论是笛卡尔坐标系还是地理坐标系。目前,所有 MySQL SRS 都以米为单位表示。
如果在
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 | +------------------------+
返回
LineString
值ls
中Point
对象的数量。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 | +------------------------------------+
返回
Linestring
值ls
中的第N
个Point
。点从 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) | +----------------------------------------------+
返回
LineString
值ls
的起点Point
。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) | +------------------------------------------------+