Blog

Here I post my thoughts, QGIS tips and tricks, updates on my QGIS-related work, etc.

Again about SEXTANTE for QGIS

24.04.2012 11:07 ·  Notes  ·  qgis, plugins, processing

I found out how to write plugins for SEXTANTE. It turns out there is nothing difficult about it, and SEXTANTE is great. It is a pleasure to write plugins for it. I started by adapting my first plugin, Statist, and now I’m thinking about porting all the other analytical plugins. And if all goes well, I will have my own toolbox with the modest name “Alex’s tools” :-).

QGIS hackfest 2012 (Lyon)

19.04.2012 13:58 ·  Notes  ·  qgis, meetings

The 7th QGIS developers meeting held in Lyon (France) has ended.

The first day was rather uneventful - the host university had problems with the electricity, and besides, almost everyone arrived in Lyon in the afternoon. The following days were more intense: presentations, discussions on various aspects of the project, and, of course, coding.

Presentations:

Discussed topics:

Among the topics discussed were also the upcoming GSoC, integration of some 3rd-party plugins into the core (DB Manager was already integrated at the time of writing), API changes, and so on.

SEXTANTE platform for QGIS

21.03.2012 18:57 ·  GIS  ·  qgis, plugins, processing

Victor Olaya has developed another framework for integrating various libraries and tools into QGIS. It is based on the SEXTANTE platform, which includes a toolbox, a graphical modeler and a script creator. It also provides a batch processing interface, command history, and some other features. The platform currently supports SAGA, GRASS, and R algorithms, as well as tools from the fTools and mmqgis plugins. According to the author, it is quite easy to add new algorithms and new providers.

I haven’t had a chance to test it properly yet, but it looks interesting and promising. The screenshot shows the list of tools, the GUI of the Basic Statistics tool from fTools and the result it produced.

SEXTANTE plugin in QGIS
SEXTANTE plugin in QGIS

Please note that this is still a work in progress, so regular users are better off waiting for the official release rather than using code from SVN.

Ecological niche modelling with openModeller

21.03.2012 11:34 ·  GIS  ·  openmodeller, howto

In the post “Getting started with openModeller” I showed how to use openModeller Desktop to identify areas at risk from invasive species. Another task that can be done with openModeller is modelling the distribution of species under new climate conditions.

Let’s see how to do it.

Read more ››

My volunteering

21.03.2012 11:14 ·  Notes  ·  life

Let’s be clear. The list of projects I’m involved in and things I do isn’t very long at first glance and includes:

But. All of this, oddly enough, is done in my spare time (which is quite limited, by the way), not on a full-time basis at work. Some of the things have come about because the functionality I needed was not available or did not meet certain criteria; something was done just for fun.

Therefore, do not be offended, and even more, do not try to play boss, having received a refusal to implement some feature; do not breathe down my neck and constantly pester me to fix a bug that annoys you; do not complain about slowness and lack of attention. I don’t want to and won’t reduce my free time any further. I’d rather just stop doing some things.

QConsolidate 0.1

08.03.2012 19:36 ·  GIS  ·  qgis, plugins, qconsolidate

Follow-up to yesterday’s post.

I uploaded QConsolidate 0.1 to the repository a few minutes ago. It provides:

WMS and WFS layers are excluded from processing for obvious reasons, but they will be present in the final project.

Please report bugs in the bug tracker or by email (as a last resort).

QConsolidate plugin for QGIS

07.03.2012 15:57 ·  GIS  ·  qgis, plugins, qconsolidate

Not long ago, people on the forum were looking for a way to consolidate the QGIS project and related layers into one place. As no such tool existed, the discussion quickly turned into a thread full of wishes and feature requests. A little later, I was faced with the same task. Fortunately, in my case, the project only had vector layers in Shapefile format, so I quickly developed a simple and somewhat suboptimal plugin.

Now that I have more free time, I am slowly improving the plugin. I have already implemented:

On the TODO list:

openModeller request files

26.02.2012 13:36 ·  GIS  ·  openmodeller, howto

In the post about openModeller command-line tools, I have mentioned request files several times. When using openModeller from the command line, we have to deal with these files very often, as they allow us to perform almost all necessary actions and go from the input data to the results.

So let’s take a closer look at these files.

Read more ››

Script Runner — a QGIS plugin for managing scripts

16.02.2012 17:57 ·  GIS  ·  qgis, plugins

Most QGIS users are probably aware of the Python Console, even if they rarely use it. It is a window (accessible from the “Plugins → Python Console” menu) where you can interactively enter commands and access QGIS API functions.

QGIS Python Console
QGIS Python Console

The Console is an extremely useful tool and comes to the rescue in many scenarios, from prototyping plugins to automating repetitive actions.

Obviously, typing commands every time you need to perform some task is inconvenient, so frequently executed code is transformed into scripts, and these scripts are then run from the Console. However, if the number of actively used scripts is large enough, using the console becomes a bit inconvenient. The Script Runner plugin by Gary Sherman was developed to solve this problem. The plugin is available from the official repository, has no dependencies, and can be found in the “Plugins” menu after installation.

The plugin’s interface is simple: a toolbar with large buttons, a list of scripts on the left, and four tabs — “Info”, “Source”, “Help” and “About” — on the right.

Script Runner plugin
Script Runner plugin

The “Add Script” and “Run script” buttons are self-explanatory: the first one adds a script to the list (the list is saved between sessions), the second one runs the selected script.

Clicking the “Script Info” button will populate the “Info” tab with docstrings, function and class names from the selected script, and the script code will be loaded into the “Source” tab in read-only mode.

I think the purpose of the last two buttons, “Reload Script” and “Remove Script” is clear from their names. The first reloads the script (useful for debugging or if you need to tweak the code and run the process again), and the second removes the script from the list (leaving the file on disk).

Script Runner has only one requirement for scripts: they must have an entry point. The entry point is simply a run_script function that takes only one argument, a reference to the qgis.utils.iface object. If such a function is not present in the code, the script will simply not be recognised and loaded by the plugin.

The script logic can be implemented either within the run_script function or in separate functions called from it. It is also possible to use an OOP approach. In this case, you need to create an instance of the class in run_script and call the necessary method(s).

Here is a simple example (the script creates an empty LineString memory layer):

from PyQt4.QtCore import *

def run_script( iface ):
    layer = QgsVectorLayer("LineString", "temporary_lines", "memory")
    provider = layer.dataProvider()
    provider.addAttributes([QgsField("id", QVariant.Int)])
    QgsMapLayerRegistry.instance().addMapLayer(layer)

A more complex example using a class:

from qgis.core import *

class Lister:
    def __init__( self, iface ):
        self.iface = iface

    def listFeatures( self ):
        layer = self.iface.mapCanvas().currentLayer()
        provider = layer.dataProvider()
        allAttrs = provider.attributeIndexes()
        provider.select(allAttrs)

        ft = QgsFeature()
        while provider.nextFeature(ft):
            geom = ft.geometry()
            print "Feature ID %d: " % ft.id(),

            if geom.type() == QGis.Point:
                print "Point: " + str(geom.asPoint())
            elif geom.type() == QGis.Line:
                print "Line: %d points" % len(geom.asPolyline())
            elif geom.type() == QGis.Polygon:
                tmp = geom.asPolygon()
                pNum = 0
                for r in tmp:
                    pNum += len(r)
                print "Polygon: %d rings with %d points" % (len(tmp), pNum)
            else:
                print "Unknown"

            attrs = ft.attributeMap()
            for k, v in attrs.iteritems():
                print "%d: %s" % (k, v.toString())

    def run_script(iface):
        lst = Lister(iface)
        lst.listFeatures()

For me, Script Runner has become a must-have tool, making it much easier to use the 20+ scripts I have.

openModeller command-line tools

02.02.2012 12:44 ·  GIS  ·  openmodeller, howto

Last year I wrote “Getting started with openModeller” post which gave an overview of openModeller - a free open-source ecological niche modelling tool - and showed how to run experiments in the openModeller desktop GUI. However, it is often faster and easier to perform the necessary actions using command-line tools. This is the subject of this post.

Read more ››