#include "stringBuffer.h"
-//#define DEBUG
+//#define DEBUG 1
#include "lwgeom_pg.h"
#include "wktparse.h"
Datum parse_WKT_lwgeom(PG_FUNCTION_ARGS);
#if USE_VERSION > 73
Datum LWGEOM_recv(PG_FUNCTION_ARGS);
+Datum LWGEOM_send(PG_FUNCTION_ARGS);
#endif
#endif
#ifdef DEBUG
- elog(NOTICE, "LWGEOMFromWKB returned %s", unparse_WKB(SERIALIZED_FORM(result),pg_alloc,pg_free));
+ elog(NOTICE, "LWGEOMFromWKB returned %s", unparse_WKB(SERIALIZED_FORM(result),pg_alloc,pg_free,-1));
#endif
PG_RETURN_POINTER(result);
}
+
+PG_FUNCTION_INFO_V1(LWGEOM_send);
+Datum LWGEOM_send(PG_FUNCTION_ARGS)
+{
+ PG_LWGEOM *lwgeom_input; // SRID=#;<hexized wkb>
+ char *hexized_wkb_srid;
+ char *hexized_wkb; // hexized_wkb_srid w/o srid
+ char *result; //wkb
+ int len_hexized_wkb;
+ int size_result;
+ char *semicolonLoc;
+ int t;
+ text *type;
+ int SRID=-1;
+
+#ifdef DEBUG
+ elog(NOTICE, "LWGEOM_send called");
+#endif
+
+ lwgeom_input = (PG_LWGEOM *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+ hexized_wkb_srid = unparse_WKB(SERIALIZED_FORM(lwgeom_input),
+ lwalloc, lwfree, -1);
+
+//elog(NOTICE, "in WKBFromLWGEOM with WKB = '%s'", hexized_wkb_srid);
+
+ hexized_wkb = hexized_wkb_srid;
+ semicolonLoc = strchr(hexized_wkb_srid,';');
+
+
+ if (semicolonLoc != NULL)
+ {
+ SRID=atoi(hexized_wkb+5); // SRID=
+ hexized_wkb = (semicolonLoc+1);
+ }
+
+#ifdef DEBUG
+ elog(NOTICE, "SRID=%d", SRID);
#endif
+
+//elog(NOTICE, "in WKBFromLWGEOM with WKB (with no 'SRID=#;' = '%s'", hexized_wkb);
+
+ len_hexized_wkb = strlen(hexized_wkb);
+ size_result = len_hexized_wkb/2 + 4;
+ result = palloc(size_result);
+
+ memcpy(result, &size_result,4); // size header
+
+ // have a hexized string, want to make it binary
+ for (t=0; t< (len_hexized_wkb/2); t++)
+ {
+ ((unsigned char *) result +4)[t] = parse_hex( hexized_wkb + (t*2) );
+ }
+
+ pfree(hexized_wkb_srid);
+
+ PG_RETURN_POINTER(result);
+}
+
+#endif // USE_VERSION > 73