From 6414e70abb8a6552511d4a37ecc9bd1f7041bf53 Mon Sep 17 00:00:00 2001 From: Bborie Park Date: Wed, 1 Feb 2012 15:28:40 +0000 Subject: [PATCH] Additional cleanup of a few functions using ST_PixelAsPolygon(raster, int, int, int). Also, made map algebra expression case-sensitive in 2-raster ST_MapAlgebraExpr. Now, the keywords must be RAST1 and RAST2. git-svn-id: http://svn.osgeo.org/postgis/trunk@8999 b70326c6-7e19-0410-871a-916f4a2858ee --- raster/rt_pg/rt_pg.c | 2 +- raster/rt_pg/rtpostgis.sql.in.c | 32 +++++++------- .../regress/rt_mapalgebraexpr_2raster.sql | 44 +++++++++---------- 3 files changed, 39 insertions(+), 39 deletions(-) diff --git a/raster/rt_pg/rt_pg.c b/raster/rt_pg/rt_pg.c index 45a0852a1..83fe02e67 100644 --- a/raster/rt_pg/rt_pg.c +++ b/raster/rt_pg/rt_pg.c @@ -8832,7 +8832,7 @@ Datum RASTER_mapAlgebra2(PG_FUNCTION_ARGS) */ for (i = 0; i < spicount; i++) { if (!PG_ARGISNULL(exprpos[i])) { - char *tmp = rtpg_strtoupper(text_to_cstring(PG_GETARG_TEXT_P(exprpos[i]))); + char *tmp = text_to_cstring(PG_GETARG_TEXT_P(exprpos[i])); POSTGIS_RT_DEBUGF(3, "raw expr #%d: %s", i, tmp); len = 0; diff --git a/raster/rt_pg/rtpostgis.sql.in.c b/raster/rt_pg/rtpostgis.sql.in.c index 18a7639b1..8e23a84a1 100644 --- a/raster/rt_pg/rtpostgis.sql.in.c +++ b/raster/rt_pg/rtpostgis.sql.in.c @@ -3094,7 +3094,7 @@ CREATE OR REPLACE FUNCTION _st_intersects(geom geometry, rast raster, nband inte FOR x IN x1+xinc..x2 BY 3 LOOP FOR y IN y1+yinc..y2 BY 3 LOOP -- Check first if the pixel intersects with the geometry. Often many won't. - bintersect := NOT st_isempty(st_intersection(st_pixelaspolygon(rast, nband, x, y), geom)); + bintersect := NOT st_isempty(st_intersection(st_pixelaspolygon(rast, x, y), geom)); IF bintersect THEN -- If the pixel really intersects, check its value. Return TRUE if with value. @@ -3192,14 +3192,14 @@ CREATE OR REPLACE FUNCTION _st_intersection( rtn := NULL; CASE WHEN _returnband = 'FIRST' THEN - rtn := ST_MapAlgebraExpr(rast1, band1, rast2, band2, 'rast1', NULL, extenttype); + rtn := ST_MapAlgebraExpr(rast1, band1, rast2, band2, 'RAST1', NULL, extenttype); WHEN _returnband = 'SECOND' THEN - rtn := ST_MapAlgebraExpr(rast2, band2, rast1, band1, 'rast1', NULL, extenttype); + rtn := ST_MapAlgebraExpr(rast2, band2, rast1, band1, 'RAST1', NULL, extenttype); WHEN _returnband = 'OTHER' THEN rtn := ST_MapAlgebraFct(rast1, band1, rast2, band2, otheruserfunc, NULL, extenttype); ELSE -- BOTH - rtn := ST_MapAlgebraExpr(rast1, band1, rast2, band2, 'rast1', NULL, extenttype); - rtn := ST_AddBand(rtn, ST_MapAlgebraExpr(rast2, band2, rast1, band1, 'rast1', NULL, extenttype)); + rtn := ST_MapAlgebraExpr(rast1, band1, rast2, band2, 'RAST1', NULL, extenttype); + rtn := ST_AddBand(rtn, ST_MapAlgebraExpr(rast2, band2, rast1, band1, 'RAST1', NULL, extenttype)); END CASE; RETURN rtn; @@ -3316,20 +3316,20 @@ CREATE OR REPLACE FUNCTION _ST_MapAlgebra4UnionState(rast1 raster, rast2 raster -- There we always set that to band 1 regardless of what band num is requested IF upper(p_expression) = 'LAST' THEN --RAISE NOTICE 'last asked for '; - RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, 'rast2'::text, NULL::text, 'UNION'::text, 'rast2'::text, 'rast1'::text, NULL::double precision); + RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, 'RAST2'::text, NULL::text, 'UNION'::text, 'RAST2'::text, 'RAST1'::text, NULL::double precision); ELSIF upper(p_expression) = 'FIRST' THEN - RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, 'rast1'::text, NULL::text, 'UNION'::text, 'rast2'::text, 'rast1'::text, NULL::double precision); + RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, 'RAST1'::text, NULL::text, 'UNION'::text, 'RAST2'::text, 'RAST1'::text, NULL::double precision); ELSIF upper(p_expression) = 'MIN' THEN - RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, 'LEAST(rast1, rast2)'::text, NULL::text, 'UNION'::text, 'rast2'::text, 'rast1'::text, NULL::double precision); + RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, 'LEAST(RAST1, RAST2)'::text, NULL::text, 'UNION'::text, 'RAST2'::text, 'RAST1'::text, NULL::double precision); ELSIF upper(p_expression) = 'MAX' THEN - RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, 'GREATEST(rast1, rast2)'::text, NULL::text, 'UNION'::text, 'rast2'::text, 'rast1'::text, NULL::double precision); + RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, 'GREATEST(RAST1, RAST2)'::text, NULL::text, 'UNION'::text, 'RAST2'::text, 'RAST1'::text, NULL::double precision); ELSIF upper(p_expression) = 'COUNT' THEN - RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, 'rast1 + 1'::text, NULL::text, 'UNION'::text, '1'::text, 'rast1'::text, 0::double precision); + RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, 'RAST1 + 1'::text, NULL::text, 'UNION'::text, '1'::text, 'RAST1'::text, 0::double precision); ELSIF upper(p_expression) = 'SUM' THEN - RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, 'rast1 + rast2'::text, NULL::text, 'UNION'::text, 'rast2'::text, 'rast1'::text, NULL::double precision); + RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, 'RAST1 + RAST2'::text, NULL::text, 'UNION'::text, 'RAST2'::text, 'RAST1'::text, NULL::double precision); ELSIF upper(p_expression) = 'RANGE' THEN -- have no idea what this is - t_raster = ST_MapAlgebraExpr(rast1, 2, rast2, 1, 'LEAST(rast1, rast2)'::text, NULL::text, 'UNION'::text, 'rast2'::text, 'rast1'::text, NULL::double precision); + t_raster = ST_MapAlgebraExpr(rast1, 2, rast2, 1, 'LEAST(RAST1, RAST2)'::text, NULL::text, 'UNION'::text, 'RAST2'::text, 'RAST1'::text, NULL::double precision); p_raster := _ST_MapAlgebra4UnionState(rast1, rast2, 'MAX'::text, NULL::text, NULL::text, NULL::double precision, NULL::text, NULL::text, NULL::text, NULL::double precision); RETURN ST_AddBand(p_raster, t_raster, 1, 2); ELSIF upper(p_expression) = 'MEAN' THEN @@ -3337,7 +3337,7 @@ CREATE OR REPLACE FUNCTION _ST_MapAlgebra4UnionState(rast1 raster, rast2 raster -- and p_raster is there to keep track of accumulated sum and final state function -- would then do a final map to divide them. This one is currently broken because -- have not reworked it so it can do without a final function - t_raster = ST_MapAlgebraExpr(rast1, 2, rast2, 1, 'rast1 + 1'::text, NULL::text, 'UNION'::text, '1'::text, 'rast1'::text, 0::double precision); + t_raster = ST_MapAlgebraExpr(rast1, 2, rast2, 1, 'RAST1 + 1'::text, NULL::text, 'UNION'::text, '1'::text, 'RAST1'::text, 0::double precision); p_raster := _ST_MapAlgebra4UnionState(rast1, rast2, 'SUM'::text, NULL::text, NULL::text, NULL::double precision, NULL::text, NULL::text, NULL::text, NULL::double precision); RETURN ST_AddBand(p_raster, t_raster, 1, 2); ELSE @@ -3389,7 +3389,7 @@ CREATE OR REPLACE FUNCTION _ST_MapAlgebra4UnionFinal1(rast raster) -- NOTE: I have to sacrifice RANGE. Sorry RANGE. Any 2 banded raster is going to be treated -- as a MEAN IF ST_NumBands(rast) = 2 THEN - RETURN ST_MapAlgebraExpr(rast, 1, rast, 2, 'CASE WHEN rast2 > 0 THEN rast1 / rast2::float8 ELSE NULL END'::text, NULL::text, 'UNION'::text, NULL::text, NULL::text, NULL::double precision); + RETURN ST_MapAlgebraExpr(rast, 1, rast, 2, 'CASE WHEN RAST2 > 0 THEN RAST1 / RAST2::float8 ELSE NULL END'::text, NULL::text, 'UNION'::text, NULL::text, NULL::text, NULL::double precision); ELSE RETURN rast; END IF; @@ -3489,7 +3489,7 @@ CREATE OR REPLACE FUNCTION st_clip(rast raster, band int, geom geometry, nodata sourceraster := ST_SetBandNodataValue(sourceraster, bandstart, newnodata); -- Compute the first raster band - newrast := ST_MapAlgebraExpr(sourceraster, bandstart, geomrast, 1, 'rast1', newpixtype, newextent); + newrast := ST_MapAlgebraExpr(sourceraster, bandstart, geomrast, 1, 'RAST1', newpixtype, newextent); FOR bandi IN bandstart+1..bandend LOOP --RAISE NOTICE 'bandi=%', bandi; @@ -3497,7 +3497,7 @@ CREATE OR REPLACE FUNCTION st_clip(rast raster, band int, geom geometry, nodata newpixtype := ST_BandPixelType(rast, bandi); newnodata := coalesce(nodata, ST_BandNodataValue(sourceraster, bandi), ST_MinPossibleValue(newpixtype)); sourceraster := ST_SetBandNodataValue(sourceraster, bandi, newnodata); - newrast := ST_AddBand(newrast, ST_MapAlgebraExpr(sourceraster, bandi, geomrast, 1, 'rast1', newpixtype, newextent)); + newrast := ST_AddBand(newrast, ST_MapAlgebraExpr(sourceraster, bandi, geomrast, 1, 'RAST1', newpixtype, newextent)); END LOOP; RETURN newrast; diff --git a/raster/test/regress/rt_mapalgebraexpr_2raster.sql b/raster/test/regress/rt_mapalgebraexpr_2raster.sql index 454ff6e79..8860aec82 100644 --- a/raster/test/regress/rt_mapalgebraexpr_2raster.sql +++ b/raster/test/regress/rt_mapalgebraexpr_2raster.sql @@ -56,7 +56,7 @@ DROP FUNCTION make_test_raster(integer, integer, integer, double precision, doub -- INTERSECTION INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'INTERSECTION', st_mapalgebraexpr( - r1.rast, r2.rast, 'rast1', '32BF', 'INTERSECTION' + r1.rast, r2.rast, 'RAST1', '32BF', 'INTERSECTION' ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 @@ -65,7 +65,7 @@ INSERT INTO raster_mapalgebra_out AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'INTERSECTION', st_mapalgebraexpr( - r1.rast, r2.rast, 'rast1', '32BF', 'INTERSECTION' + r1.rast, r2.rast, 'RAST1', '32BF', 'INTERSECTION' ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 @@ -76,28 +76,28 @@ INSERT INTO raster_mapalgebra_out INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, rid, 'INTERSECTION', st_mapalgebraexpr( - NULL::raster, rast, 'rast1', '32BF', 'INTERSECTION' + NULL::raster, rast, 'RAST1', '32BF', 'INTERSECTION' ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT rid, NULL AS rid, 'INTERSECTION', st_mapalgebraexpr( - rast, NULL::raster, 'rast1', '32BF', 'INTERSECTION' + rast, NULL::raster, 'RAST1', '32BF', 'INTERSECTION' ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, NULL AS rid, 'INTERSECTION', st_mapalgebraexpr( - NULL::raster, NULL::raster, 'rast1', '32BF', 'INTERSECTION' + NULL::raster, NULL::raster, 'RAST1', '32BF', 'INTERSECTION' ) ; -- UNION INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'UNION', st_mapalgebraexpr( - r1.rast, r2.rast, '((rast1 + rast2)/2.)::numeric', '32BF', 'UNION', 'rast2', 'rast1', NULL + r1.rast, r2.rast, '((RAST1 + RAST2)/2.)::numeric', '32BF', 'UNION', 'RAST2', 'RAST1', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 @@ -106,7 +106,7 @@ INSERT INTO raster_mapalgebra_out AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'UNION', st_mapalgebraexpr( - r1.rast, r2.rast, '((rast1 + rast2)/2.)::numeric', '32BF', 'UNION', 'rast2', 'rast1', NULL + r1.rast, r2.rast, '((RAST1 + RAST2)/2.)::numeric', '32BF', 'UNION', 'RAST2', 'RAST1', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 @@ -117,7 +117,7 @@ INSERT INTO raster_mapalgebra_out INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'UNION', st_mapalgebraexpr( - r1.rast, r2.rast, '((rast1 + rast2)/2.)::numeric', '32BF', 'UNION', '100', '200', NULL + r1.rast, r2.rast, '((RAST1 + RAST2)/2.)::numeric', '32BF', 'UNION', '100', '200', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 @@ -126,7 +126,7 @@ INSERT INTO raster_mapalgebra_out AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'UNION', st_mapalgebraexpr( - r1.rast, r2.rast, '((rast1 + rast2)/2.)::numeric', '32BF', 'UNION', '100', '200', NULL + r1.rast, r2.rast, '((RAST1 + RAST2)/2.)::numeric', '32BF', 'UNION', '100', '200', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 @@ -137,28 +137,28 @@ INSERT INTO raster_mapalgebra_out INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, rid, 'UNION', st_mapalgebraexpr( - NULL::raster, rast, '((rast1 + rast2)/2.)::numeric', '32BF', 'UNION', 'rast2', 'rast1', NULL + NULL::raster, rast, '((RAST1 + RAST2)/2.)::numeric', '32BF', 'UNION', 'RAST2', 'RAST1', NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT rid, NULL AS rid, 'UNION', st_mapalgebraexpr( - rast, NULL::raster, '((rast1 + rast2)/2.)::numeric', '32BF', 'UNION', 'rast2', 'rast1', NULL + rast, NULL::raster, '((RAST1 + RAST2)/2.)::numeric', '32BF', 'UNION', 'RAST2', 'RAST1', NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, NULL AS rid, 'UNION', st_mapalgebraexpr( - NULL::raster, NULL::raster, '((rast1 + rast2)/2.)::numeric', '32BF', 'UNION', 'rast2', 'rast1', NULL + NULL::raster, NULL::raster, '((RAST1 + RAST2)/2.)::numeric', '32BF', 'UNION', 'RAST2', 'RAST1', NULL ) ; -- FIRST INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'FIRST', st_mapalgebraexpr( - r1.rast, r2.rast, 'CASE WHEN rast2 IS NOT NULL THEN NULL ELSE rast1 END', '32BF', 'FIRST', NULL, 'rast1', NULL + r1.rast, r2.rast, 'CASE WHEN RAST2 IS NOT NULL THEN NULL ELSE RAST1 END', '32BF', 'FIRST', NULL, 'RAST1', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 @@ -167,7 +167,7 @@ INSERT INTO raster_mapalgebra_out AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'FIRST', st_mapalgebraexpr( - r1.rast, r2.rast, 'CASE WHEN rast2 IS NOT NULL THEN NULL ELSE rast1 END', '32BF', 'FIRST', NULL, 'rast1', NULL + r1.rast, r2.rast, 'CASE WHEN RAST2 IS NOT NULL THEN NULL ELSE RAST1 END', '32BF', 'FIRST', NULL, 'RAST1', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 @@ -178,28 +178,28 @@ INSERT INTO raster_mapalgebra_out INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, rid, 'FIRST', st_mapalgebraexpr( - NULL::raster, rast, 'CASE WHEN rast1 IS NOT NULL THEN NULL ELSE rast2 END', '32BF', 'FIRST', 'rast2', NULL, NULL + NULL::raster, rast, 'CASE WHEN RAST1 IS NOT NULL THEN NULL ELSE RAST2 END', '32BF', 'FIRST', 'RAST2', NULL, NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT rid, NULL AS rid, 'FIRST', st_mapalgebraexpr( - rast, NULL::raster, 'CASE WHEN rast2 IS NOT NULL THEN NULL ELSE rast1 END', '32BF', 'FIRST', NULL, 'rast1', NULL + rast, NULL::raster, 'CASE WHEN RAST2 IS NOT NULL THEN NULL ELSE RAST1 END', '32BF', 'FIRST', NULL, 'RAST1', NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, NULL AS rid, 'FIRST', st_mapalgebraexpr( - NULL::raster, NULL::raster, 'CASE WHEN rast2 IS NOT NULL THEN NULL ELSE rast1 END', '32BF', 'FIRST', NULL, 'rast1', NULL + NULL::raster, NULL::raster, 'CASE WHEN RAST2 IS NOT NULL THEN NULL ELSE RAST1 END', '32BF', 'FIRST', NULL, 'RAST1', NULL ) ; -- SECOND INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'SECOND', st_mapalgebraexpr( - r1.rast, r2.rast, 'CASE WHEN rast1 IS NOT NULL THEN NULL ELSE rast2 END', '32BF', 'SECOND', 'rast2', NULL, NULL + r1.rast, r2.rast, 'CASE WHEN RAST1 IS NOT NULL THEN NULL ELSE RAST2 END', '32BF', 'SECOND', 'RAST2', NULL, NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 @@ -208,7 +208,7 @@ INSERT INTO raster_mapalgebra_out AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'SECOND', st_mapalgebraexpr( - r1.rast, r2.rast, 'CASE WHEN rast1 IS NOT NULL THEN NULL ELSE rast2 END', '32BF', 'SECOND', 'rast2', NULL, NULL + r1.rast, r2.rast, 'CASE WHEN RAST1 IS NOT NULL THEN NULL ELSE RAST2 END', '32BF', 'SECOND', 'RAST2', NULL, NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 @@ -219,21 +219,21 @@ INSERT INTO raster_mapalgebra_out INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, rid, 'SECOND', st_mapalgebraexpr( - NULL::raster, rast, 'CASE WHEN rast1 IS NOT NULL THEN NULL ELSE rast2 END', '32BF', 'SECOND', 'rast2', NULL, NULL + NULL::raster, rast, 'CASE WHEN RAST1 IS NOT NULL THEN NULL ELSE RAST2 END', '32BF', 'SECOND', 'RAST2', NULL, NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT rid, NULL AS rid, 'SECOND', st_mapalgebraexpr( - rast, NULL::raster, 'CASE WHEN rast1 IS NOT NULL THEN NULL ELSE rast2 END', '32BF', 'SECOND', 'rast2', NULL, NULL + rast, NULL::raster, 'CASE WHEN RAST1 IS NOT NULL THEN NULL ELSE RAST2 END', '32BF', 'SECOND', 'RAST2', NULL, NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, NULL AS rid, 'SECOND', st_mapalgebraexpr( - NULL::raster, NULL::raster, 'CASE WHEN rast1 IS NOT NULL THEN NULL ELSE rast2 END', '32BF', 'SECOND', 'rast2', NULL, NULL + NULL::raster, NULL::raster, 'CASE WHEN RAST1 IS NOT NULL THEN NULL ELSE RAST2 END', '32BF', 'SECOND', 'RAST2', NULL, NULL ) ; -- 2.40.0