Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[processing][gdal] Fix conversion of non-EPSG crs parameters
to GDAL compatible strings
  • Loading branch information
nyalldawson committed May 11, 2018
1 parent 6b67708 commit 0d52045
Show file tree
Hide file tree
Showing 10 changed files with 321 additions and 34 deletions.
4 changes: 2 additions & 2 deletions python/plugins/processing/algs/gdal/AssignProjection.py
Expand Up @@ -84,11 +84,11 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):

fileName = inLayer.source()

crs = self.parameterAsCrs(parameters, self.CRS, context).authid()
crs = self.parameterAsCrs(parameters, self.CRS, context)

arguments = []
arguments.append('-a_srs')
arguments.append(crs)
arguments.append(GdalUtils.gdal_crs_string(crs))

arguments.append(fileName)

Expand Down
15 changes: 15 additions & 0 deletions python/plugins/processing/algs/gdal/GdalUtils.py
Expand Up @@ -37,6 +37,7 @@

from qgis.core import (Qgis,
QgsApplication,
QgsCoordinateReferenceSystem,
QgsVectorFileWriter,
QgsProcessingFeedback,
QgsProcessingUtils,
Expand Down Expand Up @@ -411,3 +412,17 @@ def writeLayerParameterToTextFile(filename, alg, parameters, parameter_name, con
layers.append(l.source())
f.write('\n'.join(layers))
return listFile

@staticmethod
def gdal_crs_string(crs: QgsCoordinateReferenceSystem) -> str:
"""
Converts a QgsCoordinateReferenceSytem to a string understandable
by GDAL
:param crs: crs to convert
:return: gdal friendly string
"""
if crs.authid().upper().startswith('EPSG:'):
return crs.authid()

# fallback to proj4 string
return crs.toProj4()
18 changes: 9 additions & 9 deletions python/plugins/processing/algs/gdal/OgrToPostGis.py
Expand Up @@ -194,9 +194,9 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):
raise QgsProcessingException(self.invalidSourceError(parameters, self.INPUT))

shapeEncoding = self.parameterAsString(parameters, self.SHAPE_ENCODING, context)
ssrs = self.parameterAsCrs(parameters, self.S_SRS, context).authid()
tsrs = self.parameterAsCrs(parameters, self.T_SRS, context).authid()
asrs = self.parameterAsCrs(parameters, self.A_SRS, context).authid()
ssrs = self.parameterAsCrs(parameters, self.S_SRS, context)
tsrs = self.parameterAsCrs(parameters, self.T_SRS, context)
asrs = self.parameterAsCrs(parameters, self.A_SRS, context)
table = self.parameterAsString(parameters, self.TABLE, context)
schema = self.parameterAsString(parameters, self.SCHEMA, context)
pk = self.parameterAsString(parameters, self.PK, context)
Expand Down Expand Up @@ -265,15 +265,15 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):
table = '{}.{}'.format(schema, table)
arguments.append('-nln')
arguments.append(table)
if len(ssrs) > 0:
if ssrs.isValid():
arguments.append('-s_srs')
arguments.append(ssrs)
if len(tsrs) > 0:
arguments.append(GdalUtils.gdal_crs_string(ssrs))
if tsrs.isValid():
arguments.append('-t_srs')
arguments.append(tsrs)
if len(asrs) > 0:
arguments.append(GdalUtils.gdal_crs_string(tsrs))
if asrs.isValid():
arguments.append('-a_srs')
arguments.append(asrs)
arguments.append(GdalUtils.gdal_crs_string(asrs))
if not spat.isNull():
arguments.append('-spat')
arguments.append(spat.xMinimum())
Expand Down
2 changes: 1 addition & 1 deletion python/plugins/processing/algs/gdal/gdal2tiles.py
Expand Up @@ -188,7 +188,7 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):
crs = self.parameterAsCrs(parameters, self.SOURCE_CRS, context)
if crs.isValid():
arguments.append('-s')
arguments.append(crs.authid())
arguments.append(GdalUtils.gdal_crs_string(crs))

if self.NODATA in parameters and parameters[self.NODATA] is not None:
nodata = self.parameterAsDouble(parameters, self.NODATA, context)
Expand Down
3 changes: 2 additions & 1 deletion python/plugins/processing/algs/gdal/gdaltindex.py
Expand Up @@ -153,7 +153,8 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):
arguments.append('-src_srs_format {}'.format(self.modes[crs_format][1]))

if target_crs.isValid():
arguments.append('-t_srs {}'.format(target_crs.authid()))
arguments.append('-t_srs')
arguments.append(GdalUtils.gdal_crs_string(target_crs))

if outFormat:
arguments.append('-f {}'.format(outFormat))
Expand Down
18 changes: 9 additions & 9 deletions python/plugins/processing/algs/gdal/ogr2ogrtopostgislist.py
Expand Up @@ -188,9 +188,9 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):

ogrLayer, layername = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
shapeEncoding = self.parameterAsString(parameters, self.SHAPE_ENCODING, context)
ssrs = self.parameterAsCrs(parameters, self.S_SRS, context).authid()
tsrs = self.parameterAsCrs(parameters, self.T_SRS, context).authid()
asrs = self.parameterAsCrs(parameters, self.A_SRS, context).authid()
ssrs = self.parameterAsCrs(parameters, self.S_SRS, context)
tsrs = self.parameterAsCrs(parameters, self.T_SRS, context)
asrs = self.parameterAsCrs(parameters, self.A_SRS, context)
table = self.parameterAsString(parameters, self.TABLE, context)
schema = self.parameterAsString(parameters, self.SCHEMA, context)
pk = self.parameterAsString(parameters, self.PK, context)
Expand Down Expand Up @@ -261,15 +261,15 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):
table = '{}.{}'.format(schema, table)
arguments.append('-nln')
arguments.append(table)
if len(ssrs) > 0:
if ssrs.isValid():
arguments.append('-s_srs')
arguments.append(ssrs)
if len(tsrs) > 0:
arguments.append(GdalUtils.gdal_crs_string(ssrs))
if tsrs.isValid():
arguments.append('-t_srs')
arguments.append(tsrs)
if len(asrs) > 0:
arguments.append(GdalUtils.gdal_crs_string(tsrs))
if asrs.isValid():
arguments.append('-a_srs')
arguments.append(asrs)
arguments.append(GdalUtils.gdal_crs_string(asrs))
if not spat.isNull():
arguments.append('-spat')
arguments.append(spat.xMinimum())
Expand Down
2 changes: 1 addition & 1 deletion python/plugins/processing/algs/gdal/retile.py
Expand Up @@ -177,7 +177,7 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):
crs = self.parameterAsCrs(parameters, self.SOURCE_CRS, context)
if crs.isValid():
arguments.append('-s_srs')
arguments.append(crs.authid())
arguments.append(GdalUtils.gdal_crs_string(crs))

arguments.append('-r')
arguments.append(self.methods[self.parameterAsEnum(parameters, self.RESAMPLING, context)][1])
Expand Down
2 changes: 1 addition & 1 deletion python/plugins/processing/algs/gdal/translate.py
Expand Up @@ -130,7 +130,7 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):
crs = self.parameterAsCrs(parameters, self.TARGET_CRS, context)
if crs.isValid():
arguments.append('-a_srs')
arguments.append(crs.authid())
arguments.append(GdalUtils.gdal_crs_string(crs))

if nodata is not None:
arguments.append('-a_nodata')
Expand Down
4 changes: 2 additions & 2 deletions python/plugins/processing/algs/gdal/warp.py
Expand Up @@ -179,11 +179,11 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):
arguments = []
if sourceCrs.isValid():
arguments.append('-s_srs')
arguments.append(sourceCrs.authid())
arguments.append(GdalUtils.gdal_crs_string(sourceCrs))

if targetCrs.isValid():
arguments.append('-t_srs')
arguments.append(targetCrs.authid())
arguments.append(GdalUtils.gdal_crs_string(targetCrs))

if nodata is not None:
arguments.append('-dstnodata')
Expand Down

0 comments on commit 0d52045

Please sign in to comment.