Extrahieren von Werten zu Punkten ohne ArcGIS Spatial Analyst?


8

Ich habe ein Raster-DEM und mehrere Punkte. Ich möchte die DEM-Höhe an jedem Punkt bestimmen. Gibt es eine andere Möglichkeit, als das DEM an jedem Punkt manuell zu untersuchen (sehr zeitaufwändig mit vielen Punkten), ohne Zugriff auf das Tool Spatial Analyst Extract Values ​​to Points? Ich habe Zugriff auf 3d Analyst, wenn das hilft.


Antworten:


6

Oberflächeninformationen des 3D-Analysten fügen Ihren Vektordaten ein Z-Feld mit dem Datenwert aus der überlappenden Rasterebene hinzu:

Interpoliert Oberflächenhöheneigenschaften für Punkt-, Mehrpunkt- und Polylinien-Features.

Das ist für Version 10, ich habe nicht verstanden, welche Version von ArcGIS Sie verwendet haben.


10

Skript:

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

Schnittstelle:

Geben Sie hier die Bildbeschreibung ein

Parameter:

Geben Sie hier die Bildbeschreibung ein

von mxd arbeiten. Geben Sie dem Raster einen kurzen eindeutigen Namen im Inhaltsverzeichnis. Das Skript erstellt das gleiche Namensfeld und versucht, es mit Zellenwerten zu füllen.

Es ist langsam, daher benutze ich es mit weniger als 1000 Punkten


Hallo, danke für das Skript. Ich habe ein paar Mal versucht, es auszuführen, aber es gibt diesen Fehler: "Zeile 27, in <Modul> für Zeile in Zeilen: Di 17. Mai 12:56:55 2016 - Python-Fehlerinfo: <Typ 'Ausnahmen.RuntimeError' >: Es wurde eine Spalte angegeben, die nicht vorhanden ist. " irgendwelche Ideen? Vielen Dank.
Matt

Wie nennt man dieses Raster im Inhaltsverzeichnis von mxd?
FelixIP

Ich habe DEMH und DEMH_copy als Rasternamen ausprobiert.
Matt

Könnten Sie nach dem Absturz Felddemh in der Shapefile-Tabelle sehen?
FelixIP

Das Feld "demh_copy_tif" wird der Attributtabelle hinzugefügt, jedoch mit NULL-Werten.
Matt

4

Sie können dies mit Hawthorne Beyers kostenloser Geospatial Modeling Environment (GME, früher bekannt als Hawth's Tools) tun. Dort befindet sich das Werkzeug " Punkte mit Raster schneiden" , das sich, wie der Name schon sagt, wie das Werkzeug "Schnitt" in ArcGIS verhält, es Ihnen jedoch ermöglicht, eine Punktebene mit einem Raster zu schneiden, wie das Werkzeug "Werte in Punkte extrahieren". Sie können auch eine SQL-Abfrage auf Ihre Punktebene anwenden, um nur Rasterwerte für eine Teilmenge von Punkten zu extrahieren. Sie müssen R auf Ihrem PC und GME installieren oder aktualisieren (es basiert auf ArcGIS, kann jedoch unabhängig von einer ArcGIS-Sitzung ausgeführt werden).


An dieser Stelle können Sie auch R verwenden. Dazu gehören das Hinzufügen von Bibliotheken und das Lesen von Daten. Dazu sind nur etwa 4 Codezeilen erforderlich, und Sie können die Daten im laufenden Betrieb mithilfe einer Indexsyntax abfragen.
Jeffrey Evans

1

Eine weitere Option zum Extrahieren von Rasterwerten in Punkt-Shapefiles ist die Verwendung von QGIS, einer kostenlosen Open-Source-Software. Laden Sie vom Plugin-Manager in QGIS das Plugin herunter : Tool zur Punktabtastung, mit dem mehrere Rasterwerte in ein Punkt-Shapefile extrahiert werden können, ähnlich wie beim Extrahieren mehrerer Werte in Punkte, für das die Erweiterung Spatial Analyst in ArcGIS erforderlich ist.

Das Werkzeug funktioniert einwandfrei, wenn die Projektion der Rasterdaten und des Shapefiles identisch sind. Wenn Sie mit verschiedenen Projektionen für die Raster- und Shapefile-Daten arbeiten, wird ein Shapefile mit leeren Spalten mit Rasterwerten erstellt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.