@@ -278,63 +278,49 @@ def combineVectorFields(layerA, layerB):
278
278
return fields
279
279
280
280
281
- def duplicate_in_memory (layer , new_name = '' , add_to_registry = False ):
282
- """
283
- Return a memory copy of a layer
284
-
285
- :param layer: QgsVectorLayer that shall be copied to memory.
286
- :type layer: QgsVectorLayer
287
-
288
- :param new_name: The name of the copied layer.
289
- :type new_name: str
290
-
291
- :param add_to_registry: if True, the new layer will be added to
292
- the QgsMapRegistry
293
- :type: bool
281
+ def duplicateInMemory (layer , newName = '' , addToRegistry = False ):
282
+ """Return a memory copy of a layer
294
283
295
- :returns: An in-memory copy of a layer.
296
- :rtype: QgsMapLayer
284
+ layer: QgsVectorLayer that shall be copied to memory.
285
+ new_name: The name of the copied layer.
286
+ add_to_registry: if True, the new layer will be added to the QgsMapRegistry
297
287
288
+ Returns an in-memory copy of a layer.
298
289
"""
299
- if new_name is '' :
300
- new_name = layer .name () + ' TMP '
290
+ if newName is '' :
291
+ newName = layer .name () + ' (Memory) '
301
292
302
293
if layer .type () == QgsMapLayer .VectorLayer :
303
- v_type = layer .geometryType ()
304
- if v_type == QGis .Point :
305
- type_str = 'Point'
306
- elif v_type == QGis .Line :
307
- type_str = 'Line'
308
- elif v_type == QGis .Polygon :
309
- type_str = 'Polygon'
294
+ geomType = layer .geometryType ()
295
+ if geomType == QGis .Point :
296
+ strType = 'Point'
297
+ elif geomType == QGis .Line :
298
+ strType = 'Line'
299
+ elif geomType == QGis .Polygon :
300
+ strType = 'Polygon'
310
301
else :
311
- raise RuntimeError ('Layer is whether Point nor '
312
- 'Line nor Polygon' )
302
+ raise RuntimeError ('Layer is whether Point nor Line nor Polygon' )
313
303
else :
314
304
raise RuntimeError ('Layer is not a VectorLayer' )
315
305
316
306
crs = layer .crs ().authid ().lower ()
317
- my_uuid = str (uuid .uuid4 ())
318
- uri = '%s?crs=%s&index=yes&uuid=%s' % (type_str , crs , my_uuid )
319
- mem_layer = QgsVectorLayer (uri , new_name , 'memory' )
320
- mem_provider = mem_layer .dataProvider ()
307
+ myUuid = str (uuid .uuid4 ())
308
+ uri = '%s?crs=%s&index=yes&uuid=%s' % (strType , crs , myUuid )
309
+ memLayer = QgsVectorLayer (uri , newName , 'memory' )
310
+ memProvider = memLayer .dataProvider ()
321
311
322
312
provider = layer .dataProvider ()
323
- v_fields = provider .fields ()
324
-
325
- fields = []
326
- for i in v_fields :
327
- fields .append (i )
328
-
329
- mem_provider .addAttributes (fields )
313
+ fields = provider .fields ().toList ()
314
+ memProvider .addAttributes (fields )
315
+ memLayer .updateFields ()
330
316
331
317
for ft in provider .getFeatures ():
332
- mem_provider .addFeatures ([ft ])
318
+ memProvider .addFeatures ([ft ])
333
319
334
- if add_to_registry :
335
- if mem_layer .isValid ():
336
- QgsMapLayerRegistry .instance ().addMapLayer (mem_layer )
320
+ if addToRegistry :
321
+ if memLayer .isValid ():
322
+ QgsMapLayerRegistry .instance ().addMapLayer (memLayer )
337
323
else :
338
324
raise RuntimeError ('Layer invalid' )
339
325
340
- return mem_layer
326
+ return memLayer
0 commit comments