QGIS
From DreamsteepWiki
UNTESTED
http://wiki.qgis.org/qgiswiki/PythonBindings
Instructions
1. unpack archive
2. for every tutorial in mainwindow.py set 'qgis_path' variable to your qgis installation prefix
(needed for loading providers, projections database etc.)
3. set environment variables:
Linux: (when /home/wonder/qgis is used)
export LD_LIBRARY_PATH=/home/wonder/qgis/lib
export PYTHONPATH=/home/wonder/qgis/share/qgis/python
Windows (when c:\qgis is used)
set PATH=c:\qgis;%PATH%
set PYTHONPATH=c:\qgis\python
PYTHONPATH is there to tell python where to search for QGIS Python bindings, LD_LIBRARY_PATH (resp. PATH)
tells system where to look for QGIS libraries that Python bindings need to work.
4. run examples: python mainwindow.py
class MapCoords(object):
def __init__(self, mainwindow):
self.mainwindow = mainwindow
# This one is to capture the mouse move for coordinate display
QObject.connect(mainwindow.canvas, SIGNAL("xyCoordinates(QgsPoint&)"),
self.updateCoordsDisplay)
self.latlon = QLabel("0.0 , 0.0")
self.latlon.setFixedWidth(200)
# Original sources Copyright (c) 2006 by Tim Sutton
#
# ported to Python by Martin Dobias
#
# licensed under the terms of GNU GPL 2
from PyQt4 import QtCore, QtGui
from mainwindow_ui import Ui_MainWindow
from qgis.core import *
from qgis.gui import *
import sys
import mainwindow_rc
qgis_prefix = "/opt/projects/qgis/install-cmake"
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
# required by Qt4 to initialize the UI
self.setupUi(self)
# create map canvas
self.canvas = QgsMapCanvas()
self.canvas.setCanvasColor(QtGui.QColor(255,255,255))
self.canvas.enableAntiAliasing(True)
self.canvas.useQImageToRender(False)
self.canvas.show()
# lay our widgets out in the main window
self.layout = QtGui.QVBoxLayout(self.frameMap)
self.layout.addWidget(self.canvas)
# create the actions behaviours
self.connect(self.mpActionAddLayer, QtCore.SIGNAL("triggered()"), self.addLayer)
self.connect(self.mpActionZoomIn, QtCore.SIGNAL("triggered()"), self.zoomIn)
self.connect(self.mpActionZoomOut, QtCore.SIGNAL("triggered()"), self.zoomOut)
self.connect(self.mpActionPan, QtCore.SIGNAL("triggered()"), self.pan)
# create a little toolbar
self.toolbar = self.addToolBar("File");
self.toolbar.addAction(self.mpActionAddLayer);
self.toolbar.addAction(self.mpActionZoomIn);
self.toolbar.addAction(self.mpActionZoomOut);
self.toolbar.addAction(self.mpActionPan);
# create the map tools
self.toolPan = QgsMapToolPan(self.canvas)
self.toolPan.setAction(self.mpActionPan)
self.toolZoomIn = QgsMapToolZoom(self.canvas, False) # false = in
self.toolZoomIn.setAction(self.mpActionZoomIn)
self.toolZoomOut = QgsMapToolZoom(self.canvas, True) # true = out
self.toolZoomOut.setAction(self.mpActionZoomOut)
self.polygon = True
self.rubberband = QgsRubberBand(self.canvas, self.polygon)
def zoomIn(self):
self.canvas.setMapTool(self.toolZoomIn)
def zoomOut(self):
self.canvas.setMapTool(self.toolZoomOut)
def pan(self):
self.canvas.setMapTool(self.toolPan)
def addLayer(self):
"""add a (hardcoded) layer and zoom to its extent"""
info = QtCore.QFileInfo("data/Abarema_jupunba_projection.tif")
# create layer
layer = QgsRasterLayer(info.filePath(), info.completeBaseName())
if not layer.isValid():
return
layer.setColorRampingType(QgsRasterLayer.BLUE_GREEN_RED)
layer.setDrawingStyle(QgsRasterLayer.SINGLE_BAND_PSEUDO_COLOR)
# add layer to the registry
QgsMapLayerRegistry.instance().addMapLayer(layer);
# set extent to the extent of our layer
self.canvas.setExtent(layer.extent())
# set the map canvas layer set
cl = QgsMapCanvasLayer(layer)
layers = [cl]
self.canvas.setLayerSet(layers)
def transform(self, x, y):
return QgsPoint(self.canvas.getCoordinateTransform().toMapCoordinates(x,y))
def on_mpToolShowRubberBand_clicked(self):
self.rubberband.reset(self.polygon)
self.rubberband.addPoint( self.transform(10,10) )
self.rubberband.addPoint( self.transform(20,10) )
self.rubberband.addPoint( self.transform(20,20) )
self.rubberband.addPoint( self.transform(10,20) )
def on_mpToolHideRubberBand_clicked(self):
self.rubberband.reset(self.polygon)
def main(argv):
# create Qt application
app = QtGui.QApplication(argv)
# initialize qgis libraries
QgsApplication.setPrefixPath(qgis_prefix, True)
QgsApplication.initQgis()
# create main window
wnd = MainWindow()
wnd.show()
# run!
retval = app.exec_()
# exit
QgsApplication.exitQgis()
sys.exit(retval)
if __name__ == "__main__":
main(sys.argv)

