Saya ingin membuat raster dengan resolusi 25 meter × 25 meter, di mana setiap sel berisi jarak ke garis pantai terdekat, yang dihitung dari pusat sel. Untuk melakukan ini, yang saya miliki hanyalah membentuk garis pantai Selandia Baru .
Saya telah mencoba mengikuti tutorial Dominic Roye untuk melakukannya di R yang berfungsi ... agak. Baik-baik saja hingga resolusi 1 km × 1 km tetapi jika saya mencoba untuk meningkatkan RAM, itu membutuhkan melebihi yang tersedia pada PC saya (~ diperlukan 70 gb RAM) atau yang lain yang saya akses juga. Mengatakan itu, saya pikir ini adalah batasan R dan saya menduga bahwa QGIS mungkin memiliki cara yang lebih efisien secara komputasional untuk menciptakan raster ini, tetapi saya baru dalam hal ini dan saya tidak tahu bagaimana melakukannya.
Saya telah mencoba mengikuti Membuat raster dengan jarak ke fitur menggunakan QGIS? untuk membuatnya di QGIS tetapi mengembalikan kesalahan ini:
_core.QgsProcessingException: Tidak dapat memuat lapisan sumber untuk INPUT: C: / ..../ Garis pantai / nz-garis pantai-dan-pulau-poligon-topo-150k.shp tidak ditemukan
dan saya tidak yakin mengapa.
Adakah yang punya saran tentang apa yang mungkin salah atau cara alternatif untuk melakukan ini?
Edit:
Raster yang saya harapkan akan diproduksi memiliki sekitar 5.9684 baris dan 40.827 kolom sehingga tumpang tindih dengan raster defisit air tahunan dari LINZ. Jika raster yang diproduksi lebih besar dari raster defisit air tahunan saya dapat memotongnya di R meskipun ...
Satu hal yang saya pikir mungkin menjadi masalah potensial adalah bahwa pembentukan garis pantai NZ memiliki sejumlah besar laut di antara pulau-pulau, dan saya tidak tertarik menghitung jarak ke pantai untuk sel-sel ini. Saya benar-benar hanya ingin menghitung nilai untuk sel yang menyertakan beberapa bidang tanah. Saya tidak yakin bagaimana melakukan ini, atau apakah ini benar-benar masalah.
sumber
Jawaban:
Dengan PyQGIS dan GDAL python library tidak terlalu sulit untuk melakukannya. Anda memerlukan parameter transformasi geografis (x kiri atas, resolusi x pixel, rotasi, y kiri atas, rotasi, resolusi ns pixel) dan jumlah baris dan kolom untuk membuat raster yang dihasilkan. Untuk menghitung jarak ke garis pantai terdekat, perlu lapisan vektor untuk mewakili garis pantai.
Dengan PyQGIS , setiap titik raster sebagai pusat sel dihitung dan jaraknya ke garis pantai diukur dengan menggunakan metode 'proximitySegmentWithContext' dari kelas QgsGeometry . Pustaka python GDAL digunakan untuk menghasilkan raster dengan nilai-nilai jarak ini dalam baris x kolom array
Kode berikut digunakan untuk membuat raster jarak (resolusi 25 m × 25 m dan 1000 baris x 1000 kolom) mulai dari titik (397106.7689872353, 4499634.06675821); dekat dengan garis pantai barat USA.
Setelah menjalankan kode di atas, raster yang dihasilkan dimuat dalam QGIS dan terlihat seperti pada gambar berikut (pseudocolor dengan 5 kelas dan jalan Spectral). Proyeksi adalah UTM 10 N (EPSG: 32610)
sumber
Mungkin menjadi solusi untuk dicoba:
Sekarang Anda harus memiliki layer titik baru dengan jarak ke pantai seperti dalam contoh ini
sumber
Di dalam QGIS Anda bisa mencoba plugin GRASS. Sejauh yang saya tahu itu mengelola memori lebih baik daripada R, dan saya berharap solusi lain gagal pada area yang luas.
perintah GRASS disebut r.grow.distance, yang dapat Anda temukan di toolbar pemrosesan. Perhatikan bahwa Anda perlu mengonversi baris Anda menjadi raster pada awalnya.
Salah satu masalah Anda mungkin ukuran output, sehingga Anda dapat menambahkan beberapa opsi pembuatan berguna seperti (untuk file tif) BIGTIFF = YA, TILED = YA, KOMPRES = LZW, PREDICTOR = 3
sumber
Saya akan mencoba sebaliknya. Jika Anda menggunakan poligon NZ maka konversikan tepi poligon menjadi garis. Setelah itu buat buffer pada batas untuk setiap 25 meter jarak dari batas (mungkin centorid dapat membantu menentukan kapan harus berhenti). Kemudian potong buffer dengan poligon dan kemudian ubah poligon itu menjadi raster. Saya tidak yakin ini akan berhasil tetapi pasti Anda akan membutuhkan lebih sedikit RAM. Dan PostGiS hebat ketika Anda memiliki masalah kinerja.
Semoga ini bisa membantu setidaknya sedikit :)
sumber
Saya awalnya tidak akan menjawab pertanyaan saya sendiri tetapi seorang kolega saya (yang tidak menggunakan situs ini), menulis kepada saya banyak kode python untuk melakukan apa yang saya inginkan; termasuk membatasi sel untuk memiliki jarak ke pantai hanya sel terestrial dan meninggalkan sel berbasis laut sebagai NAs. Kode berikut harus dapat dijalankan dari konsol python, dengan satu-satunya hal yang perlu diubah adalah:
1) Letakkan file skrip di folder yang sama dengan file bentuk yang diinginkan;
2) ubah nama shapefile dalam skrip python menjadi apa pun nama shapefile Anda;
3) mengatur resolusi yang diinginkan, dan;
4) ubah sejauh sesuai dengan raster lainnya.
Shapefile yang lebih besar daripada yang saya gunakan akan membutuhkan RAM dalam jumlah besar tetapi jika tidak skrip cepat dijalankan (sekitar tiga menit untuk menghasilkan raster resolusi 50m dan sepuluh menit untuk raster resolusi 25m).
sumber