Cortar polígonos en QGIS a una distancia específica de una entidad en otra capa

8

Me gustaría poder cortar polígonos como el siguiente, en QGIS, a una distancia establecida a cada lado de una característica especificada en otra capa, en este caso una línea de sendero desde el mapa maestro del sistema operativo.

De esta manera, efectivamente tendría un búfer a lo largo de las líneas que podría representar una red de paseo por el bosque, por ejemplo. En este caso, es una característica lineal muy simple, pero a menudo son mucho más complejas y pueden ser muy lentas de cortar. Idealmente, necesito conservar el polígono original, ya que esto también se utilizará.

¿Es posible cortar un polígono de esta manera, o tendría que crear los nuevos polígonos como amortiguadores a lo largo de la línea y luego cortarlos del polígono existente?

Captura de pantalla de polígono para cortar

JimS-W
fuente

Respuestas:

3

En este flujo de trabajo necesitará el complemento refFunctions para usar geomintersects().

  1. Abra la tabla de atributos de su capa Polígono.
  2. Activa la calculadora de campo.
  3. Marque Update existing fieldy seleccione <geometry>en el menú desplegable.
  4. Proporcione esta expresión: difference($geometry, buffer(geom_from_wkt(geomintersects( 'Your_LineLayerName', '$geometry')), 20))

Modifique Your_LineLayerNamecuál es su capa (ruta) y 20(tamaño del búfer) según sea necesario.

NÓTESE BIEN. Dado que el cambio se realiza de forma instantánea e irreversible, tenga cuidado y guarde una copia de su archivo Polygon original.

Kazuhito
fuente
1
Gracias Kazuhito, eso funciona muy bien, pero parece cortar Y eliminar la línea tamponada del polígono existente. ¿Es posible retenerla como un nuevo polígono?
JimS-W
@ JimS-W Si usa en intersection()lugar de difference(), le dará la parte almacenada. Pero me temo que no te ayuda a obtener ambas geometrías (diferencia e intersección) en una sola acción.
Kazuhito
1
Eso está bien, creo que debería poder obtener lo que necesito combinando los 2 en una capa de cero. Gracias de nuevo
JimS-W
4

Necesitará bufferla línea (ruta) seleccionada a la distancia que necesita y luego córtelas del otro polígono usando difference.

Si era una operación que tenía que hacer muy a menudo, entonces valdría la pena escribir un script de Python para llevar a cabo ambas operaciones juntas.

Ian Turton
fuente
Gracias, pensé que ese podría ser el caso. Tengo que hacerlo con bastante regularidad, pero realmente no sé por dónde empezar a escribir guiones, más allá de las consultas básicas. ¿Sería bastante sencillo, crees?
JimS-W
He estado intentando repetir esta operación usando la diferencia de expresión ($ geometry, buffer (geom_from_wkt (geomintersects ('Your_LineLayerName', '$ geometry')), 20)), en QGIS 3.2.1, pero ya no parece funcionar . O devuelve el error "Error de evaluación: el objeto 'QgsGeometry' no tiene el atributo 'exportToWkt'", o simplemente me dice que la capa con la que estoy tratando de cortar no existe. ¿Alguna sugerencia @Kazuhito? He instalado el complemento refFunctions.
JimS-W
Haga una nueva pregunta en lugar de usar un comentario
Ian Turton
Lo haré @Ian Turton. He descubierto que la función Habilitar rastreo -> desplazamiento cubre la mayor parte de lo que necesito hacer ahora en cualquier caso.
JimS-W
0

En las versiones más nuevas de QGIS (estoy usando 3.2.1) ahora es posible hacer esto mucho más rápido y fácilmente usando la función 'Desplazamiento' dentro de la barra de herramientas de ajuste (desde el menú desplegable al lado de 'Habilitar rastreo'):

ingrese la descripción de la imagen aquí

JimS-W
fuente