Preenchendo lacunas NoData em raster usando o ArcGIS Desktop?


9

Eu tenho uma varredura com lacunas. Quero preenchê-los com médias de células circundantes usando o ArcGIS 10.2 for Desktop.

Eu tentei "Estatísticas Focais", mas calcula a média de CADA célula e não apenas as lacunas.

Eu tentei [Mosaic] .IsNull.Con ([Average], [Mosaic]) encontrado aqui Patching, mas não sei como implementá-lo / ele não funcionará para mim

Eu tentei o Map ALgebra, mas acho que eles estavam usando versões anteriores à 10.2.

O que eu quero. Faça uma varredura falsa com as lacunas preenchidas. Use a varredura falsa para preencher as lacunas da varredura real sem substituir os pontos pelos dados reais.


Sintaxe incorreta, use ([mosaic] .isnull) .Con ([average], [mosaic])
— FelixIP 19/02/15

1
Apenas observe que o link 'Patching' parece ter 15 anos (de 2000 a 2001).
— Phloem

2
Muita coisa mudou com os rasters recentemente; portanto, muitos exemplos mais antigos têm a intenção correta, mas apresentam uma sintaxe incorreta para ser usada na versão atual. @crmackey tem a tradução correta, embora eu usasse um círculo e não um retângulo; para dimensões menores, há pouca diferença, mas para áreas (relativamente) grandes da vizinhança, há uma diferença significativa entre círculo e retângulo.
— Michael Stimson

1
Mesmo com 15 anos, ainda é muito relevante. Huber conhecia e conhece o assunto extremamente bem.
— FelixIP

1
Exatamente. A operação é a mesma, apenas a sintaxe foi alterada.
— Michael Stimson

Respostas:


9

Isso funciona:

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

Onde "w" e "h" são o raio da pesquisa.

Isso faz apenas estatísticas focais nas áreas NoData. Eu verifiquei apagando dados de um DEM e depois encontrando a diferença. Você só precisa garantir que o raio da pesquisa seja adequado.


Acabei de adicionar tudo isso à calculadora raster e alterar o "in_raster" ew eh? Por alguma razão, não consigo fazê-lo funcionar, embora o fluxo faça sentido, pois pula a criação manual da varredura focal e o faz em tempo real.
— Steven Crisp

Tenho que trabalhar! Muito obrigado! foi apenas adicionando "é onde eu não era; t suposto Obrigado.!
— Steven Crisp

1
Sem problemas. Um aviso, como apontou @ MichaelMiles-Stimson, usar NbrCircle () seria melhor.
— 21415 Cracker:

O wh está nas unidades de células do mapa?
— Se você não sabe- apenas GIS

Você seria melhor usando o local arcpy.sa.NbrCircle(radius, units)onde as unidades podem estar 'MAP'ou 'CELL'.
— crmackey

3

Use a função de estatísticas focais, conforme descrito para calcular a média de todas as células da varredura. Em seguida, use as funções Con e IsNull na calculadora raster para substituir apenas as células que são nulas.

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

Uma desvantagem possível com esta solução é que você pode ver alguns valores médios adicionais indesejados de células em torno do perímetro da sua varredura de saída


Não consigo votar devido à reputação ou não, mas esse método funciona se eu fizer uma varredura de estatísticas focais primeiro e depois aplicar o código acima. Eu gostaria de poder fazer tudo em uma linha, como no comentário acima, para economizar tempo. Eu tenho um par de centenas destas coisas ...
— Steven Crisp

Depende apenas se você deseja manter suas estatísticas focais rasterizadas ou interpretar on-the-fly ... ambos os métodos são essencialmente os mesmos (+1 para ambos).
— Michael Stimson

3

Você deve usar a Calculadora de varredura e há uma linha de código útil e relevante na página de suporte da ESRI : Como: Remover e substituir nenhum valor de dados dentro de uma varredura usando informações estatísticas dos valores de dados circundantes . Da sua pergunta, parece que isso faria exatamente o que você está tentando fazer, mas deixe-me saber se estou errado. Aqui está minha captura de tela da Calculadora Raster usando uma instrução condicional para calcular um valor médio para células sem dados das células circundantes: insira a descrição da imagem aqui

Se você tiver centenas delas, recomendo usar o Raster Iterator no Model Builder, que alimentará todas as suas rasters na Raster Calculator Tool, desta forma:

insira a descrição da imagem aqui


2

Tentei o método da Calculadora de varredura que LeonB usou, mas ocorreu um erro de falta de memória, o que é surpreendente, considerando as especificações do meu sistema. Escreveu um pequeno script python independente - modificado daqui - no IDLE que funcionou para mim ...

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")
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.