An extensible framework for high-performance geostatistics in Julia.

Build Status Stable Documentation Latest Documentation License File


Gitter Zulip


In many fields of science, such as mining engineering, hydrogeology, petroleum engineering, and environmental sciences, traditional statistical theories fail to provide unbiased estimates of resources due to the presence of spatial correlation. Geostatistics (a.k.a. spatial statistics) is the branch of statistics developed to overcome this limitation. Particularly, it is the branch that takes spatial coordinates of data into account.

GeoStats.jl is an attempt to bring together bleeding-edge research in the geostatistics community into a comprehensive framework for spatial statistics, as well as to empower researchers and practioners with a toolkit for fast assessment of different modeling approaches.

The design of this project is the result of many years developing geostatistical software. I hope that it can serve to promote more collaboration between geostatisticians around the globe and to standardize this incredible science. If you would like to help support the project, please star the repository STARS and share it with your colleagues. If you would like to extend the framework with new geostatistical solvers, please check the Developer guide.

For a guided tour, please watch our JuliaCon2021 talk:


  title={GeoStats.jl – High-performance geostatistics in Julia},
  author={Hoffimann, Júlio},
  journal={Journal of Open Source Software},
  publisher={The Open Journal},


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

] add GeoStats


A set of Pluto notebooks demonstrating the current functionality of the project is available in GeoStatsTutorials with an accompanying series of videos:

Quick example

Below is a quick preview of the high-level API:

using GeoStats
using Plots

# list of properties with coordinates
props = (Z=[1.,0.,1.],)
coord = [(25.,25.), (50.,75.), (75.,50.)]

# georeference data
𝒟 = georef(props, coord)

# estimation domain
𝒢 = CartesianGrid(100, 100)

# estimation problem
problem = EstimationProblem(𝒟, 𝒢, :Z)

# choose a solver from the list of solvers
solver = Kriging(
  :Z => (variogram=GaussianVariogram(range=35.),)

# solve the problem
solution = solve(problem, solver)

# plot the solution
contourf(solution, clabels=true)

For a more detailed example, please consult the Basic workflow section of the documentation.

Project organization

The project is split into various packages:

GeoStats.jlMain package reexporting full stack of packages for geostatistics.
Variography.jlVariogram estimation and modeling, and related tools.
KrigingEstimators.jlHigh-performance implementations of Kriging estimators.
PointPatterns.jlSpatial point pattern analysis and synthesis.
GeoClustering.jlGeostatistical clustering (a.k.a. domaining).
GeoEstimation.jlBuilt-in solvers for geostatistical estimation.
GeoSimulation.jlBuilt-in solvers for geostatistical simulation.
GeoLearning.jlBuilt-in solvers for geostatistical learning.
GeoStatsImages.jlTraining images for multiple-point simulation.
GeoStatsBase.jlBase package containing core functionality.

The main GeoStats.jl package reexports the full stack of packages for high-performance geostatistics in Julia. Other packages like GeoStatsImages.jl can be installed for additional functionality. Besides the packages above, the project is extended via solver packages. These solvers are implemented independently of the main package for different geostatistical problems.