Sextante algoritmalarını QGIS python konsolu dışında nasıl çalıştırırım?


10

OSGeo4W dağıtımından bağımsız bir pythondan sextante'i çalıştırmanın yolunu bulmaya çalışıyorum. Bunu yapmak istememin nedeni Model Builder'dan her modeli test etmek istediğimde iletişim kutusuna parametre girmekten yoruldum.

İşte python betiği diyelim 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")

Toplu iş dosyamdan çağırıyorum

@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

Sorun şu ki Algorithm not found, ben QGIS python konsolundan anlamlı çıktı alırken diyor .

Bir şeyi başlatmak için eksik olduğumu hissediyorum. Ama ne?

GUI kullanarak tonlarca parametre girmekten başka bir Modeli test etmenin daha iyi bir yolu var mı?

GÜNCELLEME 7/2/2012

Ben "mayın" algoritmaları ile test etmek için genel pythonic çözüm arıyorum. Bahsedilen algoritma sadece bir şeyin başlatılmadığını gösteren bir örnektir.

GÜNCELLEME 7/27/2012

Komut Dosyası Çalıştırıcısına bir alternatif, komut dosyalarında hata ayıklamak için IPython konsolunu kullanmaktır . Bunun dışında başka hiçbir şey olmadan sextante ile basit birim testi yapmanın bir yolu yok gibi görünüyor :(

GÜNCELLEME 7/30/2012

Victor Olaya'nın da belirttiği gibi, Sextante'ı aşağıdaki koddaki gibi başlatmaya çalışıyorum.

#!/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()

Ancak ben böyle bir şey alıyorum

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'

Şey ... hepsi bir posta listesi tartışması haline geliyor. Belki de SE yerine qgis kullanıcısına veya qgis geliştiricisine geçmeye değer.


ifaceBağımsız bir QGIS komut dosyasında erişemezsiniz . ifaceyalnızca QGIS tarafında çalışırken kullanılabilir.
Nathan W

Yanıtlar:


5

Senaryolarınızı Gary Sherman'ın Script Runner eklentisiyle çalışacak şekilde tasarlayabilir ve QGIS içinden çalıştırabilirsiniz. Komut dosyasını yeniden düzenledikten sonra, Komut Dosyası Çalıştırıcısı'nın modülü yeniden yüklemesini ve değişikliklerinizi yansıtmasını istemesi gerekir. Ayrıca bkz: Script Runner'ın plugins.qgis.org listesi .

Gerekli olan, Script Runner tarafından çağrılan bir run_script fonksiyonuna sahip olduğunuzdan emin olmaktır (blogundan örnek):

def run_script(iface):
    ldr = Loader(iface)
    ldr.load_shapefiles('/vmap0_shapefiles')

Teoride, hata ayıklamaya yardımcı olsa da (QGIS içinde olsa da), Windows'ta kırılmış gibi görünüyor. Söylemeye AttributeError: 'module' object has no attribute 'run_script'devam ediyor ve kaynak görüntüleyicide görebileceğim hiçbir öğreti olmadığında ısrar ediyor.
mlt

def run_script(iface)İşlevi eklediniz mi ? Komut dosyanız bu olmadan Script Runner'da çalışmaz.
dakcarto

Görünüşe göre biri test :-) olarak komut dosyası adı olmamalıdır mytest şimdiye kadar iyi çalışıyor. Her __import__yere bakmak yerine kapsamın kısıtlanabilmesi güzel olurdu sys.path. Doktora ve diğer işlevlerin listesini gösterir.
mlt

Script Runner burada
Dave X

4

Sextante başlatılmalıdır, bu yüzden algoritmaları yükler ve daha sonra bunları yürütebilir.

Bir şey yapmadan önce Sextante.initialize () öğesini çağırın.


Merhaba Victor, durum hala böyle mi? Bağımsız bir komut dosyasında (QGIS dışında) Sextante'i nasıl çağıracağımı ve çalışmamaya çalıştığım tüm örnekleri buluyorum. Bu bir yıl önce yayınlanmıştır, bu yüzden sextante mimarisinin değişip değişmediğini merak ediyorum?
Zengin


2

Kullanmak istediğiniz algoritma destanın bir parçası olduğundan, destanı doğrudan kullanabilirsiniz.

örneğin bir toplu iş dosyasından:

@ECHO OFF

REM SET SAGA_MLB = C:\SAGA\Modules
REM SET PATH = %PATH%;C:\SAGA

saga_cmd ta_morphometry "Slope, Aspect, Curvature" -ELEVATION=elevation.sgrd -SLOPE=slope.sgrd -ASPECT=aspect.sgrd -CURV=NULL -HCURV=NULL -VCURV=NULL -METHOD=5

PAUSE

Özür dilerim, açıkça belirtmeliydim. Sadece bir örnekti. Ben am değil özellikle SAGA kullanacağız.
mlt

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.