Skip to content

Commit 93645a3

Browse files
committed
Enable gml3 curve output for compoundcurve and some fixes for gml3 output in general
1 parent dedeb9c commit 93645a3

File tree

4 files changed

+26
-40
lines changed

4 files changed

+26
-40
lines changed

src/core/geometry/qgscompoundcurve.cpp

Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -248,33 +248,16 @@ QDomElement QgsCompoundCurve::asGML2( QDomDocument& doc, int precision, const QS
248248

249249
QDomElement QgsCompoundCurve::asGML3( QDomDocument& doc, int precision, const QString& ns ) const
250250
{
251-
QDomElement elemCurve = doc.createElementNS( ns, QStringLiteral( "Curve" ) );
252-
253-
QDomElement elemSegments = doc.createElementNS( ns, QStringLiteral( "segments" ) );
254-
251+
QDomElement compoundCurveElem = doc.createElementNS( ns, QStringLiteral( "CompositeCurve" ) );
255252
Q_FOREACH ( const QgsCurve* curve, mCurves )
256253
{
257-
if ( dynamic_cast<const QgsLineString*>( curve ) )
258-
{
259-
QgsPointSequence pts;
260-
curve->points( pts );
261-
262-
QDomElement elemLineStringSegment = doc.createElementNS( ns, QStringLiteral( "LineStringSegment" ) );
263-
elemLineStringSegment.appendChild( QgsGeometryUtils::pointsToGML3( pts, doc, precision, ns, is3D() ) );
264-
elemSegments.appendChild( elemLineStringSegment );
265-
}
266-
else if ( dynamic_cast<const QgsCircularString*>( curve ) )
267-
{
268-
QgsPointSequence pts;
269-
curve->points( pts );
270-
271-
QDomElement elemArcString = doc.createElementNS( ns, QStringLiteral( "ArcString" ) );
272-
elemArcString.appendChild( QgsGeometryUtils::pointsToGML3( pts, doc, precision, ns, is3D() ) );
273-
elemSegments.appendChild( elemArcString );
274-
}
254+
QDomElement curveMemberElem = doc.createElementNS( ns, QStringLiteral( "curveMember" ) );
255+
QDomElement curveElem = curve->asGML3( doc, precision, ns );
256+
curveMemberElem.appendChild( curveElem );
257+
compoundCurveElem.appendChild( curveMemberElem );
275258
}
276-
elemCurve.appendChild( elemSegments );
277-
return elemCurve;
259+
260+
return compoundCurveElem;
278261
}
279262

280263
QString QgsCompoundCurve::asJSON( int precision ) const

src/core/geometry/qgscurvepolygon.cpp

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -308,18 +308,26 @@ QDomElement QgsCurvePolygon::asGML3( QDomDocument& doc, int precision, const QSt
308308
{
309309
QDomElement elemCurvePolygon = doc.createElementNS( ns, QStringLiteral( "Polygon" ) );
310310
QDomElement elemExterior = doc.createElementNS( ns, QStringLiteral( "exterior" ) );
311-
QDomElement outerRing = exteriorRing()->asGML2( doc, precision, ns );
312-
outerRing.toElement().setTagName( QStringLiteral( "LinearRing" ) );
313-
elemExterior.appendChild( outerRing );
311+
QDomElement curveElem = exteriorRing()->asGML3( doc, precision, ns );
312+
if ( curveElem.tagName() == "LineString" )
313+
{
314+
curveElem.setTagName( QStringLiteral( "LinearRing" ) );
315+
}
316+
elemExterior.appendChild( curveElem );
317+
elemCurvePolygon.appendChild( elemExterior );
318+
314319
elemCurvePolygon.appendChild( elemExterior );
315-
QDomElement elemInterior = doc.createElementNS( ns, QStringLiteral( "interior" ) );
316320
for ( int i = 0, n = numInteriorRings(); i < n; ++i )
317321
{
318-
QDomElement innerRing = interiorRing( i )->asGML2( doc, precision, ns );
319-
innerRing.toElement().setTagName( QStringLiteral( "LinearRing" ) );
322+
QDomElement elemInterior = doc.createElementNS( ns, QStringLiteral( "interior" ) );
323+
QDomElement innerRing = interiorRing( i )->asGML3( doc, precision, ns );
324+
if ( innerRing.tagName() == "LineString" )
325+
{
326+
innerRing.setTagName( QStringLiteral( "LinearRing" ) );
327+
}
320328
elemInterior.appendChild( innerRing );
329+
elemCurvePolygon.appendChild( elemInterior );
321330
}
322-
elemCurvePolygon.appendChild( elemInterior );
323331
return elemCurvePolygon;
324332
}
325333

src/core/geometry/qgslinestring.cpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -207,14 +207,9 @@ QDomElement QgsLineString::asGML3( QDomDocument& doc, int precision, const QStri
207207
QgsPointSequence pts;
208208
points( pts );
209209

210-
QDomElement elemCurve = doc.createElementNS( ns, QStringLiteral( "Curve" ) );
211-
QDomElement elemSegments = doc.createElementNS( ns, QStringLiteral( "segments" ) );
212-
QDomElement elemArcString = doc.createElementNS( ns, QStringLiteral( "LineStringSegment" ) );
213-
elemArcString.appendChild( QgsGeometryUtils::pointsToGML3( pts, doc, precision, ns, is3D() ) );
214-
elemSegments.appendChild( elemArcString );
215-
elemCurve.appendChild( elemSegments );
216-
217-
return elemCurve;
210+
QDomElement elemLineString = doc.createElementNS( ns, QStringLiteral( "LineString" ) );
211+
elemLineString.appendChild( QgsGeometryUtils::pointsToGML3( pts, doc, precision, ns, is3D() ) );
212+
return elemLineString;
218213
}
219214

220215
QString QgsLineString::asJSON( int precision ) const

src/core/geometry/qgsmultilinestring.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ QDomElement QgsMultiLineString::asGML2( QDomDocument& doc, int precision, const
6060

6161
QDomElement QgsMultiLineString::asGML3( QDomDocument& doc, int precision, const QString& ns ) const
6262
{
63-
QDomElement elemMultiCurve = doc.createElementNS( ns, QStringLiteral( "MultiLineString" ) );
63+
QDomElement elemMultiCurve = doc.createElementNS( ns, QStringLiteral( "MultiCurve" ) );
6464
Q_FOREACH ( const QgsAbstractGeometry *geom, mGeometries )
6565
{
6666
if ( dynamic_cast<const QgsLineString*>( geom ) )

0 commit comments

Comments
 (0)