855{
858 uint8_t *wkb;
859 size_t wkb_size;
860 bytea *result;
862
863 if (PG_ARGISNULL(0))
864 PG_RETURN_NULL();
865
866
867 geom = PG_GETARG_GSERIALIZED_P(0);
869
870
871
872 if ( (PG_NARGS()>1) && (!PG_ARGISNULL(1)) )
873 {
874 text *wkb_endian = PG_GETARG_TEXT_P(1);
875
876 if ( ! strncmp(VARDATA(wkb_endian), "xdr", 3) ||
877 ! strncmp(VARDATA(wkb_endian), "XDR", 3) )
878 {
880 }
881 else
882 {
884 }
885 }
886
887
890
891
892 result = palloc(wkb_size + VARHDRSZ);
893 memcpy(VARDATA(result), wkb, wkb_size);
894 SET_VARSIZE(result, wkb_size + VARHDRSZ);
896
897
898 PG_FREE_IF_COPY(geom, 0);
899 PG_RETURN_BYTEA_P(result);
900}
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
void lwgeom_free(LWGEOM *geom)
uint8_t * lwgeom_to_wkb(const LWGEOM *geom, uint8_t variant, size_t *size_out)
Convert LWGEOM to a char* in WKB format.