]> granicus.if.org Git - postgis/commitdiff
Fix ST_SnapToGrid output having an outdated bbox
authorRaúl Marín Rodríguez <rmrodriguez@carto.com>
Mon, 2 Sep 2019 12:10:34 +0000 (12:10 +0000)
committerRaúl Marín Rodríguez <rmrodriguez@carto.com>
Mon, 2 Sep 2019 12:10:34 +0000 (12:10 +0000)
References #4495

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

NEWS
postgis/lwgeom_functions_analytic.c
regress/simplifyvw.sql
regress/simplifyvw_expected
regress/snaptogrid.sql
regress/snaptogrid_expected

diff --git a/NEWS b/NEWS
index 844089f3eff7b80595a7fb4a5230d7d3957fe9f1..6dc7b1bdf58bd61836ad89392c97941dad3775a7 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,7 @@ XXXX/XX/XX
   - #4492, Fix ST_Simplify ignoring the value of the 3rd parameter (Raúl Marín)
   - #4494, Fix ST_Simplify output having an outdated bbox (Raúl Marín)
   - #4493, Fix ST_RemoveRepeatedPoints output having an outdated bbox (Raúl Marín)
+  - #4495, Fix ST_SnapToGrid output having an outdated bbox (Raúl Marín)
 
 
 PostGIS 2.4.8
index d9aef14a282fcde4e2290aaca88520f144b997cb..cf05571ccddfe88fe10dfe5a1326a1d2b7ee87f9 100644 (file)
@@ -354,8 +354,10 @@ Datum LWGEOM_snaptogrid(PG_FUNCTION_ARGS)
 
        /* COMPUTE_BBOX TAINTING */
        if ( in_lwgeom->bbox )
+       {
+               lwgeom_drop_bbox(out_lwgeom);
                lwgeom_add_bbox(out_lwgeom);
-
+       }
 
        POSTGIS_DEBUGF(3, "SnapToGrid made a %s", lwtype_name(out_lwgeom->type));
 
@@ -436,7 +438,11 @@ Datum LWGEOM_snaptogrid_pointoff(PG_FUNCTION_ARGS)
        if ( out_lwgeom == NULL ) PG_RETURN_NULL();
 
        /* COMPUTE_BBOX TAINTING */
-       if ( in_lwgeom->bbox ) lwgeom_add_bbox(out_lwgeom);
+       if (in_lwgeom->bbox)
+       {
+               lwgeom_drop_bbox(out_lwgeom);
+               lwgeom_add_bbox(out_lwgeom);
+       }
 
        POSTGIS_DEBUGF(3, "SnapToGrid made a %s", lwtype_name(out_lwgeom->type));
 
index 68e16c92e34e3bd79c0d9fe6fb7f587b45f27848..e349af1a8c1c164d273202383d54090c74c59f42 100644 (file)
@@ -12,3 +12,10 @@ SELECT '9', ST_astext(ST_Simplifyvw('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(5 5,
 SELECT '10', ST_astext(ST_Simplifyvw('LINESTRING(0 0, 0 10)', 20));
 SELECT '11', ST_astext(ST_Simplifyvw('MULTIPOLYGON(((100 100, 100 130, 130 130, 130 100, 100 100)), ((0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 5 6, 6 6, 8 5, 5 5)) )', 20));
 SELECT '12', ST_astext(ST_Simplifyvw('MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 5 6, 6 6, 8 5, 5 5)),((100 100, 100 130, 130 130, 130 100, 100 100)))', 200));
+
+-- The geometry bbox is updated
+WITH geom AS
+(
+    SELECT ST_Simplifyvw('MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 5 6, 6 6, 8 5, 5 5)),((100 100, 100 130, 130 130, 130 131, 130 130, 130 100, 100 100)))', 200) AS g
+)
+SELECT '13', ST_AsText(g) as geometry, postgis_getbbox(g) AS box from geom;
index a9ea8d69aebc8505f885476028abf46ff8eec119..d37ee6ada9a502c47c3ac9b75e1165f5e60f61ee 100644 (file)
@@ -10,3 +10,4 @@
 10|LINESTRING(0 0,0 10)
 11|MULTIPOLYGON(((100 100,100 130,130 130,130 100,100 100)),((0 0,10 0,10 10,0 10,0 0)))
 12|MULTIPOLYGON(((0 0,10 10,0 10,0 0)),((100 100,100 130,130 130,130 100,100 100)))
+13|MULTIPOLYGON(((0 0,10 10,0 10,0 0)),((100 100,100 130,130 130,130 100,100 100)))|BOX(0 0,130 130)
index 571cd2c41fec41b2af5541a1e8ab54a435f193e9..0b6f5bd979c98027f61f4f4434fafa25b7d7db89 100644 (file)
@@ -10,3 +10,12 @@ SELECT ST_snaptogrid(orig, 0.002) ~= ST_snaptogrid(ST_snaptogrid(orig, 0.002), 0
 SELECT ST_snaptogrid(orig, 0.003) ~= ST_snaptogrid(ST_snaptogrid(orig, 0.003), 0.003) FROM tmp;
 SELECT ST_snaptogrid(orig, 0.0002) ~= ST_snaptogrid(ST_snaptogrid(orig, 0.0002), 0.0002) FROM tmp;
 DROP TABLE tmp;
+
+-- The geometry bbox is updated
+WITH geom AS
+(
+    SELECT ST_SnapToGrid('POLYGON((0 0, 10 0, 10 10, 10.6 10, 10.5 10.5, 10 10, 0 10, 0 0))', 10) as g
+    UNION ALL
+    SELECT ST_SnapToGrid('POLYGON((0 0, 10 0, 10 10, 10.6 10, 10.5 10.5, 10 10, 0 10, 0 0))', 'POINT(0 0)', 10, 10, 10, 10) as g
+)
+Select ST_AsText(g) as geometry, postgis_getbbox(g) AS box from geom;
index 04e7be33b65a9e7e876caf83a8de9d0e013a42eb..518c1734ba139253467f43f125ee111971ec1877 100644 (file)
@@ -3,3 +3,5 @@ t
 t
 t
 t
+POLYGON((0 0,10 0,10 10,0 10,0 0))|BOX(0 0,10 10)
+POLYGON((0 0,10 0,10 10,0 10,0 0))|BOX(0 0,10 10)