Seguimos donde nos quedamos la semana pasada destripando el post que publicó Joaquin del Cerro sobre: «Validar las geometrías de una capa». Ahora vamos a centrarnos en la parte principal del script ,donde realmente valida las geometrías, el código mínimo que necesitas en tu script para realizar esta comprobación.
Para esta parte será necesario una de las últimas versiones de gvSIG, de la build 2231 o superior. Yo estoy usando la build 2238 (no funciona las que son de 64bits)
Los pasos son sencillos, vamos comprobando cada geometriá de cada entidad. El script se ejecutará sobre la capa que tengamos seleccionada (función del currentLayer), obtendrá su validación, y si es erronea, mostrará el error por la consola y hará una selección de esta entidad. Así luego podremos ver en la tabla de atributos cuales entidades tenemos error y intentar solucionarlo.
La línea de código mínima que se encargaría de la comprobación de la geometría si contiene algún error sería:
#siendo layer=currentLayer() o otra for feature in layer: feature.geometry().getValidationStatus().isValid()
Un script sencillo que nos mostrará los errores es:
from gvsig import * def main(*args): """ Validar geometrias de una capa""" #Comprobara todas las geometrias de la capa #Hara una seleccion de las que contengan errores #Accedemos a la capa activa layer = currentLayer() #Eliminamos cualquier seleccion que ya tenga layer.getSelection().deselectAll() #Analizamos todas las geometrias for feature in layer.features(): #Info de validacion la geometria vs = feature.geometry().getValidationStatus() #Si no es valida, sacamos la info del error if not vs.isValid(): print "\nError en: ", feature.getValues() print "...getMesssage: ", vs.getMessage() print "...geometria: ", feature.geometry() if vs.getProblemLocation()!= None: print "...wktgeom: ", vs.getProblemLocation().convertToWKT() #Selecciona las que contienen error layer.getSelection().select(feature)
Al ejecutarlo en una capa que tengo con errores, el mensaje es el que aparece en la imagen que abre el post. Si después abro la tabla de atributos, y hago click en el botón de «Mover arriba la selección», puedo ver las dos entidades que me han causado el error seleccionadas.
Espero que esta nueva función os sirva de ayuda en vuestros scripts.