Skip to content

Commit

Permalink
Add axisOrder to QgsAbstractGeometry GML generators
Browse files Browse the repository at this point in the history
  • Loading branch information
elpaso committed Mar 20, 2018
1 parent a132c2e commit 84bdc92
Show file tree
Hide file tree
Showing 42 changed files with 200 additions and 106 deletions.
14 changes: 12 additions & 2 deletions python/core/geometry/qgsabstractgeometry.sip.in
Expand Up @@ -65,6 +65,14 @@ class QgsAbstractGeometry
MaximumDifference
};

enum AxisOrder
{

XY,

YX
};

QgsAbstractGeometry();
%Docstring
Constructor for QgsAbstractGeometry.
Expand Down Expand Up @@ -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`

Expand All @@ -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`

Expand Down
4 changes: 2 additions & 2 deletions python/core/geometry/qgscircularstring.sip.in
Expand Up @@ -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;

Expand Down
4 changes: 2 additions & 2 deletions python/core/geometry/qgscompoundcurve.sip.in
Expand Up @@ -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;

Expand Down
4 changes: 2 additions & 2 deletions python/core/geometry/qgscurvepolygon.sip.in
Expand Up @@ -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;

Expand Down
4 changes: 2 additions & 2 deletions python/core/geometry/qgsgeometrycollection.sip.in
Expand Up @@ -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;

Expand Down
4 changes: 2 additions & 2 deletions python/core/geometry/qgslinestring.sip.in
Expand Up @@ -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;

Expand Down
4 changes: 2 additions & 2 deletions python/core/geometry/qgsmulticurve.sip.in
Expand Up @@ -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;

Expand Down
4 changes: 2 additions & 2 deletions python/core/geometry/qgsmultilinestring.sip.in
Expand Up @@ -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;

Expand Down
4 changes: 2 additions & 2 deletions python/core/geometry/qgsmultipoint.sip.in
Expand Up @@ -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;

Expand Down
4 changes: 2 additions & 2 deletions python/core/geometry/qgsmultipolygon.sip.in
Expand Up @@ -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;

Expand Down
4 changes: 2 additions & 2 deletions python/core/geometry/qgsmultisurface.sip.in
Expand Up @@ -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;

Expand Down
4 changes: 2 additions & 2 deletions python/core/geometry/qgspoint.sip.in
Expand Up @@ -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;

Expand Down
2 changes: 1 addition & 1 deletion python/core/geometry/qgstriangle.sip.in
Expand Up @@ -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/;
Expand Down
22 changes: 20 additions & 2 deletions src/core/geometry/qgsabstractgeometry.h
Expand Up @@ -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.
*/
Expand Down Expand Up @@ -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.
Expand Down
8 changes: 4 additions & 4 deletions src/core/geometry/qgscircularstring.cpp
Expand Up @@ -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 );
Expand All @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions src/core/geometry/qgscircularstring.h
Expand Up @@ -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;
Expand Down
8 changes: 4 additions & 4 deletions src/core/geometry/qgscompoundcurve.cpp
Expand Up @@ -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" ) );

Expand All @@ -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 );
}
Expand Down
4 changes: 2 additions & 2 deletions src/core/geometry/qgscompoundcurve.h
Expand Up @@ -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
Expand Down
12 changes: 6 additions & 6 deletions src/core/geometry/qgscurvepolygon.cpp
Expand Up @@ -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" ) );
Expand All @@ -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 );
Expand All @@ -358,23 +358,23 @@ 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 );
}
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" ) );

if ( isEmpty() )
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" ) );
Expand All @@ -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" ) );
Expand Down

0 comments on commit 84bdc92

Please sign in to comment.