Siehe diesen Link für weitere Details.
Das Problem:
Ich möchte ein kontinuierliches Raster (eines ohne Attributtabelle) Zelle für Zelle durchlaufen und den Wert der Zelle abrufen. Ich möchte diese Werte übernehmen und Bedingungen für sie ausführen und die unten beschriebenen Schritte der Kartenalgebra emulieren, ohne den Raster-Rechner tatsächlich zu verwenden.
Auf Anfrage von Kommentaren unten habe ich Details hinzugefügt, die Hintergrundinformationen zum Problem liefern und die Notwendigkeit der Implementierung einer Methode als solche im Abschnitt "Die erforderliche Analyse" begründen.
Die unten vorgeschlagene Analyse ist zwar für mein Problem relevant, muss aber nicht in eine Antwort umgesetzt werden. Der Umfang der Frage bezieht sich nur auf die Iteration durch ein kontinuierliches Raster zum Abrufen / Festlegen der Zellenwerte.
Die Analyse benötigt:
Wenn eine der folgenden Bedingungen erfüllt ist, geben Sie der Ausgabezelle den Wert 1. Geben Sie der Ausgabezelle nur dann den Wert 0, wenn keine der Bedingungen erfüllt ist.
Bedingung 1: Wenn der Zellenwert größer ist als die oberen und unteren Zellen, geben Sie den Wert 1 an:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Wo die Kerneldatei so aussieht:
3 3
0 1 0
0 0 0
0 1 0
Bedingung 2: Wenn der Zellenwert größer als der Wert der linken und rechten Zelle ist, geben Sie den Wert 1 an:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Wo die Kerneldatei so aussieht:
3 3
0 0 0
1 0 1
0 0 0
Bedingung 3: Wenn der Zellenwert größer als die oberen und unteren rechten Zellen ist, geben Sie den Wert 1 an:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Wo die Kerneldatei so aussieht:
3 3
1 0 0
0 0 0
0 0 1
Bedingung 4: Wenn der Zellenwert größer ist als die unteren linken und oberen rechten Zellen, geben Sie den Wert 1 an:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Wo die Kerneldatei so aussieht:
3 3
0 0 1
0 0 0
1 0 0
Bedingung 5: Wenn jede einer der benachbarten Zellen , die einen Wert gleich die mittleren Zelle hat, gibt die Ausgabe - Raster einen Wert von 1 ( unter Verwendung von fokaler Varietät mit zwei nächsten Nachbarschafts Berechnungen )
Warum nicht Kartenalgebra verwenden?
Im Folgenden wurde festgestellt, dass mein Problem mithilfe der Kartenalgebra gelöst werden kann. Wie oben dargestellt, handelt es sich jedoch um insgesamt sechs Raster-Berechnungen und eine, um alle erstellten Raster zusammenzuführen. Es scheint mir, dass es viel effizienter ist, Zelle für Zelle alle Vergleiche gleichzeitig durchzuführen, anstatt jede einzelne sieben Mal zu durchlaufen und eine ganze Menge Speicher für die Erstellung von sieben Rastern zu verwenden.
Wie soll das Problem angegriffen werden?
Der obige Link rät zur Verwendung der IPixelBlock-Schnittstelle. Aus der ESRI-Dokumentation geht jedoch nicht hervor, ob Sie tatsächlich über IPixelBlock auf einen einzelnen Zellenwert zugreifen oder ob Sie über die Größe des von Ihnen festgelegten IPixelBlocks auf mehrere Zellenwerte zugreifen. Eine gute Antwort sollte eine Methode für den Zugriff auf die Zellenwerte eines kontinuierlichen Rasters vorschlagen und eine Erklärung der Methodik hinter dem Code liefern, wenn nicht offensichtlich.
In Summe:
Was ist die beste Methode zum Durchlaufen jeder Zelle in einem CONTINUOUS-Raster (das keine Attributtabelle enthält ), um auf ihre Zellenwerte zuzugreifen?
Eine gute Antwort muss nicht die oben beschriebenen Analyseschritte implementieren, sondern muss nur eine Methode zum Zugreifen auf Zellenwerte eines Rasters bereitstellen.