From: Sandro Santilli Date: Sat, 2 Apr 2011 12:27:13 +0000 (+0000) Subject: Use a 2d geometry for face mbr, even for 2.5d topologies. After all mbr is a rectangl... X-Git-Tag: 2.0.0alpha1~1807 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=727cd3369cb50b8ea110b0444cf3395b352da58f;p=postgis Use a 2d geometry for face mbr, even for 2.5d topologies. After all mbr is a rectangle (not cube) by definition (Minimum Bounding Rectangle) so we don't want to mess with poliedron or whatnot [see #103 for more infos about the can of worms..] git-svn-id: http://svn.osgeo.org/postgis/trunk@6995 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/topology/test/Makefile b/topology/test/Makefile index 1e61e4c31..a497ed6d7 100644 --- a/topology/test/Makefile +++ b/topology/test/Makefile @@ -26,6 +26,7 @@ TESTS = regress/legacy_validate.sql regress/legacy_predicate.sql \ regress/legacy_invalid.sql regress/sqlmm.sql \ regress/legacy_query.sql regress/addnode.sql \ regress/addedge.sql regress/addface.sql \ + regress/addface2.5d.sql \ regress/st_getfacegeometry.sql \ regress/topoelement.sql \ regress/topoelementarray_agg.sql \ @@ -37,7 +38,7 @@ TESTS = regress/legacy_validate.sql regress/legacy_predicate.sql \ regress/gml.sql \ regress/getnodebypoint.sql \ regress/getedgebypoint.sql \ - regress/getfacebypoint.sql + regress/getfacebypoint.sql check: topo_predicates.sql load_topology.sql load_topology-4326.sql $(MAKE) -C ../../regress postgis.sql staged-install diff --git a/topology/test/regress/addface2.5d.sql b/topology/test/regress/addface2.5d.sql new file mode 100644 index 000000000..cc7fd6aaf --- /dev/null +++ b/topology/test/regress/addface2.5d.sql @@ -0,0 +1,24 @@ +set client_min_messages to ERROR; + +-- Test with zero tolerance + +SELECT topology.CreateTopology('tt3d', -1, 0, true) > 0; + +-- Create 4 edges + +SELECT 'e1', topology.addEdge('tt3d', 'LINESTRING(0 0 10, 10 0 20)'); +SELECT 'e2', topology.addEdge('tt3d', 'LINESTRING(10 0 20, 10 10 30)'); +SELECT 'e3', topology.addEdge('tt3d', 'LINESTRING(0 10 20, 10 10 30)'); +SELECT 'e4', topology.addEdge('tt3d', 'LINESTRING(0 0 10, 0 10 20)'); + +-- Register a face with no holes +SELECT 'f1', topology.addFace('tt3d', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); + +-- Check added faces +SELECT face_id, st_asewkt(mbr) from tt3d.face ORDER by face_id; + +-- Check linking +SELECT edge_id, left_face, right_face from tt3d.edge ORDER by edge_id; + +SELECT topology.DropTopology('tt3d'); + diff --git a/topology/test/regress/addface2.5d_expected b/topology/test/regress/addface2.5d_expected new file mode 100644 index 000000000..d81a5de13 --- /dev/null +++ b/topology/test/regress/addface2.5d_expected @@ -0,0 +1,13 @@ +t +e1|1 +e2|2 +e3|3 +e4|4 +f1|1 +0| +1|POLYGON((0 0,0 10,10 10,10 0,0 0)) +1|1|0 +2|1|0 +3|0|1 +4|0|1 +Topology 'tt3d' dropped diff --git a/topology/topology.sql.in.c b/topology/topology.sql.in.c index 9dcce4cbe..58caa4c38 100644 --- a/topology/topology.sql.in.c +++ b/topology/topology.sql.in.c @@ -1640,7 +1640,7 @@ CREATE SCHEMA ' || quote_ident(atopology) || '; EXECUTE 'SELECT AddGeometryColumn('||quote_literal(atopology) ||',''face'',''mbr'','||quote_literal(srid) - ||',''POLYGON'',' || ndims || ')'; + ||',''POLYGON'',2)'; -- 2d only mbr is good enough -------------} END OF face CREATION