<div dir="ltr">Hola Leticia!<div><br></div><div style>Muchisimas gracias por el código! Ahora me he dado cuenta de que necesitaba era utilizar &quot;Feature&quot; en vez de &quot;IFeature&quot;, y así poder obtener los objetos de la clase &quot;com.vividsolutions.jts.geom.Geometry&quot;. Parece ser que no hay forma de hacer estos cálculos directamente con los IFeature y IGeometry y hay que utilizar los otros. Pero bueno, para lo que lo necesite me viene perfecto! </div>
<div style><br></div><div style>Muchas gracias!</div><div style><br></div><div style>Un saludo,</div><div style><br></div><div style>Alberto</div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/4/22 Leticia Riestra Ainsua <span dir="ltr">&lt;<a href="mailto:lriestra@lbd.org.es" target="_blank">lriestra@lbd.org.es</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hola<div><br></div><div>Yo tengo un código que precisamente obtiene aquellas features que están a una distancia X de otra feature. Dicho parámetro es indicado por el usuario en la interfaz. </div>
<div>El código es el siguiente:</div>
<div><br></div><div>La función para obtener las capas activas son</div><div><br></div><div><div>public FLayer[] obtenerCapasActivas(){</div><div><span style="white-space:pre-wrap">                </span>FLayer[] retorno = null;</div>
<div><br></div><div><span style="white-space:pre-wrap">                </span>IWindow f = PluginServices.getMDIManager().getActiveWindow();</div><div><br></div><div><span style="white-space:pre-wrap">                </span>if (f == null) {</div>
<div><span style="white-space:pre-wrap">                        </span>return retorno;</div><div><span style="white-space:pre-wrap">                </span>}</div><div><br></div><div><span style="white-space:pre-wrap">                </span>if (f.getClass() == DefaultViewPanel.class) {</div>

<div><span style="white-space:pre-wrap">                        </span>DefaultViewPanel bv = (DefaultViewPanel) f;</div><div><span style="white-space:pre-wrap">                        </span>ViewDocument mo = bv.getViewDocument();</div><div><span style="white-space:pre-wrap">                        </span>MapContext contexto = mo.getMapContext();</div>

<div><br></div><div><span style="white-space:pre-wrap">                        </span>retorno =contexto.getLayers().getActives();</div><div><br></div><div><span style="white-space:pre-wrap">                </span>}</div><div><span style="white-space:pre-wrap">                </span>return retorno;</div>

<div><span style="white-space:pre-wrap">        </span>}</div><div><br></div><div><br></div><div><br></div></div><div><div style="font-family:arial,sans-serif;font-size:13px">try {</div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">       </span></font></div>

<div><font face="arial, sans-serif">        FLayer[] capasActivas = obtenerCapasActivas();<br></font></div><div><font face="arial, sans-serif">        </font><span style="font-family:arial,sans-serif;white-space:pre-wrap"> </span><span style="font-family:arial,sans-serif">// Nos quedamos con la primera capa activa porque solo vamos a calcular las distancias entre las features de una única capa de cada vez. Y en mi caso solo necesito de la primera activa</span></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">        </span>FLayer layer = capasActivas[0];</font></div><div><div><font face="arial, sans-serif">        FeatureStore featureStore = ((FLyrVect) layer)</font><span style="font-family:arial,sans-serif">.getFeatureStore();</span></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">        </span>FeatureSet featureSet = featureStore.getFeatureSet();</font></div></div><div><span style="white-space:pre-wrap;font-family:arial,sans-serif;font-size:13px">                </span><br>

</div></div><div><div><font face="arial, sans-serif">        // Recorremos el feature y para cada uno de esos,</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">        /</span>/ compruebo si todos las</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">        </span>// demas tienen geometrias a distancia XX</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">        </span>Iterator&lt;?&gt; it = featureSet.fastIterator();</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                </span>while (it.hasNext()) {</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                        </span>Feature feature = (Feature) it.next();</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                        </span>FeatureType featureType = feature.getType();</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                        </span>Geometry geomFeature1 = feature</font><span style="font-family:arial,sans-serif">.getDefaultGeometry();</span></div>

<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                        </span>FeatureAttributeDescriptor[] attributeDescriptors = featureType</font><span style="font-family:arial,sans-serif">.getAttributeDescriptors();</span></div>

<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                        </span>String valorClavePrimariaFeature1 = &quot;&quot;;</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                        </span>for (int i = 0; i &lt; attributeDescriptors.length; i++) {</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                </span>FeatureAttributeDescriptor attrDesc = attributeDescriptors[i];</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                </span>if (attrDesc.isPrimaryKey()) {</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                        </span>valorClavePrimariaFeature1 += feature</font><span style="font-family:arial,sans-serif">.get(attrDesc.getName()) </span><span style="font-family:arial,sans-serif">+ &quot; | &quot;;</span></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                </span>}</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                        </span>}</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                        </span>if (valorClavePrimariaFeature1 != &quot;&quot;)</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                </span>valorClavePrimariaFeature1 = valorClavePrimariaFeature1</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                                                                </span>.substring(0,</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                                                                                </span>valorClavePrimariaFeature1</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                                                                                                </span>.length() - 3);</font></div>

<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                        </span>// Una vez tenemos la claveprimaria, recorremos las</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                        </span>// otras features para</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                        </span>// poder obtener aquellas que estan a una distancia</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                        </span>// menor de la indicada</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                        </span>FeatureSet featureSet2 = featureStore</font><span style="font-family:arial,sans-serif">.getFeatureSet();</span></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                        </span>Iterator&lt;?&gt; it2 = featureSet2.fastIterator();</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                </span>while (it2.hasNext()) {</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                        </span>Feature feature2 = (Feature) it2.next();</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                        </span>FeatureType featureType2 = feature2.getType();</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                        </span>Geometry geomFeature2 = feature2</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                                                                </span>.getDefaultGeometry();</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                        </span>FeatureAttributeDescriptor[] attributeDescriptors2 = featureType2</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                                                                </span>.getAttributeDescriptors();</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                        </span>String valorClavePrimariaFeature2 = &quot;&quot;;</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                        </span>for (int i = 0; i &lt; attributeDescriptors2.length; i++) {</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                                </span>FeatureAttributeDescriptor attrDesc2 = attributeDescriptors2[i];</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                                </span>if (attrDesc2.isPrimaryKey()) {</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                                        </span>valorClavePrimariaFeature2 += feature2</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                                                                        </span>.get(attrDesc2.getName())</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                                                                                </span>+ &quot; | &quot;;</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                                </span>}</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                        </span>}</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                        </span>if (valorClavePrimariaFeature2 != &quot;&quot;)</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                                </span>valorClavePrimariaFeature2 = valorClavePrimariaFeature2</font><span style="font-family:arial,sans-serif">.substring(0,</span></div><div>

<font face="arial, sans-serif"><span style="white-space:pre-wrap">                                                </span>valorClavePrimariaFeature2</font><span style="font-family:arial,sans-serif">.length() - 3);</span></div><div><font face="arial, sans-serif"><br>

</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                                </span>if (!(valorClavePrimariaFeature1</font><span style="font-family:arial,sans-serif">.equals(valorClavePrimariaFeature2))</span></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                                                                </span>&amp;&amp; (geomFeature1.distance(geomFeature2) &lt; distanciaValor)) {</font></div><div><font face="arial, sans-serif">                                                         //Llegados a este punto ya sabes las claves primarias </font></div>

<div><font face="arial, sans-serif">                                                        //de los elementos que estan separados a cierta distancia así</font></div><div><font face="arial, sans-serif">                                                        //como dicha distancia.</font></div>

<div><font face="arial, sans-serif">                                                       //Yo en esta parte hacía una cosa con los valores. En tu caso, </font></div><div><font face="arial, sans-serif">                                                       //como no se lo que quieres hacer te diré que las variables que tienes</font></div>

<div><font face="arial, sans-serif">                                                       //son</font></div><div><font face="arial, sans-serif">                                                       //</font><span style="font-family:arial,sans-serif">valorClavePrimariaFeature1, </span><span style="font-family:arial,sans-serif">valorClavePrimariaFeature2</span></div>

<div><span style="font-family:arial,sans-serif">                                                       //</span><span style="font-family:arial,sans-serif">geomFeature1, </span><span style="font-family:arial,sans-serif">geomFeature2</span></div>

<div><span style="font-family:arial,sans-serif">                                                       //distancia real entre ambas: </span><span style="font-family:arial,sans-serif">geomFeature1</span><span style="font-family:arial,sans-serif">.distance(geomFeature2))</span></div>

<div><font face="arial, sans-serif">                                  </font></div><div><span style="font-family:arial,sans-serif;white-space:pre-wrap">                                                </span><span style="font-family:arial,sans-serif">}</span><br>

</div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                        </span>}</font></div></div><div class="im"><div style="font-family:arial,sans-serif;font-size:13px">                        }</div><div><br>
</div><div>
<div style="font-family:arial,sans-serif;font-size:13px">} catch (ReadDriverException e) {</div><div style="font-family:arial,sans-serif;font-size:13px"><span style="white-space:pre-wrap">        </span>// TODO Auto-generated catch block</div>

<div style="font-family:arial,sans-serif;font-size:13px"><span style="white-space:pre-wrap">        </span>e.printStackTrace();</div><div style="font-family:arial,sans-serif;font-size:13px">}</div></div><div style="font-family:arial,sans-serif;font-size:13px">

<br></div><div style="font-family:arial,sans-serif;font-size:13px"><br></div></div><div style="font-family:arial,sans-serif;font-size:13px">Espero que el código te haya servido.</div><div style="font-family:arial,sans-serif;font-size:13px">

<br></div><div style="font-family:arial,sans-serif;font-size:13px">Saludos</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">El 19 de abril de 2013 20:34, Alberto Calzada <span dir="ltr">&lt;<a href="mailto:albertocalsa@gmail.com" target="_blank">albertocalsa@gmail.com</a>&gt;</span> escribió:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr">Hola a todos,
<div><br></div><div>Estoy programando una extensión para gvSIG en la que necesito obtener la distancia entre las distintas IFeatures (o IGeometry) de mi capa. </div><div><br></div><div>Por lo pronto, tengo algo así, ya que necesito obtener las IFeatures que han sido seleccionadas por el usuario:</div>


<div><br></div><div><div>private void getSelectedFeatures() {</div><div><span style="white-space:pre-wrap">                </span>try {</div><div><span style="white-space:pre-wrap">                        </span>FBitSet fbs = resultLayer.getRecordset().getSelection();</div>


<div><br></div><div><span style="white-space:pre-wrap">                        </span>featuresSelected = new LinkedList&lt;IFeature&gt;();</div><div><span style="white-space:pre-wrap">                        </span>for(int i=0;i&lt;fbs.size();i++){</div><div>
<span style="white-space:pre-wrap">                                </span>if(fbs.get(i)){</div><div><span style="white-space:pre-wrap">                                        </span>featuresSelected.add(resultLayer.getSource().getFeature(i));</div><div><span style="white-space:pre-wrap">                                        </span>IGeometry geom = resultLayer.getSource().getFeature(i).getGeometry();</div>


<div><span style="white-space:pre-wrap">                                        </span>IGeometry geom2 = resultLayer.getSource().getFeature(j).getGeometry();</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">                </span>} catch (ReadDriverException e) {</div><div><span style="white-space:pre-wrap">                        </span>// TODO Auto-generated catch block</div>


<div><span style="white-space:pre-wrap">                        </span>e.printStackTrace();</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><br></div><div>Alguien sabe como podría obtener la distancia entre dos de estas IFeature? O si no se puede, como podría obtener esa distancia?</div><div><br></div><div>Muchas gracias de antemano,</div>
<div><br></div><div>Un saludo,</div><div><br></div><div>Alberto</div></div></div>
<br></div></div>_______________________________________________<br>
gvSIG_desarrolladores mailing list<br>
<a href="mailto:gvSIG_desarrolladores@listserv.gva.es" target="_blank">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>


<br></blockquote></div><span class="HOEnZb"><font color="#888888"><br><br clear="all"><div><br></div>-- <br>Leticia Riestra Ainsua<div><div><i>Laboratorio de Bases de Datos A Coruña</i></div><div><i>Tlfono: 981 16 70 00 Ext: 1386</i></div>
</div>
</font></span></div>
<br>_______________________________________________<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>

<br></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></div>