Quería duplicar una capa en qgis3 usando python (mostrar los mismos datos vectoriales como diferentes capas) por esta pregunta ( ¿Cómo puedo duplicar una capa en QGIS? ). Además, necesito:
-
asegúrese de que la capa de clonación añadida está en la parte inferior de las capas
-
comprobar si el clon ya existe y duplicar sólo si el clon no existe entre la lista actual de capas (para evitar múltiples clones).
El código que tengo hasta ahora (para duplicar la primera capa) es:
vl = iface.mapCanvas().layer(0)
vl_clone = iface.addVectorLayer(vl.source(), vl.name() + "_clone", vl.providerType())
Actualmente la nueva capa se añade a la parte superior y se convierte en layer(0)
. He intentado seguir las preguntas existentes de GIS.SE (por ejemplo ¿Cómo mover las capas en el Panel de Ordenación de Capas utilizando PyQGIS? ). Pero las preguntas/respuestas existentes son para QGIS 2, e implican cambios de última hora en QGIS3 (por ejemplo iface.layerTreeCanvasBridge()
)
¿Alguien sabe cómo ampliar el código anterior para que funcione en QGIS3?
-- EDITAR --
El código actual que tengo hasta el momento de sintetizar las respuestas/documentación existentes es el siguiente. Aún así, el orden de las capas no cambia. He probado diferentes valores en insert()
como 3
en vano.
lyr1 = iface.mapCanvas().layer(0)
lyr1_clone = iface.addVectorLayer(lyr1.source(), lyr1.name() + "_clone", lyr1.providerType())
bridge = iface.layerTreeCanvasBridge()
treeRoot = QgsProject.instance().layerTreeRoot()
treeRoot.setHasCustomLayerOrder(True)
order = treeRoot.customLayerOrder()
order.insert( -1 , order.pop() ) # lyr1_clone to the bottom # lyr1_clone to the bottom
treeRoot.setCustomLayerOrder( order )
bridge.setCanvasLayers()