29 #include <QPushButton>
31 #if PROJ_VERSION_MAJOR>=6
38 if ( sourceCrs == destinationCrs )
47 QgsDatumTransformDialog dlg( sourceCrs, destinationCrs,
false,
true,
false, qMakePair( -1, -1 ), parent, Qt::WindowFlags(), QString(), mapCanvas );
48 if ( !windowTitle.isEmpty() )
49 dlg.setWindowTitle( windowTitle );
51 if ( dlg.shouldAskUserForSelection() )
71 dlg.applyDefaultTransform();
78 QPair<int, int> selectedDatumTransforms,
80 Qt::WindowFlags f,
const QString &selectedProj,
QgsMapCanvas *mapCanvas,
bool allowFallback )
81 : QDialog( parent, f )
91 if ( !showMakeDefault )
92 mCoordinateOperationsWidget->setShowMakeDefault(
false );
96 mButtonBox->removeButton( mButtonBox->button( QDialogButtonBox::Cancel ) );
97 setWindowFlags( windowFlags() | Qt::CustomizeWindowHint );
98 setWindowFlags( windowFlags() & ~Qt::WindowCloseButtonHint );
101 #if PROJ_VERSION_MAJOR>=6
106 if ( !destinationCrs.
isValid() )
108 if ( !destinationCrs.
isValid() )
115 mSourceProjectionSelectionWidget->setCrs( sourceCrs );
116 mDestinationProjectionSelectionWidget->setCrs( destinationCrs );
117 if ( !allowCrsChanges )
119 mCrsStackedWidget->setCurrentIndex( 1 );
120 mSourceProjectionSelectionWidget->setEnabled(
false );
121 mDestinationProjectionSelectionWidget->setEnabled(
false );
126 mCoordinateOperationsWidget->setMapCanvas( mapCanvas );
131 mCoordinateOperationsWidget->setSourceCrs( sourceCrs );
132 mCoordinateOperationsWidget->setDestinationCrs( destinationCrs );
134 connect( mButtonBox, &QDialogButtonBox::helpRequested,
this, [ = ]
136 QgsHelp::openHelp( QStringLiteral(
"working_with_projections/working_with_projections.html" ) );
141 deets.
proj = selectedProj;
145 mCoordinateOperationsWidget->setSelectedOperation( deets );
150 #if PROJ_VERSION_MAJOR>=6
151 if ( mCoordinateOperationsWidget->sourceCrs().isValid() && mCoordinateOperationsWidget->destinationCrs().isValid()
152 && mCoordinateOperationsWidget->selectedOperation().isAvailable )
155 if ( mCoordinateOperationsWidget->sourceCrs().isValid() && mCoordinateOperationsWidget->destinationCrs().isValid() && mCoordinateOperationsWidget->hasSelection() )
161 void QgsDatumTransformDialog::setOKButtonEnabled()
163 #if PROJ_VERSION_MAJOR>=6
164 mButtonBox->button( QDialogButtonBox::Ok )->setEnabled( mCoordinateOperationsWidget->sourceCrs().isValid() && mCoordinateOperationsWidget->destinationCrs().isValid()
165 && mCoordinateOperationsWidget->selectedOperation().isAvailable );
167 mButtonBox->button( QDialogButtonBox::Ok )->setEnabled( mCoordinateOperationsWidget->sourceCrs().isValid() && mCoordinateOperationsWidget->destinationCrs().isValid() && mCoordinateOperationsWidget->hasSelection() );
173 if ( mCoordinateOperationsWidget->makeDefaultSelected() && mCoordinateOperationsWidget->hasSelection() )
176 settings.
beginGroup( QStringLiteral(
"/Projections" ) );
183 QString sourceDatumProj;
185 if ( sourceDatumTransform >= 0 )
188 QString destinationDatumProj;
189 if ( destinationDatumTransform >= 0 )
192 settings.
setValue( srcAuthId + QStringLiteral(
"//" ) + destAuthId + QStringLiteral(
"_srcTransform" ), sourceDatumProj );
193 settings.
setValue( srcAuthId + QStringLiteral(
"//" ) + destAuthId + QStringLiteral(
"_destTransform" ), destinationDatumProj );
194 settings.
setValue( srcAuthId + QStringLiteral(
"//" ) + destAuthId + QStringLiteral(
"_coordinateOp" ), dt.
proj );
195 settings.
setValue( srcAuthId + QStringLiteral(
"//" ) + destAuthId + QStringLiteral(
"_allowFallback" ), dt.
allowFallback );
202 if ( !mButtonBox->button( QDialogButtonBox::Cancel ) )
208 bool QgsDatumTransformDialog::shouldAskUserForSelection()
const
210 if ( mCoordinateOperationsWidget->availableOperations().count() > 1 )
220 TransformInfo preferred;
221 preferred.
sourceCrs = mCoordinateOperationsWidget->sourceCrs();
222 preferred.destinationCrs = mCoordinateOperationsWidget->destinationCrs();
226 preferred.proj = defaultOp.
proj;
230 void QgsDatumTransformDialog::applyDefaultTransform()
232 if ( mCoordinateOperationsWidget->availableOperations().count() > 0 )
235 const TransformInfo dt = defaultDatumTransform();
240 #if PROJ_VERSION_MAJOR>=6
254 sdt.
sourceCrs = mCoordinateOperationsWidget->sourceCrs();
255 sdt.
destinationCrs = mCoordinateOperationsWidget->destinationCrs();
263 bool QgsDatumTransformDialog::gridShiftTransformation(
const QString &itemText )
const
265 return !itemText.isEmpty() && !itemText.contains( QLatin1String(
"towgs84" ), Qt::CaseInsensitive );
268 void QgsDatumTransformDialog::operationChanged()
270 setOKButtonEnabled();
275 mCoordinateOperationsWidget->setSourceCrs( sourceCrs );
276 setOKButtonEnabled();
281 mCoordinateOperationsWidget->setDestinationCrs( destinationCrs );
282 setOKButtonEnabled();
This class represents a coordinate reference system (CRS).
bool isValid() const
Returns whether this CRS is correctly initialized and usable.
QString authid() const
Returns the authority identifier for the CRS.
Contains information about the context in which a coordinate transform is executed.
Q_DECL_DEPRECATED bool addSourceDestinationDatumTransform(const QgsCoordinateReferenceSystem &sourceCrs, const QgsCoordinateReferenceSystem &destinationCrs, int sourceTransformId, int destinationTransformId)
Adds a new sourceTransform and destinationTransform to use when projecting coordinates from the speci...
bool addCoordinateOperation(const QgsCoordinateReferenceSystem &sourceCrs, const QgsCoordinateReferenceSystem &destinationCrs, const QString &coordinateOperationProjString, bool allowFallback=true)
Adds a new coordinateOperationProjString to use when projecting coordinates from the specified source...
void removeCoordinateOperation(const QgsCoordinateReferenceSystem &sourceCrs, const QgsCoordinateReferenceSystem &destinationCrs)
Removes the coordinate operation for the specified sourceCrs and destinationCrs.
bool hasTransform(const QgsCoordinateReferenceSystem &source, const QgsCoordinateReferenceSystem &destination) const
Returns true if the context has a valid coordinate operation to use when transforming from the specif...
static void enableAutoGeometryRestore(QWidget *widget, const QString &key=QString())
Register the widget to allow its position to be automatically saved and restored when open and closed...
static void openHelp(const QString &key)
Opens help topic for the given help key using default system web browser.
Map canvas is a class for displaying all GIS data types on a canvas.
static QgsProject * instance()
Returns the QgsProject singleton instance.
QgsCoordinateTransformContext transformContext
QgsCoordinateReferenceSystem crs
void setTransformContext(const QgsCoordinateTransformContext &context)
Sets the project's coordinate transform context, which stores various information regarding which dat...
This class is a composition of two QSettings instances:
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
void beginGroup(const QString &prefix, QgsSettings::Section section=QgsSettings::NoSection)
Appends prefix to the current group.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
Temporarily removes all cursor overrides for the QApplication for the lifetime of the object.
#define Q_NOWARN_DEPRECATED_POP
#define Q_NOWARN_DEPRECATED_PUSH