From 09257da404f3866c90861e138a608ef6d34610b4 Mon Sep 17 00:00:00 2001 From: Bborie Park Date: Tue, 3 Jul 2012 22:30:00 +0000 Subject: [PATCH] Change signature of ST_PixelAsPolygons() and added regression tests. git-svn-id: http://svn.osgeo.org/postgis/trunk@10022 b70326c6-7e19-0410-871a-916f4a2858ee --- doc/reference_raster.xml | 1 + raster/rt_pg/rt_pg.c | 3 +- raster/rt_pg/rtpostgis.sql.in.c | 3 +- raster/rt_pg/rtpostgis_drop.sql.in.c | 4 + raster/test/regress/Makefile.in | 5 +- raster/test/regress/rt_intersection.sql | 2 +- raster/test/regress/rt_intersection_expected | 80 +++++-- raster/test/regress/rt_pixelaspolygons.sql | 62 ++++++ .../test/regress/rt_pixelaspolygons_expected | 204 ++++++++++++++++++ 9 files changed, 343 insertions(+), 21 deletions(-) create mode 100644 raster/test/regress/rt_pixelaspolygons.sql create mode 100644 raster/test/regress/rt_pixelaspolygons_expected diff --git a/doc/reference_raster.xml b/doc/reference_raster.xml index 8960bde73..1d6ad7990 100644 --- a/doc/reference_raster.xml +++ b/doc/reference_raster.xml @@ -3039,6 +3039,7 @@ WHERE rid=2; setof record ST_PixelAsPolygons raster rast integer band=1 + boolean exclude_nodata_value=TRUE diff --git a/raster/rt_pg/rt_pg.c b/raster/rt_pg/rt_pg.c index f42c2b720..459751d44 100644 --- a/raster/rt_pg/rt_pg.c +++ b/raster/rt_pg/rt_pg.c @@ -2583,9 +2583,10 @@ Datum RASTER_getPixelPolygons(PG_FUNCTION_ARGS) SRF_RETURN_DONE(funcctx); } - /* raster empty, return */ + /* raster empty, return NULL */ if (rt_raster_is_empty(raster)) { elog(NOTICE, "Raster is empty. Returning NULL"); + rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); diff --git a/raster/rt_pg/rtpostgis.sql.in.c b/raster/rt_pg/rtpostgis.sql.in.c index 941d2a18a..b2822f178 100644 --- a/raster/rt_pg/rtpostgis.sql.in.c +++ b/raster/rt_pg/rtpostgis.sql.in.c @@ -2521,13 +2521,14 @@ CREATE OR REPLACE FUNCTION _st_pixelaspolygons( CREATE OR REPLACE FUNCTION st_pixelaspolygons( rast raster, band integer DEFAULT 1, + exclude_nodata_value boolean DEFAULT TRUE, OUT geom geometry, OUT val double precision, OUT x int, OUT y int ) RETURNS SETOF record - AS $$ SELECT geom, val, x, y FROM _st_pixelaspolygons($1, $2, NULL, NULL, TRUE) $$ + AS $$ SELECT geom, val, x, y FROM _st_pixelaspolygons($1, $2, NULL, NULL, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- diff --git a/raster/rt_pg/rtpostgis_drop.sql.in.c b/raster/rt_pg/rtpostgis_drop.sql.in.c index d729a21d2..e6b659d44 100644 --- a/raster/rt_pg/rtpostgis_drop.sql.in.c +++ b/raster/rt_pg/rtpostgis_drop.sql.in.c @@ -341,3 +341,7 @@ 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/Makefile.in b/raster/test/regress/Makefile.in index e64ffcc65..0a33b117b 100644 --- a/raster/test/regress/Makefile.in +++ b/raster/test/regress/Makefile.in @@ -3,7 +3,7 @@ # # Copyright (c) 2009 Sandro Santilli , Pierre Racine # Copyright (c) 2011 Jorge Arevalo -# Copyright (c) 2011 Regents of the University of California +# Copyright (c) 2011-2012 Regents of the University of California # # # This is free software; you can redistribute and/or modify it under @@ -82,7 +82,8 @@ TEST_BANDPROPS = \ drop_rt_band_properties_test \ rt_neighborhood \ rt_nearestvalue \ - rt_pixelofvalue + rt_pixelofvalue \ + rt_pixelaspolygons.sql TEST_UTILITY = \ rt_utility \ diff --git a/raster/test/regress/rt_intersection.sql b/raster/test/regress/rt_intersection.sql index 9434c9635..7e636d815 100644 --- a/raster/test/regress/rt_intersection.sql +++ b/raster/test/regress/rt_intersection.sql @@ -160,7 +160,7 @@ FROM ( FROM raster_intersection_out CROSS JOIN generate_series(1, 2) band ) foo -ORDER BY 1, 2, 3, 4, 5, 7; +ORDER BY 1, 2, 3, 4, 5, 6, 7; DROP TABLE IF EXISTS raster_intersection; DROP TABLE IF EXISTS raster_intersection_out; diff --git a/raster/test/regress/rt_intersection_expected b/raster/test/regress/rt_intersection_expected index 5ad82374f..9507873e5 100644 --- a/raster/test/regress/rt_intersection_expected +++ b/raster/test/regress/rt_intersection_expected @@ -23,42 +23,56 @@ 10|13|0.000|-1.800|2|2|1.000|1.000|0.100|0.100|0|1|8BUI|0.000|4.000|4.000 10|14|||||||||||||| 0|1|1|1|1|1|POLYGON((0 0,1 0,1 1,0 1,0 0)) -0|1|1|1|1|2|POLYGON((0 0,1 0,1 1,0 1,0 0)) 0|1|1|1|1|1|POLYGON((0 0,1 0,1 1,0 1,0 0)) -0|1|1|1|2|2|POLYGON((0 1,1 1,1 2,0 2,0 1)) +0|1|1|1|1|2|POLYGON((0 0,1 0,1 1,0 1,0 0)) 0|1|1|1|2|1|POLYGON((0 1,1 1,1 2,0 2,0 1)) 0|1|1|1|2|1|POLYGON((0 1,1 1,1 2,0 2,0 1)) -0|1|1|2|1|2|POLYGON((1 0,2 0,2 1,1 1,1 0)) +0|1|1|1|2|2|POLYGON((0 1,1 1,1 2,0 2,0 1)) 0|1|1|2|1|1|POLYGON((1 0,2 0,2 1,1 1,1 0)) 0|1|1|2|1|1|POLYGON((1 0,2 0,2 1,1 1,1 0)) +0|1|1|2|1|2|POLYGON((1 0,2 0,2 1,1 1,1 0)) 0|1|1|2|2|1|POLYGON((1 1,2 1,2 2,1 2,1 1)) -0|1|1|2|2|2|POLYGON((1 1,2 1,2 2,1 2,1 1)) 0|1|1|2|2|1|POLYGON((1 1,2 1,2 2,1 2,1 1)) +0|1|1|2|2|2|POLYGON((1 1,2 1,2 2,1 2,1 1)) 0|1|2|1|1|2|POLYGON((0 0,1 0,1 1,0 1,0 0)) +0|1|2|1|1||POLYGON((0 0,1 0,1 1,0 1,0 0)) +0|1|2|1|1||POLYGON((0 0,1 0,1 1,0 1,0 0)) 0|1|2|1|2|2|POLYGON((0 1,1 1,1 2,0 2,0 1)) +0|1|2|1|2||POLYGON((0 1,1 1,1 2,0 2,0 1)) +0|1|2|1|2||POLYGON((0 1,1 1,1 2,0 2,0 1)) 0|1|2|2|1|2|POLYGON((1 0,2 0,2 1,1 1,1 0)) +0|1|2|2|1||POLYGON((1 0,2 0,2 1,1 1,1 0)) +0|1|2|2|1||POLYGON((1 0,2 0,2 1,1 1,1 0)) 0|1|2|2|2|2|POLYGON((1 1,2 1,2 2,1 2,1 1)) +0|1|2|2|2||POLYGON((1 1,2 1,2 2,1 2,1 1)) +0|1|2|2|2||POLYGON((1 1,2 1,2 2,1 2,1 1)) 0|2|1|1|1|1|POLYGON((1 -1,2 -1,2 0,1 0,1 -1)) -0|2|1|1|1|3|POLYGON((1 -1,2 -1,2 0,1 0,1 -1)) 0|2|1|1|1|1|POLYGON((1 -1,2 -1,2 0,1 0,1 -1)) +0|2|1|1|1|3|POLYGON((1 -1,2 -1,2 0,1 0,1 -1)) 0|2|1|1|2|1|POLYGON((1 0,2 0,2 1,1 1,1 0)) -0|2|1|1|2|3|POLYGON((1 0,2 0,2 1,1 1,1 0)) 0|2|1|1|2|1|POLYGON((1 0,2 0,2 1,1 1,1 0)) +0|2|1|1|2|3|POLYGON((1 0,2 0,2 1,1 1,1 0)) 0|2|2|1|1|3|POLYGON((1 -1,2 -1,2 0,1 0,1 -1)) +0|2|2|1|1||POLYGON((1 -1,2 -1,2 0,1 0,1 -1)) +0|2|2|1|1||POLYGON((1 -1,2 -1,2 0,1 0,1 -1)) 0|2|2|1|2|3|POLYGON((1 0,2 0,2 1,1 1,1 0)) +0|2|2|1|2||POLYGON((1 0,2 0,2 1,1 1,1 0)) +0|2|2|1|2||POLYGON((1 0,2 0,2 1,1 1,1 0)) 0|3|1|1|1|1|POLYGON((1 1,2 1,2 2,1 2,1 1)) 0|3|1|1|1|1|POLYGON((1 1,2 1,2 2,1 2,1 1)) 0|3|1|1|1|4|POLYGON((1 1,2 1,2 2,1 2,1 1)) 0|3|2|1|1|4|POLYGON((1 1,2 1,2 2,1 2,1 1)) -10|11|1|1|1|2|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) +0|3|2|1|1||POLYGON((1 1,2 1,2 2,1 2,1 1)) +0|3|2|1|1||POLYGON((1 1,2 1,2 2,1 2,1 1)) 10|11|1|1|1|1|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) 10|11|1|1|1|1|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) +10|11|1|1|1|2|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) 10|11|1|1|2|1|POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) 10|11|1|1|2|1|POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) 10|11|1|1|2|2|POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) -10|11|1|1|3|2|POLYGON((-0.7 1.1,0.3 1.2,0.4 2.2,-0.6 2.1,-0.7 1.1)) 10|11|1|1|3|1|POLYGON((-0.7 1.1,0.3 1.2,0.4 2.2,-0.6 2.1,-0.7 1.1)) 10|11|1|1|3|1|POLYGON((-0.7 1.1,0.3 1.2,0.4 2.2,-0.6 2.1,-0.7 1.1)) +10|11|1|1|3|2|POLYGON((-0.7 1.1,0.3 1.2,0.4 2.2,-0.6 2.1,-0.7 1.1)) 10|11|1|2|1|1|POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) 10|11|1|2|1|1|POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) 10|11|1|2|1|2|POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) @@ -66,26 +80,44 @@ 10|11|1|2|2|1|POLYGON((0.2 0.2,1.2 0.3,1.3 1.3,0.3 1.2,0.2 0.2)) 10|11|1|2|2|2|POLYGON((0.2 0.2,1.2 0.3,1.3 1.3,0.3 1.2,0.2 0.2)) 10|11|1|2|3|1|POLYGON((0.3 1.2,1.3 1.3,1.4 2.3,0.4 2.2,0.3 1.2)) -10|11|1|2|3|2|POLYGON((0.3 1.2,1.3 1.3,1.4 2.3,0.4 2.2,0.3 1.2)) 10|11|1|2|3|1|POLYGON((0.3 1.2,1.3 1.3,1.4 2.3,0.4 2.2,0.3 1.2)) -10|11|1|3|1|2|POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) +10|11|1|2|3|2|POLYGON((0.3 1.2,1.3 1.3,1.4 2.3,0.4 2.2,0.3 1.2)) 10|11|1|3|1|1|POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) 10|11|1|3|1|1|POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) -10|11|1|3|2|2|POLYGON((1.2 0.3,2.2 0.4,2.3 1.4,1.3 1.3,1.2 0.3)) +10|11|1|3|1|2|POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) 10|11|1|3|2|1|POLYGON((1.2 0.3,2.2 0.4,2.3 1.4,1.3 1.3,1.2 0.3)) 10|11|1|3|2|1|POLYGON((1.2 0.3,2.2 0.4,2.3 1.4,1.3 1.3,1.2 0.3)) -10|11|1|3|3|2|POLYGON((1.3 1.3,2.3 1.4,2.4 2.4,1.4 2.3,1.3 1.3)) +10|11|1|3|2|2|POLYGON((1.2 0.3,2.2 0.4,2.3 1.4,1.3 1.3,1.2 0.3)) 10|11|1|3|3|1|POLYGON((1.3 1.3,2.3 1.4,2.4 2.4,1.4 2.3,1.3 1.3)) 10|11|1|3|3|1|POLYGON((1.3 1.3,2.3 1.4,2.4 2.4,1.4 2.3,1.3 1.3)) +10|11|1|3|3|2|POLYGON((1.3 1.3,2.3 1.4,2.4 2.4,1.4 2.3,1.3 1.3)) 10|11|2|1|1|2|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) +10|11|2|1|1||POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) +10|11|2|1|1||POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) 10|11|2|1|2|2|POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) +10|11|2|1|2||POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) +10|11|2|1|2||POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) 10|11|2|1|3|2|POLYGON((-0.7 1.1,0.3 1.2,0.4 2.2,-0.6 2.1,-0.7 1.1)) +10|11|2|1|3||POLYGON((-0.7 1.1,0.3 1.2,0.4 2.2,-0.6 2.1,-0.7 1.1)) +10|11|2|1|3||POLYGON((-0.7 1.1,0.3 1.2,0.4 2.2,-0.6 2.1,-0.7 1.1)) 10|11|2|2|1|2|POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) +10|11|2|2|1||POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) +10|11|2|2|1||POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) 10|11|2|2|2|2|POLYGON((0.2 0.2,1.2 0.3,1.3 1.3,0.3 1.2,0.2 0.2)) +10|11|2|2|2||POLYGON((0.2 0.2,1.2 0.3,1.3 1.3,0.3 1.2,0.2 0.2)) +10|11|2|2|2||POLYGON((0.2 0.2,1.2 0.3,1.3 1.3,0.3 1.2,0.2 0.2)) 10|11|2|2|3|2|POLYGON((0.3 1.2,1.3 1.3,1.4 2.3,0.4 2.2,0.3 1.2)) +10|11|2|2|3||POLYGON((0.3 1.2,1.3 1.3,1.4 2.3,0.4 2.2,0.3 1.2)) +10|11|2|2|3||POLYGON((0.3 1.2,1.3 1.3,1.4 2.3,0.4 2.2,0.3 1.2)) 10|11|2|3|1|2|POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) +10|11|2|3|1||POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) +10|11|2|3|1||POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) 10|11|2|3|2|2|POLYGON((1.2 0.3,2.2 0.4,2.3 1.4,1.3 1.3,1.2 0.3)) +10|11|2|3|2||POLYGON((1.2 0.3,2.2 0.4,2.3 1.4,1.3 1.3,1.2 0.3)) +10|11|2|3|2||POLYGON((1.2 0.3,2.2 0.4,2.3 1.4,1.3 1.3,1.2 0.3)) 10|11|2|3|3|2|POLYGON((1.3 1.3,2.3 1.4,2.4 2.4,1.4 2.3,1.3 1.3)) +10|11|2|3|3||POLYGON((1.3 1.3,2.3 1.4,2.4 2.4,1.4 2.3,1.3 1.3)) +10|11|2|3|3||POLYGON((1.3 1.3,2.3 1.4,2.4 2.4,1.4 2.3,1.3 1.3)) 10|12|1|1|1|1|POLYGON((-1.9 -1,-0.9 -0.9,-0.8 0.1,-1.8 0,-1.9 -1)) 10|12|1|1|1|1|POLYGON((-1.9 -1,-0.9 -0.9,-0.8 0.1,-1.8 0,-1.9 -1)) 10|12|1|1|1|3|POLYGON((-1.9 -1,-0.9 -0.9,-0.8 0.1,-1.8 0,-1.9 -1)) @@ -93,21 +125,29 @@ 10|12|1|1|2|1|POLYGON((-1.8 0,-0.8 0.1,-0.7 1.1,-1.7 1,-1.8 0)) 10|12|1|1|2|3|POLYGON((-1.8 0,-0.8 0.1,-0.7 1.1,-1.7 1,-1.8 0)) 10|12|1|2|1|1|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) -10|12|1|2|1|3|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) 10|12|1|2|1|1|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) +10|12|1|2|1|3|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) 10|12|1|2|2|1|POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) -10|12|1|2|2|3|POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) 10|12|1|2|2|1|POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) +10|12|1|2|2|3|POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) 10|12|2|1|1|3|POLYGON((-1.9 -1,-0.9 -0.9,-0.8 0.1,-1.8 0,-1.9 -1)) +10|12|2|1|1||POLYGON((-1.9 -1,-0.9 -0.9,-0.8 0.1,-1.8 0,-1.9 -1)) +10|12|2|1|1||POLYGON((-1.9 -1,-0.9 -0.9,-0.8 0.1,-1.8 0,-1.9 -1)) 10|12|2|1|2|3|POLYGON((-1.8 0,-0.8 0.1,-0.7 1.1,-1.7 1,-1.8 0)) +10|12|2|1|2||POLYGON((-1.8 0,-0.8 0.1,-0.7 1.1,-1.7 1,-1.8 0)) +10|12|2|1|2||POLYGON((-1.8 0,-0.8 0.1,-0.7 1.1,-1.7 1,-1.8 0)) 10|12|2|2|1|3|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) +10|12|2|2|1||POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) +10|12|2|2|1||POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) 10|12|2|2|2|3|POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) +10|12|2|2|2||POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) +10|12|2|2|2||POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) 10|13|1|1|1|1|POLYGON((0 -1.8,1 -1.7,1.1 -0.7,0.1 -0.8,0 -1.8)) -10|13|1|1|1|4|POLYGON((0 -1.8,1 -1.7,1.1 -0.7,0.1 -0.8,0 -1.8)) 10|13|1|1|1|1|POLYGON((0 -1.8,1 -1.7,1.1 -0.7,0.1 -0.8,0 -1.8)) +10|13|1|1|1|4|POLYGON((0 -1.8,1 -1.7,1.1 -0.7,0.1 -0.8,0 -1.8)) 10|13|1|1|2|1|POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) -10|13|1|1|2|4|POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) 10|13|1|1|2|1|POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) +10|13|1|1|2|4|POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) 10|13|1|2|1|1|POLYGON((1 -1.7,2 -1.6,2.1 -0.6,1.1 -0.7,1 -1.7)) 10|13|1|2|1|1|POLYGON((1 -1.7,2 -1.6,2.1 -0.6,1.1 -0.7,1 -1.7)) 10|13|1|2|1|4|POLYGON((1 -1.7,2 -1.6,2.1 -0.6,1.1 -0.7,1 -1.7)) @@ -115,6 +155,14 @@ 10|13|1|2|2|1|POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) 10|13|1|2|2|4|POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) 10|13|2|1|1|4|POLYGON((0 -1.8,1 -1.7,1.1 -0.7,0.1 -0.8,0 -1.8)) +10|13|2|1|1||POLYGON((0 -1.8,1 -1.7,1.1 -0.7,0.1 -0.8,0 -1.8)) +10|13|2|1|1||POLYGON((0 -1.8,1 -1.7,1.1 -0.7,0.1 -0.8,0 -1.8)) 10|13|2|1|2|4|POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) +10|13|2|1|2||POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) +10|13|2|1|2||POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) 10|13|2|2|1|4|POLYGON((1 -1.7,2 -1.6,2.1 -0.6,1.1 -0.7,1 -1.7)) +10|13|2|2|1||POLYGON((1 -1.7,2 -1.6,2.1 -0.6,1.1 -0.7,1 -1.7)) +10|13|2|2|1||POLYGON((1 -1.7,2 -1.6,2.1 -0.6,1.1 -0.7,1 -1.7)) 10|13|2|2|2|4|POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) +10|13|2|2|2||POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) +10|13|2|2|2||POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) diff --git a/raster/test/regress/rt_pixelaspolygons.sql b/raster/test/regress/rt_pixelaspolygons.sql new file mode 100644 index 000000000..b9e9c723d --- /dev/null +++ b/raster/test/regress/rt_pixelaspolygons.sql @@ -0,0 +1,62 @@ +DROP TABLE IF EXISTS raster_pixelaspolygons; +CREATE TABLE raster_pixelaspolygons ( + rast raster +); +CREATE OR REPLACE FUNCTION make_test_raster() + RETURNS void + AS $$ + DECLARE + width int := 10; + height int := 10; + x int; + y int; + rast raster; + BEGIN + rast := ST_MakeEmptyRaster(width, height, 0, 0, 1, -1, 0, 0, 0); + rast := ST_AddBand(rast, 1, '32BUI', 0, 0); + + FOR x IN 1..width LOOP + FOR y IN 1..height LOOP + IF (x + y) % 2 = 1 THEN + rast := ST_SetValue(rast, 1, x, y, x + y); + END IF; + END LOOP; + END LOOP; + + INSERT INTO raster_pixelaspolygons VALUES (rast); + + RETURN; + END; + $$ LANGUAGE 'plpgsql'; +SELECT make_test_raster(); +DROP FUNCTION make_test_raster(); + +SELECT + (pix).x, + (pix).y, + (pix).val, + ST_AsText((pix).geom) +FROM (SELECT ST_PixelAsPolygons(rast) AS pix FROM raster_pixelaspolygons) foo +ORDER BY 1, 2, 4; + +SELECT + (pix).x, + (pix).y, + (pix).val, + ST_AsText((pix).geom) +FROM (SELECT ST_PixelAsPolygons(rast, NULL) AS pix FROM raster_pixelaspolygons) foo +ORDER BY 1, 2, 4; + +SELECT + (pix).x, + (pix).y, + (pix).val, + ST_AsText((pix).geom) +FROM (SELECT ST_PixelAsPolygons(rast, 1, FALSE) AS pix FROM raster_pixelaspolygons) foo +ORDER BY 1, 2, 4; + +SELECT ST_AsText(ST_PixelAsPolygon(rast, 1, 1)) FROM raster_pixelaspolygons; +SELECT ST_AsText(ST_PixelAsPolygon(rast, 1, 2)) FROM raster_pixelaspolygons; +SELECT ST_AsText(ST_PixelAsPolygon(rast, -1, -1)) FROM raster_pixelaspolygons; + +DROP TABLE IF EXISTS raster_pixelaspolygons; diff --git a/raster/test/regress/rt_pixelaspolygons_expected b/raster/test/regress/rt_pixelaspolygons_expected new file mode 100644 index 000000000..f80c4daa9 --- /dev/null +++ b/raster/test/regress/rt_pixelaspolygons_expected @@ -0,0 +1,204 @@ +NOTICE: table "raster_pixelaspolygons" does not exist, skipping +1|1||POLYGON((0 0,1 0,1 -1,0 -1,0 0)) +1|2|3|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) +1|3||POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) +1|4|5|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) +1|5||POLYGON((0 -4,1 -4,1 -5,0 -5,0 -4)) +1|6|7|POLYGON((0 -5,1 -5,1 -6,0 -6,0 -5)) +1|7||POLYGON((0 -6,1 -6,1 -7,0 -7,0 -6)) +1|8|9|POLYGON((0 -7,1 -7,1 -8,0 -8,0 -7)) +1|9||POLYGON((0 -8,1 -8,1 -9,0 -9,0 -8)) +1|10|11|POLYGON((0 -9,1 -9,1 -10,0 -10,0 -9)) +2|1|3|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) +2|2||POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) +2|3|5|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) +2|4||POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) +2|5|7|POLYGON((1 -4,2 -4,2 -5,1 -5,1 -4)) +2|6||POLYGON((1 -5,2 -5,2 -6,1 -6,1 -5)) +2|7|9|POLYGON((1 -6,2 -6,2 -7,1 -7,1 -6)) +2|8||POLYGON((1 -7,2 -7,2 -8,1 -8,1 -7)) +2|9|11|POLYGON((1 -8,2 -8,2 -9,1 -9,1 -8)) +2|10||POLYGON((1 -9,2 -9,2 -10,1 -10,1 -9)) +3|1||POLYGON((2 0,3 0,3 -1,2 -1,2 0)) +3|2|5|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) +3|3||POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) +3|4|7|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) +3|5||POLYGON((2 -4,3 -4,3 -5,2 -5,2 -4)) +3|6|9|POLYGON((2 -5,3 -5,3 -6,2 -6,2 -5)) +3|7||POLYGON((2 -6,3 -6,3 -7,2 -7,2 -6)) +3|8|11|POLYGON((2 -7,3 -7,3 -8,2 -8,2 -7)) +3|9||POLYGON((2 -8,3 -8,3 -9,2 -9,2 -8)) +3|10|13|POLYGON((2 -9,3 -9,3 -10,2 -10,2 -9)) +4|1|5|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) +4|2||POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) +4|3|7|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) +4|4||POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) +4|5|9|POLYGON((3 -4,4 -4,4 -5,3 -5,3 -4)) +4|6||POLYGON((3 -5,4 -5,4 -6,3 -6,3 -5)) +4|7|11|POLYGON((3 -6,4 -6,4 -7,3 -7,3 -6)) +4|8||POLYGON((3 -7,4 -7,4 -8,3 -8,3 -7)) +4|9|13|POLYGON((3 -8,4 -8,4 -9,3 -9,3 -8)) +4|10||POLYGON((3 -9,4 -9,4 -10,3 -10,3 -9)) +5|1||POLYGON((4 0,5 0,5 -1,4 -1,4 0)) +5|2|7|POLYGON((4 -1,5 -1,5 -2,4 -2,4 -1)) +5|3||POLYGON((4 -2,5 -2,5 -3,4 -3,4 -2)) +5|4|9|POLYGON((4 -3,5 -3,5 -4,4 -4,4 -3)) +5|5||POLYGON((4 -4,5 -4,5 -5,4 -5,4 -4)) +5|6|11|POLYGON((4 -5,5 -5,5 -6,4 -6,4 -5)) +5|7||POLYGON((4 -6,5 -6,5 -7,4 -7,4 -6)) +5|8|13|POLYGON((4 -7,5 -7,5 -8,4 -8,4 -7)) +5|9||POLYGON((4 -8,5 -8,5 -9,4 -9,4 -8)) +5|10|15|POLYGON((4 -9,5 -9,5 -10,4 -10,4 -9)) +6|1|7|POLYGON((5 0,6 0,6 -1,5 -1,5 0)) +6|2||POLYGON((5 -1,6 -1,6 -2,5 -2,5 -1)) +6|3|9|POLYGON((5 -2,6 -2,6 -3,5 -3,5 -2)) +6|4||POLYGON((5 -3,6 -3,6 -4,5 -4,5 -3)) +6|5|11|POLYGON((5 -4,6 -4,6 -5,5 -5,5 -4)) +6|6||POLYGON((5 -5,6 -5,6 -6,5 -6,5 -5)) +6|7|13|POLYGON((5 -6,6 -6,6 -7,5 -7,5 -6)) +6|8||POLYGON((5 -7,6 -7,6 -8,5 -8,5 -7)) +6|9|15|POLYGON((5 -8,6 -8,6 -9,5 -9,5 -8)) +6|10||POLYGON((5 -9,6 -9,6 -10,5 -10,5 -9)) +7|1||POLYGON((6 0,7 0,7 -1,6 -1,6 0)) +7|2|9|POLYGON((6 -1,7 -1,7 -2,6 -2,6 -1)) +7|3||POLYGON((6 -2,7 -2,7 -3,6 -3,6 -2)) +7|4|11|POLYGON((6 -3,7 -3,7 -4,6 -4,6 -3)) +7|5||POLYGON((6 -4,7 -4,7 -5,6 -5,6 -4)) +7|6|13|POLYGON((6 -5,7 -5,7 -6,6 -6,6 -5)) +7|7||POLYGON((6 -6,7 -6,7 -7,6 -7,6 -6)) +7|8|15|POLYGON((6 -7,7 -7,7 -8,6 -8,6 -7)) +7|9||POLYGON((6 -8,7 -8,7 -9,6 -9,6 -8)) +7|10|17|POLYGON((6 -9,7 -9,7 -10,6 -10,6 -9)) +8|1|9|POLYGON((7 0,8 0,8 -1,7 -1,7 0)) +8|2||POLYGON((7 -1,8 -1,8 -2,7 -2,7 -1)) +8|3|11|POLYGON((7 -2,8 -2,8 -3,7 -3,7 -2)) +8|4||POLYGON((7 -3,8 -3,8 -4,7 -4,7 -3)) +8|5|13|POLYGON((7 -4,8 -4,8 -5,7 -5,7 -4)) +8|6||POLYGON((7 -5,8 -5,8 -6,7 -6,7 -5)) +8|7|15|POLYGON((7 -6,8 -6,8 -7,7 -7,7 -6)) +8|8||POLYGON((7 -7,8 -7,8 -8,7 -8,7 -7)) +8|9|17|POLYGON((7 -8,8 -8,8 -9,7 -9,7 -8)) +8|10||POLYGON((7 -9,8 -9,8 -10,7 -10,7 -9)) +9|1||POLYGON((8 0,9 0,9 -1,8 -1,8 0)) +9|2|11|POLYGON((8 -1,9 -1,9 -2,8 -2,8 -1)) +9|3||POLYGON((8 -2,9 -2,9 -3,8 -3,8 -2)) +9|4|13|POLYGON((8 -3,9 -3,9 -4,8 -4,8 -3)) +9|5||POLYGON((8 -4,9 -4,9 -5,8 -5,8 -4)) +9|6|15|POLYGON((8 -5,9 -5,9 -6,8 -6,8 -5)) +9|7||POLYGON((8 -6,9 -6,9 -7,8 -7,8 -6)) +9|8|17|POLYGON((8 -7,9 -7,9 -8,8 -8,8 -7)) +9|9||POLYGON((8 -8,9 -8,9 -9,8 -9,8 -8)) +9|10|19|POLYGON((8 -9,9 -9,9 -10,8 -10,8 -9)) +10|1|11|POLYGON((9 0,10 0,10 -1,9 -1,9 0)) +10|2||POLYGON((9 -1,10 -1,10 -2,9 -2,9 -1)) +10|3|13|POLYGON((9 -2,10 -2,10 -3,9 -3,9 -2)) +10|4||POLYGON((9 -3,10 -3,10 -4,9 -4,9 -3)) +10|5|15|POLYGON((9 -4,10 -4,10 -5,9 -5,9 -4)) +10|6||POLYGON((9 -5,10 -5,10 -6,9 -6,9 -5)) +10|7|17|POLYGON((9 -6,10 -6,10 -7,9 -7,9 -6)) +10|8||POLYGON((9 -7,10 -7,10 -8,9 -8,9 -7)) +10|9|19|POLYGON((9 -8,10 -8,10 -9,9 -9,9 -8)) +10|10||POLYGON((9 -9,10 -9,10 -10,9 -10,9 -9)) +1|1|0|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) +1|2|3|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) +1|3|0|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) +1|4|5|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) +1|5|0|POLYGON((0 -4,1 -4,1 -5,0 -5,0 -4)) +1|6|7|POLYGON((0 -5,1 -5,1 -6,0 -6,0 -5)) +1|7|0|POLYGON((0 -6,1 -6,1 -7,0 -7,0 -6)) +1|8|9|POLYGON((0 -7,1 -7,1 -8,0 -8,0 -7)) +1|9|0|POLYGON((0 -8,1 -8,1 -9,0 -9,0 -8)) +1|10|11|POLYGON((0 -9,1 -9,1 -10,0 -10,0 -9)) +2|1|3|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) +2|2|0|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) +2|3|5|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) +2|4|0|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) +2|5|7|POLYGON((1 -4,2 -4,2 -5,1 -5,1 -4)) +2|6|0|POLYGON((1 -5,2 -5,2 -6,1 -6,1 -5)) +2|7|9|POLYGON((1 -6,2 -6,2 -7,1 -7,1 -6)) +2|8|0|POLYGON((1 -7,2 -7,2 -8,1 -8,1 -7)) +2|9|11|POLYGON((1 -8,2 -8,2 -9,1 -9,1 -8)) +2|10|0|POLYGON((1 -9,2 -9,2 -10,1 -10,1 -9)) +3|1|0|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) +3|2|5|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) +3|3|0|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) +3|4|7|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) +3|5|0|POLYGON((2 -4,3 -4,3 -5,2 -5,2 -4)) +3|6|9|POLYGON((2 -5,3 -5,3 -6,2 -6,2 -5)) +3|7|0|POLYGON((2 -6,3 -6,3 -7,2 -7,2 -6)) +3|8|11|POLYGON((2 -7,3 -7,3 -8,2 -8,2 -7)) +3|9|0|POLYGON((2 -8,3 -8,3 -9,2 -9,2 -8)) +3|10|13|POLYGON((2 -9,3 -9,3 -10,2 -10,2 -9)) +4|1|5|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) +4|2|0|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) +4|3|7|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) +4|4|0|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) +4|5|9|POLYGON((3 -4,4 -4,4 -5,3 -5,3 -4)) +4|6|0|POLYGON((3 -5,4 -5,4 -6,3 -6,3 -5)) +4|7|11|POLYGON((3 -6,4 -6,4 -7,3 -7,3 -6)) +4|8|0|POLYGON((3 -7,4 -7,4 -8,3 -8,3 -7)) +4|9|13|POLYGON((3 -8,4 -8,4 -9,3 -9,3 -8)) +4|10|0|POLYGON((3 -9,4 -9,4 -10,3 -10,3 -9)) +5|1|0|POLYGON((4 0,5 0,5 -1,4 -1,4 0)) +5|2|7|POLYGON((4 -1,5 -1,5 -2,4 -2,4 -1)) +5|3|0|POLYGON((4 -2,5 -2,5 -3,4 -3,4 -2)) +5|4|9|POLYGON((4 -3,5 -3,5 -4,4 -4,4 -3)) +5|5|0|POLYGON((4 -4,5 -4,5 -5,4 -5,4 -4)) +5|6|11|POLYGON((4 -5,5 -5,5 -6,4 -6,4 -5)) +5|7|0|POLYGON((4 -6,5 -6,5 -7,4 -7,4 -6)) +5|8|13|POLYGON((4 -7,5 -7,5 -8,4 -8,4 -7)) +5|9|0|POLYGON((4 -8,5 -8,5 -9,4 -9,4 -8)) +5|10|15|POLYGON((4 -9,5 -9,5 -10,4 -10,4 -9)) +6|1|7|POLYGON((5 0,6 0,6 -1,5 -1,5 0)) +6|2|0|POLYGON((5 -1,6 -1,6 -2,5 -2,5 -1)) +6|3|9|POLYGON((5 -2,6 -2,6 -3,5 -3,5 -2)) +6|4|0|POLYGON((5 -3,6 -3,6 -4,5 -4,5 -3)) +6|5|11|POLYGON((5 -4,6 -4,6 -5,5 -5,5 -4)) +6|6|0|POLYGON((5 -5,6 -5,6 -6,5 -6,5 -5)) +6|7|13|POLYGON((5 -6,6 -6,6 -7,5 -7,5 -6)) +6|8|0|POLYGON((5 -7,6 -7,6 -8,5 -8,5 -7)) +6|9|15|POLYGON((5 -8,6 -8,6 -9,5 -9,5 -8)) +6|10|0|POLYGON((5 -9,6 -9,6 -10,5 -10,5 -9)) +7|1|0|POLYGON((6 0,7 0,7 -1,6 -1,6 0)) +7|2|9|POLYGON((6 -1,7 -1,7 -2,6 -2,6 -1)) +7|3|0|POLYGON((6 -2,7 -2,7 -3,6 -3,6 -2)) +7|4|11|POLYGON((6 -3,7 -3,7 -4,6 -4,6 -3)) +7|5|0|POLYGON((6 -4,7 -4,7 -5,6 -5,6 -4)) +7|6|13|POLYGON((6 -5,7 -5,7 -6,6 -6,6 -5)) +7|7|0|POLYGON((6 -6,7 -6,7 -7,6 -7,6 -6)) +7|8|15|POLYGON((6 -7,7 -7,7 -8,6 -8,6 -7)) +7|9|0|POLYGON((6 -8,7 -8,7 -9,6 -9,6 -8)) +7|10|17|POLYGON((6 -9,7 -9,7 -10,6 -10,6 -9)) +8|1|9|POLYGON((7 0,8 0,8 -1,7 -1,7 0)) +8|2|0|POLYGON((7 -1,8 -1,8 -2,7 -2,7 -1)) +8|3|11|POLYGON((7 -2,8 -2,8 -3,7 -3,7 -2)) +8|4|0|POLYGON((7 -3,8 -3,8 -4,7 -4,7 -3)) +8|5|13|POLYGON((7 -4,8 -4,8 -5,7 -5,7 -4)) +8|6|0|POLYGON((7 -5,8 -5,8 -6,7 -6,7 -5)) +8|7|15|POLYGON((7 -6,8 -6,8 -7,7 -7,7 -6)) +8|8|0|POLYGON((7 -7,8 -7,8 -8,7 -8,7 -7)) +8|9|17|POLYGON((7 -8,8 -8,8 -9,7 -9,7 -8)) +8|10|0|POLYGON((7 -9,8 -9,8 -10,7 -10,7 -9)) +9|1|0|POLYGON((8 0,9 0,9 -1,8 -1,8 0)) +9|2|11|POLYGON((8 -1,9 -1,9 -2,8 -2,8 -1)) +9|3|0|POLYGON((8 -2,9 -2,9 -3,8 -3,8 -2)) +9|4|13|POLYGON((8 -3,9 -3,9 -4,8 -4,8 -3)) +9|5|0|POLYGON((8 -4,9 -4,9 -5,8 -5,8 -4)) +9|6|15|POLYGON((8 -5,9 -5,9 -6,8 -6,8 -5)) +9|7|0|POLYGON((8 -6,9 -6,9 -7,8 -7,8 -6)) +9|8|17|POLYGON((8 -7,9 -7,9 -8,8 -8,8 -7)) +9|9|0|POLYGON((8 -8,9 -8,9 -9,8 -9,8 -8)) +9|10|19|POLYGON((8 -9,9 -9,9 -10,8 -10,8 -9)) +10|1|11|POLYGON((9 0,10 0,10 -1,9 -1,9 0)) +10|2|0|POLYGON((9 -1,10 -1,10 -2,9 -2,9 -1)) +10|3|13|POLYGON((9 -2,10 -2,10 -3,9 -3,9 -2)) +10|4|0|POLYGON((9 -3,10 -3,10 -4,9 -4,9 -3)) +10|5|15|POLYGON((9 -4,10 -4,10 -5,9 -5,9 -4)) +10|6|0|POLYGON((9 -5,10 -5,10 -6,9 -6,9 -5)) +10|7|17|POLYGON((9 -6,10 -6,10 -7,9 -7,9 -6)) +10|8|0|POLYGON((9 -7,10 -7,10 -8,9 -8,9 -7)) +10|9|19|POLYGON((9 -8,10 -8,10 -9,9 -9,9 -8)) +10|10|0|POLYGON((9 -9,10 -9,10 -10,9 -10,9 -9)) +POLYGON((0 0,1 0,1 -1,0 -1,0 0)) +POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) +POLYGON((-2 2,-1 2,-1 1,-2 1,-2 2)) -- 2.40.0