Tengo un plugin que crea una capa de memoria y la muestra en el lienzo. Si ejecuto el plugin por segunda vez después de eliminar la capa de memoria del panel de la lista de capas sin cerrar QGIS, la capa de memoria se produce junto con la capa creada anteriormente. Parece que el nombre de la capa de memoria no se puede reutilizar hasta que se cierre QGIS. ¿Hay alguna forma de borrar esta capa de la memoria para volver a ejecutar el plugin?
###Create new layer
vecLineURI = "LineString?crs=epsg:4326&field=id:integer"
vecLine = QgsVectorLayer(vecLineURI,"point2line","memory")
pr = vecLine.dataProvider()
###Start editing
vecLine.startEditing()
###Add Feature
feat = QgsFeature()
feat.setGeometry(QgsGeometry.fromWkt(lneWKT))
feat.setAttributes([1])
pr.addFeatures( [feat] )
####Update Extents
vecLine.updateExtents()
###Commit Changes
vecLine.commitChanges()
###Load layer
QgsMapLayerRegistry.instance().addMapLayer(vecLine)
Estaba quitando la capa al principio del plugin abierto...
layerMap = QgsMapLayerRegistry.instance().mapLayers()
for name, layer in layerMap.iteritems():
if "point2line" in name:
QgsMapLayerRegistry.instance().removeMapLayer(layer)
...pero esto sólo eliminó elementos del panel de capas, no de la memoria.
0 votos
Después de la línea
QgsMapLayerRegistry.instance().removeMapLayer(layer)
Intenta añadir lo siguiente debajo:del vecLine
.0 votos
@Joseph...la variable vecLine no existe en el momento del bucle for. El plugin funciona la primera vez pero luego falla por llamar a una variable antes de definirla. Parece que crees que es un problema de Python y no una capa de memoria dentro de QGIS?
0 votos
Ahh me lo perdí, intenta añadir
del vecLine
después de cargar la capa conQgsMapLayerRegistry.instance().addMapLayer(vecLine)
? Habría pensado que las capas de memoria se pueden borrar de la memoria, pero nunca he necesitado probar esto...0 votos
Intenté que el usuario añadiera un nombre a cada nueva ejecución del plugin pero seguía produciendo 1 capa por iteración del plugin durante la sesión de QGIS. Todas las capas son del tipo de almacenamiento "Memory Storage". Parece que el almacenamiento de memoria almacena el número de capas creadas y no las capas individuales...
1 votos
Por ahora, la solución es guardar cada nueva salida como un archivo en el disco hasta que descubra cómo borrar la memoria.