martedì 1 dicembre 2009

QTableWidget

Questo pezzo di codice Python fa parte di un plug-in da me scritto per QGis.
Tale codice permette di popolare un oggetto QTableWidget.
Lista contiene un recordset risultato di una query con 2 fields

         self.tblTema.clear()
         self.tblTema.setRowCount(len(Lista))
         self.tblTema.setColumnCount(2)
         self.tblTema.setHorizontalHeaderLabels(["Tema", "Tipo"])
         self.tblTema.setSelectionMode(QTableWidget.SingleSelection)
         self.tblTema.setSelectionBehavior(QTableWidget.SelectRows)

         for i, Tema in enumerate(Lista):
             item = QTableWidgetItem(Tema[0])
             selected = item
             item.setData(Qt.UserRole, QVariant(long(id(Tema))))
             self.tblTema.setItem(i, 0, item)

             Tipo = Tema[1]
             item = QTableWidgetItem(Tipo)
             self.tblTema.setItem(i, 1, item)
         pass

         self.tblTema.resizeColumnsToContents()
Le prime 6 righe di codice servono per:
  • cancellare il contenuto dell'oggetto
  • determinare il numero di righe
  • settare il numero di colonne
  • inserire l'header dell'oggetto
  • abilitare la selezione dell'intera riga
Il FOR successivo serve invece a popolare l'oggetto con il contenuto del recordset. Da notare che l'oggetto viene popolato cella per cella.
L'ultima istruzione serve a ridimensionare le colonne al contenuto.

mercoledì 23 settembre 2009

QGis: Aggiungere il layer selezionato nella finestra Overview

Codice che permette, dato un layer, di aggiungerlo alla finestra Overview
layer = iface.activeLayer()
mapCanvasLayer = QgsMapCanvasLayer( layer )
mapCanvasLayer.setInOverview( True )
iface.mapCanvas().setLayerSet( [ mapCanvasLayer ] )
Se si vogliono aggiungere più layer alla finestra Overview è sufficiente inserire le variabili di tipo QgsMapCanvasLayer alla lista di setLayerSet:
mapCanvasLayer1 = QgsMapCanvasLayer( layer1 )
mapCanvasLayer1.setInOverview( True )
mapCanvasLayer2 = QgsMapCanvasLayer( layer2 )
mapCanvasLayer2.setInOverview( True )
iface.mapCanvas().setLayerSet( [ mapCanvasLayer1, mapCanvasLayer2 ] )
Questo codice può essere eseguito all'interno della console Python di QGis o può essere incluso in un plugin.

martedì 22 settembre 2009

PostGIS: Determinare la distanza di un campo geometrico

In PostGis è possibile determinare la distanza che intercorre tra due o più punti di un campo geometrico di tipo LINESTRING utlizzando la funzione ST_Lenght(GeometryFieldName).

La seguente SELECT mostra un esempio di utlizzo di tale funzione:
SELECT ST_Length(GeometryFieldName) FROM TableName;

QGis: Recuperare il nome del layer corrente

Il codice python che permette di recuperare il nome del layer corrente è il seguente:
mp = iface.mapCanvas()
currLayer = mp.currentLayer()
nameLayer = currLayer.name()
print nameLayer
queste 4 righe di codice possono essere eseguite all'interno della finestra Python Console di QGis che inserite all'interno di un plugin.

Tale codice funziona sulla versione 1.0.2-Kore di Quantum GIS (QGis)