<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 "Feature" en vez de "IFeature", y así poder obtener los objetos de la clase "com.vividsolutions.jts.geom.Geometry". 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"><<a href="mailto:lriestra@lbd.org.es" target="_blank">lriestra@lbd.org.es</a>></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<?> 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 = "";</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                        </span>for (int i = 0; i < 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">+ " | ";</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 != "")</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<?> 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 = "";</font></div>
<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                                        </span>for (int i = 0; i < 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>+ " | ";</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 != "")</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>&& (geomFeature1.distance(geomFeature2) < 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"><<a href="mailto:albertocalsa@gmail.com" target="_blank">albertocalsa@gmail.com</a>></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<IFeature>();</div><div><span style="white-space:pre-wrap">                        </span>for(int i=0;i<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>