Working with lat-lon random fields
%matplotlib widget import matplotlib.pyplot as plt plt.ioff() # turn of warnings import warnings warnings.filterwarnings('ignore')
In this example, we demonstrate how to generate a random field on geographical coordinates.
First we setup a model, with
latlon=True, to get the associated
In addition, we will use the earth radius provided by
to have a meaningful length scale in km.
To generate the field, we simply pass
(lat, lon) as the position tuple
import gstools as gs model = gs.Gaussian(latlon=True, var=1, len_scale=777, rescale=gs.EARTH_RADIUS) lat = lon = range(-80, 81) srf = gs.SRF(model, seed=1234) field = srf.structured((lat, lon)) srf.plot()
This was easy as always! Now we can use this field to estimate the empirical
variogram in order to prove, that the generated field has the correct
vario_estimate routine also provides a
latlon switch to
indicate, that the given field is defined on geographical variables.
As we will see, everthing went well... phew!
bin_edges = [0.01 * i for i in range(30)] bin_center, emp_vario = gs.vario_estimate( (lat, lon), field, bin_edges, latlon=True, mesh_type="structured", sampling_size=2000, sampling_seed=12345, ) ax = model.plot("vario_yadrenko", x_max=max(bin_center)) model.fit_variogram(bin_center, emp_vario, nugget=False) model.plot("vario_yadrenko", ax=ax, label="fitted", x_max=max(bin_center)) ax.scatter(bin_center, emp_vario, color="k") print(model)
Note, that the estimated variogram coincides with the yadrenko variogram, which means it depends on the great-circle distance given in radians.
Keep that in mind when defining bins: The range is at most , which corresponds to the half globe.