<div dir="ltr">De nada.</div><div class="gmail_extra"><br><div class="gmail_quote">El 1 de marzo de 2017, 16:23, Iago Alonso Alonso <span dir="ltr">&lt;<a href="mailto:ialonso@enxenio.es" target="_blank">ialonso@enxenio.es</a>&gt;</span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="font-size:10pt;font-family:Verdana,Geneva,sans-serif">
<p>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.</p>
<p>Un saludo y muchas gracias.</p><div><div class="h5">
<p>El 28-02-2017 11:04 AM, Francisco Puga escribió:</p>
<blockquote type="cite" style="padding:0 0.4em;border-left:#1010ff 2px solid;margin:0">
<div dir="ltr">Hola Iago,
<div> </div>
<div>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.</div>
<div> </div>
<div>Esta coge un shp de disco y mete los registros en una tabla de la base de datos</div>
<div><a href="https://github.com/iCarto/sixhiara/blob/gvsig2/src/main/java/es/icarto/gvsig/sixhiara/ImportExploracoesExtension.java#L102" target="_blank">https://github.com/iCarto/<wbr>sixhiara/blob/gvsig2/src/main/<wbr>java/es/icarto/gvsig/sixhiara/<wbr>ImportExploracoesExtension.<wbr>java#L102</a></div>
<div> </div>
<div>Esta lee shps de disco y crea shps en disco</div>
<div><a href="https://github.com/iCarto/es.icarto.gvsig.commons/blob/gvsig2/src/main/java/es/icarto/gvsig/commons/datasources/SHPFactory.java" target="_blank">https://github.com/iCarto/es.<wbr>icarto.gvsig.commons/blob/<wbr>gvsig2/src/main/java/es/<wbr>icarto/gvsig/commons/<wbr>datasources/SHPFactory.java</a></div>
<div> </div>
<div>El truco diría que está en buscar el campo de geometría no por nombre si no por tipo.</div>
<div> </div>
<div>Feature srcFeat  = null; // vendrá de algún sitio</div>
<div>FeatureType srcType = srcFeat.getType();</div>
<div>
<div>FeatureAttributeDescriptor[] atts = srcType.<wbr>getAttributeDescriptors();</div>
</div>
<div>
<div>for (int i = 0; i &lt; atts.length; i++) {</div>
<div><span style="white-space:pre-wrap">  </span>int attType = atts[i].getType();</div>
<div><span class="m_-5120539984335639997gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if (attType == org.gvsig.fmap.geom.DataTypes.<wbr>GEOMETRY) {</div>
<div><span class="m_-5120539984335639997gmail-Apple-tab-span" style="white-space:pre-wrap"> // Hacer algo con la geometría</span></div>
<div><span class="m_-5120539984335639997gmail-Apple-tab-span" style="white-space:pre-wrap"> }</span> else {</div>
<div>        // Hacer algo con el resto de campos</div>
<div><span style="white-space:pre-wrap">  }</span></div>
</div>
<div><span style="white-space:pre-wrap">}</span></div>
<div><span style="white-space:pre-wrap"> </span></div>
<div><span style="white-space:pre-wrap"> </span></div>
<div><span style="white-space:pre-wrap">La otra forma de acceder sencilla de acceder a la geometría es:</span></div>
<div><span style="white-space:pre-wrap"> </span></div>
<div><span style="white-space:pre-wrap">Feature srcFeat  = null; // vendrá de algún sitio</span></div>
<div><span style="white-space:pre-wrap">Geometry srcGeom = srcFeat.getDefaultGeometry();</span></div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">El 24 de febrero de 2017, 13:04, Iago Alonso Alonso <span>&lt;<a href="mailto:ialonso@enxenio.es" target="_blank">ialonso@enxenio.es</a>&gt;</span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="font-size:10pt;font-family:Verdana,Geneva,sans-serif">
<p>Buenas, he decompilado la clase <em>PostgreSQLHelper</em> y he visto esto en el método. ¿Qué sentido tiene?<br><br></p>
<pre class="m_-5120539984335639997m_-3608373870544425760prettyprint m_-5120539984335639997m_-3608373870544425760lang-.java m_-5120539984335639997m_-3608373870544425760prettyprinted"><span class="m_-5120539984335639997m_-3608373870544425760pln"></span><span class="m_-5120539984335639997m_-3608373870544425760kwd">public</span><span class="m_-5120539984335639997m_-3608373870544425760pln"> </span><span class="m_-5120539984335639997m_-3608373870544425760typ">String</span><span class="m_-5120539984335639997m_-3608373870544425760pln"> getSqlFieldDescription</span><span class="m_-5120539984335639997m_-3608373870544425760pun">(</span><span class="m_-5120539984335639997m_-3608373870544425760typ">Feature<wbr>AttributeDescriptor</span><span class="m_-5120539984335639997m_-3608373870544425760pln"> attr</span><span class="m_-5120539984335639997m_-3608373870544425760pun">)</span><span class="m_-5120539984335639997m_-3608373870544425760pln"> </span><span class="m_-5120539984335639997m_-3608373870544425760kwd">throws</span><span class="m_-5120539984335639997m_-3608373870544425760pln"> </span><span class="m_-5120539984335639997m_-3608373870544425760typ">DataException</span><span class="m_-5120539984335639997m_-3608373870544425760pln"> </span><span class="m_-5120539984335639997m_-3608373870544425760pun">{</span><strong><span class="m_-5120539984335639997m_-3608373870544425760pln">
      </span><span class="m_-5120539984335639997m_-3608373870544425760kwd">if</span><span class="m_-5120539984335639997m_-3608373870544425760pln"> </span><span class="m_-5120539984335639997m_-3608373870544425760pun">(</span><span class="m_-5120539984335639997m_-3608373870544425760pln">attr</span><span class="m_-5120539984335639997m_-3608373870544425760pun">.</span><span class="m_-5120539984335639997m_-3608373870544425760pln">getType</span><span class="m_-5120539984335639997m_-3608373870544425760pun">()</span><span class="m_-5120539984335639997m_-3608373870544425760pln"> </span><span class="m_-5120539984335639997m_-3608373870544425760pun">==</span><span class="m_-5120539984335639997m_-3608373870544425760pln"> </span><span class="m_-5120539984335639997m_-3608373870544425760lit">66</span><span class="m_-5120539984335639997m_-3608373870544425760pun">)</span><span class="m_-5120539984335639997m_-3608373870544425760pln"> </span><span class="m_-5120539984335639997m_-3608373870544425760pun">{</span><span class="m_-5120539984335639997m_-3608373870544425760pln">
            </span><span class="m_-5120539984335639997m_-3608373870544425760kwd">return</span><span class="m_-5120539984335639997m_-3608373870544425760pln"> </span><span class="m_-5120539984335639997m_-3608373870544425760kwd">null</span><span class="m_-5120539984335639997m_-3608373870544425760pun">;</span><span class="m_-5120539984335639997m_-3608373870544425760pln">
      </span><span class="m_-5120539984335639997m_-3608373870544425760pun">}</span><span class="m_-5120539984335639997m_-3608373870544425760pln">
      </span></strong><span class="m_-5120539984335639997m_-3608373870544425760kwd">return</span><span class="m_-5120539984335639997m_-3608373870544425760pln"> </span><span class="m_-5120539984335639997m_-3608373870544425760kwd">super</span><span class="m_-5120539984335639997m_-3608373870544425760pun">.</span><span class="m_-5120539984335639997m_-3608373870544425760pln">getSqlFieldDescription</span><span class="m_-5120539984335639997m_-3608373870544425760pun">(</span><span class="m_-5120539984335639997m_-3608373870544425760pln">a<wbr>ttr</span><span class="m_-5120539984335639997m_-3608373870544425760pun">);</span><span class="m_-5120539984335639997m_-3608373870544425760pln">
</span><span class="m_-5120539984335639997m_-3608373870544425760pun">}</span><span class="m_-5120539984335639997m_-3608373870544425760pln"></span></pre>
<div>
<div class="m_-5120539984335639997h5">
<p>El 24-02-2017 10:42 AM, Iago Alonso Alonso escribió:</p>
</div>
</div>
<blockquote style="padding:0 0.4em;border-left:#1010ff 2px solid;margin:0">
<div>
<div class="m_-5120539984335639997h5">
<p>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 <strong>FeatureSet</strong> los <strong>DynFields</strong> 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.</p>
<p>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 <em>getGeometryType()</em> que he hecho, devuelto un <strong>Geometry.TYPES.&lt;el tipo que corresponde&gt;</strong> (Point, Polygon, Line....)</p>
<p>int size = featureSet.getDefaultFeatureTy<wbr>pe().size();<br> DynField[] values = featureSet.getDefaultFeatureTy<wbr>pe().getDynFields();<br> for (int i = 0; i &lt; size; i++) {<br>     String name = values[i].getName();<br>     Integer type = values[i].getType();<br>     if (!name.equals(&quot;GEOMETRY&quot;)) {<br>         featureType.add(name, type);<br>     } else {<br>        String idTabla = featureSet.getDefaultFeatureTy<wbr>pe().getId();<br>        int tipoGeometria = getGeometryType(idTabla);<br>        featureType.add(name, DataTypes.GEOMETRY).setGeometr<wbr>yType(Geometry.SUBTYPES.<wbr>GEOM2D, tipoGeometria);<br>     }<br> }</p>
<p>El problema viene en tiempo de ejecución, al hacer <strong>explorer.add(storeName, newFeatureStoreParameters, true);</strong>, haciendo debug he llegado hasta la clase <strong>JDBCServerExplorer.class</strong>. En la línea 499, hay un bucle <em>WHILE</em> que obtiene los campos y su tipo y crea el equivalente <em>SQL</em> para la consulta. He observado que cuando llega al campo que debe llevar la geometría, la línea:</p>
<p><strong>sqlAttr = helper.getSqlFieldDescription(<wbr>(FeatureAttributeDescriptor) attrs.next());</strong></p>
<p>Devuelve <em>NULL</em>, pero haciendo F5 no puedo acceder a <em>PostgreSQLHelper</em> y ver lo que el método <strong>getSqlFieldDescription</strong> intenta hacer para crear el <em>SQL</em>. Y en el log obtengo:<br><br>ERROR [Thread-7] (ExportToJDBC.java:101) - Error al inicializar el store:<br>org.gvsig.fmap.dal.exception.I<wbr>nitializeException: Error intializing resource &#39;PostgreSQL&#39;.<br> at org.gvsig.fmap.dal.impl.Defaul<wbr>tDataManager.createProvider(De<wbr>faultDataManager.java:815)<br> at org.gvsig.fmap.dal.impl.Defaul<wbr>tDataManager.intializeDataStor<wbr>e(DefaultDataManager.java:777)<br> at org.gvsig.fmap.dal.impl.Defaul<wbr>tDataManager.localOpenStore(De<wbr>faultDataManager.java:364)<br> at org.gvsig.fmap.dal.impl.Defaul<wbr>tDataManager.openStore(Default<wbr>DataManager.java:448)<br>...<br>Caused by: org.gvsig.fmap.dal.exception.I<wbr>nitializeException: Error intializing resource &#39;{unknow}&#39;.<br> at org.gvsig.fmap.dal.impl.DataSt<wbr>oreProviderToFeatureStoreProvi<wbr>derFactoryWrapper.createProvid<wbr>er(DataStoreProviderToFeatureS<wbr>toreProviderFactoryWrapper.<wbr>java:61)<br> at org.gvsig.fmap.dal.impl.Defaul<wbr>tDataManager.createProvider(De<wbr>faultDataManager.java:797)<br> ... 7 more<br><strong>Caused by: java.lang.IllegalArgumentExcep<wbr>tion: argument type mismatch</strong><br> at sun.reflect.NativeConstructorA<wbr>ccessorImpl.newInstance0(<wbr>Native Method)<br> at sun.reflect.NativeConstructorA<wbr>ccessorImpl.newInstance(Native<wbr>ConstructorAccessorImpl.java:<wbr>62)<br> at sun.reflect.DelegatingConstruc<wbr>torAccessorImpl.newInstance(De<wbr>legatingConstructorAccessorImp<wbr>l.java:45)<br> at java.lang.reflect.Constructor.<wbr>newInstance(Constructor.java:4<wbr>22)<br> at org.gvsig.fmap.dal.impl.DataSt<wbr>oreProviderToFeatureStoreProvi<wbr>derFactoryWrapper.createProvid<wbr>er(DataStoreProviderToFeatureS<wbr>toreProviderFactoryWrapper.<wbr>java:59)<br> ... 8 more<br><br>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.</p>
<p>Un saludo y gracias.</p>
</div>
</div>
<div class="m_-5120539984335639997m_-3608373870544425760pre" style="margin:0;padding:0;font-family:monospace">______________________________<wbr>_________________<br> gvSIG_desarrolladores mailing list<br><a href="mailto:gvSIG_desarrolladores@listserv.gva.es" target="_blank">gvSIG_desarrolladores@listserv<wbr>.gva.es</a><br> Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección: <a href="https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores" rel="noreferrer" target="_blank">https://listserv.gva.es/cgi-bi<wbr>n/mailman/listinfo/gvsig_desar<wbr>rolladores</a></div>
</blockquote>
</div>
<br>______________________________<wbr>_________________<br> gvSIG_desarrolladores mailing list<br><a href="mailto:gvSIG_desarrolladores@listserv.gva.es" target="_blank">gvSIG_desarrolladores@listserv<wbr>.gva.es</a><br> Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección: <a href="https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores" rel="noreferrer" target="_blank">https://listserv.gva.es/cgi-bi<wbr>n/mailman/listinfo/gvsig_desar<wbr>rolladores</a><br><br></blockquote>
</div>
<br><br clear="all">
<div> </div>
-- <br>
<div class="m_-5120539984335639997gmail_signature">
<div dir="ltr">
<div>Francisco Puga</div>
<div>iCarto | Innovación, Cooperación, Cartografía y Territorio S.L.</div>
<div><a href="http://www.icarto.es/" target="_blank">http://www.icarto.es/</a></div>
<div> </div>
<div>c/ Rafael Alberti nº 13 – 1º D</div>
<div>15008 A Coruña</div>
<div>Galicia (Spain)</div>
<div><a href="tel:+34%20881%2092%2078%2008" value="+34881927808" target="_blank">+34 881927808</a></div>
<div> </div>
<div>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.</div>
<div> </div>
<div>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).</div>
</div>
</div>
</div>
<br>
<div class="m_-5120539984335639997pre" style="margin:0;padding:0;font-family:monospace">______________________________<wbr>_________________<br> gvSIG_desarrolladores mailing list<br><a href="mailto:gvSIG_desarrolladores@listserv.gva.es" target="_blank">gvSIG_desarrolladores@<wbr>listserv.gva.es</a><br> Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección: <a href="https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores" rel="noreferrer" target="_blank">https://listserv.gva.es/cgi-<wbr>bin/mailman/listinfo/gvsig_<wbr>desarrolladores</a></div>
</blockquote>
</div></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>Francisco Puga</div><div>iCarto | Innovación, Cooperación, Cartografía y Territorio S.L.</div><div><a href="http://www.icarto.es/" target="_blank">http://www.icarto.es/</a></div><div><br></div><div>c/ Rafael Alberti nº 13 – 1º D</div><div>15008 A Coruña</div><div>Galicia (Spain)</div><div>+34 881927808</div><div><br></div><div>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.</div><div><br></div><div>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).</div></div></div>
</div>