Version 12 (modified by 3 years ago) ( diff ) | ,
---|
GSoC 2021 Improved Integration of GRASS GIS and Jupyter Notebooks
Title: | Improved Integration of GRASS GIS and Jupyter Notebooks |
Student Name: | Caitlin Haedrich, North Carolina State University |
Organization: | OSGeo - Open Source Geospatial Foundation |
Mentor Name: | Vaclav Petras, Helena Mitasova, Stephan Blumentrath |
GitHub Repository: | View Repo |
GSoC proposal: | View Proposal |
Abstract
The current integration of GRASS GIS and Jupyter Notebooks requires a cumbersome environment variable setup after launching GRASS from within the notebook. It also only allows for simple, non-interactive map displays. My project will address both these issues and improve the GRASS-Jupyter integration with a new package called grass.jupyter.
Goal
My goal is to design a Python/PyGRASS library which will have 3 main components for improving the GRASS-Jupyter integration: (1) creating new initiation functions for the launch of GRASS GIS in Jupyter Notebooks, (2) creating functions for more intuitive map display and, (3) introducing an interactive map display function.
Timeline
Time Period | Milestones | |
---|---|---|
Tasks | Status | |
May 17th - June 7th |
|
Ok |
June 7th - June 11th |
|
Ok |
June 14th - June 18th |
| Ok |
June 21st - June 25 |
|
Ok |
June 28 - July 2 |
| Ok |
July 5th - July 9th |
|
Ok |
July 12th - July 16th |
| |
July 19th - July 23rd |
| |
July 26th - July 30th |
| |
August 2nd - August 6th |
| |
August 9th - August 13th |
| |
August 16th- August 23rd |
|
Bonding period report
With the bonding period wrapped up, here is a brief update on what I've been working on so far.
- What did I accomplish during the bonding period?
- I introduced myself in dev and SOC mailing lists (1).
- I had a productive meeting with my mentors, Vashek Petras, Helena Mitasova and Stefan Blumentrath last Friday. We discussed the best development environment (see second to last bullet point) and setting up the main GRASS repository to run in Binder (see last bullet point).
- Prepared the wiki page.
- Set up the GitHub repository for project (2).
- Set up developer environment. Since development will be easier on Linux, I set up a VirtualBox with Linux (Ubuntu) on my Windows machine. I compiled and installed GRASS and installed Jupyter Notebooks in Ubuntu.
- Opened my first PR (3) which contains binder dependencies.
- What do you plan on doing next week?
I've started working on setting up the GRASS repository to run in Binder (3). This week I plan to continue working on that, set up branches for each of the PRs, and begin writing functions for the grass.jupyter library.
- Are you blocked on anything?
No, I'm not currently blocked on anything.
Evaluation Status
Weekly reports
Week 1
With Week 1 wrapping up, here is an update on what I worked on this week and where I'm headed next week.
1) What did I get done this week?
- Finished binder setup for GRASS main repo. PR was approved. There's a new folder in the main GRASS repo that contains the necessary files to launch the repository in binder.
- Added Binder Button. PR under review. This button will go in the README.md and allow users to launch a Jupyter Lab of the repository in binder. Users can run GRASS (i.e. a compiled version of the main GRASS repo) in Jupyter Notebooks there.
- Created an example notebook that is linked from the Binder Button. The notebook was copied from here and demonstrates the existing Jupyter/GRASS integration.
- Wrote draft of GRASS initiation functions for Jupyter (PR).
- Created Makefile and init.py file for grass.jupyter (PR).
- Created a Jupyter Notebook where others can view and test the grass.jupyter functions (PR).
2) What do I plan on doing next week?
I plan to start working on display functions and familiarizing myself with Folium.
3) Am I blocked on anything? No, I'm not currently blocked on anything.
Week 2
Here is a brief update from Week 2. You can also check out how the new grass.jupyter module works so far in Binder at this link
1) What did I accomplish this week?
- Had a productive discussion with my mentors: Vaclav Petras, Helena Mitasova and Stefan Blumentrath.
- Edited and merged Binder button into README PR and GRASS session initiation functions for Jupyter PR.
- Wrote functions for displaying non-interactive maps in Jupyter and opened PR for discussion PR.
- Began researching and drafting interactive display options with folium. In particular, figuring out how to best pass GRASS data/layers to folium.
2) What do I plan on doing next week?
- Edit non-interactive display functions.
- Continue working on passing GRASS data/layers to folium.
3) Am I blocked on anything? No, I'm not blocked but I didn't get much done this week because I had a family event.
Any suggestions and feedback are welcome!
Week 3
Here is a brief update on what I accomplished during Week 3 of Google Summer of Code for the new GRASS library grass.jupyter. I have also started posting links to Binder Jupyter Notebooks in each PR if you would like to try any of the features and functions I've been working on.
1) What did I accomplish this week?
- Edited and discussed functions for displaying non-interactive maps in Jupyter PR.
- Drafted an interactive display function for rasters with folium PR.
- Made a few minor edits to the example_notebook.ipynb that is linked in the README PR.
2) What do I plan on doing next week?
- I have a meeting planned with my mentors.
- I will continue working on interactive functions for Jupyter. In particular, I'm working on passing GRASS rasters to folium.
- I'll begin writing functions for displaying GRASS vectors with folium.
3) Am I blocked on anything? I'm not blocked at the moment. But, I have been working on finding a good way to pass raster data between GRASS and Jupyter and I'm not sure my current method is particularly fast or robust [3]. Luckily, I have a meeting tomorrow with my mentors where we will discuss this.
Any suggestions and feedback are welcome!
Week 4
With week 4 wrapping up, here is a brief update of what I've been working on. Per usual, you can try proposed changes out in the Binder link in the description of each PR.
1) What did I accomplish during Week 1?
- I had a productive meeting with my mentors: Vaclav Petras, Helena Mitasova and Stefan Blumentrath. We discussed how environments work and the purpose of copying the environment each time an instance of GrassRenderer is called.
- I finished and merged a class called GrassRenderer for non-interactive map displays PR.
- I continued to work on interactive mapping with folium. In particular, I changed how data is passed to folium so that it is first reprojected to WGS84 (required by folium/leaflet) in a new location/mapset PR.
2) What do I plan on doing next week?
- Continue to work on interactive functions with folium.
3) Am I blocked on anything?
- No, I'm not blocked on anything at the moment.
Any suggestions and feedback welcome!
Week 5
Here is a weekly update on my project, Improved Integration of GRASS GIS and Jupyter Notebooks.
1) What did I accomplish this week?
- This week, I spent most of my time improving and editing a new class called
InteractiveMap
to display vectors interactively with folium. You can test the current functionality in Binder. - I had a productive meeting with my mentor, Vaclav Petras on Thursday. We discussed several things that I was a little stuck on and had questions about.
- Updated
grass.jupyter
demonstration Notebook. - Resolved merge conflicts with master - now, the interactive and non-interactive classes are functional together PR.
- Found unexpected behavior in the legend display. Calling folium.map.LayerControl() adds a legend to the map but also seems to prevent further modification of the map.
2) What do I plan to do next week?
- Meet with my mentors tomorrow.
- GSoC Evaluations.
- Finish and merge interactive vector methods.
- Begin interactive maps for rasters.
3) Am I blocked on anything?
- No, I'm not currently blocked on anything.
Feedback, comments, questions and ideas welcome!
Week 6
Week 7
Week 8
Discussion Notes
Future Work
Attachments (2)
- GrassRenderer.PNG (340.4 KB ) - added by 3 years ago.
- InteractiveMap.PNG (291.9 KB ) - added by 3 years ago.
Download all attachments as: .zip