[Gvsig_desarrolladores] Creation of new topological rules in gvSIG desktop

Joaquin Jose del Cerro Murciano jjdelcerro en gvsig.org
Mar Jul 2 16:09:48 CEST 2019


Hola Hector.

El mar., 2 jul. 2019 a las 12:34, Hector Tundidor Hernandez (<
hectorth23 en gmail.com>) escribió:

> Hola Joaquin,
>
>
>
> 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,
>
>
>
> “Para cada linea, compruebo si el extremo solapa (habra que ver que es
>
> solapa, podriamos asumir que solapa=intersecta inicialmente) con alguna
> linea
>
> del dataset (incluida ella misma). Si no solapa con nadie se considerara
> un error.
>
> Y esto habra que hacerlo con los dos extremos.”
>
>
>
> 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.
>
> No entiendo lo que persigues procesando todos los vertices de las lineas.
Solo los extremos de una linea pueden considerarse nodos colgados.
Y no importa lo cerca o lejos que estan de otros vertices de otras lineas
mientras no intersecten con otra linea.
Lo que importa es si tocan o no otra linea, no otro vertice.

Imagina dos lineas de un segmento cada una colocadas formando una T; pero
con la mala suerte que al usuario que lo digitalizaba se le fue la mano, y
no llegan a tocarse las dos lineas.
(He añadido un par de vertices mas en el dibujo)

  A---------B-----C
         |a
         |
         |
         |
       b+--------c

No importa cuan lejos de un vertice de (ABC) este el vertice (a).

Los cuatro vertices (A), (C), (a) y (c) son nodos colgados, y habra que
marcarlos como tal solo por
que no interseccionan con ninguna linea, mientras que los vertices (B) y
(b) nunca seran nodos colgados.
Lo unico que tengo que hacer es coger los extremos de cada linea y ver si
intersectan con otras lineas.
No veo la necesidad de ir recorriendo vertices. Eso ya lo hace la funcion
intersects.

Luego, cuando haya que aplicar una accion correctora habra que ver cosas.
Como aplicando uno tolerancia ver si (a) intersecciona con alguien, y asi
saber
si puedo emplear la accion de alargar.
Ojo, que alargar no alarga hasta un vertice, lo que no esta tan claro es
como hay que alargar (probablemente usar la funcion closestPoints sea una
buena primera aproximacion)

No veo necesidad de hacer nada con los vertices que no son los extremos de
una
linea. No juegan en esta regla. Solo intervienen los extremos.

Si me estoy rayando me avisas.

Un saludo
Joaquin



>
>
> 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?
>
>
>
> 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.
>
>
>
> Respecto a las acciones, las comentaré más adelante.
>
>
>
> Un saludo
>
>
>
> Héctor
>
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en listserv.gva.es
> Para ver histórico de mensajes, editar sus preferencias de usuario o darse
> de baja en esta lista, acuda a la siguiente dirección:
> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>


-- 
--------------------------------------
Joaquin Jose del Cerro Murciano
Development and software arquitecture manager at gvSIG Team
jjdelcerro en gvsig.com
gvSIG Association
www.gvsig.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20190702/e0b97789/attachment.html>


Más información sobre la lista de distribución gvSIG_desarrolladores