Hola Iago, Lo del campo geometry a veces a mi también me da algún problema. No me queda muy claro lo que intentas hacer, si crear una nueva tabla desde código o sólo iterar por los registros, pero te enlazo dos clases que te pueden dar una pista.
Esta coge un shp de disco y mete los registros en una tabla de la base de datos https://github.com/iCarto/sixhiara/blob/gvsig2/src/main/java/es/icarto/gvsig/sixhiara/ImportExploracoesExtension.java#L102 Esta lee shps de disco y crea shps en disco https://github.com/iCarto/es.icarto.gvsig.commons/blob/gvsig2/src/main/java/es/icarto/gvsig/commons/datasources/SHPFactory.java El truco diría que está en buscar el campo de geometría no por nombre si no por tipo. Feature srcFeat = null; // vendrá de algún sitio FeatureType srcType = srcFeat.getType(); FeatureAttributeDescriptor[] atts = srcType.getAttributeDescriptors(); for (int i = 0; i < atts.length; i++) { int attType = atts[i].getType(); if (attType == org.gvsig.fmap.geom.DataTypes.GEOMETRY) { // Hacer algo con la geometría } else { // Hacer algo con el resto de campos } } La otra forma de acceder sencilla de acceder a la geometría es: Feature srcFeat = null; // vendrá de algún sitio Geometry srcGeom = srcFeat.getDefaultGeometry(); El 24 de febrero de 2017, 13:04, Iago Alonso Alonso <ialo...@enxenio.es> escribió: > 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.DataStoreProviderToFeatureStor > eProviderFactoryWrapper.createProvider(DataStoreProviderToFeatureStor > eProviderFactoryWrapper.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.DataStoreProviderToFeatureStor > eProviderFactoryWrapper.createProvider(DataStoreProviderToFeatureStor > eProviderFactoryWrapper.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@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 > > > _______________________________________________ > gvSIG_desarrolladores mailing list > gvSIG_desarrolladores@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 > > -- Francisco Puga iCarto | Innovación, Cooperación, Cartografía y Territorio S.L. http://www.icarto.es/ c/ Rafael Alberti nº 13 – 1º D 15008 A Coruña Galicia (Spain) +34 881927808 Este correo electrónico contiene información estrictamente confidencial y es de uso exclusivo del destinatario, quedando prohibida a cualquier otra persona su revelación, copia, distribución, o el ejercicio de cualquier acción relativa a su contenido. Si ha recibido este mensaje por error, por favor conteste a su remitente mediante correo electrónico y proceda a borrarlo de su sistema. Sus datos personales serán tratados de forma confidencial y no serán cedidos a terceros ajenos a ICARTO. En cualquier caso, podrá ejercer los derecho de oposición, acceso, rectificación y cancelación de acuerdo con lo establecido en la Ley Orgánica 15/99, de 13 de diciembre, de Protección de Datos de Carácter Personal dirigiéndose a Innovación, Cooperación, Cartografía e Territorio, SL. (ICARTO) en la dirección postal a C/ Rafael Alberti, nº 13, 1ºD, 15.008 – (A Coruña).
_______________________________________________ gvSIG_desarrolladores mailing list gvSIG_desarrolladores@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