Skip to content

Commit 8b54d2f

Browse files
committedMar 17, 2020
[processing] Fix conversion of ESRI CRS when running GDAL algorithms under proj 6
Fixes #35123
1 parent ccbe6b9 commit 8b54d2f

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed
 

‎python/plugins/processing/algs/gdal/GdalUtils.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@
4141
QgsMessageLog,
4242
QgsSettings,
4343
QgsCredentials,
44-
QgsDataSourceUri)
44+
QgsDataSourceUri,
45+
QgsProjUtils,
46+
QgsCoordinateReferenceSystem)
4547
from processing.core.ProcessingConfig import ProcessingConfig
4648
from processing.tools.system import isWindows, isMac
4749

@@ -432,8 +434,12 @@ def gdal_crs_string(crs):
432434
:param crs: crs to convert
433435
:return: gdal friendly string
434436
"""
435-
if crs.authid().upper().startswith('EPSG:'):
437+
if crs.authid().upper().startswith('EPSG:') or crs.authid().upper().startswith('IGNF:') or crs.authid().upper().startswith('ESRI:'):
436438
return crs.authid()
437439

440+
if QgsProjUtils.projVersionMajor() >= 6:
441+
# use WKT
442+
return crs.toWkt(QgsCoordinateReferenceSystem.WKT2_2018)
443+
438444
# fallback to proj4 string, stripping out newline characters
439445
return crs.toProj().replace('\n', ' ').replace('\r', ' ')

‎python/plugins/processing/tests/GdalAlgorithmsGeneralTest.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
QgsProject,
3737
QgsVectorLayer,
3838
QgsRectangle,
39+
QgsProjUtils,
3940
QgsProcessingException,
4041
QgsProcessingFeatureSourceDefinition)
4142

@@ -318,15 +319,22 @@ def testCrsConversion(self):
318319
crs.createFromProj(
319320
'+proj=utm +zone=36 +south +a=600000 +b=70000 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs')
320321
self.assertTrue(crs.isValid())
321-
self.assertEqual(GdalUtils.gdal_crs_string(crs),
322-
'+proj=utm +zone=36 +south +a=600000 +b=70000 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs')
323-
# check that newlines are stripped
324-
crs = QgsCoordinateReferenceSystem()
325-
crs.createFromProj(
326-
'+proj=utm +zone=36 +south\n +a=600000 +b=70000 \r\n +towgs84=-143,-90,-294,0,0,0,0 +units=m\n+no_defs')
327-
self.assertTrue(crs.isValid())
328-
self.assertEqual(GdalUtils.gdal_crs_string(crs),
329-
'+proj=utm +zone=36 +south +a=600000 +b=70000 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs')
322+
323+
if QgsProjUtils.projVersionMajor() >= 6:
324+
# proj 6, WKT should be used
325+
self.assertEqual(GdalUtils.gdal_crs_string(crs)[:40], 'BOUNDCRS[SOURCECRS[PROJCRS["unknown",BAS')
326+
327+
self.assertEqual(GdalUtils.gdal_crs_string(QgsCoordinateReferenceSystem('ESRI:102003')), 'ESRI:102003')
328+
else:
329+
self.assertEqual(GdalUtils.gdal_crs_string(crs),
330+
'+proj=utm +zone=36 +south +a=600000 +b=70000 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs')
331+
# check that newlines are stripped
332+
crs = QgsCoordinateReferenceSystem()
333+
crs.createFromProj(
334+
'+proj=utm +zone=36 +south\n +a=600000 +b=70000 \r\n +towgs84=-143,-90,-294,0,0,0,0 +units=m\n+no_defs')
335+
self.assertTrue(crs.isValid())
336+
self.assertEqual(GdalUtils.gdal_crs_string(crs),
337+
'+proj=utm +zone=36 +south +a=600000 +b=70000 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs')
330338

331339

332340
if __name__ == '__main__':

0 commit comments

Comments
 (0)
Please sign in to comment.