Saltar al contenido

Ruta relativa a la carpeta del complemento para el archivo SVG en el archivo QGIS3 .SLD

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:

ingrese la descripción de la imagen aquí

Archivo SLD:


En su archivo de complemento plugin_main.pyagregue 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.

Opción para agregar la carpeta svg en QGIS

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])

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *