From: Bborie Park Date: Thu, 18 Oct 2012 21:45:16 +0000 (+0000) Subject: Code cleanup in rt_pg/rt_pg.c. Changed point geometry variant of X-Git-Tag: 2.1.0beta2~510 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0b7294f625c4e3387d887a564225294d99a4966e;p=postgis Code cleanup in rt_pg/rt_pg.c. Changed point geometry variant of ST_SetValue() to wrap around geomval variant of ST_SetValues(). This will result in a behavior change for geometry variant of ST_SetValue(). git-svn-id: http://svn.osgeo.org/postgis/trunk@10466 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/raster/rt_pg/rt_pg.c b/raster/rt_pg/rt_pg.c index 2c8ffa180..0cf2b7900 100644 --- a/raster/rt_pg/rt_pg.c +++ b/raster/rt_pg/rt_pg.c @@ -3487,7 +3487,6 @@ Datum RASTER_setPixelValuesGeomval(PG_FUNCTION_ARGS) rt_raster _raster = NULL; rt_band _band = NULL; int nband = 0; /* 1-based */ - rt_iterator itrset; int numbands = 0; int width = 0; @@ -3732,7 +3731,6 @@ Datum RASTER_setPixelValuesGeomval(PG_FUNCTION_ARGS) /* all elements are points */ if (allpoint == arg->ngv) { - POSTGIS_RT_DEBUG(3, "all geometries are points, using direct to pixel method"); double igt[6] = {0}; double xy[2] = {0}; double value = 0; @@ -3741,6 +3739,8 @@ Datum RASTER_setPixelValuesGeomval(PG_FUNCTION_ARGS) LWPOINT *point = NULL; POINT2D p; + POSTGIS_RT_DEBUG(3, "all geometries are points, using direct to pixel method"); + /* cache inverse gretransform matrix */ rt_raster_get_inverse_geotransform_matrix(NULL, gt, igt); @@ -3809,6 +3809,8 @@ Datum RASTER_setPixelValuesGeomval(PG_FUNCTION_ARGS) } /* run iterator otherwise */ else { + rt_iterator itrset; + POSTGIS_RT_DEBUG(3, "a mix of geometries, using iterator method"); /* init itrset */ diff --git a/raster/rt_pg/rtpostgis.sql.in.c b/raster/rt_pg/rtpostgis.sql.in.c index 28a874c17..e1c67a112 100644 --- a/raster/rt_pg/rtpostgis.sql.in.c +++ b/raster/rt_pg/rtpostgis.sql.in.c @@ -3987,52 +3987,6 @@ CREATE OR REPLACE FUNCTION st_setbandisnodata(rast raster, band integer DEFAULT -- Raster Pixel Editors ----------------------------------------------------------------------- ------------------------------------------------------------------------ --- ST_SetValue (set one or more pixels to a single value) ------------------------------------------------------------------------ - --- This function can not be STRICT, because newvalue can be NULL for nodata -CREATE OR REPLACE FUNCTION st_setvalue(rast raster, band integer, x integer, y integer, newvalue float8) - RETURNS raster - AS 'MODULE_PATHNAME','RASTER_setPixelValue' - LANGUAGE 'c' IMMUTABLE; - --- This function can not be STRICT, because newvalue can be NULL for nodata -CREATE OR REPLACE FUNCTION st_setvalue(rast raster, x integer, y integer, newvalue float8) - RETURNS raster - AS $$ SELECT st_setvalue($1, 1, $2, $3, $4) $$ - LANGUAGE 'sql'; - --- This function can not be STRICT, because newvalue can be NULL for nodata -CREATE OR REPLACE FUNCTION st_setvalue(rast raster, band integer, pt geometry, newvalue float8) - RETURNS raster AS - $$ - DECLARE - x float8; - y float8; - gtype text; - BEGIN - gtype := st_geometrytype(pt); - IF ( gtype != 'ST_Point' ) THEN - RAISE EXCEPTION 'Attempting to get the value of a pixel with a non-point geometry'; - END IF; - x := st_x(pt); - y := st_y(pt); - RETURN st_setvalue(rast, - band, - st_world2rastercoordx(rast, x, y), - st_world2rastercoordy(rast, x, y), - newvalue); - END; - $$ - LANGUAGE 'plpgsql' IMMUTABLE; - --- This function can not be STRICT, because newvalue can be NULL for nodata -CREATE OR REPLACE FUNCTION st_setvalue(rast raster, pt geometry, newvalue float8) - RETURNS raster - AS $$ SELECT st_setvalue($1, 1, $2, $3) $$ - LANGUAGE 'sql'; - ----------------------------------------------------------------------- -- ST_SetValues (set one or more pixels to a one or more values) ----------------------------------------------------------------------- @@ -4121,14 +4075,38 @@ CREATE OR REPLACE FUNCTION st_setvalues( AS 'MODULE_PATHNAME', 'RASTER_setPixelValuesGeomval' LANGUAGE 'c' IMMUTABLE; +----------------------------------------------------------------------- +-- ST_SetValue (set one or more pixels to a single value) +----------------------------------------------------------------------- + +-- This function can not be STRICT, because newvalue can be NULL for nodata +CREATE OR REPLACE FUNCTION st_setvalue(rast raster, band integer, x integer, y integer, newvalue float8) + RETURNS raster + AS 'MODULE_PATHNAME','RASTER_setPixelValue' + LANGUAGE 'c' IMMUTABLE; + +-- This function can not be STRICT, because newvalue can be NULL for nodata +CREATE OR REPLACE FUNCTION st_setvalue(rast raster, x integer, y integer, newvalue float8) + RETURNS raster + AS $$ SELECT st_setvalue($1, 1, $2, $3, $4) $$ + LANGUAGE 'sql'; + -- cannot be STRICT as newvalue can be NULL -CREATE OR REPLACE FUNCTION st_setvalues( +CREATE OR REPLACE FUNCTION st_setvalue( rast raster, nband integer, - geom geometry, newvalue double precision, - keepnodata boolean DEFAULT FALSE + geom geometry, newvalue double precision +) + RETURNS raster + AS $$ SELECT st_setvalues($1, $2, ARRAY[ROW($3, $4)]::geomval[], FALSE) $$ + LANGUAGE 'sql' IMMUTABLE; + +-- cannot be STRICT as newvalue can be NULL +CREATE OR REPLACE FUNCTION st_setvalue( + rast raster, + geom geometry, newvalue double precision ) RETURNS raster - AS $$ SELECT st_setvalues($1, $2, ARRAY[ROW($3, $4)]::geomval[], $5) $$ + AS $$ SELECT st_setvalues($1, 1, ARRAY[ROW($2, $3)]::geomval[], FALSE) $$ LANGUAGE 'sql' IMMUTABLE; ----------------------------------------------------------------------- diff --git a/raster/rt_pg/rtpostgis_drop.sql.in.c b/raster/rt_pg/rtpostgis_drop.sql.in.c index fbcadb334..5641cde23 100644 --- a/raster/rt_pg/rtpostgis_drop.sql.in.c +++ b/raster/rt_pg/rtpostgis_drop.sql.in.c @@ -174,6 +174,8 @@ DROP FUNCTION IF EXISTS st_value(raster, integer, integer, integer, boolean); DROP FUNCTION IF EXISTS st_value(raster, integer, integer, boolean); DROP FUNCTION IF EXISTS st_value(raster, integer, geometry, boolean); DROP FUNCTION IF EXISTS st_value(raster, geometry, boolean); +DROP FUNCTION IF EXISTS st_value(raster, integer, geometry, double precision); +DROP FUNCTION IF EXISTS st_value(raster, geometry, double precision); -- function no longer exists DROP FUNCTION IF EXISTS st_georeference(raster); @@ -393,12 +395,6 @@ DROP FUNCTION IF EXISTS st_intersection(raster, integer, raster, integer, regpro DROP FUNCTION IF EXISTS st_intersection(raster, raster, text, regprocedure); DROP FUNCTION IF EXISTS st_intersection(raster, raster, regprocedure); --- parameter name change -DROP FUNCTION IF EXISTS st_value(raster, integer, integer, integer, boolean); -DROP FUNCTION IF EXISTS st_value(raster, integer, integer, boolean); -DROP FUNCTION IF EXISTS st_value(raster, integer, geometry, boolean); -DROP FUNCTION IF EXISTS st_value(raster, geometry, boolean); - -- function deprecated DROP FUNCTION IF EXISTS st_pixelaspolygons(raster, integer); diff --git a/raster/test/regress/rt_pixelvalue.sql b/raster/test/regress/rt_pixelvalue.sql index aae9c7b35..9e4ae9846 100644 --- a/raster/test/regress/rt_pixelvalue.sql +++ b/raster/test/regress/rt_pixelvalue.sql @@ -317,12 +317,4 @@ SELECT 'test 4.4', id FROM rt_band_properties_test WHERE st_value(st_setvalue(st_setbandnodatavalue(rast, NULL), 1, 1, 1, NULL), 1, 1, 1) != b1val; ------------------------------------------------------------------------ --- Test 5 - st_setvalue(rast raster, band integer, pt geometry, val float8) ------------------------------------------------------------------------ - -SELECT 'test 5.1', id - FROM rt_band_properties_test - WHERE st_value(st_setvalue(rast, 1, st_makepoint(st_upperleftx(rast), st_upperlefty(rast)), 3), 1, 1, 1) != 3; - DROP TABLE rt_band_properties_test; diff --git a/raster/test/regress/rt_setvalues_geomval.sql b/raster/test/regress/rt_setvalues_geomval.sql index 67e1aed31..ac145e00e 100644 --- a/raster/test/regress/rt_setvalues_geomval.sql +++ b/raster/test/regress/rt_setvalues_geomval.sql @@ -12,7 +12,7 @@ CREATE TABLE raster_setvalues_geom AS ; SELECT - rid, gid, ST_DumpValues(ST_SetValues(rast, 1, geom, gid)) + rid, gid, ST_DumpValues(ST_SetValue(rast, 1, geom, gid)) FROM raster_setvalues_rast t1 CROSS JOIN raster_setvalues_geom t2 ORDER BY rid, gid;