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

◆ lwgeom_to_twkb_with_idlist()

uint8_t * lwgeom_to_twkb_with_idlist ( const LWGEOM geom,
int64_t *  idlist,
uint8_t  variant,
int8_t  precision_xy,
int8_t  precision_z,
int8_t  precision_m,
size_t *  twkb_size 
)
extern

Convert LWGEOM to a char* in TWKB format.

Caller is responsible for freeing the returned array.

Definition at line 589 of file lwout_twkb.c.

592{
593 LWDEBUGF(2, "Entered %s", __func__);
594 LWDEBUGF(2, "variant value %x", variant);
595
596 TWKB_GLOBALS tg;
597 TWKB_STATE ts;
598 bytebuffer_t geom_bytebuffer;
599
600 uint8_t *twkb;
601
602 memset(&ts, 0, sizeof(TWKB_STATE));
603 memset(&tg, 0, sizeof(TWKB_GLOBALS));
604
605 tg.variant = variant;
606 tg.prec_xy = precision_xy;
607 tg.prec_z = precision_z;
608 tg.prec_m = precision_m;
609
610 if ( idlist && ! lwgeom_is_collection(geom) )
611 {
612 lwerror("Only collections can support ID lists");
613 return NULL;
614 }
615
616 if ( ! geom )
617 {
618 LWDEBUG(4,"Cannot convert NULL into TWKB.");
619 lwerror("Cannot convert NULL into TWKB");
620 return NULL;
621 }
622
623 ts.idlist = idlist;
624 ts.header_buf = NULL;
625 ts.geom_buf = &geom_bytebuffer;
627 lwgeom_write_to_buffer(geom, &tg, &ts);
628
629 twkb = bytebuffer_get_buffer_copy(ts.geom_buf, twkb_size);
631 return twkb;
632}
uint8_t * bytebuffer_get_buffer_copy(const bytebuffer_t *s, size_t *buffer_length)
Returns a copy of the internal buffer.
Definition bytebuffer.c:105
void bytebuffer_destroy_buffer(bytebuffer_t *s)
Free the bytebuffer_t and all memory managed within it.
Definition bytebuffer.c:56
void bytebuffer_init_with_size(bytebuffer_t *s, size_t size)
Allocate just the internal buffer of an existing bytebuffer_t struct.
Definition bytebuffer.c:36
static uint8_t variant
Definition cu_in_twkb.c:26
int lwgeom_is_collection(const LWGEOM *lwgeom)
Determine whether a LWGEOM can contain sub-geometries or not.
Definition lwgeom.c:1079
#define LWDEBUG(level, msg)
Definition lwgeom_log.h:83
#define LWDEBUGF(level, msg,...)
Definition lwgeom_log.h:88
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition lwutil.c:190
static int lwgeom_write_to_buffer(const LWGEOM *geom, TWKB_GLOBALS *globals, TWKB_STATE *parent_state)
Definition lwout_twkb.c:429
int8_t prec_xy
Definition lwout_twkb.h:79
uint8_t variant
Definition lwout_twkb.h:78
int8_t prec_z
Definition lwout_twkb.h:80
int8_t prec_m
Definition lwout_twkb.h:81
const int64_t * idlist
Definition lwout_twkb.h:92
bytebuffer_t * header_buf
Definition lwout_twkb.h:88
bytebuffer_t * geom_buf
Definition lwout_twkb.h:89

References bytebuffer_destroy_buffer(), bytebuffer_get_buffer_copy(), bytebuffer_init_with_size(), TWKB_STATE::geom_buf, TWKB_STATE::header_buf, TWKB_STATE::idlist, LWDEBUG, LWDEBUGF, lwerror(), lwgeom_is_collection(), lwgeom_write_to_buffer(), TWKB_GLOBALS::prec_m, TWKB_GLOBALS::prec_xy, TWKB_GLOBALS::prec_z, variant, and TWKB_GLOBALS::variant.

Referenced by cu_twkb_idlist(), lwgeom_to_twkb(), and TWKBFromLWGEOMArray().

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