Help us move QGIS forward. We are particularly interested in a number of enhancements that you as a student can implement. Take a look at the list below or suggest your own ideas by emailing shermange @ gmail . com.
To talk to developers, join the discussion on IRC channel #qgis, irc.freenode.net.
Coding can be done in C++ for core changes to QGIS or in Python if implementing a plugin.
Feel free to suggest your own project!
General Features and Plugins
(These ideas are roughly in order of importance)
Enhance Labeling of Features
The labels implementation in QGIS currently has a good feature set for setting fonts, buffers, colors, and other aspects of a label. It is lacking in a number of other ways. This project would enhance the labeling system in QGIS to:
- properly detect collisions
- control the number of labels per feature
work with MULTI type features.
Plese note: work is underway to use the PAL library http://geosysin.iict.ch/trac/wiki/Index4extJPAL to solve this issue.
Raster catalog
Note: some work has been done here: http://kubuntu.free.fr/wiki/?page=QGisRasterCatalog
Create a plugin to allow the display of a catalog of raster images as a single layer. This will allow the display of large seamless raster data sets without having to individually load each raster. The plugin will:
- use an index to load that are in the current view
- unload rasters no longer in the view
- provide a means to add and remove a raster catalog
- optionally provide a tool to create a catalog from a directory containing rasters
GDAL provides the tools for creating an index shapefile for the catalog from a list of images.
Implement a composition manager
Currently when QGIS renders a scene, it regenerates every aspect of the scene. The idea behind the composition manager is that when a scene is rendered and the extents haven't changed (e.g. only a change in layer visibility took place), the composition manager renders the layers directly from the cached copy rather then redrawing every aspect of the scene.
The manager would not render parts of the scene that were rendered in the last draw event. For example if the user pans, only the new part of the view is fetched and merged with the still visible parts of the last scene. This will increase performance for any network map layers, such as WMS and PostGIS.
Letting the user allocate a certain amount of memory (or disk space like Google Earth does), could in fact store numerous previously rendered layers scenes and pull them straight from disk. Cache management would be required to handle changes in symbology or other events that dirty the cache.
Incorporate ossim
Incorporating the ability to read and write data streams from and to ossim would allow access to all of the data sources supported by ossim and will pave the way to making the ossim image processing tools available in QGIS. The student would need to collaborate with both the QGIS and ossim teams to make this happen.
Incorporate ossimPlanet
ossimPlanet is a 3D visualisation tool for geographic data. This task has a dependency on the above task (or could be combined with the above into one task). The result of this work would be a new tab in the QGIS main window labelled '3D View' which would render the current 2D view onto the ossimPlanet, embedded inside of QGIS! This will give the user the ability to dynamically switch between 2D and 3D views. Ideally there should be an option to synchronize view extents between the two views so that, for example, panning in the 2D view will cause the 3D view to update when you switch back to that tab.
Incorporate reading & writing of Terralib raster and vector data
Terralib provides a generic geospatial data engine for a number of different databases including PostgreSQL, MySQL, ADO, Oracle. The library facilitates reading and writing both vector and raster data into the database back-end. Adding support for Terralib will improve interoperability of QGIS and provide a viable option for enterprise users who wish to store both vector and raster data on centralised servers.
Implement regression tests
QGIS is undergoing continuous development on the road to a 1.0 stable release. Inevitably new changes to the software can cause previously working code to break. We need a suite of tests that can be used to verify the state of the code base before commits and that can be used to provide a snapshot in time view of the general robustness of the code in SVN.
The student taking on will have the interesting task of building both GUI and non-GUI tests using the QtTest framework. This should be combined with the CMAKE test facilities to automate tests as part of the build cycle. Implementation of an automated nightly build and test service on a server is a key part of this project.
Data providers
Support for PostGIS GEOMETRY type
To support the PostGIS GEOMETRY type, QGIS must be able to render any feature type from the layer and understand how to construct the "virtual" layers for points, lines, or polygons.
This will require working with several aspects of QGIS, including:
- Map legend
- Layer loader
- Rendering
Support live data from GeoRSS feeds
Implement a data provider plugin for GeoRSS feeds
Data processing and statistical analysis
Build a bridge to R
This is not as hard as it sounds. Procedure would be:
- load R interpreter
- attach data sources
copy QGIS layers into R "sp" classes (http://r-spatial.sourceforge.net/)
- perform analysis
- copy back or write data provider that directly displays R data
Implementing this will bring hundreds of spatial statistical tools into QGIS - in keeping with our philosophy of not reinventing the wheel.
Barry Rowlingson a long time R contributer commented to me that he has a working prototype for calling R from QGIS via RPython.
Here is a coordination page: BridgeToR.
Build a libMesh plugin
libMesh is a finite elements PDE solver. In addition to generating various kinds of meshes, a plugin could be used to model flow-related problems. http://libmesh.sourceforge.net/