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 @ 478

History | View | Annotate | Download (3.37 KB)

1

    
2

    
3
from gvsig import *
4
from commonsdialog import *
5

    
6
from libs.toolbox import *
7

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

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

    
46
      input_store = layer.getFeatureStore()
47

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

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

    
74
        # Creamos una nueva entidad para nuestro almacen de salida.
75
        newfeature = self.createNewFeature(output_store,feature)
76

    
77
        # Desplazamos la geometria de la nueva entidad
78
        geom = newfeature.getDefaultGeometry()
79
        geom.move(x,y)
80
        
81
        # Guardamos la nueva entidad
82
        output_store.insert(newfeature)
83

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

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