Raster durch Maskenausgabe extrahieren überlappt Maske nicht vollständig?


8

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

Antworten:



1

Ist es möglich, das gesamte Bild in Punkte umzuwandeln und dann die Punkte basierend auf Schnittpunkten zwischen Polygon- und Punktebenen auszuwählen? Ich weiß, dass dies keinen Einblick in seltsame Ergebnisse gibt, die Sie erhalten, aber es könnte eine nützliche "Umgehung" sein.


Ja, das könnte ich machen. Das einzige Problem ist, dass das Raster etwas zu groß ist, sodass die Berechnung einige Zeit in Anspruch nimmt. Ich könnte das trotzdem versuchen, im Gegensatz dazu, dass es überhaupt nicht funktioniert. Danke für deinen Beitrag!
Martin

Sie sind sich nicht sicher, ob dies hilfreich ist, aber Sie können Symbologie importieren. Vielleicht können Sie die Symbologie für eine festlegen und sie dann in alle anderen importieren. Haben Sie sich das Bildanalysefenster angesehen, es enthält viele Funktionen, die möglicherweise hilfreich sind. Ziehen Sie auch in Betracht, ein Mosaik-Dataset zu erstellen, wenn die Bilder groß sind. Mit einem Mosaik können Sie Funktionen hinzufügen, die die visuelle Anzeige verbessern können. hoffe das hilft :)
dango

Ich habe vorher nicht viel mit Bildanalyse gearbeitet, aber jetzt muss ich es vielleicht versuchen. Ich melde mich zurück, wenn mich das irgendwohin bringen kann :)
Martin

1

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.

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.