Gostaria de saber se existe uma maneira de encontrar a extensão limite mínima para uma varredura com um valor específico. Recortei uma varredura de uma imagem global e a extensão é definida como extensão global com muita área NoData. Gostaria de remover a área NoData desta varredura e reter apenas a área que contém os pixels do valor específico. Como posso fazer isso?
Aqui está o meu exemplo: eu gostaria de extrair valor = 1 (área azul) e usar a extensão da área azul em vez de o mundo inteiro para processamento adicional.
arcgis-desktop
raster
extents
Visto
fonte
fonte
Respostas:
Se eu entendi a pergunta corretamente, parece que você deseja saber a caixa delimitadora mínima dos valores que não são nulos.Talvez você possa converter a varredura em polígonos, selecione os polígonos nos quais está interessado e depois converta-os novamente em uma varredura. Você pode ver os valores das propriedades que devem fornecer a caixa delimitadora mínima.
fonte
O truque é calcular os limites dos dados que possuem valores. Talvez a maneira mais rápida, mais natural e mais geral de obtê-las seja com resumos zonais: usando todas as células não NoData para a zona, o zonal min e max das grades contendo as coordenadas X e Y fornecerão toda a extensão.
A ESRI continua mudando as maneiras pelas quais esses cálculos podem ser feitos; por exemplo, expressões integradas para as grades de coordenadas foram descartadas com o ArcGIS 8 e parecem não ter retornado. Apenas por diversão, aqui está um conjunto de cálculos rápidos e simples que farão o trabalho, não importa o quê.
Converta a grade em uma única zona , equiparando-a a si mesma, como em
"Minha grade" == "Minha grade"
Crie uma grade de índice de coluna acumulando uma grade constante com o valor 1. (Os índices começarão com 0.) Se desejar, multiplique pelo tamanho da célula e adicione a coordenada x da origem para obter uma grade com coordenadas x " X "(mostrado abaixo).
Da mesma forma, crie uma grade de índice de linha ( e, em seguida, uma grade de coordenadas y "Y") acumulando uma grade constante com o valor 64.
Use a grade de zona da etapa (1) para calcular o zonal mínimo e máximo de "X" e "Y" : agora você tem a extensão desejada.
(A extensão, conforme mostrado nas duas tabelas de estatísticas zonais, é representada por um contorno retangular nesta figura. Grade "I" é a grade de zona obtida na etapa (1).)
Para ir além, você precisará extrair esses quatro números de suas tabelas de saída e usá-los para limitar a extensão da análise. A cópia da grade original, com a extensão de análise restrita, conclui a tarefa.
fonte
Aqui está uma versão do método @whubers para ArcGIS 10.1+ como uma caixa de ferramentas python (.pyt).
fonte
Eu inventei uma solução baseada em gdal e numpy. Ele divide a matriz de varredura em linhas e colunas e elimina qualquer linha / coluna vazia. Nesta implementação, "vazio" é menor que 1, e apenas os rasters de banda única são responsáveis.
(Percebo enquanto escrevo que essa abordagem da linha de varredura é adequada apenas para imagens com "colares" nodata. Se seus dados forem ilhas em mares de nulos, o espaço entre as ilhas também será reduzido, juntando tudo e estragando totalmente o georreferenciamento. .)
As partes do negócio (as necessidades precisam ser aprimoradas, não funcionarão como estão):
Em um script completo:
O script está no meu repositório de códigos no Github, se o link for procurar um pouco; essas pastas estão prontas para alguma reorganização.
fonte
MemoryError
Source raster (geo units): Origin (top left): 2519950.0001220703, 5520150.00012207 Pixel size (x,-y): 100.0, -100.0 Columns, rows : 42000, 43200 Traceback (most recent call last): File "D:/11202067_COACCH/local_checkout/crop_raster.py", line 72, in <module> cropped_raster, cropped_transform = main(src_raster) File "D:/11202067_COACCH/local_checkout/crop_raster.py", line 22, in main data = np.array(raster.ReadAsArray()) MemoryError
Por todo o seu poder analítico, o ArcGIS não possui manipulações básicas de varredura que você pode encontrar com os editores de imagens de desktop tradicionais, como o GIMP . Ele espera que você queira usar a mesma extensão de análise para sua varredura de saída que sua varredura de entrada, a menos que substitua manualmente a configuração do ambiente Extensão de Saída . Como é exatamente isso que você procura, não definido, a maneira de fazer as coisas no ArcGIS está atrapalhando.
Apesar dos meus melhores esforços, e sem recorrer à programação, não consegui encontrar a extensão do subconjunto desejado da imagem (sem conversão de varredura em vetor que é computacionalmente um desperdício).
Em vez disso, usei o GIMP para selecionar a área azul usando a ferramenta Selecionar por cor e inverti a seleção, pressione Excluir para remover o restante dos pixels, inverti a seleção novamente, recortei a imagem para seleção e finalmente a exportei novamente para PNG. O GIMP salvou-o como uma imagem de profundidade de 1 bit. O resultado está abaixo:
Obviamente, como sua imagem de amostra não possuía um componente de referência espacial e o GIMP não possui reconhecimento espacial, a imagem de saída é tão útil quanto a entrada de amostra. Você precisará georeferenciar para que seja útil em uma análise espacial.
fonte
Aqui está uma possibilidade usando o SAGA GIS: http://permalink.gmane.org/gmane.comp.gis.gdal.devel/33021
Outra possibilidade usando apenas as ferramentas do ArcGIS GP seria criar um NIF a partir do seu raster usando Raster para TIN , calcular seu limite usando o domínio TIN e Recortar o seu raster pelo limite (ou seu envelope usando o recurso Envelope para o polígono ).
fonte