Skip to content

danlooo/DGGS.jl

Repository files navigation

DGGS.jl

Stable Dev Build Status Coverage

DGGS.jl is a Julia Package for scalable geospatial analysis using Discrete Global Grid Systems (DGGS), which tessellate the surface of the earth with hierarchical cells of equal area, minimizing distortion and loading time of large geospatial datasets, which is crucial in spatial statistics and building Machine Learning models.

Important Note

This project is currently under intensive development. The API is not considered stable yet. There may be errors in some outputs. We do not take any warranty for that. Please test this package with caution. Bug reports and feature requests are welcome. Please create a new issue for this.

Get Started

DGGS.jl currently only officially supports Julia 1.9 running on a 64bit Linux machine. This package can be installed in Julia with the following commands:

using Pkg
Pkg.add(url="https://github.com/danlooo/DGGS.jl.git")
using DGGS
p1 = open_dggs_pyramid("https://s3.bgc-jena.mpg.de:9000/dggs/sresa1b_ncar_ccsm3-example")
DGGSPyramid
DGGS: DGGRID ISEA4H Q2DI ⬢
Levels: Integer[5, 4, 6, 2, 3]
Non spatial axes:
  Time CFTime.DateTimeNoLeap
  plev Float64
Arrays: 
  tas air_temperature (:Time) K Union{Missing, Float32} aggregated
  ua eastward_wind (:plev, :Time) m s-1 Union{Missing, Float32} aggregated
  pr precipitation_flux (:Time) kg m-2 s-1 Union{Missing, Float32} aggregated
  area meter2 Union{Missing, Float32} 

Create a DGGS based on a synthetic data in a geographical grid:

using DimensionalData
lon_range = X(-180:180)
lat_range = Y(-90:90)
level = 6
data = [exp(cosd(lon)) + 3(lat / 90) for lon in lon_range, lat in lat_range]
raster = DimArray(data, (lon_range, lat_range))
p2 = to_dggs_pyramid(raster, level)
[ Info: Step 1/2: Transform coordinates
[ Info: Step 2/2: Re-grid the data
DGGSPyramid
DGGS: DGGRID ISEA4H Q2DI ⬢
Levels: Integer[5, 4, 6, 2, 3]
Non spatial axes:
Arrays: 
  layer  Union{Missing, Float64} 

Write DGGS data to disk and load them back:

write_dggs_pyramid("example.dggs", p2)
p2a = open_dggs_pyramid("example.dggs")

Access individual layers and arrays:

highest_layer = p1[6]
air_temperature = highest_layer.tas
temperature_map = collect(p1[level=2, id=:tas, Time=1])

Visualization:

using GLMakie
plot(p1[6].tas)
plot(p1[6].tas; type=:map, longitudes=-180:180, latitudes=-90:90)

Development

This project is based on DGGRID.

Funding

This project has received funding from the Open-Earth-Monitor Cyberinfrastructure project that is part of European Union's Horizon Europe research and innovation programme under grant agreement No. 101059548.

About

Discrete Global Grid System for Julia

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published