2 votos

Extraer intersecciones de 2 shapefiles con subconjunto de campos en QGIS

Tengo 2 shapefiles de polígonos: A (con campo entero "a_id" ) y B (campo entero "b_id" ).

Mi objetivo es extraer intersecciones de polígonos en la capa A con polígonos en la capa B donde el atributo "a_id" es igual al atributo "b_id" + 55 .

Estoy intentando implementarlo con el modelador gráfico QGIS, pero "Select by expression" sólo admite una capa para ejecutar expresiones, y "Extract by location" no tiene filtro de atributos.

2voto

Dom Puntos 162

La mejor solución para mí era abrir el directorio que contiene ambas capas como una sola Conjunto de datos GDAL haga un Consulta SQL OGR y guarda el resultado en una nueva capa. Permite hacer consultas espaciales y de atributos simultáneamente y se puede hacer con la consola de QGIS:

from osgeo import ogr
ogr.UseExceptions()
ogr_ds = ogr.Open('/path/to/data', True)  # Windows: r'C:\path\to\data'
SQL = """\
    SELECT ST_Intersection(A.geometry, B.geometry) AS geometry, A.a_id, B.b_id
    FROM A, B
    WHERE ST_Intersects(A.geometry, B.geometry)
    AND CAST(A.a_id as INTEGER) = CAST(B.b_id as INTEGER) + 55;"""
layer = ogr_ds.ExecuteSQL(SQL, dialect='SQLITE')
# copy result back to datasource as a new shapefile
layer2 = ogr_ds.CopyLayer(layer, 'result_shapefile')
# save, close
layer = layer2 = ogr_ds = None

La idea fue elegida aquí

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