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,
nullptr, 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 )
221 preferred.
sourceCrs = mCoordinateOperationsWidget->sourceCrs();
222 preferred.
destinationCrs = mCoordinateOperationsWidget->destinationCrs();
230 void QgsDatumTransformDialog::applyDefaultTransform()
232 if ( mCoordinateOperationsWidget->availableOperations().count() > 0 )
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();
void removeCoordinateOperation(const QgsCoordinateReferenceSystem &sourceCrs, const QgsCoordinateReferenceSystem &destinationCrs)
Removes the coordinate operation for the specified sourceCrs and destinationCrs.
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.
#define Q_NOWARN_DEPRECATED_PUSH
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...
Map canvas is a class for displaying all GIS data types on a canvas.
QgsCoordinateReferenceSystem 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...
QgsCoordinateTransformContext transformContext
void beginGroup(const QString &prefix, QgsSettings::Section section=QgsSettings::NoSection)
Appends prefix to the current group.
#define Q_NOWARN_DEPRECATED_POP
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
static QgsProject * instance()
Returns the QgsProject singleton instance.
This class represents a coordinate reference system (CRS).
void setTransformContext(const QgsCoordinateTransformContext &context)
Sets the project's coordinate transform context, which stores various information regarding which dat...
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.
Temporarily removes all cursor overrides for the QApplication for the lifetime of the object...
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...
QString authid() const
Returns the authority identifier for the CRS.
bool isValid() const
Returns whether this CRS is correctly initialized and usable.