PostGIS  3.4.0dev-r@@SVN_REVISION@@

◆ TWKBFromLWGEOM()

Datum TWKBFromLWGEOM ( PG_FUNCTION_ARGS  )

Definition at line 431 of file lwgeom_inout.c.

432 {
433  GSERIALIZED *geom;
434  LWGEOM *lwgeom;
435  uint8_t variant = 0;
436  srs_precision sp;
437 
438  /*check for null input since we cannot have the sql-function as strict.
439  That is because we use null as default for optional ID*/
440  if ( PG_ARGISNULL(0) ) PG_RETURN_NULL();
441 
442  geom = PG_GETARG_GSERIALIZED_P(0);
443 
444  /* Read sensible precision defaults (about one meter) given the srs */
445  sp = srid_axis_precision(gserialized_get_srid(geom), TWKB_DEFAULT_PRECISION);
446 
447  /* If user specified XY precision, use it */
448  if ( PG_NARGS() > 1 && ! PG_ARGISNULL(1) )
449  sp.precision_xy = PG_GETARG_INT32(1);
450 
451  /* If user specified Z precision, use it */
452  if ( PG_NARGS() > 2 && ! PG_ARGISNULL(2) )
453  sp.precision_z = PG_GETARG_INT32(2);
454 
455  /* If user specified M precision, use it */
456  if ( PG_NARGS() > 3 && ! PG_ARGISNULL(3) )
457  sp.precision_m = PG_GETARG_INT32(3);
458 
459  /* We don't permit ids for single geoemtries */
460  variant = variant & ~TWKB_ID;
461 
462  /* If user wants registered twkb sizes */
463  if ( PG_NARGS() > 4 && ! PG_ARGISNULL(4) && PG_GETARG_BOOL(4) )
464  variant |= TWKB_SIZE;
465 
466  /* If user wants bounding boxes */
467  if ( PG_NARGS() > 5 && ! PG_ARGISNULL(5) && PG_GETARG_BOOL(5) )
468  variant |= TWKB_BBOX;
469 
470  /* Create TWKB binary string */
471  lwgeom = lwgeom_from_gserialized(geom);
472  PG_RETURN_BYTEA_P(lwgeom_to_twkb(lwgeom, variant, sp.precision_xy, sp.precision_z, sp.precision_m));
473 }
static uint8_t variant
Definition: cu_in_twkb.c:26
int32_t gserialized_get_srid(const GSERIALIZED *g)
Extract the SRID from the serialized form (it is packed into three bytes so this is a handy function)...
Definition: gserialized.c:126
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
Definition: gserialized.c:239
lwvarlena_t * lwgeom_to_twkb(const LWGEOM *geom, uint8_t variant, int8_t precision_xy, int8_t precision_z, int8_t precision_m)
Definition: lwout_twkb.c:636
#define TWKB_ID
Definition: liblwgeom.h:2194
#define TWKB_DEFAULT_PRECISION
Definition: liblwgeom.h:2197
#define TWKB_SIZE
Definition: liblwgeom.h:2193
#define TWKB_BBOX
Definition: liblwgeom.h:2192

References gserialized_get_srid(), lwgeom_from_gserialized(), lwgeom_to_twkb(), TWKB_BBOX, TWKB_DEFAULT_PRECISION, TWKB_ID, TWKB_SIZE, and variant.

Here is the call graph for this function: