I guess the answer to my question is in the question, but I've noticed that if I run a statement looking for not isvalid geometries, I get something like :
=# SELECT gid, ccode, admin1, mapcode, st_mem_size(the_geom), st_isvalidreason(the_geom) FROM summ.polbnda WHERE st_isvalid(the_geom) IS FALSE ORDER BY 2, 3; NOTICE: Ring Self-intersection at or near point 123.055 10.9102 NOTICE: Ring Self-intersection at or near point 121.007 5.68846 gid | ccode | admin1 | mapcode | st_mem_size | st_isvalidreason -----+-------+-------------------+---------+-------------+--------------------------------------------- 120 | PHL | NEGROS OCCIDENTAL | 3592 | 105387 | Ring Self-intersection[123.054838 10.91023] 84 | PHL | SULU | 3556 | 212748 | Ring Self-intersection[121.007041 5.688462] (2 rows) at which time I zoom into the locations in QGIS and remove the offending part of the geometry. After fixing the two, I run the same query, and gid | ccode | admin1 | mapcode | st_mem_size | st_isvalidreason -----+-------+-------------------+---------+-------------+---------------------------------------------- 120 | PHL | NEGROS OCCIDENTAL | 3592 | 105339 | Ring Self-intersection[123.310249 10.960445] (1 row) So again I go in a repair, and so it goes - It ended up taking about 8 iterations to fix everything. So my question is - when running st_isvalidreason does it just return the first invalid problem it finds, or do I need a more sophisticated query to return all the problem points? My motivation is that re-running the query is taking a long time (it's a very high resolution set of geometries), so it would be great to get all of the offenders so I could work around each polygon once. This in : POSTGIS="1.5.3" GEOS="3.3.1-CAPI-1.7.1" PROJ="Rel. 4.7.1, 23 September 2009" LIBXML="2.7.3" USE_STATS cheers Ben _______________________________________________ postgis-users mailing list postgis-users@postgis.refractions.net http://postgis.refractions.net/mailman/listinfo/postgis-users