Skip to content

Commit bbd836f

Browse files
committed
Update tests for geometry classes
1 parent ba81645 commit bbd836f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+105
-341
lines changed

python/core/auto_generated/geometry/qgsabstractgeometry.sip.in

+4-2
Original file line numberDiff line numberDiff line change
@@ -246,9 +246,9 @@ Returns a GML3 representation of the geometry.
246246
.. seealso:: :py:func:`asJson`
247247
%End
248248

249-
virtual QString asJson( int precision = 17 ) const = 0;
249+
QString asJson( int precision = 17 );
250250
%Docstring
251-
Returns a GeoJSON representation of the geometry.
251+
Returns a GeoJSON representation of the geometry as a QString.
252252

253253
:param precision: number of decimal places for coordinates
254254

@@ -259,6 +259,8 @@ Returns a GeoJSON representation of the geometry.
259259
.. seealso:: :py:func:`asGml2`
260260

261261
.. seealso:: :py:func:`asGml3`
262+
263+
.. seealso:: :py:func:`asJsonObject`
262264
%End
263265

264266

python/core/auto_generated/geometry/qgscircularstring.sip.in

-2
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,6 @@ to ``p2`` will be used (i.e. winding the other way around the circle).
7979

8080
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
8181

82-
virtual QString asJson( int precision = 17 ) const;
83-
8482
virtual bool isEmpty() const;
8583

8684
virtual int numPoints() const;

python/core/auto_generated/geometry/qgscompoundcurve.sip.in

-2
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ Compound curve geometry type
5050

5151
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
5252

53-
virtual QString asJson( int precision = 17 ) const;
54-
5553

5654
virtual double length() const;
5755

python/core/auto_generated/geometry/qgscurvepolygon.sip.in

-2
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,6 @@ Curve polygon geometry type
5454

5555
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
5656

57-
virtual QString asJson( int precision = 17 ) const;
58-
5957

6058
virtual double area() const;
6159

python/core/auto_generated/geometry/qgsgeometrycollection.sip.in

-2
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,6 @@ An IndexError will be raised if no geometry with the specified index exists.
152152

153153
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
154154

155-
virtual QString asJson( int precision = 17 ) const;
156-
157155

158156
virtual QgsRectangle boundingBox() const;
159157

python/core/auto_generated/geometry/qgslinestring.sip.in

-2
Original file line numberDiff line numberDiff line change
@@ -412,8 +412,6 @@ segment in the line.
412412

413413
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
414414

415-
virtual QString asJson( int precision = 17 ) const;
416-
417415

418416
virtual double length() const;
419417

python/core/auto_generated/geometry/qgsmulticurve.sip.in

-2
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@ Multi curve geometry collection.
3535

3636
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
3737

38-
virtual QString asJson( int precision = 17 ) const;
39-
4038
virtual bool addGeometry( QgsAbstractGeometry *g /Transfer/ );
4139

4240
virtual bool insertGeometry( QgsAbstractGeometry *g /Transfer/, int index );

python/core/auto_generated/geometry/qgsmultilinestring.sip.in

-2
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ Multi line string geometry collection.
3434

3535
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
3636

37-
virtual QString asJson( int precision = 17 ) const;
38-
3937
virtual bool addGeometry( QgsAbstractGeometry *g /Transfer/ );
4038

4139
virtual bool insertGeometry( QgsAbstractGeometry *g /Transfer/, int index );

python/core/auto_generated/geometry/qgsmultipoint.sip.in

-2
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ Multi point geometry collection.
3636

3737
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
3838

39-
virtual QString asJson( int precision = 17 ) const;
40-
4139
virtual int nCoordinates() const;
4240

4341
virtual bool addGeometry( QgsAbstractGeometry *g /Transfer/ );

python/core/auto_generated/geometry/qgsmultipolygon.sip.in

-2
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ Multi polygon geometry collection.
3333

3434
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
3535

36-
virtual QString asJson( int precision = 17 ) const;
37-
3836
virtual bool addGeometry( QgsAbstractGeometry *g /Transfer/ );
3937

4038
virtual bool insertGeometry( QgsAbstractGeometry *g /Transfer/, int index );

python/core/auto_generated/geometry/qgsmultisurface.sip.in

-2
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@ Multi surface geometry collection.
3535

3636
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
3737

38-
virtual QString asJson( int precision = 17 ) const;
39-
4038
virtual bool addGeometry( QgsAbstractGeometry *g /Transfer/ );
4139

4240
virtual bool insertGeometry( QgsAbstractGeometry *g /Transfer/, int index );

python/core/auto_generated/geometry/qgspoint.sip.in

-2
Original file line numberDiff line numberDiff line change
@@ -355,8 +355,6 @@ M value is preserved.
355355

356356
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const;
357357

358-
virtual QString asJson( int precision = 17 ) const;
359-
360358
virtual void draw( QPainter &p ) const;
361359

362360
virtual void transform( const QgsCoordinateTransform &ct, QgsCoordinateTransform::TransformDirection d = QgsCoordinateTransform::ForwardTransform, bool transformZ = false ) throw( QgsCsException );

src/core/geometry/qgsabstractgeometry.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,11 @@ QString QgsAbstractGeometry::wktTypeStr() const
153153
return wkt;
154154
}
155155

156+
QString QgsAbstractGeometry::asJson( int precision )
157+
{
158+
return QString::fromStdString( asJsonObject( precision ).dump() );
159+
}
160+
156161
QgsPoint QgsAbstractGeometry::centroid() const
157162
{
158163
// http://en.wikipedia.org/wiki/Centroid#Centroid_of_polygon

src/core/geometry/qgsabstractgeometry.h

+6-4
Original file line numberDiff line numberDiff line change
@@ -277,23 +277,25 @@ class CORE_EXPORT QgsAbstractGeometry
277277
virtual QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const = 0;
278278

279279
/**
280-
* Returns a GeoJSON representation of the geometry.
280+
* Returns a GeoJSON representation of the geometry as a QString.
281281
* \param precision number of decimal places for coordinates
282282
* \see asWkb()
283283
* \see asWkt()
284284
* \see asGml2()
285285
* \see asGml3()
286+
* \see asJsonObject()
286287
*/
287-
virtual QString asJson( int precision = 17 ) const = 0;
288+
QString asJson( int precision = 17 );
288289

289290
/**
290-
* Returns a json obejct representation of the geometry.
291+
* Returns a json object representation of the geometry.
291292
* \see asWkb()
292293
* \see asWkt()
293294
* \see asGml2()
294295
* \see asGml3()
295296
* \see asJson()
296-
* \since QGIS 3.8
297+
* \note not available in Python bindings
298+
* \since QGIS 3.10
297299
*/
298300
virtual json asJsonObject( int precision = 17 ) const SIP_SKIP { Q_UNUSED( precision ); return nullptr; }
299301

src/core/geometry/qgscircularstring.cpp

-7
Original file line numberDiff line numberDiff line change
@@ -368,13 +368,6 @@ QDomElement QgsCircularString::asGml3( QDomDocument &doc, int precision, const Q
368368
return elemCurve;
369369
}
370370

371-
QString QgsCircularString::asJson( int precision ) const
372-
{
373-
// GeoJSON does not support curves
374-
std::unique_ptr< QgsLineString > line( curveToLine() );
375-
QString json = line->asJson( precision );
376-
return json;
377-
}
378371

379372
json QgsCircularString::asJsonObject( int precision ) const
380373
{

src/core/geometry/qgscircularstring.h

-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ class CORE_EXPORT QgsCircularString: public QgsCurve
7979
QString asWkt( int precision = 17 ) const override;
8080
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
8181
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
82-
QString asJson( int precision = 17 ) const override;
8382
json asJsonObject( int precision = 17 ) const override SIP_SKIP;
8483
bool isEmpty() const override;
8584
int numPoints() const override;

src/core/geometry/qgscompoundcurve.cpp

-8
Original file line numberDiff line numberDiff line change
@@ -292,14 +292,6 @@ QDomElement QgsCompoundCurve::asGml3( QDomDocument &doc, int precision, const QS
292292
return compoundCurveElem;
293293
}
294294

295-
QString QgsCompoundCurve::asJson( int precision ) const
296-
{
297-
// GeoJSON does not support curves
298-
std::unique_ptr< QgsLineString > line( curveToLine() );
299-
QString json = line->asJson( precision );
300-
return json;
301-
}
302-
303295
json QgsCompoundCurve::asJsonObject( int precision ) const
304296
{
305297
// GeoJSON does not support curves

src/core/geometry/qgscompoundcurve.h

-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ class CORE_EXPORT QgsCompoundCurve: public QgsCurve
5050
QString asWkt( int precision = 17 ) const override;
5151
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
5252
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
53-
QString asJson( int precision = 17 ) const override;
5453
json asJsonObject( int precision = 17 ) const override SIP_SKIP;
5554

5655
//curve interface

src/core/geometry/qgscurvepolygon.cpp

+1-30
Original file line numberDiff line numberDiff line change
@@ -401,38 +401,9 @@ QDomElement QgsCurvePolygon::asGml3( QDomDocument &doc, int precision, const QSt
401401
return elemCurvePolygon;
402402
}
403403

404-
QString QgsCurvePolygon::asJson( int precision ) const
405-
{
406-
// GeoJSON does not support curves
407-
QString json = QStringLiteral( "{\"type\": \"Polygon\", \"coordinates\": [" );
408-
409-
if ( exteriorRing() )
410-
{
411-
std::unique_ptr< QgsLineString > exteriorLineString( exteriorRing()->curveToLine() );
412-
QgsPointSequence exteriorPts;
413-
exteriorLineString->points( exteriorPts );
414-
json += QgsGeometryUtils::pointsToJSON( exteriorPts, precision ) + QLatin1String( ", " );
415-
416-
std::unique_ptr< QgsLineString > interiorLineString;
417-
for ( int i = 0, n = numInteriorRings(); i < n; ++i )
418-
{
419-
interiorLineString.reset( interiorRing( i )->curveToLine() );
420-
QgsPointSequence interiorPts;
421-
interiorLineString->points( interiorPts );
422-
json += QgsGeometryUtils::pointsToJSON( interiorPts, precision ) + QLatin1String( ", " );
423-
}
424-
if ( json.endsWith( QLatin1String( ", " ) ) )
425-
{
426-
json.chop( 2 ); // Remove last ", "
427-
}
428-
}
429-
json += QLatin1String( "] }" );
430-
return json;
431-
}
432-
433404
json QgsCurvePolygon::asJsonObject( int precision ) const
434405
{
435-
json coordinates;
406+
json coordinates { json::array( )};
436407
if ( exteriorRing() )
437408
{
438409
std::unique_ptr< QgsLineString > exteriorLineString( exteriorRing()->curveToLine() );

src/core/geometry/qgscurvepolygon.h

-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ class CORE_EXPORT QgsCurvePolygon: public QgsSurface
5555
QString asWkt( int precision = 17 ) const override;
5656
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
5757
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
58-
QString asJson( int precision = 17 ) const override;
5958
json asJsonObject( int precision = 17 ) const override SIP_SKIP;
6059

6160
//surface interface

src/core/geometry/qgsgeometry.cpp

+1-5
Original file line numberDiff line numberDiff line change
@@ -1263,11 +1263,7 @@ QString QgsGeometry::asWkt( int precision ) const
12631263

12641264
QString QgsGeometry::asJson( int precision ) const
12651265
{
1266-
if ( !d->geometry )
1267-
{
1268-
return QStringLiteral( "null" );
1269-
}
1270-
return d->geometry->asJson( precision );
1266+
return QString::fromStdString( asJsonObject( precision ).dump() );
12711267
}
12721268

12731269
json QgsGeometry::asJsonObject( int precision ) const

src/core/geometry/qgsgeometrycollection.cpp

+2-17
Original file line numberDiff line numberDiff line change
@@ -417,32 +417,17 @@ QDomElement QgsGeometryCollection::asGml3( QDomDocument &doc, int precision, con
417417
return elemMultiGeometry;
418418
}
419419

420-
QString QgsGeometryCollection::asJson( int precision ) const
421-
{
422-
QString json = QStringLiteral( "{\"type\": \"GeometryCollection\", \"geometries\": [" );
423-
for ( const QgsAbstractGeometry *geom : mGeometries )
424-
{
425-
json += geom->asJson( precision ) + QLatin1String( ", " );
426-
}
427-
if ( json.endsWith( QLatin1String( ", " ) ) )
428-
{
429-
json.chop( 2 ); // Remove last ", "
430-
}
431-
json += QLatin1String( "] }" );
432-
return json;
433-
}
434-
435420
json QgsGeometryCollection::asJsonObject( int precision ) const
436421
{
437-
json coordinates;
422+
json coordinates { json::array( ) };
438423
for ( const QgsAbstractGeometry *geom : qgis::as_const( mGeometries ) )
439424
{
440425
coordinates.push_back( geom->asJsonObject( precision ) );
441426
}
442427
return
443428
{
444429
{ "type", "GeometryCollection" },
445-
{ "coordinates", coordinates }
430+
{ "geometries", coordinates }
446431
};
447432
}
448433

src/core/geometry/qgsgeometrycollection.h

-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,6 @@ class CORE_EXPORT QgsGeometryCollection: public QgsAbstractGeometry
173173
QString asWkt( int precision = 17 ) const override;
174174
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
175175
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
176-
QString asJson( int precision = 17 ) const override;
177176
json asJsonObject( int precision = 17 ) const override SIP_SKIP;
178177

179178
QgsRectangle boundingBox() const override;

src/core/geometry/qgsgeometryutils.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1200,7 +1200,7 @@ QString QgsGeometryUtils::pointsToJSON( const QgsPointSequence &points, int prec
12001200

12011201
json QgsGeometryUtils::pointsToJson( const QgsPointSequence &points, int precision )
12021202
{
1203-
json coordinates;
1203+
json coordinates { json::array() };
12041204
for ( const QgsPoint &p : points )
12051205
{
12061206
if ( p.is3D() )

src/core/geometry/qgslinestring.cpp

-8
Original file line numberDiff line numberDiff line change
@@ -412,14 +412,6 @@ QDomElement QgsLineString::asGml3( QDomDocument &doc, int precision, const QStri
412412
return elemLineString;
413413
}
414414

415-
QString QgsLineString::asJson( int precision ) const
416-
{
417-
QgsPointSequence pts;
418-
points( pts );
419-
420-
return "{\"type\": \"LineString\", \"coordinates\": " + QgsGeometryUtils::pointsToJSON( pts, precision ) + '}';
421-
}
422-
423415
json QgsLineString::asJsonObject( int precision ) const
424416
{
425417
QgsPointSequence pts;

src/core/geometry/qgslinestring.h

-1
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,6 @@ class CORE_EXPORT QgsLineString: public QgsCurve
560560
QString asWkt( int precision = 17 ) const override;
561561
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
562562
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
563-
QString asJson( int precision = 17 ) const override;
564563
json asJsonObject( int precision = 17 ) const override SIP_SKIP;
565564

566565
//curve interface

src/core/geometry/qgsmulticurve.cpp

+1-23
Original file line numberDiff line numberDiff line change
@@ -110,31 +110,9 @@ QDomElement QgsMultiCurve::asGml3( QDomDocument &doc, int precision, const QStri
110110
return elemMultiCurve;
111111
}
112112

113-
QString QgsMultiCurve::asJson( int precision ) const
114-
{
115-
// GeoJSON does not support curves
116-
QString json = QStringLiteral( "{\"type\": \"MultiLineString\", \"coordinates\": [" );
117-
for ( const QgsAbstractGeometry *geom : mGeometries )
118-
{
119-
if ( qgsgeometry_cast<const QgsCurve *>( geom ) )
120-
{
121-
std::unique_ptr< QgsLineString > lineString( static_cast<const QgsCurve *>( geom )->curveToLine() );
122-
QgsPointSequence pts;
123-
lineString->points( pts );
124-
json += QgsGeometryUtils::pointsToJSON( pts, precision ) + QLatin1String( ", " );
125-
}
126-
}
127-
if ( json.endsWith( QLatin1String( ", " ) ) )
128-
{
129-
json.chop( 2 ); // Remove last ", "
130-
}
131-
json += QLatin1String( "] }" );
132-
return json;
133-
}
134-
135113
json QgsMultiCurve::asJsonObject( int precision ) const
136114
{
137-
json coordinates;
115+
json coordinates { json::array( ) };
138116
for ( const QgsAbstractGeometry *geom : qgis::as_const( mGeometries ) )
139117
{
140118
if ( qgsgeometry_cast<const QgsCurve *>( geom ) )

src/core/geometry/qgsmulticurve.h

-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ class CORE_EXPORT QgsMultiCurve: public QgsGeometryCollection
3737
bool fromWkt( const QString &wkt ) override;
3838
QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
3939
QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override;
40-
QString asJson( int precision = 17 ) const override;
4140
json asJsonObject( int precision = 17 ) const override SIP_SKIP;
4241
bool addGeometry( QgsAbstractGeometry *g SIP_TRANSFER ) override;
4342
bool insertGeometry( QgsAbstractGeometry *g SIP_TRANSFER, int index ) override;

0 commit comments

Comments
 (0)