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)