# \[ANN\] GeoStats.jl - Geospatial Data Science and Geostatistical Modeling in Julia

**URL:** <https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054>\
**Category:** Package Announcements\
**Tags:** package, announcement, statistics, geo, geostatistics\
**Created:** [July 1, 2023, 4:10pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054 "2023-07-01T16:10:30Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [August 19, 2024, 9:41pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/21 "2024-08-19T21:41:28Z")

</div>

### Quick update:

We are now using uv texture mapping in Makie.jl to visualize “rasters”, which gives an additional 2.5x speedup. If you need this speed, please update your environment.

---

<div class="post-metadata">

**Author:** ![maxfreu](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/maxfreu/32/17468_2.png) [@maxfreu](https://discourse.julialang.org/u/maxfreu)\
**Post date:** [August 20, 2024, 10:48am UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/22 "2024-08-20T10:48:04Z")

</div>

If you want faster upsampling, look into NNlib. The julia native bilinear upsampling there is parallelized for cpu and gpu and supports 1, 2 & 3D data and is as fast as it can probably get.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [August 22, 2024, 10:48pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/23 "2024-08-22T22:48:46Z")

</div>

Relevant update:

> [@\[ANN\] GeoArtifacts.jl - Artifacts for Geospatial Data Science in Julia](https://discourse.julialang.org/t/ann-geoartifacts-jl/114508/2):
>
> GeoArtifacts.jl v1.1 This release comes with a complete refactor of the internals to benefit from the various repairs of geometries implemented in GeoIO.jl. The NaturalEarth submodule is very comprehensive now, allowing users to download all sorts of datasets with clean syntax. Below is an example where we create a 3D visualization with a “raster” of the Earth, country borders, airports and water ports: using GeoStats using GeoArtifacts import GLMakie as Mke # download artifacts from natura…

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [September 9, 2024, 11:10am UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/24 "2024-09-09T11:10:16Z")

</div>

# GeoStats.jl v0.66

Refactored `Slice` transform and other minor fixes:

> [@"Raster" syntax in GeoStats.jl](https://discourse.julialang.org/t/raster-syntax-in-geostats-jl/119214):
>
> Given that most people in the geo community are not aware of the “raster” syntax in GeoStats.jl, I collect a few examples here to facilitate the transition. This post may become part of the official project documentation in the future. The “raster” model A “raster” is nothing more than a Julia array that is georeferenced over a geospatial grid. The “raster” model is popular in the scientific community for two main reasons: it provides convenient syntax to access grid elements within “rectan…

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [September 9, 2024, 9:41pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/25 "2024-09-09T21:41:57Z")

</div>

Two job opportunities:

> [@Geospatial Software Development at Arpeggeo®](https://discourse.julialang.org/t/geospatial-software-development-at-arpeggeo/119215):
>
> Description We are seeking a highly skilled and motivated Software Engineer to join our team, focusing on the development of cutting-edge geospatial software solutions. The ideal candidate will have strong expertise in GIS (Geographic Information Systems) technology and demonstrate a passion for solving complex geospatial problems through software development. This role involves working on a variety of projects that require a deep understanding of geospatial data, mapping technologies, and softw…

> [@Arpeggeo + Algora: funding contributors of the GeoStats.jl framework](https://discourse.julialang.org/t/arpeggeo-algora-funding-contributors-of-the-geostats-jl-framework/119226):
>
> At Arpeggeo® we are starting an experimental initiative to attract more contributors to the Julia community. In partnership with [algora.io](http://algora.io), we are introducing open-source bounties to the GeoStats.jl framework. If you are a freelancer, or just want to make some extra cash besides your main job, look for open issues with the Bounty label on the JuliaEarth organization on GitHub. Here is a first easy one to get used to the Algora workflow: The Algora founders gave us a 1 month trial to see if …

---

<div class="post-metadata">

**Author:** ![GeodeticR](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/geodeticr/32/218661_2.png) [@GeodeticR](https://discourse.julialang.org/u/GeodeticR)\
**Post date:** [September 9, 2024, 9:52pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/26 "2024-09-09T21:52:30Z")

</div>

I’m finishing a Masters in Geophysics that is in the geospatial realm (my research is in geodesy). Maybe by the end of my degree I’ll qualify as for being “proficient in high-performance programming languages” because as of now, I’m firmly between novice and adequate. lol

Good luck with the search! 👍

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [September 25, 2024, 8:53pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/27 "2024-09-25T20:53:28Z")

</div>

# GeoStats.jl v0.68

New discretization and refinement methods, and various other small improvements and fixes.

- New `MaxLengthDiscretization` to discretize geometries into subgeometries of maximum length. This is used in `viz` of geodesic geometries.

- The `TriRefinement` now supports a predicate function for adaptive refinement. For instance, you can refine all elements with area greater than a given threshold `TriRefinement(e -> area(e) > 1km^2)`.

- The `georef` function now supports a `lenunit` option besides the `crs` to specify the length units of some CRS from raw unitless columns.

- All `Grid` subtypes now support `CRS` (e.g., RectilinearGrid, StructuredGrid, RegularGrid, CartesianGrid). The `CartesianGrid` is now an alias to a `RegularGrid` with `Cartesian` CRS. If you need to convert back and forth between `LatLon` and `Projected` coordinates, prefer `RegularGrid` in your workflows.

We are seeing more and more articles in applied sciences citing the software. Thank you :juliaheartpulsing:

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [November 19, 2024, 8:54pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/28 "2024-11-19T20:54:17Z")

</div>

# GeoStats.jl v0.71

This release introduces **transiogram** functions, which measure the transition probability between categorical values at any given distance along any given direction. Transiograms are used to simulate Markov processes in more than one dimension (e.g. space).

Various models are implemented, including the `MatrixExponentialTransiogram` model by Carle et al and the `PiecewiseLinearTransiogram` model by Li et al.

Below is an example where transition probabilities are estimated for 4 categorical values `DebrisFlow`, `Floodplain`, `Overbank` and `Channel` along the vertical direction.

 ![image](https://global.discourse-cdn.com/julialang/original/3X/4/e/4e597270ae084e2ec2992e5222ef97da818a3660.png)

Another function that was introduced recently is `eachvertex`, which can be used to iterate over the vertices of a polytope (polygon, segment, etc.) or mesh (e.g. grid) without memory allocation:

```julia
for v1 in eachvertex(g1)
  for v2 in eachvertex(g2)
    ...
  end
end

```

Various other performance optimizations related to `eachvertex` were implemented to speed things up and reduce the memory usage of specific algorithms.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [January 2, 2025, 12:22pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/29 "2025-01-02T12:22:38Z")

</div>

Appreciate it if you could share your thoughts in our 2025 survey:

> **[GeoStats.jl survey 2025](https://forms.gle/Jx4Gcxeav1G6RURv8)**
>
> Feel free to answer any subset of questions. Thank you in advance for your input ❤️

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [January 29, 2025, 12:10pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/30 "2025-01-29T12:10:26Z")

</div>

## GeoStats.jl v0.73

### New features

Multivariate interpolation with CoKriging that exploits the cross-variable correlation at any lag distance besides the auto-correlation. We support any number of variables, as well as any geostatistical function, including variograms, covariances and transiograms.

CoKriging interpolation is quite useful when a subset of one or more variables are under-sampled, and another subset of densely-sampled variables are linearly correlated to the first subset. The cross-variable correlation can greatly improve the interpolation of the under-sampled variables. Below is an example where we interpolate 5 variables jointly along a well trajectory:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/2/1/212b1344bf636de2a62ba297ce8aa8aca69b9f86.png)

Please reach out in our [#geostats.jl](https://julialang.zulipchat.com/#narrow/stream/276201-geostats.2Ejl) channel if you need help setting up multivariate interpolation.

Anisotropic variogram models can now be constructed with `ranges` and `rotation`. There is no need to create a `MetricBall` manually:

```julia
GaussianVariogram(ranges = (1, 2, 3), rotation=I)

```

### Breaking changes

We took this opportunity to review and optimize the `Interpolate` and `InterpolateNeighbors` transforms. Their syntax was simplified to

```julia
Interpolate(domain; model=model, ...)

```

and we no longer support the complex syntax with variable names. This is important now that we have multivariate interpolation routines. If you pass a geotable with N\>1 columns to a univariate interpolation model, you will get an assertion error. Please `Select(variable)` before `Interpolate` or `InterpolateNeighbors` in this case.

The variants `InterpolateMissing` and `InterpolateNaN` were removed in favor of more explicit pipelines with `DropMissing` and `DropNaN` respectively.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [February 3, 2025, 2:43pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/31 "2025-02-03T14:43:27Z")

</div>

We’ve updated the official documentation of the project to include more examples, and cover more undocumented features:

> **[Home · GeoStats.jl](https://juliaearth.github.io/GeoStatsDocs/stable/)**
>
> Documentation for GeoStats.jl.

It is far from complete coverage, but already an improvement. We will try to find the time to work on it again during the year, in between our scheduled deliverables.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [February 18, 2025, 5:42pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/32 "2025-02-18T17:42:40Z")

</div>

## GeoStats.jl v0.74

### New features

#### Multivariate Gaussian simulation

Full support for multivariate Gaussian simulation, dispatched in the presence of multivariate variogram, covariance or transiogram functions:

```julia
# joint covariance model between 2 variables with 0.8 correlation
fun = [1.0 0.8; 0.8 1.0] * SphericalCovariance(range=600)

# Gaussian process with multivariate geostatistical function
proc = GaussianProcess(fun)

# load unstructured mesh from disk
mesh = GeoIO.load("norne.vtu").geometry

# simulate 2 variables jointly over the mesh
real = rand(proc, mesh)

```

 ![reals](https://global.discourse-cdn.com/julialang/original/3X/6/2/62cc877ca952064639c1a1d02a5b14b256350ed4.png)

Similar to the previous post about CoKriging, multivariate Gaussian simulation (a.k.a. Gaussian cosimulation) can be useful in contexts where a subset of variables is under-sampled. The main advantage of geostatistical simulation compared to geostatistical interpolation is the reproduction of local features, which are smoothed out by interpolation routines.

#### Better plotting of geostatistical functions

New `funplot` and `surfplot` functions that generalize and replace old plot recipes for multivariate, anisotropic geostatistical functions:

```julia
fun = [1.0 0.8; 0.8 1.0] * SphericalCovariance(ranges=(600,300,200))

funplot(fun)

```

 ![image](https://global.discourse-cdn.com/julialang/original/3X/8/d/8d58cbbc4e2966c46c6c4b78ae43da2942ee9b66.png)

#### Improved heuristics for simulation methods

Alternative simulation methods are chosen much more carefully now based on traits over the type of `domain`, `data` and `process`. If you are using random fields in your work, we highly recommend the update to v0.74.

### Breaking changes

The `rand` interface for geospatial stochastic processes is much simpler now:

```julia
reals = rand(process, domain, [n]; data=nothing, ...)

```

It generates `n` realizations of the stochastic `process` over the `domain`. The `data` is a `GeoTable` with pre-existing values over the domain or `nothing`. All pre-existing values are honored by the simulation.

Finally, the `varioplot`, `transioplot` and `planeplot` functions were removed in favor of the more general `funplot` and `surfplot`.

### Frequently asked questions (FAQ)

I’ve started a FAQ in our official documentation:

> **[How to work with "rasters"? · GeoStats.jl](https://juliaearth.github.io/GeoStatsDocs/stable/faq/rasters/)**
>
> Documentation for GeoStats.jl.

If you have suggestions of questions for our FAQ, please let me know or feel free to open a pull request. Happy to review and merge.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [February 25, 2025, 3:58pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/33 "2025-02-25T15:58:30Z")

</div>

## GeoStats.jl v0.75

New `IndicatorProcess` for simulating categorical variables with multivariate variograms, covariances or transiograms:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/0/3/03dc031e39e08df4276a34145186e86cb0063f9b.jpeg)

The `QuiltingProcess` now supports simulation over views of `Grid`’s as explained in the docs:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/4/1/41d795597146947d2d48e20cca7380bda2b11b8e.png)

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [March 10, 2025, 1:20pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/34 "2025-03-10T13:20:29Z")

</div>

If you are curious about how GeoStats.jl compares with other **geo** + **stats** software, the following table is very telling:

 ![geostats-comparison](https://global.discourse-cdn.com/julialang/original/3X/7/c/7c23e170799ffab0c24b10b7acd1efd204f08584.png)

If you want to help the project, please share this table with your colleagues.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [March 24, 2025, 2:22pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/35 "2025-03-24T14:22:32Z")

</div>

New `Quenching` transform to “smooth” categorical variables obtained from a simulation or learning model. The transform was introduced by Carle & Fogg 1998 to post-process the results of sequential indicator simulation.

In the example below we have the original “raster” with 3 categorical values (left image) and the output of the transform (right image):

 ![quenching](https://global.discourse-cdn.com/julialang/original/3X/d/f/df45270ce19b276a5c921c3967194f4d609d6008.png)

The transform accepts any `Transiogram` function, as well as other parameters to preserve the categorical values at specific locations (e.g., measurements).

As usual, we provide full support for any type of domain, not just grids in a “raster” model, and any type of categorical value, not just integer codes.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [March 28, 2025, 12:51pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/36 "2025-03-28T12:51:49Z")

</div>

## GeoStats.jl v0.78

### New features

New `KMedoids` clustering transform. The algorithm supports heterogeneous variables (e.g., continuous, categorical, compositional, …) so you can feed `GeoTable`s with all sorts of columns to it. Example below has a single continuous variable and k=3 clusters:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/c/2/c2014898839fb533b72d08ff9eadbcc530b9d03e.png)

### Breaking changes

- Output column of geostatistical clustering transforms `GHC`, `GSC` and `SLIC` renamed to `"label"` for consistency
- The option `as` was removed from these transforms in favor of `Rename`

The clustering documentation has been updated accordingly:

> **[Clustering · GeoStats.jl](https://juliaearth.github.io/GeoStatsDocs/stable/clustering/)**
>
> Documentation for GeoStats.jl.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [June 28, 2025, 10:39pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/37 "2025-06-28T22:39:23Z")

</div>

Quick updates from academia…

GeoStats.jl modules were used in a couple of recent publications:

- [Mass-Balance MRV for Carbon Dioxide Removal by Enhanced Rock Weathering – CDRXIV](https://cdrxiv.org/preprint/379)
- [Proceedings of the JuliaCon Conferences: BlankLocalizationCore.jl: implementing blank localization in Julia](https://proceedings.juliacon.org/papers/10.21105/jcon.00182)
- [A novel data-driven digital reconstruction method for polycrystalline microstructures - ScienceDirect](https://www.sciencedirect.com/science/article/pii/S004578252500252X)

A benchmark study was published today comparing simple tasks across programming languages, and the potential of these languages for geospatial work:

- [https://onlinelibrary.wiley.com/doi/10.1002/env.70017](https://onlinelibrary.wiley.com/doi/10.1002/env.70017)

I would like to take this opportunity to say thank you to all authors who cited our work. A small `\cite` command in your manuscript makes a huge difference for us ❤

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [July 6, 2025, 1:13pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/38 "2025-07-06T13:13:53Z")

</div>

## GeoStats.jl v0.81

Various performance improvements with multi-threaded implementations, and various fixes related to floating point issues:

- Our `Interpolate` and `InterpolateNeighbors` transforms are multi-threaded now. We are seeing 5x speedups with 8 threads. If you need to perform large-scale 3D Kriging interpolation, that can really make a difference.
- Our `winding(points, mesh)` is multi-threaded now, and therefore our `sideof(points, mesh)` is benefiting from 2.5x speedups.
- Improved numerical correctness of `GrahamScan` and consequently `convexhull`.
- Fixed type-stability issues in `SutherlandHodgmanClipping` and consequently improved performance of `intersection` of `Polygon`s.
- Added `RegularSampling` methods for simplices, i.e. `Triangle` and `Tetrahedron`.
- Our `simplexify(mesh)` is type stable now, leading to downstream performance improvements.
- Added `Coboundary{P,Q}` for `GridTopology` for any `0<P<Q=D`, allowing the lookup of elements sharing edges (for example).
- Fixed GJK implementation, enabling the `intersects` predicate with 3D geometries.
- Added `LambertConic` projection and various related EPSG conversions.
- Added `CarleTransiogram` and various other fixes related to transiogram functions.
- Added `MaxPosterior` and `ModeFilter` transforms to “smooth” categorical variables.

### Breaking

- Replacement of `MersenneTwister` by `Xoshiro` random number generator.
- Removed `path` option in `InterpolateNeighbors` as it doesn’t change results.

These are some of the recent changes I remember by looking into the commit history of all submodules of the project. There are probably more improvements to consider.

We highly recommend updating your environment as usual. Please let us know if you encounter issues with the new release.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [July 30, 2025, 9:18pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/39 "2025-07-30T21:18:21Z")

</div>

New `SpectralIndex` transform that makes the awesome SpectralIndices.jl available into a user-friendly interface for `GeoTable`s:

 ![salobo2](https://global.discourse-cdn.com/julialang/original/3X/1/e/1e6ec5283f70b1acc7af3b4df23fb59538c41dde.jpeg)

The 247 indices can be listed with the `spectralindices` function and the bands for a given index can be listed with the `spectralbands` function.

For example:

```julia
julia> spectralbands("NDVI")
2-element Vector{SpectralIndices.Band{String, Int64, Dict{String, SpectralIndices.PlatformBand}}}:
 Band(N: Near-Infrared (NIR))

 Band(R: Red)

```

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [August 8, 2025, 12:18pm UTC](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054/40 "2025-08-08T12:18:09Z")

</div>

The GDSJL book is finally finished 🎉

> [@\[NEW BOOK\] Geospatial Data Science with Julia](https://discourse.julialang.org/t/new-book-geospatial-data-science-with-julia/103364/14):
>
> Last but not least, [13&nbsp; Agricultural fields – Geospatial Data Science with Julia](https://juliaearth.github.io/geospatial-data-science-with-julia/13-agriculture.html) is available with a practical application in agriculture. This chapter covers very common tasks with satellite images, including the calculation of spectral indices and extraction of polygonal areas for geometric measurements. The book is 100% finished now tada Thank you all for the support and for sticking together juliaheartpulsing Please share the book with your colleagues if you haven’t done it already. F…

[Previous page](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054.md?page=1)

[Next page](https://discourse.julialang.org/t/ann-geostats-jl-geospatial-data-science-and-geostatistical-modeling-in-julia/101054.md?page=3)
