Saya agak macet mencoba mencari cara untuk menjalankan sextante dari python mandiri dari distribusi OSGeo4W. Alasan saya ingin melakukan ini adalah karena saya lelah memasukkan parameter dalam dialog setiap kali saya ingin menguji model dari Model Builder.
Jadi di sini adalah skrip python sebut saja test.py
# as per http://qgis.org/pyqgis-cookbook/intro.html#using-pyqgis-in-custom-application
from qgis.core import *
# supply path to where is your qgis installed
QgsApplication.setPrefixPath("C:/OSGeo4W/apps/qgis", True)
# load providers
QgsApplication.initQgis()
from sextante.core.Sextante import Sextante
Sextante.alglist()
Sextante.alghelp("saga:slopeaspectcurvature")
Bahwa saya menelepon dari file batch saya
@echo off
set OSGEO4W_ROOT=C:\OSGeo4W
set PYTHONPATH=%OSGEO4W_ROOT%\apps\qgis\python;%OSGEO4W_ROOT%\apps\qgis\python\plugins;%HOME%/.qgis/python/plugins
set PATH=%OSGEO4W_ROOT%\bin;%OSGEO4W_ROOT%\apps\qgis\bin;%OSGEO4W_ROOT%\apps\qgis\plugins
python test.py
Masalahnya adalah katanya Algorithm not found
sementara saya mendapatkan output yang berarti dari konsol python QGIS.
Saya merasa seperti kehilangan untuk menginisialisasi sesuatu. Tapi apa?
Apakah ada cara yang lebih baik untuk menguji Model selain dengan memasukkan banyak parameter menggunakan GUI?
PEMBARUAN 7/2/2012
Saya mencari solusi pythonic generik untuk diuji dengan algoritma "mine". Algoritma yang disebutkan di atas hanyalah contoh yang menunjukkan bahwa sesuatu mungkin tidak diinisialisasi.
PEMBARUAN 7/27/2012
Alternatif untuk Script Runner adalah dengan menggunakan konsol IPython untuk men-debug skrip. Selain itu sepertinya tidak ada cara untuk melakukan pengujian unit sederhana dengan sextante tanpa menjalankan :(
PEMBARUAN 7/30/2012
Seperti yang disarankan Victor Olaya, saya mencoba menginisialisasi Sextante seperti pada kode di bawah ini.
#!/usr/bin/env python
import sys
from PyQt4.QtGui import QApplication
from sextante.core.Sextante import Sextante
def main():
""" main function or something """
# as per http://qgis.org/pyqgis-cookbook/intro.html#using-pyqgis-in-custom-application
from qgis.core import *
import qgis.utils
app = QApplication(sys.argv)
# supply path to where is your qgis installed
QgsApplication.setPrefixPath("C:/OSGeo4W/apps/qgis", True)
# load providers
QgsApplication.initQgis()
# how???
# qgis.utils.iface = QgisInterface.instance()
Sextante.initialize()
run_script(qgis.utils.iface)
def run_script(iface):
""" this shall be called from Script Runner"""
Sextante.alglist()
Sextante.alghelp("saga:slopeaspectcurvature")
if __name__=="__main__":
main()
Namun saya mendapatkan sesuatu seperti
Traceback (most recent call last):
File "test.py", line 29, in
main()
File "test.py", line 20, in main
Sextante.initialize()
File "C:\Documents and Settings\user\.qgis\python\plugins\sextante\core\Sextante.py", line 94, in initialize
Sextante.addProvider(GrassAlgorithmProvider())
File "C:\Documents and Settings\user\.qgis\python\plugins\sextante\grass\GrassAlgorithmProvider.py", lin
e 17, in __init__
self.actions.append(DefineGrassRegionAction())
File "C:\Documents and Settings\user\.qgis\python\plugins\sextante\grass\DefineGrassRegionAction.py", li
ne 16, in __init__
canvas = QGisLayers.iface.mapCanvas()
AttributeError: 'NoneType' object has no attribute 'mapCanvas'
Yah ... semuanya menjadi diskusi milis. Mungkin lebih baik pindah ke qgis-user atau qgis-developer daripada SE.
iface
dalam skrip QGIS mandiri.iface
hanya digunakan saat berjalan di sisi QGIS.Jawaban:
Anda dapat membuat skrip untuk bekerja dengan plugin Script Runner Gary Sherman dan menjalankannya dari dalam QGIS. Menjalankan kembali skrip, setelah diedit, akan meminta Script Runner memuat ulang modul dan mencerminkan perubahan Anda. Lihat juga: Daftar plugins.qgis.org Script Runner .
Yang penting adalah memastikan Anda memiliki fungsi run_script, yang dipanggil oleh Script Runner (contoh dari blog-nya):
sumber
AttributeError: 'module' object has no attribute 'run_script'
dan terus bersikeras bahwa saya tidak punya dokumen yang bisa saya lihat di sumber viewer.def run_script(iface)
fungsi? Script Anda tidak akan berjalan di Script Runner tanpa itu.__import__
ruang lingkup dapat dibatasi daripada melihat seluruhsys.path
. Ini menunjukkan docstring dan daftar fungsi lainnya.Sextante harus diinisialisasi, sehingga memuat algoritme dan kemudian dapat menjalankannya.
Panggil Sextante.initialize () sebelum melakukan apa pun.
sumber
Untuk pengguna baru yang membaca posting ini, ada cara menjalankan algoritma pemrosesan QGIS dalam skrip PyQGIS yang berdiri sendiri. Periksa jawaban untuk Impor kesalahan untuk qgis.core saat menjalankan skrip shell OSGeo4w dan Bagaimana saya bisa mengakses `pemrosesan` dengan Python? , yang memberi Anda contoh yang diuji.
sumber
Karena algoritma yang ingin Anda gunakan adalah bagian dari saga, Anda dapat menggunakan saga secara langsung.
misal dari batchfile:
sumber
Menurut Cara menjalankan skrip python sederhana untuk QGIS dari luar (mis. Teks Sublime)? Anda tidak bisa mendapatkan referensi ke
iface
objek di sini karena tidak ada dalam konteks ini karena ini sedang dijalankan di luar QGIS. Adakah peningkatan?sumber