gvSIG bugs #4359

No se puede abrir la tabla de atributos de los ficheros GPX

Added by Francisco Puga over 7 years ago. Updated over 6 years ago.

Status:Closed% Done:

0%

Priority:NormalSpent time:-
Assignee:Joaquín del Cerro Murciano
Category:-
Target version:2.4.0-2835 (rev. org.gvsig.desktop-2.0.202)
Severity:Minor Add-on version:
gvSIG version:2.3.0 Add-on build:
gvSIG build:2444 Add-on resolve version:
Operative System: Add-on resolve build:
Keywords:gpx, attribute table Proyecto:
Has patch: Hito:
Add-on name:Unknown

Description

Cargo un fichero gpx, y selecciono la capa de waypoints. Se añade correctamente a la vista y los puntos están bien situados. Pero al abrir la tabla de atributos se produce un error:

 INFO [AWT-EventQueue-0] (DefaultProject.java:374) - add('Attribute table: waypoints')
 WARN [AWT-EventQueue-0] (AbstractDocumentManager.java:347) - Can't create the document window.
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.gvsig.app.project.documents.AbstractDocumentManager.createDocumentWindow(AbstractDocumentManager.java:339)
    at org.gvsig.app.project.documents.table.TableManager.getMainWindow(TableManager.java:232)
    at org.gvsig.app.project.documents.AbstractDocumentManager.getMainWindow(AbstractDocumentManager.java:159)
    at org.gvsig.app.extension.ShowTable.execute(ShowTable.java:111)
    at org.gvsig.app.extension.ShowTable.execute(ShowTable.java:77)
    at org.gvsig.app.project.documents.table.gui.toc.ShowAttributesTableTocMenuEntry.execute(ShowAttributesTableTocMenuEntry.java:72)
    at org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction.execute(AbstractTocContextMenuAction.java:63)
    at org.gvsig.app.project.documents.view.toc.gui.FPopupMenu$MenuItem.actionPerformed(FPopupMenu.java:248)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
    at java.awt.Component.processMouseEvent(Component.java:6535)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6300)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4891)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at org.gvsig.andami.ui.AndamiEventQueue.dispatchEvent(AndamiEventQueue.java:50)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.NegativeArraySizeException
    at org.gvsig.fmap.dal.feature.paging.impl.FeaturePagingHelperImpl.loadCurrentPageData(FeaturePagingHelperImpl.java:347)
    at org.gvsig.tools.dynobject.impl.DefaultDynObjectPagingHelper.setCalculator(DefaultDynObjectPagingHelper.java:168)
    at org.gvsig.tools.dynobject.impl.DefaultDynObjectPagingHelper.setDefaultCalculator(DefaultDynObjectPagingHelper.java:173)
    at org.gvsig.fmap.dal.feature.paging.impl.FeaturePagingHelperImpl.reload(FeaturePagingHelperImpl.java:316)
    at org.gvsig.fmap.mapcontrol.dal.feature.swing.table.FeatureTableModel.updatePaginHelperWithHiddenColums(FeatureTableModel.java:541)
    at org.gvsig.fmap.mapcontrol.dal.feature.swing.table.ConfigurableFeatureTableModel.initialize(ConfigurableFeatureTableModel.java:368)
    at org.gvsig.fmap.mapcontrol.dal.feature.swing.table.FeatureTableModel.<init>(FeatureTableModel.java:130)
    at org.gvsig.fmap.mapcontrol.dal.feature.swing.table.FeatureTableModel.<init>(FeatureTableModel.java:114)
    at org.gvsig.fmap.mapcontrol.dal.feature.swing.table.FeatureTableModel.<init>(FeatureTableModel.java:96)
    at org.gvsig.fmap.mapcontrol.dal.feature.swing.table.ConfigurableFeatureTableModel.<init>(ConfigurableFeatureTableModel.java:87)
    at org.gvsig.fmap.mapcontrol.dal.feature.swing.table.FeatureStoreModel.getFeatureTableModel(FeatureStoreModel.java:132)
    at org.gvsig.fmap.mapcontrol.dal.feature.swing.table.FeatureStoreModel.getCurrentFeatureTableModel(FeatureStoreModel.java:105)
    at org.gvsig.fmap.mapcontrol.dal.feature.swing.FeatureTypesTablePanel.showFeatureTypeData(FeatureTypesTablePanel.java:154)
    at org.gvsig.fmap.mapcontrol.dal.feature.swing.FeatureTypesTablePanel.initializeUI(FeatureTypesTablePanel.java:197)
    at org.gvsig.fmap.mapcontrol.dal.feature.swing.FeatureTypesTablePanel.<init>(FeatureTypesTablePanel.java:124)
    at org.gvsig.fmap.mapcontrol.dal.feature.swing.FeatureTypesTablePanel.<init>(FeatureTypesTablePanel.java:114)
    at org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel.<init>(FeatureTableDocumentPanel.java:81)
    ... 51 more

Si intentas acceder por código layer.getFeatureStore().getFeatureCount() devuelve un -1. Esto ya pasaba en la RC2

org.gvsig.gdal.prov.ogr-getfeaturecount.patch Magnifier (726 Bytes) Francisco Puga, 11/02/2016 10:11 PM

org.gvsig.gdal.prov.ogr-doblequotes.patch Magnifier (2.67 KB) Francisco Puga, 11/02/2016 10:12 PM

Associated revisions

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

refs #4359. Patch provided by Joaquín del Cerro Murciano. Fix sql generation in OGR provider for rows that requier quetes and a problem when calculate the count of features.

History

#1 Updated by Francisco Puga over 7 years ago

It Still happens in 2.3.1

It neither works trying to show the data of a point with the info tool

INFO [AWT-EventQueue-0] (DefaultActionInfo.java:326) - org.gvsig.app.mainplugin:org.gvsig.app.extension.ViewControls.execute('view-change-scale', Object[] args)
INFO [AWT-EventQueue-0] (DefaultActionInfo.java:326) - org.gvsig.app.mainplugin:org.gvsig.app.extension.ViewControls.execute('view-change-scale', Object[] args)
ERROR 1: SQL Expression Parsing Error: syntax error, unexpected DESC. Occured around :
CT ele,time,magvar,geoidheight,name,cmt,desc,src,link1_href,link1_text,link1_typ
^
WARN [AWT-EventQueue-0] (OGRFetureSetProvider.java:159) - The result of query is null. SQL SELECT ele,time,magvar,geoidheight,name,cmt,desc,src,link1_href,link1_text,link1_type,link2_href,link2_text,link2_type,sym,type,fix,sat,hdop,vdop,pdop,ageofdgpsdata,dgpsid,label,ogr_geometry FROM 'waypoints' FeatureType default:[ele,time,magvar,geoidheight,name,cmt,desc,src,link1_href,link1_text,link1_type,link2_href,link2_text,link2_type,sym,type,fix,sat,hdop,vdop,pdop,ageofdgpsdata,dgpsid,label,ogr_geometry]
WARN [AWT-EventQueue-0] (OGRFetureSetProvider.java:160) - Getting data without SQL filter
ERROR [AWT-EventQueue-0] (NotificationManager.java:90) - java.lang.RuntimeException
java.lang.RuntimeException
at org.gvsig.tools.dynform.impl.DefaultDynFormManager.createJDynFormSet(DefaultDynFormManager.java:207)
at org.gvsig.tools.dynform.impl.DefaultDynFormManager.createJDynFormSet(DefaultDynFormManager.java:155)
at org.gvsig.fmap.mapcontrol.swing.dynobject.impl.DefaultLayersDynObjectSetComponent.setCurrentLayerInfoByPoint(DefaultLayersDynObjectSetComponent.java:194)
at org.gvsig.fmap.mapcontrol.swing.dynobject.impl.DefaultLayersDynObjectSetComponent.valueChanged(DefaultLayersDynObjectSetComponent.java:254)
at javax.swing.JTree.fireValueChanged(JTree.java:2927)
at javax.swing.JTree$TreeSelectionRedirector.valueChanged(JTree.java:3391)
at javax.swing.tree.DefaultTreeSelectionModel.fireValueChanged(DefaultTreeSelectionModel.java:635)
at javax.swing.tree.DefaultTreeSelectionModel.notifyPathChange(DefaultTreeSelectionModel.java:1093)
at javax.swing.tree.DefaultTreeSelectionModel.setSelectionPaths(DefaultTreeSelectionModel.java:294)
at javax.swing.tree.DefaultTreeSelectionModel.setSelectionPath(DefaultTreeSelectionModel.java:188)
at javax.swing.JTree.setSelectionPath(JTree.java:1634)
at javax.swing.plaf.basic.BasicTreeUI.selectPathForEvent(BasicTreeUI.java:2393)
at javax.swing.plaf.basic.BasicTreeUI$Handler.handleSelection(BasicTreeUI.java:3609)
at javax.swing.plaf.basic.BasicTreeUI$Handler.mousePressed(BasicTreeUI.java:3548)
at java.awt.Component.processMouseEvent(Component.java:6532)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)

#2 Updated by Francisco Puga over 7 years ago

Hi again,

I was taking a look at this. It seems that the call to getLayer().GetFeatureCount(0) in OGRDataStoreProvider.getFeatureCount is returning -1 when the layer comes from gpx or dxf. But it returns the correct result when it comes from spatialite or shp.

The documentation of ogr.Layer.GetFeatureCount says something like this:

Returns the number of features in the layer. For dynamic databases the 
count may not be exact. If bForce is FALSE, and it would be expensive 
to establish the feature count a value of -1 may be returned 
indicating that the count isn't known. If bForce is TRUE some 
implementations will actually scan the entire layer once to count 
objects.

So it seems that a full can of the layer is needed in some cases. I provide a patch (against org.gvsig.gdal-1.0.32) that takes this into account.

#3 Updated by Francisco Puga over 7 years ago

My second issue is that my gpx layer has an attribute / field called "desc". This is a very common field when working with software like GPSBabel.

When opening the attribute table all seems to work, but the following error is logged:

ERROR 1: SQL Expression Parsing Error: syntax error, unexpected DESC. Occured around :
CT ele,time,magvar,geoidheight,name,cmt,desc,src,link1_href,link1_text,link1_typ
                                        ^
 WARN [AWT-EventQueue-0] (OGRFetureSetProvider.java:159) - The result of query is null. SQL SELECT ele,time,magvar,geoidheight,name,cmt,desc,src,link1_href,link1_text,link1_type,link2_href,link2_text,link2_type,sym,type,fix,sat,hdop,vdop,pdop,ageofdgpsdata,dgpsid,ogr_geometry FROM 'waypoints' FeatureType default:[ele,time,magvar,geoidheight,name,cmt,desc,src,link1_href,link1_text,link1_type,link2_href,link2_text,link2_type,sym,type,fix,sat,hdop,vdop,pdop,ageofdgpsdata,dgpsid,ogr_geometry]
 WARN [AWT-EventQueue-0] (OGRFetureSetProvider.java:160) - Getting data without SQL filter

When using the info tool to get more data from a point the same error happens but the point is not correctly obtained.

This error comes from OGRFeatureSetProvider in layer = dataSource.ExecuteSQL(sql). desc is a reserved word in sql so it must be quoted (http://gdal.org/ogr_sql.html). As the doc says to use reserved words double quotes should be used. I'm not sure way double quotes doesn't work for the fields in the order by query (probably a bug in the version of gdal used).


SELECT * FROM layer ORDER BY "my_field" ASC; <-- does not work

But it works for the SELECT fields and to quote the layer name. Right now layer name is quoted with single quotes but my patch changes it to double quotes. So everything seems to work except ordering by a field that is a reserved work.

#4 Updated by Álvaro Anguix over 6 years ago

  • Target version set to 2.4.0-2850-final (rev. org.gvsig.desktop-2.0.220)

#5 Updated by Álvaro Anguix over 6 years ago

  • Status changed from Awaiting response to New

A revisar por si se mete en la final. O ver alternativas para trabajar con GPX.

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

  • Target version changed from 2.4.0-2850-final (rev. org.gvsig.desktop-2.0.220) to 2.4.0-2839-RC2 (rev. org.gvsig.desktop-2.0.206)

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

  • Target version changed from 2.4.0-2839-RC2 (rev. org.gvsig.desktop-2.0.206) to 2.4.0-2835 (rev. org.gvsig.desktop-2.0.202)
  • Assignee set to Joaquín del Cerro Murciano

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

  • Status changed from New to Fixed

#9 Updated by Álvaro Anguix over 6 years ago

  • Status changed from Fixed to Closed

Also available in: Atom PDF