Hãy xem xét bộ dữ liệu NLCD2001 Land Cover cho Alaska ( liên kết tải xuống ). Tôi cần phân loại lại tập dữ liệu này để chỉ các pixel có giá trị 41, 42 và 43 được giữ nguyên; tất cả các giá trị pixel khác sẽ trở thành NoData (hoặc 0, nếu cần).
Đây có vẻ như là một nhiệm vụ đơn giản, chỉ yêu cầu một cuộc gọi đến công cụ Reclassify. Thật không may, mọi cuộc gọi đều dẫn đến một thông báo lỗi mơ hồ và không có ích:
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)
Làm thế nào tôi có thể đi phân loại lại bộ dữ liệu raster này? Tôi đang sử dụng ArcCatalog 10.0, Build 4000, với tiện ích mở rộng Spatial Analyst được bật.
reclassify
nên là giải pháp cuối cùng, bởi vì nó có phạm vi chung đến mức nó có thể sử dụng các phương pháp kém hiệu quả hơn có thể đạt được khi phân loại lại dễ dàng diễn đạt một cách hợp lý hoặc hợp lý. Trong trường hợp hiện tại, tiêu chí phân loại lại rất đơn giản, trước tiên bạn nên thử nó với Con
hoặc thậm chí các thao tác số học thẳng (vì chúng nhanh). Ví dụ, "grid" * ("grid" >= 41) * ("grid" <= 43)
nên làm điều đó. RAM không phải là một vấn đề - Nhà phân tích không gian tự động cửa sổ I / O raster của nó và đây là những hoạt động cục bộ.
Inlist
là một giải pháp tốt đẹp (+1). Tôi đã có thể sử dụng con
và theo dõi việc sử dụng RAM trong quá trình hoạt động. Nó không bao giờ vượt quá 180 MB, tức là lớn hơn RAM được sử dụng chỉ để khởi chạy ArcMap. Việc ốp lát trong ArcGIS là tự động - thậm chí bạn không được điều khiển nó (trừ khi bạn đang lập trình với giao diện C / Fortran). Có vẻ như các hạn chế RAM là ít quan tâm.
con
làm việc cho tôi là tốt, với điều kiện "Value" >= 41 AND "Value" <= 43
. Tôi đã đi với giải pháp này, nhưng tôi không chắc liệu các giá trị raster bổ sung sẽ được quan tâm trong tương lai hay không. Rõ ràng tôi có thể thêm một OR
vào mệnh đề where, nhưng sau đó nó bắt đầu trở nên phức tạp hơn. InList
dường như là giải pháp đơn giản nhất liên quan đến khả năng đọc và bảo trì.