extern int lwgeom_getsrid(uchar *serialized);
extern PG_LWGEOM *pglwgeom_setSRID(PG_LWGEOM *lwgeom, int32 newSRID);
-extern PG_LWGEOM *pglwgeom_from_ewkb(uchar *ewkb, size_t ewkblen);
-
//------------------------------------------------------
// other stuff
extern uchar parse_hex(char *str);
extern void deparse_hex(uchar str, uchar *result);
extern uchar *parse_lwgeom_wkt(char *wkt_input);
+
extern char *lwgeom_to_ewkt(LWGEOM *lwgeom);
extern char *lwgeom_to_hexwkb(LWGEOM *lwgeom, unsigned int byteorder);
+extern LWGEOM *lwgeom_from_ewkb(uchar *ewkb, size_t ewkblen);
+extern uchar *lwgeom_to_ewkb(LWGEOM *lwgeom, char byteorder, size_t *ewkblen);
+extern PG_LWGEOM *pglwgeom_from_ewkb(uchar *ewkb, size_t ewkblen);
+extern char *pglwgeom_to_ewkb(PG_LWGEOM *geom, char byteorder, size_t *ewkblen);
extern void *lwalloc(size_t size);
extern void *lwrealloc(void *mem, size_t size);
return hexwkb;
}
+/*
+ * Return an alloced string
+ */
+uchar *
+lwgeom_to_ewkb(LWGEOM *lwgeom, char byteorder, size_t *outsize)
+{
+ uchar *serialized = lwgeom_serialize(lwgeom);
+ char *hexwkb = unparse_WKB(serialized, lwalloc, lwfree,
+ byteorder, outsize, 0);
+ lwfree(serialized);
+ return hexwkb;
+}
+
+LWGEOM *
+lwgeom_from_ewkb(uchar *ewkb, size_t size)
+{
+ uchar *pglwgeom = (uchar *)pglwgeom_from_ewkb(ewkb, size);
+ LWGEOM *ret = lwgeom_deserialize(pglwgeom+4);
+ return ret;
+}
+
// geom1 same as geom2
// iff
// + have same type // + have same # objects
extern char *lwgeom_to_wkt(LWGEOM lwgeom);
extern char *lwgeom_to_ewkt(LWGEOM lwgeom);
extern char *lwgeom_to_hexwkb(LWGEOM lwgeom, unsigned int byteorder);
+extern uchar *lwgeom_to_ewkb(char *ewkb, size_t size);
+extern LWGEOM lwgeom_from_ewkb(uchar *ewkb, size_t ewkblen);
// Construction
extern LWGEOM make_lwpoint2d(int SRID, double x, double y);
#include <errno.h>
#include "liblwgeom.h"
+#include "wktparse.h"
//#define PGIS_DEBUG 1
// This is an implementation of the functions defined in lwgeom.h
//forward decs
-extern uchar *parse_lwg(const char* geometry, lwallocator allocfunc, lwreporter errfunc);
+//extern uchar *parse_lwg(const char* geometry, lwallocator allocfunc, lwreporter errfunc);
//*********************************************************************
// BOX routines
return ret;
}
+/*
+ * Return the EWKB (binary) representation for a PG_LWGEOM.
+ */
+char *
+pglwgeom_to_ewkb(PG_LWGEOM *geom, char byteorder, size_t *outsize)
+{
+ uchar *srl = &(geom->type);
+ return unparse_WKB(srl, lwalloc, lwfree,
+ byteorder, outsize, 0);
+}
+
// Set the SRID of a PG_LWGEOM
// Returns a newly allocated PG_LWGEOM object.
// Allocation will be done using the lwalloc.