4 votos

Cómo utilizar el plugin Qgis Gridsplitter en la consola

Me gustaría utilizar el plugin Gridsplitter en la consola. Tengo el siguiente código para hacerlo:

from qgis.core import *
import qgis.utils
import imp

gridSplitterPath = "C:/Users/Mossy/.qgis2/python/plugins/gridSplitter/gridSplitter.py"
outputpath = "C:/Users/Mossy/Desktop/NewFolder/Output"
cutlayerpath = "C:/Users/Mossy/Desktop/NewFolder/InputData/cutlayer.shp"
layertocutpath = "C:/Users/Mossy/Desktop/NewFolder/InputData/layertocut.tif"

iface = qgis.utils.iface
module = imp.load_source("gridSplitter",gridSplitterPath)

mySplitter = module.gridSplitter(iface)
mySplitter.outputfolder = outputpath
mySplitter.layertocut = QgsRasterLayer(layertocutpath,"laytocut")
mySplitter.cutlayeris = True
mySplitter.cutlayer = QgsVectorLayer(cutlayerpath,"cutlay", "ogr")
mySplitter.pref = "cut_"
mySplitter.subfolderis = False
mySplitter.tileindexis = True

mySplitter.operate()

Sin embargo, me aparece el siguiente error:

Traceback (most recent call last):
File "<input>", line 1, in <module>
File "c:/users/Mossy/appdata/local/temp/tmpqc7_fe.py", line 23, in <module>
mySplitter.operate()
File "C:/Users/Mossy/.qgis2/python/plugins/gridSplitter/gridSplitter.py", line 206, in operate
self.layertocutcrs= layertocut.crs()
AttributeError: 'NoneType' object has no attribute 'crs'

¿Alguien sabe cómo resolver este problema?

1 votos

Dice en la consola.

4voto

GreyCat Puntos 146

En la consola, la carpeta de plugins está en el PYTHONPATH (no hace falta import imp )

Basta con utilizar ( ¿Hay alguna forma de acceder a los plugins de QGIS en Python? )

import gridSplitter
gridSplitter.__file__
'/Users/my/.qgis2/python/plugins/gridSplitter/__init__.pyc'

El contenido del módulo con ver (dir para humanos)

see(gridSplitter)
help()                  .classFactory()         .gridSplitter
.gridSplitter_dialog    .resources_rc

La ayuda del módulo

help(gridSplitter)
Help on package gridSplitter:
NAME
gridSplitter
FILE
/Users/my/.qgis2/python/plugins/gridSplitter/__init__.py
DESCRIPTION
/***************************************************************************
 gridSplitter
                                 A QGIS plugin
 A plugin that cuts a layer into pieces(tiles)
                             -------------------
        begin                : 2015-03-26
        copyright            : (C) 2015 by Maximilian Krambach
        email                : maximilian.krambach@gmx.de
        git sha              : $Format:%H$
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/
 This script initializes the plugin, making it known to QGIS.

PACKAGE CONTENTS
gridSplitter
gridSplitter_dialog
resources_rc
FUNCTIONS
classFactory(iface)
    Load gridSplitter class from file gridSplitter. 
    :param iface: A QGIS interface instance.
    :type iface: QgsInterface

Por lo tanto, puede intentar

gridSplitter.classFactory(iface)
mySplitter = gridSplitter.gridSplitter

4voto

Elliott Maynard Puntos 11

A pesar de la intención del autor, creo que el plugin no será fácilmente utilizable fuera de QGIS (o incluso desde la consola de QGIS Python) tal y como está.

Dentro de la operate() el código depende de los diálogos del plugin y de los métodos de diálogo como

self.dlg.OuptDir.text()

En concreto, el error que te aparece se debe a estas líneas en operate() que dan layertocut a None si no ha utilizado antes el diálogo principal del plugin:

index = self.dlg.inputRasterBox.currentIndex()
layertocut = self.dlg.inputRasterBox.itemData(index)

Entonces, el acceso a crs() es imposible en:

self.layertocutcrs= layertocut.crs()

Hacer que el plugin sea "No-GUI friendly" requerirá una refactorización. Puedes añadir una petición de funcionalidad en el Repositorio GitHub o, si es crítico para usted, prográmelo usted mismo o contrate al autor para que lo haga.


Tenga en cuenta que hay un GridSplitter v0.3.6 en GitHub que todavía no está disponible en el repositorio de plugins de QGIS. He comprobado esa versión también, pero tiene problemas similares, esta vez girando outputfolder en None .

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