Рассмотрим набор данных NLCD2001 Land Cover для Аляски ( ссылка для скачивания ). Мне нужно переклассифицировать этот набор данных, чтобы сохранить только пиксели со значениями 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)
Как я могу реклассифицировать этот набор растровых данных? Я использую ArcCatalog 10.0, Build 4000, с включенным расширением Spatial Analyst.
arcpy
raster
arcgis-10.0
reclassify
error-999998
DoggoDougal
источник
источник
reclassify
должно быть последнее средство, потому что оно настолько общее по объему, что, вероятно, использует методы, которые менее эффективны, чем те, которые можно получить, когда реклассификацию легко выразить арифметически или логически. В данном случае критерий переклассификации настолько прост, что вам следует сначала попробовать егоCon
или даже выполнить арифметические операции (потому что они быстрые). Например,"grid" * ("grid" >= 41) * ("grid" <= 43)
должен это сделать. ОЗУ не должно быть проблемой - Spatial Analyst автоматически запускает свой растровый ввод-вывод, и это локальные операции.Inlist
это хорошее решение (+1). Я мог использоватьcon
и контролировать использование оперативной памяти во время операции. Он никогда не превышал 180 МБ, что чуть больше, чем оперативная память, используемая только для запуска ArcMap. Плитка в ArcGIS автоматическая - вы даже не можете управлять ей (если вы не программируете интерфейс C / Fortran). Похоже, что ограничения ОЗУ не представляют большой проблемы.con
у меня тоже работал, с условием"Value" >= 41 AND "Value" <= 43
. Я бы пошел с этим решением, но я не уверен, будут ли дополнительные растровые значения представлять интерес в будущем. Очевидно, я мог бы добавитьOR
к предложению where, но тогда это стало бы более сложным.InList
кажется наиболее простым решением в отношении удобочитаемости и удобства обслуживания.Ответы:
Первый прикрепленный скрипт успешно переклассифицировал ваши данные AK NLCD примерно за 15 минут (i7, 12 ГБ ОЗУ). Поскольку исходный набор данных составляет почти 7 ГБ, вы можете столкнуться с проблемами с памятью. Если вы не можете обработать весь набор данных в одном фрагменте, попробуйте разделить его со вторым сценарием до переклассификации. Я рекомендую взять небольшое подмножество данных (щелкните растровый слой правой кнопкой мыши в TOC> Данные> Экспорт данных> Экстент (фрейм данных) и протестируйте первый сценарий. Как только вы наберете параметры для команды переклассификации, затем перейдите к переклассификации весь набор данных или его разделение. Или попробуйте загрузить 64-битный продукт фоновой геообработки для ArcGIS 10.1 SP1, доступный здесь . Удачи.
Сценарий 1
Изменить : Если вам нужно разделить ваши данные перед обработкой, этот скрипт должен помочь:
Сценарий 2
источник
whuber прокомментировал использование логических инструментов для выражения этой реклассификации . Немного покопавшись , я обнаружил, что InList , как часть набора инструментов логической математики Spatial Analyst, удовлетворяет мои потребности.
На сегодняшний день это самое простое решение, которое я смог найти, оно работает быстрее всего и не требует учета листов исходного набора данных. Нет необходимости учитывать доступную оперативную память машины, поскольку этот инструмент будет считывать данные прямо с диска и сохранять результаты прямо на диске.
источник
SplitRaster_management
, занимает 7,04 секунды.Я использовал набор данных, упомянутый в исходном сообщении, с версией arcmap 10.4 dev. Переклассификация завершается неудачно, когда выходной растр является сеткой, поскольку количество переклассифицированных ячеек выходит за пределы того, что может быть сохранено в поле COUNT НДС сетки. Когда выходной растр представляет собой fgdb, он успешно выполняется для меня примерно за 11 минут на старом 4-ядерном компьютере под управлением Windows 8. Неформатные растровые форматы должны работать, так как они используют плавающие значения двойной точности для поля счетчика. Я ожидаю, что вы должны получить то же поведение с 10.2 или 10.3 выпущенными версиями. Мы рассмотрим использование другого растрового формата для вывода по умолчанию для Reclassify.
источник