GRASS GSoC 2024 Improve user experience in Jupyter Notebooks

From GRASS-Wiki
Jump to navigation Jump to search
Student Name Riya
Organization ​OSGeo - Open Source Geospatial Foundation
Mentor Name Anna Petrasova, Corey White
GitHub Fork View Repo
GSoC proposal View Proposal

Abstract

The grass.jupyter.InteractiveMap() tool offers basic map visualization features like zooming and layer addition but suffers from suboptimal rendering speed (approximately 7.55 seconds per loop) and cumbersome data integration, particularly with large datasets. Additionally, its reliance on the Pseudo-Mercator projection limits its versatility. This abstract highlights the need for enhancements to improve rendering efficiency, streamline data integration, and broaden projection support for increased usability and functionality.

Goal

Main Goals:

  1. Enhance InteractiveMap with interactive data retrieval features, enabling users to query attribute values and draw geometries directly on the map.
  2. Implement support for custom coordinate reference systems (CRS) in InteractiveMap to eliminate the need for layer reprojection and improve visualization speed.
  3. Optimize rendering processes for SeriesMap and TimeseriesMap by parallelizing map rendering using standard Python libraries like multiprocessing.

Stretch Goals:

  1. Improve integration between GRASS and Pandas for smoother data handling and analysis.
  2. Incorporate tile-based rendering to efficiently display extensive datasets without compromising performance.
  3. Integrate a graphical user interface (GUI) within a Jupyter Notebook for enhanced user experience and ease of interaction with InteractiveMap functionalities.

Timeline

Period Timeline Tasks Status
Bonding Period

May 1- May 26

  1. Initial research
  2. Proposal Discussion with Mentor
  3. Work on this PR
Official Coding Period
Week 1 (May 27 - June 1) Write initial function for adding button to grass.jupyter.InteractiveMap()
Week 2 (June 2 - June 8) Add click to see attributes features to the button
Week 3 (June 9 - June 15) Add button to allow users to create drawings in the displayed InteractiveMap()
Week 4 (June 16 - June 22) Add tools to the button to create different drawings
Week 5 (June 23 - June 29) Add functionality to retrieve points from user drawn drawings and add them to the data, if the user wants
Week 6 (June 30 - July 6) Speeding up the rendering of InteractiveMap() by skipping reprojection
Week 7 (July 7 - July 13)
  1. Code refactoring, testing, documentation
  2. Mid-term Evaluation: July 12
Week 8 (July 14 - July 20) Adding parallelization to TimeseriesMap and SeriesMap
Week 9 (July 21 - July 27) Documentation, testing, writing tutorial
Week 10 (July 28 - August 3) Working on a selected stretch goal
Week 11 (August 4 - August 10) Working on a selected stretch goal
Week 12 (August 11 - August 17) Write project summary
Evaluation Period
August 26 - September 2 Submit code and final evaluation


Reports

Bonding Period

  1. Contribution Guidelines: Spent time familiarizing myself with the project's contribution guidelines to ensure that my work aligns with the required standards.
  2. Introduction: Introduced myself to the discourse mailing list.
  3. WikiPages Setup: Created and organized my personal WikiPage and the project WikiPage, providing necessary documentation.
  4. Development Environment Configuration: Successfully set up and configured the development environment to streamline my coding and testing processes.
  5. GRASS GIS Exploration: Learnt more about GRASS GIS.
  6. Remove Redundancy in the code: Continued working on the pull request to remove redundancies in the SeriesMap and TimeSeriesMap modules opened by me before the Contributor Proposals Opened.

Week-1

  1. Created the Class BaseSeriesMap (PR)
    • The BaseSeriesMap class serves as a base class for SeriesMap and TimeSeriesMap.
    • It eliminates code redundancy and offers a unified interface for rendering images and creating interactive timeline sliders.
  2. Query Button (PR)
    • Enabled users to retrieve the Latitude and Longitude of raster data upon activation of Query Button.

Week-2

  1. Query Button (PR)
    • Added functionality to handle both raster and vector data.
    • The button now returns output to the user in the Coordinate Reference System (CRS).

Week-3

  1. Query Button (PR)
    • Added a Popup button to display the queried point.
    • Enabled support for multiple raster and vector layers.
  2. View/Update Computational Region Button (PR)
    • Began initial work on this feature, for example, adding the button, getting the region, etc.

Week-4

  1. Query Button (PR)
    • Explored methods to dynamically calculate the query threshold distance.
    • Made slight modifications to the display of the Query button.
  2. View/Update Computational Region Button (PR)
    • Attempted to use ipyleaflet.Rectangle as an alternative to DrawControl, but this method was unsuccessful.

Week-5

  1. Query Button (PR)
    • Added test case for query button.
  2. View/Update Computational Region Button (PR)
    • Added a rectangle to display the current computational region when this button is activated.
    • User can modify the current computational region by adjusting the rectangle.

Week-6

  1. Query Button (PR)
    • Enhanced the appearance of the popup button that will display the output.
  2. View/Update Computational Region Button (PR)
    • Worked on enhancing the display of the computational region.

Week-7

  1. Query Button (PR)
    • Finalized the appearance of the popup button.
  2. View/Update Computational Region Button (PR)
    • Added functionality for zooming into the computational region.
  3. Drawing and Saving of Simple Geometries (PR)
    • Users can now draw simple geometries in InteractiveMap and save them as GRASS native vector maps.
    • Transitioned from DrawControl (deprecated) to GeomanDrawControl in ipyleaflet.

Week-8

  1. Query Button (PR)
    • Worked on pylint errors.
  2. Drawing and Saving of Simple Geometries (PR)
    • Discovered limitations of GeomanDrawControl and reverted to DrawControl.
  3. Parallelization (PR)
    • Began working on parallelization for TimeseriesMap and SeriesMap.

Week-9

  1. Drawing and Saving of Simple Geometries (PR)
    • Updated the display of buttons.
  2. Parallelization (PR)
    • Continued working on parallelization for TimeseriesMap and SeriesMap.

Week-10

  1. Drawing and Saving of Simple Geometries (PR)
    • Did some final edits in the code.
  2. Parallelization (PR)
    • Added parallelization in the render function for TimeseriesMap and SeriesMap, and completed this task.

Week-11

  1. Managing Multiple Toggle Buttons
  2. Modified Tutorials
  3. Updated Descriptions

Week-12

Final Report