如何在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())

唯一的问题是新层成为activeLayer,因此它将“ _clone”和数字添加到以前的名称,最后以example_clone1,example_clone1_clone2结束,直到笨拙的example_clone1_clone2_clone3_clone4_clone5为止。现在,需要弄清楚如何从最初选择的图层进行复制。


这实际上不是答案,但是QGIS不在乎是否将相同的矢量层两次添加到项目中。
L_Holcombe 2012年

是的,我以后添加了许多副本,但是只能通过“添加图层”并每次浏览选择图层。最少单击4次并进行一些滚动,这很麻烦,因为需要将图层重复20次。
Simbamangu

1
@Simbamangu我对此有不同的看法,我浏览了GIS Wiki。我非常感谢您的观点,让我分享我的观点。我认为问题标题是关于问题要点的指导。由于所有内容都与问题有关,因此在介绍“我如何...”,“为什么如此...”方面没有添加任何新内容,因为很明显这是一个问题。它可能使问题更具可读性,但是无论如何,您都必须查看问题的正文以了解问题的实质。至少看到以“我如何...”开头的问题的整个页面对我来说毫无用处。
TomazicM

1
我更改您旧问题标题的原因?由于有人采取行动,它在GIS主页上大打折扣,我承认有一个(坏)习惯来删除问题的“如何”和“为什么”。
TomazicM

1
@Simbamangu我个人比较喜欢没有“如何”和“为什么”的问题,因为这些词对内容没有任何影响。他们可能会使标题更加可读,但是如果标题有点模棱两可,我看不出任何问题,因为无论如何,人们都必须阅读问题正文以了解其全部内容。我承认,我看到PolyGeo这样做后便开始删除这些单词,然后在发布/编辑问题时阅读了一些有关良好实践的元文章。
TomazicM

Answers:


10

关于此有两个功能请求(#5899#1483)。这当然是一个可行的功能,如果开发人员有兴趣添加,则可能包含在2.0版中。或者,Python插件开发人员对此进行了考虑。

#5899问题还包括一些用于复制图层的Python代码(由开发人员Giuseppe Sucameli提交):

同时,选择矢量层,然后打开QGis python控制台并运行:

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是您的子图层名称的地方。

运行复制代码后,它将出现,您将不得不复制/粘贴原始图层的样式。


完美运作。通过添加“ v”作为粘贴图层样式的键,现在只需几秒钟即可复制图层和样式。
Simbamangu '11年


2
用于提交至master分支的Python绑定的工作方式如下:iface.setActiveLayer( my_layer );iface.actionDuplicateLayer().trigger()其中my_layer是QgsMapLayer,它设置为图例中的活动选定层;然后,会触发actionDuplicateLayer()在图例中的选定图层上工作(默认设置)。
dakcarto 2012年

1

QGIS的最新版本现在具有“复制层”选项。右键单击要复制的图层,它将在下面插入一个新副本。

旁注:似乎您需要对View --> Refresh在一层中进行的更改进行打击才能传播到下一层。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.