Можно ли получить слой, возвращенный инструментом GRASS, без сохранения его на диск в QGIS?
Я использую некоторые инструменты 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)?
Ответы
Я не думаю, что есть способ использовать инструмент GRASS в QGIS. Я заметил, что используемые мной инструменты GRASS всегда возвращают путь к файлу. Единственный способ получить слой без его сохранения - это использовать собственные инструменты обработки QGIS через processing.run
метод. Этот ответ объясняет, как это сделать.
Если вы используете выходной слой в качестве промежуточного уровня, я рекомендую вам использовать эквивалентный собственный инструмент (QGIS) (если существует), через processing.run
который возвращается QgsVectorLayer
экземпляр без сохранения его на диск. В противном случае я предлагаю вам запустить инструмент с помощью, processing.run
а затем использовать QgsVectorLayer
для добавления вывода в память.