Search icon CANCEL
Subscription
0
Cart icon
Your Cart (0 item)
Close icon
You have no products in your basket yet
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Free Learning
Arrow right icon
Arrow up icon
GO TO TOP
QGIS Python Programming Cookbook, Second Edition

You're reading from   QGIS Python Programming Cookbook, Second Edition Automating geospatial development

Arrow left icon
Product type Paperback
Published in Mar 2017
Publisher Packt
ISBN-13 9781787124837
Length 464 pages
Edition 2nd Edition
Languages
Tools
Arrow right icon
Author (1):
Arrow left icon
Joel Lawhead Joel Lawhead
Author Profile Icon Joel Lawhead
Joel Lawhead
Arrow right icon
View More author details
Toc

Table of Contents (10) Chapters Close

Preface 1. Automating QGIS 2. Querying Vector Data FREE CHAPTER 3. Editing Vector Data 4. Using Raster Data 5. Creating Dynamic Maps 6. Composing Static Maps 7. Interacting with the User 8. QGIS Workflows 9. Other Tips and Tricks

Building a standalone application

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.

Getting ready

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.

How to do it...

In PyDev, create a new project called MyMap with a Python script called MyMap.py, as follows:

  1. In the Eclipse File menu, select New and then click on PyDev Project.
  2. In the PyDev project's Name field, enter MyMap.
  3. Next, select the Python radio button from the Project Type list.
  4. From the Interpreter pull-down menu, select PyQGIS.
  5. Leave the radio button checked for Add project directory to the PYTHONPATH.
  6. Click on the Finish button.
  7. Now select the project in the PyDev package explorer.
  8. From the File menu, select New and then click on File.
  9. Name the file myMap.py.
  10. Click on the Finish button.
  11. Add the following code to the file that is open in the editor:
            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) 
    
  12. From the Run menu, select Run.
  13. Verify that the standalone QGIS map appears in a new window, as shown here:

    How to do it...

How it works...

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.

There's more...

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.

lock icon The rest of the chapter is locked
Register for a free Packt account to unlock a world of extra content!
A free Packt account unlocks extra newsletters, articles, discounted offers, and much more. Start advancing your knowledge today.
Unlock this book and the full library FREE for 7 days
Get unlimited access to 7000+ expert-authored eBooks and videos courses covering every tech area you can think of
Renews at $19.99/month. Cancel anytime
Banner background image