PostGIS  2.5.7dev-r@@SVN_REVISION@@

◆ ST_OrientedEnvelope()

Datum ST_OrientedEnvelope ( PG_FUNCTION_ARGS  )

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

3475 {
3476 #if POSTGIS_GEOS_VERSION < 36
3477  lwpgerror("The GEOS version this PostGIS binary "
3478  "was compiled against (%d) doesn't support "
3479  "'ST_OrientedEnvelope' function (3.6.0+ required)",
3481  PG_RETURN_NULL();
3482 #else
3483  GSERIALIZED* input;
3484  GSERIALIZED* result;
3485  GEOSGeometry* input_geos;
3486  GEOSGeometry* result_geos;
3487  int srid;
3488 
3489  initGEOS(lwpgnotice, lwgeom_geos_error);
3490 
3491  input = PG_GETARG_GSERIALIZED_P(0);
3492  srid = gserialized_get_srid(input);
3493  input_geos = POSTGIS2GEOS(input);
3494  if (!input_geos)
3495  HANDLE_GEOS_ERROR("Geometry could not be converted to GEOS");
3496 
3497  result_geos = GEOSMinimumRotatedRectangle(input_geos);
3498  GEOSGeom_destroy(input_geos);
3499  if (!result_geos)
3500  HANDLE_GEOS_ERROR("Error computing oriented envelope");
3501 
3502  GEOSSetSRID(result_geos, srid);
3503  result = GEOS2POSTGIS(result_geos, LW_FALSE);
3504  GEOSGeom_destroy(result_geos);
3505 
3506  PG_FREE_IF_COPY(input, 0);
3507  PG_RETURN_POINTER(result);
3508 #endif
3509 }
int32_t gserialized_get_srid(const GSERIALIZED *s)
Extract the SRID from the serialized form (it is packed into three bytes so this is a handy function)...
Definition: g_serialized.c:100
void lwgeom_geos_error(const char *fmt,...)
#define LW_FALSE
Definition: liblwgeom.h:77
#define HANDLE_GEOS_ERROR(label)
GEOSGeometry * POSTGIS2GEOS(GSERIALIZED *pglwgeom)
GSERIALIZED * GEOS2POSTGIS(GEOSGeom geom, char want3d)
#define POSTGIS_GEOS_VERSION
Definition: sqldefines.h:10

References GEOS2POSTGIS(), gserialized_get_srid(), HANDLE_GEOS_ERROR, LW_FALSE, lwgeom_geos_error(), POSTGIS2GEOS(), and POSTGIS_GEOS_VERSION.

Here is the call graph for this function: