ST_IsValid
Determines if a spatial object is well formed or valid. If the object is valid, ST_IsValid returns TRUE; otherwise, it returns FALSE. Use STV_IsValidReason to identify the location of the invalidity.
Spatial validity applies only to polygons and multipolygons. A polygon or multipolygon is valid if all of the following are true:
- The polygon is closed; its start point is the same as its end point.
- Its boundary is a set of linestrings.
- The boundary does not touch or cross itself.
- Any polygons in the interior do not touch the boundary of the exterior polygon except at a vertex.
The Open Geospatial Consortium (OGC) defines the validity of a polygon in section 6.1.11.1 of the Simple Feature Access Part 1 - Common Architecture specification.
If you are not sure if a polygon is valid, run ST_IsValid first. If you pass an invalid spatial object to a Vertica Place function, the function fails or returns incorrect results.
Behavior Type
Syntax
ST_IsValid( g )
Arguments
g |
Geospatial object to test for validity, value of type GEOMETRY or GEOGRAPHY (WGS84). |
Returns
BOOLEAN
Supported Data Types
Data Type | GEOMETRY | GEOGRAPHY (Perfect Sphere) | GEOGRAPHY (WGS84) |
Point | Yes | No | No |
Multipoint | Yes | No | No |
Linestring | Yes | No | No |
Multilinestring | Yes | No | No |
Polygon | Yes | No | Yes |
Multipolygon | Yes | No | No |
GeometryCollection |
Yes |
No | No |
Examples
The following examples show how to use ST_IsValid.
Valid polygon:
=> SELECT ST_IsValid(ST_GeomFromText('POLYGON((1 1,1 3,3 3,3 1,1 1))')); ST_IsValid ------------ t (1 row)
Invalid polygon:
=> SELECT ST_IsValid(ST_GeomFromText('POLYGON((1 3,3 2,1 1,3 0,1 0,1 3))')); ST_IsValid ------------ f (1 row)
Invalid polygon:
=> SELECT ST_IsValid(ST_GeomFromText('POLYGON((0 0,2 2,0 2,2 0,0 0))')); ST_IsValid ------------ f (1 row)
Invalid multipolygon:.
=> 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)
Valid polygon with hole:
=> 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)
Invalid polygon with hole:
=> 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)