Extraire des valeurs en points sans ArcGIS Spatial Analyst?

8

J'ai un DEM raster et plusieurs points. Je veux déterminer l'élévation DEM à chaque point. Hormis l'examen manuel du DEM à chaque point, (cela prend beaucoup de temps avec beaucoup de points), y a-t-il un moyen de le faire sans accéder à l'outil Spatial Analyst Extraire les valeurs en points? J'ai accès à 3d Analyst si cela aide.

Alpheus
la source
Cela peut être utile: gis.stackexchange.com/questions/46893/…
Aaron

Réponses:

6

L' ajout d'informations de surface de l' analyste 3D ajoutera un champ Z à vos données vectorielles avec la valeur des données de la couche raster qui se chevauchent:

Interpole les propriétés d'élévation de surface pour les entités ponctuelles, multipointes et polylignes.

C'est pour la v10, je n'ai pas saisi la version d'ArcGIS que vous utilisiez.

M.Smith
la source
10

Scénario:

import arcpy, traceback, sys, os

pntFile=arcpy.GetParameterAsText(0)
rasters=arcpy.GetParameterAsText(1)

rasters=rasters.split(';')
theFields=[x.name.lower() for x in arcpy.ListFields(pntFile)]
result=arcpy.GetCount_management(pntFile)
nF=int(result.getOutput(0))
p=arcpy.Point()
try:
    def showPyMessage():
        arcpy.AddMessage(str(time.ctime()) + " - " + message)
    for raster in rasters:
                desc=arcpy.Describe(raster)
                theFLD=raster.lower()
                arcpy.AddMessage("Sampling "+theFLD)
                if not(theFLD in theFields):
                        try:arcpy.AddField_management(pntFile, theFLD, "FLOAT")
                        except:
                                aF=raster.split(os.sep)[-1]
                                theFLD=aF.split(".")[0]
                                theFLD="F"+theFLD
                                arcpy.AddField_management(pntFile, theFLD, "FLOAT")
                arcpy.SetProgressor("step", "", 0, nF)
                with arcpy.da.UpdateCursor(pntFile,("SHAPE@XY",theFLD)) as rows:
                        for row in rows:
                                p.X,p.Y=row[0]
                                myArray = arcpy.RasterToNumPyArray(raster,p,1,1,-9999)
                                row[1]=myArray[0,0]
                                rows.updateRow(row)
                                arcpy.SetProgressorPosition()
                        del row,rows
except:
    message = "\n*** PYTHON ERRORS *** "; showPyMessage()
    message = "Python Traceback Info: " + traceback.format_tb(sys.exc_info()[2])[0]; showPyMessage()
    message = "Python Error Info: " +  str(sys.exc_type)+ ": " + str(sys.exc_value) + "\n"; showPyMessage()

Interface:

entrez la description de l'image ici

Paramètres:

entrez la description de l'image ici

pour travailler à partir de mxd. Donnez au (x) raster (s) un nom unique court dans la table des matières. Le script créera le champ du même nom et tentera de le remplir avec des valeurs de cellule.

C'est lent, donc je l'utilise avec moins de 1000 points

FelixIP
la source
Salut, merci pour le script. J'ai essayé de l'exécuter plusieurs fois mais cela donne cette erreur: "ligne 27, dans <module> pour ligne en lignes: mar 17 mai 12:56:55 2016 - Info erreur Python: <type 'exceptions.RuntimeError' >: Une colonne a été spécifiée qui n'existe pas. " des idées? Merci.
Matt
Comment appelez-vous ce raster dans la table des matières mxd?
FelixIP
J'ai essayé DEMH et DEMH_copy comme noms de trame.
Matt
Pourriez-vous voir le champ demh dans la table de fichiers de formes après un crash?
FelixIP
le champ "demh_copy_tif" est ajouté à la table attributaire mais avec des valeurs NULL.
Matt
4

Vous pouvez le faire avec l' environnement de modélisation géospatiale gratuit de Hawthorne Beyer (GME, anciennement appelé Hawth's Tools). Il y a un outil, Intersecter les points avec raster , qui, comme son nom l'indique, agit comme l'outil Intersecter dans ArcGIS mais vous permet d'intersecter une couche de points avec un raster, comme l'outil Extraire les valeurs en points. Vous pouvez également appliquer une requête SQL à votre couche de points pour extraire uniquement les valeurs raster d'un sous-ensemble de points. Vous devrez installer ou mettre à niveau R sur votre PC, ainsi que GME (il repose sur ArcGIS mais il peut fonctionner indépendamment d'une session ArcGIS).

Dan C
la source
À ce stade, vous pouvez également utiliser R. Y compris l'ajout de bibliothèques et la lecture de données, cela ne prend que 4 lignes de code pour cela et vous pouvez interroger les données à la volée à l'aide d'une syntaxe d'index.
Jeffrey Evans
1

Une autre option pour extraire des valeurs raster pour pointer le fichier de formes consiste à utiliser QGIS qui est un logiciel open source gratuit. À partir du gestionnaire de plug-ins dans QGIS, téléchargez Plugin: outil d'échantillonnage de points , qui peut extraire plusieurs valeurs raster vers des fichiers de formes de points similaires à Extraire des valeurs multiples en points qui nécessite l'extension Spatial Analyst dans ArcGIS.

L'outil fonctionne parfaitement si la projection des données de raster (s) et le fichier de formes sont identiques. L'utilisation de différentes projections pour le ou les raster (s) et les données de fichier de formes créera un fichier de formes avec des colonnes vides de valeurs de raster.

ahmadhanb
la source