[GRASS-dev] grass.jupyter Mini Project Final Report

Caitlin Haedrich caitlin.haedrich at gmail.com
Tue Apr 19 06:00:56 PDT 2022


Hi all,

Just wanted to add an even shorter GRASS -> Pandas snippet, taken from Anna
Petrasova's GRASS GIS workshop at FOSS4G 2021 [1]:

```
import json
import pandas as pd
pd.DataFrame(json.loads(gs.read_command("v.db.select", map="viewpoints",
columns="cat,height", layer=2, format="json"))["records"])
```

Since v.db.select has JSON output, it's only one line. Again, a strong
argument for adding JSON as a standard output option for modules that
return text.

Caitlin

[1]
https://github.com/ncsu-geoforall-lab/grass-gis-workshop-FOSS4G-2021/blob/main/workshop_part_2.ipynb

On Mon, Apr 18, 2022 at 3:20 PM Caitlin Haedrich <caitlin.haedrich at gmail.com>
wrote:

> Hi all,
>
> Last week, we wrapped a final push on grass.jupyter and are excited for
> its official release with GRASS 8.2. Here's my final report along with a
> summary of grass.jupyter changes introduced as part of the project. Thank
> you all for your support, feedback and testing over the past few months!
>
> *The state of the art BEFORE the start of the Mini Project:*
> During GSoC 2021, we created “grass.jupyter”, a package that improves the
> integration of GRASS GIS and Jupyter with a set of functions for displaying
> GRASS data in Jupyter Notebooks. In its previous state, “grass.jupyter”
> allows users to create static visuals and simple interactive maps. However,
> several additional features are needed to allow Jupyter users to fully and
> easily access the power GRASS, including space-time dataset visualization
> and more options for interactive mapping.
>
> *Project Goals*:
> In preparation for the stable release of grass.jupyter with GRASS 8.2,
> this project had three main goals: (1) create space time dataset
> visualizations for use in Jupyter Notebooks, (2) improve the integration of
> GRASS with folium (leaflet library for Python) and (3) write a function for
> displaying vector attributes in nicely-formatted tables (using Pandas or
> Geopandas). Along the way, we also wanted to finalize the naming of
> grass.jupyter classes and create documentation (thank you Vaclav Petras).
>
> *The state of the art AFTER the Mini Project:*
> 1. New TimeSeriesMap class that creates ipywidget time sliders of space
> time datasets (see attached timeseriesmap.png) and a notebook documenting
> it's usage [1]
> 2. Improved GRASS-folium integration allowing rasters and vectors to be
> added to existing folium maps (see attached grass-folium.png) and updated
> notebook demonstrating its usage [2]
> 3. Updated class names:
>
>    - GrassRenderer -> Map
>    - Grass3dRenderer -> Map3D
>    - InteractiveMap
>    - TimeSeries -> TimeSeriesMap
>
> 4. Thanks to Vaclav Petras, we also have a manual page for grass.jupyter
> [3]
> 5. I didn't end up working to integrate GRASS and Pandas. It seems that it
> is quite straightforward to display vector attributes in nicely-formatted
> Pandas tables. For example:
>
> >>> import pandas as pd
>
> >>> import sqlite3
> >>> sql_path = gs.read_command("db.databases",
> driver="sqlite").replace('\n', '')
> >>> con = sqlite3.connect(sql_path)
> >>> sql_stat="SELECT * FROM field"
> >>> df = pd.read_sql_query(sql_stat, con)
>
> >>> con.close()
> >>> df
>
> There are other outputs that would be nice to display in nice Pandas
> tables, like text output from r.univar, r.stats, or t.vect.list. However,
> this is difficult since there is no standard output that is easily
> parse-able to pandas. I think the best way would be to create a standard
> json or csv output for all modules that return text. Then, it would be
> simple to take any module output and convert to a nice-looking Pandas table.
>
> *Next Steps:*
> 1. Bug: InteractiveMap does not honor use_region=True for vectors.
> 2. Bug: InteractiveMap for Jupyter does not handle not existing data
> properly (https://github.com/OSGeo/grass/issues/2302)
> 3. InteractiveMap: add legend options for rasters, support simpleCRS for
> faster rendering, ToolTip integration for vector attributes
> 4. Continue Pandas integration by adding standard json or csv output to
> modules that return text
> 5. ... And many others! I think there's still lots of ways we can improve
> and expand the integration of GRASS and Jupyter. Ideas welcome.
>
> You can find an archive of all my weekly reports at [4] and follow next
> steps for grass.jupyter on our project page on GitHub [5]. Thank you again
> to Vaclav Petras and Anna Petrasova for their guidance and contributions to
> grass.jupyter. And, another thank you to Vero Andreo, Stefan Blumentrath
> and Markus Neteler for their feedback and testing!
>
> Best,
> Caitlin
>
> [1]
> https://mybinder.org/v2/gh/OSGeo/grass/main?urlpath=lab%2Ftree%2Fdoc%2Fnotebooks%2Ftemporal.ipynb
> [2]
> https://mybinder.org/v2/gh/OSGeo/grass/main?urlpath=lab%2Ftree%2Fdoc%2Fnotebooks%2Fgrass_jupyter.ipynb
> [3] https://grass.osgeo.org/grass81/manuals/libpython/grass.jupyter.html
> [4]
> https://trac.osgeo.org/grass/wiki/GSoC/2021/JupyterAndGRASS/MiniGrant2022
> [5] https://github.com/OSGeo/grass/projects/7
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/grass-dev/attachments/20220419/9a1b8d0f/attachment.html>


More information about the grass-dev mailing list