Statistics
| Revision:

gvsig-scripting / org.gvsig.scripting / trunk / org.gvsig.scripting / org.gvsig.scripting.app / org.gvsig.scripting.app.mainplugin / src / main / resources-plugin / scripting / scripts / examples / geoprocess / proceso_desplazamientoxy.py @ 475

History | View | Annotate | Download (3.5 KB)

1

    
2

    
3
execfile( script.getResource("../libs/import_utils.py").getAbsolutePath() )
4

    
5
use_plugin("org.gvsig.geoprocess.app.mainplugin")
6

    
7

    
8
import_from_module("..libs.toolbox","*")
9

    
10
from gvsig import *
11
from commonsdialog import *
12
   
13
class XYShift(ToolboxProcess):
14
  
15
  def defineCharacteristics(self):
16
    """
17
En esta operacion debemos definir los parametros de netrada y salida que va a precisar nuetro proceso.
18
    """
19
    # Fijamos el nombre con el que se va a mostrar nuestro proceso
20
    self.setName("Prueba desplazamiento en X e Y")
21
    
22
    # Indicamos el grupo en el que aparecera
23
    self.setGroup("Vectorial")
24
        
25
    params = self.getParameters()
26
    # Indicamos que precisamos un parametro LAYER, del tipo punto y que es obligatorio
27
    params.addInputVectorLayer("LAYER","Caoa de entrada", SHAPE_TYPE_POINT,True)
28
    # Indicamos que precisamos un par de valores numericos, X e Y 
29
    params.addNumericalValue("X", "X_traslation",0, NUMERICAL_VALUE_DOUBLE)
30
    params.addNumericalValue("Y", "Y_traslation", 0, NUMERICAL_VALUE_DOUBLE)
31
    
32
    # Y por ultimo indicamos que precisaremos una capa de salida de puntos.
33
    self.addOutputVectorLayer("RESULT_POINT", "XYShift_point", SHAPE_TYPE_POINT)
34

    
35
  def processAlgorithm(self):
36
    """
37
Esta operacion es la encargada de realizar nuetro proceso.
38
    """
39
    features=None
40
    try:
41
      """
42
      Recogemos los parametros y creamos el conjunto de entidades asociadas a la capa
43
      de entrada.
44
      """
45
      params = self.getParameters()
46
      layer = params.getParameterValueAsVectorLayer("LAYER")
47
      x = params.getParameterValueAsDouble("X")
48
      y = params.getParameterValueAsDouble("Y")
49

    
50
      input_store = layer.getFeatureStore()
51

    
52
      features = input_store.getFeatureSet()
53
      
54
      """
55
      Generamos la capa de salida con la misma estructura que la capa de entrada
56
      """
57
      output_store = self.buildOutPutStore(
58
        features.getDefaultFeatureType(), 
59
        SHAPE_TYPE_POINT,
60
        "XYShift_points",
61
        "RESULT_POINT"
62
      )
63

    
64
      """
65
      Nos recorremos todas las entidades de entrada, y creamos las de salida desplazando la geometria
66
      en los valores indicados por la X e Y de los parametros.
67
      """
68
      self.setRangeOfValues(0,features.getSize())
69
      for feature in features.iterator():
70
        if self.isCanceled():
71
          # Si el usuario indico que quiere cancelar el proceso abortamos.
72
          print "Proceso cancelado"
73
          break
74
        
75
        # Incrementamos el progreso de nuestro proceso.
76
        self.next()
77

    
78
        # Creamos una nueva entidad para nuestro almacen de salida.
79
        newfeature = self.createNewFeature(output_store,feature)
80

    
81
        # Desplazamos la geometria de la nueva entidad
82
        geom = newfeature.getDefaultGeometry()
83
        geom.move(x,y)
84
        
85
        # Guardamos la nueva entidad
86
        output_store.insert(newfeature)
87

    
88
      # Cuando hemos terminado de recorrernos las entidades terminamos la edicion.
89
      output_store.finishEditing()   
90
      
91
    finally:
92
      DisposeUtils.disposeQuietly(features)
93
      print "Proceso terminado %s" % self.getCommandLineName() 
94
    
95

    
96
def main(*args):
97
    # Creamos nuesto geoproceso
98
    process = XYShift()
99
    # Lo registramos entre los procesos disponibles en el grupo de "Scripting"
100
    process.selfregister("Scripting")
101
    # Actualizamos el interface de usuario de la Toolbox
102
    process.updateToolbox()
103
    msgbox("Incorporado el script '%s/%s/%s' a la paleta de geoprocesos." % (
104
        "Scripting",
105
        process.getGroup(),
106
        process.getName()
107
      )
108
    )