Esta división fue aprobado por especialistas para garantizar la veracidad de este artículo.
Solución:
Cuando usa una ruta relativa en el archivo SLD, esa ruta es relativa al directorio de trabajo actual (CWD), no relativa al archivo SLD. Si cambia CWD a su carpeta de complementos, la ruta relativa en el archivo SLD funciona.
Ejemplo de estructura de carpetas de complementos:
Archivo SLD:
En su archivo de complemento plugin_main.py
agregue los siguientes códigos a las líneas relacionadas:
import os
.
os.chdir(os.path.dirname(__file__))
.
layer.loadSldStyle("./Styles.sld")
layer.triggerRepaint()
Pero si cambia CWD a otra carpeta más tarde, obtiene ‘?’ de nuevo.
En mi consola QGIS Python, os.getcwd()
devoluciones 'C:\OSGEO4~1\bin'
y en este caso QGIS busca un archivo con ruta relativa dentro de esa carpeta.
Bueno, la solución fue agregar la carpeta a las rutas SVG.
Y luego use archivos .qml para almacenar la capa en lugar de archivos .sld y en el archivo .qml especifique la ruta relativa a plugin_folder.
prop v=”Carpeta_SVG/nombre_SVG.svg” k=”nombre”/>
Traté de hacerlo relativo a ..QGIS3profilesdefault/svg/
que se añade por defecto, con ../python/plugins/plugin_name/image_folder/svg_name.svg
en el archivo .qml. Que funcionó localmente, por lo tanto, en .qgs se almacenó la ruta absoluta.
En QGIS2.18 podría especificar la ruta al marcador svg como: :/PLUGIN_NAME/IMAGE_FOLDER/FILENAME.svg
Caminos que comienzan con :/
(y qrc:///
) son rutas a los recursos de Qt. Supongo que hay un .qrc
archivo que ha sido compilado/empaquetado en un resources.py
Archivo. El archivo de QGIS 2 no es compatible con QGIS 3 y necesita volver a crear el archivo para poder seguir usando los recursos (y por lo tanto también las rutas que comienzan con :/
)
Alternativamente también puede especificar la ruta completa al archivo svg (mientras se publica como respuesta).
Esto también se puede automatizar, el siguiente fragmento se puede usar para determinar la ruta del complemento:
import os
plugin_path = os.path.dirname(os.path.realpath(__file__)) # Potentially fix subdirectories
Luego verifique si esta ruta ya está configurada y agréguela si falta
svg_paths = QgsSettings().value('svg/searchPathsForSVG')
if plugin_path not in svg_paths:
QgsSettings().setValue('svg/searchPathsForSVG', svg_paths + [plugin_path])