mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-28 00:17:30 -05:00
Added file output to gdal extractprojection, added exception for non-gdal sources and fixed boolean parameter handling + some formatting
This commit is contained in:
parent
79731715ed
commit
8976f6822f
@ -32,8 +32,10 @@ from qgis.PyQt.QtGui import QIcon
|
||||
from osgeo import gdal, osr
|
||||
|
||||
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
|
||||
from qgis.core import QgsProcessingException
|
||||
from qgis.core import (QgsProcessingParameterRasterLayer,
|
||||
QgsProcessingParameterBoolean)
|
||||
QgsProcessingParameterBoolean,
|
||||
QgsProcessingOutputFile)
|
||||
|
||||
pluginPath = os.path.split(os.path.split(os.path.dirname(__file__))[0])[0]
|
||||
|
||||
@ -41,15 +43,25 @@ pluginPath = os.path.split(os.path.split(os.path.dirname(__file__))[0])[0]
|
||||
class ExtractProjection(GdalAlgorithm):
|
||||
|
||||
INPUT = 'INPUT'
|
||||
PRJ_FILE_CREATE = 'PRJ_FILE_CREATE'
|
||||
WORLD_FILE = 'WORLD_FILE'
|
||||
PRJ_FILE = 'PRJ_FILE'
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
def initAlgorithm(self, config=None):
|
||||
self.addParameter(QgsProcessingParameterRasterLayer(self.INPUT, self.tr('Input file')))
|
||||
self.addParameter(QgsProcessingParameterBoolean(self.PRJ_FILE,
|
||||
self.addParameter(QgsProcessingParameterRasterLayer(
|
||||
self.INPUT,
|
||||
self.tr('Input file')))
|
||||
self.addParameter(QgsProcessingParameterBoolean(
|
||||
self.PRJ_FILE_CREATE,
|
||||
self.tr('Create also .prj file'), False))
|
||||
self.addOutput(QgsProcessingOutputFile(self.WORLD_FILE,
|
||||
self.tr('World file')))
|
||||
self.addOutput(QgsProcessingOutputFile(
|
||||
self.PRJ_FILE,
|
||||
self.tr('ESRI Shapefile prj file')))
|
||||
|
||||
def name(self):
|
||||
return 'extractprojection'
|
||||
@ -58,7 +70,8 @@ class ExtractProjection(GdalAlgorithm):
|
||||
return self.tr('Extract projection')
|
||||
|
||||
def icon(self):
|
||||
return QIcon(os.path.join(pluginPath, 'images', 'gdaltools', 'projection-export.png'))
|
||||
return QIcon(os.path.join(pluginPath, 'images', 'gdaltools',
|
||||
'projection-export.png'))
|
||||
|
||||
def group(self):
|
||||
return self.tr('Raster projections')
|
||||
@ -69,12 +82,19 @@ class ExtractProjection(GdalAlgorithm):
|
||||
def commandName(self):
|
||||
return 'extractprojection'
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
def getConsoleCommands(self, parameters, context, feedback,
|
||||
executing=True):
|
||||
return [self.commandName()]
|
||||
|
||||
def processAlgorithm(self, parameters, context, feedback):
|
||||
createPrj = QgsProcessingParameterBoolean(self.PRJ_FILE)
|
||||
raster = self.parameterAsRasterLayer(parameters, self.INPUT, context)
|
||||
createPrj = self.parameterAsBool(parameters,
|
||||
self.PRJ_FILE_CREATE,
|
||||
context)
|
||||
raster = self.parameterAsRasterLayer(parameters, self.INPUT,
|
||||
context)
|
||||
if not raster.dataProvider().name() == 'gdal':
|
||||
raise QgsProcessingException('This algorithm can only '\
|
||||
'be used with GDAL raster layers')
|
||||
rasterPath = raster.source()
|
||||
rasterDS = gdal.Open(rasterPath, gdal.GA_ReadOnly)
|
||||
geotransform = rasterDS.GetGeoTransform()
|
||||
@ -85,6 +105,7 @@ class ExtractProjection(GdalAlgorithm):
|
||||
|
||||
outFileName = os.path.splitext(str(rasterPath))[0]
|
||||
|
||||
results = {}
|
||||
if crs != '' and createPrj:
|
||||
tmp = osr.SpatialReference()
|
||||
tmp.ImportFromWkt(crs)
|
||||
@ -94,6 +115,9 @@ class ExtractProjection(GdalAlgorithm):
|
||||
|
||||
with open(outFileName + '.prj', 'wt') as prj:
|
||||
prj.write(crs)
|
||||
results[self.PRJ_FILE] = outFileName + '.prj'
|
||||
else:
|
||||
results[self.PRJ_FILE] = None
|
||||
|
||||
with open(outFileName + '.wld', 'wt') as wld:
|
||||
wld.write('%0.8f\n' % geotransform[1])
|
||||
@ -106,5 +130,6 @@ class ExtractProjection(GdalAlgorithm):
|
||||
wld.write('%0.8f\n' % (geotransform[3] +
|
||||
0.5 * geotransform[4] +
|
||||
0.5 * geotransform[5]))
|
||||
return {}
|
||||
results[self.WORLD_FILE] = outFileName + '.wld'
|
||||
|
||||
return results
|
||||
|
Loading…
x
Reference in New Issue
Block a user