Apakah mungkin menggunakan API gdal untuk menelepon gdal_translate
dari kode Python? Maksud saya bukan hanya mengeksekusi gdal_translate.exe dari sistem file, tetapi memanggilnya entah bagaimana dalam kode sehingga saya tidak perlu tahu direktori persisnya di mana gdal_translate dapat dieksekusi?
40
Jawaban:
Sejak GDAL 2.1 (info lebih lanjut di sini ), utilitas GDAL dan OGR dapat digunakan sebagai fungsi perpustakaan. Contohnya:
sumber
gdal.Translate()
ada tercantum di sini: gdal.org/python/osgeo.gdal-module.html#TerjemahkanOpsiLihat Tutorial API GDAL .
Jika Anda ingin lebih banyak kontrol output, seperti mengubah ukuran, mengatur ulang, dll ... menggunakan VRT sebagai input, ini adalah bagaimana gdal_translate melakukannya secara internal.
sumber
Ya, Anda dapat memanggil Utilitas GDAL dari dalam Python. Ada perbedaan yang sangat kecil dalam pendekatan tergantung pada apakah utilitas itu adalah exe dalam dirinya sendiri atau juga sepotong kode python. Bagaimanapun Anda harus menggunakan modul subproses :
Anda akan melihat bahwa saya menambahkan tanda kutip lolos di jalur saya. Ini karena, pada Windows, saya mengalami masalah dengan jalur, terutama yang memiliki spasi atau di mana salah satu karakter '\' membuat karakter yang lolos secara tidak sengaja. Jadi, saya hanya mempertahankan jalan yang benar di aspec.
Jika Anda menggunakan salah satu utilitas python, lakukan saja hal yang sama kecuali exe Anda di awal string perintah subproses sekarang "C: \ python32 \ python.exe" (atau versi apa pun yang Anda miliki) dan elemen kedua adalah utilitas python yang ingin Anda gunakan.
Jelas Anda juga dapat beralih dari sistem file Anda daripada menggunakan konstanta hard-coded, tetapi ini hanyalah sebuah contoh.
EDIT - Generalisasi untuk plugin
QGIS QGIS membuat / memodifikasi sejumlah variabel lingkungan saat start up. Jadi, Anda dapat membangun variabel jalur umum ke pustaka / utilitas GDAL menggunakan ini (lihat Pengaturan-> Opsi-> Sistem) alih-alih jalur kode-keras pada contoh di atas.
sumber
Saya melakukan ini dengan berbagai perintah gdal menggunakan sistem os.s yang dapat Anda gunakan untuk memanggil fungsi seperti dari baris perintah:
Ini juga dijelaskan dalam kuliah 7 di sini: http://www.gis.usu.edu/~chrisg/python/2009/
sumber
subprocess.call
lebih aman daripadaos.system
.gdal.Warp()
selama beberapa jam untuk mendapatkanPG:
sumber datacutlineDSName
untuk mengemudicutlineSQL
. (Saya tahu, kan? Beberapa jam benar-benar menyelesaikan sesuatu ? Kengeriannya! </kidding>). Akhirnya berhasil, dan tampaknya secara signifikan lebih cepat daripadaos.system()
atausubprocess.call()
. Itu bekerja ~ 2 juta cutlines, jadi saya tidak akan tahu apakah itu sebenarnya lebih cepat sampai beberapa waktu malam ini ... tapi itu bekerja dengan tepat.Berikut adalah kode cepat untuk siapa pun yang ingin menyimpan band dari TIF multi-band komposit ke file individual menggunakan GDAL Translate in Python.
Ini bisa berguna untuk pemrosesan lebih lanjut (mis. Menggunakan Rasterio, seperti di sini ).
sumber