Beispiel #1
0
    def test_layerDefinitionRewriteId(self):
        tmpfile = os.path.join(tempfile.tempdir, "test.qlr")

        ltr = QgsProject.instance().layerTreeRoot()

        self.pointsLayer.setDependencies(
            [QgsMapLayerDependency(self.linesLayer.id())])

        QgsLayerDefinition.exportLayerDefinition(tmpfile, [ltr])

        grp = ltr.addGroup("imported")
        QgsLayerDefinition.loadLayerDefinition(tmpfile, QgsProject.instance(),
                                               grp)

        newPointsLayer = None
        newLinesLayer = None
        for l in grp.findLayers():
            if l.layerId().startswith('points'):
                newPointsLayer = l.layer()
            elif l.layerId().startswith('lines'):
                newLinesLayer = l.layer()
        self.assertIsNotNone(newPointsLayer)
        self.assertIsNotNone(newLinesLayer)
        self.assertTrue(newLinesLayer.id(
        ) in [dep.layerId() for dep in newPointsLayer.dependencies()])

        self.pointsLayer.setDependencies([])
    def copy(self):
        # Iterate
        selectedNodes = self.iface.layerTreeView().selectedNodes(True)
        if len(selectedNodes) == 0:
            self.iface.messageBar().pushMessage(
                "Copy layers and groups",
                "First select at least 1 layer or group in the Layers Panel.",
                0, 7)
            return

        doc = QDomDocument("QGIS-layers-and-groups")
        QgsLayerDefinition.exportLayerDefinition(doc, selectedNodes, "", "")

        tempDir = tempfile.gettempdir()
        xmlFilePath = os.path.join(tempDir,
                                   str(time.time()).replace(".", "") + ".qlr")
        f = codecs.open(xmlFilePath, 'w', encoding='utf-8')
        f.write(doc.toString())
        f.close()

        self.clipboard.setText(
            "@QGIS-layers-and-groups@{}".format(xmlFilePath))
        self.iface.messageBar().pushMessage(
            "Copy layers and groups",
            "Selected layers and/or groups were copied to clipboard.", 0, 5)
Beispiel #3
0
    def object_to_qlr(
            obj,
            input_file,
            output_path,
            context: Context,
            use_relative_paths: bool = False) -> Tuple[bool, Optional[str]]:
        """
        Converts an ESRI object to QLR
        """

        root_node, _ = LayerConverter.object_to_layers_and_tree(
            obj, input_file, context)

        output_path = QgsFileUtils.ensureFileNameHasExtension(
            output_path, ['qlr'])

        file = QFile(output_path)
        if not file.open(QFile.WriteOnly | QFile.Truncate):
            return False, file.errorString()

        rw_context = QgsReadWriteContext()
        if not use_relative_paths:
            rw_context.setPathResolver(QgsPathResolver())
        else:
            rw_context.setPathResolver(QgsPathResolver(output_path))

        doc = QDomDocument("qgis-layer-definition")
        res, error = QgsLayerDefinition.exportLayerDefinition(
            doc, root_node.children(), rw_context)
        if res:
            stream = QTextStream(file)
            doc.save(stream, 2)
            return True, None

        return res, error
    def test_layerDefinitionRewriteId(self):
        tmpfile = os.path.join(tempfile.tempdir, "test.qlr")

        ltr = QgsProject.instance().layerTreeRoot()

        self.pointsLayer.setDependencies([QgsMapLayerDependency(self.linesLayer.id())])

        QgsLayerDefinition.exportLayerDefinition(tmpfile, [ltr])

        grp = ltr.addGroup("imported")
        QgsLayerDefinition.loadLayerDefinition(tmpfile, grp)

        newPointsLayer = None
        newLinesLayer = None
        for l in grp.findLayers():
            if l.layerId().startswith('points'):
                newPointsLayer = l.layer()
            elif l.layerId().startswith('lines'):
                newLinesLayer = l.layer()
        self.assertFalse(newPointsLayer is None)
        self.assertFalse(newLinesLayer is None)
        self.assertTrue(newLinesLayer.id() in [dep.layerId() for dep in newPointsLayer.dependencies()])

        self.pointsLayer.setDependencies([])