Scripting en gvSIG: Errores más comunes

erroresAlgo que ocurre a menudo son pequeños errores que no nos dejan ejecutar nuestro script, y muchas veces son errores muy sencillos de solucionar pero que no sabemos qué significan o cómo solucionarlos, sobretodo para los que comenzamos con esto.

Así que he realizado un listado de los errores más comunes que nos aparecen por consola y su solución. Habrán otros errores que aparezcan con ese mismo mensaje de error, solo he intentado describir los que me suelen ocurrir. Si os aparecen de otro tipo y no podéis solucionarlos, me podéis escribir y os ayudaré en lo que pueda.

AttributeError: ‘NoneType’ object has no attribute ‘features’ in <script> at line number XX

Este error se suele producir cuando se intenta aplicar una función a un objeto y este objeto no es lo esperado. Por ejemplo, ocurre al fallar al asignar una capa, por lo general es por NO tienes una capa activa o que tenga otro nombre, el valor devuelto es None y no la capa que quieres, entonces al intentar trabajar con ella te da error.

Ocurre lo mismo con todos los comandos de tipo current, si no tienes el objeto activo en tu proyecto antes de ejecutar el script. El problema de este error es que suele aparecer más tarde de donde realmente esta el problema.

#No tienes una capa activa 
layer = currentLayer() 
#No tienes una vista activa
vista = currentLayer()
#Fallo al asignar la capa. El nombre tiene que coincidir de forma exacta
layer = vista.getLayer("CAPA")

java.lang.Throwable: java.lang.Throwable: Can’t finish layer edition, cancelling changes. org.gvsig.fmap.dal.feature.exception.FinishEditingException: Can’t finish edition.

Este error también te puede causar muchos problemas. Tiene varias causas y aparece indicando la linea donde se encuentra cuando intentamos guardar alguna capa que hemos creado output.commit() y el problema es que el error real se puede encontrar en cualquier parte del proyecto. Te explico los dos más comunes que me ocurren:

El error más común es que intentamos guardar una capa que ya existe. Ocurre cuando lanzamos un script varias veces porque no conseguimos que funcione y se nos olvida modificar su nombre, para esto cree un código que te haga despreocuparte de este problema.

Otro problema aparece cuando creamos una capa, agregamos entidades, la agregamos al proyecto y la guardamos. Entonces aparece un error. Lo complicado es que la capa aparece como correcta en nuestro proyecto, incluso se pueden hacer cálculos con ella dejándola en modo de edición. Me solía ocurrir al reutilizar scripts, que al crear la nueva capa no modificaba el TIPO de GEOMETRY, osea que a veces agregaba geometrías de tipo POINT a una capa de tipo SURFACE, y de ahí que diera el error al guardar la capa.

java.lang.RuntimeException: java.lang.RuntimeException: Can’t append values {‘Valor’: ‘Taller’, ‘Codigo’: ‘hola’, ‘ID’: 1, ‘GEOMETRY’: Point2D(10.0,10.0)} to layer CAPA.shp …

Un error que nos aparece al utilizar el comando output.append(values) agregando valores a una capa. El problema de este error es que tampoco aparece donde está exactamente aunque se nos especifica mejor que es lo que pasa:

Can’t convert to Integer from ‘java.lang.String’ with value ‘hola’.

En este caso el problema que hemos asignado una variable te tipo texto a un campo de tipo número.

… (java.lang.NullPointerException)

Y si ocurre esto suele ser porque hemos asignado un campo que no existe en el esquema de la tabla. Por ejemplo, values[«IDx»] = 1 , al agregarlo a alguna capa y nos de error es porque a lo mejor ese campo se llama «ID». 

Siempre que aparece un error del tipo NullPointerException, suele ser porque hacemos referencia a algo que no existe, y puede aparecer en muchos sitios.

java.lang.IndexOutOfBoundsException: java.lang.IndexOutOfBoundsException: Index: 4, Size: 4 in <script> at line number XX

No estoy seguro por qué aparece este error, pero ocurre al iterar un esquema, como por ejemplo:

print "Esquema capa: "
for sch in schema:
    print sch.name, sch.type, sch.precision

La solución es utilizar un try/excepcion, así cuando aparezca el error, que aparece en la última iteración, al final del bucle, es como si hubiera añadido un valor más en la lista que no nos interesa, se salga de este:

try:
   print "Esquema capa: "
   for sch in schema:
      print sch.name, sch.type, sch.precision
except: print "\n"

Con esto estaría resuelto y podríamos trabajar de forma normal.

Por ahora estos me han parecido lo más comunes, si me comentáis algún otro error que os suela aparecer o me doy cuenta de errores nuevos los iré agregando a este post. Espero que os sea de utilidad.

4 comentarios sobre “Scripting en gvSIG: Errores más comunes

Agrega el tuyo

  1. hola
    estoy haciendo un mapa en gvsig 1.11 y tiene muchas capas shp.
    mi problema es al querer guardar el mapa en los 2 formatos que permite gvsig me sale el error este a que se debe¿?
    y como lo puedo resolver.
    gracias

    Error grave de la aplicación. Es conveniente que salgas de la aplicación. java.lang.OutOfMemoryError: Java heap space     java.awt.image.DataBufferInt. (Unknown Source)     java.awt.image.Raster.createPackedRaster(Unknown Source)     java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)     java.awt.image.BufferedImage. (Unknown Source)     org.gvsig.symbology.fmap.labeling.GeneralLabelingStrategy.draw(GeneralLabelingStrategy.java:309)     org.gvsig.symbology.fmap.labeling.GeneralLabelingStrategy.print(GeneralLabelingStrategy.java:872)     com.iver.cit.gvsig.fmap.layers.FLyrVect.printLabels(FLyrVect.java:1981)     com.iver.cit.gvsig.fmap.DefaultMapContextDrawer.print(DefaultMapContextDrawer.java:243)     com.iver.cit.gvsig.fmap.DefaultMapContextDrawer.print(DefaultMapContextDrawer.java:496)     com.iver.cit.gvsig.fmap.MapContext.print(MapContext.java:724)     com.iver.cit.gvsig.project.documents.layout.fframes.FFrameView.printX(FFrameView.java:507)     com.iver.cit.gvsig.project.documents.layout.fframes.FFrameView.draw(FFrameView.java:464)     com.iver.cit.gvsig.project.documents.layout.fframes.FFrameView.print(FFrameView.java:492)     com.iver.cit.gvsig.project.documents.layout.gui.Layout.drawLayoutPrint(Layout.java:198)     com.iver.cit.gvsig.Print.drawShapes(Print.java:126)     com.iver.cit.gvsig.Print.print(Print.java:195)     sun.print.RasterPrinterJob.printPage(Unknown Source)     sun.print.RasterPrinterJob.print(Unknown Source)     sun.print.PSStreamPrintJob.printableJob(Unknown Source)     sun.print.PSStreamPrintJob.print(Unknown Source)     com.iver.cit.gvsig.project.documents.layout.FLayoutDraw.toPS(FLayoutDraw.java:676)     com.iver.cit.gvsig.project.documents.layout.gui.Layout.layoutToPS(Layout.java:660)     com.iver.cit.gvsig.project.documents.layout.gui.Layout.layoutToPS(Layout.java:673)     com.iver.cit.gvsig.ExportLayoutExtension.execute(ExportLayoutExtension.java:94)     com.iver.andami.plugins.ExtensionDecorator.execute(ExtensionDecorator.java:89)     com.iver.andami.ui.mdiFrame.MDIFrame.actionPerformed(MDIFrame.java:674)     javax.swing.AbstractButton.fireActionPerformed(Unknown Source)     javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)     javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)     javax.swing.DefaultButtonModel.setPressed(Unknown Source)     javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)     java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)

Deja una respuesta

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. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Blog de WordPress.com.

Subir ↑

A %d blogueros les gusta esto: