Move datum transform structs out to their own header, to avoid

need to include private header file
This commit is contained in:
Nyall Dawson 2017-12-18 18:38:56 +10:00
parent 1c7e140263
commit 25c3e135b0
17 changed files with 326 additions and 259 deletions

View File

@ -30,6 +30,7 @@
%Include qgsdataitemproviderregistry.sip %Include qgsdataitemproviderregistry.sip
%Include qgsdatasourceuri.sip %Include qgsdatasourceuri.sip
%Include qgsdatetimestatisticalsummary.sip %Include qgsdatetimestatisticalsummary.sip
%Include qgsdatumtransform.sip
%Include qgsdbfilterproxymodel.sip %Include qgsdbfilterproxymodel.sip
%Include qgsdefaultvalue.sip %Include qgsdefaultvalue.sip
%Include qgsdiagramrenderer.sip %Include qgsdiagramrenderer.sip

View File

@ -254,36 +254,7 @@ otherwise points are transformed from destination to source CRS.
Returns true if the transform short circuits because the source and destination are equivalent. Returns true if the transform short circuits because the source and destination are equivalent.
%End %End
struct TransformPair static QList< QgsDatumTransform::TransformPair > datumTransformations( const QgsCoordinateReferenceSystem &source, const QgsCoordinateReferenceSystem &destination );
{
TransformPair( int sourceTransformId = -1, int destinationTransformId = -1 );
%Docstring
Constructor for a TransformPair with the specified ``sourceTransformId``
and ``destinationTransformId`` transforms.
%End
int sourceTransformId;
%Docstring
ID for the datum transform to use when projecting from the source CRS.
.. seealso:: :py:func:`QgsCoordinateTransform.datumTransformCrsInfo()`
%End
int destinationTransformId;
%Docstring
ID for the datum transform to use when projecting to the destination CRS.
.. seealso:: :py:func:`QgsCoordinateTransform.datumTransformCrsInfo()`
%End
bool operator==( const QgsCoordinateTransform::TransformPair &other ) const;
bool operator!=( const QgsCoordinateTransform::TransformPair &other ) const;
};
static QList< QgsCoordinateTransform::TransformPair > datumTransformations( const QgsCoordinateReferenceSystem &source, const QgsCoordinateReferenceSystem &destination );
%Docstring %Docstring
Returns a list of datum transformations which are available for the given ``source`` and ``destination`` CRS. Returns a list of datum transformations which are available for the given ``source`` and ``destination`` CRS.
@ -313,61 +284,7 @@ Returns -1 if matching datum ID was not found.
.. versionadded:: 3.0 .. versionadded:: 3.0
%End %End
struct TransformInfo static QgsDatumTransform::TransformInfo datumTransformInfo( int datumTransformId );
{
int datumTransformId;
%Docstring
Datum transform ID
%End
int epsgCode;
%Docstring
EPSG code for the transform, or 0 if not found in EPSG database
%End
QString sourceCrsAuthId;
%Docstring
Source CRS auth ID
%End
QString destinationCrsAuthId;
%Docstring
Destination CRS auth ID
%End
QString sourceCrsDescription;
%Docstring
Source CRS description
%End
QString destinationCrsDescription;
%Docstring
Destination CRS description
%End
QString remarks;
%Docstring
Transform remarks
%End
QString scope;
%Docstring
Scope of transform
%End
bool preferred;
%Docstring
True if transform is the preferred transform to use for the source/destination CRS combination
%End
bool deprecated;
%Docstring
True if transform is deprecated
%End
};
static QgsCoordinateTransform::TransformInfo datumTransformInfo( int datumTransformId );
%Docstring %Docstring
Returns detailed information about the specified ``datumTransformId``. Returns detailed information about the specified ``datumTransformId``.
If ``datumTransformId`` was not a valid transform ID, a TransformInfo with TransformInfo.datumTransformId of If ``datumTransformId`` was not a valid transform ID, a TransformInfo with TransformInfo.datumTransformId of

View File

@ -65,7 +65,7 @@ Clears all stored transform information from the context.
QMap< QPair< QString, QString>, QgsCoordinateTransform::TransformPair > sourceDestinationDatumTransforms() const; QMap< QPair< QString, QString>, QgsDatumTransform::TransformPair > sourceDestinationDatumTransforms() const;
%Docstring %Docstring
Returns the stored mapping for source to destination CRS pairs to associated datum transforms to use. Returns the stored mapping for source to destination CRS pairs to associated datum transforms to use.
The map keys will be QgsCoordinateReferenceSystems.authid()s. The map keys will be QgsCoordinateReferenceSystems.authid()s.
@ -123,7 +123,7 @@ when transforming from the specified ``source`` CRS to ``destination`` CRS.
source and destination are reversible. source and destination are reversible.
%End %End
QgsCoordinateTransform::TransformPair calculateDatumTransforms( const QgsCoordinateReferenceSystem &source, QgsDatumTransform::TransformPair calculateDatumTransforms( const QgsCoordinateReferenceSystem &source,
const QgsCoordinateReferenceSystem &destination ) const; const QgsCoordinateReferenceSystem &destination ) const;
%Docstring %Docstring
Returns the pair of source and destination datum transforms to use Returns the pair of source and destination datum transforms to use

View File

@ -0,0 +1,114 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsdatumtransform.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/
class QgsDatumTransform
{
%Docstring
Contains methods and classes relating the datum transformations.
.. versionadded:: 3.0
%End
%TypeHeaderCode
#include "qgsdatumtransform.h"
%End
public:
struct TransformPair
{
TransformPair( int sourceTransformId = -1, int destinationTransformId = -1 );
%Docstring
Constructor for a TransformPair with the specified ``sourceTransformId``
and ``destinationTransformId`` transforms.
%End
int sourceTransformId;
%Docstring
ID for the datum transform to use when projecting from the source CRS.
.. seealso:: :py:func:`QgsCoordinateTransform.datumTransformCrsInfo()`
%End
int destinationTransformId;
%Docstring
ID for the datum transform to use when projecting to the destination CRS.
.. seealso:: :py:func:`QgsCoordinateTransform.datumTransformCrsInfo()`
%End
bool operator==( const QgsDatumTransform::TransformPair &other ) const;
bool operator!=( const QgsDatumTransform::TransformPair &other ) const;
};
struct TransformInfo
{
int datumTransformId;
%Docstring
Datum transform ID
%End
int epsgCode;
%Docstring
EPSG code for the transform, or 0 if not found in EPSG database
%End
QString sourceCrsAuthId;
%Docstring
Source CRS auth ID
%End
QString destinationCrsAuthId;
%Docstring
Destination CRS auth ID
%End
QString sourceCrsDescription;
%Docstring
Source CRS description
%End
QString destinationCrsDescription;
%Docstring
Destination CRS description
%End
QString remarks;
%Docstring
Transform remarks
%End
QString scope;
%Docstring
Scope of transform
%End
bool preferred;
%Docstring
True if transform is the preferred transform to use for the source/destination CRS combination
%End
bool deprecated;
%Docstring
True if transform is deprecated
%End
};
};
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsdatumtransform.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/

View File

@ -85,7 +85,7 @@ QVariant QgsDatumTransformTableModel::data( const QModelIndex &index, int role )
QPair< QString, QString> crses = mTransformContext.sourceDestinationDatumTransforms().keys().at( index.row() ); QPair< QString, QString> crses = mTransformContext.sourceDestinationDatumTransforms().keys().at( index.row() );
sourceCrs = crses.first; sourceCrs = crses.first;
destinationCrs = crses.second; destinationCrs = crses.second;
const QgsCoordinateTransform::TransformPair transforms = mTransformContext.sourceDestinationDatumTransforms().value( crses ); const QgsDatumTransform::TransformPair transforms = mTransformContext.sourceDestinationDatumTransforms().value( crses );
sourceTransform = transforms.sourceTransformId; sourceTransform = transforms.sourceTransformId;
destinationTransform = transforms.destinationTransformId; destinationTransform = transforms.destinationTransformId;
#ifdef singlesourcedest #ifdef singlesourcedest

View File

@ -854,7 +854,6 @@ SET(QGIS_CORE_HDRS
qgscoordinateformatter.h qgscoordinateformatter.h
qgscoordinatetransform.h qgscoordinatetransform.h
qgscoordinatetransformcontext.h qgscoordinatetransformcontext.h
qgscoordinatetransformcontext_p.h
qgscoordinateutils.h qgscoordinateutils.h
qgsdartmeasurement.h qgsdartmeasurement.h
qgsdatadefinedsizelegend.h qgsdatadefinedsizelegend.h
@ -862,6 +861,7 @@ SET(QGIS_CORE_HDRS
qgsdataitemproviderregistry.h qgsdataitemproviderregistry.h
qgsdatasourceuri.h qgsdatasourceuri.h
qgsdatetimestatisticalsummary.h qgsdatetimestatisticalsummary.h
qgsdatumtransform.h
qgsdbfilterproxymodel.h qgsdbfilterproxymodel.h
qgsdefaultvalue.h qgsdefaultvalue.h
qgsdiagramrenderer.h qgsdiagramrenderer.h

View File

@ -691,9 +691,9 @@ const char *finder( const char *name )
QList< QgsCoordinateTransform::TransformPair > QgsCoordinateTransform::datumTransformations( const QgsCoordinateReferenceSystem &srcCRS, const QgsCoordinateReferenceSystem &destCRS ) QList< QgsDatumTransform::TransformPair > QgsCoordinateTransform::datumTransformations( const QgsCoordinateReferenceSystem &srcCRS, const QgsCoordinateReferenceSystem &destCRS )
{ {
QList< QgsCoordinateTransform::TransformPair > transformations; QList< QgsDatumTransform::TransformPair > transformations;
QString srcGeoId = srcCRS.geographicCrsAuthId(); QString srcGeoId = srcCRS.geographicCrsAuthId();
QString destGeoId = destCRS.geographicCrsAuthId(); QString destGeoId = destCRS.geographicCrsAuthId();
@ -735,20 +735,20 @@ QList< QgsCoordinateTransform::TransformPair > QgsCoordinateTransform::datumTran
//add direct datum transformations //add direct datum transformations
for ( int transform : qgis::as_const( directTransforms ) ) for ( int transform : qgis::as_const( directTransforms ) )
{ {
transformations.push_back( TransformPair( transform, -1 ) ); transformations.push_back( QgsDatumTransform::TransformPair( transform, -1 ) );
} }
//add direct datum transformations //add direct datum transformations
for ( int transform : qgis::as_const( directTransforms ) ) for ( int transform : qgis::as_const( directTransforms ) )
{ {
transformations.push_back( TransformPair( -1, transform ) ); transformations.push_back( QgsDatumTransform::TransformPair( -1, transform ) );
} }
for ( int srcTransform : qgis::as_const( srcToWgs84 ) ) for ( int srcTransform : qgis::as_const( srcToWgs84 ) )
{ {
for ( int destTransform : qgis::as_const( destToWgs84 ) ) for ( int destTransform : qgis::as_const( destToWgs84 ) )
{ {
transformations.push_back( TransformPair( srcTransform, destTransform ) ); transformations.push_back( QgsDatumTransform::TransformPair( srcTransform, destTransform ) );
} }
} }
@ -821,9 +821,9 @@ int QgsCoordinateTransform::projStringToDatumTransformId( const QString &string
return QgsCoordinateTransformPrivate::transformIdFromString( string ); return QgsCoordinateTransformPrivate::transformIdFromString( string );
} }
QgsCoordinateTransform::TransformInfo QgsCoordinateTransform::datumTransformInfo( int datumTransform ) QgsDatumTransform::TransformInfo QgsCoordinateTransform::datumTransformInfo( int datumTransform )
{ {
TransformInfo info; QgsDatumTransform::TransformInfo info;
sqlite3_database_unique_ptr database; sqlite3_database_unique_ptr database;
int openResult = database.open_v2( QgsApplication::srsDatabaseFilePath(), SQLITE_OPEN_READONLY, nullptr ); int openResult = database.open_v2( QgsApplication::srsDatabaseFilePath(), SQLITE_OPEN_READONLY, nullptr );

View File

@ -312,52 +312,12 @@ class CORE_EXPORT QgsCoordinateTransform
*/ */
bool isShortCircuited() const; bool isShortCircuited() const;
/**
* Contains datum transform information.
* \since QGIS 3.0
*/
struct TransformPair
{
/**
* Constructor for a TransformPair with the specified \a sourceTransformId
* and \a destinationTransformId transforms.
*/
TransformPair( int sourceTransformId = -1, int destinationTransformId = -1 )
: sourceTransformId( sourceTransformId )
, destinationTransformId( destinationTransformId )
{}
/**
* ID for the datum transform to use when projecting from the source CRS.
* \see QgsCoordinateTransform::datumTransformCrsInfo()
*/
int sourceTransformId = -1;
/**
* ID for the datum transform to use when projecting to the destination CRS.
* \see QgsCoordinateTransform::datumTransformCrsInfo()
*/
int destinationTransformId = -1;
bool operator==( const QgsCoordinateTransform::TransformPair &other ) const
{
return other.sourceTransformId == sourceTransformId && other.destinationTransformId == destinationTransformId;
}
bool operator!=( const QgsCoordinateTransform::TransformPair &other ) const
{
return other.sourceTransformId != sourceTransformId || other.destinationTransformId != destinationTransformId;
}
};
/** /**
* Returns a list of datum transformations which are available for the given \a source and \a destination CRS. * Returns a list of datum transformations which are available for the given \a source and \a destination CRS.
* \see datumTransformToProj() * \see datumTransformToProj()
* \see datumTransformInfo() * \see datumTransformInfo()
*/ */
static QList< QgsCoordinateTransform::TransformPair > datumTransformations( const QgsCoordinateReferenceSystem &source, const QgsCoordinateReferenceSystem &destination ); static QList< QgsDatumTransform::TransformPair > datumTransformations( const QgsCoordinateReferenceSystem &source, const QgsCoordinateReferenceSystem &destination );
/** /**
* Returns a proj string representing the specified \a datumTransformId datum transform ID. * Returns a proj string representing the specified \a datumTransformId datum transform ID.
@ -375,44 +335,6 @@ class CORE_EXPORT QgsCoordinateTransform
*/ */
static int projStringToDatumTransformId( const QString &string ); static int projStringToDatumTransformId( const QString &string );
/**
* Contains datum transform information.
* \since QGIS 3.0
*/
struct TransformInfo
{
//! Datum transform ID
int datumTransformId = -1;
//! EPSG code for the transform, or 0 if not found in EPSG database
int epsgCode = 0;
//! Source CRS auth ID
QString sourceCrsAuthId;
//! Destination CRS auth ID
QString destinationCrsAuthId;
//! Source CRS description
QString sourceCrsDescription;
//! Destination CRS description
QString destinationCrsDescription;
//! Transform remarks
QString remarks;
//! Scope of transform
QString scope;
//! True if transform is the preferred transform to use for the source/destination CRS combination
bool preferred = false;
//! True if transform is deprecated
bool deprecated = false;
};
/** /**
* Returns detailed information about the specified \a datumTransformId. * Returns detailed information about the specified \a datumTransformId.
* If \a datumTransformId was not a valid transform ID, a TransformInfo with TransformInfo::datumTransformId of * If \a datumTransformId was not a valid transform ID, a TransformInfo with TransformInfo::datumTransformId of
@ -420,7 +342,7 @@ class CORE_EXPORT QgsCoordinateTransform
* \see datumTransformations() * \see datumTransformations()
* \see datumTransformToProj() * \see datumTransformToProj()
*/ */
static QgsCoordinateTransform::TransformInfo datumTransformInfo( int datumTransformId ); static QgsDatumTransform::TransformInfo datumTransformInfo( int datumTransformId );
/** /**
* Returns the ID of the datum transform to use when projecting from the source * Returns the ID of the datum transform to use when projecting from the source

View File

@ -217,10 +217,10 @@ bool QgsCoordinateTransformPrivate::initialize()
return mIsValid; return mIsValid;
} }
void QgsCoordinateTransformPrivate::calculateTransforms() void QgsCoordinateTransformPrivate::calculateTransforms( const QgsCoordinateTransformContext &context )
{ {
// recalculate datum transforms from context // recalculate datum transforms from context
QgsCoordinateTransform::TransformPair transforms = mContext.calculateDatumTransforms( mSourceCRS, mDestCRS ); QgsDatumTransform::TransformPair transforms = context.calculateDatumTransforms( mSourceCRS, mDestCRS );
mSourceDatumTransform = transforms.sourceTransformId; mSourceDatumTransform = transforms.sourceTransformId;
mDestinationDatumTransform = transforms.destinationTransformId; mDestinationDatumTransform = transforms.destinationTransformId;
} }

View File

@ -102,7 +102,7 @@ void QgsCoordinateTransformContext::removeDestinationDatumTransform( const QgsCo
#endif #endif
QMap<QPair<QString, QString>, QgsCoordinateTransform::TransformPair> QgsCoordinateTransformContext::sourceDestinationDatumTransforms() const QMap<QPair<QString, QString>, QgsDatumTransform::TransformPair> QgsCoordinateTransformContext::sourceDestinationDatumTransforms() const
{ {
d->mLock.lockForRead(); d->mLock.lockForRead();
auto res = d->mSourceDestDatumTransforms; auto res = d->mSourceDestDatumTransforms;
@ -118,7 +118,7 @@ bool QgsCoordinateTransformContext::addSourceDestinationDatumTransform( const Qg
d.detach(); d.detach();
d->mLock.lockForWrite(); d->mLock.lockForWrite();
d->mSourceDestDatumTransforms.insert( qMakePair( sourceCrs.authid(), destinationCrs.authid() ), QgsCoordinateTransform::TransformPair( sourceTransform, destinationTransform ) ); d->mSourceDestDatumTransforms.insert( qMakePair( sourceCrs.authid(), destinationCrs.authid() ), QgsDatumTransform::TransformPair( sourceTransform, destinationTransform ) );
d->mLock.unlock(); d->mLock.unlock();
return true; return true;
} }
@ -130,24 +130,24 @@ void QgsCoordinateTransformContext::removeSourceDestinationDatumTransform( const
bool QgsCoordinateTransformContext::hasTransform( const QgsCoordinateReferenceSystem &source, const QgsCoordinateReferenceSystem &destination ) const bool QgsCoordinateTransformContext::hasTransform( const QgsCoordinateReferenceSystem &source, const QgsCoordinateReferenceSystem &destination ) const
{ {
QgsCoordinateTransform::TransformPair t = calculateDatumTransforms( source, destination ); QgsDatumTransform::TransformPair t = calculateDatumTransforms( source, destination );
// calculateDatumTransforms already takes care of switching source and destination // calculateDatumTransforms already takes care of switching source and destination
return t.sourceTransformId != -1 || t.destinationTransformId != -1; return t.sourceTransformId != -1 || t.destinationTransformId != -1;
} }
QgsCoordinateTransform::TransformPair QgsCoordinateTransformContext::calculateDatumTransforms( const QgsCoordinateReferenceSystem &source, const QgsCoordinateReferenceSystem &destination ) const QgsDatumTransform::TransformPair QgsCoordinateTransformContext::calculateDatumTransforms( const QgsCoordinateReferenceSystem &source, const QgsCoordinateReferenceSystem &destination ) const
{ {
QString srcKey = source.authid(); QString srcKey = source.authid();
QString destKey = destination.authid(); QString destKey = destination.authid();
d->mLock.lockForRead(); d->mLock.lockForRead();
// highest priority is exact match for source/dest pair // highest priority is exact match for source/dest pair
QgsCoordinateTransform::TransformPair res = d->mSourceDestDatumTransforms.value( qMakePair( srcKey, destKey ), QgsCoordinateTransform::TransformPair( -1, -1 ) ); QgsDatumTransform::TransformPair res = d->mSourceDestDatumTransforms.value( qMakePair( srcKey, destKey ), QgsDatumTransform::TransformPair( -1, -1 ) );
if ( res.sourceTransformId == -1 && res.destinationTransformId == -1 ) if ( res.sourceTransformId == -1 && res.destinationTransformId == -1 )
{ {
// try to reverse // try to reverse
QgsCoordinateTransform::TransformPair res2 = d->mSourceDestDatumTransforms.value( qMakePair( destKey, srcKey ), QgsCoordinateTransform::TransformPair( -1, -1 ) ); QgsDatumTransform::TransformPair res2 = d->mSourceDestDatumTransforms.value( qMakePair( destKey, srcKey ), QgsDatumTransform::TransformPair( -1, -1 ) );
res = QgsCoordinateTransform::TransformPair( res2.destinationTransformId, res2.sourceTransformId ); res = QgsDatumTransform::TransformPair( res2.destinationTransformId, res2.sourceTransformId );
} }
d->mLock.unlock(); d->mLock.unlock();
return res; return res;
@ -217,7 +217,7 @@ bool QgsCoordinateTransformContext::readXml( const QDomElement &element, const Q
} }
} }
d->mSourceDestDatumTransforms.insert( qMakePair( key1, key2 ), QgsCoordinateTransform::TransformPair( datumId1, datumId2 ) ); d->mSourceDestDatumTransforms.insert( qMakePair( key1, key2 ), QgsDatumTransform::TransformPair( datumId1, datumId2 ) );
} }
#if 0 #if 0
@ -347,7 +347,7 @@ void QgsCoordinateTransformContext::readSettings()
QMap< QPair< QString, QString >, QPair< int, int > >::const_iterator transformIt = transforms.constBegin(); QMap< QPair< QString, QString >, QPair< int, int > >::const_iterator transformIt = transforms.constBegin();
for ( ; transformIt != transforms.constEnd(); ++transformIt ) for ( ; transformIt != transforms.constEnd(); ++transformIt )
{ {
d->mSourceDestDatumTransforms.insert( transformIt.key(), QgsCoordinateTransform::TransformPair( transformIt.value().first, transformIt.value().second ) ); d->mSourceDestDatumTransforms.insert( transformIt.key(), QgsDatumTransform::TransformPair( transformIt.value().first, transformIt.value().second ) );
} }
d->mLock.unlock(); d->mLock.unlock();

View File

@ -21,7 +21,7 @@
#include "qgis_core.h" #include "qgis_core.h"
#include "qgis.h" #include "qgis.h"
#include "qgscoordinatetransformcontext_p.h" #include "qgscoordinatetransformcontext_p.h"
#include "qgscoordinatetransform.h" #include "qgsdatumtransform.h"
class QgsReadWriteContext; class QgsReadWriteContext;
@ -181,7 +181,7 @@ class CORE_EXPORT QgsCoordinateTransformContext
* *
* \see addSourceDestinationDatumTransform() * \see addSourceDestinationDatumTransform()
*/ */
QMap< QPair< QString, QString>, QgsCoordinateTransform::TransformPair > sourceDestinationDatumTransforms() const; QMap< QPair< QString, QString>, QgsDatumTransform::TransformPair > sourceDestinationDatumTransforms() const;
/** /**
* Adds a new \a sourceTransform and \a destinationTransform to use when projecting coordinates * Adds a new \a sourceTransform and \a destinationTransform to use when projecting coordinates
@ -228,7 +228,7 @@ class CORE_EXPORT QgsCoordinateTransformContext
* *
* \note source and destination are reversible. * \note source and destination are reversible.
*/ */
QgsCoordinateTransform::TransformPair calculateDatumTransforms( const QgsCoordinateReferenceSystem &source, QgsDatumTransform::TransformPair calculateDatumTransforms( const QgsCoordinateReferenceSystem &source,
const QgsCoordinateReferenceSystem &destination ) const; const QgsCoordinateReferenceSystem &destination ) const;
/** /**

View File

@ -38,7 +38,7 @@
#define SIP_NO_FILE #define SIP_NO_FILE
#include "qgscoordinatereferencesystem.h" #include "qgscoordinatereferencesystem.h"
#include "qgscoordinatetransform.h" #include "qgsdatumtransform.h"
class QgsCoordinateTransformContextPrivate : public QSharedData class QgsCoordinateTransformContextPrivate : public QSharedData
{ {
@ -63,7 +63,7 @@ class QgsCoordinateTransformContextPrivate : public QSharedData
* Mapping for datum transforms to use for source/destination CRS pairs. * Mapping for datum transforms to use for source/destination CRS pairs.
* Matching records from this map will take precedence over other transform maps. * Matching records from this map will take precedence over other transform maps.
*/ */
QMap< QPair< QString, QString >, QgsCoordinateTransform::TransformPair > mSourceDestDatumTransforms; QMap< QPair< QString, QString >, QgsDatumTransform::TransformPair > mSourceDestDatumTransforms;
#if 0 #if 0
//! Mapping for datum transforms to use for source CRS //! Mapping for datum transforms to use for source CRS

View File

@ -0,0 +1,112 @@
/***************************************************************************
qgsdatumtransform.h
------------------------
begin : Dec 2017
copyright : (C) 2017 Nyall Dawson
email : nyall dot dawson at gmail dot com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSDATUMTRANSFORM_H
#define QGSDATUMTRANSFORM_H
#include "qgis_core.h"
#include <QString>
/**
* Contains methods and classes relating the datum transformations.
* \ingroup core
* \since QGIS 3.0
*/
class CORE_EXPORT QgsDatumTransform
{
public:
/**
* Contains datum transform information.
* \since QGIS 3.0
*/
struct TransformPair
{
/**
* Constructor for a TransformPair with the specified \a sourceTransformId
* and \a destinationTransformId transforms.
*/
TransformPair( int sourceTransformId = -1, int destinationTransformId = -1 )
: sourceTransformId( sourceTransformId )
, destinationTransformId( destinationTransformId )
{}
/**
* ID for the datum transform to use when projecting from the source CRS.
* \see QgsCoordinateTransform::datumTransformCrsInfo()
*/
int sourceTransformId = -1;
/**
* ID for the datum transform to use when projecting to the destination CRS.
* \see QgsCoordinateTransform::datumTransformCrsInfo()
*/
int destinationTransformId = -1;
bool operator==( const QgsDatumTransform::TransformPair &other ) const
{
return other.sourceTransformId == sourceTransformId && other.destinationTransformId == destinationTransformId;
}
bool operator!=( const QgsDatumTransform::TransformPair &other ) const
{
return other.sourceTransformId != sourceTransformId || other.destinationTransformId != destinationTransformId;
}
};
/**
* Contains datum transform information.
* \since QGIS 3.0
*/
struct TransformInfo
{
//! Datum transform ID
int datumTransformId = -1;
//! EPSG code for the transform, or 0 if not found in EPSG database
int epsgCode = 0;
//! Source CRS auth ID
QString sourceCrsAuthId;
//! Destination CRS auth ID
QString destinationCrsAuthId;
//! Source CRS description
QString sourceCrsDescription;
//! Destination CRS description
QString destinationCrsDescription;
//! Transform remarks
QString remarks;
//! Scope of transform
QString scope;
//! True if transform is the preferred transform to use for the source/destination CRS combination
bool preferred = false;
//! True if transform is deprecated
bool deprecated = false;
};
};
#endif // QGSDATUMTRANSFORM_H

View File

@ -71,7 +71,7 @@ void QgsDatumTransformDialog::load( const QPair<int, int> &selectedDatumTransfor
{ {
mDatumTransformTreeWidget->clear(); mDatumTransformTreeWidget->clear();
for ( const QgsCoordinateTransform::TransformPair &transform : qgis::as_const( mDatumTransforms ) ) for ( const QgsDatumTransform::TransformPair &transform : qgis::as_const( mDatumTransforms ) )
{ {
QTreeWidgetItem *item = new QTreeWidgetItem(); QTreeWidgetItem *item = new QTreeWidgetItem();
bool itemDisabled = false; bool itemDisabled = false;
@ -87,7 +87,7 @@ void QgsDatumTransformDialog::load( const QPair<int, int> &selectedDatumTransfor
item->setText( i, QgsCoordinateTransform::datumTransformToProj( nr ) ); item->setText( i, QgsCoordinateTransform::datumTransformToProj( nr ) );
//Describe datums in a tooltip //Describe datums in a tooltip
QgsCoordinateTransform::TransformInfo info = QgsCoordinateTransform::datumTransformInfo( nr ); QgsDatumTransform::TransformInfo info = QgsCoordinateTransform::datumTransformInfo( nr );
if ( info.datumTransformId == -1 ) if ( info.datumTransformId == -1 )
continue; continue;

View File

@ -71,7 +71,7 @@ class GUI_EXPORT QgsDatumTransformDialog : public QDialog, private Ui::QgsDatumT
void setOKButtonEnabled(); void setOKButtonEnabled();
QList< QgsCoordinateTransform::TransformPair > mDatumTransforms; QList< QgsDatumTransform::TransformPair > mDatumTransforms;
QgsCoordinateReferenceSystem mSourceCrs; QgsCoordinateReferenceSystem mSourceCrs;
QgsCoordinateReferenceSystem mDestinationCrs; QgsCoordinateReferenceSystem mDestinationCrs;
}; };

View File

@ -188,8 +188,8 @@ void TestQgsCoordinateTransform::contextShared()
original.addSourceDestinationDatumTransform( QgsCoordinateReferenceSystem( 3111 ), QgsCoordinateReferenceSystem( 3113 ), 1, 2 ); original.addSourceDestinationDatumTransform( QgsCoordinateReferenceSystem( 3111 ), QgsCoordinateReferenceSystem( 3113 ), 1, 2 );
QgsCoordinateTransformContext copy( original ); QgsCoordinateTransformContext copy( original );
QMap< QPair< QString, QString >, QgsCoordinateTransform::TransformPair > expected; QMap< QPair< QString, QString >, QgsDatumTransform::TransformPair > expected;
expected.insert( qMakePair( QStringLiteral( "EPSG:3111" ), QStringLiteral( "EPSG:3113" ) ), QgsCoordinateTransform::TransformPair( 1, 2 ) ); expected.insert( qMakePair( QStringLiteral( "EPSG:3111" ), QStringLiteral( "EPSG:3113" ) ), QgsDatumTransform::TransformPair( 1, 2 ) );
QCOMPARE( original.sourceDestinationDatumTransforms(), expected ); QCOMPARE( original.sourceDestinationDatumTransforms(), expected );
QCOMPARE( copy.sourceDestinationDatumTransforms(), expected ); QCOMPARE( copy.sourceDestinationDatumTransforms(), expected );
@ -197,19 +197,19 @@ void TestQgsCoordinateTransform::contextShared()
copy.addSourceDestinationDatumTransform( QgsCoordinateReferenceSystem( 3111 ), QgsCoordinateReferenceSystem( 3113 ), 3, 4 ); copy.addSourceDestinationDatumTransform( QgsCoordinateReferenceSystem( 3111 ), QgsCoordinateReferenceSystem( 3113 ), 3, 4 );
QCOMPARE( original.sourceDestinationDatumTransforms(), expected ); QCOMPARE( original.sourceDestinationDatumTransforms(), expected );
expected.insert( qMakePair( QStringLiteral( "EPSG:3111" ), QStringLiteral( "EPSG:3113" ) ), QgsCoordinateTransform::TransformPair( 3, 4 ) ); expected.insert( qMakePair( QStringLiteral( "EPSG:3111" ), QStringLiteral( "EPSG:3113" ) ), QgsDatumTransform::TransformPair( 3, 4 ) );
QCOMPARE( copy.sourceDestinationDatumTransforms(), expected ); QCOMPARE( copy.sourceDestinationDatumTransforms(), expected );
// copy via assignment // copy via assignment
QgsCoordinateTransformContext copy2; QgsCoordinateTransformContext copy2;
copy2 = original; copy2 = original;
expected.insert( qMakePair( QStringLiteral( "EPSG:3111" ), QStringLiteral( "EPSG:3113" ) ), QgsCoordinateTransform::TransformPair( 1, 2 ) ); expected.insert( qMakePair( QStringLiteral( "EPSG:3111" ), QStringLiteral( "EPSG:3113" ) ), QgsDatumTransform::TransformPair( 1, 2 ) );
QCOMPARE( original.sourceDestinationDatumTransforms(), expected ); QCOMPARE( original.sourceDestinationDatumTransforms(), expected );
QCOMPARE( copy2.sourceDestinationDatumTransforms(), expected ); QCOMPARE( copy2.sourceDestinationDatumTransforms(), expected );
copy2.addSourceDestinationDatumTransform( QgsCoordinateReferenceSystem( 3111 ), QgsCoordinateReferenceSystem( 3113 ), 3, 4 ); copy2.addSourceDestinationDatumTransform( QgsCoordinateReferenceSystem( 3111 ), QgsCoordinateReferenceSystem( 3113 ), 3, 4 );
QCOMPARE( original.sourceDestinationDatumTransforms(), expected ); QCOMPARE( original.sourceDestinationDatumTransforms(), expected );
expected.insert( qMakePair( QStringLiteral( "EPSG:3111" ), QStringLiteral( "EPSG:3113" ) ), QgsCoordinateTransform::TransformPair( 3, 4 ) ); expected.insert( qMakePair( QStringLiteral( "EPSG:3111" ), QStringLiteral( "EPSG:3113" ) ), QgsDatumTransform::TransformPair( 3, 4 ) );
QCOMPARE( copy2.sourceDestinationDatumTransforms(), expected ); QCOMPARE( copy2.sourceDestinationDatumTransforms(), expected );
} }

View File

@ -17,6 +17,7 @@ import qgis # NOQA
from qgis.core import (QgsCoordinateReferenceSystem, from qgis.core import (QgsCoordinateReferenceSystem,
QgsCoordinateTransformContext, QgsCoordinateTransformContext,
QgsCoordinateTransform, QgsCoordinateTransform,
QgsDatumTransform,
QgsReadWriteContext, QgsReadWriteContext,
QgsProject, QgsProject,
QgsSettings) QgsSettings)
@ -114,79 +115,79 @@ class TestQgsCoordinateTransformContext(unittest.TestCase):
context.hasTransform(QgsCoordinateReferenceSystem('EPSG:3111'), QgsCoordinateReferenceSystem('EPSG:4326'))) context.hasTransform(QgsCoordinateReferenceSystem('EPSG:3111'), QgsCoordinateReferenceSystem('EPSG:4326')))
self.assertFalse( self.assertFalse(
context.hasTransform(QgsCoordinateReferenceSystem('EPSG:3113'), QgsCoordinateReferenceSystem('EPSG:4283'))) context.hasTransform(QgsCoordinateReferenceSystem('EPSG:3113'), QgsCoordinateReferenceSystem('EPSG:4283')))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(1, 2)}) self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsDatumTransform.TransformPair(1, 2)})
self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:28356'), self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:28356'),
QgsCoordinateReferenceSystem(4283), 3, 4)) QgsCoordinateReferenceSystem(4283), 3, 4))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(1, 2), self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsDatumTransform.TransformPair(1, 2),
('EPSG:28356', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(3, 4)}) ('EPSG:28356', 'EPSG:4283'): QgsDatumTransform.TransformPair(3, 4)})
self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:28356'), self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:28356'),
QgsCoordinateReferenceSystem(28357), 7, 8)) QgsCoordinateReferenceSystem(28357), 7, 8))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(1, 2), self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsDatumTransform.TransformPair(1, 2),
('EPSG:28356', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(3, 4), ('EPSG:28356', 'EPSG:4283'): QgsDatumTransform.TransformPair(3, 4),
('EPSG:28356', 'EPSG:28357'): QgsCoordinateTransform.TransformPair(7, 8)}) ('EPSG:28356', 'EPSG:28357'): QgsDatumTransform.TransformPair(7, 8)})
self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:28356'), self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:28356'),
QgsCoordinateReferenceSystem('EPSG:28357'), 9, 11)) QgsCoordinateReferenceSystem('EPSG:28357'), 9, 11))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(1, 2), self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsDatumTransform.TransformPair(1, 2),
('EPSG:28356', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(3, 4), ('EPSG:28356', 'EPSG:4283'): QgsDatumTransform.TransformPair(3, 4),
('EPSG:28356', 'EPSG:28357'): QgsCoordinateTransform.TransformPair(9, 11)}) ('EPSG:28356', 'EPSG:28357'): QgsDatumTransform.TransformPair(9, 11)})
# invalid additions # invalid additions
self.assertFalse(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(), self.assertFalse(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(),
QgsCoordinateReferenceSystem('EPSG:28357'), 9, 11)) QgsCoordinateReferenceSystem('EPSG:28357'), 9, 11))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(1, 2), self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsDatumTransform.TransformPair(1, 2),
('EPSG:28356', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(3, 4), ('EPSG:28356', 'EPSG:4283'): QgsDatumTransform.TransformPair(3, 4),
('EPSG:28356', 'EPSG:28357'): QgsCoordinateTransform.TransformPair(9, 11)}) ('EPSG:28356', 'EPSG:28357'): QgsDatumTransform.TransformPair(9, 11)})
self.assertFalse(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:3111'), self.assertFalse(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:3111'),
QgsCoordinateReferenceSystem(), 9, 11)) QgsCoordinateReferenceSystem(), 9, 11))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(1, 2), self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsDatumTransform.TransformPair(1, 2),
('EPSG:28356', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(3, 4), ('EPSG:28356', 'EPSG:4283'): QgsDatumTransform.TransformPair(3, 4),
('EPSG:28356', 'EPSG:28357'): QgsCoordinateTransform.TransformPair(9, 11)}) ('EPSG:28356', 'EPSG:28357'): QgsDatumTransform.TransformPair(9, 11)})
# indicate no transform required # indicate no transform required
self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(28357), self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(28357),
QgsCoordinateReferenceSystem(28356), -1, -1)) QgsCoordinateReferenceSystem(28356), -1, -1))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(1, 2), self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsDatumTransform.TransformPair(1, 2),
('EPSG:28356', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(3, 4), ('EPSG:28356', 'EPSG:4283'): QgsDatumTransform.TransformPair(3, 4),
('EPSG:28356', 'EPSG:28357'): QgsCoordinateTransform.TransformPair(9, 11), ('EPSG:28356', 'EPSG:28357'): QgsDatumTransform.TransformPair(9, 11),
('EPSG:28357', 'EPSG:28356'): QgsCoordinateTransform.TransformPair(-1, -1)}) ('EPSG:28357', 'EPSG:28356'): QgsDatumTransform.TransformPair(-1, -1)})
self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(3111), self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(3111),
QgsCoordinateReferenceSystem(28356), 17, -1)) QgsCoordinateReferenceSystem(28356), 17, -1))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(1, 2), self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsDatumTransform.TransformPair(1, 2),
('EPSG:28356', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(3, 4), ('EPSG:28356', 'EPSG:4283'): QgsDatumTransform.TransformPair(3, 4),
('EPSG:28356', 'EPSG:28357'): QgsCoordinateTransform.TransformPair(9, 11), ('EPSG:28356', 'EPSG:28357'): QgsDatumTransform.TransformPair(9, 11),
('EPSG:28357', 'EPSG:28356'): QgsCoordinateTransform.TransformPair(-1, -1), ('EPSG:28357', 'EPSG:28356'): QgsDatumTransform.TransformPair(-1, -1),
('EPSG:3111', 'EPSG:28356'): QgsCoordinateTransform.TransformPair(17, -1)}) ('EPSG:3111', 'EPSG:28356'): QgsDatumTransform.TransformPair(17, -1)})
self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(3113), self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(3113),
QgsCoordinateReferenceSystem(28356), -1, 18)) QgsCoordinateReferenceSystem(28356), -1, 18))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(1, 2), self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsDatumTransform.TransformPair(1, 2),
('EPSG:28356', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(3, 4), ('EPSG:28356', 'EPSG:4283'): QgsDatumTransform.TransformPair(3, 4),
('EPSG:28356', 'EPSG:28357'): QgsCoordinateTransform.TransformPair(9, 11), ('EPSG:28356', 'EPSG:28357'): QgsDatumTransform.TransformPair(9, 11),
('EPSG:28357', 'EPSG:28356'): QgsCoordinateTransform.TransformPair(-1, -1), ('EPSG:28357', 'EPSG:28356'): QgsDatumTransform.TransformPair(-1, -1),
('EPSG:3111', 'EPSG:28356'): QgsCoordinateTransform.TransformPair(17, -1), ('EPSG:3111', 'EPSG:28356'): QgsDatumTransform.TransformPair(17, -1),
('EPSG:3113', 'EPSG:28356'): QgsCoordinateTransform.TransformPair(-1, 18)}) ('EPSG:3113', 'EPSG:28356'): QgsDatumTransform.TransformPair(-1, 18)})
# remove non-existing # remove non-existing
context.removeSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(3113), QgsCoordinateReferenceSystem(3111)) context.removeSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(3113), QgsCoordinateReferenceSystem(3111))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(1, 2), self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsDatumTransform.TransformPair(1, 2),
('EPSG:28356', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(3, 4), ('EPSG:28356', 'EPSG:4283'): QgsDatumTransform.TransformPair(3, 4),
('EPSG:28356', 'EPSG:28357'): QgsCoordinateTransform.TransformPair(9, 11), ('EPSG:28356', 'EPSG:28357'): QgsDatumTransform.TransformPair(9, 11),
('EPSG:28357', 'EPSG:28356'): QgsCoordinateTransform.TransformPair(-1, -1), ('EPSG:28357', 'EPSG:28356'): QgsDatumTransform.TransformPair(-1, -1),
('EPSG:3111', 'EPSG:28356'): QgsCoordinateTransform.TransformPair(17, -1), ('EPSG:3111', 'EPSG:28356'): QgsDatumTransform.TransformPair(17, -1),
('EPSG:3113', 'EPSG:28356'): QgsCoordinateTransform.TransformPair(-1, 18)}) ('EPSG:3113', 'EPSG:28356'): QgsDatumTransform.TransformPair(-1, 18)})
# remove existing # remove existing
context.removeSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(3111), context.removeSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(3111),
QgsCoordinateReferenceSystem(4283)) QgsCoordinateReferenceSystem(4283))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:28356', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(3, 4), self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:28356', 'EPSG:4283'): QgsDatumTransform.TransformPair(3, 4),
('EPSG:28356', 'EPSG:28357'): QgsCoordinateTransform.TransformPair(9, 11), ('EPSG:28356', 'EPSG:28357'): QgsDatumTransform.TransformPair(9, 11),
('EPSG:28357', 'EPSG:28356'): QgsCoordinateTransform.TransformPair(-1, -1), ('EPSG:28357', 'EPSG:28356'): QgsDatumTransform.TransformPair(-1, -1),
('EPSG:3111', 'EPSG:28356'): QgsCoordinateTransform.TransformPair(17, -1), ('EPSG:3111', 'EPSG:28356'): QgsDatumTransform.TransformPair(17, -1),
('EPSG:3113', 'EPSG:28356'): QgsCoordinateTransform.TransformPair(-1, 18)}) ('EPSG:3113', 'EPSG:28356'): QgsDatumTransform.TransformPair(-1, 18)})
context.removeSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(3111), context.removeSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(3111),
QgsCoordinateReferenceSystem(28356)) QgsCoordinateReferenceSystem(28356))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:28356', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(3, 4), self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:28356', 'EPSG:4283'): QgsDatumTransform.TransformPair(3, 4),
('EPSG:28356', 'EPSG:28357'): QgsCoordinateTransform.TransformPair(9, 11), ('EPSG:28356', 'EPSG:28357'): QgsDatumTransform.TransformPair(9, 11),
('EPSG:28357', 'EPSG:28356'): QgsCoordinateTransform.TransformPair(-1, -1), ('EPSG:28357', 'EPSG:28356'): QgsDatumTransform.TransformPair(-1, -1),
('EPSG:3113', 'EPSG:28356'): QgsCoordinateTransform.TransformPair(-1, 18)}) ('EPSG:3113', 'EPSG:28356'): QgsDatumTransform.TransformPair(-1, 18)})
context.clear() context.clear()
self.assertEqual(context.sourceDestinationDatumTransforms(), {}) self.assertEqual(context.sourceDestinationDatumTransforms(), {})
@ -244,7 +245,7 @@ class TestQgsCoordinateTransformContext(unittest.TestCase):
#empty context #empty context
self.assertEqual(context.calculateDatumTransforms(QgsCoordinateReferenceSystem('EPSG:3111'), self.assertEqual(context.calculateDatumTransforms(QgsCoordinateReferenceSystem('EPSG:3111'),
QgsCoordinateReferenceSystem('EPSG:4283')), QgsCoordinateReferenceSystem('EPSG:4283')),
QgsCoordinateTransform.TransformPair(-1, -1)) QgsDatumTransform.TransformPair(-1, -1))
#add specific source/dest pair - should take precedence #add specific source/dest pair - should take precedence
context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:28356'), context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:28356'),
@ -252,17 +253,17 @@ class TestQgsCoordinateTransformContext(unittest.TestCase):
3, 4) 3, 4)
self.assertEqual(context.calculateDatumTransforms(QgsCoordinateReferenceSystem('EPSG:28356'), self.assertEqual(context.calculateDatumTransforms(QgsCoordinateReferenceSystem('EPSG:28356'),
QgsCoordinateReferenceSystem('EPSG:4283')), QgsCoordinateReferenceSystem('EPSG:4283')),
QgsCoordinateTransform.TransformPair(3, 4)) QgsDatumTransform.TransformPair(3, 4))
self.assertEqual(context.calculateDatumTransforms(QgsCoordinateReferenceSystem('EPSG:3111'), self.assertEqual(context.calculateDatumTransforms(QgsCoordinateReferenceSystem('EPSG:3111'),
QgsCoordinateReferenceSystem('EPSG:4283')), QgsCoordinateReferenceSystem('EPSG:4283')),
QgsCoordinateTransform.TransformPair(-1, -1)) QgsDatumTransform.TransformPair(-1, -1))
self.assertEqual(context.calculateDatumTransforms(QgsCoordinateReferenceSystem('EPSG:28356'), self.assertEqual(context.calculateDatumTransforms(QgsCoordinateReferenceSystem('EPSG:28356'),
QgsCoordinateReferenceSystem('EPSG:3111')), QgsCoordinateReferenceSystem('EPSG:3111')),
QgsCoordinateTransform.TransformPair(-1, -1)) QgsDatumTransform.TransformPair(-1, -1))
# check that reverse transforms are automatically supported # check that reverse transforms are automatically supported
self.assertEqual(context.calculateDatumTransforms(QgsCoordinateReferenceSystem('EPSG:4283'), self.assertEqual(context.calculateDatumTransforms(QgsCoordinateReferenceSystem('EPSG:4283'),
QgsCoordinateReferenceSystem('EPSG:28356')), QgsCoordinateReferenceSystem('EPSG:28356')),
QgsCoordinateTransform.TransformPair(4, 3)) QgsDatumTransform.TransformPair(4, 3))
@unittest.skip('ifdefed out in c++ until required') @unittest.skip('ifdefed out in c++ until required')
def testWriteReadXmlSingleVariant(self): def testWriteReadXmlSingleVariant(self):
@ -316,8 +317,8 @@ class TestQgsCoordinateTransformContext(unittest.TestCase):
self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(4205), self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(4205),
QgsCoordinateReferenceSystem(4326), source_id_2, dest_id_2)) QgsCoordinateReferenceSystem(4326), source_id_2, dest_id_2))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:4204', 'EPSG:4326'): QgsCoordinateTransform.TransformPair(source_id_1, dest_id_1), self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:4204', 'EPSG:4326'): QgsDatumTransform.TransformPair(source_id_1, dest_id_1),
('EPSG:4205', 'EPSG:4326'): QgsCoordinateTransform.TransformPair(source_id_2, dest_id_2)}) ('EPSG:4205', 'EPSG:4326'): QgsDatumTransform.TransformPair(source_id_2, dest_id_2)})
# save to xml # save to xml
doc = QDomDocument("testdoc") doc = QDomDocument("testdoc")
@ -329,8 +330,8 @@ class TestQgsCoordinateTransformContext(unittest.TestCase):
context2.readXml(elem, QgsReadWriteContext()) context2.readXml(elem, QgsReadWriteContext())
# check result # check result
self.assertEqual(context2.sourceDestinationDatumTransforms(), {('EPSG:4204', 'EPSG:4326'): QgsCoordinateTransform.TransformPair(source_id_1, dest_id_1), self.assertEqual(context2.sourceDestinationDatumTransforms(), {('EPSG:4204', 'EPSG:4326'): QgsDatumTransform.TransformPair(source_id_1, dest_id_1),
('EPSG:4205', 'EPSG:4326'): QgsCoordinateTransform.TransformPair(source_id_2, dest_id_2)}) ('EPSG:4205', 'EPSG:4326'): QgsDatumTransform.TransformPair(source_id_2, dest_id_2)})
def testMissingTransforms(self): def testMissingTransforms(self):
# fudge context xml with a missing transform # fudge context xml with a missing transform
@ -366,7 +367,7 @@ class TestQgsCoordinateTransformContext(unittest.TestCase):
QgsCoordinateReferenceSystem('EPSG:4283'), 1, 2) QgsCoordinateReferenceSystem('EPSG:4283'), 1, 2)
project.setTransformContext(context) project.setTransformContext(context)
self.assertEqual(len(context_changed_spy), 1) self.assertEqual(len(context_changed_spy), 1)
self.assertEqual(project.transformContext().sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsCoordinateTransform.TransformPair(1, 2)}) self.assertEqual(project.transformContext().sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsDatumTransform.TransformPair(1, 2)})
def testReadWriteSettings(self): def testReadWriteSettings(self):
context = QgsCoordinateTransformContext() context = QgsCoordinateTransformContext()
@ -391,8 +392,8 @@ class TestQgsCoordinateTransformContext(unittest.TestCase):
QgsCoordinateReferenceSystem(4326), source_id_2, dest_id_2)) QgsCoordinateReferenceSystem(4326), source_id_2, dest_id_2))
self.assertEqual(context.sourceDestinationDatumTransforms(), self.assertEqual(context.sourceDestinationDatumTransforms(),
{('EPSG:4204', 'EPSG:4326'): QgsCoordinateTransform.TransformPair(source_id_1, dest_id_1), {('EPSG:4204', 'EPSG:4326'): QgsDatumTransform.TransformPair(source_id_1, dest_id_1),
('EPSG:4205', 'EPSG:4326'): QgsCoordinateTransform.TransformPair(source_id_2, dest_id_2)}) ('EPSG:4205', 'EPSG:4326'): QgsDatumTransform.TransformPair(source_id_2, dest_id_2)})
# save to settings # save to settings
context.writeSettings() context.writeSettings()
@ -404,8 +405,8 @@ class TestQgsCoordinateTransformContext(unittest.TestCase):
# check result # check result
self.assertEqual(context2.sourceDestinationDatumTransforms(), self.assertEqual(context2.sourceDestinationDatumTransforms(),
{('EPSG:4204', 'EPSG:4326'): QgsCoordinateTransform.TransformPair(source_id_1, dest_id_1), {('EPSG:4204', 'EPSG:4326'): QgsDatumTransform.TransformPair(source_id_1, dest_id_1),
('EPSG:4205', 'EPSG:4326'): QgsCoordinateTransform.TransformPair(source_id_2, dest_id_2)}) ('EPSG:4205', 'EPSG:4326'): QgsDatumTransform.TransformPair(source_id_2, dest_id_2)})
if __name__ == '__main__': if __name__ == '__main__':