An extensible framework for high-performance geostatistics in Julia

geo, geospatial, geostatistical-learning, geostatistics, spatial, spatial-data, spatial-statistics, statistics, variography



High-performance implementations of geostatistical algorithms for the Julia programming language.

Project goals

  • Design a comprehensive framework for geostatistics (or spatial statistics) in a modern programming language.
  • Address the lack of a platform for scientific comparison of different geostatistical algorithms in the literature.
  • Exploit modern hardware aggressively, including GPUs and computer clusters.
  • Educate people outside of the field about the existence of geostatistics.

Related packages

  • GaussianProcesses.jl — Gaussian processes and Simple Kriging are essentially two names for the same concept. The derivation of Kriging estimators, however; does not require distributional assumptions. It is a beautiful coincidence that for multivariate Gaussian distributions, Simple Kriging gives the conditional expectation. Matheron and other important geostatisticians have generalized Gaussian processes to more general random fields with locally-varying mean and for situations where the mean is unknown. GeoStats.jl includes Gaussian processes as a special case as well as other more practical Kriging variants, see the Gaussian processes example.

  • MLKernels.jl — Spatial structure can be represented in many different forms: covariance, variogram, correlogram, etc. Variograms are more general than covariance kernels according to the intrinsically stationary property. This means that there are variogram models with no covariance counterpart. Furthermore, empirical variograms can be easily estimated from the data (in various directions) with an efficient procedure. GeoStats.jl treats variograms as first-class objects, see the Variogram modeling example.

  • Interpolations.jl — Kriging and Spline interpolation have different purposes, yet these two methods are sometimes listed as competing alternatives. Kriging estimation is about minimizing variance (or estimation error), whereas Spline interpolation is about forcedly smooth estimators derived for computer visualization. Kriging is a generalization of Splines in which one has the freedom to customize spatial structure based on data. Besides the estimate itself, Kriging also provides the variance map as a function of knots configuration.


Get the latest stable release with Julia's package manager:


Project organization

The project is split into various packages:

Package Description
GeoStats.jl Main package containing Kriging-based solvers, and other geostatistical tools.
GeoStatsImages.jl Training images for multiple-point geostatistical simulation.
GslibIO.jl Utilities to read/write extended GSLIB files.
GeoStatsBase.jl Base package for developers.

The main package (i.e. GeoStats.jl) is self-contained, and provides high-performance Kriging-based estimation/simulation algorithms over arbitrary domains. Other packages can be installed from the list above for additional functionality.

Problems and solvers

Solvers for geostatistical problems can be installed separately depending on the application. They are automatically integrated with GeoStats.jl thanks to Julia's multiple dispatch features.

Estimation problems

Solver Description References
Kriging Polyalgorithm Kriging (SK, OK, UK, EDK) Matheron 1971, Journel 1978

Simulation problems

All simulation solvers generate realizations in parallel unless otherwise noted.

Solver Description References
SeqGaussSim Sequential Gaussian simulation Deutsch 1997, Olea 1999

If you are a developer and your solver is not listed above, please open a pull request and we will be happy to review and add it to the list. Please check GeoStatsBase.jl for instructions on how to write your own solvers.


  • STABLEmost recently tagged version of the documentation.
  • LATESTin-development version of the documentation.


A set of Jupyter notebooks demonstrating the current functionality of the package is available in the examples folder. These notebooks are distributed with GeoStats.jl and can be launched locally with GeoStats.examples().

Below is a quick preview of the high-level API, for the full example, please check this notebook.

using GeoStats
using Plots

# data.csv:
#    x,    y,       station, precipitation
# 25.0, 25.0,     palo alto,           1.0
# 50.0, 75.0,  redwood city,           0.0
# 75.0, 50.0, mountain view,           1.0

# read spreadsheet file containing spatial data
geodata = readtable("data.csv", coordnames=[:x,:y])

# define spatial domain (e.g. regular grid, point collection)
grid = RegularGrid{Float64}(100, 100)

# define estimation problem for any data column(s) (e.g. :precipitation)
problem = EstimationProblem(geodata, grid, :precipitation)

# solve the problem with any solver
solution = solve(problem, Kriging())

# plot the solution


Contributing and supporting

Contributions are very welcome, as are feature requests and suggestions. Please open an issue if you encounter any problems. GeoStats.jl was developed as part of academic research. If you would like to help support the project, please star the repository and share it with your colleagues.