Ottenere il limite dell'immagine raster come poligono in ArcGIS Desktop?


28

Ho un'immagine raster rettangolare in ArcGIS Desktop.

Come posso produrre un poligono che è solo l'estensione dell'immagine raster?

Cioè, voglio avere uno strato poligonale con un singolo quadrilatero che è il bordo dell'immagine.

Ho provato semplicemente a fare una conversione raster-> poligono, ma questo tenta di utilizzare i dati nell'immagine per generare il contorno: tutto ciò che voglio è il contorno del bordo dell'immagine.

Sto usando ArcGIS Desktop 10.

Risposte:


33

Se disponi di Analista spaziale , puoi:

  1. Moltiplica il raster per 0 per creare un raster a valore costante utilizzando il calcolatore raster. (assicurati di convertirlo in tipo intero o il passaggio 2 non funzionerà)
  2. Convertire il risultato del passaggio 1 in poligono utilizzando lo strumento Raster in poligono.

Un'altra soluzione:

Se si dispone della licenza di Analista 3D , è possibile utilizzare lo strumento Dominio raster in Analista 3D> Conversione> da raster (tuttavia non ha la funzione regolare)


12

È possibile utilizzare lo strumento Raster Domain da 3D Analyst per creare un poligono con le stesse dimensioni dei dati raster


Benvenuti in GIS SE! Potresti per favore aggiungere riferimenti alla tua risposta? In questo modo sarebbe più solido.
RK,

Lo strumento Raster Domain ha funzionato perfettamente! Crea uno schema o un limite dei dati raster.

1
Un avvertimento su questo strumento: il poligono di delimitazione creato è l'estensione dei dati raster che iniziano e terminano nel CENTRO pixel, non nel bordo esterno dei pixel. L'ho appena provato e ho pensato che restituisse il riquadro di delimitazione esterno del raster, ma quando ingrandisci vedrai che il riquadro di delimitazione inizia al centro del pixel.
fbiles,

Esiste effettivamente un parametro per il metodo IRasterDomainExtractor.ExtractDomain che controlla se utilizza il centro o il bordo esterno dei pixel / celle.
Preston,

Questo è perfetto! Uno strumento e io abbiamo un contorno poligonale del mio raster. Grazie!
user3281667

11

Che dire semplicemente digitalizzandolo? Click-click-click-click fatto.


8
Non sono sicuro del perché questa opzione sia stata votata in negativo. È possibile trovare le coordinate degli angoli dell'estensione e creare vertici su tali coordinate. Può anche essere usato per l'analisi. Se è solo per la visualizzazione, il clic-clic-clic-clic funziona alla grande.
Baltok,

3
Direi che il raster potrebbe avere una forma irregolare e, a seconda della complessità, potrebbe tradursi in un lavoro di digitalizzazione piuttosto noioso
Phil Henley

4
Ma l'OP ha detto che era rettangolare. Mi sembra un lavoro piuttosto semplice. Eseguendo lo zoom in avanti ed essendo accurato, la differenza tra il profilo raster effettivo e il profilo digitalizzato sarebbe trascurabile per qualsiasi applicazione del mondo reale.
Matt

10

È possibile utilizzare lo strumento Costruisci impronta nella casella degli strumenti Gestione dati. Devi creare un set di dati Mosaic dal tuo raster.

Crea un nuovo mosaico in un file geodatabase, aggiungi il tuo raster.

Apri il tuo mosaico in ArcMap ed estrai il footprint.

Questo è quello che vorrei fare.


8

Uso questo semplice script Python, crea una poligonale featureclass con l'estensione di tutto il raster presente in una cartella. Per usarlo, è possibile creare uno strumento in ArcToolbox oppure modificare semplicemente le variabili 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  

può dirci in dettaglio come utilizzare questo codice. Voglio usarlo sul file raster .asc. Le mie immagini sono diverse sottocartelle diverse.
GIS Data Butcher,

1
La risposta di Jeb ha funzionato per me, non ho abbastanza rappresentante per votarlo. @GIS Data Butcher Salva il sorgente completo in un file script.py ed eseguilo da Python Window in ArcMap. È possibile utilizzare il seguente comando su Python Window per eseguire lo script dal file. > execfile (r'd: \ temp \ script.py ')
Assad

perfezionare!! mi chiedo, c'è un modo per lo strumento di leggere anche le sottocartelle?
Raffaello,

@raphael, di sicuro, devi solo implementare lo script python standard os.listdir o os.walk.
Jeb

@jeb sì, ho capito il concetto ... bot Sono molto nuovo in questo e non sono riuscito a farlo funzionare ... puoi dare un po 'di aiuto?
Raffaele,

4

Inoltre, un modo semplice è utilizzare lo strumento Ricodifica in cui è necessario fare clic sul pulsante Classifica e modificare il numero di classi in 1. Fare clic su OK. Ora, il raster di output può essere facilmente convertito utilizzando lo strumento di conversione da Raster a Poligono. ;)


4

Penso che riclassificare e convertire il raster in poligono possa richiedere troppo tempo. Secondo me, il modo più semplice per farlo è:

  • Ottieni maxX, maxY, minX, minY (questo può essere fatto in Python con il comando descrivi)
  • Esegui Crea Fishnet con l'estensione come sopra e il numero di righe / colonne come 1

Se hai molti raster, questo dovrebbe essere fatto in Python e può creare centinaia di impronte in pochi secondi.


0

In ArcCatalog è possibile creare un catalogo raster in un .gdb (Strumenti di gestione dati-> Raster). Unmanaged va bene. Quindi fai clic con il pulsante destro del mouse e carica (se i raster si trovano solo in una cartella, quindi "carica dallo spazio di lavoro". Se carichi il catalogo raster in ArcMap puoi fare clic con il pulsante destro del mouse-> dati-> esporta impronta, come file di forma o classe di entità geografiche. Il file di forma avrà un campo "name" popolato con il nome del raster.

Il catalogo raster mostrerà automaticamente le estensioni, ma dovevo inviarle a qualcuno che non utilizzava ArcGIS.


0

Utilizzare lo strumento "Raster in poligono" nella casella degli strumenti degli strumenti di conversione. Assicurati di deselezionare la casella Semplifica poligoni. Questo creerà esattamente quello che vuoi.


8
Sei sicuro che questo non crei solo un enorme casino di poligoni, uno per ogni serie contigua di pixel di uguale valore nell'immagine originale?
whuber

Puoi sempre aggiungere una dissolvenza dopo questo per ottenere l'estensione poli. Tuttavia, scommetto che la soluzione Python elencata da @jeb è più veloce.
GeoJohn,

0

Lo strumento "Dominio raster" creerà un poligono attorno a un raster di forma irregolare. Credo che richieda una licenza per l'estensione dell'analista 3d.


0

L'uso di ArcCatalog è l'opzione migliore. Crea un set di dati Mosaic dai raster disponibili. Definisci "NO VALUE" nel mosaico per evitare che lo sfondo del raster venga incluso nel poligono. Costruisci impronte usando il metodo radiometrico. Aprire il set di dati Mosaic in ArcGIS ed esportare Footprints nel file shp. Ottimo modo per ottenere i confini del mosaico ...


0

Se si sta tentando di ottenere lo schema di un raster DEM, sarà necessario effettuare le seguenti operazioni

Se disponi di Analista spaziale e Analista 3d, puoi:

  1. moltiplicare il raster per 0 per creare un raster a valore costante utilizzando il calcolatore raster.
  2. Convertire i risultati del passaggio 1 in un numero intero raster utilizzando "INT (strumento)". Questo è necessario per il passaggio successivo.
  3. converti il ​​risultato del passaggio 2 in poligono utilizzando lo strumento Raster in poligono (funziona solo con numeri interi raster).

Ciao Seamster02, benvenuto in GIS Stack Exchange :) Come scritto, questo non è significativamente diverso dalla risposta accettata, gis.stackexchange.com/a/22016/108 .
matt wilkie,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.