Contents
- General Features and Plugins
- Enhance Labeling of Features
- Redesign/enhance the Map Composer
- Raster catalog
- Color ramps and palettes for vector renderers
- PostGIS layer management tool
- Implement a composition manager
- Incorporate ossim
- Incorporate ossimPlanet
- Incorporate reading & writing of Terralib raster and vector data
- Geoprocessing
- Implement regression tests
- Data providers
- Data processing and statistical analysis
Help us move QGIS forward towards the 1.0 release this fall. 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 to the 1.0 release)
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.
Redesign/enhance the Map Composer
Note: work on this is currently under way
The map composer currently has a number of issues that need to be addressed. The map composer is an important part of QGIS that needs to be improved prior to 1.0.
Raster catalog
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.
Color ramps and palettes for vector renderers
Implement a series of color ramps and palettes to choose from when rendering data by categories or classes. The user should be able to choose a palette or color ramp from a visual list.
PostGIS layer management tool
Tool to manage spatial layers in PostGIS, including the ability to:
- view layers in a tree structure
- delete layers
- view metadata
- and add one or more layers to the map canvas
This tool can be implemented as a plugin.
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.
Geoprocessing
Note: work is currently under way on a Python plugin to provide geoprocessing capability
Currently QGIS does not provide any advanced geoprocessing features for unions, intersections, tracing etc. The person implementing these features should evaluate best of available toolkits (GEOS, etc) and implement these functions in a user friendly way within the QGIS environment.
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
Interface Google mapping APIs with QGIS
MySQL Data Provider
Implement a data provider plugin and interface to allow the display and query of MySQL tables containing a spatial column.
Note: Work is underway for generic data provider access to database backends via work being carried out by Godofredo so we should probably remove this item from this list.
OpenStreetMap provider
Implement a data provider plugin for OpenStreetMap.
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.
Integrate the Boost Graph Library
Bringing the Boost Graph Library into QGIS will provide an infrastructure for network analysis, cost routing, etc. We would then be able to capitalise on existing code integrating BGL with GDAL rasters.
Add a wizard-style plugin that exposes advanced connectivity tools via backend linkages to BGL, PostGIS and GDAL. (Note: I have code that links BGL to GDAL and have a current project exposing BGL algorithms to PostGIS. Feel free to contact me: tkeitt at gmail dot com.)