QGIS अजगर कंसोल के बाहर sextante एल्गोरिदम कैसे चलाएं?


10

मैं OSGeo4W वितरण से एक स्टैंडअलोन अजगर से sextante चलाने के तरीके का पता लगाने की कोशिश कर रहा हूँ। ऐसा करने का कारण यह है कि मैं हर बार जब मैं मॉडल बिल्डर से एक मॉडल का परीक्षण करना चाहता हूं तो मैं डायलॉग में पैरामीटर दर्ज करते हुए थक गया।

तो यहाँ अजगर स्क्रिप्ट चलो इसे कहते हैं 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 foundजबकि मुझे QGIS अजगर कंसोल से सार्थक आउटपुट मिलता है।

मुझे ऐसा लगता है कि मैं किसी चीज़ को शुरू करने के लिए याद कर रहा हूँ। पर क्या?

क्या जीयूआई का उपयोग करके टन के मापदंडों को दर्ज करने के अलावा एक मॉडल का परीक्षण करने का एक बेहतर तरीका है?

अद्यतन 7/2/2012

मैं "मेरा" एल्गोरिदम के साथ परीक्षण करने के लिए सामान्य पायथोनिक समाधान की तलाश कर रहा हूं। Aforementioned एल्गोरिथ्म सिर्फ एक उदाहरण है जो दिखा रहा है कि शायद कुछ आरंभिक नहीं था।

अद्यतन 7/27/2012

स्क्रिप्ट रनर का एक विकल्प IPython कंसोल का उपयोग स्क्रिप्ट को डीबग करने के लिए है। इसके अलावा वहाँ कोई रास्ता नहीं के साथ sextante के साथ सरल इकाई परीक्षण करने के लिए नहीं लगता है :(

अद्यतन 7/30/2012

जैसा कि विक्टर ओलया सुझाव देते हैं, मैं नीचे दिए गए कोड की तरह सेक्स्टांटे को इनिशियलाइज़ करने की कोशिश करता हूं।

#!/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'

खैर ... यह सब एक मेलिंग सूची चर्चा समान हो जाती है। शायद यह एसई के बजाय qgis-user या qgis-developer पर जाने के लायक है।


आप ifaceएक स्वसंपूर्ण QGIS स्क्रिप्ट तक नहीं पहुँच सकते । ifaceसाइड क्यूजीआईएस में चलने पर केवल उपयोग के लिए है।
नाथन डब्ल्यू

जवाबों:


5

आप अपनी स्क्रिप्ट को गैरी शेरमैन की स्क्रिप्ट रनर प्लगइन के साथ काम करने और QGIS के भीतर से चलाने के लिए तैयार कर सकते हैं। संपादन के बाद स्क्रिप्ट को फिर से चलाना, स्क्रिप्ट रनर को मॉड्यूल को फिर से लोड करने और अपने परिवर्तनों को प्रतिबिंबित करने के लिए संकेत देना चाहिए। यह भी देखें: स्क्रिप्ट धावक plugins.qgis.org सूची

यह सुनिश्चित करने के लिए कि आपके पास रन_स्क्रिप्ट फ़ंक्शन है, जिसे स्क्रिप्ट रनर द्वारा बुलाया जाता है (उदाहरण उसके ब्लॉग से):

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

हालांकि सिद्धांत रूप में इसे वास्तव में डीबग करने में मदद करनी चाहिए (हालांकि क्यूजीआईएस के अंदर), ऐसा लगता है कि यह विंडोज पर टूट गया है। यह कहता रहता है AttributeError: 'module' object has no attribute 'run_script'और जोर देता रहता है कि मेरे पास कोई डॉकस्ट्रिंग नहीं है जिसे मैं स्रोत दर्शक में देख सकता हूं।
बजे

क्या आपने def run_script(iface)फ़ंक्शन जोड़ा ? आपकी स्क्रिप्ट स्क्रिप्ट रनर के बिना नहीं चलेगी।
डेकार्टो

जाहिर है एक के रूप में स्क्रिप्ट को नाम नहीं होना चाहिए परीक्षण :-) mytest काम करता है ठीक है अब तक। यह अच्छा होगा यदि __import__सभी को देखने के बजाय गुंजाइश को बाधित किया जा सकता है sys.path। यह डॉकस्ट्रिंग और अन्य कार्यों की सूची दिखाता है।
22:12

स्क्रिप्ट रनर को यहां
डेव एक्स

4

Sextante को इनिशियलाइज़ किया जाना है, इसलिए यह एल्गोरिदम को लोड करता है और बाद में उन्हें निष्पादित कर सकता है।

कुछ भी करने से पहले Sextante.initialize () पर कॉल करें।


हाय विक्टर, क्या यह अभी भी मामला है? मैं एक स्टैंडअलोन स्क्रिप्ट (QGIS के बाहर) में Sextante को कॉल करने के तरीके के साथ संघर्ष कर रहा हूं और काम नहीं करने के लिए सभी उदाहरण ढूंढ रहा हूं। यह एक साल पहले पोस्ट किया गया था तो मुझे आश्चर्य है कि क्या सेक्स्टेंट के वास्तुकला में बदलाव आया है?
रिच

3

इस पोस्ट को पढ़ने वाले नए उपयोगकर्ताओं के लिए, स्टैंडअलोन PyQGIS स्क्रिप्ट में QGIS प्रोसेसिंग एल्गोरिदम चलाने का एक तरीका है। OSGeo4w शेल स्क्रिप्ट को चलाते समय qgis.core के लिए आयात त्रुटि के उत्तर की जाँच करें और मैं पायथन के साथ `प्रोसेसिंग` का उपयोग कैसे कर सकता हूं? , जो आपको परीक्षित उदाहरण प्रदान करते हैं।


1
और पतन का कारण है ...?
जर्मेन कैरिलो

2

चूंकि आप जिस एल्गोरिथ्म का उपयोग करना चाहते हैं वह गाथा का हिस्सा है, आप सीधे गाथा का उपयोग कर सकते हैं।

जैसे एक बैचफाइल से:

@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 का उपयोग नहीं करने जा रहा हूं ।
19

2

के अनुसार कैसे बाहर से QGIS (जैसे उदात्त पाठ) के लिए एक सरल अजगर स्क्रिप्ट चलाने के लिए? आपको ifaceयहां ऑब्जेक्ट का संदर्भ नहीं मिल सकता है क्योंकि यह इस संदर्भ में मौजूद नहीं है क्योंकि यह QGIS के बाहर चलाया जा रहा है। कोई प्रगति?


हाँ, कृपया मेरे उत्तर की जाँच करें।
जर्मन कैरिलो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.