# GeoStats.jl

An extensible framework for high-performance geostatistics in Julia.

## Overview

In many fields of science, such as mining engineering, hydrogeology, petroleum engineering, and environmental sciences, traditional statistical methods fail to provide unbiased estimates of resources due to the presence of geospatial correlation. Geostatistics (a.k.a. geospatial statistics) is the branch of statistics developed to overcome this limitation. Particularly, it is the branch that takes geospatial 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 geospatial modeling, 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 field of research. If you would like to help support the project, please star the repository and share it with your colleagues. If you would like to extend the framework with new geostatistical solvers, please check the Developer guide.

### Citing

If you find this project useful in your work, please consider citing it:

@ARTICLE{Hoffimann2018,
title={GeoStats.jl – High-performance geostatistics in Julia},
author={Hoffimann, Júlio},
journal={Journal of Open Source Software},
publisher={The Open Journal},
volume={3},
pages={692},
number={24},
ISSN={2475-9066},
DOI={10.21105/joss.00692},
url={https://dx.doi.org/10.21105/joss.00692},
year={2018},
month={Apr}
}

We ❤ to see our list of publications growing.

## Installation

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

] add GeoStats

## Tutorials

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

# attribute table
table = (Z=[1.,0.,1.],)

# coordinates for each row
coord = [(25.,25.), (50.,75.), (75.,50.)]

# georeference data
𝒟 = georef(table, 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:

PackageDescription
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.jlGeospatial 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.
GeoStatsBase.jlBase package containing core definitions.

The main GeoStats.jl package reexports the full stack of packages for high-performance geostatistics in Julia. Other packages can be installed separately for additional functionality:

PackageDescription
GeoStatsImages.jlTraining images for multiple-point simulation.
GeoTables.jl(Down)load geospatial tables in various formats.
DrillHoles.jlDesurvey/composite drillhole data.