Allocate a new GSERIALIZED from an LWGEOM.
For all non-point types, a bounding box will be calculated and embedded in the serialization. The geodetic flag is used to control the box calculation (cartesian or geocentric). If set, the size pointer will contain the size of the final output, which is useful for setting the PgSQL VARSIZE information.
Definition at line 1147 of file gserialized2.c.
1148{
1149 size_t expected_size = 0;
1150 size_t return_size = 0;
1151 uint8_t *ptr = NULL;
1153 assert(geom);
1154
1155
1156
1157
1159 {
1161 }
1162
1163
1164
1165
1167
1168
1172
1173
1175
1176
1177
1178
1181
1182
1183 ptr += 8;
1184
1185
1187
1188
1191
1192
1194
1195
1196 return_size = ptr - (uint8_t*)g;
1197
1198 assert(expected_size == return_size);
1199 if (size)
1200 *size = return_size;
1201
1202 return g;
1203}
void gserialized2_set_srid(GSERIALIZED *g, int32_t srid)
Write the SRID into the serialized form (it is packed into three bytes so this is a handy function).
static size_t gserialized2_from_gbox(const GBOX *gbox, uint8_t *buf)
uint8_t lwflags_get_g2flags(lwflags_t lwflags)
static size_t gserialized2_from_lwgeom_any(const LWGEOM *geom, uint8_t *buf)
size_t gserialized2_from_lwgeom_size(const LWGEOM *geom)
Return the memory size a GSERIALIZED will occupy for a given LWGEOM.
static size_t gserialized2_from_extended_flags(lwflags_t lwflags, uint8_t *buf)
#define FLAGS_SET_BBOX(flags, value)
int lwgeom_needs_bbox(const LWGEOM *geom)
Check whether or not a lwgeom is big enough to warrant a bounding box.
void * lwalloc(size_t size)
#define LWSIZE_SET(varsize, len)
void lwgeom_add_bbox(LWGEOM *lwgeom)
Compute a bbox if not already computed.
static int lwgeom_is_empty(const LWGEOM *geom)
Return true or false depending on whether a geometry is an "empty" geometry (no vertices members)
References LWGEOM::bbox, LWGEOM::flags, FLAGS_SET_BBOX, GSERIALIZED::gflags, gserialized2_from_extended_flags(), gserialized2_from_gbox(), gserialized2_from_lwgeom_any(), gserialized2_from_lwgeom_size(), gserialized2_set_srid(), lwalloc(), lwflags_get_g2flags(), lwgeom_add_bbox(), lwgeom_is_empty(), lwgeom_needs_bbox(), LWSIZE_SET, GSERIALIZED::size, and LWGEOM::srid.
Referenced by gserialized_from_lwgeom(), peek2_point_helper(), test_gserialized2_extended_flags(), test_gserialized2_is_empty(), test_gserialized2_peek_gbox_p_gets_correct_box(), test_gserialized2_peek_gbox_p_no_box_when_empty(), test_lwgeom_from_gserialized2(), and test_on_gser2_lwgeom_count_vertices().