@@ -291,14 +291,18 @@ QDomElement QgsCurvePolygonV2::asGML2( QDomDocument& doc, int precision, const Q
291
291
QDomElement elemPolygon = doc.createElementNS ( ns, " Polygon" );
292
292
QDomElement elemOuterBoundaryIs = doc.createElementNS ( ns, " outerBoundaryIs" );
293
293
QgsLineStringV2* exteriorLineString = exteriorRing ()->curveToLine ();
294
- elemOuterBoundaryIs.appendChild ( exteriorLineString->asGML2 ( doc, precision, ns ) );
294
+ QDomElement outerRing = exteriorLineString->asGML2 ( doc, precision, ns );
295
+ outerRing.toElement ().setTagName ( " LinearRing" );
296
+ elemOuterBoundaryIs.appendChild ( outerRing );
295
297
delete exteriorLineString;
296
298
elemPolygon.appendChild ( elemOuterBoundaryIs );
297
299
QDomElement elemInnerBoundaryIs = doc.createElementNS ( ns, " innerBoundaryIs" );
298
300
for ( int i = 0 , n = numInteriorRings (); i < n; ++i )
299
301
{
300
302
QgsLineStringV2* interiorLineString = interiorRing ( i )->curveToLine ();
301
- elemInnerBoundaryIs.appendChild ( interiorLineString->asGML2 ( doc, precision, ns ) );
303
+ QDomElement innerRing = interiorLineString->asGML2 ( doc, precision, ns );
304
+ innerRing.toElement ().setTagName ( " LinearRing" );
305
+ elemInnerBoundaryIs.appendChild ( innerRing );
302
306
delete interiorLineString;
303
307
}
304
308
elemPolygon.appendChild ( elemInnerBoundaryIs );
@@ -309,12 +313,16 @@ QDomElement QgsCurvePolygonV2::asGML3( QDomDocument& doc, int precision, const Q
309
313
{
310
314
QDomElement elemCurvePolygon = doc.createElementNS ( ns, " Polygon" );
311
315
QDomElement elemExterior = doc.createElementNS ( ns, " exterior" );
312
- elemExterior.appendChild ( exteriorRing ()->asGML2 ( doc, precision, ns ) );
316
+ QDomElement outerRing = exteriorRing ()->asGML2 ( doc, precision, ns );
317
+ outerRing.toElement ().setTagName ( " LinearRing" );
318
+ elemExterior.appendChild ( outerRing );
313
319
elemCurvePolygon.appendChild ( elemExterior );
314
320
QDomElement elemInterior = doc.createElementNS ( ns, " interior" );
315
321
for ( int i = 0 , n = numInteriorRings (); i < n; ++i )
316
322
{
317
- elemInterior.appendChild ( interiorRing ( i )->asGML2 ( doc, precision, ns ) );
323
+ QDomElement innerRing = interiorRing ( i )->asGML2 ( doc, precision, ns );
324
+ innerRing.toElement ().setTagName ( " LinearRing" );
325
+ elemInterior.appendChild ( innerRing );
318
326
}
319
327
elemCurvePolygon.appendChild ( elemInterior );
320
328
return elemCurvePolygon;
@@ -468,6 +476,20 @@ void QgsCurvePolygonV2::setExteriorRing( QgsCurveV2* ring )
468
476
{
469
477
setZMTypeFromSubGeometry ( ring, QgsWKBTypes::CurvePolygon );
470
478
}
479
+
480
+ // match dimensionality for rings
481
+ Q_FOREACH ( QgsCurveV2* ring, mInteriorRings )
482
+ {
483
+ if ( is3D () )
484
+ ring->addZValue ();
485
+ else
486
+ ring->dropZValue ();
487
+
488
+ if ( isMeasure () )
489
+ ring->addMValue ();
490
+ else
491
+ ring->dropMValue ();
492
+ }
471
493
}
472
494
473
495
void QgsCurvePolygonV2::setInteriorRings ( const QList<QgsCurveV2*>& rings )
0 commit comments