]> granicus.if.org Git - postgis/commitdiff
Change signature of ST_PixelAsPolygons() and added regression tests.
authorBborie Park <bkpark at ucdavis.edu>
Tue, 3 Jul 2012 22:30:00 +0000 (22:30 +0000)
committerBborie Park <bkpark at ucdavis.edu>
Tue, 3 Jul 2012 22:30:00 +0000 (22:30 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@10022 b70326c6-7e19-0410-871a-916f4a2858ee

doc/reference_raster.xml
raster/rt_pg/rt_pg.c
raster/rt_pg/rtpostgis.sql.in.c
raster/rt_pg/rtpostgis_drop.sql.in.c
raster/test/regress/Makefile.in
raster/test/regress/rt_intersection.sql
raster/test/regress/rt_intersection_expected
raster/test/regress/rt_pixelaspolygons.sql [new file with mode: 0644]
raster/test/regress/rt_pixelaspolygons_expected [new file with mode: 0644]

index 8960bde73cb9a4a4b333dcc724ab304a8ce6e3d8..1d6ad7990e3aef1012483ae4b004e6561b4bc9c1 100644 (file)
@@ -3039,6 +3039,7 @@ WHERE rid=2;
                                        <funcdef>setof record <function>ST_PixelAsPolygons</function></funcdef>
                                        <paramdef><type>raster </type> <parameter>rast</parameter></paramdef>
                                        <paramdef choice='opt'><type>integer </type> <parameter>band=1</parameter></paramdef>
+                                       <paramdef choice='opt'><type>boolean </type> <parameter>exclude_nodata_value=TRUE</parameter></paramdef>
                                  </funcprototype>
                                </funcsynopsis>
                        </refsynopsisdiv>
index f42c2b7206879731d282e7e61293eebc001d0b50..459751d4449db61495fc26862bda15bac131a3ca 100644 (file)
@@ -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);
index 941d2a18a7d3c9205c4fb58026b5e0e77e532cc0..b2822f1785c4a37a2481fdb9453d052d2ef3f299 100644 (file)
@@ -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;
 
 -----------------------------------------------------------------------
index d729a21d2e1d427acea3e7e0525f3c7e5505ec9e..e6b659d44b99d25761ea7acc2fdb69bd511a5383 100644 (file)
@@ -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);
+
index e64ffcc65c1f3c947eae02e9eec434bc8f29e9f9..0a33b117b9d74e46a44d827eb723e8ce355b58ac 100644 (file)
@@ -3,7 +3,7 @@
 #
 # Copyright (c) 2009 Sandro Santilli <strk@keybit.net>, Pierre Racine <pierre.racine@sbf.ulaval.ca>
 # Copyright (c) 2011 Jorge Arevalo <jorge.arevalo@deimos-space.com>
-# Copyright (c) 2011 Regents of the University of California
+# Copyright (c) 2011-2012 Regents of the University of California
 #   <bkpark@ucdavis.edu>
 #
 # 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 \
index 9434c9635d81f69a70ab024c59ffee7d1d1c1396..7e636d815d9669d9373a55138a0c9e5387b8935b 100644 (file)
@@ -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;
index 5ad82374ff6a24c49f25aa21a666da2b6a987569..9507873e508a99e0043e333f1ce0064ac931df43 100644 (file)
 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))
 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))
 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))
 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 (file)
index 0000000..b9e9c72
--- /dev/null
@@ -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 (file)
index 0000000..f80c4da
--- /dev/null
@@ -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))