¿Cómo conectar líneas en una red?

15

Tengo un archivo de formas de líneas y otro de polígonos. Cuando dos o más líneas se cruzan con un polígono, deben estar conectadas (alineadas), pero a veces durante la digitalización manual esto no ocurre. Necesito encontrar y corregir todos estos errores. Utilicé v.cleanGRASS GIS y automáticamente rompió muchos vértices, lo cual fue bueno, pero algunas de esas líneas desconectadas están más lejos de la tolerancia que le di y si la aumento demasiado comienza a generar otros tipos de errores.

ingrese la descripción de la imagen aquí

¿Algunas ideas?

vascobnunes
fuente
1
Unir espacialmente los puntos finales de la polilínea a los polígonos y resumir los recuentos por polígono. Para cada polígono que contenga más de un punto final unido, cree una polilínea que consista en segmentos que se irradien desde el centroide de esos puntos finales hacia los puntos finales mismos (una "estrella"). Combina las estrellas con las polilíneas originales. Limpie el resultado para eliminar cualquier intersección propia que surja. Cada uno de estos pasos es compatible (y puede ser automatizado) por SIG totalmente capaces. Debido a que no estoy familiarizado con los detalles de QGIS o GRASS, ofrezco esta solución solo como un comentario.
whuber
pero a veces todas las líneas terminan fuera del polígono ...
vascobnunes
1
¿Qué representan estas líneas? Si son ríos, ¿están codificados con información adicional como el nombre o el Orden de la corriente? ¿La red está dirigida (como una red fluvial) como, por ejemplo, dos flujos de primer orden deben fluir en un flujo de segundo orden. Supongo que estoy tratando de decir que es posible que desee poner algo de inteligencia detrás del proceso de ajuste para superar el problema con el ajuste dudoso con una mayor tolerancia de búsqueda.
Hornbydd
1
Su comentario parece contradecir la pregunta. La pregunta parece decir que desea ajustar los vértices que se encuentran dentro de un polígono común. Si un vértice queda fuera de un polígono, ¡no da ningún criterio sobre cómo debe tratarse! Entonces, ¿cuál es exactamente la relación entre los polígonos y las polilíneas?
whuber
1
Estoy de acuerdo con whuber; quizás deberías aclarar la pregunta. ¿Parece que quiere líneas que están 'en' el polígono, así como 'cerradas' pero excluyendo las que están 'en' pero unidas correctamente?
Darren Cope

Respuestas:

7

Mi comprensión del problema es la siguiente:

Si un punto final de polilínea intersecta un polígono, entonces la polilínea necesita estar conectada (agregando o ajustando vértices) a todos los puntos finales de polilínea adicionales que intersecan el mismo polígono.

Algunos puntos finales de polilínea no se cruzan con un polígono, son subimpulsos, pero estos deben conectarse como se indicó anteriormente.

Esta respuesta se basa en algunas ya dadas, pero no está completa ya que no conozco todos los comandos QGIS, ¿tal vez alguien más pueda agregar a esto?

  1. Para cada polilínea, extraiga las coordenadas del punto final ( Vector> Herramientas de geometría> Extraer nodos y luego ordenar) y calcule si están o no dentro de un polígono ( Vector> Herramientas de investigación> Seleccionar por ubicación ).

  2. Para los puntos finales de polilínea que están dentro de un polígono, extienda ese extremo de la polilínea hasta el centro del polígono (Extraiga el centro del polígono usando Vector> Herramientas de geometría> Centroide de polígono , no está seguro acerca de la modificación de la línea, aunque es posible que pueda trabajar con los vértices de polilínea como puntos y agregue otros adicionales con la numeración adecuada antes de reconstruir la polilínea modificada utilizando el complemento Puntos a rutas)

    Usted menciona que puede haber situaciones en las que algunas o todas las líneas se hayan conectado correctamente, en estas situaciones (identificables por puntos finales de polilínea coincidentes), puede optar por usar la ubicación del punto final coincidente en lugar del centroide del polígono como punto para extender cualquier polilínea adicional no conectada a ese polígono.

  3. Para los puntos finales de polilínea que caen fuera de un polígono, extienda ese extremo de la polilínea hasta el centro del polígono más cercano. Una vez más, no estoy seguro de calcular el polígono más cercano, aunque el módulo GRASS v.distance parece hacer el truco.

Andy Harfoot
fuente
Esa es una buena razón para la solución del problema. También llegué a algo así con la respuesta de alexgleith. Pero estaba atrapado en la operación para "extender ese extremo de la polilínea al centro del polígono más cercano". La pregunta ahora es ¿cómo hago eso? Si uso v.clean.snap a los centroides de los polígonos, todavía moverá cualquier vértice que no sea un punto final ...
vascobnunes
Un enfoque sería convertir las polilíneas en puntos como se describe y, si es necesario, agregar un punto adicional al inicio o al final de una línea determinada, según lo dicte la ubicación del punto inicial o final existente. La ubicación del punto agregado sería el centroide del polígono, y el punto se atribuiría con un número de secuencia de vértice de -1 o 1000000 para colocarlo al inicio o al final de la polilínea. Esto permitiría que las polilíneas se reconstruyeran con la herramienta Puntos de ruta
Andy Harfoot
2

Creo que podría hacerlo con algún algoritmo personalizado ... Tenga en cuenta cómo le gustaría implementarlo, pero creo que funcionaría.

Para cada línea, para cada punto final, haga un punto en el polígono para el vértice en el punto final y vincúlelo al polígono.

Luego, para cada polígono, si hay más de un punto final de línea vinculado, los fusionaría (movería) a la coordenada promedio, o al centroide del polígono tal vez.

Eso es bastante simple. Pero no está disponible en operadores estándar. Creo que podría hacerse en ArcGIS con un tiempo de codificación de días.

Otra nota, en la imagen que publicó, una de las líneas está fuera del polígono ... Puede manejar esto de una manera más simple simplemente encontrando el vértice más cercano a cada vértice final, asegurando que la cercanía sea mutua (creo que eso es necesario, para que los vértices se rompan solo de una manera), luego puede moverlos a la posición promedio de los vértices.

Alex Leith
fuente
1

Problema interesante! No se me ocurre una forma de realizar el ajuste automáticamente, pero aquí hay un paso para identificar áreas que al menos busquen la corrección manual:

  • Agregue una nueva columna a su capa de línea y configúrela igual a '1' para todas las entidades.
  • En Vector> Atributos de unión por ubicación, establezca su capa de destino en su capa de polígono y la capa de línea como la capa de unión. Luego seleccione "Tomar resumen de las características de intersección" y haga clic en "Sumar". Indique una ubicación para el archivo de salida y "Aceptar".
  • El archivo de polígono resultante será su capa de polígono original, pero con algunos campos adicionales. El campo SUMA es lo que quieres; cuando es 2, significa que luego puede hacer zoom y ajustar manualmente las características.

Dependiendo de la situación (número de características, número que se encuentran en esta situación frente a las que no, etc.), esto puede ahorrarle algo de tiempo.

EDITAR: También puede usar los polígonos con una suma de 2 para crear un subconjunto de sus capas de línea, luego ejecutar la limpieza en aquellos con una mayor tolerancia para no cambiar las otras características.

Darren Cope
fuente
Ya había hecho algo así. Incluso utilicé v.net para recuperar los nodos para las líneas e hice una selección espacial de los polígonos que coinciden con los nodos. Encuentro muchos errores para corregir usando esto, pero todavía tengo 3 grandes problemas: 1) hay miles de errores para corregir manualmente, lo que lleva mucho tiempo; 2) No obtengo todos los errores que causan en algunos casos las líneas o los nodos ni siquiera 'tocan' los polígonos; 3) Obtengo errores que no son errores, porque cuando dos líneas se conectan correctamente, también se seleccionan.
vascobnunes
0

una vez que tenga los puntos finales, haría un diagrama de araña tomando los polígonos centroides como instalaciones y puntos finales de líneas cercanas como objetivos. Realiza el análisis del diagrama de araña y, como resultado, tendría un segmento para cada polilínea.

Esto funcionaría incluso para aquellos que terminan fuera de los polígonos. Cómo hacerlo en QGIS No lo sé, lo siento, pero haría esto en los productos de ESRI que conozco bien. Eso es lo que entendí cuando Whuber, en la primera respuesta, sugirió construir una "estrella".

Estoy bastante seguro de que hay personas aquí que saben cómo realizar dicho análisis en QGIS

ankilosado
fuente
44
¡Bienvenido a GIS Stack Exchange! Noté que su respuesta ha atraído algunos votos negativos y sospecho que se debe a que ha sugerido una alternativa a la tecnología que el autor de la pregunta está utilizando (GRASS / QGIS). Mi recomendación sería presentar tales sugerencias como comentarios en lugar de respuestas, y si el autor de la pregunta parece interesado, transfiera la información a una respuesta.
PolyGeo