PostGIS  3.4.0dev-r@@SVN_REVISION@@

◆ 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:2186
#define WKB_HEX
Definition: liblwgeom.h:2180
void lwfree(void *mem)
Definition: lwutil.c:242
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
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:190
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: