Criando shapefile mostrando pegadas de Rasters?

33

Eu tenho cerca de 1.000 imagens de satélite no formato tiff e quero criar um shapefile que servirá como um índice para os rasters. Isso é algo semelhante a um catálogo raster, mas eu não quero criar um catálogo raster.

Alguns obstáculos que eu posso prever, é que a imagem é georrefrenciada, portanto não tem forma retangular (estou falando da área de dados).

Para esclarecer, exijo que o polígono cubra apenas os pixels diferentes de zero (ou não nodata) da varredura, e não a varredura retangular inteira. A maioria das respostas até agora fornece um polígono retangular, que cobre os dados e os pixels que não são dados.

Minha imagem Uma imagem de satélite de amostra


Resultado fornecido pelas ferramentas que examinei (como raster catlog, vários Arcscripts, script Python personalizado fornecido em uma das respostas): Resultado


Resultado que eu quero: insira a descrição da imagem aqui

Devdatta Tengshe
fonte
4
Parece que criar um catálogo raster, mesmo que temporariamente, seria uma boa solução para criar pegadas. Você pode criar um catálogo não gerenciado, que cria uma tabela de referências, mas deixa as imagens em seus locais no servidor. É fácil e relativamente rápido fazer uma importação em lote de rasters para um catálogo. Depois de criado, você pode exportar as pegadas para uma nova classe de recurso e excluir o catálogo de varredura. Isso pode ser tão rápido quanto outras opções.
Get Spatial
2
O conjunto de dados do mosaico também produz a pegada de imagens.
Roy
conjunto de dados em mosaico é o caminho a percorrer. Muito fácil de realizar
Brad Nesom
Então, na última imagem, os pixels estão fora da caixa vermelha NoData ou 0? Se forem 0, existem pixels na área que você deseja que também tenham valor 0?
Chad Cooper
1
Os pixels fora da borda vermelha são nodata; No entanto, meus dados multi-espectrais têm 0,0,0 como valores RGB para as áreas nodata. Nos dois casos, não há pixels com o valor 0 dentro da área requerida.
Devdatta Tengshe

Respostas:

15

Existe um plugin no QGIS chamado Limite de Imagem . É uma ótima ferramenta. Dentro desta ferramenta, há uma opção para "Pixels válidos" que omitirá as bordas pretas de uma imagem de satélite, por exemplo.

Ryan Garnett
fonte
Este plugin alega fazer o que eu queria, mas está falhando em uma imagem que eu experimentei. Vou tentar com meus dados reais amanhã.
Devdatta Tengshe
Descobri que esse plug-in funciona muito bem com dados multi-espectrais, mas às vezes fornece resultados estranhos com imagens pancromáticas de banda única.
Devdatta Tengshe
2
Concordo que o QGIS Image Boundary funciona melhor, mas existe uma ferramenta para fazer isso em arquivos vetoriais em que não precisamos da "caixa delimitadora" ou "pegada", mas de um polígono descrevendo onde existem dados.
GeorgeC
As ferramentas de limite de imagem são ótimas, no entanto, o link que você fornece é 404. Acredito que as ferramentas ainda estejam disponíveis se você permitir plugins experimentais nas configurações do plug-in. Talvez use este link ?: github.com/lmotta/imagefootprint_plugin
Aaron
Existe alguma documentação para usar o limite de imagem?
Loonuh 15/01
9

O código a seguir pega uma varredura de entrada, obtém sua extensão e insere essa extensão em uma classe de característica de polígono:

import arcpy

r = arcpy.Raster(in_raster)
point = arcpy.Point()
array = arcpy.Array()

corners = ["lowerLeft", "lowerRight", "upperRight", "upperLeft"]

cursor = arcpy.InsertCursor(fc)
feat = cursor.newRow()
for corner in corners:    
    point.X = getattr(r.extent, "%s" % corner).X
    point.Y = getattr(r.extent, "%s" % corner).Y
    array.add(point)
array.add(array.getObject(0))
print len(array)
polygon = arcpy.Polygon(array)
feat.shape = polygon
cursor.insertRow(feat)
array.removeAll()
del feat
del cursor

Você pode executá-lo na janela do ArcMap Python através da criação in_rastere fcassim:

>>> fc = 'r_extent'
>>> in_raster = 'CaliCoast10mNED_HavCurvedPCS'

onde r_extentexiste uma classe de recurso de polígono existente. Em seguida, basta copiar o código e executá-lo. Eu entendi isso:

insira a descrição da imagem aqui

Chad Cooper
fonte
1
Eu tenho usar o código acima para fazer o mesmo para uma pasta: gist.github.com/4162013
jeb
7

Você pode usar o gdaltindex para isso: http://www.gdal.org/gdaltindex.html

No entanto, ele ainda criará retângulos (por exemplo, 4 + 1 pontos) no mesmo sistema de referência que as imagens. Mas me pergunto se isso realmente é um problema: qual o tamanho das suas imagens?

johanvdw
fonte
O problema com o gdaltindex é que ele cria um polígono retangular para cada imagem. Eu só estou interessado no valor diferente de zero pixels
Devdatta Tengshe
4

Eu tentei a ferramenta "Limite de imagem" no QGIS, mas ela falha com alguns rasters.

Outra opção que funcionou para mim é: - 1. Converta a varredura de entrada em um único número digital usando o utilitário de linha de comando gdal_translate.

gdal_translate -co compress = lzw -b 1 -ot byte -scale 1 1 inp.tif out.tif

Isso criará uma varredura com valores de 1 em qualquer lugar inp.tif, com valores diferentes de zero.

  1. Em seguida, no ArcMap, você pode usar a ferramenta "raster to polygon" para obter o polígono (shapefile).

O arquivo shapefile de saída terá limites não quadrilaterais, com vários vértices poligonais, seguindo o limite real da imagem.

user3294041
fonte
3

Se você estiver interessado em uma solução com script, tente o comando gdal nearblack . Você pode usar o sinalizador -white para recuperar dados delimitados por espaço em branco também. Você pode poligonizar a saída para gerar uma área não retangular dos dados rasterizados.

##run nearblack
shellcmds = "nearblack -white -o " + outpath + " " + inpath
os.system(shellcmds)

##run polygonize
shellcmds = "gdal_polygonize.py " + outpath + " -f" + """ "ESRI Shapefile"  """ + outpath2 + " nearblack"
os.system(shellcmds)
jsta
fonte
1

Acredito que, no mundo ArcGIS, você possa obtê-lo com a ferramenta 3D Analyst \ Conversion \ From Raster \ Raster Domain .

Tomek
fonte
Funciona apenas em dados 3D e, mesmo assim, não fornece os resultados esperados. Não funciona com imagens de satélite.
Devdatta Tengshe
Sim, é verdade. Vou deixar a resposta para os outros, para estar ciente disso.
Tomek
0

Existe uma ferramenta no ArcGIS 3D Analyst chamada Raster Domain que cria um espaço de polígono ou polilinha das partes de dados de um conjunto de dados raster - e ignora as células NoData. Funcionou muito bem para mim.

Joey
fonte
1
Bem vindo ao nosso site! Você poderia explicar como sua resposta difere da de Tomek?
whuber
O domínio de varredura funcionou para mim - obrigado por sua ajuda!
Meryloo 29/10
0

Você pode criar um catálogo raster com uma referência espacial atribuída, adicionar o catálogo raster ao ArcMap e, em seguida, "Exportar Pegada". Lembre-se de que existe a opção de criar um catálogo de varredura "NÃO GERIDO", para que você não faça uma duplicata de cada conjunto de dados de varredura.

nhunsaker
fonte