LineString 和 MultiLineString 属性函数
LineString
由Point
值组成。您可以提取a的特定点LineString
,计算其包含的点数,或获取其长度。
本节中的某些功能也适用于MultiLineString
值。
除非另有说明,否则本节中的函数将按以下方式处理其参数:
- 如果任何自变量为
NULL
或任何几何自变量为空几何,则返回值为NULL
。 - 如果任何几何参数都不是语法上格式正确的几何,
ER_GIS_INVALID_DATA
则会发生错误。 - 如果任何几何参数的SRID值都引用未定义的空间参考系统(SRS),
ER_SRS_NOT_FOUND
则会发生错误。 - 否则,返回值为non-
NULL
。
这些函数可用于获取线串属性:
ST_EndPoint(ls)
返回
Point
作为LineString
值端点的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) | +---------------------------------------------- +ST_IsClosed(ls)
对于
LineString
valuels
,ST_IsClosed()
如果ls
关闭则返回1 (即,其ST_StartPoint()
和ST_EndPoint()
值相同)。对于
MultiLineString
valuels
,ST_IsClosed()
如果ls
关闭则返回1 (即in中的ST_StartPoint()
和ST_EndPoint()
值相同)。LineString
ls
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 | +------------------------------------ +- 如果几何图形具有用于地理空间参考系统(SRS)的SRID值,
ST_Length(ls[,unit])
返回一个双精度数字,该数字指示其关联的空间参考系统中
LineString
orMultiLineString
值的长度ls
。MultiLineString
值的长度等于其元素长度的总和。ST_Length()
计算结果如下:- 如果几何
LineString
在笛卡尔SRS中有效,则返回值为几何的笛卡尔长度。 - 如果几何
MultiLineString
在笛卡尔SRS中有效,则返回值为其元素笛卡尔长度的总和。 - 如果几何
LineString
在地理SRS中有效,则返回值是该SRS中几何的大地长度(以米为单位)。 - 如果几何
MultiLineString
在地理SRS中有效,则返回值为该SRS中其元素的大地长度的总和,以米为单位。
ST_Length()
如本节简介中所述处理其参数,但以下情况除外:- 如果几何不是a
LineString
或MultiLineString
,则返回值为NULL
。 - 如果几何在几何上是无效的,则结果是未定义的长度(即,可以是任何数字),或者发生错误。
- 如果长度计算结果为
+inf
,ER_DATA_OUT_OF_RANGE
则会发生错误。 如果几何图形的经度或纬度超出范围,则将发生错误:
- 如果任何经度参数不在范围内(-180,180],
ER_LONGITUDE_OUT_OF_RANGE
则会发生错误。 - 如果任何纬度参数不在[-90,90]范围内,
ER_LATITUDE_OUT_OF_RANGE
则会发生错误。
显示的范围以度为单位。精确的范围限制由于浮点运算而略有不同。
- 如果任何经度参数不在范围内(-180,180],
从MySQL 8.0.16开始,
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
表中找到了单位,则该单位受支持。请参见“ 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 | +------------------------ +- 如果几何
ST_NumPoints(ls)
返回的数量
Point
中的对象LineString
值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 | +------------------------------------ +ST_PointN(ls,N)
返回
N
个Point
中Linestring
值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) | +---------------------------------------------- +ST_StartPoint(ls)
返回
Point
作为LineString
值起点的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) | +------------------------------------------------ +