]> granicus.if.org Git - postgis/commitdiff
Added min/max coordinates from box2d and box3d.
authorSandro Santilli <strk@keybit.net>
Mon, 6 Sep 2004 09:32:19 +0000 (09:32 +0000)
committerSandro Santilli <strk@keybit.net>
Mon, 6 Sep 2004 09:32:19 +0000 (09:32 +0000)
Made geometry->box3d cast actually use 'z' value.

git-svn-id: http://svn.osgeo.org/postgis/trunk@768 b70326c6-7e19-0410-871a-916f4a2858ee

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

index 27da89305c7c6d4b1ca74f744805c4649e1601b0..34d7aafb4a1eff6511d6e25dbdd02817754c3cdc 100644 (file)
@@ -11,9 +11,6 @@ FUNC: KEEPING FUNCTION: [box(geometry)]
 FUNC: KEEPING FUNCTION: [envelope(geometry)]
 FUNC: KEEPING FUNCTION: [equals(geometry, geometry)]
 
-FUNC: KEEPING FUNCTION: [expand(geometry, double precision)]
-FUNC: KEEPING FUNCTION: [expand(box3d, double precision)]
-
 FUNC: KEEPING FUNCTION: [isempty(geometry)]
 FUNC: KEEPING FUNCTION: [segmentize(geometry, double precision)]
 FUNC: KEEPING FUNCTION: [unite_garray(geometry[])]
@@ -64,12 +61,6 @@ FUNC: KEEPING FUNCTION: [compression(chip)]
 FNCAST: KEEPING FNCAST geometry(chip) (see CAST)
 
 --- BOX3D
-FUNC: KEEPING FUNCTION: [xmax(box3d)]
-FUNC: KEEPING FUNCTION: [xmin(box3d)]
-FUNC: KEEPING FUNCTION: [ymax(box3d)]
-FUNC: KEEPING FUNCTION: [ymin(box3d)]
-FUNC: KEEPING FUNCTION: [zmax(box3d)]
-FUNC: KEEPING FUNCTION: [zmin(box3d)]
 FNCAST: KEEPING FNCAST box3dtobox(box3d) (see CAST)
 FNCAST: KEEPING FNCAST geometry(box3d) (see CAST)
 FUNC: KEEPING FUNCTION: [box3d(geometry)]
index 03947e50dd5c4ea394933a74b36136f6b807cbb3..9f6be59dafbfc0a00e31ce9035e556cc81c5ea5d 100644 (file)
@@ -29,6 +29,10 @@ Datum BOX2DFLOAT4_out(PG_FUNCTION_ARGS);
 Datum LWGEOM_to_BOX2DFLOAT4(PG_FUNCTION_ARGS);
 Datum BOX2DFLOAT4_expand(PG_FUNCTION_ARGS);
 Datum BOX2DFLOAT4_to_BOX3D(PG_FUNCTION_ARGS);
+Datum BOX2DFLOAT4_xmin(PG_FUNCTION_ARGS);
+Datum BOX2DFLOAT4_ymin(PG_FUNCTION_ARGS);
+Datum BOX2DFLOAT4_xmax(PG_FUNCTION_ARGS);
+Datum BOX2DFLOAT4_ymax(PG_FUNCTION_ARGS);
 
 
 
@@ -326,3 +330,31 @@ Datum BOX2DFLOAT4_to_BOX3D(PG_FUNCTION_ARGS)
 
        PG_RETURN_POINTER(result);
 }
+
+PG_FUNCTION_INFO_V1(BOX2DFLOAT4_xmin);
+Datum BOX2DFLOAT4_xmin(PG_FUNCTION_ARGS)
+{
+       BOX2DFLOAT4 *box = (BOX2DFLOAT4 *)PG_GETARG_POINTER(0);
+       PG_RETURN_FLOAT4(box->xmin);
+}
+
+PG_FUNCTION_INFO_V1(BOX2DFLOAT4_ymin);
+Datum BOX2DFLOAT4_ymin(PG_FUNCTION_ARGS)
+{
+       BOX2DFLOAT4 *box = (BOX2DFLOAT4 *)PG_GETARG_POINTER(0);
+       PG_RETURN_FLOAT4(box->ymin);
+}
+
+PG_FUNCTION_INFO_V1(BOX2DFLOAT4_xmax);
+Datum BOX2DFLOAT4_xmax(PG_FUNCTION_ARGS)
+{
+       BOX2DFLOAT4 *box = (BOX2DFLOAT4 *)PG_GETARG_POINTER(0);
+       PG_RETURN_FLOAT4(box->xmax);
+}
+
+PG_FUNCTION_INFO_V1(BOX2DFLOAT4_ymax);
+Datum BOX2DFLOAT4_ymax(PG_FUNCTION_ARGS)
+{
+       BOX2DFLOAT4 *box = (BOX2DFLOAT4 *)PG_GETARG_POINTER(0);
+       PG_RETURN_FLOAT4(box->ymax);
+}
index b1fe34c1ff077e6e4f13a984d7ecff807f815b03..d0e52689b372f79ac1a2656c85600255ac92327a 100644 (file)
@@ -31,6 +31,13 @@ Datum LWGEOM_to_BOX3D(PG_FUNCTION_ARGS);
 Datum BOX3D_expand(PG_FUNCTION_ARGS);
 Datum BOX3D_to_BOX2DFLOAT4(PG_FUNCTION_ARGS);
 
+Datum BOX3D_xmin(PG_FUNCTION_ARGS);
+Datum BOX3D_ymin(PG_FUNCTION_ARGS);
+Datum BOX3D_zmin(PG_FUNCTION_ARGS);
+Datum BOX3D_xmax(PG_FUNCTION_ARGS);
+Datum BOX3D_ymax(PG_FUNCTION_ARGS);
+Datum BOX3D_zmax(PG_FUNCTION_ARGS);
+
 /*
  *  BOX3D_in - takes a string rep of BOX3D and returns internal rep
  *
@@ -166,10 +173,51 @@ Datum LWGEOM_to_BOX3D(PG_FUNCTION_ARGS)
 {
        LWGEOM *lwgeom = (LWGEOM *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
        BOX2DFLOAT4 box;
-       BOX3D *result = palloc(sizeof(BOX3D));
+       BOX3D *result;
 
-       getbox2d_p(SERIALIZED_FORM(lwgeom), &box);
-       box2df_to_box3d_p(&box, result);
+       result = lw_geom_getBB(SERIALIZED_FORM(lwgeom));
 
        PG_RETURN_POINTER(result);
 }
+
+PG_FUNCTION_INFO_V1(BOX3D_xmin);
+Datum BOX3D_xmin(PG_FUNCTION_ARGS)
+{
+       BOX3D *box = (BOX3D *)PG_GETARG_POINTER(0);
+       PG_RETURN_FLOAT8(box->xmin);
+}
+
+PG_FUNCTION_INFO_V1(BOX3D_ymin);
+Datum BOX3D_ymin(PG_FUNCTION_ARGS)
+{
+       BOX3D *box = (BOX3D *)PG_GETARG_POINTER(0);
+       PG_RETURN_FLOAT8(box->ymin);
+}
+
+PG_FUNCTION_INFO_V1(BOX3D_zmin);
+Datum BOX3D_zmin(PG_FUNCTION_ARGS)
+{
+       BOX3D *box = (BOX3D *)PG_GETARG_POINTER(0);
+       PG_RETURN_FLOAT8(box->zmin);
+}
+
+PG_FUNCTION_INFO_V1(BOX3D_xmax);
+Datum BOX3D_xmax(PG_FUNCTION_ARGS)
+{
+       BOX3D *box = (BOX3D *)PG_GETARG_POINTER(0);
+       PG_RETURN_FLOAT8(box->xmax);
+}
+
+PG_FUNCTION_INFO_V1(BOX3D_ymax);
+Datum BOX3D_ymax(PG_FUNCTION_ARGS)
+{
+       BOX3D *box = (BOX3D *)PG_GETARG_POINTER(0);
+       PG_RETURN_FLOAT8(box->ymax);
+}
+
+PG_FUNCTION_INFO_V1(BOX3D_zmax);
+Datum BOX3D_zmax(PG_FUNCTION_ARGS)
+{
+       BOX3D *box = (BOX3D *)PG_GETARG_POINTER(0);
+       PG_RETURN_FLOAT8(box->zmax);
+}
index 98925eb8bed120b09671e0f1f60ecf2927b29058..5c279de1c797329c7813a296c4320050d38ee0dd 100644 (file)
@@ -142,6 +142,36 @@ CREATE TYPE box3d (
        output = box3d_out
 );
 
+CREATEFUNCTION xmin(box3d)
+       RETURNS FLOAT8
+       AS '@MODULE_FILENAME@','BOX3D_xmin'
+       LANGUAGE 'C' WITH (isstrict,iscachable);
+
+CREATEFUNCTION ymin(box3d)
+       RETURNS FLOAT8
+       AS '@MODULE_FILENAME@','BOX3D_ymin'
+       LANGUAGE 'C' WITH (isstrict,iscachable);
+
+CREATEFUNCTION zmin(box3d)
+       RETURNS FLOAT8
+       AS '@MODULE_FILENAME@','BOX3D_zmin'
+       LANGUAGE 'C' WITH (isstrict,iscachable);
+
+CREATEFUNCTION xmax(box3d)
+       RETURNS FLOAT8
+       AS '@MODULE_FILENAME@','BOX3D_xmax'
+       LANGUAGE 'C' WITH (isstrict,iscachable);
+
+CREATEFUNCTION ymax(box3d)
+       RETURNS FLOAT8
+       AS '@MODULE_FILENAME@','BOX3D_ymax'
+       LANGUAGE 'C' WITH (isstrict,iscachable);
+
+CREATEFUNCTION zmax(box3d)
+       RETURNS FLOAT8
+       AS '@MODULE_FILENAME@','BOX3D_zmax'
+       LANGUAGE 'C' WITH (isstrict,iscachable);
+
 -----------------------------------------------------------------------
 --
 -- BOX2D
@@ -256,6 +286,26 @@ CREATE OPERATOR ~ (
    RESTRICT = contsel, JOIN = contjoinsel
 );
 
+CREATEFUNCTION xmin(box2d)
+       RETURNS FLOAT4
+       AS '@MODULE_FILENAME@','BOX2DFLOAT4_xmin'
+       LANGUAGE 'C' WITH (isstrict,iscachable);
+
+CREATEFUNCTION ymin(box2d)
+       RETURNS FLOAT4
+       AS '@MODULE_FILENAME@','BOX2DFLOAT4_ymin'
+       LANGUAGE 'C' WITH (isstrict,iscachable);
+
+CREATEFUNCTION xmax(box2d)
+       RETURNS FLOAT4
+       AS '@MODULE_FILENAME@','BOX2DFLOAT4_xmax'
+       LANGUAGE 'C' WITH (isstrict,iscachable);
+
+CREATEFUNCTION ymax(box2d)
+       RETURNS FLOAT4
+       AS '@MODULE_FILENAME@','BOX2DFLOAT4_ymax'
+       LANGUAGE 'C' WITH (isstrict,iscachable);
+
 -- lwgeom  operator support functions
 
 -------------------------------------------------------------------