考虑阿拉斯加的NLCD2001土地覆盖数据集(下载链接)。我需要对该数据集进行重新分类,以便仅保留值41、42和43的像素;所有其他像素值应变为NoData(如果需要,则为0)。
这似乎是一项简单的任务,只需要调用一次“重新分类”工具即可。不幸的是,每次调用都会导致模糊而无益的错误消息:
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)
如何对该栅格数据集进行重新分类?我正在使用启用了Spatial Analyst扩展的ArcCatalog 10.0,Build 4000。
reclassify
应该是不得已的做法,因为它的范围如此广泛,以至于它使用的效率可能比重分类容易用算术或逻辑表达的效率低。在当前情况下,重新分类的标准非常简单,您应该首先尝试使用Con
甚至是直接的算术运算(因为它们很快)。例如,"grid" * ("grid" >= 41) * ("grid" <= 43)
应该这样做。RAM不应成为问题-Spatial Analyst会自动打开其栅格I / O的窗口,这些是本地操作。
Inlist
是一个不错的解决方案(+1)。con
在操作过程中,我能够使用和监视RAM使用情况。它从未超过180 MB,仅略大于用于启动ArcMap的RAM。ArcGIS中的切片是自动的 -甚至不需要控制它(除非您正在编程C / Fortran界面)。似乎对RAM的限制并不在意。
con
在这种情况下也为我工作"Value" >= 41 AND "Value" <= 43
。我本来会采用这种解决方案,但是我不确定将来是否会关注其他栅格值。显然,我可以OR
在where子句中添加一个,但是随后它变得越来越复杂。InList
在可读性和可维护性方面,似乎是最直接的解决方案。