mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-13 00:03:09 -04:00
Update tests for geometry classes
This commit is contained in:
parent
ba816459e1
commit
bbd836f4d3
@ -246,9 +246,9 @@ Returns a GML3 representation of the geometry.
|
||||
.. seealso:: :py:func:`asJson`
|
||||
%End
|
||||
|
||||
virtual QString asJson( int precision = 17 ) const = 0;
|
||||
QString asJson( int precision = 17 );
|
||||
%Docstring
|
||||
Returns a GeoJSON representation of the geometry.
|
||||
Returns a GeoJSON representation of the geometry as a QString.
|
||||
|
||||
:param precision: number of decimal places for coordinates
|
||||
|
||||
@ -259,6 +259,8 @@ Returns a GeoJSON representation of the geometry.
|
||||
.. seealso:: :py:func:`asGml2`
|
||||
|
||||
.. seealso:: :py:func:`asGml3`
|
||||
|
||||
.. seealso:: :py:func:`asJsonObject`
|
||||
%End
|
||||
|
||||
|
||||
|
@ -79,8 +79,6 @@ to ``p2`` will be used (i.e. winding the other way around the circle).
|
||||
|
||||
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
|
||||
|
||||
virtual QString asJson( int precision = 17 ) const;
|
||||
|
||||
virtual bool isEmpty() const;
|
||||
|
||||
virtual int numPoints() const;
|
||||
|
@ -50,8 +50,6 @@ Compound curve geometry type
|
||||
|
||||
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
|
||||
|
||||
virtual QString asJson( int precision = 17 ) const;
|
||||
|
||||
|
||||
virtual double length() const;
|
||||
|
||||
|
@ -54,8 +54,6 @@ Curve polygon geometry type
|
||||
|
||||
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
|
||||
|
||||
virtual QString asJson( int precision = 17 ) const;
|
||||
|
||||
|
||||
virtual double area() const;
|
||||
|
||||
|
@ -152,8 +152,6 @@ An IndexError will be raised if no geometry with the specified index exists.
|
||||
|
||||
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
|
||||
|
||||
virtual QString asJson( int precision = 17 ) const;
|
||||
|
||||
|
||||
virtual QgsRectangle boundingBox() const;
|
||||
|
||||
|
@ -412,8 +412,6 @@ segment in the line.
|
||||
|
||||
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
|
||||
|
||||
virtual QString asJson( int precision = 17 ) const;
|
||||
|
||||
|
||||
virtual double length() const;
|
||||
|
||||
|
@ -35,8 +35,6 @@ Multi curve geometry collection.
|
||||
|
||||
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
|
||||
|
||||
virtual QString asJson( int precision = 17 ) const;
|
||||
|
||||
virtual bool addGeometry( QgsAbstractGeometry *g /Transfer/ );
|
||||
|
||||
virtual bool insertGeometry( QgsAbstractGeometry *g /Transfer/, int index );
|
||||
|
@ -34,8 +34,6 @@ Multi line string geometry collection.
|
||||
|
||||
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
|
||||
|
||||
virtual QString asJson( int precision = 17 ) const;
|
||||
|
||||
virtual bool addGeometry( QgsAbstractGeometry *g /Transfer/ );
|
||||
|
||||
virtual bool insertGeometry( QgsAbstractGeometry *g /Transfer/, int index );
|
||||
|
@ -36,8 +36,6 @@ Multi point geometry collection.
|
||||
|
||||
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
|
||||
|
||||
virtual QString asJson( int precision = 17 ) const;
|
||||
|
||||
virtual int nCoordinates() const;
|
||||
|
||||
virtual bool addGeometry( QgsAbstractGeometry *g /Transfer/ );
|
||||
|
@ -33,8 +33,6 @@ Multi polygon geometry collection.
|
||||
|
||||
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
|
||||
|
||||
virtual QString asJson( int precision = 17 ) const;
|
||||
|
||||
virtual bool addGeometry( QgsAbstractGeometry *g /Transfer/ );
|
||||
|
||||
virtual bool insertGeometry( QgsAbstractGeometry *g /Transfer/, int index );
|
||||
|
@ -35,8 +35,6 @@ Multi surface geometry collection.
|
||||
|
||||
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
|
||||
|
||||
virtual QString asJson( int precision = 17 ) const;
|
||||
|
||||
virtual bool addGeometry( QgsAbstractGeometry *g /Transfer/ );
|
||||
|
||||
virtual bool insertGeometry( QgsAbstractGeometry *g /Transfer/, int index );
|
||||
|
@ -355,8 +355,6 @@ M value is preserved.
|
||||
|
||||
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
|
||||
|
||||
virtual QString asJson( int precision = 17 ) const;
|
||||
|
||||
virtual void draw( QPainter &p ) const;
|
||||
|
||||
virtual void transform( const QgsCoordinateTransform &ct, QgsCoordinateTransform::TransformDirection d = QgsCoordinateTransform::ForwardTransform, bool transformZ = false ) throw( QgsCsException );
|
||||
|
@ -153,6 +153,11 @@ QString QgsAbstractGeometry::wktTypeStr() const
|
||||
return wkt;
|
||||
}
|
||||
|
||||
QString QgsAbstractGeometry::asJson( int precision )
|
||||
{
|
||||
return QString::fromStdString( asJsonObject( precision ).dump() );
|
||||
}
|
||||
|
||||
QgsPoint QgsAbstractGeometry::centroid() const
|
||||
{
|
||||
// http://en.wikipedia.org/wiki/Centroid#Centroid_of_polygon
|
||||
|
@ -277,23 +277,25 @@ class CORE_EXPORT QgsAbstractGeometry
|
||||
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const = 0;
|
||||
|
||||
/**
|
||||
* Returns a GeoJSON representation of the geometry.
|
||||
* Returns a GeoJSON representation of the geometry as a QString.
|
||||
* \param precision number of decimal places for coordinates
|
||||
* \see asWkb()
|
||||
* \see asWkt()
|
||||
* \see asGml2()
|
||||
* \see asGml3()
|
||||
* \see asJsonObject()
|
||||
*/
|
||||
virtual QString asJson( int precision = 17 ) const = 0;
|
||||
QString asJson( int precision = 17 );
|
||||
|
||||
/**
|
||||
* Returns a json obejct representation of the geometry.
|
||||
* Returns a json object representation of the geometry.
|
||||
* \see asWkb()
|
||||
* \see asWkt()
|
||||
* \see asGml2()
|
||||
* \see asGml3()
|
||||
* \see asJson()
|
||||
* \since QGIS 3.8
|
||||
* \note not available in Python bindings
|
||||
* \since QGIS 3.10
|
||||
*/
|
||||
virtual json asJsonObject( int precision = 17 ) const SIP_SKIP { Q_UNUSED( precision ); return nullptr; }
|
||||
|
||||
|
@ -368,13 +368,6 @@ QDomElement QgsCircularString::asGml3( QDomDocument &doc, int precision, const Q
|
||||
return elemCurve;
|
||||
}
|
||||
|
||||
QString QgsCircularString::asJson( int precision ) const
|
||||
{
|
||||
// GeoJSON does not support curves
|
||||
std::unique_ptr< QgsLineString > line( curveToLine() );
|
||||
QString json = line->asJson( precision );
|
||||
return json;
|
||||
}
|
||||
|
||||
json QgsCircularString::asJsonObject( int precision ) const
|
||||
{
|
||||
|
@ -79,7 +79,6 @@ class CORE_EXPORT QgsCircularString: public QgsCurve
|
||||
QString asWkt( int precision = 17 ) const override;
|
||||
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QString asJson( int precision = 17 ) const override;
|
||||
json asJsonObject( int precision = 17 ) const override SIP_SKIP;
|
||||
bool isEmpty() const override;
|
||||
int numPoints() const override;
|
||||
|
@ -292,14 +292,6 @@ QDomElement QgsCompoundCurve::asGml3( QDomDocument &doc, int precision, const QS
|
||||
return compoundCurveElem;
|
||||
}
|
||||
|
||||
QString QgsCompoundCurve::asJson( int precision ) const
|
||||
{
|
||||
// GeoJSON does not support curves
|
||||
std::unique_ptr< QgsLineString > line( curveToLine() );
|
||||
QString json = line->asJson( precision );
|
||||
return json;
|
||||
}
|
||||
|
||||
json QgsCompoundCurve::asJsonObject( int precision ) const
|
||||
{
|
||||
// GeoJSON does not support curves
|
||||
|
@ -50,7 +50,6 @@ class CORE_EXPORT QgsCompoundCurve: public QgsCurve
|
||||
QString asWkt( int precision = 17 ) const override;
|
||||
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QString asJson( int precision = 17 ) const override;
|
||||
json asJsonObject( int precision = 17 ) const override SIP_SKIP;
|
||||
|
||||
//curve interface
|
||||
|
@ -401,38 +401,9 @@ QDomElement QgsCurvePolygon::asGml3( QDomDocument &doc, int precision, const QSt
|
||||
return elemCurvePolygon;
|
||||
}
|
||||
|
||||
QString QgsCurvePolygon::asJson( int precision ) const
|
||||
{
|
||||
// GeoJSON does not support curves
|
||||
QString json = QStringLiteral( "{\"type\": \"Polygon\", \"coordinates\": [" );
|
||||
|
||||
if ( exteriorRing() )
|
||||
{
|
||||
std::unique_ptr< QgsLineString > exteriorLineString( exteriorRing()->curveToLine() );
|
||||
QgsPointSequence exteriorPts;
|
||||
exteriorLineString->points( exteriorPts );
|
||||
json += QgsGeometryUtils::pointsToJSON( exteriorPts, precision ) + QLatin1String( ", " );
|
||||
|
||||
std::unique_ptr< QgsLineString > interiorLineString;
|
||||
for ( int i = 0, n = numInteriorRings(); i < n; ++i )
|
||||
{
|
||||
interiorLineString.reset( interiorRing( i )->curveToLine() );
|
||||
QgsPointSequence interiorPts;
|
||||
interiorLineString->points( interiorPts );
|
||||
json += QgsGeometryUtils::pointsToJSON( interiorPts, precision ) + QLatin1String( ", " );
|
||||
}
|
||||
if ( json.endsWith( QLatin1String( ", " ) ) )
|
||||
{
|
||||
json.chop( 2 ); // Remove last ", "
|
||||
}
|
||||
}
|
||||
json += QLatin1String( "] }" );
|
||||
return json;
|
||||
}
|
||||
|
||||
json QgsCurvePolygon::asJsonObject( int precision ) const
|
||||
{
|
||||
json coordinates;
|
||||
json coordinates { json::array( )};
|
||||
if ( exteriorRing() )
|
||||
{
|
||||
std::unique_ptr< QgsLineString > exteriorLineString( exteriorRing()->curveToLine() );
|
||||
|
@ -55,7 +55,6 @@ class CORE_EXPORT QgsCurvePolygon: public QgsSurface
|
||||
QString asWkt( int precision = 17 ) const override;
|
||||
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QString asJson( int precision = 17 ) const override;
|
||||
json asJsonObject( int precision = 17 ) const override SIP_SKIP;
|
||||
|
||||
//surface interface
|
||||
|
@ -1263,11 +1263,7 @@ QString QgsGeometry::asWkt( int precision ) const
|
||||
|
||||
QString QgsGeometry::asJson( int precision ) const
|
||||
{
|
||||
if ( !d->geometry )
|
||||
{
|
||||
return QStringLiteral( "null" );
|
||||
}
|
||||
return d->geometry->asJson( precision );
|
||||
return QString::fromStdString( asJsonObject( precision ).dump() );
|
||||
}
|
||||
|
||||
json QgsGeometry::asJsonObject( int precision ) const
|
||||
|
@ -417,24 +417,9 @@ QDomElement QgsGeometryCollection::asGml3( QDomDocument &doc, int precision, con
|
||||
return elemMultiGeometry;
|
||||
}
|
||||
|
||||
QString QgsGeometryCollection::asJson( int precision ) const
|
||||
{
|
||||
QString json = QStringLiteral( "{\"type\": \"GeometryCollection\", \"geometries\": [" );
|
||||
for ( const QgsAbstractGeometry *geom : mGeometries )
|
||||
{
|
||||
json += geom->asJson( precision ) + QLatin1String( ", " );
|
||||
}
|
||||
if ( json.endsWith( QLatin1String( ", " ) ) )
|
||||
{
|
||||
json.chop( 2 ); // Remove last ", "
|
||||
}
|
||||
json += QLatin1String( "] }" );
|
||||
return json;
|
||||
}
|
||||
|
||||
json QgsGeometryCollection::asJsonObject( int precision ) const
|
||||
{
|
||||
json coordinates;
|
||||
json coordinates { json::array( ) };
|
||||
for ( const QgsAbstractGeometry *geom : qgis::as_const( mGeometries ) )
|
||||
{
|
||||
coordinates.push_back( geom->asJsonObject( precision ) );
|
||||
@ -442,7 +427,7 @@ json QgsGeometryCollection::asJsonObject( int precision ) const
|
||||
return
|
||||
{
|
||||
{ "type", "GeometryCollection" },
|
||||
{ "coordinates", coordinates }
|
||||
{ "geometries", coordinates }
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -173,7 +173,6 @@ class CORE_EXPORT QgsGeometryCollection: public QgsAbstractGeometry
|
||||
QString asWkt( int precision = 17 ) const override;
|
||||
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QString asJson( int precision = 17 ) const override;
|
||||
json asJsonObject( int precision = 17 ) const override SIP_SKIP;
|
||||
|
||||
QgsRectangle boundingBox() const override;
|
||||
|
@ -1200,7 +1200,7 @@ QString QgsGeometryUtils::pointsToJSON( const QgsPointSequence &points, int prec
|
||||
|
||||
json QgsGeometryUtils::pointsToJson( const QgsPointSequence &points, int precision )
|
||||
{
|
||||
json coordinates;
|
||||
json coordinates { json::array() };
|
||||
for ( const QgsPoint &p : points )
|
||||
{
|
||||
if ( p.is3D() )
|
||||
|
@ -412,14 +412,6 @@ QDomElement QgsLineString::asGml3( QDomDocument &doc, int precision, const QStri
|
||||
return elemLineString;
|
||||
}
|
||||
|
||||
QString QgsLineString::asJson( int precision ) const
|
||||
{
|
||||
QgsPointSequence pts;
|
||||
points( pts );
|
||||
|
||||
return "{\"type\": \"LineString\", \"coordinates\": " + QgsGeometryUtils::pointsToJSON( pts, precision ) + '}';
|
||||
}
|
||||
|
||||
json QgsLineString::asJsonObject( int precision ) const
|
||||
{
|
||||
QgsPointSequence pts;
|
||||
|
@ -560,7 +560,6 @@ class CORE_EXPORT QgsLineString: public QgsCurve
|
||||
QString asWkt( int precision = 17 ) const override;
|
||||
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QString asJson( int precision = 17 ) const override;
|
||||
json asJsonObject( int precision = 17 ) const override SIP_SKIP;
|
||||
|
||||
//curve interface
|
||||
|
@ -110,31 +110,9 @@ QDomElement QgsMultiCurve::asGml3( QDomDocument &doc, int precision, const QStri
|
||||
return elemMultiCurve;
|
||||
}
|
||||
|
||||
QString QgsMultiCurve::asJson( int precision ) const
|
||||
{
|
||||
// GeoJSON does not support curves
|
||||
QString json = QStringLiteral( "{\"type\": \"MultiLineString\", \"coordinates\": [" );
|
||||
for ( const QgsAbstractGeometry *geom : mGeometries )
|
||||
{
|
||||
if ( qgsgeometry_cast<const QgsCurve *>( geom ) )
|
||||
{
|
||||
std::unique_ptr< QgsLineString > lineString( static_cast<const QgsCurve *>( geom )->curveToLine() );
|
||||
QgsPointSequence pts;
|
||||
lineString->points( pts );
|
||||
json += QgsGeometryUtils::pointsToJSON( pts, precision ) + QLatin1String( ", " );
|
||||
}
|
||||
}
|
||||
if ( json.endsWith( QLatin1String( ", " ) ) )
|
||||
{
|
||||
json.chop( 2 ); // Remove last ", "
|
||||
}
|
||||
json += QLatin1String( "] }" );
|
||||
return json;
|
||||
}
|
||||
|
||||
json QgsMultiCurve::asJsonObject( int precision ) const
|
||||
{
|
||||
json coordinates;
|
||||
json coordinates { json::array( ) };
|
||||
for ( const QgsAbstractGeometry *geom : qgis::as_const( mGeometries ) )
|
||||
{
|
||||
if ( qgsgeometry_cast<const QgsCurve *>( geom ) )
|
||||
|
@ -37,7 +37,6 @@ class CORE_EXPORT QgsMultiCurve: public QgsGeometryCollection
|
||||
bool fromWkt( const QString &wkt ) override;
|
||||
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QString asJson( int precision = 17 ) const override;
|
||||
json asJsonObject( int precision = 17 ) const override SIP_SKIP;
|
||||
bool addGeometry( QgsAbstractGeometry *g SIP_TRANSFER ) override;
|
||||
bool insertGeometry( QgsAbstractGeometry *g SIP_TRANSFER, int index ) override;
|
||||
|
@ -98,30 +98,9 @@ QDomElement QgsMultiLineString::asGml3( QDomDocument &doc, int precision, const
|
||||
return elemMultiCurve;
|
||||
}
|
||||
|
||||
QString QgsMultiLineString::asJson( int precision ) const
|
||||
{
|
||||
QString json = QStringLiteral( "{\"type\": \"MultiLineString\", \"coordinates\": [" );
|
||||
for ( const QgsAbstractGeometry *geom : mGeometries )
|
||||
{
|
||||
if ( qgsgeometry_cast<const QgsCurve *>( geom ) )
|
||||
{
|
||||
const QgsLineString *lineString = static_cast<const QgsLineString *>( geom );
|
||||
QgsPointSequence pts;
|
||||
lineString->points( pts );
|
||||
json += QgsGeometryUtils::pointsToJSON( pts, precision ) + QLatin1String( ", " );
|
||||
}
|
||||
}
|
||||
if ( json.endsWith( QLatin1String( ", " ) ) )
|
||||
{
|
||||
json.chop( 2 ); // Remove last ", "
|
||||
}
|
||||
json += QLatin1String( "] }" );
|
||||
return json;
|
||||
}
|
||||
|
||||
json QgsMultiLineString::asJsonObject( int precision ) const
|
||||
{
|
||||
json coordinates;
|
||||
json coordinates { json::array( ) };
|
||||
for ( const QgsAbstractGeometry *geom : mGeometries )
|
||||
{
|
||||
if ( qgsgeometry_cast<const QgsCurve *>( geom ) )
|
||||
|
@ -37,7 +37,6 @@ class CORE_EXPORT QgsMultiLineString: public QgsMultiCurve
|
||||
bool fromWkt( const QString &wkt ) override;
|
||||
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QString asJson( int precision = 17 ) const override;
|
||||
json asJsonObject( int precision = 17 ) const override SIP_SKIP;
|
||||
bool addGeometry( QgsAbstractGeometry *g SIP_TRANSFER ) override;
|
||||
bool insertGeometry( QgsAbstractGeometry *g SIP_TRANSFER, int index ) override;
|
||||
|
@ -112,24 +112,6 @@ QDomElement QgsMultiPoint::asGml3( QDomDocument &doc, int precision, const QStri
|
||||
return elemMultiPoint;
|
||||
}
|
||||
|
||||
QString QgsMultiPoint::asJson( int precision ) const
|
||||
{
|
||||
QString json = QStringLiteral( "{\"type\": \"MultiPoint\", \"coordinates\": " );
|
||||
|
||||
QgsPointSequence pts;
|
||||
for ( const QgsAbstractGeometry *geom : mGeometries )
|
||||
{
|
||||
if ( qgsgeometry_cast<const QgsPoint *>( geom ) )
|
||||
{
|
||||
const QgsPoint *point = static_cast<const QgsPoint *>( geom );
|
||||
pts << *point;
|
||||
}
|
||||
}
|
||||
json += QgsGeometryUtils::pointsToJSON( pts, precision );
|
||||
json += QLatin1String( " }" );
|
||||
return json;
|
||||
}
|
||||
|
||||
json QgsMultiPoint::asJsonObject( int precision ) const
|
||||
{
|
||||
json j
|
||||
|
@ -38,7 +38,6 @@ class CORE_EXPORT QgsMultiPoint: public QgsGeometryCollection
|
||||
void clear() override;
|
||||
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QString asJson( int precision = 17 ) const override;
|
||||
json asJsonObject( int precision = 17 ) const override SIP_SKIP;
|
||||
int nCoordinates() const override;
|
||||
bool addGeometry( QgsAbstractGeometry *g SIP_TRANSFER ) override;
|
||||
|
@ -98,54 +98,12 @@ QDomElement QgsMultiPolygon::asGml3( QDomDocument &doc, int precision, const QSt
|
||||
return elemMultiSurface;
|
||||
}
|
||||
|
||||
QString QgsMultiPolygon::asJson( int precision ) const
|
||||
{
|
||||
// GeoJSON does not support curves
|
||||
QString json = QStringLiteral( "{\"type\": \"MultiPolygon\", \"coordinates\": [" );
|
||||
for ( const QgsAbstractGeometry *geom : mGeometries )
|
||||
{
|
||||
if ( qgsgeometry_cast<const QgsPolygon *>( geom ) )
|
||||
{
|
||||
json += '[';
|
||||
|
||||
const QgsPolygon *polygon = static_cast<const QgsPolygon *>( geom );
|
||||
|
||||
std::unique_ptr< QgsLineString > exteriorLineString( polygon->exteriorRing()->curveToLine() );
|
||||
QgsPointSequence exteriorPts;
|
||||
exteriorLineString->points( exteriorPts );
|
||||
json += QgsGeometryUtils::pointsToJSON( exteriorPts, precision ) + QLatin1String( ", " );
|
||||
|
||||
std::unique_ptr< QgsLineString > interiorLineString;
|
||||
for ( int i = 0, n = polygon->numInteriorRings(); i < n; ++i )
|
||||
{
|
||||
interiorLineString.reset( polygon->interiorRing( i )->curveToLine() );
|
||||
QgsPointSequence interiorPts;
|
||||
interiorLineString->points( interiorPts );
|
||||
json += QgsGeometryUtils::pointsToJSON( interiorPts, precision ) + QLatin1String( ", " );
|
||||
}
|
||||
if ( json.endsWith( QLatin1String( ", " ) ) )
|
||||
{
|
||||
json.chop( 2 ); // Remove last ", "
|
||||
}
|
||||
|
||||
json += QLatin1String( "], " );
|
||||
}
|
||||
}
|
||||
if ( json.endsWith( QLatin1String( ", " ) ) )
|
||||
{
|
||||
json.chop( 2 ); // Remove last ", "
|
||||
}
|
||||
json += QLatin1String( "] }" );
|
||||
return json;
|
||||
}
|
||||
|
||||
|
||||
json QgsMultiPolygon::asJsonObject( int precision ) const
|
||||
{
|
||||
json polygons;
|
||||
json polygons { json::array( ) };
|
||||
for ( const QgsAbstractGeometry *geom : qgis::as_const( mGeometries ) )
|
||||
{
|
||||
json coordinates;
|
||||
json coordinates { json::array( ) };
|
||||
if ( qgsgeometry_cast<const QgsPolygon *>( geom ) )
|
||||
{
|
||||
const QgsPolygon *polygon = static_cast<const QgsPolygon *>( geom );
|
||||
|
@ -36,7 +36,6 @@ class CORE_EXPORT QgsMultiPolygon: public QgsMultiSurface
|
||||
bool fromWkt( const QString &wkt ) override;
|
||||
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QString asJson( int precision = 17 ) const override;
|
||||
json asJsonObject( int precision = 17 ) const override SIP_SKIP;
|
||||
bool addGeometry( QgsAbstractGeometry *g SIP_TRANSFER ) override;
|
||||
bool insertGeometry( QgsAbstractGeometry *g SIP_TRANSFER, int index ) override;
|
||||
|
@ -109,50 +109,10 @@ QDomElement QgsMultiSurface::asGml3( QDomDocument &doc, int precision, const QSt
|
||||
return elemMultiSurface;
|
||||
}
|
||||
|
||||
QString QgsMultiSurface::asJson( int precision ) const
|
||||
{
|
||||
// GeoJSON does not support curves
|
||||
QString json = QStringLiteral( "{\"type\": \"MultiPolygon\", \"coordinates\": [" );
|
||||
for ( const QgsAbstractGeometry *geom : mGeometries )
|
||||
{
|
||||
if ( qgsgeometry_cast<const QgsSurface *>( geom ) )
|
||||
{
|
||||
json += '[';
|
||||
|
||||
std::unique_ptr< QgsPolygon >polygon( static_cast<const QgsSurface *>( geom )->surfaceToPolygon() );
|
||||
|
||||
std::unique_ptr< QgsLineString > exteriorLineString( polygon->exteriorRing()->curveToLine() );
|
||||
QgsPointSequence exteriorPts;
|
||||
exteriorLineString->points( exteriorPts );
|
||||
json += QgsGeometryUtils::pointsToJSON( exteriorPts, precision ) + QLatin1String( ", " );
|
||||
|
||||
std::unique_ptr< QgsLineString > interiorLineString;
|
||||
for ( int i = 0, n = polygon->numInteriorRings(); i < n; ++i )
|
||||
{
|
||||
interiorLineString.reset( polygon->interiorRing( i )->curveToLine() );
|
||||
QgsPointSequence interiorPts;
|
||||
interiorLineString->points( interiorPts );
|
||||
json += QgsGeometryUtils::pointsToJSON( interiorPts, precision ) + QLatin1String( ", " );
|
||||
}
|
||||
if ( json.endsWith( QLatin1String( ", " ) ) )
|
||||
{
|
||||
json.chop( 2 ); // Remove last ", "
|
||||
}
|
||||
|
||||
json += QLatin1String( "], " );
|
||||
}
|
||||
}
|
||||
if ( json.endsWith( QLatin1String( ", " ) ) )
|
||||
{
|
||||
json.chop( 2 ); // Remove last ", "
|
||||
}
|
||||
json += QLatin1String( "] }" );
|
||||
return json;
|
||||
}
|
||||
|
||||
json QgsMultiSurface::asJsonObject( int precision ) const
|
||||
{
|
||||
json coordinates;
|
||||
json coordinates { json::array( ) };
|
||||
for ( const QgsAbstractGeometry *geom : qgis::as_const( mGeometries ) )
|
||||
{
|
||||
if ( qgsgeometry_cast<const QgsSurface *>( geom ) )
|
||||
|
@ -37,7 +37,6 @@ class CORE_EXPORT QgsMultiSurface: public QgsGeometryCollection
|
||||
bool fromWkt( const QString &wkt ) override;
|
||||
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QString asJson( int precision = 17 ) const override;
|
||||
json asJsonObject( int precision = 17 ) const override SIP_SKIP;
|
||||
bool addGeometry( QgsAbstractGeometry *g SIP_TRANSFER ) override;
|
||||
bool insertGeometry( QgsAbstractGeometry *g SIP_TRANSFER, int index ) override;
|
||||
|
@ -283,12 +283,6 @@ QDomElement QgsPoint::asGml3( QDomDocument &doc, int precision, const QString &n
|
||||
* See details in QEP #17
|
||||
****************************************************************************/
|
||||
|
||||
QString QgsPoint::asJson( int precision ) const
|
||||
{
|
||||
return "{\"type\": \"Point\", \"coordinates\": ["
|
||||
+ qgsDoubleToString( mX, precision ) + QLatin1String( ", " ) + qgsDoubleToString( mY, precision )
|
||||
+ QLatin1String( "]}" );
|
||||
}
|
||||
|
||||
json QgsPoint::asJsonObject( int precision ) const
|
||||
{
|
||||
|
@ -436,7 +436,6 @@ class CORE_EXPORT QgsPoint: public QgsAbstractGeometry
|
||||
QString asWkt( int precision = 17 ) const override;
|
||||
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
|
||||
QString asJson( int precision = 17 ) const override;
|
||||
json asJsonObject( int precision = 17 ) const override SIP_SKIP;
|
||||
void draw( QPainter &p ) const override;
|
||||
void transform( const QgsCoordinateTransform &ct, QgsCoordinateTransform::TransformDirection d = QgsCoordinateTransform::ForwardTransform, bool transformZ = false ) override SIP_THROW( QgsCsException );
|
||||
|
@ -67,6 +67,7 @@ INCLUDE_DIRECTORIES(
|
||||
${CMAKE_SOURCE_DIR}/src/core/effects
|
||||
${CMAKE_SOURCE_DIR}/src/core/metadata
|
||||
${CMAKE_SOURCE_DIR}/src/core/expression
|
||||
${CMAKE_SOURCE_DIR}/external
|
||||
|
||||
${CMAKE_BINARY_DIR}/src/core
|
||||
)
|
||||
|
File diff suppressed because one or more lines are too long
@ -119,13 +119,6 @@ class TestQgsJsonUtils : public QObject
|
||||
}
|
||||
}
|
||||
|
||||
void testExportFeatureJson_data()
|
||||
{
|
||||
QTest::addColumn<JsonAlgs>( "JsonAlgs" );
|
||||
QTest::newRow( "Use json" ) << JsonAlgs::Json;
|
||||
QTest::newRow( "Use old string concat" ) << JsonAlgs::String;
|
||||
}
|
||||
|
||||
void testExportFeatureJson()
|
||||
{
|
||||
|
||||
@ -152,35 +145,47 @@ class TestQgsJsonUtils : public QObject
|
||||
|
||||
void testExportGeomToJson()
|
||||
{
|
||||
const QStringList testWkts
|
||||
const QMap<QString, QString> testWkts
|
||||
{
|
||||
{
|
||||
QStringLiteral( "LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)" ),
|
||||
QStringLiteral( "MULTILINESTRING((-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932))" ),
|
||||
QStringLiteral( "POINT(-71.064544 42.28787)" ),
|
||||
QStringLiteral( "MULTIPOINT(-71.064544 42.28787, -71.1776585052917 42.3902909739571)" ),
|
||||
QStringLiteral( "POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,"
|
||||
"-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))" ),
|
||||
QStringLiteral( "MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2, 3 2, 3 3, 2 3,2 2)),((3 3,6 2,6 4,3 3)))" ),
|
||||
QStringLiteral( "CIRCULARSTRING(220268 150415,220227 150505,220227 150406)" ),
|
||||
{
|
||||
QStringLiteral( "LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)" ),
|
||||
QStringLiteral( R"json({"coordinates":[[-71.16,42.259],[-71.161,42.259],[-71.161,42.259]],"type":"LineString"})json" )
|
||||
},
|
||||
{
|
||||
QStringLiteral( "MULTILINESTRING((-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932), (-70 43.56, -67 44.68))" ),
|
||||
QStringLiteral( R"json({"coordinates":[[[-71.16,42.259],[-71.161,42.259],[-71.161,42.259]],[[-70.0,43.56],[-67.0,44.68]]],"type":"MultiLineString"})json" )
|
||||
},
|
||||
{ QStringLiteral( "POINT(-71.064544 42.28787)" ), QStringLiteral( R"json({"coordinates":[-71.065,42.288],"type":"Point"})json" ) },
|
||||
{ QStringLiteral( "MULTIPOINT(-71.064544 42.28787, -71.1776585052917 42.3902909739571)" ), QStringLiteral( R"json({"coordinates":[[-71.065,42.288],[-71.178,42.39]],"type":"MultiPoint"})json" ) },
|
||||
{
|
||||
QStringLiteral( "POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,"
|
||||
"-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))" ),
|
||||
QStringLiteral( R"json({"coordinates":[[[-71.178,42.39],[-71.178,42.39],[-71.178,42.39],[-71.178,42.39],[-71.178,42.39]]],"type":"Polygon"})json" )
|
||||
},
|
||||
{
|
||||
QStringLiteral( "MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2, 3 2, 3 3, 2 3,2 2)),((3 3,6 2,6 4,3 3)))" ),
|
||||
QStringLiteral( R"json({"coordinates":[[[[1.0,1.0],[5.0,1.0],[5.0,5.0],[1.0,5.0],[1.0,1.0]],[[2.0,2.0],[3.0,2.0],[3.0,3.0],[2.0,3.0],[2.0,2.0]]],[[[3.0,3.0],[6.0,2.0],[6.0,4.0],[3.0,3.0]]]],"type":"MultiPolygon"})json" )
|
||||
},
|
||||
// Note: CIRCULARSTRING json is very long, we will check first three vertices only
|
||||
{ QStringLiteral( "CIRCULARSTRING(220268 150415,220227 150505,220227 150406)" ), QStringLiteral( R"json({"coordinates":[[220268.0,150415.0],[220268.7,150415.535],[220269.391,150416.081])json" ) },
|
||||
}
|
||||
};
|
||||
|
||||
for ( const auto &w : testWkts )
|
||||
for ( const auto &w : testWkts.toStdMap() )
|
||||
{
|
||||
const auto g { QgsGeometry::fromWkt( w ) };
|
||||
const auto g { QgsGeometry::fromWkt( w.first ) };
|
||||
QVERIFY( !g.isNull( ) );
|
||||
QCOMPARE( QJsonDocument::fromJson( QByteArray::fromStdString( g.asJsonObject( 3 ).dump() ) )
|
||||
.toJson( QJsonDocument::JsonFormat::Compact ),
|
||||
QJsonDocument::fromJson( g.asJson( 3 ).toUtf8() )
|
||||
.toJson( QJsonDocument::JsonFormat::Compact ) );
|
||||
const auto outp { QJsonDocument::fromJson( g.asJson( 3 ).toUtf8() )
|
||||
.toJson( QJsonDocument::JsonFormat::Compact ) };
|
||||
qDebug() << QStringLiteral( "{ \"%1\", R\"json(%2)json\" }, " )
|
||||
.arg( w )
|
||||
.arg( QString( outp ) );
|
||||
if ( w.first.startsWith( QStringLiteral( "CIRCULARSTRING" ) ) )
|
||||
{
|
||||
QVERIFY( g.asJson( 3 ).startsWith( w.second ) );
|
||||
QCOMPARE( g.asJsonObject( 3 )["type"], "LineString" );
|
||||
}
|
||||
else
|
||||
{
|
||||
QCOMPARE( g.asJson( 3 ), w.second );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -27,10 +27,12 @@ INCLUDE_DIRECTORIES(
|
||||
${CMAKE_SOURCE_DIR}/src/native
|
||||
${CMAKE_SOURCE_DIR}/src/quickgui
|
||||
${CMAKE_SOURCE_DIR}/src/test
|
||||
${CMAKE_SOURCE_DIR}/external
|
||||
|
||||
${CMAKE_BINARY_DIR}/src/core
|
||||
${CMAKE_BINARY_DIR}/src/native
|
||||
${CMAKE_BINARY_DIR}/src/quickgui
|
||||
|
||||
)
|
||||
|
||||
INCLUDE_DIRECTORIES(SYSTEM
|
||||
|
Loading…
x
Reference in New Issue
Block a user