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

Iago Alonso Alonso ialonso en enxenio.es
Vie Feb 24 13:04:00 CET 2017


Buenas, he decompilado la clase _PostgreSQLHelper_ y he visto esto en el
método. ¿Qué sentido tiene?

public String getSqlFieldDescription(FeatureAttributeDescriptor attr)
throws DataException {
      if (attr.getType() == 66) {
            return null;
      }
      return super.getSqlFieldDescription(attr);
}

El 24-02-2017 10:42 AM, Iago Alonso Alonso escribió:

> 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. 
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en listserv.gva.es
> Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección: https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20170224/bda9acfb/attachment.html>


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