Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix memory layers lose CRS definition if it does not have an authority
associated with it

Fixes #36241

(cherry picked from commit e23a49a)
  • Loading branch information
nyalldawson committed Jun 19, 2020
1 parent f552a98 commit 99ccdeb
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 2 deletions.
5 changes: 4 additions & 1 deletion src/core/providers/memory/qgsmemoryproviderutils.cpp
Expand Up @@ -65,7 +65,10 @@ QgsVectorLayer *QgsMemoryProviderUtils::createMemoryLayer( const QString &name,
QStringList parts;
if ( crs.isValid() )
{
parts << QStringLiteral( "crs=" ) + crs.authid();
if ( !crs.authid().isEmpty() )
parts << QStringLiteral( "crs=%1" ).arg( crs.authid() );
else
parts << QStringLiteral( "crs=wkt:%1" ).arg( crs.toWkt( QgsCoordinateReferenceSystem::WKT_PREFERRED ) );
}
for ( const auto &field : fields )
{
Expand Down
16 changes: 15 additions & 1 deletion tests/src/python/test_provider_memory.py
Expand Up @@ -28,7 +28,8 @@
QgsCoordinateReferenceSystem,
QgsRectangle,
QgsTestUtils,
QgsFeatureSource
QgsFeatureSource,
QgsProjUtils
)

from qgis.testing import (
Expand Down Expand Up @@ -439,6 +440,19 @@ def testCreateMemoryLayer(self):
self.assertTrue(layer.crs().isValid())
self.assertEqual(layer.crs().authid(), 'EPSG:3111')

# custom CRS
if QgsProjUtils.projVersionMajor() >= 6:
crs = QgsCoordinateReferenceSystem.fromProj('+proj=qsc +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +units=m +no_defs')
layer = QgsMemoryProviderUtils.createMemoryLayer('my name', QgsFields(), QgsWkbTypes.PolygonZM, crs)
self.assertTrue(layer.isValid())
self.assertTrue(layer.crs().isValid())
self.assertEqual(layer.crs().toProj(), '+proj=qsc +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +units=m +no_defs +type=crs')

# clone it, just to check
layer2 = layer.clone()
self.assertEqual(layer2.crs().toProj(),
'+proj=qsc +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +units=m +no_defs +type=crs')

# fields
fields = QgsFields()
fields.append(QgsField("string", QVariant.String))
Expand Down

0 comments on commit 99ccdeb

Please sign in to comment.