@@ -188,14 +188,18 @@ void QgsCoordinateTransformContext::readXml( const QDomElement &element, const Q
188
188
const QDomElement transformElem = srcDestNodes.at ( i ).toElement ();
189
189
QString key1 = transformElem.attribute ( QStringLiteral ( " source" ) );
190
190
QString key2 = transformElem.attribute ( QStringLiteral ( " dest" ) );
191
- bool ok = false ;
192
- int value1 = transformElem.attribute ( QStringLiteral ( " sourceTransform" ) ).toInt ( &ok );
193
- bool ok2 = false ;
194
- int value2 = transformElem.attribute ( QStringLiteral ( " destTransform" ) ).toInt ( &ok2 );
195
- if ( ok && ok2 )
196
- {
197
- d->mSourceDestDatumTransforms .insert ( qMakePair ( key1, key2 ), QgsCoordinateTransform::TransformPair ( value1, value2 ) );
198
- }
191
+
192
+ QString value1 = transformElem.attribute ( QStringLiteral ( " sourceTransform" ) );
193
+ QString value2 = transformElem.attribute ( QStringLiteral ( " destTransform" ) );
194
+
195
+ int datumId1 = -1 ;
196
+ int datumId2 = -1 ;
197
+ if ( !value1.isEmpty () )
198
+ datumId1 = QgsCoordinateTransform::projStringToDatumTransformId ( value1 );
199
+ if ( !value2.isEmpty () )
200
+ datumId2 = QgsCoordinateTransform::projStringToDatumTransformId ( value2 );
201
+ // TODO - throw warning if value1 or value2 is non-empty, yet no matching transform was found
202
+ d->mSourceDestDatumTransforms .insert ( qMakePair ( key1, key2 ), QgsCoordinateTransform::TransformPair ( datumId1, datumId2 ) );
199
203
}
200
204
201
205
#if 0
@@ -205,12 +209,13 @@ void QgsCoordinateTransformContext::readXml( const QDomElement &element, const Q
205
209
{
206
210
const QDomElement transformElem = srcNodes.at( i ).toElement();
207
211
QString key = transformElem.attribute( QStringLiteral( "crs" ) );
208
- bool ok = false;
209
- int value = transformElem.attribute( QStringLiteral( "transform" ) ).toInt( &ok );
210
- if ( ok )
211
- {
212
- d->mSourceDatumTransforms.insert( key, value );
213
- }
212
+ QString value = transformElem.attribute( QStringLiteral( "transform" ) );
213
+ if ( value.isEmpty() )
214
+ continue;
215
+
216
+ int datumId = QgsCoordinateTransform::projStringToDatumTransformId( value );
217
+ //TODO - throw warning if datumId is -1
218
+ d->mSourceDatumTransforms.insert( key, datumId );
214
219
}
215
220
216
221
// dest transforms
@@ -219,12 +224,13 @@ void QgsCoordinateTransformContext::readXml( const QDomElement &element, const Q
219
224
{
220
225
const QDomElement transformElem = destNodes.at( i ).toElement();
221
226
QString key = transformElem.attribute( QStringLiteral( "crs" ) );
222
- bool ok = false;
223
- int value = transformElem.attribute( QStringLiteral( "transform" ) ).toInt( &ok );
224
- if ( ok )
225
- {
226
- d->mDestDatumTransforms.insert( key, value );
227
- }
227
+ QString value = transformElem.attribute( QStringLiteral( "transform" ) );
228
+ if ( value.isEmpty() )
229
+ continue;
230
+
231
+ int datumId = QgsCoordinateTransform::projStringToDatumTransformId( value );
232
+ //TODO - throw warning if datumId is -1
233
+ d->mDestDatumTransforms.insert( key, datumId );
228
234
}
229
235
#endif
230
236
@@ -243,8 +249,8 @@ void QgsCoordinateTransformContext::writeXml( QDomElement &element, const QgsRea
243
249
QDomElement transformElem = element.ownerDocument ().createElement ( QStringLiteral ( " srcDest" ) );
244
250
transformElem.setAttribute ( QStringLiteral ( " source" ), it.key ().first );
245
251
transformElem.setAttribute ( QStringLiteral ( " dest" ), it.key ().second );
246
- transformElem.setAttribute ( QStringLiteral ( " sourceTransform" ), it.value ().sourceTransformId );
247
- transformElem.setAttribute ( QStringLiteral ( " destTransform" ), it.value ().destinationTransformId );
252
+ transformElem.setAttribute ( QStringLiteral ( " sourceTransform" ), it.value ().sourceTransformId < 0 ? QString () : QgsCoordinateTransform::datumTransformToProj ( it. value (). sourceTransformId ) );
253
+ transformElem.setAttribute ( QStringLiteral ( " destTransform" ), it.value ().destinationTransformId < 0 ? QString () : QgsCoordinateTransform::datumTransformToProj ( it. value (). destinationTransformId ) );
248
254
contextElem.appendChild ( transformElem );
249
255
}
250
256
@@ -254,7 +260,7 @@ void QgsCoordinateTransformContext::writeXml( QDomElement &element, const QgsRea
254
260
{
255
261
QDomElement transformElem = element.ownerDocument().createElement( QStringLiteral( "source" ) );
256
262
transformElem.setAttribute( QStringLiteral( "crs" ), it.key() );
257
- transformElem.setAttribute( QStringLiteral( "transform" ), it.value() );
263
+ transformElem.setAttribute( QStringLiteral( "transform" ), it.value() < 0 ? QString() : it.value() );
258
264
contextElem.appendChild( transformElem );
259
265
}
260
266
@@ -263,7 +269,7 @@ void QgsCoordinateTransformContext::writeXml( QDomElement &element, const QgsRea
263
269
{
264
270
QDomElement transformElem = element.ownerDocument().createElement( QStringLiteral( "dest" ) );
265
271
transformElem.setAttribute( QStringLiteral( "crs" ), it.key() );
266
- transformElem.setAttribute( QStringLiteral( "transform" ), it.value() );
272
+ transformElem.setAttribute( QStringLiteral( "transform" ), it.value() < 0 ? QString() : it.value() );
267
273
contextElem.appendChild( transformElem );
268
274
}
269
275
#endif
@@ -305,13 +311,15 @@ void QgsCoordinateTransformContext::readSettings()
305
311
destAuthId = split.at ( 1 ).split ( ' _' ).at ( 0 );
306
312
}
307
313
314
+ QString proj = settings.value ( *pkeyIt ).toString ();
315
+ int datumId = QgsCoordinateTransform::projStringToDatumTransformId ( proj );
308
316
if ( pkeyIt->contains ( QLatin1String ( " srcTransform" ) ) )
309
317
{
310
- transforms[ qMakePair ( srcAuthId, destAuthId )].first = settings. value ( *pkeyIt ). toInt () ;
318
+ transforms[ qMakePair ( srcAuthId, destAuthId )].first = datumId ;
311
319
}
312
320
else if ( pkeyIt->contains ( QLatin1String ( " destTransform" ) ) )
313
321
{
314
- transforms[ qMakePair ( srcAuthId, destAuthId )].second = settings. value ( *pkeyIt ). toInt () ;
322
+ transforms[ qMakePair ( srcAuthId, destAuthId )].second = datumId ;
315
323
}
316
324
}
317
325
}
@@ -346,10 +354,16 @@ void QgsCoordinateTransformContext::writeSettings()
346
354
QString srcAuthId = transformIt.key ().first ;
347
355
QString destAuthId = transformIt.key ().second ;
348
356
int sourceDatumTransform = transformIt.value ().sourceTransformId ;
357
+ QString sourceDatumProj;
358
+ if ( sourceDatumTransform >= 0 )
359
+ sourceDatumProj = QgsCoordinateTransform::datumTransformToProj ( sourceDatumTransform );
349
360
int destinationDatumTransform = transformIt.value ().destinationTransformId ;
361
+ QString destinationDatumProj;
362
+ if ( destinationDatumTransform >= 0 )
363
+ destinationDatumProj = QgsCoordinateTransform::datumTransformToProj ( destinationDatumTransform );
350
364
351
- settings.setValue ( srcAuthId + " //" + destAuthId + " _srcTransform" , sourceDatumTransform );
352
- settings.setValue ( srcAuthId + " //" + destAuthId + " _destTransform" , destinationDatumTransform );
365
+ settings.setValue ( srcAuthId + " //" + destAuthId + " _srcTransform" , sourceDatumProj );
366
+ settings.setValue ( srcAuthId + " //" + destAuthId + " _destTransform" , destinationDatumProj );
353
367
}
354
368
355
369
settings.endGroup ();
0 commit comments