¿Extraer valores a puntos sin ArcGIS Spatial Analyst?

8

Tengo un DEM de trama y varios puntos. Quiero determinar la elevación DEM en cada punto. Además de examinar manualmente el DEM en cada punto, (consume mucho tiempo con muchos puntos), ¿hay alguna forma de hacerlo sin acceso a la herramienta Spatial Analyst Extract Values ​​to Points? Tengo acceso a 3d Analyst si eso ayuda.

Alfeo
fuente
Esto puede ser útil: gis.stackexchange.com/questions/46893/…
Aaron

Respuestas:

6

Agregar información de superficie del analista 3D agregará un campo Z a sus datos vectoriales con el valor de datos de la capa ráster superpuesta:

Interpola propiedades de elevación de superficie para entidades de punto, multipunto y polilínea.

Eso es para v10, no entendí qué versión de ArcGIS estaba usando.

M.Smith
fuente
10

Guión:

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()

Interfaz:

ingrese la descripción de la imagen aquí

Parámetros:

ingrese la descripción de la imagen aquí

para trabajar desde mxd. Dé a los rásteres un nombre único corto en la tabla de contenido. El script creará el mismo campo de nombre e intentará rellenarlo con valores de celda.

Es lento, así que lo uso con menos de 1000 puntos.

FelixIP
fuente
Hola, gracias por el guion. Traté de ejecutarlo un par de veces, pero me da este error: "línea 27, en <module> para fila en filas: martes 17 de mayo 12:56:55 2016 - Información de error de Python: <tipo 'excepciones'. Tiempo de ejecución ' >: Se especificó una columna que no existe ". ¿algunas ideas? Gracias.
Matt
¿Cómo se llama este ráster en la tabla de contenido mxd?
FelixIP
Intenté DEMH y DEMH_copy como nombres de trama.
Matt
¿Podría ver el campo demh en la tabla de shapefile después del bloqueo?
FelixIP
el campo "demh_copy_tif" se agrega a la tabla de atributos pero con valores NULL.
Matt
4

Puede hacerlo con el entorno de modelado geoespacial gratuito de Hawthorne Beyer (GME, anteriormente conocido como Hawth's Tools). Hay una herramienta allí, Intersect Points With Raster , que como su nombre lo indica, actúa como la herramienta Intersect en ArcGIS pero le permite intersectar una capa de puntos con un ráster, como la herramienta Extraer valores a puntos. También puede aplicar una consulta SQL a su capa de puntos para extraer solo valores ráster para un subconjunto de puntos. Necesitará instalar o actualizar R en su PC y GME también (se basa en ArcGIS pero puede ejecutarse independientemente de una sesión de ArcGIS).

Dan C
fuente
En este punto, también puede usar R. Incluyendo agregar bibliotecas y leer datos, solo se necesitan alrededor de 4 líneas de código para hacer esto y puede consultar los datos sobre la marcha utilizando una sintaxis de índice.
Jeffrey Evans
1

Otra opción para extraer valores ráster para señalar shapefile es usar QGIS, que es un software gratuito de código abierto. Desde el administrador de complementos en QGIS, descargue Complemento: herramienta de muestreo de puntos , que puede extraer múltiples valores de ráster a un archivo de forma de puntos similar a Extraer valores múltiples a puntos que requiere la extensión de Spatial Analyst en ArcGIS.

La herramienta funciona perfectamente si la proyección de los datos de ráster (s) y el archivo de forma son iguales. Trabajar con diferentes proyecciones para los datos ráster y ráster creará un archivo shape con columnas vacías de valores ráster.

ahmadhanb
fuente