[SCM] PostGIS branch master updated. 3.4.0rc1-1083-gb123d48a7

git at osgeo.org git at osgeo.org
Mon Apr 8 11:00:31 PDT 2024


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "PostGIS".

The branch, master has been updated
       via  b123d48a7b6bf127120dd3eca5d892cf95180c73 (commit)
      from  96914caf8e81b9a7a255dfc2eece6be59e2f297f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit b123d48a7b6bf127120dd3eca5d892cf95180c73
Author: Sandro Santilli <strk at kbt.io>
Date:   Mon Apr 8 19:59:15 2024 +0200

    Make sure ST_ChangeEdgeGeom gets a fit view on edge's bounding boxes
    
    Reference #5704 in master branch (3.5.0dev)
    
    Includes regression testcase

diff --git a/liblwgeom/topo/lwgeom_topo.c b/liblwgeom/topo/lwgeom_topo.c
index 370c82447..570f449a5 100644
--- a/liblwgeom/topo/lwgeom_topo.c
+++ b/liblwgeom/topo/lwgeom_topo.c
@@ -3512,8 +3512,12 @@ lwt_ChangeEdgeGeom(LWT_TOPOLOGY* topo, LWT_ELEMID edge_id, LWLINE *geom)
   --       would be larger than the old face MBR...
   --
   */
-  const GBOX* oldbox = lwgeom_get_bbox(lwline_as_lwgeom(oldedge->geom));
-  const GBOX* newbox = lwgeom_get_bbox(lwline_as_lwgeom(geom));
+  LWGEOM *oldgeom = lwline_as_lwgeom(oldedge->geom);
+  LWGEOM *newgeom = lwline_as_lwgeom(geom);
+  lwgeom_refresh_bbox(oldgeom); /* Ensure we use a fit mbr, see #5709 -- TODO: fix this at lower level */
+  lwgeom_refresh_bbox(newgeom); /* Ensure we use a fit mbr, see #5709 -- TODO: fix this at lower level */
+  const GBOX* oldbox = lwgeom_get_bbox(oldgeom);
+  const GBOX* newbox = lwgeom_get_bbox(newgeom);
   if ( ! gbox_same(oldbox, newbox) )
   {
     GBOX* updatedBox;
diff --git a/topology/test/regress/st_changeedgegeom.sql b/topology/test/regress/st_changeedgegeom.sql
index 7822035e0..7f2605e4e 100644
--- a/topology/test/regress/st_changeedgegeom.sql
+++ b/topology/test/regress/st_changeedgegeom.sql
@@ -150,3 +150,39 @@ ROLLBACK;
 
 SELECT topology.DropTopology('city_data');
 
+-- See https://trac.osgeo.org/postgis/ticket/5709
+SELECT NULL FROM createtopology('t5709');
+SELECT 't5709', 'edge', * FROM TopoGeo_addLineString('t5709',
+  'LINESTRING(
+    0 0,
+    5 65.2,
+    10 0,
+    0 0)
+  ');
+SELECT 't5709', 'mbr-invalid-before', face_id
+FROM t5709.face
+WHERE face_id > 0
+AND NOT ST_Equals(
+    mbr,
+    ST_Envelope(
+      ST_GetFaceGeometry('t5709', face_id)
+    )
+  );
+--set client_min_messages to DEBUG;
+SELECT NULL FROM ST_ChangeEdgeGeom('t5709', 1,
+  'LINESTRING(
+    0 0,
+    5 65.2000000000001,
+    10 0,
+    0 0)
+  ');
+SELECT 't5709', 'mbr-invalid-after', face_id
+FROM t5709.face
+WHERE face_id > 0
+AND NOT ST_Equals(
+    mbr,
+    ST_Envelope(
+      ST_GetFaceGeometry('t5709', face_id)
+    )
+  );
+SELECT NULL FROM topology.DropTopology('t5709');
diff --git a/topology/test/regress/st_changeedgegeom_expected b/topology/test/regress/st_changeedgegeom_expected
index 9e29700c7..f2bc4fb95 100644
--- a/topology/test/regress/st_changeedgegeom_expected
+++ b/topology/test/regress/st_changeedgegeom_expected
@@ -36,3 +36,4 @@ T13.2|Edge 29 changed
 T13.3|26
 ERROR:  Edge motion collision at POINT(-1.1697 47.7825)
 Topology 'city_data' dropped
+t5709|edge|1

-----------------------------------------------------------------------

Summary of changes:
 liblwgeom/topo/lwgeom_topo.c                     |  8 ++++--
 topology/test/regress/st_changeedgegeom.sql      | 36 ++++++++++++++++++++++++
 topology/test/regress/st_changeedgegeom_expected |  1 +
 3 files changed, 43 insertions(+), 2 deletions(-)


hooks/post-receive
-- 
PostGIS


More information about the postgis-tickets mailing list