Skip to content

Commit

Permalink
Update datum transform widgets and dialog for proj 6
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Jun 3, 2019
1 parent f0e6f14 commit 3defbe1
Show file tree
Hide file tree
Showing 5 changed files with 186 additions and 17 deletions.
59 changes: 53 additions & 6 deletions src/app/qgsdatumtransformtablewidget.cpp
Expand Up @@ -57,34 +57,49 @@ void QgsDatumTransformTableModel::removeTransform( const QModelIndexList &indexe
int QgsDatumTransformTableModel::rowCount( const QModelIndex &parent ) const
{
Q_UNUSED( parent )
#if PROJ_VERSION_MAJOR>=6
return mTransformContext.coordinateOperations().count();
#else
Q_NOWARN_DEPRECATED_PUSH
return mTransformContext.sourceDestinationDatumTransforms().count();
Q_NOWARN_DEPRECATED_POP
#endif
}

int QgsDatumTransformTableModel::columnCount( const QModelIndex &parent ) const
{
Q_UNUSED( parent )
#if PROJ_VERSION_MAJOR>=6
return 3;
#else
return 4;
#endif
}

QVariant QgsDatumTransformTableModel::data( const QModelIndex &index, int role ) const
{
QString sourceCrs;
QString destinationCrs;
#if PROJ_VERSION_MAJOR>=6
QPair< QString, QString> crses = mTransformContext.coordinateOperations().keys().at( index.row() );
#else
int sourceTransform = -1;
int destinationTransform = -1;

Q_NOWARN_DEPRECATED_PUSH
QPair< QString, QString> crses = mTransformContext.sourceDestinationDatumTransforms().keys().at( index.row() );
Q_NOWARN_DEPRECATED_POP
#endif
sourceCrs = crses.first;
destinationCrs = crses.second;
#if PROJ_VERSION_MAJOR>=6
const QString proj = mTransformContext.coordinateOperations().value( crses );
#else
Q_NOWARN_DEPRECATED_PUSH
const QgsDatumTransform::TransformPair transforms = mTransformContext.sourceDestinationDatumTransforms().value( crses );
Q_NOWARN_DEPRECATED_POP
sourceTransform = transforms.sourceTransformId;
destinationTransform = transforms.destinationTransformId;
#endif

switch ( role )
{
Expand All @@ -100,6 +115,13 @@ QVariant QgsDatumTransformTableModel::data( const QModelIndex &index, int role )
{
case SourceCrsColumn:
return sourceCrs;
case DestinationCrsColumn:
return destinationCrs;

#if PROJ_VERSION_MAJOR>=6
case ProjDefinitionColumn:
return proj;
#else
case SourceTransformColumn:
if ( sourceTransform != -1 )
{
Expand All @@ -108,8 +130,7 @@ QVariant QgsDatumTransformTableModel::data( const QModelIndex &index, int role )
Q_NOWARN_DEPRECATED_POP
}
break;
case DestinationCrsColumn:
return destinationCrs;

case DestinationTransformColumn:
if ( destinationTransform != -1 )
{
Expand All @@ -118,11 +139,16 @@ QVariant QgsDatumTransformTableModel::data( const QModelIndex &index, int role )
Q_NOWARN_DEPRECATED_POP
}
break;
#endif

default:
break;
}
break;
case Qt::UserRole:
#if PROJ_VERSION_MAJOR>=6
return proj;
#else
switch ( index.column() )
{
case SourceTransformColumn:
Expand All @@ -133,6 +159,7 @@ QVariant QgsDatumTransformTableModel::data( const QModelIndex &index, int role )
break;
}
break;
#endif
default:
break;
}
Expand All @@ -153,12 +180,18 @@ QVariant QgsDatumTransformTableModel::headerData( int section, Qt::Orientation o
{
case SourceCrsColumn :
return tr( "Source CRS" );
case SourceTransformColumn:
return tr( "Source Datum Transform" );
case DestinationCrsColumn:
return tr( "Destination CRS" );

#if PROJ_VERSION_MAJOR>=6
case ProjDefinitionColumn:
return tr( "Operation" );
#else
case SourceTransformColumn:
return tr( "Source Datum Transform" );
case DestinationTransformColumn:
return tr( "Destination Datum Transform" );
#endif
default:
break;
}
Expand Down Expand Up @@ -203,6 +236,7 @@ void QgsDatumTransformTableWidget::addDatumTransform()
Q_NOWARN_DEPRECATED_PUSH
context.addSourceDestinationDatumTransform( dt.sourceCrs, dt.destinationCrs, dt.sourceTransformId, dt.destinationTransformId );
Q_NOWARN_DEPRECATED_POP
context.addCoordinateOperation( dt.sourceCrs, dt.destinationCrs, dt.proj );
mModel->setTransformContext( context );
selectionChanged();
}
Expand All @@ -225,6 +259,7 @@ void QgsDatumTransformTableWidget::editDatumTransform()
{
QgsCoordinateReferenceSystem sourceCrs;
QgsCoordinateReferenceSystem destinationCrs;
QString proj;
int sourceTransform = -1;
int destinationTransform = -1;
for ( QModelIndexList::const_iterator it = selectedIndexes.constBegin(); it != selectedIndexes.constEnd(); it ++ )
Expand All @@ -237,20 +272,31 @@ void QgsDatumTransformTableWidget::editDatumTransform()
case QgsDatumTransformTableModel::DestinationCrsColumn:
destinationCrs = QgsCoordinateReferenceSystem( mModel->data( *it, Qt::DisplayRole ).toString() );
break;
#if PROJ_VERSION_MAJOR>=6
case QgsDatumTransformTableModel::ProjDefinitionColumn:
proj = mModel->data( *it, Qt::UserRole ).toString();
break;
#else
case QgsDatumTransformTableModel::SourceTransformColumn:
sourceTransform = mModel->data( *it, Qt::UserRole ).toInt();
break;
case QgsDatumTransformTableModel::DestinationTransformColumn:
destinationTransform = mModel->data( *it, Qt::UserRole ).toInt();
break;
#endif
default:
break;
}
}

#if PROJ_VERSION_MAJOR>=6
if ( sourceCrs.isValid() && destinationCrs.isValid() && !proj.isEmpty() )
#else
if ( sourceCrs.isValid() && destinationCrs.isValid() &&
( sourceTransform != -1 || destinationTransform != -1 ) )
#endif
{
QgsDatumTransformDialog dlg( sourceCrs, destinationCrs, true, false, false, qMakePair( sourceTransform, destinationTransform ) );
QgsDatumTransformDialog dlg( sourceCrs, destinationCrs, true, false, false, qMakePair( sourceTransform, destinationTransform ), nullptr, nullptr, proj );
if ( dlg.exec() )
{
const QgsDatumTransformDialog::TransformInfo dt = dlg.selectedDatumTransform();
Expand All @@ -259,6 +305,7 @@ void QgsDatumTransformTableWidget::editDatumTransform()
Q_NOWARN_DEPRECATED_PUSH
context.addSourceDestinationDatumTransform( sourceCrs, destinationCrs, dt.sourceTransformId, dt.destinationTransformId );
Q_NOWARN_DEPRECATED_POP
context.addCoordinateOperation( sourceCrs, destinationCrs, dt.proj );
mModel->setTransformContext( context );
}
}
Expand Down
6 changes: 6 additions & 0 deletions src/app/qgsdatumtransformtablewidget.h
Expand Up @@ -37,10 +37,16 @@ class APP_EXPORT QgsDatumTransformTableModel : public QAbstractTableModel

enum TableColumns
{
#if PROJ_VERSION_MAJOR>=6
SourceCrsColumn = 0,
DestinationCrsColumn,
ProjDefinitionColumn,
#else
SourceCrsColumn = 0,
SourceTransformColumn,
DestinationCrsColumn,
DestinationTransformColumn,
#endif
};

QgsDatumTransformTableModel( QObject *parent = nullptr );
Expand Down
1 change: 1 addition & 0 deletions src/core/qgscoordinatereferencesystem.cpp
Expand Up @@ -2236,6 +2236,7 @@ int QgsCoordinateReferenceSystem::syncDatabase()

#if PROJ_VERSION_MAJOR>=6
PJ_CONTEXT *pjContext = QgsProjContext::get();

PROJ_STRING_LIST authorities = proj_get_authorities_from_database( pjContext );

int nextSrId = 520000000;
Expand Down

0 comments on commit 3defbe1

Please sign in to comment.