Ich habe ein Strömungsakkumulationsgitter und ein Shapefile mit Einzugsgebieten. Jetzt möchte ich einige Berechnungen an ihnen durchführen, damit ich Daten aus Zellen im Raster neben bestimmten Einzugsgebieten extrahieren kann.
In diesem Prozess versuche ich, Extract by Mask für mein Raster mit einem der Einzugsgebietspolygone als Maske zu verwenden (später in einer Schleife, aber jetzt muss es nur noch einmal funktionieren).
Das Problem ist, dass das extrahierte Raster im Vergleich zum ursprünglichen Raster und zum Maskierungspolygon um eine halbe Zelle nach links verschoben ist. Dies bringt den Rest meines Prozesses durcheinander, da ich versuche, das Raster in Punkte umzuwandeln und später mit anderen Polygonen zu schneiden. Und wenn das extrahierte Raster nicht das ursprüngliche überlappt, erhalte ich nicht das richtige Polygon.
Das ursprüngliche Raster und die Polygone werden perfekt ausgerichtet, da die Polygone aus dem Raster erstellt werden. Ich habe versucht zu überprüfen, ob sich die Projektionen irgendwie geändert haben, kann aber keine finden. Ich habe auch versucht, in neuen ArcMap-Dokumenten alles mehrmals neu zu starten (dies löst das Problem überraschend oft) und die Tools über die Python-Eingabeaufforderung auszuführen, anstatt mein Skript aufzurufen. Ich habe sogar versucht, das Werkzeug "Nach Maske extrahieren" aus der Toolbox auszuführen, mit demselben Ergebnis.
Dies ist der (sehr einfache) Code, den ich in der Python-Eingabeaufforderung in ArcMap verwende:
inpgs = r'C:\GIS\Catchm_ex.shp'
flowacc = r'C:\GIS\flowacc'
arcpy.MakeFeatureLayer_management(inpgs, 'currentMask', '"HydroID" = 269634')
outRaster = arcpy.sa.ExtractByMask(flowacc, 'currentMask')
Ich habe einige Beispieldateien hier
Ich verwende Windows 7, ArcInfo 10.0 und Python 2.6.
Ich habe jetzt Extract by Polygon ausprobiert, und das scheint gut zu funktionieren. Funktioniert nur mein Computer in ExtractByMask nicht richtig? Der einzige Nachteil ist, dass ich Probleme mit der Verwendung dieser Funktion in meinem Skript habe, da ich nicht herausfinden kann, wie ich die Koordinaten meines Maskierungspolygons erhalte (nur 9 Zellen abdecken, mit einem Punkt in der Mitte, wenn dies hilft).
Ich habe es jetzt mit Extrahieren nach Polygon unter Verwendung des folgenden Codes (geändert von Esris Support-Seiten ) zum Laufen gebracht . Leider löst dies mein Problem nicht. Es sieht so aus, als ob die Ausgabe (von diesem Werkzeug sowie vom Extrahieren nach Maske) manchmal um eine halbe Zelle nach links verschoben wird und manchmal nicht. Meistens ist es das, aber gelegentlich befindet es sich tatsächlich dort, wo es sein sollte.
Jetzt bin ich wirklich verwirrt. Passiert mir das gerade auf meinem Computer? Wenn jemand das Gleiche erlebt hat, schreibe bitte einen Kommentar, damit ich weiß, dass ich nicht ganz alleine bin :) Für mich scheint dieses Problem ein zu großes Problem zu sein, um ein Fehler zu sein, weshalb ich ein Problem habe dass ich mich auf dem Weg geschaffen habe.
Irgendwelche Ideen, wie man das vermeiden kann?
def ReadPoints(infc):
try:
import arcpy, numpy
except ImportError:
sys.exit('Unable to import arcpy')
# Identify the geometry field
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName
points = []
# Create search cursor
rows = arcpy.SearchCursor(infc)
# Enter for loop for each feature/row
for row in rows:
# Create the geometry object
feat = row.getValue(shapefieldname)
partnum = 0
# Step through each part of the feature
for part in feat:
# Step through each vertex in the feature
for pnt in feat.getPart(partnum):
if pnt:
points.append([int(pnt.X), int(pnt.Y)])
pt = numpy.array(points)
pts = []
for i in range(len(pt)):
t = pt[i]
pts.append(arcpy.Point(t[0],t[1]))
return pts
Stellen Sie in Ihren Rasterumgebungen das Snap-Raster so ein, dass es mit Ihrem Eingabe-Raster (dem zu extrahierenden) übereinstimmt. Dadurch wird ein Verschieben vermieden.
quelle