<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style='font-size: 10pt; font-family: Verdana,Geneva,sans-serif'>
<p>Hola Francisco, ese truquito me ha funcionado. No s&eacute; por qu&eacute; no me di cuenta que igual en lugar del nombre deber&iacute;a haber usado el tipo.</p>
<p>Un saludo y muchas gracias.</p>
<p>El 28-02-2017 11:04 AM, Francisco Puga escribi&oacute;:</p>
<blockquote type="cite" style="padding: 0 0.4em; border-left: #1010ff 2px solid; margin: 0"><!-- html ignored --><!-- head ignored --><!-- meta ignored -->
<div dir="ltr">Hola Iago,
<div>&nbsp;</div>
<div>Lo del campo geometry a veces a mi tambi&eacute;n me da alg&uacute;n problema. No me queda muy claro lo que intentas hacer, si crear una nueva tabla desde c&oacute;digo o s&oacute;lo iterar por los registros, pero te enlazo dos clases que te pueden dar una pista.</div>
<div>&nbsp;</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">https://github.com/iCarto/sixhiara/blob/gvsig2/src/main/java/es/icarto/gvsig/sixhiara/ImportExploracoesExtension.java#L102</a></div>
<div>&nbsp;</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">https://github.com/iCarto/es.icarto.gvsig.commons/blob/gvsig2/src/main/java/es/icarto/gvsig/commons/datasources/SHPFactory.java</a></div>
<div>&nbsp;</div>
<div>El truco dir&iacute;a que est&aacute; en buscar el campo de geometr&iacute;a no por nombre si no por tipo.</div>
<div>&nbsp;</div>
<div>Feature srcFeat &nbsp;= null; // vendr&aacute; de alg&uacute;n sitio</div>
<div>FeatureType srcType = srcFeat.getType();</div>
<div>
<div>FeatureAttributeDescriptor[] atts = srcType.getAttributeDescriptors();</div>
</div>
<div>
<div>for (int i = 0; i &lt; atts.length; i++) {</div>
<div><span style="white-space: pre;">&nbsp; </span>int attType = atts[i].getType();</div>
<div><span class="gmail-Apple-tab-span" style="white-space: pre;"> </span>if (attType == org.gvsig.fmap.geom.DataTypes.GEOMETRY) {</div>
<div><span class="gmail-Apple-tab-span" style="white-space: pre;"> // Hacer algo con la geometr&iacute;a</span></div>
<div><span class="gmail-Apple-tab-span" style="white-space: pre;"> }</span>&nbsp;else {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; // Hacer algo con el resto de campos</div>
<div><span style="white-space: pre;">&nbsp; }</span></div>
</div>
<div><span style="white-space: pre;">}</span></div>
<div><span style="white-space: pre;">&nbsp;</span></div>
<div><span style="white-space: pre;">&nbsp;</span></div>
<div><span style="white-space: pre;">La otra forma de acceder sencilla de acceder a la geometr&iacute;a es:</span></div>
<div><span style="white-space: pre;">&nbsp;</span></div>
<div><span style="white-space: pre;">Feature srcFeat &nbsp;= null; // vendr&aacute; de alg&uacute;n sitio</span></div>
<div><span style="white-space: pre;">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">ialonso@enxenio.es</a>&gt;</span> escribi&oacute;:<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&eacute;todo. &iquest;Qu&eacute; sentido tiene?<br /><br /></p>
<pre class="m_-3608373870544425760prettyprint m_-3608373870544425760lang-.java m_-3608373870544425760prettyprinted"><span class="m_-3608373870544425760pln"></span><span class="m_-3608373870544425760kwd">public</span><span class="m_-3608373870544425760pln"> </span><span class="m_-3608373870544425760typ">String</span><span class="m_-3608373870544425760pln"> getSqlFieldDescription</span><span class="m_-3608373870544425760pun">(</span><span class="m_-3608373870544425760typ">Feature<wbr />AttributeDescriptor</span><span class="m_-3608373870544425760pln"> attr</span><span class="m_-3608373870544425760pun">)</span><span class="m_-3608373870544425760pln"> </span><span class="m_-3608373870544425760kwd">throws</span><span class="m_-3608373870544425760pln"> </span><span class="m_-3608373870544425760typ">DataException</span><span class="m_-3608373870544425760pln"> </span><span class="m_-3608373870544425760pun">{</span><strong><span class="m_-3608373870544425760pln">
      </span><span class="m_-3608373870544425760kwd">if</span><span class="m_-3608373870544425760pln"> </span><span class="m_-3608373870544425760pun">(</span><span class="m_-3608373870544425760pln">attr</span><span class="m_-3608373870544425760pun">.</span><span class="m_-3608373870544425760pln">getType</span><span class="m_-3608373870544425760pun">()</span><span class="m_-3608373870544425760pln"> </span><span class="m_-3608373870544425760pun">==</span><span class="m_-3608373870544425760pln"> </span><span class="m_-3608373870544425760lit">66</span><span class="m_-3608373870544425760pun">)</span><span class="m_-3608373870544425760pln"> </span><span class="m_-3608373870544425760pun">{</span><span class="m_-3608373870544425760pln">
            </span><span class="m_-3608373870544425760kwd">return</span><span class="m_-3608373870544425760pln"> </span><span class="m_-3608373870544425760kwd">null</span><span class="m_-3608373870544425760pun">;</span><span class="m_-3608373870544425760pln">
      </span><span class="m_-3608373870544425760pun">}</span><span class="m_-3608373870544425760pln">
      </span></strong><span class="m_-3608373870544425760kwd">return</span><span class="m_-3608373870544425760pln"> </span><span class="m_-3608373870544425760kwd">super</span><span class="m_-3608373870544425760pun">.</span><span class="m_-3608373870544425760pln">getSqlFieldDescription</span><span class="m_-3608373870544425760pun">(</span><span class="m_-3608373870544425760pln">a<wbr />ttr</span><span class="m_-3608373870544425760pun">);</span><span class="m_-3608373870544425760pln">
</span><span class="m_-3608373870544425760pun">}</span><span class="m_-3608373870544425760pln"></span></pre>
<div>
<div class="h5">
<p>El 24-02-2017 10:42 AM, Iago Alonso Alonso escribi&oacute;:</p>
</div>
</div>
<blockquote style="padding: 0 0.4em; border-left: #1010ff 2px solid; margin: 0;">
<div>
<div class="h5">
<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&eacute; como nombre de la columna) y su tipo (que usar&eacute; 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&iacute;a es donde tengo los problemas.</p>
<p>Para el campo de geometr&iacute;a, miro el nombre del fichero que tengo ese momento para ser qu&eacute; tipo de geometr&iacute;a se corresponde con la tabla y con la funci&oacute;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.<wbr />getDefaultFeatureType().size()<wbr />;<br /> DynField[] values = featureSet.<wbr />getDefaultFeatureType().<wbr />getDynFields();<br /> for (int i = 0; i &lt; size; i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp; String name = values[i].getName();<br />&nbsp;&nbsp;&nbsp;&nbsp; Integer type = values[i].getType();<br />&nbsp;&nbsp;&nbsp;&nbsp; if (!name.equals("GEOMETRY")) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; featureType.add(name, type);<br />&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String idTabla = featureSet.<wbr />getDefaultFeatureType().getId(<wbr />);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int tipoGeometria = getGeometryType(idTabla);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; featureType.add(name, DataTypes.GEOMETRY).<wbr />setGeometryType(Geometry.<wbr />SUBTYPES.GEOM2D, tipoGeometria);<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br /> }</p>
<p>El problema viene en tiempo de ejecuci&oacute;n, al hacer <strong>explorer.add(storeName, newFeatureStoreParameters, true);</strong>, haciendo debug he llegado hasta la clase <strong>JDBCServerExplorer.class</strong>. En la l&iacute;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&iacute;a, la l&iacute;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&eacute;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.<wbr />InitializeException: Error intializing resource 'PostgreSQL'.<br /> at org.gvsig.fmap.dal.impl.<wbr />DefaultDataManager.<wbr />createProvider(<wbr />DefaultDataManager.java:815)<br /> at org.gvsig.fmap.dal.impl.<wbr />DefaultDataManager.<wbr />intializeDataStore(<wbr />DefaultDataManager.java:777)<br /> at org.gvsig.fmap.dal.impl.<wbr />DefaultDataManager.<wbr />localOpenStore(<wbr />DefaultDataManager.java:364)<br /> at org.gvsig.fmap.dal.impl.<wbr />DefaultDataManager.openStore(<wbr />DefaultDataManager.java:448)<br />...<br />Caused by: org.gvsig.fmap.dal.exception.<wbr />InitializeException: Error intializing resource '{unknow}'.<br /> at org.gvsig.fmap.dal.impl.<wbr />DataStoreProviderToFeatureStor<wbr />eProviderFactoryWrapper.<wbr />createProvider(<wbr />DataStoreProviderToFeatureStor<wbr />eProviderFactoryWrapper.java:<wbr />61)<br /> at org.gvsig.fmap.dal.impl.<wbr />DefaultDataManager.<wbr />createProvider(<wbr />DefaultDataManager.java:797)<br /> ... 7 more<br /><strong>Caused by: java.lang.<wbr />IllegalArgumentException: argument type mismatch</strong><br /> at sun.reflect.<wbr />NativeConstructorAccessorImpl.<wbr />newInstance0(Native Method)<br /> at sun.reflect.<wbr />NativeConstructorAccessorImpl.<wbr />newInstance(<wbr />NativeConstructorAccessorImpl.<wbr />java:62)<br /> at sun.reflect.<wbr />DelegatingConstructorAccessorI<wbr />mpl.newInstance(<wbr />DelegatingConstructorAccessorI<wbr />mpl.java:45)<br /> at java.lang.reflect.Constructor.<wbr />newInstance(Constructor.java:<wbr />422)<br /> at org.gvsig.fmap.dal.impl.<wbr />DataStoreProviderToFeatureStor<wbr />eProviderFactoryWrapper.<wbr />createProvider(<wbr />DataStoreProviderToFeatureStor<wbr />eProviderFactoryWrapper.java:<wbr />59)<br /> ... 8 more<br /><br />Por lo tanto, mi pregunta es qu&eacute; estoy haciendo mal a la hora de definir el campo de la geometr&iacute;a, o si estoy definiendo el tipo de geometr&iacute;a mal.</p>
<p>Un saludo y gracias.</p>
</div>
</div>
<div class="m_-3608373870544425760pre" style="margin: 0; padding: 0; font-family: monospace;">______________________________<wbr />_________________<br /> gvSIG_desarrolladores mailing list<br /><a href="mailto:gvSIG_desarrolladores@listserv.gva.es">gvSIG_desarrolladores@<wbr />listserv.gva.es</a><br /> Para ver hist&oacute;rico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente direcci&oacute;n: <a href="https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores" rel="noreferrer">https://listserv.gva.es/cgi-<wbr />bin/mailman/listinfo/gvsig_<wbr />desarrolladores</a></div>
</blockquote>
</div>
<br />______________________________<wbr />_________________<br /> gvSIG_desarrolladores mailing list<br /><a href="mailto:gvSIG_desarrolladores@listserv.gva.es">gvSIG_desarrolladores@<wbr />listserv.gva.es</a><br /> Para ver hist&oacute;rico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente direcci&oacute;n: <a href="https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores" rel="noreferrer">https://listserv.gva.es/cgi-<wbr />bin/mailman/listinfo/gvsig_<wbr />desarrolladores</a><br /><br /></blockquote>
</div>
<br /><br clear="all" />
<div>&nbsp;</div>
-- <br />
<div class="gmail_signature">
<div dir="ltr">
<div>Francisco Puga</div>
<div>iCarto | Innovaci&oacute;n, Cooperaci&oacute;n, Cartograf&iacute;a y Territorio S.L.</div>
<div><a href="http://www.icarto.es/">http://www.icarto.es/</a></div>
<div>&nbsp;</div>
<div>c/ Rafael Alberti n&ordm; 13 &ndash; 1&ordm; D</div>
<div>15008 A Coru&ntilde;a</div>
<div>Galicia (Spain)</div>
<div>+34 881927808</div>
<div>&nbsp;</div>
<div>Este correo electr&oacute;nico contiene informaci&oacute;n estrictamente confidencial y es de uso exclusivo del destinatario, quedando prohibida a cualquier otra persona su revelaci&oacute;n, copia, distribuci&oacute;n, o el ejercicio de cualquier acci&oacute;n relativa a su contenido. Si ha recibido este mensaje por error, por favor conteste a su remitente mediante correo electr&oacute;nico y proceda a borrarlo de su sistema.</div>
<div>&nbsp;</div>
<div>Sus datos personales ser&aacute;n tratados de forma confidencial y no ser&aacute;n cedidos a terceros ajenos a ICARTO. En cualquier caso, podr&aacute; ejercer los derecho de oposici&oacute;n, acceso, rectificaci&oacute;n y cancelaci&oacute;n de acuerdo con lo establecido en la Ley Org&aacute;nica 15/99, de 13 de diciembre, de Protecci&oacute;n de Datos de Car&aacute;cter Personal dirigi&eacute;ndose a Innovaci&oacute;n, Cooperaci&oacute;n, Cartograf&iacute;a e Territorio, SL. (ICARTO) en la direcci&oacute;n postal a C/ Rafael Alberti, n&ordm; 13, 1&ordm;D, 15.008 &ndash; (A Coru&ntilde;a).</div>
</div>
</div>
</div>
<br />
<div class="pre" style="margin: 0; padding: 0; font-family: monospace">_______________________________________________<br /> gvSIG_desarrolladores mailing list<br /><a href="mailto:gvSIG_desarrolladores@listserv.gva.es">gvSIG_desarrolladores@listserv.gva.es</a><br /> Para ver hist&oacute;rico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente direcci&oacute;n: <a href="https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores" rel="noreferrer">https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</a></div>
</blockquote>
</body></html>