json QgsMultiPolygon::asJsonObject( int precision ) const { json polygons( json::array( ) ); for ( const QgsAbstractGeometry *geom : qgis::as_const( mGeometries ) ) { if ( qgsgeometry_cast<const QgsPolygon *>( geom ) ) { json coordinates( json::array( ) ); const QgsPolygon *polygon = static_cast<const QgsPolygon *>( geom ); std::unique_ptr< QgsLineString > exteriorLineString( polygon->exteriorRing()->curveToLine() ); QgsPointSequence exteriorPts; exteriorLineString->points( exteriorPts ); coordinates.push_back( QgsGeometryUtils::pointsToJson( exteriorPts, precision ) ); 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 ); coordinates.push_back( QgsGeometryUtils::pointsToJson( interiorPts, precision ) ); } polygons.push_back( coordinates ); } } return { { "type", "MultiPolygon" }, { "coordinates", polygons } }; }
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 ) + ", "; 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 ) + ", "; } if ( json.endsWith( QLatin1String( ", " ) ) ) { json.chop( 2 ); // Remove last ", " } json += QLatin1String( "], " ); } } if ( json.endsWith( QLatin1String( ", " ) ) ) { json.chop( 2 ); // Remove last ", " } json += QLatin1String( "] }" ); return json; }