Skip to content

Commit e178ffc

Browse files
3nidsnyalldawson
authored andcommittedDec 15, 2017
modification to QgsDatumTransformationDialog to allow interaction with CRSs
1 parent f4eae28 commit e178ffc

File tree

6 files changed

+79
-41
lines changed

6 files changed

+79
-41
lines changed
 

‎src/app/qgisapp.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7021,12 +7021,13 @@ void QgisApp::saveAsVectorFileGeneral( QgsVectorLayer *vlayer, bool symbologyOpt
70217021
{
70227022
//ask user about datum transformation
70237023
QgsSettings settings;
7024-
QList< QList< int > > dt = QgsCoordinateTransform::datumTransformations( vlayer->crs(), destCRS );
7025-
if ( dt.size() > 1 && settings.value( QStringLiteral( "Projections/showDatumTransformDialog" ), false ).toBool() )
7024+
QgsDatumTransformDialog *dlg = new QgsDatumTransformDialog( vlayer->crs(), destCRS );
7025+
if ( dlg->availableTransformationCount() > 1 &&
7026+
settings.value( QStringLiteral( "Projections/showDatumTransformDialog" ), false ).toBool() )
70267027
{
7027-
QgsDatumTransformDialog d( dt );
7028-
d.exec();
7028+
dlg->exec();
70297029
}
7030+
delete dlg;
70307031
ct = QgsCoordinateTransform( vlayer->crs(), destCRS, QgsProject::instance() );
70317032
}
70327033

‎src/app/qgsprojectproperties.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "qgscomposer.h"
2626
#include "qgscoordinatetransform.h"
2727
#include "qgsdatumtransformtablemodel.h"
28+
#include "qgsdatumtransformdialog.h"
2829
#include "qgslayoutmanager.h"
2930
#include "qgslogger.h"
3031
#include "qgsmapcanvas.h"
@@ -156,15 +157,15 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas *mapCanvas, QWidget *pa
156157
projectionSelector->setCrs( QgsProject::instance()->crs() );
157158

158159
// Datum transforms
159-
QgsDatumTransformTableModel* datumTransformTableModel = new QgsDatumTransformTableModel(this);
160+
QgsDatumTransformTableModel *datumTransformTableModel = new QgsDatumTransformTableModel( this );
160161
QgsCoordinateTransformContext context = QgsProject::instance()->transformContext();
161-
datumTransformTableModel->setTransformContext(context);
162-
mDatumTransformTableView->setModel(datumTransformTableModel);
162+
datumTransformTableModel->setTransformContext( context );
163+
mDatumTransformTableView->setModel( datumTransformTableModel );
163164
mDatumTransformTableView->resizeColumnToContents( 0 );
164165
mDatumTransformTableView->horizontalHeader()->show();
165166
mDatumTransformTableView->setSelectionMode( QAbstractItemView::SingleSelection );
166167
mDatumTransformTableView->setSelectionBehavior( QAbstractItemView::SelectRows );
167-
connect(mDatumTransformAddButton, &QToolButton::clicked, this, &QgsProjectProperties::addDatumTransform);
168+
connect( mDatumTransformAddButton, &QToolButton::clicked, this, &QgsProjectProperties::addDatumTransform );
168169

169170
QPolygonF mainCanvasPoly = mapCanvas->mapSettings().visiblePolygon();
170171
QgsGeometry g = QgsGeometry::fromQPolygonF( mainCanvasPoly );
@@ -1224,12 +1225,16 @@ void QgsProjectProperties::apply()
12241225

12251226
void QgsProjectProperties::showProjectionsTab()
12261227
{
1227-
mOptionsListWidget->setCurrentRow( 1 );
1228+
mOptionsListWidget->setCurrentRow( 1 );
12281229
}
12291230

1230-
QgsProjectProperties::addDatumTransform()
1231+
void QgsProjectProperties::addDatumTransform()
12311232
{
1233+
QgsDatumTransformDialog *dlg = new QgsDatumTransformDialog();
1234+
if ( dlg->exec() )
1235+
{
12321236

1237+
}
12331238
}
12341239

12351240
void QgsProjectProperties::cbxWFSPubliedStateChanged( int aIdx )

‎src/app/qgsprojectproperties.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class APP_EXPORT QgsProjectProperties : public QgsOptionsDialogBase, private Ui:
7070
void showProjectionsTab();
7171

7272
//! add a new datum transform
73-
addDatumTransform();
73+
void addDatumTransform();
7474

7575
/**
7676
* Let the user add a scale to the list of project scales

‎src/gui/qgsdatumtransformdialog.cpp

Lines changed: 48 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,33 @@
1717

1818
#include "qgsdatumtransformdialog.h"
1919
#include "qgscoordinatetransform.h"
20+
#include "qgsprojectionselectiondialog.h"
2021
#include "qgslogger.h"
2122
#include "qgssettings.h"
2223
#include "qgsproject.h"
2324

2425
#include <QDir>
2526

26-
QgsDatumTransformDialog::QgsDatumTransformDialog( const QList< QList< int > > &dt, QWidget *parent, Qt::WindowFlags f )
27+
QgsDatumTransformDialog::QgsDatumTransformDialog( QgsCoordinateReferenceSystem sourceCrs,
28+
QgsCoordinateReferenceSystem destinationCrs,
29+
QWidget *parent, Qt::WindowFlags f )
2730
: QDialog( parent, f )
28-
, mDt( dt )
2931
{
3032
setupUi( this );
33+
3134
connect( mHideDeprecatedCheckBox, &QCheckBox::stateChanged, this, &QgsDatumTransformDialog::mHideDeprecatedCheckBox_stateChanged );
3235
connect( mDatumTransformTreeWidget, &QTreeWidget::currentItemChanged, this, &QgsDatumTransformDialog::mDatumTransformTreeWidget_currentItemChanged );
3336

37+
connect( mSourceCrsButton, &QPushButton::clicked, this, &QgsDatumTransformDialog::setSourceCrs );
38+
connect( mDstCrsButton, &QPushButton::clicked, this, &QgsDatumTransformDialog::setDestinationCrs );
39+
3440
connect( buttonBox, &QDialogButtonBox::accepted, this, &QgsDatumTransformDialog::accepted );
3541

42+
//get list of datum transforms
43+
mSourceCrs = sourceCrs;
44+
mDestinationCrs = destinationCrs;
45+
mDatumTransforms = QgsCoordinateTransform::datumTransformations( sourceCrs, destinationCrs );
46+
3647
QApplication::setOverrideCursor( Qt::ArrowCursor );
3748

3849
updateTitle();
@@ -59,8 +70,8 @@ void QgsDatumTransformDialog::load()
5970

6071
mDatumTransformTreeWidget->clear();
6172

62-
QList< QList< int > >::const_iterator it = mDt.constBegin();
63-
for ( ; it != mDt.constEnd(); ++it )
73+
QList< QList< int > >::const_iterator it = mDatumTransforms.constBegin();
74+
for ( ; it != mDatumTransforms.constEnd(); ++it )
6475
{
6576
QTreeWidgetItem *item = new QTreeWidgetItem();
6677
bool itemDisabled = false;
@@ -142,13 +153,12 @@ QgsDatumTransformDialog::~QgsDatumTransformDialog()
142153
QApplication::restoreOverrideCursor();
143154
}
144155

145-
void QgsDatumTransformDialog::setCrs( const QgsCoordinateReferenceSystem &source, const QgsCoordinateReferenceSystem &destination )
156+
int QgsDatumTransformDialog::availableTransformationCount()
146157
{
147-
mSrcCrs = source;
148-
mDestCrs = destination;
149-
updateTitle();
158+
return mDatumTransforms.count();
150159
}
151160

161+
152162
QList< int > QgsDatumTransformDialog::selectedDatumTransform()
153163
{
154164
QList<int> list;
@@ -244,7 +254,7 @@ void QgsDatumTransformDialog::mDatumTransformTreeWidget_currentItemChanged( QTre
244254

245255
void QgsDatumTransformDialog::accepted()
246256
{
247-
if ( !mSrcCrs.isValid() || !mDestCrs.isValid() )
257+
if ( !mSourceCrs.isValid() || !mDestinationCrs.isValid() )
248258
return;
249259

250260
int srcTransform = -1;
@@ -260,12 +270,38 @@ void QgsDatumTransformDialog::accepted()
260270
}
261271

262272
QgsCoordinateTransformContext context = QgsProject::instance()->transformContext();
263-
context.addSourceDestinationDatumTransform( mSrcCrs, mDestCrs, srcTransform, destTransform );
273+
context.addSourceDestinationDatumTransform( mSourceCrs, mDestinationCrs, srcTransform, destTransform );
264274
QgsProject::instance()->setTransformContext( context );
265275
}
266276

277+
void QgsDatumTransformDialog::setSourceCrs()
278+
{
279+
QgsProjectionSelectionDialog *mySelector = new QgsProjectionSelectionDialog( this );
280+
if ( mySelector->exec() )
281+
{
282+
mSourceCrs = mySelector->crs();
283+
updateTitle();
284+
mDatumTransforms = QgsCoordinateTransform::datumTransformations( mSourceCrs, mDestinationCrs );
285+
load();
286+
}
287+
delete mySelector;
288+
}
289+
290+
void QgsDatumTransformDialog::setDestinationCrs()
291+
{
292+
QgsProjectionSelectionDialog *mySelector = new QgsProjectionSelectionDialog( this );
293+
if ( mySelector->exec() )
294+
{
295+
mDestinationCrs = mySelector->crs();
296+
updateTitle();
297+
mDatumTransforms = QgsCoordinateTransform::datumTransformations( mSourceCrs, mDestinationCrs );
298+
load();
299+
}
300+
delete mySelector;
301+
}
302+
267303
void QgsDatumTransformDialog::updateTitle()
268304
{
269-
mSourceCrsButton->setText( QStringLiteral( "%1 - %2" ).arg( mSrcCrs.authid(), mSrcCrs.isValid() ? mSrcCrs.description() : tr( "unknown" ) ) );
270-
mDstCrsButton->setText( QStringLiteral( "%1 - %2" ).arg( mDestCrs.authid(), mDestCrs.isValid() ? mDestCrs.description() : tr( "unknown" ) ) );
305+
mSourceCrsButton->setText( QStringLiteral( "%1 - %2" ).arg( mSourceCrs.authid(), mSourceCrs.isValid() ? mSourceCrs.description() : tr( "unknown" ) ) );
306+
mDstCrsButton->setText( QStringLiteral( "%1 - %2" ).arg( mDestinationCrs.authid(), mDestinationCrs.isValid() ? mDestinationCrs.description() : tr( "unknown" ) ) );
271307
}

‎src/gui/qgsdatumtransformdialog.h

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,16 @@ class GUI_EXPORT QgsDatumTransformDialog : public QDialog, private Ui::QgsDatumT
3737
/**
3838
* Constructor for QgsDatumTransformDialog.
3939
*/
40-
QgsDatumTransformDialog( const QList< QList< int > > &dt, QWidget *parent = nullptr, Qt::WindowFlags f = nullptr );
40+
QgsDatumTransformDialog( QgsCoordinateReferenceSystem sourceCrs = QgsCoordinateReferenceSystem(),
41+
QgsCoordinateReferenceSystem destinationCrs = QgsCoordinateReferenceSystem(),
42+
QWidget *parent = nullptr, Qt::WindowFlags f = nullptr );
4143
~QgsDatumTransformDialog();
4244

4345
/**
44-
* Sets the \a source and \a destination coordinate reference systems.
45-
* \since QGIS 3.0
46+
* Returns the number of possible datum transformation for currently selected source and destination CRS
47+
* \since 3.0
4648
*/
47-
void setCrs( const QgsCoordinateReferenceSystem &source, const QgsCoordinateReferenceSystem &destination );
49+
int availableTransformationCount();
4850

4951
//! getter for selected datum transformations
5052
QList< int > selectedDatumTransform();
@@ -56,18 +58,19 @@ class GUI_EXPORT QgsDatumTransformDialog : public QDialog, private Ui::QgsDatumT
5658
void mHideDeprecatedCheckBox_stateChanged( int state );
5759
void mDatumTransformTreeWidget_currentItemChanged( QTreeWidgetItem *, QTreeWidgetItem * );
5860
void accepted();
61+
void setSourceCrs();
62+
void setDestinationCrs();
5963

6064
private:
61-
QgsDatumTransformDialog();
6265
void updateTitle();
6366
bool gridShiftTransformation( const QString &itemText ) const;
6467
//! Returns false if the location of the grid shift files is known (PROJ_LIB) and the shift file is not there
6568
bool testGridShiftFileAvailability( QTreeWidgetItem *item, int col ) const;
6669
void load();
6770

68-
QList< QList< int > > mDt;
69-
QgsCoordinateReferenceSystem mSrcCrs;
70-
QgsCoordinateReferenceSystem mDestCrs;
71+
QList< QList< int > > mDatumTransforms;
72+
QgsCoordinateReferenceSystem mSourceCrs;
73+
QgsCoordinateReferenceSystem mDestinationCrs;
7174
};
7275

7376
#endif // QGSDATUMTRANSFORMDIALOG_H

‎src/gui/qgsmapcanvas.cpp

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2086,17 +2086,10 @@ void QgsMapCanvas::getDatumTransformInfo( const QgsCoordinateReferenceSystem &so
20862086
return;
20872087
}
20882088

2089-
//get list of datum transforms
2090-
const QList< QList< int > > dt = QgsCoordinateTransform::datumTransformations( source, destination );
2091-
if ( dt.size() < 2 )
2092-
{
2093-
return;
2094-
}
2095-
20962089
//if several possibilities: present dialog
2097-
QgsDatumTransformDialog d( dt );
2098-
d.setCrs( source, destination );
2099-
d.exec();
2090+
QgsDatumTransformDialog d( source, destination );
2091+
if ( d.availableTransformationCount() > 1 )
2092+
d.exec();
21002093
}
21012094

21022095
void QgsMapCanvas::zoomByFactor( double scaleFactor, const QgsPointXY *center )

0 commit comments

Comments
 (0)
Please sign in to comment.