Google Summer of Code 2021 Ideas - qgis/QGIS GitHub Wiki

QGIS project would like to participate in Google Summer of Code 2021 under the umbrella of OSGeo.

Project ideas

On-the-fly Raster Calculator

  • Expected outcome: a new type of styling for raster layers defined by an expression
  • Skills required: Qt/C++
  • Mentors: Martin Dobias (@wonder-sk), Peter Petrik (@PeterPetrik)
  • Difficulty: easy-medium
  • Test for student: write a python script that could be run in QGIS, which will load a raster file, create QgsRasterCalculator object and use it to write a new raster file after applying a simple expression to the source raster.

QGIS already has an integrated raster calculator, where user can enter an expression that will apply raster algebra functions to one or more input rasters and produce a new raster file. It would be useful to have the raster calculator available also as a new renderer for raster layers. The calculation would be run on the fly when map gets rendered. This would avoid the need to create derived raster files and it would also allow users quickly see the preview of raster algebra expressions they have entered. An example would be on-the-fly calculation of NDVI (https://en.wikipedia.org/wiki/Normalized_difference_vegetation_index).

There are already two similar raster renderers (hillshading, contours) that work in a similar way and could be used for inspiration.

QGIS 3D: support for 3D Tiles and I3S

  • Expected outcome: QGIS can consume remote 3D datasets (e.g. 3D buildings)
  • Skills required: Qt/C++, basic knowledge of 3D graphics
  • Mentors: Martin Dobias (@wonder-sk), Peter Petrik (@PeterPetrik)
  • Difficulty: medium
  • Test for student: write a python script that could be run in QGIS, the script should create a new memory layer with point geometries with a bunch of randomly placed 3D points within current project's area and assign a 3D renderer to the layer to display a sphere in 3D map view for each point.

The task would be to implement client-side support for 3D Tiles [1] and ESRI’s I3S [2] which are both OGC’s community standards [3,4]. These formats allow users to get access to detailed 3D data, nowadays most commonly 3D buildings in cities, often including textures for higher quality of the display. See examples of what is possible to achieve with these formats [5,6].

Both formats have several sub-formats for handling different data types - the focus would be only on data specified as triangular mesh - in 3D Tiles this is called “Batched 3D Model” and in I3S this is called “3D objects”. Support for other sub-formats could be added as well if there is enough time.

The focus of this task would be on studying the documentation on how these formats work and creation of a parser that would read the data and create objects in QGIS 3D view. All the work would be done in C++ and Qt libraries and QGIS libraries. 3D capabilities of QGIS are based on Qt3D framework.

[1] https://github.com/CesiumGS/3d-tiles

[2] https://github.com/Esri/i3s-spec

[3] https://www.ogc.org/standards/3DTiles

[4] https://www.ogc.org/standards/i3s

[5] https://github.com/CesiumGS/3d-tiles/blob/master/ECOSYSTEM.md

[6] https://3dcities.maps.arcgis.com/apps/MapSeries/index.html?appid=444de19a88764d58885ea8e211e96ae8

For possible mentors

When adding a project idea, please make sure to add the following:

  1. a project title/description
  2. more detailed description of the project (2-5 sentences)
  3. expected outcomes
  4. skills required/preferred
  5. 2 possible mentors.
  6. if possible, an easy, medium or hard rating of each project.
  7. A test for the students to submit to your evaluation. The test aims at evaluating if the student is capable for the project, so please design it having in mind the skills required to complete the project.