extern char GEOSisSimple(Geometry *g1);
extern char GEOSisRing(Geometry *g1);
extern Geometry *GEOSpointonSurface(Geometry *g1);
-extern Geometry *GEOSGetCentroid(Geometry *g);
+extern Geometry *GEOSGetCentroid(Geometry *g, int *failure);
extern bool GEOSHasZ(Geometry *g1);
extern void GEOSSetSRID(Geometry *g, int SRID);
{
PG_LWGEOM *geom, *result;
Geometry *geosgeom, *geosresult;
+ int failure;
#ifdef PROFILE
profstart(PROF_QRUN);
#ifdef PROFILE
profstart(PROF_GRUN);
#endif
- geosresult = GEOSGetCentroid(geosgeom);
+ geosresult = GEOSGetCentroid(geosgeom, &failure);
#ifdef PROFILE
profstop(PROF_GRUN);
#endif
if ( geosresult == NULL )
{
+ if ( failure ) {
+ GEOSdeleteGeometry(geosgeom);
+ elog(ERROR,"GEOS getCentroid() threw an error!");
+ }
GEOSdeleteGeometry(geosgeom);
- elog(ERROR,"GEOS getCentroid() threw an error!");
PG_RETURN_NULL();
}
extern "C" char GEOSequals(Geometry *g1, Geometry*g2);
extern "C" char GEOSisRing(Geometry *g1);
extern "C" Geometry *GEOSpointonSurface(Geometry *g1);
-extern "C" Geometry *GEOSGetCentroid(Geometry *g1);
+extern "C" Geometry *GEOSGetCentroid(Geometry *g1, int *failure);
extern "C" void NOTICE_MESSAGE(char *msg);
extern "C" bool GEOSHasZ(Geometry *g1);
}
}
-Geometry *GEOSGetCentroid(Geometry *g)
+Geometry *GEOSGetCentroid(Geometry *g, int *failure)
{
try{
Geometry *ret = g->getCentroid();
- if ( ret == NULL ) {
- ret = geomFactory->createGeometryCollection();
- }
+ *failure = 0;
return ret;
}
catch (GEOSException *ge)
{
+ *failure = 1;
NOTICE_MESSAGE((char *)ge->toString().c_str());
delete ge;
return NULL;
}
catch(...)
{
+ *failure = 1;
return NULL;
}
}