]> granicus.if.org Git - postgis/commitdiff
[raster] Fix envelope Contains shortcut in ST_Clip
authorDarafei Praliaskouski <me@komzpa.net>
Tue, 23 Oct 2018 12:58:02 +0000 (12:58 +0000)
committerDarafei Praliaskouski <me@komzpa.net>
Tue, 23 Oct 2018 12:58:02 +0000 (12:58 +0000)
Patch by Sai-bot

Closes #3457

git-svn-id: http://svn.osgeo.org/postgis/trunk@16940 b70326c6-7e19-0410-871a-916f4a2858ee

NEWS
raster/rt_pg/rtpostgis.sql.in
raster/test/regress/tickets.sql
raster/test/regress/tickets_expected

diff --git a/NEWS b/NEWS
index 4cfadd008c665910f09337b902964ad0c6e8e166..7c51b4b65685c3277f2c20b1b99052a6432e1cfc 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -25,6 +25,7 @@ PostGIS 3.0.0
   - #4191, Fix undefined behaviour in ptarray_clone_deep (Raúl Marín)
   - #4211, Fix ST_Subdivide for minimal exterior ring with minimal hole (Darafei
     Praliaskouski)
+  - #3457, Fix raster envelope shortcut in ST_Clip (Sai-bot)
 
 PostGIS 2.5.0
 2018/09/23
index 40b71c0ac6cd73f5d0c12e29fd0741f205b53475..36006a8f98cfd270f38ffa770510961ac16b3f51 100644 (file)
@@ -6971,7 +6971,7 @@ CREATE OR REPLACE FUNCTION st_clip(
        AS $$
        BEGIN
                -- short-cut if geometry's extent fully contains raster's extent
-               IF (nodataval IS NULL OR array_length(nodataval, 1) < 1) AND geom ~ @extschema@.ST_Envelope(rast) THEN
+               IF (nodataval IS NULL OR array_length(nodataval, 1) < 1) AND @extschema@.ST_Contains(geom, @extschema@.ST_Envelope(rast)) THEN
                        RETURN rast;
                END IF;
 
index dd4fe7af8933301b3628240c30c36b0a084afc87..52d9e05a9f4791615c146fc46b60f2213c197157 100644 (file)
@@ -121,3 +121,5 @@ SELECT ST_SummaryStats(ST_Clip(ST_MakeEmptyRaster(42, 42, 0, 0, 1.0, 1.0, 0, 0,
 -- #4102 negative nodata values don't apply on Raspberry Pi
 SELECT '#4102.1', ST_BandNoDataValue(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BSI', 0, -10), 1) AS rast;
 SELECT '#4102.2', ST_BandNoDataValue(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '32BSI', 0, -10), 1) AS rast;
+
+select '#3457', ST_Area((ST_DumpAsPolygons(ST_Clip(ST_ASRaster(ST_GeomFromText('POLYGON((0 0,100 0,100 100,0 100,0 0))',4326),ST_Addband(ST_MakeEmptyRaster(1,1,0,0,1,-1,0,0,4326),'32BF'::text,0,-1),'32BF'::text,1,-1), ST_GeomFromText('POLYGON((0 0,100 100,100 0,0 0))',4326)))).geom);
index 1b1d14ab3c0e4743730871f01cda49fcda38baa2..5ac2ac54f08d0fdb89d88b3ba9ba69b0860d6096 100644 (file)
@@ -16,3 +16,4 @@ NOTICE:  Input raster is empty or has no bands. Returning empty raster
 NOTICE:  Invalid band index (must use 1-based). Returning NULL
 #4102.1|-10
 #4102.2|-10
+#3457|4950