Saya menggunakan ArcGIS 10 dengan Spatial Analyst.
Saya memiliki satu set raster (total 8) yang hanya setiap berisi 1 atau 0 untuk setiap sel. Setiap raster mewakili nilai data tahun yang berbeda. Demi argumen tahun 1 hingga tahun 8.
Saya dapat menambahkan semua raster yang akan memberi saya kisi terakhir dengan nilai mulai dari 0 hingga 8. Angka 8 menunjukkan bahwa sel secara konstan 1 untuk himpunan raster (semua tahun).
Saya ingin mencari tahu untuk masing-masing sel nomor 1 terpanjang berturut-turut.
Jadi misalnya total grid dapat merekam untuk satu sel nilai katakanlah 5 tetapi lebih dari 8 grid sel itu memiliki jumlah berturut-turut 1 sama dengan 3. Atau cara lain untuk menyatakan ini adalah selama 3 tahun sel itu adalah 1 kemudian mulai berosilasi antara nol dan satu.
Keterampilan pemrosesan raster saya tidak sepanas keterampilan pemrosesan vektor saya dan saya telah melihat dengan baik pada file bantuan ESRI tapi saya tidak tahu bagaimana seseorang akan mencapai ini dengan menggunakan alat geo-processing dari rak?
Ada ide?
sumber
Jawaban:
Karena ini adalah operasi lokal, mari kita cari tahu bagaimana melakukannya untuk sel tunggal: Peta Aljabar akan mengurus sisanya.
Catatan pertama bahwa urutan raster jelas penting. Karenanya, statistik sel yang dipotret sekali pakai, seperti jumlah sel, tidak akan melakukannya.
Jika kami menemukan urutan seperti 01110101 pada sel tertentu, kami akan memprosesnya dari awal hingga akhir dan
Mulailah dengan hitungan nol.
Bertambah hitungan setiap kali kita menjumpai 1.
Setel ulang penghitungan setiap kali kami menemukan angka 0, setelah menyimpan penghitungan terakhir .
Pada akhirnya, ambil jumlah maksimum yang disimpan (termasuk jumlah akhir).
Langkah 1 diimplementasikan dengan kisi nol konstan. Langkah 2 dan 3 bergantung pada apa yang kita temui: karena itu operasi bersyarat . Langkah 4 jelas adalah maksimum lokal. Kami akan mengkodekan ini, kemudian, sedikit lebih formal sebagai:
Itu paling baik dilakukan dengan skrip Python ketika Anda memiliki banyak kotak, tetapi dengan delapan itu tidak sulit untuk membuka gulungan dan menulis langkah-langkahnya dengan tangan. Ini mengungkapkan sedikit masalah:
result=max(longest,count)
ini adalah semacam "efek samping" yang sulit dikodekan dengan operasi raster. (Tapi itu bisa dilakukan, seperti yang ditunjukkan pada solusi kedua di bawah ini.) Ini juga tidak efisien, karena menambah perhitungan ekstra pada setiap langkah. Karena itu kami memodifikasi pendekatan sedikit, dengan tujuan untuk menundamax
operasi sampai akhir. Ini akan membutuhkan menyimpan hitungan terpisah di setiap tahap.Dalam menjalani proses ini saya juga menemukan jalan pintas untuk langkah pertama. Ini mengarah ke solusi berikut, yang walaupun sedikit panjang dan intensif-RAM, sederhana dan melibatkan langkah-langkah yang dijalankan dengan cepat:
Sintaks aktual bervariasi dengan versi ArcMap Anda. (Misalnya, saya
CellStatistics
baru mengenal versi 10, tetapi operasi maksimum lokal selalu tersedia.)Dalam contoh dengan input 01110101, urutan kisi "hasil *" akan berisi nilai 0, 1, 2, 3, 0, 1, 0, 1, jadi pada akhirnya
CellStatistics
akan mengembalikan 3, panjang string terpanjang dari 1Jika RAM langka, solusinya dapat dimodifikasi untuk menggunakan kembali hasil antara, dengan biaya sekitar dua kali lipat waktu eksekusi:
Dalam contoh dengan input 01110101, nilai ("temp", "result") akan menjadi (NoData, 0) setelah baris pertama dan setelah setiap pasangan ("Con", "CellStatistics") operasi nilainya adalah (1 , 1), (2, 2), (3, 3), (0, 3), (1, 3), (0, 3), (1, 3). Sekali lagi nilai akhir adalah 3.
Pola reguler ekspresi Peta Aljabar di salah satu solusi menunjukkan bagaimana kode algoritma sebagai loop dalam skrip, mengubah indeks yang sesuai dengan setiap iterasi.
sumber
Hanya mengobrol tentang hal ini dan bertanya-tanya apakah Anda dapat mendekati masalah dengan memperlakukan kisi masukan sebagai aliran biner. Ini akan memungkinkan Anda untuk menggabungkan mereka untuk memberikan integer ringkasan unik untuk urutan - yaitu 01110101 = 117. Nilai ini kemudian dapat direklasifikasi untuk memberikan jumlah maksimum 1s berturut-turut.
Berikut ini contoh yang menunjukkan satu cara untuk menggabungkan delapan kisi:
Operasi bitwise juga dapat ditekan ke dalam layanan untuk langkah ini. Atau, Anda dapat menggunakan kombinasi diikuti oleh perhitungan bidang. (Perhitungan lapangan akan memiliki ekspresi yang mirip dengan yang sebelumnya.)
The meja reklasifikasi harus menyediakan panjang run max untuk semua nilai antara 00000000B = 0 dan 11111111B = 255. Dalam rangka, di sini mereka adalah:
Pendekatan ini terbatas pada sekitar 20 kisi di ArcGIS: menggunakan lebih dari ini dapat membuat tabel atribut yang sulit. (
Combine
secara khusus terbatas pada 20 kisi.)sumber
Pernahkah Anda berpikir untuk mengubah nilai dari 0 dan 1 menjadi nilai dengan kekuatan 2 (1,2,4,8,16,32). Ketika Anda menggabungkan 8 kisi Anda akan mendapatkan nilai unik untuk setiap sel yang akan memberi Anda info berturut-turut (yaitu: nilai 3 berarti tahun 1 dan 2, di mana nilai 54 akan menjadi tahun 6 hingga 8).
Hanya pemikiran saja
sumber