4 votos

Iterar una intersectan entre las polilíneas y polígonos en QGIS usando la secuencia de comandos de Python

Tengo un shapefile compone de 127 polígonos independientes que representan a los diferentes distritos. Superpuesto en esta capa es una polilínea en la capa de 2800 calles, algunas de las cuales son completamente atado por los polígonos y algunos que atraviesan dos o más polígonos. Mi tarea es de dos encontrar la longitud total de calles dentro de cada polígono (distrito). Ya he hecho esto con un solo distrito, utilizando el Vector de> Herramientas de Geoprocesamiento > Intersección y, a continuación, realice resumen statsitics. Sin embargo, con el fin de evitar que hacerlo manualmente 127 veces, me gustaría escribir una secuencia de comandos que se repite en cada polígono - realización de la intersección con la polilínea en la capa y me dejó con 127 archivos de forma separada. Yo no muy familiarizados con Python - sólo sé algunas muy comandos básicos - pero le agradecería que se apunta en la dirección correcta. He adjuntado imágenes para ayudarle a visualizar y conceptualizar el problema. Gracias.enter image description here

2voto

Mue Puntos 2469

Si desea crear archivos de forma separada para cada distrito, asegúrese de que su capa de polígono contiene atributos únicos (si no, puede crear uno usando la Calculadora de Campo con la expresión $rownum). A continuación, puede ejecutar el Vector de Split Capa de Vector > Herramientas de Administración de Datos > Dividir la Capa de Vector. Elija un directorio (por ejemplo: C:/Users/you/Desktop/Test/Shapefiles//) y de cada polígono distrito debe tener su propio archivo shapefile.

La siguiente secuencia de comandos intersecta cada polígono del distrito con la capa de línea:

import glob, os, processing

line_layer = "path/to/line_layer//"    # This is the path to your line layer
poly_layers = "C:/Users/you/Desktop/Test/Shapefiles//"  # This is the path to your district shapefiles
output_dir = "path/to/output_dir//"    # This is the path for the shapefiles to be saved

os.chdir(poly_layers)
for fname in glob.glob("*.shp"):
    processing.runalg("qgis:intersection", line_layer, fname, output_dir + fname)

Espero que esto ayude!

0voto

Ruben Puntos 3288

Creo que hay una herramienta integrada en QGIS haciendo lo que u está esperando :
Ir a Vector/Herramientas de Análisis/Suma de Longitudes de Línea de ...

A menos que u quiere hacer la tarea de programación, por supuesto ... Pero en caso de que u puede llamar a esta herramienta desde el interior de Python.

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