gvSIG bugs #4620

Can't load a CSV layer from Add layer

Added by Antonio Falciano over 6 years ago. Updated over 6 years ago.

Status:Closed% Done:

0%

Priority:NormalSpent time:-
Assignee:-
Category:Document view
Target version:2.4.0-2835 (rev. org.gvsig.desktop-2.0.202)
Severity:Major Add-on version:
gvSIG version:2.4.0 Add-on build:
gvSIG build:2831 Add-on resolve version:
Operative System: Add-on resolve build:
Keywords:csv Proyecto:
Has patch: Hito:
Add-on name:Unknown

Description

I can't add a CSV file from the "Add layer" window, because of the following RuntimeException reported in the log.
Sample data: https://redmine.gvsig.net/redmine/attachments/download/1719/camaras.csv

WARN 75663 Thread-13 org.gvsig.fmap.dal.serverexplorer.filesystem.swing.FilesystemExplorerWizardPanel$2 - Can't load layer 'camaras.csv'.
java.lang.RuntimeException: Non invertible transform Exception
    at org.gvsig.fmap.mapcontext.ViewPort.calculateAffineTransform(ViewPort.java:1167)
    at org.gvsig.fmap.mapcontext.ViewPort.setEnvelope(ViewPort.java:861)
    at org.gvsig.fmap.mapcontext.MapContext$LayerEventListener.layerAdded(MapContext.java:1401)
    at org.gvsig.fmap.mapcontext.layers.FLayers.callLayerAdded(FLayers.java:721)
    at org.gvsig.fmap.mapcontext.layers.FLayers.addLayer(FLayers.java:236)
    at org.gvsig.fmap.mapcontext.layers.FLayers.addLayer(FLayers.java:194)
    at org.gvsig.fmap.dal.serverexplorer.filesystem.swing.FilesystemExplorerWizardPanel$2.run(FilesystemExplorerWizardPanel.java:306)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.awt.geom.NoninvertibleTransformException: Determinant is 0
    at java.awt.geom.AffineTransform.createInverse(Unknown Source)
    at org.gvsig.fmap.mapcontext.ViewPort.calculateAffineTransform(ViewPort.java:1153)
    ... 7 more
INFO 78593 AWT-EventQueue-0 org.gvsig.andami.ui.AndamiEventQueue - Error dispaching event
java.lang.RuntimeException: Non invertible transform Exception
    at org.gvsig.fmap.mapcontext.ViewPort.toMapPoint(ViewPort.java:627)
    at org.gvsig.fmap.mapcontrol.MapControl.calculateSnapPoint(MapControl.java:2551)
    at org.gvsig.fmap.mapcontrol.MapControl$MapToolListener.mouseMoved(MapControl.java:1850)
    at java.awt.Component.processMouseMotionEvent(Unknown Source)
    [...]

Related issues

Related to Application: gvSIG desktop - gvSIG bugs #4564: When we add a CSV file as a layer the CRS system is not a... Closed 07/25/2017

Associated revisions

Revision 43478
Added by Joaquín del Cerro Murciano over 6 years ago

refs #4620. Mejorada la atrapada de errores cuando se calcula la transformacion afin en un view port con un envelope incorreco.

History

#1 Updated by Joaquín del Cerro Murciano over 6 years ago

Hello Antonio.
I could not reproduce the error.
The layer is loaded correctly from "camaras.csv".
The steps that I take to load it are:

  • Open the "add layer" dialog.
  • Select the file "camaras.csv".
  • Display the properties dialog for "camaras.csv".
  • Select the columns of X and Y in the second tab.
  • Accept the properties.
  • Accept the Open Layer dialog.
  • The layer loads correctly.

If you do not select the X and Y columns for the csv, an error occurs while loading the layer.

Can you tell me the steps you take to load the layer?

#2 Updated by Antonio Falciano over 6 years ago

Hi Joaquín,
the steps I follow are the same, except that I set also the CRS (e.g. EPSG:23030) in the properties dialog.

#3 Updated by Antonio Falciano over 6 years ago

Joaquín del Cerro Murciano wrote:

The layer is loaded correctly from "camaras.csv".
The steps that I take to load it are:

  • Open the "add layer" dialog.
  • Select the file "camaras.csv".
  • Display the properties dialog for "camaras.csv".
  • Select the columns of X and Y in the second tab.
  • Accept the properties.
  • Accept the Open Layer dialog.
  • The layer loads correctly.

The layer is loaded correctly in this way, but a CRS is not assigned to it and this is not right. It should be the View CRS if not set by the user.

#4 Updated by Joaquín del Cerro Murciano over 6 years ago

Ok.
I understand that problems arise when the CRS is assigned.

#5 Updated by Joaquín del Cerro Murciano over 6 years ago

  • Related to gvSIG bugs #4564: When we add a CSV file as a layer the CRS system is not assigned added

#6 Updated by Francisco Díaz Carsí over 6 years ago

  • Status changed from New to Invalid

Intentando reproducir el problema, veo que la proyección sí se aplica a la capa.
Si en la vista ya hay una capa (y ya se ha inicializado correctamente el viewPort), no salta el error.

El problema está cuando es la primera capa que se añade a la vista.
Como el viewport no está incializado, se le pide el fullEnvelope a la capa, el cual no es calculado correctamente porque las 2 primeras columnas (que se usan para crear la geometría) están en formato inglés (con el punto como separador de decimales).
Si dejamos la configuración regional en "Español" (es la que tenemos por defecto aquí y supongo que en Italia también pasa lo mismo) podemos observar como el valor de la columna X de las filas, (por ejemplo, 16, 25, 26,...) es incorrecto lo que da un envelope para la capa erróneo y provoca que el envelope del viewPort tenga una anchura de infinito.

Sin embargo, si ponemos la configuración regional a Inglés, la capa se carga bien, aunque sea la primera que se carga.

Paso el estado del ticket a invalid (si pensáis que no es lo correcto volvedlo a poner a new).

#7 Updated by Antonio Falciano over 6 years ago

  • Target version deleted (2.4.0-2850-final (rev. org.gvsig.desktop-2.0.220))
  • Status changed from Invalid to New

Hi Francisco,
you're right! I've just verified that it happens only under the specific conditions that you have described in your post. But if the issue is a side-effect of the localization settings, it's always a bug... so I'd leave the ticket open, the target version blank and set the severity as low (because it could happen quite rarely).
Thank you for your careful and deep testing of this issue.

#8 Updated by Joaquín del Cerro Murciano over 6 years ago

  • Target version set to 2.4.0-2835 (rev. org.gvsig.desktop-2.0.202)

#9 Updated by Joaquín del Cerro Murciano over 6 years ago

  • Status changed from New to Fixed

El error se produce por que los datos tal como se ha configurado la fuente de datos son incorrectos.
El envelope resultante con esa configuracion (seleccionando incorrectamente el idioma a usar para interpretar los numeros decimales) es:

POLYGON ((
721073.0 4369124.0,
721073.0 4.3721291109999994E17,
7.27228731E8 4.3721291109999994E17,
7.27228731E8 4369124.0,
721073.0 4369124.0
))

El calculo del envelope del CSV se realiza correctamente, dando ese resultado a partir de los datos de entrada.
Sin embargo, podemos ver que algo no es correcto, debido a que los valores de entrada no son correctos.

Los problemas aparecen cuando ese envelope que esta en 23030 se trata de reproyectar a 4326 para centrar la capa en la vista.
No es posible calcular una transformacion adecuada para esos valores, y falla.

He retocado el codigo para:

  • cuando se intente calcular la transformacion necesaria en el ViewPort de la vista, si no es posible genere un mensaje con mas informacion de lo que lo estaba haciendo, ademas de dejar el ViewPort en un estado "correcto" (antes se quedaba inserbible). Esa capa no se puede centrar pero se carga correctamente, y si se cargan mas capas estas se cargaran correctamente en la vista.
  • He modificado la carga de capas para que asigne a la capa el CRS de la vista cuando la capa no tenga CRS. Antes se daba el caso que si el proveedor de datos no anunciaba que requeria un CRS, aunque entre sus parametros hubiese uno (como el de CSV), no se le asignaba el CRS de la vista y el CRS de la capa quedaba a null.

No veo que mas se podria hacer cuando el usuario intenta cargar unos datos de forma incorrecta.

Si el usuario hubiese seleccionado mal el separador de campos tendria resultados incorrectos. Y simplemente se le diria que lo seleccionase correctamente. Si selecciona mal la configuracion de idioma a usar para interpretar los numeros decimales, tambien tiene resultados incorrectos. gvSIG no puede decirdir si el usuario selecciono bien o mal la forma en que se debe interpretar esos datos. Lo unico que podemos hacer es cargarlos lo mejor posible con la informacion que nos ha dado el usuario.

Asi que con estas modificaciones cierro el ticket.

#10 Updated by Antonio Falciano over 6 years ago

  • Status changed from Fixed to Closed

Also available in: Atom PDF