Vedi questo link per maggiori dettagli.
Il problema:
Voglio passare in rassegna un raster continuo (uno che non ha una tabella di attributi), cella per cella e ottenere il valore della cella. Voglio prendere quei valori ed eseguire i condizionali su di essi, emulando i passaggi di algebra della mappa descritti di seguito senza effettivamente utilizzare il calcolatore raster.
Per richiesta di commenti di seguito, ho aggiunto dettagli che forniscono informazioni di base sul problema e giustificano la necessità di implementare un metodo in quanto tale nella sezione seguente chiamata "L'analisi necessaria:".
L'analisi proposta di seguito, pur essendo pertinente al mio problema fornendo un background, non deve essere implementata in una risposta. L'ambito della domanda riguarda solo l'iterazione attraverso un raster continuo per ottenere / impostare i valori della cella.
L'analisi necessaria:
Se QUALSIASI delle seguenti condizioni sono soddisfatte, assegnare alla cella di output un valore di 1. Assegnare alla cella di output un valore pari a 0 solo se nessuna delle condizioni è soddisfatta.
Condizione 1: se il valore della cella è maggiore delle celle superiore e inferiore, fornire il valore 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Dove il file del kernel è simile al seguente:
3 3
0 1 0
0 0 0
0 1 0
Condizione 2: se il valore della cella è maggiore delle celle sinistra e destra, fornire il valore 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Dove il file del kernel è simile al seguente:
3 3
0 0 0
1 0 1
0 0 0
Condizione 3: se il valore della cella è maggiore delle celle di inizio e di fine, dare il valore di 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Dove il file del kernel è simile al seguente:
3 3
1 0 0
0 0 0
0 0 1
Condizione 4: se il valore della cella è maggiore delle celle a fondo e a destra, dare il valore 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Dove il file del kernel è simile al seguente:
3 3
0 0 1
0 0 0
1 0 0
Condizione 5: Se qualsiasi una delle celle adiacenti ha un valore uguale alla cella centrale, che invia l'uscita raster valore 1 ( usando varietà focale con due calcoli quartiere più vicine )
Perché non usare l'algebra delle mappe?
È stato notato di seguito che il mio problema potrebbe essere risolto utilizzando l'algebra delle mappe, ma come visto sopra si tratta di un totale di sei calcoli raster, più uno per combinare tutti i raster creati insieme. Mi sembra che sia molto più efficiente andare cella per cella e fare tutti i confronti in una sola volta in ogni cella invece di scorrere ciascuno di essi sette volte e utilizzare un po 'di memoria per creare sette raster.
Come dovrebbe essere attaccato il problema?
Il collegamento sopra consiglia di utilizzare l'interfaccia IPixelBlock, tuttavia non è chiaro dalla documentazione ESRI se si sta effettivamente accedendo a un singolo valore di cella tramite IPixelBlock o se si accede a più valori di cella dalla dimensione di IPixelBlock impostato. Una buona risposta dovrebbe suggerire un metodo per accedere ai valori di cella di un raster continuo e fornire una spiegazione della metodologia alla base del codice, se non apparentemente evidente.
In sintesi:
Qual è il metodo migliore per eseguire il loop attraverso ogni cella in un raster CONTINUOUS (che non ha una tabella di attributi ) per accedere ai suoi valori di cella?
Una buona risposta non deve implementare i passaggi di analisi sopra descritti, deve solo fornire una metodologia per accedere ai valori delle celle di un raster.