파이썬으로 '처리'에 액세스 하시겠습니까?


16

독립형 스크립트에서 QGIS 외부의 Python에서 explode line 기능에 액세스하고 싶습니다 .

사용하려면 어떤 모듈을로드해야합니까?

어떻게 액세스 할 수 processing있습니까?

from qgis.core import *

layerInput = QgsVectorLayer('test.shp', 'test', 'ogr')

processing.runalg('qgis:explodelines', layerInput, 'temp.shp')

2
나는 당신이 사용해야한다고 생각합니다 import processing.
Joseph

@Joseph 구체적이지 않아 죄송합니다. 그러나 독립형 스크립트에서 액세스하고 싶습니다.
ustroetz

아 걱정하지 마라 :). 이 경우에, 사과하지만 QGIS 내에서 항상 실행할 때 나는 모른다. 다른 사람들이 조언하기를 바랍니다.
조셉

안녕하세요 @ustroetz, 독립 실행 형 스크립트에서 실행 했습니까? 외부 스크립트를 실행하려고하기 때문에 묻습니다.
조셉

@Joseph 아니요,하지 않았습니다
ustroetz

답변:


25

업데이트 24.04.2018 : QGIS v3.x에서이 작업을 수행하는 방법을 여기 에서 참조 하십시오 .


QGIS v2.x의 경우

마지막으로 독립형 PyQGIS 스크립트를 통해 처리 알고리즘을 실행하는 적절한 방법을 찾았습니다.

처리 플러그인 버전 2.2.0-2를 사용하여 다음 스크립트를 시도 할 수 있습니다.

# Prepare the environment
import sys
from qgis.core import *
from PyQt4.QtGui import *
app = QApplication([])
QgsApplication.setPrefixPath("/usr", True)
QgsApplication.initQgis()

# Prepare processing framework 
sys.path.append('/home/user/.qgis2/python/plugins') # Folder where Processing is located
from processing.core.Processing import Processing
Processing.initialize()
from processing.tools import *

# Run the algorithm
layerInput = QgsVectorLayer('test.shp', 'test', 'ogr')
general.runalg('qgis:explodelines', layerInput, 'temp.shp')

# Exit applications
QgsApplication.exitQgis()
QApplication.exit()

최신 처리 버전은에있을 수 있으므로 적절 /usr/share/qgis/python/plugins하게 사용해야 sys.path.append('/usr/share/qgis/python/plugins')합니다.

Qgis-dev 메일 링리스트 토론 에 기반한 Error : Algorithm not found 에서 실제 예제를 찾았습니다 .


1
처리 플러그인이에 있지 않을 수 있습니다 '/home/user/.qgis2/python/plugins'. QGIS를 열고 plugins/Manage and install plugins아래로 스크롤하여 처리를 클릭하여 위치를 찾을 수 있으며 설명에 설치 위치가 표시됩니다.
Mr Purple

2
cannot-create-a-qpixmap이 독립형 기능 에 대해 많은 경고를 받았지만이 질문에서도 해결되었습니다. gis.stackexchange.com/questions/188074/…
Mr Purple

1
layerInputrunalg 행을 삭제 하고 변경 하여 독립형 스크립트를보다 일반적인 형태로 만들 수 있습니다 . general.runalg(*sys.argv[1:])이 스크립트는이 질문에 따라 병렬 GIS 처리의 기초가 될 수 있습니다. gis.stackexchange.com/questions/119961/…
Mr 보라색

동일한 프레임 워크를 수행 할 수 있지만 독립형 Python (QGIS 내부가 아님)에서 PLUGINS를 실행할 수 있습니까? alglist () 함수를 실행했는데 QGIS에 플러그인이 설치되어 있지 않습니다.
Irene

3

일반적인 방법으로 작업 할 때까지 해결 방법을 알려 드리겠습니다.

/home/germap/.qgis2/python/plugins/내 컴퓨터에 설치된 처리 플러그인 버전 2.2.0-2 (이 버전을 사용하는 것이 좋습니다)를 사용 합니다. 처리 모듈을 가져 오기 때문에이 폴더 위치를 알아야합니다.

공급자 ( qgis)와 알고리즘 ( explodelines) 을 알고 있으므로 /home/germap/.qgis2/python/plugins/processing/algs/qgis/분해 라인 스크립트 이름을 살펴볼 수 있습니다 . Explode.py이 정보를 통해 알고리즘을 Python 독립형 스크립트로 직접 가져올 수 있습니다.

그래서 파이썬 콘솔을 열고 다음 스크립트를 복사하십시오 (GNU / Linux를 사용하므로 환경 변수가 기본적으로 설정되어 바람에 qgis 및 PyQt4 라이브러리를 가져올 수 있습니다).

# Prepare the environment
import sys
from PyQt4.QtGui import *
from qgis.core import *
app = QApplication([])
QgsApplication.setPrefixPath("/usr", True)
QgsApplication.initQgis()

# Tell Python where you will get processing from
sys.path.append('/home/germap/.qgis2/python/plugins')

# Reference the algorithm you want to run
from processing.algs.qgis.Explode import *
alg = Explode() 

# Set input and output
inLayer = QgsVectorLayer('/home/user/data/in.shp', 'input', 'ogr')
outLayer = '/home/user/data/out.shp'
alg.setParameterValue('INPUT', inLayer)
alg.setOutputValue('OUTPUT', outLayer)

# Run the algorithm
from processing.core.SilentProgress import SilentProgress
progress = SilentProgress()
alg.processAlgorithm(progress)

오류 메시지가 표시되지 않으면 바로 그 것입니다. 출력 레이어가 지정한 출력 경로에 저장되었습니다 ( /home/user/data/out.shp)

참고 : 일반적인 방법 (예 : 이름으로 알고리즘 호출)과 관련하여 게시하기 전에 해결해야 할 몇 가지 문제가 있습니다. 작동하게되면 게시하겠습니다.

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