[gvSIG-devel] Creation of new topological rules in gvSIG desktop - Weekly Report 5
Joaquin Jose del Cerro Murciano
jjdelcerro at gvsig.org
Mon Jul 1 11:09:15 PDT 2019
Hola Hector.
(Perdon a todos por escribir en castellano en esta lista).
He echado un vistazo al codigo de mustNotHaveDanglesLineRule.
Entiendo que lo tienes aun muy en mantillas; pero te dejo algunos
comentarios.
Entiendo que la regla a implementar seria el equivalente a "No deben quedar
nodos colgados" (
https://pro.arcgis.com/es/pro-app/help/editing/geodatabase-topology-rules-for-polyline-features.htm#ESRI_SECTION1_D111AE311AFB4DE4ABA90BC12EE8C605
)
Creo que te ha pasado como a todos los que empiezan...
te has metido a implementar sin tener clara la solucion.
Mi consejo es que antes de empezar a implementar pienses que es lo que
tendrias
que hacer, no en terminos de programacion, si no que pasos harias.
No intentes partir de un codigo e ir adaptandolo sobre la marcha. Si el
problema
es simple o muy parecido al que has copiado el codigo vale, pero si no es
simple
y no se parece lo que hay que hacer solo te dara dolor de cabeza hacerlo.
Cuando tengas descrito lo que hay que hacer, ya miras codigo y puedes
reutilizar algo que tengas de antes.
Vamos a ver esto con un ejemplo.
Voy a empezar con una simplificacion... lines, no multilineas.
Vale, un problema menos.
Y ¿ ahora que ?
Una linea, dos extremos.
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.
Hasta aqui sencillo.
Una vez tengo claro lo que he de hacer, descrito en lenguaje cotidiano, ya
voy
a ver como tendria que implementarlo.
Parece simple...
Al metodo check se le invocara para cada feature, "linea", del dataset.
perfecto.
Si tengo indices espaciales...
pillare un extremo y comprobare si intersecta con alguna linea del dataset1.
Un query sobre el indice con el extremo y comprobar si solapan las
lineas obtenidas con el buffer. Y si no añadir el extremo al informe de
errores.
Pondre la linea como geometria, y el punto del extremo como error.
El usuario vera que ese extremo queda colgado.
No tengo claro que el query sobre el indice puede funcionar correctamente...
si veo que el resultado no es bueno, puedo atacar al indice con un buffer
del extremo con
la tolerancia, y luego ya afino comprobando que el resultado intersecte con
el punto.
Y como habra que reperirlo para los dos extremos, probablemente sea
interesante
meter ese codigo en una funcion.
Y las acciones...
Bueno, por ejemplo la de "extender".
Primero averiguamos que extremo de la linea es el que da el error.
Bueno la descripcion de "Extender" del enlace de antes lo dice bastante
bien.
No me voy a repetir. Aqui solo decir, que si que interviene la tolerancia,
y
habran casos que nos indicara que no se puede extender la linea.
Pero el truco podria estar en saber que extremo de la linea es el que hay
que
alterar. Comparando cada extremo de la linea con la geometria de error del
informe
podemos saber si es el primero o el ultimo.
La accion de cortar... tampoco parece complicada.
(mira la descripcion en el enlace)
La primera aproximacion podria ser ...
Averiguamos que extremo de la linea es el que da el error.
calcular con que linea tiene que solapar ese extremo. Aplicamos un buffer
con
la tolerancia y buscamos...
¿ Y si hay mas de una ?
para luego... de momento avisamos que no podemos corregir eso al usuario.
Que lo edite el manualmente y lo corrija.
Cuando tenemos a que linea debe unirse, cogemos el segmento de linea de ese
extremo de la linea que estamos corigiendo y calculamos el punto en donde
intersecta con la otra. Y ese seria el final de la linea a corregir.
Asi facil...
Pero ¿ y si el segmento no intersecta ?
La solucion simple seria ir cogiendo los siguientes segmentos hasta que
intersecte.
Probablemente estaria bien comprobar lo primero si la linea intersecta. Y
no
hacer nada si no intersecta.
Una vez claro la definicion de la regla y las acciones desde el punto de
vista
funcional (del usuario). Describimos en lenguaje normal lo que deberiamos
hacer.
Y luego ya pasamos ha implementarlo.
A ver que te parece lo que he comentado.
Espero comentarios.
Si no ves claro algo de lo que digo, comentalo, no des por sentado lo que
diga sin mas.
Un saludo
Joaquin
El dom., 30 jun. 2019 a las 13:53, Hector Tundidor Hernandez (<
hectorth23 at gmail.com>) escribió:
> Dear Community,
>
>
>
> I have updated mi wiki page with the Weekly Report 5. Any comments and
> suggestions are welcome.
>
>
>
> 1. What did I complete this week?
>
>
>
> This week I have continued with the rule analysis must not have dangles
> and I have completed part of the corresponding documentation in the wiki.
> In addition, I have started to implement the rule code and have created a
> line dataset with the default 2D dimension.
>
>
>
> The commented files are the following:
>
>
>
> - MustNotDaveDanglesLineRule.py
> - MustNotHaveDanglesLineRuleFactory.py
> - testLine.shp
>
>
>
> 1. What am I going to achieve for next week?
>
>
>
> Next week I will continue with the rule development and with the code
> corresponding to the different actions that solve rule posible violations.
>
>
>
> 1. Is there any blocking issue?
>
>
>
> On this occasion I am having some difficulties implementing the rule code
> and that it does not indicate non-dangling lines as errors.
>
>
>
> Regards
>
>
>
> Héctor
>
>
> _______________________________________________
> gvSIG-Desktop-Devel mailing list
> gvSIG-Desktop-Devel at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/gvsig-desktop-devel
>
--
--------------------------------------
Joaquin Jose del Cerro Murciano
Development and software arquitecture manager at gvSIG Team
jjdelcerro at gvsig.com
gvSIG Association
www.gvsig.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gvsig-desktop-devel/attachments/20190701/fd450967/attachment.html>
More information about the gvSIG-Desktop-Devel
mailing list