Zobacz ten link, aby uzyskać więcej informacji.
Problem:
Chcę przejść przez ciągły raster (taki, który nie ma tabeli atrybutów), komórka po komórce i uzyskać wartość komórki. Chcę wziąć te wartości i uruchomić na nich warunki warunkowe, emulując kroki algebry mapy wyszczególnione poniżej, bez korzystania z kalkulatora rastrowego.
Na prośbę o komentarze poniżej dodałem szczegółowe informacje przedstawiające tło problemu i uzasadniające potrzebę wdrożenia metody jako takiej w poniższej sekcji zatytułowanej „Wymagana analiza:”.
Przedstawiona poniżej analiza, choć jest odpowiednia dla mojego problemu, ponieważ stanowi tło, nie musi być realizowana w odpowiedzi. Zakres pytania dotyczy tylko iteracji przez ciągły raster, aby uzyskać / ustawić wartości komórek.
Potrzebna analiza:
Jeśli DOWOLNY z poniższych warunków jest spełniony, nadaj komórce wyjściowej wartość 1. Daj komórce wyjściowej wartość 0, tylko jeśli żaden z warunków nie zostanie spełniony.
Warunek 1: Jeśli wartość komórki jest większa niż górna i dolna komórka, podaj wartość 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Gdzie plik jądra wygląda następująco:
3 3
0 1 0
0 0 0
0 1 0
Warunek 2: Jeśli wartość komórki jest większa niż lewa i prawa komórka, podaj wartość 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Gdzie plik jądra wygląda następująco:
3 3
0 0 0
1 0 1
0 0 0
Warunek 3: Jeśli wartość komórki jest większa niż górne i dolne komórki, podaj wartość 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Gdzie plik jądra wygląda następująco:
3 3
1 0 0
0 0 0
0 0 1
Warunek 4: Jeśli wartość komórki jest większa niż dolnej i lewej górnej komórki, podaj wartość 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Gdzie plik jądra wygląda następująco:
3 3
0 0 1
0 0 0
1 0 0
Warunek 5: Jeśli którakolwiek z sąsiednich komórek ma wartość RÓWNOMOCNĄ w stosunku do komórki środkowej, nadaj wyjściowemu rastrowi wartość 1 ( używając odmiany ogniskowej z dwoma obliczeniami najbliższego sąsiedztwa )
Dlaczego nie skorzystać z algebry map?
Zauważono poniżej, że mój problem można rozwiązać za pomocą algebry mapy, ale jak widać powyżej, jest to w sumie sześć obliczeń rastrowych plus jedno, aby połączyć wszystkie rastry utworzone razem. Wydaje mi się, że o wiele bardziej wydajne jest przechodzenie między komórkami i wykonywanie wszystkich porównań jednocześnie w każdej komórce zamiast zapętlania każdego z nich osobno siedem razy i wykorzystywania całkiem sporej ilości pamięci do utworzenia siedmiu rastrów.
Jak należy zaatakować problem?
Powyższy link zaleca użycie interfejsu IPixelBlock, jednak z dokumentacji ESRI nie jest jasne, czy faktycznie uzyskuje się dostęp do samej wartości pojedynczej komórki za pośrednictwem IPixelBlock, czy też uzyskuje się dostęp do wielu wartości komórek z ustawionego rozmiaru IPixelBlock. Dobra odpowiedź powinna sugerować metodę dostępu do wartości komórek ciągłego rastra i wyjaśnić metodologię kodu, jeśli nie jest to oczywiste.
W podsumowaniu:
Jaka jest najlepsza metoda na przejście przez każdą komórkę w CIĄGŁYM rastrze (który nie ma tabeli atrybutów ), aby uzyskać dostęp do jej wartości komórek?
Dobra odpowiedź nie musi implementować opisanych powyżej etapów analizy, wystarczy jedynie zapewnić metodologię dostępu do wartości komórek rastra.