]> granicus.if.org Git - postgis/commitdiff
Added box2d->geometry cast.
authorSandro Santilli <strk@keybit.net>
Fri, 24 Sep 2004 09:46:53 +0000 (09:46 +0000)
committerSandro Santilli <strk@keybit.net>
Fri, 24 Sep 2004 09:46:53 +0000 (09:46 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@890 b70326c6-7e19-0410-871a-916f4a2858ee

lwgeom/lwgeom_box2dfloat4.c
lwgeom/lwpostgis.sql.in

index 05f615a93f0398ee5cb93840835e4d6d8226452a..b9581c59641870673cf563019f295e4ef7870584 100644 (file)
@@ -34,6 +34,7 @@ Datum BOX2DFLOAT4_ymin(PG_FUNCTION_ARGS);
 Datum BOX2DFLOAT4_xmax(PG_FUNCTION_ARGS);
 Datum BOX2DFLOAT4_ymax(PG_FUNCTION_ARGS);
 Datum BOX2DFLOAT4_combine(PG_FUNCTION_ARGS);
+Datum BOX2DFLOAT4_to_LWGEOM(PG_FUNCTION_ARGS);
 
 
 
@@ -415,3 +416,39 @@ Datum BOX2DFLOAT4_combine(PG_FUNCTION_ARGS)
        PG_RETURN_POINTER(result);
 }
 
+PG_FUNCTION_INFO_V1(BOX2DFLOAT4_to_LWGEOM);
+Datum BOX2DFLOAT4_to_LWGEOM(PG_FUNCTION_ARGS)
+{
+       BOX2DFLOAT4 *box = (BOX2DFLOAT4 *)PG_GETARG_POINTER(0);
+       POINT2D *pts = palloc(sizeof(POINT2D)*5);
+       POINTARRAY *pa[1];
+       LWPOLY *poly;
+       int wantbbox = 0;
+       LWGEOM *result;
+       char *ser;
+
+       // Assign coordinates to POINT2D array
+       pts[0].x = box->xmin; pts[0].y = box->ymin;
+       pts[1].x = box->xmin; pts[1].y = box->ymax;
+       pts[2].x = box->xmax; pts[2].y = box->ymax;
+       pts[3].x = box->xmax; pts[3].y = box->ymin;
+       pts[4].x = box->xmin; pts[4].y = box->ymin;
+
+       // Construct point array
+       pa[0] = palloc(sizeof(POINTARRAY));
+       pa[0]->serialized_pointlist = (char *)pts;
+       pa[0]->ndims = 2;
+       pa[0]->npoints = 5;
+
+       // Construct polygon
+       poly = lwpoly_construct(2, -1, 1, pa);
+
+       // Serialize polygon
+       ser = lwpoly_serialize(poly);
+
+       // Construct LWGEOM 
+       result = LWGEOM_construct(ser, -1, wantbbox);
+       
+       PG_RETURN_POINTER(result);
+}
+
index dbdb2e01483f81ff98fa7badfa294fad65371157..29d67754c00fe4cf4a04f5032791e06e4cb81aab 100644 (file)
@@ -2698,6 +2698,11 @@ CREATEFUNCTION box3dtobox(box3d)
         AS 'SELECT box($1)'
        LANGUAGE 'SQL' WITH (isstrict,iscachable);
 
+CREATEFUNCTION geometry(box2d)
+        RETURNS geometry
+        AS '@MODULE_FILENAME@','BOX2DFLOAT4_to_LWGEOM'
+        LANGUAGE 'C' WITH (isstrict,iscachable);
+
 CREATEFUNCTION geometry(box3d)
         RETURNS geometry
         AS '@MODULE_FILENAME@','BOX3D_to_LWGEOM'
@@ -2730,6 +2735,7 @@ CREATE CAST (geometry AS box3d) WITH FUNCTION box3d(geometry) AS IMPLICIT;
 CREATE CAST (geometry AS box) WITH FUNCTION box(geometry) AS IMPLICIT;
 CREATE CAST (box3d AS box2d) WITH FUNCTION box2d(box3d) AS IMPLICIT;
 CREATE CAST (box2d AS box3d) WITH FUNCTION box3d(box2d) AS IMPLICIT;
+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;