¿Obteniendo el límite de la imagen ráster como polígono en ArcGIS Desktop?

28

Tengo una imagen ráster rectangular en ArcGIS Desktop.

¿Cómo puedo producir un polígono que sea solo la extensión de la imagen ráster?

Es decir, quiero tener una capa de polígono con un solo cuadrilátero que es el borde de la imagen.

Intenté simplemente hacer una conversión Ráster-> Polígono, pero esto intenta usar los datos de la imagen para generar el contorno; todo lo que quiero es el contorno del borde de la imagen.

Estoy usando ArcGIS Desktop 10.

robintw
fuente

Respuestas:

33

Si tiene Spatial Analyst , puede:

  1. Multiplique el ráster por 0 para crear un ráster de valor constante utilizando la Calculadora ráster. (asegúrese de convertirlo al tipo entero o el paso 2 no funcionará)
  2. Convierta el resultado del paso 1 a polígono con la herramienta Ráster a polígono.

Otra solución:

Si tiene licencia de 3D Analyst , puede usar la herramienta Dominio ráster en 3D Analyst> Conversión> desde ráster (sin embargo, no tiene la función fluida)

Alex Markov
fuente
12

Puede usar la herramienta Dominio ráster de 3D Analyst para crear un polígono con la misma extensión que sus datos ráster

Andreas
fuente
¡Bienvenido a GIS SE! ¿Podría por favor agregar referencias a su respuesta? De esa manera sería más sólido.
RK
¡La herramienta Raster Domain hizo el trabajo perfectamente! Crea un contorno o límite de los datos ráster.
1
Una advertencia sobre esta herramienta: el polígono delimitador que se crea es la extensión de los datos ráster que comienzan y terminan en el CENTRO de píxeles, no en el borde exterior de los píxeles. Acabo de probarlo y pensé que devolvía el cuadro delimitador exterior del ráster, pero cuando acerque el zoom verá que el cuadro delimitador comienza en el centro de píxeles.
fbiles
En realidad, hay un parámetro para el método IRasterDomainExtractor.ExtractDomain que controla si usa el centro o el borde exterior de los píxeles / celdas.
Preston
¡Esto es perfecto! Una herramienta y tengo un esquema poligonal de mi ráster. ¡Gracias!
user3281667
11

¿Qué hay de simplemente digitalizarlo? Click-click-click-click listo.

Mate
fuente
8
No estoy seguro de por qué esta opción ha sido rechazada. Puede encontrar las coordenadas de las esquinas de extensión y crear vértices en esas coordenadas. Incluso se puede usar para análisis. Si es solo para mostrar, clic-clic-clic-clic funciona muy bien.
Baltok
3
Diría que porque la trama podría tener una forma irregular y, dependiendo de la complejidad, podría resultar en un trabajo de digitalización bastante aburrido
Phil Henley
44
Pero el OP dijo que era rectangular. Me parece un trabajo bastante simple. Al acercar y ser preciso, la diferencia entre el contorno de trama real y el contorno digitalizado sería insignificante para cualquier aplicación del mundo real.
Matt
10

Puede usar la herramienta Construir huella en la Caja de herramientas de administración de datos. Debe crear un dataset de mosaico a partir de su ráster.

Cree un nuevo mosaico en una geodatabase de archivos, agregue su ráster.

Abra su mosaico en ArcMap y extraiga la huella.

Eso es lo que yo haría.

Dom
fuente
8

Utilizo este simple script de Python, crea una clase de entidad poligonal con la extensión de todo el ráster presente en una carpeta. Para usarlo, puede crear una herramienta en ArcToolbox o simplemente cambiar las variables InFolder y 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
fuente
puede decirnos en detalles cómo usar este código. Quiero usarlo en un archivo ráster .asc. Mis imágenes son diferentes subcarpetas diferentes.
GIS Data Butcher
1
La respuesta de jeb ha funcionado para mí, no tengo suficiente representante para votarlo. @GIS Data Butcher Guarde la fuente completa en un archivo script.py y ejecútelo desde Python Window dentro de ArcMap. Puede usar el siguiente comando en la ventana de Python para ejecutar el script desde el archivo. > execfile (r'd: \ temp \ script.py ')
Asad
¡¡Perfecto!! Me pregunto, ¿hay alguna manera de que la herramienta también lea subcarpetas?
Rafael
@raphael, seguro, solo tiene que implementar el estándar python os.listdir u os.walk en el script.
jeb
@jeb sí, entiendo el concepto ... pero soy muy nuevo en esto, y no pude hacerlo funcionar ... ¿puedes ayudarme?
Rafael
4

Además, una manera fácil es utilizar la herramienta Reclasificar, donde debe hacer clic en el botón Clasificar y cambiar el número de clases a 1. Haga clic en Aceptar. Ahora, el ráster de salida se puede convertir fácilmente con la herramienta de conversión Ráster a polígono. ;)

Adrian Croitor
fuente
4

Creo que reclasificar y convertir el ráster a polígono puede llevar demasiado tiempo. En mi opinión, la forma más fácil de hacerlo es:

  • Obtenga maxX, maxY, minX, minY (esto se puede hacer en Python con el comando describe)
  • Ejecute Crear red de pesca con la extensión anterior y el número de filas / columnas como 1

Si tiene muchos rásteres, esto debe hacerse en Python y puede crear cientos de huellas en cuestión de segundos.

Felicia Fitzgerald
fuente
0

En ArcCatalog puede crear un catálogo de ráster en un .gdb (Herramientas de administración de datos-> Ráster). No administrado está bien. Luego haga clic derecho y cargue (si los rásteres se encuentran en una carpeta, "cargue desde el espacio de trabajo". Si carga el catálogo de ráster en ArcMap, puede hacer clic con el botón derecho-> datos-> exportar huella, como un archivo de forma o clase de entidad. El archivo de forma tendrá un campo 'nombre' rellenado con el nombre del ráster.

El Catálogo de ráster mostrará automáticamente las extensiones, pero necesitaba enviar las extensiones a alguien que no estaba usando ArcGIS.

SgtSchultz
fuente
0

Use la herramienta "Ráster a polígono" en la caja de herramientas de herramientas de conversión. Asegúrese de desmarcar la casilla simplificar polígonos. Esto creará exactamente lo que quieres.

Boyle300
fuente
8
¿Estás seguro de que esto no solo crea un gran lío de polígonos, uno para cada conjunto contiguo de píxeles de igual valor en la imagen original?
whuber
Siempre puede agregar una disolución después de esto para obtener la extensión poli. Sin embargo, apuesto a que la solución de Python enumerada por @jeb es más rápida.
GeoJohn
0

La herramienta "Dominio ráster" creará un polígono alrededor de un ráster de forma irregular. Creo que requiere una licencia para la extensión de analista 3d.

RWRogers
fuente
0

Usar ArcCatalog es la mejor opción. Cree un dataset de mosaico a partir de rásteres disponibles. Defina "SIN VALOR" en el mosaico para evitar que el fondo del ráster se incluya en el polígono. Construye huellas usando el método radiométrico. Abra el dataset de mosaico en ArcGIS y exporte Footprints a un archivo shp. Gran manera de obtener los límites del mosaico ...

usuario109590
fuente
0

Si está tratando de obtener el contorno de un ráster DEM, deberá hacer lo siguiente

Si tiene Spatial Analyst y 3d Analyst, puede:

  1. multiplique el ráster por 0 para crear un ráster de valor constante usando la Calculadora ráster.
  2. Convierta los resultados del paso 1 a un entero ráster utilizando la "INT (Herramienta)". Esto es necesario para el siguiente paso.
  3. convierta el resultado del paso 2 a polígono utilizando la herramienta Ráster a polígono (solo funciona con enteros ráster).
seamster02
fuente
Hola Seamster02, bienvenido a GIS Stack Exchange :) Como está escrito, esto no es apreciablemente diferente de la respuesta aceptada, gis.stackexchange.com/a/22016/108 .
Matt Wilkie