ST_IsValid
确定空间对象的格式是否正确或其是否有效。如果对象有效,则 ST_IsValid 返回 TRUE;否则它将返回 FALSE。使用 STV_IsValidReason 以确定无效性原因。
空间有效性仅适用于多边形和多边形集合。如果以下所有项均成立,则多边形或多边形集合是有效的:
-
多边形是封闭的;其起点与终点相同。
-
其边界是一组线串。
-
边界不触及或穿越本身。
-
内部的任何多边形都未接触外部多边形边界除顶点以外的任何位置。
开放地理空间联盟 (OGC) 在 OGC 简易功能访问第 1 部分 - 通用架构规范的第 6.1.11.1 节定义了多边形的有效性。
如果不确定多边形是否有效,请先运行 ST_IsValid。如果将无效的空间对象传递给 Vertica Place 函数,函数将会失败或返回错误的结果。
行为类型
不可变语法
ST_IsValid( g )
参数
g
- 用于测试有效性的地理空间对象,其值类型为 GEOMETRY 或 GEOGRAPHY (WGS84)。
返回
BOOLEAN
支持的数据类型
示例
以下示例显示了 ST_IsValid 的用法。
有效的多边形:
=> SELECT ST_IsValid(ST_GeomFromText('POLYGON((1 1,1 3,3 3,3 1,1 1))'));
ST_IsValid
------------
t
(1 row)
无效的多边形:
=> SELECT ST_IsValid(ST_GeomFromText('POLYGON((1 3,3 2,1 1,3 0,1 0,1 3))'));
ST_IsValid
------------
f
(1 row)
无效的多边形:
=> SELECT ST_IsValid(ST_GeomFromText('POLYGON((0 0,2 2,0 2,2 0,0 0))'));
ST_IsValid
------------
f
(1 row)
无效的多边形集合:
=> SELECT ST_IsValid(ST_GeomFromText('MULTIPOLYGON(((0 0, 0 1, 1 1, 0 0)),
((0.5 0.5, 0.7 0.5, 0.7 0.7, 0.5 0.7, 0.5 0.5)))'));
ST_IsValid
------------
f
(1 row)
包含孔的有效多边形:
=> SELECT ST_IsValid(ST_GeomFromText('POLYGON((1 1,3 3,6 -1,0.5 -1,1 1),
(1 1,3 1,2 0,1 1))'));
ST_IsValid
------------
t
(1 row)
包含孔的无效多边形:
=> SELECT ST_IsValid(ST_GeomFromText('POLYGON((1 1,3 3,6 -1,0.5 -1,1 1),
(1 1,4.5 1,2 0,1 1))'));
ST_IsValid
------------
f
(1 row)