PostGIS  3.4.0dev-r@@SVN_REVISION@@

◆ polygonize_garray()

Datum polygonize_garray ( PG_FUNCTION_ARGS  )

Definition at line 3007 of file postgis/lwgeom_geos.c.

3008 {
3009  ArrayType *array;
3010  int is3d = 0;
3011  uint32 nelems, i;
3013  GEOSGeometry *geos_result;
3014  const GEOSGeometry **vgeoms;
3015  int32_t srid = SRID_UNKNOWN;
3016 #if POSTGIS_DEBUG_LEVEL >= 3
3017  static int call=1;
3018 #endif
3019 
3020 #if POSTGIS_DEBUG_LEVEL >= 3
3021  call++;
3022 #endif
3023 
3024  if (PG_ARGISNULL(0))
3025  PG_RETURN_NULL();
3026 
3027  array = PG_GETARG_ARRAYTYPE_P(0);
3028  nelems = array_nelems_not_null(array);
3029 
3030  if (nelems == 0)
3031  PG_RETURN_NULL();
3032 
3033  POSTGIS_DEBUGF(3, "polygonize_garray: number of non-null elements: %d", nelems);
3034 
3035  /* Ok, we really need geos now ;) */
3036  initGEOS(lwpgnotice, lwgeom_geos_error);
3037 
3038  vgeoms = (const GEOSGeometry**) ARRAY2GEOS(array, nelems, &is3d, &srid);
3039 
3040  POSTGIS_DEBUG(3, "polygonize_garray: invoking GEOSpolygonize");
3041 
3042  geos_result = GEOSPolygonize(vgeoms, nelems);
3043 
3044  POSTGIS_DEBUG(3, "polygonize_garray: GEOSpolygonize returned");
3045 
3046  for (i=0; i<nelems; ++i) GEOSGeom_destroy((GEOSGeometry *)vgeoms[i]);
3047  pfree(vgeoms);
3048 
3049  if ( ! geos_result ) PG_RETURN_NULL();
3050 
3051  GEOSSetSRID(geos_result, srid);
3052  result = GEOS2POSTGIS(geos_result, is3d);
3053  GEOSGeom_destroy(geos_result);
3054  if (!result)
3055  {
3056  elog(ERROR, "%s returned an error", __func__);
3057  PG_RETURN_NULL(); /*never get here */
3058  }
3059 
3060  PG_RETURN_POINTER(result);
3061 }
char result[OUT_DOUBLE_BUFFER_SIZE]
Definition: cu_print.c:262
void lwgeom_geos_error(const char *fmt,...)
#define SRID_UNKNOWN
Unknown SRID value.
Definition: liblwgeom.h:215
uint32_t array_nelems_not_null(ArrayType *array)
GSERIALIZED * GEOS2POSTGIS(GEOSGeom geom, char want3d)
GEOSGeometry ** ARRAY2GEOS(ArrayType *array, uint32_t nelems, int *is3d, int *srid)

References ARRAY2GEOS(), array_nelems_not_null(), GEOS2POSTGIS(), lwgeom_geos_error(), result, and SRID_UNKNOWN.

Referenced by pgis_geometry_polygonize_finalfn().

Here is the call graph for this function:
Here is the caller graph for this function: