Об'єднання шарів вектора через python у QGIS 2.18.1


9

На даний момент я використовую наступний код для об'єднання двох векторних шарів разом:

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, однак він не працює в 2.18.1 із таким повідомленням:

Error: Wrong number of parameters
ALGORITHM: Merge vector layers

Чи є щось, що змінилося між 2.14 та 2.18? Або я просто пропускаю щось дійсно очевидне?

Відповіді:


11

Так, якщо ви введете наступний код на консолі Python , параметр вхідного рівня тепер включає в себе кілька шарів :

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

Отже, один із способів вирішення цього питання - додати обидва шари до вхідного параметра та розділити їх:

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

Дякую, що працювало чудово. Чи змінилася процедура для "runalg (" gdalogr: convertformat ")? У 2.14 він працює з використанням 'treatment.tools.general.runalg (' gdalogr: convertformat ', шар, файл-файл, "", save_location)', але на 2.18 помилок не позначено, але нові файли не створюються.
JamieTasker

@JamieTasker - ласкаво просимо! Ні, повинні бути однакові параметри. Просто перевірив це, і він працює чудово. Якщо у вас є проблеми, вам слід задати нове запитання та включити всі деталі, такі як тип вхідного шару, тип вихідного шару, ваш код тощо.
Йосип

@Joseph Я отримую ту саму помилку, яку описав Йохен у своїй відповіді. Я використовую версію 2.18.16 консолі Python. Було б цікаво знати, з якої версії лише список Python працює як введення векторного шару.
Стефан

@Stefan - Я вважаю, що розробники змінили спосіб використання вхідних даних. У першій версії 2.18 верстви шарів потрібно було відокремити крапкою з двокрапкою, яка згодом була змінена для отримання списків. З цього приводу з’явилася публікація .
Йосип

4

Оскільки спроба вищевказаної відповіді викликає виняток ( l1і l2вони обидва типу QgsVectorLayer, консоль QGIS 2.18.17 Python) для мене

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'

Я намагався

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

успішно.

Тому передача <ParameterMultipleInput>списку пітонів є рішенням цього.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.