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 / monitor / monitor_suma2.py @ 475
History | View | Annotate | Download (1.75 KB)
1 |
|
---|---|
2 |
from gvsig import * |
3 |
from commonsdialog import * |
4 |
|
5 |
from org.gvsig.fmap.mapcontext.events.listeners import ViewPortListener |
6 |
|
7 |
"""
|
8 |
Para probar este ejemplo cargue la capa MANZANAS_POB de la carpeta
|
9 |
data y seleccionela en el TOC
|
10 |
|
11 |
Ojo!!!!, que este script añade un listener que no elimina nunca,
|
12 |
con lo que para abortarlo tendremos que cerrar la vista y eliminarla
|
13 |
del proyecto.
|
14 |
Usar este script solo con fines didacticos.
|
15 |
|
16 |
"""
|
17 |
|
18 |
class MonitorSuma(ViewPortListener): |
19 |
|
20 |
def __init__(self, mapContext, layer, fieldname): |
21 |
self.mapContext = mapContext
|
22 |
self.layer = layer
|
23 |
self.fieldname = fieldname
|
24 |
self.calcular_sumatorio()
|
25 |
mapContext.getViewPort().addViewPortListener(self)
|
26 |
|
27 |
def backColorChanged(self,*args): |
28 |
pass
|
29 |
|
30 |
def extentChanged(self,*args): |
31 |
self.calcular_sumatorio()
|
32 |
|
33 |
def projectionChanged(self,*args): |
34 |
pass
|
35 |
|
36 |
def calcular_sumatorio(self): |
37 |
encuadre = self.mapContext.getViewPort().getEnvelope().getGeometry()
|
38 |
lineas = self.layer.getFeatureStore().getFeatureSet().iterator()
|
39 |
suma = 0
|
40 |
for linea in lineas: |
41 |
g = linea.getDefaultGeometry() |
42 |
if encuadre.intersects(g) :
|
43 |
suma += int(linea.get(self.fieldname)) |
44 |
print "Sumatorio de %s: %s" % (self.fieldname, suma) |
45 |
|
46 |
def main(*args): |
47 |
if currentView() == None: |
48 |
msgbox("Debera tener una vista abierta y activa")
|
49 |
return
|
50 |
mapContext = currentView().getMapContext() |
51 |
|
52 |
layer = currentLayer() |
53 |
if layer == None: |
54 |
msgbox("Debera tener seleccionada la capa sobre la que desea trabajar")
|
55 |
return
|
56 |
fieldname = inputbox( |
57 |
"Introduzca el nombre del campo para calcular el sumatorio",
|
58 |
"Nombre de campo",
|
59 |
QUESTION, |
60 |
"pob_total"
|
61 |
) |
62 |
if fieldname in ("",None): |
63 |
msgbox("Operacion cancelada")
|
64 |
return
|
65 |
monitor = MonitorSuma(mapContext, layer, fieldname) |