QGIS Python 콘솔 외부에서 sextante 알고리즘을 실행하는 방법은 무엇입니까?


10

OSGeo4W 배포의 독립형 파이썬에서 sextante를 실행하는 방법을 찾으려고 노력하고 있습니다. 내가하고 싶은 이유는 Model Builder에서 모델을 테스트 할 때마다 대화 상자에 매개 변수를 입력하는 데 지 쳤기 때문입니다.

여기 파이썬 스크립트가 있습니다. 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")

배치 파일에서 전화하고 있다는 것을

@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

문제는 Algorithm not foundQGIS 파이썬 콘솔에서 의미있는 결과를 얻는 반면 말합니다 .

무언가를 초기화하는 것이 빠진 것 같습니다. 근데 뭐?

GUI를 사용하여 수많은 매개 변수를 입력하는 것보다 Model을 테스트하는 더 좋은 방법이 있습니까?

2012 년 7 월 2 일 업데이트

"mine"알고리즘으로 테스트 할 일반적인 파이 토닉 솔루션을 찾고 있습니다. 앞서 언급 한 알고리즘은 무언가가 초기화되지 않았 음을 보여주는 예일뿐입니다.

2012 년 7 월 27 일 업데이트

Script Runner의 대안은 IPython 콘솔 을 사용하여 스크립트 를 디버깅하는 것입니다. 그 외에는 아무것도 달리지 않고 sextante로 간단한 단위 테스트를 수행하는 방법이없는 것 같습니다.

2012 년 7 월 30 일 업데이트

Victor Olaya가 제안한 것처럼 아래 코드와 같이 Sextante를 초기화하려고합니다.

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

그러나 나는 다음과 같은 것을 얻는다.

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'

글쎄 ... 모두 메일 링리스트 토론이되었다. 아마도 SE 대신 qgis-user 또는 qgis-developer로 옮겨 갈 가치가 있습니다.


iface독립형 QGIS 스크립트 에서는 액세스 할 수 없습니다 . ifaceQGIS 측면에서 실행할 때만 사용됩니다.
Nathan W

답변:


5

Gary Sherman의 Script Runner 플러그인 과 함께 작동하도록 스크립트를 제작하여 QGIS 내에서 실행할 수 있습니다. 편집 후 스크립트를 다시 실행하면 스크립트 러너에게 모듈을 다시로드하라는 메시지가 표시되고 변경 사항이 반영됩니다. 스크립트 러너의 plugins.qgis.org 리스팅 도 참조 하십시오 .

필수는 run_script 함수가 있는지 확인하는 것입니다. run_script 함수는 Script Runner에 의해 호출됩니다 (예 : 블로그의 예).

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

이론적으로는 (QGIS 내부에서도) 디버깅하는 데 실제로 도움이되지만 Windows에서는 고장난 것처럼 보입니다. AttributeError: 'module' object has no attribute 'run_script'소스 뷰어에서 볼 수있는 docstring이 없다는 것을 계속 말하고 주장합니다.
mlt

def run_script(iface)기능 을 추가 했습니까 ? 스크립트가 없으면 스크립트 러너에서 스크립트가 실행되지 않습니다.
dakcarto

분명히 스크립트 이름을 test :-) 로 지정해서는 안됩니다 . mytest 는 지금까지 정상적으로 작동합니다. __import__전체를 보지 않고 범위를 제한 할 수 있다면 좋을 것 sys.path입니다. docstring과 다른 함수의 목록을 보여줍니다.
mlt

Script Runner가 여기
Dave X

4

Sextante는 초기화되어야하므로 알고리즘을로드하고 나중에 실행할 수 있습니다.

무언가를하기 전에 Sextante.initialize ()를 호출하십시오.


안녕 빅터, 아직도 그래요? QGIS 외부의 독립 실행 형 스크립트에서 Sextante를 호출하고 작동하지 않는 Google의 모든 예제를 찾는 방법에 어려움을 겪고 있습니다. 이것은 1 년 전에 게시되었으므로 sextante의 아키텍처가 변경되었는지 궁금합니다.
Rich


2

사용하려는 알고리즘이 saga의 일부이므로 saga를 직접 사용할 수 있습니다.

예를 들어 배치 파일에서 :

@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

죄송합니다. 분명히해야합니다. 단지 예일뿐입니다. 나는 특히 SAGA를 사용 하지 않을 것입니다.
mlt

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.