PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ 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.
const char * lwtype_name(uint8_t type)
Return the type name string associated with a type number (e.g.
Definition lwutil.c:216
#define MULTILINETYPE
Definition liblwgeom.h:106
#define LINETYPE
Definition liblwgeom.h:103
#define MULTIPOLYGONTYPE
Definition liblwgeom.h:107
#define POLYGONTYPE
Definition liblwgeom.h:104
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.
rt_raster rt_raster_deserialize(void *serialized, int header_only)
Return a raster from a serialized form.
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:2452

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: