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 |
) |