def testSaveFields(self): # Create a new memory layer with no fields myMemoryLayer = QgsVectorLayer(("Point?crs=epsg:4326&index=yes"), "test", "memory") # Add some fields to the layer myFields = [ QgsField("TestInt", QVariant.Int, "integer", 2, 0), QgsField("TestLong", QVariant.LongLong, "long", -1, 0), QgsField("TestDbl", QVariant.Double, "double", 8, 6), QgsField("TestString", QVariant.String, "string", 50, 0), QgsField("TestDate", QVariant.Date, "date"), QgsField("TestTime", QVariant.Time, "time"), QgsField("TestDateTime", QVariant.DateTime, "datetime"), ] assert myMemoryLayer.startEditing() for f in myFields: assert myMemoryLayer.addAttribute(f) assert myMemoryLayer.commitChanges() myMemoryLayer.updateFields() # Export the layer to a layer-definition-XML qlr = QgsMapLayer.asLayerDefinition([myMemoryLayer]) assert qlr is not None # Import the layer from the layer-definition-XML layers = QgsMapLayer.fromLayerDefinition(qlr) assert layers is not None myImportedLayer = layers[0] assert myImportedLayer is not None # Check for the presence of the fields importedFields = myImportedLayer.fields() assert importedFields is not None for f in myFields: assert f == importedFields.field(f.name())
def testSaveFields(self): # Create a new memory layer with no fields myMemoryLayer = QgsVectorLayer( ('Point?crs=epsg:4326&index=yes'), 'test', 'memory') # Add some fields to the layer myFields = [QgsField('TestInt', QVariant.Int, 'integer', 2, 0), QgsField('TestDbl', QVariant.Double, 'double', 8, 6), QgsField('TestString', QVariant.String, 'string', 50, 0), QgsField('TestDate', QVariant.Date, 'date'), QgsField('TestTime', QVariant.Time, 'time'), QgsField('TestDateTime', QVariant.DateTime, 'datetime')] assert myMemoryLayer.startEditing() for f in myFields: assert myMemoryLayer.addAttribute(f) assert myMemoryLayer.commitChanges() myMemoryLayer.updateFields() # Export the layer to a layer-definition-XML qlr = QgsMapLayer.asLayerDefinition([myMemoryLayer]) assert qlr is not None # Import the layer from the layer-definition-XML layers = QgsMapLayer.fromLayerDefinition(qlr) assert layers is not None myImportedLayer = layers[0] assert myImportedLayer is not None # Check for the presence of the fields importedFields = myImportedLayer.fields() assert importedFields is not None for f in myFields: assert f == importedFields.field(f.name())
def testSaveFields(self): # Create a new memory layer with no fields myMemoryLayer = QgsVectorLayer(('Point?crs=epsg:4326&index=yes'), 'test', 'memory') # Add some fields to the layer myFields = [ QgsField('TestInt', QVariant.Int, 'integer', 2, 0), QgsField('TestDbl', QVariant.Double, 'double', 8, 6), QgsField('TestString', QVariant.String, 'string', 50, 0), QgsField('TestDate', QVariant.Date, 'date'), QgsField('TestTime', QVariant.Time, 'time'), QgsField('TestDateTime', QVariant.DateTime, 'datetime') ] assert myMemoryLayer.startEditing() for f in myFields: assert myMemoryLayer.addAttribute(f) assert myMemoryLayer.commitChanges() myMemoryLayer.updateFields() # Export the layer to a layer-definition-XML qlr = QgsMapLayer.asLayerDefinition([myMemoryLayer]) assert qlr is not None # Import the layer from the layer-definition-XML layers = QgsMapLayer.fromLayerDefinition(qlr) assert layers is not None myImportedLayer = layers[0] assert myImportedLayer is not None # Check for the presence of the fields importedFields = myImportedLayer.fields() assert importedFields is not None for f in myFields: assert f == importedFields.field(f.name())
def __add_layer_definition_file(self, file_name, root_group): """ shamelessly copied from https://github.com/qgis/QGIS/blob/master/src/core/qgslayerdefinition.cpp """ qfile = QFile(file_name) if not qfile.open(QIODevice.ReadOnly): return None doc = QDomDocument() if not doc.setContent(qfile): return None file_info = QFileInfo(qfile) QDir.setCurrent(file_info.absoluteDir().path()) root = QgsLayerTreeGroup() ids = doc.elementsByTagName('id') for i in range(0, ids.size()): id_node = ids.at(i) id_elem = id_node.toElement() old_id = id_elem.text() layer_name = old_id[:-17] date_time = QDateTime.currentDateTime() new_id = layer_name + date_time.toString('yyyyMMddhhmmsszzz') id_elem.firstChild().setNodeValue(new_id) tree_layer_nodes = doc.elementsByTagName('layer-tree-layer') for j in range(0, tree_layer_nodes.count()): layer_node = tree_layer_nodes.at(j) layer_elem = layer_node.toElement() if old_id == layer_elem.attribute('id'): layer_node.toElement().setAttribute('id', new_id) layer_tree_elem = doc.documentElement().firstChildElement( 'layer-tree-group') load_in_legend = True if not layer_tree_elem.isNull(): root.readChildrenFromXML(layer_tree_elem) load_in_legend = False layers = QgsMapLayer.fromLayerDefinition(doc) QgsProject.instance().addMapLayers(layers, load_in_legend) nodes = root.children() for node in nodes: root.takeChild(node) del root root_group.insertChildNodes(-1, nodes) return None