@@ -349,52 +349,56 @@ QList<QgsEllipsoidUtils::EllipsoidDefinition> QgsEllipsoidUtils::definitions()
349
349
QgsReadWriteLocker locker ( sEllipsoidCacheLock , QgsReadWriteLocker::Write );
350
350
351
351
PJ_CONTEXT *context = QgsProjContext::get ();
352
- PROJ_STRING_LIST authorities = proj_get_authorities_from_database ( context );
353
- PROJ_STRING_LIST authoritiesIt = authorities;
354
- while ( char *authority = *authoritiesIt )
352
+ if ( PROJ_STRING_LIST authorities = proj_get_authorities_from_database ( context ) )
355
353
{
356
- PROJ_STRING_LIST codes = proj_get_codes_from_database ( context, authority, PJ_TYPE_ELLIPSOID, 0 );
357
- PROJ_STRING_LIST codesIt = codes;
358
- while ( char *code = *codesIt )
354
+ PROJ_STRING_LIST authoritiesIt = authorities;
355
+ while ( char *authority = *authoritiesIt )
359
356
{
360
- EllipsoidDefinition def;
361
-
362
- PJ *ellipsoid = proj_create_from_database ( context, authority, code, PJ_CATEGORY_ELLIPSOID, 0 , nullptr );
363
-
364
- QString name = QString ( proj_get_name ( ellipsoid ) );
365
- def.acronym = QStringLiteral ( " %1:%2" ).arg ( authority, code );
366
- name.replace ( ' _' , ' ' );
367
- def.description = QStringLiteral ( " %1 (%2:%3)" ).arg ( name, authority, code );
368
-
369
- double semiMajor, semiMinor, invFlattening;
370
- int semiMinorComputed = 0 ;
371
- if ( proj_ellipsoid_get_parameters ( context, ellipsoid, &semiMajor, &semiMinor, &semiMinorComputed, &invFlattening ) )
357
+ if ( PROJ_STRING_LIST codes = proj_get_codes_from_database ( context, authority, PJ_TYPE_ELLIPSOID, 0 ) )
372
358
{
373
- def.parameters .semiMajor = semiMajor;
374
- def.parameters .semiMinor = semiMinor;
375
- def.parameters .inverseFlattening = invFlattening;
376
- if ( !semiMinorComputed )
377
- def.parameters .crs = QgsCoordinateReferenceSystem::fromProj4 ( QStringLiteral ( " +proj=longlat +a=%1 +b=%2 +no_defs" ).arg ( def.parameters .semiMajor , 0 , ' g' , 17 ).arg ( def.parameters .semiMinor , 0 , ' g' , 17 ) );
378
- else if ( !qgsDoubleNear ( def.parameters .inverseFlattening , 0.0 ) )
379
- def.parameters .crs = QgsCoordinateReferenceSystem::fromProj4 ( QStringLiteral ( " +proj=longlat +a=%1 +rf=%2 +no_defs" ).arg ( def.parameters .semiMajor , 0 , ' g' , 17 ).arg ( def.parameters .inverseFlattening , 0 , ' g' , 17 ) );
380
- else
381
- def.parameters .crs = QgsCoordinateReferenceSystem::fromProj4 ( QStringLiteral ( " +proj=longlat +a=%1 +no_defs" ).arg ( def.parameters .semiMajor , 0 , ' g' , 17 ) );
359
+ PROJ_STRING_LIST codesIt = codes;
360
+ while ( char *code = *codesIt )
361
+ {
362
+ if ( PJ *ellipsoid = proj_create_from_database ( context, authority, code, PJ_CATEGORY_ELLIPSOID, 0 , nullptr ) )
363
+ {
364
+ EllipsoidDefinition def;
365
+ QString name = QString ( proj_get_name ( ellipsoid ) );
366
+ def.acronym = QStringLiteral ( " %1:%2" ).arg ( authority, code );
367
+ name.replace ( ' _' , ' ' );
368
+ def.description = QStringLiteral ( " %1 (%2:%3)" ).arg ( name, authority, code );
369
+
370
+ double semiMajor, semiMinor, invFlattening;
371
+ int semiMinorComputed = 0 ;
372
+ if ( proj_ellipsoid_get_parameters ( context, ellipsoid, &semiMajor, &semiMinor, &semiMinorComputed, &invFlattening ) )
373
+ {
374
+ def.parameters .semiMajor = semiMajor;
375
+ def.parameters .semiMinor = semiMinor;
376
+ def.parameters .inverseFlattening = invFlattening;
377
+ if ( !semiMinorComputed )
378
+ def.parameters .crs = QgsCoordinateReferenceSystem::fromProj4 ( QStringLiteral ( " +proj=longlat +a=%1 +b=%2 +no_defs" ).arg ( def.parameters .semiMajor , 0 , ' g' , 17 ).arg ( def.parameters .semiMinor , 0 , ' g' , 17 ) );
379
+ else if ( !qgsDoubleNear ( def.parameters .inverseFlattening , 0.0 ) )
380
+ def.parameters .crs = QgsCoordinateReferenceSystem::fromProj4 ( QStringLiteral ( " +proj=longlat +a=%1 +rf=%2 +no_defs" ).arg ( def.parameters .semiMajor , 0 , ' g' , 17 ).arg ( def.parameters .inverseFlattening , 0 , ' g' , 17 ) );
381
+ else
382
+ def.parameters .crs = QgsCoordinateReferenceSystem::fromProj4 ( QStringLiteral ( " +proj=longlat +a=%1 +no_defs" ).arg ( def.parameters .semiMajor , 0 , ' g' , 17 ) );
383
+ }
384
+ else
385
+ {
386
+ def.parameters .valid = false ;
387
+ }
388
+
389
+ defs << def;
390
+ sEllipsoidCache .insert ( def.acronym , def.parameters );
391
+ }
392
+
393
+ codesIt++;
394
+ }
395
+ proj_string_list_destroy ( codes );
382
396
}
383
- else
384
- {
385
- def.parameters .valid = false ;
386
- }
387
-
388
- defs << def;
389
- sEllipsoidCache .insert ( def.acronym , def.parameters );
390
397
391
- codesIt ++;
398
+ authoritiesIt ++;
392
399
}
393
- proj_string_list_destroy ( codes );
394
-
395
- authoritiesIt++;
400
+ proj_string_list_destroy ( authorities );
396
401
}
397
- proj_string_list_destroy ( authorities );
398
402
locker.unlock ();
399
403
400
404
#else
0 commit comments