Wie kann ich eine Ebene in QGIS duplizieren?

9

Ich möchte dieselben Vektordaten auf unterschiedliche Weise als unterschiedliche Ebenen anzeigen. Während es sehr praktisch ist in der Lage sein , die Schicht zu kopieren und Stil in 1.8+, wäre es schön zu sein, um eine Schicht zu wählen und mit dem rechten klicken , um es direkt zu kopieren oder zu vervielfältigen.

Gibt es eine einfache Möglichkeit, dies zu tun, wie einen Python-Befehl?


Update: @ dakcartos Vorschlag funktioniert einwandfrei. Da ich viele doppelte Ebenen hinzufügen musste, habe ich es so angepasst, dass es so oft wie nötig wiederholt wird:

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

Das einzige Problem besteht darin, dass die neue Ebene zur aktiven Ebene wird, sodass "_clone" und die Nummer zum vorherigen Namen hinzugefügt werden. Dies führt zu example_clone1, example_clone1_clone2 bis zu dem unhandlichen example_clone1_clone2_clone3_clone4_clone5. Sie müssen jetzt herausfinden, wie Sie von der ursprünglich ausgewählten Ebene duplizieren können.

Simbamangu
quelle
Dies ist keine wirkliche Antwort, aber QGIS macht es nichts aus, wenn Sie einem Projekt zweimal dieselbe Vektorebene hinzufügen.
L_Holcombe
Ja, ich habe später so manches Duplikat hinzugefügt, aber nur durch "Ebene hinzufügen" und Durchsuchen, um die Ebene jedes Mal auszuwählen. Mindestens 4 Klicks und ein wenig Scrollen, was mühsam wird, wenn eine Ebene 20 Mal dupliziert werden muss.
Simbamangu
1
@ Simbamangu Es gibt verschiedene Ansichten dazu, ich habe das GIS-Wiki durchgesehen. Ich schätze Ihre Ansicht auf jeden Fall, lassen Sie mich meine teilen. Ich betrachte den Fragentitel als Richtschnur für den Kern der Frage. Da es nur um Fragen geht, fügen die Intros "Wie mache ich ...", "Warum ist es ..." nichts Neues hinzu, da klar ist, dass dies eine Frage ist. Es könnte die Frage lesbarer machen, aber auf jeden Fall müssen Sie sich den Hauptteil der Frage ansehen, um zu sehen, worum es geht. Eine ganze Seite mit Fragen zu sehen, die mit "Wie mache ich ..." beginnen, ist zumindest für mich unproduktiv.
TomazicM
1
Und warum habe ich den Titel Ihrer alten Frage geändert? Es ist auf der GIS-Homepage wegen einer Aktion von jemandem aufgetaucht, und ich gebe zu, dass ich die (schlechte) Angewohnheit habe, Teile von Fragen wie "Warum" und "Warum" zu entfernen.
TomazicM
1
@ Simbamangu Ich persönlich bevorzuge Fragen ohne "Wie" und "Warum", weil diese Wörter dem Inhalt nichts hinzufügen. Sie mögen den Titel lesbarer machen, aber ich sehe kein Problem, wenn der Titel etwas mehrdeutig ist, da man sowieso eine Reihe von Fragen lesen muss, um zu sehen, worum es geht. Und ich gebe zu, dass ich angefangen habe, dieses Wort zu entfernen, nachdem ich PolyGeo dabei gesehen und dann einige Meta-Artikel über bewährte Praktiken beim Posten / Bearbeiten von Fragen gelesen habe.
TomazicM

Antworten:

10

Hierzu gibt es zwei Funktionsanforderungen ( Nr. 5899 und Nr. 1483 ). Dies ist sicherlich eine machbare Funktion und könnte wahrscheinlich in Version 2.0 enthalten sein, wenn ein Entwickler daran interessiert wäre, sie hinzuzufügen. oder ein Python-Plugin-Entwickler hat darüber nachgedacht.

Die Ausgabe Nr. 5899 enthält auch Python-Code zum Duplizieren einer Ebene (eingereicht von Entwickler Giuseppe Sucameli):

Wählen Sie in der Zwischenzeit die Vektorebene aus, öffnen Sie die QGis-Python-Konsole und führen Sie Folgendes aus:

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

Der vorherige Code fügt der Karte dieselbe Unterschicht hinzu.

Es ist schwierig , es zu tun , um einen einzeiliger Python - Skript wie die vorherigen verwenden, aber wenn man die Unterschicht Namen kennen , können Sie einfach ersetzen vl.source()mit vl.source().split("|")[0] + "|layername=my_sublayer_name"dem my_sublayer_name ist der Name Ihrer Unterschicht.

Nach dem Ausführen des Duplizierungscodes wird angezeigt, dass Sie den Stil der ursprünglichen Ebene kopieren / einfügen müssen.

Dakcarto
quelle
Funktioniert perfekt. Durch Hinzufügen von 'v' als Schlüssel zum Einfügen des Ebenenstils dauert das Duplizieren von Ebene und Stil nur noch wenige Sekunden.
Simbamangu
Diese Funktion ist in der Revision c11df1aa79 implementiert. hub.qgis.org/projects/quantum-gis/repository/revisions/…
Vladimir
2
Die Python-Bindung für dieses Commit für den Master-Zweig funktioniert folgendermaßen: iface.setActiveLayer( my_layer );iface.actionDuplicateLayer().trigger()Dabei ist my_layer ein QgsMapLayer, der auf die aktive, ausgewählte Ebene in der Legende festgelegt ist. Anschließend wird actionDuplicateLayer () ausgelöst, um die ausgewählten Ebenen in der Legende zu bearbeiten (Standardeinstellung).
Dakcarto
1

Die neuesten Versionen von QGIS verfügen jetzt über die Option "Ebene duplizieren". Klicken Sie mit der rechten Maustaste auf die Ebene, die Sie duplizieren möchten, und es wird eine neue Kopie direkt darunter eingefügt.

Randnotiz: Es scheint, dass Sie nach View --> RefreshÄnderungen suchen müssen, die in der einen Ebene vorgenommen wurden, um zur nächsten zu gelangen.

user94812
quelle