PostGIS  3.7.0dev-r@@SVN_REVISION@@

◆ RASTER_intersectionFractions()

Datum RASTER_intersectionFractions ( PG_FUNCTION_ARGS  )

Definition at line 1325 of file rtpg_spatial_relationship.c.

1326 {
1327 #if POSTGIS_GEOS_VERSION < 31400
1328  elog(ERROR, "The GEOS version this PostGIS binary "
1329  "was compiled against (%d) does not include the "
1330  "'GEOSGridIntersectionFractions' function (3.14.0+ required)",
1332  PG_RETURN_NULL();
1333 #else
1334  rt_pgraster *pgrast_in = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
1335  GSERIALIZED *gser = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
1336  LWGEOM *lwg = lwgeom_from_gserialized(gser);
1337  rt_raster rast_out = NULL;
1338  rt_pgraster *pgrast_out = NULL;
1339  rt_raster rast_in = rt_raster_deserialize(pgrast_in, FALSE);
1340 
1341  int gtype = lwgeom_get_type(lwg);
1342  if (gtype != POLYGONTYPE && gtype != MULTIPOLYGONTYPE &&
1343  gtype != LINETYPE && gtype != MULTILINETYPE)
1344  {
1345  elog(ERROR, "ST_IntersectionFractions: Unsupported geometry type '%s'", lwtype_name(gtype));
1346  }
1347 
1348  rast_out = rt_raster_intersection_fractions(rast_in, lwg);
1349  if (!rast_out)
1350  elog(ERROR, "ST_IntersectionFractions: calculation returned NULL");
1351 
1352  pgrast_out = rt_raster_serialize(rast_out);
1353  rt_raster_destroy(rast_out);
1354  if (!pgrast_out)
1355  PG_RETURN_NULL();
1356 
1357  SET_VARSIZE(pgrast_out, pgrast_out->size);
1358  PG_RETURN_POINTER(pgrast_out);
1359 
1360 #endif /* POSTGIS_GEOS_VERSION < 31400 */
1361 }
#define FALSE
Definition: dbfopen.c:72
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
Definition: gserialized.c:268
#define MULTILINETYPE
Definition: liblwgeom.h:106
#define LINETYPE
Definition: liblwgeom.h:103
#define MULTIPOLYGONTYPE
Definition: liblwgeom.h:107
#define POLYGONTYPE
Definition: liblwgeom.h:104
const char * lwtype_name(uint8_t type)
Return the type name string associated with a type number (e.g.
Definition: lwutil.c:216
void rt_raster_destroy(rt_raster raster)
Release memory associated to a raster.
Definition: rt_raster.c:86
void * rt_raster_serialize(rt_raster raster)
Return this raster in serialized form.
Definition: rt_serialize.c:521
rt_raster rt_raster_deserialize(void *serialized, int header_only)
Return a raster from a serialized form.
Definition: rt_serialize.c:725
static uint32_t lwgeom_get_type(const LWGEOM *geom)
Return LWTYPE number.
Definition: lwinline.h:141
#define POSTGIS_GEOS_VERSION
Definition: sqldefines.h:11
Struct definitions.
Definition: librtcore.h:2440

References FALSE, LINETYPE, lwgeom_from_gserialized(), lwgeom_get_type(), lwtype_name(), MULTILINETYPE, MULTIPOLYGONTYPE, POLYGONTYPE, POSTGIS_GEOS_VERSION, rt_raster_deserialize(), rt_raster_destroy(), rt_raster_serialize(), and rt_raster_serialized_t::size.

Here is the call graph for this function: