Construct an rt_raster from a binary WKB representation.
279 const uint8_t *ptr = wkb;
280 const uint8_t *wkbend = NULL;
283 uint16_t version = 0;
291 rterror(
"rt_raster_from_wkb: wkb size (%" PRIu32
292 ") < min size (%zu)",
296 wkbend = wkb + wkbsize;
298 RASTER_DEBUGF(3,
"Parsing header from wkb position %zu (expected 0)",
299 d_binptr_to_pos(ptr, wkbend, wkbsize));
310 rterror(
"rt_raster_from_wkb: WKB version %d unsupported", version);
317 rterror(
"rt_raster_from_wkb: Out of memory allocating raster for wkb input");
333 assert(ptr <= wkbend);
347 RASTER_DEBUGF(3,
"Parsing raster header finished at wkb position %zu (expected 61)",
348 d_binptr_to_pos(ptr, wkbend, wkbsize));
353 if (!
rast->numBands) {
356 rtwarn(
"%zu bytes of WKB remained unparsed", wkbend - ptr);
358 else if (ptr > wkbend) {
360 rtwarn(
"We parsed %zu bytes more then available!", ptr - wkbend);
370 rterror(
"rt_raster_from_wkb: Out of memory allocating bands for WKB raster decoding");
377 assert(ptr <= wkbend);
379 for (i = 0; i <
rast->numBands; ++i) {
381 d_binptr_to_pos(ptr, wkbend, wkbsize));
384 &ptr, wkbend, endian);
386 rterror(
"rt_raster_from_wkb: Error reading WKB form of band %d", i);
398 rtwarn(
"%zu bytes of WKB remained unparsed", wkbend - ptr);
400 else if (ptr > wkbend) {
402 rtwarn(
"We parsed %zu bytes more then available!", ptr - wkbend);
int32_t clamp_srid(int32_t srid)
Return a valid SRID from an arbitrary integer Raises a notice if what comes out is different from wha...
void rterror(const char *fmt,...) __attribute__((format(printf
Wrappers used for reporting errors and info.
void * rtalloc(size_t size)
Wrappers used for managing memory.
#define RASTER_DEBUGF(level, msg,...)
void void void rtwarn(const char *fmt,...) __attribute__((format(printf
void rt_raster_destroy(rt_raster raster)
Release memory associated to a raster.
void rt_band_destroy(rt_band band)
Destroy a raster band.
struct rt_raster_t * rt_raster
Types definitions.
double read_float64(const uint8_t **from, uint8_t littleEndian)
int32_t read_int32(const uint8_t **from, uint8_t littleEndian)
uint16_t read_uint16(const uint8_t **from, uint8_t littleEndian)
#define CHECK_BINPTR_POSITION(ptr, end, size, pos)
static rt_band rt_band_from_wkb(uint16_t width, uint16_t height, const uint8_t **ptr, const uint8_t *end, uint8_t littleEndian)