5 votos

Extracción de segmentos de línea frente a la calle

Tengo una capa de líneas que representa una capa de parcelas. Quiero eliminar todos los segmentos interiores para tener sólo los segmentos que salen a la calle. Así, quiero determinar la suma de los segmentos que salen a la calle. Empecé así enter image description here

  1. Eliminamos los segmentos dobles con la función "Eliminar geometrías duplicadas"
  2. He utilizado disolver en el campo de grupo para formar una sola línea para un solo gráfico.
  3. He convertido las líneas en polígonos.
  4. Volví a disolver sobre los polígonos resultantes para quedarme sólo con el contorno de las parcelas, sin las líneas interiores. enter image description here
  5. He utilizado "Extraer por ubicación", utilizando el parámetro táctil para extraer la cara a la calle (sólo las líneas que dan a la calle)

Este es el resultado final. ¿Tiene alguna idea de por qué estas líneas están rotas y no devuelven el contorno de mi parcela? ¿Tienes idea de si hay alguna diferencia entre capas? O si no, ¿sabes alguna otra manera de extraer estas líneas, pero extraerlo del archivo original, para mantener los datos tabulares y las características de los segmentos.

enter image description here

Después de tamponar la capa, tiene este aspecto: He establecido la tolerancia de 0,00000001. Sin embargo, creo que funciona aún más pequeño.

enter image description here

2voto

chhh Puntos 1154

En lugar del paso 5, cree un nuevo geometry by expression (ir a Menu Processing / Toolbox ), utilizando la expresión boundary ($geometry) ver:

enter image description here

El resultado:

enter image description here

2voto

Yada Puntos 9489

Es molesto cuando hay que hacer una extracción de segmentos de línea y capa es LíneasSring tipo (no Polígono tipo). Esto se debe a que depende de la forma en que se digitalizaron las líneas. Tu aproximación era correcta pero tu método "Extraer por localización" no tiene una opción "convexHull". En un script de PyQGIS puedes hacerlo.

Primero, descargué su imagen y, fue proyectada arbitrariamente con EPSG:32612 por mí. Después, digitalicé dos bloques (tipo LineString); como se puede observar en la siguiente imagen. Observe que también utilicé el campo de grupo (en este caso llamado bloque) para formar una sola línea para un solo trazado con disolver en mi script de Python.

enter image description here

El código desarrollado completo tiene el siguiente aspecto:

import processing

layer = iface.activeLayer()

parameters1 = { 'FIELD' : ['block'], 
                'INPUT' : layer, 
                'OUTPUT' : 'TEMPORARY_OUTPUT' }

result1 = processing.run('qgis:dissolve', 
                         parameters1)

parameters2 = { 'INPUT' : result1['OUTPUT'], 
                'OUTPUT' : 'TEMPORARY_OUTPUT' }

result2 = processing.run('qgis:fixgeometries', 
                          parameters2)

parameters3 = { 'INPUT' : result2['OUTPUT'], 
               'OUTPUT' : 'TEMPORARY_OUTPUT' }

result3 = processing.run('qgis:linestopolygons', 
                         parameters3)

geoms_hull = [ feat.geometry().convexHull().asWkt() for feat in result3['OUTPUT'].getFeatures() ]
perimeters = [ feat.geometry().length() for feat in result3['OUTPUT'].getFeatures() ]

epsg = layer.crs().postgisSrid()

uri = "Polygon?crs=epsg:" + str(epsg) + "&field=id:integer&field=length:double""&index=yes"

mem_layer = QgsVectorLayer(uri,
                           'Polygon',
                           'memory')

prov = mem_layer.dataProvider()

feats = [ QgsFeature() for i in range(len(geoms_hull)) ]

for i, feat in enumerate(feats):
    feat.setAttributes([i, perimeters[i]])
    feat.setGeometry(QgsGeometry.fromWkt(geoms_hull[i]))

prov.addFeatures(feats)

QgsProject.instance().addMapLayer(mem_layer)

Cuando el código anterior se ejecutó en la consola de Python de QGIS, obtuve el resultado de la siguiente imagen. Convex Hull geometrías (características de polígono) coinciden perfectamente con cada parcela características agrupadas. En la tabla de atributos también se incluyeron las sumas deseadas de los segmentos que conducen a la carretera.

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X