Розгляньте набір даних NLCD2001 Land Cover для Аляски ( посилання для завантаження ). Мені потрібно перекласифікувати цей набір даних, щоб збереглися лише пікселі значення 41, 42 та 43; всі інші значення пікселів повинні стати NoData (або 0, якщо необхідно).
Це здається простим завданням, вимагає лише одного дзвінка до інструменту Reclassify. На жаль, кожен дзвінок призводить до розпливчастого і непотрібного повідомлення про помилку:
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)
Як я можу перейти до перекласифікації цього растрового набору даних? Я використовую ArcCatalog 10.0, Build 4000 з увімкненим розширенням Spatial Analyst.
reclassify
має бути в крайньому випадку, оскільки воно є настільки загальним за обсягом, що воно, ймовірно, використовує методи, які менш ефективні, ніж їх можна отримати, коли рекласифікацію легко виразити арифметично або логічно. У цьому випадку критерій перекласифікації настільки простий, що вам слід спершу спробувати його Con
чи навіть прямі арифметичні операції (адже вони швидкі). Наприклад, "grid" * ("grid" >= 41) * ("grid" <= 43)
слід це зробити. Оперативна пам’ять не повинна бути проблемою - просторовий аналітик автоматично відкриває свій растровий ввід / вивід, і це локальні операції.
Inlist
це приємне рішення (+1). Мені вдалося використовувати con
та контролювати використання оперативної пам’яті під час роботи. Він ніколи не перевищував 180 Мб, що ледве перевищує оперативну пам'ять, що використовується лише для запуску ArcMap. Плитка в ArcGIS автоматична - ви навіть не можете керувати нею (якщо ви не програмуєте на інтерфейс C / Fortran). Виявляється, обмеження оперативної пам’яті викликають невелике занепокоєння.
con
працював і для мене, з умовою "Value" >= 41 AND "Value" <= 43
. Я б пішов із цим рішенням, але я не впевнений, чи зацікавлять у майбутньому додаткові значення растру. Очевидно, я міг би додати пункт OR
до пункту where, але тоді він починає ускладнюватися. InList
видається найбільш прямим рішенням щодо читабельності та ремонтопридатності.