<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 style>La función para obtener las capas activas son</div><div style><br></div><div style><div>public FLayer[] obtenerCapasActivas(){</div><div><span class="" style="white-space:pre">                </span>FLayer[] retorno = null;</div>
<div><br></div><div><span class="" style="white-space:pre">                </span>IWindow f = PluginServices.getMDIManager().getActiveWindow();</div><div><br></div><div><span class="" style="white-space:pre">                </span>if (f == null) {</div>
<div><span class="" style="white-space:pre">                        </span>return retorno;</div><div><span class="" style="white-space:pre">                </span>}</div><div><br></div><div><span class="" style="white-space:pre">                </span>if (f.getClass() == DefaultViewPanel.class) {</div>
<div><span class="" style="white-space:pre">                        </span>DefaultViewPanel bv = (DefaultViewPanel) f;</div><div><span class="" style="white-space:pre">                        </span>ViewDocument mo = bv.getViewDocument();</div><div><span class="" style="white-space:pre">                        </span>MapContext contexto = mo.getMapContext();</div>
<div><br></div><div><span class="" style="white-space:pre">                        </span>retorno =contexto.getLayers().getActives();</div><div><br></div><div><span class="" style="white-space:pre">                </span>}</div><div><span class="" style="white-space:pre">                </span>return retorno;</div>
<div><span class="" style="white-space:pre">        </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">        </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 class="" style="white-space:pre">        </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 class="" style="white-space:pre">        /</span>/ compruebo si todos las</font></div>
<div><font face="arial, sans-serif"><span style="white-space:pre">        </span>// demas tienen geometrias a distancia XX</font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">        </span>Iterator&lt;?&gt; it = featureSet.fastIterator();</font></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                </span>while (it.hasNext()) {</font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                        </span>Feature feature = (Feature) it.next();</font></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                        </span>FeatureType featureType = feature.getType();</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                        </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 class="" style="white-space:pre">                        </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 class="" style="white-space:pre">                        </span>String valorClavePrimariaFeature1 = &quot;&quot;;</font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                        </span>for (int i = 0; i &lt; attributeDescriptors.length; i++) {</font></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                </span>FeatureAttributeDescriptor attrDesc = attributeDescriptors[i];</font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                </span>if (attrDesc.isPrimaryKey()) {</font></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                        </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 class="" style="white-space:pre">                                </span>}</font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                        </span>}</font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                        </span>if (valorClavePrimariaFeature1 != &quot;&quot;)</font></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                </span>valorClavePrimariaFeature1 = valorClavePrimariaFeature1</font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                                                                </span>.substring(0,</font></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                                                                                </span>valorClavePrimariaFeature1</font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                                                                                                </span>.length() - 3);</font></div>
<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                        </span>// Una vez tenemos la claveprimaria, recorremos las</font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                        </span>// otras features para</font></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                        </span>// poder obtener aquellas que estan a una distancia</font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                        </span>// menor de la indicada</font></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                        </span>FeatureSet featureSet2 = featureStore</font><span style="font-family:arial,sans-serif">.getFeatureSet();</span></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                        </span>Iterator&lt;?&gt; it2 = featureSet2.fastIterator();</font></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                </span>while (it2.hasNext()) {</font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                        </span>Feature feature2 = (Feature) it2.next();</font></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                        </span>FeatureType featureType2 = feature2.getType();</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                        </span>Geometry geomFeature2 = feature2</font></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                                                                </span>.getDefaultGeometry();</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                        </span>FeatureAttributeDescriptor[] attributeDescriptors2 = featureType2</font></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                                                                </span>.getAttributeDescriptors();</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                        </span>String valorClavePrimariaFeature2 = &quot;&quot;;</font></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                        </span>for (int i = 0; i &lt; attributeDescriptors2.length; i++) {</font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                                </span>FeatureAttributeDescriptor attrDesc2 = attributeDescriptors2[i];</font></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                                </span>if (attrDesc2.isPrimaryKey()) {</font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                                        </span>valorClavePrimariaFeature2 += feature2</font></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                                                                        </span>.get(attrDesc2.getName())</font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                                                                                </span>+ &quot; | &quot;;</font></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                                </span>}</font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                        </span>}</font></div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                        </span>if (valorClavePrimariaFeature2 != &quot;&quot;)</font></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                                </span>valorClavePrimariaFeature2 = valorClavePrimariaFeature2</font><span style="font-family:arial,sans-serif">.substring(0,</span></div><div>
<font face="arial, sans-serif"><span class="" style="white-space:pre">                                                </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 class="" style="white-space:pre">                                                </span>if (!(valorClavePrimariaFeature1</font><span style="font-family:arial,sans-serif">.equals(valorClavePrimariaFeature2))</span></div>
<div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                                                                </span>&amp;&amp; (geomFeature1.distance(geomFeature2) &lt; distanciaValor)) {</font></div><div style><font face="arial, sans-serif">                                                         //Llegados a este punto ya sabes las claves primarias </font></div>
<div style><font face="arial, sans-serif">                                                        //de los elementos que estan separados a cierta distancia así</font></div><div style><font face="arial, sans-serif">                                                        //como dicha distancia.</font></div>
<div style><font face="arial, sans-serif">                                                       //Yo en esta parte hacía una cosa con los valores. En tu caso, </font></div><div style><font face="arial, sans-serif">                                                       //como no se lo que quieres hacer te diré que las variables que tienes</font></div>
<div style><font face="arial, sans-serif">                                                       //son</font></div><div style><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 style><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 style><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 class="" style="font-family:arial,sans-serif;white-space:pre">                                                </span><span style="font-family:arial,sans-serif">}</span><br>
</div><div><font face="arial, sans-serif"><span class="" style="white-space:pre">                                        </span>}</font></div></div><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 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 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>_______________________________________________<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>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>
</div>