double QgsGCPCanvasItem::residualToScreenFactor() const { if ( !mMapCanvas ) { return 1; } double mapUnitsPerScreenPixel = mMapCanvas->mapUnitsPerPixel(); double mapUnitsPerRasterPixel = 1.0; QList<QgsMapLayer*> canvasLayers = mMapCanvas->mapSettings().layers(); if ( !canvasLayers.isEmpty() ) { QgsMapLayer* mapLayer = canvasLayers.at( 0 ); if ( mapLayer ) { QgsRasterLayer* rasterLayer = dynamic_cast<QgsRasterLayer*>( mapLayer ); if ( rasterLayer ) { mapUnitsPerRasterPixel = rasterLayer->rasterUnitsPerPixelX(); } } } return 1.0 / ( mapUnitsPerScreenPixel * mapUnitsPerRasterPixel ); }
bool QgsReclassifyAlgorithmBase::prepareAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) { mDataType = QgsRasterAnalysisUtils::rasterTypeChoiceToDataType( parameterAsEnum( parameters, QStringLiteral( "DATA_TYPE" ), context ) ); QgsRasterLayer *layer = parameterAsRasterLayer( parameters, QStringLiteral( "INPUT_RASTER" ), context ); if ( !layer ) throw QgsProcessingException( invalidRasterError( parameters, QStringLiteral( "INPUT_RASTER" ) ) ); mBand = parameterAsInt( parameters, QStringLiteral( "RASTER_BAND" ), context ); if ( mBand < 1 || mBand > layer->bandCount() ) throw QgsProcessingException( QObject::tr( "Invalid band number for RASTER_BAND (%1): Valid values for input raster are 1 to %2" ).arg( mBand ) .arg( layer->bandCount() ) ); mInterface.reset( layer->dataProvider()->clone() ); mExtent = layer->extent(); mCrs = layer->crs(); mRasterUnitsPerPixelX = std::abs( layer->rasterUnitsPerPixelX() ); mRasterUnitsPerPixelY = std::abs( layer->rasterUnitsPerPixelY() ); mNbCellsXProvider = mInterface->xSize(); mNbCellsYProvider = mInterface->ySize(); mNoDataValue = parameterAsDouble( parameters, QStringLiteral( "NO_DATA" ), context ); mUseNoDataForMissingValues = parameterAsBool( parameters, QStringLiteral( "NODATA_FOR_MISSING" ), context ); int boundsType = parameterAsEnum( parameters, QStringLiteral( "RANGE_BOUNDARIES" ), context ); switch ( boundsType ) { case 0: mBoundsType = QgsReclassifyUtils::RasterClass::IncludeMax; break; case 1: mBoundsType = QgsReclassifyUtils::RasterClass::IncludeMin; break; case 2: mBoundsType = QgsReclassifyUtils::RasterClass::IncludeMinAndMax; break; case 3: mBoundsType = QgsReclassifyUtils::RasterClass::Exclusive; break; } return _prepareAlgorithm( parameters, context, feedback ); }
bool QgsZonalHistogramAlgorithm::prepareAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback * ) { QgsRasterLayer *layer = parameterAsRasterLayer( parameters, QStringLiteral( "INPUT_RASTER" ), context ); if ( !layer ) throw QgsProcessingException( invalidRasterError( parameters, QStringLiteral( "INPUT_RASTER" ) ) ); mRasterBand = parameterAsInt( parameters, QStringLiteral( "RASTER_BAND" ), context ); mHasNoDataValue = layer->dataProvider()->sourceHasNoDataValue( mRasterBand ); mNodataValue = layer->dataProvider()->sourceNoDataValue( mRasterBand ); mRasterInterface.reset( layer->dataProvider()->clone() ); mRasterExtent = layer->extent(); mCrs = layer->crs(); mCellSizeX = std::abs( layer->rasterUnitsPerPixelX() ); mCellSizeY = std::abs( layer->rasterUnitsPerPixelX() ); mNbCellsXProvider = mRasterInterface->xSize(); mNbCellsYProvider = mRasterInterface->ySize(); return true; }