]> granicus.if.org Git - postgis/commitdiff
Do not loose SRID on edge split
authorSandro Santilli <strk@keybit.net>
Sat, 29 Aug 2015 15:58:25 +0000 (15:58 +0000)
committerSandro Santilli <strk@keybit.net>
Sat, 29 Aug 2015 15:58:25 +0000 (15:58 +0000)
Add SRID to edge split tests

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

liblwgeom/lwgeom_topo.c
topology/test/regress/st_modedgesplit.sql
topology/test/regress/st_newedgessplit.sql

index 919f0d093854a9ad929adcaf5cbec794422085d9..8afb2ea27473b69ad54439481f0f940a99343868 100644 (file)
@@ -984,6 +984,15 @@ _lwt_EdgeSplit( LWT_TOPOLOGY* topo, LWT_ELEMID edge, LWPOINT* pt, int skipISOChe
     lwerror("SQL/MM Spatial exception - point not on edge");
     return NULL;
   }
+
+#if 0
+  {
+  size_t sz;
+  char *wkt = lwgeom_to_wkt((LWGEOM*)split_col, WKT_EXTENDED, 2, &sz);
+  LWDEBUGF(1, "returning split col: %s", wkt);
+  lwfree(wkt);
+  }
+#endif
   return split_col;
 }
 
@@ -1004,6 +1013,9 @@ lwt_ModEdgeSplit( LWT_TOPOLOGY* topo, LWT_ELEMID edge,
   if ( ! split_col ) return -1; /* should have raised an exception */
   oldedge_geom = split_col->geoms[0];
   newedge_geom = split_col->geoms[1];
+  /* Make sure the SRID is set on the subgeom */
+  ((LWGEOM*)oldedge_geom)->srid = split_col->srid;
+  ((LWGEOM*)newedge_geom)->srid = split_col->srid;
 
   /* Add new node, getting new id back */
   node.node_id = -1;
@@ -1158,6 +1170,9 @@ lwt_NewEdgesSplit( LWT_TOPOLOGY* topo, LWT_ELEMID edge,
   if ( ! split_col ) return -1; /* should have raised an exception */
   oldedge_geom = split_col->geoms[0];
   newedge_geom = split_col->geoms[1];
+  /* Make sure the SRID is set on the subgeom */
+  ((LWGEOM*)oldedge_geom)->srid = split_col->srid;
+  ((LWGEOM*)newedge_geom)->srid = split_col->srid;
 
   /* Add new node, getting new id back */
   node.node_id = -1;
index 80abf19c383ddacfade3fb3eb411b494d5ab0dba..b4747a84ccab116b555346887d4c68afb28d3c92 100644 (file)
@@ -2,8 +2,10 @@
 \set VERBOSITY terse
 set client_min_messages to WARNING;
 
+INSERT INTO spatial_ref_sys ( auth_name, auth_srid, srid, proj4text ) VALUES ( 'EPSG', 4326, 4326, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs' );
+
 -- Import city_data
-\i load_topology.sql
+\i load_topology-4326.sql
 
 -- Save max node id
 select 'node'::text as what, max(node_id) INTO city_data.limits FROM city_data.node;
@@ -62,32 +64,32 @@ $$ LANGUAGE 'plpgsql';
 -- }
 
 -- Invalid calls
-SELECT 'invalid', ST_ModEdgeSplit('city_data', 999, 'POINT(36 26, 38 30)');
-SELECT 'invalid', ST_ModEdgeSplit('city_data', 10, 'POINT(28 15)');
-SELECT 'invalid', ST_ModEdgeSplit('', 10, 'POINT(28 14)');
-SELECT 'invalid', ST_ModEdgeSplit(NULL, 10, 'POINT(28 14)');
-SELECT 'invalid', ST_ModEdgeSplit('city_data', NULL, 'POINT(28 14)');
+SELECT 'invalid', ST_ModEdgeSplit('city_data', 999, 'SRID=4326;POINT(36 26, 38 30)');
+SELECT 'invalid', ST_ModEdgeSplit('city_data', 10, 'SRID=4326;POINT(28 15)');
+SELECT 'invalid', ST_ModEdgeSplit('', 10, 'SRID=4326;POINT(28 14)');
+SELECT 'invalid', ST_ModEdgeSplit(NULL, 10, 'SRID=4326;POINT(28 14)');
+SELECT 'invalid', ST_ModEdgeSplit('city_data', NULL, 'SRID=4326;POINT(28 14)');
 SELECT 'invalid', ST_ModEdgeSplit('city_data', 10, NULL);
-SELECT 'invalid', ST_ModEdgeSplit('fake', 10, 'POINT(28 14)');
+SELECT 'invalid', ST_ModEdgeSplit('fake', 10, 'SRID=4326;POINT(28 14)');
 
 -- Non-isolated edge 
-SELECT 'noniso', ST_ModEdgeSplit('city_data', 10, 'POINT(28 14)');
+SELECT 'noniso', ST_ModEdgeSplit('city_data', 10, 'SRID=4326;POINT(28 14)');
 SELECT check_changes();
 
 -- Isolated edge
-SELECT 'iso', ST_ModEdgeSplit('city_data', 25, 'POINT(11 35)');
+SELECT 'iso', ST_ModEdgeSplit('city_data', 25, 'SRID=4326;POINT(11 35)');
 SELECT check_changes();
 
 -- Dangling on end point 
-SELECT 'dangling_end', ST_ModEdgeSplit('city_data', 3, 'POINT(25 32)');
+SELECT 'dangling_end', ST_ModEdgeSplit('city_data', 3, 'SRID=4326;POINT(25 32)');
 SELECT check_changes();
 
 -- Dangling on start point 
-SELECT 'dangling_start', ST_ModEdgeSplit('city_data', 4, 'POINT(45 32)');
+SELECT 'dangling_start', ST_ModEdgeSplit('city_data', 4, 'SRID=4326;POINT(45 32)');
 SELECT check_changes();
 
 -- Splitting closed edge
-SELECT 'closed', ST_ModEdgeSplit('city_data', 1, 'POINT(3 38)');
+SELECT 'closed', ST_ModEdgeSplit('city_data', 1, 'SRID=4326;POINT(3 38)');
 SELECT check_changes();
 
 -- Robustness of edge splitting (#1711)
@@ -99,10 +101,12 @@ DELETE FROM city_data.face where face_id > 0;
 
 CREATE TEMP TABLE t AS
 SELECT
+ST_SetSRID(
 '01020000000400000000000000000034400000000000002440000000000000244000000000000024400000000000002240000000000000284000000000000024400000000000003440'
-::geometry as line, 
+::geometry, 4326) as line, 
+ST_SetSRID(
 '010100000000000000000022400000000000002840'
-::geometry as point,
+::geometry, 4326) as point,
 null::int as edge_id,
 null::int as node_id
 ;
@@ -125,3 +129,4 @@ DROP TABLE t;
 
 DROP FUNCTION check_changes();
 SELECT DropTopology('city_data');
+DELETE FROM spatial_ref_sys where srid = 4326;
index 775983413f9214be46daaa11fb9e97ea1fed5aa4..954b23ce45e44d3dfdb66e3d44aa76dbfc700ffa 100644 (file)
@@ -2,6 +2,8 @@
 \set VERBOSITY terse
 set client_min_messages to ERROR;
 
+INSERT INTO spatial_ref_sys ( auth_name, auth_srid, srid, proj4text ) VALUES ( 'EPSG', 4326, 4326, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs' );
+
 -- Import city_data
 \i load_topology.sql
 
@@ -62,32 +64,32 @@ $$ LANGUAGE 'plpgsql';
 -- }
 
 -- Invalid calls
-SELECT 'invalid', ST_NewEdgesSplit('city_data', 999, 'POINT(36 26, 38 30)');
-SELECT 'invalid', ST_NewEdgesSplit('city_data', 10, 'POINT(28 15)');
-SELECT 'invalid', ST_NewEdgesSplit('', 10, 'POINT(28 14)');
-SELECT 'invalid', ST_NewEdgesSplit(NULL, 10, 'POINT(28 14)');
-SELECT 'invalid', ST_NewEdgesSplit('city_data', NULL, 'POINT(28 14)');
+SELECT 'invalid', ST_NewEdgesSplit('city_data', 999, 'SRID=4326;POINT(36 26, 38 30)');
+SELECT 'invalid', ST_NewEdgesSplit('city_data', 10, 'SRID=4326;POINT(28 15)');
+SELECT 'invalid', ST_NewEdgesSplit('', 10, 'SRID=4326;POINT(28 14)');
+SELECT 'invalid', ST_NewEdgesSplit(NULL, 10, 'SRID=4326;POINT(28 14)');
+SELECT 'invalid', ST_NewEdgesSplit('city_data', NULL, 'SRID=4326;POINT(28 14)');
 SELECT 'invalid', ST_NewEdgesSplit('city_data', 10, NULL);
-SELECT 'invalid', ST_NewEdgesSplit('fake', 10, 'POINT(28 14)');
+SELECT 'invalid', ST_NewEdgesSplit('fake', 10, 'SRID=4326;POINT(28 14)');
 
 -- Non-isolated edge 
-SELECT 'noniso', ST_NewEdgesSplit('city_data', 10, 'POINT(28 14)');
+SELECT 'noniso', ST_NewEdgesSplit('city_data', 10, 'SRID=4326;POINT(28 14)');
 SELECT check_changes();
 
 -- Isolated edge
-SELECT 'iso', ST_NewEdgesSplit('city_data', 25, 'POINT(11 35)');
+SELECT 'iso', ST_NewEdgesSplit('city_data', 25, 'SRID=4326;POINT(11 35)');
 SELECT check_changes();
 
 -- Dangling on end point 
-SELECT 'dangling_end', ST_NewEdgesSplit('city_data', 3, 'POINT(25 32)');
+SELECT 'dangling_end', ST_NewEdgesSplit('city_data', 3, 'SRID=4326;POINT(25 32)');
 SELECT check_changes();
 
 -- Dangling on start point 
-SELECT 'dangling_start', ST_NewEdgesSplit('city_data', 4, 'POINT(45 32)');
+SELECT 'dangling_start', ST_NewEdgesSplit('city_data', 4, 'SRID=4326;POINT(45 32)');
 SELECT check_changes();
 
 -- Splitting closed edge
-SELECT 'closed', ST_NewEdgesSplit('city_data', 1, 'POINT(3 38)');
+SELECT 'closed', ST_NewEdgesSplit('city_data', 1, 'SRID=4326;POINT(3 38)');
 SELECT check_changes();
 
 -- Robustness of edge splitting (#1711)
@@ -99,10 +101,12 @@ DELETE FROM city_data.face where face_id > 0;
 
 CREATE TEMP TABLE t AS
 SELECT
+ST_SetSRID(
 '01020000000400000000000000000034400000000000002440000000000000244000000000000024400000000000002240000000000000284000000000000024400000000000003440'
-::geometry as line, 
+::geometry, 4326) as line, 
+ST_SetSRID(
 '010100000000000000000022400000000000002840'
-::geometry as point,
+::geometry, 4326) as point,
 null::int as edge_id,
 null::int as node_id
 ;
@@ -124,3 +128,4 @@ DROP TABLE t;
 
 DROP FUNCTION check_changes();
 SELECT DropTopology('city_data');
+DELETE FROM spatial_ref_sys where srid = 4326;