798 #if POSTGIS_GEOS_VERSION < 30800
799 lwpgerror(
"The GEOS version this PostGIS binary "
800 "was compiled against (%d) doesn't support "
801 "'GEOSCoverageUnion' function (3.8.0+ required)",
812 GEOSGeometry **geoms = NULL;
813 GEOSGeometry *geos = NULL;
814 GEOSGeometry *geos_result = NULL;
817 ArrayType *array = PG_GETARG_ARRAYTYPE_P(0);
818 uint32 nelems = ArrayGetNItems(ARR_NDIM(array), ARR_DIMS(array));
819 ArrayIterator iterator = array_create_iterator(array, 0, NULL);
826 geoms = palloc(
sizeof(GEOSGeometry *) * nelems);
830 while (array_iterate(iterator, &
value, &isnull))
834 if (isnull)
continue;
844 geoms[ngeoms++] = geos;
846 array_free_iterator(iterator);
851 geos = GEOSGeom_createCollection(
852 GEOS_GEOMETRYCOLLECTION,
861 geos_result = GEOSCoverageUnion(geos);
862 GEOSGeom_destroy(geos);
867 GEOSGeom_destroy(geos_result);
869 PG_RETURN_POINTER(
result);
char result[OUT_DOUBLE_BUFFER_SIZE]
int gserialized_is_empty(const GSERIALIZED *g)
Check if a GSERIALIZED is empty without deserializing first.
void lwgeom_geos_error(const char *fmt,...)
static void coverage_destroy_geoms(GEOSGeometry **geoms, uint32 ngeoms)
GSERIALIZED * GEOS2POSTGIS(GEOSGeom geom, char want3d)
GEOSGeometry * POSTGIS2GEOS(const GSERIALIZED *pglwgeom)
#define HANDLE_GEOS_ERROR(label)
#define POSTGIS_GEOS_VERSION