Можно ли получить слой, возвращенный инструментом GRASS, без сохранения его на диск в QGIS?

Dec 18 2020

Я использую некоторые инструменты GRASS в QGIS Python Console. Все инструменты , которые я использую возвращает словарь с ключом и значением , которое содержит строку пути, как это: {"output": "file/path"}. Здесь есть ответ . Он предлагает использовать эту строку в QgsVectorLayer. Но запись / чтение файла на / с диска занимает много времени.

Я пробовал processing.runAndLoadResultsи processing.run. Оба добавляют слой. Но перед добавлением слоя они сохраняют слой на диск, а затем добавляют его.

processing.run("grass7:v.buffer", {..., 'output':'TEMPORARY_OUTPUT', ...})
# returns {'output': '/tmp/.../output.gpkg'} -> file path

processing.runAndLoadResults("grass7:v.buffer", , {..., 'output':'TEMPORARY_OUTPUT', ...})
# returns {'output': '/tmp/.../output.gpkg'} -> file path

Интересно, есть ли способ получить возвращенный / добавленный слой с помощью инструмента GRASS без сохранения на диск (для использования в следующем инструменте обработки в скрипте Python)?

Ответы

3 KadirŞahbaz Dec 18 2020 at 19:08

Я не думаю, что есть способ использовать инструмент GRASS в QGIS. Я заметил, что используемые мной инструменты GRASS всегда возвращают путь к файлу. Единственный способ получить слой без его сохранения - это использовать собственные инструменты обработки QGIS через processing.runметод. Этот ответ объясняет, как это сделать.

Если вы используете выходной слой в качестве промежуточного уровня, я рекомендую вам использовать эквивалентный собственный инструмент (QGIS) (если существует), через processing.runкоторый возвращается QgsVectorLayerэкземпляр без сохранения его на диск. В противном случае я предлагаю вам запустить инструмент с помощью, processing.runа затем использовать QgsVectorLayerдля добавления вывода в память.