Estoy tratando de establecer el estilo de una capa usando pyQGIS. Mi idea principal era establecer el estilo desde una cadena, pero lamentablemente sólo puedo hacerlo desde un archivo. Este código funciona de maravilla:
filename= QDir.tempPath() + "/style.sld"
f = open(filename,'w')
if os.path.exists(filename):
f.write(style)
f.close()
ret=layer.loadSldStyle(filename)
if ret:
self.log(logging.DEBUG, "Style loaded")
else:
self.log(logging.DEBUG, "Style not loaded: " + errorMsg)
os.remove(filename)
Como puede ver, estoy escribiendo el style
en un archivo temporal, cargando el estilo y luego eliminándolo. Lo que me gustaría hacer en su lugar es pasar la cadena directamente al readSld
que se envuelve en loadSldStyle
:
d = QDomDocument()
ret=d.setContent(style)
if ret:
self.log(logging.DEBUG, "Document created")
else:
self.log(logging.DEBUG, "Document not created")
self.log(logging.DEBUG, "content: " + d.toString())
myRoot=d.firstChildElement
("StyledLayerDescriptor")
if myRoot is None:
self.log(logging.ERROR, u"Could not get "
"root element")
return
namedLayerElem=myRoot.firstChildElement
("namedLayerElem")
if namedLayerElem is None:
self.log(logging.ERROR, u"Could not find "
"NamedLayer")
return
errorMsg = str("")
ret=layer.readSld(namedLayerElem,errorMsg)
Tenga en cuenta que esto es muy similar al código C++ para el método loadSldStyle
en el QgsMapLayer implementación de la clase
El QDomDocument
contiene el estilo correcto, y el myRoot
y namedLayerElem
los nodos se crean correctamente. No obstante, readSld
devuelve false, y lo peor de todo es que la cadena de error está vacía, así que no tengo ni idea de lo que está pasando. ¿Algún consejo sobre cuál puede ser el problema? Sé que esta función ha sido portado a sip.