qgis: layer not valid

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

qgis: layer not valid

giuliano su Tiscali
ciao a tutti,

sono riuscito a far partire un'applicazione standalone basata su
qgis, seguendo la guida qgis-1.6.0_coding-compilation_guide_en.pdf;

sembra tutto a posto ma quando carico un layer (che sono certo essere
corretto in quanto qGis lo legge perfettamente) questo non supera il
controllo di validità; indagando ho visto che non ha dataProvider
(None);

dove potrei cercare l'intoppo?

grazie, ciao,
giuliano

PS: se servissero, quì sono le linee coinvolte:

  ........
# Add an OGR layer to the map
  def addLayer(self):
    file = QFileDialog.getOpenFileName(self, "Open Shapefile", ".", "Shapefiles (*.shp)")
    fileInfo = QFileInfo(file)
    print "file:", file (*)
    print "fileInfo:", fileInfo (*)
    print "fileInfo.filename():", fileInfo.fileName() (*)

#   Add the layer
    layer = QgsVectorLayer(file, fileInfo.fileName(), "ogr")
    print "layer:", layer (*)
    print "layer data provider:", layer.dataProvider() (*)
    print "layer validity:", layer.isValid() (*)

    if not layer.isValid():
      print "oops: the layer is not valid"
      return ++++++++ il codice si ferma qui ++++++++++++++

#   Change the color of the layer to gray
    symbols = layer.renderer().symbols()
    symbol = symbols[0]
    symbol.setFillColor(QColor.fromRgb(192,192,192))

#   Add layer to the registry
    QgsMapLayerRegistry.instance().addMapLayer(layer);
    .....

(*) aggiunte da me per indagare l'errore;
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
584 iscritti al 7.4.2012
Reply | Threaded
Open this post in threaded view
|

Re: qgis: layer not valid

Giuseppe Sucameli-2
Ciao Giuliano,

On Monday, April 16, 2012, giuliano su Tiscali <[hidden email]> wrote:
> non supera il controllo di validità
[snip]
>    if not layer.isValid():
>      print "oops: the layer is not valid"
>      return ++++++++ il codice si ferma qui ++++++++++++++

i layer sono non validi perché probabilmente l'applicazione
non riesce a caricare le librerie contenenti i provider.

Purtoppo le linee che hai postato non sono utili in questo
caso. Dovresti postare le linee nelle quali fai il setup
dell'applicazione standalone.

Probabilmente basterà cambiare il path che hai passato alla
QgsApplication.setPrefix() per risolvere il problema, ma senza
ulteriori informazioni sull'OS e sulla tua installazione di QGis è
parecchio complicato.
Se sei su linux prova /usr o /usr/local.

Saluti.

--
Giuseppe Sucameli
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
584 iscritti al 7.4.2012
Reply | Threaded
Open this post in threaded view
|

Re: qgis: layer not valid

giuliano su Tiscali
On Tue, 17 Apr 2012 23:00:21 +0200
Giuseppe Sucameli <[hidden email]> wrote:

> Ciao Giuliano,

ciao (e grazie) Giuseppe :-)

>
> On Monday, April 16, 2012, giuliano su Tiscali <[hidden email]> wrote:
> > non supera il controllo di validità
> [snip]
> >    if not layer.isValid():
> >      print "oops: the layer is not valid"
> >      return ++++++++ il codice si ferma qui ++++++++++++++
>
> i layer sono non validi perché probabilmente l'applicazione
> non riesce a caricare le librerie contenenti i provider.
>
> Purtoppo le linee che hai postato non sono utili in questo
> caso. Dovresti postare le linee nelle quali fai il setup
> dell'applicazione standalone.
>
> Probabilmente basterà cambiare il path che hai passato alla
> QgsApplication.setPrefix() per risolvere il problema, ma senza
> ulteriori informazioni sull'OS e sulla tua installazione di QGis è
> parecchio complicato.
> Se sei su linux prova /usr o /usr/local.

sì, scusa, ma sai che è facile perdersi in un bicchiere d'acqua ....
ho la 1.9.90alpha su linuz debian wheezy;

alla tua ipotesi circa il path ci avevo pensato; qgis è installato
in /usr/share/qgis e /usr/lib/qgis; ho provato con entrambi
(qgis_prefix = '/usr/share/qgis/' e qgis_prefix = '/usr/lib/qgis/')
senza risultato, però potrebbe non essere questo il parametro
determinante; ma non so cos'altro provare dopo aver letto Martin D. in
originale e tradotto;

metto sotto l'__init__(), l'addLayer() e il main() per adesso (non
vorrei disturbare gli altri con un centinaio di linee):


> Saluti.
>
> Giuseppe Sucameli

grazie ancora, ciao,
giuliano


        def __init__(self):
                QMainWindow.__init__(self)
                self.setWindowTitle("QGIS Demo App")

# Required by Qt4 to initialize the UI
                self.setupUi(self)

# Create the map canvas
                self.canvas = QgsMapCanvas()
                self.canvas.setCanvasColor(QColor(230,230,255))
                self.canvas.enableAntiAliasing(True)
                self.canvas.useImageToRender(False)
                self.canvas.show()

# Lay our widgets out in the main window using a
# vertical box layout
                self.layout = QVBoxLayout(self.frame)
                self.layout.addWidget(self.canvas)

# Create the actions for our tools and connect each to the appropriate method
                actionQuit = QAction(QIcon(qgis_icons_prefix + "actionExit.png"), "Quit", self)

...... seguono altre actions ........

# Add an OGR layer to the map
        def addLayer(self):
                file = QFileDialog.getOpenFileName(self, "Open Shapefile", ".", "Shapefiles (*.shp)")
                fileInfo = QFileInfo(file)

# Add the layer
                layer = QgsVectorLayer(file, fileInfo.fileName(), "ogr")

                if not layer.isValid():
                        print "oops: the layer is not valid"
                        return

*************** non passa mai questo test *******************

# Change the color of the layer to gray
                symbols = layer.renderer().symbols()
                symbol = symbols[0]
                symbol.setFillColor(QColor.fromRgb(192,192,192))

# Add layer to the registry
                QgsMapLayerRegistry.instance().addMapLayer(layer); # usare addMapLayers(layer_list)
# QgsMapLayerRegistry.addMapLayer(layer);

# Set extent to the extent of our layer
                self.canvas.setExtent(layer.extent())

# Set up the map canvas layer set
                cl = QgsMapCanvasLayer(layer)
                layers = [cl]
                self.canvas.setLayerSet(layers)

 def main(argv):
# create Qt application
        app = QApplication(argv)

# Initialize qgis libraries
        QgsApplication.setPrefixPath(qgis_prefix, True)
        QgsApplication.initQgis()

# create main window
        wnd = MainWindow()
# Move the app window to upper left
        wnd.move(100,100)
        wnd.show()

# --- per vedere le librerie usate di default -------
# ---- quelle di QT --------------------------------
# for tmp in app.instance().libraryPaths():
# print tmp
# ---- restituisce: -----------------------------
# /usr/lib/qt4/plugins
# /usr/bin

# ---- quelle di qGis: -----------------------------
# for tmp in QgsApplication.instance().libraryPaths():
# print tmp
# ---- restituisce le stesse: ----------------------
# /usr/lib/qt4/plugins
# /usr/bin

# run!
        retval = app.exec_()

# exit
        QgsApplication.exitQgis()
        sys.exit(retval)

if __name__ == "__main__":
        main(sys.argv)
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
584 iscritti al 7.4.2012
Reply | Threaded
Open this post in threaded view
|

Re: qgis: layer not valid

Giuseppe Sucameli-2
Ciao,

2012/4/17 giuliano su Tiscali <[hidden email]>:
> On Tue, 17 Apr 2012 23:00:21 +0200
> alla tua ipotesi circa il path ci avevo pensato; qgis è installato
> in /usr/share/qgis e /usr/lib/qgis; ho provato con entrambi
> (qgis_prefix = '/usr/share/qgis/' e qgis_prefix = '/usr/lib/qgis/')

ho trovato un metodo piu' semplice del tirare ad indovinare:

imposta il valore di qgis_prefix allo stesso path che viene restituito
chiamando dalla python console di QGis il seguente comando:

QgsApplication.prefixPath()

il cui risultato probabilmente sara'

/usr

Saluti.

--
Giuseppe Sucameli
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
584 iscritti al 7.4.2012
Reply | Threaded
Open this post in threaded view
|

Re: qgis: layer not valid

giuliano su Tiscali
chiedo scusa Giuseppe: nella fretta non mi sono accorto
dell'indirizzo :-(   scusa ancora;


On Wed, 18 Apr 2012 00:08:19 +0200
Giuseppe Sucameli <[hidden email]> wrote:


> Ciao,
>
> 2012/4/17 giuliano su Tiscali <[hidden email]>:
> > On Tue, 17 Apr 2012 23:00:21 +0200
> > alla tua ipotesi circa il path ci avevo pensato; qgis è installato
> > in /usr/share/qgis e /usr/lib/qgis; ho provato con entrambi
> > (qgis_prefix = '/usr/share/qgis/' e qgis_prefix = '/usr/lib/qgis/')
>
> ho trovato un metodo piu' semplice del tirare ad indovinare:
>
> imposta il valore di qgis_prefix allo stesso path che viene restituito
> chiamando dalla python console di QGis il seguente comando:
>
> QgsApplication.prefixPath()
>
> il cui risultato probabilmente sara'
>
> /usr

accidenti, nemmeno Nembo Kid così rapido e preciso: sì: con quel
comando si ottiene '/usr' (nella mia situazione) e con questo il test
sul file viene superato (purtroppo non visualizzo ancora nulla, ma
intanto ho fatto un altro passo avanti);

non sarebbe il caso di tenere traccia della cosa, o aggiungendola al
lavoro di Pasquale o mettendolo nel wiki ? (un pò di fatica risparmiata
per gli altri newbies.... o sono il solo :-)

 
> Saluti.
>
> --
> Giuseppe Sucameli


grazie ancora, ciao,
giuliano

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
584 iscritti al 7.4.2012