<div dir="ltr">
<div>Hola, agradezco a Joaquin y Óscar que me hicieron notar que omiti 
agregar la lista de correo de la comunidad en el intercambio que hemos 
estado teniendo para resolver el tratamiento de geometrías multiparte y 
algunas dudas que se me han ido planteando. En base a todo esto me 
encuentro analizando la lógica implementada para cada una de las reglas.<br></div><div>Agradeciendo desde ya cualquier sugerencia o aporte.<br></div><div>Saludos<br></div><div>Mauro<br></div><div><br></div><hr id="gmail-zwchr"><div style="color:rgb(0,0,0);font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt"><br><div></div><div dir="ltr"><div dir="ltr">Hola Mauro, <br>te voy comentando algunas cosas en varios correos.<br><div><br></div>En este sobre las geometrias multiparte.<br><div><br></div>He visto que has introducido el que las dos reglas puedan trabajar con geometrias<br>multiparte (multipoint y multiline).<br><div><br></div>Introducir esto, ademas de la correcta implementacion de las reglas y acciones<br>asociadas a ellas, plantea algun problema extra, que no se si se da en tu caso, <br>aunque es facil que si.<br><div><br></div>Primero te comento lo facil.<br>Para mustBeCoincidentWithPointRule, has declarado en su factoria que acepte <br>multipoint para su segundo dataset. Creo que si te entra un multipoint ahi tu<br>codigo no dara los resultados esperados.<br>Tambien habra algun problema cuando no se pueden usar indices espaciales.<br>Creo que ambas cosas pueden ser sencillas de corregir, asi que echa un vistazo <br>al codigo y me comentas cual es el problema y como solucionarlo.<br>Espero que me digas algo de esto.<br></div><div dir="ltr"><br></div><div dir="ltr"><p style="margin:0px"><span style="color:rgb(52,101,164)">Cuando es una geometría simple se le pasa los </span><span style="color:rgb(52,101,164)">í</span><span style="color:rgb(52,101,164)">ndices espaciales de la geometría en cuesti</span><span style="color:rgb(52,101,164)">ó</span><span style="color:rgb(52,101,164)">n pero no tengo </span><span style="color:rgb(52,101,164)">claro</span><span style="color:rgb(52,101,164)"> qué sucede cuando es multiparte, </span><span style="color:rgb(52,101,164)">por ejemplo:</span></p><div>geometrias multiparte....<br>Un
 MULTIPOINT, MULTILINE o MULTIPOLYGON. Significa, que en lugar de ser un
 punto son una coleccion de puntos; pero la coleccion entera en si es 
una sola geometria.<br>Por ejemplo, se quiere representar el perfil de 
un pais. No siempre podre hacerlo con un solo poligono. Si el pais tiene
 islas, por ejemplo, necesitare un poligono por cada isla, y todos los 
poligonos los agrupare en una sola geometria de tipo MULTIPOLYGON.<br><div><br></div>Las geometrias multi-parte son geometrias compuestas geometrias primitivas o simples.<br><div><br></div>Tampoco
 hay que perder de vista, que la unidad con la que trabaja el marco de 
topologia, no es la geometria. Es la feature. Que se corresponderia con 
todas las columnas de la tabla sobre la que estamos trabajando.<br><div><br></div>No
 hay que perder de vista que alterar una geometria multiparte, 
eliminando algunas de las partes de esta, puede dejar valores 
incongruentes en el resto de atributos de la feature. Asi que ese tipo 
de decisiones siempre debe tomarlas el usuario.<br><div><br></div>Volviendo
 al ejemplo de los paises, supongamos que una columna es la poblacion. 
Si elimino una isla, puede que la poblacion ya no se corresponda con el 
area que delimita la geometria.</div><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div style="font-family:times new roman,new york,times,serif;font-size:12pt;color:rgb(0,0,0)"><div><p style="margin:0px;font-variant:normal;font-style:normal;font-weight:normal;text-decoration:none"><span style="color:rgb(0,0,0)"><span style="font-family:Arial"><span style="font-size:small"><span style="background:transparent none repeat scroll 0% 0%"><span style="color:rgb(52,101,164)">Entonces lo que tenemos es:</span></span></span></span></span></p><p style="margin:0px;font-variant:normal;font-style:normal;font-weight:normal;text-decoration:none"><span style="color:rgb(52,101,164)"><span style="font-family:Arial"><span style="font-size:small"><span style="background:transparent none repeat scroll 0% 0%">public TopologyReportLine addLine(</span></span></span></span></p><p style="margin:0px;font-variant:normal;font-style:normal;font-weight:normal;text-decoration:none"><span style="color:rgb(52,101,164)"><span style="background:transparent none repeat scroll 0% 0%"> <span style="font-family:Arial"><span style="font-size:small">TopologyRule rule,</span></span></span></span></p><p style="margin:0px;font-variant:normal;font-style:normal;font-weight:normal;text-decoration:none"><span style="color:rgb(52,101,164)"><span style="background:transparent none repeat scroll 0% 0%"> <span style="font-family:Arial"><span style="font-size:small">TopologyDataSet dataSet1,</span></span></span></span></p><p style="margin:0px;font-variant:normal;font-style:normal;font-weight:normal;text-decoration:none"><span style="color:rgb(52,101,164)"><span style="background:transparent none repeat scroll 0% 0%"> <span style="font-family:Arial"><span style="font-size:small">TopologyDataSet dataSet2,</span></span></span></span></p><p style="margin:0px;font-variant:normal;font-style:normal;font-weight:normal;text-decoration:none"><span style="color:rgb(52,101,164)"><span style="background:transparent none repeat scroll 0% 0%"> <span style="font-family:Arial"><span style="font-size:small">Geometry geometry,</span></span></span></span></p><p style="margin:0px;font-variant:normal;font-style:normal;font-weight:normal;text-decoration:none"><span style="color:rgb(52,101,164)"><span style="background:transparent none repeat scroll 0% 0%"> <span style="font-family:Arial"><span style="font-size:small">Geometry error,</span></span></span></span></p><p style="margin:0px;font-variant:normal;font-style:normal;font-weight:normal;text-decoration:none"><span style="color:rgb(52,101,164)"><span style="background:transparent none repeat scroll 0% 0%"> <span style="font-family:Arial"><span style="font-size:small">FeatureReference feature1,</span></span></span></span></p><p style="margin:0px;font-variant:normal;font-style:normal;font-weight:normal;text-decoration:none"><span style="color:rgb(52,101,164)"><span style="background:transparent none repeat scroll 0% 0%"> <span style="font-family:Arial"><span style="font-size:small">FeatureReference feature2,</span></span></span></span></p><p style="margin:0px;font-variant:normal;font-style:normal;font-weight:normal;text-decoration:none"><span style="color:rgb(52,101,164)"><span style="background:transparent none repeat scroll 0% 0%"> <span style="font-family:Arial"><span style="font-size:small">boolean exception,</span></span></span></span></p><p style="margin:0px;font-variant:normal;font-style:normal;font-weight:normal;text-decoration:none"><span style="color:rgb(52,101,164)"><span style="background:transparent none repeat scroll 0% 0%"> <span style="font-family:Arial"><span style="font-size:small">String description</span></span></span></span></p><p style="margin:0px;font-variant:normal;font-style:normal;font-weight:normal;text-decoration:none"><span style="color:rgb(52,101,164)"><span style="background:transparent none repeat scroll 0% 0%"> <span style="font-family:Arial"><span style="font-size:small">);</span></span></span></span></p><p style="margin:0px;font-variant:normal;font-style:normal;font-weight:normal;text-decoration:none"><br></p><p style="margin:0px;font-variant:normal;font-style:normal;font-weight:normal;text-decoration:none"><span style="color:rgb(52,101,164)"><span style="font-family:Arial"><span style="font-size:small"><span style="background:transparent none repeat scroll 0% 0%">De
 lo anterior no entiendo, la parte de geometry, geometry es la propia 
geometría que se está analizando pero por qué se pasa dos veces la 
geometría?</span></span></span></span></p><p style="margin:0px;font-variant:normal;font-style:normal;font-weight:normal;text-decoration:none"><br></p></div></div></div></blockquote><div><br></div><div>Primero entendamos que son esos dos argumentos.<br>Ninguno de ellos son la geometria que estas procesando. Puede coincidir; pero no lo son.<br>El
 primero, &quot;geometry&quot; representa el/los &quot;objetos&quot; sobre los que se ha 
producido el error. Muchas veces sera la geometria de entrada, pero 
otras puede que sea<br>mas adecuado que sean otra cosa. Por ejemplo, una
 capa de poligonos y queremos comprobar que no se solapan. Cuando 
encontramos dos poligonos que se solapan, la geometria asociada al 
informe<br>de error, podria ser el primer poligono, o el segundo, o los 
dos, ya que los dos estan involucrados. Tu decides en cada regla que vas
 a poner en esa geometria para que el usuario se haga una idea de que 
esta pasando.<br><div><br></div>¿ Y el segundo argumento de tipo geometria, error ?<br>Pues
 este una geometria que representa al error que se ha dado. Por ejemplo,
 con el solape de poligonos estaria bien que fuese una geometria que 
represente el area que solapan. Esta se presentara &quot;en rojo&quot; al usuario.<br><div><br></div>Decidir que va en cada una de estas geometrias para una regla dada forma parte del analisis que se haga sobre la regla. <br>Cuando
 pienso voy ha hacer tal regla topologica, debo pensar, en cuales van a 
ser mis datos de entrada, de que tipo. Una descripcion clara en lenguaje
 de usuario sobre que va ha comprobar la regla y que va a considerar un 
error.<br>Que va a añadir al informe de errores para que el usuario 
identifique bien el problema. Y que acciones correctoras tendra 
disponibles el usuario ante un error.<br><div><br></div>Con esto quiero 
decir que el valor de estas dos geometrias no es algo a tomar a la 
ligera e improvisar mientras codifico. He de pensarlo cuando analizo lo 
que  voy ha hacer, y decirdir que voy a poner para cada regla. No hay 
atajos, hay que pensarlo.<br></div><div> </div><p style="margin:0px"><span style="color:rgb(52,101,164)"><span style="font-family:Arial"><span style="font-size:small"><span style="background:transparent none repeat scroll 0% 0%">En el siguiente if cuando no se trabaja con multipartes</span></span></span>:<br> report.addLine(self,<br> self.getDataSet1(),<br> self.getDataSet2(),<br> point1,<br> point1,<br> feature1.getReference(),<br> None,<br> False,<br> &quot;The point is not coincident.&quot;<br> )</span></p><p style="margin:0px"><span style="color:rgb(52,101,164)">if ….:</span></p><p style="margin:0px"><span style="color:rgb(52,101,164)"> report.addLine(self,</span></p><p style="margin:0px"><span style="color:rgb(52,101,164)"> self.getDataSet1(),</span></p><p style="margin:0px"><span style="color:rgb(52,101,164)"> self.getDataSet2(),</span></p><p style="margin:0px"><span style="color:rgb(52,101,164)"> point1.getPointAt(i),</span></p><p style="margin:0px"><span style="color:rgb(52,101,164)"> point1.getPointAt(i),</span></p><p style="margin:0px"><span style="color:rgb(52,101,164)"> feature1.getReference(), </span></p><p style="margin:0px"><span style="color:rgb(52,101,164)"> None,</span></p><p style="margin:0px"><span style="color:rgb(52,101,164)"> False,</span></p><p style="margin:0px"><span style="color:rgb(52,101,164)"> &quot;The point is not covered by endpoint.&quot;</span></p><p style="margin:0px"><span style="color:rgb(52,101,164)">)</span></p><br>Lo otro mas complicado...<br>Si
 llega un multipoint en el primer dataset y alguno de sus puntos no 
coincide con un punto del segundo dataset... ¿ que acciones tendria 
disponibles ? <br>Podria:</div><div dir="ltr">- Eliminar la feature 
entera, todo el multipoint, que es lo que has   implementado. O todos 
los puntos del multipoint coinciden con alguno del segundo dataset o si 
hay alguno que no los elimino todos.<br><div><br></div>- Mantener la 
feature y eliminar solo el punto del multipoint que no coincide con 
ninguno del segundo dataset. Esto plantea hilar mas fino... ¿ Y si se   
eliminan todos los puntos del multipoint ? ¿ Borramos entonces la 
feature entera ?<br><div><br></div>No se trata ahora de decidir si me 
gusta mas una accion que la otra, son dos acciones perfectamente 
razonables por parte de un usuario.<br><div><br></div>Deberiamos implementar las dos.</div><span style="color:rgb(52,101,164)"></span><div dir="ltr"><p style="margin:0px"><span style="color:rgb(52,101,164)"><span class="gmail-Object"><br></span></span></p><p style="margin:0px"><span style="color:rgb(52,101,164)"><span class="gmail-Object" id="gmail-OBJ_PREFIX_DWT639_com_zimbra_date"><span class="gmail-Object" id="gmail-OBJ_PREFIX_DWT1244_com_zimbra_date"><span class="gmail-Object" id="gmail-OBJ_PREFIX_DWT1260_com_zimbra_date">Mi</span></span></span> 
idea sería eliminar solo el punto del multipoint pero no tengo claro 
como hacerlo, sigo probando para entender mejor. Si se eliminan todos 
los puntos del multipoint me parece que se eliminaría la feature entera ?</span></p><p style="margin:0px"><br></p>Bueno, mas arriba he comentado sobre multipaters y features.<br><br>Eliminar la feature es eliminar no solo la parte geometrica de ella, es eliminar la linea de la tabla.<br><br>Y aqui vuelvo a insitir. <br>La unidad es la feature, una linea de una tabla.<br>La geometria es solo un atributo de la feature, sea simple o multiparte, es solo un atributo de esta.<br><br>Por ejemplo, una tabla de puntos que identifican a vehiculos. Cada linea de <span class="gmail-Object" id="gmail-OBJ_PREFIX_DWT640_com_zimbra_date"><span class="gmail-Object" id="gmail-OBJ_PREFIX_DWT1245_com_zimbra_date"><span class="gmail-Object" id="gmail-OBJ_PREFIX_DWT1261_com_zimbra_date">mi</span></span></span> tabla tendra la matricula, el seguro del coche, cuantos asientos lleva, quien es el propietario... y su posicion, por ejemplo.<br><br>Si <span class="gmail-Object" id="gmail-OBJ_PREFIX_DWT641_com_zimbra_date"><span class="gmail-Object" id="gmail-OBJ_PREFIX_DWT1246_com_zimbra_date"><span class="gmail-Object" id="gmail-OBJ_PREFIX_DWT1262_com_zimbra_date">mi</span></span></span> 
regla decide que hay que eliminar la geometria, por que no se superpone,
 por ejemplo con una carretera, estoy eliminando toda la feature 
completa.<br><br>Cuando trabajo con multipartes, tengo opcion de bien 
eliminar la feature entera, o eliminar una parte de la geometria. Y eso 
significa que el usuario debe tener las dos opciones. Nosotros, cuando 
estamos codificando la regla, no conocemos la semantica de los datos de 
la feature, y no podemos tomar la decicion de descartar una de las dos 
opciones.<br><br>Feature son los atributos, columnas, asociadas a una linea de la tabla (y la geometrias no es mas que un atributo mas).</div><div dir="ltr"><br></div></div></div>

<div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El mar., 2 de jul. de 2019 a la(s) 14:13, Mauro Carlevaro (<a href="mailto:mauroctecno@gmail.com">mauroctecno@gmail.com</a>) escribió:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hola, Joaquín muchas gracias por todos los comentarios y las explicaciones, hay algunas consultas que las había hablado con Óscar pero me comentó que las iba a entender mejor en breve ya que está armando un documento para ayudarnos a entender en profundidad todo el código, porque hay cosas que las solucione en base al código desarrollado por ti y por Óscar pero tenía algunas dudas. Termino de procesar bien toda la información que nos pones en el mail y sobre todo hacer algunas pruebas más, ya que con la parte de geometrías multi tengo dudas, así contesto con más propiedad y les planteo las dudas que me queden, gracias!!!!<div><div>Saludos</div><div>Mauro.</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El lun., 1 de jul. de 2019 a la(s) 13:49, Joaquin Jose del Cerro Murciano (<a href="mailto:jjdelcerro@gvsig.org" target="_blank">jjdelcerro@gvsig.org</a>) escribió:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hola Mauro, Hector...<br>no se si Oscar os ha comentado algo al respecto.<br><br>Cuando estais desarrollando haceis...<br><br>Analisis...<br>Simplificando, que vamos ha hacer y como.<br><br>Implementacion, testing, documentacion, commits...<br>El trabajo diario mientras lo vamos acabando.<br><br>Pull requests...<br>Devolvemos al proyecto padre los cambios en nuestro proyecto.<br><br>Y... falta una cosa mas.<br>¿ Como podemos pasar a otros usuarios lo que hemos hecho para que lo prueben ?<br>Nos falta...<br>Generar paquetes de instalacion.<br><br>No se si Oscar os paso enlace a como hacerlos, asi que os dejo aqui un enlace<br>donde cuenta muy rapidamente como hacerlo.<br><br><a href="https://github.com/jjdelcerro/HelloWorld/blob/master/doc/publish_my_script-es.rst#crear-una-release" target="_blank">https://github.com/jjdelcerro/HelloWorld/blob/master/doc/publish_my_script-es.rst#crear-una-release</a><br><br>Haceis el paquete de la regla que mas avanzada tengais y pasarme el enlace al <br>fichero gvspki en GitHub para que pruebe a subirlo al repositorio de paquetes <br>de gvSIG desktop 2.5 y asi comprobar que un usuario podria instalarselo y <br>funciona.<br><br>Un saludo<br>Joaquin<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El lun., 1 jul. 2019 a las 18:31, Joaquin Jose del Cerro Murciano (&lt;<a href="mailto:jjdelcerro@gvsig.org" target="_blank">jjdelcerro@gvsig.org</a>&gt;) escribió:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hola Mauro...<br>Tanto en mustBeCoincidentWithPointRule como en mustBeCoveredByEndpointOfPointRule<br>has ido metiendo codigo para gestionar los multiparte... echale una ojeada, <br>repetir dos, o tres lineas de codigo vale, pero cuando son ya treinta, creo que<br>toca sacar un metodo o funcion para ello.<br><br>Por ejemplo, en mustBeCoincidentWithPointRule, la parte que:<br><br>- hace el buffer<br>- lanza el query<br>- calcula si los puntos debueltos por el query estan en el buffer<br>- añade al informe de errores el error si se da.<br><br>podria ir a un metodo que se encargue de calcular eso, y luego<br>podria usarse en mas de un sitio.<br><br>Ademas, las correcciones, en caso de que las hayan, afectaran solo a un sitio,<br>y no alla donde se repita el codigo.<br><br>Tienes algo parecido en el mustBeCoveredByEndpointOfPointRule, solo que aqui<br>aun son mas las lineas duplicadas.<br><br>Si le echas un vistazo y no lo ves claro comentalo por aqui.<br><br>Un saludo<br>Joaquin<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El vie., 28 jun. 2019 a las 15:31, Mauro Carlevaro (&lt;<a href="mailto:mauroctecno@gmail.com" target="_blank">mauroctecno@gmail.com</a>&gt;) escribió:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hola, envío el reporte semanal correspondiente al periodo del 24 al 30 de<br>
Junio.<br>
<br>
Qué pude completar esta semana?<br>
* Estudio de la regla Points must be covered by line<br>
* Se agregó la consideración de que se tenga multipuntos en la regla Must be<br>
coincident with.<br>
* Desarrollo de la primera parte del código de la regla Points must be<br>
covered by lin para la integración.<br>
* Se continuó mejorando la documentación, se agrego una sección sobre el<br>
plan de testing.<br>
<br>
Qué voy a hacer la próxima semana?<br>
* Realizar la integración de la regla Points must be covered by line con el<br>
framework de topología.<br>
* Optimizar el algoritmo desarrollado.<br>
* Testear y depurar el código desarrollado.<br>
* Seguir documentando todo el proceso. <br>
<br>
Hay algún problema, bloqueo?  No hay problema de bloqueo.<br>
<br>
Referencias:<br>
    Reporte semana 5. Link:<br>
<a href="https://github.com/Maureque/gvsig-gsoc2019-topology/wiki/5a.-Report-Week-5-(June-24th-to-June-30th)" rel="noreferrer" target="_blank">https://github.com/Maureque/gvsig-gsoc2019-topology/wiki/5a.-Report-Week-5-(June-24th-to-June-30th)</a><br>
    Regla Points must be covered by line. Link:<br>
<a href="https://github.com/Maureque/gvsig-gsoc2019-topology/wiki/5.-Points-must-be-covered-by-line" rel="noreferrer" target="_blank">https://github.com/Maureque/gvsig-gsoc2019-topology/wiki/5.-Points-must-be-covered-by-line</a><br>
    Wiki GitHub, link:<br>
<a href="https://github.com/Maureque/gvsig-gsoc2019-topology/wiki" rel="noreferrer" target="_blank">https://github.com/Maureque/gvsig-gsoc2019-topology/wiki</a><br>
    Wiki OSGeo, link:<br>
<a href="https://wiki.osgeo.org/wiki/New_rules_for_the_Topology_Framework_in_gvSIG_Desktop" rel="noreferrer" target="_blank">https://wiki.osgeo.org/wiki/New_rules_for_the_Topology_Framework_in_gvSIG_Desktop</a><br>
<br>
Saludos,<br>
Mauro <br>
<br>
<br>
<br>
--<br>
Sent from: <a href="http://osgeo-org.1560.x6.nabble.com/gvSIG-desarrolladores-f4163512.html" rel="noreferrer" target="_blank">http://osgeo-org.1560.x6.nabble.com/gvSIG-desarrolladores-f4163512.html</a><br>
_______________________________________________<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="https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores" rel="noreferrer" target="_blank">https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</a><br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail-m_-4253500699293006921gmail-m_1700701736795352267gmail-m_-216169511007492603gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>--------------------------------------<br>Joaquin Jose del Cerro Murciano<br>Development and software arquitecture manager at gvSIG Team<br><a href="mailto:jjdelcerro@gvsig.com" target="_blank">jjdelcerro@gvsig.com</a><br>gvSIG Association<br><a href="http://www.gvsig.com" target="_blank">www.gvsig.com</a><br></div></div></div></div></div>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail-m_-4253500699293006921gmail-m_1700701736795352267gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>--------------------------------------<br>Joaquin Jose del Cerro Murciano<br>Development and software arquitecture manager at gvSIG Team<br><a href="mailto:jjdelcerro@gvsig.com" target="_blank">jjdelcerro@gvsig.com</a><br>gvSIG Association<br><a href="http://www.gvsig.com" target="_blank">www.gvsig.com</a><br></div></div></div></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="https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores" rel="noreferrer" target="_blank">https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</a><br>
</blockquote></div>
</blockquote></div>