mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-19 00:04:52 -04:00
Show a warning when loading a project with a transform not available locally
This commit is contained in:
parent
6ff744a3b3
commit
96c2ce18bd
@ -137,10 +137,15 @@ class QgsCoordinateTransformContext
|
|||||||
:rtype: QgsCoordinateTransform.TransformPair
|
:rtype: QgsCoordinateTransform.TransformPair
|
||||||
%End
|
%End
|
||||||
|
|
||||||
void readXml( const QDomElement &element, const QgsReadWriteContext &context );
|
bool readXml( const QDomElement &element, const QgsReadWriteContext &context, QStringList &missingTransforms /Out/ );
|
||||||
%Docstring
|
%Docstring
|
||||||
Reads the context's state from a DOM ``element``.
|
Reads the context's state from a DOM ``element``.
|
||||||
|
|
||||||
|
Returns false if transforms stored in the XML are not available. In this case ``missingTransforms`` will be
|
||||||
|
filled with missing datum transform strings.
|
||||||
|
|
||||||
.. seealso:: :py:func:`writeXml()`
|
.. seealso:: :py:func:`writeXml()`
|
||||||
|
:rtype: bool
|
||||||
%End
|
%End
|
||||||
|
|
||||||
void writeXml( QDomElement &element, const QgsReadWriteContext &context ) const;
|
void writeXml( QDomElement &element, const QgsReadWriteContext &context ) const;
|
||||||
|
@ -943,6 +943,12 @@ emitted whenever the configuration for snapping has changed
|
|||||||
|
|
||||||
.. versionadded:: 3.0
|
.. versionadded:: 3.0
|
||||||
.. seealso:: :py:func:`transformContext()`
|
.. seealso:: :py:func:`transformContext()`
|
||||||
|
%End
|
||||||
|
|
||||||
|
void missingDatumTransforms( const QStringList &missingTransforms );
|
||||||
|
%Docstring
|
||||||
|
Emitted when datum transforms stored in the project are not available locally.
|
||||||
|
.. versionadded:: 3.0
|
||||||
%End
|
%End
|
||||||
|
|
||||||
void transactionGroupsChanged();
|
void transactionGroupsChanged();
|
||||||
|
@ -3186,6 +3186,12 @@ void QgisApp::setupConnections()
|
|||||||
// project crs connections
|
// project crs connections
|
||||||
connect( QgsProject::instance(), &QgsProject::crsChanged, this, &QgisApp::projectCrsChanged );
|
connect( QgsProject::instance(), &QgsProject::crsChanged, this, &QgisApp::projectCrsChanged );
|
||||||
|
|
||||||
|
connect( QgsProject::instance(), &QgsProject::missingDatumTransforms, this, [ = ]( const QStringList & transforms )
|
||||||
|
{
|
||||||
|
QString message = tr( "Transforms are not installed: %1 " ).arg( transforms.join( QStringLiteral( " ," ) ) );
|
||||||
|
messageBar()->pushWarning( tr( "Missing datum transforms" ), message );
|
||||||
|
} );
|
||||||
|
|
||||||
connect( QgsProject::instance(), &QgsProject::labelingEngineSettingsChanged,
|
connect( QgsProject::instance(), &QgsProject::labelingEngineSettingsChanged,
|
||||||
this, [ = ]
|
this, [ = ]
|
||||||
{
|
{
|
||||||
|
@ -161,7 +161,7 @@ QgsCoordinateTransform::TransformPair QgsCoordinateTransformContext::calculateDa
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void QgsCoordinateTransformContext::readXml( const QDomElement &element, const QgsReadWriteContext & )
|
bool QgsCoordinateTransformContext::readXml( const QDomElement &element, const QgsReadWriteContext &, QStringList &missingTransforms )
|
||||||
{
|
{
|
||||||
d.detach();
|
d.detach();
|
||||||
d->mLock.lockForWrite();
|
d->mLock.lockForWrite();
|
||||||
@ -176,9 +176,12 @@ void QgsCoordinateTransformContext::readXml( const QDomElement &element, const Q
|
|||||||
if ( contextNodes.count() < 1 )
|
if ( contextNodes.count() < 1 )
|
||||||
{
|
{
|
||||||
d->mLock.unlock();
|
d->mLock.unlock();
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
missingTransforms.clear();
|
||||||
|
bool result = true;
|
||||||
|
|
||||||
const QDomElement contextElem = contextNodes.at( 0 ).toElement();
|
const QDomElement contextElem = contextNodes.at( 0 ).toElement();
|
||||||
|
|
||||||
// src/dest transforms
|
// src/dest transforms
|
||||||
@ -194,11 +197,26 @@ void QgsCoordinateTransformContext::readXml( const QDomElement &element, const Q
|
|||||||
|
|
||||||
int datumId1 = -1;
|
int datumId1 = -1;
|
||||||
int datumId2 = -1;
|
int datumId2 = -1;
|
||||||
|
//warn if value1 or value2 is non-empty, yet no matching transform was found
|
||||||
if ( !value1.isEmpty() )
|
if ( !value1.isEmpty() )
|
||||||
|
{
|
||||||
datumId1 = QgsCoordinateTransform::projStringToDatumTransformId( value1 );
|
datumId1 = QgsCoordinateTransform::projStringToDatumTransformId( value1 );
|
||||||
|
if ( datumId1 < 0 )
|
||||||
|
{
|
||||||
|
result = false;
|
||||||
|
missingTransforms << value1;
|
||||||
|
}
|
||||||
|
}
|
||||||
if ( !value2.isEmpty() )
|
if ( !value2.isEmpty() )
|
||||||
|
{
|
||||||
datumId2 = QgsCoordinateTransform::projStringToDatumTransformId( value2 );
|
datumId2 = QgsCoordinateTransform::projStringToDatumTransformId( value2 );
|
||||||
//TODO - throw warning if value1 or value2 is non-empty, yet no matching transform was found
|
if ( datumId2 < 0 )
|
||||||
|
{
|
||||||
|
result = false;
|
||||||
|
missingTransforms << value2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
d->mSourceDestDatumTransforms.insert( qMakePair( key1, key2 ), QgsCoordinateTransform::TransformPair( datumId1, datumId2 ) );
|
d->mSourceDestDatumTransforms.insert( qMakePair( key1, key2 ), QgsCoordinateTransform::TransformPair( datumId1, datumId2 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,6 +253,7 @@ void QgsCoordinateTransformContext::readXml( const QDomElement &element, const Q
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
d->mLock.unlock();
|
d->mLock.unlock();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QgsCoordinateTransformContext::writeXml( QDomElement &element, const QgsReadWriteContext & ) const
|
void QgsCoordinateTransformContext::writeXml( QDomElement &element, const QgsReadWriteContext & ) const
|
||||||
|
@ -233,9 +233,13 @@ class CORE_EXPORT QgsCoordinateTransformContext
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads the context's state from a DOM \a element.
|
* Reads the context's state from a DOM \a element.
|
||||||
|
*
|
||||||
|
* Returns false if transforms stored in the XML are not available. In this case \a missingTransforms will be
|
||||||
|
* filled with missing datum transform strings.
|
||||||
|
*
|
||||||
* \see writeXml()
|
* \see writeXml()
|
||||||
*/
|
*/
|
||||||
void readXml( const QDomElement &element, const QgsReadWriteContext &context );
|
bool readXml( const QDomElement &element, const QgsReadWriteContext &context, QStringList &missingTransforms SIP_OUT );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes the context's state to a DOM \a element.
|
* Writes the context's state to a DOM \a element.
|
||||||
|
@ -925,7 +925,11 @@ bool QgsProject::readProjectFile( const QString &filename )
|
|||||||
}
|
}
|
||||||
mCrs = projectCrs;
|
mCrs = projectCrs;
|
||||||
|
|
||||||
mTransformContext.readXml( doc->documentElement(), context );
|
QStringList datumErrors;
|
||||||
|
if ( !mTransformContext.readXml( doc->documentElement(), context, datumErrors ) )
|
||||||
|
{
|
||||||
|
emit missingDatumTransforms( datumErrors );
|
||||||
|
}
|
||||||
emit transformContextChanged();
|
emit transformContextChanged();
|
||||||
|
|
||||||
QDomNodeList nl = doc->elementsByTagName( QStringLiteral( "autotransaction" ) );
|
QDomNodeList nl = doc->elementsByTagName( QStringLiteral( "autotransaction" ) );
|
||||||
|
@ -933,6 +933,12 @@ class CORE_EXPORT QgsProject : public QObject, public QgsExpressionContextGenera
|
|||||||
*/
|
*/
|
||||||
void transformContextChanged();
|
void transformContextChanged();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Emitted when datum transforms stored in the project are not available locally.
|
||||||
|
* \since QGIS 3.0
|
||||||
|
*/
|
||||||
|
void missingDatumTransforms( const QStringList &missingTransforms );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emitted whenever a new transaction group has been created or a
|
* Emitted whenever a new transaction group has been created or a
|
||||||
* transaction group has been removed.
|
* transaction group has been removed.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user