7 votos

Exportar archivo .qml usando API de QGIS

Im carga de un archivo shapefile utilizando el método QgsVectorLayer() y la adición de un estilo utilizando el método loadSldStyle() y la ruta de acceso al archivo sld. Hasta ahora tan bueno.

Lo que quiero ahora es la exportación de ese estilo .qml archivo. Supongo que tal vez podría utilizar el método de la exportNamedStyle() , pero este método utiliza un argumento de tipo QDomDocument. No tengo idea de cómo crear este objeto.

¿Alguien puede decirme cómo exportar el .qml archivo de esta cargado capa usando python?

Utilizando el método de saveNamedStyle() sólo funciona si puedo usar la consola de python dentro de qgis. En la consola de python en el qgis escritorio hice esto:

vlayer = iface.addVectorLayer("/home/inesf/sag/prodgen/SAGautodataset/Cystoseira_compressa.shp", 'mylayer', 'ogr')
vlayer.loadSldStyle("/home/inesf/sag/prodgen/SAGautodataset/Cystoseira_compressa.sld")
vlayer.saveNamedStyle("/home/inesf/sag/prodgen/SAGautodataset/Cystoseira_compressa.qml")

Y funcionó muy bien, que se exportan a .qml archivo con el mismo estilo definido en el archivo SLD. Perfecto.

Cuando hago esto en la consola de python fuera de la QGIS escritorio, exporta una .qml archivo, pero vacía.

Cuando ejecuto un programa en python con este código y con el mismo código, no da errores, pero no pasa nada.

5voto

Mue Puntos 2469

Usted puede utilizar QgsMapLayer::saveNamedStyle a la exportación .qml archivos:

layer.saveNamedStyle('/path/to/style.qml')

EDITAR:

Sí, usted puede crear una .qml archivo fuera de QGIS. He probado esto en una secuencia de comandos independiente (que se mencionó en el comentario de @AlexandreNeto).

Este es el código que he usado (tenga en cuenta que yo uso Windows por lo que tendrá que cambiar sus rutas en consecuencia):

from PyQt4.QtGui import *
from PyQt4.QtCore import *
from qgis.core import *

from os.path import expanduser
home = expanduser("~")

QgsApplication( [], False, home + "/AppData/Local/Temp" )
QgsApplication.setPrefixPath("C://OSGeo4W64//apps//qgis", True)
app = QApplication([], True)
QgsApplication.initQgis()

layer = QgsVectorLayer(home + "/Desktop/New folder//polygon example.shp", "EligibleAreas_polygons", "ogr")
layer.loadSldStyle(home + "/Desktop/sld_style.sld")
layer.saveNamedStyle(home + "/Desktop/qml_style.qml")

QgsApplication.exitQgis()
app.exit()

  1. Primero me salvó el .archivo sld dentro de QGIS:

    Saving sld file

  2. Entonces corrí el script que carga la capa, a continuación, el .sld estilo y, por último, guarda esto como un .qml archivo:

    Running script

  3. Por último, he cargado el .qml archivo en QGIS y el estilo es exactamente el mismo que el de la .archivo sld:

    Result

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X