Adds a polygon to the topology.
The boundary of the given polygon will snap to existing nodes or edges within given tolerance. Existing edges or faces may be split by the boundary of the polygon.
6059 uint64_t nfacesinbox;
6063 const GEOSPreparedGeometry *ppoly;
6064 GEOSGeometry *polyg;
6075 LWDEBUGF(1,
"Working tolerance:%.15g", tol);
6078 for ( i=0; i<poly->
nrings; ++i )
6091 lwerror(
"Error adding ring %d of polygon", i);
6106 if (nfacesinbox == UINT64_MAX)
6123 ppoly = GEOSPrepare(polyg);
6125 for ( j=0; j<nfacesinbox; ++j )
6129 GEOSGeometry *fgg, *sp;
6137 GEOSPreparedGeom_destroy(ppoly);
6138 GEOSGeom_destroy(polyg);
6149 GEOSPreparedGeom_destroy(ppoly);
6150 GEOSGeom_destroy(polyg);
6155 sp = GEOSPointOnSurface(fgg);
6156 GEOSGeom_destroy(fgg);
6159 GEOSPreparedGeom_destroy(ppoly);
6160 GEOSGeom_destroy(polyg);
6165 covers = GEOSPreparedCovers( ppoly, sp );
6166 GEOSGeom_destroy(sp);
6169 GEOSPreparedGeom_destroy(ppoly);
6170 GEOSGeom_destroy(polyg);
6183 GEOSPreparedGeom_destroy(ppoly);
6184 GEOSGeom_destroy(polyg);
void gbox_expand(GBOX *g, double d)
Move the box minimums down and the maximums up by the distance provided.
char lwgeom_geos_errmsg[LWGEOM_GEOS_ERRMSG_MAXSIZE]
GEOSGeometry * LWGEOM2GEOS(const LWGEOM *lwgeom, uint8_t autofix)
void lwgeom_free(LWGEOM *geom)
LWGEOM * lwpoly_as_lwgeom(const LWPOLY *obj)
LWLINE * lwline_construct(int32_t srid, GBOX *bbox, POINTARRAY *points)
const GBOX * lwgeom_get_bbox(const LWGEOM *lwgeom)
Get a non-empty geometry bounding box, computing and caching it if not already there.
void * lwalloc(size_t size)
void lwline_free(LWLINE *line)
POINTARRAY * ptarray_clone(const POINTARRAY *ptarray)
Clone a POINTARRAY object.
int lwpoly_is_empty(const LWPOLY *poly)
LWT_INT64 LWT_ELEMID
Identifier of topology element.
#define LWDEBUGF(level, msg,...)
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
static LWT_ISO_FACE * lwt_be_getFaceWithinBox2D(const LWT_TOPOLOGY *topo, const GBOX *box, uint64_t *numelems, int fields, uint64_t limit)
const char * lwt_be_lastErrorMessage(const LWT_BE_IFACE *be)
LWGEOM * lwt_GetFaceGeometry(LWT_TOPOLOGY *topo, LWT_ELEMID faceid)
Return the geometry of a face.
LWT_ELEMID * lwt_AddLine(LWT_TOPOLOGY *topo, LWLINE *line, double tol, int *nedges)
Adds a linestring to the topology.
static void _lwt_release_faces(LWT_ISO_FACE *faces, int num_faces)
#define _LWT_MINTOLERANCE(topo, geom)
Datum covers(PG_FUNCTION_ARGS)
const LWT_BE_IFACE * be_iface