Changes between Initial Version and Version 1 of GSoC/2020


Ignore:
Timestamp:
Feb 2, 2020, 1:05:44 PM (4 years ago)
Author:
annakrat
Comment:

GSoC 2020

Legend:

Unmodified
Added
Removed
Modified
  • GSoC/2020

    v1 v1  
     1
     2{{{
     3#!html
     4<!-- direct usage of HTML enables to use the big @ characters at the same line as images -->
     5<!-- derived from the HTML taken from GRASS User Mediawiki -->
     6<!-- needs to be changed every year (GSoC link and maybe picture) -->
     7<!-- also check and update links at the bottom -->
     8<p>
     9<a href="https://grass.osgeo.org" rel="nofollow">
     10<img alt="Grasslogo vector small.png" src="/grass/raw-attachment/wiki/GSoC/2014/Grasslogo_vector_small.png" width="110" height="123" />
     11</a>
     12 <font size="+3"> @ </font>
     13<a href="https://summerofcode.withgoogle.com/" rel="nofollow">
     14<img alt="500px-GSoC2016Logo.jpg​" src="/grass/raw-attachment/wiki/GSoC/2016/500px-GSoC2016Logo.jpg"/>
     15</a>
     16<font size="+3"> @ </font>
     17<a href="https://wiki.osgeo.org/wiki/Google_Summer_of_Code_2020" rel="nofollow">
     18<img alt="OSGeo logo" src="/grass/raw-attachment/wiki/GSoC/2018/osgeo_logo.png" width="300" height="97" /></a>
     19</p>
     20}}}
     21
     22
     23= GRASS Google Summer of Code 2020 =
     24
     25[[TOC]]
     26
     27
     28== About ==
     29
     30 * [https://wiki.osgeo.org/wiki/Google_Summer_of_Code_2020 The OSGeo GSoC 2020 main page]
     31 * [https://summerofcode.withgoogle.com/ Official GSoC page at Google]
     32
     33== Ideas ==
     34
     35''Post your ideas here or to the [https://lists.osgeo.org/listinfo/grass-dev grass-dev mailing list] if you want to discuss them more. To edit this wiki, you need to [https://trac.osgeo.org/grass/login login] with an [https://www.osgeo.org/community/getting-started-osgeo/osgeo_userid/ OSGeo Userid]; read also some [wiki:TracLinks help] for using trac.''
     36
     37If you are a student you can suggest a new idea or pick up an existing one in any case write about it to [https://lists.osgeo.org/listinfo/grass-dev grass-dev mailing list].
     38
     39''You are invited as well to have a close look at (and re-suggest!) ideas from previous years ([https://grasswiki.osgeo.org/wiki/GRASS_SoC_Ideas_2007 2007], [https://grasswiki.osgeo.org/wiki/GRASS_SoC_Ideas_2008#Ideas 2008],
     40[https://grasswiki.osgeo.org/wiki/GRASS_SoC_Ideas_2009#Ideas 2009], [https://grasswiki.osgeo.org/wiki/GRASS_SoC_Ideas_2010#Ideas 2010],
     41[https://grasswiki.osgeo.org/wiki/GRASS_SoC_Ideas_2011#Ideas 2011], [https://grasswiki.osgeo.org/wiki/GRASS_SoC_Ideas_2012#Ideas 2012],
     42[https://grasswiki.osgeo.org/wiki/GRASS_SoC_Ideas_2013#Ideas 2013], [wiki:/GSoC/2014 2014], [wiki:/GSoC/2015 2015], [wiki:/GSoC/2016 2016], [wiki:/GSoC/2017 2017], [wiki:/GSoC/2018 2018])
     43which have not yet been implemented.
     44You can also look at accepted GRASS GSoC [wiki:GSoC projects from previous years] for an idea of scope.''
     45
     46''Include "GRASS GIS" in the title of our idea to easily distinguish ideas and projects inside OSGeo.''
     47
     48''Some bigger ideas may have their own pages, so you can link them here. The pages can be either independent if the page already exists (e.g. `wxGUIDevelopment/SingleWindow`), or more preferably subpages of this page if the idea is (re-)developed for this GSoC. In the later case, use the word "idea" in the page name to distinguish the idea page (e.g. `GSoC/2017/CoolGRASSProjectIdea`) from the possible student project page (e.g. `GSoC/2017/CoolGRASSProject`).''
     49
     50
     51
     52=== Title of idea ===
     53
     54Description here
     55
     56* Requirements:
     57* Mentor:
     58* Proposed by:
     59* Rating:
     60* Expected Outcomes: 
     61* Test of skills:
     62* Other:
     63
     64=== Integration of PDAL into GRASS GIS ===
     65
     66* Fully replace LibLAS.
     67* Expose the rich PDAL functionality.
     68* Use PDAL [https://github.com/PDAL/CAPI C API].
     69* Share code with modules such as v.in.lidar (libLAS-based) and r.in.xyz for easy future maintenance.
     70* Optional (depending on time) or as a separate topic: v.external and `@PDAL` pseudo-mapset for point clouds
     71* Requirements: C, C++
     72* Mentor: Vaclav Petras
     73* Co-mentors: Doug Newcomb (non-coding part), Martin Landa
     74* Rating: medium
     75* Expected Outcomes: r.in.lidar, v.in.lidar functionality
     76* Test of skills: take already existing v.in.pdal, and use PDAL C API (only demonstrating minimum functionality - grab points)
     77
     78=== Improved color management ===
     79
     80Current color management of raster and vector maps has several issues:
     81* Interactive editing of colors is rather limited: #3370
     82* We can't easily specify discrete color intervals (e.g. [http://soliton.vm.bytemark.co.uk/pub/cpt-city/cb/seq/tn/BuPu_09.png.index.html this ramp]) for floating point data unless we reclass first, legend does not display that correctly
     83* [https://trac.osgeo.org/grass/query?status=!closed&keywords=~colors and others...]
     84
     85A 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.
     86
     87* Requirements: Python, wxPython, possibly some C
     88* Mentor: Anna Petrasova, Vaclav Petras
     89* Proposed by: Anna Petrasova
     90* Rating: medium
     91* Expected Outcomes: More user-friendly color management
     92* Test of skills: [https://trac.osgeo.org/grass/query?status=!closed&keywords=~colors and others...]
     93
     94=== Enhance 3D rendering capabilities in GRASS GIS ===
     95
     96Current 3D rendering capabilities in GRASS GIS (called NVIZ) are quite powerful, but many important features are missing.
     97The current implementation is rather old and needs to be updated with more recent technologies.
     98The following points (fixes and new features) should be addressed:
     99* fix rendering raster and vector data with transparency
     100* faster rendering of point clouds
     101* implement text rendering (for scale bars for example)
     102* review and fix problems with current rendering of 3D vectors
     103* possible new features would include volume rendering (ray casting for example), so far we can visualize only isosurfaces or slices of 3D rasters
     104* adding axes
     105
     106* Requirements: C, OpenGL
     107* Mentor: Anna Petrasova
     108* Co-mentor: Vaclav Petras
     109* Proposed by: Anna Petrasova
     110* Rating: medium
     111* Expected Outcomes: reliable on-screen and off-screen 3D rendering on most platforms
     112* Test of skills: #2076, #3743
     113
     114=== GRASS GUI: Single window layout ===
     115Currently, GRASS GIS GUI (wxGUI) has one Layer Manager window and one or more Map Display windows. This multiple window layout can sometimes be problematic and is not common. This project would try to develop an optional single window layout, similarly to [https://docs.gimp.org/2.8/en/gimp-concepts-main-windows.html GIMP]. This project would include:
     116* detailed design of the behavior of current components + mockups
     117* refactoring some of the wxGUI components to untangle them and make them reusable
     118* implementing the actual layout and its behavior while keeping the multiple window layout working
     119
     120* Requirements: Python, wxPython
     121* Mentor: Anna Petrasova, Vaclav Petras
     122* Proposed by: Anna Petrasova
     123* Rating: medium
     124* Expected Outcomes: enable switching between single- and multiple-window layout
     125* Test of skills: Develop a simple wxPython application, which would allow to switch between these two modes. This should demonstrate student knows wxPython and general GUI design.
     126
     127=== New easy-to-use CLI and API for GRASS GIS ===
     128
     129 * TL;DR: Make running of GRASS GIS modules as easy as it is to run GDAL commands.
     130  * `grass run r.slope.aspect elevation=elevation.tiff slope=slope.tiff aspect=aspect.tiff`
     131  * CLI like GDAL has.
     132  * No GRASS Database, Location, Mapset to deal with.
     133  * No import, export from user perspective.
     134  * Reasonable defaults for things like region.
     135  * CLI and API still allows user to specify any of the above.
     136 * GRASS GIS requires GRASS GIS Database, Location and Mapset to be set up to maintain data consistency, efficiency and security. Unfortunately, this is cumbersome when GRASS GIS is not the primary tool user is using.
     137 * There are different ways for calling GRASS modules without starting iterative GRASS session:
     138  * Modules executed with the `--exec` interface (see [https://grass.osgeo.org/grass74/manuals/grass7.html#batch-jobs-with-the-exec-interface the grass7 manual page] >=7.2)
     139  * `GRASS_BATCH_JOB`: same as newer `--exec` but through environmental variable and more limited
     140  * Use `grass.script.setup` package from GRASS GIS (requires boilerplate to add the packages on path first) 
     141  * Use the standalone `grass_session` package (new, see [https://grasswiki.osgeo.org/wiki/Working_with_GRASS_without_starting_it_explicitly#Python:_GRASS_GIS_7_with_an_external_library:_grass-session here])
     142  * Set up environmental variables and "RC file" yourself (the classic method).
     143 * None of these allows the user to skip the database setup phase. This leads to the need for constant reimplementing of setup, import and export steps in various software and environments including ''user scripts'' (in Bash, Python, R), QGIS Processing, gvSIG/SEXTANTE, uDig/JGrassTools, and all the web/server/cloud tools and applications which use GRASS GIS as a processing backend (e.g. PyWPS server).
     144 * GRASS GIS itself can make it easier for the callers (at least in most cases) by implementing an interface which would allow to use GRASS GIS modules without explicit dealing with GRASS GIS database.
     145 * The command line call using the proposed interface would look like these:
     146
     147{{{
     148grass run r.lake elevation=some/file.tiff water_level=10 lake=some/new/file.tiff coordinates=100,520
     149grass run r.slope.aspect elevation=file://.../elevation.tiff aspect=file://...aspect.tiff
     150grass run r.slope.aspect elevation=https://.../elevation.tiff.zip aspect=file://...aspect.tiff
     151}}}
     152
     153 * Basic execution phases:
     154  * The `grass` command would have to parse the command line, compare it with the module XML interface description, find the files which should be maps (either using `file://` and ideally anything else), potentially download and uncompress, and import (or link) them, and then call the actual command (GRASS module).
     155   * The input maps could be linked (external) rather than imported (except for the cases when projection differs) which should be faster than import.
     156   * Doing the work in GRASS rather than in the other software would allow GRASS to make the decision about the details, for example the data exchange (r.external vs r.import vs r.in.gdal - see [https://github.com/qgis/QGIS/pull/5426#issuecomment-345067457 comment from MarkusN for QGIS Processing issue] or [https://lists.osgeo.org/pipermail/grass-dev/2017-November/086598.html mailing list]).
     157  * GRASS Database would be created with an appropriate Location (projection based on input files or additional CLI input).
     158   * The GRASS GIS Database, Location and Mapset should be created on the fly and deleted afterwards (the `.grassrc` wouldn't be used).
     159  * Computational region would be set based on input file(s) or additional CLI input.
     160  * Module execution.
     161  * The output maps could be be also linked (e.g. r.external.out) with projection same as input which is should be faster then export.
     162   * Ideally export (as well as import) should work also with PostGIS and databases provided through GDAL/OGR.
     163 * Proposal should discuss and address how advanced things such raster algebra, multi-map inputs and outputs, temporal framework, cartography and visualization tools will work (or what are the limits).
     164 * Use should be able to always specify the details manually:
     165
     166{{{
     167grass run --mapset=/some/directory/grassdata/ncspm/practice1 r.lake elevation=some/file.tiff ...
     168grass run --region="s=55600 n=60500..." --mask=some/mask.tiff r.lake elevation=some/file.tiff ...
     169grass run --crs=EPSG:3358 --mask=some/mask.tiff r.lake elevation=some/file.tiff ...
     170grass run --use=some/file_a.tiff --get=some/file_b.tiff r.slope.aspect elevation=file_a aspect=file_b
     171}}}
     172
     173 * The system behind the interface will be inherently fragile, so it is necessary to write large amount of tests which would check different combinations of data types and projections.
     174 * All the underlying code is expected to be in Python, so the project should involve also creation of Python API on the way.
     175 * Bonus tasks:
     176  * Making this work for the GUI in the same way. It is expected that this would work for any `g.gui.*` modules too but implementing similar mechanism also for module dialogs is more work (but some basic implementation might be quite straightforward).
     177  * Making this connected to the standalone `grass_session` package.
     178  * Generalization of the API, so that it incorporates also the concept of remote sessions (see e.g. [https://github.com/wenzeslaus/g.remote g.remote on GitHub])
     179 * Current GRASS code involved:
     180  * source:grass/trunk/lib/python/script/setup.py (library function(s) for Location setup in Python)
     181  * source:grass/trunk/lib/init/grass.py (full GRASS GIS standard startup "script")
     182 * See also:
     183  * Tickets:
     184   * #2424 PyGRASS does not work when GRASS is invoked from outside because it is not possible to change path to dynamic libraries in running process
     185   * #2511 Starting GRASS in mapset which is not owned by the user
     186   * #2579 Specify command to be executed as parameter of grass command (patch) and other suggestion for CLI, especially see the comment:15:ticket:2579 which summarizes the remaining issues after closing the ticket
     187   * #2639 grass command should read commands from stdin as an interpreter would do
     188   * #2678 GRASS starts even when Mapset is locked
     189   * #2679 Drop or fix setting of Location and Mapset using environmental variables
     190   * #2681 Remove legacy meaning of LOCATION variable
     191   * #2685 Add ignore lock flag to grass command
     192   * #3537 Add functionalities `--tmp-location` and `--no-clean`
     193  * Documentation:
     194   * [https://grass.osgeo.org/grass74/manuals/grass_database.html GRASS GIS Database]
     195   * [https://grass.osgeo.org/grass70/manuals/libpython/script.html#module-script.setup grass.script.setup]
     196  * Mailing list and wikis:
     197   * [https://lists.osgeo.org/pipermail/grass-dev/2018-March/087764.html grass-dev New CLI GSoC Idea: Comments, Mentors, Students Needed] (whole thread)
     198   * [https://lists.osgeo.org/pipermail/grass-dev/2015-January/072979.html grass-dev QGIS Processing & GRASS (January 2015)]
     199   * [https://grasswiki.osgeo.org/wiki/Working_with_GRASS_without_starting_it_explicitly Working with GRASS without starting it explicitly]
     200   * wiki:Grass7/VectorLib/OGRInterface
     201   * wiki:Grass7/VectorLib/PostGISInterface
     202  * Other projects (see also the ones linked in the text):
     203   * [https://github.com/qgis/QGIS/blob/0a1382a0be36d408aebd227fb0066f68c513e41e/python/plugins/processing/algs/grass7/Grass7Algorithm.py QGIS Processing Grass7Algorithm.py] source code
     204   * [https://github.com/moovida/jgrasstools/blob/530c87f26d220f3eeff9d2fb9d21abd8821c00c3/grass/src/main/java/org/jgrasstools/grass/utils/ModuleSupporter.java uDig's JGrasstools] source code
     205   * [https://sextante.googlecode.com/svn/trunk/soft/sextante_lib/sextante_gui/src/es/unex/sextante/gui/grass/ SEXTANTE grass] source code (broken link)
     206   * [https://github.com/geopython/PyWPS/blob/425f0eb160f60714a6705a24ba926e03690ab371/pywps/Grass.py PyWPS source code] and [https://pywps.wald.intevation.org/documentation/process.html PyWPS documentation] (broken link)
     207   * [https://code.google.com/p/wps-grass-bridge/source/browse/trunk/?r=97 wps-grass-bridge] source code (broken link)
     208   * Related discussions on mailing list:
     209    * [https://lists.osgeo.org/pipermail/grass-dev/2015-February/073867.html On GSoC Proposal New easy-to-use...]
     210    * [https://lists.osgeo.org/pipermail/grass-dev/2015-March/074433.html GSOC project proposal]
     211   * Similar complex command line interfaces to learn from:
     212    * Git (a classic example of subcommand interface)
     213    * Docker (subcommand interface combined with running other commands inside a container)
     214    * !GeoGig (needs to get geospatial data in and out)
     215    * !ImageMagic
     216     * radical changes in CLI interface between versions [https://legacy.imagemagick.org/script/index.php 6] and [https://www.imagemagick.org/script/command-line-tools.php 7]
     217     * new CLI has a single `magick` command with many parameters
     218    * GMT
     219     * [http://gmt.soest.hawaii.edu/doc/5.3.2/GMT_Docs.html#new-features-in-gmt-5 radical changes in CLI interface between versions 4 and 5]
     220     * new CLI has a single `gmt` command and subcommands
     221 * Test and training tasks:
     222  * Extend `--exec` functionality:
     223   * Add `--tmp-mapset` which runs `--exec` in a database/location/mapset which is created at the beginning and deleted at the end (database/location exists before and after). (See also `--tmp-location`, #3537, #3585, and r72790.)
     224   * Add `--clean` (current default) and `--no-clean` which say if `--exec` should clean the `.tmp` directory in the Mapset (for parallel execution). (See also #3537.)
     225   * Add `--lock` (current default) and `--no-lock` which say if `--exec` should lock the Mapset (for parallel execution). See also #2685 and the `-f` flag.
     226   * Add `--region` to set a temporary computational region for the execution, e.g. `--region="raster=raster_name"`
     227   * Add `--import-raster=some/file.tiff` which imports (r.in.gdal or r.import) a raster file (same for vector).
     228   * Add `--link-raster=some/file.tiff` which links (r.external) a raster file (same for vector).
     229   * Add `--export-raster=some/file.tiff` which exports (e.g. r.out.gdal) a raster file (same for vector).
     230   * Add `--link-output-raster=some/file.tiff` which creates (r.external.out) a new (output) raster file (same for vector).
     231  * Add features to `grass` executable interface:
     232   * 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).
     233  * Solve one of the tickets linked above.
     234 * Requirements:
     235  * Student needs to show understanding of the GRASS GIS Database structure and significantly extend on text above in the proposal.
     236  * Language: Python
     237 * Mentors: Vaclav Petras
     238 * Co-mentors: Pietro Zambelli
     239 * Proposed by: Vaclav Petras
     240
     241== Tips for students ==
     242
     243 * If you have your own ideas we encourage you to propose them. Explain them on the [https://lists.osgeo.org/listinfo/grass-dev grass-dev mailing list].
     244 * If you like some idea here or from previous yeas, write about it on [https://lists.osgeo.org/listinfo/grass-dev grass-dev mailing list] and any ideas of your own which could improve it.
     245 * Follow some good practices in your ideas and proposals:
     246  * Stress why the project would be useful.
     247  * 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.
     248  * Be specific in the implementation (or at least as specific as you can).
     249  * Explain what the final product will look like and how it will work. Perhaps you can add some drawings or mock-ups. (here in a wiki page)
     250  * Explain how the idea relates to existing GRASS GIS functions, features, and needs.
     251  * 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.
     252 * Compile GRASS GIS 7 (trunk) from source and prepare environment for development:
     253  * See links appropriate for you at [https://grass.osgeo.org/development/how-to-start/].
     254  * If you get stuck with the setup, feel free to consult the [https://lists.osgeo.org/listinfo/grass-user grass-user mailing list].
     255  * Familiarize yourself with wiki:Submitting rules.
     256 * Prove your worth by being active on the GRASS mailing lists ([https://lists.osgeo.org/listinfo/grass-user grass-user], [https://lists.osgeo.org/listinfo/grass-dev grass-dev]), fix some [https://trac.osgeo.org/grass/report 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. You should start even before you apply to GSoC.
     257 * Also note that fixing existing bugs and/or implementing enhancements will be a part of student evaluation.
     258
     259 * Every year GRASS GIS hopes to participate and participates in GSoC as part of the [https://www.osgeo.org/ OSGeo Foundation]'s GSoC program umbrella. See the official OSGeo template for application details and other important information at the [https://wiki.osgeo.org/wiki/Google_Summer_of_Code_2019 OSGeo GSoc Ideas page].