Merge pull request #6644 from elpaso/gml-inverted-axis

Add axisOrder to QgsAbstractGeometry GML generators
This commit is contained in:
Alessandro Pasotti 2018-03-24 12:50:13 +01:00 committed by GitHub
commit 5eb9ab4813
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
42 changed files with 200 additions and 106 deletions

View File

@ -65,6 +65,14 @@ class QgsAbstractGeometry
MaximumDifference
};
enum AxisOrder
{
XY,
YX
};
QgsAbstractGeometry();
%Docstring
Constructor for QgsAbstractGeometry.
@ -195,13 +203,14 @@ Returns a WKT representation of the geometry.
.. seealso:: :py:func:`asJson`
%End
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const = 0;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const = 0;
%Docstring
Returns a GML2 representation of the geometry.
:param doc: DOM document
:param precision: number of decimal places for coordinates
:param ns: XML namespace
:param axisOrder: Axis order for generated GML
.. seealso:: :py:func:`asWkb`
@ -212,13 +221,14 @@ Returns a GML2 representation of the geometry.
.. seealso:: :py:func:`asJson`
%End
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const = 0;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const = 0;
%Docstring
Returns a GML3 representation of the geometry.
:param doc: DOM document
:param precision: number of decimal places for coordinates
:param ns: XML namespace
:param axisOrder: Axis order for generated GML
.. seealso:: :py:func:`asWkb`

View File

@ -46,9 +46,9 @@ class QgsCircularString: QgsCurve
virtual QString asWkt( int precision = 17 ) const;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QString asJson( int precision = 17 ) const;

View File

@ -46,9 +46,9 @@ class QgsCompoundCurve: QgsCurve
virtual QString asWkt( int precision = 17 ) const;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QString asJson( int precision = 17 ) const;

View File

@ -50,9 +50,9 @@ class QgsCurvePolygon: QgsSurface
virtual QString asWkt( int precision = 17 ) const;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QString asJson( int precision = 17 ) const;

View File

@ -105,9 +105,9 @@ Removes a geometry from the collection.
virtual QString asWkt( int precision = 17 ) const;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QString asJson( int precision = 17 ) const;

View File

@ -209,9 +209,9 @@ segment in the line.
virtual QString asWkt( int precision = 17 ) const;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QString asJson( int precision = 17 ) const;

View File

@ -31,9 +31,9 @@ class QgsMultiCurve: QgsGeometryCollection
virtual bool fromWkt( const QString &wkt );
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QString asJson( int precision = 17 ) const;

View File

@ -30,9 +30,9 @@ class QgsMultiLineString: QgsMultiCurve
virtual bool fromWkt( const QString &wkt );
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QString asJson( int precision = 17 ) const;

View File

@ -32,9 +32,9 @@ class QgsMultiPoint: QgsGeometryCollection
virtual void clear();
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QString asJson( int precision = 17 ) const;

View File

@ -29,9 +29,9 @@ class QgsMultiPolygon: QgsMultiSurface
virtual bool fromWkt( const QString &wkt );
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QString asJson( int precision = 17 ) const;

View File

@ -31,9 +31,9 @@ class QgsMultiSurface: QgsGeometryCollection
virtual bool fromWkt( const QString &wkt );
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QString asJson( int precision = 17 ) const;

View File

@ -349,9 +349,9 @@ Example:
virtual QString asWkt( int precision = 17 ) const;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QString asJson( int precision = 17 ) const;

View File

@ -66,7 +66,7 @@ Construct a QgsTriangle from three QPointF.
virtual bool fromWkt( const QString &wkt );
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
virtual QgsPolygon *surfaceToPolygon() const /Factory/;

View File

@ -104,6 +104,22 @@ class CORE_EXPORT QgsAbstractGeometry
};
Q_ENUM( SegmentationToleranceType )
//! Axis order for GML generation
enum AxisOrder
{
/**
* X comes before Y (or lon before lat)
*/
XY = 0,
/**
* Y comes before X (or lat before lon)
*/
YX
};
Q_ENUM( QgsAbstractGeometry::AxisOrder )
/**
* Constructor for QgsAbstractGeometry.
*/
@ -221,24 +237,26 @@ class CORE_EXPORT QgsAbstractGeometry
* \param doc DOM document
* \param precision number of decimal places for coordinates
* \param ns XML namespace
* \param axisOrder Axis order for generated GML
* \see asWkb()
* \see asWkt()
* \see asGml3()
* \see asJson()
*/
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const = 0;
virtual QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const = 0;
/**
* Returns a GML3 representation of the geometry.
* \param doc DOM document
* \param precision number of decimal places for coordinates
* \param ns XML namespace
* \param axisOrder Axis order for generated GML
* \see asWkb()
* \see asWkt()
* \see asGml2()
* \see asJson()
*/
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const = 0;
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const = 0;
/**
* Returns a GeoJSON representation of the geometry.

View File

@ -301,15 +301,15 @@ QString QgsCircularString::asWkt( int precision ) const
return wkt;
}
QDomElement QgsCircularString::asGml2( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsCircularString::asGml2( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
// GML2 does not support curves
std::unique_ptr< QgsLineString > line( curveToLine() );
QDomElement gml = line->asGml2( doc, precision, ns );
QDomElement gml = line->asGml2( doc, precision, ns, axisOrder );
return gml;
}
QDomElement QgsCircularString::asGml3( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsCircularString::asGml3( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
QgsPointSequence pts;
points( pts );
@ -321,7 +321,7 @@ QDomElement QgsCircularString::asGml3( QDomDocument &doc, int precision, const Q
QDomElement elemSegments = doc.createElementNS( ns, QStringLiteral( "segments" ) );
QDomElement elemArcString = doc.createElementNS( ns, QStringLiteral( "ArcString" ) );
elemArcString.appendChild( QgsGeometryUtils::pointsToGML3( pts, doc, precision, ns, is3D() ) );
elemArcString.appendChild( QgsGeometryUtils::pointsToGML3( pts, doc, precision, ns, is3D(), axisOrder ) );
elemSegments.appendChild( elemArcString );
elemCurve.appendChild( elemSegments );
return elemCurve;

View File

@ -48,8 +48,8 @@ class CORE_EXPORT QgsCircularString: public QgsCurve
QByteArray asWkb() const override;
QString asWkt( int precision = 17 ) const override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QString asJson( int precision = 17 ) const override;
bool isEmpty() const override;

View File

@ -262,15 +262,15 @@ QString QgsCompoundCurve::asWkt( int precision ) const
return wkt;
}
QDomElement QgsCompoundCurve::asGml2( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsCompoundCurve::asGml2( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
// GML2 does not support curves
std::unique_ptr< QgsLineString > line( curveToLine() );
QDomElement gml = line->asGml2( doc, precision, ns );
QDomElement gml = line->asGml2( doc, precision, ns, axisOrder );
return gml;
}
QDomElement QgsCompoundCurve::asGml3( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsCompoundCurve::asGml3( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
QDomElement compoundCurveElem = doc.createElementNS( ns, QStringLiteral( "CompositeCurve" ) );
@ -280,7 +280,7 @@ QDomElement QgsCompoundCurve::asGml3( QDomDocument &doc, int precision, const QS
for ( const QgsCurve *curve : mCurves )
{
QDomElement curveMemberElem = doc.createElementNS( ns, QStringLiteral( "curveMember" ) );
QDomElement curveElem = curve->asGml3( doc, precision, ns );
QDomElement curveElem = curve->asGml3( doc, precision, ns, axisOrder );
curveMemberElem.appendChild( curveElem );
compoundCurveElem.appendChild( curveMemberElem );
}

View File

@ -48,8 +48,8 @@ class CORE_EXPORT QgsCompoundCurve: public QgsCurve
QByteArray asWkb() const override;
QString asWkt( int precision = 17 ) const override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QString asJson( int precision = 17 ) const override;
//curve interface

View File

@ -339,7 +339,7 @@ QString QgsCurvePolygon::asWkt( int precision ) const
return wkt;
}
QDomElement QgsCurvePolygon::asGml2( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsCurvePolygon::asGml2( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
// GML2 does not support curves
QDomElement elemPolygon = doc.createElementNS( ns, QStringLiteral( "Polygon" ) );
@ -349,7 +349,7 @@ QDomElement QgsCurvePolygon::asGml2( QDomDocument &doc, int precision, const QSt
QDomElement elemOuterBoundaryIs = doc.createElementNS( ns, QStringLiteral( "outerBoundaryIs" ) );
std::unique_ptr< QgsLineString > exteriorLineString( exteriorRing()->curveToLine() );
QDomElement outerRing = exteriorLineString->asGml2( doc, precision, ns );
QDomElement outerRing = exteriorLineString->asGml2( doc, precision, ns, axisOrder );
outerRing.toElement().setTagName( QStringLiteral( "LinearRing" ) );
elemOuterBoundaryIs.appendChild( outerRing );
elemPolygon.appendChild( elemOuterBoundaryIs );
@ -358,7 +358,7 @@ QDomElement QgsCurvePolygon::asGml2( QDomDocument &doc, int precision, const QSt
{
QDomElement elemInnerBoundaryIs = doc.createElementNS( ns, QStringLiteral( "innerBoundaryIs" ) );
interiorLineString.reset( interiorRing( i )->curveToLine() );
QDomElement innerRing = interiorLineString->asGml2( doc, precision, ns );
QDomElement innerRing = interiorLineString->asGml2( doc, precision, ns, axisOrder );
innerRing.toElement().setTagName( QStringLiteral( "LinearRing" ) );
elemInnerBoundaryIs.appendChild( innerRing );
elemPolygon.appendChild( elemInnerBoundaryIs );
@ -366,7 +366,7 @@ QDomElement QgsCurvePolygon::asGml2( QDomDocument &doc, int precision, const QSt
return elemPolygon;
}
QDomElement QgsCurvePolygon::asGml3( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsCurvePolygon::asGml3( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
QDomElement elemCurvePolygon = doc.createElementNS( ns, QStringLiteral( "Polygon" ) );
@ -374,7 +374,7 @@ QDomElement QgsCurvePolygon::asGml3( QDomDocument &doc, int precision, const QSt
return elemCurvePolygon;
QDomElement elemExterior = doc.createElementNS( ns, QStringLiteral( "exterior" ) );
QDomElement curveElem = exteriorRing()->asGml3( doc, precision, ns );
QDomElement curveElem = exteriorRing()->asGml3( doc, precision, ns, axisOrder );
if ( curveElem.tagName() == QLatin1String( "LineString" ) )
{
curveElem.setTagName( QStringLiteral( "LinearRing" ) );
@ -385,7 +385,7 @@ QDomElement QgsCurvePolygon::asGml3( QDomDocument &doc, int precision, const QSt
for ( int i = 0, n = numInteriorRings(); i < n; ++i )
{
QDomElement elemInterior = doc.createElementNS( ns, QStringLiteral( "interior" ) );
QDomElement innerRing = interiorRing( i )->asGml3( doc, precision, ns );
QDomElement innerRing = interiorRing( i )->asGml3( doc, precision, ns, axisOrder );
if ( innerRing.tagName() == QLatin1String( "LineString" ) )
{
innerRing.setTagName( QStringLiteral( "LinearRing" ) );

View File

@ -53,8 +53,8 @@ class CORE_EXPORT QgsCurvePolygon: public QgsSurface
QByteArray asWkb() const override;
QString asWkt( int precision = 17 ) const override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QString asJson( int precision = 17 ) const override;
//surface interface

View File

@ -390,25 +390,25 @@ QString QgsGeometryCollection::asWkt( int precision ) const
return wkt;
}
QDomElement QgsGeometryCollection::asGml2( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsGeometryCollection::asGml2( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
QDomElement elemMultiGeometry = doc.createElementNS( ns, QStringLiteral( "MultiGeometry" ) );
for ( const QgsAbstractGeometry *geom : mGeometries )
{
QDomElement elemGeometryMember = doc.createElementNS( ns, QStringLiteral( "geometryMember" ) );
elemGeometryMember.appendChild( geom->asGml2( doc, precision, ns ) );
elemGeometryMember.appendChild( geom->asGml2( doc, precision, ns, axisOrder ) );
elemMultiGeometry.appendChild( elemGeometryMember );
}
return elemMultiGeometry;
}
QDomElement QgsGeometryCollection::asGml3( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsGeometryCollection::asGml3( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
QDomElement elemMultiGeometry = doc.createElementNS( ns, QStringLiteral( "MultiGeometry" ) );
for ( const QgsAbstractGeometry *geom : mGeometries )
{
QDomElement elemGeometryMember = doc.createElementNS( ns, QStringLiteral( "geometryMember" ) );
elemGeometryMember.appendChild( geom->asGml3( doc, precision, ns ) );
elemGeometryMember.appendChild( geom->asGml3( doc, precision, ns, axisOrder ) );
elemMultiGeometry.appendChild( elemGeometryMember );
}
return elemMultiGeometry;

View File

@ -100,8 +100,8 @@ class CORE_EXPORT QgsGeometryCollection: public QgsAbstractGeometry
bool fromWkt( const QString &wkt ) override;
QByteArray asWkb() const override;
QString asWkt( int precision = 17 ) const override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QString asJson( int precision = 17 ) const override;
QgsRectangle boundingBox() const override;

View File

@ -900,7 +900,7 @@ QString QgsGeometryUtils::pointsToWKT( const QgsPointSequence &points, int preci
return wkt;
}
QDomElement QgsGeometryUtils::pointsToGML2( const QgsPointSequence &points, QDomDocument &doc, int precision, const QString &ns )
QDomElement QgsGeometryUtils::pointsToGML2( const QgsPointSequence &points, QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder )
{
QDomElement elemCoordinates = doc.createElementNS( ns, QStringLiteral( "coordinates" ) );
@ -915,7 +915,10 @@ QDomElement QgsGeometryUtils::pointsToGML2( const QgsPointSequence &points, QDom
QString strCoordinates;
for ( const QgsPoint &p : points )
strCoordinates += qgsDoubleToString( p.x(), precision ) + cs + qgsDoubleToString( p.y(), precision ) + ts;
if ( axisOrder == QgsAbstractGeometry::AxisOrder::XY )
strCoordinates += qgsDoubleToString( p.x(), precision ) + cs + qgsDoubleToString( p.y(), precision ) + ts;
else
strCoordinates += qgsDoubleToString( p.y(), precision ) + cs + qgsDoubleToString( p.x(), precision ) + ts;
if ( strCoordinates.endsWith( ts ) )
strCoordinates.chop( 1 ); // Remove trailing space
@ -924,7 +927,7 @@ QDomElement QgsGeometryUtils::pointsToGML2( const QgsPointSequence &points, QDom
return elemCoordinates;
}
QDomElement QgsGeometryUtils::pointsToGML3( const QgsPointSequence &points, QDomDocument &doc, int precision, const QString &ns, bool is3D )
QDomElement QgsGeometryUtils::pointsToGML3( const QgsPointSequence &points, QDomDocument &doc, int precision, const QString &ns, bool is3D, const QgsAbstractGeometry::AxisOrder &axisOrder )
{
QDomElement elemPosList = doc.createElementNS( ns, QStringLiteral( "posList" ) );
elemPosList.setAttribute( QStringLiteral( "srsDimension" ), is3D ? 3 : 2 );
@ -932,7 +935,10 @@ QDomElement QgsGeometryUtils::pointsToGML3( const QgsPointSequence &points, QDom
QString strCoordinates;
for ( const QgsPoint &p : points )
{
strCoordinates += qgsDoubleToString( p.x(), precision ) + ' ' + qgsDoubleToString( p.y(), precision ) + ' ';
if ( axisOrder == QgsAbstractGeometry::AxisOrder::XY )
strCoordinates += qgsDoubleToString( p.x(), precision ) + ' ' + qgsDoubleToString( p.y(), precision ) + ' ';
else
strCoordinates += qgsDoubleToString( p.y(), precision ) + ' ' + qgsDoubleToString( p.x(), precision ) + ' ';
if ( is3D )
strCoordinates += qgsDoubleToString( p.z(), precision ) + ' ';
}

View File

@ -21,6 +21,7 @@ email : marco.hugentobler at sourcepole dot com
#include "qgis_core.h"
#include "qgis.h"
#include "qgspoint.h"
#include "qgsabstractgeometry.h"
class QgsLineString;
@ -281,13 +282,13 @@ class CORE_EXPORT QgsGeometryUtils
* Returns a gml::coordinates DOM element.
* \note not available in Python bindings
*/
static QDomElement pointsToGML2( const QgsPointSequence &points, QDomDocument &doc, int precision, const QString &ns ) SIP_SKIP;
static QDomElement pointsToGML2( const QgsPointSequence &points, QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) SIP_SKIP;
/**
* Returns a gml::posList DOM element.
* \note not available in Python bindings
*/
static QDomElement pointsToGML3( const QgsPointSequence &points, QDomDocument &doc, int precision, const QString &ns, bool is3D ) SIP_SKIP;
static QDomElement pointsToGML3( const QgsPointSequence &points, QDomDocument &doc, int precision, const QString &ns, bool is3D, const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) SIP_SKIP;
/**
* Returns a geoJSON coordinates string.

View File

@ -335,7 +335,7 @@ QString QgsLineString::asWkt( int precision ) const
return wkt;
}
QDomElement QgsLineString::asGml2( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsLineString::asGml2( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
QgsPointSequence pts;
points( pts );
@ -345,12 +345,12 @@ QDomElement QgsLineString::asGml2( QDomDocument &doc, int precision, const QStri
if ( isEmpty() )
return elemLineString;
elemLineString.appendChild( QgsGeometryUtils::pointsToGML2( pts, doc, precision, ns ) );
elemLineString.appendChild( QgsGeometryUtils::pointsToGML2( pts, doc, precision, ns, axisOrder ) );
return elemLineString;
}
QDomElement QgsLineString::asGml3( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsLineString::asGml3( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
QgsPointSequence pts;
points( pts );
@ -360,7 +360,7 @@ QDomElement QgsLineString::asGml3( QDomDocument &doc, int precision, const QStri
if ( isEmpty() )
return elemLineString;
elemLineString.appendChild( QgsGeometryUtils::pointsToGML3( pts, doc, precision, ns, is3D() ) );
elemLineString.appendChild( QgsGeometryUtils::pointsToGML3( pts, doc, precision, ns, is3D(), axisOrder ) );
return elemLineString;
}

View File

@ -186,8 +186,8 @@ class CORE_EXPORT QgsLineString: public QgsCurve
QByteArray asWkb() const override;
QString asWkt( int precision = 17 ) const override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QString asJson( int precision = 17 ) const override;
//curve interface

View File

@ -63,7 +63,7 @@ bool QgsMultiCurve::fromWkt( const QString &wkt )
QStringLiteral( "LineString" ) );
}
QDomElement QgsMultiCurve::asGml2( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsMultiCurve::asGml2( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
// GML2 does not support curves
QDomElement elemMultiLineString = doc.createElementNS( ns, QStringLiteral( "MultiLineString" ) );
@ -78,7 +78,7 @@ QDomElement QgsMultiCurve::asGml2( QDomDocument &doc, int precision, const QStri
std::unique_ptr< QgsLineString > lineString( static_cast<const QgsCurve *>( geom )->curveToLine() );
QDomElement elemLineStringMember = doc.createElementNS( ns, QStringLiteral( "lineStringMember" ) );
elemLineStringMember.appendChild( lineString->asGml2( doc, precision, ns ) );
elemLineStringMember.appendChild( lineString->asGml2( doc, precision, ns, axisOrder ) );
elemMultiLineString.appendChild( elemLineStringMember );
}
}
@ -86,7 +86,7 @@ QDomElement QgsMultiCurve::asGml2( QDomDocument &doc, int precision, const QStri
return elemMultiLineString;
}
QDomElement QgsMultiCurve::asGml3( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsMultiCurve::asGml3( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
QDomElement elemMultiCurve = doc.createElementNS( ns, QStringLiteral( "MultiCurve" ) );
@ -100,7 +100,7 @@ QDomElement QgsMultiCurve::asGml3( QDomDocument &doc, int precision, const QStri
const QgsCurve *curve = static_cast<const QgsCurve *>( geom );
QDomElement elemCurveMember = doc.createElementNS( ns, QStringLiteral( "curveMember" ) );
elemCurveMember.appendChild( curve->asGml3( doc, precision, ns ) );
elemCurveMember.appendChild( curve->asGml3( doc, precision, ns, axisOrder ) );
elemMultiCurve.appendChild( elemCurveMember );
}
}

View File

@ -35,8 +35,8 @@ class CORE_EXPORT QgsMultiCurve: public QgsGeometryCollection
void clear() override;
QgsMultiCurve *toCurveType() const override SIP_FACTORY;
bool fromWkt( const QString &wkt ) override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QString asJson( int precision = 17 ) const override;
bool addGeometry( QgsAbstractGeometry *g SIP_TRANSFER ) override;
bool insertGeometry( QgsAbstractGeometry *g SIP_TRANSFER, int index ) override;

View File

@ -55,7 +55,7 @@ bool QgsMultiLineString::fromWkt( const QString &wkt )
return fromCollectionWkt( wkt, QVector<QgsAbstractGeometry *>() << new QgsLineString, QStringLiteral( "LineString" ) );
}
QDomElement QgsMultiLineString::asGml2( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsMultiLineString::asGml2( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
QDomElement elemMultiLineString = doc.createElementNS( ns, QStringLiteral( "MultiLineString" ) );
@ -67,7 +67,7 @@ QDomElement QgsMultiLineString::asGml2( QDomDocument &doc, int precision, const
if ( const QgsLineString *lineString = qgsgeometry_cast<const QgsLineString *>( geom ) )
{
QDomElement elemLineStringMember = doc.createElementNS( ns, QStringLiteral( "lineStringMember" ) );
elemLineStringMember.appendChild( lineString->asGml2( doc, precision, ns ) );
elemLineStringMember.appendChild( lineString->asGml2( doc, precision, ns, axisOrder ) );
elemMultiLineString.appendChild( elemLineStringMember );
}
}
@ -75,7 +75,7 @@ QDomElement QgsMultiLineString::asGml2( QDomDocument &doc, int precision, const
return elemMultiLineString;
}
QDomElement QgsMultiLineString::asGml3( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsMultiLineString::asGml3( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
QDomElement elemMultiCurve = doc.createElementNS( ns, QStringLiteral( "MultiCurve" ) );
@ -87,7 +87,7 @@ QDomElement QgsMultiLineString::asGml3( QDomDocument &doc, int precision, const
if ( const QgsLineString *lineString = qgsgeometry_cast<const QgsLineString *>( geom ) )
{
QDomElement elemCurveMember = doc.createElementNS( ns, QStringLiteral( "curveMember" ) );
elemCurveMember.appendChild( lineString->asGml3( doc, precision, ns ) );
elemCurveMember.appendChild( lineString->asGml3( doc, precision, ns, axisOrder ) );
elemMultiCurve.appendChild( elemCurveMember );
}
}

View File

@ -35,8 +35,8 @@ class CORE_EXPORT QgsMultiLineString: public QgsMultiCurve
QgsMultiLineString *clone() const override SIP_FACTORY;
void clear() override;
bool fromWkt( const QString &wkt ) override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QString asJson( int precision = 17 ) const override;
bool addGeometry( QgsAbstractGeometry *g SIP_TRANSFER ) override;
bool insertGeometry( QgsAbstractGeometry *g SIP_TRANSFER, int index ) override;

View File

@ -67,7 +67,7 @@ void QgsMultiPoint::clear()
mWkbType = QgsWkbTypes::MultiPoint;
}
QDomElement QgsMultiPoint::asGml2( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsMultiPoint::asGml2( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
QDomElement elemMultiPoint = doc.createElementNS( ns, QStringLiteral( "MultiPoint" ) );
@ -79,7 +79,7 @@ QDomElement QgsMultiPoint::asGml2( QDomDocument &doc, int precision, const QStri
if ( qgsgeometry_cast<const QgsPoint *>( geom ) )
{
QDomElement elemPointMember = doc.createElementNS( ns, QStringLiteral( "pointMember" ) );
elemPointMember.appendChild( geom->asGml2( doc, precision, ns ) );
elemPointMember.appendChild( geom->asGml2( doc, precision, ns, axisOrder ) );
elemMultiPoint.appendChild( elemPointMember );
}
}
@ -87,7 +87,7 @@ QDomElement QgsMultiPoint::asGml2( QDomDocument &doc, int precision, const QStri
return elemMultiPoint;
}
QDomElement QgsMultiPoint::asGml3( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsMultiPoint::asGml3( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
QDomElement elemMultiPoint = doc.createElementNS( ns, QStringLiteral( "MultiPoint" ) );
@ -99,7 +99,7 @@ QDomElement QgsMultiPoint::asGml3( QDomDocument &doc, int precision, const QStri
if ( qgsgeometry_cast<const QgsPoint *>( geom ) )
{
QDomElement elemPointMember = doc.createElementNS( ns, QStringLiteral( "pointMember" ) );
elemPointMember.appendChild( geom->asGml3( doc, precision, ns ) );
elemPointMember.appendChild( geom->asGml3( doc, precision, ns, axisOrder ) );
elemMultiPoint.appendChild( elemPointMember );
}
}

View File

@ -36,8 +36,8 @@ class CORE_EXPORT QgsMultiPoint: public QgsGeometryCollection
QgsMultiPoint *toCurveType() const override SIP_FACTORY;
bool fromWkt( const QString &wkt ) override;
void clear() override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QString asJson( int precision = 17 ) const override;
int nCoordinates() const override;
bool addGeometry( QgsAbstractGeometry *g SIP_TRANSFER ) override;

View File

@ -55,7 +55,7 @@ bool QgsMultiPolygon::fromWkt( const QString &wkt )
return fromCollectionWkt( wkt, QVector<QgsAbstractGeometry *>() << new QgsPolygon, QStringLiteral( "Polygon" ) );
}
QDomElement QgsMultiPolygon::asGml2( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsMultiPolygon::asGml2( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
// GML2 does not support curves
QDomElement elemMultiPolygon = doc.createElementNS( ns, QStringLiteral( "MultiPolygon" ) );
@ -68,7 +68,7 @@ QDomElement QgsMultiPolygon::asGml2( QDomDocument &doc, int precision, const QSt
if ( qgsgeometry_cast<const QgsPolygon *>( geom ) )
{
QDomElement elemPolygonMember = doc.createElementNS( ns, QStringLiteral( "polygonMember" ) );
elemPolygonMember.appendChild( geom->asGml2( doc, precision, ns ) );
elemPolygonMember.appendChild( geom->asGml2( doc, precision, ns, axisOrder ) );
elemMultiPolygon.appendChild( elemPolygonMember );
}
}
@ -76,7 +76,7 @@ QDomElement QgsMultiPolygon::asGml2( QDomDocument &doc, int precision, const QSt
return elemMultiPolygon;
}
QDomElement QgsMultiPolygon::asGml3( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsMultiPolygon::asGml3( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
QDomElement elemMultiSurface = doc.createElementNS( ns, QStringLiteral( "MultiPolygon" ) );
@ -88,7 +88,7 @@ QDomElement QgsMultiPolygon::asGml3( QDomDocument &doc, int precision, const QSt
if ( qgsgeometry_cast<const QgsPolygon *>( geom ) )
{
QDomElement elemSurfaceMember = doc.createElementNS( ns, QStringLiteral( "polygonMember" ) );
elemSurfaceMember.appendChild( geom->asGml3( doc, precision, ns ) );
elemSurfaceMember.appendChild( geom->asGml3( doc, precision, ns, axisOrder ) );
elemMultiSurface.appendChild( elemSurfaceMember );
}
}

View File

@ -34,8 +34,8 @@ class CORE_EXPORT QgsMultiPolygon: public QgsMultiSurface
void clear() override;
QgsMultiPolygon *clone() const override SIP_FACTORY;
bool fromWkt( const QString &wkt ) override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QString asJson( int precision = 17 ) const override;
bool addGeometry( QgsAbstractGeometry *g SIP_TRANSFER ) override;
bool insertGeometry( QgsAbstractGeometry *g SIP_TRANSFER, int index ) override;

View File

@ -63,7 +63,7 @@ bool QgsMultiSurface::fromWkt( const QString &wkt )
QStringLiteral( "Polygon" ) );
}
QDomElement QgsMultiSurface::asGml2( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsMultiSurface::asGml2( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
// GML2 does not support curves
QDomElement elemMultiPolygon = doc.createElementNS( ns, QStringLiteral( "MultiPolygon" ) );
@ -78,7 +78,7 @@ QDomElement QgsMultiSurface::asGml2( QDomDocument &doc, int precision, const QSt
std::unique_ptr< QgsPolygon > polygon( static_cast<const QgsSurface *>( geom )->surfaceToPolygon() );
QDomElement elemPolygonMember = doc.createElementNS( ns, QStringLiteral( "polygonMember" ) );
elemPolygonMember.appendChild( polygon->asGml2( doc, precision, ns ) );
elemPolygonMember.appendChild( polygon->asGml2( doc, precision, ns, axisOrder ) );
elemMultiPolygon.appendChild( elemPolygonMember );
}
}
@ -86,7 +86,7 @@ QDomElement QgsMultiSurface::asGml2( QDomDocument &doc, int precision, const QSt
return elemMultiPolygon;
}
QDomElement QgsMultiSurface::asGml3( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsMultiSurface::asGml3( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
QDomElement elemMultiSurface = doc.createElementNS( ns, QStringLiteral( "MultiSurface" ) );
@ -98,7 +98,7 @@ QDomElement QgsMultiSurface::asGml3( QDomDocument &doc, int precision, const QSt
if ( qgsgeometry_cast<const QgsSurface *>( geom ) )
{
QDomElement elemSurfaceMember = doc.createElementNS( ns, QStringLiteral( "surfaceMember" ) );
elemSurfaceMember.appendChild( geom->asGml3( doc, precision, ns ) );
elemSurfaceMember.appendChild( geom->asGml3( doc, precision, ns, axisOrder ) );
elemMultiSurface.appendChild( elemSurfaceMember );
}
}

View File

@ -35,8 +35,8 @@ class CORE_EXPORT QgsMultiSurface: public QgsGeometryCollection
QgsMultiSurface *clone() const override SIP_FACTORY;
QgsMultiSurface *toCurveType() const override SIP_FACTORY;
bool fromWkt( const QString &wkt ) override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QString asJson( int precision = 17 ) const override;
bool addGeometry( QgsAbstractGeometry *g SIP_TRANSFER ) override;
bool insertGeometry( QgsAbstractGeometry *g SIP_TRANSFER, int index ) override;

View File

@ -256,7 +256,7 @@ QString QgsPoint::asWkt( int precision ) const
return wkt;
}
QDomElement QgsPoint::asGml2( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsPoint::asGml2( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
QDomElement elemPoint = doc.createElementNS( ns, QStringLiteral( "Point" ) );
QDomElement elemCoordinates = doc.createElementNS( ns, QStringLiteral( "coordinates" ) );
@ -269,18 +269,26 @@ QDomElement QgsPoint::asGml2( QDomDocument &doc, int precision, const QString &n
elemCoordinates.setAttribute( QStringLiteral( "cs" ), cs );
elemCoordinates.setAttribute( QStringLiteral( "ts" ), ts );
QString strCoordinates = qgsDoubleToString( mX, precision ) + cs + qgsDoubleToString( mY, precision );
QString strCoordinates;
if ( axisOrder == QgsAbstractGeometry::AxisOrder::XY )
strCoordinates = qgsDoubleToString( mX, precision ) + cs + qgsDoubleToString( mY, precision );
else
strCoordinates = qgsDoubleToString( mY, precision ) + cs + qgsDoubleToString( mX, precision );
elemCoordinates.appendChild( doc.createTextNode( strCoordinates ) );
elemPoint.appendChild( elemCoordinates );
return elemPoint;
}
QDomElement QgsPoint::asGml3( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsPoint::asGml3( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
QDomElement elemPoint = doc.createElementNS( ns, QStringLiteral( "Point" ) );
QDomElement elemPosList = doc.createElementNS( ns, QStringLiteral( "pos" ) );
elemPosList.setAttribute( QStringLiteral( "srsDimension" ), is3D() ? 3 : 2 );
QString strCoordinates = qgsDoubleToString( mX, precision ) + ' ' + qgsDoubleToString( mY, precision );
QString strCoordinates;
if ( axisOrder == QgsAbstractGeometry::AxisOrder::XY )
strCoordinates = qgsDoubleToString( mX, precision ) + ' ' + qgsDoubleToString( mY, precision );
else
strCoordinates = qgsDoubleToString( mY, precision ) + ' ' + qgsDoubleToString( mX, precision );
if ( is3D() )
strCoordinates += ' ' + qgsDoubleToString( mZ, precision );

View File

@ -398,8 +398,8 @@ class CORE_EXPORT QgsPoint: public QgsAbstractGeometry
bool fromWkt( const QString &wkt ) override;
QByteArray asWkb() const override;
QString asWkt( int precision = 17 ) const override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QString asJson( int precision = 17 ) const override;
void draw( QPainter &p ) const override;
void transform( const QgsCoordinateTransform &ct, QgsCoordinateTransform::TransformDirection d = QgsCoordinateTransform::ForwardTransform,

View File

@ -211,7 +211,7 @@ bool QgsTriangle::fromWkt( const QString &wkt )
return true;
}
QDomElement QgsTriangle::asGml3( QDomDocument &doc, int precision, const QString &ns ) const
QDomElement QgsTriangle::asGml3( QDomDocument &doc, int precision, const QString &ns, const QgsAbstractGeometry::AxisOrder &axisOrder ) const
{
QDomElement elemTriangle = doc.createElementNS( ns, QStringLiteral( "Triangle" ) );
@ -220,7 +220,7 @@ QDomElement QgsTriangle::asGml3( QDomDocument &doc, int precision, const QString
return elemTriangle;
QDomElement elemExterior = doc.createElementNS( ns, QStringLiteral( "exterior" ) );
QDomElement curveElem = exteriorRing()->asGml3( doc, precision, ns );
QDomElement curveElem = exteriorRing()->asGml3( doc, precision, ns, axisOrder );
if ( curveElem.tagName() == QLatin1String( "LineString" ) )
{
curveElem.setTagName( QStringLiteral( "LinearRing" ) );

View File

@ -72,7 +72,7 @@ class CORE_EXPORT QgsTriangle : public QgsPolygon
// inherited: QString asWkt( int precision = 17 ) const;
// inherited (as a polygon): QDomElement asGML2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override;
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", const QgsAbstractGeometry::AxisOrder &axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
QgsPolygon *surfaceToPolygon() const override SIP_FACTORY;

View File

@ -728,8 +728,27 @@ void TestQgsGeometry::point()
QString expectedGML3prec3( QStringLiteral( "<Point xmlns=\"gml\"><pos xmlns=\"gml\" srsDimension=\"2\">0.333 0.667</pos></Point>" ) );
QCOMPARE( elemToString( exportPointFloat.asGml3( doc, 3 ) ), expectedGML3prec3 );
QgsPoint exportPointZ( 1, 2, 3 );
QString expectedGML2Z( QStringLiteral( "<Point xmlns=\"gml\"><pos xmlns=\"gml\" srsDimension=\"3\">1 2 3</pos></Point>" ) );
QGSCOMPAREGML( elemToString( exportPointZ.asGml3( doc, 3 ) ), expectedGML2Z );
QString expectedGML3Z( QStringLiteral( "<Point xmlns=\"gml\"><pos xmlns=\"gml\" srsDimension=\"3\">1 2 3</pos></Point>" ) );
QGSCOMPAREGML( elemToString( exportPointZ.asGml3( doc, 3 ) ), expectedGML3Z );
//asGML2 inverted axis
QgsPoint exportPointInvertedAxis( 1, 2 );
QgsPoint exportPointFloatInvertedAxis( 1 / 3.0, 2 / 3.0 );
QDomDocument docInvertedAxis( QStringLiteral( "gml" ) );
QString expectedGML2InvertedAxis( QStringLiteral( "<Point xmlns=\"gml\"><coordinates xmlns=\"gml\" cs=\",\" ts=\" \">2,1</coordinates></Point>" ) );
QGSCOMPAREGML( elemToString( exportPointInvertedAxis.asGml2( docInvertedAxis, 17, QStringLiteral( "gml" ), QgsAbstractGeometry::AxisOrder::YX ) ), expectedGML2InvertedAxis );
QString expectedGML2prec3InvertedAxis( QStringLiteral( "<Point xmlns=\"gml\"><coordinates xmlns=\"gml\" cs=\",\" ts=\" \">0.667,0.333</coordinates></Point>" ) );
QGSCOMPAREGML( elemToString( exportPointFloatInvertedAxis.asGml2( docInvertedAxis, 3, QStringLiteral( "gml" ), QgsAbstractGeometry::AxisOrder::YX ) ), expectedGML2prec3InvertedAxis );
//asGML3 inverted axis
QString expectedGML3InvertedAxis( QStringLiteral( "<Point xmlns=\"gml\"><pos xmlns=\"gml\" srsDimension=\"2\">2 1</pos></Point>" ) );
QCOMPARE( elemToString( exportPointInvertedAxis.asGml3( docInvertedAxis, 17, QStringLiteral( "gml" ), QgsAbstractGeometry::AxisOrder::YX ) ), expectedGML3InvertedAxis );
QString expectedGML3prec3InvertedAxis( QStringLiteral( "<Point xmlns=\"gml\"><pos xmlns=\"gml\" srsDimension=\"2\">0.667 0.333</pos></Point>" ) );
QCOMPARE( elemToString( exportPointFloatInvertedAxis.asGml3( docInvertedAxis, 3, QStringLiteral( "gml" ), QgsAbstractGeometry::AxisOrder::YX ) ), expectedGML3prec3InvertedAxis );
QgsPoint exportPointZInvertedAxis( 1, 2, 3 );
QString expectedGML3ZInvertedAxis( QStringLiteral( "<Point xmlns=\"gml\"><pos xmlns=\"gml\" srsDimension=\"3\">2 1 3</pos></Point>" ) );
QGSCOMPAREGML( elemToString( exportPointZInvertedAxis.asGml3( docInvertedAxis, 3, QStringLiteral( "gml" ), QgsAbstractGeometry::AxisOrder::YX ) ), expectedGML3ZInvertedAxis );
//asJSON
QString expectedJson( QStringLiteral( "{\"type\": \"Point\", \"coordinates\": [1, 2]}" ) );

View File

@ -23,6 +23,9 @@
class TestQgsGeometryUtils: public QObject
{
Q_OBJECT
public:
QString elemToString( const QDomElement &elem ) const;
private slots:
void testExtractLinestrings();
void testCircleClockwise_data();
@ -56,9 +59,19 @@ class TestQgsGeometryUtils: public QObject
void testClosestPoint();
void testSegmentIntersection();
void testLineCircleIntersection();
void testGml();
};
QString TestQgsGeometryUtils::elemToString( const QDomElement &elem ) const
{
QString s;
QTextStream stream( &s );
elem.save( stream, -1 );
return s;
}
void TestQgsGeometryUtils::testExtractLinestrings()
{
QgsLineString *outerRing1 = new QgsLineString();
@ -815,5 +828,24 @@ void TestQgsGeometryUtils::testLineCircleIntersection()
QVERIFY( !isIntersection );
}
void TestQgsGeometryUtils::testGml()
{
QgsPoint point = QgsPoint( 1, 2 );
QDomDocument doc;
QDomElement elm = QgsGeometryUtils::pointsToGML2( QgsPointSequence( ) << point, doc, 2, QStringLiteral( "gml" ) );
QString expectedGML2( QStringLiteral( "<coordinates xmlns=\"gml\" cs=\",\" ts=\" \">1,2</coordinates>" ) );
QGSCOMPAREGML( elemToString( elm ), expectedGML2 );
elm = QgsGeometryUtils::pointsToGML2( QgsPointSequence( ) << point, doc, 2, QStringLiteral( "gml" ), QgsAbstractGeometry::AxisOrder::YX );
QString expectedGML2_inverted( QStringLiteral( "<coordinates xmlns=\"gml\" cs=\",\" ts=\" \">2,1</coordinates>" ) );
QGSCOMPAREGML( elemToString( elm ), expectedGML2_inverted );
elm = QgsGeometryUtils::pointsToGML3( QgsPointSequence( ) << point, doc, 2, QStringLiteral( "gml" ), false, QgsAbstractGeometry::AxisOrder::XY );
QString expectedGML3( QStringLiteral( "<posList xmlns=\"gml\" srsDimension=\"2\">1 2</posList>" ) );
QGSCOMPAREGML( elemToString( elm ), expectedGML3 );
elm = QgsGeometryUtils::pointsToGML3( QgsPointSequence( ) << point, doc, 2, QStringLiteral( "gml" ), false, QgsAbstractGeometry::AxisOrder::YX );
QString expectedGML3_inverted( QStringLiteral( "<posList xmlns=\"gml\" srsDimension=\"2\">2 1</posList>" ) );
QGSCOMPAREGML( elemToString( elm ), expectedGML3_inverted );
}
QGSTEST_MAIN( TestQgsGeometryUtils )
#include "testqgsgeometryutils.moc"