[QGIS-it-user] Connessione PostGIS in App PyQT
Andrea Gagna
g.andre87 a gmail.com
Mer 2 Mar 2016 03:01:02 PST
Ciao Luigi...Si, hai ragione ho continuato per sbaglio a inviarti messaggi
solo a te e non all'intero gruppo...
Dovete scusarmi e avere pazienza, sono alle prime armi.
Comunque avevo il problema di non sapere come si potesse connettere il
plugin che sto sviluppando con il PyQT al mio Geo-DB realizzato in PostGIS.
Poi grazie ai consigli di Luigi la connessione al PostGis da applicazione
WindowDialog realizzata con il QT creator e il PyQgis, sono riuscito a
farla e funziona dato che sono riuscito anche a fare una prima semplice
query di interrogazione.
In realta' mi sembra che le query SQL si possano fare normalmente e anche a
livello medio-alto. Volendo le si puo' anche autogenerare dai legami che
puoi fare tra le tabelle all'interno del PostGIS stesso (in cui hai il tuo
Geo-DB chiaramente). Funziona un po' come Access e dal punto di vista della
programmazione a oggetti e' molto simile al Visual Studio.NET, con la
differenza che sia quest'ultimo che Access costano un botto e non sono
specifici per gestire dati geo-spaziali mentre il PostgreSQL con ext.
PostGIS lo e', oltre che ad essere chiaramente un prodotto Open Source
;-)!!!
Quindi volendo puoi anche fare i legami tra i campi delle tue tabelle in
PostGis, vedere il codice SQL autogenerato, copiarlo e salvarlo in una
normale variabile "string" nel tuo codice di sviluppo PyQgis del tuo plugin
o applicativo e poi lanciarlo realizzando un semplice "button"
nell'interfaccia grafica WindowDialog del QT creator.
Il QT design che viene gia' scaricato nel "pacchetto Osgeo" e che dovrebbe
essere specifico e customizzato sul QGis invece mi sembra paradossalmente
piu' complesso da usare rispetto l'associazione QT creator + Notepad++...
Sarebbe bello che in una futura nuova versione del QGis ci sia gia' una
piattaforma interna di sviluppo, con le API e le librerie fondamentali gia'
importate di default. Una sorta di "VisualPyQgis Creator"....
Pero' non so se e' una cosa fattibile oppure molto complessa e articolata..
E' un'idea.
Grazie ancora, per ora problema risolto!
Andrea Gagna.
Il 29/feb/2016 14:54 "Andrea Gagna" <g.andre87 a gmail.com> ha scritto:
> Comunque mi sembra che Io ho scritto sulla lista utenti.
>
> Comunque ok ti ringrazio; ho visto anche cosa fa il QgsFeatureRequest ed
> e' interessante ma non risolve la mia necessita', che e' quella di poter
> scrivere Query in SQL...
>
> A questo link della documentazione ufficiale mette le espressioni QGis
> SQL...ma non le capisco perche' non e' un normale SQL...
> Link:
> http://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/expressions.html#expressions
>
> Quindi non capisco bene...
>
> Io capisco che ci siano materiali, tutorial infiniti, etc..ma penso sia
> normale che il 90% delle domande che un utente non esperto fa qui siano
> gia' state risolte...(anche se la mia e' solo parzialmente risolta.)
>
> Il problema per chi come me non e' esperto e' anche capire come muoversi.
>
> Grazie comunque.
> 1) scrivere anche sulla lista utenti... cosi' chi ha lo stesso
> problema trova le risposte senza fare mille volte le stesse domende
>
> 2) la where filtra gia' lato server... cosa che non conviene se vuoi
> layer che cambino con la queri... ti consiglio di usare
> QgsFeatureRequest come da:
> http://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/vector.html
>
> in definitiva una volta che hai il layer, che sia su file o remoto a
> qgis non fa ne caldo ne freddo (+o-)
>
> inoltre ci sono una quintalata di plugin per postgres/postgis ben
> fatti... puoi leggere il codice direttametne da quelli (ma leggi prima
> il cookbook)
> ci sono anceh libri che ti guidano passo passo.
>
> non ho studiato il codice del plugin di postgres su Ferraguti... ma mi
> sembra da studiare
>
> una cosa basica... leggere il manuale! e verificare che la stessa
> domanda non sia stata fatta e risolta su gis.stackexchange.com
> Luigi Pirelli
>
>
> **************************************************************************************************
> * Boundless QGIS Support/Development: lpirelli AT boundlessgeo DOT com
> * LinkedIn: https://www.linkedin.com/in/luigipirelli
> * Stackexchange: http://gis.stackexchange.com/users/19667/luigi-pirelli
> * GitHub: https://github.com/luipir
> * Mastering QGIS:
> https://www.packtpub.com/application-development/mastering-qgis
>
> **************************************************************************************************
>
>
> 2016-02-29 11:48 GMT+01:00 Andrea Gagna <g.andre87 a gmail.com>:
> > Ciao Luigi,
> > Ti ringrazio per avermi rimandato alla parte di doc. ufficiale che ne
> parla.
> > Quindi devo scrivere questo codice con i riferimenti della mia
> connessione
> > PostGIS:
> >
> > uri = QgsDataSourceURI()
> > # set host name, port, database name, username and password
> > uri.setConnection("localhost", "5432", "dbname", "johny", "xxx")
> > # set database schema, table name, geometry column and optionally
> > # subset (WHERE clause)
> > uri.setDataSource("public", "roads", "the_geom", "cityid = 2643")
> >
> > vlayer = QgsVectorLayer(uri.uri(), "layer name you like", "postgres")
> >
> > La cosa che non capisco bene e' la fase di filtro; in questo esempio lo
> fa
> > con un semplicissimo "WHERE" e ok.
> >
> > Se volessi fare Query piu' complesse che formato posso usare? l'SQL non
> lo
> > posso fare se voglio fare dei JOIN ad esempio??
> >
> > Grazie.
> >
> > Il 29/feb/2016 11:27 "Luigi Pirelli" <luipir a gmail.com> ha scritto:
> >>
> >>
> >>
> http://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/loadlayer.html#vector-layers
> >> Luigi Pirelli
> >>
> >>
> >>
> **************************************************************************************************
> >> * Boundless QGIS Support/Development: lpirelli AT boundlessgeo DOT com
> >> * LinkedIn: https://www.linkedin.com/in/luigipirelli
> >> * Stackexchange: http://gis.stackexchange.com/users/19667/luigi-pirelli
> >> * GitHub: https://github.com/luipir
> >> * Mastering QGIS:
> >> https://www.packtpub.com/application-development/mastering-qgis
> >>
> >>
> **************************************************************************************************
> >>
> >>
> >> 2016-02-29 11:13 GMT+01:00 Andrea Gagna <g.andre87 a gmail.com>:
> >> > Ciao a tutti;
> >> > Sto sviluppando un plugin del QGis che mi consenta "semplicemente", di
> >> > gestire il mio Geo-DB realizzato in PostGIS.
> >> >
> >> > Sono riuscito a creare la WindowDialog con il QT (e python come
> >> > linguaggio
> >> > per gli script) e a caricarla nel QGis.
> >> >
> >> > A questo punto gli ho aggiunto un oggetto Button che vorrei, quando
> >> > viene
> >> > cliccato, che ti permetta di connetterti al mio GeoDB di PostGis,
> cosi'
> >> > poi
> >> > da poter inserire nel mio plugin delle routine e script Python che
> >> > "lavorino" sugli attributi delle tabelle del mio Geo-DB.
> >> >
> >> > In particolare mi interessa poterci fare delle Query SQL, di "filtro"
> >> > essenzialmente e che esse possano chiaramente essere lanciate da un
> >> > utente
> >> > qualsiasi con dei click o flag sulla Window principale.
> >> >
> >> > Il problema e' che non trovo il codice pyQgis che mi consenta di fare
> la
> >> > connessione al Geo-DB.
> >> >
> >> > Ma secondo voi per fare un lavoro di questo tipo sarebbe piu' semplice
> >> > usare
> >> > il PyQGis direttamente dal QGis, nella console apposita o tramite
> >> > plugin?
> >> > Quindi lasciar perdere il PostGIS e agire sui layers caricati e
> presenti
> >> > nel
> >> > progetto e quindi fare delle query (sempre SQL suppongo) sulle loro
> tab
> >> > attributi??
> >> >
> >> > Grazie.
> >> >
> >> > Andrea Gagna
> >> >
> >> >
> >> > _______________________________________________
> >> > QGIS-it-user mailing list
> >> > QGIS-it-user a lists.osgeo.org
> >> > http://lists.osgeo.org/mailman/listinfo/qgis-it-user
> >> >
>
-------------- parte successiva --------------
Un allegato HTML รจ stato rimosso...
URL: <http://lists.osgeo.org/pipermail/qgis-it-user/attachments/20160302/2d42b433/attachment.html>
More information about the QGIS-it-user
mailing list