Scripting en gvSIG: Validar geometrías simplificado

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

validategeometries02

Espero que esta nueva función os sirva de ayuda en vuestros scripts.

1 comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: