ST_IsValidReason
Prev | 8.6. Geometry Validation | Next

## Name

ST_IsValidReason — Returns text stating if a geometry is valid, or a reason for invalidity.

## Synopsis

`text ST_IsValidReason(`geometry geomA`)`;

`text ST_IsValidReason(`geometry geomA, integer flags`)`;

## Description

Returns text stating if a geometry is valid, or if invalid a reason why.

Useful in combination with ST_IsValid to generate a detailed report of invalid geometries and reasons.

Allowed `flags` are documented in ST_IsValidDetail.

Performed by the GEOS module.

Availability: 1.4

Availability: 2.0 version taking flags.

## Examples

    -- invalid bow-tie polygon
    SELECT ST_IsValidReason(
        'POLYGON ((100 200, 100 100, 200 200,
         200 100, 100 200))'::geometry) as validity_info;
    validity_info
    --------------------------
    Self-intersection[150 150]

    --First 3 Rejects from a successful quintuplet experiment
    SELECT gid, ST_IsValidReason(geom) as validity_info
    FROM
    (SELECT ST_MakePolygon(ST_ExteriorRing(e.buff), array_agg(f.line)) As geom, gid
    FROM (SELECT ST_Buffer(ST_Point(x1*10,y1), z1) As buff, x1*10 + y1*100 + z1*1000 As gid
    	FROM generate_series(-4,6) x1
    	CROSS JOIN generate_series(2,5) y1
    	CROSS JOIN generate_series(1,8) z1
    	WHERE x1 > y1*0.5 AND z1 < x1*y1) As e
    	INNER JOIN (SELECT ST_Translate(ST_ExteriorRing(ST_Buffer(ST_Point(x1*10,y1), z1)),y1*1, z1*2) As line
    	FROM generate_series(-3,6) x1
    	CROSS JOIN generate_series(2,5) y1
    	CROSS JOIN generate_series(1,10) z1
    	WHERE x1 > y1*0.75 AND z1 < x1*y1) As f
    ON (ST_Area(e.buff) > 78 AND ST_Contains(e.buff, f.line))
    GROUP BY gid, e.buff) As quintuplet_experiment
    WHERE ST_IsValid(geom) = false
    ORDER BY gid
    LIMIT 3;

     gid  |      validity_info
    ------+--------------------------
     5330 | Self-intersection [32 5]
     5340 | Self-intersection [42 5]
     5350 | Self-intersection [52 5]

     --simple example
    SELECT ST_IsValidReason('LINESTRING(220227 150406,2220227 150407,222020 150410)');

     st_isvalidreason
    ------------------
     Valid Geometry

## See Also

ST_IsValid, ST_Summary

Prev | Up | Next
ST_IsValidDetail | Home | ST_MakeValid