I would like to create a vector layer, add a point to it and then use it in qgis algorithms.
This is what I wrote :
#create temporary layer containing center point
point=QgsFeature()
point.setGeometry(QgsGeometry.fromPoint(QgsPoint(center[0],center[1])))
pointlayer=QgsVectorLayer("Point?crs=epsg:2154", "temporary_points", "memory")
pointlayer.startEditing()
pointlayer.addFeatures([point])
pointlayer.commitChanges()
#intersection between point layer and polygon layers to get names codes
fieldname_vector=processing.runalg('qgis:intersection', parcel, pointlayer, False, None)
But when the algorithm runs, it returns
Unable to execute algorithm
Wrong parameter value: Point?crs=epsg:2154
Is there a way to use my layer without saving it, knowing that I'll erase it in the future ?
-
Ok thanks, do you know why it's impossible to use it without adding it to the layer's panel ?Clement– Clement2017年11月10日 12:34:09 +00:00Commented Nov 10, 2017 at 12:34
-
Ignore my previous comment, you can load it in the Layers Panel without it being shown. A related question regarding this was asked before: Using in-memory vector layer with QGIS processing / SEXTANTE.Joseph– Joseph2017年11月10日 12:53:23 +00:00Commented Nov 10, 2017 at 12:53
1 Answer 1
You need to add the memory layer to the QgsMapLayerRegistry before you can use it in processing. But you can add it without it being shown in the Layers Panel by using:
QgsMapLayerRegistry.instance().addMapLayer(pointlayer, False)
When finished, you can then do some cleanup by removing and deleting it:
QgsMapLayerRegistry.instance().removeMapLayer(pointlayer)
del pointlayer
-
5In QGIS 3 the QgsMapLayerRegistry has been removed but the layer can be added via
QgsProject.instance().addMapLayer(pointlayer, False)
.Orienteerix– Orienteerix2019年12月31日 11:28:36 +00:00Commented Dec 31, 2019 at 11:28 -
@Orienteerix - Thanks for the extra info :)Joseph– Joseph2020年01月06日 10:42:52 +00:00Commented Jan 6, 2020 at 10:42