Дивіться це посилання для отримання детальної інформації.
Проблема:
Я хочу провести цикл через суцільний растр (той, у якого немає таблиці атрибутів), комірку за коміркою, і отримати значення комірки. Я хочу взяти ці значення та запустити на них умовні умови, емулюючи кроки алгебри карти, детально описані нижче, не використовуючи фактично растровий калькулятор.
На запит коментарів, наведених нижче, я додав деталі, що пояснюють проблему та обґрунтовують необхідність впровадження методу як такого в розділі нижче під назвою "Необхідний аналіз:".
Пропонований нижче аналіз, хоч і має відношення до моєї проблеми, надаючи передумови, не потребує реалізації відповіді. Обсяг питання стосується лише повторення через суцільний растр для отримання / встановлення значень комірок.
Аналіз необхідний:
Якщо виконано будь-яке з наступних умов, дайте вихідній комірці значення 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. Хороша відповідь повинна запропонувати метод доступу до значень комірок безперервного растру та надати пояснення методології, що стоїть за кодом, якщо це не очевидно.
Підсумовуючи:
Який найкращий метод провести цикл через кожну клітинку в НЕПЕРЕЧНОМ растровій (у якої немає таблиці атрибутів ) для доступу до її значень комірок?
Для гарної відповіді не потрібно виконувати описані вище етапи аналізу, потрібно лише надати методологію доступу до значень комірок растру.