]> granicus.if.org Git - postgis/commitdiff
Add "M" type modifiers on elements of GEOMETRYCOLLECTION
authorSandro Santilli <strk@keybit.net>
Tue, 10 Jan 2012 10:06:11 +0000 (10:06 +0000)
committerSandro Santilli <strk@keybit.net>
Tue, 10 Jan 2012 10:06:11 +0000 (10:06 +0000)
Reflects specs in doc/ZMgeoms.txt and satisfies the parser.
Closes ticket #724.

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

liblwgeom/cunit/cu_in_wkt.c
liblwgeom/cunit/cu_out_wkt.c
liblwgeom/lwout_wkt.c
regress/regress_lrs_expected
regress/sql-mm-compoundcurve_expected
regress/sql-mm-curvepoly_expected
regress/sql-mm-multicurve_expected
regress/sql-mm-multisurface_expected
regress/sql-mm-serialize.sql

index 9c6108836eb90fa9e98214cf989b82b26aa3025d..17a9d5931d88bb79caec442bcaf21c47030f097c 100644 (file)
@@ -236,7 +236,7 @@ static void test_wkt_in_circularstring(void)
 
 static void test_wkt_in_compoundcurve(void)
 {
-       s = "SRID=4326;COMPOUNDCURVEM(CIRCULARSTRING(0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2))";
+       s = "SRID=4326;COMPOUNDCURVEM(CIRCULARSTRINGM(0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2))";
        r = cu_wkt_in(s, WKT_EXTENDED);
        CU_ASSERT_STRING_EQUAL(r,s);
        //printf("\nIN:  %s\nOUT: %s\n",s,r);
index 9aa111ad2574ebd78b50f2f8a2076a249e63311e..ab99eb780c0399db9a96c1414d77d12d8206981c 100644 (file)
@@ -147,6 +147,12 @@ static void test_wkt_out_collection(void)
            cu_wkt("GEOMETRYCOLLECTION(MULTIPOLYGON(((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2))),MULTIPOINT(.5 .5 .5,1 1 1),CURVEPOLYGON((.8 .8 .8,.8 .8 .8,.8 .8 .8)))",WKT_ISO),
            "GEOMETRYCOLLECTION Z (MULTIPOLYGON Z (((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2))),MULTIPOINT Z (0.5 0.5 0.5,1 1 1),CURVEPOLYGON Z ((0.8 0.8 0.8,0.8 0.8 0.8,0.8 0.8 0.8)))"
        );
+
+        /* See http://trac.osgeo.org/postgis/ticket/724 */
+       CU_ASSERT_STRING_EQUAL(
+            cu_wkt("GEOMETRYCOLLECTIONM(MULTIPOINTM(0 0 0), POINTM(1 1 1))", WKT_EXTENDED),
+            "GEOMETRYCOLLECTIONM(MULTIPOINTM(0 0 0),POINTM(1 1 1))"
+       );
 }
 
 static void test_wkt_out_circularstring(void)
index 124e295ba4e9400015c8b2f7d2b1d6b44d950de8..c42582b004d2d69d8aa71260b88e717118dafb57 100644 (file)
@@ -26,7 +26,11 @@ static void dimension_qualifiers_to_wkt_sb(const LWGEOM *geom, stringbuffer_t *s
 {
 
        /* Extended WKT: POINTM(0 0 0) */
+#if 0
        if ( (variant & WKT_EXTENDED) && ! (variant & WKT_IS_CHILD) && FLAGS_GET_M(geom->flags) && (!FLAGS_GET_Z(geom->flags)) )
+#else
+       if ( (variant & WKT_EXTENDED) && FLAGS_GET_M(geom->flags) && (!FLAGS_GET_Z(geom->flags)) )
+#endif
        {
                stringbuffer_append(sb, "M"); /* "M" */
                return;
@@ -486,7 +490,7 @@ static void lwcollection_to_wkt_sb(const LWCOLLECTION *collection, stringbuffer_
                return;
        }
        stringbuffer_append(sb, "(");
-       variant = variant | WKT_IS_CHILD; /* Inform the sub-geometries they are childre */
+       variant = variant | WKT_IS_CHILD; /* Inform the sub-geometries they are children */
        for ( i = 0; i < collection->ngeoms; i++ )
        {
                if ( i > 0 )
index 41a2668a686ea21fec20bc9f8384cec724d174ca..75a3918b0304a75ed3946b55d785862c22926e8f 100644 (file)
@@ -5,10 +5,10 @@ PNTM_2|POINTM(1 2 3)
 PNTM_3|POINTM(1 2 3)
 PNTM_4|POINTM(1 2 3)
 PNTM_5|GEOMETRYCOLLECTIONM EMPTY
-MPNT_1|GEOMETRYCOLLECTIONM(POINT(1 2 2))
-MPNT_2|GEOMETRYCOLLECTIONM(POINT(2 2 5))
+MPNT_1|GEOMETRYCOLLECTIONM(POINTM(1 2 2))
+MPNT_2|GEOMETRYCOLLECTIONM(POINTM(2 2 5))
 MPNT_3|GEOMETRYCOLLECTIONM EMPTY
-MPNT_4|GEOMETRYCOLLECTIONM(POINT(1 2 8),POINT(2 2 5))
+MPNT_4|GEOMETRYCOLLECTIONM(POINTM(1 2 8),POINTM(2 2 5))
 LINEZM_1|LINESTRING(0 8 80 2,0 0 0 10)
 LINEZM_2|LINESTRING(0 8 20 2,0 0 100 10)
 LINEZM_3|LINESTRING(0 8 80 2,0 0 0 10,8 0 0 2)
index ca3756095e6d3b1f5f7588f63bb8ca14e464ba1d..771025b6f27934eed04c51354701a8936d82dc8b 100644 (file)
@@ -19,7 +19,7 @@ astext02|COMPOUNDCURVE(CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905
 astext03|COMPOUNDCURVE(CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731),(0.585786437626905 1.4142135623731,2 0,0 0))
 astext04|COMPOUNDCURVE(CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731),(0.585786437626905 1.4142135623731,2 0,0 0))
 asewkt01|COMPOUNDCURVE(CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731),(0.585786437626905 1.4142135623731,2 0,0 0))
-asewkt02|COMPOUNDCURVEM(CIRCULARSTRING(0 0 0,0.267949192431123 1 -2,0.585786437626905 1.4142135623731 2),(0.585786437626905 1.4142135623731 2,2 0 0,0 0 0))
+asewkt02|COMPOUNDCURVEM(CIRCULARSTRINGM(0 0 0,0.267949192431123 1 -2,0.585786437626905 1.4142135623731 2),(0.585786437626905 1.4142135623731 2,2 0 0,0 0 0))
 asewkt03|COMPOUNDCURVE(CIRCULARSTRING(0 0 0,0.267949192431123 1 3,0.585786437626905 1.4142135623731 1),(0.585786437626905 1.4142135623731 1,2 0 0,0 0 0))
 asewkt04|COMPOUNDCURVE(CIRCULARSTRING(0 0 0 0,0.267949192431123 1 3 -2,0.585786437626905 1.4142135623731 1 2),(0.585786437626905 1.4142135623731 1 2,2 0 0 0,0 0 0 0))
 ST_CurveToLine-201|LINESTRING(0 0,0.58578644 1.41421356,2 0,0 0)
@@ -39,7 +39,7 @@ astext02|COMPOUNDCURVE(CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905
 astext03|COMPOUNDCURVE(CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731),(0.585786437626905 1.4142135623731,2 0,0 0))
 astext04|COMPOUNDCURVE(CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731),(0.585786437626905 1.4142135623731,2 0,0 0))
 asewkt01|COMPOUNDCURVE(CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731),(0.585786437626905 1.4142135623731,2 0,0 0))
-asewkt02|COMPOUNDCURVEM(CIRCULARSTRING(0 0 0,0.267949192431123 1 -2,0.585786437626905 1.4142135623731 2),(0.585786437626905 1.4142135623731 2,2 0 0,0 0 0))
+asewkt02|COMPOUNDCURVEM(CIRCULARSTRINGM(0 0 0,0.267949192431123 1 -2,0.585786437626905 1.4142135623731 2),(0.585786437626905 1.4142135623731 2,2 0 0,0 0 0))
 asewkt03|COMPOUNDCURVE(CIRCULARSTRING(0 0 0,0.267949192431123 1 3,0.585786437626905 1.4142135623731 1),(0.585786437626905 1.4142135623731 1,2 0 0,0 0 0))
 asewkt04|COMPOUNDCURVE(CIRCULARSTRING(0 0 0 0,0.267949192431123 1 3 -2,0.585786437626905 1.4142135623731 1 2),(0.585786437626905 1.4142135623731 1 2,2 0 0 0,0 0 0 0))
 ERROR:  Exception in LWGEOM2GEOS: curved geometry not supported.
index 2f914cdad35269a21037d2a63ce4942c54a6d187..d15f8f3ca3670d54bb34ff70136e299d268a5557 100644 (file)
@@ -24,7 +24,7 @@ astext02|CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0
 astext03|CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0))
 astext04|CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0))
 asewkt01|CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0))
-asewkt02|CURVEPOLYGONM(CIRCULARSTRING(-2 0 0,-1 -1 2,0 0 4,1 -1 6,2 0 8,0 2 4,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2))
+asewkt02|CURVEPOLYGONM(CIRCULARSTRINGM(-2 0 0,-1 -1 2,0 0 4,1 -1 6,2 0 8,0 2 4,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2))
 asewkt03|CURVEPOLYGON(CIRCULARSTRING(-2 0 0,-1 -1 1,0 0 2,1 -1 3,2 0 4,0 2 2,-2 0 0),(-1 0 1,0 0.5 2,1 0 3,0 1 3,-1 0 1))
 asewkt04|CURVEPOLYGON(CIRCULARSTRING(-2 0 0 0,-1 -1 1 2,0 0 2 4,1 -1 3 6,2 0 4 8,0 2 2 4,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2))
 ERROR:  Exception in LWGEOM2GEOS: curved geometry not supported.
index 3ccccf2b9eef07170aa321a1a28c4128b16a8845..c2d9fca9accb81c599133fd275932bf95e8463ca 100644 (file)
@@ -23,7 +23,7 @@ astext02|MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,0.267949192431123 1,0.5
 astext03|MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731))
 astext04|MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731))
 asewkt01|MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731))
-asewkt02|MULTICURVEM((5 5 3,3 5 2,3 3 1,0 3 1),CIRCULARSTRING(0 0 0,0.267949192431123 1 -2,0.585786437626905 1.4142135623731 2))
+asewkt02|MULTICURVEM((5 5 3,3 5 2,3 3 1,0 3 1),CIRCULARSTRINGM(0 0 0,0.267949192431123 1 -2,0.585786437626905 1.4142135623731 2))
 asewkt03|MULTICURVE((5 5 1,3 5 2,3 3 3,0 3 1),CIRCULARSTRING(0 0 0,0.267949192431123 1 3,0.585786437626905 1.4142135623731 1))
 asewkt04|MULTICURVE((5 5 1 3,3 5 2 2,3 3 3 1,0 3 1 1),CIRCULARSTRING(0 0 0 0,0.267949192431123 1 3 -2,0.585786437626905 1.4142135623731 1 2))
 ERROR:  Exception in LWGEOM2GEOS: curved geometry not supported.
index 934b3d50266d432d0e7dc065081776b1889a6a51..29c4d2493ab541992de522601443c96a3e38c4fc 100644 (file)
@@ -23,7 +23,7 @@ astext02|MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2
 astext03|MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))
 astext04|MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))
 asewkt01|MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))
-asewkt02|MULTISURFACEM(CURVEPOLYGON(CIRCULARSTRING(-2 0 0,-1 -1 2,0 0 4,1 -1 6,2 0 8,0 2 4,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2)),((7 8 8,10 10 5,6 14 1,4 11 6,7 8 8)))
+asewkt02|MULTISURFACEM(CURVEPOLYGONM(CIRCULARSTRINGM(-2 0 0,-1 -1 2,0 0 4,1 -1 6,2 0 8,0 2 4,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2)),((7 8 8,10 10 5,6 14 1,4 11 6,7 8 8)))
 asewkt03|MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0 0,-1 -1 1,0 0 2,1 -1 3,2 0 4,0 2 2,-2 0 0),(-1 0 1,0 0.5 2,1 0 3,0 1 3,-1 0 1)),((7 8 7,10 10 5,6 14 3,4 11 4,7 8 7)))
 asewkt04|MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0 0 0,-1 -1 1 2,0 0 2 4,1 -1 3 6,2 0 4 8,0 2 2 4,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2)),((7 8 7 8,10 10 5 5,6 14 3 1,4 11 4 6,7 8 7 8)))
 box2d01|BOX(-2 -1,10 14)
index 32befe13625951e99be3aac938fa44ffda2530cb..2189e5f3218d639147e11bdb703e1441fee4f58e 100644 (file)
@@ -57,7 +57,7 @@ INSERT INTO serialize_test (
         id, description, ewkt, serialized\r
       ) VALUES (\r
         9, 'Compound Curve 3dm, SRID=4326',\r
-        'SRID=4326;COMPOUNDCURVEM(CIRCULARSTRING(0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2))',\r
+        'SRID=4326;COMPOUNDCURVEM(CIRCULARSTRINGM(0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2))',\r
         '0109000060E610000002000000010800004003000000000000000000000000000000000000000000000000000040000000000000F03F000000000000F03F0000000000000040000000000000F03F00000000000000000000000000000040010200004002000000000000000000F03F000000000000000000000000000000400000000000000000000000000000F03F0000000000000040');\r
 INSERT INTO serialize_test (\r
         id, description, ewkt, serialized\r
@@ -87,7 +87,7 @@ INSERT INTO serialize_test(
         id, description, ewkt, serialized\r
       ) VALUES (\r
         14, 'Curve Polygon 3dm, SRID=4326',\r
-        'SRID=4326;CURVEPOLYGONM(CIRCULARSTRING(-2 0 0,-1 -1 2,0 0 4,1 -1 6,2 0 8,0 2 4,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2))',\r
+        'SRID=4326;CURVEPOLYGONM(CIRCULARSTRINGM(-2 0 0,-1 -1 2,0 0 4,1 -1 6,2 0 8,0 2 4,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2))',\r
         '010A000060E61000000200000001080000400700000000000000000000C000000000000000000000000000000000000000000000F0BF000000000000F0BF0000000000000040000000000000000000000000000000000000000000001040000000000000F03F000000000000F0BF000000000000184000000000000000400000000000000000000000000000204000000000000000000000000000000040000000000000104000000000000000C000000000000000000000000000000000010200004005000000000000000000F0BF000000000000000000000000000000400000000000000000000000000000E03F0000000000001040000000000000F03F000000000000000000000000000018400000000000000000000000000000F03F0000000000001040000000000000F0BF00000000000000000000000000000040');\r
 INSERT INTO serialize_test(\r
         id, description, ewkt, serialized\r
@@ -117,7 +117,7 @@ INSERT INTO serialize_test(
         id, description, ewkt, serialized\r
       ) VALUES (\r
         19, 'Multi Curve 3dm, SRID=4326',\r
-        'SRID=4326;MULTICURVEM((5 5 3,3 5 2,3 3 1,0 3 1),CIRCULARSTRING(0 0 0,2 1 -2,2 2 2))',\r
+        'SRID=4326;MULTICURVEM((5 5 3,3 5 2,3 3 1,0 3 1),CIRCULARSTRINGM(0 0 0,2 1 -2,2 2 2))',\r
         '010B000060E61000000200000001020000400400000000000000000014400000000000001440000000000000084000000000000008400000000000001440000000000000004000000000000008400000000000000840000000000000F03F00000000000000000000000000000840000000000000F03F0108000040030000000000000000000000000000000000000000000000000000000000000000000040000000000000F03F00000000000000C0000000000000004000000000000000400000000000000040');\r
 INSERT INTO serialize_test(\r
         id, description, ewkt, serialized\r
@@ -147,7 +147,7 @@ INSERT INTO serialize_test(
         id, description, ewkt, serialized\r
       ) VALUES (\r
         24, 'Multi Surface 3dm, SRID=4326',\r
-        'SRID=4326;MULTISURFACEM(CURVEPOLYGON(CIRCULARSTRING(-2 0 0,-1 -1 2,0 0 4,1 -1 6,2 0 8,0 2 4,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2)),((7 8 8,10 10 5,6 14 1,4 11 6,7 8 8)))',\r
+        'SRID=4326;MULTISURFACEM(CURVEPOLYGONM(CIRCULARSTRINGM(-2 0 0,-1 -1 2,0 0 4,1 -1 6,2 0 8,0 2 4,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2)),((7 8 8,10 10 5,6 14 1,4 11 6,7 8 8)))',\r
         '010C000060E610000002000000010A0000400200000001080000400700000000000000000000C000000000000000000000000000000000000000000000F0BF000000000000F0BF0000000000000040000000000000000000000000000000000000000000001040000000000000F03F000000000000F0BF000000000000184000000000000000400000000000000000000000000000204000000000000000000000000000000040000000000000104000000000000000C000000000000000000000000000000000010200004005000000000000000000F0BF000000000000000000000000000000400000000000000000000000000000E03F0000000000001040000000000000F03F000000000000000000000000000018400000000000000000000000000000F03F0000000000001040000000000000F0BF00000000000000000000000000000040010300004001000000050000000000000000001C400000000000002040000000000000204000000000000024400000000000002440000000000000144000000000000018400000000000002C40000000000000F03F0000000000001040000000000000264000000000000018400000000000001C4000000000000020400000000000002040');\r
 INSERT INTO serialize_test(\r
         id, description, ewkt, serialized\r