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.