14.16.7.3 线串和多线串属性函数
一个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) | +----------------------------------------------+
-
对于一个值为
ls
的LineString
,ST_IsClosed
返回1,如果ls
是闭合的(即其ST_StartPoint
和ST_EndPoint
值相同)。对于一个值为
ls
的MultiLineString
,ST_IsClosed
返回1,如果ls
是闭合的(即每个LineString
在ls
中的ST_StartPoint
和ST_EndPoint
值相同)。ST_IsClosed()
返回 0,如果ls
不是关闭的,否则返回NULL
,如果ls
是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 | +------------------------------------+
-
-
ST_Length(
ls
[,<em class="replaceable">unit
>])返回一个双精度数字,表示
LineString
或MultiLineString
值ls
在其关联空间参考系中的长度。多个MultiLineString
值的长度等于其元素的总和。ST_Length()
计算结果如下:-
如果几何对象是一个有效的
LineString
在笛卡尔SRS中,则返回值是几何对象的笛卡尔长度。 -
如果几何体是一个有效的
MultiLineString
在笛卡尔坐标参考系统中,返回值是其元素的笛卡尔长度之和。 -
如果几何体是一个有效的
LineString
在地理坐标参考系统中,返回值是该几何体在该坐标参考系统中的地理长度,以米为单位。 -
如果几何体是一个有效的
MultiLineString
在地理坐标参考系统中,返回值是其元素在该坐标参考系统中的地理长度之和,以米为单位。
ST_Length()
根据本节介绍的方式处理其参数,以下例外情况:-
如果几何体不是
LineString
或MultiLineString
,返回值是NULL
。 -
如果几何体是几何无效的,结果可能是一个未定义的长度(即它可以是任何数字),或者发生错误。
-
如果长度计算结果是
+inf
,将发生ER_DATA_OUT_OF_RANGE
错误。 -
如果几何体具有地理坐标参考系统,并且经度或纬度超出范围,发生错误:
-
如果经度值不在(-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节,“The INFORMATION_SCHEMA ST_UNITS_OF_MEASURE Table”。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
-thPoint。点从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
类型的值,表示ls
中的LineString
的起点。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) | +------------------------------------------------+