Added geometry::text cast.
authorSandro Santilli <strk@keybit.net>
Tue, 14 Dec 2004 11:02:08 +0000 (11:02 +0000)
committerSandro Santilli <strk@keybit.net>
Tue, 14 Dec 2004 11:02:08 +0000 (11:02 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@1143 b70326c6-7e19-0410-871a-916f4a2858ee

lwgeom/lwgeom_inout.c
lwgeom/lwpostgis.sql.in

index c1127afa0d0e37f3af80550b3dd8dd8d21f79d87..b90baa69eeef419d9edc24e69bd9b53828f352c8 100644 (file)
@@ -124,6 +124,31 @@ Datum LWGEOM_out(PG_FUNCTION_ARGS)
        PG_RETURN_CSTRING(result);
 }
 
+// LWGEOM_to_text(lwgeom) --> text
+// output is 'SRID=#;<wkb in hex form>'
+// ie. 'SRID=-99;0101000000000000000000F03F0000000000000040'
+// WKB is machine endian
+// if SRID=-1, the 'SRID=-1;' will probably not be present.
+PG_FUNCTION_INFO_V1(LWGEOM_to_text);
+Datum LWGEOM_to_text(PG_FUNCTION_ARGS)
+{
+       PG_LWGEOM *lwgeom;
+       char *result;
+       text *text_result;
+
+       init_pg_func();
+
+       lwgeom = (PG_LWGEOM *)  PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+       result = unparse_WKB(SERIALIZED_FORM(lwgeom),lwalloc,lwfree,-1);
+
+       text_result = palloc(strlen(result)+VARHDRSZ);
+       memcpy(VARDATA(text_result),result,strlen(result));
+       VARATT_SIZEP(text_result) = strlen(result)+VARHDRSZ;
+       pfree(result);
+
+       PG_RETURN_POINTER(text_result);
+}
+
 
 
 // LWGEOMFromWKB(wkb,  [SRID] )
index f92dfa14f446048c86355070d9a8e44756cbbc7f..737239cbd585c6e0a01796c63bd5110cdb5d4dac 100644 (file)
@@ -2910,6 +2910,11 @@ CREATEFUNCTION box(box3d)
         AS '@MODULE_FILENAME@','BOX3D_to_BOX'
         LANGUAGE 'C' WITH (isstrict,iscachable);
 
+CREATEFUNCTION text(geometry)
+        RETURNS text
+        AS '@MODULE_FILENAME@','LWGEOM_to_text'
+        LANGUAGE 'C' WITH (isstrict,iscachable);
+
 -- this is kept for backward-compatibility
 CREATEFUNCTION box3dtobox(box3d)
         RETURNS box
@@ -2957,6 +2962,7 @@ CREATE CAST (box2d AS geometry) WITH FUNCTION geometry(box2d) AS IMPLICIT;
 CREATE CAST (box3d AS box) WITH FUNCTION box(box3d) AS IMPLICIT;
 CREATE CAST (box3d AS geometry) WITH FUNCTION geometry(box3d) AS IMPLICIT;
 CREATE CAST (text AS geometry) WITH FUNCTION geometry(text) AS IMPLICIT;
+CREATE CAST (geometry AS text) WITH FUNCTION text(geometry) AS IMPLICIT;
 CREATE CAST (chip AS geometry) WITH FUNCTION geometry(chip) AS IMPLICIT;
 CREATE CAST (bytea AS geometry) WITH FUNCTION geometry(bytea) AS IMPLICIT;
 CREATE CAST (geometry AS bytea) WITH FUNCTION bytea(geometry) AS IMPLICIT;