Skip to content

Commit

Permalink
Make sure ST_ChangeEdgeGeom gets a fit view on edge's bounding boxes
Browse files Browse the repository at this point in the history
Reference #5704 in master branch (3.5.0dev)

Includes regression testcase
  • Loading branch information
strk committed Apr 8, 2024
1 parent 96914ca commit b123d48
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 2 deletions.
8 changes: 6 additions & 2 deletions liblwgeom/topo/lwgeom_topo.c
Expand Up @@ -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;
Expand Down
36 changes: 36 additions & 0 deletions topology/test/regress/st_changeedgegeom.sql
Expand Up @@ -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');
1 change: 1 addition & 0 deletions topology/test/regress/st_changeedgegeom_expected
Expand Up @@ -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

0 comments on commit b123d48

Please sign in to comment.