mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-14 00:07:35 -04:00
Merge pull request #6644 from elpaso/gml-inverted-axis
Add axisOrder to QgsAbstractGeometry GML generators
This commit is contained in:
commit
5eb9ab4813
@ -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`
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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/;
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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 );
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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" ) );
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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 ) + ' ';
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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 );
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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" ) );
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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]}" ) );
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user