¿Cómo llenar los vacíos de NoData en el ráster con ArcGIS Desktop?

9

Tengo una trama con huecos. Quiero completar estos con promedios de celdas circundantes usando ArcGIS 10.2 for Desktop.

He intentado con "Estadísticas Focales" pero promedia CADA celda y no solo las brechas.

He intentado [Mosaico] .IsNull.Con ([Promedio], [Mosaico]) encontrado aquí Parchear pero no sé cómo implementarlo / no funcionará para mí

Intenté Map ALgebra pero creo que estaban usando versiones anteriores a 10.2.

Lo que quiero. Haga un ráster falso con espacios rellenos. Use el ráster falso para rellenar los espacios del ráster real sin reemplazar los puntos con datos reales.

Steven Crisp
fuente
Sintaxis incorrecta, use ([mosaico] .isnulo) .Con ([promedio], [mosaico])
FelixIP
1
Simplemente observando que su enlace 'Parchear' parece tener 15 años (desde 2000-2001).
floema
2
Recientemente han cambiado muchas cosas con los rásteres, por lo que muchos ejemplos antiguos tienen la intención correcta pero sintaxis incorrecta para ser utilizada en la versión actual. @crmackey tiene la traducción correcta, aunque usaría un círculo y no un rectángulo; para dimensiones más pequeñas hay poca diferencia, pero para áreas de vecindario (relativamente) grandes hay una diferencia significativa entre círculo y rectángulo.
Michael Stimson
1
Incluso si tiene 15 años, sigue siendo muy relevante. Huber sabía y conoce muy bien el tema.
FelixIP
1
Exactamente. La operación es la misma, solo que la sintaxis ha cambiado.
Michael Stimson

Respuestas:

9

Esto funciona:

filled = arcpy.sa.Con(arcpy.sa.IsNull(in_raster),arcpy.sa.FocalStatistics(in_raster,
                        arcpy.sa.NbrRectangle(w, h),'MEAN'), in_raster)

Donde "w" y "h" son el radio de búsqueda.

Esto solo hace estadísticas focales en las áreas NoData. Verifiqué borrando datos de un DEM y luego encontrando la diferencia. Solo tiene que asegurarse de que el radio de búsqueda sea adecuado.

crmackey
fuente
¿Acabo de agregar todo esto a la calculadora ráster y cambiar el "in_raster" yw y h? Por alguna razón, no puedo hacer que funcione, aunque el flujo tiene sentido ya que omite la creación manual del ráster focal y lo hace sobre la marcha.
Steven Crisp
Lo tengo para trabajar! Muchas gracias! solo estaba agregando "donde no tenía que hacerlo. ¡Gracias!"
Steven Crisp
1
No hay problema. Un descargo de responsabilidad, como señaló @ MichaelMiles-Stimson, usar NbrCircle () sería mejor.
crmackey
¿Están wh en unidades cartográficas de celdas?
Si no lo sabes, solo GIS
Sería mejor usar arcpy.sa.NbrCircle(radius, units)dónde pueden estar las unidades 'MAP'o 'CELL'.
crmackey
3

Use la función de estadísticas focales, como describió para promediar todas las celdas para el ráster. Luego, use las funciones Con e IsNull en la calculadora ráster para reemplazar solo las celdas que son nulas.

Con(IsNull(<inputRaster>), <focalRaster>, <inputRaster>)

Un posible inconveniente con esta solución es que puede ver algunos valores de celda promediados adicionales no deseados alrededor del perímetro de su ráster de salida

Ben Gosack
fuente
No puedo votar debido a la reputación o w / e, pero este método funciona si primero hago un ráster de estadísticas focales y luego aplico el código anterior. Solo desearía poder hacerlo todo en una línea como el comentario anterior para ahorrar tiempo. Tengo un par de cientos de estas cosas ...
Steven Crisp
Solo depende de si desea mantener sus estadísticas focales de trama o interpretar sobre la marcha ... ambos métodos son esencialmente los mismos (+1 para ambos).
Michael Stimson
3

Debe usar la Calculadora ráster y hay una línea de código útil y relevante de la página de soporte de ESRI. Cómo : Eliminar y reemplazar los valores de datos dentro de un ráster utilizando información estadística de los valores de datos circundantes . Según su pregunta, parece que esto haría exactamente lo que está tratando de hacer, pero avíseme si me equivoco. Aquí está mi captura de pantalla de Raster Calculator usando una declaración condicional para calcular un valor promedio para celdas sin datos de las celdas circundantes: ingrese la descripción de la imagen aquí

Si tiene cientos de estos que hacer, le recomiendo usar el Raster Iterator en el Model Builder, que alimentará todos sus rásteres en la Herramienta de cálculo de ráster, de esta manera:

ingrese la descripción de la imagen aquí

León
fuente
2

Probé el método de la Calculadora ráster que LeonB usó, pero me encontré con el error Sin memoria, lo que es sorprendente dadas las especificaciones de mi sistema. Escribió un pequeño script de Python independiente, modificado desde aquí , en IDLE que funcionó para mí ...

import arcpy
from arcpy import env
from arcpy.sa import *

env.workspace="D:/Watershed/"

inRaster="D:/Watershed/tamtr14_1m"

arcpy.CheckOutExtension ("Spatial")

outCon=Con(IsNull(inRaster), FocalStatistics (inRaster, NbrRectangle (5,5, "CELL"), "MEAN"), inRaster)

outCon.save ("D:/Watershed/outCon")
wiebe712
fuente