<div dir="ltr">Hola Joaquín,<div><br></div><div style>Estoy trabajando sobre la versión 1.11 y  como bien apuntabas, el código de Leticia no funcionaba al 100% para esta versión.</div><div style><br></div><div style>Precisamente hace un rato acababa de descubrir cómo puedo hacer que funcione y parece que me funciona haciendo la siguiente modificación cuando quiero transformar un IGeometry en Geometry. Escribo los nombres completos de las clases para que no haya confusión entre los distintos paquetes:</div>
<div style><br></div><div style>com.vividsolutions.jts.geom.Geometry g1 = NewFConverter.toJtsConverter(layer.getSource().getFeature(i).getGeometry());</div><div style><br></div><div style>Haciendolo de esta forma, parece que puedo utilizar sin problema el g1.distance(g2);</div>
<div style><br></div><div style>Muchas gracias por todo!</div><div style><br></div><div style>Un abrazo,</div><div style><br></div><div style>Alberto</div><div style><br></div><div style><br></div><div style><br></div></div>
<div class="gmail_extra"><br><br><div class="gmail_quote">2013/4/23 Joaquin del Cerro <span dir="ltr">&lt;<a href="mailto:jjdelcerro.gvsig@gmail.com" target="_blank">jjdelcerro.gvsig@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
El 22/04/13 16:47, Alberto Calzada escribió:<br>
<div class="im">&gt; Hola Leticia!<br>
&gt;<br>
&gt; Muchisimas gracias por el código! Ahora me he dado cuenta de que necesitaba<br>
&gt; era utilizar &quot;Feature&quot; en vez de &quot;IFeature&quot;, y así poder obtener los<br>
&gt; objetos de la clase &quot;com.vividsolutions.jts.geom.Geometry&quot;. Parece ser que<br>
&gt; no hay forma de hacer estos cálculos directamente con los IFeature y<br>
&gt; IGeometry y hay que utilizar los otros. Pero bueno, para lo que lo necesite<br>
&gt; me viene perfecto!<br>
<br>
</div>Hola Alberto,<br>
IFeature e IGeometry sin interfaces de gvSIG 1.X, mientras que el codigo que<br>
te ha pasado Leticia, el Feature, FeatureStore o Geometry, son para gvSIG 2.X.<br>
<br>
No se sobre que estaras prearando tu plugin.<br>
Si es para gvSIG 2, te puede venir bien el codigo de Leticia, si no me temo<br>
que no te va a valer. Comenta por la lista si es para la 1 a ver si algun<br>
compañero que sepa mas como hacerlo te puede echar una mano.<br>
<br>
Un saludo<br>
Joaquin<br>
<div><div class="h5"><br>
<br>
&gt;<br>
&gt; Muchas gracias!<br>
&gt;<br>
&gt; Un saludo,<br>
&gt;<br>
&gt; Alberto<br>
&gt;<br>
&gt;<br>
&gt; 2013/4/22 Leticia Riestra Ainsua &lt;<a href="mailto:lriestra@lbd.org.es">lriestra@lbd.org.es</a>&gt;<br>
&gt;<br>
&gt;&gt; Hola<br>
&gt;&gt;<br>
&gt;&gt; Yo tengo un código que precisamente obtiene aquellas features que están a<br>
&gt;&gt; una distancia X de otra feature. Dicho parámetro es indicado por el usuario<br>
&gt;&gt; en la interfaz.<br>
&gt;&gt; El código es el siguiente:<br>
&gt;&gt;<br>
&gt;&gt; La función para obtener las capas activas son<br>
&gt;&gt;<br>
&gt;&gt; public FLayer[] obtenerCapasActivas(){<br>
&gt;&gt; FLayer[] retorno = null;<br>
&gt;&gt;<br>
&gt;&gt; IWindow f = PluginServices.getMDIManager().getActiveWindow();<br>
&gt;&gt;<br>
&gt;&gt; if (f == null) {<br>
&gt;&gt;  return retorno;<br>
&gt;&gt; }<br>
&gt;&gt;<br>
&gt;&gt; if (f.getClass() == DefaultViewPanel.class) {<br>
&gt;&gt;  DefaultViewPanel bv = (DefaultViewPanel) f;<br>
&gt;&gt; ViewDocument mo = bv.getViewDocument();<br>
&gt;&gt; MapContext contexto = mo.getMapContext();<br>
&gt;&gt;<br>
&gt;&gt; retorno =contexto.getLayers().getActives();<br>
&gt;&gt;<br>
&gt;&gt; }<br>
&gt;&gt; return retorno;<br>
&gt;&gt;  }<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; try {<br>
&gt;&gt;<br>
&gt;&gt;         FLayer[] capasActivas = obtenerCapasActivas();<br>
&gt;&gt;          // Nos quedamos con la primera capa activa porque solo vamos a<br>
&gt;&gt; calcular las distancias entre las features de una única capa de cada vez. Y<br>
&gt;&gt; en mi caso solo necesito de la primera activa<br>
&gt;&gt;   FLayer layer = capasActivas[0];<br>
&gt;&gt;         FeatureStore featureStore = ((FLyrVect) layer).getFeatureStore();<br>
&gt;&gt;  FeatureSet featureSet = featureStore.getFeatureSet();<br>
&gt;&gt;<br>
&gt;&gt;         // Recorremos el feature y para cada uno de esos,<br>
&gt;&gt; // compruebo si todos las<br>
&gt;&gt;   // demas tienen geometrias a distancia XX<br>
&gt;&gt; Iterator&lt;?&gt; it = featureSet.fastIterator();<br>
&gt;&gt;  while (it.hasNext()) {<br>
&gt;&gt; Feature feature = (Feature) it.next();<br>
&gt;&gt;  FeatureType featureType = feature.getType();<br>
&gt;&gt;<br>
&gt;&gt; Geometry geomFeature1 = feature.getDefaultGeometry();<br>
&gt;&gt;<br>
&gt;&gt; FeatureAttributeDescriptor[] attributeDescriptors = featureType<br>
&gt;&gt; .getAttributeDescriptors();<br>
&gt;&gt;<br>
&gt;&gt; String valorClavePrimariaFeature1 = &quot;&quot;;<br>
&gt;&gt; for (int i = 0; i &lt; attributeDescriptors.length; i++) {<br>
&gt;&gt;  FeatureAttributeDescriptor attrDesc = attributeDescriptors[i];<br>
&gt;&gt; if (attrDesc.isPrimaryKey()) {<br>
&gt;&gt;  valorClavePrimariaFeature1 += feature.get(attrDesc.getName()) + &quot; | &quot;;<br>
&gt;&gt;  }<br>
&gt;&gt; }<br>
&gt;&gt; if (valorClavePrimariaFeature1 != &quot;&quot;)<br>
&gt;&gt;  valorClavePrimariaFeature1 = valorClavePrimariaFeature1<br>
&gt;&gt; .substring(0,<br>
&gt;&gt;  valorClavePrimariaFeature1<br>
&gt;&gt; .length() - 3);<br>
&gt;&gt;<br>
&gt;&gt; // Una vez tenemos la claveprimaria, recorremos las<br>
&gt;&gt; // otras features para<br>
&gt;&gt;  // poder obtener aquellas que estan a una distancia<br>
&gt;&gt; // menor de la indicada<br>
&gt;&gt;  FeatureSet featureSet2 = featureStore.getFeatureSet();<br>
&gt;&gt; Iterator&lt;?&gt; it2 = featureSet2.fastIterator();<br>
&gt;&gt;  while (it2.hasNext()) {<br>
&gt;&gt; Feature feature2 = (Feature) it2.next();<br>
&gt;&gt;  FeatureType featureType2 = feature2.getType();<br>
&gt;&gt;<br>
&gt;&gt; Geometry geomFeature2 = feature2<br>
&gt;&gt;  .getDefaultGeometry();<br>
&gt;&gt;<br>
&gt;&gt; FeatureAttributeDescriptor[] attributeDescriptors2 = featureType2<br>
&gt;&gt;  .getAttributeDescriptors();<br>
&gt;&gt;<br>
&gt;&gt; String valorClavePrimariaFeature2 = &quot;&quot;;<br>
&gt;&gt;  for (int i = 0; i &lt; attributeDescriptors2.length; i++) {<br>
&gt;&gt; FeatureAttributeDescriptor attrDesc2 = attributeDescriptors2[i];<br>
&gt;&gt;  if (attrDesc2.isPrimaryKey()) {<br>
&gt;&gt; valorClavePrimariaFeature2 += feature2<br>
&gt;&gt;  .get(attrDesc2.getName())<br>
&gt;&gt; + &quot; | &quot;;<br>
&gt;&gt;  }<br>
&gt;&gt; }<br>
&gt;&gt; if (valorClavePrimariaFeature2 != &quot;&quot;)<br>
&gt;&gt;  valorClavePrimariaFeature2 = valorClavePrimariaFeature2.substring(0,<br>
&gt;&gt;  valorClavePrimariaFeature2.length() - 3);<br>
&gt;&gt;<br>
&gt;&gt;  if (!(valorClavePrimariaFeature1.equals(valorClavePrimariaFeature2))<br>
&gt;&gt;  &amp;&amp; (geomFeature1.distance(geomFeature2) &lt; distanciaValor)) {<br>
&gt;&gt;                                                          //Llegados a este<br>
&gt;&gt; punto ya sabes las claves primarias<br>
&gt;&gt;                                                         //de los elementos<br>
&gt;&gt; que estan separados a cierta distancia así<br>
&gt;&gt;                                                         //como dicha<br>
&gt;&gt; distancia.<br>
&gt;&gt;                                                        //Yo en esta parte<br>
&gt;&gt; hacía una cosa con los valores. En tu caso,<br>
&gt;&gt;                                                        //como no se lo que<br>
&gt;&gt; quieres hacer te diré que las variables que tienes<br>
&gt;&gt;                                                        //son<br>
&gt;&gt;                                                        //<br>
</div></div>&gt;&gt; valorClavePrimariaFeature1, valorClavePrimariaFeature2<br>
<div><div class="h5">&gt;&gt;                                                        //geomFeature1,<br>
&gt;&gt; geomFeature2<br>
&gt;&gt;                                                        //distancia real<br>
&gt;&gt; entre ambas: geomFeature1.distance(geomFeature2))<br>
&gt;&gt;<br>
&gt;&gt; }<br>
&gt;&gt;  }<br>
&gt;&gt;                         }<br>
&gt;&gt;<br>
&gt;&gt; } catch (ReadDriverException e) {<br>
&gt;&gt; // TODO Auto-generated catch block<br>
&gt;&gt;  e.printStackTrace();<br>
&gt;&gt; }<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Espero que el código te haya servido.<br>
&gt;&gt;<br>
&gt;&gt; Saludos<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; El 19 de abril de 2013 20:34, Alberto Calzada &lt;<a href="mailto:albertocalsa@gmail.com">albertocalsa@gmail.com</a>&gt;escribió:<br>
&gt;&gt;<br>
&gt;&gt;&gt; Hola a todos,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Estoy programando una extensión para gvSIG en la que necesito obtener la<br>
&gt;&gt;&gt; distancia entre las distintas IFeatures (o IGeometry) de mi capa.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Por lo pronto, tengo algo así, ya que necesito obtener las IFeatures que<br>
&gt;&gt;&gt; han sido seleccionadas por el usuario:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; private void getSelectedFeatures() {<br>
&gt;&gt;&gt; try {<br>
&gt;&gt;&gt; FBitSet fbs = resultLayer.getRecordset().getSelection();<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; featuresSelected = new LinkedList&lt;IFeature&gt;();<br>
&gt;&gt;&gt; for(int i=0;i&lt;fbs.size();i++){<br>
&gt;&gt;&gt;  if(fbs.get(i)){<br>
&gt;&gt;&gt; featuresSelected.add(resultLayer.getSource().getFeature(i));<br>
&gt;&gt;&gt; IGeometry geom = resultLayer.getSource().getFeature(i).getGeometry();<br>
&gt;&gt;&gt;  IGeometry geom2 = resultLayer.getSource().getFeature(j).getGeometry();<br>
&gt;&gt;&gt;  }<br>
&gt;&gt;&gt;  }<br>
&gt;&gt;&gt; } catch (ReadDriverException e) {<br>
&gt;&gt;&gt; // TODO Auto-generated catch block<br>
&gt;&gt;&gt;  e.printStackTrace();<br>
&gt;&gt;&gt; }<br>
&gt;&gt;&gt;  }<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Alguien sabe como podría obtener la distancia entre dos de estas<br>
&gt;&gt;&gt; IFeature? O si no se puede, como podría obtener esa distancia?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Muchas gracias de antemano,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Un saludo,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Alberto<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; gvSIG_desarrolladores mailing list<br>
&gt;&gt;&gt; <a href="mailto:gvSIG_desarrolladores@listserv.gva.es">gvSIG_desarrolladores@listserv.gva.es</a><br>
&gt;&gt;&gt; Para ver histórico de mensajes, editar sus preferencias de usuario o<br>
&gt;&gt;&gt; darse de baja en esta lista, acuda a la siguiente dirección:<br>
&gt;&gt;&gt; <a href="http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores" target="_blank">http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; Leticia Riestra Ainsua<br>
</div></div>&gt;&gt; *Laboratorio de Bases de Datos A Coruña*<br>
&gt;&gt; *Tlfono: 981 16 70 00 Ext: 1386*<br>
<div class="im">&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; gvSIG_desarrolladores mailing list<br>
&gt;&gt; <a href="mailto:gvSIG_desarrolladores@listserv.gva.es">gvSIG_desarrolladores@listserv.gva.es</a><br>
&gt;&gt; Para ver histórico de mensajes, editar sus preferencias de usuario o darse<br>
&gt;&gt; de baja en esta lista, acuda a la siguiente dirección:<br>
&gt;&gt; <a href="http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores" target="_blank">http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; gvSIG_desarrolladores mailing list<br>
&gt; <a href="mailto:gvSIG_desarrolladores@listserv.gva.es">gvSIG_desarrolladores@listserv.gva.es</a><br>
&gt; 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="http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores" target="_blank">http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</a><br>

<br>
<br>
--<br>
</div>--------------------------------------<br>
Joaquin Jose del Cerro<br>
Development and software arquitecture manager.<br>
<a href="mailto:jjdelcerro@gvsig.com">jjdelcerro@gvsig.com</a><br>
gvSIG Association<br>
<a href="http://www.gvsig.com" target="_blank">www.gvsig.com</a><br>
<a href="http://www.gvsig.org" target="_blank">www.gvsig.org</a><br>
<div class="HOEnZb"><div class="h5">_______________________________________________<br>
gvSIG_desarrolladores mailing list<br>
<a href="mailto:gvSIG_desarrolladores@listserv.gva.es">gvSIG_desarrolladores@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="http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores" target="_blank">http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</a><br>

</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><i><font face="arial, helvetica, sans-serif" color="#666666">-- <br></font></i><div><p style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px">
<i><font face="arial, helvetica, sans-serif" color="#666666"><span style="background-image:initial;background-color:white">Mr Alberto Calzada<br>Full-time PhD Candidate</span><u></u><u></u></font></i></p><p style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px">
<i><font face="arial, helvetica, sans-serif" color="#666666"><span style="background-image:initial;background-color:white">Room 16J25</span> </font></i>
</p></div><div><p style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><i><font face="arial, helvetica, sans-serif" color="#666666"><span style="background-image:initial;background-color:white">School of Computing and Mathematics<br>
Faculty of Computing and Engineering</span></font></i></p></div><div><p style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><i><font face="arial, helvetica, sans-serif" color="#666666"><span style="background-image:initial;background-color:white">University of Ulster at Jordanstown Campus<br>
Northern Ireland, UK<br>Email: </span><span style="background-image:initial;background-color:white;background-repeat:initial initial"><a href="mailto:Calzada-A@email.ulster.ac.uk" target="_blank">Calzada-A@email.ulster.ac.uk</a></span></font></i></p>
<p style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><i><font face="arial, helvetica, sans-serif" color="#666666"><span style="background-image:initial;background-color:white">Tel: </span>
<span style="background-color:rgb(255,255,255)">+44 28 90361114</span> </font></i></p></div>
</div>