From 60ea69593c8ad77fe76e050626a46647d1488f2b Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Fri, 23 Sep 2005 16:43:56 +0000 Subject: [PATCH] Added wrappers for ewkb output git-svn-id: http://svn.osgeo.org/postgis/trunk@1926 b70326c6-7e19-0410-871a-916f4a2858ee --- lwgeom/liblwgeom.h | 7 +++++-- lwgeom/lwgeom.c | 21 +++++++++++++++++++++ lwgeom/lwgeom.h | 2 ++ lwgeom/lwgeom_api.c | 14 +++++++++++++- 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/lwgeom/liblwgeom.h b/lwgeom/liblwgeom.h index c7601e5dc..b30258ddb 100644 --- a/lwgeom/liblwgeom.h +++ b/lwgeom/liblwgeom.h @@ -677,8 +677,6 @@ extern int pglwgeom_getSRID(PG_LWGEOM *lwgeom); 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 @@ -1021,8 +1019,13 @@ extern LWCOLLECTION *lwcollection_segmentize2d(LWCOLLECTION *coll, double dist); 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); diff --git a/lwgeom/lwgeom.c b/lwgeom/lwgeom.c index 29d634500..8267f10f8 100644 --- a/lwgeom/lwgeom.c +++ b/lwgeom/lwgeom.c @@ -387,6 +387,27 @@ lwgeom_to_hexwkb(LWGEOM *lwgeom, unsigned int byteorder) 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 diff --git a/lwgeom/lwgeom.h b/lwgeom/lwgeom.h index b5384b085..91574f363 100644 --- a/lwgeom/lwgeom.h +++ b/lwgeom/lwgeom.h @@ -33,6 +33,8 @@ typedef struct LWGEOM_T *LWGEOM; 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); diff --git a/lwgeom/lwgeom_api.c b/lwgeom/lwgeom_api.c index 5394d7349..b82142be5 100644 --- a/lwgeom/lwgeom_api.c +++ b/lwgeom/lwgeom_api.c @@ -6,13 +6,14 @@ #include #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 @@ -1675,6 +1676,17 @@ pglwgeom_from_ewkb(uchar *ewkb, size_t ewkblen) 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. -- 2.50.0