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

MySQL的函数和运算符 - 转换函数和运算符(3)

林员外聊编程 2021-07-12
411
空间类型的转换操作

MySQL 8.0.24 开始,CAST() CONVERT() 支持将几何值从一种空间类型转换为另一种空间类型,用于空间类型的某些组合。下面的列表显示了允许的类型组合,其中 “MySQL extension” 表示在 MySQL 中实现的转换超出了 SQL/MM 标准中的定义:
 
●  Point 到:
 
■ MultiPoint
 
■ GeometryCollection
 
●  LineString 到:
 
■ Polygon (MySQL extension)
 
■ MultiPoint (MySQL extension)
 
■ MultiLineString
 
■ GeometryCollection
 
●  Polygon 到:
 
■ LineString (MySQL extension)
 
■ MultiLineString (MySQL extension)
 
■ MultiPolygon
 
■ GeometryCollection
 
●  MultiPoint 到:
 
■ Point
 
■ LineString (MySQL extension)
 
■ GeometryCollection
 
●  MultiLineString 到:
 
■ LineString
 
■ Polygon (MySQL extension)
 
■ MultiPolygon (MySQL extension)
 
■ GeometryCollection
 
●  MultiPolygon 到:
 
■ Polygon
 
■ MultiLineString (MySQL extension)
 
■ GeometryCollection
 
●  GeometryCollection 到:
 
■ Point
 
■ LineString
 
■ Polygon
 
■ MultiPoint
 
■ MultiLineString
 
■ MultiPolygon
 
在空间类型转换中,GeometryCollection GeomCollection 是相同结果类型的同义词。
 
有些情况适用于所有空间类型转换,而有些情况仅适用于转换结果具有特定空间类型的情况。
 
空间转换的一般情况
 
这些情况适用于所有空间转换,不限于结果类型:
 
● 转换的结果与要转换的表达式在相同的 SRS 中。
 
● 空间类型之间的类型转换不会改变坐标值或顺序。
 
● 如果要转换的表达式为 NULL,则函数结果为 NULL
 
● 不允许使用 JSON_VALUE() 函数和指定空间类型的 RETURNING 子句转换空间类型。
 
● 不允许转换为空间类型的 ARRAY
 
● 如果允许空间类型组合,但转换的表达式不是语法形式良好的几何图形,则会发生 ER_GIS_INVALID_DATA 错误。
 
● 如果允许空间类型组合,但转换的表达式是未定义空间参考系统(SRS)中的语法形式良好的几何图形,则会发生 ER_SRS_NOT_FOUND 错误。
 
● 如果要强制转换的表达式具有地理 SRS,但其经度或纬度不在范围内,则会发生错误:
 
■ 如果经度值不在 (180, 180] 范围内,就会出现 ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE 错误。
 
■ 如果纬度值不在 [90, 90] 范围内,就会出现 ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE 错误。
 
范围以度数表示。如果一个 SRS 使用另一个单位,则该范围使用其单位中相应的值。由于浮点运算,确切的范围限制略有偏差。
 
转换到 Point 情况
 
当转换结果类型为 Point 时,适用以下情况:
 
● 如果要转换的表达式是类型为 Point 的结构良好的几何图形,则函数的结果是此 Point
 
● 如果要转换的表达式是包含单个 Point 的格式良好的 MultiPoint 类型的几何图形,则函数的结果是此 Point。如果表达式包含不止一个 Point,就会出现 ER_INVALID_CAST_TO_GEOMETRY 错误。
 
● 如果要转换的表达式是只包含一个 Point 的类型 GeometryCollection 的结构良好的几何图形,那么函数的结果就是这个 Point。如果表达式为空,包含多个 Point,或包含其他几何类型,将发生 ER_INVALID_CAST_TO_GEOMETRY 错误。
 
● 如果要转换的表达式是结构良好的非 PointMultiPointGeometryCollection 类型的几何图形,则会发生 ER_INVALID_CAST_TO_GEOMETRY 错误。
 
转换为 LineString 的情况
 
当转换结果类型为 LineString 时,适用以下情况:
 
● 如果要转换的表达式是 LineString 类型的结构良好的几何图形,则函数的结果是 LineString
 
● 如果要进行转换的表达式是没有内环的结构良好的多边形(Polygon)类型的几何图形,则函数结果是一个 LineString,它以相同的顺序包含外环的点。如果表达式有内环,就会出现 ER_INVALID_CAST_TO_GEOMETRY 错误。
 
● 如果要转换的表达式是至少包含两个点的结构良好的 MultiPoint 类型的几何图形,则函数结果是一个 LineString,其中包含 MultiPoint 的点,其顺序是它们在表达式中出现的顺序。如果表达式只包含一个 Point,就会出现 ER_INVALID_CAST_TO_GEOMETRY 错误。
 
● 如果要转换的表达式是包含单个 LineString 的格式良好的 MultiLineString 几何图形,则函数的结果是 LineString。如果表达式包含多个 LineString,就会出现 ER_INVALID_CAST_TO_GEOMETRY 错误。
 
● 如果要转换的表达式是格式良好的几何图形,类型为 GeometryCollection,只包含一个 LineString,则函数的结果是 LineString。如果表达式为空、包含多个 LineString,或包含其他几何类型,将发生 ER_INVALID_CAST_TO_GEOMETRY 错误。
 
● 如果要转换的表达式是 LineStringPolygonMultiPointMultiLineString GeometryCollection 类型之外的格式良好的几何图形,则会发生 ER_INVALID_CAST_TO_GEOMETRY 错误。
 
 
 
官方网址:
https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html
文章转载自林员外聊编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论