]> granicus.if.org Git - postgis/commitdiff
#2938, fix to include <ring></ring> around curvepolygon rings (eroualt)
authorPaul Ramsey <pramsey@cleverelephant.ca>
Fri, 31 Oct 2014 16:20:30 +0000 (16:20 +0000)
committerPaul Ramsey <pramsey@cleverelephant.ca>
Fri, 31 Oct 2014 16:20:30 +0000 (16:20 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@13116 b70326c6-7e19-0410-871a-916f4a2858ee

liblwgeom/cunit/cu_out_gml.c
liblwgeom/lwout_gml.c

index 56665679bd1d7f181dc325a1bc3a654795efa343..c37c46ba8c843a785435d9482f26af1b52bfd4ea 100644 (file)
@@ -559,10 +559,11 @@ static void out_gml_test_geoms(void)
        /* GML3 - CurvePolygon */
     do_gml3_test(
         "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))",
-                "<gml:Polygon><gml:exterior><gml:curveMember><gml:Curve><gml:segments><gml:ArcString><gml:posList srsDimension=\"2\">-2 0 -1 -1 0 0 1 -1 2 0 0 2 -2 0</gml:posList></gml:ArcString></gml:segments></gml:Curve></gml:curveMember></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension=\"2\">-1 0 0 0.5 1 0 0 1 -1 0</gml:posList></gml:LinearRing></gml:interior></gml:Polygon>",
+                "<gml:Polygon><gml:exterior><gml:Ring><gml:curveMember><gml:Curve><gml:segments><gml:ArcString><gml:posList srsDimension=\"2\">-2 0 -1 -1 0 0 1 -1 2 0 0 2 -2 0</gml:posList></gml:ArcString></gml:segments></gml:Curve></gml:curveMember></gml:Ring></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension=\"2\">-1 0 0 0.5 1 0 0 1 -1 0</gml:posList></gml:LinearRing></gml:interior></gml:Polygon>",
                 NULL, 1, 0 );
        do_gml3_test(
-               "CURVEPOLYGON(COMPOUNDCURVE((763650.600000001 189057.100000001,7636.35 189045.199999999, 763650.548999999 189057.844000001,763650.600000001 189057.100000001)))","<gml:Polygon><gml:exterior><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension=\"2\">763650.6 189057.1 7636.35 189045.2 763650.549 189057.844 763650.6 189057.1</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:exterior></gml:Polygon>",
+               "CURVEPOLYGON(COMPOUNDCURVE((763650.600000001 189057.100000001,7636.35 189045.199999999, 763650.548999999 189057.844000001,763650.600000001 189057.100000001)))",
+                                "<gml:Polygon><gml:exterior><gml:Ring><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension=\"2\">763650.6 189057.1 7636.35 189045.2 763650.549 189057.844 763650.6 189057.1</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:Ring></gml:exterior></gml:Polygon>",
                                NULL, 7, 0 );
 
        /* GML2 - MultiCurve */
@@ -584,7 +585,7 @@ static void out_gml_test_geoms(void)
        /* GML3 - MultiSurface */
     do_gml3_test(
                 "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)))",
-                "<gml:MultiSurface><gml:Polygon><gml:exterior><gml:curveMember><gml:Curve><gml:segments><gml:ArcString><gml:posList srsDimension=\"2\">-2 0 -1 -1 0 0 1 -1 2 0 0 2 -2 0</gml:posList></gml:ArcString></gml:segments></gml:Curve></gml:curveMember></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension=\"2\">-1 0 0 0.5 1 0 0 1 -1 0</gml:posList></gml:LinearRing></gml:interior></gml:Polygon><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension=\"2\">7 8 10 10 6 14 4 11 7 8</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:MultiSurface>",
+                "<gml:MultiSurface><gml:Polygon><gml:exterior><gml:Ring><gml:curveMember><gml:Curve><gml:segments><gml:ArcString><gml:posList srsDimension=\"2\">-2 0 -1 -1 0 0 1 -1 2 0 0 2 -2 0</gml:posList></gml:ArcString></gml:segments></gml:Curve></gml:curveMember></gml:Ring></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension=\"2\">-1 0 0 0.5 1 0 0 1 -1 0</gml:posList></gml:LinearRing></gml:interior></gml:Polygon><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension=\"2\">7 8 10 10 6 14 4 11 7 8</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:MultiSurface>",
                 NULL, 1, 0 );
 
        /* GML2 - PolyhedralSurface */
index cfd35b88cb7a5bdc5cfc8b161febcf5cfd059197..7304e83ad56c569d70d5954b60b3dccada3f88ec 100644 (file)
@@ -1229,11 +1229,13 @@ static size_t asgml3_curvepoly_size(const LWCURVEPOLY* poly, const char *srs, in
                }
                else if( subgeom->type == CIRCSTRINGTYPE )
                {
+                       size += sizeof("<Ring></Ring>") + 2 * prefixlen;
                        size += sizeof("<CurveMember></CurveMember>") + 2 * prefixlen;
                        size += asgml3_circstring_size((LWCIRCSTRING*)subgeom, srs, precision, opts, prefix, id);
                }
                else if( subgeom->type == COMPOUNDTYPE )
                {
+                       size += sizeof("<Ring></Ring>") + 2 * prefixlen;
                        size += sizeof("<curveMember></curveMember>") + 2 * prefixlen;
                        size += asgml3_compound_size( (LWCOMPOUND*)subgeom, srs, precision, opts, prefix, id );
                }
@@ -1291,15 +1293,19 @@ static size_t asgml3_curvepoly_buf(const LWCURVEPOLY* poly, const char *srs, cha
                }
                else if( subgeom->type == CIRCSTRINGTYPE )
                {
+                       ptr += sprintf( ptr, "<%sRing>", prefix );
                        ptr += sprintf( ptr, "<%scurveMember>", prefix );
                        ptr += asgml3_circstring_buf( (LWCIRCSTRING*)subgeom, srs, ptr, precision, opts, prefix, id );
                        ptr += sprintf( ptr, "</%scurveMember>", prefix );
+                       ptr += sprintf( ptr, "</%sRing>", prefix );
                }
                else if( subgeom->type == COMPOUNDTYPE )
                {
+                       ptr += sprintf( ptr, "<%sRing>", prefix );
                        ptr += sprintf( ptr, "<%scurveMember>", prefix );
                        ptr += asgml3_compound_buf( (LWCOMPOUND*)subgeom, srs, ptr, precision, opts, prefix, id );
                        ptr += sprintf( ptr, "</%scurveMember>", prefix );
+                       ptr += sprintf( ptr, "</%sRing>", prefix );
                }
 
                if( i == 0 )