4 votos

Cómo encontrar búfer de radio alrededor de celda ráster que cubre un definido suma de las celdas ráster?

Quiero hacer un barrio análisis sobre algunos de los datos ráster. Necesito saber el tamaño de un círculo alrededor de cada celda ráster se debe incluir una cierta cantidad de determinados celdas ráster.

enter image description here

Digamos que por tanto los rásteres quiero saber el radio del círculo necesario para alcanzar un valor agregado de 5. En el primer caso, el "círculo" deben tener un radio de 2 a llegar a la suma de los 5 porque un radio de 1 sólo se incluyen una celda ráster que me interesa. En el segundo caso ya un pequeño círculo con un radio de 1 es suficiente. Mi resultado, por lo que debe ser un archivo raster donde cada celda tiene el valor de la radio que se necesita para alcanzar ese definidos suma.

Yo estaba pensando en un largo tiempo acerca de un buen título para esta pregunta. Yo daría la bienvenida a las mejores sugerencias.

2voto

Rihan Meij Puntos 362

La respuesta a tu pregunta depende de la escala de su trama y si quieres una única trama "buffer" de toda la capa o por celda de la cuadrícula. Para la primera opción: La mejor manera en QGIS podría ser la utilización de la r.neighbors HIERBA plugin en el Procesamiento de la caja de herramientas de QGIS 2.0.
Consulte el manual aquí: http://grass.osgeo.org/grass65/manuals/r.neighbors.html
Para hacer lo que usted desea que usted podría tener que construir un pequeño modelo en el Procesamiento, pero tal vez hay una manera más fácil. La Idea general:

  1. Inserte su trama, inicio de la r.los vecinos de la herramienta y con un tamaño de 3 y obviamente la suma como método.
  2. El generado raster resultante contendrá la suma de la vecindad para cada celda de la cuadrícula en un 3x3 matriz de distancias. El uso de la QGIS Rastercalculator para extraer todas las células más pequeñas de 5 (como este RasterLayerName@1 < 5).
  3. Contar el nombre de células en el interior de la resultante en mapa de bits (utilizando estadísticas de ráster). Hay una función en algún lugar de Procesamiento.
  4. Si el número de celdas es igual a cero que ha tenido éxito y han encontrado su adecuado tamaño de búfer. Si no que vuelva al Paso 1 y aumentar el tamaño

1voto

Steven Parkes Puntos 625

También se puede hacer uso de la hierba' r.mfilter (creo).

El siguiente filtro de crear un raster binario (ceros y unos). Se va a producir " uno " si hay al menos 5 celdas en el rango de una celda alrededor del centro de la célula de lo contrario, se producirá 0

MATRIX    3 
1 1 1 
1 0 1
1 1 1
DIVISOR   5
TYPE      P

Puede volver a ejecutar la función de nuevo, con el siguiente filtro, pero esta vez lo hará de verificación para las celdas en el rango de dos células.

MATRIX    5 
1 1 1 1 1 
1 0 0 0 1
1 0 0 0 1
1 1 1 1 1
DIVISOR   5
TYPE      P

0voto

Yada Puntos 9489

El uso de GDAL/Python es otra manera de realizar este procedimiento. Para probarlo, he preparado una trama (aleatorio con valores de 0 y 1) y 29 de filas por 29 columnas. Este fue utilizado para la ejecución del siguiente código en la Consola de Python de QGIS (y esta trama como capa activa):

from osgeo import gdal
import struct
import numpy as np
layer = iface.activeLayer()
provider = layer.dataProvider()
fmttypes = {'Byte':'B', 'UInt16':'H', 'Int16':'h', 'UInt32':'I', 'Int32':'i', 'Float32':'f', 'Float64':'d'}
path= provider.dataSourceUri()
dataset = gdal.Open(path)
band = dataset.GetRasterBand(1)

BandType = gdal.GetDataTypeName(band.DataType)

array = []

for i in range(band.YSize - 2):
    for j in range(band.XSize - 2):
        scanline = band.ReadRaster(i, j, 3, 3, 3, 3, band.DataType)
        values = struct.unpack(fmttypes[BandType] * 9, scanline)
        tmp = np.sum(values) - values[4]
        array.append(tmp)

dataset = None

El algoritmo empieza en la posición (x_off,y_off) = (0,0) y explora todas las células, teniendo en cuenta los bloques de 3x3. El elemento de valor[4] = valor[2][2] siempre es eliminado de cada suma. El barrio de análisis se guardan en la lista de la matriz y podría ser utilizado para la creación de una nueva trama. La serie completa aquí obtenidos (matriz) para esta trama se expone a continuación y se verificó que los valores esperados fueron producidos.

[6.0, 4.0, 3.0, 5.0, 4.0, 6.0, 3.0, 3.0, 4.0, 2.0, 3.0, 2.0, 3.0, 4.0, 6.0, 5.0, 5.0, 3.0, 3.0, 2.0, 3.0, 4.0, 2.0, 4.0, 1.0, 3.0, 3.0, 4.0, 4.0, 5.0, 5.0, 3.0, 5.0, 4.0, 3.0, 4.0, 2.0, 4.0, 1.0, 4.0, 3.0, 4.0, 4.0, 5.0, 4.0, 5.0, 4.0, 3.0, 4.0, 4.0, 4.0, 3.0, 3.0, 3.0, 4.0, 4.0, 4.0, 5.0, 6.0, 5.0, 4.0, 4.0, 4.0, 3.0, 4.0, 3.0, 4.0, 4.0, 5.0, 5.0, 6.0, 5.0, 4.0, 2.0, 5.0, 4.0, 5.0, 4.0, 4.0, 2.0, 3.0, 3.0, 4.0, 6.0, 6.0, 5.0, 5.0, 5.0, 4.0, 3.0, 5.0, 4.0, 4.0, 3.0, 3.0, 5.0, 6.0, 5.0, 3.0, 3.0, 1.0, 4.0, 3.0, 6.0, 5.0, 4.0, 3.0, 4.0, 4.0, 4.0, 5.0, 6.0, 5.0, 6.0, 5.0, 7.0, 5.0, 4.0, 4.0, 4.0, 6.0, 5.0, 6.0, 6.0, 6.0, 6.0, 5.0, 4.0, 4.0, 4.0, 6.0, 6.0, 6.0, 5.0, 3.0, 3.0, 5.0, 3.0, 4.0, 1.0, 4.0, 3.0, 5.0, 3.0, 4.0, 4.0, 2.0, 5.0, 5.0, 8.0, 8.0, 6.0, 4.0, 3.0, 4.0, 3.0, 4.0, 4.0, 6.0, 5.0, 5.0, 5.0, 2.0, 4.0, 2.0, 3.0, 2.0, 5.0, 5.0, 7.0, 4.0, 4.0, 4.0, 4.0, 5.0, 4.0, 5.0, 5.0, 5.0, 6.0, 7.0, 7.0, 6.0, 6.0, 4.0, 6.0, 6.0, 7.0, 4.0, 5.0, 4.0, 1.0, 2.0, 3.0, 5.0, 6.0, 6.0, 6.0, 4.0, 4.0, 3.0, 4.0, 4.0, 5.0, 4.0, 4.0, 3.0, 5.0, 7.0, 7.0, 6.0, 5.0, 5.0, 3.0, 4.0, 5.0, 4.0, 4.0, 5.0, 5.0, 4.0, 5.0, 6.0, 5.0, 5.0, 4.0, 7.0, 5.0, 5.0, 2.0, 3.0, 2.0, 3.0, 5.0, 6.0, 7.0, 7.0, 6.0, 5.0, 5.0, 5.0, 5.0, 4.0, 6.0, 5.0, 5.0, 5.0, 4.0, 5.0, 4.0, 4.0, 5.0, 4.0, 3.0, 2.0, 3.0, 2.0, 2.0, 4.0, 3.0, 5.0, 4.0, 4.0, 5.0, 5.0, 6.0, 6.0, 5.0, 4.0, 6.0, 4.0, 5.0, 6.0, 7.0, 3.0, 3.0, 3.0, 5.0, 4.0, 5.0, 5.0, 4.0, 3.0, 2.0, 2.0, 3.0, 2.0, 4.0, 4.0, 3.0, 3.0, 4.0, 6.0, 7.0, 8.0, 6.0, 7.0, 3.0, 5.0, 4.0, 4.0, 4.0, 4.0, 2.0, 3.0, 4.0, 4.0, 3.0, 1.0, 2.0, 0.0, 1.0, 1.0, 2.0, 3.0, 2.0, 3.0, 3.0, 3.0, 5.0, 6.0, 7.0, 6.0, 6.0, 3.0, 4.0, 6.0, 5.0, 3.0, 2.0, 4.0, 4.0, 6.0, 5.0, 7.0, 5.0, 4.0, 3.0, 2.0, 1.0, 0.0, 1.0, 2.0, 2.0, 2.0, 3.0, 2.0, 5.0, 5.0, 6.0, 6.0, 3.0, 2.0, 3.0, 3.0, 5.0, 5.0, 4.0, 2.0, 5.0, 4.0, 5.0, 3.0, 3.0, 3.0, 1.0, 1.0, 0.0, 1.0, 2.0, 4.0, 3.0, 3.0, 2.0, 5.0, 4.0, 5.0, 3.0, 3.0, 4.0, 6.0, 6.0, 4.0, 4.0, 3.0, 5.0, 4.0, 5.0, 7.0, 6.0, 6.0, 3.0, 3.0, 2.0, 1.0, 1.0, 1.0, 4.0, 2.0, 2.0, 1.0, 3.0, 3.0, 4.0, 3.0, 5.0, 4.0, 5.0, 5.0, 5.0, 6.0, 3.0, 4.0, 2.0, 4.0, 4.0, 4.0, 4.0, 3.0, 4.0, 2.0, 2.0, 1.0, 3.0, 5.0, 5.0, 5.0, 3.0, 4.0, 3.0, 3.0, 3.0, 3.0, 5.0, 7.0, 6.0, 5.0, 3.0, 4.0, 5.0, 3.0, 3.0, 3.0, 4.0, 4.0, 3.0, 3.0, 3.0, 3.0, 1.0, 4.0, 5.0, 6.0, 5.0, 4.0, 5.0, 5.0, 3.0, 3.0, 5.0, 5.0, 4.0, 3.0, 3.0, 2.0, 2.0, 2.0, 1.0, 1.0, 1.0, 2.0, 1.0, 3.0, 4.0, 4.0, 3.0, 3.0, 4.0, 5.0, 7.0, 6.0, 7.0, 6.0, 5.0, 3.0, 3.0, 3.0, 5.0, 4.0, 3.0, 1.0, 1.0, 3.0, 5.0, 4.0, 3.0, 1.0, 3.0, 2.0, 4.0, 3.0, 6.0, 3.0, 4.0, 4.0, 4.0, 6.0, 4.0, 7.0, 7.0, 7.0, 6.0, 4.0, 5.0, 5.0, 3.0, 3.0, 2.0, 3.0, 4.0, 3.0, 2.0, 3.0, 1.0, 4.0, 2.0, 6.0, 4.0, 5.0, 2.0, 3.0, 3.0, 3.0, 5.0, 3.0, 5.0, 5.0, 6.0, 5.0, 3.0, 6.0, 5.0, 4.0, 5.0, 3.0, 3.0, 4.0, 5.0, 5.0, 4.0, 2.0, 5.0, 4.0, 6.0, 5.0, 6.0, 3.0, 3.0, 3.0, 5.0, 5.0, 5.0, 4.0, 5.0, 6.0, 7.0, 5.0, 5.0, 4.0, 4.0, 3.0, 4.0, 6.0, 7.0, 6.0, 4.0, 4.0, 4.0, 5.0, 7.0, 6.0, 4.0, 4.0, 2.0, 4.0, 3.0, 4.0, 4.0, 3.0, 1.0, 4.0, 4.0, 5.0, 2.0, 6.0, 3.0, 3.0, 3.0, 3.0, 2.0, 3.0, 5.0, 4.0, 5.0, 3.0, 4.0, 5.0, 4.0, 5.0, 4.0, 4.0, 4.0, 6.0, 4.0, 6.0, 4.0, 4.0, 5.0, 4.0, 6.0, 4.0, 3.0, 4.0, 3.0, 4.0, 3.0, 4.0, 4.0, 5.0, 3.0, 5.0, 3.0, 5.0, 6.0, 4.0, 4.0, 2.0, 6.0, 4.0, 5.0, 1.0, 4.0, 2.0, 4.0, 4.0, 3.0, 5.0, 3.0, 2.0, 3.0, 3.0, 4.0, 3.0, 4.0, 3.0, 5.0, 5.0, 5.0, 4.0, 3.0, 2.0, 2.0, 4.0, 3.0, 5.0, 4.0, 6.0, 4.0, 6.0, 4.0, 4.0, 5.0, 4.0, 6.0, 5.0, 2.0, 3.0, 5.0, 4.0, 6.0, 4.0, 5.0, 5.0, 5.0, 4.0, 2.0, 3.0, 4.0, 5.0, 5.0, 4.0, 6.0, 5.0, 4.0, 3.0, 3.0, 4.0, 5.0, 6.0, 5.0, 6.0, 6.0, 2.0, 1.0, 3.0, 1.0, 4.0, 3.0, 6.0, 6.0, 5.0, 6.0, 3.0, 4.0, 3.0, 4.0, 4.0, 3.0, 3.0, 4.0, 4.0, 6.0, 6.0, 5.0, 3.0, 4.0, 6.0, 6.0, 5.0]

Una nueva evaluación, con una ligera modificación del código anterior, podría ser ejecutado con 5x5 bloques de si el requisito de suma >= 5 no es llevada a cabo por bloques de 3x3 .

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