Смотрите эту ссылку для более подробной информации.
Проблема:
Я хочу перебрать непрерывный растр (тот, у которого нет таблицы атрибутов), ячейка за ячейкой и получить значение ячейки. Я хочу взять эти значения и выполнить для них условия, эмулируя шаги алгебры карты, подробно описанные ниже, без фактического использования растрового калькулятора.
В ответ на запрос комментариев ниже, я добавил подробности, предоставив предысторию проблемы и обосновав необходимость реализации метода как такового в разделе ниже под названием «Необходим анализ:».
Анализ, предложенный ниже, хотя и имеет отношение к моей проблеме, предоставляя справочную информацию, не нуждается в реализации в ответе. Объем вопроса касается только итерации непрерывного растра для получения / установки значений ячеек.
Необходим анализ:
Если выполняется ЛЮБОЕ из следующих условий, присвойте выходной ячейке значение 1. Только присвойте выходной ячейке значение 0, если ни одно из условий не выполнено.
Условие 1: если значение ячейки больше, чем верхняя и нижняя ячейки, укажите значение 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Где файл ядра выглядит так:
3 3
0 1 0
0 0 0
0 1 0
Условие 2: если значение ячейки больше, чем у левой и правой ячейки, укажите значение 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Где файл ядра выглядит так:
3 3
0 0 0
1 0 1
0 0 0
Условие 3: если значение ячейки больше, чем у верхнего и нижнего ячеек, укажите значение 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Где файл ядра выглядит так:
3 3
1 0 0
0 0 0
0 0 1
Условие 4: Если значение ячейки больше, чем у нижнего левого и верхнего правого ячеек, задайте значение 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Где файл ядра выглядит так:
3 3
0 0 1
0 0 0
1 0 0
Условие 5: если любая из соседних ячеек имеет значение EQUAL для центральной ячейки, присвойте выходному растру значение 1 ( используя фокусное многообразие с двумя расчетами ближайших окрестностей )
Почему бы не использовать алгебру карт?
Ниже было отмечено, что моя проблема может быть решена с помощью алгебры карт, но, как видно выше, это всего шесть вычислений растра, плюс один для объединения всех растров, созданных вместе. Мне кажется, что гораздо эффективнее переходить от ячейки к ячейке и выполнять все сравнения сразу в каждой ячейке, вместо того, чтобы перебирать каждую по отдельности семь раз и использовать довольно много памяти для создания семи растров.
Как решить проблему?
Приведенная выше ссылка рекомендует использовать интерфейс IPixelBlock, однако из документации ESRI неясно, осуществляете ли вы доступ к самому значению одной ячейки через IPixelBlock, или если вы обращаетесь к нескольким значениям ячеек из размера установленного IPixelBlock. Хороший ответ должен предложить метод доступа к значениям ячеек непрерывного растра и дать объяснение методологии, лежащей в основе кода, если это не очевидно.
В итоге:
Каков наилучший метод для обхода каждой ячейки в НЕПРЕРЫВНОМ растре (у которого нет таблицы атрибутов ) для доступа к значениям ее ячеек?
Хороший ответ не должен реализовывать шаги анализа, описанные выше, он должен только предоставить методологию для доступа к значениям ячеек растра.