Python ile 'işleme' erişiliyor mu?


16

Bağımsız bir komut dosyasından QGIS dışındaki Python'da patlatma satırları işlevine erişmek istiyorum .

Kullanmak için hangi modülü yüklemem gerekiyor?

Nasıl erişebilirim processing?

from qgis.core import *

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

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

2
Bence kullanmalısın import processing.
Joseph

@Joseph Spesifik olmadığım için üzgünüm: Ama bağımsız bir senaryodan erişmek istiyorum.
ustroetz

Ahh endişelenme :). Bu durumda özür dilerim ama her zaman QGIS içinde çalıştırdığım için bilmiyorum. Umarım başkaları tavsiye eder.
Joseph

Merhaba @ustroetz, bunu bağımsız komut dosyanızdan çalıştırmayı başardınız mı? Soruyorum çünkü harici komut dosyaları çalıştırmaya çalışıyorum.
Joseph

@Joseph No, Ben
ustroetz

Yanıtlar:


25

GÜNCELLEME 24.04.2018: Bunu QGIS v3.x'de nasıl yapacağınızı buradan görebilirsiniz .


QGIS v2.x için

Son olarak, bağımsız PyQGIS komut dosyaları aracılığıyla işleme algoritmalarını çalıştırmanın uygun yolunu buldum.

İşleme eklentisi sürüm 2.2.0-2'yi kullanarak aşağıdaki komut dosyasını deneyebilirsiniz:

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

Daha yeni İşlem sürümleri adresinde bulunabilir /usr/share/qgis/python/plugins, bu nedenle sys.path.append('/usr/share/qgis/python/plugins')uygun şekilde kullanmanız gerekebilir .

Çalışma örneğini , bir Qgis-dev posta listesi tartışmasına dayanan Hata: Algoritma bulunamadı bölümünde buldum .


1
İşleme eklentisi adresinde olmayabilir '/home/user/.qgis2/python/plugins'. QGIS'i açıp plugins/Manage and install pluginsişleme gitmek için aşağı kaydır'ı tıklayarak konumu bulabilirsiniz ve açıklamada kurulum konumunu göreceksiniz.
Bay Mor

2
cannot-create-a-qpixmapBu tek başına işlevle ilgili birçok uyarı aldım, ancak bu soruda da çözüldüğünü görüyorum gis.stackexchange.com/questions/188074/…
Bay Purple

1
layerInputRunalg satırını bırakarak ve değiştirerek bağımsız komut dosyasını daha genel hale getirebilirsiniz : general.runalg(*sys.argv[1:])bu komut dosyasının şu soruya göre paralel GIS işlemesi için temel olabileceğinden bahsetmiyorum: gis.stackexchange.com/questions/119961/…
Bay Mor

Aynı çerçeveyi yapmak ancak bağımsız bir Python'dan (QGIS içinde değil) PLUGINS'i çalıştırmak mümkün mü? Alglist () işlevini yürüttüm ve eklentilerimin QGIS'imde yüklü olduğunu göremiyorum ...
Irene

3

Bunu yapmanın genel yolunu bulana kadar, size bir çözüm söyleyeceğim.

/home/germap/.qgis2/python/plugins/Bilgisayarımda yüklü olan İşleme eklentisi 2.2.0-2 sürümünü (bu sürümü kullanmanızı öneririm) kullanıyorum . Bu klasör konumunu bilmeniz gerekir, çünkü işleme modülünü oradan alırsınız.

Sağlayıcı ( qgis) ve algoritmayı ( explodelines) bildiğiniz /home/germap/.qgis2/python/plugins/processing/algs/qgis/için, patlayan satırlar komut dosyası adını almaya bakabilirsiniz : Explode.pyBu bilgiler, algoritmayı doğrudan Python bağımsız komut dosyanıza aktarmanıza olanak tanır.

Bu nedenle, bir Python konsolu açın ve aşağıdaki komut dosyasını kopyalayın (GNU / Linux kullanıyorum, böylece ortam değişkenleri varsayılan olarak ayarlandı, qgis ve PyQt4 kitaplıklarını bir esintiyle içe aktarmama izin veriyor):

# 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)

Hata mesajı almazsanız, hepsi bu kadar. Çıktı katmanı, belirttiğiniz çıktı yoluna kaydedildi ( /home/user/data/out.shp)

Not: Genel bir yolla ilgili olarak (yani, algoritmaları adıyla çağırmak), göndermeden önce çözmem gereken bazı sorunlar buldum. İşe başlar almaz, gönderirim.

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.