Как мне дублировать слой в QGIS?

9

Я хотел бы отображать одни и те же векторные данные по-разному в разных слоях. Хотя очень удобно иметь возможность копировать и вставлять стиль слоя в 1.8+, было бы неплохо иметь возможность выбрать слой и щелкнуть правой кнопкой мыши, чтобы скопировать или скопировать его напрямую.

Есть ли простой способ сделать это, например, команда Python?


Обновление: предложение @ dakcarto работает отлично. Так как мне нужно было добавить много дублирующих слоев, я адаптировал его для создания цикла столько раз, сколько необходимо:

for n in range(1,5): 
    iface = qgis.utils.iface; vl = iface.activeLayer(); iface.addVectorLayer(vl.source(), vl.name() + "_clone" + str(n), vl.providerType())

Единственная проблема состоит в том, что новый слой становится активным слоем, поэтому он добавляет «_clone» и номер к предыдущему имени, заканчиваясь на example_clone1, example_clone1_clone2, до громоздкого example_clone1_clone2_clone3_clone4_clone5. Нужно выяснить, как дублировать изначально выбранный слой, сейчас.

Simbamangu
источник
Это не совсем ответ, но QGIS не против, если вы добавите один и тот же векторный слой в проект дважды.
L_Holcombe
да, я добавил много дубликатов позже, но только путем «добавления слоя» и просмотра, чтобы выбрать слой каждый раз. Минимум 4 клика и прокрутка, которая становится утомительной из-за необходимости дублировать слой 20 раз.
Симбамангу
1
@Simbamangu Есть разные взгляды на это, я прошел ГИС вики. Я определенно ценю ваше мнение, позвольте мне поделиться своим. Я рассматриваю название вопроса как направление вопроса о сути вопроса. Так как это все о вопросах, то вступления "Как я ...", "Почему это ..." не добавляют ничего нового, поскольку ясно, что это вопрос. Это может сделать вопрос более читабельным, но в любом случае вам нужно посмотреть на содержание вопроса, чтобы понять, о чем он. Видеть целую страницу вопросов, которые начинаются с "Как я ...", по крайней мере для меня непродуктивно.
TomazicM
1
И почему я сменил название вашего старого вопроса? На главной странице ГИС это произошло из-за некоторых действий, и я признаю, что у меня есть (плохая) привычка удалять части вопросов «как» и «почему».
ТомазикМ
1
@Simbamangu Я лично предпочитаю вопросы без «Как» и «Почему», потому что эти слова ничего не добавляют к содержанию. Они могут сделать заголовок более читабельным, но я не вижу никаких проблем, если заголовок немного двусмысленный, так как в любом случае нужно прочитать основную часть вопроса, чтобы понять, в чем дело. И я признаю, что я начал удалять это слово после того, как увидел, как PolyGeo делает это, а затем прочитал некоторые мета-статьи о передовой практике при публикации / редактировании вопросов.
TomazicM

Ответы:

10

По этому поводу есть два запроса ( # 5899 и # 1483 ). Это, безусловно, выполнимая функция, и она может быть включена в версию 2.0, если разработчик заинтересован в ее добавлении; или разработчик плагина Python уделил этому внимание.

В выпуске # 5899 также содержится некоторый код Python для дублирования слоя (предоставленный разработчиком Джузеппе Сукамели):

Тем временем выберите векторный слой, затем откройте консоль Python QGis и запустите:

iface = qgis.utils.iface; vl = iface.activeLayer(); iface.addVectorLayer(vl.source(), vl.name() + "_clone", vl.providerType())

Предыдущий код добавляет на карту тот же подслой.

Сложно сделать это, используя однострочный скрипт на Python, как и предыдущий, но если вы знаете имя подслоя, вы можете просто заменить vl.source()на vl.source().split("|")[0] + "|layername=my_sublayer_name"где my_sublayer_name - имя вашего подслоя.

Появляется после запуска кода дублирования, вам придется скопировать / вставить стиль исходного слоя.

dakcarto
источник
Работает отлично. Добавив 'v' в качестве ключа для вставки стиля слоя, дублирование слоя и стиля теперь занимает всего несколько секунд.
Симбамангу
Эта функция реализована в ревизии c11df1aa79. hub.qgis.org/projects/quantum-gis/repository/revisions/…
Владимир
2
Привязка Python для этого коммита к основной ветке работает следующим образом: iface.setActiveLayer( my_layer );iface.actionDuplicateLayer().trigger()где my_layer - это QgsMapLayer, который установлен на активный выбранный слой в легенде; затем actionDuplicateLayer () запускается для работы с выбранными слоями в легенде (по умолчанию).
Даккарто
1

В последних версиях QGIS теперь есть опция «Duplicate Layer». Щелкните правой кнопкой мыши слой, который вы хотите дублировать, и он вставит новую копию чуть ниже.

Примечание: кажется, вам нужно нажать, View --> Refreshчтобы изменения, сделанные на одном слое, распространялись на следующий.

user94812
источник