[Gvsig_desarrolladores] Duda al crear un campo Geometry en una tabla para PostgreSQL

Iago Alonso Alonso ialonso en enxenio.es
Vie Feb 24 10:42:35 CET 2017


Hola, tengo dudas sobre como definir una columna en una tabla para
PostgreSQL del tipo GEOMETRY. A la hora de crear la tabla, obtengo del
FEATURESET los DYNFIELDS que contiene y para cada uno obtengo su nombre
(que usaré como nombre de la columna) y su tipo (que usaré como tipo del
dato para esa columna). En el caso de Integer, bigint, varchar o double
precision no tengo problemas pero cuando llego al campo de la geometría
es donde tengo los problemas. 

Para el campo de geometría, miro el nombre del fichero que tengo ese
momento para ser qué tipo de geometría se corresponde con la tabla y con
la función _getGeometryType()_ que he hecho, devuelto un
GEOMETRY.TYPES.<EL TIPO QUE CORRESPONDE> (Point, Polygon, Line....) 

int size = featureSet.getDefaultFeatureType().size();
DynField[] values = featureSet.getDefaultFeatureType().getDynFields();
for (int i = 0; i < size; i++) {
     String name = values[i].getName();
     Integer type = values[i].getType();
     if (!name.equals("GEOMETRY")) {
         featureType.add(name, type);
     } else {
        String idTabla = featureSet.getDefaultFeatureType().getId();
        int tipoGeometria = getGeometryType(idTabla);
        featureType.add(name,
DataTypes.GEOMETRY).setGeometryType(Geometry.SUBTYPES.GEOM2D,
tipoGeometria);
     }
} 

El problema viene en tiempo de ejecución, al hacer
EXPLORER.ADD(STORENAME, NEWFEATURESTOREPARAMETERS, TRUE);, haciendo
debug he llegado hasta la clase JDBCSERVEREXPLORER.CLASS. En la línea
499, hay un bucle _WHILE_ que obtiene los campos y su tipo y crea el
equivalente _SQL_ para la consulta. He observado que cuando llega al
campo que debe llevar la geometría, la línea: 

SQLATTR = HELPER.GETSQLFIELDDESCRIPTION((FEATUREATTRIBUTEDESCRIPTOR)
ATTRS.NEXT()); 

Devuelve _NULL_, pero haciendo F5 no puedo acceder a _PostgreSQLHelper_
y ver lo que el método GETSQLFIELDDESCRIPTION intenta hacer para crear
el _SQL_. Y en el log obtengo:

ERROR [Thread-7] (ExportToJDBC.java:101) - Error al inicializar el
store:
org.gvsig.fmap.dal.exception.InitializeException: Error intializing
resource 'PostgreSQL'.
at
org.gvsig.fmap.dal.impl.DefaultDataManager.createProvider(DefaultDataManager.java:815)
at
org.gvsig.fmap.dal.impl.DefaultDataManager.intializeDataStore(DefaultDataManager.java:777)
at
org.gvsig.fmap.dal.impl.DefaultDataManager.localOpenStore(DefaultDataManager.java:364)
at
org.gvsig.fmap.dal.impl.DefaultDataManager.openStore(DefaultDataManager.java:448)
...
Caused by: org.gvsig.fmap.dal.exception.InitializeException: Error
intializing resource '{unknow}'.
at
org.gvsig.fmap.dal.impl.DataStoreProviderToFeatureStoreProviderFactoryWrapper.createProvider(DataStoreProviderToFeatureStoreProviderFactoryWrapper.java:61)
at
org.gvsig.fmap.dal.impl.DefaultDataManager.createProvider(DefaultDataManager.java:797)
... 7 more
CAUSED BY: JAVA.LANG.ILLEGALARGUMENTEXCEPTION: ARGUMENT TYPE MISMATCH
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:422)
at
org.gvsig.fmap.dal.impl.DataStoreProviderToFeatureStoreProviderFactoryWrapper.createProvider(DataStoreProviderToFeatureStoreProviderFactoryWrapper.java:59)
... 8 more

Por lo tanto, mi pregunta es qué estoy haciendo mal a la hora de definir
el campo de la geometría, o si estoy definiendo el tipo de geometría
mal. 

Un saludo y gracias.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20170224/da96e096/attachment.html>


Más información sobre la lista de distribución gvSIG_desarrolladores