Saya sedang mengerjakan model komputasi dari banyaknya penyerbuk liar di seluruh lanskap. Model itu sendiri selesai, dan saya sekarang berjuang dengan langkah post-processing.
Saya memiliki raster pasokan penyerbuk GDAL saya yang terlihat seperti ini (warna yang lebih terang berarti kunjungan penyerbuk yang lebih tinggi ke satu piksel):
Dan saya memiliki OGR shapefile poin yang mewakili lokasi sampel di lanskap:
Saya mencoba menjalankan beberapa analisis pada piksel di bawah titik-titik ini, tetapi untuk melakukannya, saya harus dapat mengekstraksi nilai piksel di bawah satu titik.
Apakah mungkin untuk mengekstraksi nilai piksel di bawah satu titik menggunakan hanya OGR dan GDAL melalui Python? Saya lebih suka menghindari membaca seluruh raster ke dalam memori ReadAsArray()
, karena raster output saya sangat, sangat besar (terlalu besar untuk masuk ke dalam memori).
Saya perhatikan posting ini , yang mirip, tetapi membutuhkan panggilan baris perintah.
Jawaban:
Anda dapat menggunakan metode ReadRaster gdal.Dataset atau gdal.Band . Lihat tutorial GDAL dan OGR API dan contoh di bawah ini. ReadRaster tidak menggunakan / membutuhkan numpy, nilai kembali adalah data biner mentah dan perlu dibongkar menggunakan modul struct python standar .
Sebuah contoh:
Atau, karena alasan yang Anda berikan untuk tidak menggunakan
numpy
adalah untuk menghindari membaca seluruh array yang digunakanReadAsArray()
, di bawah ini adalah contoh yang menggunakannumpy
dan tidak membaca seluruh raster di.sumber
px
/py
salah dalam hal mx / my terletak di luar batasrb
, karenaint(-0.5) == 0
. Anda perlufloor(...)
, dan kemudian Anda perlu memeriksa bahwa tak satu pun daripx
/py
kurang dari nol (atau melakukannya sebelum memanggilint()
), karena indeks negatif berfungsi (mereka mendapatkan sisi lain dari array). Saya ingin tahu apakah ada cara yang lebih rapi untuk mengatasi masalah ini. Juga, bagaimana Anda menulis ulang baris-baris itu sehingga mereka berurusan dengan rotasi dengan benar?