Obtenir la limite de l'image raster en tant que polygone dans ArcGIS Desktop?

28

J'ai une image raster rectangulaire dans ArcGIS Desktop.

Comment puis-je produire un polygone qui est juste l'étendue de l'image raster?

Autrement dit, je veux avoir une couche polygonale avec un seul quadrilatère qui est le bord de l'image.

J'ai essayé simplement de faire une conversion Raster-> Polygon, mais cela essaie d'utiliser les données de l'image pour générer le contour - tout ce que je veux, c'est le contour du bord de l'image.

J'utilise ArcGIS Desktop 10.

robintw
la source

Réponses:

33

Si vous avez Spatial Analyst, vous pouvez:

  1. Multipliez le raster par 0 pour créer un raster à valeur constante à l'aide de la calculatrice raster. (assurez-vous de le convertir en type entier ou l'étape 2 ne fonctionnera pas)
  2. Convertissez le résultat de l'étape 1 en polygone à l'aide de l'outil Raster en polygone.

Une autre solution:

Si vous disposez d' une licence 3D Analyst, vous pouvez utiliser l' outil Raster Domain sous 3D Analyst> Conversion> à partir du raster (mais il n'a pas la fonction lisse)

Alex Markov
la source
12

Vous pouvez utiliser l'outil Domaine raster de 3D Analyst pour créer un polygone avec la même étendue que vos données raster

Andreas
la source
Bienvenue dans GIS SE! Pourriez-vous ajouter des références à votre réponse? De cette façon, ce serait plus solide.
RK
L'outil Raster Domain a parfaitement fonctionné! Crée un contour ou une limite des données raster.
1
Un mot d'avertissement à propos de cet outil - le polygone de délimitation créé est l'étendue de vos données raster commençant et se terminant au pixel CENTRE, pas le bord extérieur des pixels. Je viens de l'essayer et j'ai pensé qu'il renvoyait la zone de délimitation extérieure du raster, mais lorsque vous zoomez, vous verrez que la zone de délimitation commence au centre des pixels.
fbiles
Il existe en fait un paramètre pour la méthode IRasterDomainExtractor.ExtractDomain qui contrôle si elle utilise le centre ou le bord extérieur des pixels / cellules.
Preston
C'est parfait! Un outil et j'ai un contour polygonal de mon raster. Merci!
user3281667
11

Qu'en est-il simplement de le numériser? Cliquez-cliquez-cliquez-cliquez-cliquez sur terminé.

Mat
la source
8
Je ne sais pas vraiment pourquoi cette option a été rejetée. Vous pouvez trouver les coordonnées des coins d'étendue et créer des sommets à ces coordonnées. Il peut même être utilisé pour l'analyse. Si c'est uniquement pour l'affichage, cliquer-cliquer-cliquer-cliquer fonctionne très bien.
Baltok
3
Je dirais que le raster peut avoir une forme irrégulière et, en fonction de la complexité, entraîner un travail de numérisation assez fastidieux
Phil Henley
4
Mais l'OP a dit que c'était rectangulaire. Cela me semble un travail assez simple. En zoomant et en étant précis, la différence entre le contour raster réel et le contour numérisé serait négligeable pour toute application réelle.
Matt
10

Vous pouvez utiliser l'outil Créer une empreinte dans la boîte à outils de gestion des données. Vous devez créer un jeu de données mosaïque à partir de votre raster.

Créez une nouvelle mosaïque dans une géodatabase fichier, ajoutez votre raster.

Ouvrez votre mosaïque dans ArcMap et extrayez l'empreinte.

Voilà ce que je ferais.

Dom
la source
8

J'utilise ce simple script python, il crée une classe de polygones avec l'étendue de tout le raster présent dans un dossier. Pour l'utiliser, vous pouvez créer un outil dans ArcToolbox ou simplement changer les variables InFolder et 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
la source
peut nous expliquer en détail comment utiliser ce code. Je veux l'utiliser sur un fichier raster .asc. Mes images sont différents sous-dossier différent.?
GIS Data Butcher
1
La réponse de jeb a fonctionné pour moi, je n'ai pas suffisamment de représentants pour voter. @GIS Data Butcher Enregistrez la source complète dans un fichier script.py et exécutez-la à partir de la fenêtre Python dans ArcMap. Vous pouvez utiliser la commande suivante sur la fenêtre Python pour exécuter le script à partir du fichier. > execfile (r'd: \ temp \ script.py ')
Asad
parfait!! Je me demande, existe-t-il également un moyen de lire les sous-dossiers de l'outil?
raphael
@raphael, pour sûr, il vous suffit d'implémenter le python standard os.listdir ou os.walk en script.
jeb
@jeb oui, je comprends le concept ... bot, je suis très nouveau dans ce domaine, et je n'ai pas pu le faire fonctionner ... pouvez-vous m'aider?
raphael
4

En outre, un moyen simple consiste à utiliser l'outil Reclassifier où vous devez cliquer sur le bouton Classifier et modifier le nombre de classes à 1. Cliquez sur OK. Désormais, le raster en sortie peut être facilement converti à l'aide de l'outil de conversion Raster en polygone. ;)

Adrian Croitor
la source
4

Je pense que reclassifier et convertir le raster en polygone peut prendre beaucoup trop de temps. À mon avis, la façon la plus simple de le faire est:

  • Obtenez maxX, maxY, minX, minY (cela peut être fait en Python avec la commande describe)
  • Exécutez Create Fishnet avec l'étendue comme ci-dessus et le nombre de lignes / colonnes comme 1

Si vous avez beaucoup de rasters, cela devrait être fait en Python et peut créer des centaines d'empreintes en quelques secondes.

Felicia Fitzgerald
la source
0

Dans ArcCatalog, vous pouvez créer un catalogue d'images dans un .gdb (Outils de gestion des données-> Raster). Non géré est bien. Cliquez ensuite avec le bouton droit de la souris et chargez-le (si les rasters sont simplement assis dans un dossier, puis "chargez depuis l'espace de travail". Si vous chargez le catalogue d'images dans ArcMap, vous pouvez cliquer avec le bouton droit sur>> données -> exporter l'empreinte, sous forme de fichier de forme ou de classe d'entités. Le fichier de forme aura un champ «nom» rempli avec le nom du raster.

Le catalogue d'images affichera automatiquement les extensions, mais je devais envoyer les extensions à quelqu'un qui n'utilisait pas ArcGIS.

SgtSchultz
la source
0

Utilisez l'outil "Raster en polygone" dans la boîte à outils des outils de conversion. Assurez-vous de décocher la case simplifier les polygones. Cela créera exactement ce que vous voulez.

Boyle300
la source
8
Êtes-vous sûr que cela ne crée pas seulement un énorme gâchis de polygones, un pour chaque ensemble contigu de pixels de valeur égale dans l'image d'origine?
whuber
Vous pouvez toujours ajouter un fondu après cela pour obtenir l'étendue poly. Cependant, je parie que la solution python répertoriée par @jeb est plus rapide.
GeoJohn
0

L'outil "Raster Domain" créera un polygone autour d'un raster de forme irrégulière. Je crois que cela nécessite une licence pour l'extension d'analyste 3D.

RWRogers
la source
0

L'utilisation d'ArcCatalog est la meilleure option. Créez une mosaïque à partir des rasters disponibles. Définissez "AUCUNE VALEUR" dans la mosaïque pour éviter que l'arrière-plan du raster ne soit inclus dans le polygone. Créez des empreintes à l'aide de la méthode radiométrique. Ouvrez la mosaïque dans ArcGIS et exportez les empreintes dans un fichier shp. Excellent moyen d'obtenir les limites de la mosaïque ...

user109590
la source
0

Si vous essayez d'obtenir le contour d'un raster DEM, vous devrez effectuer les opérations suivantes

Si vous avez Spatial Analyst et 3d Analyst, vous pouvez:

  1. multipliez le raster par 0 pour créer un raster à valeur constante à l'aide de la calculatrice raster.
  2. Convertissez les résultats de l'étape 1 en un entier raster à l'aide de "INT (Tool)". Ceci est nécessaire pour l'étape suivante.
  3. convertir le résultat de l'étape 2 en polygone à l'aide de l'outil Raster en polygone (ne fonctionne qu'avec des entiers raster).
seamster02
la source
Salut Seamster02, bienvenue sur GIS Stack Exchange :) Comme écrit, cela n'est pas sensiblement différent de la réponse acceptée, gis.stackexchange.com/a/22016/108 .
matt wilkie