QGIS 2.18.1'de vektör katmanlarını python ile birleştirme


9

Şu anda iki vektör katmanlarını birleştirmek için aşağıdaki kodu kullanıyorum:

def append_layers(layer1, layer2, output):
    from processing.core.Processing import Processing
    Processing.initialize()
    import processing.tools
    processing.tools.general.runalg("qgis:mergevectorlayers", layer1, layer2, output)

append_layers(layer1.shp, layer2.shp, output.shp)

QGIS 2.14'te bu iyi çalışıyor gibi görünüyor, ancak 2.18.1'de aşağıdaki mesajla başarısız oluyor:

Error: Wrong number of parameters
ALGORITHM: Merge vector layers

2,14 ile 2,18 arasında değişen bir şey var mı? Yoksa gerçekten bariz bir şeyi mi kaçırıyorum?

Yanıtlar:


11

Evet, Python Konsoluna aşağıdaki kodu yazarsanız , giriş katmanı parametresi artık birden çok katman içerir :

>>>import processing
>>>processing.alghelp("qgis:mergevectorlayers")
ALGORITHM: Merge vector layers
    LAYERS <ParameterMultipleInput>
    OUTPUT <OutputVector>

Bunu çözmenin bir yolu, her iki katmanı giriş parametresine eklemek ve ayırmaktır:

processing.tools.general.runalg("qgis:mergevectorlayers", layer1 + ";" + layer2, output)

Teşekkür ederim, bu iyi çalıştı. 'Runalg ("gdalogr: convertformat")' prosedürü de değişti mi? 2.14'te 'processing.tools.general.runalg (' gdalogr: convertformat ', katman, dosya tipi, "", save_location)' kullanılarak çalışır, ancak 2.18'de hiçbir hata işaretlenmez, ancak yeni dosyalar oluşturulmaz.
JamieTasker

@JamieTasker - En hoş geldiniz! Hayır, aynı parametreler olmalı. Sadece test ettim ve iyi çalışıyor. Sorunlarınız varsa, yeni bir soru sormalı ve giriş katmanı türü, çıkış katmanı türü, kodunuz vb. Gibi tüm ayrıntıları eklemelisiniz.
Joseph

@Joseph Jochen cevabında açıkladığı aynı hatayı alıyorum. Sürüm 2.18.16 Python konsolu kullanıyorum. Hangi katmanın sadece Python listesinin vektör katman girişi olarak çalıştığını bilmek ilginç olacaktır.
Stefan

@Stefan - Geliştiricilerin girdilerin nasıl kullanılması gerektiğini değiştirdiğine inanıyorum. 2.18'in başlarında, katmanların listelere izin vermek için sonunda değiştirilen bir noktalı virgülle ayrılması gerekiyordu. Bunu soran bir yazı vardı .
Joseph

4

Yukarıdaki yanıtı denemek benim için bir istisnaya neden olduğundan ( l1ve l2her ikisi de QgsVectorLayer, QGIS 2.18.17 Python konsolu)

import processing
[...]
processing.runalg('qgis:mergevectorlayers', l1 + ";" + l2, None)
Traceback (most recent call last):
    File "<input>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'QgsVectorLayer' and 'str'

Deniyorum

>>> merged = processing.runalg('qgis:mergevectorlayers', [l1, l2], None)
>>> merged['OUTPUT']
u'C:\\Users\\Jochen\\AppData\\Local\\Temp\\processing30eee19448ef42a497403dd3660cafcf\\82e112158f194f59a53e18d5020a9a9d\\OUTPUT.shp'

Başarıyla.

Yani <ParameterMultipleInput>bir python listesi olarak geçmek buna bir çözüm.

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.