1978{
1979 ArrayType *array;
1980 int is3d = 0;
1981 uint32 nelems, i;
1983 GEOSGeometry *geos_result;
1984 const GEOSGeometry **vgeoms;
1986
1987 if (PG_ARGISNULL(0))
1988 PG_RETURN_NULL();
1989
1990 array = PG_GETARG_ARRAYTYPE_P(0);
1992
1993 if (nelems == 0)
1994 PG_RETURN_NULL();
1995
1996 POSTGIS_DEBUGF(3, "polygonize_garray: number of non-null elements: %d", nelems);
1997
1998
2000
2001 vgeoms = (
const GEOSGeometry**)
ARRAY2GEOS(array, nelems, &is3d, &srid);
2002
2003 POSTGIS_DEBUG(3, "polygonize_garray: invoking GEOSpolygonize");
2004
2005 geos_result = GEOSPolygonize(vgeoms, nelems);
2006
2007 POSTGIS_DEBUG(3, "polygonize_garray: GEOSpolygonize returned");
2008
2009 for (i=0; i<nelems; ++i) GEOSGeom_destroy((GEOSGeometry *)vgeoms[i]);
2010 pfree(vgeoms);
2011
2012 if ( ! geos_result ) PG_RETURN_NULL();
2013
2014 GEOSSetSRID(geos_result, srid);
2016 GEOSGeom_destroy(geos_result);
2018 {
2019 elog(ERROR, "%s returned an error", __func__);
2020 PG_RETURN_NULL();
2021 }
2022
2023 PG_RETURN_POINTER(
result);
2024}
char result[OUT_DOUBLE_BUFFER_SIZE]
void lwgeom_geos_error(const char *fmt,...)
#define SRID_UNKNOWN
Unknown SRID value.
GSERIALIZED * GEOS2POSTGIS(GEOSGeom geom, char want3d)
static uint32_t array_nelems_not_null(ArrayType *array)
GEOSGeometry ** ARRAY2GEOS(ArrayType *array, uint32_t nelems, int *is3d, int *srid)