I'm trying to add features to a memory layer. This is the layer creation :
memlayer=QgsVectorLayer("{zr_typegeom}?crs=epsg:4326".format(zr_typegeom = typegeom), "memlayer", "memory") QgsMapLayerRegistry.instance().addMapLayer(memlayer, False) root = QgsProject.instance().layerTreeRoot() memlayerNode = QgsLayerTreeLayer(memlayer) root.insertChildNode(0, memlayerNode) self.iface.setActiveLayer(memlayer) memlayer.startEditing() Then I create the "new_feature" list of features. Users have selected features in an active layer. Each feature is split if it is multipart, or just pasted in "new_features" if it is single part.
Then I copy all the features in the memory layer with the "addFeatures()" property.
new_features = [] for feature in coucheactive.selectedFeatures() : geom = feature.geometry() # check if feature geometry is multipart if geom.isMultipart(): temp_feature = QgsFeature(feature) # create a new feature using the geometry of each part for part in geom.asGeometryCollection (): temp_feature.setGeometry(part) new_features.append(QgsFeature(temp_feature)) else : new_features.append(feature) memlayer.addFeatures(new_features, True) memlayer.commitChanges() print "memlayercount="+str(memlayer.featureCount()) The "new_feature" list contains features, I've checked that with
new = [QgsGeometry(feature.geometry()) for feature in new_features] print "new="+str(new) But the memory layer (memlayer) stays desesperately empty. (memlayercount = 0)
Is it possible to use the "addFeatures()" property on a memory layer? If so, what am I doing wrong?
أكثر...
memlayer=QgsVectorLayer("{zr_typegeom}?crs=epsg:4326".format(zr_typegeom = typegeom), "memlayer", "memory") QgsMapLayerRegistry.instance().addMapLayer(memlayer, False) root = QgsProject.instance().layerTreeRoot() memlayerNode = QgsLayerTreeLayer(memlayer) root.insertChildNode(0, memlayerNode) self.iface.setActiveLayer(memlayer) memlayer.startEditing() Then I create the "new_feature" list of features. Users have selected features in an active layer. Each feature is split if it is multipart, or just pasted in "new_features" if it is single part.
Then I copy all the features in the memory layer with the "addFeatures()" property.
new_features = [] for feature in coucheactive.selectedFeatures() : geom = feature.geometry() # check if feature geometry is multipart if geom.isMultipart(): temp_feature = QgsFeature(feature) # create a new feature using the geometry of each part for part in geom.asGeometryCollection (): temp_feature.setGeometry(part) new_features.append(QgsFeature(temp_feature)) else : new_features.append(feature) memlayer.addFeatures(new_features, True) memlayer.commitChanges() print "memlayercount="+str(memlayer.featureCount()) The "new_feature" list contains features, I've checked that with
new = [QgsGeometry(feature.geometry()) for feature in new_features] print "new="+str(new) But the memory layer (memlayer) stays desesperately empty. (memlayercount = 0)
Is it possible to use the "addFeatures()" property on a memory layer? If so, what am I doing wrong?
أكثر...