On Wed, Jan 10, 2007 at 02:03:13PM +0100, Jean-Claude Repetto wrote: > Hello list, > > This is a newbie question : > > I want to create GEOS geometries from data stored in ESRI shapefiles. > Shapes are composed of several shells and holes. Shells points are > clockwise, holes are counterclockwise. > > I am using the GEOS C API, as recommended in the documentation at > <http://geos.refractions.net/ro/doxygen_docs/html/>. > > For each part of the shapes, I have successfully created a CoordSeq, > then a LinearRing. But to create polygons (before unioning them), I need > to know : > - if a ring is a shell or a hole. In the C++ API, there is a function > called IsCCW. But how can I do the test with the C API ?
You can't (w/out a feature addition to it). > - what hole belongs to what shell. Is there a simplest method than > creating polygons for each hole and testing if they are within every > shell ? Or is it preferable to make an union of all the shells, then > remove the intersections with the holes ? (Maybe the second method > doesn't work if there are shells inside a hole). Try with calling polygonize and then: /* * Iteratively invoke symdifference on outer rings * as suggested by Carl Anderson: * postgis-devel/2005-December/001805.html */ > Perhaps there is already a program or a library that can do that ? PostGIS does it: o See lwgeom/lwgeom_geos_c.c for using the GEOS CAPI (doesn't need CCW testing) o See loader/shp2pgsql.c for getting an WKB or WKT representation you can feed to GEOS. --strk; _______________________________________________ geos-devel mailing list geos-devel@geos.refractions.net http://geos.refractions.net/mailman/listinfo/geos-devel