Skip to content

Commit

Permalink
[georeferencer] Improve projection logic, default to raster projection
Browse files Browse the repository at this point in the history
  • Loading branch information
nirvn committed Dec 8, 2020
1 parent 27b4062 commit d5933f2
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 29 deletions.
12 changes: 6 additions & 6 deletions src/app/georeferencer/qgsgeorefmainwindow.cpp
Expand Up @@ -543,8 +543,7 @@ void QgsGeoreferencerMainWindow::linkGeorefToQgis( bool link )
void QgsGeoreferencerMainWindow::addPoint( const QgsPointXY &pixelCoords, const QgsPointXY &mapCoords, const QgsCoordinateReferenceSystem &crs,
bool enable, bool finalize )
{
QgsGeorefDataPoint *pnt = new QgsGeorefDataPoint( mCanvas, QgisApp::instance()->mapCanvas(),
pixelCoords, mapCoords, QgsCoordinateReferenceSystem( crs ), enable );
QgsGeorefDataPoint *pnt = new QgsGeorefDataPoint( mCanvas, QgisApp::instance()->mapCanvas(), pixelCoords, mapCoords, crs, enable );
mPoints.append( pnt );
mGCPsDirty = true;
if ( finalize )
Expand Down Expand Up @@ -635,10 +634,11 @@ void QgsGeoreferencerMainWindow::showCoordDialog( const QgsPointXY &pixelCoords
{
if ( mLayer && !mMapCoordsDialog )
{
mMapCoordsDialog = new QgsMapCoordsDialog( QgisApp::instance()->mapCanvas(), pixelCoords, this );
connect( mMapCoordsDialog, &QgsMapCoordsDialog::pointAdded, this,
[this]( const QgsPointXY & a, const QgsPointXY & b, const QgsCoordinateReferenceSystem & crs ) { this->addPoint( a, b, crs ); }
);
mMapCoordsDialog = new QgsMapCoordsDialog( QgisApp::instance()->mapCanvas(), pixelCoords, mProjection, this );
connect( mMapCoordsDialog, &QgsMapCoordsDialog::pointAdded, this, [ = ]( const QgsPointXY & a, const QgsPointXY & b, const QgsCoordinateReferenceSystem & crs )
{
addPoint( a, b, crs );
} );
mMapCoordsDialog->show();
}
}
Expand Down
27 changes: 9 additions & 18 deletions src/app/georeferencer/qgsmapcoordsdialog.cpp
Expand Up @@ -25,9 +25,10 @@
#include "qgsprojectionselectionwidget.h"
#include "qgsproject.h"

QgsMapCoordsDialog::QgsMapCoordsDialog( QgsMapCanvas *qgisCanvas, const QgsPointXY &pixelCoords, QWidget *parent )
QgsMapCoordsDialog::QgsMapCoordsDialog( QgsMapCanvas *qgisCanvas, const QgsPointXY &pixelCoords, QgsCoordinateReferenceSystem &rasterCrs, QWidget *parent )
: QDialog( parent, Qt::Dialog )
, mQgisCanvas( qgisCanvas )
, mRasterCrs( rasterCrs )
, mPixelCoords( pixelCoords )
{
setupUi( this );
Expand Down Expand Up @@ -61,7 +62,9 @@ QgsMapCoordsDialog::QgsMapCoordsDialog( QgsMapCanvas *qgisCanvas, const QgsPoint

connect( leXCoord, &QLineEdit::textChanged, this, &QgsMapCoordsDialog::updateOK );
connect( leYCoord, &QLineEdit::textChanged, this, &QgsMapCoordsDialog::updateOK );
connect( mProjSelect, &QgsProjectionSelectionWidget::crsChanged, this, &QgsMapCoordsDialog::updateCrs );

mProjectionSelector->setCrs( mRasterCrs );

updateOK();
}

Expand Down Expand Up @@ -96,14 +99,7 @@ void QgsMapCoordsDialog::buttonBox_accepted()
if ( !ok )
y = dmsToDD( leYCoord->text() );

if ( !mCrs.isValid() )
{
if ( mProjSelect->crs().isValid() )
mCrs = mProjSelect->crs();
else
mCrs = mQgisCanvas->mapSettings().destinationCrs();
}
emit pointAdded( mPixelCoords, QgsPointXY( x, y ), mCrs );
emit pointAdded( mPixelCoords, QgsPointXY( x, y ), mProjectionSelector->crs().isValid() ? mProjectionSelector->crs() : mRasterCrs );
close();
}

Expand All @@ -126,8 +122,9 @@ void QgsMapCoordsDialog::maybeSetXY( const QgsPointXY &xy, Qt::MouseButton butto
parentWidget()->activateWindow();
parentWidget()->raise();

if ( !mProjSelect->crs().isValid() )
mProjSelect->setCrs( mQgisCanvas->mapSettings().destinationCrs() );
// set CRS to match canvas' point coordinates
mProjectionSelector->setCrs( mQgisCanvas->mapSettings().destinationCrs() );

mPointFromCanvasPushButton->setChecked( false );
buttonBox->button( QDialogButtonBox::Ok )->setFocus();
activateWindow();
Expand Down Expand Up @@ -176,12 +173,6 @@ double QgsMapCoordsDialog::dmsToDD( const QString &dms )
return res;
}

void QgsMapCoordsDialog::updateCrs( const QgsCoordinateReferenceSystem &crs )
{
if ( crs.isValid() )
mCrs = QgsCoordinateReferenceSystem( crs );
}

QgsGeorefMapToolEmitPoint::QgsGeorefMapToolEmitPoint( QgsMapCanvas *canvas )
: QgsMapTool( canvas )
{
Expand Down
7 changes: 3 additions & 4 deletions src/app/georeferencer/qgsmapcoordsdialog.h
Expand Up @@ -59,7 +59,7 @@ class QgsMapCoordsDialog : public QDialog, private Ui::QgsMapCoordsDialogBase
Q_OBJECT

public:
QgsMapCoordsDialog( QgsMapCanvas *qgisCanvas, const QgsPointXY &pixelCoords, QWidget *parent = nullptr );
QgsMapCoordsDialog( QgsMapCanvas *qgisCanvas, const QgsPointXY &pixelCoords, QgsCoordinateReferenceSystem &rasterCrs, QWidget *parent = nullptr );
~QgsMapCoordsDialog() override;

private slots:
Expand All @@ -70,10 +70,9 @@ class QgsMapCoordsDialog : public QDialog, private Ui::QgsMapCoordsDialogBase
void maybeSetXY( const QgsPointXY &, Qt::MouseButton );
void updateOK();
void setPrevTool();
void updateCrs( const QgsCoordinateReferenceSystem &crs );

signals:
void pointAdded( const QgsPointXY &, const QgsPointXY &, const QgsCoordinateReferenceSystem & );
void pointAdded( const QgsPointXY &a, const QgsPointXY &b, const QgsCoordinateReferenceSystem &crs );

private:
double dmsToDD( const QString &dms );
Expand All @@ -86,7 +85,7 @@ class QgsMapCoordsDialog : public QDialog, private Ui::QgsMapCoordsDialogBase
QgsMapTool *mPrevMapTool = nullptr;
QgsMapCanvas *mQgisCanvas = nullptr;

QgsCoordinateReferenceSystem mCrs;
QgsCoordinateReferenceSystem mRasterCrs;

QgsPointXY mPixelCoords;
};
Expand Down
2 changes: 1 addition & 1 deletion src/ui/georeferencer/qgsmapcoordsdialogbase.ui
Expand Up @@ -54,7 +54,7 @@
</layout>
</item>
<item>
<widget class="QgsProjectionSelectionWidget" name="mProjSelect" native="true">
<widget class="QgsProjectionSelectionWidget" name="mProjectionSelector" native="true">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
Expand Down

0 comments on commit d5933f2

Please sign in to comment.