36#include "moc_qgsdatumtransformdialog.cpp"
38using namespace Qt::StringLiterals;
42 if ( sourceCrs == destinationCrs )
51 QgsDatumTransformDialog dlg( sourceCrs, destinationCrs,
false,
true,
false, qMakePair( -1, -1 ), parent, Qt::WindowFlags(), QString(), mapCanvas );
52 if ( !windowTitle.isEmpty() )
53 dlg.setWindowTitle( windowTitle );
55 if ( dlg.shouldAskUserForSelection() )
75 dlg.applyDefaultTransform();
83 const bool allowCrsChanges,
84 const bool showMakeDefault,
85 const bool forceChoice,
86 QPair<int, int> selectedDatumTransforms,
89 const QString &selectedProj,
93 : QDialog( parent, f )
103 if ( !showMakeDefault )
104 mCoordinateOperationsWidget->setShowMakeDefault(
false );
108 mButtonBox->removeButton( mButtonBox->button( QDialogButtonBox::Cancel ) );
109 setWindowFlags( windowFlags() | Qt::CustomizeWindowHint );
110 setWindowFlags( windowFlags() & ~Qt::WindowCloseButtonHint );
117 if ( !destinationCrs.
isValid() )
119 if ( !destinationCrs.
isValid() )
125 mSourceProjectionSelectionWidget->setCrs( sourceCrs );
126 mDestinationProjectionSelectionWidget->setCrs( destinationCrs );
127 if ( !allowCrsChanges )
129 mCrsStackedWidget->setCurrentIndex( 1 );
130 mSourceProjectionSelectionWidget->setEnabled(
false );
131 mDestinationProjectionSelectionWidget->setEnabled(
false );
136 mCoordinateOperationsWidget->setMapCanvas( mapCanvas );
141 mCoordinateOperationsWidget->setSourceCrs( sourceCrs );
142 mCoordinateOperationsWidget->setDestinationCrs( destinationCrs );
144 connect( mButtonBox, &QDialogButtonBox::helpRequested,
this, [] {
QgsHelp::openHelp( u
"working_with_projections/working_with_projections.html"_s ); } );
148 deets.
proj = selectedProj;
152 mCoordinateOperationsWidget->setSelectedOperation( deets );
155 if ( mCoordinateOperationsWidget->sourceCrs().isValid() && mCoordinateOperationsWidget->destinationCrs().isValid() && mCoordinateOperationsWidget->selectedOperation().isAvailable )
160void QgsDatumTransformDialog::setOKButtonEnabled()
162 mButtonBox->button( QDialogButtonBox::Ok )
163 ->setEnabled( mCoordinateOperationsWidget->sourceCrs().isValid() && mCoordinateOperationsWidget->destinationCrs().isValid() && mCoordinateOperationsWidget->selectedOperation().isAvailable );
168 if ( mCoordinateOperationsWidget->makeDefaultSelected() && mCoordinateOperationsWidget->hasSelection() )
178 QString sourceDatumProj;
180 if ( sourceDatumTransform >= 0 )
183 QString destinationDatumProj;
184 if ( destinationDatumTransform >= 0 )
187 settings.
setValue( srcAuthId + u
"//"_s + destAuthId + u
"_srcTransform"_s, sourceDatumProj );
188 settings.
setValue( srcAuthId + u
"//"_s + destAuthId + u
"_destTransform"_s, destinationDatumProj );
189 settings.
setValue( srcAuthId + u
"//"_s + destAuthId + u
"_coordinateOp"_s, dt.
proj );
197 if ( !mButtonBox->button( QDialogButtonBox::Cancel ) )
203bool QgsDatumTransformDialog::shouldAskUserForSelection()
const
205 if ( mCoordinateOperationsWidget->availableOperations().count() > 1 )
216 preferred.
sourceCrs = mCoordinateOperationsWidget->sourceCrs();
217 preferred.destinationCrs = mCoordinateOperationsWidget->destinationCrs();
218 const QgsCoordinateOperationWidget::OperationDetails defaultOp = mCoordinateOperationsWidget->defaultOperation();
221 preferred.proj = defaultOp.
proj;
225void QgsDatumTransformDialog::applyDefaultTransform()
227 if ( mCoordinateOperationsWidget->availableOperations().count() > 0 )
245 sdt.
sourceCrs = mCoordinateOperationsWidget->sourceCrs();
246 sdt.
destinationCrs = mCoordinateOperationsWidget->destinationCrs();
254bool QgsDatumTransformDialog::gridShiftTransformation(
const QString &itemText )
const
256 return !itemText.isEmpty() && !itemText.contains(
"towgs84"_L1, Qt::CaseInsensitive );
259void QgsDatumTransformDialog::operationChanged()
261 setOKButtonEnabled();
266 mCoordinateOperationsWidget->setSourceCrs( sourceCrs );
267 setOKButtonEnabled();
272 mCoordinateOperationsWidget->setDestinationCrs( destinationCrs );
273 setOKButtonEnabled();
Represents a coordinate reference system (CRS).
bool isValid() const
Returns whether this CRS is correctly initialized and usable.
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...
Stores settings for use within QGIS.
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