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