Changes between Initial Version and Version 1 of GSoC/2018


Ignore:
Timestamp:
Oct 20, 2017, 6:32:32 AM (7 years ago)
Author:
mlennert
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • GSoC/2018

    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_2018" rel="nofollow">
     18<img alt="OSGeo 220pix.png" src="/grass/raw-attachment/wiki/GSoC/2014/OSGeo_220pix.png" width="262" height="117" /></a>
     19</p>
     20}}}
     21
     22
     23= GRASS Google Summer of Code 2018 =
     24
     25[[TOC]]
     26
     27
     28== About ==
     29
     30 * [http://wiki.osgeo.org/wiki/Google_Summer_of_Code_2018 The OSGeo GSoC 2017 main page]
     31 * [https://summerofcode.withgoogle.com/ Official GSoC page at Google]
     32
     33== Ideas ==
     34
     35''Post your ideas here or to the [http://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 [http://www.osgeo.org/osgeo_userid OSGeo Userid]; read also some [wiki:TracLinks help] for using trac.''
     36
     37If you are a student you can suggest an new idea or pick up an existing one in any case write about it to [http://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 ([http://grasswiki.osgeo.org/wiki/GRASS_SoC_Ideas_2007 2007], [http://grasswiki.osgeo.org/wiki/GRASS_SoC_Ideas_2008#Ideas 2008],
     40[http://grasswiki.osgeo.org/wiki/GRASS_SoC_Ideas_2009#Ideas 2009], [http://grasswiki.osgeo.org/wiki/GRASS_SoC_Ideas_2010#Ideas 2010],
     41[http://grasswiki.osgeo.org/wiki/GRASS_SoC_Ideas_2011#Ideas 2011], [http://grasswiki.osgeo.org/wiki/GRASS_SoC_Ideas_2012#Ideas 2012],
     42[http://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]) which have not yet been implemented.
     43You can also look at accepted GRASS GSoC [wiki:GSoC projects from previous years] for an idea of scope.''
     44
     45''Include "GRASS GIS" in the title of our idea to easily distinguish ideas and projects inside OSGeo.''
     46
     47''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`).''
     48
     49=== Implement a series of image fusion algorithms in GRASS GIS ===
     50
     51GRASS GIS currently has the i.pansharpen module in core and i.fusion.hpf as addon. Many other image fusion / pansharpening algorithms exist, and having several of these available in GRASS GIS would be very helpful. These could be implemented as a series of i.fusion.* modules.
     52
     53Examples of existing fusion algorithms:
     54
     55* Bayesian fusion algorithms (e.g [http://oatao.univ-toulouse.fr/16629/7/wei_16629.pdf R-FUSE] - see also [https://github.com/qw245/BlindFuse Matlab code])
     56* [https://arxiv.org/abs/1609.07986 "Super-resolving multiresolution images with band-independant geometry of multispectral pixels"]
     57
     58Requirements: C and/or Python
     59Mentor: Moritz Lennert
     60
     61=== Enhance 3D rendering capabilities ===
     62
     63Current 3D rendering capabilities in GRASS GIS (called NVIZ) are quite powerful, but many important features are missing.
     64The current implementation is rather old and needs to be updated with more recent technologies.
     65The following points (fixes and new features) should be addressed:
     66* re-implement off-screen rendering (see m.nviz.image) using current OpenGL technologies (e.g. framebuffers) to work reliably on all platforms/hardware
     67* fix rendering raster and vector data with transparency
     68* faster rendering of point clouds
     69* implement text rendering (for scale bars for example)
     70* review and fix problems with current rendering of 3D vectors
     71* possible new features would include volume rendering (ray casting for example), so far we can visualize only isosurfaces or slices of 3D rasters
     72* adding axes
     73
     74* Requirements: C, OpenGL
     75* Mentor: Anna Petrasova
     76* Co-mentor: Vaclav Petras
     77
     78=== Additional functionality for running GRASS GIS modules in Jupyter Notebook ===
     79
     80* Start of GRASS GIS inside a script or a notebook is currently too cumbersome.
     81* Maps do not allow panning and other interactions.
     82* Examples how to use Jupyter Notebooks with GRASS GIS are missing. These examples need to be integrated into GRASS GIS, OSGeo (OSGeo-Live) and (interactive) Jupyer documentation.
     83* Requirements: Basic knowledge of GRASS GIS scripting and IPython/Jupyter Notebooks, Python, !JavaScript
     84* Mentor: Vaclav Petras
     85* Potential co-mentors: Massimo Di Stefano, Pietro Zambelli
     86
     87=== Integration of PDAL into GRASS GIS ===
     88
     89* Fully replace LibLAS.
     90* Expose the rich PDAL functionality.
     91* Share code with modules such as v.in.lidar (libLAS-based) and r.in.xyz for easy future maintenance.
     92* Optional (depending on time) or as a separate topic: v.external and `@PDAL` pseudo-mapset for point clouds
     93* Requirements: C, C++
     94* Mentor: Vaclav Petras
     95* Co-mentors: Doug Newcomb (non-coding part)
     96* Accepted: wiki:GSoC/2017/IntegrationOfPDALintoGRASSGIS
     97
     98=== Benchmarking framework for GRASS GIS ===
     99
     100* A set of functions/modules to test performance of GRASS GIS modules based on different inputs.
     101* Examples of such benchmarks.
     102* Sharing of interface and code with the existing testing framework needs to be addressed.
     103* See also https://github.com/jachym/grass-performace and wiki:GSoC/2014/TestingFrameworkForGRASS
     104* Mentor: Vaclav Petras
     105* Potential co-mentors: Soeren Gebbert, Jachym Cepicky
     106
     107=== GRASS GIS as a post-processing part of WebODM ===
     108
     109* Integrate GRASS GIS into WebODM for post-processing of point clouds and orthophotos.
     110* This will require development in the are of GRASS GIS command line (and/or Python) interface for standalone applications. These improvements need to be integrated into GRASS GIS for maintenance and re-usability purposes.
     111* Potential mentors: Vaclav Petras, Anna Petrasova
     112
     113=== Additional GUI tools for image analysis===
     114
     115GRASS GIS has a series of modules that provide the tools necessary for pixel-based and object-based image analysis. However, some steps in the process still require some rather complicated maneuvers. A series of new GUI modules would be very useful to make the experience more user friendly.
     116
     117 * One task would be the development of GUI modules that allow to attribute class values to either vector polygons or raster areas.
     118   * For the vector case, this would be a generalized GUI to update values in the attribute table without having to enter vector digitizing mode. The module should allow a mechanism of defining the columns that need to be updated to then create a GUI form containing only those columns.
     119   * For the raster case, it would mean a system where the user can click on a raster, get the pixel value and then associate a class value to that pixel value. The result should be written to a text file.
     120 * Another task would be the development of a GUI ruleset generator. Ruleset based classification (object-based or not) means that the user defines a series of rules based on different input bands and pseudo-bands (and for object-based analysis also shape and context indicators). Based on these rules, the system then attributes each pixel/object to a class. Currently this is possible by writing the ruleset as an r.mapcalc input file, using nested if(x,a, b) function calls, or (when vector based) as a series of v.db.update calls. This system quickly gets difficult to read and prone to syntax errors as soon as the number of rules increases. The GUI tool should therefore provide a means to easily select attributes and define rules linked to these attributes. It should then translate these rules to either r.mapcalc calls (raster) or v.db.update calls (vector).
     121 * This project will require the ability to quickly gain working knowledge of the wxPython GUI code base. Examples exist within the existing code to help with this.
     122
     123* Language requirements: Python, wxPython
     124* A good test for potential students to accompany / follow your application: solve at least one or two of the issues in #3310
     125* Mentor: ?
     126* Co-mentor: Vaclav Petras (coding part)
     127* Co-mentor: Moritz Lennert
     128
     129
     130=== Module to create quadtree tiling ===
     131
     132* Module or set of modules like ''v.mkgrid'' which would generate tiles based on dividing space using the 2D or 3D information of vector features using the quadtree and k-tree (already in the library for working with points).
     133* This idea needs extending.
     134
     135=== Tools for generating unit tests from examples in the manual ===
     136
     137During GSoC 2014 GRASS got a framework for unit test. In order to increase the application of the framework (and thus test coverage) and make it more easily accessible for less experienced developers (e.g. AddOn authors), tools that allow to automatically generate (at least basic) unit tests from examples for module usage in the manual page would be very helpful.
     138Such tools would also come in handy for adding test coverage for the general functionality of modules which were written before the test framework arrived.
     139
     140* Language requirements: Python
     141* Mentor: Vaclav Petras
     142* Co-mentor: Soeren Gebbert
     143
     144=== Mapnik rendering engine for GRASS GIS ===
     145
     146 * Mapnik is a powerful rendering engine written in C++ with Python bindings.
     147 * The project tend to add Mapnik engine as alternative backend to [http://grasswiki.osgeo.org/wiki/WxGUI_Cartographic_Composer WxGUI Cartographic Composer]
     148 * The implementation will have most of the capabilities of actual [http://grasswiki.osgeo.org/wiki/WxGUI_Cartographic_Composer WxGUI Cartographic Composer]
     149 * The plugin will be able to create different format of images (PNG, PDF, etc)
     150 * The plugin will be able to export XML Mapnik file
     151 * A similar implementation is [https://github.com/springmeyer/quantumnik/ quantumnik]
     152 * Language requirements: Python
     153 * Mentor: Luca Delucchi
     154 * Co-Mentor: Martin Landa
     155
     156=== Generalized GUI code for Qt-based GUI ===
     157
     158 * wxPython/wxWidgets uses native system libraries for rendering, however there is in fact a lot of platform-dependent behavior and high instability of some features
     159 * Qt is used more and more, QGIS uses Qt
     160 * the current GUI code (wxGUI) often lacks proper design and is hard to maintain, addition of new features requires hacks or refactoring
     161 * a new fresh implementation of GUI is need
     162 * this new implementation should use proper GUI code design so that relevant parts of the code can be used with the new Qt GUI but also with the current wxPython GUI
     163  * this is necessary to avoid duplication of the GUI code and spending the resources on maintaining two code bases (except for the Qt- and wxPython-specific parts)
     164  * this will also show that the logic is actually from the graphical representation
     165  * this avoids dropping wxGUI at the point when the new doesn't have all the features of the new one
     166  * in this was separated parts of the GUI can be implemented in Qt separately
     167 * Mentors: Martin Landa, Anna Petrasova, Vaclav Petras
     168 * Similar project accepted in 2016 (wiki:GSoC/2016/PyQtGUI). This project should move it several steps further.
     169
     170=== GRASS GIS 3D viewer NVIZ module independent of the main GUI ===
     171
     172 * GRASS GIS 6 has a !Tcl/Tk interface to NVIZ, a GRASS GIS 3D visualization library, and the interface is a standalone application in GRASS GIS environment. This has its disadvantages and thus wxGUI in GRASS GIS 6 and GRASS GIS 7 contains in fully integrated 3D view which is using NVIZ library as a backend. However, this also has its disadvantages and ideal solution is to have both.
     173 * The existing examples are `g.gui.iclass`, `g.gui.animation` and `g.gui.vdigit` which is closest to proposed `g.gui.nviz` because it is also integrated into wxGUI Map Display.
     174 * The implementation should use/reuse/refactor the existing code and all current functionality should be preserved (comparisons with the original version should be done throughout the whole development period).
     175 * The command line interface should be similar to `m.nviz.image` module but should also accept wxGUI workspace file.
     176 * Some refactoring will be needed to uncouple GUI controls (now part of Layer Manager) and the rendering
     177  * rule of thumb is that the new code should work even without GUI controls, e.g. as API, and the rendering should be possible not only in the wxPython window but also using `m.nviz.image` module
     178  * usage in `g.gui.animation` could be considered too
     179  * having a Python API might be quite advantageous for scripting (although `m.nviz.image` solves most of the problems)
     180 * This would bring benefit to QGIS Processing which is using the standalone !Tcl/Tk NVIZ with GRASS GIS 6, so this project should be (co-)mentored by mentors from both GRASS GIS and QGIS projects.
     181 * Language requirements: Python, wxPython, (C and OpenGL shouldn't be necessary)
     182 * Other requirements: basic software design patterns and GUI programming experience
     183 * Mentor: Anna Petrasova
     184 * Co-mentor: Vaclav Petras
     185
     186=== Integration of v.profile into GUI profiling tool ===
     187
     188Current GUI profile tool supports creation of profiles of raster maps. It serves as a visualisation frontend to r.profile. Sometimes it is necessary to integrate into profile information on some objects (river, road, observation point etc.) that are provided as vector objects. Such functionality is provided by v.profile add-on (planned to be moved from add-ons to main modules), still any visualisation tool is lacking. Thus as a part of SOC existing profiling tool could be extended to include also vector profiling capabilities. This SOC requires basic knowledge of Python and will provide introduction into wxPython program development.
     189* Integration of v.profile (addon module) should provide support of:
     190 * displaying vector points as symbols by their Z coordinate / attribute value OR on a selected raster profile line
     191 * displaying vector line crossing places as vertical lines
     192 * displaying labels next to symbols or at X axis
     193* This can be extended by integrating also v.profile.points which is a different way of profiling vector maps.   
     194* Requirements: Python, wxPython
     195* Mentor: ?
     196* Co-mentors: Māris Nartišs, Vaclav Petras (v.profile.points part)
     197
     198
     199=== Add CMake build system for GRASS GIS ===
     200This idea will allow to have a cross-platform build of grass on all major platforms (GNU/Linux, *BSD, Windows and OSX)
     201students must have a advanced knowledge of writing cmake scripts and also should have access other oses: OSX, Linux and Windows (atleast a VM instance to do testing is required)
     202* Keep autoconf until cmake build becomes stable (atleast two releases ?)
     203* Requirements: CMake
     204* Mentor: Rashad Kanavath
     205* Co-mentors: ??
     206
     207
     208== Tips for students ==
     209
     210 * If you have your own ideas we encourage you to propose them. Explain them on the [http://lists.osgeo.org/listinfo/grass-dev grass-dev mailing list].
     211 * If you like some idea here or from previous yeas, write about it on [http://lists.osgeo.org/listinfo/grass-dev grass-dev mailing list] and any ideas of your own which could improve it.
     212 * Follow some good practices in your ideas and proposals:
     213  * Stress why the project would be useful.
     214  * 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.
     215  * Be specific in the implementation (or at least as specific as you can).
     216  * 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)
     217  * Explain how the idea relates to existing GRASS GIS functions, features, and needs.
     218  * 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.
     219 * Compile GRASS GIS 7 (trunk) from source and prepare environment for development:
     220  * See links appropriate for you at [http://grass.osgeo.org/development/how-to-start/].
     221  * If you get stuck with the setup, feel free to consult the [http://lists.osgeo.org/listinfo/grass-user grass-user mailing list].
     222  * Familiarize yourself with wiki:Submitting rules.
     223 * Prove your worth by being active on the GRASS mailing lists ([http://lists.osgeo.org/listinfo/grass-user grass-user], [http://lists.osgeo.org/listinfo/grass-dev grass-dev]), fix some [http://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.
     224 * Also note that fixing existing bugs and/or implementing enhancements will be a part of student evaluation.
     225
     226 * Every year GRASS GIS hopes to participate and participates in GSoC as part of the [http://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_2017 OSGeo GSoc Ideas page].