diff --git a/src/core/stac/qgsstacparser.cpp b/src/core/stac/qgsstacparser.cpp index a98da2873c7..adb30532d2c 100644 --- a/src/core/stac/qgsstacparser.cpp +++ b/src/core/stac/qgsstacparser.cpp @@ -480,29 +480,21 @@ QString QgsStacParser::getString( const nlohmann::json &data ) QgsStacItemCollection *QgsStacParser::itemCollection() { + std::vector< std::unique_ptr > items; + QVector< QgsStacLink > links; + int numberMatched = -1; try { - QVector< QgsStacLink > links = parseLinks( mData.at( "links" ) ); + links = parseLinks( mData.at( "links" ) ); - std::vector< std::unique_ptr > items; items.reserve( mData.at( "features" ).size() ); for ( auto &item : mData.at( "features" ) ) { - std::unique_ptr i( parseItem( item ) ); - if ( i ) - items.emplace_back( i.release() ); + items.emplace_back( parseItem( item ) ); } - const int numberMatched = mData.contains( "numberMatched" ) ? mData["numberMatched"].get() : -1; - - QVector< QgsStacItem *> rawItems; - rawItems.reserve( static_cast( items.size() ) ); - for ( std::unique_ptr &i : items ) - { - rawItems.append( i.release() ); - } - - return new QgsStacItemCollection( rawItems, links, numberMatched ); + if ( mData.contains( "numberMatched" ) ) + numberMatched = mData["numberMatched"].get(); } catch ( nlohmann::json::exception &ex ) { @@ -510,33 +502,36 @@ QgsStacItemCollection *QgsStacParser::itemCollection() QgsDebugError( QStringLiteral( "Error parsing ItemCollection: %1" ).arg( ex.what() ) ); return nullptr; } + + QVector< QgsStacItem *> rawItems; + rawItems.reserve( static_cast( items.size() ) ); + for ( std::unique_ptr &i : items ) + { + if ( i ) + rawItems.append( i.release() ); + } + + return new QgsStacItemCollection( rawItems, links, numberMatched ); } QgsStacCollections *QgsStacParser::collections() { + std::vector< std::unique_ptr > cols; + QVector< QgsStacLink > links; + int numberMatched = -1; + try { - QVector< QgsStacLink > links = parseLinks( mData.at( "links" ) ); + links = parseLinks( mData.at( "links" ) ); - std::vector< std::unique_ptr > cols; cols.reserve( mData.at( "collections" ).size() ); for ( auto &col : mData.at( "collections" ) ) { - std::unique_ptr c( parseCollection( col ) ); - if ( c ) - cols.emplace_back( c.release() ); + cols.emplace_back( parseCollection( col ) ); } - const int numberMatched = mData.contains( "numberMatched" ) ? mData["numberMatched"].get() : -1; - - QVector< QgsStacCollection * > rawCols; - rawCols.reserve( static_cast( cols.size() ) ); - for ( std::unique_ptr &c : cols ) - { - rawCols.append( c.release() ); - } - - return new QgsStacCollections( rawCols, links, numberMatched ); + if ( mData.contains( "numberMatched" ) ) + numberMatched = mData["numberMatched"].get(); } catch ( nlohmann::json::exception &ex ) { @@ -544,4 +539,14 @@ QgsStacCollections *QgsStacParser::collections() QgsDebugError( QStringLiteral( "Error parsing ItemCollection: %1" ).arg( ex.what() ) ); return nullptr; } + + QVector< QgsStacCollection * > rawCols; + rawCols.reserve( static_cast( cols.size() ) ); + for ( std::unique_ptr &c : cols ) + { + if ( c ) + rawCols.append( c.release() ); + } + + return new QgsStacCollections( rawCols, links, numberMatched ); }