Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.app / org.gvsig.app.mainplugin / src / main / resources-plugin / scripting / scripts / validate_layer.py @ 41521

History | View | Annotate | Download (3.57 KB)

1

    
2
from gvsig import *
3
from org.gvsig.tools.swing.api.windowmanager import WindowManager
4
import StringIO
5
from commonsdialog import *
6
from javax.swing.event import HyperlinkListener
7
from org.gvsig.fmap.geom import GeometryLocator
8
from org.gvsig.fmap.geom import Geometry
9

    
10
def centerViewinPoint(view,center):
11
    env = view.getMap().getViewPort().getEnvelope();
12
    movX = center.getX()-env.getCenter(0);
13
    movY = center.getY()-env.getCenter(1);
14
    minx = env.getMinimum(0) + movX;
15
    miny = env.getMinimum(1) + movY;
16
    maxX = env.getMaximum(0) + movX;
17
    maxY = env.getMaximum(1) + movY;
18
    env = GeometryLocator.getGeometryManager().createEnvelope(
19
          minx, miny,
20
          maxX, maxY,
21
          Geometry.SUBTYPES.GEOM2D);
22
    view.getMap().getViewPort().setEnvelope(env);
23
    view.getMap().invalidate()
24

    
25

    
26
class MyHyperlinkListener(HyperlinkListener):
27
  def __init__(self,vista):
28
    self.vista = vista
29
    
30
  def hyperlinkUpdate(self, h):
31
    if str(h.getEventType()) == "ACTIVATED":
32
      # Sopo procesamos los eventos "ACTIVATED" que son los clicks sobre los enlaces
33
      # Recogemos la geometria que metimos en el enalce en WKT
34
      wktgeom = h.getDescription()
35
      print wktgeom
36
      # Y reconstruimos el punto a partir de ese WKT
37
      manager = GeometryLocator.getGeometryManager()
38
      point = manager.createFrom(wktgeom)
39
      # Y una vez lo tenemos centramos la vista en ese punto.
40
      centerViewinPoint(self.vista,point)
41

    
42

    
43
def main(*args):
44
  layer = currentLayer()
45
  if layer == None:
46
    msgbox("Debera seleccionar la capa que desea validar")
47
    return
48
  output = StringIO.StringIO()  
49
  output.write("<ul>\n")
50
  i=0
51
  hay_problemas = False
52
  try:
53
    # Añadimos la barra de progreso a la barra de estado de gvSIG
54
    taskStatus.add()
55
    # Le indicamos cuantas iteraciones vamos a realizar
56
    for feature in layer.features():
57
      # En cada iteracion informamos a la barra de progreso de por donde vamos
58
      taskStatus.setCurValue(i)
59
      if feature.geometry() != None:
60
        vs = feature.geometry().getValidationStatus();
61
        if not vs.isValid() :
62
          hay_problemas = True
63
          if vs.getProblemLocation()!=None:
64
            wktgeom = vs.getProblemLocation().convertToWKT()
65
          else:
66
            try:
67
              # Atrapamos los errores no vaya a ser que la geometria este tan dañada que
68
              # nos falle el calculo de su centroide.
69
              wktgeom = feature.geometry().centroid().convertToWKT()
70
            except:
71
              wktgeom = None
72
          output.write("<li>")
73
          if wktgeom == None:
74
            output.write('%5.5d %s<br>%s' % (i, feature.toString(),vs.getMessage()))
75
          else:
76
            output.write('<a href="%s">%5.5d</a> %s<br>%s' % (wktgeom,i, feature.toString(),vs.getMessage()))
77
          output.write("</li>")
78
          layer.getSelection().select(feature)
79
        else:
80
          hay_problemas = True
81
          output.write("<li>")
82
          output.write('%5.5d %s<br>%s' % (i, feature.toString(), "Null geometry"))
83
          output.write("</li>")
84
      i+=1
85
  finally:  
86
    # Al terminar
87
    # Le indicamos a la barra de progreso que ya hemos terminado
88
    taskStatus.terminate()
89
    # Y la eliminamos de la barra de estado de gvSIG.
90
    taskStatus.remove()
91
    
92
  output.write("</ul>\n")
93
  if hay_problemas :
94
    application = ApplicationLocator.getManager()
95
    application.showTextDialog(
96
      WindowManager.MODE.TOOL, # TOOL o WINDOW segun nos interese.
97
      "Problems in layer "+layer.getName(),
98
      output.getvalue(),
99
      MyHyperlinkListener(currentView())
100
    )
101
  else:
102
    msgbox("Layer "+layer.getName()+" is valid.")
103

    
104