Betrachten Sie den NLCD2001 Land Cover-Datensatz für Alaska ( Download-Link ). Ich muss diesen Datensatz neu klassifizieren, damit nur Pixel mit den Werten 41, 42 und 43 erhalten bleiben. Alle anderen Pixelwerte sollten NoData werden (oder 0, falls erforderlich).
Dies scheint eine einfache Aufgabe zu sein, für die nur ein Aufruf des Reclassify-Tools erforderlich ist. Leider führt jeder Anruf zu einer vagen und nicht hilfreichen Fehlermeldung:
Executing: Reclassify "D:\ak_nlcd_2001_land_cover_3-13-08_se5.img" Value "0 40 0;41 41;42 42;43 43;44 255 0;NODATA 0" "D:\alaska_reclassified.tif" DATA
Start Time: Thu Jan 03 09:23:13 2013
ERROR 999998: Unexpected Error.
Failed to execute (Reclassify).
Failed at Thu Jan 03 09:23:13 2013 (Elapsed Time: 0.00 seconds)
Wie kann ich dieses Raster-Dataset neu klassifizieren? Ich verwende ArcCatalog 10.0, Build 4000, mit aktivierter Spatial Analyst-Erweiterung.
reclassify
sollte dies ein letzter Ausweg sein, da der Umfang so allgemein ist, dass wahrscheinlich Methoden verwendet werden, die weniger effizient sind als sie erhalten werden können, wenn die Neuklassifizierung leicht arithmetisch oder logisch auszudrücken ist. Im vorliegenden Fall ist das Kriterium für die Neuklassifizierung so einfach, dass Sie es zuerst mit Con
oder sogar mit geraden arithmetischen Operationen versuchen sollten (weil sie schnell sind). Zum Beispiel "grid" * ("grid" >= 41) * ("grid" <= 43)
sollte es tun. RAM sollte kein Problem sein - Spatial Analyst Windows automatisch seine Raster-E / A und dies sind lokale Operationen.
Inlist
ist eine schöne Lösung (+1). Ich konnte con
die RAM-Nutzung während des Vorgangs nutzen und überwachen. Es hat 180 MB nie überschritten, was kaum mehr ist als der RAM, der nur zum Starten von ArcMap verwendet wurde. Das Kacheln in ArcGIS erfolgt automatisch - Sie können es nicht einmal steuern (es sei denn, Sie programmieren auf die C / Fortran-Oberfläche). Es scheint, dass RAM-Einschränkungen von geringer Bedeutung sind.
con
arbeitete auch für mich, mit der Bedingung "Value" >= 41 AND "Value" <= 43
. Ich hätte mich für diese Lösung entschieden, bin mir aber nicht sicher, ob zusätzliche Rasterwerte in Zukunft von Interesse sein werden. Natürlich könnte ich OR
der where-Klausel eine hinzufügen , aber dann wird es komplizierter. InList
scheint die einfachste Lösung in Bezug auf Lesbarkeit und Wartbarkeit zu sein.