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