From 5e18b719eeefa938159ccb5411f68c34c553303f Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Tue, 7 Sep 2004 07:47:38 +0000 Subject: [PATCH] Added CHIP type and support funx git-svn-id: http://svn.osgeo.org/postgis/trunk@774 b70326c6-7e19-0410-871a-916f4a2858ee --- lwgeom/MISSING_OBJECTS | 16 +----- lwgeom/Makefile | 2 +- lwgeom/lwgeom.h | 37 ++++++++++++++ lwgeom/lwpostgis.sql.in | 106 +++++++++++++++++++++++++++++++++------- 4 files changed, 128 insertions(+), 33 deletions(-) diff --git a/lwgeom/MISSING_OBJECTS b/lwgeom/MISSING_OBJECTS index a644daa9e..c414d4cb7 100644 --- a/lwgeom/MISSING_OBJECTS +++ b/lwgeom/MISSING_OBJECTS @@ -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) - diff --git a/lwgeom/Makefile b/lwgeom/Makefile index 038b088c4..1567c14a2 100644 --- a/lwgeom/Makefile +++ b/lwgeom/Makefile @@ -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 diff --git a/lwgeom/lwgeom.h b/lwgeom/lwgeom.h index c61aadc35..58ceac819 100644 --- a/lwgeom/lwgeom.h +++ b/lwgeom/lwgeom.h @@ -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: + //
+ // 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 diff --git a/lwgeom/lwpostgis.sql.in b/lwgeom/lwpostgis.sql.in index 7047dbb03..df5670db8 100644 --- a/lwgeom/lwpostgis.sql.in +++ b/lwgeom/lwpostgis.sql.in @@ -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 -- 2.40.0