Saya menggunakan gdal_proximity untuk menemukan jarak ke sungai utama terdekat di AS (48 negara bagian lebih rendah). Saya telah memproyeksikan arus jaringan NHD + ke Conus Albers (epsg: 5070), sungai terpilih dengan urutan aliran> 5, dan merasterisasi, membakar sungai sebanyak 255, tidak ada sungai sebanyak 0. Ini banyak baik-baik saja, tapi sekarang saya harus mencari jarak ke sungai terdekat untuk situs dalam jarak 50 km. File input pada resolusi 30m pada skala kontinental, jadi sangat besar, tetapi konversi harus berupa perintah gdal_proximity sederhana:
gdal_proximity.bat -values 255 -distunits GEO -maxdist 50000 -nodata -999 infile.tif outfile.tif -co COMPRESS=DEFLATE -co BIGTIFF=YES -co TILED=YES
Ini tampaknya -tidak berfungsi-, tetapi menghasilkan pola geometris yang aneh dalam output (lihat gambar). Data yang ada dalam output telah diproses dengan benar. Adakah yang bisa menyarankan mengapa begitu banyak output yang hilang?
Sunting: Untuk menguji apakah ini disebabkan oleh salah satu parameter opsional, saya menjalankan gdal_proximity lagi dalam konfigurasi ini:
gdal_proximity.bat H:\data\tmp\NHDplus_network_flowline_SO6plus.tif H:/data/tmp/NHDplus_network_flowline_SO6plus_proximity.tif -values 255 -maxdist 50000 -of GTiff
Yang pada dasarnya menghasilkan hasil yang sama:
Satu-satunya pemikiran saya adalah bahwa hal itu mungkin terkait dengan ukuran raster (~ 100 gb terkompresi. Sejauh yang saya tahu tidak ada batasan untuk ukuran BigTiff, tapi mungkin ada batas untuk apa yang bisa gdal dapat menganalisis secara efektif?
sumber
Jawaban:
Saya menduga Anda menekan batas memori di suatu tempat, mungkin ketika RAM habis dan OS dibuang ke file paging. Pantau sumber daya sistem Anda selama proses. Tidak jelas bagi saya mengapa hasil Anda terjadi di petak melengkung, tetapi pastikan Anda telah memproyeksikan (menyimpan) semua data ke dalam sistem koordinat yang sama.
Mari kita lihat tipe data numerik untuk membantu algoritma ini. Jaringan aliran raster hanya perlu berisi nilai-nilai biner, sehingga kami dapat menghemat sumber daya dengan menggunakan
Byte
tipe data raster. Bakar nilai 1 untuk aliran dan 0 untuk latar:Selanjutnya, kedekatan yang kami minati adalah positif dan kurang dari atau sama dengan 50.000 m. Tipe data yang sesuai adalah bilangan bulat 16-bit yang tidak ditandatangani
UInt16
. Selanjutnya, jika kita mengatur 'tidak ada data' ke maks 65535 kita dapat mempertahankan nilai 0 untuk sel-sel aliran.Jika perlu, Anda juga bisa mundur ke integer 8-bit tanpa tanda
UInt8
dan masih memiliki presisi kedekatan ~ 200m.* Perhatikan bahwa saya telah menggunakan ukuran sel 50m. Kedekatan gdal_proximity mengkonsumsi ~ 20GB RAM dan memakan waktu ~ 5 menit pada mesin saya. Jika RAM Anda terbatas, pisahkan raster input ke dalam ukuran yang dapat dikelola, seperti yang dicatat orang lain.
sumber