Obtendo limites da imagem rasterizada como polígono no ArcGIS Desktop?

28

Eu tenho uma imagem quadriculada retangular no ArcGIS Desktop.

Como posso produzir um polígono que seja exatamente a extensão da imagem rasterizada?

Ou seja, eu quero ter uma camada de polígono com um único quadrilátero que é a borda da imagem.

Eu tentei simplesmente fazer uma conversão Raster-> Polygon, mas isso tenta usar os dados da imagem para gerar o contorno - tudo o que eu quero é o contorno da borda da imagem.

Estou usando o ArcGIS Desktop 10.

robintw
fonte

Respostas:

33

Se você possui um Analista Espacial , pode:

  1. Multiplique a varredura por 0 para criar uma varredura de valor constante usando a Calculadora de varredura. (certifique-se de convertê-lo para o tipo inteiro ou a etapa 2 não funcionará)
  2. Converta o resultado da etapa 1 em polígono usando a ferramenta Raster to Polygon.

Outra solução:

Se você possui uma licença do 3D Analyst , pode usar a ferramenta Raster Domain em 3D Analyst> Conversion> from raster (no entanto, ela não possui a função suave)

Alex Markov
fonte
12

Você pode usar a ferramenta Domínio de varredura do 3D Analyst para criar um polígono com a mesma extensão que seus dados de varredura

Andreas
fonte
Bem-vindo ao GIS SE! Você poderia adicionar referências à sua resposta? Dessa forma, seria mais sólido.
RK
A ferramenta Raster Domain fez o trabalho, perfeitamente! Cria um contorno ou limite dos dados de varredura.
1
Uma palavra de aviso sobre esta ferramenta - o polígono delimitador criado é a extensão dos dados rasterizados que começam e terminam no pixel CENTER, não na borda externa dos pixels. Eu apenas tentei e pensei que ele retornou a caixa delimitadora externa da varredura, mas quando você aumentar o zoom, verá que a caixa delimitadora começa no centro do pixel.
Fbiles
Na verdade, existe um parâmetro para o método IRasterDomainExtractor.ExtractDomain que controla se ele usa o centro ou a borda externa dos pixels / células.
Preston
Isto é perfeito! Uma ferramenta e eu temos um esboço de polígono da minha varredura. Obrigado!
precisa saber é o seguinte
11

Que tal simplesmente digitalizá-lo? Clique-clique-clique-clique concluído.

Matt
fonte
8
Não sei ao certo por que essa opção foi rejeitada. Você pode encontrar as coordenadas dos cantos da extensão e criar vértices nessas coordenadas. Pode até ser usado para análise. Se for apenas para exibição, clique-clique-clique-clique funciona muito bem.
Baltok
3
Eu diria porque o raster poderia ser uma forma irregular e, dependendo da complexidade, pode resultar em um trabalho muito cansativo digitalização
Phil Henley
4
Mas o OP disse que era retangular. Parece um trabalho bastante simples para mim. Ao ampliar e ser preciso, a diferença entre o contorno de varredura real e o contorno digitalizado seria insignificante para qualquer aplicativo do mundo real.
Matt
10

Você pode usar a ferramenta Build Footprint na caixa de ferramentas Gerenciamento de dados. Você precisa criar um conjunto de dados do mosaico a partir da sua varredura.

Crie um novo mosaico em um geodatabase de arquivo e adicione sua varredura.

Abra seu mosaico no ArcMap e extraia a pegada.

Isso é o que eu faria.

Dom
fonte
8

Eu uso esse script python simples, ele cria uma classe de característica de polígono com a extensão de toda a varredura presente em uma pasta. Para usá-lo, você pode criar uma ferramenta no ArcToolbox ou simplesmente alterar as variáveis ​​InFolder e Dest (Destination).

import arcpy,os

InFolder = arcpy.GetParameterAsText(0)
Dest=arcpy.GetParameterAsText(1)

arcpy.env.workspace=InFolder
#The raster datasets in the input workspace
in_raster_datasets = arcpy.ListRasters()

arcpy.CreateFeatureclass_management(os.path.dirname(Dest),
                                   os.path.basename(Dest),
                                   "POLYGON")
arcpy.AddField_management(Dest,"RasterName", "String","","",250)
arcpy.AddField_management(Dest,"RasterPath", "String","","",250)

cursor = arcpy.InsertCursor(Dest)
point = arcpy.Point()
array = arcpy.Array()
corners = ["lowerLeft", "lowerRight", "upperRight", "upperLeft"]
for Ras in in_raster_datasets:
    feat = cursor.newRow()  
    r = arcpy.Raster(Ras)
    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))
    polygon = arcpy.Polygon(array)
    feat.shape = polygon
    feat.setValue("RasterName", Ras)
    feat.setValue("RasterPath", InFolder + "\\" + Ras)
    cursor.insertRow(feat)
    array.removeAll()
del feat
del cursor  
jeb
fonte
pode nos dizer em detalhes como usar esse código. Eu quero usá-lo no arquivo raster .asc. Minhas imagens são diferentes subpasta diferente.?
GIS Data Butcher
1
A resposta de jeb funcionou para mim, não tenha representante suficiente para votar nele. @GIS Data Butcher Salve a fonte completa em um arquivo script.py e execute-o na Janela Python no ArcMap. Você pode usar o seguinte comando na janela Python para executar o script do arquivo. > Execfile (r'd: \ temp \ script.py ')
Asad
perfeito!! Gostaria de saber, existe um caminho para a ferramenta ler subpastas também?
raphael
@raphael, com certeza, você só precisa implementar o python padrão os.listdir ou os.walk no script.
jeb
@ jeb sim, entendo o conceito ... bot, sou muito novo nisso, e não consegui fazê-lo funcionar ... você pode dar alguma ajuda?
raphael
4

Além disso, uma maneira fácil é usar a ferramenta Reclassificar, onde você deve clicar no botão Classificar e alterar o número de classes para 1. Clique em OK. Agora, a varredura de saída pode ser facilmente convertida usando a Ferramenta de conversão de varredura em polígono. ;)

Adrian Croitor
fonte
4

Eu acho que reclassificar e converter o raster em polígono pode consumir muito tempo. Na minha opinião, a maneira mais fácil de fazer isso é:

  • Obtenha maxX, maxY, minX, minY (isso pode ser feito em Python com o comando de descrição)
  • Execute Create Fishnet com a extensão acima e o número de linhas / colunas como 1

Se você tiver muitos rasters, isso deve ser feito em Python e pode criar centenas de pegadas em questão de segundos.

Felicia Fitzgerald
fonte
0

No ArcCatalog, você pode criar um catálogo raster em um .gdb (Data Management Tools-> Raster). Não gerenciado é bom. Em seguida, clique com o botão direito do mouse e carregue (se os rasters estiverem apenas em uma pasta, "carregue da área de trabalho". Se você carregar o catálogo raster no ArcMap, poderá clicar com o botão direito do mouse-> dados-> exportar pegada, como um arquivo de forma ou classe de recurso. O arquivo de forma terá um campo 'nome' preenchido com o nome da varredura.

O Raster Catalog exibirá automaticamente as extensões, mas eu precisava enviá-las para alguém que não estivesse usando o ArcGIS.

SgtSchultz
fonte
0

Use a ferramenta "Raster to Polygon" na caixa de ferramentas de conversão. Desmarque a caixa de simplificar polígonos. Isso criará exatamente o que você deseja.

Boyle300
fonte
8
Tem certeza de que isso não cria apenas uma grande confusão de polígonos, um para cada conjunto contíguo de pixels de valor igual na imagem original?
whuber
Você sempre pode adicionar uma dissolução depois disso para obter a extensão poli. No entanto, aposto que a solução python listada por @jeb é mais rápida.
GeoJohn
0

A ferramenta "Domínio de varredura" criará um polígono em torno de uma varredura de formato irregular. Eu acredito que requer uma licença para a extensão de analista 3d.

RWRogers
fonte
0

Usar o ArcCatalog é a melhor opção. Crie um conjunto de dados do mosaico a partir dos rasters disponíveis. Defina "SEM VALOR" no mosaico para evitar que o plano de fundo da varredura seja incluído no polígono. Construa pegadas usando o método Radiométrico. Abra o conjunto de dados Mosaic no ArcGIS e exporte Footprints para o arquivo shp. Ótima maneira de obter os limites do mosaico ...

user109590
fonte
0

Se você estiver tentando obter o esboço de uma varredura DEM, precisará fazer o seguinte

Se você possui analista espacial e analista 3d, pode:

  1. multiplique a varredura por 0 para criar uma varredura de valor constante usando a Calculadora de varredura.
  2. Converta os resultados da etapa 1 em um número inteiro rasterizado usando o "INT (Tool)". Isso é necessário para o próximo passo.
  3. converta o resultado da etapa 2 em polígono usando a ferramenta Raster to Polygon (funciona apenas com números inteiros de varredura).
seamster02
fonte
Olá Seamster02, bem-vindo ao GIS Stack Exchange :) Como está escrito, isso não é muito diferente da resposta aceita, gis.stackexchange.com/a/22016/108 .
Matt Wilkie