Skip to content

Commit 8f61a3a

Browse files
authoredFeb 21, 2021
Merge pull request #41716 from nyalldawson/georef_project_318
[georeferencer] NEVER load raster file being referenced into the current project (3.18)
2 parents e44d728 + 76620ff commit 8f61a3a

File tree

2 files changed

+19
-62
lines changed

2 files changed

+19
-62
lines changed
 

‎src/app/georeferencer/qgsgeorefmainwindow.cpp

Lines changed: 12 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,6 @@ QgsGeorefDockWidget::QgsGeorefDockWidget( const QString &title, QWidget *parent,
7676

7777
QgsGeoreferencerMainWindow::QgsGeoreferencerMainWindow( QWidget *parent, Qt::WindowFlags fl )
7878
: QMainWindow( parent, fl )
79-
, mMousePrecisionDecimalPlaces( 0 )
80-
, mTransformParam( QgsGeorefTransform::InvalidTransform )
81-
, mAgainAddRaster( false )
82-
, mMapCoordsDialog( nullptr )
83-
, mUseZeroForTrans( false )
84-
, mLoadInQgis( false )
8579
{
8680
setupUi( this );
8781
QgsGui::instance()->enableAutoGeometryRestore( this );
@@ -285,7 +279,9 @@ void QgsGeoreferencerMainWindow::openRaster( const QString &fileName )
285279
mGCPpointsFileName = mRasterFileName + ".points";
286280
( void )loadGCPs();
287281

288-
mCanvas->setExtent( mLayer->extent() );
282+
if ( mLayer )
283+
mCanvas->setExtent( mLayer->extent() );
284+
289285
mCanvas->refresh();
290286
QgisApp::instance()->mapCanvas()->refresh();
291287

@@ -689,7 +685,7 @@ void QgsGeoreferencerMainWindow::showRasterPropertiesDialog()
689685
{
690686
if ( mLayer )
691687
{
692-
QgisApp::instance()->showLayerProperties( mLayer );
688+
QgisApp::instance()->showLayerProperties( mLayer.get() );
693689
}
694690
else
695691
{
@@ -734,7 +730,7 @@ void QgsGeoreferencerMainWindow::fullHistogramStretch()
734730

735731
void QgsGeoreferencerMainWindow::localHistogramStretch()
736732
{
737-
QgsRectangle rectangle = QgisApp::instance()->mapCanvas()->mapSettings().outputExtentToLayerExtent( mLayer, QgisApp::instance()->mapCanvas()->extent() );
733+
QgsRectangle rectangle = QgisApp::instance()->mapCanvas()->mapSettings().outputExtentToLayerExtent( mLayer.get(), QgisApp::instance()->mapCanvas()->extent() );
738734

739735
mLayer->setContrastEnhancement( QgsContrastEnhancement::StretchToMinimumMaximum, QgsRasterMinMaxOrigin::MinMax, rectangle );
740736
mCanvas->refresh();
@@ -867,28 +863,6 @@ void QgsGeoreferencerMainWindow::updateMouseCoordinatePrecision()
867863
mMousePrecisionDecimalPlaces = dp;
868864
}
869865

870-
void QgsGeoreferencerMainWindow::extentsChanged()
871-
{
872-
if ( mAgainAddRaster )
873-
{
874-
if ( QFile::exists( mRasterFileName ) )
875-
{
876-
addRaster( mRasterFileName );
877-
}
878-
else
879-
{
880-
mLayer = nullptr;
881-
mAgainAddRaster = false;
882-
}
883-
}
884-
}
885-
886-
// Registry layer QGis
887-
void QgsGeoreferencerMainWindow::layerWillBeRemoved( const QString &layerId )
888-
{
889-
mAgainAddRaster = mLayer && mLayer->id().compare( layerId ) == 0;
890-
}
891-
892866
// ------------------------------ private ---------------------------------- //
893867
// Gui
894868
void QgsGeoreferencerMainWindow::createActions()
@@ -1173,11 +1147,6 @@ void QgsGeoreferencerMainWindow::setupConnections()
11731147
// Connect status from ZoomLast/ZoomNext to corresponding action
11741148
connect( mCanvas, &QgsMapCanvas::zoomLastStatusChanged, mActionZoomLast, &QAction::setEnabled );
11751149
connect( mCanvas, &QgsMapCanvas::zoomNextStatusChanged, mActionZoomNext, &QAction::setEnabled );
1176-
// Connect when one Layer is removed - Case where change the Projetct in QGIS
1177-
connect( QgsProject::instance(), static_cast<void ( QgsProject::* )( const QString & )>( &QgsProject::layerWillBeRemoved ), this, &QgsGeoreferencerMainWindow::layerWillBeRemoved );
1178-
1179-
// Connect extents changed - Use for need add again Raster
1180-
connect( mCanvas, &QgsMapCanvas::extentsChanged, this, &QgsGeoreferencerMainWindow::extentsChanged );
11811150

11821151
// Connect mapCanvas rotation widget
11831152
connect( mRotationEdit, static_cast < void ( QgsDoubleSpinBox::* )( double ) > ( &QgsDoubleSpinBox::valueChanged ), this, &QgsGeoreferencerMainWindow::updateCanvasRotation );
@@ -1186,13 +1155,8 @@ void QgsGeoreferencerMainWindow::setupConnections()
11861155

11871156
void QgsGeoreferencerMainWindow::removeOldLayer()
11881157
{
1189-
// delete layer (and don't signal it as it's our private layer)
1190-
if ( mLayer )
1191-
{
1192-
QgsProject::instance()->removeMapLayers(
1193-
( QStringList() << mLayer->id() ) );
1194-
mLayer = nullptr;
1195-
}
1158+
mLayer.reset();
1159+
11961160
mCanvas->setLayers( QList<QgsMapLayer *>() );
11971161
mCanvas->clearCache();
11981162
mRotationEdit->clear();
@@ -1202,16 +1166,13 @@ void QgsGeoreferencerMainWindow::removeOldLayer()
12021166
// Mapcanvas Plugin
12031167
void QgsGeoreferencerMainWindow::addRaster( const QString &file )
12041168
{
1205-
mLayer = new QgsRasterLayer( file, QStringLiteral( "Raster" ) );
1206-
1207-
// so layer is not added to legend
1208-
QgsProject::instance()->addMapLayers(
1209-
QList<QgsMapLayer *>() << mLayer, false, false );
1169+
QgsRasterLayer::LayerOptions options;
1170+
// never prompt for a crs selection for the input raster!
1171+
options.skipCrsValidation = true;
1172+
mLayer = qgis::make_unique< QgsRasterLayer >( file, QStringLiteral( "Raster" ), QStringLiteral( "gdal" ), options );
12101173

12111174
// add layer to map canvas
1212-
mCanvas->setLayers( QList<QgsMapLayer *>() << mLayer );
1213-
1214-
mAgainAddRaster = false;
1175+
mCanvas->setLayers( QList<QgsMapLayer *>() << mLayer.get() );
12151176

12161177
mActionLocalHistogramStretch->setEnabled( true );
12171178
mActionFullHistogramStretch->setEnabled( true );

‎src/app/georeferencer/qgsgeorefmainwindow.h

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
#include "qgsimagewarper.h"
2020
#include "qgscoordinatereferencesystem.h"
2121

22+
#include <memory>
23+
2224
#include <QPointer>
2325

2426
class QAction;
@@ -118,11 +120,6 @@ class QgsGeoreferencerMainWindow : public QMainWindow, private Ui::QgsGeorefPlug
118120
void localHistogramStretch();
119121
void fullHistogramStretch();
120122

121-
122-
// when one Layer is removed
123-
void layerWillBeRemoved( const QString &layerId );
124-
void extentsChanged(); // Use for need add again Raster (case above)
125-
126123
bool updateGeorefTransform();
127124
void invalidateCanvasCoords();
128125

@@ -218,7 +215,7 @@ class QgsGeoreferencerMainWindow : public QMainWindow, private Ui::QgsGeorefPlug
218215
QLabel *mEPSG = nullptr;
219216
QLabel *mRotationLabel = nullptr;
220217
QgsDoubleSpinBox *mRotationEdit = nullptr;
221-
unsigned int mMousePrecisionDecimalPlaces;
218+
unsigned int mMousePrecisionDecimalPlaces = 0;
222219

223220
QString mRasterFileName;
224221
QString mModifiedRasterFileName;
@@ -232,16 +229,15 @@ class QgsGeoreferencerMainWindow : public QMainWindow, private Ui::QgsGeorefPlug
232229
QString mSaveGcp;
233230
double mUserResX, mUserResY; // User specified target scale
234231

235-
QgsGeorefTransform::TransformParametrisation mTransformParam;
232+
QgsGeorefTransform::TransformParametrisation mTransformParam = QgsGeorefTransform::InvalidTransform;
236233
QgsImageWarper::ResamplingMethod mResamplingMethod;
237234
QgsGeorefTransform mGeorefTransform;
238235
QString mCompressionMethod;
239236

240237
QgsGCPList mPoints;
241238
QgsGCPList mInitialPoints;
242239
QgsMapCanvas *mCanvas = nullptr;
243-
QgsRasterLayer *mLayer = nullptr;
244-
bool mAgainAddRaster;
240+
std::unique_ptr< QgsRasterLayer > mLayer;
245241

246242
QgsMapTool *mToolZoomIn = nullptr;
247243
QgsMapTool *mToolZoomOut = nullptr;
@@ -256,10 +252,10 @@ class QgsGeoreferencerMainWindow : public QMainWindow, private Ui::QgsGeorefPlug
256252
QgsGeorefDataPoint *mMovingPointQgis = nullptr;
257253
QPointer<QgsMapCoordsDialog> mMapCoordsDialog;
258254

259-
bool mUseZeroForTrans;
255+
bool mUseZeroForTrans = false;
260256
bool mExtentsChangedRecursionGuard;
261257
bool mGCPsDirty;
262-
bool mLoadInQgis;
258+
bool mLoadInQgis = false;
263259

264260

265261
QgsDockWidget *mDock = nullptr;

0 commit comments

Comments
 (0)
Please sign in to comment.