Hola Francisco, ese truquito me ha funcionado. No sé por qué no me di
cuenta que igual en lugar del nombre debería haber usado el tipo. 

Un saludo y muchas gracias. 

El 28-02-2017 11:04 AM, Francisco Puga escribió:

> 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.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@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 [1] 
> _______________________________________________
> 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 [1]

  -- 

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 

Links:
------
[1]
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

Responder a