3 votos

Cómo recortar una trama y excluir los píxeles que se superponen al borde de la capa de la máscara

Recientemente he publicado una respuesta a Estadísticas zonales para píxeles completos qgis que requería recortar una trama de forma que se excluyan los píxeles que quedan parcialmente fuera de la capa de la máscara . He aquí una ilustración: enter image description here

El mejor método que he podido averiguar es el siguiente:

  1. Poligonizar la trama.
  2. Utilice la herramienta de selección por ubicación para seleccionar características en la capa vectorizada que se encuentran dentro de la capa de polígonos.
  3. Recorte de trama por capa de máscara utilizando las características seleccionadas de la capa vectorizada como capa de máscara. No recorte la extensión.

Pero este método parece un montón de pasos, y poligonizar una trama grande puede llevar mucho tiempo.

¿Existe un método mejor para recortar una trama y excluir las celdas que se superponen al borde de la máscara?

Por "mejor" me refiero a menos pasos y/o que requieran menos tiempo de procesamiento.

3voto

MBCook Puntos 8316

No conozco una manera mejor de hacer esto usando QGIS. He escrito el exactextractr para R por la necesidad de resolver problemas como éste, en el que la naturaleza de las intersecciones entre polígonos y celdas rasterizadas es importante. Es mucho, mucho más rápido que crear un polígono para cada celda y hacer un cálculo de intersección. Si puedes usar R, tal vez te sea de utilidad. Aquí tienes un ejemplo:

library(sf)
library(raster)
library(exactextractr)
library(geodata)

elev <- aggregate(raster(elevation_global(res = 10, path = tempdir())), 3)
mexico <- st_as_sf(gadm(country = 'MEX', level = 0, path = tempdir()))

# Get a list with one mask for each input feature.
# Each cell of the mask will have a value from 0 to 1
# indicating the fraction of the cell that is within the
# feature.
# We have only one input feature, so grab the first
# element.
mask <- coverage_fraction(elev, mexico)[[1]]
# Set values in the mask to NA where less than 100% of
# the cell area is within the polygon
mask[mask < 1] <- NA

plot(st_geometry(mexico))
plot(mask*elev, add=TRUE)

Esto produce la siguiente salida:

map of mexico showing only raster cells 100% within the boundary

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