<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, gracias a los dos por las respuestas. Y s&iacute;, tienes raz&oacute;n, el error era que volv&iacute; a caer en la implementaci&oacute;n el lugar del API... fallo mio, me pongo a buscar y buscar y si no me fijo caigo en el mismo error sin darme cuenta.</p>
<p>He decidido poner la opci&oacute;n 2, has dicho que tiene un rendimiento aceptable as&iacute; que es m&aacute;s que suficiente y si se asegura que seguir&aacute; aunque cambie la versi&oacute;n s&iacute; o s&iacute;, prefiero este m&eacute;todo y si alguien viene despu&eacute;s que yo al proyecto al menos no tendr&aacute; que preocuparse de nuevo por este problema.</p>
<p>Un saludo y gracias de nuevo a los dos.</p>
<p>&nbsp;</p>
<p>El 20-12-2016 04:49 PM, Joaquin Jose del Cerro Murciano 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"><br />
<div class="gmail_extra"><br />
<div class="gmail_quote">El 20 de diciembre de 2016, 11:31, 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-top: 0px; margin-bottom: 0px;">
<div style="font-size: 10pt; font-family: verdana,geneva,sans-serif;">
<p>Hola, me gustar&iacute;a saber si se usa alg&uacute;n manager para la clase Converter, ya que en una clase tengo:</p>
<p>import org.gvsig.fmap.geom.util.<wbr />Converter; *Marcado como deprecated*</p>
<p>y en una l&iacute;nea se usa:</p>
<p>&lt;variable&gt; = Converter.jtsToGeometry(<wbr />geoJTS); *Marcado como deprecated*</p>
<p>As&iacute; que buscando por el c&oacute;digo he encontrado una clase "Converter.java" ubicada en "org.gvsig.desktop.compat.cdc" -&gt; "org.gvsig.fmap.geom.<wbr />generalpath.util" marcada como deprecated y otra clase en el mismo directorio llamada "UtilFunctions.java" marcada como deprecated tambi&eacute;n. He seguido buscando y he encontrado un DefaultGeometryManager (import org.gvsig.fmap.geom.impl.<wbr />DefaultGeometryManager;) que implementa a GeometryManager, por lo que en el c&oacute;digo es el que utilizo:</p>
<p>Geometry igeo = null;<br />if (elemento != null) {<br />&nbsp;&nbsp; com.vividsolutions.jts.geom.<wbr />Geometry geoJTS = elemento.<wbr />getElementoInfraestructura().<wbr />getGeometria();<br />&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DefaultGeometryManager geomManager = new&nbsp;DefaultGeometryManager() &lt;- a&ntilde;adida (GeometryManager no tiene ese m&eacute;todo)<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; igeo = geomManager.createFrom(geoJTS)<wbr />; &lt;- Da error de "The method createFrom(String) in the type DefaultGeometryManager is not applicable for the arguments (Geometry)"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; igeo = Converter.jtsToGeometry(<wbr />geoJTS); **Deprecated** (la que quiero eliminar)<br />&nbsp;&nbsp; } catch (CreateGeometryException e) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; e.printStackTrace();<br />&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; .....................</p>
<p>}</p>
<p>Pero si voy a la clase "DefaultGeometryManager" (package org.gvsig.fmap.geom.<wbr />generalpath) veo que hay un m&eacute;todo "createFrom" que recibe un "Geometry":<br /><br />public Geometry createFrom(com.vividsolutions.<wbr />jts.geom.Geometry geom) throws GeometryException {<br />&nbsp;&nbsp;&nbsp; return Converter.jtsToGeometry(geom);<br />}</p>
<p>Pero cuando hago geomManager.&lt;buscar m&eacute;todoDefault&gt; me salen todos los createForm menos ese (s&oacute;lo me aparecen los de createFrom(String wkt, String srs), createFrom(String wkt) y createFrom(byte[] wkb)) y no tengo acceso a ese. &iquest;Qu&eacute; estoy haciendo mal? &iquest;O es que no se tiene acceso a ese m&eacute;todo, aunque est&aacute; como p&uacute;blico?</p>
</div>
</blockquote>
<div><br />Hola Iago, <br />Como ya he comentado muchas veces, en gvSIG tratamos de mantener separado el API de la implementacion. <br />Una libreria define el API y otra la implementacion.<br />Todo lo que hay en la implementacion que no este definido en la libreria del API, este declarado como publico o no es implementacion y no deberia usarse si quieres que las cosas te vayan en proximas versiones.<br /><br />&iquest;Qu&eacute; estas haciendo mal? <br />Mirar en la implementacion para ver que puedes usar. <br />Debes mirar solo en el API.<br /><br />&iquest;Es que no se tiene acceso a ese m&eacute;todo, aunque este como p&uacute;blico?<br />Pues no, no se debe tener acceso a el.<br />De hecho si no tuvieses el jar de la implementacion declarado con el scope de "compile" en el pom (como deberia ser) no te compilaria si tratas de usar cosas que son propias de la implementacion y no deberias usar.<br /><br />Acostumbrate a que usar cosas que no estan en el API pueden desaparecer de una version a otra.<br /><br />Si no recuerdo mal creo que era hasta la version 2.2 que estabamos usando nuestra propia implementacion de geometrias basada en un GeneralPath de java modificado (ya dudo se fue hasta la 2.2 o la 2.1). Luego pasamos ha hacer una implementacion de nuestro API basandonos en la libreria de JTS. Pero nadie te garantiza que en un futuro no volvamos a cambiar la implementacion de nuevo. Lo que si mantendremos en la medida de lo posible es el API (en la 2.3 hemos introducido cambios en el API, mas que nada por que habian algunos errores de concepto que se reflejaban en el y hemos decidido subsanarlos hasta donde hemos considerado que podiamos hacerlo sin destrozar todo). Con esto que quiero decir... pues dos cosas, uno, no uses la implementacion, dos, no asumas que debajo de las geometrias de gvSIG hay geometrias de jts ya que eso es dependiente de la implementacion actual.<br /><br />Comentado todo esto...<br />&iquest; Si tengo una geometria de JTS como la convierto a una geometria de gvSIG ?<br />(que es tu problema)<br /><br />Asi de forma rapida, dos opciones, pero antes de comentarlas hablo de una funcionalidad que esta en el manager de geometrias poco usada habitualmente.<br /><br />La libreria de geometrias tiene como funcionalidad ofrecer un sorporte minimo para manejar geometrias. Construirlas, guardarlas, preguntar por sus componentes, ... y poco mas. <br />&iquest; Y que se penso inicialmente dejar fuera ? <br />Pues la idea fue que quedaran fuera las distintas operaciones que se pueden hacer entre geometrias. Intersecciones, buffers, distancias...<br />De hecho en hasta la version 2.2 estaban fuera de la implemetacion de geometrias. Si ves en el API de Geometry encuentras cosas como:<br /><br />&nbsp; public double distance(Geometry other) throws GeometryOperationNotSupportedException, GeometryOperationException;<br /><br />Y puede sonar estra&ntilde;o las excepciones que puede lanzar. GeometryOperationNotSupportedException, es lanzada si la implememtacion no soporta esa operacion.<br /><br />Bien y ... &iquest; Que tiene que ver eso con tu problema ?<br /><br />Pues la cosa esta en que en la libreria de geometrias se puede registrar operaciones con geometrias. Las mas basicas estan en el API como metodos de geometrias, pero ni siquiera eso significa que esten implementadas o que esten en la libreria de la implementacion. De hecho en gvSIG 2.2 estaban en una libreria aparte.<br /><br />Actualmente, ademas de las operaciones basicas que hay declaradas en el API de Geometry, pueden registrarse otras operaciones, como por ejemplo para convertir de y desde geometria-JTS a geometria-gvSIG. En la implementacion actual, y supongo que por lo basico de la operacion, mientras se puede mantener estaran en proximas versiones de la libreria de geometrias.<br /><br />Asi que volviendo a la pregunta inicial...<br />&iquest; Si tengo una geometria de JTS como la combierto a una geometria de gvSIG ?<br /><br />Dos opciones. <br />Opcion 1.<br />Pues puedes usar la operacion "fromJTS". Seria algo como:<br /><br />&nbsp; com.vividsolutions.jts.geom.Geometry jtsgeom = null;<br />&nbsp; GeometryManager geomManager = GeometryLocator.getGeometryManager();<br />&nbsp; <br />&nbsp; // Construimos un contexto de operacion y dejamos en el la geometria<br />&nbsp; // que queremos convertir.<br />&nbsp; GeometryOperationContext context = new GeometryOperationContext();<br />&nbsp; context.setAttribute("JTSGeometry", jtsgeom);<br />&nbsp; Geometry geom = (Geometry) geomManager.invokeOperation(GeometryManager.OPERATIONS.FROMWKB, context);<br /><br />Ahora mismo dudo que se este usando en gvSIG esta operacion, asi que si te da algun problema puedes comentarlo.<br />Y nadie te garantiza que este siempre disponible, es muy probable que si, pero... <br /><br />Opcion 2.<br />Esta funcionara siempre, ya que es una funcionalidad basica para gvSIG. <br />Usa WKB para construir la geometria de gvSIG.<br /><br />&nbsp; com.vividsolutions.jts.geom.Geometry jtsgeom = null;<br />&nbsp; <br />&nbsp; com.vividsolutions.jts.io.WKBWriter jtswriter = new com.vividsolutions.jts.io.WKBWriter();<br />&nbsp; byte[] bytes = jtswriter.write(jtsgeom);<br /><br />&nbsp; GeometryManager geomManager = GeometryLocator.getGeometryManager();<br />&nbsp; Geometry geom = geomManager.createFrom(bytes);<br /><br />Mi consejo es que uses la operacion si precisas altas prestaciones. En la implementacion de la operacion normalmente intentaremos ser lo mas eficientes posible. Si el alto rendimiento no es muy relevante usa WKB. Para que te hagas una idea, todo el trasiego de geometrias entre gvSIG y PosgisSQL se hace a traves de WKB, pasando por el createFrom(byte[]) del manager, y tiene un rendimiento aceptable.<br /><br />Espero que te sirva<br /><br />Un saludo<br />Joaquin<br /><br /><br />&nbsp;</div>
<blockquote class="gmail_quote" style="margin-top: 0px; margin-bottom: 0px;">
<div style="font-size: 10pt; font-family: verdana,geneva,sans-serif;">
<p>Un saludo y gracias.</p>
</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" /><br />-- <br />
<div class="gmail_signature">--------------------------------------<br />Joaquin Jose del Cerro Murciano<br />Development and software arquitecture manager at gvSIG Team<br /><a href="mailto:jjdelcerro@gvsig.com">jjdelcerro@gvsig.com</a><br /><a href="mailto:jjdelcerro@gvsig.org">jjdelcerro@gvsig.org</a><br />gvSIG Association<br /><a href="http://www.gvsig.com">www.gvsig.com</a><br /><a href="http://www.gvsig.org">www.gvsig.org</a></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>