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

◆ lwgeom_to_wkb_buffer()

uint8_t * lwgeom_to_wkb_buffer ( const LWGEOM geom,
uint8_t  variant 
)
Parameters
geomgeometry to convert to WKB
variantoutput format to use (WKB_ISO, WKB_SFSQL, WKB_EXTENDED, WKB_NDR, WKB_XDR)

Definition at line 815 of file lwout_wkb.c.

816{
817 size_t b_size = lwgeom_to_wkb_size(geom, variant);
818 /* Hex string takes twice as much space as binary + a null character */
819 if (variant & WKB_HEX)
820 {
821 b_size = 2 * b_size + 1;
822 }
823
824 uint8_t *buffer = (uint8_t *)lwalloc(b_size);
825 ptrdiff_t written_size = lwgeom_to_wkb_write_buf(geom, variant, buffer);
826 if (variant & WKB_HEX)
827 {
828 buffer[written_size] = '\0';
829 written_size++;
830 }
831
832 if (written_size != (ptrdiff_t)b_size)
833 {
834 char *wkt = lwgeom_to_wkt(geom, WKT_EXTENDED, 15, NULL);
835 lwerror("Output WKB is not the same size as the allocated buffer. Variant: %u, Geom: %s", variant, wkt);
836 lwfree(wkt);
837 lwfree(buffer);
838 return NULL;
839 }
840
841 return buffer;
842}
static uint8_t variant
Definition cu_in_twkb.c:26
#define WKT_EXTENDED
Definition liblwgeom.h:2221
char * lwgeom_to_wkt(const LWGEOM *geom, uint8_t variant, int precision, size_t *size_out)
WKT emitter function.
Definition lwout_wkt.c:708
void * lwalloc(size_t size)
Definition lwutil.c:227
#define WKB_HEX
Definition liblwgeom.h:2215
void lwfree(void *mem)
Definition lwutil.c:248
void void lwerror(const char *fmt,...) __attribute__((format(printf
Write a notice out to the error handler.
static size_t lwgeom_to_wkb_size(const LWGEOM *geom, uint8_t variant)
Definition lwout_wkb.c:676
static ptrdiff_t lwgeom_to_wkb_write_buf(const LWGEOM *geom, uint8_t variant, uint8_t *buffer)
Convert LWGEOM to a char* in WKB format.
Definition lwout_wkb.c:797
Datum buffer(PG_FUNCTION_ARGS)

References buffer(), lwalloc(), lwerror(), lwfree(), lwgeom_to_wkb_size(), lwgeom_to_wkb_write_buf(), lwgeom_to_wkt(), variant, WKB_HEX, and WKT_EXTENDED.

Referenced by cu_wkb(), cu_wkb_from_hexwkb(), and lwgeom_to_hexwkb_buffer().

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