暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的函数和运算符 - 空间分析函数 - 几何属性函数 - LineString和MultiLineString属性函数

林员外聊编程 2021-08-10
519
LineString MultiLineString 属性函数
 
LineString Point 值组成。可以提取 LineString 的特定点,计算它包含的点的数量,或者获取它的长度。
 
本部分中的一些函数也适用于 MultiLineString 值。
 
除非另有说明,本部分中的函数处理几何参数的方式如下:
 
● 如果任何参数为 NULL 或任何几何参数为空几何值,则返回值为 NULL
 
● 如果任何几何参数不是语法良好的几何值,就会发生 ER_GIS_INVALID_DATA 错误。
 
● 如果几何参数是语法良好的几何值,但使用了未定义的空间参照系统(SRS),就会发生 ER_SRS_NOT_FOUND 错误。
 
● 否则,返回值是非 NULL
 
以下函数可用于获取 LineString 属性:
 
● ST_EndPoint(ls)
 
返回作为 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) |
+----------------------------------------------+
 
● ST_IsClosed(ls)
 
对于 LineString ls,如果 ls 是闭合的,则 ST_IsClosed() 返回 1(也就是说,它的 ST_StartPoint() ST_EndPoint() 值相同)
 
对于 MultiLineString ls,如果 ls 是闭合的,ST_IsClosed() 将返回 1(即,对于 ls 中的每个 LineString, ST_StartPoint() ST_EndPoint() 值是相同的)
 
如果 ls 不是闭合的,则 ST_IsClosed() 返回 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 |
+------------------------------------+
 
● ST_Length(ls [, unit])
 
返回一个双精度数值,表示 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 错误(MySQL 8.0.12 之前是 ER_LONGITUDE_OUT_OF_RANGE 错误)
 
○如果纬度值不在 [90, 90] 范围内,则会出现 ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE 错误(MySQL 8.0.12 之前是 ER_LATITUDE_OUT_OF_RANGE 错误)
 
所示范围以度数表示。由于浮点运算,精确的范围限制略有偏差。
 
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 表中能找到某个单位,则 MySQL 支持该单位。
 
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)
 
返回 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 |
+------------------------------------+
 
● ST_PointN(ls, N)
 
返回 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) |
+----------------------------------------------+
 
● ST_StartPoint(ls)
 
返回 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) |
+------------------------------------------------+
 
 
 
 
 
 
官方网址:
https://dev.mysql.com/doc/refman/8.0/en/gis-linestring-property-functions.html
文章转载自林员外聊编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论