[ANN] GeoStats.jl v0.18

GeoStats.jl v0.18 includes better support for nested spatial correlation and geometric anisotropy.

Given spatial correlation functions, a nested correlation can be obtained via a linear model:

``````julia> γ₁ = GaussianVariogram(range=2.0, sill=3.0)
GaussianVariogram{Float64,Distances.Euclidean}
range: Float64 2.0
sill: Float64 3.0
nugget: Float64 0.0
distance: Distances.Euclidean

julia> γ₂ = ExponentialVariogram()
ExponentialVariogram{Float64,Distances.Euclidean}
range: Float64 1.0
sill: Float64 1.0
nugget: Float64 0.0
distance: Distances.Euclidean

julia> γ₁ + 2γ₂
NestedVariogram{2}
structures
└─GaussianVariogram(range=2.0, sill=3.0, nugget=0.0)
└─ExponentialVariogram(range=1.0, sill=1.0, nugget=0.0)
coefficients
└─1
└─2
``````

In the multivariate case, the coefficients can be matrices, thus producing a linear model of coregionalization (LMC):

``````julia> [1.0 0.5; 0.5 2.0] * γ₁ + [3.0 0.1; 0.1 3.0] * γ₂
NestedVariogram{2}
structures
└─GaussianVariogram(range=2.0, sill=3.0, nugget=0.0)
└─ExponentialVariogram(range=1.0, sill=1.0, nugget=0.0)
coefficients
└─[1.0 0.5; 0.5 2.0]
└─[3.0 0.1; 0.1 3.0]
``````

Geometric anisotropy can be produced with the `aniso2distance` helper function, which now includes the rotation conventions of major commercial software (e.g. Datamine, Leapfrog):

``````help?> aniso2distance
search: aniso2distance

aniso2distance(semiaxes, angles; convention=:TaitBryanExtr)

A distance defined by an ellipsoid with given semiaxes and rotation angles.

•    For 2D ellipsoids, there are two semiaxes and one rotation angle.

•    For 3D ellipsoids, there are three semiaxes and three rotation angles.

Conventions
=============

Different rotation conventions can be passed via the convention option:

•    :TaitBryanExtr => Extrinsic right-handed rotation by the ZXY axes

•    :TaitBryanIntr => Intrinsic right-handed rotation by the ZXY axes

•    :EulerExtr => Extrinsic right-handed rotation by the ZXZ axes

•    :EulerIntr => Intrinsic right-handed rotation by the ZXZ axes

•    :GSLIB => GSLIB software rotation convention

•    :Leapfrog => LeapFrog software rotation convention

•    :Datamine => Datamine software rotation convention (fixed to ZXZ axes)

Tait-Bryan and Euler conventions expect angles in radians. The other conventions expect them in degrees.

Default convention is :TaitBryanExtr.

Examples
==========

2D ellipsoid making 45ᵒ with the horizontal axis:

julia> aniso2distance([1.0,0.5], [π/2])

3D ellipsoid rotated by 45ᵒ in the xy plane:

julia> aniso2distance([1.0,0.5,0.5], [π/2,0.0,0.0])
``````
6 Likes