]> granicus.if.org Git - postgis/commitdiff
Added CHIP type and support funx
authorSandro Santilli <strk@keybit.net>
Tue, 7 Sep 2004 07:47:38 +0000 (07:47 +0000)
committerSandro Santilli <strk@keybit.net>
Tue, 7 Sep 2004 07:47:38 +0000 (07:47 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@774 b70326c6-7e19-0410-871a-916f4a2858ee

lwgeom/MISSING_OBJECTS
lwgeom/Makefile
lwgeom/lwgeom.h
lwgeom/lwpostgis.sql.in

index a644daa9e4ec76b8df48240fa6e6790c713c8fe6..c414d4cb75ffa040a266868a10866739886d1a36 100644 (file)
@@ -2,6 +2,7 @@
 
 FUNC: KEEPING FUNCTION: [line_interpolate_point(geometry, double precision)]
 FUNC: KEEPING FUNCTION: [segmentize(geometry, double precision)]
+
 FUNC: KEEPING FUNCTION: [asbinary(geometry)]
 FUNC: KEEPING FUNCTION: [asbinary(geometry, text)]
 
@@ -38,18 +39,3 @@ FUNC: KEEPING FUNCTION: [intersects(geometry, geometry)]
 FUNC: KEEPING FUNCTION: [equals(geometry, geometry)]
 FUNC: KEEPING FUNCTION: [boundary(geometry)]
 
---- CHIP
-FUNC: KEEPING FUNCTION: [chip_in(cstring)]
-FUNC: KEEPING FUNCTION: [chip_out(chip)]
-TYPE: KEEPING TYPE [chip]
-FUNC: KEEPING FUNCTION: [width(chip)]
-FUNC: KEEPING FUNCTION: [height(chip)]
-FUNC: KEEPING FUNCTION: [srid(chip)]
-FUNC: KEEPING FUNCTION: [setsrid(chip, integer)]
-FUNC: KEEPING FUNCTION: [factor(chip)]
-FUNC: KEEPING FUNCTION: [setfactor(chip, real)]
-FUNC: KEEPING FUNCTION: [geometry(chip)]
-FUNC: KEEPING FUNCTION: [datatype(chip)]
-FUNC: KEEPING FUNCTION: [compression(chip)]
-FNCAST: KEEPING FNCAST geometry(chip) (see CAST)
-
index 038b088c45c257e2674dba859ba2ba338cbf5010..1567c14a2649635fcb7b59b7ff5e6e8761962384 100644 (file)
@@ -132,7 +132,7 @@ ifeq ($(USE_STATS),1)
        override CFLAGS += -DUSE_STATS
 endif
  
-OBJS=lwgeom_pg.o lwgeom_spheroid.o lwgeom_api.o lwgeom_ogc.o lwgeom_functions_analytic.o lwgeom_geos.o lwgeom_inout.o lwgeom_estimate.o lwgeom_functions_basic.o lwgeom_gist.o lwgeom_btree.o lwgeom_transform.o stringBuffer.o lwgeom_box3d.o lwgeom_box2dfloat4.o lex.yy.o wktparse.tab.o lwgparse.o wktunparse.o $(GEOS_WRAPPER)
+OBJS=lwgeom_pg.o lwgeom_spheroid.o lwgeom_api.o lwgeom_ogc.o lwgeom_functions_analytic.o lwgeom_geos.o lwgeom_inout.o lwgeom_estimate.o lwgeom_functions_basic.o lwgeom_gist.o lwgeom_btree.o lwgeom_transform.o stringBuffer.o lwgeom_box3d.o lwgeom_box2dfloat4.o lwgeom_chip.o lex.yy.o wktparse.tab.o lwgparse.o wktunparse.o $(GEOS_WRAPPER)
 
 OTHERS=y.output lex.yy.c wktparse.tab.c wktparse.tab.h lwgeom.sql lwpostgis.sql
 
index c61aadc35431546a60006d88880782a5049180ee..58ceac81964eee62aa2f0e4069b8ca33dc78a56c 100644 (file)
@@ -22,6 +22,43 @@ typedef struct
         double xmax, ymax, zmax;
 } BOX3D;
 
+
+typedef struct chiptag
+{
+       int size; //unused (for use by postgresql)
+
+       int endian_hint;  // the number 1 in the endian of this datastruct
+
+       BOX3D bvol;
+       int SRID;
+       char future[4];
+       float factor;   // Usually 1.0.
+                       // Integer values are multiplied by this number
+                       // to get the actual height value
+                       // (for sub-meter accuracy height data).
+
+       int datatype;   // 1 = float32,
+                       // 5 = 24bit integer,
+                       // 6 = 16bit integer (short)
+                       // 101 = float32 (NDR),
+                       // 105 = 24bit integer (NDR),
+                       // 106=16bit int (NDR)
+
+       int height;
+       int width;
+       int compression;        // 0 = no compression, 1 = differencer
+                               // 0x80 = new value
+                               // 0x7F = nodata
+
+       // this is provided for convenience, it should be set to
+       //  sizeof(chip) bytes into the struct because the serialized form is:
+       //    <header><data>
+       // NULL when serialized
+       void  *data;    // data[0] = bottm left,
+                       // data[width] = 1st pixel, 2nd row (uncompressed)
+
+} CHIP;
+
 /*
  * standard definition of an ellipsoid (what wkt calls a spheroid)
  *    f = (a-b)/a
index 7047dbb03bde50f560d64135bb649ed68f4f56a8..df5670db8dda96b86d0fbd8606da2443abdcd7a6 100644 (file)
@@ -167,10 +167,38 @@ CREATEFUNCTION zmax(box3d)
        AS '@MODULE_FILENAME@','BOX3D_zmax'
        LANGUAGE 'C' WITH (isstrict,iscachable);
 
+-------------------------------------------------------------------
+--  CHIP TYPE
+-------------------------------------------------------------------
+
+#if USE_VERSION < 73
+# define CHIP_IN_REP opaque
+# define CHIP_OUT_REP opaque
+#else
+# define CHIP_IN_REP chip
+# define CHIP_OUT_REP cstring
+#endif
+
+CREATEFUNCTION chip_in(CHIP_OUT_REP)
+       RETURNS CHIP_IN_REP
+       AS '@MODULE_FILENAME@','CHIP_in'
+       LANGUAGE 'C' WITH (isstrict);
+
+CREATEFUNCTION chip_out(CHIP_IN_REP)
+       RETURNS CHIP_OUT_REP
+       AS '@MODULE_FILENAME@','CHIP_out'
+       LANGUAGE 'C' WITH (isstrict);
+
+CREATE TYPE chip (
+       alignment = double,
+       internallength = variable,
+       input = chip_in,
+       output = chip_out,
+       storage = extended
+);
+
 -----------------------------------------------------------------------
---
 -- BOX2D
---
 -----------------------------------------------------------------------
 
 CREATEFUNCTION box2d_in(cstring)
@@ -860,6 +888,48 @@ AS '
  SELECT translate($1, $2, $3, 0)
 ' LANGUAGE 'SQL' WITH (isstrict);
 
+--- CHIP functions
+
+CREATEFUNCTION srid(chip)
+       RETURNS int4
+       AS '@MODULE_FILENAME@','CHIP_getSRID'
+       LANGUAGE 'C' WITH (isstrict);
+
+CREATEFUNCTION height(chip)
+       RETURNS int4
+       AS '@MODULE_FILENAME@','CHIP_getHeight'
+       LANGUAGE 'C' WITH (isstrict);
+
+CREATEFUNCTION factor(chip)
+       RETURNS FLOAT4
+       AS '@MODULE_FILENAME@','CHIP_getFactor'
+       LANGUAGE 'C' WITH (isstrict);
+
+CREATEFUNCTION width(chip)
+       RETURNS int4
+       AS '@MODULE_FILENAME@','CHIP_getWidth'
+       LANGUAGE 'C' WITH (isstrict);
+
+CREATEFUNCTION datatype(chip)
+       RETURNS int4
+       AS '@MODULE_FILENAME@','CHIP_getDatatype'
+       LANGUAGE 'C' WITH (isstrict);
+
+CREATEFUNCTION compression(chip)
+       RETURNS int4
+       AS '@MODULE_FILENAME@','CHIP_getCompression'
+       LANGUAGE 'C' WITH (isstrict);
+
+CREATEFUNCTION setSRID(chip,int4)
+       RETURNS chip
+       AS '@MODULE_FILENAME@','CHIP_setSRID'
+       LANGUAGE 'C' WITH (isstrict,iscachable);
+
+CREATEFUNCTION setFactor(chip,float4)
+       RETURNS chip
+       AS '@MODULE_FILENAME@','CHIP_setFactor'
+       LANGUAGE 'C' WITH (isstrict,iscachable);
+
 ------------------------------------------------------------------------
 -- DEBUG
 ------------------------------------------------------------------------
@@ -2365,36 +2435,26 @@ CREATEFUNCTION box2d(geometry)
         AS '@MODULE_FILENAME@','LWGEOM_to_BOX2DFLOAT4'
         LANGUAGE 'C' WITH (isstrict,iscachable);
 
-CREATE CAST (geometry as box2d) WITH FUNCTION box2d(geometry) AS IMPLICIT ;
-
 CREATEFUNCTION box3d(geometry)
         RETURNS box3d
         AS '@MODULE_FILENAME@','LWGEOM_to_BOX3D'
         LANGUAGE 'C' WITH (isstrict,iscachable);
 
-CREATE CAST (geometry as box3d) WITH FUNCTION box3d(geometry) AS IMPLICIT ;
-
 CREATEFUNCTION box(geometry)
         RETURNS box
         AS '@MODULE_FILENAME@','LWGEOM_to_BOX'
         LANGUAGE 'C' WITH (isstrict,iscachable);
 
-CREATE CAST (geometry as box) WITH FUNCTION box(geometry) AS IMPLICIT ;
-
 CREATEFUNCTION box2d(box3d)
         RETURNS box2d
         AS '@MODULE_FILENAME@','BOX3D_to_BOX2DFLOAT4'
         LANGUAGE 'C' WITH (isstrict,iscachable);
 
-CREATE CAST (box3d as box2d) WITH FUNCTION box2d(box3d) AS IMPLICIT ;
-
 CREATEFUNCTION box3d(box2d)
         RETURNS box3d
         AS '@MODULE_FILENAME@','BOX2DFLOAT4_to_BOX3D'
         LANGUAGE 'C' WITH (isstrict,iscachable);
 
-CREATE CAST (box2d as box3d) WITH FUNCTION box3d(box2d) AS IMPLICIT ;
-
 CREATEFUNCTION box(box3d)
         RETURNS box
         AS '@MODULE_FILENAME@','BOX3D_to_BOX'
@@ -2406,21 +2466,33 @@ CREATEFUNCTION box3dtobox(box3d)
         AS 'SELECT box($1)'
        LANGUAGE 'SQL' WITH (isstrict,iscachable);
 
-CREATE CAST (box3d as box) WITH FUNCTION box(box3d) AS IMPLICIT ;
-
 CREATEFUNCTION geometry(box3d)
         RETURNS geometry
         AS '@MODULE_FILENAME@','BOX3D_to_LWGEOM'
         LANGUAGE 'C' WITH (isstrict,iscachable);
 
-CREATE CAST (box3d as geometry) WITH FUNCTION geometry(box3d) AS IMPLICIT ;
-
 CREATEFUNCTION geometry(text)
         RETURNS geometry
         AS '@MODULE_FILENAME@','parse_WKT_lwgeom'
         LANGUAGE 'C' WITH (isstrict,iscachable);
 
-CREATE CAST ( text AS geometry) WITH FUNCTION geometry(text) AS IMPLICIT;
+CREATEFUNCTION geometry(chip)
+       RETURNS geometry
+       AS '@MODULE_FILENAME@','CHIP_to_LWGEOM'
+       LANGUAGE 'C' WITH (isstrict,iscachable);
+
+-- 7.3+ explicit casting definitions
+#if USE_VERSION >= 73
+CREATE CAST (geometry AS box2d) WITH FUNCTION box2d(geometry) AS IMPLICIT;
+CREATE CAST (geometry AS box3d) WITH FUNCTION box3d(geometry) AS IMPLICI ;
+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 (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 (chip AS geometry) WITH FUNCTION geometry(chip) AS IMPLICIT;
+#endif
 
 ---------------------------------------------------------------
 -- Algorithms