wiki:GSoC/2023

Grasslogo vector small.png @ 500px-GSoC2016Logo.jpg​ @ OSGeo logo

GRASS Google Summer of Code 2023

About

Ideas

Post your ideas here or to the grass-dev mailing list, GitHub Discussions, or Gitter if you want to discuss them more. To edit this wiki, you need to login with an OSGeo Userid; read also some help for using Trac.

If you are a student you can suggest a new idea or pick up an existing one in any case write about it to grass-dev mailing list,GitHub Discussions, or Gitter.

You are invited as well to have a close look at (and re-suggest!) ideas from previous years (2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022) which have not yet been implemented. You can also look at accepted GRASS GSoC projects from previous years for an idea of scope.

Include "GRASS GIS" in the title of our idea to easily distinguish ideas and projects inside OSGeo.

Title of idea

Description here

  • Requirements:
  • Project length: (175 or 350 hours)
  • Mentor:
  • Proposed by:
  • Rating:
  • Expected Outcomes:
  • Test of skills:
  • Other:

Parallelization of existing modules

There are several modules that would benefit from parallelization with OpenMP, e.g. r.texture, r.fill.stats, r/v.surf.idw, r.viewshed, v.to.rast, r.grow.distance,... For overview of current state, see https://grasswiki.osgeo.org/wiki/Raster_Parallelization_with_OpenMP.

  • Requirements: familiarity with C, OpenMP
  • Mentor: Huidae Cho
  • Co-mentor: Vaclav Petras, Anna Petrasova
  • Project length: 175 or 350 hours (take your pick)
  • Rating: medium
  • Expected Outcomes: parallelized module or modules, depending on complexity
  • Test of skills: https://github.com/OSGeo/grass/issues/2118

Improve GRASS user experience in Jupyter Notebook

Python package grass.jupyter was developed during GSoC 2021 to simplify running GRASS from Jupyter Notebooks and displaying data. This project could focus on adding features such as:

  • animating series of maps (currently we can animate only temporal datasets)
  • add parallelization for rendering
  • increase interactivity of displayed data using ipyleaflet, e.g., capture mouse clicks to show information about vector line, pixel
  • add API for managing projects and subprojects (i.e., locations/mapsets)
  • simplify display of attribute data
  • Requirements: Python
  • Mentor: Vaclav Petras
  • Co-mentor: Anna Petrasova, Helena Mitasova
  • Project length: 175 or 350 hours (take your pick)
  • Rating: easy to medium
  • Expected Outcomes: improved user experience when using GRASS through notebooks
  • Test of skills: https://github.com/OSGeo/grass/issues/2688, or write a testsuite for a GRASS GIS command, more info here.

Support writing tests with pytest

  • The current testing framework, grass.gunittest, was written before migration to Git/GitHub and when long free runs in 3rd party services were unthinkable. Additionally, some no longer relevant goals were prioritized, such as independence on the current code, detailed custom HTML reports, success tracking over time, and high specialization towards GRASS-specifics.
  • grass.gunittest is based on Python unittest package and many projects since then migrated to pytest, e.g., GDAL and Numpy. While unittest is inspired by Java's JUnit, pytest is designed to support writing small, readable tests, and uses plain assert statements instead of many different assert methods.
  • Using pytest should lead to tests which feel more like Python scripts and to minimum of testing-specific code.
  • An example issue of grass.gunittest is that it doesn't work well with tests of the main GRASS executable (prominence of grass ... --exec is yet another new thing which changed since grass.gunittest was designed).
  • Two main things needed:
    • Create general comparison functions from the grass.gunittest assert methods so that they can be used with pytest.
    • Current grass.script.setup.init function and grass.script.core.create_location function don't work well in the context of a pytest test function. More
  • Additional things needed:
    • Fixture for pytest to set up and tear down a GRASS session in a temporary mapset.
  • Requirements: Python
  • Project length: 175 or 350 hours (take your pick)
  • Mentor: Vaclav Petras
  • Co-mentor: Stefan Blumentrath
  • Proposed by: Vaclav Petras
  • Rating: easy to medium
  • Expected Outcomes: Convenient way of writing tests with pytest
  • Test of skills: Fix failing tests and/or write new tests (more is better). Alternatively, addressing a smaller problem in the testing framework is a good task, too.

Improved color management in GRASS GIS

Current color management of raster and vector maps has several issues:

  • Interactive editing of colors is rather limited: #3370
  • We can't easily specify discrete color intervals (e.g. this ramp) for floating point data unless we reclass first, legend does not display that correctly
  • and others...

A new color editing widget could be developed that would be integrated in r.colors, r3.colors, v.colors, t.rast.colors. It would allow simple editing of breaks (manual and automatic). Better support for discrete color tables for floating point data needs to be developed.

  • Requirements: Python, wxPython, possibly some C
  • Project length: 350 hours
  • Mentor: Anna Petrasova, Vaclav Petras
  • Co-mentor: Helena Mitasova, Stefan Blumentrath
  • Proposed by: Anna Petrasova
  • Rating: medium
  • Expected Outcomes: More user-friendly color management
  • Test of skills: solve one of the color issues

New easy-to-use CLI and API for GRASS GIS

Command line interface in a terminal (Bash shell)

  • Make running of GRASS GIS modules as easy as it is to run GDAL commands.
    • grass run r.slope.aspect elevation=elevation.tiff slope=slope.tiff aspect=aspect.tiff
    • CLI like GDAL has.
    • No GRASS Database, Location, Mapset to deal with.
    • No import, export from user perspective.
    • Reasonable defaults for things like region.
    • CLI and API still allows user to specify any of the above.
  • Idea page with details: wiki:GSoC/2021/EasyToUseCliAndApiIdea
  • Project length: 350 hours
  • Rating: medium
  • Requirements:
    • Language: Python
    • Proposal: Student needs to show sufficient understanding of the GRASS GIS Database structure and significantly extend on text below in terms of more concrete formulation of ideas and identification of missing and existing parts.
  • Mentors: Vaclav Petras
  • Co-mentors: Stefan Blumentrath
  • Proposed by: Vaclav Petras
  • Expected outcomes: New subcommand which easily runs a GRASS module on GeoTiff and GeoPackage.
  • Test and training tasks:
    • Solve one of the tickets linked at the idea page.
    • Add features to grass executable interface:
      • Make it possible to associate *.gxw files with grass executable (#1204) or at least add --gui-workspace or preferably just recognize it in the command line (distinguish it from database/location/mapset).
    • Extend --exec functionality:
      • Add --region to set a temporary computational region for the execution, e.g. --region="raster=raster_name"
      • Add --import-raster=some/file.tiff which imports (r.import) a raster file (same for vector and similarly for export).
      • Add --link-raster=some/file.tiff which links (r.external) a raster file (same for vector and similarly for r.external.out).

Add {your research idea} to GRASS GIS

  • In general, you can propose any topic, but you can specifically propose integrating your research or research idea into GRASS GIS.
  • Requirements:
    • Language:
      • Depends on the project, often Python, sometimes C.
      • Adding your latest ecological analysis
    • Proposal:
      • Discuss relevance to GRASS GIS.
      • Describe technical steps needed for integration.
      • Describe whether it is an addition of a tool (module) or a change in one of the libraries. If it is a tool, specify if it should be included in the core grass repository or in grass-addons repository and why.
      • Specify what research was done and what needs to be accomplished in order to have usable product at the end of summer.
      • Specify who will provide the research expertise.
  • Project length: 175 or 350 hours (take your pick)
  • Rating: from low to hard
  • Mentors:
    • GRASS GIS project will provide technical mentors, but it is up to the applicant to ensure the research part is mentored well. An exception may be granted to applicants which can demonstrate that the research is finished or that they have enough expertise themselves.
    • Possible technical mentors: Vaclav Petras, Anna Petrasova
    • Research mentors: Bring in an expert from your field, e.g., your academic advisor or project principal investigator (if needed).
  • Proposed by: Vaclav Petras
  • Expected outcome: Working feature which is integrated and merged at the end of the project.
  • Test and training tasks:
    • Create a test in Python for an existing tool in the grass-addons repository or in the core grass repository.

Tips for students

  • If you have your own ideas we encourage you to propose them. Explain them on the grass-dev mailing list.
  • If you like some idea here or from previous yeas, write about it on grass-dev mailing list and any ideas of your own which could improve it.
  • Follow some good practices in your ideas and proposals:
    • Stress why the project would be useful.
    • Show that you know how you will proceed. That is, make sure that you can demonstrate that the proposal is feasible in the given time frame.
    • Be specific in the implementation (or at least as specific as you can).
    • Explain what the final product will look like and how it will work. You can add drawings or mock-ups.
    • Explain how the idea relates to existing GRASS GIS functions, features, and needs.
    • Do not include steps such as "install GRASS", "compile GRASS libraries (on my machine)", "read about the API". You should do this before applying to GSoC.
  • Compile GRASS GIS from source and prepare environment for development:
  • Prove your worth by being active on the GRASS mailing lists (grass-user, grass-dev) or other channels (GitHub Discussions, Gitter), fix some bugs, and/or implement some (smaller) features, or write some (simpler) GRASS module, and post it to mailing list. There's no better way to demonstrate your willingness and abilities. Do this before start you apply to GSoC.
  • Also note that fixing existing bugs and/or implementing enhancements will be a part of student evaluation.
Last modified 15 months ago Last modified on Jan 24, 2023, 7:07:28 PM

Attachments (1)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.