Skip to content

Commit

Permalink
[processing][gdal] Fix conversion of non-EPSG crs parameters
Browse files Browse the repository at this point in the history
to GDAL compatible strings

(cherry-picked from 0d52045)
  • Loading branch information
nyalldawson committed May 14, 2018
1 parent cd6a14b commit 15c2c9b
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
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -80,11 +80,11 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):
inLayer = self.parameterAsRasterLayer(parameters, self.INPUT, context) inLayer = self.parameterAsRasterLayer(parameters, self.INPUT, context)
fileName = inLayer.source() fileName = inLayer.source()


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


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


arguments.append(fileName) arguments.append(fileName)


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


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

@staticmethod
def gdal_crs_string(crs: QgsCoordinateReferenceSystem) -> str:
"""
Converts a QgsCoordinateReferenceSystem 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
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -190,9 +190,9 @@ def getConnectionString(self, parameters, context):
def getConsoleCommands(self, parameters, context, feedback, executing=True): def getConsoleCommands(self, parameters, context, feedback, executing=True):
ogrLayer, layername = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing) ogrLayer, layername = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
shapeEncoding = self.parameterAsString(parameters, self.SHAPE_ENCODING, context) shapeEncoding = self.parameterAsString(parameters, self.SHAPE_ENCODING, context)
ssrs = self.parameterAsCrs(parameters, self.S_SRS, context).authid() ssrs = self.parameterAsCrs(parameters, self.S_SRS, context)
tsrs = self.parameterAsCrs(parameters, self.T_SRS, context).authid() tsrs = self.parameterAsCrs(parameters, self.T_SRS, context)
asrs = self.parameterAsCrs(parameters, self.A_SRS, context).authid() asrs = self.parameterAsCrs(parameters, self.A_SRS, context)
table = self.parameterAsString(parameters, self.TABLE, context) table = self.parameterAsString(parameters, self.TABLE, context)
schema = self.parameterAsString(parameters, self.SCHEMA, context) schema = self.parameterAsString(parameters, self.SCHEMA, context)
pk = self.parameterAsString(parameters, self.PK, 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) table = '{}.{}'.format(schema, table)
arguments.append('-nln') arguments.append('-nln')
arguments.append(table) arguments.append(table)
if len(ssrs) > 0: if ssrs.isValid():
arguments.append('-s_srs') arguments.append('-s_srs')
arguments.append(ssrs) arguments.append(GdalUtils.gdal_crs_string(ssrs))
if len(tsrs) > 0: if tsrs.isValid():
arguments.append('-t_srs') arguments.append('-t_srs')
arguments.append(tsrs) arguments.append(GdalUtils.gdal_crs_string(tsrs))
if len(asrs) > 0: if asrs.isValid():
arguments.append('-a_srs') arguments.append('-a_srs')
arguments.append(asrs) arguments.append(GdalUtils.gdal_crs_string(asrs))
if not spat.isNull(): if not spat.isNull():
arguments.append('-spat') arguments.append('-spat')
arguments.append(spat.xMinimum()) arguments.append(spat.xMinimum())
Expand Down
2 changes: 1 addition & 1 deletion python/plugins/processing/algs/gdal/gdal2tiles.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):
crs = self.parameterAsCrs(parameters, self.SOURCE_CRS, context) crs = self.parameterAsCrs(parameters, self.SOURCE_CRS, context)
if crs.isValid(): if crs.isValid():
arguments.append('-s') 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: if self.NODATA in parameters and parameters[self.NODATA] is not None:
nodata = self.parameterAsDouble(parameters, self.NODATA, context) nodata = self.parameterAsDouble(parameters, self.NODATA, context)
Expand Down
3 changes: 2 additions & 1 deletion python/plugins/processing/algs/gdal/gdaltindex.py
Original file line number Original file line Diff line number Diff line change
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])) arguments.append('-src_srs_format {}'.format(self.modes[crs_format][1]))


if target_crs.isValid(): 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: if outFormat:
arguments.append('-f {}'.format(outFormat)) arguments.append('-f {}'.format(outFormat))
Expand Down
18 changes: 9 additions & 9 deletions python/plugins/processing/algs/gdal/ogr2ogrtopostgislist.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -188,9 +188,9 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):


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


arguments.append('-r') arguments.append('-r')
arguments.append(self.methods[self.parameterAsEnum(parameters, self.RESAMPLING, context)][1]) 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
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):
crs = self.parameterAsCrs(parameters, self.TARGET_CRS, context) crs = self.parameterAsCrs(parameters, self.TARGET_CRS, context)
if crs.isValid(): if crs.isValid():
arguments.append('-a_srs') arguments.append('-a_srs')
arguments.append(crs.authid()) arguments.append(GdalUtils.gdal_crs_string(crs))


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


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


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

0 comments on commit 15c2c9b

Please sign in to comment.