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

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

林员外聊编程 2021-08-11
922
Polygon MultiPolygon 属性函数
 
本部分中的函数返回 Polygon MultiPolygon 值的属性。
 
除非另有说明,本部分中的函数按照如下方式处理几何参数:
 
● 如果任何参数为 NULL 或任何几何参数为空几何值,则返回值为 NULL
 
● 如果任何几何参数不是语法良好的几何值,就会发生 ER_GIS_INVALID_DATA 错误。
 
● 如果参数是语法良好的几何值,但有未定义的空间参照系统(SRS),就会发生 ER_SRS_NOT_FOUND 错误。
 
● 对于接受多个几何参数的函数,如果这些参数不在同一个SRS中,就会发生 ER_GIS_DIFFERENT_SRIDS 错误。
 
● 否则,返回值是非 NULL
 
这些函数可用于获取多边形属性:
 
● ST_Area({poly|mpoly})
 
返回双精度数值,表示 Polygon MultiPolygon 参数在其空间参照系统中测量的面积。
 
MySQL 8.0.13 开始,ST_Area() 按照本部分介绍的方式处理它的参数,除了以下这些例外:
 
■ 如果几何值无效的,结果要么是一个未定义的区域(也就是说,它可以是任何数字),要么发生错误。
 
■ 如果几何值是有效的,但不是一个 Polygon MultiPolygon 对象,则会发生 ER_UNEXPECTED_GEOMETRY_TYPE 错误。
 
■ 如果几何值是笛卡尔SRS中的一个有效 Polygon,那么结果就是该多边形的笛卡尔面积。
 
■ 如果几何值是笛卡尔SRS中的一个有效的 MultiPolygon,那么结果是多边形的笛卡儿面积之和。
 
■ 如果几何值是地理 SRS 中的有效 Polygon,结果是该多边形在该SRS中的地理面积,以平方米为单位。
 
■ 如果几何值在地理 SRS 中的有效 MultiPolygon,则结果是该SRS中多边形的地理面积之和,单位为平方米。
 
■ 如果区域计算结果为 +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.13 之前,ST_Area() 会像本部分介绍中描述的那样处理它的参数,但有以下例外:
 
■ 对于维度为 0 1 的参数,结果是 0
 
■ 如果几何值为空,则返回值为 0 而不是 NULL
 
■ 对于一个几何值集合,其结果是所有组件的面积值的和。如果几何集合为空,则其面积返回为 0
 
■ 如果几何值具有地理空间参照系统(SRS)SRID值,则会发生 ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS 错误。
 
mysql> SET @poly =
'Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))';
mysql> SELECT ST_Area(ST_GeomFromText(@poly));
+---------------------------------+
| ST_Area(ST_GeomFromText(@poly)) |
+---------------------------------+
| 4 |
+---------------------------------+


mysql> SET @mpoly =
'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))';
mysql> SELECT ST_Area(ST_GeomFromText(@mpoly));
+----------------------------------+
| ST_Area(ST_GeomFromText(@mpoly)) |
+----------------------------------+
| 8 |
+----------------------------------+
 
● ST_Centroid({poly|mpoly})
 
返回 Polygon MultiPolygon 参数的中心点。结果不能保证在 MultiPolygon 上。
 
该函数通过计算集合中最高维组件的中心点来处理几何集合。这些组件被提取为单个 MultiPolygonMultiLineString MultiPoint,用于中心点计算。
 
ST_Centroid() 按照本部分介绍中描述的方式处理它的参数,但有以下例外:
 
■ 如果参数是空几何集合,则返回值为 NULL
 
■ 如果几何值具有地理空间参照系统(SRS)SRID值,则会发生 ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS 错误。
 
mysql> SET @poly =
ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))');
mysql> SELECT ST_GeometryType(@poly),ST_AsText(ST_Centroid(@poly));
+------------------------+--------------------------------------------+
| ST_GeometryType(@poly) | ST_AsText(ST_Centroid(@poly)) |
+------------------------+--------------------------------------------+
| POLYGON | POINT(4.958333333333333 4.958333333333333) |
+------------------------+--------------------------------------------+
 
● ST_ExteriorRing(poly)
 
返回 Polygon poly 的外环,类型为 LineString
 
ST_ExteriorRing() 按照本部分介绍中描述的方式处理其参数。
 
mysql> SET @poly =
'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
mysql> SELECT ST_AsText(ST_ExteriorRing(ST_GeomFromText(@poly)));
+----------------------------------------------------+
| ST_AsText(ST_ExteriorRing(ST_GeomFromText(@poly))) |
+----------------------------------------------------+
| LINESTRING(0 0,0 3,3 3,3 0,0 0) |
+----------------------------------------------------+
 
● ST_InteriorRingN(poly, N)
 
返回 Polygon poly 的第 N 个内环,类型为 LineString。环从 1 开始编号。
 
ST_InteriorRingN() 按照本部分介绍中的描述处理其参数。
 
mysql> SET @poly =
'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
mysql> SELECT ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1));
+-------------------------------------------------------+
| ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1)) |
+-------------------------------------------------------+
| LINESTRING(1 1,1 2,2 2,2 1,1 1) |
+-------------------------------------------------------+
 
● ST_NumInteriorRing(poly), ST_NumInteriorRings(poly)
 
返回 Polygon poly 中内环的数量。
 
ST_NumInteriorRing() ST_NuminteriorRings() 按照本部分介绍中所述处理它们的参数。
 
mysql> SET @poly =
'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
mysql> SELECT ST_NumInteriorRings(ST_GeomFromText(@poly));
+---------------------------------------------+
| ST_NumInteriorRings(ST_GeomFromText(@poly)) |
+---------------------------------------------+
| 1 |
+---------------------------------------------+
 

官方网址:
https://dev.mysql.com/doc/refman/8.0/en/gis-polygon-property-functions.html
文章转载自林员外聊编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论