FOSS4G 2015 – A Recap

[Note: Originally posted on http://www.how2map.com/]

foss4g2015_cFOSS4G has just finished up in fabulous Seoul, Korea. Online I see the occasional calls for “what is going on?” and “are they recording video?” Yes, videos will be available on the conference website at a later date. As for events which occurred during the week, let me gather up my blog posts on the topic.

Click on each link for my original write up of the day in question [Editor’s comment – please note these links will take you away from boundlessgeo.com. Don’t let that stop you, there are tons of great recaps and pictures from the events.]:

External Links:
The conference was a great success with 562 attendees. Thanks to everyone who made this event happen!

FOSS4G 2015

[Note: Reposted from my blog at http://www.how2map.com/2015/09/foss4g-2015.html]

FOSS4G is happening right now in fabulous Seoul Korea. Online I see the occasional calls for “what is going on” and “are they recording video”. I am not quite sure if they are recording video and publishing the video online. As for what is going on let me try writing a short blog post.

But first the links:


The first two days, as is often the case, are devoted to hands-on workshops. There were a number of GeoServer workshops this year … but they were in a funny order:
  • GeoServer Performance was our first workshop offering a chance to bench mark GeoServer and explore the impact environment, configuration, styling and data preparation have on performance. This was a fairly advanced workshop, assuming GeoServer knowledge so we could focus on getting the most out of GeoServer.
    Being a full day workshop we were looking at a nine hour day! I would like to thank everyone who attended (especially for the questions). The workshop materials will be available online shortly.
  • Beyond GeoServer Basics was Tom Ingold’s chance to shine with an intermediate workshop for those who have tried out GeoServer and want to take it to the next level.
  • I also got to enjoy Andrea Aime’s GeoServer for Beginners workshop
So what was odd here was the progression from advanced to intermediate to beginner workshops in the program. Still everyone had a great time, and I really liked seeing the students who brought along their own data or who were running off to benchmark their servers after the class.
Screen Shot 2015-11-06 at 10.23.45 AM
Screen Shot 2015-11-06 at 10.08.49 AM

Exhibit Area

The exhibit area is nice and bright and cheerful – and draws from both the FOSS4G conference (think t-shirts and smiles) and the Smart Geospatial Expo 2015 conference (think suits) which is running concurrently.

The Boundless table is moving a lot of LocationTech – providing a great opportunity for outreach. This is a great opportunity to meet everyone, catch up with open source colleagues and make plans with new ones.Activities we are highlighting this week:

  • GeoServer 2.8-RC1 is out! Thanks to Kevin Smith from the Victoria office
  • The gsconfig is now set up for collaboration and we are enjoying working with the GeoNode community on this one. The gsconfig project is a python wrapper on the GeoServer REST API.
  • In a similar fashion the qgis-geoserver-plugin is in the process of being set up – please talk to Victor Olaya for more details.
  • Gabriel’s vector tiles community module for GeoServer is available, and makes for an impressive demo.
  • Composer is out of beta and included in OpenGeo Suite 4.7 – stop by for a demo and see what our development team has been hard at work on.
  • GeoGig continues the long slow march through LocationTech incubation. We have our first round of incubation feedback and are rewriting out local storage from BerkelyDB to sqlite.
  • Stay tuned for more …

Screen Shot 2015-11-06 at 10.09.03 AM

Screen Shot 2015-11-06 at 10.09.10 AM

Screen Shot 2015-11-06 at 10.09.21 AM

Screen Shot 2015-11-06 at 10.09.30 AM

FOSS4G Day 1

I snuck in late to the keynote, which consisted of a couple of addresses from local politicians. One in particular struck an odd tone (at least for me). The national mapping agency had a long thought out presentation (which circle crop diagrams) showing how to fit open source into their procurement model. Sadly this still seemed to be taken from the perspective of “open source is not supported” (he should come by the Boundless booth).There are a number of approaches seeing success world wide. Australia has had a strong open data push (with open source software sneaking in once the door is “open”). I would like to see governments join software foundations, double check their policies so civil servants can take part in and start open source projects, and in general be part of the community rather than feel excluded.I expect this represents a failure in FOSS4G world wide outreach. It is a good thing we are having the conference here and I hope the local community can take these ideas further into the Korean government.

  • New Geoprocessing Toolbox in uDig Desktop Application Framework (Minpa Lee (Mango System inc.), KiWoong Kim)
    Was totally impressed with the wide range of functionality on display, indeed I hardly know where to start. I must catchup online and congratulate Minpa Lee for his hard work.
    Screen Shot 2015-11-06 at 10.18.46 AM
  • OpenAerialMap: A Distributed Commons for Searching and Hosting Free Imagery (Kate Chapman). A talk so popular Kate had to do it twice – the session was running ahead of schedule, so people who arrived on time were disappointed to see they missed it. Kate did an excellent job, both times, of describing what this initiative is working towards. I liked the story of the QGIS plugin produced out of a HOTS diversity initiative. There was a number of good (i.e. hard) questions on policy from the floor.
    Screen Shot 2015-11-06 at 10.18.56 AM
  • How Simplicity Will Save GIS (Vladimir) – inspiring story of leaflet development (perhaps the same talk as foss4g-na?) Animated GIFs (well, internet cats) are always a nice touch. Sadly this one was cut short on time.
  • Turning Data into Information with Geo-Ontologies (Justin Lewis (TerraFrame), Nathan McEachen). A quick crash course in ontologies to set the stage for “geo” (a state is a member of this class of features). The demo was very impressive, ended up coming across as a smart version of CartoDB.
    Screen Shot 2015-11-06 at 10.19.08 AM
  • ISA Server – An Indoor Spatial Data Server (Ki-Joune Li (Pusan National University), Taehoon Kim, Joonseok Kim). Indoor GML application running in the the limitations of GeoTools  (Complex feature read-only, no 3d operations- just data structure). They managed to bridge to a C library for the extra spatial functionality. Made a point of hunting this crew down for the GeoTools BOF as they are doing some impressive work.
    Screen Shot 2015-11-06 at 10.19.21 AM
  • Using Spark in Weather Applications (Tom Kunicki (The Weather Company), Charles Maalouf). Tom once again breaks my head with sheer volume of data the weather company processes on a daily basis. A couple strong takeaways on the difference between Hadoop and Spark scalability – and 18 billion requests a day with all those cell-phones checking the weather. Should make a map to take a picture of the sky and tell the user if it is raining.
  • Citizen science and Smart cities, the evolution of GIS (María Arias de Reyna (GeoCat bv), Jeroen Ticheler). A real find this conference has been the enthusiasm of María and learning more about the GeoCat team in Spain. The demo of GeoNetwork really shows how far the application has come, and how much easier it is to use now.
  • PostGIS Feature Frenzy (Paul Ramsey (CartoDB)). Paul is a force of nature at these conferences, and I learned a few things in this mad dash through PostGIS goodness.
  • State of GeoServer (Jody Garnett (Boundless)) – so much to say, I will just have to put up the slides.
  • Temporal Maps leading to new views in Spatial Analysis (Andy Eschbacher (CartoDB)). Andy did a great job of explaining what Torque does as a project, and demonstrating functionality. I wanted to ask a few more technical/community questions but that will have to wait for another time.
  • Visualizing geographical data made extremely easy by SLD Editor!(Hanna Visuri (National Land Survey of Finland)). Hanna was here for her first foss4g and her first day speaking! This was her second talk of the day, showing the crowd an impressive SLD editor written with Node.js.

GeoServer / GeoTools BOF

We had a good discussion at the GeoServer / GeoTools BOF meeting – it was pretty quick:
  • Some great numbers out of the “performance” workshop, trying out Java 7, Java 8 and the Marline Rasterizer
  • We discussed how Torben could replace all the tabs with spaces (this is a developer BOF after all)
  • Some impressive performance numbers Tom Kunicki is getting out of JAI-Ext operators. We need to catch up with Tom and get the details.
  • Discussion about how GeoTools community modules works, in the hopes of attacking the ISA Server team to share some of their RnD with the wider world.
  • A bit of high level planning around “Beyond JTS” since the ISA Server team needs more expressive geometry data structures
  • A bit of discussion around replacing JAI, and some of the angles we could use to get that work both scoped and funded.

Gala Dinner

Excellent food, impressive drumming – but rather expensive at $110 USD if you bought your own ticket. By contrast the Korean BBQ after the workshops was $90 for a table of four :)
The other conference, Smart Geospatial Expo, had some kind of awards ceremony that Jeff was dragged into. Lucky Jeff :)
The important part, as always, was the conversations! And the stand-up format allowed for everyone to wander around, search for napkins, and interact with more people than we would have done sitting.

Our New Victoria Office!

Boundless Victoria (British Columbia) is growing – and has moved into a larger location down the street at 880 Douglas.

Join the Team

If you are interested in working on OpenGeo Suite (and a whole host of open source software) please check out our jobs page. The Victoria office is a great place to work (even if we have a few boxes left to unpack).

A special invite to University of Victoria graduates – we would love to see you at the UVic Career Fair on September 29th.



GeoGig Rebase and Tag

In light of some recent questions, I would like to take to a moment to discuss what the GeoGig team is up to and what additional steps are being taken to prepare for GeoGig 1.0. To frame this discussion I will highlight two steps (rebase and tag) that are used to prepare a data product for release in GeoGig.

GeoGig is a distributed version control system for features (much the same way git is a distributed version control system for lines of text). This technology originated as an R&D project within Boundless and is now part of the Eclipse Foundation LocationTech working group.

For additional background on the project please see previous articles “Distributed Versioning Geospatial” (Part I, Part II, Part III) and a case study with LMN.

Getting Ready (Rebase)

Rebase is used to organise work prior to public review.

     $ geogig rebase locationtech/master

We are going through a similar step preparing the GeoGig project for release. The initial codebase has been checked over and is now available at github.com/locationtech/geogig. The second part of the review is checking all the software that is included with GeoGig.

The vast majority has been approved, or fixed and approved, and we are down to two difficult cases.


First up is replacing our use of Berkeley DB Java Edition, which at the time the project started was the best key/value embedded Java database we could find.

Here are some candidates for replacement:

  • MapDB
  • sqlite
  • leveldb

The architecture of GeoGig allows for different storage backends to be plugged-in. If you check the code base you can see graph databases and document databases such as mongodb are available.

The choice of a default storage technology for the local repository is difficult as we would like to balance performance (for working with large datasets) and portability (for mobile application use). Use of sqlite is especially attractive in this context as it opens the door to C/C++ use to allow easier writing of OGR drivers.


Geogig-console is currently dependent on the JLine2 library for interactive shell-like sessions, and we need to find an alternate library.

There are a number of options, such as apache-cli, but we do not expect the choice to have any impact on the use of geogig.

Release (Tag)

Tag is used to version a data product for release:

     $ geogig tag v1.0.0 -m “finally!”

GeoGig will have a short delay as the code-base is re-checked (for the changes during incubation along with any new sample data or dependencies).

Contact Us

If you are interested in the GeoGig project please sign up to geogig-dev and introduce yourself.

You can also catch Boundless directly, to discuss GeoGig or our other open source projects, at FOSS4G 2015, LocationTech Tour or EclipseCon Europe.



Announcing the Availability of OpenGeo Suite 4.7

Today we’ve announced the immediate availability of OpenGeo Suite 4.7 – the press release hits the treetops of what’s included, so we’ll take the opportunity here to give a bit more color.

Support for GeoMesa

We’ve written in the past about support for GeoMesa, as recently as this past spring. What we’re seeing now is a clear trend of organizations struggling with their traditional relational databases (RDBMS). There is so much interesting data useful for GIS purposes that organizations are increasingly needing advanced data management strategies. So, we’re taking our own support of GeoMesa (and its underlying Apache Accumulo system) to the next step with a formally supported plugin for connection to GeoMesa data stores. Organizations who wish to use GeoMesa instances will now have a much easier and more reliable experience connecting their OpenGeo architecture.

WPS Builder

As GIS Professionals and Developers, the Q Score of our excitement about this feature is high. I reference here to understand the way things are prior to this release – not exactly an approach which makes advanced GIS accessible and friendly to an increasingly fragmented user audience. WPS Builder is a web-based UI that takes the next step in simplifying complicated processes, with the added upside that more professionals can now use WPS processes to improve what they can do with GIS.


We’re all-in on Composer – we strongly believe alternatives are needed across our industry for web-based styling and publishing tools. So, we’re continuing our efforts on Composer in this release. We think YSLD is very useful, so there are a lot of improvements in the experience crafting and editing the syntax. We’ve increased supported formats, made coloring easier to identify, and squashed bugs.

GeoServer Extension for AWS CloudWatch

There’s sticking stuff in the cloud as a VM and running it on somebody else’s iron, and then there’s really running stuff in the cloud. This new extension helps take GeoServer into the latter, by allowing more alignment between GeoServer and the elastic nature of the cloud. AWS Cloudwatch can now monitor load on GeoServer, helping users take advantage of the ability to scale systems up and down as needed.

Updates, Fixes, Etc.

Of course we wouldn’t be complete with any new release without fixing issues and updating supported systems. The most noteworthy is support for Java 8.

As always, all of these great features and the requisite support are available to Boundless customers. Please don’t hesitate to contact us to learn more.


See You in Seoul!

Boundless is looking forward to seeing everyone at FOSS4G 2015 in Seoul Korea. We would like to thank the organizers for a chance to sponsor this great international community event.

Boundless has a large contingent in attendance, you can catch us in the following workshops:

  • GeoServer Performance Tuning (WS01)
  • GeoTools DataStore Workshop (WS03)
  • Beyond GeoServer Basics (WS19)

And presentations:

  • Building OpenLayers Applications with QGIS
  • OpenLayers 3 Feature Frenzy
  • State of GeoServer
  • Everybody wants (someone else to do) it: Writing documentation for open source software
  • OSGeo and LocationTech Comparison
  • OL3-Cesium: 3D for OpenLayers maps

We also invite you to visit Boundless in the exhibit area and learn more how we put these great technologies to use for our OpenGeo Suite customers.



Georeferencing Imagery in the Hunt for MH370

News of debris discovered off the coast of Reunion Island and the subsequent acknowledgment from the Malaysian Prime Minister has given hope as to the whereabouts and fate of Malaysia Airlines Flight 370. While we wait for additional information regarding the missing Boeing 777, I wanted to examine if GIS could add plausibility that debris may have washed up this far West from the original search areas.

According to the experts, it is possible that both deep ocean currents and wind-driven surface currents could have moved the debris the some 2600 miles from the search area to the coast of a small island just east of Madagascar. More specifically, the Indian Ocean Gyre, a large system of rotating ocean currents known to move ocean trash and debris long distances across the globe, could be partly responsible for the movement of the debris.

The Indian Ocean Gyre is composed of two major ocean currents, the South Equatorial Current, and the West Australian Current. A quick Google search for Ocean Currents yields several good maps that illustrate the gyre very well. So I wanted to try and overlay some ocean current and prevailing winds graphics on top of some additional vector data I had of the MH370 search areas and potential flight path (click the links for reference images and data).

To align the graphics with the vector data we need to perform a process called georeferencing.  Performing georeferencing inside QGIS is possible through a native plugin called the Georeferencer GDAL plugin.  “Native”, meaning the plugin is already installed and you simply need to turn it on.
Once turned on, you can access the Georeferencer plugin from the Raster dropdown > Georeferencer > Georeferencer which will bring up the Georeferencer window.

The usual procedure for georeferencing an image involves selecting multiple points on the graphic, and then tying those points to ‘real world’ locations in the map.  We call these points control points.  The more control points you create, the better the result will be.  The first step is to load the graphic you want to georeference on top of your vector data.

The image will load into the Georeferencer window and you can begin the process of selecting control points to line up the image with the real world.

There are two ways of creating control points: we can manually enter them, or we can choose them interactively by clicking on the map.  With the Control Points tool active, click a point on the graphic.  Then, either enter the coordinates of where that point should be on earth, or click the location in the vector data that corresponds to the location in the graphic.

Now the georeferencing will occur when the GIS warps the graphic according to the control points in a process known as transformation.  Depending on the transformation or warping method you use, you will need a minimum of between 4 and 10 points.  We are going to use a Polynomial 3 transformation (for more information on transformation algorithms, I encourage you to review “Available Transformation Algorithms” here), which requires a minimum of 10 control points to work correctly.   The control points will show up in the chart at the bottom of the georeferencer window called the GCP (ground control point) Table.
Once your control points are selected, we need to configure some settings for the transformation to work correctly.  Open the Transformation Settings window under the Settings drop down.

For starters, set the Transformation Type to be Polynomial 3.  Then make sure the Resampling Method is set to Nearest Neighbor, and Compression is set to NONE.  Next, choose a name and location for the georectified graphic.  Set the Target SRS to be the spatial reference you want the output graphic to be, and check the box to Load in QGIS when done.  The settings should look similar to the graphic below.

When you are finished click OK to dismiss this dialog box.  We are now ready to start the transformation.  To do this, click the File dropdown > Start georeferencing.

When the process is done, it will add the warped graphic to the map.

I added some transparency to the now warped graphic so we could see how well it lines up with my vector country layer.  Looks pretty good.  Now all we need to do is digitize the currents as line features, add labels, and color code based on temperature.


I repeated the process for the second graphic of prevailing winds in the region.  The digitized results from both can be seen below along with the original search areas, and the location of Reunion Island.

The now georeferenced and digitized graphics illustrate how the debris could have washed on shore as the surface currents rotating around the Indian Ocean Gyre could have move the debris in a general Western direction.  Now, let me reiterate that I am not an expert on ocean currents or aircraft search and rescue, and I don’t wish to make claims about MH370.  This is an opportunity based on real-world examples to examine how to use QGIS to overlay information from a graphic on top of other vector data using the Georeferencer GDAL plugin.

It will be interesting to see whether or not the experts use their early findings to help to refine additional search areas.  If you are interested in trying the exercise for yourself, you can download the graphics from the links embedded above.


Building an OpenLayers 3 Web App Without Writing Code – Part II

In my previous blog posted on June 23rd, I walked through the steps necessary to go from Project & Data to completed web app using Boundless’ new Web App Builder. I encourage you to take a minute to review the initial blog, as there’s some important context. The sample flood data application used a sampling of the most commonly anticipated controls and options that are available, but there’s a lot of functionality I didn’t explore. This post we will explore more of these, including the following that someone desiring greater control might seek to leverage:

-> using different themes
-> augmenting the HTML of an information popup,
-> using bookmarks map control.

I think it’s worth noting that the extensibility of QGIS – for more on this, my colleague Anthony’s recent post is a great place to start – means these are only the start, there is lots more room for additional functionality to be added.


To refresh your memory… When we start the Web App Builder, the first tab presented to us is the Description tab. Here we enter an application name, add a logo image, and choose a theme. The Web App Builder currently includes three themes: Basic, Fullscreen, and Tabbed.
Below is the same application created using the three different themes.



As you can see from the images the primary difference between the themes is the location of the controls. In the basic theme the tools are placed in the upper right and clicking the tool brings up a new panel. In the tabbed version the tools are the title of the tab and the information (about, chart, etc) is contained inside its respective tab.  To maximize real estate for the map the full screen version places the tools are in a pull-down on the top.  The three themes provide flexibility in the look and feel of your application, deciding on the best fit is up to you.


Just as important as finding the right theme for your application is formatting the attribute data for features. The configuration dialogue for info popups is accessible from the QGIS Layers tab and is specific to each layer.   The Info popup for the layers uses HTML, which we can use to format the attributes and other popup content.

Let’s start by looking at how we add feature attributes to the popup. While the editor dialogue is initially empty, clicking ‘Add all attributes’ in the Info Popup Editor dialogue will add every attribute to the popup along with the field name, colon, and line break.

Info Popup after clicking Add all Attributes

Resulting Info Popup

However the HTML tags can be used for more than just formating. They can also be used to link to other documents or reports based on information in the attributes. In our sample Flood Data Viewer Application I’ve added a reports sub-folder that has PDFs for each of the parcels using the Parcel ID as the file name.  Using the HTML Link tag we can create a link to the PDF report using the parcel ID.

<b>Owner Name</b>:[OWNER_NAME]<br>
<b>Parcel ID</b>: [PARCELID]<br>
<a href=”./reports/[PARCELID].pdf”> Parcel Report </a>

From the popup a user is presented with a clickable link that takes them to the corresponding PDF report for the parcel.


Located under the controls tab, the Bookmarks control allows us to import bookmarks or a bookmarks layer from QGIS, and with a little configuration can turn our map into a story panel.

Right-clicking on the control opens the configuration dialogue.
There are two tabs for configuring the bookmarks, the first is used to specify which bookmarks to use and the second to define how the bookmarks are presented.

The first step is adding bookmarks, they can be added from QGIS or from a separate layer. In our case the bookmarks are saved with the QGIS project. Once added, we can change the order of the bookmarks by dragging and dropping them in the list, and can add a description to each bookmark.

If we stop here and preview the application we see the bookmarks are presented in a drop down.

Choosing a bookmark will pan and zoom the map to that location.

Selecting “Show as story panel” on the second tab of the bookmarks configuration dialogue changes the bookmark display from a drop down to an inset where the intro title and description are used in the overview inset. Clicking the arrow in the inset advances the map to the next bookmark, while checking “Move automatically with each X seconds” will cycle through the bookmarks automatically.



Overview map

1st bookmark

The screenshots above illustrate the story panel concept, this is useful for making presentations or guiding users through key points of interest. However, for our limited text the story panel is much too large. Let’s take a quick look at how we can adjust it, using the description tab click configure theme.  Here we see the setting that can easily be changed for the components of the web app:

We want to change the pixel values for the height and width inside the “.story-panel”:

Here is the story panel after the change.
As we have seen in this post the Web App Builders’ configuration options provide a lot of flexibility for your application. If you need to make changes beyond the configurations many of the theme components and controls can be customized using CSS or HTML, which again means web developers can support the application without being GIS experts.

Currently the Web App builder is available by contacting Boundless at sales@boundlessgeo.com.  In the near future the Web App Builder will be available to install from the Boundless plugin server, simplifying the install and update process.




MongoDB Collaboration

We’ve been receiving increased interest of late to use OpenGeo Suite in new “Big Data” environments, as customers are seeking to store, manage, and leverage their growing volumes of data. In response, we’ve been working on MongoDB support for our enterprise customers and collaborating with LocationTech and CCRi on GeoServer integration with GeoMesa and Accumulo. We’ll have more to say about our work with GeoMesa in the near future, but I wanted to take a moment to share some additional details about our work with MongoDB.

GeoTools Collaboration

In June we had the pleasure of donating the OpenGeo Suite 4.6 implementation of MongoDB DataStore to the GeoTools project. Setting up MongoDB as a community module allows Boundless to smoothly collaborate with the GeoTools community without duplicating effort.

In the short time the code has been available we have already seen:

  • Fix: Filter on attributes that were not included in your query results (Stefano Costa)
  • Fix: Arrays of objects in a collection are now ignored, rather than preventing the collection from being published (Torben Barsballe)
  • New Feature: Support for LIKE filter pattern matching (Stefano Costa)
  • Lots of small improvements to test coverage

This improved implementation will be provided to our customers in the next release of OpenGeo Suite.
Screen Shot 2015-11-06 at 11.44.46 AM

Details on the MongoDB DataStore

The MongoDB DataStore provides access to any collections that have been set up 2dsphere spatial index. The DataStore can use (or generate) a schema mapping collection content to the  FeatureType Attributes used by the GeoTools feature model.

For the following GeoJSON feature:

{   "type": "Feature",
    "geometry": {
        "type": "Point",
        "coordinates": [ 45.52, -122.681944 ]
    "properties": {
        "city": "Portland",
        "year": "2014"
        "attendance": "840"

The following schema maps content to a FeatureCollection on the fly:

{   "typeName": "places",
    "userData": {
        "collection": "places"
    "geometryDescriptor": {
        "localName": "location",
        "crs": {
            "properties": {
                "name": "urn:ogc:def:crs:EPSG:4326"
            "type": "name"
    "attributeDescriptors": [
            "localName": "location",
            "type": {
                "binding": "com.vividsolutions.jts.geom.Point"
            "userData": {
                "encoding": "GeoJSON",
                "mapping": "geometry"
        {   "localName": "city",
            "type": { "binding": "java.lang.String" },
            "userData": { "mapping": "properties.name" }
        {   "localName": "year",
            "type": { "binding": "java.lang.String" },
            "userData": { "mapping": "properties.year" }
        {   "localName": "attendance",
            "type": { "binding": "java.lang.String" },
            "userData": {  "mapping": "properties.attendance" }

The use of GeoJSON carries with it the assumption of WGS84 (as expected by the 2dsphere spatial index). MongoDB 2.5 or newer is recommended for MultiGeometry support.

Interested developers can check out the community module for more information and we look forward to hearing from you on geotools-devel.


A Desktop Analyst’s Guide to QGIS – Part 2: Beyond the Basics

If you haven’t already done so, take a look at part 1 of this blog series.  Having been a desktop GIS analyst for most of my career, I have an appreciation for the power behind proprietary desktop GIS applications.  But I also have come to the realization that 80% of users use only about 20% of the potential capabilities of desktop GIS.  With better license-free alternatives available in the open source community, I could not justify needing expensive proprietary desktop GIS applications when only 20% of my coworkers were getting the full value out of it.  It quickly became evident that QGIS was a solid alternative desktop GIS, and had complete feature parity for that 80% of functionality the majority of my coworkers were leveraging.  So the first part of this series focused on the simplicity and ease-of-use of QGIS by illustrating how to accomplish the 10 functions/workflows performed most often by desktop analysts.  Now part 2 will examine more in-depth capabilities that extend beyond core QGIS through the use of plugins, models and scripts.

One of the quintessential benefits of using open software is the massive community of developers and users who stand behind it.  This means more eyes checking the code for errors, and even more eyes looking to enhance the code and extend its capabilities.  Working at Boundless affords me the opportunity to connect with this community of developers, as I work alongside many of the steering committee members and core contributors of the software projects behind OpenGeo Suite.

Screen Shot 2015-11-06 at 1.16.52 PM

Extending QGIS with Plugins

Proprietary desktop software is fairly WYSIWYG – what you see is what you get.  Since the source code is closed, additional functionality is usually only available through extensions you have to purchase for an additional cost.  QGIS on the other hand has an open source code base, and extending its functionality is limited only by your imagination (and your coding skills).  QGIS has a massive library of plugins written by fellow Boundless employees, QGIS developers and other independent users.  There are literally thousands of plugins available for use, ranging from coordinate conversion, to simplifying workflows, to connecting to specific data types and stores.  Plugins are made available to all QGIS users at https://plugins.qgis.org/, or directly inside of QGIS by using the Plugin dropdown.

As I continue my mission to educate and evangelize to organizations that QGIS is a worthy alternative to proprietary desktop GIS software, there are a few plugins I feel deserve to be highlighted.  The first increases QGIS ability to manipulate raster datasets.  The other two help connect the individual software applications into seamless workflows, making for an improved user experience, and are only available through the Enterprise Edition of OpenGeo Suite.

GDAL Tools Plugin

I am always shocked when someone asks me if QGIS supports imagery. Of course the answer is yes; raster datasets (to include imagery) are as much a part of GIS as points, lines and polygons.  I guess the part that shocks me is people thinking we would support a desktop GIS client that didn’t support imagery.  QGIS uses the GDAL library to read and write raster data formats, including ArcInfo Binary Grid, ArcInfo ASCII Grid, GeoTIFF, ERDAS IMAGINE, and many more.

If you aren’t familiar, GDAL stands for Geospatial Data Abstraction Library.  As noted on the GDAL website, GDAL is a translator library for raster and vector geospatial data formats that is released under an X/MIT style Open Source license by the Open Source Geospatial Foundation. In total, GDAL enables support for over 140 different raster formats, and over 80 different vector formats with the help of its brother OGR (now part of GDAL).

But more importantly QGIS also supports the management and manipulation of imagery as well.  The GDAL library consists of a set of command line programs, each with a large list of options. Users comfortable with running commands from a terminal may prefer the command line, with access to the full set of options. Example tools include raster management tools to query, re-project, warp and merge a wide variety of raster formats.  Also included are tools to create a contour (vector) layer, or a shaded relief from a raster DEM, as well as tool to make a VRT (Virtual Raster Tile in XML format) from a collection of one or more raster files.  But running the tools via a command line isn’t exactly simple for basic desktop analysts.  This is where the GDAL Tools plugin comes in.  It offers an easy-to-use GUI interface to the collection of GDAL tools, exposing only the most popular options as a series of drop down menus, tool dialogs and wizards.  It is a far more intuitive way to manipulate raster datasets, targeted at those users accustomed to using tools in ArcToolbox.  A full list of tools and their options are listed on the GDAL Tools website.

While you always have the full GDAL library available to you through the command line, this plugin makes it very easy to access some of the most commonly used raster and vector tools without intimidation factor of remembering command line syntax.

OpenGeo Explorer Plugin

One of the many benefits to using the Boundless version of OpenGeo Suite are the extra goodies that our team has created to make working with the software easier.  I can’t think of a better example of this than the OpenGeo Explorer plugin.

I love the fact that OpenGeo Suite provides a database, a server and a front end to work with, but I have never been a fan of having to opening three separate applications in order to administer each of them.  But not so fast, my friend (said in my best Lee Corso impression)!  This is where the OpenGeo Explorer plugin comes in, giving you the ability to configure the separate components of OpenGeo Suite from directly inside of QGIS!  You can prepare and style data, publish datasets to GeoServer, or stuff datasets into PostGIS all without leaving the application you are most comfortable using.
There is both an integrated catalog view and a tabbed view depending on your preference.  You can toggle this option, and many others, in the OpenGeo Explorer settings menu.

Perhaps you are the GIS Server administrator for your organization.  This plugin gives you the ability to publish symbolized layers from your QGIS document directly into GeoServer with a simple right-click > Publish to GeoServer.

Maybe you are managing the organization’s geodatabase, and need an easier method to add/drop tables or rename layers already inside PostGIS.  Or, maybe you want to import a .csv file of point locations into your PostGIS geodatabase.  The OpenGeo Explorer plugin can help with that too…

Bottom line, the OpenGeo Explorer plugin gives you the ability to author cartographic content inside QGIS and then publish it directly to GeoServer and PostGIS without ever leaving QGIS.  It’s a great timesaver, and makes the concept of publishing web mapping services super easy for even the most novice desktop GIS users.  If you are interested in learning more about the OpenGeo Explorer plugin, have a look at the documentation and tutorial on the Boundless QGIS page.

Web App Builder Plugin

The last plugin I want to highlight is the QGIS Web App Builder plugin.  Imagine if you will (said in my best Don LaFontaine “In a world…” impression) a world where you don’t have to write a single line of code to create your own custom OpenLayers 3 application.  Then imagine you could build that application with datasets you configure and symbolize from right inside of QGIS.  Mind blown yet?  Well believe it, creating an OL3 app has never been this easy before.
If you haven’t already done so, take a few minutes and read Building an OpenLayers 3 Web App Without Writing Code which my colleague Aaron Miller posted last week.  It’s a phenomenal primer and walkthrough for the capabilities inside this plugin.  So as to not repeat ourselves, I won’t walk through the plugin here, but I am going to focus on what the plugin means to desktop users.

As an analyst, there was no better feeling than seeing my work in a briefing or being asked to present it in front of decision makers.  For me, this usually meant plotting 24” x 36” paper “wall maps”, or exporting my work as “happy snaps” and putting them into a PowerPoint slide.  But static products just don’t have the same bang-for-the-buck as dynamic content.  Not to mention static products usually require someone to explain them (namely the analyst who created them).  But presenting your results as a web map or web application means I can simply share the URL to the application, and anyone can easily pan, zoom and click around to explore layers of information and analytical results.  And remember, web applications are dynamic.  Basemaps are cached for fast panning and zooming, layers will update as features are added or removed, and best of all, you can use a myriad of widgets against the data in the application.  You can measure objects, gazetteer search place names, query attributes and much, much more.  And with the help of the Web App Builder plugin, you no longer need to be a developer to share your work as a dynamic web application.  But you don’t have to take my word for it, try it yourself and see just how easy it is to create your very own app in just a couple minutes.

Extending QGIS with Models & Scripts

A lot of work inside a Desktop GIS is data manipulation; changing formats, importing tables, reprojecting, clipping, buffering, filtering by some attributes, etc.  Many times I find myself performing the same workflows over and over again, just on a different dataset in a different part of the world.  The tools in the GIS are great, but they are simple, sometimes low-level functions which have to be strung together with other tools to satisfy the needs of my workflow.  And this, my friends, is where models and scripts come in.

Processing Modeler

If you are familiar with ArcGIS for Desktop, you are probably aware of (if not intimately familiar with) ModelBuilder; the graphical user interface for connecting individual processes together into orchestrated workflows.  But did you know that QGIS also offers a ModelBuilder-like capability?  It’s called Processing Modeler and it’s available inside the Processing Toolbox of QGIS.
Screen Shot 2015-11-06 at 1.31.55 PM
As you would expect, the processing modeler gives you the ability to string together independent processes into complete workflows.  In the example below, I built a model to automate selecting points which fall within a polygon.  This is a task I run daily, so rather than run tools and configure parameters each morning, I simply set up the workflow one time and run the tool as many times as needed.
Screen Shot 2015-11-06 at 1.31.35 PM
Due to their visual nature, Models are a great first step into more advanced tool creation with scripting.  For some, scripting can be a bit intimidating, but the visual canvas that the Processing Modeler affords obfuscates the idea you are writing code behind the scenes.  Models are also a great way to learn about the individual tools available in the QGIS Processing Toolbox.

You can learn more about the QGIS processing framework and Processing Modeler in the QGIS 2.0 documentation.

Scripting with PyQGIS

Keeping in the spirit of QGIS customizability and extensibility, for those of you looking for more fine-grained control over your automated tasks, or looking for a way to ‘glue’ together processes from different applications, then Python and the PyQGIS module are the way to go.  Python is an easy-to-learn, yet very powerful scripting language used extensively in the geospatial community.  Both ArcGIS for Desktop and QGIS use Python as their language of choice for the creation of automation scripts and for extending their processing frameworks with custom capabilities.  So if you want to spend the time to learn a scripting language, Python is probably your best bet.

There are several ways you can interact with python scripting inside of QGIS.  The first (and arguably the easiest) is to interact with Python via the Python Console.  This is a built in window for executing simple Python commands against data in your QGIS project.  In the example below, I print out the name of the streams inside a stream feature class.
Screen Shot 2015-11-06 at 1.31.45 PM
Of course you can also take it a step further and create standalone Python scripts which can be shared and imported into any QGIS instance.  To do this, simply use the Create new script function from the Processing toolbox.  It will open the script editor where you can begin to write your code.
Screen Shot 2015-11-06 at 1.31.55 PM
In the example below I created a python script which will convert polygons to lines.  Shout out to PurpleLinux for the code snippet.  They have tons more to browse and help get you started.
Screen Shot 2015-11-06 at 1.32.01 PM

Not only can standalone scripts be saved and shared amongst other QGIS users, but they can be used to call external applications, incorporate 3rd-party Python modules, develop custom functions and more.  This is where the true power of scripting with PyQGIS comes into play.  There are a lot of great tutorials and reference guides out there for getting started with PyQGIS, a few are listed below:

Python Plugins

Finally, for those wanting to take their Python skills to the next level, you can even create plugins for QGIS using Python.  Plugins allow for more control over the user interface and user experience, and can be exposed as buttons and drop-down menus directly on the QGIS GUI. As an example, the MGRS Coordinates plugin provided by Boundless leverages the Python support in QGIS.

In comparison with classic plugins written in C++ these should be easier to write, understand, maintain and distribute due the dynamic nature of the Python language.  Python plugins are listed together with C++ plugins in QGIS plugin manager.  The best place to get started with Python plugins would be the QGIS Documentation about developing plugins.

Wrapping it up

The goal of this blog series was to illustrate that QGIS satisfies the needs for both the casual and the advanced desktop user.  It contains that 80% of functionality which the majority of desktop GIS users use on an everyday basis, without the high cost of proprietary desktop GIS solutions.  But QGIS also has a vast community of open source contributors who continue to build advanced functionality to satisfy the power users too.  The model and scripting framework means users can create automated workflows to save time, and then share those workflows between other analysts.  Finally, the ability to create plugins means there is virtually no limit to what functionality can be built inside of QGIS.  Now more than ever QGIS is the ideal desktop application for your hybrid GIS environment.