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

Responder a