double QgsGCPCanvasItem::residualToScreenFactor() const { if ( !mMapCanvas ) { return 1; } double mapUnitsPerScreenPixel = mMapCanvas->mapUnitsPerPixel(); double mapUnitsPerRasterPixel = 1.0; if ( mMapCanvas->mapRenderer() ) { QStringList canvasLayers = mMapCanvas->mapRenderer()->layerSet(); if ( canvasLayers.size() > 0 ) { QString layerId = canvasLayers.at( 0 ); QgsMapLayer* mapLayer = QgsMapLayerRegistry::instance()->mapLayer( layerId ); if ( mapLayer ) { QgsRasterLayer* rasterLayer = dynamic_cast<QgsRasterLayer*>( mapLayer ); if ( rasterLayer ) { mapUnitsPerRasterPixel = rasterLayer->rasterUnitsPerPixel(); } } } } return 1.0 / ( mapUnitsPerScreenPixel * mapUnitsPerRasterPixel ); }