
QGIS Python Programming Cookbook, Second Edition
By :

QGIS is a complete desktop GIS application. However, with PyQGIS, it can also be a comprehensive geospatial Python library to build standalone applications. In this recipe, we will build a simple standalone script that will create a map with a line on it.
All you need to do to get ready is ensure that you have configured Eclipse and PyDev for PyQGIS development, as described in the Setting up your QGIS IDE recipe of this chapter.
In PyDev, create a new project called MyMap
with a Python script called MyMap.py
, as follows:
MyMap
.myMap.py
.from qgis.core import * from qgis.gui import * from qgis.utils import * from PyQt4.QtCore import * from PyQt4.QtGui import * app = QgsApplication([], True) path = "C:/Program Files/QGIS2.18/apps/qgis" app.setPrefixPath(path, True) app.initQgis() canvas = QgsMapCanvas() title = "PyQGIS Standalone Application Example" canvas.setWindowTitle(title) canvas.setCanvasColor(Qt.white) layer_info = 'LineString?crs=epsg:4326' layer = QgsVectorLayer(layer_info, 'MyLine' , "memory") pr = layer.dataProvider() linstr = QgsFeature() wkt = "LINESTRING (1 1, 10 15, 40 35)" geom = QgsGeometry.fromWkt(wkt) linstr.setGeometry(geom) pr.addFeatures([linstr]) layer.updateExtents() QgsMapLayerRegistry.instance().addMapLayer(layer) canvas.setExtent(layer.extent()) canvas.setLayerSet([QgsMapCanvasLayer(layer)]) canvas.zoomToFullExtent() canvas.show() exitcode = app.exec_() QgsApplication.exitQgis() sys.exit(exitcode)
This recipe uses as little code as possible to create a map canvas and draw a line to demonstrate the skeleton of a standalone application, which you can build up further to add more functionality, as we will see in later recipes.
To create line geometry, we use Well-Known Text (WKT), which provides a simple way to define the line vertices without creating a bunch of objects. The map does not appear until you call the canvas.show()
method. This allows you to set up the map behind the scenes and then display it when it is complete.
The standalone application can be compiled into an executable that can be distributed without installing QGIS using either py2exe or PyInstaller.
You can find out more about py2exe at http://www.py2exe.org.
You can learn more about PyInstaller at https://github.com/pyinstaller/pyinstaller/wiki.