Skip to content

Commit

Permalink
[processing] introduce OutputCrs output and add algorithms to get lay…
Browse files Browse the repository at this point in the history
…er CRS in modeler
  • Loading branch information
alexbruy committed Aug 5, 2016
1 parent 40de15c commit 4c39bd1
Show file tree
Hide file tree
Showing 6 changed files with 120 additions and 4 deletions.
9 changes: 9 additions & 0 deletions python/plugins/processing/core/outputs.py
Expand Up @@ -115,6 +115,15 @@ def setValue(self, value):
return False


class OutputCrs(Output):

def __init__(self, name='', description=''):
self.name = name
self.description = description
self.value = None
self.hidden = True


class OutputFile(Output):

def __init__(self, name='', description='', ext=None):
Expand Down
Expand Up @@ -31,6 +31,8 @@
from processing.modeler.CalculatorModelerAlgorithm import CalculatorModelerAlgorithm
from processing.modeler.RasterLayerBoundsAlgorithm import RasterLayerBoundsAlgorithm
from processing.modeler.VectorLayerBoundsAlgorithm import VectorLayerBoundsAlgorithm
from processing.modeler.RasterLayerCrsAlgorithm import RasterLayerCrsAlgorithm
from processing.modeler.VectorLayerCrsAlgorithm import VectorLayerCrsAlgorithm

pluginPath = os.path.split(os.path.dirname(__file__))[0]

Expand All @@ -52,6 +54,8 @@ def getIcon(self):
def _loadAlgorithms(self):
self.algs = [CalculatorModelerAlgorithm(),
RasterLayerBoundsAlgorithm(),
VectorLayerBoundsAlgorithm()]
VectorLayerBoundsAlgorithm(),
RasterLayerCrsAlgorithm(),
VectorLayerCrsAlgorithm()]
for alg in self.algs:
alg.provider = self
5 changes: 3 additions & 2 deletions python/plugins/processing/modeler/ModelerParametersDialog.py
Expand Up @@ -69,7 +69,8 @@
OutputDirectory,
OutputNumber,
OutputString,
OutputExtent)
OutputExtent,
OutputCrs)

from processing.modeler.ModelerAlgorithm import (ValueFromInput,
ValueFromOutput,
Expand Down Expand Up @@ -384,7 +385,7 @@ def getWidgetFromParameter(self, param):
item.setEditText(unicode(param.default))
elif isinstance(param, ParameterCrs):
item = QComboBox()
values = self.getAvailableValuesOfType(ParameterCrs)
values = self.getAvailableValuesOfType(ParameterCrs, OutputCrs)
for v in values:
item.addItem(self.resolveValueDescription(v), v)
elif isinstance(param, ParameterExtent):
Expand Down
Expand Up @@ -28,8 +28,8 @@
from processing.core.GeoAlgorithm import GeoAlgorithm
from processing.core.parameters import ParameterRaster
from processing.core.outputs import OutputNumber
from processing.tools import dataobjects
from processing.core.outputs import OutputExtent
from processing.tools import dataobjects


class RasterLayerBoundsAlgorithm(GeoAlgorithm):
Expand Down
51 changes: 51 additions & 0 deletions python/plugins/processing/modeler/RasterLayerCrsAlgorithm.py
@@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-

"""
***************************************************************************
RasterLayerCrsAlgorithm.py
---------------------
Date : August 2016
Copyright : (C) 2016 by Alexander Bruy
Email : alexander dot bruy at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************
"""

__author__ = 'Alexander Bruy'
__date__ = 'August 2016'
__copyright__ = '(C) 2016, Alexander Bruy'

# This will get replaced with a git SHA1 when you do a git archive

__revision__ = '$Format:%H$'

from processing.core.GeoAlgorithm import GeoAlgorithm
from processing.core.parameters import ParameterRaster
from processing.core.outputs import OutputCrs
from processing.tools import dataobjects


class RasterLayerCrsAlgorithm(GeoAlgorithm):

LAYER = 'LAYER'
CRS = 'CRS'

def defineCharacteristics(self):
self.showInModeler = True
self.showInToolbox = False

self.name = self.tr('Raster layer CRS', 'RasterLayerCrsAlgorithm')
self.group = self.tr('Modeler-only tools', 'RasterLayerCrsAlgorithm')

self.addParameter(ParameterRaster(self.LAYER, self.tr('Layer', 'RasterLayerCrsAlgorithm')))
self.addOutput(OutputCrs(self.CRS, self.tr('CRS', 'RasterLayerCrsAlgorithm')))

def processAlgorithm(self, progress):
layer = dataobjects.getObjectFromUri(self.getParameterValue(self.LAYER))
self.setOutputValue(self.CRS, layer.crs().authid())
51 changes: 51 additions & 0 deletions python/plugins/processing/modeler/VectorLayerCrsAlgorithm.py
@@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-

"""
***************************************************************************
VectorLayerCrsAlgorithm.py
---------------------
Date : August 2016
Copyright : (C) 2016 by Alexander Bruy
Email : alexander dot bruy at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************
"""

__author__ = 'Alexander Bruy'
__date__ = 'August 2016'
__copyright__ = '(C) 2016, Alexander Bruy'

# This will get replaced with a git SHA1 when you do a git archive

__revision__ = '$Format:%H$'

from processing.core.GeoAlgorithm import GeoAlgorithm
from processing.core.parameters import ParameterVector
from processing.core.outputs import OutputCrs
from processing.tools import dataobjects


class VectorLayerCrsAlgorithm(GeoAlgorithm):

LAYER = 'LAYER'
CRS = 'CRS'

def defineCharacteristics(self):
self.showInModeler = True
self.showInToolbox = False

self.name = self.tr('Vector layer CRS', 'VectorLayerCrsAlgorithm')
self.group = self.tr('Modeler-only tools', 'VectorLayerCrsAlgorithm')

self.addParameter(ParameterVector(self.LAYER, self.tr('Layer', 'VectorLayerCrsAlgorithm'), ))
self.addOutput(OutputCrs(self.CRS, self.tr('CRS', 'VectorLayerCrsAlgorithm')))

def processAlgorithm(self, progress):
layer = dataobjects.getObjectFromUri(self.getParameterValue(self.LAYER))
self.setOutputValue(self.CRS, layer.crs().authid())

0 comments on commit 4c39bd1

Please sign in to comment.