<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 3.0cm 70.85pt 3.0cm;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=ES link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Hola Joaquin,</p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Efectivamente, en la simplificación solo estaba considerando que la intersección fuera con los extremos de otra línea. La aproximación que has comentado anteriormente me parece adecuada. Para cada línea se comprueba si sus extremos intersectan con alguna otra línea del dataset, incluida ella misma. Si no intersecta se considera error. A priori parece que no se deja nada importante y tampoco veo un problema para su implementación.</p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Un saludo<o:p></o:p></p><p class=MsoNormal>Héctor<o:p></o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal style='border:none;padding:0cm'><b>De: </b><a href="mailto:jjdelcerro@gvsig.org">Joaquin Jose del Cerro Murciano</a><br><b>Enviado: </b>miércoles, 3 de julio de 2019 11:43<br><b>Para: </b><a href="mailto:gvsig_desarrolladores@listserv.gva.es">Lista de Desarrolladores de gvSIG</a><br><b>Asunto: </b>Re: [Gvsig_desarrolladores] Creation of new topological rules ingvSIGdesktop</p></div><p class=MsoNormal><o:p>&nbsp;</o:p></p><div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><p class=MsoNormal><o:p>&nbsp;</o:p></p><div><div><p class=MsoNormal>El mié., 3 jul. 2019 a las 11:24, Hector Tundidor Hernandez (&lt;<a href="mailto:hectorth23@gmail.com">hectorth23@gmail.com</a>&gt;) escribió:</p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt'><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>Hola Joaquin,</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>&nbsp;</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>Sí, se que solo intervienen los vértices que están en los extremos de las líneas. Quizá no me expresé bien o la daba por supuesto. En el código aparece un for recorriendo todos los vértices de las líneas porqué empecé con una simplificación para líneas con dos extremos. Ese bloque de código, puede sustituirse por:</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>&nbsp;</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.2pt;text-indent:35.4pt'>dictionary[0] = True</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dictionary[numVertexLine-1] = True</p></div></div></blockquote><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>No entiendo para que una simplificacion que no tiene en cuenta que una linea no tiene por que coincidir con otra por un punto que no sea uno de sus vertices y ademas complica el codigo.</p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>Olvidate del codigo que has hecho y comentame la aproximacion que he propuesto como la ves.</p></div><div><p class=MsoNormal>Si crees que hay casos que no contempla o se deja algo importante.</p></div><div><p class=MsoNormal>Y si no es asi, si ves algun problema para su implementacion.</p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><p class=MsoNormal>Primero tener claro que hay que hacer.</p></div><div><p class=MsoNormal>Despues ya vemos cual podria ser una implementacion.</p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>Un saludo</p></div><div><p class=MsoNormal>Joaquin</p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt'><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>&nbsp;</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>Un saludo</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>&nbsp;</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>Héctor</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>&nbsp;</p><div style='border:none;border-top:solid windowtext 1.0pt;padding:3.0pt 0cm 0cm 0cm;border-color:currentcolor currentcolor'><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'><b>De: </b><a href="mailto:jjdelcerro@gvsig.org" target="_blank">Joaquin Jose del Cerro Murciano</a><br><b>Enviado: </b>martes, 2 de julio de 2019 16:54<br><b>Para: </b><a href="mailto:gvsig_desarrolladores@listserv.gva.es" target="_blank">Lista de Desarrolladores de gvSIG</a><br><b>Asunto: </b>Re: [Gvsig_desarrolladores] Creation of new topological rules ingvSIG desktop</p></div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>&nbsp;</p><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>&nbsp;</p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>Hola Hector.</p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>&nbsp;</p></div><div><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>El mar., 2 jul. 2019 a las 12:34, Hector Tundidor Hernandez (&lt;<a href="mailto:hectorth23@gmail.com" target="_blank">hectorth23@gmail.com</a>&gt;) escribió:</p></div><blockquote style='border:none;border-left:solid windowtext 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt'><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>Hola Joaquin,</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>&nbsp;</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>Gracias por los comentarios. Ayer por la tarde subí al GitHub, de nuevo, el código rehecho. Efectivamente, la regla que estoy implementando es el equivalente a la que mencionas. También, he empezado, como comentas, con una simplificación para líneas (no multilíneas) con dos extremos. Con la idea general que comentas, </p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>&nbsp;</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>“Para cada linea, compruebo si el extremo solapa (habra que ver que es </p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>solapa, podriamos asumir que solapa=intersecta inicialmente) con alguna linea </p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>del dataset (incluida ella misma). Si no solapa con nadie se considerara un error.</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>Y esto habra que hacerlo con los dos extremos.”</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>&nbsp;</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>estoy de acuerdo. Ahora bien, respecto a los términos solapar e intersectar lo que hecho es comprobar si los vértices de cada línea a analizar son iguales a los vértices de otras líneas, y me explico. En cada invocación al método check para cada feature1, línea, a analizar, en el caso de índices espaciales, he creado un diccionario considerando, a priori, todos los vértices de la línea como colgados. Tras realizar el query sobre la línea, comparo cada vértice de esa línea con todos los vértices de las líneas resultantes del filtro. En el caso de que haya vértices iguales, se modifica el diccionario poniendo ese vértice como no colgado . Por último, se recorre cada una de las listas generadas y se notifica como error el vértice colgado.</p></div></div></blockquote><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>No entiendo lo que persigues procesando todos los vertices de las lineas.<br>Solo los extremos de una linea pueden considerarse nodos colgados.<br>Y no importa lo cerca o lejos que estan de otros vertices de otras lineas mientras no intersecten con otra linea.<br>Lo que importa es si tocan o no otra linea, no otro vertice.<br><br>Imagina dos lineas de un segmento cada una colocadas formando una T; pero<br>con la mala suerte que al usuario que lo digitalizaba se le fue la mano, y<br>no llegan a tocarse las dos lineas.</p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>(He añadido un par de vertices mas en el dibujo)</p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'><br>&nbsp; A---------B-----C<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|a<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|</p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b+--------c</p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'><br>No importa cuan lejos de un vertice de (ABC) este el vertice (a).<br><br>Los cuatro vertices (A), (C), (a) y (c) son nodos colgados, y habra que marcarlos como tal solo por<br>que no interseccionan con ninguna linea, mientras que los vertices (B) y (b) nunca seran nodos colgados.</p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>Lo unico que tengo que hacer es coger los extremos de cada linea y ver si intersectan con otras lineas.</p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>No veo la necesidad de ir recorriendo vertices. Eso ya lo hace la funcion intersects.</p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>&nbsp;</p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>Luego, cuando haya que aplicar una accion correctora habra que ver cosas.<br>Como aplicando uno tolerancia ver si (a) intersecciona con alguien, y asi saber <br>si puedo emplear la accion de alargar. <br>Ojo, que alargar no alarga hasta un vertice, lo que no esta tan claro es<br>como hay que alargar (probablemente usar la funcion closestPoints sea una <br>buena primera aproximacion)<br><br>No veo necesidad de hacer nada con los vertices que no son los extremos de una<br>linea. No juegan en esta regla. Solo intervienen los extremos.</p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>&nbsp;</p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>Si me estoy rayando me avisas.</p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>&nbsp;</p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>Un saludo</p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>Joaquin</p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>&nbsp;</p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>&nbsp;</p></div><blockquote style='border:none;border-left:solid windowtext 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt'><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>&nbsp;</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>Respecto a lo que comentas del query, ayer me ocurrió una circunstancia con el dataset de líneas (testLine2) disponible en el repositorio. La capa tiene 3 líneas A, B y C. El código analiza A con B y C, B con A, y C con A. No considera analizar B con C ni C con B. Entiendo que esto se debe a que el filtro descarta estas opciones por no estar “próximas”. No he considerado, todavía, poner un buffer. Sin embargo, ¿no habría un riesgo en el código aún definiendo un buffer y darse una situación similar a la comentada?</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>&nbsp;</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>Tampoco he considerado, todavía, el caso de que el extremo de una línea toque alguna parte de sí mismo. De hecho, lo he descartado en el código. Habría que cambiarlo.</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>&nbsp;</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>Respecto a las acciones, las comentaré más adelante.</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>&nbsp;</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>Un saludo</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>&nbsp;</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>Héctor</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>&nbsp;</p></div></div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:9.6pt'>_______________________________________________<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" target="_blank">https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</a></p></blockquote></div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'><br clear=all><br>-- </p></div></div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>--------------------------------------<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></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:4.8pt'>&nbsp;</p></div></div><p class=MsoNormal style='margin-left:4.8pt'>_______________________________________________<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" target="_blank">https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</a></p></blockquote></div><p class=MsoNormal><br clear=all><br>-- </p></div><p class=MsoNormal>--------------------------------------<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></p><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></body></html>