343 static const char* default_defid =
"x3d:";
345 const char* defid = default_defid;
349 version = PG_GETARG_INT32(0);
352 elog(ERROR,
"Only X3D version 3 are supported");
357 if ( PG_ARGISNULL(1) ) PG_RETURN_NULL();
358 geom = PG_GETARG_GSERIALIZED_P(1);
361 if (PG_NARGS() >2 && !PG_ARGISNULL(2))
367 if (PG_NARGS() >3 && !PG_ARGISNULL(3))
368 option = PG_GETARG_INT32(3);
372 if (PG_NARGS() >4 && !PG_ARGISNULL(4))
374 defid_text = PG_GETARG_TEXT_P(4);
375 if ( VARSIZE_ANY_EXHDR(defid_text) == 0 )
382 defidbuf = palloc(VARSIZE_ANY_EXHDR(defid_text)+2);
383 memcpy(defidbuf, VARDATA(defid_text),
384 VARSIZE_ANY_EXHDR(defid_text));
386 defidbuf[VARSIZE_ANY_EXHDR(defid_text)] =
':';
387 defidbuf[VARSIZE_ANY_EXHDR(defid_text)+1] =
'\0';
395 if (lwgeom->
srid != 4326)
397 PG_FREE_IF_COPY(geom, 1);
400 elog(ERROR,
"Only SRID 4326 is supported for geocoordinates.");
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
#define LW_X3D_USE_GEOCOORDS
lwvarlena_t * lwgeom_to_x3d3(const LWGEOM *geom, int precision, int opts, const char *defid)
#define OUT_DEFAULT_DECIMAL_DIGITS