diff --git a/dev/404.html b/dev/404.html index 7af0a22c..5848dacb 100644 --- a/dev/404.html +++ b/dev/404.html @@ -9,7 +9,7 @@ - + @@ -19,7 +19,7 @@
- + \ No newline at end of file diff --git a/dev/api.html b/dev/api.html index 1076b8f5..0525c57e 100644 --- a/dev/api.html +++ b/dev/api.html @@ -9,11 +9,11 @@ - + - + - + @@ -21,23 +21,23 @@ -
Skip to content

Index

Reference - Exported functions

Rasters.Rasters Module

source

Rasters.AbstractRaster Type
julia
AbstractRaster <: DimensionalData.AbstractDimArray

Abstract supertype for objects that wrap an array (or location of an array) and metadata about its contents. It may be memory or hold a FileArray, which holds the filename, and is only opened when required.

AbstractRasters inherit from AbstractDimArray from DimensionalData.jl. They can be indexed as regular Julia arrays or with DimensionalData.jl Dimensions. They will plot as a heatmap in Plots.jl with correct coordinates and labels, even after slicing with getindex or view. getindex on a AbstractRaster will always return a memory-backed Raster.

source

Rasters.AbstractRasterSeries Type
julia
AbstractRasterSeries <: DimensionalData.AbstractDimensionalArray

Abstract supertype for high-level DimensionalArray that hold RasterStacks, Rasters, or the paths they can be loaded from. RasterSeries are indexed with dimensions as with a AbstractRaster. This is useful when you have multiple files containing rasters or stacks of rasters spread over dimensions like time and elevation.

As much as possible, implementations should facilitate loading entire directories and detecting the dimensions from metadata.

This allows syntax like below for a series of stacks of arrays:

julia
RasterSeries[Time(Near(DateTime(2001, 1))][:temp][Y(Between(70, 150)), X(Between(-20,20))] |> plot`

RasterSeries is the concrete implementation.

source

Rasters.AbstractRasterStack Type
julia
AbstractRasterStack

Abstract supertype for objects that hold multiple AbstractRasters that share spatial dimensions.

They are NamedTuple-like structures that may either contain NamedTuple of AbstractRasters, string paths that will load AbstractRasters, or a single path that points to a file containing multiple layers, like NetCDF or HDF5. Use and syntax is similar or identical for all cases.

AbstractRasterStack can hold layers that share some or all of their dimensions. They cannot have the same dimension with different length or spatial extent as another layer.

getindex on an AbstractRasterStack generally returns a memory backed standard Raster. raster[:somelayer] |> plot plots the layers array, while raster[:somelayer, X(1:100), Band(2)] |> plot will plot the subset without loading the whole array.

getindex on an AbstractRasterStack with a key returns another stack with getindex applied to all the arrays in the stack.

source

Rasters.Band Type
julia
Band <: Dimension
+    
Skip to content

Index

Reference - Exported functions

Rasters.Rasters Module

source

Rasters.AbstractRaster Type
julia
AbstractRaster <: DimensionalData.AbstractDimArray

Abstract supertype for objects that wrap an array (or location of an array) and metadata about its contents. It may be memory or hold a FileArray, which holds the filename, and is only opened when required.

AbstractRasters inherit from AbstractDimArray from DimensionalData.jl. They can be indexed as regular Julia arrays or with DimensionalData.jl Dimensions. They will plot as a heatmap in Plots.jl with correct coordinates and labels, even after slicing with getindex or view. getindex on a AbstractRaster will always return a memory-backed Raster.

source

Rasters.AbstractRasterSeries Type
julia
AbstractRasterSeries <: DimensionalData.AbstractDimensionalArray

Abstract supertype for high-level DimensionalArray that hold RasterStacks, Rasters, or the paths they can be loaded from. RasterSeries are indexed with dimensions as with a AbstractRaster. This is useful when you have multiple files containing rasters or stacks of rasters spread over dimensions like time and elevation.

As much as possible, implementations should facilitate loading entire directories and detecting the dimensions from metadata.

This allows syntax like below for a series of stacks of arrays:

julia
RasterSeries[Time(Near(DateTime(2001, 1))][:temp][Y(Between(70, 150)), X(Between(-20,20))] |> plot`

RasterSeries is the concrete implementation.

source

Rasters.AbstractRasterStack Type
julia
AbstractRasterStack

Abstract supertype for objects that hold multiple AbstractRasters that share spatial dimensions.

They are NamedTuple-like structures that may either contain NamedTuple of AbstractRasters, string paths that will load AbstractRasters, or a single path that points to a file containing multiple layers, like NetCDF or HDF5. Use and syntax is similar or identical for all cases.

AbstractRasterStack can hold layers that share some or all of their dimensions. They cannot have the same dimension with different length or spatial extent as another layer.

getindex on an AbstractRasterStack generally returns a memory backed standard Raster. raster[:somelayer] |> plot plots the layers array, while raster[:somelayer, X(1:100), Band(2)] |> plot will plot the subset without loading the whole array.

getindex on an AbstractRasterStack with a key returns another stack with getindex applied to all the arrays in the stack.

source

Rasters.Band Type
julia
Band <: Dimension
 
 Band(val=:)

Band Dimension for multi-band rasters.

Example:

julia
banddim = Band(10:10:100)
 # Or
 val = A[Band(1)]
 # Or
-mean(A; dims=Band)

source

Rasters.Mapped Type
julia
Mapped <: AbstractProjected
+mean(A; dims=Band)

source

Rasters.Mapped Type
julia
Mapped <: AbstractProjected
 
 Mapped(order, span, sampling, crs, mappedcrs)
-Mapped(; order=AutoOrder(), span=AutoSpan(), sampling=AutoSampling(), crs=nothing, mappedcrs)

An AbstractSampled Lookup, where the dimension index has been mapped to another projection, usually lat/lon or EPSG(4326). Mapped matches the dimension format commonly used in netcdf files.

Fields and behaviours are identical to Sampled with the addition of crs and mappedcrs fields.

The mapped dimension index will be used as for Sampled, but to save in another format the underlying crs may be used to convert it.

source

Rasters.Projected Type
julia
Projected <: AbstractProjected
+Mapped(; order=AutoOrder(), span=AutoSpan(), sampling=AutoSampling(), crs=nothing, mappedcrs)

An AbstractSampled Lookup, where the dimension index has been mapped to another projection, usually lat/lon or EPSG(4326). Mapped matches the dimension format commonly used in netcdf files.

Fields and behaviours are identical to Sampled with the addition of crs and mappedcrs fields.

The mapped dimension index will be used as for Sampled, but to save in another format the underlying crs may be used to convert it.

source

Rasters.Projected Type
julia
Projected <: AbstractProjected
 
 Projected(order, span, sampling, crs, mappedcrs)
-Projected(; order=AutoOrder(), span=AutoSpan(), sampling=AutoSampling(), crs, mappedcrs=nothing)

An AbstractSampled Lookup with projections attached.

Fields and behaviours are identical to Sampled with the addition of crs and mappedcrs fields.

If both crs and mappedcrs fields contain CRS data (in a GeoFormat wrapper from GeoFormatTypes.jl) the selector inputs and plot axes will be converted from and to the specified mappedcrs projection automatically. A common use case would be to pass mappedcrs=EPSG(4326) to the constructor when loading eg. a GDALarray:

julia
GDALarray(filename; mappedcrs=EPSG(4326))

The underlying crs will be detected by GDAL.

If mappedcrs is not supplied (ie. mappedcrs=nothing), the base index will be shown on plots, and selectors will need to use whatever format it is in.

source

Rasters.Raster Type
julia
Raster <: AbstractRaster
+Projected(; order=AutoOrder(), span=AutoSpan(), sampling=AutoSampling(), crs, mappedcrs=nothing)

An AbstractSampled Lookup with projections attached.

Fields and behaviours are identical to Sampled with the addition of crs and mappedcrs fields.

If both crs and mappedcrs fields contain CRS data (in a GeoFormat wrapper from GeoFormatTypes.jl) the selector inputs and plot axes will be converted from and to the specified mappedcrs projection automatically. A common use case would be to pass mappedcrs=EPSG(4326) to the constructor when loading eg. a GDALarray:

julia
GDALarray(filename; mappedcrs=EPSG(4326))

The underlying crs will be detected by GDAL.

If mappedcrs is not supplied (ie. mappedcrs=nothing), the base index will be shown on plots, and selectors will need to use whatever format it is in.

source

Rasters.Raster Type
julia
Raster <: AbstractRaster
 
 Raster(filepath::String; kw...)
 Raster(A::AbstractDimArray; kw...)
-Raster(A::AbstractArray, dims; kw...)

A generic AbstractRaster for spatial/raster array data. It can hold either memory-backed arrays or, if lazy=true, a FileArray, which stores the String path to an unopened file.

If lazy=true, the file will only be opened lazily when it is indexed with getindex or when read(A) is called. Broadcasting, taking a view, reversing, and most other methods will not load data from disk; they will be applied later, lazily.

Arguments

  • dims: Tuple of Dimensions needed when an AbstractArray is used.

Keywords

  • name: a Symbol name for a Raster, which will also retrieve the a named layer if Raster is used on a multi-layered file like a NetCDF.

  • group: the group in the dataset where name can be found. Only needed for nested datasets. A String or Symbol will select a single group. Pairs can also used to access groups at any nested depth, i.e group=:group1 => :group2 => :group3.

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file.

  • metadata: Dict or Metadata object for the array, or NoMetadata().

  • crs: the coordinate reference system of the objects XDim/YDim dimensions. Only set this if you know the detected crs is incorrect, or it is not present in the file. The crs is expected to be a GeoFormatTypes.jl CRS or Mixed mode GeoFormat object, like EPSG(4326).

  • mappedcrs: the mapped coordinate reference system of the objects XDim/YDim dimensions. for Mapped lookups these are the actual values of the index. For Projected lookups this can be used to index in eg. EPSG(4326) lat/lon values, having it converted automatically. Only set this if the detected mappedcrs in incorrect, or the file does not have a mappedcrs, e.g. a tiff. The mappedcrs is expected to be a GeoFormatTypes.jl CRS or Mixed mode GeoFormat type.

  • refdims: Tuple of position Dimensions the array was sliced from, defaulting to (). Usually not needed.

When a filepath String is used:

  • dropband: drop single band dimensions when creating stacks from filenames. true by default.

  • lazy: A Bool specifying if to load data lazily from disk. false by default.

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

  • scaled: apply scale and offset as x * scale + offset where scale and/or offset are found in file metadata. true by default. This is common where data has been convert to e.g. UInt8 to save disk space. To ignore scale and offset metadata, use scaled=false. Note 1: If scale and offset are 1.0 and 0.0 they will be ignored and the original type will be used even when scaled=true. This is because these values may be fallback defaults and we do not want to convert every Real array to larger Float64 values. Note 2: raw=true will ignore scaled and missingval and return the raw values.

  • raw: turn of all scaling and masking and load the raw values from disk. false by default. If true, scaled will be set to false and missingval will to the existing missing value in the file. A warning will be printed if scaled or missingval are manually set to another value.

When A is an AbstractDimArray:

  • data: can replace the data in an existing AbstractRaster

source

Rasters.RasterSeries Type
julia
RasterSeries <: AbstractRasterSeries
+Raster(A::AbstractArray, dims; kw...)

A generic AbstractRaster for spatial/raster array data. It can hold either memory-backed arrays or, if lazy=true, a FileArray, which stores the String path to an unopened file.

If lazy=true, the file will only be opened lazily when it is indexed with getindex or when read(A) is called. Broadcasting, taking a view, reversing, and most other methods will not load data from disk; they will be applied later, lazily.

Arguments

  • dims: Tuple of Dimensions needed when an AbstractArray is used.

Keywords

  • name: a Symbol name for a Raster, which will also retrieve the a named layer if Raster is used on a multi-layered file like a NetCDF.

  • group: the group in the dataset where name can be found. Only needed for nested datasets. A String or Symbol will select a single group. Pairs can also used to access groups at any nested depth, i.e group=:group1 => :group2 => :group3.

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file.

  • metadata: Dict or Metadata object for the array, or NoMetadata().

  • crs: the coordinate reference system of the objects XDim/YDim dimensions. Only set this if you know the detected crs is incorrect, or it is not present in the file. The crs is expected to be a GeoFormatTypes.jl CRS or Mixed mode GeoFormat object, like EPSG(4326).

  • mappedcrs: the mapped coordinate reference system of the objects XDim/YDim dimensions. for Mapped lookups these are the actual values of the index. For Projected lookups this can be used to index in eg. EPSG(4326) lat/lon values, having it converted automatically. Only set this if the detected mappedcrs in incorrect, or the file does not have a mappedcrs, e.g. a tiff. The mappedcrs is expected to be a GeoFormatTypes.jl CRS or Mixed mode GeoFormat type.

  • refdims: Tuple of position Dimensions the array was sliced from, defaulting to (). Usually not needed.

When a filepath String is used:

  • dropband: drop single band dimensions when creating stacks from filenames. true by default.

  • lazy: A Bool specifying if to load data lazily from disk. false by default.

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

  • scaled: apply scale and offset as x * scale + offset where scale and/or offset are found in file metadata. true by default. This is common where data has been convert to e.g. UInt8 to save disk space. To ignore scale and offset metadata, use scaled=false. Note 1: If scale and offset are 1.0 and 0.0 they will be ignored and the original type will be used even when scaled=true. This is because these values may be fallback defaults and we do not want to convert every Real array to larger Float64 values. Note 2: raw=true will ignore scaled and missingval and return the raw values.

  • raw: turn of all scaling and masking and load the raw values from disk. false by default. If true, scaled will be set to false and missingval will to the existing missing value in the file. A warning will be printed if scaled or missingval are manually set to another value.

When A is an AbstractDimArray:

  • data: can replace the data in an existing AbstractRaster

source

Rasters.RasterSeries Type
julia
RasterSeries <: AbstractRasterSeries
 
 RasterSeries(rasters::AbstractArray{<:AbstractRaster}, dims; [refdims])
 RasterSeries(stacks::AbstractArray{<:AbstractRasterStack}, dims; [refdims]) 
@@ -50,7 +50,7 @@
 2-element RasterSeries{Raster,1} with dimensions: 
   Ti Sampled{DateTime} DateTime[DateTime("2001-01-01T00:00:00"), DateTime("2002-01-01T00:00:00")] ForwardOrdered Irregular Points

The DateTime suffix is parsed from the filenames. Using Ti(Int) would try to parse integers instead.

Just using the directory will also work, unless there are other files mixed in it:

julia
julia> ser = RasterSeries("series_dir", Ti(DateTime))
 2-element RasterSeries{Raster,1} with dimensions: 
-  Ti Sampled{DateTime} DateTime[DateTime("2001-01-01T00:00:00"), DateTime("2002-01-01T00:00:00")] ForwardOrdered Irregular Points

Arguments

  • dims: series dimension/s.

Keywords

When loading a series from a Vector of String paths or a single String path:

  • child: constructor of child objects for use when filenames are passed in, can be Raster or RasterStack. Defaults to Raster.

  • duplicate_first::Bool: wether to duplicate the dimensions and metadata of the first file with all other files. This can save load time with a large series where dimensions are identical. false by default.

  • lazy: A Bool specifying if to load data lazily from disk. false by default.

  • kw: keywords passed to the child constructor Raster or RasterStack.

When loading a series from a single String path:

  • separator: separator used to split lookup elements from the rest of a filename. '_' by default.

Others:

  • refdims: existing reference dimension/s, normally not required.

source

Rasters.RasterStack Type
julia
RasterStack <: AbstrackRasterStack
+  Ti Sampled{DateTime} DateTime[DateTime("2001-01-01T00:00:00"), DateTime("2002-01-01T00:00:00")] ForwardOrdered Irregular Points

Arguments

  • dims: series dimension/s.

Keywords

When loading a series from a Vector of String paths or a single String path:

  • child: constructor of child objects for use when filenames are passed in, can be Raster or RasterStack. Defaults to Raster.

  • duplicate_first::Bool: wether to duplicate the dimensions and metadata of the first file with all other files. This can save load time with a large series where dimensions are identical. false by default.

  • lazy: A Bool specifying if to load data lazily from disk. false by default.

  • kw: keywords passed to the child constructor Raster or RasterStack.

When loading a series from a single String path:

  • separator: separator used to split lookup elements from the rest of a filename. '_' by default.

Others:

  • refdims: existing reference dimension/s, normally not required.

source

Rasters.RasterStack Type
julia
RasterStack <: AbstrackRasterStack
 
 RasterStack(data...; name, kw...)
 RasterStack(data::Union{Vector,Tuple}; name, kw...)
@@ -59,14 +59,14 @@
 RasterStack(data::Raster; layersfrom=Band, kw...)
 RasterStack(filepath::AbstractString; kw...)

Load a file path or a NamedTuple of paths as a RasterStack, or convert arguments, a Vector or NamedTuple of Rasters to RasterStack.

Arguments

  • data: A NamedTuple of Rasters or String, or a Vector, Tuple or splatted arguments of Raster. The latter options must pass a name keyword argument.

  • filepath: A file (such as netcdf or tif) to be loaded as a stack, or a directory path containing multiple files.

Keywords

  • name: Used as stack layer names when a Tuple, Vector or splat of Raster is passed in. Has no effect when NameTuple is used - the NamedTuple keys are the layer names.

  • group: the group in the dataset where name can be found. Only needed for nested datasets. A String or Symbol will select a single group. Pairs can also used to access groups at any nested depth, i.e group=:group1 => :group2 => :group3.

  • metadata: A Dict or DimensionalData.Metadata object.

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file. For RasterStack a NamedTuple can also be passed if layers should have different missingval.

  • crs: the coordinate reference system of the objects XDim/YDim dimensions. Only set this if you know the detected crs is incorrect, or it is not present in the file. The crs is expected to be a GeoFormatTypes.jl CRS or Mixed mode GeoFormat object, like EPSG(4326).

  • mappedcrs: the mapped coordinate reference system of the objects XDim/YDim dimensions. for Mapped lookups these are the actual values of the index. For Projected lookups this can be used to index in eg. EPSG(4326) lat/lon values, having it converted automatically. Only set this if the detected mappedcrs in incorrect, or the file does not have a mappedcrs, e.g. a tiff. The mappedcrs is expected to be a GeoFormatTypes.jl CRS or Mixed mode GeoFormat type.

  • refdims: Tuple of Dimension that the stack was sliced from.

For when one or multiple filepaths are used:

  • dropband: drop single band dimensions when creating stacks from filenames. true by default.

  • lazy: A Bool specifying if to load data lazily from disk. false by default.

  • raw: turn of all scaling and masking and load the raw values from disk. false by default. If true, scaled will be set to false and missingval will to the existing missing value in the file. A warning will be printed if scaled or missingval are manually set to another value.

  • scaled: apply scale and offset as x * scale + offset where scale and/or offset are found in file metadata. true by default. This is common where data has been convert to e.g. UInt8 to save disk space. To ignore scale and offset metadata, use scaled=false. Note 1: If scale and offset are 1.0 and 0.0 they will be ignored and the original type will be used even when scaled=true. This is because these values may be fallback defaults and we do not want to convert every Real array to larger Float64 values. Note 2: raw=true will ignore scaled and missingval and return the raw values.

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

For when a single Raster is used:

  • layersfrom: Dimension to source stack layers from if the file is not already multi-layered. nothing is default, so that a single RasterStack(raster) is a single layered stack. RasterStack(raster; layersfrom=Band) will use the bands as layers.
julia
files = (temp="temp.tif", pressure="pressure.tif", relhum="relhum.tif")
 stack = RasterStack(files; mappedcrs=EPSG(4326))
-stack[:relhum][Lat(Contains(-37), Lon(Contains(144))

source

DimensionalData.modify Method
julia
modify(f, series::AbstractRasterSeries)

Apply function f to the data of the child object. If the child is an AbstractRasterStack the function will be passed on to its child AbstractRasters.

f must return an identically sized array.

This method triggers a complete rebuild of all objects, and disk based objects will be transferred to memory.

An example of the usefulnesss of this is for swapping out array backend for an entire series to CuArray from CUDA.jl to copy data to a GPU.

source

GeoInterface.crs Method
julia
crs(x::Raster)

Get the projected coordinate reference system of a Y or X Dimension, or of the Y/X dims of an AbstractRaster.

For Mapped lookup this may be nothing as there may be no projected coordinate reference system at all. See setcrs to set it manually.

source

Rasters.aggregate Function
julia
aggregate(method, object, scale; kw...)

Aggregate a Raster, or all arrays in a RasterStack or RasterSeries, by scale using method.

Arguments

  • method: a function such as mean or sum that can combine the value of multiple cells to generate the aggregated cell, or a Locus like Start() or Center() that species where to sample from in the interval.

  • object: Object to aggregate, like AbstractRasterSeries, AbstractStack, AbstractRaster or Dimension.

  • scale: the aggregation factor, which can be an Int, a Tuple of Int for each dimension, or a : colon to mean the whole dimension. You can also use any Dimension, Selector or Int combination you can usually use in getindex. Tuple of Pair or NamedTuple where keys are dimension names will also work. Using a Selector will determine the scale by the distance from the start of the index. Selectors will find the first offset and repeat the same aggregation size for the rest.

When the aggregation scale of is larger than the array axis, the length of the axis is used.

Keywords

  • skipmissing: if true, any missingval will be skipped during aggregation, so that only areas of all missing values will be aggregated to missingval(dst). If false, aggregated areas containing one or more missingval will be assigned missingval. false by default. skipmissing behaviour is independent of function f, which is only applied to completely non-missing values.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

  • progress: show a progress bar, true by default, false to hide.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • vebose: whether to print messages about potential problems. true by default.

Example

julia
using Rasters, RasterDataSources, Statistics, Plots
+stack[:relhum][Lat(Contains(-37), Lon(Contains(144))

source

DimensionalData.modify Method
julia
modify(f, series::AbstractRasterSeries)

Apply function f to the data of the child object. If the child is an AbstractRasterStack the function will be passed on to its child AbstractRasters.

f must return an identically sized array.

This method triggers a complete rebuild of all objects, and disk based objects will be transferred to memory.

An example of the usefulnesss of this is for swapping out array backend for an entire series to CuArray from CUDA.jl to copy data to a GPU.

source

GeoInterface.crs Method
julia
crs(x::Raster)

Get the projected coordinate reference system of a Y or X Dimension, or of the Y/X dims of an AbstractRaster.

For Mapped lookup this may be nothing as there may be no projected coordinate reference system at all. See setcrs to set it manually.

source

Rasters.aggregate Function
julia
aggregate(method, object, scale; kw...)

Aggregate a Raster, or all arrays in a RasterStack or RasterSeries, by scale using method.

Arguments

  • method: a function such as mean or sum that can combine the value of multiple cells to generate the aggregated cell, or a Locus like Start() or Center() that species where to sample from in the interval.

  • object: Object to aggregate, like AbstractRasterSeries, AbstractStack, AbstractRaster or Dimension.

  • scale: the aggregation factor, which can be an Int, a Tuple of Int for each dimension, or a : colon to mean the whole dimension. You can also use any Dimension, Selector or Int combination you can usually use in getindex. Tuple of Pair or NamedTuple where keys are dimension names will also work. Using a Selector will determine the scale by the distance from the start of the index. Selectors will find the first offset and repeat the same aggregation size for the rest.

When the aggregation scale of is larger than the array axis, the length of the axis is used.

Keywords

  • skipmissing: if true, any missingval will be skipped during aggregation, so that only areas of all missing values will be aggregated to missingval(dst). If false, aggregated areas containing one or more missingval will be assigned missingval. false by default. skipmissing behaviour is independent of function f, which is only applied to completely non-missing values.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

  • progress: show a progress bar, true by default, false to hide.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • vebose: whether to print messages about potential problems. true by default.

Example

julia
using Rasters, RasterDataSources, Statistics, Plots
 import ArchGDAL
 using Rasters: Center
 st = RasterStack(WorldClim{Climate}; month=1)
 ag = aggregate(Center(), st, (Y(20), X(20)); skipmissingval=true, progress=false)
 plot(ag)
 savefig("build/aggregate_example.png"); nothing
-# output

Note: currently it is faster to aggregate over memory-backed arrays. Use read on src before use where required.

source

Rasters.aggregate! Method
julia
aggregate!(method, dst::AbstractRaster, src::AbstractRaster, scale; skipmissing=false)

Aggregate raster src to raster dst by scale, using method.

Arguments

  • method: a function such as mean or sum that can combine the value of multiple cells to generate the aggregated cell, or a Locus like Start() or Center() that species where to sample from in the interval.

  • scale: the aggregation factor, which can be an Int, a Tuple of Int for each dimension, or a : colon to mean the whole dimension. You can also use any Dimension, Selector or Int combination you can usually use in getindex. Tuple of Pair or NamedTuple where keys are dimension names will also work. Using a Selector will determine the scale by the distance from the start of the index. Selectors will find the first offset and repeat the same aggregation size for the rest.

When the aggregation scale of is larger than the array axis, the length of the axis is used.

Keywords

  • skipmissing: if true, any missingval will be skipped during aggregation, so that only areas of all missing values will be aggregated to missingval(dst). If false, aggregated areas containing one or more missingval will be assigned missingval. false by default. skipmissing behaviour is independent of function f, which is only applied to completely non-missing values.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

Note: currently it is much faster to aggregate over memory-backed source arrays. Use read on src before use where required.

source

Rasters.boolmask Function
julia
boolmask(obj::Raster; [missingval])
+# output

Note: currently it is faster to aggregate over memory-backed arrays. Use read on src before use where required.

source

Rasters.aggregate! Method
julia
aggregate!(method, dst::AbstractRaster, src::AbstractRaster, scale; skipmissing=false)

Aggregate raster src to raster dst by scale, using method.

Arguments

  • method: a function such as mean or sum that can combine the value of multiple cells to generate the aggregated cell, or a Locus like Start() or Center() that species where to sample from in the interval.

  • scale: the aggregation factor, which can be an Int, a Tuple of Int for each dimension, or a : colon to mean the whole dimension. You can also use any Dimension, Selector or Int combination you can usually use in getindex. Tuple of Pair or NamedTuple where keys are dimension names will also work. Using a Selector will determine the scale by the distance from the start of the index. Selectors will find the first offset and repeat the same aggregation size for the rest.

When the aggregation scale of is larger than the array axis, the length of the axis is used.

Keywords

  • skipmissing: if true, any missingval will be skipped during aggregation, so that only areas of all missing values will be aggregated to missingval(dst). If false, aggregated areas containing one or more missingval will be assigned missingval. false by default. skipmissing behaviour is independent of function f, which is only applied to completely non-missing values.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

Note: currently it is much faster to aggregate over memory-backed source arrays. Use read on src before use where required.

source

Rasters.boolmask Function
julia
boolmask(obj::Raster; [missingval])
 boolmask(obj; [to, res, size])
 boolmask(obj::RasterStack; alllayers=true, kw...)

Create a mask array of Bool values, from another Raster. AbstractRasterStack or AbstractRasterSeries are also accepted.

The array returned from calling boolmask on a AbstractRaster is a Raster with the same dimensions as the original array and a missingval of false.

Arguments

  • a Raster or one or multiple geometries. Geometries can be a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Raster / RasterStack Keywords

  • invert: invert the mask, so that areas no missing in with are masked, and areas missing in with are masked.

  • missingval: The missing value of the source array, with default missingval(raster).

Keywords

  • alllayers: if true a mask is taken for all layers, otherwise only the first layer is used. Defaults to true

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • progress: show a progress bar, true by default, false to hide.

For tabular data, feature collections and other iterables

  • collapse: if true, collapse all geometry masks into a single mask. Otherwise return a Raster with an additional geometry dimension, so that each slice along this axis is the mask of the geometry opbject of each row of the table, feature in the feature collection, or just each geometry in the iterable.

Example

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates
 wc = Raster(WorldClim{Climate}, :prec; month=1)
@@ -74,7 +74,7 @@
 
 savefig("build/boolmask_example.png"); nothing
 
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.cellarea Method
julia
cellarea([method], x)

Gives the approximate area of each gridcell of x. By assuming the earth is a sphere, it approximates the true size to about 0.1%, depending on latitude.

Run using ArchGDAL or using Proj to make this method fully available.

  • method: You can specify whether you want to compute the area in the plane of your projection Planar() or on a sphere of some radius Spherical(; radius=...)(the default).

  • Spherical will compute cell area on the sphere, by transforming all points back to long-lat. You can specify the radius by the radius keyword argument here. By default, this is 6371008.8, the mean radius of the Earth.

  • Planar will compute cell area in the plane of the CRS you have chosen. Be warned that this will likely be incorrect for non-equal-area projections.

Returns a Raster with the same x and y dimensions as the input, where each value in the raster encodes the area of the cell (in meters by default).

Example

julia
using Rasters, Proj, Rasters.Lookups
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.cellarea Method
julia
cellarea([method], x)

Gives the approximate area of each gridcell of x. By assuming the earth is a sphere, it approximates the true size to about 0.1%, depending on latitude.

Run using ArchGDAL or using Proj to make this method fully available.

  • method: You can specify whether you want to compute the area in the plane of your projection Planar() or on a sphere of some radius Spherical(; radius=...)(the default).

  • Spherical will compute cell area on the sphere, by transforming all points back to long-lat. You can specify the radius by the radius keyword argument here. By default, this is 6371008.8, the mean radius of the Earth.

  • Planar will compute cell area in the plane of the CRS you have chosen. Be warned that this will likely be incorrect for non-equal-area projections.

Returns a Raster with the same x and y dimensions as the input, where each value in the raster encodes the area of the cell (in meters by default).

Example

julia
using Rasters, Proj, Rasters.Lookups
 xdim = X(Projected(90.0:10.0:120; sampling=Intervals(Start()), crs=EPSG(4326)))
 ydim = Y(Projected(0.0:10.0:50; sampling=Intervals(Start()), crs=EPSG(4326)))
 myraster = rand(xdim, ydim)
@@ -95,7 +95,7 @@
   90.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0
  100.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0
  110.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0
- 120.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.classify Function
julia
classify(x, pairs; lower=(>=), upper=(<), others=nothing)
+ 120.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.classify Function
julia
classify(x, pairs; lower=(>=), upper=(<), others=nothing)
 classify(x, pairs...; lower, upper, others)

Create a new array with values in x classified by the values in pairs.

pairs can hold tuples fo values (2, 3), a Fix2 function e.g. <=(1), a Tuple of Fix2 e.g. (>=(4), <(7)), or an IntervalSets.jl interval, e.g. 3..9 or OpenInterval(10, 12). pairs can also be a n * 3 matrix where each row is lower bounds, upper bounds, replacement.

If tuples or a Matrix are used, the lower and upper keywords define how the lower and upper boundaries are chosen.

If others is set other values not covered in pairs will be set to that values.

Arguments

  • x: a Raster or RasterStack

  • pairs: each pair contains a value and a replacement, a tuple of lower and upper range and a replacement, or a Tuple of Fix2 like (>(x), <(y).

Keywords

  • lower: Which comparison (< or <=) to use for lower values, if Fix2 are not used.

  • upper: Which comparison (> or >=) to use for upper values, if Fix2 are not used.

  • others: A value to assign to all values not included in pairs. Passing nothing (the default) will leave them unchanged.

Example

julia
using Rasters, RasterDataSources, ArchGDAL, Plots
 A = Raster(WorldClim{Climate}, :tavg; month=1)
 classes = <=(15) => 10,
@@ -107,7 +107,7 @@
 
 savefig("build/classify_example.png"); nothing
 
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.classify! Method
julia
classify!(x, pairs...; lower, upper, others)
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.classify! Method
julia
classify!(x, pairs...; lower, upper, others)
 classify!(x, pairs; lower, upper, others)

Classify the values of x in-place, by the values in pairs.

If Fix2 is not used, the lower and upper keywords

If others is set other values not covered in pairs will be set to that values.

Arguments

  • x: a Raster or RasterStack

  • pairs: each pair contains a value and a replacement, a tuple of lower and upper range and a replacement, or a Tuple of Fix2 like (>(x), <(y).

Keywords

  • lower: Which comparison (< or <=) to use for lower values, if Fix2 are not used.

  • upper: Which comparison (> or >=) to use for upper values, if Fix2 are not used.

  • others: A value to assign to all values not included in pairs. Passing nothing (the default) will leave them unchanged.

Example

classify! to disk, with key steps:

  • copying a tempory file so we don't write over the RasterDataSources.jl version.

  • use open with write=true to open the file with disk-write permissions.

  • use Float32 like 10.0f0 for all our replacement values and other, because the file is stored as Float32. Attempting to write some other type will fail.

julia
using Rasters, RasterDataSources, ArchGDAL, Plots
 # Download and copy the file
 filename = getraster(WorldClim{Climate}, :tavg; month=6)
@@ -127,8 +127,8 @@
 
 savefig("build/classify_bang_example.png"); nothing
 
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.combine Method
julia
combine(A::AbstracRasterSeries; [dims], [lazy]) => Raster

Combine a RasterSeries along some dimension/s, creating a new Raster or RasterStack, depending on the contents of the series.

If dims are passed, only the specified dimensions will be combined with a RasterSeries returned, unless dims is all the dims in the series.

If lazy, concatenate lazily. The default is to concatenate lazily for lazy Rasters and eagerly otherwise.

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.convertlookup Method
julia
convertlookup(dstlookup::Type{<:Lookup}, x)

Convert the dimension lookup between Projected and Mapped. Other dimension lookups pass through unchanged.

This is used to e.g. save a netcdf file to GeoTiff.

source

Rasters.coverage! Method
julia
coverage!(A, geom; [mode, scale])

Calculate the area of a raster covered by GeoInterface.jl compatible geometry geom, as a fraction.

Each pixel is assigned a grid of points (by default 10 x 10) that are each checked to be inside the geometry. The sum divided by the number of points to give coverage.

In practice, most pixel coverage is not calculated this way - shortcuts that produce the same result are taken wherever possible.

If geom is an AbstractVector or table, the mode keyword will determine how coverage is combined.

Keywords

  • mode: method for combining multiple geometries - union or sum.

    • union (the default) gives the areas covered by all geometries. Usefull in spatial coverage where overlapping regions should not be counted twice. The returned raster will contain Float64 values between 0.0 and 1.0.

    • sum gives the summed total of the areas covered by all geometries, as in taking the sum of running coverage separately on all geometries. The returned values are positive Float64.

    For a single geometry, the mode keyword has no effect - the result is the same.

  • scale: Integer scale of pixel subdivision. The default of 10 means each pixel has 10 x 10 or 100 points that contribute to coverage. Using 100 means 10,000 points contribute. Performance will decline as scale increases. Memory use will grow by scale^2 when mode=:union.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

source

Rasters.coverage Method
julia
coverage(mode, geom; [to, res, size, scale, verbose, progress])
-coverage(geom; [to, mode, res, size, scale, verbose, progress])

Calculate the area of a raster covered by GeoInterface.jl compatible geometry geom, as a fraction.

Each pixel is assigned a grid of points (by default 10 x 10) that are each checked to be inside the geometry. The sum divided by the number of points to give coverage.

In practice, most pixel coverage is not calculated this way - shortcuts that produce the same result are taken wherever possible.

If geom is an AbstractVector or table, the mode keyword will determine how coverage is combined.

Keywords

  • mode: method for combining multiple geometries - union or sum.

    • union (the default) gives the areas covered by all geometries. Usefull in spatial coverage where overlapping regions should not be counted twice. The returned raster will contain Float64 values between 0.0 and 1.0.

    • sum gives the summed total of the areas covered by all geometries, as in taking the sum of running coverage separately on all geometries. The returned values are positive Float64.

    For a single geometry, the mode keyword has no effect - the result is the same.

  • scale: Integer scale of pixel subdivision. The default of 10 means each pixel has 10 x 10 or 100 points that contribute to coverage. Using 100 means 10,000 points contribute. Performance will decline as scale increases. Memory use will grow by scale^2 when mode=:union.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

source

Rasters.crop Function
julia
crop(x; to, touches=false, [geometrycolumn])
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.combine Method
julia
combine(A::AbstracRasterSeries; [dims], [lazy]) => Raster

Combine a RasterSeries along some dimension/s, creating a new Raster or RasterStack, depending on the contents of the series.

If dims are passed, only the specified dimensions will be combined with a RasterSeries returned, unless dims is all the dims in the series.

If lazy, concatenate lazily. The default is to concatenate lazily for lazy Rasters and eagerly otherwise.

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.convertlookup Method
julia
convertlookup(dstlookup::Type{<:Lookup}, x)

Convert the dimension lookup between Projected and Mapped. Other dimension lookups pass through unchanged.

This is used to e.g. save a netcdf file to GeoTiff.

source

Rasters.coverage! Method
julia
coverage!(A, geom; [mode, scale])

Calculate the area of a raster covered by GeoInterface.jl compatible geometry geom, as a fraction.

Each pixel is assigned a grid of points (by default 10 x 10) that are each checked to be inside the geometry. The sum divided by the number of points to give coverage.

In practice, most pixel coverage is not calculated this way - shortcuts that produce the same result are taken wherever possible.

If geom is an AbstractVector or table, the mode keyword will determine how coverage is combined.

Keywords

  • mode: method for combining multiple geometries - union or sum.

    • union (the default) gives the areas covered by all geometries. Usefull in spatial coverage where overlapping regions should not be counted twice. The returned raster will contain Float64 values between 0.0 and 1.0.

    • sum gives the summed total of the areas covered by all geometries, as in taking the sum of running coverage separately on all geometries. The returned values are positive Float64.

    For a single geometry, the mode keyword has no effect - the result is the same.

  • scale: Integer scale of pixel subdivision. The default of 10 means each pixel has 10 x 10 or 100 points that contribute to coverage. Using 100 means 10,000 points contribute. Performance will decline as scale increases. Memory use will grow by scale^2 when mode=:union.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

source

Rasters.coverage Method
julia
coverage(mode, geom; [to, res, size, scale, verbose, progress])
+coverage(geom; [to, mode, res, size, scale, verbose, progress])

Calculate the area of a raster covered by GeoInterface.jl compatible geometry geom, as a fraction.

Each pixel is assigned a grid of points (by default 10 x 10) that are each checked to be inside the geometry. The sum divided by the number of points to give coverage.

In practice, most pixel coverage is not calculated this way - shortcuts that produce the same result are taken wherever possible.

If geom is an AbstractVector or table, the mode keyword will determine how coverage is combined.

Keywords

  • mode: method for combining multiple geometries - union or sum.

    • union (the default) gives the areas covered by all geometries. Usefull in spatial coverage where overlapping regions should not be counted twice. The returned raster will contain Float64 values between 0.0 and 1.0.

    • sum gives the summed total of the areas covered by all geometries, as in taking the sum of running coverage separately on all geometries. The returned values are positive Float64.

    For a single geometry, the mode keyword has no effect - the result is the same.

  • scale: Integer scale of pixel subdivision. The default of 10 means each pixel has 10 x 10 or 100 points that contribute to coverage. Using 100 means 10,000 points contribute. Performance will decline as scale increases. Memory use will grow by scale^2 when mode=:union.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

source

Rasters.crop Function
julia
crop(x; to, touches=false, [geometrycolumn])
 crop(xs...; to)

Crop one or multiple AbstractRaster or AbstractRasterStack x to match the size of the object to, or smallest of any dimensions that are shared.

crop is lazy, using a view into the object rather than allocating new memory.

Keywords

  • to: the object to crop to. This can be a Raster or one or multiple geometries. Geometries can be a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified. If no to keyword is passed, the smallest shared area of all xs is used.

  • touches: true or false. Whether to use Touches wraper on the object extent. When lines need to be included in e.g. zonal statistics, true should be used.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

As crop is lazy, filename and suffix keywords are not used.

Example

Crop to another raster:

julia
using Rasters, RasterDataSources, Plots
 evenness = Raster(EarthEnv{HabitatHeterogeneity}, :evenness)
 rnge = Raster(EarthEnv{HabitatHeterogeneity}, :range)
@@ -158,7 +158,7 @@
 
 savefig("build/argentina_crop_example.png"); nothing
 
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.disaggregate Function
julia
disaggregate(object, scale; kw...)

Disaggregate array, or all arrays in a stack or series, by some scale.

Arguments

  • object: Object to aggregate, like AbstractRasterSeries, AbstractStack, AbstractRaster, Dimension or Lookup.

  • scale: the aggregation factor, which can be an Int, a Tuple of Int for each dimension, or a : colon to mean the whole dimension. You can also use any Dimension, Selector or Int combination you can usually use in getindex. Tuple of Pair or NamedTuple where keys are dimension names will also work. Using a Selector will determine the scale by the distance from the start of the index. Selectors will find the first offset and repeat the same aggregation size for the rest.

Keywords

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

  • progress: show a progress bar, true by default, false to hide.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

Note: currently it is much faster to disaggregate over a memory-backed source array. Use read on src before use where required.

source

Rasters.disaggregate! Method
julia
disaggregate!(dst::AbstractRaster, src::AbstractRaster, scale)

Disaggregate array src to array dst by some scale.

  • scale: the aggregation factor, which can be an Int, a Tuple of Int for each dimension, or a : colon to mean the whole dimension. You can also use any Dimension, Selector or Int combination you can usually use in getindex. Tuple of Pair or NamedTuple where keys are dimension names will also work. Using a Selector will determine the scale by the distance from the start of the index. Selectors will find the first offset and repeat the same aggregation size for the rest.

source

Rasters.extend Function
julia
extend(xs...; [to])
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.disaggregate Function
julia
disaggregate(object, scale; kw...)

Disaggregate array, or all arrays in a stack or series, by some scale.

Arguments

  • object: Object to aggregate, like AbstractRasterSeries, AbstractStack, AbstractRaster, Dimension or Lookup.

  • scale: the aggregation factor, which can be an Int, a Tuple of Int for each dimension, or a : colon to mean the whole dimension. You can also use any Dimension, Selector or Int combination you can usually use in getindex. Tuple of Pair or NamedTuple where keys are dimension names will also work. Using a Selector will determine the scale by the distance from the start of the index. Selectors will find the first offset and repeat the same aggregation size for the rest.

Keywords

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

  • progress: show a progress bar, true by default, false to hide.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

Note: currently it is much faster to disaggregate over a memory-backed source array. Use read on src before use where required.

source

Rasters.disaggregate! Method
julia
disaggregate!(dst::AbstractRaster, src::AbstractRaster, scale)

Disaggregate array src to array dst by some scale.

  • scale: the aggregation factor, which can be an Int, a Tuple of Int for each dimension, or a : colon to mean the whole dimension. You can also use any Dimension, Selector or Int combination you can usually use in getindex. Tuple of Pair or NamedTuple where keys are dimension names will also work. Using a Selector will determine the scale by the distance from the start of the index. Selectors will find the first offset and repeat the same aggregation size for the rest.

source

Rasters.extend Function
julia
extend(xs...; [to])
 extend(xs; [to])
 extend(x::Union{AbstractRaster,AbstractRasterStack}; to, kw...)

Extend one or multiple AbstractRaster to match the area covered by all xs, or by the keyword argument to.

Keywords

  • to: the Raster or dims to extend to. If no to keyword is passed, the largest shared area of all xs is used.

  • touches: true or false. Whether to use Touches wrapper on the object extent. When lines need to be included in e.g. zonal statistics, true shoudle be used.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

julia
using Rasters, RasterDataSources, Plots
 evenness = Raster(EarthEnv{HabitatHeterogeneity}, :evenness)
@@ -174,7 +174,7 @@
 
 savefig("build/extend_example.png")
 nothing
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.extract Function
julia
extract(x, geometries; kw...)

Extracts the value of Raster or RasterStack for the passed in geometries, returning an Vector{NamedTuple} with properties for :geometry and Raster or RasterStack layer values.

For lines, linestrings and linear rings points are extracted for each pixel that the line touches.

For polygons, all cells witih centers covered by the polygon are returned.

Note that if objects have more dimensions than the length of the point tuples, sliced arrays or stacks will be returned instead of single values.

Arguments

  • x: a Raster or RasterStack to extract values from.

  • data: a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

  • geometry: include a :geometry field in rows, which will be a tuple point. Either the original point for points or the pixel center point for line and polygon extract. true by default.

  • index: include :index field of extracted points in rows, false by default.

  • name: a Symbol or Tuple of Symbol corresponding to layer/s of a RasterStack to extract. All layers are extracted by default.

  • skipmissing: skip missing points automatically.

  • flatten: flatten extracted points from multiple geometries into a single vector. true by default. Unmixed point geometries are always flattened. Flattening is slow and single threaded, flatten=false may be a large performance improvement in combination with threaded=true.

  • atol: a tolerance for floating point lookup values for when the Lookup contains Points. atol is ignored for Intervals.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

Example

Here we extract points matching the occurrence of the Mountain Pygmy Possum, Burramis parvus. This could be used to fit a species distribution model.

julia
using Rasters, RasterDataSources, ArchGDAL, GBIF2, CSV
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.extract Function
julia
extract(x, geometries; kw...)

Extracts the value of Raster or RasterStack for the passed in geometries, returning an Vector{NamedTuple} with properties for :geometry and Raster or RasterStack layer values.

For lines, linestrings and linear rings points are extracted for each pixel that the line touches.

For polygons, all cells witih centers covered by the polygon are returned.

Note that if objects have more dimensions than the length of the point tuples, sliced arrays or stacks will be returned instead of single values.

Arguments

  • x: a Raster or RasterStack to extract values from.

  • data: a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

  • geometry: include a :geometry field in rows, which will be a tuple point. Either the original point for points or the pixel center point for line and polygon extract. true by default.

  • index: include :index field of extracted points in rows, false by default.

  • name: a Symbol or Tuple of Symbol corresponding to layer/s of a RasterStack to extract. All layers are extracted by default.

  • skipmissing: skip missing points automatically.

  • flatten: flatten extracted points from multiple geometries into a single vector. true by default. Unmixed point geometries are always flattened. Flattening is slow and single threaded, flatten=false may be a large performance improvement in combination with threaded=true.

  • atol: a tolerance for floating point lookup values for when the Lookup contains Points. atol is ignored for Intervals.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

Example

Here we extract points matching the occurrence of the Mountain Pygmy Possum, Burramis parvus. This could be used to fit a species distribution model.

julia
using Rasters, RasterDataSources, ArchGDAL, GBIF2, CSV
 
 # Get a stack of BioClim layers, and replace missing values with `missing`
 st = RasterStack(WorldClim{BioClim}, (1, 3, 5, 7, 12)) |> replace_missing
@@ -192,7 +192,7 @@
  (geometry = (0.03, 39.97), bio1 = 17.076923f0, bio3 = 39.7983f0, bio5 = 29.638462f0, bio7 = 24.153847f0, bio12 = 441.0f0)
  (geometry = (0.03, 39.97), bio1 = 17.076923f0, bio3 = 39.7983f0, bio5 = 29.638462f0, bio7 = 24.153847f0, bio12 = 441.0f0)
  (geometry = (0.52, 40.37), bio1 = missing, bio3 = missing, bio5 = missing, bio7 = missing, bio12 = missing)
- (geometry = (0.32, 40.24), bio1 = 16.321388f0, bio3 = 41.659454f0, bio5 = 30.029825f0, bio7 = 25.544561f0, bio12 = 480.0f0)

Note: passing in arrays, geometry collections or feature collections containing a mix of points and other geometries has undefined results.

source

Rasters.mappedbounds Function
julia
mappedbounds(x)

Get the bounds converted to the mappedcrs value.

Without ArchGDAL loaded, this is just the regular bounds.

source

Rasters.mappedcrs Function
julia
mappedcrs(x)

Get the mapped coordinate reference system for the Y/X dims of an array.

In Projected lookup this is used to convert Selector values form the mappedcrs defined projection to the underlying projection, and to show plot axes in the mapped projection.

In Mapped lookup this is the coordinate reference system of the index values. See setmappedcrs to set it manually.

source

Rasters.mappedindex Function
julia
mappedindex(x)

Get the index value of a dimension converted to the mappedcrs value.

Without ArchGDAL loaded, this is just the regular dim value.

source

Rasters.mask! Function
julia
mask!(x; with, missingval=missingval(A))

Mask A by the missing values of with, or by all values outside with if it is a polygon.

If with is a polygon, creates a new array where points falling outside the polygon have been replaced by missingval(A).

Return a new array with values of A masked by the missing values of with, or by a polygon.

Arguments

  • x: a Raster or RasterStack.

Keywords

  • with: another AbstractRaster, a AbstractVector of Tuple points, or any GeoInterface.jl AbstractGeometry. The coordinate reference system of the point must match crs(A).

  • invert: invert the mask, so that areas no missing in with are masked, and areas missing in with are masked.

  • missingval: the missing value to write to A in masked areas, by default missingval(A).

Example

Mask an unmasked AWAP layer with a masked WorldClim layer, by first resampling the mask to match the size and projection.

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates
+ (geometry = (0.32, 40.24), bio1 = 16.321388f0, bio3 = 41.659454f0, bio5 = 30.029825f0, bio7 = 25.544561f0, bio12 = 480.0f0)

Note: passing in arrays, geometry collections or feature collections containing a mix of points and other geometries has undefined results.

source

Rasters.mappedbounds Function
julia
mappedbounds(x)

Get the bounds converted to the mappedcrs value.

Without ArchGDAL loaded, this is just the regular bounds.

source

Rasters.mappedcrs Function
julia
mappedcrs(x)

Get the mapped coordinate reference system for the Y/X dims of an array.

In Projected lookup this is used to convert Selector values form the mappedcrs defined projection to the underlying projection, and to show plot axes in the mapped projection.

In Mapped lookup this is the coordinate reference system of the index values. See setmappedcrs to set it manually.

source

Rasters.mappedindex Function
julia
mappedindex(x)

Get the index value of a dimension converted to the mappedcrs value.

Without ArchGDAL loaded, this is just the regular dim value.

source

Rasters.mask! Function
julia
mask!(x; with, missingval=missingval(A))

Mask A by the missing values of with, or by all values outside with if it is a polygon.

If with is a polygon, creates a new array where points falling outside the polygon have been replaced by missingval(A).

Return a new array with values of A masked by the missing values of with, or by a polygon.

Arguments

  • x: a Raster or RasterStack.

Keywords

  • with: another AbstractRaster, a AbstractVector of Tuple points, or any GeoInterface.jl AbstractGeometry. The coordinate reference system of the point must match crs(A).

  • invert: invert the mask, so that areas no missing in with are masked, and areas missing in with are masked.

  • missingval: the missing value to write to A in masked areas, by default missingval(A).

Example

Mask an unmasked AWAP layer with a masked WorldClim layer, by first resampling the mask to match the size and projection.

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates
 
 # Load and plot the file
 awap = read(RasterStack(AWAP, (:tmin, :tmax); date=DateTime(2001, 1, 1)))
@@ -209,7 +209,7 @@
 savefig(a, "build/mask_bang_example_before.png");
 savefig(b, "build/mask_bang_example_after.png"); nothing
 
-# output

Before mask!:

After mask!:

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.mask Method
julia
mask(A:AbstractRaster; with, missingval=missingval(A))
+# output

Before mask!:

After mask!:

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.mask Method
julia
mask(A:AbstractRaster; with, missingval=missingval(A))
 mask(x; with)

Return a new array with values of A masked by the missing values of with, or by the shape of with, if with is a geometric object.

Arguments

  • x: a Raster or RasterStack

Keywords

  • with: an AbstractRaster, or any GeoInterface.jl compatible objects or table. The coordinate reference system of the point must match crs(A).

  • invert: invert the mask, so that areas no missing in with are masked, and areas missing in with are masked.

  • missingval: the missing value to use in the returned file.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

Geometry keywords

These can be used when with is a GeoInterface.jl compatible object:

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

Example

Mask an unmasked AWAP layer with a masked WorldClim layer, by first resampling the mask.

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates
 
 # Load and plot the file
@@ -226,7 +226,7 @@
 
 savefig(a, "build/mask_example_before.png");
 savefig(b, "build/mask_example_after.png"); nothing
-# output

Before mask:

After mask:

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.missingmask Method
julia
missingmask(obj::Raster; kw...)
+# output

Before mask:

After mask:

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.missingmask Method
julia
missingmask(obj::Raster; kw...)
 missingmask(obj; [to, res, size])
 missingmask(obj::RasterStack; alllayers=true, kw...)

Create a mask array of missing and true values, from another Raster. AbstractRasterStack or AbstractRasterSeries are also accepted-

For AbstractRaster the default missingval is missingval(A), but others can be chosen manually.

The array returned from calling missingmask on a AbstractRaster is a Raster with the same size and fields as the original array.

Arguments

  • obj: a Raster or one or multiple geometries. Geometries can be a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

  • alllayers: if true a mask is taken for all layers, otherwise only the first layer is used. Defaults to true

  • invert: invert the mask, so that areas no missing in with are masked, and areas missing in with are masked.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

Example

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates
 wc = Raster(WorldClim{Climate}, :prec; month=1)
@@ -234,7 +234,7 @@
 
 savefig("build/missingmask_example.png"); nothing
 
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.missingval Function
julia
missingval(x)

Returns the value representing missing data in the dataset

source

Rasters.mosaic! Method
julia
mosaic!(f, x, regions...; missingval, atol)
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.missingval Function
julia
missingval(x)

Returns the value representing missing data in the dataset

source

Rasters.mosaic! Method
julia
mosaic!(f, x, regions...; missingval, atol)
 mosaic!(f, x, regions::Tuple; missingval, atol)

Combine regions in Raster or RasterStack x using the function f.

Arguments

  • f a function (e.g. mean, sum, first or last) that is applied to values where regions overlap.

  • x: A Raster or RasterStack. May be a an opened disk-based Raster, the result will be written to disk. With the current algorithm, the read speed is slow.

  • regions: source objects to be joined. These should be memory-backed (use read first), or may experience poor performance. If all objects have the same extent, mosaic is simply a merge.

Keywords

  • missingval: Fills empty areas, and defualts to the `missingval/ of the first layer.

  • atol: Absolute tolerance for comparison between index values. This is often required due to minor differences in range values due to floating point error. It is not applied to non-float dimensions. A tuple of tolerances may be passed, matching the dimension order.

Example

Cut out scandinavian countries and plot:

julia
using Rasters, RasterDataSources, NaturalEarth, DataFrames, Dates, Plots
 # Get climate data form worldclim
 climate = RasterStack(WorldClim{Climate}, (:tmin, :tmax, :prec, :wind); month=July)
@@ -251,7 +251,7 @@
 plot(scandinavia_climate)
 
 savefig("build/mosaic_bang_example.png")
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.mosaic Method
julia
mosaic(f, regions...; missingval, atol)
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.mosaic Method
julia
mosaic(f, regions...; missingval, atol)
 mosaic(f, regions; missingval, atol)

Combine regions into a single raster.

Arguments

  • f: A reducing function (mean, sum, first, last etc.) for values where regions overlap.

  • regions: Iterable or splatted Raster or RasterStack.

Keywords

  • missingval: Fills empty areas, and defualts to the missingval of the first region.

  • atol: Absolute tolerance for comparison between index values. This is often required due to minor differences in range values due to floating point error. It is not applied to non-float dimensions. A tuple of tolerances may be passed, matching the dimension order.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

If your mosaic has has apparent line errors, increase the atol value.

Example

Here we cut out Australia and Africa from a stack, and join them with mosaic.

julia
using Rasters, RasterDataSources, NaturalEarth, DataFrames, Dates, Plots
 countries = naturalearth("admin_0_countries", 110) |> DataFrame
 climate = RasterStack(WorldClim{Climate}, (:tmin, :tmax, :prec, :wind); month=July)
@@ -263,7 +263,7 @@
 plot(scandinavia_climate)
 
 savefig("build/mosaic_example_combined.png")
-# output

Mosaic of countries

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.points Method
julia
points(A::AbstractRaster; dims=(YDim, XDim), ignore_missing) => Array{Tuple}

Returns a generator of the points in A for dimensions in dims, where points are a tuple of the values in each specified dimension index.

Keywords

  • dims the dimensions to return points from. The first slice of other layers will be used.

  • ignore_missing: wether to ignore missing values in the array when considering points. If true, all points in the dimensions will be returned, if false only the points that are not === missingval(A) will be returned.

The order of dims determines the order of the points.

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.rasterize Function
julia
rasterize([reducer], data; geometrycolumn, kw...)

Rasterize a GeoInterface.jl compatable geometry or feature, or a Tables.jl table with a :geometry column of GeoInterface.jl objects, or points columns specified by geometrycolumn

Arguments

  • reducer: a reducing function to reduce the fill value for all geometries that cover or touch a pixel down to a single value. The default is last. Any that takes an iterable and returns a single value will work, including custom functions. However, there are optimisations for built-in methods including sum, first, last, minimum, maximum, extrema and Statistics.mean. These may be an order of magnitude or more faster than count is a special-cased as it does not need a fill value.

  • data: a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

These are detected automatically from data where possible.

  • fill: the value or values to fill a polygon with. A Symbol or tuple of Symbol will be used to retrieve properties from features or column values from table rows. An array or other iterable will be used for each geometry, in order. fill can also be a function of the current value, e.g. x -> x + 1.

  • op: A reducing function that accepts two values and returns one, like min to minimum. For common methods this will be assigned for you, or is not required. But you can use it instead of a reducer as it will usually be faster.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • threadsafe: specify that custom reducer and/or op functions are thread-safe, in that the order of operation or blocking does not matter. For example, sum and maximum are thread-safe, because the answer is approximately (besides floating point error) the same after running on nested blocks, or on all the data. In contrast, median or last are not, because the blocking (median) or order (last) matters.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

Note on threading. Performance may be much better with threaded=false if reducer/op are not threadsafe. sum, prod, maximum, minimum count and mean (by combining sum and count) are threadsafe. If you know your algorithm is threadsafe, use threadsafe=true to allow all optimisations. Functions passed to fill are always threadsafe, and ignore the threadsafe argument.

Example

Rasterize a shapefile for China and plot, with a border.

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates, Shapefile, Downloads
+# output

Mosaic of countries

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.points Method
julia
points(A::AbstractRaster; dims=(YDim, XDim), ignore_missing) => Array{Tuple}

Returns a generator of the points in A for dimensions in dims, where points are a tuple of the values in each specified dimension index.

Keywords

  • dims the dimensions to return points from. The first slice of other layers will be used.

  • ignore_missing: wether to ignore missing values in the array when considering points. If true, all points in the dimensions will be returned, if false only the points that are not === missingval(A) will be returned.

The order of dims determines the order of the points.

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.rasterize Function
julia
rasterize([reducer], data; geometrycolumn, kw...)

Rasterize a GeoInterface.jl compatable geometry or feature, or a Tables.jl table with a :geometry column of GeoInterface.jl objects, or points columns specified by geometrycolumn

Arguments

  • reducer: a reducing function to reduce the fill value for all geometries that cover or touch a pixel down to a single value. The default is last. Any that takes an iterable and returns a single value will work, including custom functions. However, there are optimisations for built-in methods including sum, first, last, minimum, maximum, extrema and Statistics.mean. These may be an order of magnitude or more faster than count is a special-cased as it does not need a fill value.

  • data: a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

These are detected automatically from data where possible.

  • fill: the value or values to fill a polygon with. A Symbol or tuple of Symbol will be used to retrieve properties from features or column values from table rows. An array or other iterable will be used for each geometry, in order. fill can also be a function of the current value, e.g. x -> x + 1.

  • op: A reducing function that accepts two values and returns one, like min to minimum. For common methods this will be assigned for you, or is not required. But you can use it instead of a reducer as it will usually be faster.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • threadsafe: specify that custom reducer and/or op functions are thread-safe, in that the order of operation or blocking does not matter. For example, sum and maximum are thread-safe, because the answer is approximately (besides floating point error) the same after running on nested blocks, or on all the data. In contrast, median or last are not, because the blocking (median) or order (last) matters.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

Note on threading. Performance may be much better with threaded=false if reducer/op are not threadsafe. sum, prod, maximum, minimum count and mean (by combining sum and count) are threadsafe. If you know your algorithm is threadsafe, use threadsafe=true to allow all optimisations. Functions passed to fill are always threadsafe, and ignore the threadsafe argument.

Example

Rasterize a shapefile for China and plot, with a border.

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates, Shapefile, Downloads
 using Rasters.Lookups
 
 # Download a borders shapefile
@@ -283,7 +283,7 @@
 
 savefig("build/china_rasterized.png"); nothing
 
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.rasterize! Function
julia
rasterize!([reducer], dest, data; kw...)

Rasterize the geometries in data into the Raster or RasterStack dest, using the values specified by fill.

Arguments

  • dest: a Raster or RasterStack to rasterize into.

  • reducer: a reducing function to reduce the fill value for all geometries that cover or touch a pixel down to a single value. The default is last. Any that takes an iterable and returns a single value will work, including custom functions. However, there are optimisations for built-in methods including sum, first, last, minimum, maximum, extrema and Statistics.mean. These may be an order of magnitude or more faster than count is a special-cased as it does not need a fill value.

  • data: a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

These are detected automatically from A and data where possible.

  • fill: the value or values to fill a polygon with. A Symbol or tuple of Symbol will be used to retrieve properties from features or column values from table rows. An array or other iterable will be used for each geometry, in order. fill can also be a function of the current value, e.g. x -> x + 1.

  • op: A reducing function that accepts two values and returns one, like min to minimum. For common methods this will be assigned for you, or is not required. But you can use it instead of a reducer as it will usually be faster.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • threadsafe: specify that custom reducer and/or op functions are thread-safe, in that the order of operation or blocking does not matter. For example, sum and maximum are thread-safe, because the answer is approximately (besides floating point error) the same after running on nested blocks, or on all the data. In contrast, median or last are not, because the blocking (median) or order (last) matters.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

Example

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates, Shapefile, GeoInterface, Downloads
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.rasterize! Function
julia
rasterize!([reducer], dest, data; kw...)

Rasterize the geometries in data into the Raster or RasterStack dest, using the values specified by fill.

Arguments

  • dest: a Raster or RasterStack to rasterize into.

  • reducer: a reducing function to reduce the fill value for all geometries that cover or touch a pixel down to a single value. The default is last. Any that takes an iterable and returns a single value will work, including custom functions. However, there are optimisations for built-in methods including sum, first, last, minimum, maximum, extrema and Statistics.mean. These may be an order of magnitude or more faster than count is a special-cased as it does not need a fill value.

  • data: a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

These are detected automatically from A and data where possible.

  • fill: the value or values to fill a polygon with. A Symbol or tuple of Symbol will be used to retrieve properties from features or column values from table rows. An array or other iterable will be used for each geometry, in order. fill can also be a function of the current value, e.g. x -> x + 1.

  • op: A reducing function that accepts two values and returns one, like min to minimum. For common methods this will be assigned for you, or is not required. But you can use it instead of a reducer as it will usually be faster.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • threadsafe: specify that custom reducer and/or op functions are thread-safe, in that the order of operation or blocking does not matter. For example, sum and maximum are thread-safe, because the answer is approximately (besides floating point error) the same after running on nested blocks, or on all the data. In contrast, median or last are not, because the blocking (median) or order (last) matters.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

Example

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates, Shapefile, GeoInterface, Downloads
 using Rasters.Lookups
 
 # Download a borders shapefile
@@ -311,12 +311,12 @@
 
 savefig("build/indonesia_rasterized.png"); nothing
 
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.replace_missing Method
julia
replace_missing(a::AbstractRaster, newmissingval)
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.replace_missing Method
julia
replace_missing(a::AbstractRaster, newmissingval)
 replace_missing(a::AbstractRasterStack, newmissingval)

Replace missing values in the array or stack with a new missing value, also updating the missingval field/s.

Keywords

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

Example

julia
using Rasters, RasterDataSources, ArchGDAL
 A = Raster(WorldClim{Climate}, :prec; month=1) |> replace_missing
 missingval(A)
 # output
-missing

source

Rasters.reproject Method
julia
reproject(source::GeoFormat, target::GeoFormat, dim::Dimension, val)

reproject uses ArchGDAL.reproject, but implemented for a reprojecting a value array of values, a single dimension at a time.

source

Rasters.reproject Method
julia
reproject(obj; crs)

Reproject the lookups of obj to a different crs.

This is a lossless operation for the raster data, as only the lookup values change. This is only possible when the axes of source and destination projections are aligned: the change is usually from a Regular and an Irregular lookup spans.

For converting between projections that are rotated, skewed or warped in any way, use resample.

Dimensions without an AbstractProjected lookup (such as a Ti dimension) are silently returned without modification.

Arguments

  • obj: a Lookup, Dimension, Tuple of Dimension, Raster or RasterStack.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

source

Rasters.resample Method
julia
resample(x; kw...)
+missing

source

Rasters.reproject Method
julia
reproject(source::GeoFormat, target::GeoFormat, dim::Dimension, val)

reproject uses ArchGDAL.reproject, but implemented for a reprojecting a value array of values, a single dimension at a time.

source

Rasters.reproject Method
julia
reproject(obj; crs)

Reproject the lookups of obj to a different crs.

This is a lossless operation for the raster data, as only the lookup values change. This is only possible when the axes of source and destination projections are aligned: the change is usually from a Regular and an Irregular lookup spans.

For converting between projections that are rotated, skewed or warped in any way, use resample.

Dimensions without an AbstractProjected lookup (such as a Ti dimension) are silently returned without modification.

Arguments

  • obj: a Lookup, Dimension, Tuple of Dimension, Raster or RasterStack.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

source

Rasters.resample Method
julia
resample(x; kw...)
 resample(xs...; to=first(xs), kw...)

resample uses warp (which uses GDALs gdalwarp) to resample a Raster or RasterStack to a new resolution and optionally new crs, or to snap to the bounds, resolution and crs of the object to.

Dimensions without an AbstractProjected lookup (such as a Ti dimension) are iteratively resampled with GDAL and joined back into a single array.

If projections can be converted for each axis independently, it may be faster and more accurate to use reproject.

Run using ArchGDAL to make this method available.

Arguments

  • x: the object/s to resample.

Keywords

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from x,

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • method: A Symbol or String specifying the method to use for resampling. From the docs for gdalwarp:

    • :near: nearest neighbour resampling (default, fastest algorithm, worst interpolation quality).

    • :bilinear: bilinear resampling.

    • :cubic: cubic resampling.

    • :cubicspline: cubic spline resampling.

    • :lanczos: Lanczos windowed sinc resampling.

    • :average: average resampling, computes the weighted average of all non-NODATA contributing pixels. rms root mean square / quadratic mean of all non-NODATA contributing pixels (GDAL >= 3.3)

    • :mode: mode resampling, selects the value which appears most often of all the sampled points.

    • :max: maximum resampling, selects the maximum value from all non-NODATA contributing pixels.

    • :min: minimum resampling, selects the minimum value from all non-NODATA contributing pixels.

    • :med: median resampling, selects the median value of all non-NODATA contributing pixels.

    • :q1: first quartile resampling, selects the first quartile value of all non-NODATA contributing pixels.

    • :q3: third quartile resampling, selects the third quartile value of all non-NODATA contributing pixels.

    • :sum: compute the weighted sum of all non-NODATA contributing pixels (since GDAL 3.1)

    Where NODATA values are set to missingval.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

Note:

  • GDAL may cause some unexpected changes in the raster, such as changing the crs type from EPSG to WellKnownText (it will represent the same CRS).

Example

Resample a WorldClim layer to match an EarthEnv layer:

julia
using Rasters, RasterDataSources, ArchGDAL, Plots
 A = Raster(WorldClim{Climate}, :prec; month=1)
 B = Raster(EarthEnv{HabitatHeterogeneity}, :evenness)
@@ -327,7 +327,7 @@
 savefig(a, "build/resample_example_before.png");
 savefig(b, "build/resample_example_after.png"); nothing
 
-# output

Before resample:

After resample:

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.setcrs Method
julia
setcrs(x, crs)

Set the crs of a Raster, RasterStack, Tuple of Dimension, or a Dimension. The crs is expected to be a GeoFormatTypes.jl CRS or Mixed GeoFormat type

source

Rasters.setmappedcrs Method
julia
setmappedcrs(x, crs)

Set the mapped crs of a Raster, a RasterStack, a Tuple of Dimension, or a Dimension. The crs is expected to be a GeoFormatTypes.jl CRS or Mixed GeoFormat type

source

Rasters.slice Method
julia
slice(A::Union{AbstractRaster,AbstractRasterStack,AbstracRasterSeries}, dims) => RasterSeries

Slice views along some dimension/s to obtain a RasterSeries of the slices.

For a Raster or RasterStack this will return a RasterSeries of Raster or RasterStack that are slices along the specified dimensions.

For a RasterSeries, the output is another series where the child objects are sliced and the series dimensions index is now of the child dimensions combined. slice on a RasterSeries with no dimensions will slice along the dimensions shared by both the series and child object.

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.trim Method
julia
trim(x; dims::Tuple, pad::Int)

Trim missingval(x) from x for axes in dims, returning a view of x.

Arguments

  • x: A Raster or RasterStack. For stacks, all layers must having missing values for a pixel for it to be trimmed.

Keywords

  • dims: By default dims=(XDim, YDim), so that trimming keeps the area of X and Y that contains non-missing values along all other dimensions.

  • pad: The trimmed size will be padded by pad on all sides, although padding will not be added beyond the original extent of the array.

As trim is lazy, filename and suffix keywords are not used.

Example

Create trimmed layers of Australian habitat heterogeneity.

julia
using Rasters, RasterDataSources, Plots
+# output

Before resample:

After resample:

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.setcrs Method
julia
setcrs(x, crs)

Set the crs of a Raster, RasterStack, Tuple of Dimension, or a Dimension. The crs is expected to be a GeoFormatTypes.jl CRS or Mixed GeoFormat type

source

Rasters.setmappedcrs Method
julia
setmappedcrs(x, crs)

Set the mapped crs of a Raster, a RasterStack, a Tuple of Dimension, or a Dimension. The crs is expected to be a GeoFormatTypes.jl CRS or Mixed GeoFormat type

source

Rasters.slice Method
julia
slice(A::Union{AbstractRaster,AbstractRasterStack,AbstracRasterSeries}, dims) => RasterSeries

Slice views along some dimension/s to obtain a RasterSeries of the slices.

For a Raster or RasterStack this will return a RasterSeries of Raster or RasterStack that are slices along the specified dimensions.

For a RasterSeries, the output is another series where the child objects are sliced and the series dimensions index is now of the child dimensions combined. slice on a RasterSeries with no dimensions will slice along the dimensions shared by both the series and child object.

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.trim Method
julia
trim(x; dims::Tuple, pad::Int)

Trim missingval(x) from x for axes in dims, returning a view of x.

Arguments

  • x: A Raster or RasterStack. For stacks, all layers must having missing values for a pixel for it to be trimmed.

Keywords

  • dims: By default dims=(XDim, YDim), so that trimming keeps the area of X and Y that contains non-missing values along all other dimensions.

  • pad: The trimmed size will be padded by pad on all sides, although padding will not be added beyond the original extent of the array.

As trim is lazy, filename and suffix keywords are not used.

Example

Create trimmed layers of Australian habitat heterogeneity.

julia
using Rasters, RasterDataSources, Plots
 layers = (:evenness, :range, :contrast, :correlation)
 st = RasterStack(EarthEnv{HabitatHeterogeneity}, layers)
 
@@ -342,7 +342,7 @@
 savefig(a, "build/trim_example_before.png");
 savefig(b, "build/trim_example_after.png"); nothing
 
-# output

Before trim:

After trim:

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.warp Method
julia
warp(A::AbstractRaster, flags::Dict; kw...)

Gives access to the GDALs gdalwarp method given a Dict of flag => value arguments that can be converted to strings, or vectors where multiple space-separated arguments are required.

Arrays with additional dimensions not handled by GDAL (other than X, Y, Band) are sliced, warped, and then combined to match the original array dimensions. These slices will not be written to disk and loaded lazily at this stage - you will need to do that manually if required.

See the gdalwarp docs for a list of arguments.

Run using ArchGDAL to make this method available.

Keywords

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

  • missingval: the missing value to use during warping, will default to `Rasters.missingval(A). Passing a pair will specify the missing value to use after warping.

Any additional keywords are passed to ArchGDAL.Dataset.

Example

This simply resamples the array with the :tr (output file resolution) and :r flags, giving us a pixelated version:

julia
using Rasters, ArchGDAL, RasterDataSources, Plots
+# output

Before trim:

After trim:

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.warp Method
julia
warp(A::AbstractRaster, flags::Dict; kw...)

Gives access to the GDALs gdalwarp method given a Dict of flag => value arguments that can be converted to strings, or vectors where multiple space-separated arguments are required.

Arrays with additional dimensions not handled by GDAL (other than X, Y, Band) are sliced, warped, and then combined to match the original array dimensions. These slices will not be written to disk and loaded lazily at this stage - you will need to do that manually if required.

See the gdalwarp docs for a list of arguments.

Run using ArchGDAL to make this method available.

Keywords

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

  • missingval: the missing value to use during warping, will default to `Rasters.missingval(A). Passing a pair will specify the missing value to use after warping.

Any additional keywords are passed to ArchGDAL.Dataset.

Example

This simply resamples the array with the :tr (output file resolution) and :r flags, giving us a pixelated version:

julia
using Rasters, ArchGDAL, RasterDataSources, Plots
 A = Raster(WorldClim{Climate}, :prec; month=1)
 a = plot(A)
 
@@ -355,7 +355,7 @@
 savefig(a, "build/warp_example_before.png");
 savefig(b, "build/warp_example_after.png"); nothing
 
-# output

Before warp:

After warp:

In practise, prefer resample for this. But warp may be more flexible.

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.zonal Method
julia
zonal(f, x::Union{Raster,RasterStack}; of, kw...)

Calculate zonal statistics for the the zone of a Raster or RasterStack covered by the of object/s.

Arguments

  • f: any function that reduces an iterable to a single value, such as sum or Statistics.mean

  • x: A Raster or RasterStack

  • of: A DimTuple, Extent, a Raster or one or multiple geometries. Geometries can be a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

These can be used when of is or contains (a) GeoInterface.jl compatible object(s):

  • shape: Force data to be treated as :polygon, :line or :point, where possible.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the line :touches the pixel, or that are completely :inside inside the polygon. The default is :center.

  • progress: show a progress bar, true by default, false to hide..

  • skipmissing: wether to apply f to the result of skipmissing(A) or not. If true f will be passed an iterator over the values, which loses all spatial information. if false f will be passes a masked Raster or RasterStack, and will be responsible for handling missing values itself. The default value is true.

Example

julia
using Rasters, RasterDataSources, ArchGDAL, DataFrames, Statistics, Dates, NaturalEarth
+# output

Before warp:

After warp:

In practise, prefer resample for this. But warp may be more flexible.

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Rasters.zonal Method
julia
zonal(f, x::Union{Raster,RasterStack}; of, kw...)

Calculate zonal statistics for the the zone of a Raster or RasterStack covered by the of object/s.

Arguments

  • f: any function that reduces an iterable to a single value, such as sum or Statistics.mean

  • x: A Raster or RasterStack

  • of: A DimTuple, Extent, a Raster or one or multiple geometries. Geometries can be a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

These can be used when of is or contains (a) GeoInterface.jl compatible object(s):

  • shape: Force data to be treated as :polygon, :line or :point, where possible.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the line :touches the pixel, or that are completely :inside inside the polygon. The default is :center.

  • progress: show a progress bar, true by default, false to hide..

  • skipmissing: wether to apply f to the result of skipmissing(A) or not. If true f will be passed an iterator over the values, which loses all spatial information. if false f will be passes a masked Raster or RasterStack, and will be responsible for handling missing values itself. The default value is true.

Example

julia
using Rasters, RasterDataSources, ArchGDAL, DataFrames, Statistics, Dates, NaturalEarth
 # Download borders
 countries = naturalearth("admin_0_countries", 10) |> DataFrame
 # Download and read a raster stack from WorldClim
@@ -385,20 +385,20 @@
  256 │ Bajo Nuevo Bank               NaN        NaN        NaN        NaN
  257 │ Serranilla Bank               NaN        NaN        NaN        NaN
  258 │ Scarborough Reef              NaN        NaN        NaN        NaN
-                                                  3 columns and 243 rows omitted

source

Reference - Internal functions

Rasters.AbstractProjected Type
julia
AbstractProjected <: AbstractSampled

Abstract supertype for projected index lookups.

source

Rasters.FileArray Type
julia
FileArray{S} <: DiskArrays.AbstractDiskArray

Filearray is a DiskArrays.jl AbstractDiskArray. Instead of holding an open object, it just holds a filename string that is opened lazily when it needs to be read.

source

Rasters.FileStack Type
julia
FileStack{S,Na}
+                                                  3 columns and 243 rows omitted

source

Reference - Internal functions

Rasters.AbstractProjected Type
julia
AbstractProjected <: AbstractSampled

Abstract supertype for projected index lookups.

source

Rasters.FileArray Type
julia
FileArray{S} <: DiskArrays.AbstractDiskArray

Filearray is a DiskArrays.jl AbstractDiskArray. Instead of holding an open object, it just holds a filename string that is opened lazily when it needs to be read.

source

Rasters.FileStack Type
julia
FileStack{S,Na}
 
-FileStack{S,Na}(filename, types, sizes, eachchunk, haschunks, write)

A wrapper object that holds file pointer and size/chunking metadata for a multi-layered stack stored in a single file, typically netcdf or hdf5.

S is a backend type like NCDsource, and Na is a tuple of Symbol keys.

source

Rasters.OpenStack Type
julia
OpenStack{X,K}
+FileStack{S,Na}(filename, types, sizes, eachchunk, haschunks, write)

A wrapper object that holds file pointer and size/chunking metadata for a multi-layered stack stored in a single file, typically netcdf or hdf5.

S is a backend type like NCDsource, and Na is a tuple of Symbol keys.

source

Rasters.OpenStack Type
julia
OpenStack{X,K}
 
-OpenStack{X,K}(dataset)

A wrapper for any stack-like opened dataset that can be indexed with Symbol keys to retrieve AbstractArray layers.

OpenStack is usually hidden from users, wrapped in a regular RasterStack passed as the function argument in open(stack) when the stack is contained in a single file.

X is a backend type like NCDsource, and K is a tuple of Symbol keys.

source

Rasters.RasterDiskArray Type
julia
RasterDiskArray <: DiskArrays.AbstractDiskArray

A basic DiskArrays.jl wrapper for objects that don't have one defined yet. When we open a FileArray it is replaced with a RasterDiskArray.

source

Base.open Method
julia
open(f, A::AbstractRaster; write=false)

open is used to open any lazy=true AbstractRaster and do multiple operations on it in a safe way. The write keyword opens the file in write lookup so that it can be altered on disk using e.g. a broadcast.

f is a method that accepts a single argument - an Raster object which is just an AbstractRaster that holds an open disk-based object. Often it will be a do block:

lazy=false (in-memory) rasters will ignore open and pass themselves to f.

julia
# A is an `Raster` wrapping the opened disk-based object.
+OpenStack{X,K}(dataset)

A wrapper for any stack-like opened dataset that can be indexed with Symbol keys to retrieve AbstractArray layers.

OpenStack is usually hidden from users, wrapped in a regular RasterStack passed as the function argument in open(stack) when the stack is contained in a single file.

X is a backend type like NCDsource, and K is a tuple of Symbol keys.

source

Rasters.RasterDiskArray Type
julia
RasterDiskArray <: DiskArrays.AbstractDiskArray

A basic DiskArrays.jl wrapper for objects that don't have one defined yet. When we open a FileArray it is replaced with a RasterDiskArray.

source

Base.open Method
julia
open(f, A::AbstractRaster; write=false)

open is used to open any lazy=true AbstractRaster and do multiple operations on it in a safe way. The write keyword opens the file in write lookup so that it can be altered on disk using e.g. a broadcast.

f is a method that accepts a single argument - an Raster object which is just an AbstractRaster that holds an open disk-based object. Often it will be a do block:

lazy=false (in-memory) rasters will ignore open and pass themselves to f.

julia
# A is an `Raster` wrapping the opened disk-based object.
 open(Raster(filepath); write=true) do A
     mask!(A; with=maskfile)
     A[I...] .*= 2
     # ...  other things you need to do with the open file
-end

By using a do block to open files we ensure they are always closed again after we finish working with them.

source

Base.read! Method
julia
read!(src::Union{AbstractString,AbstractRaster}, dst::AbstractRaster)
+end

By using a do block to open files we ensure they are always closed again after we finish working with them.

source

Base.read! Method
julia
read!(src::Union{AbstractString,AbstractRaster}, dst::AbstractRaster)
 read!(src::Union{AbstractString,AbstractRasterStack}, dst::AbstractRasterStack)
-read!(scr::AbstractRasterSeries, dst::AbstractRasterSeries)

read! will copy the data from src to the object dst.

src can be an object or a file-path String.

source

Base.read Method
julia
read(A::AbstractRaster)
+read!(scr::AbstractRasterSeries, dst::AbstractRasterSeries)

read! will copy the data from src to the object dst.

src can be an object or a file-path String.

source

Base.read Method
julia
read(A::AbstractRaster)
 read(A::AbstractRasterStack)
-read(A::AbstractRasterSeries)

read will move a Rasters.jl object completely to memory.

Keywords

  • checkmemory: if true (the default), check if there is enough memory for the operation. false will ignore memory needs.

source

Base.skipmissing Method
julia
skipmissing(itr::Raster)

Returns an iterable over the elements in a Raster object, skipping any values equal to either the missingval or missing.

source

Base.write Method
julia
Base.write(filepath::AbstractString, s::AbstractRasterSeries; kw...)

Write any AbstractRasterSeries to multiple files, guessing the backend from the file extension.

The lookup values of the series will be appended to the filepath (before the extension), separated by underscores.

All keywords are passed through to these Raster and RasterStack methods.

Keywords

  • chunks: a NTuple{N,Int} specifying the chunk size for each dimension. To specify only specific dimensions, a Tuple of Dimension wrapping Int or a NamedTuple of Int can be used. Other dimensions will have a chunk size of 1. true can be used to mean: use the original chunk size of the lazy Raster being written or X and Y of 256 by 256. false means don't use chunks at all.

  • ext: filename extension such as ".tiff" or ".nc". Used to specify specific files if only a directory path is used.

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file. For series with RasterStack child objects, this may be a NamedTuple, one for each layer.

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

  • vebose: whether to print messages about potential problems. true by default.

source

Base.write Method
julia
Base.write(filename::AbstractString, s::AbstractRasterStack; kw...)

Write any AbstractRasterStack to one or multiple files, depending on the backend. Backend is guessed from the filename extension or forced with the source keyword.

If the source can't be saved as a stack-like object, individual array layers will be saved.

Keywords

  • chunks: a NTuple{N,Int} specifying the chunk size for each dimension. To specify only specific dimensions, a Tuple of Dimension wrapping Int or a NamedTuple of Int can be used. Other dimensions will have a chunk size of 1. true can be used to mean: use the original chunk size of the lazy Raster being written or X and Y of 256 by 256. false means don't use chunks at all.

  • ext: filename extension such as ".tiff" or ".nc". Used to specify specific files if only a directory path is used.

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file. For RasterStack this may be a NamedTuple, one for each layer.

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

  • vebose: whether to print messages about potential problems. true by default.

Other keyword arguments are passed to the write method for the backend.

NetCDF keywords

GDAL Keywords

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • driver: A GDAL driver name String or a GDAL driver retrieved via ArchGDAL.getdriver(drivername). By default driver is guessed from the filename extension.

  • options::Dict{String,String}: A dictionary containing the dataset creation options passed to the driver. For example: Dict("COMPRESS" => "DEFLATE").

Valid driver names and the options for each can be found at: https://gdal.org/drivers/raster/index.html

Source comments

R grd/grid files

Write a Raster to a .grd file with a .gri header file. Returns the base of filename with a .grd extension.

GDAL (tiff, and everything else)

Used if you write a Raster with a filename extension that no other backend can write. GDAL is the fallback, and writes a lot of file types, but is not guaranteed to work.

source

Base.write Method
julia
Base.write(filename::AbstractString, A::AbstractRaster; [source], kw...)

Write an AbstractRaster to file, guessing the backend from the file extension or using the source keyword.

Keywords

  • chunks: a NTuple{N,Int} specifying the chunk size for each dimension. To specify only specific dimensions, a Tuple of Dimension wrapping Int or a NamedTuple of Int can be used. Other dimensions will have a chunk size of 1. true can be used to mean: use the original chunk size of the lazy Raster being written or X and Y of 256 by 256. false means don't use chunks at all.

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • missingval: set the missing value (i.e. FillValue / nodataval) of the written raster, as Julia's missing cannot be stored. If not passed in, an appropriate missingval will be detected from the objects missingval, its metadata, or a default will be chosen base on the array element type(s).

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

Other keyword arguments are passed to the write method for the backend.

NetCDF keywords

GDAL Keywords

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • driver: A GDAL driver name String or a GDAL driver retrieved via ArchGDAL.getdriver(drivername). By default driver is guessed from the filename extension.

  • options::Dict{String,String}: A dictionary containing the dataset creation options passed to the driver. For example: Dict("COMPRESS" => "DEFLATE").

Valid driver names and the options for each can be found at: https://gdal.org/drivers/raster/index.html

Source comments

R grd/grid files

Write a Raster to a .grd file with a .gri header file. Returns the base of filename with a .grd extension.

GDAL (tiff, and everything else)

Used if you write a Raster with a filename extension that no other backend can write. GDAL is the fallback, and writes a lot of file types, but is not guaranteed to work.

Returns filename.

source

Base.write Method
julia
Base.write(filename::AbstractString, ::Type{GRDsource}, s::AbstractRaster; kw...)

Write a Raster to a .grd file with a .gri header file.

This method is called automatically if you write a Raster with a .grd or .gri extension.

Keywords

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

If this method is called directly the extension of filename will be ignored.

Returns the base of filename with a .grd extension.

source

Rasters.checkmem! Method
julia
checkmem!(x::Bool)

Set checkmem to true or false.

In some architectures memory reporting may be wrong and you may wish to disable memory checks.

This setting can be overridden with the checkmem keyword, where applicable.

source

Rasters.rplot Method
julia
Rasters.rplot([position::GridPosition], raster; kw...)

raster may be a Raster (of 2 or 3 dimensions) or a RasterStack whose underlying rasters are 2 dimensional, or 3-dimensional with a singleton (length-1) third dimension.

Keywords

  • plottype = Makie.Heatmap: The type of plot. Can be any Makie plot type which accepts a Raster; in practice, Heatmap, Contour, Contourf and Surface are the best bets.

  • axistype = Makie.Axis: The type of axis. This can be an Axis, Axis3, LScene, or even a GeoAxis from GeoMakie.jl.

  • X = XDim: The X dimension of the raster.

  • Y = YDim: The Y dimension of the raster.

  • Z = YDim: The Y dimension of the raster.

  • draw_colorbar = true: Whether to draw a colorbar for the axis or not.

  • colorbar_position = Makie.Right(): Indicates which side of the axis the colorbar should be placed on. Can be Makie.Top(), Makie.Bottom(), Makie.Left(), or Makie.Right().

  • colorbar_padding = Makie.automatic: The amount of padding between the colorbar and its axis. If automatic, then this is set to the width of the colorbar.

  • title = Makie.automatic: The titles of each plot. If automatic, these are set to the name of the band.

  • xlabel = Makie.automatic: The x-label for the axis. If automatic, set to the dimension name of the X-dimension of the raster.

  • ylabel = Makie.automatic: The y-label for the axis. If automatic, set to the dimension name of the Y-dimension of the raster.

  • colorbarlabel = "": Usually nothing, but here if you need it. Sets the label on the colorbar.

  • colormap = nothing: The colormap for the heatmap. This can be set to a vector of colormaps (symbols, strings, cgrads) if plotting a 3D raster or RasterStack.

  • colorrange = Makie.automatic: The colormap for the heatmap. This can be set to a vector of (low, high) if plotting a 3D raster or RasterStack.

  • nan_color = :transparent: The color which NaN values should take. Default to transparent.

source

Rasters.sample Method

Rasters.sample([rng], x, [n::Integer]; kw...)

Sample n random and optionally weighted points from from a Raster or RasterStack. Returns a Vector of NamedTuple, closely resembling the return type of extract.

Run using StatsBase to make this method available. Note that this function is not exported to avoid confusion with StatsBase.sample

Keywords

  • geometry: include :geometry in returned NamedTuple. Specify the type and dimensions of the returned geometry by providing a Tuple or NamedTuple of dimensions. Defaults to (X,Y)

  • index: include :index of the CartesianIndex in returned NamedTuple, false by default.

  • name: a Symbol or Tuple of Symbol corresponding to layer/s of a RasterStack to extract. All layers by default.

  • skipmissing: skip missing points automatically.

  • weights: A DimArray that matches one or more of the dimensions of x with weights for sampling.

  • weightstype: a StatsBase.AbstractWeights specifying the type of weights. Defaults to StatsBase.Weights.

  • replace: sample with replacement, true by default. See StatsBase.sample

  • ordered: sample in order, false by default. See StatsBase.sample

Example

This code draws 5 random points from a raster, weighted by cell area.

julia
using Rasters, Rasters.Lookups, Proj, StatsBase
+read(A::AbstractRasterSeries)

read will move a Rasters.jl object completely to memory.

Keywords

  • checkmemory: if true (the default), check if there is enough memory for the operation. false will ignore memory needs.

source

Base.skipmissing Method
julia
skipmissing(itr::Raster)

Returns an iterable over the elements in a Raster object, skipping any values equal to either the missingval or missing.

source

Base.write Method
julia
Base.write(filepath::AbstractString, s::AbstractRasterSeries; kw...)

Write any AbstractRasterSeries to multiple files, guessing the backend from the file extension.

The lookup values of the series will be appended to the filepath (before the extension), separated by underscores.

All keywords are passed through to these Raster and RasterStack methods.

Keywords

  • chunks: a NTuple{N,Int} specifying the chunk size for each dimension. To specify only specific dimensions, a Tuple of Dimension wrapping Int or a NamedTuple of Int can be used. Other dimensions will have a chunk size of 1. true can be used to mean: use the original chunk size of the lazy Raster being written or X and Y of 256 by 256. false means don't use chunks at all.

  • ext: filename extension such as ".tiff" or ".nc". Used to specify specific files if only a directory path is used.

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file. For series with RasterStack child objects, this may be a NamedTuple, one for each layer.

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

  • vebose: whether to print messages about potential problems. true by default.

source

Base.write Method
julia
Base.write(filename::AbstractString, s::AbstractRasterStack; kw...)

Write any AbstractRasterStack to one or multiple files, depending on the backend. Backend is guessed from the filename extension or forced with the source keyword.

If the source can't be saved as a stack-like object, individual array layers will be saved.

Keywords

  • chunks: a NTuple{N,Int} specifying the chunk size for each dimension. To specify only specific dimensions, a Tuple of Dimension wrapping Int or a NamedTuple of Int can be used. Other dimensions will have a chunk size of 1. true can be used to mean: use the original chunk size of the lazy Raster being written or X and Y of 256 by 256. false means don't use chunks at all.

  • ext: filename extension such as ".tiff" or ".nc". Used to specify specific files if only a directory path is used.

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file. For RasterStack this may be a NamedTuple, one for each layer.

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

  • vebose: whether to print messages about potential problems. true by default.

Other keyword arguments are passed to the write method for the backend.

NetCDF keywords

GDAL Keywords

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • driver: A GDAL driver name String or a GDAL driver retrieved via ArchGDAL.getdriver(drivername). By default driver is guessed from the filename extension.

  • options::Dict{String,String}: A dictionary containing the dataset creation options passed to the driver. For example: Dict("COMPRESS" => "DEFLATE").

Valid driver names and the options for each can be found at: https://gdal.org/drivers/raster/index.html

Source comments

R grd/grid files

Write a Raster to a .grd file with a .gri header file. Returns the base of filename with a .grd extension.

GDAL (tiff, and everything else)

Used if you write a Raster with a filename extension that no other backend can write. GDAL is the fallback, and writes a lot of file types, but is not guaranteed to work.

source

Base.write Method
julia
Base.write(filename::AbstractString, A::AbstractRaster; [source], kw...)

Write an AbstractRaster to file, guessing the backend from the file extension or using the source keyword.

Keywords

  • chunks: a NTuple{N,Int} specifying the chunk size for each dimension. To specify only specific dimensions, a Tuple of Dimension wrapping Int or a NamedTuple of Int can be used. Other dimensions will have a chunk size of 1. true can be used to mean: use the original chunk size of the lazy Raster being written or X and Y of 256 by 256. false means don't use chunks at all.

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • missingval: set the missing value (i.e. FillValue / nodataval) of the written raster, as Julia's missing cannot be stored. If not passed in, an appropriate missingval will be detected from the objects missingval, its metadata, or a default will be chosen base on the array element type(s).

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

Other keyword arguments are passed to the write method for the backend.

NetCDF keywords

GDAL Keywords

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • driver: A GDAL driver name String or a GDAL driver retrieved via ArchGDAL.getdriver(drivername). By default driver is guessed from the filename extension.

  • options::Dict{String,String}: A dictionary containing the dataset creation options passed to the driver. For example: Dict("COMPRESS" => "DEFLATE").

Valid driver names and the options for each can be found at: https://gdal.org/drivers/raster/index.html

Source comments

R grd/grid files

Write a Raster to a .grd file with a .gri header file. Returns the base of filename with a .grd extension.

GDAL (tiff, and everything else)

Used if you write a Raster with a filename extension that no other backend can write. GDAL is the fallback, and writes a lot of file types, but is not guaranteed to work.

Returns filename.

source

Base.write Method
julia
Base.write(filename::AbstractString, ::Type{GRDsource}, s::AbstractRaster; kw...)

Write a Raster to a .grd file with a .gri header file.

This method is called automatically if you write a Raster with a .grd or .gri extension.

Keywords

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

If this method is called directly the extension of filename will be ignored.

Returns the base of filename with a .grd extension.

source

Rasters.checkmem! Method
julia
checkmem!(x::Bool)

Set checkmem to true or false.

In some architectures memory reporting may be wrong and you may wish to disable memory checks.

This setting can be overridden with the checkmem keyword, where applicable.

source

Rasters.rplot Method
julia
Rasters.rplot([position::GridPosition], raster; kw...)

raster may be a Raster (of 2 or 3 dimensions) or a RasterStack whose underlying rasters are 2 dimensional, or 3-dimensional with a singleton (length-1) third dimension.

Keywords

  • plottype = Makie.Heatmap: The type of plot. Can be any Makie plot type which accepts a Raster; in practice, Heatmap, Contour, Contourf and Surface are the best bets.

  • axistype = Makie.Axis: The type of axis. This can be an Axis, Axis3, LScene, or even a GeoAxis from GeoMakie.jl.

  • X = XDim: The X dimension of the raster.

  • Y = YDim: The Y dimension of the raster.

  • Z = YDim: The Y dimension of the raster.

  • draw_colorbar = true: Whether to draw a colorbar for the axis or not.

  • colorbar_position = Makie.Right(): Indicates which side of the axis the colorbar should be placed on. Can be Makie.Top(), Makie.Bottom(), Makie.Left(), or Makie.Right().

  • colorbar_padding = Makie.automatic: The amount of padding between the colorbar and its axis. If automatic, then this is set to the width of the colorbar.

  • title = Makie.automatic: The titles of each plot. If automatic, these are set to the name of the band.

  • xlabel = Makie.automatic: The x-label for the axis. If automatic, set to the dimension name of the X-dimension of the raster.

  • ylabel = Makie.automatic: The y-label for the axis. If automatic, set to the dimension name of the Y-dimension of the raster.

  • colorbarlabel = "": Usually nothing, but here if you need it. Sets the label on the colorbar.

  • colormap = nothing: The colormap for the heatmap. This can be set to a vector of colormaps (symbols, strings, cgrads) if plotting a 3D raster or RasterStack.

  • colorrange = Makie.automatic: The colormap for the heatmap. This can be set to a vector of (low, high) if plotting a 3D raster or RasterStack.

  • nan_color = :transparent: The color which NaN values should take. Default to transparent.

source

Rasters.sample Method

Rasters.sample([rng], x, [n::Integer]; kw...)

Sample n random and optionally weighted points from from a Raster or RasterStack. Returns a Vector of NamedTuple, closely resembling the return type of extract.

Run using StatsBase to make this method available. Note that this function is not exported to avoid confusion with StatsBase.sample

Keywords

  • geometry: include :geometry in returned NamedTuple. Specify the type and dimensions of the returned geometry by providing a Tuple or NamedTuple of dimensions. Defaults to (X,Y)

  • index: include :index of the CartesianIndex in returned NamedTuple, false by default.

  • name: a Symbol or Tuple of Symbol corresponding to layer/s of a RasterStack to extract. All layers by default.

  • skipmissing: skip missing points automatically.

  • weights: A DimArray that matches one or more of the dimensions of x with weights for sampling.

  • weightstype: a StatsBase.AbstractWeights specifying the type of weights. Defaults to StatsBase.Weights.

  • replace: sample with replacement, true by default. See StatsBase.sample

  • ordered: sample in order, false by default. See StatsBase.sample

Example

This code draws 5 random points from a raster, weighted by cell area.

julia
using Rasters, Rasters.Lookups, Proj, StatsBase
 xdim = X(Projected(90.0:10.0:120; sampling=Intervals(Start()), crs=EPSG(4326)))
 ydim = Y(Projected(0.0:10.0:50; sampling=Intervals(Start()), crs=EPSG(4326)))
 myraster = rand(xdim, ydim)
@@ -411,8 +411,8 @@
  @NamedTuple{geometry::Tuple{Float64, Float64}, ::Union{Missing, Float64}}(((90.0, 30.0), 0.5447657183842469))
  @NamedTuple{geometry::Tuple{Float64, Float64}, ::Union{Missing, Float64}}(((90.0, 30.0), 0.5447657183842469))
  @NamedTuple{geometry::Tuple{Float64, Float64}, ::Union{Missing, Float64}}(((90.0, 10.0), 0.7360504790189618))
- @NamedTuple{geometry::Tuple{Float64, Float64}, ::Union{Missing, Float64}}(((110.0, 10.0), 0.5291143028176258))

source

- + @NamedTuple{geometry::Tuple{Float64, Float64}, ::Union{Missing, Float64}}(((110.0, 10.0), 0.5291143028176258))

source

+ \ No newline at end of file diff --git a/dev/assets/api.md.BNfv_PPm.js b/dev/assets/api.md.B98S4G2z.js similarity index 97% rename from dev/assets/api.md.BNfv_PPm.js rename to dev/assets/api.md.B98S4G2z.js index 12216059..a2f0f83f 100644 --- a/dev/assets/api.md.BNfv_PPm.js +++ b/dev/assets/api.md.B98S4G2z.js @@ -1,20 +1,20 @@ -import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/framework.CS7uZ9fp.js";const h="/Rasters.jl/dev/assets/aggregate_example.vPDkaGne.png",d="/Rasters.jl/dev/assets/boolmask_example.B6nOyO_A.png",k="/Rasters.jl/dev/assets/classify_example.D0ZS4s3g.png",c="/Rasters.jl/dev/assets/classify_bang_example.Ch0DZvbI.png",g="/Rasters.jl/dev/assets/nz_crop_example.Dgn6MbZF.png",E="/Rasters.jl/dev/assets/argentina_crop_example.DlKBBk5m.png",y="/Rasters.jl/dev/assets/extend_example.DNJ4wwKN.png",u="/Rasters.jl/dev/assets/boolmask_example.B6nOyO_A.png",m="/Rasters.jl/dev/assets/mosaic_bang_example.Cvk5RuyI.png",b="/Rasters.jl/dev/assets/mosaic_example_combined.YolyGcS6.png",f="/Rasters.jl/dev/assets/china_rasterized.kM95Jnlf.png",F="/Rasters.jl/dev/assets/indonesia_rasterized.CAASrLmh.png",C="/Rasters.jl/dev/assets/warp_example_before.DrW8As6m.png",A="/Rasters.jl/dev/assets/resample_example_after.C_gavhhT.png",v="/Rasters.jl/dev/assets/trim_example_before.CicUDTMv.png",R="/Rasters.jl/dev/assets/trim_example_after.DqVtyr0a.png",D="/Rasters.jl/dev/assets/warp_example_before.DrW8As6m.png",B="/Rasters.jl/dev/assets/warp_example_after.rgHHAHxc.png",Ys=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),j={name:"api.md"},w={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},_={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},S={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},N={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},L={class:"jldocstring custom-block",open:""},z={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},G={class:"jldocstring custom-block",open:""},M={class:"jldocstring custom-block",open:""},O={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},W={class:"jldocstring custom-block",open:""},K={class:"jldocstring custom-block",open:""},Y={class:"jldocstring custom-block",open:""},X={class:"jldocstring custom-block",open:""},H={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},$={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},ss={class:"jldocstring custom-block",open:""},is={class:"jldocstring custom-block",open:""},es={class:"jldocstring custom-block",open:""},as={class:"jldocstring custom-block",open:""},ts={class:"jldocstring custom-block",open:""},ns={class:"jldocstring custom-block",open:""},ls={class:"jldocstring custom-block",open:""},os={class:"jldocstring custom-block",open:""},ps={class:"jldocstring custom-block",open:""},rs={class:"jldocstring custom-block",open:""},hs={class:"jldocstring custom-block",open:""},ds={class:"jldocstring custom-block",open:""},ks={class:"jldocstring custom-block",open:""},cs={class:"jldocstring custom-block",open:""},gs={class:"jldocstring custom-block",open:""},Es={class:"jldocstring custom-block",open:""},ys={class:"jldocstring custom-block",open:""},us={class:"jldocstring custom-block",open:""},ms={class:"jldocstring custom-block",open:""},bs={class:"jldocstring custom-block",open:""},fs={class:"jldocstring custom-block",open:""},Fs={class:"jldocstring custom-block",open:""},Cs={class:"jldocstring custom-block",open:""},As={class:"jldocstring custom-block",open:""},vs={class:"jldocstring custom-block",open:""},Rs={class:"jldocstring custom-block",open:""},Ds={class:"jldocstring custom-block",open:""},Bs={class:"jldocstring custom-block",open:""},js={class:"jldocstring custom-block",open:""},ws={class:"jldocstring custom-block",open:""},Ts={class:"jldocstring custom-block",open:""},_s={class:"jldocstring custom-block",open:""},xs={class:"jldocstring custom-block",open:""},Ss={class:"jldocstring custom-block",open:""},Is={class:"jldocstring custom-block",open:""},Ns={class:"jldocstring custom-block",open:""},Ps={class:"jldocstring custom-block",open:""},qs={class:"jldocstring custom-block",open:""},Ls={class:"jldocstring custom-block",open:""},zs={class:"jldocstring custom-block",open:""};function Vs(Gs,s,Ms,Os,Us,Ws){const a=p("Badge");return r(),o("div",null,[s[195]||(s[195]=t('

Index

Reference - Exported functions

',3)),i("details",w,[i("summary",null,[s[0]||(s[0]=i("a",{id:"Rasters.Rasters",href:"#Rasters.Rasters"},[i("span",{class:"jlbinding"},"Rasters.Rasters")],-1)),s[1]||(s[1]=e()),n(a,{type:"info",class:"jlObjectType jlModule",text:"Module"})]),s[2]||(s[2]=i("p",null,[i("a",{href:"https://github.com/rafaqz/Rasters.jl/blob/b55b28f0cdd2a7296eeb0f85f64cc0ed9b2d79b7/src/Rasters.jl#L4",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",T,[i("summary",null,[s[3]||(s[3]=i("a",{id:"Rasters.AbstractRaster",href:"#Rasters.AbstractRaster"},[i("span",{class:"jlbinding"},"Rasters.AbstractRaster")],-1)),s[4]||(s[4]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[5]||(s[5]=t('
julia
AbstractRaster <: DimensionalData.AbstractDimArray

Abstract supertype for objects that wrap an array (or location of an array) and metadata about its contents. It may be memory or hold a FileArray, which holds the filename, and is only opened when required.

AbstractRasters inherit from AbstractDimArray from DimensionalData.jl. They can be indexed as regular Julia arrays or with DimensionalData.jl Dimensions. They will plot as a heatmap in Plots.jl with correct coordinates and labels, even after slicing with getindex or view. getindex on a AbstractRaster will always return a memory-backed Raster.

source

',4))]),i("details",_,[i("summary",null,[s[6]||(s[6]=i("a",{id:"Rasters.AbstractRasterSeries",href:"#Rasters.AbstractRasterSeries"},[i("span",{class:"jlbinding"},"Rasters.AbstractRasterSeries")],-1)),s[7]||(s[7]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[8]||(s[8]=t('
julia
AbstractRasterSeries <: DimensionalData.AbstractDimensionalArray

Abstract supertype for high-level DimensionalArray that hold RasterStacks, Rasters, or the paths they can be loaded from. RasterSeries are indexed with dimensions as with a AbstractRaster. This is useful when you have multiple files containing rasters or stacks of rasters spread over dimensions like time and elevation.

As much as possible, implementations should facilitate loading entire directories and detecting the dimensions from metadata.

This allows syntax like below for a series of stacks of arrays:

julia
RasterSeries[Time(Near(DateTime(2001, 1))][:temp][Y(Between(70, 150)), X(Between(-20,20))] |> plot`

RasterSeries is the concrete implementation.

source

',7))]),i("details",x,[i("summary",null,[s[9]||(s[9]=i("a",{id:"Rasters.AbstractRasterStack",href:"#Rasters.AbstractRasterStack"},[i("span",{class:"jlbinding"},"Rasters.AbstractRasterStack")],-1)),s[10]||(s[10]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[11]||(s[11]=t('
julia
AbstractRasterStack

Abstract supertype for objects that hold multiple AbstractRasters that share spatial dimensions.

They are NamedTuple-like structures that may either contain NamedTuple of AbstractRasters, string paths that will load AbstractRasters, or a single path that points to a file containing multiple layers, like NetCDF or HDF5. Use and syntax is similar or identical for all cases.

AbstractRasterStack can hold layers that share some or all of their dimensions. They cannot have the same dimension with different length or spatial extent as another layer.

getindex on an AbstractRasterStack generally returns a memory backed standard Raster. raster[:somelayer] |> plot plots the layers array, while raster[:somelayer, X(1:100), Band(2)] |> plot will plot the subset without loading the whole array.

getindex on an AbstractRasterStack with a key returns another stack with getindex applied to all the arrays in the stack.

source

',7))]),i("details",S,[i("summary",null,[s[12]||(s[12]=i("a",{id:"Rasters.Band",href:"#Rasters.Band"},[i("span",{class:"jlbinding"},"Rasters.Band")],-1)),s[13]||(s[13]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[14]||(s[14]=t(`
julia
Band <: Dimension
+import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/framework.CS7uZ9fp.js";const d="/Rasters.jl/dev/assets/aggregate_example.vPDkaGne.png",h="/Rasters.jl/dev/assets/boolmask_example.B6nOyO_A.png",k="/Rasters.jl/dev/assets/classify_example.D0ZS4s3g.png",c="/Rasters.jl/dev/assets/classify_bang_example.Ch0DZvbI.png",g="/Rasters.jl/dev/assets/nz_crop_example.Dgn6MbZF.png",E="/Rasters.jl/dev/assets/argentina_crop_example.DlKBBk5m.png",y="/Rasters.jl/dev/assets/extend_example.DNJ4wwKN.png",u="/Rasters.jl/dev/assets/boolmask_example.B6nOyO_A.png",m="/Rasters.jl/dev/assets/mosaic_bang_example.Cvk5RuyI.png",b="/Rasters.jl/dev/assets/mosaic_example_combined.YolyGcS6.png",F="/Rasters.jl/dev/assets/china_rasterized.kM95Jnlf.png",f="/Rasters.jl/dev/assets/indonesia_rasterized.CAASrLmh.png",C="/Rasters.jl/dev/assets/warp_example_before.DrW8As6m.png",A="/Rasters.jl/dev/assets/resample_example_after.C_gavhhT.png",v="/Rasters.jl/dev/assets/trim_example_before.CicUDTMv.png",R="/Rasters.jl/dev/assets/trim_example_after.DqVtyr0a.png",D="/Rasters.jl/dev/assets/warp_example_before.DrW8As6m.png",B="/Rasters.jl/dev/assets/warp_example_after.rgHHAHxc.png",Ys=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),j={name:"api.md"},w={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},_={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},S={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},N={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},L={class:"jldocstring custom-block",open:""},z={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},G={class:"jldocstring custom-block",open:""},M={class:"jldocstring custom-block",open:""},O={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},W={class:"jldocstring custom-block",open:""},K={class:"jldocstring custom-block",open:""},Y={class:"jldocstring custom-block",open:""},X={class:"jldocstring custom-block",open:""},H={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},$={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},ss={class:"jldocstring custom-block",open:""},is={class:"jldocstring custom-block",open:""},es={class:"jldocstring custom-block",open:""},as={class:"jldocstring custom-block",open:""},ts={class:"jldocstring custom-block",open:""},ns={class:"jldocstring custom-block",open:""},ls={class:"jldocstring custom-block",open:""},os={class:"jldocstring custom-block",open:""},ps={class:"jldocstring custom-block",open:""},rs={class:"jldocstring custom-block",open:""},ds={class:"jldocstring custom-block",open:""},hs={class:"jldocstring custom-block",open:""},ks={class:"jldocstring custom-block",open:""},cs={class:"jldocstring custom-block",open:""},gs={class:"jldocstring custom-block",open:""},Es={class:"jldocstring custom-block",open:""},ys={class:"jldocstring custom-block",open:""},us={class:"jldocstring custom-block",open:""},ms={class:"jldocstring custom-block",open:""},bs={class:"jldocstring custom-block",open:""},Fs={class:"jldocstring custom-block",open:""},fs={class:"jldocstring custom-block",open:""},Cs={class:"jldocstring custom-block",open:""},As={class:"jldocstring custom-block",open:""},vs={class:"jldocstring custom-block",open:""},Rs={class:"jldocstring custom-block",open:""},Ds={class:"jldocstring custom-block",open:""},Bs={class:"jldocstring custom-block",open:""},js={class:"jldocstring custom-block",open:""},ws={class:"jldocstring custom-block",open:""},Ts={class:"jldocstring custom-block",open:""},_s={class:"jldocstring custom-block",open:""},xs={class:"jldocstring custom-block",open:""},Ss={class:"jldocstring custom-block",open:""},Is={class:"jldocstring custom-block",open:""},Ns={class:"jldocstring custom-block",open:""},Ps={class:"jldocstring custom-block",open:""},qs={class:"jldocstring custom-block",open:""},Ls={class:"jldocstring custom-block",open:""},zs={class:"jldocstring custom-block",open:""};function Vs(Gs,s,Ms,Os,Us,Ws){const a=p("Badge");return r(),o("div",null,[s[195]||(s[195]=t('

Index

Reference - Exported functions

',3)),i("details",w,[i("summary",null,[s[0]||(s[0]=i("a",{id:"Rasters.Rasters",href:"#Rasters.Rasters"},[i("span",{class:"jlbinding"},"Rasters.Rasters")],-1)),s[1]||(s[1]=e()),n(a,{type:"info",class:"jlObjectType jlModule",text:"Module"})]),s[2]||(s[2]=i("p",null,[i("a",{href:"https://github.com/rafaqz/Rasters.jl/blob/99e2b527c73143d05bdb0b1bcd1d7db419883be0/src/Rasters.jl#L4",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",T,[i("summary",null,[s[3]||(s[3]=i("a",{id:"Rasters.AbstractRaster",href:"#Rasters.AbstractRaster"},[i("span",{class:"jlbinding"},"Rasters.AbstractRaster")],-1)),s[4]||(s[4]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[5]||(s[5]=t('
julia
AbstractRaster <: DimensionalData.AbstractDimArray

Abstract supertype for objects that wrap an array (or location of an array) and metadata about its contents. It may be memory or hold a FileArray, which holds the filename, and is only opened when required.

AbstractRasters inherit from AbstractDimArray from DimensionalData.jl. They can be indexed as regular Julia arrays or with DimensionalData.jl Dimensions. They will plot as a heatmap in Plots.jl with correct coordinates and labels, even after slicing with getindex or view. getindex on a AbstractRaster will always return a memory-backed Raster.

source

',4))]),i("details",_,[i("summary",null,[s[6]||(s[6]=i("a",{id:"Rasters.AbstractRasterSeries",href:"#Rasters.AbstractRasterSeries"},[i("span",{class:"jlbinding"},"Rasters.AbstractRasterSeries")],-1)),s[7]||(s[7]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[8]||(s[8]=t('
julia
AbstractRasterSeries <: DimensionalData.AbstractDimensionalArray

Abstract supertype for high-level DimensionalArray that hold RasterStacks, Rasters, or the paths they can be loaded from. RasterSeries are indexed with dimensions as with a AbstractRaster. This is useful when you have multiple files containing rasters or stacks of rasters spread over dimensions like time and elevation.

As much as possible, implementations should facilitate loading entire directories and detecting the dimensions from metadata.

This allows syntax like below for a series of stacks of arrays:

julia
RasterSeries[Time(Near(DateTime(2001, 1))][:temp][Y(Between(70, 150)), X(Between(-20,20))] |> plot`

RasterSeries is the concrete implementation.

source

',7))]),i("details",x,[i("summary",null,[s[9]||(s[9]=i("a",{id:"Rasters.AbstractRasterStack",href:"#Rasters.AbstractRasterStack"},[i("span",{class:"jlbinding"},"Rasters.AbstractRasterStack")],-1)),s[10]||(s[10]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[11]||(s[11]=t('
julia
AbstractRasterStack

Abstract supertype for objects that hold multiple AbstractRasters that share spatial dimensions.

They are NamedTuple-like structures that may either contain NamedTuple of AbstractRasters, string paths that will load AbstractRasters, or a single path that points to a file containing multiple layers, like NetCDF or HDF5. Use and syntax is similar or identical for all cases.

AbstractRasterStack can hold layers that share some or all of their dimensions. They cannot have the same dimension with different length or spatial extent as another layer.

getindex on an AbstractRasterStack generally returns a memory backed standard Raster. raster[:somelayer] |> plot plots the layers array, while raster[:somelayer, X(1:100), Band(2)] |> plot will plot the subset without loading the whole array.

getindex on an AbstractRasterStack with a key returns another stack with getindex applied to all the arrays in the stack.

source

',7))]),i("details",S,[i("summary",null,[s[12]||(s[12]=i("a",{id:"Rasters.Band",href:"#Rasters.Band"},[i("span",{class:"jlbinding"},"Rasters.Band")],-1)),s[13]||(s[13]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[14]||(s[14]=t(`
julia
Band <: Dimension
 
 Band(val=:)

Band Dimension for multi-band rasters.

Example:

julia
banddim = Band(10:10:100)
 # Or
 val = A[Band(1)]
 # Or
-mean(A; dims=Band)

source

`,5))]),i("details",I,[i("summary",null,[s[15]||(s[15]=i("a",{id:"Rasters.Mapped",href:"#Rasters.Mapped"},[i("span",{class:"jlbinding"},"Rasters.Mapped")],-1)),s[16]||(s[16]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[17]||(s[17]=t(`
julia
Mapped <: AbstractProjected
+mean(A; dims=Band)

source

`,5))]),i("details",I,[i("summary",null,[s[15]||(s[15]=i("a",{id:"Rasters.Mapped",href:"#Rasters.Mapped"},[i("span",{class:"jlbinding"},"Rasters.Mapped")],-1)),s[16]||(s[16]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[17]||(s[17]=t(`
julia
Mapped <: AbstractProjected
 
 Mapped(order, span, sampling, crs, mappedcrs)
-Mapped(; order=AutoOrder(), span=AutoSpan(), sampling=AutoSampling(), crs=nothing, mappedcrs)

An AbstractSampled Lookup, where the dimension index has been mapped to another projection, usually lat/lon or EPSG(4326). Mapped matches the dimension format commonly used in netcdf files.

Fields and behaviours are identical to Sampled with the addition of crs and mappedcrs fields.

The mapped dimension index will be used as for Sampled, but to save in another format the underlying crs may be used to convert it.

source

`,5))]),i("details",N,[i("summary",null,[s[18]||(s[18]=i("a",{id:"Rasters.Projected",href:"#Rasters.Projected"},[i("span",{class:"jlbinding"},"Rasters.Projected")],-1)),s[19]||(s[19]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[20]||(s[20]=t(`
julia
Projected <: AbstractProjected
+Mapped(; order=AutoOrder(), span=AutoSpan(), sampling=AutoSampling(), crs=nothing, mappedcrs)

An AbstractSampled Lookup, where the dimension index has been mapped to another projection, usually lat/lon or EPSG(4326). Mapped matches the dimension format commonly used in netcdf files.

Fields and behaviours are identical to Sampled with the addition of crs and mappedcrs fields.

The mapped dimension index will be used as for Sampled, but to save in another format the underlying crs may be used to convert it.

source

`,5))]),i("details",N,[i("summary",null,[s[18]||(s[18]=i("a",{id:"Rasters.Projected",href:"#Rasters.Projected"},[i("span",{class:"jlbinding"},"Rasters.Projected")],-1)),s[19]||(s[19]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[20]||(s[20]=t(`
julia
Projected <: AbstractProjected
 
 Projected(order, span, sampling, crs, mappedcrs)
-Projected(; order=AutoOrder(), span=AutoSpan(), sampling=AutoSampling(), crs, mappedcrs=nothing)

An AbstractSampled Lookup with projections attached.

Fields and behaviours are identical to Sampled with the addition of crs and mappedcrs fields.

If both crs and mappedcrs fields contain CRS data (in a GeoFormat wrapper from GeoFormatTypes.jl) the selector inputs and plot axes will be converted from and to the specified mappedcrs projection automatically. A common use case would be to pass mappedcrs=EPSG(4326) to the constructor when loading eg. a GDALarray:

julia
GDALarray(filename; mappedcrs=EPSG(4326))

The underlying crs will be detected by GDAL.

If mappedcrs is not supplied (ie. mappedcrs=nothing), the base index will be shown on plots, and selectors will need to use whatever format it is in.

source

`,8))]),i("details",P,[i("summary",null,[s[21]||(s[21]=i("a",{id:"Rasters.Raster",href:"#Rasters.Raster"},[i("span",{class:"jlbinding"},"Rasters.Raster")],-1)),s[22]||(s[22]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[23]||(s[23]=t(`
julia
Raster <: AbstractRaster
+Projected(; order=AutoOrder(), span=AutoSpan(), sampling=AutoSampling(), crs, mappedcrs=nothing)

An AbstractSampled Lookup with projections attached.

Fields and behaviours are identical to Sampled with the addition of crs and mappedcrs fields.

If both crs and mappedcrs fields contain CRS data (in a GeoFormat wrapper from GeoFormatTypes.jl) the selector inputs and plot axes will be converted from and to the specified mappedcrs projection automatically. A common use case would be to pass mappedcrs=EPSG(4326) to the constructor when loading eg. a GDALarray:

julia
GDALarray(filename; mappedcrs=EPSG(4326))

The underlying crs will be detected by GDAL.

If mappedcrs is not supplied (ie. mappedcrs=nothing), the base index will be shown on plots, and selectors will need to use whatever format it is in.

source

`,8))]),i("details",P,[i("summary",null,[s[21]||(s[21]=i("a",{id:"Rasters.Raster",href:"#Rasters.Raster"},[i("span",{class:"jlbinding"},"Rasters.Raster")],-1)),s[22]||(s[22]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[23]||(s[23]=t(`
julia
Raster <: AbstractRaster
 
 Raster(filepath::String; kw...)
 Raster(A::AbstractDimArray; kw...)
-Raster(A::AbstractArray, dims; kw...)

A generic AbstractRaster for spatial/raster array data. It can hold either memory-backed arrays or, if lazy=true, a FileArray, which stores the String path to an unopened file.

If lazy=true, the file will only be opened lazily when it is indexed with getindex or when read(A) is called. Broadcasting, taking a view, reversing, and most other methods will not load data from disk; they will be applied later, lazily.

Arguments

  • dims: Tuple of Dimensions needed when an AbstractArray is used.

Keywords

  • name: a Symbol name for a Raster, which will also retrieve the a named layer if Raster is used on a multi-layered file like a NetCDF.

  • group: the group in the dataset where name can be found. Only needed for nested datasets. A String or Symbol will select a single group. Pairs can also used to access groups at any nested depth, i.e group=:group1 => :group2 => :group3.

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file.

  • metadata: Dict or Metadata object for the array, or NoMetadata().

  • crs: the coordinate reference system of the objects XDim/YDim dimensions. Only set this if you know the detected crs is incorrect, or it is not present in the file. The crs is expected to be a GeoFormatTypes.jl CRS or Mixed mode GeoFormat object, like EPSG(4326).

  • mappedcrs: the mapped coordinate reference system of the objects XDim/YDim dimensions. for Mapped lookups these are the actual values of the index. For Projected lookups this can be used to index in eg. EPSG(4326) lat/lon values, having it converted automatically. Only set this if the detected mappedcrs in incorrect, or the file does not have a mappedcrs, e.g. a tiff. The mappedcrs is expected to be a GeoFormatTypes.jl CRS or Mixed mode GeoFormat type.

  • refdims: Tuple of position Dimensions the array was sliced from, defaulting to (). Usually not needed.

When a filepath String is used:

  • dropband: drop single band dimensions when creating stacks from filenames. true by default.

  • lazy: A Bool specifying if to load data lazily from disk. false by default.

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

  • scaled: apply scale and offset as x * scale + offset where scale and/or offset are found in file metadata. true by default. This is common where data has been convert to e.g. UInt8 to save disk space. To ignore scale and offset metadata, use scaled=false. Note 1: If scale and offset are 1.0 and 0.0 they will be ignored and the original type will be used even when scaled=true. This is because these values may be fallback defaults and we do not want to convert every Real array to larger Float64 values. Note 2: raw=true will ignore scaled and missingval and return the raw values.

  • raw: turn of all scaling and masking and load the raw values from disk. false by default. If true, scaled will be set to false and missingval will to the existing missing value in the file. A warning will be printed if scaled or missingval are manually set to another value.

When A is an AbstractDimArray:

  • data: can replace the data in an existing AbstractRaster

source

`,12))]),i("details",q,[i("summary",null,[s[24]||(s[24]=i("a",{id:"Rasters.RasterSeries",href:"#Rasters.RasterSeries"},[i("span",{class:"jlbinding"},"Rasters.RasterSeries")],-1)),s[25]||(s[25]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[26]||(s[26]=t(`
julia
RasterSeries <: AbstractRasterSeries
+Raster(A::AbstractArray, dims; kw...)

A generic AbstractRaster for spatial/raster array data. It can hold either memory-backed arrays or, if lazy=true, a FileArray, which stores the String path to an unopened file.

If lazy=true, the file will only be opened lazily when it is indexed with getindex or when read(A) is called. Broadcasting, taking a view, reversing, and most other methods will not load data from disk; they will be applied later, lazily.

Arguments

  • dims: Tuple of Dimensions needed when an AbstractArray is used.

Keywords

  • name: a Symbol name for a Raster, which will also retrieve the a named layer if Raster is used on a multi-layered file like a NetCDF.

  • group: the group in the dataset where name can be found. Only needed for nested datasets. A String or Symbol will select a single group. Pairs can also used to access groups at any nested depth, i.e group=:group1 => :group2 => :group3.

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file.

  • metadata: Dict or Metadata object for the array, or NoMetadata().

  • crs: the coordinate reference system of the objects XDim/YDim dimensions. Only set this if you know the detected crs is incorrect, or it is not present in the file. The crs is expected to be a GeoFormatTypes.jl CRS or Mixed mode GeoFormat object, like EPSG(4326).

  • mappedcrs: the mapped coordinate reference system of the objects XDim/YDim dimensions. for Mapped lookups these are the actual values of the index. For Projected lookups this can be used to index in eg. EPSG(4326) lat/lon values, having it converted automatically. Only set this if the detected mappedcrs in incorrect, or the file does not have a mappedcrs, e.g. a tiff. The mappedcrs is expected to be a GeoFormatTypes.jl CRS or Mixed mode GeoFormat type.

  • refdims: Tuple of position Dimensions the array was sliced from, defaulting to (). Usually not needed.

When a filepath String is used:

  • dropband: drop single band dimensions when creating stacks from filenames. true by default.

  • lazy: A Bool specifying if to load data lazily from disk. false by default.

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

  • scaled: apply scale and offset as x * scale + offset where scale and/or offset are found in file metadata. true by default. This is common where data has been convert to e.g. UInt8 to save disk space. To ignore scale and offset metadata, use scaled=false. Note 1: If scale and offset are 1.0 and 0.0 they will be ignored and the original type will be used even when scaled=true. This is because these values may be fallback defaults and we do not want to convert every Real array to larger Float64 values. Note 2: raw=true will ignore scaled and missingval and return the raw values.

  • raw: turn of all scaling and masking and load the raw values from disk. false by default. If true, scaled will be set to false and missingval will to the existing missing value in the file. A warning will be printed if scaled or missingval are manually set to another value.

When A is an AbstractDimArray:

  • data: can replace the data in an existing AbstractRaster

source

`,12))]),i("details",q,[i("summary",null,[s[24]||(s[24]=i("a",{id:"Rasters.RasterSeries",href:"#Rasters.RasterSeries"},[i("span",{class:"jlbinding"},"Rasters.RasterSeries")],-1)),s[25]||(s[25]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[26]||(s[26]=t(`
julia
RasterSeries <: AbstractRasterSeries
 
 RasterSeries(rasters::AbstractArray{<:AbstractRaster}, dims; [refdims])
 RasterSeries(stacks::AbstractArray{<:AbstractRasterStack}, dims; [refdims]) 
@@ -27,7 +27,7 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
 2-element RasterSeries{Raster,1} with dimensions: 
   Ti Sampled{DateTime} DateTime[DateTime("2001-01-01T00:00:00"), DateTime("2002-01-01T00:00:00")] ForwardOrdered Irregular Points

The DateTime suffix is parsed from the filenames. Using Ti(Int) would try to parse integers instead.

Just using the directory will also work, unless there are other files mixed in it:

julia
julia> ser = RasterSeries("series_dir", Ti(DateTime))
 2-element RasterSeries{Raster,1} with dimensions: 
-  Ti Sampled{DateTime} DateTime[DateTime("2001-01-01T00:00:00"), DateTime("2002-01-01T00:00:00")] ForwardOrdered Irregular Points

Arguments

  • dims: series dimension/s.

Keywords

When loading a series from a Vector of String paths or a single String path:

  • child: constructor of child objects for use when filenames are passed in, can be Raster or RasterStack. Defaults to Raster.

  • duplicate_first::Bool: wether to duplicate the dimensions and metadata of the first file with all other files. This can save load time with a large series where dimensions are identical. false by default.

  • lazy: A Bool specifying if to load data lazily from disk. false by default.

  • kw: keywords passed to the child constructor Raster or RasterStack.

When loading a series from a single String path:

  • separator: separator used to split lookup elements from the rest of a filename. '_' by default.

Others:

  • refdims: existing reference dimension/s, normally not required.

source

`,22))]),i("details",L,[i("summary",null,[s[27]||(s[27]=i("a",{id:"Rasters.RasterStack",href:"#Rasters.RasterStack"},[i("span",{class:"jlbinding"},"Rasters.RasterStack")],-1)),s[28]||(s[28]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[29]||(s[29]=t(`
julia
RasterStack <: AbstrackRasterStack
+  Ti Sampled{DateTime} DateTime[DateTime("2001-01-01T00:00:00"), DateTime("2002-01-01T00:00:00")] ForwardOrdered Irregular Points

Arguments

  • dims: series dimension/s.

Keywords

When loading a series from a Vector of String paths or a single String path:

  • child: constructor of child objects for use when filenames are passed in, can be Raster or RasterStack. Defaults to Raster.

  • duplicate_first::Bool: wether to duplicate the dimensions and metadata of the first file with all other files. This can save load time with a large series where dimensions are identical. false by default.

  • lazy: A Bool specifying if to load data lazily from disk. false by default.

  • kw: keywords passed to the child constructor Raster or RasterStack.

When loading a series from a single String path:

  • separator: separator used to split lookup elements from the rest of a filename. '_' by default.

Others:

  • refdims: existing reference dimension/s, normally not required.

source

`,22))]),i("details",L,[i("summary",null,[s[27]||(s[27]=i("a",{id:"Rasters.RasterStack",href:"#Rasters.RasterStack"},[i("span",{class:"jlbinding"},"Rasters.RasterStack")],-1)),s[28]||(s[28]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[29]||(s[29]=t(`
julia
RasterStack <: AbstrackRasterStack
 
 RasterStack(data...; name, kw...)
 RasterStack(data::Union{Vector,Tuple}; name, kw...)
@@ -36,14 +36,14 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
 RasterStack(data::Raster; layersfrom=Band, kw...)
 RasterStack(filepath::AbstractString; kw...)

Load a file path or a NamedTuple of paths as a RasterStack, or convert arguments, a Vector or NamedTuple of Rasters to RasterStack.

Arguments

  • data: A NamedTuple of Rasters or String, or a Vector, Tuple or splatted arguments of Raster. The latter options must pass a name keyword argument.

  • filepath: A file (such as netcdf or tif) to be loaded as a stack, or a directory path containing multiple files.

Keywords

  • name: Used as stack layer names when a Tuple, Vector or splat of Raster is passed in. Has no effect when NameTuple is used - the NamedTuple keys are the layer names.

  • group: the group in the dataset where name can be found. Only needed for nested datasets. A String or Symbol will select a single group. Pairs can also used to access groups at any nested depth, i.e group=:group1 => :group2 => :group3.

  • metadata: A Dict or DimensionalData.Metadata object.

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file. For RasterStack a NamedTuple can also be passed if layers should have different missingval.

  • crs: the coordinate reference system of the objects XDim/YDim dimensions. Only set this if you know the detected crs is incorrect, or it is not present in the file. The crs is expected to be a GeoFormatTypes.jl CRS or Mixed mode GeoFormat object, like EPSG(4326).

  • mappedcrs: the mapped coordinate reference system of the objects XDim/YDim dimensions. for Mapped lookups these are the actual values of the index. For Projected lookups this can be used to index in eg. EPSG(4326) lat/lon values, having it converted automatically. Only set this if the detected mappedcrs in incorrect, or the file does not have a mappedcrs, e.g. a tiff. The mappedcrs is expected to be a GeoFormatTypes.jl CRS or Mixed mode GeoFormat type.

  • refdims: Tuple of Dimension that the stack was sliced from.

For when one or multiple filepaths are used:

  • dropband: drop single band dimensions when creating stacks from filenames. true by default.

  • lazy: A Bool specifying if to load data lazily from disk. false by default.

  • raw: turn of all scaling and masking and load the raw values from disk. false by default. If true, scaled will be set to false and missingval will to the existing missing value in the file. A warning will be printed if scaled or missingval are manually set to another value.

  • scaled: apply scale and offset as x * scale + offset where scale and/or offset are found in file metadata. true by default. This is common where data has been convert to e.g. UInt8 to save disk space. To ignore scale and offset metadata, use scaled=false. Note 1: If scale and offset are 1.0 and 0.0 they will be ignored and the original type will be used even when scaled=true. This is because these values may be fallback defaults and we do not want to convert every Real array to larger Float64 values. Note 2: raw=true will ignore scaled and missingval and return the raw values.

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

For when a single Raster is used:

  • layersfrom: Dimension to source stack layers from if the file is not already multi-layered. nothing is default, so that a single RasterStack(raster) is a single layered stack. RasterStack(raster; layersfrom=Band) will use the bands as layers.
julia
files = (temp="temp.tif", pressure="pressure.tif", relhum="relhum.tif")
 stack = RasterStack(files; mappedcrs=EPSG(4326))
-stack[:relhum][Lat(Contains(-37), Lon(Contains(144))

source

`,12))]),i("details",z,[i("summary",null,[s[30]||(s[30]=i("a",{id:"DimensionalData.modify-Tuple{Any, AbstractRasterSeries}",href:"#DimensionalData.modify-Tuple{Any, AbstractRasterSeries}"},[i("span",{class:"jlbinding"},"DimensionalData.modify")],-1)),s[31]||(s[31]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[32]||(s[32]=t('
julia
modify(f, series::AbstractRasterSeries)

Apply function f to the data of the child object. If the child is an AbstractRasterStack the function will be passed on to its child AbstractRasters.

f must return an identically sized array.

This method triggers a complete rebuild of all objects, and disk based objects will be transferred to memory.

An example of the usefulnesss of this is for swapping out array backend for an entire series to CuArray from CUDA.jl to copy data to a GPU.

source

',6))]),i("details",V,[i("summary",null,[s[33]||(s[33]=i("a",{id:"GeoInterface.crs-Tuple{Union{Tuple{Dimension, Vararg{Dimension}}, AbstractRaster, AbstractRasterSeries, AbstractRasterStack}}",href:"#GeoInterface.crs-Tuple{Union{Tuple{Dimension, Vararg{Dimension}}, AbstractRaster, AbstractRasterSeries, AbstractRasterStack}}"},[i("span",{class:"jlbinding"},"GeoInterface.crs")],-1)),s[34]||(s[34]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[35]||(s[35]=t('
julia
crs(x::Raster)

Get the projected coordinate reference system of a Y or X Dimension, or of the Y/X dims of an AbstractRaster.

For Mapped lookup this may be nothing as there may be no projected coordinate reference system at all. See setcrs to set it manually.

source

',4))]),i("details",G,[i("summary",null,[s[36]||(s[36]=i("a",{id:"Rasters.aggregate",href:"#Rasters.aggregate"},[i("span",{class:"jlbinding"},"Rasters.aggregate")],-1)),s[37]||(s[37]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[38]||(s[38]=t(`
julia
aggregate(method, object, scale; kw...)

Aggregate a Raster, or all arrays in a RasterStack or RasterSeries, by scale using method.

Arguments

  • method: a function such as mean or sum that can combine the value of multiple cells to generate the aggregated cell, or a Locus like Start() or Center() that species where to sample from in the interval.

  • object: Object to aggregate, like AbstractRasterSeries, AbstractStack, AbstractRaster or Dimension.

  • scale: the aggregation factor, which can be an Int, a Tuple of Int for each dimension, or a : colon to mean the whole dimension. You can also use any Dimension, Selector or Int combination you can usually use in getindex. Tuple of Pair or NamedTuple where keys are dimension names will also work. Using a Selector will determine the scale by the distance from the start of the index. Selectors will find the first offset and repeat the same aggregation size for the rest.

When the aggregation scale of is larger than the array axis, the length of the axis is used.

Keywords

  • skipmissing: if true, any missingval will be skipped during aggregation, so that only areas of all missing values will be aggregated to missingval(dst). If false, aggregated areas containing one or more missingval will be assigned missingval. false by default. skipmissing behaviour is independent of function f, which is only applied to completely non-missing values.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

  • progress: show a progress bar, true by default, false to hide.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • vebose: whether to print messages about potential problems. true by default.

Example

julia
using Rasters, RasterDataSources, Statistics, Plots
+stack[:relhum][Lat(Contains(-37), Lon(Contains(144))

source

`,12))]),i("details",z,[i("summary",null,[s[30]||(s[30]=i("a",{id:"DimensionalData.modify-Tuple{Any, AbstractRasterSeries}",href:"#DimensionalData.modify-Tuple{Any, AbstractRasterSeries}"},[i("span",{class:"jlbinding"},"DimensionalData.modify")],-1)),s[31]||(s[31]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[32]||(s[32]=t('
julia
modify(f, series::AbstractRasterSeries)

Apply function f to the data of the child object. If the child is an AbstractRasterStack the function will be passed on to its child AbstractRasters.

f must return an identically sized array.

This method triggers a complete rebuild of all objects, and disk based objects will be transferred to memory.

An example of the usefulnesss of this is for swapping out array backend for an entire series to CuArray from CUDA.jl to copy data to a GPU.

source

',6))]),i("details",V,[i("summary",null,[s[33]||(s[33]=i("a",{id:"GeoInterface.crs-Tuple{Union{Tuple{Dimension, Vararg{Dimension}}, AbstractRaster, AbstractRasterSeries, AbstractRasterStack}}",href:"#GeoInterface.crs-Tuple{Union{Tuple{Dimension, Vararg{Dimension}}, AbstractRaster, AbstractRasterSeries, AbstractRasterStack}}"},[i("span",{class:"jlbinding"},"GeoInterface.crs")],-1)),s[34]||(s[34]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[35]||(s[35]=t('
julia
crs(x::Raster)

Get the projected coordinate reference system of a Y or X Dimension, or of the Y/X dims of an AbstractRaster.

For Mapped lookup this may be nothing as there may be no projected coordinate reference system at all. See setcrs to set it manually.

source

',4))]),i("details",G,[i("summary",null,[s[36]||(s[36]=i("a",{id:"Rasters.aggregate",href:"#Rasters.aggregate"},[i("span",{class:"jlbinding"},"Rasters.aggregate")],-1)),s[37]||(s[37]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[38]||(s[38]=t(`
julia
aggregate(method, object, scale; kw...)

Aggregate a Raster, or all arrays in a RasterStack or RasterSeries, by scale using method.

Arguments

  • method: a function such as mean or sum that can combine the value of multiple cells to generate the aggregated cell, or a Locus like Start() or Center() that species where to sample from in the interval.

  • object: Object to aggregate, like AbstractRasterSeries, AbstractStack, AbstractRaster or Dimension.

  • scale: the aggregation factor, which can be an Int, a Tuple of Int for each dimension, or a : colon to mean the whole dimension. You can also use any Dimension, Selector or Int combination you can usually use in getindex. Tuple of Pair or NamedTuple where keys are dimension names will also work. Using a Selector will determine the scale by the distance from the start of the index. Selectors will find the first offset and repeat the same aggregation size for the rest.

When the aggregation scale of is larger than the array axis, the length of the axis is used.

Keywords

  • skipmissing: if true, any missingval will be skipped during aggregation, so that only areas of all missing values will be aggregated to missingval(dst). If false, aggregated areas containing one or more missingval will be assigned missingval. false by default. skipmissing behaviour is independent of function f, which is only applied to completely non-missing values.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

  • progress: show a progress bar, true by default, false to hide.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • vebose: whether to print messages about potential problems. true by default.

Example

julia
using Rasters, RasterDataSources, Statistics, Plots
 import ArchGDAL
 using Rasters: Center
 st = RasterStack(WorldClim{Climate}; month=1)
 ag = aggregate(Center(), st, (Y(20), X(20)); skipmissingval=true, progress=false)
 plot(ag)
 savefig("build/aggregate_example.png"); nothing
-# output

Note: currently it is faster to aggregate over memory-backed arrays. Use read on src before use where required.

source

',12))]),i("details",M,[i("summary",null,[s[39]||(s[39]=i("a",{id:"Rasters.aggregate!-Tuple{Locus, AbstractRaster, Any, Any}",href:"#Rasters.aggregate!-Tuple{Locus, AbstractRaster, Any, Any}"},[i("span",{class:"jlbinding"},"Rasters.aggregate!")],-1)),s[40]||(s[40]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[41]||(s[41]=t('
julia
aggregate!(method, dst::AbstractRaster, src::AbstractRaster, scale; skipmissing=false)

Aggregate raster src to raster dst by scale, using method.

Arguments

  • method: a function such as mean or sum that can combine the value of multiple cells to generate the aggregated cell, or a Locus like Start() or Center() that species where to sample from in the interval.

  • scale: the aggregation factor, which can be an Int, a Tuple of Int for each dimension, or a : colon to mean the whole dimension. You can also use any Dimension, Selector or Int combination you can usually use in getindex. Tuple of Pair or NamedTuple where keys are dimension names will also work. Using a Selector will determine the scale by the distance from the start of the index. Selectors will find the first offset and repeat the same aggregation size for the rest.

When the aggregation scale of is larger than the array axis, the length of the axis is used.

Keywords

  • skipmissing: if true, any missingval will be skipped during aggregation, so that only areas of all missing values will be aggregated to missingval(dst). If false, aggregated areas containing one or more missingval will be assigned missingval. false by default. skipmissing behaviour is independent of function f, which is only applied to completely non-missing values.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

Note: currently it is much faster to aggregate over memory-backed source arrays. Use read on src before use where required.

source

',9))]),i("details",O,[i("summary",null,[s[42]||(s[42]=i("a",{id:"Rasters.boolmask",href:"#Rasters.boolmask"},[i("span",{class:"jlbinding"},"Rasters.boolmask")],-1)),s[43]||(s[43]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[44]||(s[44]=t(`
julia
boolmask(obj::Raster; [missingval])
+# output

Note: currently it is faster to aggregate over memory-backed arrays. Use read on src before use where required.

source

',12))]),i("details",M,[i("summary",null,[s[39]||(s[39]=i("a",{id:"Rasters.aggregate!-Tuple{Locus, AbstractRaster, Any, Any}",href:"#Rasters.aggregate!-Tuple{Locus, AbstractRaster, Any, Any}"},[i("span",{class:"jlbinding"},"Rasters.aggregate!")],-1)),s[40]||(s[40]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[41]||(s[41]=t('
julia
aggregate!(method, dst::AbstractRaster, src::AbstractRaster, scale; skipmissing=false)

Aggregate raster src to raster dst by scale, using method.

Arguments

  • method: a function such as mean or sum that can combine the value of multiple cells to generate the aggregated cell, or a Locus like Start() or Center() that species where to sample from in the interval.

  • scale: the aggregation factor, which can be an Int, a Tuple of Int for each dimension, or a : colon to mean the whole dimension. You can also use any Dimension, Selector or Int combination you can usually use in getindex. Tuple of Pair or NamedTuple where keys are dimension names will also work. Using a Selector will determine the scale by the distance from the start of the index. Selectors will find the first offset and repeat the same aggregation size for the rest.

When the aggregation scale of is larger than the array axis, the length of the axis is used.

Keywords

  • skipmissing: if true, any missingval will be skipped during aggregation, so that only areas of all missing values will be aggregated to missingval(dst). If false, aggregated areas containing one or more missingval will be assigned missingval. false by default. skipmissing behaviour is independent of function f, which is only applied to completely non-missing values.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

Note: currently it is much faster to aggregate over memory-backed source arrays. Use read on src before use where required.

source

',9))]),i("details",O,[i("summary",null,[s[42]||(s[42]=i("a",{id:"Rasters.boolmask",href:"#Rasters.boolmask"},[i("span",{class:"jlbinding"},"Rasters.boolmask")],-1)),s[43]||(s[43]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[44]||(s[44]=t(`
julia
boolmask(obj::Raster; [missingval])
 boolmask(obj; [to, res, size])
 boolmask(obj::RasterStack; alllayers=true, kw...)

Create a mask array of Bool values, from another Raster. AbstractRasterStack or AbstractRasterSeries are also accepted.

The array returned from calling boolmask on a AbstractRaster is a Raster with the same dimensions as the original array and a missingval of false.

Arguments

  • a Raster or one or multiple geometries. Geometries can be a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Raster / RasterStack Keywords

  • invert: invert the mask, so that areas no missing in with are masked, and areas missing in with are masked.

  • missingval: The missing value of the source array, with default missingval(raster).

Keywords

  • alllayers: if true a mask is taken for all layers, otherwise only the first layer is used. Defaults to true

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • progress: show a progress bar, true by default, false to hide.

For tabular data, feature collections and other iterables

  • collapse: if true, collapse all geometry masks into a single mask. Otherwise return a Raster with an additional geometry dimension, so that each slice along this axis is the mask of the geometry opbject of each row of the table, feature in the feature collection, or just each geometry in the iterable.

Example

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates
 wc = Raster(WorldClim{Climate}, :prec; month=1)
@@ -51,7 +51,7 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
 
 savefig("build/boolmask_example.png"); nothing
 
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',16))]),i("details",U,[i("summary",null,[s[45]||(s[45]=i("a",{id:"Rasters.cellarea-Tuple{Any}",href:"#Rasters.cellarea-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.cellarea")],-1)),s[46]||(s[46]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[47]||(s[47]=t(`
julia
cellarea([method], x)

Gives the approximate area of each gridcell of x. By assuming the earth is a sphere, it approximates the true size to about 0.1%, depending on latitude.

Run using ArchGDAL or using Proj to make this method fully available.

  • method: You can specify whether you want to compute the area in the plane of your projection Planar() or on a sphere of some radius Spherical(; radius=...)(the default).

  • Spherical will compute cell area on the sphere, by transforming all points back to long-lat. You can specify the radius by the radius keyword argument here. By default, this is 6371008.8, the mean radius of the Earth.

  • Planar will compute cell area in the plane of the CRS you have chosen. Be warned that this will likely be incorrect for non-equal-area projections.

Returns a Raster with the same x and y dimensions as the input, where each value in the raster encodes the area of the cell (in meters by default).

Example

julia
using Rasters, Proj, Rasters.Lookups
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',16))]),i("details",U,[i("summary",null,[s[45]||(s[45]=i("a",{id:"Rasters.cellarea-Tuple{Any}",href:"#Rasters.cellarea-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.cellarea")],-1)),s[46]||(s[46]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[47]||(s[47]=t(`
julia
cellarea([method], x)

Gives the approximate area of each gridcell of x. By assuming the earth is a sphere, it approximates the true size to about 0.1%, depending on latitude.

Run using ArchGDAL or using Proj to make this method fully available.

  • method: You can specify whether you want to compute the area in the plane of your projection Planar() or on a sphere of some radius Spherical(; radius=...)(the default).

  • Spherical will compute cell area on the sphere, by transforming all points back to long-lat. You can specify the radius by the radius keyword argument here. By default, this is 6371008.8, the mean radius of the Earth.

  • Planar will compute cell area in the plane of the CRS you have chosen. Be warned that this will likely be incorrect for non-equal-area projections.

Returns a Raster with the same x and y dimensions as the input, where each value in the raster encodes the area of the cell (in meters by default).

Example

julia
using Rasters, Proj, Rasters.Lookups
 xdim = X(Projected(90.0:10.0:120; sampling=Intervals(Start()), crs=EPSG(4326)))
 ydim = Y(Projected(0.0:10.0:50; sampling=Intervals(Start()), crs=EPSG(4326)))
 myraster = rand(xdim, ydim)
@@ -72,7 +72,7 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
   90.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0
  100.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0
  110.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0
- 120.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

`,9))]),i("details",W,[i("summary",null,[s[48]||(s[48]=i("a",{id:"Rasters.classify",href:"#Rasters.classify"},[i("span",{class:"jlbinding"},"Rasters.classify")],-1)),s[49]||(s[49]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[50]||(s[50]=t(`
julia
classify(x, pairs; lower=(>=), upper=(<), others=nothing)
+ 120.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

`,9))]),i("details",W,[i("summary",null,[s[48]||(s[48]=i("a",{id:"Rasters.classify",href:"#Rasters.classify"},[i("span",{class:"jlbinding"},"Rasters.classify")],-1)),s[49]||(s[49]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[50]||(s[50]=t(`
julia
classify(x, pairs; lower=(>=), upper=(<), others=nothing)
 classify(x, pairs...; lower, upper, others)

Create a new array with values in x classified by the values in pairs.

pairs can hold tuples fo values (2, 3), a Fix2 function e.g. <=(1), a Tuple of Fix2 e.g. (>=(4), <(7)), or an IntervalSets.jl interval, e.g. 3..9 or OpenInterval(10, 12). pairs can also be a n * 3 matrix where each row is lower bounds, upper bounds, replacement.

If tuples or a Matrix are used, the lower and upper keywords define how the lower and upper boundaries are chosen.

If others is set other values not covered in pairs will be set to that values.

Arguments

  • x: a Raster or RasterStack

  • pairs: each pair contains a value and a replacement, a tuple of lower and upper range and a replacement, or a Tuple of Fix2 like (>(x), <(y).

Keywords

  • lower: Which comparison (< or <=) to use for lower values, if Fix2 are not used.

  • upper: Which comparison (> or >=) to use for upper values, if Fix2 are not used.

  • others: A value to assign to all values not included in pairs. Passing nothing (the default) will leave them unchanged.

Example

julia
using Rasters, RasterDataSources, ArchGDAL, Plots
 A = Raster(WorldClim{Climate}, :tavg; month=1)
 classes = <=(15) => 10,
@@ -84,7 +84,7 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
 
 savefig("build/classify_example.png"); nothing
 
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',14))]),i("details",K,[i("summary",null,[s[51]||(s[51]=i("a",{id:"Rasters.classify!-Tuple{AbstractRaster, Pair, Vararg{Pair}}",href:"#Rasters.classify!-Tuple{AbstractRaster, Pair, Vararg{Pair}}"},[i("span",{class:"jlbinding"},"Rasters.classify!")],-1)),s[52]||(s[52]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[53]||(s[53]=t(`
julia
classify!(x, pairs...; lower, upper, others)
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',14))]),i("details",K,[i("summary",null,[s[51]||(s[51]=i("a",{id:"Rasters.classify!-Tuple{AbstractRaster, Pair, Vararg{Pair}}",href:"#Rasters.classify!-Tuple{AbstractRaster, Pair, Vararg{Pair}}"},[i("span",{class:"jlbinding"},"Rasters.classify!")],-1)),s[52]||(s[52]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[53]||(s[53]=t(`
julia
classify!(x, pairs...; lower, upper, others)
 classify!(x, pairs; lower, upper, others)

Classify the values of x in-place, by the values in pairs.

If Fix2 is not used, the lower and upper keywords

If others is set other values not covered in pairs will be set to that values.

Arguments

  • x: a Raster or RasterStack

  • pairs: each pair contains a value and a replacement, a tuple of lower and upper range and a replacement, or a Tuple of Fix2 like (>(x), <(y).

Keywords

  • lower: Which comparison (< or <=) to use for lower values, if Fix2 are not used.

  • upper: Which comparison (> or >=) to use for upper values, if Fix2 are not used.

  • others: A value to assign to all values not included in pairs. Passing nothing (the default) will leave them unchanged.

Example

classify! to disk, with key steps:

  • copying a tempory file so we don't write over the RasterDataSources.jl version.

  • use open with write=true to open the file with disk-write permissions.

  • use Float32 like 10.0f0 for all our replacement values and other, because the file is stored as Float32. Attempting to write some other type will fail.

julia
using Rasters, RasterDataSources, ArchGDAL, Plots
 # Download and copy the file
 filename = getraster(WorldClim{Climate}, :tavg; month=6)
@@ -104,8 +104,8 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
 
 savefig("build/classify_bang_example.png"); nothing
 
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',15))]),i("details",Y,[i("summary",null,[s[54]||(s[54]=i("a",{id:"Rasters.combine-Tuple{AbstractRasterSeries}",href:"#Rasters.combine-Tuple{AbstractRasterSeries}"},[i("span",{class:"jlbinding"},"Rasters.combine")],-1)),s[55]||(s[55]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[56]||(s[56]=t('
julia
combine(A::AbstracRasterSeries; [dims], [lazy]) => Raster

Combine a RasterSeries along some dimension/s, creating a new Raster or RasterStack, depending on the contents of the series.

If dims are passed, only the specified dimensions will be combined with a RasterSeries returned, unless dims is all the dims in the series.

If lazy, concatenate lazily. The default is to concatenate lazily for lazy Rasters and eagerly otherwise.

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',6))]),i("details",X,[i("summary",null,[s[57]||(s[57]=i("a",{id:"Rasters.convertlookup-Tuple{Type{<:Lookup}, AbstractDimArray}",href:"#Rasters.convertlookup-Tuple{Type{<:Lookup}, AbstractDimArray}"},[i("span",{class:"jlbinding"},"Rasters.convertlookup")],-1)),s[58]||(s[58]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[59]||(s[59]=t('
julia
convertlookup(dstlookup::Type{<:Lookup}, x)

Convert the dimension lookup between Projected and Mapped. Other dimension lookups pass through unchanged.

This is used to e.g. save a netcdf file to GeoTiff.

source

',4))]),i("details",H,[i("summary",null,[s[60]||(s[60]=i("a",{id:"Rasters.coverage!-Tuple{Union{typeof(sum), typeof(union)}, AbstractRaster, Any}",href:"#Rasters.coverage!-Tuple{Union{typeof(sum), typeof(union)}, AbstractRaster, Any}"},[i("span",{class:"jlbinding"},"Rasters.coverage!")],-1)),s[61]||(s[61]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[62]||(s[62]=t('
julia
coverage!(A, geom; [mode, scale])

Calculate the area of a raster covered by GeoInterface.jl compatible geometry geom, as a fraction.

Each pixel is assigned a grid of points (by default 10 x 10) that are each checked to be inside the geometry. The sum divided by the number of points to give coverage.

In practice, most pixel coverage is not calculated this way - shortcuts that produce the same result are taken wherever possible.

If geom is an AbstractVector or table, the mode keyword will determine how coverage is combined.

Keywords

  • mode: method for combining multiple geometries - union or sum.

    • union (the default) gives the areas covered by all geometries. Usefull in spatial coverage where overlapping regions should not be counted twice. The returned raster will contain Float64 values between 0.0 and 1.0.

    • sum gives the summed total of the areas covered by all geometries, as in taking the sum of running coverage separately on all geometries. The returned values are positive Float64.

    For a single geometry, the mode keyword has no effect - the result is the same.

  • scale: Integer scale of pixel subdivision. The default of 10 means each pixel has 10 x 10 or 100 points that contribute to coverage. Using 100 means 10,000 points contribute. Performance will decline as scale increases. Memory use will grow by scale^2 when mode=:union.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

source

',8))]),i("details",J,[i("summary",null,[s[63]||(s[63]=i("a",{id:"Rasters.coverage-Tuple{Any}",href:"#Rasters.coverage-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.coverage")],-1)),s[64]||(s[64]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[65]||(s[65]=t(`
julia
coverage(mode, geom; [to, res, size, scale, verbose, progress])
-coverage(geom; [to, mode, res, size, scale, verbose, progress])

Calculate the area of a raster covered by GeoInterface.jl compatible geometry geom, as a fraction.

Each pixel is assigned a grid of points (by default 10 x 10) that are each checked to be inside the geometry. The sum divided by the number of points to give coverage.

In practice, most pixel coverage is not calculated this way - shortcuts that produce the same result are taken wherever possible.

If geom is an AbstractVector or table, the mode keyword will determine how coverage is combined.

Keywords

  • mode: method for combining multiple geometries - union or sum.

    • union (the default) gives the areas covered by all geometries. Usefull in spatial coverage where overlapping regions should not be counted twice. The returned raster will contain Float64 values between 0.0 and 1.0.

    • sum gives the summed total of the areas covered by all geometries, as in taking the sum of running coverage separately on all geometries. The returned values are positive Float64.

    For a single geometry, the mode keyword has no effect - the result is the same.

  • scale: Integer scale of pixel subdivision. The default of 10 means each pixel has 10 x 10 or 100 points that contribute to coverage. Using 100 means 10,000 points contribute. Performance will decline as scale increases. Memory use will grow by scale^2 when mode=:union.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

source

`,8))]),i("details",Z,[i("summary",null,[s[66]||(s[66]=i("a",{id:"Rasters.crop",href:"#Rasters.crop"},[i("span",{class:"jlbinding"},"Rasters.crop")],-1)),s[67]||(s[67]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[68]||(s[68]=t(`
julia
crop(x; to, touches=false, [geometrycolumn])
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',15))]),i("details",Y,[i("summary",null,[s[54]||(s[54]=i("a",{id:"Rasters.combine-Tuple{AbstractRasterSeries}",href:"#Rasters.combine-Tuple{AbstractRasterSeries}"},[i("span",{class:"jlbinding"},"Rasters.combine")],-1)),s[55]||(s[55]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[56]||(s[56]=t('
julia
combine(A::AbstracRasterSeries; [dims], [lazy]) => Raster

Combine a RasterSeries along some dimension/s, creating a new Raster or RasterStack, depending on the contents of the series.

If dims are passed, only the specified dimensions will be combined with a RasterSeries returned, unless dims is all the dims in the series.

If lazy, concatenate lazily. The default is to concatenate lazily for lazy Rasters and eagerly otherwise.

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',6))]),i("details",X,[i("summary",null,[s[57]||(s[57]=i("a",{id:"Rasters.convertlookup-Tuple{Type{<:Lookup}, AbstractDimArray}",href:"#Rasters.convertlookup-Tuple{Type{<:Lookup}, AbstractDimArray}"},[i("span",{class:"jlbinding"},"Rasters.convertlookup")],-1)),s[58]||(s[58]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[59]||(s[59]=t('
julia
convertlookup(dstlookup::Type{<:Lookup}, x)

Convert the dimension lookup between Projected and Mapped. Other dimension lookups pass through unchanged.

This is used to e.g. save a netcdf file to GeoTiff.

source

',4))]),i("details",H,[i("summary",null,[s[60]||(s[60]=i("a",{id:"Rasters.coverage!-Tuple{Union{typeof(sum), typeof(union)}, AbstractRaster, Any}",href:"#Rasters.coverage!-Tuple{Union{typeof(sum), typeof(union)}, AbstractRaster, Any}"},[i("span",{class:"jlbinding"},"Rasters.coverage!")],-1)),s[61]||(s[61]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[62]||(s[62]=t('
julia
coverage!(A, geom; [mode, scale])

Calculate the area of a raster covered by GeoInterface.jl compatible geometry geom, as a fraction.

Each pixel is assigned a grid of points (by default 10 x 10) that are each checked to be inside the geometry. The sum divided by the number of points to give coverage.

In practice, most pixel coverage is not calculated this way - shortcuts that produce the same result are taken wherever possible.

If geom is an AbstractVector or table, the mode keyword will determine how coverage is combined.

Keywords

  • mode: method for combining multiple geometries - union or sum.

    • union (the default) gives the areas covered by all geometries. Usefull in spatial coverage where overlapping regions should not be counted twice. The returned raster will contain Float64 values between 0.0 and 1.0.

    • sum gives the summed total of the areas covered by all geometries, as in taking the sum of running coverage separately on all geometries. The returned values are positive Float64.

    For a single geometry, the mode keyword has no effect - the result is the same.

  • scale: Integer scale of pixel subdivision. The default of 10 means each pixel has 10 x 10 or 100 points that contribute to coverage. Using 100 means 10,000 points contribute. Performance will decline as scale increases. Memory use will grow by scale^2 when mode=:union.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

source

',8))]),i("details",J,[i("summary",null,[s[63]||(s[63]=i("a",{id:"Rasters.coverage-Tuple{Any}",href:"#Rasters.coverage-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.coverage")],-1)),s[64]||(s[64]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[65]||(s[65]=t(`
julia
coverage(mode, geom; [to, res, size, scale, verbose, progress])
+coverage(geom; [to, mode, res, size, scale, verbose, progress])

Calculate the area of a raster covered by GeoInterface.jl compatible geometry geom, as a fraction.

Each pixel is assigned a grid of points (by default 10 x 10) that are each checked to be inside the geometry. The sum divided by the number of points to give coverage.

In practice, most pixel coverage is not calculated this way - shortcuts that produce the same result are taken wherever possible.

If geom is an AbstractVector or table, the mode keyword will determine how coverage is combined.

Keywords

  • mode: method for combining multiple geometries - union or sum.

    • union (the default) gives the areas covered by all geometries. Usefull in spatial coverage where overlapping regions should not be counted twice. The returned raster will contain Float64 values between 0.0 and 1.0.

    • sum gives the summed total of the areas covered by all geometries, as in taking the sum of running coverage separately on all geometries. The returned values are positive Float64.

    For a single geometry, the mode keyword has no effect - the result is the same.

  • scale: Integer scale of pixel subdivision. The default of 10 means each pixel has 10 x 10 or 100 points that contribute to coverage. Using 100 means 10,000 points contribute. Performance will decline as scale increases. Memory use will grow by scale^2 when mode=:union.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

source

`,8))]),i("details",Z,[i("summary",null,[s[66]||(s[66]=i("a",{id:"Rasters.crop",href:"#Rasters.crop"},[i("span",{class:"jlbinding"},"Rasters.crop")],-1)),s[67]||(s[67]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[68]||(s[68]=t(`
julia
crop(x; to, touches=false, [geometrycolumn])
 crop(xs...; to)

Crop one or multiple AbstractRaster or AbstractRasterStack x to match the size of the object to, or smallest of any dimensions that are shared.

crop is lazy, using a view into the object rather than allocating new memory.

Keywords

  • to: the object to crop to. This can be a Raster or one or multiple geometries. Geometries can be a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified. If no to keyword is passed, the smallest shared area of all xs is used.

  • touches: true or false. Whether to use Touches wraper on the object extent. When lines need to be included in e.g. zonal statistics, true should be used.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

As crop is lazy, filename and suffix keywords are not used.

Example

Crop to another raster:

julia
using Rasters, RasterDataSources, Plots
 evenness = Raster(EarthEnv{HabitatHeterogeneity}, :evenness)
 rnge = Raster(EarthEnv{HabitatHeterogeneity}, :range)
@@ -135,7 +135,7 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
 
 savefig("build/argentina_crop_example.png"); nothing
 
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',15))]),i("details",$,[i("summary",null,[s[69]||(s[69]=i("a",{id:"Rasters.disaggregate",href:"#Rasters.disaggregate"},[i("span",{class:"jlbinding"},"Rasters.disaggregate")],-1)),s[70]||(s[70]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[71]||(s[71]=t('
julia
disaggregate(object, scale; kw...)

Disaggregate array, or all arrays in a stack or series, by some scale.

Arguments

  • object: Object to aggregate, like AbstractRasterSeries, AbstractStack, AbstractRaster, Dimension or Lookup.

  • scale: the aggregation factor, which can be an Int, a Tuple of Int for each dimension, or a : colon to mean the whole dimension. You can also use any Dimension, Selector or Int combination you can usually use in getindex. Tuple of Pair or NamedTuple where keys are dimension names will also work. Using a Selector will determine the scale by the distance from the start of the index. Selectors will find the first offset and repeat the same aggregation size for the rest.

Keywords

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

  • progress: show a progress bar, true by default, false to hide.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

Note: currently it is much faster to disaggregate over a memory-backed source array. Use read on src before use where required.

source

',8))]),i("details",Q,[i("summary",null,[s[72]||(s[72]=i("a",{id:"Rasters.disaggregate!-Tuple{AbstractRaster, Any, Any}",href:"#Rasters.disaggregate!-Tuple{AbstractRaster, Any, Any}"},[i("span",{class:"jlbinding"},"Rasters.disaggregate!")],-1)),s[73]||(s[73]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[74]||(s[74]=t('
julia
disaggregate!(dst::AbstractRaster, src::AbstractRaster, scale)

Disaggregate array src to array dst by some scale.

  • scale: the aggregation factor, which can be an Int, a Tuple of Int for each dimension, or a : colon to mean the whole dimension. You can also use any Dimension, Selector or Int combination you can usually use in getindex. Tuple of Pair or NamedTuple where keys are dimension names will also work. Using a Selector will determine the scale by the distance from the start of the index. Selectors will find the first offset and repeat the same aggregation size for the rest.

source

',4))]),i("details",ss,[i("summary",null,[s[75]||(s[75]=i("a",{id:"Rasters.extend",href:"#Rasters.extend"},[i("span",{class:"jlbinding"},"Rasters.extend")],-1)),s[76]||(s[76]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[77]||(s[77]=t(`
julia
extend(xs...; [to])
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',15))]),i("details",$,[i("summary",null,[s[69]||(s[69]=i("a",{id:"Rasters.disaggregate",href:"#Rasters.disaggregate"},[i("span",{class:"jlbinding"},"Rasters.disaggregate")],-1)),s[70]||(s[70]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[71]||(s[71]=t('
julia
disaggregate(object, scale; kw...)

Disaggregate array, or all arrays in a stack or series, by some scale.

Arguments

  • object: Object to aggregate, like AbstractRasterSeries, AbstractStack, AbstractRaster, Dimension or Lookup.

  • scale: the aggregation factor, which can be an Int, a Tuple of Int for each dimension, or a : colon to mean the whole dimension. You can also use any Dimension, Selector or Int combination you can usually use in getindex. Tuple of Pair or NamedTuple where keys are dimension names will also work. Using a Selector will determine the scale by the distance from the start of the index. Selectors will find the first offset and repeat the same aggregation size for the rest.

Keywords

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

  • progress: show a progress bar, true by default, false to hide.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

Note: currently it is much faster to disaggregate over a memory-backed source array. Use read on src before use where required.

source

',8))]),i("details",Q,[i("summary",null,[s[72]||(s[72]=i("a",{id:"Rasters.disaggregate!-Tuple{AbstractRaster, Any, Any}",href:"#Rasters.disaggregate!-Tuple{AbstractRaster, Any, Any}"},[i("span",{class:"jlbinding"},"Rasters.disaggregate!")],-1)),s[73]||(s[73]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[74]||(s[74]=t('
julia
disaggregate!(dst::AbstractRaster, src::AbstractRaster, scale)

Disaggregate array src to array dst by some scale.

  • scale: the aggregation factor, which can be an Int, a Tuple of Int for each dimension, or a : colon to mean the whole dimension. You can also use any Dimension, Selector or Int combination you can usually use in getindex. Tuple of Pair or NamedTuple where keys are dimension names will also work. Using a Selector will determine the scale by the distance from the start of the index. Selectors will find the first offset and repeat the same aggregation size for the rest.

source

',4))]),i("details",ss,[i("summary",null,[s[75]||(s[75]=i("a",{id:"Rasters.extend",href:"#Rasters.extend"},[i("span",{class:"jlbinding"},"Rasters.extend")],-1)),s[76]||(s[76]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[77]||(s[77]=t(`
julia
extend(xs...; [to])
 extend(xs; [to])
 extend(x::Union{AbstractRaster,AbstractRasterStack}; to, kw...)

Extend one or multiple AbstractRaster to match the area covered by all xs, or by the keyword argument to.

Keywords

  • to: the Raster or dims to extend to. If no to keyword is passed, the largest shared area of all xs is used.

  • touches: true or false. Whether to use Touches wrapper on the object extent. When lines need to be included in e.g. zonal statistics, true shoudle be used.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

julia
using Rasters, RasterDataSources, Plots
 evenness = Raster(EarthEnv{HabitatHeterogeneity}, :evenness)
@@ -151,7 +151,7 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
 
 savefig("build/extend_example.png")
 nothing
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',8))]),i("details",is,[i("summary",null,[s[78]||(s[78]=i("a",{id:"Rasters.extract",href:"#Rasters.extract"},[i("span",{class:"jlbinding"},"Rasters.extract")],-1)),s[79]||(s[79]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[80]||(s[80]=t(`
julia
extract(x, geometries; kw...)

Extracts the value of Raster or RasterStack for the passed in geometries, returning an Vector{NamedTuple} with properties for :geometry and Raster or RasterStack layer values.

For lines, linestrings and linear rings points are extracted for each pixel that the line touches.

For polygons, all cells witih centers covered by the polygon are returned.

Note that if objects have more dimensions than the length of the point tuples, sliced arrays or stacks will be returned instead of single values.

Arguments

  • x: a Raster or RasterStack to extract values from.

  • data: a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

  • geometry: include a :geometry field in rows, which will be a tuple point. Either the original point for points or the pixel center point for line and polygon extract. true by default.

  • index: include :index field of extracted points in rows, false by default.

  • name: a Symbol or Tuple of Symbol corresponding to layer/s of a RasterStack to extract. All layers are extracted by default.

  • skipmissing: skip missing points automatically.

  • flatten: flatten extracted points from multiple geometries into a single vector. true by default. Unmixed point geometries are always flattened. Flattening is slow and single threaded, flatten=false may be a large performance improvement in combination with threaded=true.

  • atol: a tolerance for floating point lookup values for when the Lookup contains Points. atol is ignored for Intervals.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

Example

Here we extract points matching the occurrence of the Mountain Pygmy Possum, Burramis parvus. This could be used to fit a species distribution model.

julia
using Rasters, RasterDataSources, ArchGDAL, GBIF2, CSV
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',8))]),i("details",is,[i("summary",null,[s[78]||(s[78]=i("a",{id:"Rasters.extract",href:"#Rasters.extract"},[i("span",{class:"jlbinding"},"Rasters.extract")],-1)),s[79]||(s[79]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[80]||(s[80]=t(`
julia
extract(x, geometries; kw...)

Extracts the value of Raster or RasterStack for the passed in geometries, returning an Vector{NamedTuple} with properties for :geometry and Raster or RasterStack layer values.

For lines, linestrings and linear rings points are extracted for each pixel that the line touches.

For polygons, all cells witih centers covered by the polygon are returned.

Note that if objects have more dimensions than the length of the point tuples, sliced arrays or stacks will be returned instead of single values.

Arguments

  • x: a Raster or RasterStack to extract values from.

  • data: a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

  • geometry: include a :geometry field in rows, which will be a tuple point. Either the original point for points or the pixel center point for line and polygon extract. true by default.

  • index: include :index field of extracted points in rows, false by default.

  • name: a Symbol or Tuple of Symbol corresponding to layer/s of a RasterStack to extract. All layers are extracted by default.

  • skipmissing: skip missing points automatically.

  • flatten: flatten extracted points from multiple geometries into a single vector. true by default. Unmixed point geometries are always flattened. Flattening is slow and single threaded, flatten=false may be a large performance improvement in combination with threaded=true.

  • atol: a tolerance for floating point lookup values for when the Lookup contains Points. atol is ignored for Intervals.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

Example

Here we extract points matching the occurrence of the Mountain Pygmy Possum, Burramis parvus. This could be used to fit a species distribution model.

julia
using Rasters, RasterDataSources, ArchGDAL, GBIF2, CSV
 
 # Get a stack of BioClim layers, and replace missing values with \`missing\`
 st = RasterStack(WorldClim{BioClim}, (1, 3, 5, 7, 12)) |> replace_missing
@@ -169,7 +169,7 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
  (geometry = (0.03, 39.97), bio1 = 17.076923f0, bio3 = 39.7983f0, bio5 = 29.638462f0, bio7 = 24.153847f0, bio12 = 441.0f0)
  (geometry = (0.03, 39.97), bio1 = 17.076923f0, bio3 = 39.7983f0, bio5 = 29.638462f0, bio7 = 24.153847f0, bio12 = 441.0f0)
  (geometry = (0.52, 40.37), bio1 = missing, bio3 = missing, bio5 = missing, bio7 = missing, bio12 = missing)
- (geometry = (0.32, 40.24), bio1 = 16.321388f0, bio3 = 41.659454f0, bio5 = 30.029825f0, bio7 = 25.544561f0, bio12 = 480.0f0)

Note: passing in arrays, geometry collections or feature collections containing a mix of points and other geometries has undefined results.

source

`,14))]),i("details",es,[i("summary",null,[s[81]||(s[81]=i("a",{id:"Rasters.mappedbounds",href:"#Rasters.mappedbounds"},[i("span",{class:"jlbinding"},"Rasters.mappedbounds")],-1)),s[82]||(s[82]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[83]||(s[83]=t('
julia
mappedbounds(x)

Get the bounds converted to the mappedcrs value.

Without ArchGDAL loaded, this is just the regular bounds.

source

',4))]),i("details",as,[i("summary",null,[s[84]||(s[84]=i("a",{id:"Rasters.mappedcrs",href:"#Rasters.mappedcrs"},[i("span",{class:"jlbinding"},"Rasters.mappedcrs")],-1)),s[85]||(s[85]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[86]||(s[86]=t('
julia
mappedcrs(x)

Get the mapped coordinate reference system for the Y/X dims of an array.

In Projected lookup this is used to convert Selector values form the mappedcrs defined projection to the underlying projection, and to show plot axes in the mapped projection.

In Mapped lookup this is the coordinate reference system of the index values. See setmappedcrs to set it manually.

source

',5))]),i("details",ts,[i("summary",null,[s[87]||(s[87]=i("a",{id:"Rasters.mappedindex",href:"#Rasters.mappedindex"},[i("span",{class:"jlbinding"},"Rasters.mappedindex")],-1)),s[88]||(s[88]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[89]||(s[89]=t('
julia
mappedindex(x)

Get the index value of a dimension converted to the mappedcrs value.

Without ArchGDAL loaded, this is just the regular dim value.

source

',4))]),i("details",ns,[i("summary",null,[s[90]||(s[90]=i("a",{id:"Rasters.mask!",href:"#Rasters.mask!"},[i("span",{class:"jlbinding"},"Rasters.mask!")],-1)),s[91]||(s[91]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[92]||(s[92]=t(`
julia
mask!(x; with, missingval=missingval(A))

Mask A by the missing values of with, or by all values outside with if it is a polygon.

If with is a polygon, creates a new array where points falling outside the polygon have been replaced by missingval(A).

Return a new array with values of A masked by the missing values of with, or by a polygon.

Arguments

  • x: a Raster or RasterStack.

Keywords

  • with: another AbstractRaster, a AbstractVector of Tuple points, or any GeoInterface.jl AbstractGeometry. The coordinate reference system of the point must match crs(A).

  • invert: invert the mask, so that areas no missing in with are masked, and areas missing in with are masked.

  • missingval: the missing value to write to A in masked areas, by default missingval(A).

Example

Mask an unmasked AWAP layer with a masked WorldClim layer, by first resampling the mask to match the size and projection.

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates
+ (geometry = (0.32, 40.24), bio1 = 16.321388f0, bio3 = 41.659454f0, bio5 = 30.029825f0, bio7 = 25.544561f0, bio12 = 480.0f0)

Note: passing in arrays, geometry collections or feature collections containing a mix of points and other geometries has undefined results.

source

`,14))]),i("details",es,[i("summary",null,[s[81]||(s[81]=i("a",{id:"Rasters.mappedbounds",href:"#Rasters.mappedbounds"},[i("span",{class:"jlbinding"},"Rasters.mappedbounds")],-1)),s[82]||(s[82]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[83]||(s[83]=t('
julia
mappedbounds(x)

Get the bounds converted to the mappedcrs value.

Without ArchGDAL loaded, this is just the regular bounds.

source

',4))]),i("details",as,[i("summary",null,[s[84]||(s[84]=i("a",{id:"Rasters.mappedcrs",href:"#Rasters.mappedcrs"},[i("span",{class:"jlbinding"},"Rasters.mappedcrs")],-1)),s[85]||(s[85]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[86]||(s[86]=t('
julia
mappedcrs(x)

Get the mapped coordinate reference system for the Y/X dims of an array.

In Projected lookup this is used to convert Selector values form the mappedcrs defined projection to the underlying projection, and to show plot axes in the mapped projection.

In Mapped lookup this is the coordinate reference system of the index values. See setmappedcrs to set it manually.

source

',5))]),i("details",ts,[i("summary",null,[s[87]||(s[87]=i("a",{id:"Rasters.mappedindex",href:"#Rasters.mappedindex"},[i("span",{class:"jlbinding"},"Rasters.mappedindex")],-1)),s[88]||(s[88]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[89]||(s[89]=t('
julia
mappedindex(x)

Get the index value of a dimension converted to the mappedcrs value.

Without ArchGDAL loaded, this is just the regular dim value.

source

',4))]),i("details",ns,[i("summary",null,[s[90]||(s[90]=i("a",{id:"Rasters.mask!",href:"#Rasters.mask!"},[i("span",{class:"jlbinding"},"Rasters.mask!")],-1)),s[91]||(s[91]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[92]||(s[92]=t(`
julia
mask!(x; with, missingval=missingval(A))

Mask A by the missing values of with, or by all values outside with if it is a polygon.

If with is a polygon, creates a new array where points falling outside the polygon have been replaced by missingval(A).

Return a new array with values of A masked by the missing values of with, or by a polygon.

Arguments

  • x: a Raster or RasterStack.

Keywords

  • with: another AbstractRaster, a AbstractVector of Tuple points, or any GeoInterface.jl AbstractGeometry. The coordinate reference system of the point must match crs(A).

  • invert: invert the mask, so that areas no missing in with are masked, and areas missing in with are masked.

  • missingval: the missing value to write to A in masked areas, by default missingval(A).

Example

Mask an unmasked AWAP layer with a masked WorldClim layer, by first resampling the mask to match the size and projection.

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates
 
 # Load and plot the file
 awap = read(RasterStack(AWAP, (:tmin, :tmax); date=DateTime(2001, 1, 1)))
@@ -186,7 +186,7 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
 savefig(a, "build/mask_bang_example_before.png");
 savefig(b, "build/mask_bang_example_after.png"); nothing
 
-# output

Before mask!:

After mask!:

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

`,15))]),i("details",ls,[i("summary",null,[s[93]||(s[93]=i("a",{id:"Rasters.mask-Tuple{Any}",href:"#Rasters.mask-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.mask")],-1)),s[94]||(s[94]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[95]||(s[95]=t(`
julia
mask(A:AbstractRaster; with, missingval=missingval(A))
+# output

Before mask!:

After mask!:

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

`,15))]),i("details",ls,[i("summary",null,[s[93]||(s[93]=i("a",{id:"Rasters.mask-Tuple{Any}",href:"#Rasters.mask-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.mask")],-1)),s[94]||(s[94]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[95]||(s[95]=t(`
julia
mask(A:AbstractRaster; with, missingval=missingval(A))
 mask(x; with)

Return a new array with values of A masked by the missing values of with, or by the shape of with, if with is a geometric object.

Arguments

  • x: a Raster or RasterStack

Keywords

  • with: an AbstractRaster, or any GeoInterface.jl compatible objects or table. The coordinate reference system of the point must match crs(A).

  • invert: invert the mask, so that areas no missing in with are masked, and areas missing in with are masked.

  • missingval: the missing value to use in the returned file.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

Geometry keywords

These can be used when with is a GeoInterface.jl compatible object:

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

Example

Mask an unmasked AWAP layer with a masked WorldClim layer, by first resampling the mask.

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates
 
 # Load and plot the file
@@ -203,7 +203,7 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
 
 savefig(a, "build/mask_example_before.png");
 savefig(b, "build/mask_example_after.png"); nothing
-# output

Before mask:

After mask:

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

`,16))]),i("details",os,[i("summary",null,[s[96]||(s[96]=i("a",{id:"Rasters.missingmask-Tuple{Any}",href:"#Rasters.missingmask-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.missingmask")],-1)),s[97]||(s[97]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[98]||(s[98]=t(`
julia
missingmask(obj::Raster; kw...)
+# output

Before mask:

After mask:

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

`,16))]),i("details",os,[i("summary",null,[s[96]||(s[96]=i("a",{id:"Rasters.missingmask-Tuple{Any}",href:"#Rasters.missingmask-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.missingmask")],-1)),s[97]||(s[97]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[98]||(s[98]=t(`
julia
missingmask(obj::Raster; kw...)
 missingmask(obj; [to, res, size])
 missingmask(obj::RasterStack; alllayers=true, kw...)

Create a mask array of missing and true values, from another Raster. AbstractRasterStack or AbstractRasterSeries are also accepted-

For AbstractRaster the default missingval is missingval(A), but others can be chosen manually.

The array returned from calling missingmask on a AbstractRaster is a Raster with the same size and fields as the original array.

Arguments

  • obj: a Raster or one or multiple geometries. Geometries can be a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

  • alllayers: if true a mask is taken for all layers, otherwise only the first layer is used. Defaults to true

  • invert: invert the mask, so that areas no missing in with are masked, and areas missing in with are masked.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

Example

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates
 wc = Raster(WorldClim{Climate}, :prec; month=1)
@@ -211,7 +211,7 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
 
 savefig("build/missingmask_example.png"); nothing
 
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',13))]),i("details",ps,[i("summary",null,[s[99]||(s[99]=i("a",{id:"Rasters.missingval",href:"#Rasters.missingval"},[i("span",{class:"jlbinding"},"Rasters.missingval")],-1)),s[100]||(s[100]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[101]||(s[101]=t('
julia
missingval(x)

Returns the value representing missing data in the dataset

source

',3))]),i("details",rs,[i("summary",null,[s[102]||(s[102]=i("a",{id:"Rasters.mosaic!-Tuple{Function, Union{AbstractRaster, AbstractRasterStack}, Vararg{Union{AbstractRaster, AbstractRasterStack}}}",href:"#Rasters.mosaic!-Tuple{Function, Union{AbstractRaster, AbstractRasterStack}, Vararg{Union{AbstractRaster, AbstractRasterStack}}}"},[i("span",{class:"jlbinding"},"Rasters.mosaic!")],-1)),s[103]||(s[103]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[104]||(s[104]=t(`
julia
mosaic!(f, x, regions...; missingval, atol)
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',13))]),i("details",ps,[i("summary",null,[s[99]||(s[99]=i("a",{id:"Rasters.missingval",href:"#Rasters.missingval"},[i("span",{class:"jlbinding"},"Rasters.missingval")],-1)),s[100]||(s[100]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[101]||(s[101]=t('
julia
missingval(x)

Returns the value representing missing data in the dataset

source

',3))]),i("details",rs,[i("summary",null,[s[102]||(s[102]=i("a",{id:"Rasters.mosaic!-Tuple{Function, Union{AbstractRaster, AbstractRasterStack}, Vararg{Union{AbstractRaster, AbstractRasterStack}}}",href:"#Rasters.mosaic!-Tuple{Function, Union{AbstractRaster, AbstractRasterStack}, Vararg{Union{AbstractRaster, AbstractRasterStack}}}"},[i("span",{class:"jlbinding"},"Rasters.mosaic!")],-1)),s[103]||(s[103]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[104]||(s[104]=t(`
julia
mosaic!(f, x, regions...; missingval, atol)
 mosaic!(f, x, regions::Tuple; missingval, atol)

Combine regions in Raster or RasterStack x using the function f.

Arguments

  • f a function (e.g. mean, sum, first or last) that is applied to values where regions overlap.

  • x: A Raster or RasterStack. May be a an opened disk-based Raster, the result will be written to disk. With the current algorithm, the read speed is slow.

  • regions: source objects to be joined. These should be memory-backed (use read first), or may experience poor performance. If all objects have the same extent, mosaic is simply a merge.

Keywords

  • missingval: Fills empty areas, and defualts to the \`missingval/ of the first layer.

  • atol: Absolute tolerance for comparison between index values. This is often required due to minor differences in range values due to floating point error. It is not applied to non-float dimensions. A tuple of tolerances may be passed, matching the dimension order.

Example

Cut out scandinavian countries and plot:

julia
using Rasters, RasterDataSources, NaturalEarth, DataFrames, Dates, Plots
 # Get climate data form worldclim
 climate = RasterStack(WorldClim{Climate}, (:tmin, :tmax, :prec, :wind); month=July)
@@ -228,7 +228,7 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
 plot(scandinavia_climate)
 
 savefig("build/mosaic_bang_example.png")
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',12))]),i("details",hs,[i("summary",null,[s[105]||(s[105]=i("a",{id:"Rasters.mosaic-Tuple{Function, Union{AbstractRaster, AbstractRasterStack}, Vararg{Union{AbstractRaster, AbstractRasterStack}}}",href:"#Rasters.mosaic-Tuple{Function, Union{AbstractRaster, AbstractRasterStack}, Vararg{Union{AbstractRaster, AbstractRasterStack}}}"},[i("span",{class:"jlbinding"},"Rasters.mosaic")],-1)),s[106]||(s[106]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[107]||(s[107]=t(`
julia
mosaic(f, regions...; missingval, atol)
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',12))]),i("details",ds,[i("summary",null,[s[105]||(s[105]=i("a",{id:"Rasters.mosaic-Tuple{Function, Union{AbstractRaster, AbstractRasterStack}, Vararg{Union{AbstractRaster, AbstractRasterStack}}}",href:"#Rasters.mosaic-Tuple{Function, Union{AbstractRaster, AbstractRasterStack}, Vararg{Union{AbstractRaster, AbstractRasterStack}}}"},[i("span",{class:"jlbinding"},"Rasters.mosaic")],-1)),s[106]||(s[106]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[107]||(s[107]=t(`
julia
mosaic(f, regions...; missingval, atol)
 mosaic(f, regions; missingval, atol)

Combine regions into a single raster.

Arguments

  • f: A reducing function (mean, sum, first, last etc.) for values where regions overlap.

  • regions: Iterable or splatted Raster or RasterStack.

Keywords

  • missingval: Fills empty areas, and defualts to the missingval of the first region.

  • atol: Absolute tolerance for comparison between index values. This is often required due to minor differences in range values due to floating point error. It is not applied to non-float dimensions. A tuple of tolerances may be passed, matching the dimension order.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

If your mosaic has has apparent line errors, increase the atol value.

Example

Here we cut out Australia and Africa from a stack, and join them with mosaic.

julia
using Rasters, RasterDataSources, NaturalEarth, DataFrames, Dates, Plots
 countries = naturalearth("admin_0_countries", 110) |> DataFrame
 climate = RasterStack(WorldClim{Climate}, (:tmin, :tmax, :prec, :wind); month=July)
@@ -240,7 +240,7 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
 plot(scandinavia_climate)
 
 savefig("build/mosaic_example_combined.png")
-# output

Mosaic of countries

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',14))]),i("details",ds,[i("summary",null,[s[108]||(s[108]=i("a",{id:"Rasters.points-Tuple{AbstractRaster}",href:"#Rasters.points-Tuple{AbstractRaster}"},[i("span",{class:"jlbinding"},"Rasters.points")],-1)),s[109]||(s[109]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[110]||(s[110]=t('
julia
points(A::AbstractRaster; dims=(YDim, XDim), ignore_missing) => Array{Tuple}

Returns a generator of the points in A for dimensions in dims, where points are a tuple of the values in each specified dimension index.

Keywords

  • dims the dimensions to return points from. The first slice of other layers will be used.

  • ignore_missing: wether to ignore missing values in the array when considering points. If true, all points in the dimensions will be returned, if false only the points that are not === missingval(A) will be returned.

The order of dims determines the order of the points.

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',7))]),i("details",ks,[i("summary",null,[s[111]||(s[111]=i("a",{id:"Rasters.rasterize",href:"#Rasters.rasterize"},[i("span",{class:"jlbinding"},"Rasters.rasterize")],-1)),s[112]||(s[112]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[113]||(s[113]=t(`
julia
rasterize([reducer], data; geometrycolumn, kw...)

Rasterize a GeoInterface.jl compatable geometry or feature, or a Tables.jl table with a :geometry column of GeoInterface.jl objects, or points columns specified by geometrycolumn

Arguments

  • reducer: a reducing function to reduce the fill value for all geometries that cover or touch a pixel down to a single value. The default is last. Any that takes an iterable and returns a single value will work, including custom functions. However, there are optimisations for built-in methods including sum, first, last, minimum, maximum, extrema and Statistics.mean. These may be an order of magnitude or more faster than count is a special-cased as it does not need a fill value.

  • data: a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

These are detected automatically from data where possible.

  • fill: the value or values to fill a polygon with. A Symbol or tuple of Symbol will be used to retrieve properties from features or column values from table rows. An array or other iterable will be used for each geometry, in order. fill can also be a function of the current value, e.g. x -> x + 1.

  • op: A reducing function that accepts two values and returns one, like min to minimum. For common methods this will be assigned for you, or is not required. But you can use it instead of a reducer as it will usually be faster.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • threadsafe: specify that custom reducer and/or op functions are thread-safe, in that the order of operation or blocking does not matter. For example, sum and maximum are thread-safe, because the answer is approximately (besides floating point error) the same after running on nested blocks, or on all the data. In contrast, median or last are not, because the blocking (median) or order (last) matters.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

Note on threading. Performance may be much better with threaded=false if reducer/op are not threadsafe. sum, prod, maximum, minimum count and mean (by combining sum and count) are threadsafe. If you know your algorithm is threadsafe, use threadsafe=true to allow all optimisations. Functions passed to fill are always threadsafe, and ignore the threadsafe argument.

Example

Rasterize a shapefile for China and plot, with a border.

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates, Shapefile, Downloads
+# output

Mosaic of countries

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',14))]),i("details",hs,[i("summary",null,[s[108]||(s[108]=i("a",{id:"Rasters.points-Tuple{AbstractRaster}",href:"#Rasters.points-Tuple{AbstractRaster}"},[i("span",{class:"jlbinding"},"Rasters.points")],-1)),s[109]||(s[109]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[110]||(s[110]=t('
julia
points(A::AbstractRaster; dims=(YDim, XDim), ignore_missing) => Array{Tuple}

Returns a generator of the points in A for dimensions in dims, where points are a tuple of the values in each specified dimension index.

Keywords

  • dims the dimensions to return points from. The first slice of other layers will be used.

  • ignore_missing: wether to ignore missing values in the array when considering points. If true, all points in the dimensions will be returned, if false only the points that are not === missingval(A) will be returned.

The order of dims determines the order of the points.

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',7))]),i("details",ks,[i("summary",null,[s[111]||(s[111]=i("a",{id:"Rasters.rasterize",href:"#Rasters.rasterize"},[i("span",{class:"jlbinding"},"Rasters.rasterize")],-1)),s[112]||(s[112]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[113]||(s[113]=t(`
julia
rasterize([reducer], data; geometrycolumn, kw...)

Rasterize a GeoInterface.jl compatable geometry or feature, or a Tables.jl table with a :geometry column of GeoInterface.jl objects, or points columns specified by geometrycolumn

Arguments

  • reducer: a reducing function to reduce the fill value for all geometries that cover or touch a pixel down to a single value. The default is last. Any that takes an iterable and returns a single value will work, including custom functions. However, there are optimisations for built-in methods including sum, first, last, minimum, maximum, extrema and Statistics.mean. These may be an order of magnitude or more faster than count is a special-cased as it does not need a fill value.

  • data: a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

These are detected automatically from data where possible.

  • fill: the value or values to fill a polygon with. A Symbol or tuple of Symbol will be used to retrieve properties from features or column values from table rows. An array or other iterable will be used for each geometry, in order. fill can also be a function of the current value, e.g. x -> x + 1.

  • op: A reducing function that accepts two values and returns one, like min to minimum. For common methods this will be assigned for you, or is not required. But you can use it instead of a reducer as it will usually be faster.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • threadsafe: specify that custom reducer and/or op functions are thread-safe, in that the order of operation or blocking does not matter. For example, sum and maximum are thread-safe, because the answer is approximately (besides floating point error) the same after running on nested blocks, or on all the data. In contrast, median or last are not, because the blocking (median) or order (last) matters.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

Note on threading. Performance may be much better with threaded=false if reducer/op are not threadsafe. sum, prod, maximum, minimum count and mean (by combining sum and count) are threadsafe. If you know your algorithm is threadsafe, use threadsafe=true to allow all optimisations. Functions passed to fill are always threadsafe, and ignore the threadsafe argument.

Example

Rasterize a shapefile for China and plot, with a border.

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates, Shapefile, Downloads
 using Rasters.Lookups
 
 # Download a borders shapefile
@@ -260,7 +260,7 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
 
 savefig("build/china_rasterized.png"); nothing
 
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',14))]),i("details",cs,[i("summary",null,[s[114]||(s[114]=i("a",{id:"Rasters.rasterize!",href:"#Rasters.rasterize!"},[i("span",{class:"jlbinding"},"Rasters.rasterize!")],-1)),s[115]||(s[115]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[116]||(s[116]=t(`
julia
rasterize!([reducer], dest, data; kw...)

Rasterize the geometries in data into the Raster or RasterStack dest, using the values specified by fill.

Arguments

  • dest: a Raster or RasterStack to rasterize into.

  • reducer: a reducing function to reduce the fill value for all geometries that cover or touch a pixel down to a single value. The default is last. Any that takes an iterable and returns a single value will work, including custom functions. However, there are optimisations for built-in methods including sum, first, last, minimum, maximum, extrema and Statistics.mean. These may be an order of magnitude or more faster than count is a special-cased as it does not need a fill value.

  • data: a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

These are detected automatically from A and data where possible.

  • fill: the value or values to fill a polygon with. A Symbol or tuple of Symbol will be used to retrieve properties from features or column values from table rows. An array or other iterable will be used for each geometry, in order. fill can also be a function of the current value, e.g. x -> x + 1.

  • op: A reducing function that accepts two values and returns one, like min to minimum. For common methods this will be assigned for you, or is not required. But you can use it instead of a reducer as it will usually be faster.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • threadsafe: specify that custom reducer and/or op functions are thread-safe, in that the order of operation or blocking does not matter. For example, sum and maximum are thread-safe, because the answer is approximately (besides floating point error) the same after running on nested blocks, or on all the data. In contrast, median or last are not, because the blocking (median) or order (last) matters.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

Example

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates, Shapefile, GeoInterface, Downloads
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',14))]),i("details",cs,[i("summary",null,[s[114]||(s[114]=i("a",{id:"Rasters.rasterize!",href:"#Rasters.rasterize!"},[i("span",{class:"jlbinding"},"Rasters.rasterize!")],-1)),s[115]||(s[115]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[116]||(s[116]=t(`
julia
rasterize!([reducer], dest, data; kw...)

Rasterize the geometries in data into the Raster or RasterStack dest, using the values specified by fill.

Arguments

  • dest: a Raster or RasterStack to rasterize into.

  • reducer: a reducing function to reduce the fill value for all geometries that cover or touch a pixel down to a single value. The default is last. Any that takes an iterable and returns a single value will work, including custom functions. However, there are optimisations for built-in methods including sum, first, last, minimum, maximum, extrema and Statistics.mean. These may be an order of magnitude or more faster than count is a special-cased as it does not need a fill value.

  • data: a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

These are detected automatically from A and data where possible.

  • fill: the value or values to fill a polygon with. A Symbol or tuple of Symbol will be used to retrieve properties from features or column values from table rows. An array or other iterable will be used for each geometry, in order. fill can also be a function of the current value, e.g. x -> x + 1.

  • op: A reducing function that accepts two values and returns one, like min to minimum. For common methods this will be assigned for you, or is not required. But you can use it instead of a reducer as it will usually be faster.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

  • progress: show a progress bar, true by default, false to hide.

  • vebose: whether to print messages about potential problems. true by default.

  • threaded: run operations in parallel, false by default. In some circumstances threaded can give large speedups over single-threaded operation. This can be true for complicated geometries written into low-resolution rasters, but may not be for simple geometries with high-resolution rasters. With very large rasters threading may be counter productive due to excessive memory use. Caution should also be used: threaded should not be used in in-place functions writing to BitArray or other arrays where race conditions can occur.

  • threadsafe: specify that custom reducer and/or op functions are thread-safe, in that the order of operation or blocking does not matter. For example, sum and maximum are thread-safe, because the answer is approximately (besides floating point error) the same after running on nested blocks, or on all the data. In contrast, median or last are not, because the blocking (median) or order (last) matters.

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from the geometries, Additionally, when no to object or an Extent is passed for to, the size or res keyword must also be used.

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the polygon :touches the pixel, or that are completely :inside the polygon. The default is :center.

  • shape: Force data to be treated as :polygon, :line or :point geometries. using points or lines as polygons may have unexpected results.

Example

julia
using Rasters, RasterDataSources, ArchGDAL, Plots, Dates, Shapefile, GeoInterface, Downloads
 using Rasters.Lookups
 
 # Download a borders shapefile
@@ -288,12 +288,12 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
 
 savefig("build/indonesia_rasterized.png"); nothing
 
-# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',12))]),i("details",gs,[i("summary",null,[s[117]||(s[117]=i("a",{id:"Rasters.replace_missing-Tuple{Any}",href:"#Rasters.replace_missing-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.replace_missing")],-1)),s[118]||(s[118]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[119]||(s[119]=t(`
julia
replace_missing(a::AbstractRaster, newmissingval)
+# output

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',12))]),i("details",gs,[i("summary",null,[s[117]||(s[117]=i("a",{id:"Rasters.replace_missing-Tuple{Any}",href:"#Rasters.replace_missing-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.replace_missing")],-1)),s[118]||(s[118]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[119]||(s[119]=t(`
julia
replace_missing(a::AbstractRaster, newmissingval)
 replace_missing(a::AbstractRasterStack, newmissingval)

Replace missing values in the array or stack with a new missing value, also updating the missingval field/s.

Keywords

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

Example

julia
using Rasters, RasterDataSources, ArchGDAL
 A = Raster(WorldClim{Climate}, :prec; month=1) |> replace_missing
 missingval(A)
 # output
-missing

source

`,7))]),i("details",Es,[i("summary",null,[s[120]||(s[120]=i("a",{id:"Rasters.reproject-NTuple{4, Any}",href:"#Rasters.reproject-NTuple{4, Any}"},[i("span",{class:"jlbinding"},"Rasters.reproject")],-1)),s[121]||(s[121]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[122]||(s[122]=t('
julia
reproject(source::GeoFormat, target::GeoFormat, dim::Dimension, val)

reproject uses ArchGDAL.reproject, but implemented for a reprojecting a value array of values, a single dimension at a time.

source

',3))]),i("details",ys,[i("summary",null,[s[123]||(s[123]=i("a",{id:"Rasters.reproject-Tuple{Any}",href:"#Rasters.reproject-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.reproject")],-1)),s[124]||(s[124]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[125]||(s[125]=t('
julia
reproject(obj; crs)

Reproject the lookups of obj to a different crs.

This is a lossless operation for the raster data, as only the lookup values change. This is only possible when the axes of source and destination projections are aligned: the change is usually from a Regular and an Irregular lookup spans.

For converting between projections that are rotated, skewed or warped in any way, use resample.

Dimensions without an AbstractProjected lookup (such as a Ti dimension) are silently returned without modification.

Arguments

  • obj: a Lookup, Dimension, Tuple of Dimension, Raster or RasterStack.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

source

',8))]),i("details",us,[i("summary",null,[s[126]||(s[126]=i("a",{id:"Rasters.resample-Tuple",href:"#Rasters.resample-Tuple"},[i("span",{class:"jlbinding"},"Rasters.resample")],-1)),s[127]||(s[127]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[128]||(s[128]=t(`
julia
resample(x; kw...)
+missing

source

`,7))]),i("details",Es,[i("summary",null,[s[120]||(s[120]=i("a",{id:"Rasters.reproject-NTuple{4, Any}",href:"#Rasters.reproject-NTuple{4, Any}"},[i("span",{class:"jlbinding"},"Rasters.reproject")],-1)),s[121]||(s[121]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[122]||(s[122]=t('
julia
reproject(source::GeoFormat, target::GeoFormat, dim::Dimension, val)

reproject uses ArchGDAL.reproject, but implemented for a reprojecting a value array of values, a single dimension at a time.

source

',3))]),i("details",ys,[i("summary",null,[s[123]||(s[123]=i("a",{id:"Rasters.reproject-Tuple{Any}",href:"#Rasters.reproject-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.reproject")],-1)),s[124]||(s[124]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[125]||(s[125]=t('
julia
reproject(obj; crs)

Reproject the lookups of obj to a different crs.

This is a lossless operation for the raster data, as only the lookup values change. This is only possible when the axes of source and destination projections are aligned: the change is usually from a Regular and an Irregular lookup spans.

For converting between projections that are rotated, skewed or warped in any way, use resample.

Dimensions without an AbstractProjected lookup (such as a Ti dimension) are silently returned without modification.

Arguments

  • obj: a Lookup, Dimension, Tuple of Dimension, Raster or RasterStack.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

source

',8))]),i("details",us,[i("summary",null,[s[126]||(s[126]=i("a",{id:"Rasters.resample-Tuple",href:"#Rasters.resample-Tuple"},[i("span",{class:"jlbinding"},"Rasters.resample")],-1)),s[127]||(s[127]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[128]||(s[128]=t(`
julia
resample(x; kw...)
 resample(xs...; to=first(xs), kw...)

resample uses warp (which uses GDALs gdalwarp) to resample a Raster or RasterStack to a new resolution and optionally new crs, or to snap to the bounds, resolution and crs of the object to.

Dimensions without an AbstractProjected lookup (such as a Ti dimension) are iteratively resampled with GDAL and joined back into a single array.

If projections can be converted for each axis independently, it may be faster and more accurate to use reproject.

Run using ArchGDAL to make this method available.

Arguments

  • x: the object/s to resample.

Keywords

  • to: a Raster, RasterStack, Tuple of Dimension or Extents.Extent. If no to object is provided the extent will be calculated from x,

  • res: the resolution of the dimensions (often in meters or degrees), a Real or Tuple{<:Real,<:Real}. Only required when to is not used or is an Extents.Extent, and size is not used.

  • size: the size of the output array, as a Tuple{Int,Int} or single Int for a square. Only required when to is not used or is an Extents.Extent, and res is not used.

  • crs: a crs which will be attached to the resulting raster when to not passed or is an Extent. Otherwise the crs from to is used.

  • method: A Symbol or String specifying the method to use for resampling. From the docs for gdalwarp:

    • :near: nearest neighbour resampling (default, fastest algorithm, worst interpolation quality).

    • :bilinear: bilinear resampling.

    • :cubic: cubic resampling.

    • :cubicspline: cubic spline resampling.

    • :lanczos: Lanczos windowed sinc resampling.

    • :average: average resampling, computes the weighted average of all non-NODATA contributing pixels. rms root mean square / quadratic mean of all non-NODATA contributing pixels (GDAL >= 3.3)

    • :mode: mode resampling, selects the value which appears most often of all the sampled points.

    • :max: maximum resampling, selects the maximum value from all non-NODATA contributing pixels.

    • :min: minimum resampling, selects the minimum value from all non-NODATA contributing pixels.

    • :med: median resampling, selects the median value of all non-NODATA contributing pixels.

    • :q1: first quartile resampling, selects the first quartile value of all non-NODATA contributing pixels.

    • :q3: third quartile resampling, selects the third quartile value of all non-NODATA contributing pixels.

    • :sum: compute the weighted sum of all non-NODATA contributing pixels (since GDAL 3.1)

    Where NODATA values are set to missingval.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

Note:

  • GDAL may cause some unexpected changes in the raster, such as changing the crs type from EPSG to WellKnownText (it will represent the same CRS).

Example

Resample a WorldClim layer to match an EarthEnv layer:

julia
using Rasters, RasterDataSources, ArchGDAL, Plots
 A = Raster(WorldClim{Climate}, :prec; month=1)
 B = Raster(EarthEnv{HabitatHeterogeneity}, :evenness)
@@ -304,7 +304,7 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
 savefig(a, "build/resample_example_before.png");
 savefig(b, "build/resample_example_after.png"); nothing
 
-# output

Before resample:

After resample:

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',20))]),i("details",ms,[i("summary",null,[s[129]||(s[129]=i("a",{id:"Rasters.setcrs-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}",href:"#Rasters.setcrs-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}"},[i("span",{class:"jlbinding"},"Rasters.setcrs")],-1)),s[130]||(s[130]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[131]||(s[131]=t('
julia
setcrs(x, crs)

Set the crs of a Raster, RasterStack, Tuple of Dimension, or a Dimension. The crs is expected to be a GeoFormatTypes.jl CRS or Mixed GeoFormat type

source

',3))]),i("details",bs,[i("summary",null,[s[132]||(s[132]=i("a",{id:"Rasters.setmappedcrs-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}",href:"#Rasters.setmappedcrs-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}"},[i("span",{class:"jlbinding"},"Rasters.setmappedcrs")],-1)),s[133]||(s[133]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[134]||(s[134]=t('
julia
setmappedcrs(x, crs)

Set the mapped crs of a Raster, a RasterStack, a Tuple of Dimension, or a Dimension. The crs is expected to be a GeoFormatTypes.jl CRS or Mixed GeoFormat type

source

',3))]),i("details",fs,[i("summary",null,[s[135]||(s[135]=i("a",{id:"Rasters.slice-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}",href:"#Rasters.slice-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}"},[i("span",{class:"jlbinding"},"Rasters.slice")],-1)),s[136]||(s[136]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[137]||(s[137]=t('
julia
slice(A::Union{AbstractRaster,AbstractRasterStack,AbstracRasterSeries}, dims) => RasterSeries

Slice views along some dimension/s to obtain a RasterSeries of the slices.

For a Raster or RasterStack this will return a RasterSeries of Raster or RasterStack that are slices along the specified dimensions.

For a RasterSeries, the output is another series where the child objects are sliced and the series dimensions index is now of the child dimensions combined. slice on a RasterSeries with no dimensions will slice along the dimensions shared by both the series and child object.

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',6))]),i("details",Fs,[i("summary",null,[s[138]||(s[138]=i("a",{id:"Rasters.trim-Tuple{Union{AbstractRaster, AbstractRasterStack}}",href:"#Rasters.trim-Tuple{Union{AbstractRaster, AbstractRasterStack}}"},[i("span",{class:"jlbinding"},"Rasters.trim")],-1)),s[139]||(s[139]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[140]||(s[140]=t(`
julia
trim(x; dims::Tuple, pad::Int)

Trim missingval(x) from x for axes in dims, returning a view of x.

Arguments

  • x: A Raster or RasterStack. For stacks, all layers must having missing values for a pixel for it to be trimmed.

Keywords

  • dims: By default dims=(XDim, YDim), so that trimming keeps the area of X and Y that contains non-missing values along all other dimensions.

  • pad: The trimmed size will be padded by pad on all sides, although padding will not be added beyond the original extent of the array.

As trim is lazy, filename and suffix keywords are not used.

Example

Create trimmed layers of Australian habitat heterogeneity.

julia
using Rasters, RasterDataSources, Plots
+# output

Before resample:

After resample:

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',20))]),i("details",ms,[i("summary",null,[s[129]||(s[129]=i("a",{id:"Rasters.setcrs-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}",href:"#Rasters.setcrs-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}"},[i("span",{class:"jlbinding"},"Rasters.setcrs")],-1)),s[130]||(s[130]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[131]||(s[131]=t('
julia
setcrs(x, crs)

Set the crs of a Raster, RasterStack, Tuple of Dimension, or a Dimension. The crs is expected to be a GeoFormatTypes.jl CRS or Mixed GeoFormat type

source

',3))]),i("details",bs,[i("summary",null,[s[132]||(s[132]=i("a",{id:"Rasters.setmappedcrs-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}",href:"#Rasters.setmappedcrs-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}"},[i("span",{class:"jlbinding"},"Rasters.setmappedcrs")],-1)),s[133]||(s[133]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[134]||(s[134]=t('
julia
setmappedcrs(x, crs)

Set the mapped crs of a Raster, a RasterStack, a Tuple of Dimension, or a Dimension. The crs is expected to be a GeoFormatTypes.jl CRS or Mixed GeoFormat type

source

',3))]),i("details",Fs,[i("summary",null,[s[135]||(s[135]=i("a",{id:"Rasters.slice-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}",href:"#Rasters.slice-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}"},[i("span",{class:"jlbinding"},"Rasters.slice")],-1)),s[136]||(s[136]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[137]||(s[137]=t('
julia
slice(A::Union{AbstractRaster,AbstractRasterStack,AbstracRasterSeries}, dims) => RasterSeries

Slice views along some dimension/s to obtain a RasterSeries of the slices.

For a Raster or RasterStack this will return a RasterSeries of Raster or RasterStack that are slices along the specified dimensions.

For a RasterSeries, the output is another series where the child objects are sliced and the series dimensions index is now of the child dimensions combined. slice on a RasterSeries with no dimensions will slice along the dimensions shared by both the series and child object.

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',6))]),i("details",fs,[i("summary",null,[s[138]||(s[138]=i("a",{id:"Rasters.trim-Tuple{Union{AbstractRaster, AbstractRasterStack}}",href:"#Rasters.trim-Tuple{Union{AbstractRaster, AbstractRasterStack}}"},[i("span",{class:"jlbinding"},"Rasters.trim")],-1)),s[139]||(s[139]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[140]||(s[140]=t(`
julia
trim(x; dims::Tuple, pad::Int)

Trim missingval(x) from x for axes in dims, returning a view of x.

Arguments

  • x: A Raster or RasterStack. For stacks, all layers must having missing values for a pixel for it to be trimmed.

Keywords

  • dims: By default dims=(XDim, YDim), so that trimming keeps the area of X and Y that contains non-missing values along all other dimensions.

  • pad: The trimmed size will be padded by pad on all sides, although padding will not be added beyond the original extent of the array.

As trim is lazy, filename and suffix keywords are not used.

Example

Create trimmed layers of Australian habitat heterogeneity.

julia
using Rasters, RasterDataSources, Plots
 layers = (:evenness, :range, :contrast, :correlation)
 st = RasterStack(EarthEnv{HabitatHeterogeneity}, layers)
 
@@ -319,7 +319,7 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
 savefig(a, "build/trim_example_before.png");
 savefig(b, "build/trim_example_after.png"); nothing
 
-# output

Before trim:

After trim:

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',16))]),i("details",Cs,[i("summary",null,[s[141]||(s[141]=i("a",{id:"Rasters.warp-Tuple",href:"#Rasters.warp-Tuple"},[i("span",{class:"jlbinding"},"Rasters.warp")],-1)),s[142]||(s[142]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[143]||(s[143]=t(`
julia
warp(A::AbstractRaster, flags::Dict; kw...)

Gives access to the GDALs gdalwarp method given a Dict of flag => value arguments that can be converted to strings, or vectors where multiple space-separated arguments are required.

Arrays with additional dimensions not handled by GDAL (other than X, Y, Band) are sliced, warped, and then combined to match the original array dimensions. These slices will not be written to disk and loaded lazily at this stage - you will need to do that manually if required.

See the gdalwarp docs for a list of arguments.

Run using ArchGDAL to make this method available.

Keywords

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

  • missingval: the missing value to use during warping, will default to \`Rasters.missingval(A). Passing a pair will specify the missing value to use after warping.

Any additional keywords are passed to ArchGDAL.Dataset.

Example

This simply resamples the array with the :tr (output file resolution) and :r flags, giving us a pixelated version:

julia
using Rasters, ArchGDAL, RasterDataSources, Plots
+# output

Before trim:

After trim:

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',16))]),i("details",Cs,[i("summary",null,[s[141]||(s[141]=i("a",{id:"Rasters.warp-Tuple",href:"#Rasters.warp-Tuple"},[i("span",{class:"jlbinding"},"Rasters.warp")],-1)),s[142]||(s[142]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[143]||(s[143]=t(`
julia
warp(A::AbstractRaster, flags::Dict; kw...)

Gives access to the GDALs gdalwarp method given a Dict of flag => value arguments that can be converted to strings, or vectors where multiple space-separated arguments are required.

Arrays with additional dimensions not handled by GDAL (other than X, Y, Band) are sliced, warped, and then combined to match the original array dimensions. These slices will not be written to disk and loaded lazily at this stage - you will need to do that manually if required.

See the gdalwarp docs for a list of arguments.

Run using ArchGDAL to make this method available.

Keywords

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file.

  • filename: a filename to write to directly, useful for large files.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

  • missingval: the missing value to use during warping, will default to \`Rasters.missingval(A). Passing a pair will specify the missing value to use after warping.

Any additional keywords are passed to ArchGDAL.Dataset.

Example

This simply resamples the array with the :tr (output file resolution) and :r flags, giving us a pixelated version:

julia
using Rasters, ArchGDAL, RasterDataSources, Plots
 A = Raster(WorldClim{Climate}, :prec; month=1)
 a = plot(A)
 
@@ -332,7 +332,7 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
 savefig(a, "build/warp_example_before.png");
 savefig(b, "build/warp_example_after.png"); nothing
 
-# output

Before warp:

After warp:

In practise, prefer resample for this. But warp may be more flexible.

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',18))]),i("details",As,[i("summary",null,[s[144]||(s[144]=i("a",{id:"Rasters.zonal-Tuple{Any, Union{AbstractRaster, AbstractRasterStack}}",href:"#Rasters.zonal-Tuple{Any, Union{AbstractRaster, AbstractRasterStack}}"},[i("span",{class:"jlbinding"},"Rasters.zonal")],-1)),s[145]||(s[145]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[146]||(s[146]=t(`
julia
zonal(f, x::Union{Raster,RasterStack}; of, kw...)

Calculate zonal statistics for the the zone of a Raster or RasterStack covered by the of object/s.

Arguments

  • f: any function that reduces an iterable to a single value, such as sum or Statistics.mean

  • x: A Raster or RasterStack

  • of: A DimTuple, Extent, a Raster or one or multiple geometries. Geometries can be a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

These can be used when of is or contains (a) GeoInterface.jl compatible object(s):

  • shape: Force data to be treated as :polygon, :line or :point, where possible.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the line :touches the pixel, or that are completely :inside inside the polygon. The default is :center.

  • progress: show a progress bar, true by default, false to hide..

  • skipmissing: wether to apply f to the result of skipmissing(A) or not. If true f will be passed an iterator over the values, which loses all spatial information. if false f will be passes a masked Raster or RasterStack, and will be responsible for handling missing values itself. The default value is true.

Example

julia
using Rasters, RasterDataSources, ArchGDAL, DataFrames, Statistics, Dates, NaturalEarth
+# output

Before warp:

After warp:

In practise, prefer resample for this. But warp may be more flexible.

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

',18))]),i("details",As,[i("summary",null,[s[144]||(s[144]=i("a",{id:"Rasters.zonal-Tuple{Any, Union{AbstractRaster, AbstractRasterStack}}",href:"#Rasters.zonal-Tuple{Any, Union{AbstractRaster, AbstractRasterStack}}"},[i("span",{class:"jlbinding"},"Rasters.zonal")],-1)),s[145]||(s[145]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[146]||(s[146]=t(`
julia
zonal(f, x::Union{Raster,RasterStack}; of, kw...)

Calculate zonal statistics for the the zone of a Raster or RasterStack covered by the of object/s.

Arguments

  • f: any function that reduces an iterable to a single value, such as sum or Statistics.mean

  • x: A Raster or RasterStack

  • of: A DimTuple, Extent, a Raster or one or multiple geometries. Geometries can be a GeoInterface.jl AbstractGeometry, a nested Vector of AbstractGeometry, or a Tables.jl compatible object containing a :geometry column or points and values columns, in which case geometrycolumn must be specified.

Keywords

  • geometrycolumn: Symbol to manually select the column the geometries are in when data is a Tables.jl compatible table, or a tuple of Symbol for columns of point coordinates.

These can be used when of is or contains (a) GeoInterface.jl compatible object(s):

  • shape: Force data to be treated as :polygon, :line or :point, where possible.

  • boundary: for polygons, include pixels where the :center is inside the polygon, where the line :touches the pixel, or that are completely :inside inside the polygon. The default is :center.

  • progress: show a progress bar, true by default, false to hide..

  • skipmissing: wether to apply f to the result of skipmissing(A) or not. If true f will be passed an iterator over the values, which loses all spatial information. if false f will be passes a masked Raster or RasterStack, and will be responsible for handling missing values itself. The default value is true.

Example

julia
using Rasters, RasterDataSources, ArchGDAL, DataFrames, Statistics, Dates, NaturalEarth
 # Download borders
 countries = naturalearth("admin_0_countries", 10) |> DataFrame
 # Download and read a raster stack from WorldClim
@@ -362,20 +362,20 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
  256 │ Bajo Nuevo Bank               NaN        NaN        NaN        NaN
  257 │ Serranilla Bank               NaN        NaN        NaN        NaN
  258 │ Scarborough Reef              NaN        NaN        NaN        NaN
-                                                  3 columns and 243 rows omitted

source

`,11))]),s[196]||(s[196]=i("h2",{id:"Reference-Internal-functions",tabindex:"-1"},[e("Reference - Internal functions "),i("a",{class:"header-anchor",href:"#Reference-Internal-functions","aria-label":'Permalink to "Reference - Internal functions {#Reference-Internal-functions}"'},"​")],-1)),i("details",vs,[i("summary",null,[s[147]||(s[147]=i("a",{id:"Rasters.AbstractProjected",href:"#Rasters.AbstractProjected"},[i("span",{class:"jlbinding"},"Rasters.AbstractProjected")],-1)),s[148]||(s[148]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[149]||(s[149]=t('
julia
AbstractProjected <: AbstractSampled

Abstract supertype for projected index lookups.

source

',3))]),i("details",Rs,[i("summary",null,[s[150]||(s[150]=i("a",{id:"Rasters.FileArray",href:"#Rasters.FileArray"},[i("span",{class:"jlbinding"},"Rasters.FileArray")],-1)),s[151]||(s[151]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[152]||(s[152]=t('
julia
FileArray{S} <: DiskArrays.AbstractDiskArray

Filearray is a DiskArrays.jl AbstractDiskArray. Instead of holding an open object, it just holds a filename string that is opened lazily when it needs to be read.

source

',3))]),i("details",Ds,[i("summary",null,[s[153]||(s[153]=i("a",{id:"Rasters.FileStack",href:"#Rasters.FileStack"},[i("span",{class:"jlbinding"},"Rasters.FileStack")],-1)),s[154]||(s[154]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[155]||(s[155]=t(`
julia
FileStack{S,Na}
+                                                  3 columns and 243 rows omitted

source

`,11))]),s[196]||(s[196]=i("h2",{id:"Reference-Internal-functions",tabindex:"-1"},[e("Reference - Internal functions "),i("a",{class:"header-anchor",href:"#Reference-Internal-functions","aria-label":'Permalink to "Reference - Internal functions {#Reference-Internal-functions}"'},"​")],-1)),i("details",vs,[i("summary",null,[s[147]||(s[147]=i("a",{id:"Rasters.AbstractProjected",href:"#Rasters.AbstractProjected"},[i("span",{class:"jlbinding"},"Rasters.AbstractProjected")],-1)),s[148]||(s[148]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[149]||(s[149]=t('
julia
AbstractProjected <: AbstractSampled

Abstract supertype for projected index lookups.

source

',3))]),i("details",Rs,[i("summary",null,[s[150]||(s[150]=i("a",{id:"Rasters.FileArray",href:"#Rasters.FileArray"},[i("span",{class:"jlbinding"},"Rasters.FileArray")],-1)),s[151]||(s[151]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[152]||(s[152]=t('
julia
FileArray{S} <: DiskArrays.AbstractDiskArray

Filearray is a DiskArrays.jl AbstractDiskArray. Instead of holding an open object, it just holds a filename string that is opened lazily when it needs to be read.

source

',3))]),i("details",Ds,[i("summary",null,[s[153]||(s[153]=i("a",{id:"Rasters.FileStack",href:"#Rasters.FileStack"},[i("span",{class:"jlbinding"},"Rasters.FileStack")],-1)),s[154]||(s[154]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[155]||(s[155]=t(`
julia
FileStack{S,Na}
 
-FileStack{S,Na}(filename, types, sizes, eachchunk, haschunks, write)

A wrapper object that holds file pointer and size/chunking metadata for a multi-layered stack stored in a single file, typically netcdf or hdf5.

S is a backend type like NCDsource, and Na is a tuple of Symbol keys.

source

`,4))]),i("details",Bs,[i("summary",null,[s[156]||(s[156]=i("a",{id:"Rasters.OpenStack",href:"#Rasters.OpenStack"},[i("span",{class:"jlbinding"},"Rasters.OpenStack")],-1)),s[157]||(s[157]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[158]||(s[158]=t(`
julia
OpenStack{X,K}
+FileStack{S,Na}(filename, types, sizes, eachchunk, haschunks, write)

A wrapper object that holds file pointer and size/chunking metadata for a multi-layered stack stored in a single file, typically netcdf or hdf5.

S is a backend type like NCDsource, and Na is a tuple of Symbol keys.

source

`,4))]),i("details",Bs,[i("summary",null,[s[156]||(s[156]=i("a",{id:"Rasters.OpenStack",href:"#Rasters.OpenStack"},[i("span",{class:"jlbinding"},"Rasters.OpenStack")],-1)),s[157]||(s[157]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[158]||(s[158]=t(`
julia
OpenStack{X,K}
 
-OpenStack{X,K}(dataset)

A wrapper for any stack-like opened dataset that can be indexed with Symbol keys to retrieve AbstractArray layers.

OpenStack is usually hidden from users, wrapped in a regular RasterStack passed as the function argument in open(stack) when the stack is contained in a single file.

X is a backend type like NCDsource, and K is a tuple of Symbol keys.

source

`,5))]),i("details",js,[i("summary",null,[s[159]||(s[159]=i("a",{id:"Rasters.RasterDiskArray",href:"#Rasters.RasterDiskArray"},[i("span",{class:"jlbinding"},"Rasters.RasterDiskArray")],-1)),s[160]||(s[160]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[161]||(s[161]=t('
julia
RasterDiskArray <: DiskArrays.AbstractDiskArray

A basic DiskArrays.jl wrapper for objects that don't have one defined yet. When we open a FileArray it is replaced with a RasterDiskArray.

source

',3))]),i("details",ws,[i("summary",null,[s[162]||(s[162]=i("a",{id:"Base.open-Tuple{Function, AbstractRaster}",href:"#Base.open-Tuple{Function, AbstractRaster}"},[i("span",{class:"jlbinding"},"Base.open")],-1)),s[163]||(s[163]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[164]||(s[164]=t(`
julia
open(f, A::AbstractRaster; write=false)

open is used to open any lazy=true AbstractRaster and do multiple operations on it in a safe way. The write keyword opens the file in write lookup so that it can be altered on disk using e.g. a broadcast.

f is a method that accepts a single argument - an Raster object which is just an AbstractRaster that holds an open disk-based object. Often it will be a do block:

lazy=false (in-memory) rasters will ignore open and pass themselves to f.

julia
# A is an \`Raster\` wrapping the opened disk-based object.
+OpenStack{X,K}(dataset)

A wrapper for any stack-like opened dataset that can be indexed with Symbol keys to retrieve AbstractArray layers.

OpenStack is usually hidden from users, wrapped in a regular RasterStack passed as the function argument in open(stack) when the stack is contained in a single file.

X is a backend type like NCDsource, and K is a tuple of Symbol keys.

source

`,5))]),i("details",js,[i("summary",null,[s[159]||(s[159]=i("a",{id:"Rasters.RasterDiskArray",href:"#Rasters.RasterDiskArray"},[i("span",{class:"jlbinding"},"Rasters.RasterDiskArray")],-1)),s[160]||(s[160]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[161]||(s[161]=t('
julia
RasterDiskArray <: DiskArrays.AbstractDiskArray

A basic DiskArrays.jl wrapper for objects that don't have one defined yet. When we open a FileArray it is replaced with a RasterDiskArray.

source

',3))]),i("details",ws,[i("summary",null,[s[162]||(s[162]=i("a",{id:"Base.open-Tuple{Function, AbstractRaster}",href:"#Base.open-Tuple{Function, AbstractRaster}"},[i("span",{class:"jlbinding"},"Base.open")],-1)),s[163]||(s[163]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[164]||(s[164]=t(`
julia
open(f, A::AbstractRaster; write=false)

open is used to open any lazy=true AbstractRaster and do multiple operations on it in a safe way. The write keyword opens the file in write lookup so that it can be altered on disk using e.g. a broadcast.

f is a method that accepts a single argument - an Raster object which is just an AbstractRaster that holds an open disk-based object. Often it will be a do block:

lazy=false (in-memory) rasters will ignore open and pass themselves to f.

julia
# A is an \`Raster\` wrapping the opened disk-based object.
 open(Raster(filepath); write=true) do A
     mask!(A; with=maskfile)
     A[I...] .*= 2
     # ...  other things you need to do with the open file
-end

By using a do block to open files we ensure they are always closed again after we finish working with them.

source

`,7))]),i("details",Ts,[i("summary",null,[s[165]||(s[165]=i("a",{id:"Base.read!-Tuple{AbstractRaster, AbstractArray}",href:"#Base.read!-Tuple{AbstractRaster, AbstractArray}"},[i("span",{class:"jlbinding"},"Base.read!")],-1)),s[166]||(s[166]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[167]||(s[167]=t(`
julia
read!(src::Union{AbstractString,AbstractRaster}, dst::AbstractRaster)
+end

By using a do block to open files we ensure they are always closed again after we finish working with them.

source

`,7))]),i("details",Ts,[i("summary",null,[s[165]||(s[165]=i("a",{id:"Base.read!-Tuple{AbstractRaster, AbstractArray}",href:"#Base.read!-Tuple{AbstractRaster, AbstractArray}"},[i("span",{class:"jlbinding"},"Base.read!")],-1)),s[166]||(s[166]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[167]||(s[167]=t(`
julia
read!(src::Union{AbstractString,AbstractRaster}, dst::AbstractRaster)
 read!(src::Union{AbstractString,AbstractRasterStack}, dst::AbstractRasterStack)
-read!(scr::AbstractRasterSeries, dst::AbstractRasterSeries)

read! will copy the data from src to the object dst.

src can be an object or a file-path String.

source

`,4))]),i("details",_s,[i("summary",null,[s[168]||(s[168]=i("a",{id:"Base.read-Tuple{Union{AbstractRaster, AbstractRasterSeries, AbstractRasterStack}}",href:"#Base.read-Tuple{Union{AbstractRaster, AbstractRasterSeries, AbstractRasterStack}}"},[i("span",{class:"jlbinding"},"Base.read")],-1)),s[169]||(s[169]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[170]||(s[170]=t(`
julia
read(A::AbstractRaster)
+read!(scr::AbstractRasterSeries, dst::AbstractRasterSeries)

read! will copy the data from src to the object dst.

src can be an object or a file-path String.

source

`,4))]),i("details",_s,[i("summary",null,[s[168]||(s[168]=i("a",{id:"Base.read-Tuple{Union{AbstractRaster, AbstractRasterSeries, AbstractRasterStack}}",href:"#Base.read-Tuple{Union{AbstractRaster, AbstractRasterSeries, AbstractRasterStack}}"},[i("span",{class:"jlbinding"},"Base.read")],-1)),s[169]||(s[169]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[170]||(s[170]=t(`
julia
read(A::AbstractRaster)
 read(A::AbstractRasterStack)
-read(A::AbstractRasterSeries)

read will move a Rasters.jl object completely to memory.

Keywords

  • checkmemory: if true (the default), check if there is enough memory for the operation. false will ignore memory needs.

source

`,5))]),i("details",xs,[i("summary",null,[s[171]||(s[171]=i("a",{id:"Base.skipmissing-Tuple{Raster}",href:"#Base.skipmissing-Tuple{Raster}"},[i("span",{class:"jlbinding"},"Base.skipmissing")],-1)),s[172]||(s[172]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[173]||(s[173]=t('
julia
skipmissing(itr::Raster)

Returns an iterable over the elements in a Raster object, skipping any values equal to either the missingval or missing.

source

',3))]),i("details",Ss,[i("summary",null,[s[174]||(s[174]=i("a",{id:"Base.write-Tuple{AbstractString, AbstractRasterSeries}",href:"#Base.write-Tuple{AbstractString, AbstractRasterSeries}"},[i("span",{class:"jlbinding"},"Base.write")],-1)),s[175]||(s[175]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[176]||(s[176]=t('
julia
Base.write(filepath::AbstractString, s::AbstractRasterSeries; kw...)

Write any AbstractRasterSeries to multiple files, guessing the backend from the file extension.

The lookup values of the series will be appended to the filepath (before the extension), separated by underscores.

All keywords are passed through to these Raster and RasterStack methods.

Keywords

  • chunks: a NTuple{N,Int} specifying the chunk size for each dimension. To specify only specific dimensions, a Tuple of Dimension wrapping Int or a NamedTuple of Int can be used. Other dimensions will have a chunk size of 1. true can be used to mean: use the original chunk size of the lazy Raster being written or X and Y of 256 by 256. false means don't use chunks at all.

  • ext: filename extension such as ".tiff" or ".nc". Used to specify specific files if only a directory path is used.

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file. For series with RasterStack child objects, this may be a NamedTuple, one for each layer.

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

  • vebose: whether to print messages about potential problems. true by default.

source

',7))]),i("details",Is,[i("summary",null,[s[177]||(s[177]=i("a",{id:"Base.write-Tuple{AbstractString, AbstractRasterStack}",href:"#Base.write-Tuple{AbstractString, AbstractRasterStack}"},[i("span",{class:"jlbinding"},"Base.write")],-1)),s[178]||(s[178]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[179]||(s[179]=t('
julia
Base.write(filename::AbstractString, s::AbstractRasterStack; kw...)

Write any AbstractRasterStack to one or multiple files, depending on the backend. Backend is guessed from the filename extension or forced with the source keyword.

If the source can't be saved as a stack-like object, individual array layers will be saved.

Keywords

  • chunks: a NTuple{N,Int} specifying the chunk size for each dimension. To specify only specific dimensions, a Tuple of Dimension wrapping Int or a NamedTuple of Int can be used. Other dimensions will have a chunk size of 1. true can be used to mean: use the original chunk size of the lazy Raster being written or X and Y of 256 by 256. false means don't use chunks at all.

  • ext: filename extension such as ".tiff" or ".nc". Used to specify specific files if only a directory path is used.

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file. For RasterStack this may be a NamedTuple, one for each layer.

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

  • vebose: whether to print messages about potential problems. true by default.

Other keyword arguments are passed to the write method for the backend.

NetCDF keywords

GDAL Keywords

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • driver: A GDAL driver name String or a GDAL driver retrieved via ArchGDAL.getdriver(drivername). By default driver is guessed from the filename extension.

  • options::Dict{String,String}: A dictionary containing the dataset creation options passed to the driver. For example: Dict("COMPRESS" => "DEFLATE").

Valid driver names and the options for each can be found at: https://gdal.org/drivers/raster/index.html

Source comments

R grd/grid files

Write a Raster to a .grd file with a .gri header file. Returns the base of filename with a .grd extension.

GDAL (tiff, and everything else)

Used if you write a Raster with a filename extension that no other backend can write. GDAL is the fallback, and writes a lot of file types, but is not guaranteed to work.

source

',17))]),i("details",Ns,[i("summary",null,[s[180]||(s[180]=i("a",{id:"Base.write-Tuple{AbstractString, AbstractRaster}",href:"#Base.write-Tuple{AbstractString, AbstractRaster}"},[i("span",{class:"jlbinding"},"Base.write")],-1)),s[181]||(s[181]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[182]||(s[182]=t('
julia
Base.write(filename::AbstractString, A::AbstractRaster; [source], kw...)

Write an AbstractRaster to file, guessing the backend from the file extension or using the source keyword.

Keywords

  • chunks: a NTuple{N,Int} specifying the chunk size for each dimension. To specify only specific dimensions, a Tuple of Dimension wrapping Int or a NamedTuple of Int can be used. Other dimensions will have a chunk size of 1. true can be used to mean: use the original chunk size of the lazy Raster being written or X and Y of 256 by 256. false means don't use chunks at all.

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • missingval: set the missing value (i.e. FillValue / nodataval) of the written raster, as Julia's missing cannot be stored. If not passed in, an appropriate missingval will be detected from the objects missingval, its metadata, or a default will be chosen base on the array element type(s).

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

Other keyword arguments are passed to the write method for the backend.

NetCDF keywords

GDAL Keywords

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • driver: A GDAL driver name String or a GDAL driver retrieved via ArchGDAL.getdriver(drivername). By default driver is guessed from the filename extension.

  • options::Dict{String,String}: A dictionary containing the dataset creation options passed to the driver. For example: Dict("COMPRESS" => "DEFLATE").

Valid driver names and the options for each can be found at: https://gdal.org/drivers/raster/index.html

Source comments

R grd/grid files

Write a Raster to a .grd file with a .gri header file. Returns the base of filename with a .grd extension.

GDAL (tiff, and everything else)

Used if you write a Raster with a filename extension that no other backend can write. GDAL is the fallback, and writes a lot of file types, but is not guaranteed to work.

Returns filename.

source

',17))]),i("details",Ps,[i("summary",null,[s[183]||(s[183]=i("a",{id:"Base.write-Tuple{String, Rasters.GRDsource, AbstractRaster}",href:"#Base.write-Tuple{String, Rasters.GRDsource, AbstractRaster}"},[i("span",{class:"jlbinding"},"Base.write")],-1)),s[184]||(s[184]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[185]||(s[185]=t('
julia
Base.write(filename::AbstractString, ::Type{GRDsource}, s::AbstractRaster; kw...)

Write a Raster to a .grd file with a .gri header file.

This method is called automatically if you write a Raster with a .grd or .gri extension.

Keywords

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

If this method is called directly the extension of filename will be ignored.

Returns the base of filename with a .grd extension.

source

',8))]),i("details",qs,[i("summary",null,[s[186]||(s[186]=i("a",{id:"Rasters.checkmem!-Tuple{Bool}",href:"#Rasters.checkmem!-Tuple{Bool}"},[i("span",{class:"jlbinding"},"Rasters.checkmem!")],-1)),s[187]||(s[187]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[188]||(s[188]=t('
julia
checkmem!(x::Bool)

Set checkmem to true or false.

In some architectures memory reporting may be wrong and you may wish to disable memory checks.

This setting can be overridden with the checkmem keyword, where applicable.

source

',5))]),i("details",Ls,[i("summary",null,[s[189]||(s[189]=i("a",{id:"Rasters.rplot-Tuple",href:"#Rasters.rplot-Tuple"},[i("span",{class:"jlbinding"},"Rasters.rplot")],-1)),s[190]||(s[190]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[191]||(s[191]=t('
julia
Rasters.rplot([position::GridPosition], raster; kw...)

raster may be a Raster (of 2 or 3 dimensions) or a RasterStack whose underlying rasters are 2 dimensional, or 3-dimensional with a singleton (length-1) third dimension.

Keywords

  • plottype = Makie.Heatmap: The type of plot. Can be any Makie plot type which accepts a Raster; in practice, Heatmap, Contour, Contourf and Surface are the best bets.

  • axistype = Makie.Axis: The type of axis. This can be an Axis, Axis3, LScene, or even a GeoAxis from GeoMakie.jl.

  • X = XDim: The X dimension of the raster.

  • Y = YDim: The Y dimension of the raster.

  • Z = YDim: The Y dimension of the raster.

  • draw_colorbar = true: Whether to draw a colorbar for the axis or not.

  • colorbar_position = Makie.Right(): Indicates which side of the axis the colorbar should be placed on. Can be Makie.Top(), Makie.Bottom(), Makie.Left(), or Makie.Right().

  • colorbar_padding = Makie.automatic: The amount of padding between the colorbar and its axis. If automatic, then this is set to the width of the colorbar.

  • title = Makie.automatic: The titles of each plot. If automatic, these are set to the name of the band.

  • xlabel = Makie.automatic: The x-label for the axis. If automatic, set to the dimension name of the X-dimension of the raster.

  • ylabel = Makie.automatic: The y-label for the axis. If automatic, set to the dimension name of the Y-dimension of the raster.

  • colorbarlabel = "": Usually nothing, but here if you need it. Sets the label on the colorbar.

  • colormap = nothing: The colormap for the heatmap. This can be set to a vector of colormaps (symbols, strings, cgrads) if plotting a 3D raster or RasterStack.

  • colorrange = Makie.automatic: The colormap for the heatmap. This can be set to a vector of (low, high) if plotting a 3D raster or RasterStack.

  • nan_color = :transparent: The color which NaN values should take. Default to transparent.

source

',5))]),i("details",zs,[i("summary",null,[s[192]||(s[192]=i("a",{id:"Rasters.sample-Tuple",href:"#Rasters.sample-Tuple"},[i("span",{class:"jlbinding"},"Rasters.sample")],-1)),s[193]||(s[193]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[194]||(s[194]=t(`

Rasters.sample([rng], x, [n::Integer]; kw...)

Sample n random and optionally weighted points from from a Raster or RasterStack. Returns a Vector of NamedTuple, closely resembling the return type of extract.

Run using StatsBase to make this method available. Note that this function is not exported to avoid confusion with StatsBase.sample

Keywords

  • geometry: include :geometry in returned NamedTuple. Specify the type and dimensions of the returned geometry by providing a Tuple or NamedTuple of dimensions. Defaults to (X,Y)

  • index: include :index of the CartesianIndex in returned NamedTuple, false by default.

  • name: a Symbol or Tuple of Symbol corresponding to layer/s of a RasterStack to extract. All layers by default.

  • skipmissing: skip missing points automatically.

  • weights: A DimArray that matches one or more of the dimensions of x with weights for sampling.

  • weightstype: a StatsBase.AbstractWeights specifying the type of weights. Defaults to StatsBase.Weights.

  • replace: sample with replacement, true by default. See StatsBase.sample

  • ordered: sample in order, false by default. See StatsBase.sample

Example

This code draws 5 random points from a raster, weighted by cell area.

julia
using Rasters, Rasters.Lookups, Proj, StatsBase
+read(A::AbstractRasterSeries)

read will move a Rasters.jl object completely to memory.

Keywords

  • checkmemory: if true (the default), check if there is enough memory for the operation. false will ignore memory needs.

source

`,5))]),i("details",xs,[i("summary",null,[s[171]||(s[171]=i("a",{id:"Base.skipmissing-Tuple{Raster}",href:"#Base.skipmissing-Tuple{Raster}"},[i("span",{class:"jlbinding"},"Base.skipmissing")],-1)),s[172]||(s[172]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[173]||(s[173]=t('
julia
skipmissing(itr::Raster)

Returns an iterable over the elements in a Raster object, skipping any values equal to either the missingval or missing.

source

',3))]),i("details",Ss,[i("summary",null,[s[174]||(s[174]=i("a",{id:"Base.write-Tuple{AbstractString, AbstractRasterSeries}",href:"#Base.write-Tuple{AbstractString, AbstractRasterSeries}"},[i("span",{class:"jlbinding"},"Base.write")],-1)),s[175]||(s[175]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[176]||(s[176]=t('
julia
Base.write(filepath::AbstractString, s::AbstractRasterSeries; kw...)

Write any AbstractRasterSeries to multiple files, guessing the backend from the file extension.

The lookup values of the series will be appended to the filepath (before the extension), separated by underscores.

All keywords are passed through to these Raster and RasterStack methods.

Keywords

  • chunks: a NTuple{N,Int} specifying the chunk size for each dimension. To specify only specific dimensions, a Tuple of Dimension wrapping Int or a NamedTuple of Int can be used. Other dimensions will have a chunk size of 1. true can be used to mean: use the original chunk size of the lazy Raster being written or X and Y of 256 by 256. false means don't use chunks at all.

  • ext: filename extension such as ".tiff" or ".nc". Used to specify specific files if only a directory path is used.

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file. For series with RasterStack child objects, this may be a NamedTuple, one for each layer.

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

  • vebose: whether to print messages about potential problems. true by default.

source

',7))]),i("details",Is,[i("summary",null,[s[177]||(s[177]=i("a",{id:"Base.write-Tuple{AbstractString, AbstractRasterStack}",href:"#Base.write-Tuple{AbstractString, AbstractRasterStack}"},[i("span",{class:"jlbinding"},"Base.write")],-1)),s[178]||(s[178]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[179]||(s[179]=t('
julia
Base.write(filename::AbstractString, s::AbstractRasterStack; kw...)

Write any AbstractRasterStack to one or multiple files, depending on the backend. Backend is guessed from the filename extension or forced with the source keyword.

If the source can't be saved as a stack-like object, individual array layers will be saved.

Keywords

  • chunks: a NTuple{N,Int} specifying the chunk size for each dimension. To specify only specific dimensions, a Tuple of Dimension wrapping Int or a NamedTuple of Int can be used. Other dimensions will have a chunk size of 1. true can be used to mean: use the original chunk size of the lazy Raster being written or X and Y of 256 by 256. false means don't use chunks at all.

  • ext: filename extension such as ".tiff" or ".nc". Used to specify specific files if only a directory path is used.

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • missingval: value representing missing data, normally detected from the file and automatically converted to missing. Setting to an alternate value, such as 0 or NaN may be desirable for improved perfomance. nothing specifies no missing value. Using the same missingval the file already has removes the overhead of replacing it, this can be done by passing the missingval function as missingval. If the file has an incorrect value, we can manually define the transformation as a pair like correct_value => missing or correct_value => NaN. correct_value => correct_value will keep remove the overhead of changing it. Note: When raw=true is set, missingval is not changed from the value specified in the file. For RasterStack this may be a NamedTuple, one for each layer.

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

  • suffix: a string or value to append to the filename. A tuple of suffix will be applied to stack layers. keys(stack) are the default.

  • vebose: whether to print messages about potential problems. true by default.

Other keyword arguments are passed to the write method for the backend.

NetCDF keywords

GDAL Keywords

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • driver: A GDAL driver name String or a GDAL driver retrieved via ArchGDAL.getdriver(drivername). By default driver is guessed from the filename extension.

  • options::Dict{String,String}: A dictionary containing the dataset creation options passed to the driver. For example: Dict("COMPRESS" => "DEFLATE").

Valid driver names and the options for each can be found at: https://gdal.org/drivers/raster/index.html

Source comments

R grd/grid files

Write a Raster to a .grd file with a .gri header file. Returns the base of filename with a .grd extension.

GDAL (tiff, and everything else)

Used if you write a Raster with a filename extension that no other backend can write. GDAL is the fallback, and writes a lot of file types, but is not guaranteed to work.

source

',17))]),i("details",Ns,[i("summary",null,[s[180]||(s[180]=i("a",{id:"Base.write-Tuple{AbstractString, AbstractRaster}",href:"#Base.write-Tuple{AbstractString, AbstractRaster}"},[i("span",{class:"jlbinding"},"Base.write")],-1)),s[181]||(s[181]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[182]||(s[182]=t('
julia
Base.write(filename::AbstractString, A::AbstractRaster; [source], kw...)

Write an AbstractRaster to file, guessing the backend from the file extension or using the source keyword.

Keywords

  • chunks: a NTuple{N,Int} specifying the chunk size for each dimension. To specify only specific dimensions, a Tuple of Dimension wrapping Int or a NamedTuple of Int can be used. Other dimensions will have a chunk size of 1. true can be used to mean: use the original chunk size of the lazy Raster being written or X and Y of 256 by 256. false means don't use chunks at all.

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • missingval: set the missing value (i.e. FillValue / nodataval) of the written raster, as Julia's missing cannot be stored. If not passed in, an appropriate missingval will be detected from the objects missingval, its metadata, or a default will be chosen base on the array element type(s).

  • source: Usually automatically detected from filepath extension. To manually force, a Symbol can be passed :gdal, :netcdf, :grd, :grib. The internal Rasters.Source objects, such as Rasters.GDALsource(), Rasters.GRIBsource() or Rasters.NCDsource() can also be used.

Other keyword arguments are passed to the write method for the backend.

NetCDF keywords

GDAL Keywords

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

  • driver: A GDAL driver name String or a GDAL driver retrieved via ArchGDAL.getdriver(drivername). By default driver is guessed from the filename extension.

  • options::Dict{String,String}: A dictionary containing the dataset creation options passed to the driver. For example: Dict("COMPRESS" => "DEFLATE").

Valid driver names and the options for each can be found at: https://gdal.org/drivers/raster/index.html

Source comments

R grd/grid files

Write a Raster to a .grd file with a .gri header file. Returns the base of filename with a .grd extension.

GDAL (tiff, and everything else)

Used if you write a Raster with a filename extension that no other backend can write. GDAL is the fallback, and writes a lot of file types, but is not guaranteed to work.

Returns filename.

source

',17))]),i("details",Ps,[i("summary",null,[s[183]||(s[183]=i("a",{id:"Base.write-Tuple{String, Rasters.GRDsource, AbstractRaster}",href:"#Base.write-Tuple{String, Rasters.GRDsource, AbstractRaster}"},[i("span",{class:"jlbinding"},"Base.write")],-1)),s[184]||(s[184]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[185]||(s[185]=t('
julia
Base.write(filename::AbstractString, ::Type{GRDsource}, s::AbstractRaster; kw...)

Write a Raster to a .grd file with a .gri header file.

This method is called automatically if you write a Raster with a .grd or .gri extension.

Keywords

  • force: false by default. If true it force writing to a file destructively, even if it already exists.

If this method is called directly the extension of filename will be ignored.

Returns the base of filename with a .grd extension.

source

',8))]),i("details",qs,[i("summary",null,[s[186]||(s[186]=i("a",{id:"Rasters.checkmem!-Tuple{Bool}",href:"#Rasters.checkmem!-Tuple{Bool}"},[i("span",{class:"jlbinding"},"Rasters.checkmem!")],-1)),s[187]||(s[187]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[188]||(s[188]=t('
julia
checkmem!(x::Bool)

Set checkmem to true or false.

In some architectures memory reporting may be wrong and you may wish to disable memory checks.

This setting can be overridden with the checkmem keyword, where applicable.

source

',5))]),i("details",Ls,[i("summary",null,[s[189]||(s[189]=i("a",{id:"Rasters.rplot-Tuple",href:"#Rasters.rplot-Tuple"},[i("span",{class:"jlbinding"},"Rasters.rplot")],-1)),s[190]||(s[190]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[191]||(s[191]=t('
julia
Rasters.rplot([position::GridPosition], raster; kw...)

raster may be a Raster (of 2 or 3 dimensions) or a RasterStack whose underlying rasters are 2 dimensional, or 3-dimensional with a singleton (length-1) third dimension.

Keywords

  • plottype = Makie.Heatmap: The type of plot. Can be any Makie plot type which accepts a Raster; in practice, Heatmap, Contour, Contourf and Surface are the best bets.

  • axistype = Makie.Axis: The type of axis. This can be an Axis, Axis3, LScene, or even a GeoAxis from GeoMakie.jl.

  • X = XDim: The X dimension of the raster.

  • Y = YDim: The Y dimension of the raster.

  • Z = YDim: The Y dimension of the raster.

  • draw_colorbar = true: Whether to draw a colorbar for the axis or not.

  • colorbar_position = Makie.Right(): Indicates which side of the axis the colorbar should be placed on. Can be Makie.Top(), Makie.Bottom(), Makie.Left(), or Makie.Right().

  • colorbar_padding = Makie.automatic: The amount of padding between the colorbar and its axis. If automatic, then this is set to the width of the colorbar.

  • title = Makie.automatic: The titles of each plot. If automatic, these are set to the name of the band.

  • xlabel = Makie.automatic: The x-label for the axis. If automatic, set to the dimension name of the X-dimension of the raster.

  • ylabel = Makie.automatic: The y-label for the axis. If automatic, set to the dimension name of the Y-dimension of the raster.

  • colorbarlabel = "": Usually nothing, but here if you need it. Sets the label on the colorbar.

  • colormap = nothing: The colormap for the heatmap. This can be set to a vector of colormaps (symbols, strings, cgrads) if plotting a 3D raster or RasterStack.

  • colorrange = Makie.automatic: The colormap for the heatmap. This can be set to a vector of (low, high) if plotting a 3D raster or RasterStack.

  • nan_color = :transparent: The color which NaN values should take. Default to transparent.

source

',5))]),i("details",zs,[i("summary",null,[s[192]||(s[192]=i("a",{id:"Rasters.sample-Tuple",href:"#Rasters.sample-Tuple"},[i("span",{class:"jlbinding"},"Rasters.sample")],-1)),s[193]||(s[193]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[194]||(s[194]=t(`

Rasters.sample([rng], x, [n::Integer]; kw...)

Sample n random and optionally weighted points from from a Raster or RasterStack. Returns a Vector of NamedTuple, closely resembling the return type of extract.

Run using StatsBase to make this method available. Note that this function is not exported to avoid confusion with StatsBase.sample

Keywords

  • geometry: include :geometry in returned NamedTuple. Specify the type and dimensions of the returned geometry by providing a Tuple or NamedTuple of dimensions. Defaults to (X,Y)

  • index: include :index of the CartesianIndex in returned NamedTuple, false by default.

  • name: a Symbol or Tuple of Symbol corresponding to layer/s of a RasterStack to extract. All layers by default.

  • skipmissing: skip missing points automatically.

  • weights: A DimArray that matches one or more of the dimensions of x with weights for sampling.

  • weightstype: a StatsBase.AbstractWeights specifying the type of weights. Defaults to StatsBase.Weights.

  • replace: sample with replacement, true by default. See StatsBase.sample

  • ordered: sample in order, false by default. See StatsBase.sample

Example

This code draws 5 random points from a raster, weighted by cell area.

julia
using Rasters, Rasters.Lookups, Proj, StatsBase
 xdim = X(Projected(90.0:10.0:120; sampling=Intervals(Start()), crs=EPSG(4326)))
 ydim = Y(Projected(0.0:10.0:50; sampling=Intervals(Start()), crs=EPSG(4326)))
 myraster = rand(xdim, ydim)
@@ -388,4 +388,4 @@ import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/fr
  @NamedTuple{geometry::Tuple{Float64, Float64}, ::Union{Missing, Float64}}(((90.0, 30.0), 0.5447657183842469))
  @NamedTuple{geometry::Tuple{Float64, Float64}, ::Union{Missing, Float64}}(((90.0, 30.0), 0.5447657183842469))
  @NamedTuple{geometry::Tuple{Float64, Float64}, ::Union{Missing, Float64}}(((90.0, 10.0), 0.7360504790189618))
- @NamedTuple{geometry::Tuple{Float64, Float64}, ::Union{Missing, Float64}}(((110.0, 10.0), 0.5291143028176258))

source

`,9))])])}const Xs=l(j,[["render",Vs]]);export{Ys as __pageData,Xs as default}; + @NamedTuple{geometry::Tuple{Float64, Float64}, ::Union{Missing, Float64}}(((110.0, 10.0), 0.5291143028176258))

source

`,9))])])}const Xs=l(j,[["render",Vs]]);export{Ys as __pageData,Xs as default}; diff --git a/dev/assets/api.md.BNfv_PPm.lean.js b/dev/assets/api.md.B98S4G2z.lean.js similarity index 96% rename from dev/assets/api.md.BNfv_PPm.lean.js rename to dev/assets/api.md.B98S4G2z.lean.js index 49d2a28f..cae295f5 100644 --- a/dev/assets/api.md.BNfv_PPm.lean.js +++ b/dev/assets/api.md.B98S4G2z.lean.js @@ -1 +1 @@ -import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/framework.CS7uZ9fp.js";const h="/Rasters.jl/dev/assets/aggregate_example.vPDkaGne.png",d="/Rasters.jl/dev/assets/boolmask_example.B6nOyO_A.png",k="/Rasters.jl/dev/assets/classify_example.D0ZS4s3g.png",c="/Rasters.jl/dev/assets/classify_bang_example.Ch0DZvbI.png",g="/Rasters.jl/dev/assets/nz_crop_example.Dgn6MbZF.png",E="/Rasters.jl/dev/assets/argentina_crop_example.DlKBBk5m.png",y="/Rasters.jl/dev/assets/extend_example.DNJ4wwKN.png",u="/Rasters.jl/dev/assets/boolmask_example.B6nOyO_A.png",m="/Rasters.jl/dev/assets/mosaic_bang_example.Cvk5RuyI.png",b="/Rasters.jl/dev/assets/mosaic_example_combined.YolyGcS6.png",f="/Rasters.jl/dev/assets/china_rasterized.kM95Jnlf.png",F="/Rasters.jl/dev/assets/indonesia_rasterized.CAASrLmh.png",C="/Rasters.jl/dev/assets/warp_example_before.DrW8As6m.png",A="/Rasters.jl/dev/assets/resample_example_after.C_gavhhT.png",v="/Rasters.jl/dev/assets/trim_example_before.CicUDTMv.png",R="/Rasters.jl/dev/assets/trim_example_after.DqVtyr0a.png",D="/Rasters.jl/dev/assets/warp_example_before.DrW8As6m.png",B="/Rasters.jl/dev/assets/warp_example_after.rgHHAHxc.png",Ys=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),j={name:"api.md"},w={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},_={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},S={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},N={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},L={class:"jldocstring custom-block",open:""},z={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},G={class:"jldocstring custom-block",open:""},M={class:"jldocstring custom-block",open:""},O={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},W={class:"jldocstring custom-block",open:""},K={class:"jldocstring custom-block",open:""},Y={class:"jldocstring custom-block",open:""},X={class:"jldocstring custom-block",open:""},H={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},$={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},ss={class:"jldocstring custom-block",open:""},is={class:"jldocstring custom-block",open:""},es={class:"jldocstring custom-block",open:""},as={class:"jldocstring custom-block",open:""},ts={class:"jldocstring custom-block",open:""},ns={class:"jldocstring custom-block",open:""},ls={class:"jldocstring custom-block",open:""},os={class:"jldocstring custom-block",open:""},ps={class:"jldocstring custom-block",open:""},rs={class:"jldocstring custom-block",open:""},hs={class:"jldocstring custom-block",open:""},ds={class:"jldocstring custom-block",open:""},ks={class:"jldocstring custom-block",open:""},cs={class:"jldocstring custom-block",open:""},gs={class:"jldocstring custom-block",open:""},Es={class:"jldocstring custom-block",open:""},ys={class:"jldocstring custom-block",open:""},us={class:"jldocstring custom-block",open:""},ms={class:"jldocstring custom-block",open:""},bs={class:"jldocstring custom-block",open:""},fs={class:"jldocstring custom-block",open:""},Fs={class:"jldocstring custom-block",open:""},Cs={class:"jldocstring custom-block",open:""},As={class:"jldocstring custom-block",open:""},vs={class:"jldocstring custom-block",open:""},Rs={class:"jldocstring custom-block",open:""},Ds={class:"jldocstring custom-block",open:""},Bs={class:"jldocstring custom-block",open:""},js={class:"jldocstring custom-block",open:""},ws={class:"jldocstring custom-block",open:""},Ts={class:"jldocstring custom-block",open:""},_s={class:"jldocstring custom-block",open:""},xs={class:"jldocstring custom-block",open:""},Ss={class:"jldocstring custom-block",open:""},Is={class:"jldocstring custom-block",open:""},Ns={class:"jldocstring custom-block",open:""},Ps={class:"jldocstring custom-block",open:""},qs={class:"jldocstring custom-block",open:""},Ls={class:"jldocstring custom-block",open:""},zs={class:"jldocstring custom-block",open:""};function Vs(Gs,s,Ms,Os,Us,Ws){const a=p("Badge");return r(),o("div",null,[s[195]||(s[195]=t("",3)),i("details",w,[i("summary",null,[s[0]||(s[0]=i("a",{id:"Rasters.Rasters",href:"#Rasters.Rasters"},[i("span",{class:"jlbinding"},"Rasters.Rasters")],-1)),s[1]||(s[1]=e()),n(a,{type:"info",class:"jlObjectType jlModule",text:"Module"})]),s[2]||(s[2]=i("p",null,[i("a",{href:"https://github.com/rafaqz/Rasters.jl/blob/b55b28f0cdd2a7296eeb0f85f64cc0ed9b2d79b7/src/Rasters.jl#L4",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",T,[i("summary",null,[s[3]||(s[3]=i("a",{id:"Rasters.AbstractRaster",href:"#Rasters.AbstractRaster"},[i("span",{class:"jlbinding"},"Rasters.AbstractRaster")],-1)),s[4]||(s[4]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[5]||(s[5]=t("",4))]),i("details",_,[i("summary",null,[s[6]||(s[6]=i("a",{id:"Rasters.AbstractRasterSeries",href:"#Rasters.AbstractRasterSeries"},[i("span",{class:"jlbinding"},"Rasters.AbstractRasterSeries")],-1)),s[7]||(s[7]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[8]||(s[8]=t("",7))]),i("details",x,[i("summary",null,[s[9]||(s[9]=i("a",{id:"Rasters.AbstractRasterStack",href:"#Rasters.AbstractRasterStack"},[i("span",{class:"jlbinding"},"Rasters.AbstractRasterStack")],-1)),s[10]||(s[10]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[11]||(s[11]=t("",7))]),i("details",S,[i("summary",null,[s[12]||(s[12]=i("a",{id:"Rasters.Band",href:"#Rasters.Band"},[i("span",{class:"jlbinding"},"Rasters.Band")],-1)),s[13]||(s[13]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[14]||(s[14]=t("",5))]),i("details",I,[i("summary",null,[s[15]||(s[15]=i("a",{id:"Rasters.Mapped",href:"#Rasters.Mapped"},[i("span",{class:"jlbinding"},"Rasters.Mapped")],-1)),s[16]||(s[16]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[17]||(s[17]=t("",5))]),i("details",N,[i("summary",null,[s[18]||(s[18]=i("a",{id:"Rasters.Projected",href:"#Rasters.Projected"},[i("span",{class:"jlbinding"},"Rasters.Projected")],-1)),s[19]||(s[19]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[20]||(s[20]=t("",8))]),i("details",P,[i("summary",null,[s[21]||(s[21]=i("a",{id:"Rasters.Raster",href:"#Rasters.Raster"},[i("span",{class:"jlbinding"},"Rasters.Raster")],-1)),s[22]||(s[22]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[23]||(s[23]=t("",12))]),i("details",q,[i("summary",null,[s[24]||(s[24]=i("a",{id:"Rasters.RasterSeries",href:"#Rasters.RasterSeries"},[i("span",{class:"jlbinding"},"Rasters.RasterSeries")],-1)),s[25]||(s[25]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[26]||(s[26]=t("",22))]),i("details",L,[i("summary",null,[s[27]||(s[27]=i("a",{id:"Rasters.RasterStack",href:"#Rasters.RasterStack"},[i("span",{class:"jlbinding"},"Rasters.RasterStack")],-1)),s[28]||(s[28]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[29]||(s[29]=t("",12))]),i("details",z,[i("summary",null,[s[30]||(s[30]=i("a",{id:"DimensionalData.modify-Tuple{Any, AbstractRasterSeries}",href:"#DimensionalData.modify-Tuple{Any, AbstractRasterSeries}"},[i("span",{class:"jlbinding"},"DimensionalData.modify")],-1)),s[31]||(s[31]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[32]||(s[32]=t("",6))]),i("details",V,[i("summary",null,[s[33]||(s[33]=i("a",{id:"GeoInterface.crs-Tuple{Union{Tuple{Dimension, Vararg{Dimension}}, AbstractRaster, AbstractRasterSeries, AbstractRasterStack}}",href:"#GeoInterface.crs-Tuple{Union{Tuple{Dimension, Vararg{Dimension}}, AbstractRaster, AbstractRasterSeries, AbstractRasterStack}}"},[i("span",{class:"jlbinding"},"GeoInterface.crs")],-1)),s[34]||(s[34]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[35]||(s[35]=t("",4))]),i("details",G,[i("summary",null,[s[36]||(s[36]=i("a",{id:"Rasters.aggregate",href:"#Rasters.aggregate"},[i("span",{class:"jlbinding"},"Rasters.aggregate")],-1)),s[37]||(s[37]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[38]||(s[38]=t("",12))]),i("details",M,[i("summary",null,[s[39]||(s[39]=i("a",{id:"Rasters.aggregate!-Tuple{Locus, AbstractRaster, Any, Any}",href:"#Rasters.aggregate!-Tuple{Locus, AbstractRaster, Any, Any}"},[i("span",{class:"jlbinding"},"Rasters.aggregate!")],-1)),s[40]||(s[40]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[41]||(s[41]=t("",9))]),i("details",O,[i("summary",null,[s[42]||(s[42]=i("a",{id:"Rasters.boolmask",href:"#Rasters.boolmask"},[i("span",{class:"jlbinding"},"Rasters.boolmask")],-1)),s[43]||(s[43]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[44]||(s[44]=t("",16))]),i("details",U,[i("summary",null,[s[45]||(s[45]=i("a",{id:"Rasters.cellarea-Tuple{Any}",href:"#Rasters.cellarea-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.cellarea")],-1)),s[46]||(s[46]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[47]||(s[47]=t("",9))]),i("details",W,[i("summary",null,[s[48]||(s[48]=i("a",{id:"Rasters.classify",href:"#Rasters.classify"},[i("span",{class:"jlbinding"},"Rasters.classify")],-1)),s[49]||(s[49]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[50]||(s[50]=t("",14))]),i("details",K,[i("summary",null,[s[51]||(s[51]=i("a",{id:"Rasters.classify!-Tuple{AbstractRaster, Pair, Vararg{Pair}}",href:"#Rasters.classify!-Tuple{AbstractRaster, Pair, Vararg{Pair}}"},[i("span",{class:"jlbinding"},"Rasters.classify!")],-1)),s[52]||(s[52]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[53]||(s[53]=t("",15))]),i("details",Y,[i("summary",null,[s[54]||(s[54]=i("a",{id:"Rasters.combine-Tuple{AbstractRasterSeries}",href:"#Rasters.combine-Tuple{AbstractRasterSeries}"},[i("span",{class:"jlbinding"},"Rasters.combine")],-1)),s[55]||(s[55]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[56]||(s[56]=t("",6))]),i("details",X,[i("summary",null,[s[57]||(s[57]=i("a",{id:"Rasters.convertlookup-Tuple{Type{<:Lookup}, AbstractDimArray}",href:"#Rasters.convertlookup-Tuple{Type{<:Lookup}, AbstractDimArray}"},[i("span",{class:"jlbinding"},"Rasters.convertlookup")],-1)),s[58]||(s[58]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[59]||(s[59]=t("",4))]),i("details",H,[i("summary",null,[s[60]||(s[60]=i("a",{id:"Rasters.coverage!-Tuple{Union{typeof(sum), typeof(union)}, AbstractRaster, Any}",href:"#Rasters.coverage!-Tuple{Union{typeof(sum), typeof(union)}, AbstractRaster, Any}"},[i("span",{class:"jlbinding"},"Rasters.coverage!")],-1)),s[61]||(s[61]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[62]||(s[62]=t("",8))]),i("details",J,[i("summary",null,[s[63]||(s[63]=i("a",{id:"Rasters.coverage-Tuple{Any}",href:"#Rasters.coverage-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.coverage")],-1)),s[64]||(s[64]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[65]||(s[65]=t("",8))]),i("details",Z,[i("summary",null,[s[66]||(s[66]=i("a",{id:"Rasters.crop",href:"#Rasters.crop"},[i("span",{class:"jlbinding"},"Rasters.crop")],-1)),s[67]||(s[67]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[68]||(s[68]=t("",15))]),i("details",$,[i("summary",null,[s[69]||(s[69]=i("a",{id:"Rasters.disaggregate",href:"#Rasters.disaggregate"},[i("span",{class:"jlbinding"},"Rasters.disaggregate")],-1)),s[70]||(s[70]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[71]||(s[71]=t("",8))]),i("details",Q,[i("summary",null,[s[72]||(s[72]=i("a",{id:"Rasters.disaggregate!-Tuple{AbstractRaster, Any, Any}",href:"#Rasters.disaggregate!-Tuple{AbstractRaster, Any, Any}"},[i("span",{class:"jlbinding"},"Rasters.disaggregate!")],-1)),s[73]||(s[73]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[74]||(s[74]=t("",4))]),i("details",ss,[i("summary",null,[s[75]||(s[75]=i("a",{id:"Rasters.extend",href:"#Rasters.extend"},[i("span",{class:"jlbinding"},"Rasters.extend")],-1)),s[76]||(s[76]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[77]||(s[77]=t("",8))]),i("details",is,[i("summary",null,[s[78]||(s[78]=i("a",{id:"Rasters.extract",href:"#Rasters.extract"},[i("span",{class:"jlbinding"},"Rasters.extract")],-1)),s[79]||(s[79]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[80]||(s[80]=t("",14))]),i("details",es,[i("summary",null,[s[81]||(s[81]=i("a",{id:"Rasters.mappedbounds",href:"#Rasters.mappedbounds"},[i("span",{class:"jlbinding"},"Rasters.mappedbounds")],-1)),s[82]||(s[82]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[83]||(s[83]=t("",4))]),i("details",as,[i("summary",null,[s[84]||(s[84]=i("a",{id:"Rasters.mappedcrs",href:"#Rasters.mappedcrs"},[i("span",{class:"jlbinding"},"Rasters.mappedcrs")],-1)),s[85]||(s[85]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[86]||(s[86]=t("",5))]),i("details",ts,[i("summary",null,[s[87]||(s[87]=i("a",{id:"Rasters.mappedindex",href:"#Rasters.mappedindex"},[i("span",{class:"jlbinding"},"Rasters.mappedindex")],-1)),s[88]||(s[88]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[89]||(s[89]=t("",4))]),i("details",ns,[i("summary",null,[s[90]||(s[90]=i("a",{id:"Rasters.mask!",href:"#Rasters.mask!"},[i("span",{class:"jlbinding"},"Rasters.mask!")],-1)),s[91]||(s[91]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[92]||(s[92]=t("",15))]),i("details",ls,[i("summary",null,[s[93]||(s[93]=i("a",{id:"Rasters.mask-Tuple{Any}",href:"#Rasters.mask-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.mask")],-1)),s[94]||(s[94]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[95]||(s[95]=t("",16))]),i("details",os,[i("summary",null,[s[96]||(s[96]=i("a",{id:"Rasters.missingmask-Tuple{Any}",href:"#Rasters.missingmask-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.missingmask")],-1)),s[97]||(s[97]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[98]||(s[98]=t("",13))]),i("details",ps,[i("summary",null,[s[99]||(s[99]=i("a",{id:"Rasters.missingval",href:"#Rasters.missingval"},[i("span",{class:"jlbinding"},"Rasters.missingval")],-1)),s[100]||(s[100]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[101]||(s[101]=t("",3))]),i("details",rs,[i("summary",null,[s[102]||(s[102]=i("a",{id:"Rasters.mosaic!-Tuple{Function, Union{AbstractRaster, AbstractRasterStack}, Vararg{Union{AbstractRaster, AbstractRasterStack}}}",href:"#Rasters.mosaic!-Tuple{Function, Union{AbstractRaster, AbstractRasterStack}, Vararg{Union{AbstractRaster, AbstractRasterStack}}}"},[i("span",{class:"jlbinding"},"Rasters.mosaic!")],-1)),s[103]||(s[103]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[104]||(s[104]=t("",12))]),i("details",hs,[i("summary",null,[s[105]||(s[105]=i("a",{id:"Rasters.mosaic-Tuple{Function, Union{AbstractRaster, AbstractRasterStack}, Vararg{Union{AbstractRaster, AbstractRasterStack}}}",href:"#Rasters.mosaic-Tuple{Function, Union{AbstractRaster, AbstractRasterStack}, Vararg{Union{AbstractRaster, AbstractRasterStack}}}"},[i("span",{class:"jlbinding"},"Rasters.mosaic")],-1)),s[106]||(s[106]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[107]||(s[107]=t("",14))]),i("details",ds,[i("summary",null,[s[108]||(s[108]=i("a",{id:"Rasters.points-Tuple{AbstractRaster}",href:"#Rasters.points-Tuple{AbstractRaster}"},[i("span",{class:"jlbinding"},"Rasters.points")],-1)),s[109]||(s[109]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[110]||(s[110]=t("",7))]),i("details",ks,[i("summary",null,[s[111]||(s[111]=i("a",{id:"Rasters.rasterize",href:"#Rasters.rasterize"},[i("span",{class:"jlbinding"},"Rasters.rasterize")],-1)),s[112]||(s[112]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[113]||(s[113]=t("",14))]),i("details",cs,[i("summary",null,[s[114]||(s[114]=i("a",{id:"Rasters.rasterize!",href:"#Rasters.rasterize!"},[i("span",{class:"jlbinding"},"Rasters.rasterize!")],-1)),s[115]||(s[115]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[116]||(s[116]=t("",12))]),i("details",gs,[i("summary",null,[s[117]||(s[117]=i("a",{id:"Rasters.replace_missing-Tuple{Any}",href:"#Rasters.replace_missing-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.replace_missing")],-1)),s[118]||(s[118]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[119]||(s[119]=t("",7))]),i("details",Es,[i("summary",null,[s[120]||(s[120]=i("a",{id:"Rasters.reproject-NTuple{4, Any}",href:"#Rasters.reproject-NTuple{4, Any}"},[i("span",{class:"jlbinding"},"Rasters.reproject")],-1)),s[121]||(s[121]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[122]||(s[122]=t("",3))]),i("details",ys,[i("summary",null,[s[123]||(s[123]=i("a",{id:"Rasters.reproject-Tuple{Any}",href:"#Rasters.reproject-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.reproject")],-1)),s[124]||(s[124]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[125]||(s[125]=t("",8))]),i("details",us,[i("summary",null,[s[126]||(s[126]=i("a",{id:"Rasters.resample-Tuple",href:"#Rasters.resample-Tuple"},[i("span",{class:"jlbinding"},"Rasters.resample")],-1)),s[127]||(s[127]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[128]||(s[128]=t("",20))]),i("details",ms,[i("summary",null,[s[129]||(s[129]=i("a",{id:"Rasters.setcrs-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}",href:"#Rasters.setcrs-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}"},[i("span",{class:"jlbinding"},"Rasters.setcrs")],-1)),s[130]||(s[130]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[131]||(s[131]=t("",3))]),i("details",bs,[i("summary",null,[s[132]||(s[132]=i("a",{id:"Rasters.setmappedcrs-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}",href:"#Rasters.setmappedcrs-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}"},[i("span",{class:"jlbinding"},"Rasters.setmappedcrs")],-1)),s[133]||(s[133]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[134]||(s[134]=t("",3))]),i("details",fs,[i("summary",null,[s[135]||(s[135]=i("a",{id:"Rasters.slice-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}",href:"#Rasters.slice-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}"},[i("span",{class:"jlbinding"},"Rasters.slice")],-1)),s[136]||(s[136]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[137]||(s[137]=t("",6))]),i("details",Fs,[i("summary",null,[s[138]||(s[138]=i("a",{id:"Rasters.trim-Tuple{Union{AbstractRaster, AbstractRasterStack}}",href:"#Rasters.trim-Tuple{Union{AbstractRaster, AbstractRasterStack}}"},[i("span",{class:"jlbinding"},"Rasters.trim")],-1)),s[139]||(s[139]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[140]||(s[140]=t("",16))]),i("details",Cs,[i("summary",null,[s[141]||(s[141]=i("a",{id:"Rasters.warp-Tuple",href:"#Rasters.warp-Tuple"},[i("span",{class:"jlbinding"},"Rasters.warp")],-1)),s[142]||(s[142]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[143]||(s[143]=t("",18))]),i("details",As,[i("summary",null,[s[144]||(s[144]=i("a",{id:"Rasters.zonal-Tuple{Any, Union{AbstractRaster, AbstractRasterStack}}",href:"#Rasters.zonal-Tuple{Any, Union{AbstractRaster, AbstractRasterStack}}"},[i("span",{class:"jlbinding"},"Rasters.zonal")],-1)),s[145]||(s[145]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[146]||(s[146]=t("",11))]),s[196]||(s[196]=i("h2",{id:"Reference-Internal-functions",tabindex:"-1"},[e("Reference - Internal functions "),i("a",{class:"header-anchor",href:"#Reference-Internal-functions","aria-label":'Permalink to "Reference - Internal functions {#Reference-Internal-functions}"'},"​")],-1)),i("details",vs,[i("summary",null,[s[147]||(s[147]=i("a",{id:"Rasters.AbstractProjected",href:"#Rasters.AbstractProjected"},[i("span",{class:"jlbinding"},"Rasters.AbstractProjected")],-1)),s[148]||(s[148]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[149]||(s[149]=t("",3))]),i("details",Rs,[i("summary",null,[s[150]||(s[150]=i("a",{id:"Rasters.FileArray",href:"#Rasters.FileArray"},[i("span",{class:"jlbinding"},"Rasters.FileArray")],-1)),s[151]||(s[151]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[152]||(s[152]=t("",3))]),i("details",Ds,[i("summary",null,[s[153]||(s[153]=i("a",{id:"Rasters.FileStack",href:"#Rasters.FileStack"},[i("span",{class:"jlbinding"},"Rasters.FileStack")],-1)),s[154]||(s[154]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[155]||(s[155]=t("",4))]),i("details",Bs,[i("summary",null,[s[156]||(s[156]=i("a",{id:"Rasters.OpenStack",href:"#Rasters.OpenStack"},[i("span",{class:"jlbinding"},"Rasters.OpenStack")],-1)),s[157]||(s[157]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[158]||(s[158]=t("",5))]),i("details",js,[i("summary",null,[s[159]||(s[159]=i("a",{id:"Rasters.RasterDiskArray",href:"#Rasters.RasterDiskArray"},[i("span",{class:"jlbinding"},"Rasters.RasterDiskArray")],-1)),s[160]||(s[160]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[161]||(s[161]=t("",3))]),i("details",ws,[i("summary",null,[s[162]||(s[162]=i("a",{id:"Base.open-Tuple{Function, AbstractRaster}",href:"#Base.open-Tuple{Function, AbstractRaster}"},[i("span",{class:"jlbinding"},"Base.open")],-1)),s[163]||(s[163]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[164]||(s[164]=t("",7))]),i("details",Ts,[i("summary",null,[s[165]||(s[165]=i("a",{id:"Base.read!-Tuple{AbstractRaster, AbstractArray}",href:"#Base.read!-Tuple{AbstractRaster, AbstractArray}"},[i("span",{class:"jlbinding"},"Base.read!")],-1)),s[166]||(s[166]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[167]||(s[167]=t("",4))]),i("details",_s,[i("summary",null,[s[168]||(s[168]=i("a",{id:"Base.read-Tuple{Union{AbstractRaster, AbstractRasterSeries, AbstractRasterStack}}",href:"#Base.read-Tuple{Union{AbstractRaster, AbstractRasterSeries, AbstractRasterStack}}"},[i("span",{class:"jlbinding"},"Base.read")],-1)),s[169]||(s[169]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[170]||(s[170]=t("",5))]),i("details",xs,[i("summary",null,[s[171]||(s[171]=i("a",{id:"Base.skipmissing-Tuple{Raster}",href:"#Base.skipmissing-Tuple{Raster}"},[i("span",{class:"jlbinding"},"Base.skipmissing")],-1)),s[172]||(s[172]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[173]||(s[173]=t("",3))]),i("details",Ss,[i("summary",null,[s[174]||(s[174]=i("a",{id:"Base.write-Tuple{AbstractString, AbstractRasterSeries}",href:"#Base.write-Tuple{AbstractString, AbstractRasterSeries}"},[i("span",{class:"jlbinding"},"Base.write")],-1)),s[175]||(s[175]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[176]||(s[176]=t("",7))]),i("details",Is,[i("summary",null,[s[177]||(s[177]=i("a",{id:"Base.write-Tuple{AbstractString, AbstractRasterStack}",href:"#Base.write-Tuple{AbstractString, AbstractRasterStack}"},[i("span",{class:"jlbinding"},"Base.write")],-1)),s[178]||(s[178]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[179]||(s[179]=t("",17))]),i("details",Ns,[i("summary",null,[s[180]||(s[180]=i("a",{id:"Base.write-Tuple{AbstractString, AbstractRaster}",href:"#Base.write-Tuple{AbstractString, AbstractRaster}"},[i("span",{class:"jlbinding"},"Base.write")],-1)),s[181]||(s[181]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[182]||(s[182]=t("",17))]),i("details",Ps,[i("summary",null,[s[183]||(s[183]=i("a",{id:"Base.write-Tuple{String, Rasters.GRDsource, AbstractRaster}",href:"#Base.write-Tuple{String, Rasters.GRDsource, AbstractRaster}"},[i("span",{class:"jlbinding"},"Base.write")],-1)),s[184]||(s[184]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[185]||(s[185]=t("",8))]),i("details",qs,[i("summary",null,[s[186]||(s[186]=i("a",{id:"Rasters.checkmem!-Tuple{Bool}",href:"#Rasters.checkmem!-Tuple{Bool}"},[i("span",{class:"jlbinding"},"Rasters.checkmem!")],-1)),s[187]||(s[187]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[188]||(s[188]=t("",5))]),i("details",Ls,[i("summary",null,[s[189]||(s[189]=i("a",{id:"Rasters.rplot-Tuple",href:"#Rasters.rplot-Tuple"},[i("span",{class:"jlbinding"},"Rasters.rplot")],-1)),s[190]||(s[190]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[191]||(s[191]=t("",5))]),i("details",zs,[i("summary",null,[s[192]||(s[192]=i("a",{id:"Rasters.sample-Tuple",href:"#Rasters.sample-Tuple"},[i("span",{class:"jlbinding"},"Rasters.sample")],-1)),s[193]||(s[193]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[194]||(s[194]=t("",9))])])}const Xs=l(j,[["render",Vs]]);export{Ys as __pageData,Xs as default}; +import{_ as l,c as o,ai as t,j as i,a as e,G as n,B as p,o as r}from"./chunks/framework.CS7uZ9fp.js";const d="/Rasters.jl/dev/assets/aggregate_example.vPDkaGne.png",h="/Rasters.jl/dev/assets/boolmask_example.B6nOyO_A.png",k="/Rasters.jl/dev/assets/classify_example.D0ZS4s3g.png",c="/Rasters.jl/dev/assets/classify_bang_example.Ch0DZvbI.png",g="/Rasters.jl/dev/assets/nz_crop_example.Dgn6MbZF.png",E="/Rasters.jl/dev/assets/argentina_crop_example.DlKBBk5m.png",y="/Rasters.jl/dev/assets/extend_example.DNJ4wwKN.png",u="/Rasters.jl/dev/assets/boolmask_example.B6nOyO_A.png",m="/Rasters.jl/dev/assets/mosaic_bang_example.Cvk5RuyI.png",b="/Rasters.jl/dev/assets/mosaic_example_combined.YolyGcS6.png",F="/Rasters.jl/dev/assets/china_rasterized.kM95Jnlf.png",f="/Rasters.jl/dev/assets/indonesia_rasterized.CAASrLmh.png",C="/Rasters.jl/dev/assets/warp_example_before.DrW8As6m.png",A="/Rasters.jl/dev/assets/resample_example_after.C_gavhhT.png",v="/Rasters.jl/dev/assets/trim_example_before.CicUDTMv.png",R="/Rasters.jl/dev/assets/trim_example_after.DqVtyr0a.png",D="/Rasters.jl/dev/assets/warp_example_before.DrW8As6m.png",B="/Rasters.jl/dev/assets/warp_example_after.rgHHAHxc.png",Ys=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),j={name:"api.md"},w={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},_={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},S={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},N={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},L={class:"jldocstring custom-block",open:""},z={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},G={class:"jldocstring custom-block",open:""},M={class:"jldocstring custom-block",open:""},O={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},W={class:"jldocstring custom-block",open:""},K={class:"jldocstring custom-block",open:""},Y={class:"jldocstring custom-block",open:""},X={class:"jldocstring custom-block",open:""},H={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},$={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},ss={class:"jldocstring custom-block",open:""},is={class:"jldocstring custom-block",open:""},es={class:"jldocstring custom-block",open:""},as={class:"jldocstring custom-block",open:""},ts={class:"jldocstring custom-block",open:""},ns={class:"jldocstring custom-block",open:""},ls={class:"jldocstring custom-block",open:""},os={class:"jldocstring custom-block",open:""},ps={class:"jldocstring custom-block",open:""},rs={class:"jldocstring custom-block",open:""},ds={class:"jldocstring custom-block",open:""},hs={class:"jldocstring custom-block",open:""},ks={class:"jldocstring custom-block",open:""},cs={class:"jldocstring custom-block",open:""},gs={class:"jldocstring custom-block",open:""},Es={class:"jldocstring custom-block",open:""},ys={class:"jldocstring custom-block",open:""},us={class:"jldocstring custom-block",open:""},ms={class:"jldocstring custom-block",open:""},bs={class:"jldocstring custom-block",open:""},Fs={class:"jldocstring custom-block",open:""},fs={class:"jldocstring custom-block",open:""},Cs={class:"jldocstring custom-block",open:""},As={class:"jldocstring custom-block",open:""},vs={class:"jldocstring custom-block",open:""},Rs={class:"jldocstring custom-block",open:""},Ds={class:"jldocstring custom-block",open:""},Bs={class:"jldocstring custom-block",open:""},js={class:"jldocstring custom-block",open:""},ws={class:"jldocstring custom-block",open:""},Ts={class:"jldocstring custom-block",open:""},_s={class:"jldocstring custom-block",open:""},xs={class:"jldocstring custom-block",open:""},Ss={class:"jldocstring custom-block",open:""},Is={class:"jldocstring custom-block",open:""},Ns={class:"jldocstring custom-block",open:""},Ps={class:"jldocstring custom-block",open:""},qs={class:"jldocstring custom-block",open:""},Ls={class:"jldocstring custom-block",open:""},zs={class:"jldocstring custom-block",open:""};function Vs(Gs,s,Ms,Os,Us,Ws){const a=p("Badge");return r(),o("div",null,[s[195]||(s[195]=t("",3)),i("details",w,[i("summary",null,[s[0]||(s[0]=i("a",{id:"Rasters.Rasters",href:"#Rasters.Rasters"},[i("span",{class:"jlbinding"},"Rasters.Rasters")],-1)),s[1]||(s[1]=e()),n(a,{type:"info",class:"jlObjectType jlModule",text:"Module"})]),s[2]||(s[2]=i("p",null,[i("a",{href:"https://github.com/rafaqz/Rasters.jl/blob/99e2b527c73143d05bdb0b1bcd1d7db419883be0/src/Rasters.jl#L4",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",T,[i("summary",null,[s[3]||(s[3]=i("a",{id:"Rasters.AbstractRaster",href:"#Rasters.AbstractRaster"},[i("span",{class:"jlbinding"},"Rasters.AbstractRaster")],-1)),s[4]||(s[4]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[5]||(s[5]=t("",4))]),i("details",_,[i("summary",null,[s[6]||(s[6]=i("a",{id:"Rasters.AbstractRasterSeries",href:"#Rasters.AbstractRasterSeries"},[i("span",{class:"jlbinding"},"Rasters.AbstractRasterSeries")],-1)),s[7]||(s[7]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[8]||(s[8]=t("",7))]),i("details",x,[i("summary",null,[s[9]||(s[9]=i("a",{id:"Rasters.AbstractRasterStack",href:"#Rasters.AbstractRasterStack"},[i("span",{class:"jlbinding"},"Rasters.AbstractRasterStack")],-1)),s[10]||(s[10]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[11]||(s[11]=t("",7))]),i("details",S,[i("summary",null,[s[12]||(s[12]=i("a",{id:"Rasters.Band",href:"#Rasters.Band"},[i("span",{class:"jlbinding"},"Rasters.Band")],-1)),s[13]||(s[13]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[14]||(s[14]=t("",5))]),i("details",I,[i("summary",null,[s[15]||(s[15]=i("a",{id:"Rasters.Mapped",href:"#Rasters.Mapped"},[i("span",{class:"jlbinding"},"Rasters.Mapped")],-1)),s[16]||(s[16]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[17]||(s[17]=t("",5))]),i("details",N,[i("summary",null,[s[18]||(s[18]=i("a",{id:"Rasters.Projected",href:"#Rasters.Projected"},[i("span",{class:"jlbinding"},"Rasters.Projected")],-1)),s[19]||(s[19]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[20]||(s[20]=t("",8))]),i("details",P,[i("summary",null,[s[21]||(s[21]=i("a",{id:"Rasters.Raster",href:"#Rasters.Raster"},[i("span",{class:"jlbinding"},"Rasters.Raster")],-1)),s[22]||(s[22]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[23]||(s[23]=t("",12))]),i("details",q,[i("summary",null,[s[24]||(s[24]=i("a",{id:"Rasters.RasterSeries",href:"#Rasters.RasterSeries"},[i("span",{class:"jlbinding"},"Rasters.RasterSeries")],-1)),s[25]||(s[25]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[26]||(s[26]=t("",22))]),i("details",L,[i("summary",null,[s[27]||(s[27]=i("a",{id:"Rasters.RasterStack",href:"#Rasters.RasterStack"},[i("span",{class:"jlbinding"},"Rasters.RasterStack")],-1)),s[28]||(s[28]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[29]||(s[29]=t("",12))]),i("details",z,[i("summary",null,[s[30]||(s[30]=i("a",{id:"DimensionalData.modify-Tuple{Any, AbstractRasterSeries}",href:"#DimensionalData.modify-Tuple{Any, AbstractRasterSeries}"},[i("span",{class:"jlbinding"},"DimensionalData.modify")],-1)),s[31]||(s[31]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[32]||(s[32]=t("",6))]),i("details",V,[i("summary",null,[s[33]||(s[33]=i("a",{id:"GeoInterface.crs-Tuple{Union{Tuple{Dimension, Vararg{Dimension}}, AbstractRaster, AbstractRasterSeries, AbstractRasterStack}}",href:"#GeoInterface.crs-Tuple{Union{Tuple{Dimension, Vararg{Dimension}}, AbstractRaster, AbstractRasterSeries, AbstractRasterStack}}"},[i("span",{class:"jlbinding"},"GeoInterface.crs")],-1)),s[34]||(s[34]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[35]||(s[35]=t("",4))]),i("details",G,[i("summary",null,[s[36]||(s[36]=i("a",{id:"Rasters.aggregate",href:"#Rasters.aggregate"},[i("span",{class:"jlbinding"},"Rasters.aggregate")],-1)),s[37]||(s[37]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[38]||(s[38]=t("",12))]),i("details",M,[i("summary",null,[s[39]||(s[39]=i("a",{id:"Rasters.aggregate!-Tuple{Locus, AbstractRaster, Any, Any}",href:"#Rasters.aggregate!-Tuple{Locus, AbstractRaster, Any, Any}"},[i("span",{class:"jlbinding"},"Rasters.aggregate!")],-1)),s[40]||(s[40]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[41]||(s[41]=t("",9))]),i("details",O,[i("summary",null,[s[42]||(s[42]=i("a",{id:"Rasters.boolmask",href:"#Rasters.boolmask"},[i("span",{class:"jlbinding"},"Rasters.boolmask")],-1)),s[43]||(s[43]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[44]||(s[44]=t("",16))]),i("details",U,[i("summary",null,[s[45]||(s[45]=i("a",{id:"Rasters.cellarea-Tuple{Any}",href:"#Rasters.cellarea-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.cellarea")],-1)),s[46]||(s[46]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[47]||(s[47]=t("",9))]),i("details",W,[i("summary",null,[s[48]||(s[48]=i("a",{id:"Rasters.classify",href:"#Rasters.classify"},[i("span",{class:"jlbinding"},"Rasters.classify")],-1)),s[49]||(s[49]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[50]||(s[50]=t("",14))]),i("details",K,[i("summary",null,[s[51]||(s[51]=i("a",{id:"Rasters.classify!-Tuple{AbstractRaster, Pair, Vararg{Pair}}",href:"#Rasters.classify!-Tuple{AbstractRaster, Pair, Vararg{Pair}}"},[i("span",{class:"jlbinding"},"Rasters.classify!")],-1)),s[52]||(s[52]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[53]||(s[53]=t("",15))]),i("details",Y,[i("summary",null,[s[54]||(s[54]=i("a",{id:"Rasters.combine-Tuple{AbstractRasterSeries}",href:"#Rasters.combine-Tuple{AbstractRasterSeries}"},[i("span",{class:"jlbinding"},"Rasters.combine")],-1)),s[55]||(s[55]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[56]||(s[56]=t("",6))]),i("details",X,[i("summary",null,[s[57]||(s[57]=i("a",{id:"Rasters.convertlookup-Tuple{Type{<:Lookup}, AbstractDimArray}",href:"#Rasters.convertlookup-Tuple{Type{<:Lookup}, AbstractDimArray}"},[i("span",{class:"jlbinding"},"Rasters.convertlookup")],-1)),s[58]||(s[58]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[59]||(s[59]=t("",4))]),i("details",H,[i("summary",null,[s[60]||(s[60]=i("a",{id:"Rasters.coverage!-Tuple{Union{typeof(sum), typeof(union)}, AbstractRaster, Any}",href:"#Rasters.coverage!-Tuple{Union{typeof(sum), typeof(union)}, AbstractRaster, Any}"},[i("span",{class:"jlbinding"},"Rasters.coverage!")],-1)),s[61]||(s[61]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[62]||(s[62]=t("",8))]),i("details",J,[i("summary",null,[s[63]||(s[63]=i("a",{id:"Rasters.coverage-Tuple{Any}",href:"#Rasters.coverage-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.coverage")],-1)),s[64]||(s[64]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[65]||(s[65]=t("",8))]),i("details",Z,[i("summary",null,[s[66]||(s[66]=i("a",{id:"Rasters.crop",href:"#Rasters.crop"},[i("span",{class:"jlbinding"},"Rasters.crop")],-1)),s[67]||(s[67]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[68]||(s[68]=t("",15))]),i("details",$,[i("summary",null,[s[69]||(s[69]=i("a",{id:"Rasters.disaggregate",href:"#Rasters.disaggregate"},[i("span",{class:"jlbinding"},"Rasters.disaggregate")],-1)),s[70]||(s[70]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[71]||(s[71]=t("",8))]),i("details",Q,[i("summary",null,[s[72]||(s[72]=i("a",{id:"Rasters.disaggregate!-Tuple{AbstractRaster, Any, Any}",href:"#Rasters.disaggregate!-Tuple{AbstractRaster, Any, Any}"},[i("span",{class:"jlbinding"},"Rasters.disaggregate!")],-1)),s[73]||(s[73]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[74]||(s[74]=t("",4))]),i("details",ss,[i("summary",null,[s[75]||(s[75]=i("a",{id:"Rasters.extend",href:"#Rasters.extend"},[i("span",{class:"jlbinding"},"Rasters.extend")],-1)),s[76]||(s[76]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[77]||(s[77]=t("",8))]),i("details",is,[i("summary",null,[s[78]||(s[78]=i("a",{id:"Rasters.extract",href:"#Rasters.extract"},[i("span",{class:"jlbinding"},"Rasters.extract")],-1)),s[79]||(s[79]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[80]||(s[80]=t("",14))]),i("details",es,[i("summary",null,[s[81]||(s[81]=i("a",{id:"Rasters.mappedbounds",href:"#Rasters.mappedbounds"},[i("span",{class:"jlbinding"},"Rasters.mappedbounds")],-1)),s[82]||(s[82]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[83]||(s[83]=t("",4))]),i("details",as,[i("summary",null,[s[84]||(s[84]=i("a",{id:"Rasters.mappedcrs",href:"#Rasters.mappedcrs"},[i("span",{class:"jlbinding"},"Rasters.mappedcrs")],-1)),s[85]||(s[85]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[86]||(s[86]=t("",5))]),i("details",ts,[i("summary",null,[s[87]||(s[87]=i("a",{id:"Rasters.mappedindex",href:"#Rasters.mappedindex"},[i("span",{class:"jlbinding"},"Rasters.mappedindex")],-1)),s[88]||(s[88]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[89]||(s[89]=t("",4))]),i("details",ns,[i("summary",null,[s[90]||(s[90]=i("a",{id:"Rasters.mask!",href:"#Rasters.mask!"},[i("span",{class:"jlbinding"},"Rasters.mask!")],-1)),s[91]||(s[91]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[92]||(s[92]=t("",15))]),i("details",ls,[i("summary",null,[s[93]||(s[93]=i("a",{id:"Rasters.mask-Tuple{Any}",href:"#Rasters.mask-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.mask")],-1)),s[94]||(s[94]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[95]||(s[95]=t("",16))]),i("details",os,[i("summary",null,[s[96]||(s[96]=i("a",{id:"Rasters.missingmask-Tuple{Any}",href:"#Rasters.missingmask-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.missingmask")],-1)),s[97]||(s[97]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[98]||(s[98]=t("",13))]),i("details",ps,[i("summary",null,[s[99]||(s[99]=i("a",{id:"Rasters.missingval",href:"#Rasters.missingval"},[i("span",{class:"jlbinding"},"Rasters.missingval")],-1)),s[100]||(s[100]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[101]||(s[101]=t("",3))]),i("details",rs,[i("summary",null,[s[102]||(s[102]=i("a",{id:"Rasters.mosaic!-Tuple{Function, Union{AbstractRaster, AbstractRasterStack}, Vararg{Union{AbstractRaster, AbstractRasterStack}}}",href:"#Rasters.mosaic!-Tuple{Function, Union{AbstractRaster, AbstractRasterStack}, Vararg{Union{AbstractRaster, AbstractRasterStack}}}"},[i("span",{class:"jlbinding"},"Rasters.mosaic!")],-1)),s[103]||(s[103]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[104]||(s[104]=t("",12))]),i("details",ds,[i("summary",null,[s[105]||(s[105]=i("a",{id:"Rasters.mosaic-Tuple{Function, Union{AbstractRaster, AbstractRasterStack}, Vararg{Union{AbstractRaster, AbstractRasterStack}}}",href:"#Rasters.mosaic-Tuple{Function, Union{AbstractRaster, AbstractRasterStack}, Vararg{Union{AbstractRaster, AbstractRasterStack}}}"},[i("span",{class:"jlbinding"},"Rasters.mosaic")],-1)),s[106]||(s[106]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[107]||(s[107]=t("",14))]),i("details",hs,[i("summary",null,[s[108]||(s[108]=i("a",{id:"Rasters.points-Tuple{AbstractRaster}",href:"#Rasters.points-Tuple{AbstractRaster}"},[i("span",{class:"jlbinding"},"Rasters.points")],-1)),s[109]||(s[109]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[110]||(s[110]=t("",7))]),i("details",ks,[i("summary",null,[s[111]||(s[111]=i("a",{id:"Rasters.rasterize",href:"#Rasters.rasterize"},[i("span",{class:"jlbinding"},"Rasters.rasterize")],-1)),s[112]||(s[112]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[113]||(s[113]=t("",14))]),i("details",cs,[i("summary",null,[s[114]||(s[114]=i("a",{id:"Rasters.rasterize!",href:"#Rasters.rasterize!"},[i("span",{class:"jlbinding"},"Rasters.rasterize!")],-1)),s[115]||(s[115]=e()),n(a,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[116]||(s[116]=t("",12))]),i("details",gs,[i("summary",null,[s[117]||(s[117]=i("a",{id:"Rasters.replace_missing-Tuple{Any}",href:"#Rasters.replace_missing-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.replace_missing")],-1)),s[118]||(s[118]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[119]||(s[119]=t("",7))]),i("details",Es,[i("summary",null,[s[120]||(s[120]=i("a",{id:"Rasters.reproject-NTuple{4, Any}",href:"#Rasters.reproject-NTuple{4, Any}"},[i("span",{class:"jlbinding"},"Rasters.reproject")],-1)),s[121]||(s[121]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[122]||(s[122]=t("",3))]),i("details",ys,[i("summary",null,[s[123]||(s[123]=i("a",{id:"Rasters.reproject-Tuple{Any}",href:"#Rasters.reproject-Tuple{Any}"},[i("span",{class:"jlbinding"},"Rasters.reproject")],-1)),s[124]||(s[124]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[125]||(s[125]=t("",8))]),i("details",us,[i("summary",null,[s[126]||(s[126]=i("a",{id:"Rasters.resample-Tuple",href:"#Rasters.resample-Tuple"},[i("span",{class:"jlbinding"},"Rasters.resample")],-1)),s[127]||(s[127]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[128]||(s[128]=t("",20))]),i("details",ms,[i("summary",null,[s[129]||(s[129]=i("a",{id:"Rasters.setcrs-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}",href:"#Rasters.setcrs-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}"},[i("span",{class:"jlbinding"},"Rasters.setcrs")],-1)),s[130]||(s[130]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[131]||(s[131]=t("",3))]),i("details",bs,[i("summary",null,[s[132]||(s[132]=i("a",{id:"Rasters.setmappedcrs-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}",href:"#Rasters.setmappedcrs-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}"},[i("span",{class:"jlbinding"},"Rasters.setmappedcrs")],-1)),s[133]||(s[133]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[134]||(s[134]=t("",3))]),i("details",Fs,[i("summary",null,[s[135]||(s[135]=i("a",{id:"Rasters.slice-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}",href:"#Rasters.slice-Tuple{Union{AbstractRaster, AbstractRasterStack}, Any}"},[i("span",{class:"jlbinding"},"Rasters.slice")],-1)),s[136]||(s[136]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[137]||(s[137]=t("",6))]),i("details",fs,[i("summary",null,[s[138]||(s[138]=i("a",{id:"Rasters.trim-Tuple{Union{AbstractRaster, AbstractRasterStack}}",href:"#Rasters.trim-Tuple{Union{AbstractRaster, AbstractRasterStack}}"},[i("span",{class:"jlbinding"},"Rasters.trim")],-1)),s[139]||(s[139]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[140]||(s[140]=t("",16))]),i("details",Cs,[i("summary",null,[s[141]||(s[141]=i("a",{id:"Rasters.warp-Tuple",href:"#Rasters.warp-Tuple"},[i("span",{class:"jlbinding"},"Rasters.warp")],-1)),s[142]||(s[142]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[143]||(s[143]=t("",18))]),i("details",As,[i("summary",null,[s[144]||(s[144]=i("a",{id:"Rasters.zonal-Tuple{Any, Union{AbstractRaster, AbstractRasterStack}}",href:"#Rasters.zonal-Tuple{Any, Union{AbstractRaster, AbstractRasterStack}}"},[i("span",{class:"jlbinding"},"Rasters.zonal")],-1)),s[145]||(s[145]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[146]||(s[146]=t("",11))]),s[196]||(s[196]=i("h2",{id:"Reference-Internal-functions",tabindex:"-1"},[e("Reference - Internal functions "),i("a",{class:"header-anchor",href:"#Reference-Internal-functions","aria-label":'Permalink to "Reference - Internal functions {#Reference-Internal-functions}"'},"​")],-1)),i("details",vs,[i("summary",null,[s[147]||(s[147]=i("a",{id:"Rasters.AbstractProjected",href:"#Rasters.AbstractProjected"},[i("span",{class:"jlbinding"},"Rasters.AbstractProjected")],-1)),s[148]||(s[148]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[149]||(s[149]=t("",3))]),i("details",Rs,[i("summary",null,[s[150]||(s[150]=i("a",{id:"Rasters.FileArray",href:"#Rasters.FileArray"},[i("span",{class:"jlbinding"},"Rasters.FileArray")],-1)),s[151]||(s[151]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[152]||(s[152]=t("",3))]),i("details",Ds,[i("summary",null,[s[153]||(s[153]=i("a",{id:"Rasters.FileStack",href:"#Rasters.FileStack"},[i("span",{class:"jlbinding"},"Rasters.FileStack")],-1)),s[154]||(s[154]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[155]||(s[155]=t("",4))]),i("details",Bs,[i("summary",null,[s[156]||(s[156]=i("a",{id:"Rasters.OpenStack",href:"#Rasters.OpenStack"},[i("span",{class:"jlbinding"},"Rasters.OpenStack")],-1)),s[157]||(s[157]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[158]||(s[158]=t("",5))]),i("details",js,[i("summary",null,[s[159]||(s[159]=i("a",{id:"Rasters.RasterDiskArray",href:"#Rasters.RasterDiskArray"},[i("span",{class:"jlbinding"},"Rasters.RasterDiskArray")],-1)),s[160]||(s[160]=e()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[161]||(s[161]=t("",3))]),i("details",ws,[i("summary",null,[s[162]||(s[162]=i("a",{id:"Base.open-Tuple{Function, AbstractRaster}",href:"#Base.open-Tuple{Function, AbstractRaster}"},[i("span",{class:"jlbinding"},"Base.open")],-1)),s[163]||(s[163]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[164]||(s[164]=t("",7))]),i("details",Ts,[i("summary",null,[s[165]||(s[165]=i("a",{id:"Base.read!-Tuple{AbstractRaster, AbstractArray}",href:"#Base.read!-Tuple{AbstractRaster, AbstractArray}"},[i("span",{class:"jlbinding"},"Base.read!")],-1)),s[166]||(s[166]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[167]||(s[167]=t("",4))]),i("details",_s,[i("summary",null,[s[168]||(s[168]=i("a",{id:"Base.read-Tuple{Union{AbstractRaster, AbstractRasterSeries, AbstractRasterStack}}",href:"#Base.read-Tuple{Union{AbstractRaster, AbstractRasterSeries, AbstractRasterStack}}"},[i("span",{class:"jlbinding"},"Base.read")],-1)),s[169]||(s[169]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[170]||(s[170]=t("",5))]),i("details",xs,[i("summary",null,[s[171]||(s[171]=i("a",{id:"Base.skipmissing-Tuple{Raster}",href:"#Base.skipmissing-Tuple{Raster}"},[i("span",{class:"jlbinding"},"Base.skipmissing")],-1)),s[172]||(s[172]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[173]||(s[173]=t("",3))]),i("details",Ss,[i("summary",null,[s[174]||(s[174]=i("a",{id:"Base.write-Tuple{AbstractString, AbstractRasterSeries}",href:"#Base.write-Tuple{AbstractString, AbstractRasterSeries}"},[i("span",{class:"jlbinding"},"Base.write")],-1)),s[175]||(s[175]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[176]||(s[176]=t("",7))]),i("details",Is,[i("summary",null,[s[177]||(s[177]=i("a",{id:"Base.write-Tuple{AbstractString, AbstractRasterStack}",href:"#Base.write-Tuple{AbstractString, AbstractRasterStack}"},[i("span",{class:"jlbinding"},"Base.write")],-1)),s[178]||(s[178]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[179]||(s[179]=t("",17))]),i("details",Ns,[i("summary",null,[s[180]||(s[180]=i("a",{id:"Base.write-Tuple{AbstractString, AbstractRaster}",href:"#Base.write-Tuple{AbstractString, AbstractRaster}"},[i("span",{class:"jlbinding"},"Base.write")],-1)),s[181]||(s[181]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[182]||(s[182]=t("",17))]),i("details",Ps,[i("summary",null,[s[183]||(s[183]=i("a",{id:"Base.write-Tuple{String, Rasters.GRDsource, AbstractRaster}",href:"#Base.write-Tuple{String, Rasters.GRDsource, AbstractRaster}"},[i("span",{class:"jlbinding"},"Base.write")],-1)),s[184]||(s[184]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[185]||(s[185]=t("",8))]),i("details",qs,[i("summary",null,[s[186]||(s[186]=i("a",{id:"Rasters.checkmem!-Tuple{Bool}",href:"#Rasters.checkmem!-Tuple{Bool}"},[i("span",{class:"jlbinding"},"Rasters.checkmem!")],-1)),s[187]||(s[187]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[188]||(s[188]=t("",5))]),i("details",Ls,[i("summary",null,[s[189]||(s[189]=i("a",{id:"Rasters.rplot-Tuple",href:"#Rasters.rplot-Tuple"},[i("span",{class:"jlbinding"},"Rasters.rplot")],-1)),s[190]||(s[190]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[191]||(s[191]=t("",5))]),i("details",zs,[i("summary",null,[s[192]||(s[192]=i("a",{id:"Rasters.sample-Tuple",href:"#Rasters.sample-Tuple"},[i("span",{class:"jlbinding"},"Rasters.sample")],-1)),s[193]||(s[193]=e()),n(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[194]||(s[194]=t("",9))])])}const Xs=l(j,[["render",Vs]]);export{Ys as __pageData,Xs as default}; diff --git a/dev/assets/app.ChjsgNa9.js b/dev/assets/app.BybBi2NM.js similarity index 95% rename from dev/assets/app.ChjsgNa9.js rename to dev/assets/app.BybBi2NM.js index 06c8fbb5..76450cf5 100644 --- a/dev/assets/app.ChjsgNa9.js +++ b/dev/assets/app.BybBi2NM.js @@ -1 +1 @@ -import{R as p}from"./chunks/theme.Bxszwcx-.js";import{R as s,a5 as i,a6 as u,a7 as c,a8 as l,a9 as f,aa as d,ab as m,ac as h,ad as g,ae as A,d as v,u as R,v as w,s as y,af as C,ag as P,ah as b,a4 as E}from"./chunks/framework.CS7uZ9fp.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=R();return w(()=>{y(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),P(),b(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return h(S)}function _(){let e=s;return g(a=>{let t=A(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp}; +import{R as p}from"./chunks/theme.Coy9cY5H.js";import{R as s,a5 as i,a6 as u,a7 as c,a8 as l,a9 as f,aa as d,ab as m,ac as h,ad as g,ae as A,d as v,u as R,v as w,s as y,af as C,ag as P,ah as b,a4 as E}from"./chunks/framework.CS7uZ9fp.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=R();return w(()=>{y(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),P(),b(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return h(S)}function _(){let e=s;return g(a=>{let t=A(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp}; diff --git a/dev/assets/errlplt.oyWWmvC1.png b/dev/assets/avhnerf.oyWWmvC1.png similarity index 100% rename from dev/assets/errlplt.oyWWmvC1.png rename to dev/assets/avhnerf.oyWWmvC1.png diff --git a/dev/assets/nqvouic.BEz2b9t9.png b/dev/assets/bmhpyef.BEz2b9t9.png similarity index 100% rename from dev/assets/nqvouic.BEz2b9t9.png rename to dev/assets/bmhpyef.BEz2b9t9.png diff --git a/dev/assets/sntyqhb.BDm3KuYD.png b/dev/assets/brxcfjr.BDm3KuYD.png similarity index 100% rename from dev/assets/sntyqhb.BDm3KuYD.png rename to dev/assets/brxcfjr.BDm3KuYD.png diff --git a/dev/assets/chunks/@localSearchIndexroot.CJzAcS6r.js b/dev/assets/chunks/@localSearchIndexroot.CJzAcS6r.js deleted file mode 100644 index 495004f5..00000000 --- a/dev/assets/chunks/@localSearchIndexroot.CJzAcS6r.js +++ /dev/null @@ -1 +0,0 @@ -const e='{"documentCount":67,"nextId":67,"documentIds":{"0":"/Rasters.jl/dev/api#index","1":"/Rasters.jl/dev/api#Reference-Exported-functions","2":"/Rasters.jl/dev/api#Reference-Internal-functions","3":"/Rasters.jl/dev/get_started#Quick-start","4":"/Rasters.jl/dev/get_started#Install-the-package-by-typing:","5":"/Rasters.jl/dev/get_started#Getting-the-lookup-array-from-dimensions","6":"/Rasters.jl/dev/get_started#Select-by-index","7":"/Rasters.jl/dev/get_started#Select-by-value","8":"/Rasters.jl/dev/get_started#Subsetting-an-object","9":"/Rasters.jl/dev/#How-to-Install-Rasters.jl?","10":"/Rasters.jl/dev/#Package-extensions","11":"/Rasters.jl/dev/#Bugs","12":"/Rasters.jl/dev/manual/cellarea#cellarea","13":"/Rasters.jl/dev/manual/data_sources#Data-sources","14":"/Rasters.jl/dev/manual/data_sources#gdal","15":"/Rasters.jl/dev/manual/data_sources#netcdf","16":"/Rasters.jl/dev/manual/data_sources#zarr","17":"/Rasters.jl/dev/manual/data_sources#grib","18":"/Rasters.jl/dev/manual/data_sources#grd","19":"/Rasters.jl/dev/manual/data_sources#Writing-file-formats-to-disk","20":"/Rasters.jl/dev/manual/data_sources#RasterDataSources.jl-integration","21":"/Rasters.jl/dev/manual/methods#Point,-polygon-and-table-operations","22":"/Rasters.jl/dev/manual/methods#Methods-that-change-the-resolution-or-extent-of-an-object","23":"/Rasters.jl/dev/manual/methods#Methods-that-change-an-objects-values","24":"/Rasters.jl/dev/manual/methods#Methods-to-load,-write-and-modify-data-sources","25":"/Rasters.jl/dev/tutorials/array_operations#Array-operations","26":"/Rasters.jl/dev/tutorials/array_operations#Mean-over-the-time-dimension:","27":"/Rasters.jl/dev/tutorials/array_operations#broadcasting","28":"/Rasters.jl/dev/tutorials/array_operations#Modifying-object-properties","29":"/Rasters.jl/dev/tutorials/array_operations#rebuild","30":"/Rasters.jl/dev/tutorials/array_operations#replace-missing","31":"/Rasters.jl/dev/tutorials/array_operations#set","32":"/Rasters.jl/dev/tutorials/gbif_wflow#Species-distribution-modelling-workflow","33":"/Rasters.jl/dev/tutorials/gbif_wflow#Load-Rasters,-ArchGDAL,-RasterDataSources-and-GBIF","34":"/Rasters.jl/dev/tutorials/gbif_wflow#Get-Bioclimatic-variables","35":"/Rasters.jl/dev/tutorials/gbif_wflow#Extract-bioclim-variables-at-occurrence-points","36":"/Rasters.jl/dev/tutorials/gbif_wflow#Sample-background-points","37":"/Rasters.jl/dev/tutorials/gbif_wflow#Fit-a-statistical-ensemble","38":"/Rasters.jl/dev/tutorials/gbif_wflow#Make-predictions-of-climatic-suitability","39":"/Rasters.jl/dev/tutorials/plot_makie#Plotting-in-Makie","40":"/Rasters.jl/dev/tutorials/plot_makie#2-D-rasters-in-Makie","41":"/Rasters.jl/dev/tutorials/plot_makie#3-D-rasters-in-Makie","42":"/Rasters.jl/dev/tutorials/plot_makie#reset-theme","43":"/Rasters.jl/dev/tutorials/plot_makie#Plotting-with-Observables,-animations","44":"/Rasters.jl/dev/tutorials/plot_makie#Using-vanilla-Makie","45":"/Rasters.jl/dev/tutorials/plotting#Plots,-simple","46":"/Rasters.jl/dev/tutorials/plotting#Makie,-simple","47":"/Rasters.jl/dev/tutorials/plotting#Loading-data","48":"/Rasters.jl/dev/tutorials/plotting#Plot-a-contour-plot","49":"/Rasters.jl/dev/tutorials/plotting#write-to-disk","50":"/Rasters.jl/dev/tutorials/plotting#Polygon-masking,-mosaic-and-plot","51":"/Rasters.jl/dev/tutorials/plotting#Download-the-shapefile","52":"/Rasters.jl/dev/tutorials/plotting#Load-using-Shapefile.jl","53":"/Rasters.jl/dev/tutorials/plotting#Plotting-with-Plots.jl","54":"/Rasters.jl/dev/tutorials/resample#Reprojection-and-resampling","55":"/Rasters.jl/dev/tutorials/resample#What-is-resampling?","56":"/Rasters.jl/dev/tutorials/resample#How-resample-works","57":"/Rasters.jl/dev/tutorials/resample#resolution,-size-and-methods","58":"/Rasters.jl/dev/tutorials/resample#reproject-with-resample-using-a-ProjString","59":"/Rasters.jl/dev/tutorials/resample#Sinusoidal-Projection-(MODIS)","60":"/Rasters.jl/dev/tutorials/resample#A-Raster-from-scratch","61":"/Rasters.jl/dev/tutorials/spatial_mean#Computing-spatial-means","62":"/Rasters.jl/dev/tutorials/spatial_mean#Acquiring-the-data","63":"/Rasters.jl/dev/tutorials/spatial_mean#Processing-the-data","64":"/Rasters.jl/dev/tutorials/spatial_mean#Computing-the-spatial-mean","65":"/Rasters.jl/dev/tutorials/spatial_mean#summary","66":"/Rasters.jl/dev/tutorials/spatial_mean#Bonus:-Computing-spatial-means-across-dimensions"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,49],"1":[3,1,1551],"2":[3,1,605],"3":[2,1,1],"4":[6,2,134],"5":[6,2,21],"6":[3,2,105],"7":[3,2,157],"8":[3,2,118],"9":[6,1,37],"10":[2,1,60],"11":[2,1,142],"12":[1,1,322],"13":[2,1,24],"14":[1,2,37],"15":[1,2,61],"16":[1,2,32],"17":[1,2,15],"18":[1,2,32],"19":[5,2,54],"20":[3,2,60],"21":[5,1,19],"22":[10,1,70],"23":[6,1,47],"24":[8,1,34],"25":[2,1,32],"26":[6,2,171],"27":[1,2,162],"28":[3,2,33],"29":[1,5,142],"30":[2,5,118],"31":[1,5,188],"32":[4,1,56],"33":[6,4,109],"34":[3,4,144],"35":[6,4,41],"36":[3,4,180],"37":[4,4,200],"38":[5,4,110],"39":[3,1,37],"40":[5,1,141],"41":[5,1,84],"42":[2,1,4],"43":[4,2,174],"44":[3,2,162],"45":[2,1,125],"46":[2,1,20],"47":[2,1,233],"48":[4,2,10],"49":[3,2,59],"50":[5,1,38],"51":[3,1,28],"52":[4,3,139],"53":[4,3,208],"54":[3,1,1],"55":[4,3,126],"56":[3,3,74],"57":[4,3,277],"58":[6,3,45],"59":[4,9,239],"60":[4,9,197],"61":[3,1,78],"62":[3,3,188],"63":[3,3,348],"64":[4,3,220],"65":[1,3,49],"66":[6,3,242]},"averageFieldLength":[3.4477611940298507,2.298507462686567,134.61194029850745],"storedFields":{"0":{"title":"Index","titles":[]},"1":{"title":"Reference - Exported functions","titles":[]},"2":{"title":"Reference - Internal functions","titles":[]},"3":{"title":"Quick start","titles":[]},"4":{"title":"Install the package by typing:","titles":["Quick start"]},"5":{"title":"Getting the lookup array from dimensions","titles":["Quick start"]},"6":{"title":"Select by index","titles":["Quick start"]},"7":{"title":"Select by value","titles":["Quick start"]},"8":{"title":"Subsetting an object","titles":["Quick start"]},"9":{"title":"How to Install Rasters.jl?","titles":[]},"10":{"title":"Package extensions","titles":[]},"11":{"title":"🐞📌 Bugs","titles":[]},"12":{"title":"cellarea","titles":[]},"13":{"title":"Data sources","titles":[]},"14":{"title":"GDAL","titles":["Data sources"]},"15":{"title":"NetCDF","titles":["Data sources"]},"16":{"title":"Zarr","titles":["Data sources"]},"17":{"title":"GRIB","titles":["Data sources"]},"18":{"title":"GRD","titles":["Data sources"]},"19":{"title":"Writing file formats to disk","titles":["Data sources"]},"20":{"title":"RasterDataSources.jl integration","titles":["Data sources"]},"21":{"title":"Point, polygon and table operations","titles":[]},"22":{"title":"Methods that change the resolution or extent of an object","titles":[]},"23":{"title":"Methods that change an objects values","titles":[]},"24":{"title":"Methods to load, write and modify data sources","titles":[]},"25":{"title":"Array operations","titles":[]},"26":{"title":"Mean over the time dimension:","titles":["Array operations"]},"27":{"title":"Broadcasting","titles":["Array operations"]},"28":{"title":"Modifying object properties","titles":["Array operations"]},"29":{"title":"rebuild","titles":["Array operations","Modifying object properties"]},"30":{"title":"replace_missing","titles":["Array operations","Modifying object properties"]},"31":{"title":"set","titles":["Array operations","Modifying object properties"]},"32":{"title":"Species distribution modelling workflow","titles":[]},"33":{"title":"Load Rasters, ArchGDAL, RasterDataSources and GBIF","titles":["Species distribution modelling workflow"]},"34":{"title":"Get Bioclimatic variables","titles":["Species distribution modelling workflow"]},"35":{"title":"Extract bioclim variables at occurrence points","titles":["Species distribution modelling workflow"]},"36":{"title":"Sample background points","titles":["Species distribution modelling workflow"]},"37":{"title":"Fit a statistical ensemble","titles":["Species distribution modelling workflow"]},"38":{"title":"Make predictions of climatic suitability","titles":["Species distribution modelling workflow"]},"39":{"title":"Plotting in Makie","titles":[]},"40":{"title":"2-D rasters in Makie","titles":[]},"41":{"title":"3-D rasters in Makie","titles":[]},"42":{"title":"reset theme","titles":[]},"43":{"title":"Plotting with Observables, animations","titles":["reset theme"]},"44":{"title":"Using vanilla Makie","titles":["reset theme"]},"45":{"title":"Plots, simple","titles":[]},"46":{"title":"Makie, simple","titles":[]},"47":{"title":"Loading data","titles":[]},"48":{"title":"Plot a contour plot","titles":["Loading data"]},"49":{"title":"write to disk","titles":["Loading data"]},"50":{"title":"Polygon masking, mosaic and plot","titles":[]},"51":{"title":"Download the shapefile","titles":[]},"52":{"title":"Load using Shapefile.jl","titles":["Download the shapefile"]},"53":{"title":"Plotting with Plots.jl","titles":["Download the shapefile"]},"54":{"title":"Reprojection and resampling","titles":[]},"55":{"title":"What is resampling?","titles":["Reprojection and resampling"]},"56":{"title":"How resample works","titles":["Reprojection and resampling"]},"57":{"title":"resolution, size and methods","titles":["Reprojection and resampling"]},"58":{"title":"reproject with resample using a ProjString","titles":["Reprojection and resampling"]},"59":{"title":"Sinusoidal Projection (MODIS)","titles":["Reprojection and resampling","reproject with resample using a ProjString"]},"60":{"title":"A Raster from scratch","titles":["Reprojection and resampling","reproject with resample using a ProjString"]},"61":{"title":"Computing spatial means","titles":[]},"62":{"title":"Acquiring the data","titles":["Computing spatial means"]},"63":{"title":"Processing the data","titles":["Computing spatial means"]},"64":{"title":"Computing the spatial mean","titles":["Computing spatial means"]},"65":{"title":"Summary","titles":["Computing spatial means"]},"66":{"title":"Bonus: Computing spatial means across dimensions","titles":["Computing spatial means"]}},"dirtCount":0,"index":[["$",{"2":{"57":2}}],["≡",{"2":{"57":1}}],["└──────────┴──────────┴──────────┴───────────┴──────────┘",{"2":{"37":2}}],["└──────────────────────────┴─────────┴─────────┴─────────┴──────────┴───────────",{"2":{"33":1}}],["└───────────────────────────────────────────────────────────┘",{"2":{"6":2,"7":1}}],["└──────────────────────────────────────────────────────────────────────────────┘",{"2":{"4":1,"6":1,"12":3,"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"47":2,"52":2,"53":1,"57":3,"59":3,"60":2,"62":1,"63":1,"64":1}}],["└─────────────────────────────────────────────────────────────────────────────────┘",{"2":{"1":1,"12":1,"63":1}}],["└───────┴────────────┴─────────┘",{"2":{"37":1}}],["└──────┴─────────┴────────┘",{"2":{"37":1}}],["├──────────┼──────────┼──────────┼───────────┼──────────┤",{"2":{"37":2}}],["├─────────────────────┴──────────────────────────────────────────────────",{"2":{"44":1,"53":1}}],["├──────────────────────┴─────────────────────────────────────────────────",{"2":{"12":1}}],["├───────────────────────┴────────────────────────────────────────────────",{"2":{"52":1}}],["├───────────────────────┴───────────────────────────────────────────────────",{"2":{"1":1,"12":1,"63":1}}],["├──────────────────────────┼─────────┼─────────┼─────────┼──────────┼───────────",{"2":{"33":1}}],["├─────────────────────────────┴──────────────────────────────────────────",{"2":{"60":2}}],["├─────────────────────────────────┴──────────────────────────────────────",{"2":{"57":1}}],["├──────────────────────────────────┴─────────────────────────────────────",{"2":{"57":1,"59":2}}],["├────────────────────────────────────────────┴───────────────────────────",{"2":{"64":1}}],["├───────────────────────────────────────────────┴────────────────────────",{"2":{"63":1}}],["├─────────────────────────────────────────────────┴──────────────────────",{"2":{"62":1}}],["├──────────────────────────────────────────────────┴─────────────────────",{"2":{"47":1}}],["├────────────────────────────────────────────────────────────────────",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"47":2,"57":3,"59":3,"60":1,"62":1,"63":1}}],["├──────────────────────────────────────────────────────────────────────",{"2":{"4":1,"6":1,"12":3,"26":2,"27":1,"29":1,"30":1,"31":2,"34":2,"38":1,"40":1,"44":2,"47":2,"52":4,"53":2,"57":3,"59":3,"60":2,"62":1,"63":1,"64":1}}],["├─────────────────────────────────────────────────────────────────────────",{"2":{"1":1,"12":1,"63":1}}],["├───────────────────────────────────────────────────┴────────────────────",{"2":{"26":1,"27":1,"29":1,"31":2,"40":1,"47":1}}],["├───────────────────────────────────────────────────",{"2":{"6":2,"7":1}}],["├────────────────────────────────────────────────┴───────────────────────",{"2":{"26":1}}],["├───────────────────────────────────────────┴────────────────────────────",{"2":{"38":1}}],["├───────────────────────────────────┴────────────────────────────────────",{"2":{"30":1,"57":1,"59":1}}],["├───────────────────────────┴────────────────────────────────────────────",{"2":{"4":1,"6":1}}],["├────────────────────────┴───────────────────────────────────────────────",{"2":{"12":2}}],["├────────────────────────┴────────────────────────────",{"2":{"6":2,"7":1}}],["├────────────────────┴───────────────────────────────────────────────────",{"2":{"34":1,"52":1}}],["├───────┼────────────┼─────────┤",{"2":{"37":1}}],["├──────┼─────────┼────────┤",{"2":{"37":1}}],["🐞📌",{"0":{"11":1}}],["↗",{"2":{"4":1,"6":1,"47":2}}],["┌──────────┬──────────┬──────────┬───────────┬──────────┐",{"2":{"37":2}}],["┌──────────────────────────┬─────────┬─────────┬─────────┬──────────┬───────────",{"2":{"33":1}}],["┌───────┬────────────┬─────────┐",{"2":{"37":1}}],["┌──────┬─────────┬────────┐",{"2":{"37":1}}],["┌",{"2":{"4":1,"6":3,"7":1,"12":3,"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"47":2,"52":2,"53":1,"57":3,"59":3,"60":2,"62":1,"63":1,"64":1}}],["⋱",{"2":{"1":1,"26":1,"27":1,"29":1,"30":1,"31":2,"33":1,"38":1,"40":1,"47":2,"57":3,"59":3,"60":2,"62":1,"63":1,"64":1}}],["⋮",{"2":{"1":6,"26":2,"27":2,"29":2,"30":2,"31":4,"33":6,"36":1,"38":2,"40":2,"47":2,"57":7,"59":6,"60":4,"62":2,"63":1,"64":1}}],["─────┼──────────────────────────────────────────────────────────────────────────",{"2":{"1":1}}],["⋯",{"2":{"1":6,"33":17}}],["^a",{"2":{"1":1}}],["quickly",{"2":{"11":1,"45":1}}],["quick",{"0":{"3":1},"1":{"4":1,"5":1,"6":1,"7":1,"8":1}}],["quot",{"2":{"2":18,"12":2,"14":4,"15":4,"19":2,"43":2,"55":2,"57":24}}],["quadrant",{"2":{"62":1}}],["quadratic",{"2":{"1":1}}],["quartile",{"2":{"1":4}}],["quality",{"2":{"1":1,"45":1}}],["q3",{"2":{"1":1,"57":1}}],["q1",{"2":{"1":1,"57":1}}],["`cellarea`",{"2":{"62":1}}],["`collect`",{"2":{"1":1}}],["`stack`",{"2":{"43":1}}],["`raster`",{"2":{"2":1}}],["`rasters",{"2":{"1":1}}],["`gi",{"2":{"1":1}}],["`missingval",{"2":{"1":1}}],["`missing`",{"2":{"1":1}}],["`vector`",{"2":{"1":1}}],["`extract`",{"2":{"1":1}}],["zscale",{"2":{"62":1}}],["z",{"2":{"1":1,"2":1,"7":1,"15":1,"31":4,"43":1,"47":1,"49":1}}],["zarrdatasets",{"2":{"16":1,"17":1}}],["zarr",{"0":{"16":1},"2":{"16":2}}],["za",{"2":{"1":1}}],["zone",{"2":{"1":1}}],["zonal",{"2":{"0":1,"1":5,"21":2,"64":3}}],["zeros",{"2":{"1":1}}],["zealand",{"2":{"1":1}}],["594",{"2":{"57":1}}],["591",{"2":{"27":1}}],["53",{"2":{"52":3,"53":2}}],["538",{"2":{"36":1}}],["5151",{"2":{"57":1}}],["518002",{"2":{"36":1}}],["5165",{"2":{"27":1}}],["568552",{"2":{"36":1}}],["566677",{"2":{"36":1}}],["5695",{"2":{"27":1}}],["552039794457",{"2":{"60":1}}],["5545",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["554699",{"2":{"4":1,"6":3,"7":1}}],["55",{"2":{"12":3,"53":1,"63":5,"64":5}}],["556124",{"2":{"4":1,"6":3,"7":1}}],["5504",{"2":{"1":1}}],["5898",{"2":{"57":1}}],["583066",{"2":{"4":1,"6":3,"7":1}}],["5858",{"2":{"1":1}}],["5468",{"2":{"57":1}}],["54",{"2":{"52":1}}],["541666666666664",{"2":{"44":2}}],["54166666666669",{"2":{"44":1}}],["54196e",{"2":{"38":1}}],["543596",{"2":{"4":1,"6":3,"7":1}}],["542",{"2":{"1":1}}],["5447657183842469",{"2":{"2":2}}],["5447",{"2":{"1":1}}],["544561f0",{"2":{"1":1}}],["5249",{"2":{"33":1}}],["5291143028176258",{"2":{"2":1}}],["52",{"2":{"1":1,"36":2}}],["5754",{"2":{"60":1}}],["5736",{"2":{"60":1}}],["5718",{"2":{"59":2,"60":1}}],["5793",{"2":{"57":1}}],["57076e",{"2":{"38":1}}],["574999",{"2":{"36":1}}],["578195",{"2":{"4":1,"6":3,"7":1}}],["57",{"2":{"1":1,"59":2,"60":1}}],["5",{"2":{"1":8,"2":3,"8":1,"12":8,"26":6,"27":3,"29":4,"30":3,"31":6,"34":1,"35":1,"36":2,"38":10,"40":4,"44":2,"45":1,"46":1,"47":8,"52":1,"57":10,"58":1,"59":1,"60":5,"62":3,"63":3,"64":2,"66":1}}],["502",{"2":{"37":3}}],["5025",{"2":{"27":1}}],["501385",{"2":{"36":1}}],["506",{"2":{"36":1}}],["5001",{"2":{"59":1}}],["500",{"2":{"36":2,"37":1}}],["5047",{"2":{"33":1}}],["50",{"2":{"1":5,"2":1,"8":1,"12":13,"37":2,"44":1,"63":3}}],[">",{"2":{"1":1}}],[">=",{"2":{"1":2}}],["96494e6",{"2":{"59":1}}],["9605",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["9817",{"2":{"59":1}}],["98168929439024",{"2":{"59":3}}],["98345e6",{"2":{"59":1}}],["983453040980069e6",{"2":{"59":1}}],["9826",{"2":{"57":1}}],["98×102",{"2":{"52":5}}],["9464e6",{"2":{"60":1}}],["946243",{"2":{"37":1}}],["948857",{"2":{"37":1}}],["941335",{"2":{"37":1}}],["944291",{"2":{"37":2}}],["945886",{"2":{"37":3}}],["945",{"2":{"36":1}}],["99963e7",{"2":{"60":1}}],["999626604247498e7",{"2":{"60":1}}],["9999",{"2":{"29":2,"30":17}}],["99999999999997",{"2":{"26":1,"27":1,"29":1,"30":1,"31":1,"34":1,"36":1,"38":1,"40":1,"52":1,"57":1,"62":1}}],["9987e7",{"2":{"59":1}}],["99684e7",{"2":{"59":1,"60":1}}],["99174e6",{"2":{"59":1}}],["991737669952895e6",{"2":{"59":2}}],["99406e7",{"2":{"60":1}}],["994431",{"2":{"37":1}}],["994412",{"2":{"37":1}}],["994616",{"2":{"37":1}}],["994687",{"2":{"37":1}}],["995446",{"2":{"37":1}}],["995784",{"2":{"37":1}}],["995163",{"2":{"37":1}}],["995305",{"2":{"37":1}}],["912384183634",{"2":{"60":1}}],["9122",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["91862e6",{"2":{"60":1}}],["9183",{"2":{"57":1}}],["918499",{"2":{"36":1}}],["9357",{"2":{"33":1}}],["9373",{"2":{"26":1}}],["920313",{"2":{"36":1}}],["921",{"2":{"27":1}}],["9262",{"2":{"1":1}}],["97418e6",{"2":{"60":1}}],["974183816928538e6",{"2":{"60":1}}],["974104",{"2":{"37":1}}],["97323e6",{"2":{"60":1}}],["97322e6",{"2":{"59":1}}],["9734",{"2":{"57":1}}],["977424",{"2":{"37":1}}],["976096",{"2":{"37":4}}],["975432",{"2":{"37":2}}],["97275",{"2":{"36":1}}],["97",{"2":{"1":3}}],["9",{"2":{"1":2,"2":2,"37":1,"47":2,"52":2,"59":7,"60":5}}],["9036",{"2":{"60":1}}],["9063",{"2":{"59":2,"60":1}}],["9056",{"2":{"59":2,"60":1}}],["9043",{"2":{"60":1}}],["9049",{"2":{"59":2,"60":1}}],["904472",{"2":{"36":1}}],["9072",{"2":{"57":1}}],["900098",{"2":{"4":1,"6":3,"7":1}}],["90",{"2":{"1":5,"2":5,"12":4,"26":8,"27":4,"29":4,"30":4,"31":8,"40":4,"47":3,"52":3,"57":12,"59":2,"60":5,"62":4,"63":4}}],["7799",{"2":{"57":1}}],["775",{"2":{"36":1}}],["775f0",{"2":{"1":1}}],["74",{"2":{"63":1}}],["7431",{"2":{"57":1}}],["7454",{"2":{"1":1}}],["71",{"2":{"52":1}}],["71852e",{"2":{"38":1}}],["7993",{"2":{"57":1}}],["79",{"2":{"47":2}}],["798",{"2":{"27":1}}],["798959",{"2":{"4":1,"6":3,"7":1}}],["7983f0",{"2":{"1":2}}],["728",{"2":{"57":1}}],["7288",{"2":{"1":1}}],["720",{"2":{"57":3,"59":1,"60":4}}],["726246",{"2":{"36":1}}],["722448",{"2":{"36":1}}],["72",{"2":{"26":2,"29":2,"30":2,"31":4,"40":2,"53":2,"57":2}}],["75002543153558",{"2":{"59":1}}],["75000000000003",{"2":{"44":1}}],["7547",{"2":{"57":1}}],["758251",{"2":{"36":1}}],["7583",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["7513",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["75",{"2":{"12":3,"43":1,"57":6,"59":4,"60":9}}],["736",{"2":{"60":1}}],["7360504790189618",{"2":{"2":2}}],["7356",{"2":{"60":1}}],["7351",{"2":{"59":2,"60":1}}],["7338",{"2":{"59":2,"60":1}}],["7339",{"2":{"59":2,"60":1}}],["7341",{"2":{"60":1}}],["7343",{"2":{"60":1}}],["734",{"2":{"59":2,"60":1}}],["7346",{"2":{"59":2,"60":1}}],["7317",{"2":{"59":1}}],["738",{"2":{"57":1}}],["732",{"2":{"57":1}}],["732843",{"2":{"4":1,"6":3,"7":1}}],["73",{"2":{"53":1}}],["739134",{"2":{"4":1,"6":3,"7":1}}],["76775",{"2":{"36":1}}],["762069",{"2":{"4":1,"6":3,"7":1}}],["76",{"2":{"1":1}}],["780817076729905e6",{"2":{"60":1}}],["78",{"2":{"1":1,"33":1,"47":2}}],["7",{"2":{"1":5,"34":1,"63":1,"64":1}}],["701",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["7030",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["706145",{"2":{"4":1,"6":3,"7":1}}],["708290",{"2":{"1":4,"12":4,"63":4}}],["70",{"2":{"1":2,"12":2,"52":2}}],["6th",{"2":{"66":1}}],["6942",{"2":{"57":1}}],["6988",{"2":{"1":1}}],["625",{"2":{"59":3}}],["6251",{"2":{"57":1}}],["629005",{"2":{"36":1}}],["64619e",{"2":{"38":1}}],["64394",{"2":{"36":1}}],["68833265335",{"2":{"59":1}}],["68821e10",{"2":{"12":6}}],["6831",{"2":{"57":1}}],["684727",{"2":{"36":1}}],["687694",{"2":{"4":1,"6":3,"7":1}}],["6×7",{"2":{"12":3}}],["6×6×10",{"2":{"6":1}}],["6×6×13",{"2":{"4":1}}],["6×6",{"2":{"6":2,"7":1}}],["619",{"2":{"36":1}}],["61725",{"2":{"36":1}}],["61",{"2":{"8":1,"27":1,"63":1}}],["652",{"2":{"36":1}}],["658376",{"2":{"36":1}}],["65",{"2":{"12":2}}],["65026",{"2":{"4":1,"6":3,"7":1}}],["65921",{"2":{"1":1}}],["659454f0",{"2":{"1":1}}],["66",{"2":{"63":5,"64":4}}],["664",{"2":{"36":1}}],["667",{"2":{"26":1,"27":1,"29":1,"30":1,"31":2,"38":2,"40":1,"57":1,"62":1}}],["66666666666665",{"2":{"53":1}}],["666666666666657",{"2":{"52":1}}],["66666666666667",{"2":{"52":1,"53":1,"63":1,"64":1}}],["666666666666664",{"2":{"36":3,"52":2,"63":1,"64":1}}],["66666666666666",{"2":{"36":2}}],["6667",{"2":{"26":4,"27":2,"29":2,"30":2,"31":4,"38":1,"40":2,"57":2,"62":2,"63":2,"64":2}}],["6665",{"2":{"1":1}}],["66031e11",{"2":{"12":6}}],["668468",{"2":{"4":1,"6":3,"7":1}}],["6694",{"2":{"1":1}}],["67051e",{"2":{"38":1}}],["679485",{"2":{"4":1,"6":3,"7":1}}],["67",{"2":{"1":1,"63":1,"64":3}}],["6732",{"2":{"1":1}}],["6716",{"2":{"1":1}}],["6751",{"2":{"1":1}}],["6326",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["6378137",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["6371008",{"2":{"1":1,"12":1,"63":1}}],["638462f0",{"2":{"1":2}}],["6",{"2":{"1":4,"12":9,"33":1,"37":2,"53":1,"60":1,"62":1,"63":3,"66":1}}],["6067",{"2":{"59":1}}],["6031",{"2":{"57":1}}],["600",{"2":{"44":2,"57":2}}],["607",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["60",{"2":{"1":1,"12":4,"47":1,"63":1}}],["┤",{"2":{"1":1,"4":1,"6":3,"7":1,"12":4,"26":4,"27":2,"29":2,"30":2,"31":4,"34":2,"38":1,"40":2,"44":2,"47":4,"52":4,"53":2,"57":6,"59":6,"60":3,"62":2,"63":3,"64":1}}],["→",{"2":{"1":2,"4":2,"6":6,"7":2,"12":8,"26":4,"27":2,"29":2,"30":2,"31":4,"34":1,"38":2,"40":2,"44":1,"47":2,"52":2,"53":1,"57":6,"59":6,"60":4,"62":2,"63":4,"64":2}}],["↓",{"2":{"1":2,"4":2,"6":6,"7":2,"12":8,"26":4,"27":2,"29":2,"30":2,"31":4,"34":1,"38":2,"40":2,"44":1,"47":2,"52":2,"53":1,"57":6,"59":6,"60":4,"62":2,"63":4,"64":2}}],["┐",{"2":{"1":1,"4":2,"6":6,"7":2,"12":7,"26":4,"27":2,"29":2,"30":2,"31":4,"34":2,"38":2,"40":2,"44":2,"47":4,"52":4,"53":2,"57":6,"59":6,"60":4,"62":2,"63":3,"64":2}}],["4924",{"2":{"57":1}}],["499999999999986",{"2":{"53":1}}],["49999999999999",{"2":{"52":2}}],["49999999999997",{"2":{"36":5}}],["49",{"2":{"36":1}}],["4647",{"2":{"57":1}}],["468498",{"2":{"36":1}}],["467976",{"2":{"36":1}}],["46",{"2":{"36":3}}],["46072",{"2":{"36":1}}],["47",{"2":{"36":2}}],["4758",{"2":{"1":1}}],["4243",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["42685e11",{"2":{"12":6}}],["4291",{"2":{"1":1}}],["435387",{"2":{"36":1}}],["4317",{"2":{"33":1}}],["4333",{"2":{"33":1}}],["43",{"2":{"8":1,"44":2}}],["4326",{"2":{"1":14,"2":2,"7":1,"12":9,"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"47":4,"52":2,"53":1,"57":3,"59":3,"60":3,"62":1,"63":4,"64":1}}],["4817",{"2":{"59":1}}],["48981",{"2":{"36":1}}],["48",{"2":{"8":1,"36":3}}],["483487",{"2":{"4":1,"6":3,"7":1}}],["480",{"2":{"1":1}}],["45",{"2":{"1":4,"36":5,"47":1}}],["44",{"2":{"27":2,"36":2}}],["4474",{"2":{"1":1}}],["441",{"2":{"1":2}}],["446",{"2":{"1":1}}],["41",{"2":{"1":2,"36":1}}],["4",{"2":{"1":3,"2":2,"12":6,"37":1,"44":2,"63":1,"66":1}}],["400",{"2":{"48":1}}],["4063",{"2":{"57":1}}],["406",{"2":{"36":1}}],["402",{"2":{"27":1}}],["40",{"2":{"1":6,"12":1,"34":3,"38":3,"53":1,"63":1}}],["4×6",{"2":{"1":1,"12":1,"63":1}}],["│",{"2":{"1":20,"12":2,"33":108,"37":108,"63":2}}],["╭───────────────────────╮",{"2":{"1":1,"12":1,"63":1}}],["810135",{"2":{"36":1}}],["815831",{"2":{"4":1,"6":3,"7":1}}],["83785e",{"2":{"38":1}}],["83075",{"2":{"36":1}}],["83325",{"2":{"36":1}}],["833",{"2":{"26":2,"27":2,"29":2,"30":2,"31":4,"38":1,"40":2,"57":2,"62":2,"64":1}}],["8333",{"2":{"26":4,"27":2,"29":2,"30":2,"31":4,"38":1,"40":2,"57":2,"62":2,"63":3,"64":3}}],["83333333333334",{"2":{"53":1}}],["833333333333325",{"2":{"52":1}}],["833333333333336",{"2":{"63":2,"64":2}}],["833333333333332",{"2":{"36":1,"63":1,"64":1}}],["83333333333333",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"52":1,"57":1,"62":1}}],["83333333333331",{"2":{"26":1,"27":1,"29":1,"30":1,"31":3,"34":1,"36":4,"38":1,"40":1,"52":1,"57":1,"62":1}}],["8445",{"2":{"57":1}}],["8485",{"2":{"27":1}}],["84",{"2":{"26":4,"27":2,"29":2,"30":2,"31":4,"34":2,"38":2,"40":2,"44":2,"52":4,"53":2,"57":6,"62":2,"63":2,"64":2}}],["846569",{"2":{"4":1,"6":3,"7":1}}],["899902",{"2":{"36":1}}],["8991",{"2":{"1":1}}],["8901",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["89",{"2":{"26":12,"27":6,"29":6,"30":6,"31":12,"40":6,"47":2,"52":1,"57":16,"59":18,"60":8,"62":6}}],["8567",{"2":{"59":1}}],["85670201015802",{"2":{"59":1}}],["85276",{"2":{"36":1}}],["858",{"2":{"36":1}}],["85",{"2":{"12":3,"57":1}}],["800",{"2":{"48":1}}],["804844",{"2":{"36":1}}],["804218",{"2":{"36":1}}],["805",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["80",{"2":{"12":7,"47":2}}],["86",{"2":{"57":1}}],["86967",{"2":{"36":1}}],["8685",{"2":{"36":1}}],["8688",{"2":{"1":1}}],["862607",{"2":{"4":1,"6":3,"7":1}}],["861332",{"2":{"4":1,"6":3,"7":1}}],["8750127157678",{"2":{"59":1}}],["875",{"2":{"59":5}}],["87",{"2":{"57":1}}],["87126",{"2":{"1":1}}],["873182",{"2":{"1":4,"12":4,"63":4}}],["88013814783145",{"2":{"64":1}}],["887",{"2":{"36":1}}],["88114e11",{"2":{"12":6}}],["8868",{"2":{"1":1}}],["88",{"2":{"1":1,"47":2,"57":2}}],["8",{"2":{"1":2,"12":1,"36":1,"63":1,"64":1}}],["38",{"2":{"36":1}}],["3818",{"2":{"33":1}}],["381",{"2":{"1":1}}],["344109655259728e11",{"2":{"64":1}}],["3424",{"2":{"60":1}}],["3405",{"2":{"59":2,"60":1}}],["3419",{"2":{"60":1}}],["3415",{"2":{"59":2,"60":1}}],["341",{"2":{"59":4,"60":2}}],["347",{"2":{"33":1}}],["34",{"2":{"27":1,"36":1}}],["3692",{"2":{"57":1}}],["36",{"2":{"27":2,"33":7,"36":1}}],["360×180",{"2":{"57":1}}],["360",{"2":{"26":1,"47":2,"57":2}}],["3656",{"2":{"1":1}}],["316885",{"2":{"36":1}}],["311052",{"2":{"36":1}}],["310",{"2":{"36":1}}],["31",{"2":{"12":3,"27":2,"36":3}}],["317935",{"2":{"4":1,"6":3,"7":1}}],["3d",{"2":{"2":2,"39":1,"40":2,"41":2,"43":2,"45":1}}],["3378",{"2":{"60":1}}],["3389",{"2":{"60":1}}],["3399",{"2":{"59":2,"60":1}}],["3333",{"2":{"38":1,"64":1}}],["33333333333334",{"2":{"44":2,"63":2,"64":2}}],["333333333333332",{"2":{"36":4}}],["333333333333336",{"2":{"36":2}}],["33333333333331",{"2":{"36":7}}],["333",{"2":{"33":1,"38":2,"63":1,"64":1}}],["33",{"2":{"1":1,"27":4,"36":2}}],["3228",{"2":{"36":1}}],["329",{"2":{"33":1}}],["320261",{"2":{"4":1,"6":3,"7":1}}],["321388f0",{"2":{"1":1}}],["32",{"2":{"1":3,"36":1,"53":2}}],["3568",{"2":{"59":1}}],["359",{"2":{"47":2}}],["357",{"2":{"47":2}}],["351",{"2":{"36":1}}],["35",{"2":{"1":4,"36":1}}],["3",{"0":{"41":1},"2":{"1":9,"2":2,"4":1,"6":1,"18":1,"33":1,"34":1,"37":6,"43":3,"44":3,"47":5,"53":2,"62":1}}],["306252",{"2":{"36":1}}],["3036",{"2":{"33":1}}],["300",{"2":{"33":1}}],["305187",{"2":{"4":1,"6":3,"7":1}}],["30298",{"2":{"4":1,"6":3,"7":1}}],["3087",{"2":{"1":1}}],["30",{"2":{"1":5,"2":2,"4":8,"5":1,"6":18,"7":6,"12":2,"27":2,"36":10,"37":1,"47":2,"63":1}}],["375",{"2":{"59":1}}],["3751",{"2":{"59":1}}],["371",{"2":{"36":1}}],["378376",{"2":{"36":1}}],["37",{"2":{"1":2,"33":1,"36":1,"47":2}}],["398",{"2":{"36":1}}],["398214",{"2":{"4":1,"6":3,"7":1}}],["396",{"2":{"33":1}}],["391",{"2":{"33":1}}],["399",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["39",{"2":{"1":7,"2":6,"11":1,"12":8,"31":1,"32":1,"37":1,"38":3,"45":1,"49":1,"55":3,"56":1,"57":2,"58":1,"59":4,"61":2,"62":2,"63":7,"64":5,"65":3,"66":4}}],["+no",{"2":{"59":1}}],["+units=m",{"2":{"59":1}}],["+b=6371007",{"2":{"59":1}}],["+a=6371007",{"2":{"59":1}}],["+y",{"2":{"59":1}}],["+x",{"2":{"59":1}}],["+type=crs",{"2":{"59":3,"60":1}}],["+lon",{"2":{"59":4,"60":1}}],["+proj=sinu",{"2":{"59":4,"60":1}}],["+",{"2":{"1":4,"34":1}}],["06",{"2":{"62":1,"63":1}}],["063",{"2":{"1":1}}],["0=0",{"2":{"59":6,"60":1}}],["0f20",{"2":{"47":4}}],["0f0",{"2":{"1":5,"29":1,"30":1}}],["0e",{"2":{"37":2}}],["0816",{"2":{"57":1}}],["081738",{"2":{"36":1}}],["0863287",{"2":{"37":1}}],["086199",{"2":{"36":1}}],["0916e",{"2":{"38":1}}],["096",{"2":{"33":1}}],["0925",{"2":{"36":1}}],["092",{"2":{"27":1}}],["046",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["04",{"2":{"8":1}}],["05119825708061",{"2":{"64":1}}],["05",{"2":{"1":1}}],["028885",{"2":{"36":1}}],["0273",{"2":{"1":1}}],["029825f0",{"2":{"1":1}}],["034693196307",{"2":{"59":1}}],["03964",{"2":{"36":1}}],["030262",{"2":{"36":1}}],["0334e10",{"2":{"12":6}}],["03",{"2":{"1":2}}],["0785099",{"2":{"37":1}}],["0768",{"2":{"26":1}}],["076923f0",{"2":{"1":2}}],["0770929",{"2":{"4":1,"6":3,"7":1}}],["077084f0",{"2":{"1":1}}],["07",{"2":{"1":1}}],["00375e7",{"2":{"59":1,"60":1}}],["0037508342789244e7",{"2":{"59":2,"60":2}}],["0024086594514776e7",{"2":{"59":1,"60":1}}],["0019e7",{"2":{"59":1}}],["00135e",{"2":{"38":1}}],["001",{"2":{"37":1}}],["0094",{"2":{"26":1}}],["005fvlen",{"2":{"2":2}}],["005fdef",{"2":{"2":2}}],["007",{"2":{"1":1}}],["00097e7",{"2":{"60":1}}],["0001e7",{"2":{"60":1}}],["0001011187299494e7",{"2":{"60":2}}],["0001965729312722e7",{"2":{"59":1,"60":1}}],["00055e7",{"2":{"59":1}}],["000553955982158e7",{"2":{"59":1}}],["00000000000001",{"2":{"53":2,"59":1}}],["000",{"2":{"1":2}}],["00",{"2":{"1":12,"4":8,"6":8,"47":16}}],["0174532925199433",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["01154e6",{"2":{"1":4,"12":4,"63":4}}],["01t00",{"2":{"1":6,"4":4,"6":4,"47":4}}],["01",{"2":{"1":6,"4":4,"6":2,"47":10}}],["0",{"2":{"1":73,"2":24,"4":36,"6":108,"7":36,"12":79,"26":24,"27":11,"29":11,"30":26,"31":22,"34":7,"36":23,"37":37,"38":9,"40":11,"43":1,"44":8,"47":22,"49":1,"51":1,"52":13,"53":5,"57":54,"59":11,"60":10,"62":34,"63":43,"64":7}}],["kappa",{"2":{"37":2}}],["kingdom",{"2":{"33":1}}],["k",{"2":{"2":3,"47":2}}],["known",{"2":{"15":1}}],["know",{"2":{"1":3,"11":1,"28":1,"66":1}}],["keeps",{"2":{"1":1,"55":1}}],["keep",{"2":{"1":3,"2":2,"12":1,"59":1,"66":1}}],["keys",{"2":{"1":14,"2":4}}],["keyword",{"2":{"1":15,"2":6,"12":1,"35":1,"62":1,"63":1}}],["keywords",{"2":{"1":35,"2":12,"20":1,"41":1,"43":1}}],["key",{"2":{"1":2,"11":1}}],["kw",{"2":{"1":26,"2":6,"43":1,"45":1}}],["ucar",{"2":{"2":2,"47":1}}],["update",{"2":{"23":1,"31":1}}],["updating",{"2":{"1":1}}],["upper",{"2":{"1":13}}],["upper=",{"2":{"1":1}}],["uint16",{"2":{"44":3}}],["uint64",{"2":{"33":2}}],["uint32",{"2":{"1":1,"44":1}}],["uint8",{"2":{"1":2,"33":1}}],["url",{"2":{"1":6,"11":1,"47":2,"51":2}}],["unexported",{"2":{"41":1,"45":1}}],["unexpected",{"2":{"1":7}}],["unreleased",{"2":{"9":1}}],["until",{"2":{"8":1,"66":1}}],["units",{"2":{"47":4,"64":1}}],["unitrange",{"2":{"33":1}}],["unit",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"46":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["unidata",{"2":{"2":2,"47":1}}],["union",{"2":{"1":10,"2":8,"26":2,"27":1,"29":1,"31":2,"34":4,"37":2,"38":1,"40":1,"44":4,"47":2,"52":8,"53":4,"62":1,"63":1,"64":1}}],["unmasked",{"2":{"1":2}}],["unmixed",{"2":{"1":1}}],["underlies",{"2":{"66":1}}],["underlying",{"2":{"1":3,"2":1,"24":1,"43":1,"45":1}}],["under",{"2":{"55":1,"56":1,"64":1,"66":2}}],["underscores",{"2":{"2":1}}],["undefined",{"2":{"1":1}}],["unchanged",{"2":{"1":3}}],["unless",{"2":{"1":2}}],["unopened",{"2":{"1":1}}],["usable",{"2":{"55":1}}],["us",{"2":{"1":1,"66":1}}],["using",{"0":{"44":1,"52":1,"58":1},"1":{"59":1,"60":1},"2":{"1":29,"2":6,"4":2,"6":1,"8":1,"9":1,"10":1,"12":4,"14":1,"15":1,"18":1,"19":1,"20":1,"32":2,"33":2,"34":1,"37":2,"40":1,"46":1,"47":2,"50":2,"51":1,"52":3,"53":3,"57":4,"59":1,"60":2,"62":2,"63":2,"66":2}}],["usually",{"2":{"1":11,"2":5,"43":1,"56":1}}],["user",{"2":{"56":1}}],["users",{"2":{"2":1}}],["uses",{"2":{"1":3,"7":1,"13":1,"32":1,"37":1,"47":1,"55":1,"56":1}}],["used",{"2":{"1":101,"2":16,"7":1,"8":1,"15":2,"20":2,"28":1,"31":1,"33":1,"45":1,"49":1,"64":1}}],["use",{"2":{"1":50,"2":6,"8":2,"9":1,"10":1,"11":1,"12":1,"13":1,"15":1,"22":1,"25":1,"26":1,"27":1,"29":1,"35":1,"37":2,"38":1,"41":1,"45":1,"47":1,"55":1,"59":1,"62":2,"63":1,"65":2,"66":3}}],["usefull",{"2":{"1":2}}],["usefulnesss",{"2":{"1":1}}],["useful",{"2":{"1":10,"12":2,"24":1,"63":1}}],["=a",{"2":{"6":1}}],["===",{"2":{"1":1}}],["==",{"2":{"1":2,"62":1}}],["=>",{"2":{"1":16,"26":2,"27":1,"29":1,"30":1,"31":4,"37":3,"40":1,"47":18,"57":3,"59":3,"60":1,"62":1,"63":1}}],["=",{"2":{"1":142,"2":27,"4":6,"5":2,"6":7,"7":2,"8":3,"12":23,"20":1,"26":5,"27":5,"29":4,"30":2,"31":4,"33":1,"34":7,"35":3,"36":97,"37":14,"38":5,"40":6,"41":4,"43":20,"44":16,"45":1,"46":2,"47":10,"51":2,"52":13,"53":14,"57":25,"58":2,"59":13,"60":14,"62":14,"63":17,"64":8,"66":19}}],["vsimem",{"2":{"57":2,"59":3,"60":1}}],["vcov",{"2":{"37":1}}],["visualize",{"2":{"41":1}}],["via",{"2":{"2":2,"6":1,"52":1,"55":1,"62":1}}],["views",{"2":{"1":1}}],["view",{"2":{"1":4,"8":4,"63":1}}],["vlen",{"2":{"2":2}}],["vanilla",{"0":{"44":1}}],["various",{"2":{"20":1}}],["variations",{"2":{"11":1}}],["variable",{"2":{"2":2,"12":1,"63":1}}],["variables",{"0":{"34":1,"35":1},"2":{"1":1,"12":1,"15":1,"32":1,"35":1,"37":1,"63":1}}],["validation",{"2":{"37":1}}],["valid",{"2":{"2":2}}],["values",{"0":{"23":1},"2":{"1":83,"2":3,"8":3,"21":1,"22":1,"23":2,"29":1,"35":1,"43":1,"45":3,"49":1,"52":1,"61":4,"63":1}}],["value",{"0":{"7":1},"2":{"1":82,"2":20,"8":4,"12":2,"28":1,"31":1,"47":2,"53":1,"61":1,"63":1,"66":1}}],["val",{"2":{"1":2}}],["val=",{"2":{"1":1}}],["ve",{"2":{"64":1,"65":3}}],["vertical",{"2":{"7":1}}],["verbose",{"2":{"1":2}}],["version",{"2":{"1":2,"9":1}}],["versions",{"2":{"1":19,"12":1,"63":1}}],["very",{"2":{"1":7,"12":1,"18":1,"36":2,"45":1,"61":1}}],["vebose",{"2":{"1":6,"2":2}}],["vectors",{"2":{"1":1}}],["vector",{"2":{"1":18,"2":4,"33":2,"36":1,"43":2,"51":1}}],["2d",{"2":{"41":1,"45":1,"62":1}}],["239",{"2":{"36":1}}],["236",{"2":{"33":1}}],["23",{"2":{"26":1,"33":1,"36":2,"47":2,"59":12,"60":10}}],["23017e6",{"2":{"1":4,"12":4,"63":4}}],["261906",{"2":{"36":1}}],["269542",{"2":{"36":1}}],["267278",{"2":{"4":1,"6":3,"7":1}}],["26",{"2":{"4":2,"6":6,"7":2,"12":6,"36":4}}],["220706",{"2":{"4":1,"6":3,"7":1}}],["22",{"2":{"1":1,"26":2,"33":1,"36":2,"57":3,"59":4,"60":4}}],["27781",{"2":{"60":1}}],["27820",{"2":{"60":1}}],["272",{"2":{"36":1}}],["2727",{"2":{"1":1}}],["27",{"2":{"1":4,"4":2,"6":6,"7":2,"27":1,"36":1}}],["273",{"2":{"1":1}}],["271",{"2":{"1":1,"36":1}}],["287521031058559e6",{"2":{"60":1}}],["287447",{"2":{"4":1,"6":3,"7":1}}],["285",{"2":{"33":1}}],["2847",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["2889",{"2":{"1":1}}],["28",{"2":{"1":2,"4":2,"6":6,"7":2,"27":1,"36":3}}],["2911",{"2":{"57":1}}],["2955",{"2":{"26":1,"27":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["298",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["297448",{"2":{"4":1,"6":3,"7":1}}],["29",{"2":{"1":4,"4":2,"6":6,"7":2,"27":2,"36":3}}],["2499745684644309",{"2":{"59":2}}],["249185",{"2":{"4":1,"6":3,"7":1}}],["245",{"2":{"36":1}}],["24534",{"2":{"1":1}}],["244501",{"2":{"36":1}}],["243058",{"2":{"4":1,"6":3,"7":1}}],["243",{"2":{"1":1}}],["24",{"2":{"1":5,"57":2,"59":6,"60":5}}],["21st",{"2":{"66":1}}],["2160",{"2":{"57":1,"59":1}}],["2160×1080",{"2":{"26":1,"27":1,"29":1,"30":1,"31":2,"40":1,"52":5,"57":1,"59":1,"62":1}}],["213052",{"2":{"37":1}}],["218",{"2":{"36":1}}],["214",{"2":{"27":1}}],["21",{"2":{"1":4,"12":3,"33":1,"36":2,"57":3,"59":8,"60":8}}],["2501",{"2":{"59":1}}],["2592000000",{"2":{"47":1}}],["251",{"2":{"37":3}}],["258",{"2":{"1":1}}],["258×8",{"2":{"1":1}}],["257×229",{"2":{"63":1,"64":1}}],["257223563",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["257",{"2":{"1":1}}],["256",{"2":{"1":1,"2":6}}],["255",{"2":{"1":1}}],["254",{"2":{"1":1,"36":1}}],["253",{"2":{"1":1,"37":1}}],["252",{"2":{"1":1}}],["25",{"2":{"1":9,"4":8,"5":1,"6":18,"7":6,"8":2,"12":42,"34":3,"36":2,"38":4,"52":2,"57":7,"59":3,"60":3}}],["2",{"0":{"40":1},"2":{"1":11,"2":3,"6":2,"7":1,"12":4,"26":2,"27":4,"29":1,"30":1,"31":2,"33":1,"37":1,"38":4,"39":1,"40":5,"43":2,"44":7,"46":1,"49":1,"57":3,"59":12,"60":10,"62":1,"63":2,"64":1}}],["2090",{"2":{"66":1}}],["208333333333334",{"2":{"44":1}}],["20833333333333334",{"2":{"44":2}}],["208448",{"2":{"36":1}}],["204085",{"2":{"37":1}}],["204414",{"2":{"37":1}}],["204521",{"2":{"36":1}}],["20417f0",{"2":{"1":1}}],["2020",{"2":{"33":1}}],["2021",{"2":{"33":1}}],["2012",{"2":{"33":2}}],["2016",{"2":{"33":2}}],["2011",{"2":{"33":1}}],["2015",{"2":{"33":1}}],["205385",{"2":{"4":1,"6":3,"7":1}}],["2065",{"2":{"1":1}}],["2003",{"2":{"47":2}}],["2005",{"2":{"47":2}}],["2009",{"2":{"1":1}}],["2002",{"2":{"1":3,"4":3,"47":5}}],["2001",{"2":{"1":6,"4":3,"6":4,"7":1,"47":7}}],["20",{"2":{"1":9,"12":1,"34":1,"36":3,"49":2,"63":1}}],["gfdl",{"2":{"66":1}}],["gcm",{"2":{"66":10}}],["gcms",{"2":{"66":4}}],["gadm",{"2":{"50":1}}],["globe",{"2":{"62":1}}],["global",{"2":{"32":1,"52":1}}],["glm",{"2":{"37":8}}],["glmakie",{"2":{"10":1}}],["gbif",{"0":{"33":1},"2":{"32":1,"33":1,"34":1}}],["gbif2",{"2":{"1":2,"32":1,"33":5}}],["going",{"2":{"45":1}}],["go",{"2":{"12":1,"59":1,"60":1}}],["good",{"2":{"11":1}}],["google",{"2":{"11":1}}],["guaranteed",{"2":{"2":2}}],["guessed",{"2":{"2":3}}],["guessing",{"2":{"2":2}}],["gis",{"2":{"23":1}}],["giving",{"2":{"1":1}}],["given",{"2":{"1":1,"4":1,"57":1}}],["gives",{"2":{"1":6,"12":1,"63":1}}],["give",{"2":{"1":9,"61":1}}],["github",{"2":{"1":22,"12":1,"51":1,"63":1}}],["gpu",{"2":{"1":1,"24":1}}],["greenwich",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["great",{"2":{"11":1}}],["grow",{"2":{"1":2}}],["group3",{"2":{"1":2}}],["group2",{"2":{"1":2}}],["group1",{"2":{"1":2}}],["group=",{"2":{"1":2}}],["groups",{"2":{"1":2}}],["group",{"2":{"1":6}}],["gri",{"2":{"2":4}}],["grid=false",{"2":{"44":2,"57":2}}],["gridposition",{"2":{"2":1,"43":1,"45":1}}],["grid",{"2":{"1":2,"2":2,"12":2,"59":1,"64":1}}],["gridcell",{"2":{"1":1,"12":1,"63":1}}],["gribdatasets",{"2":{"10":1}}],["gribsource",{"2":{"1":2,"2":3}}],["grib",{"0":{"17":1},"2":{"1":2,"2":3,"10":1,"17":2}}],["grdsource",{"2":{"2":1}}],["grd",{"0":{"18":1},"2":{"1":2,"2":12,"10":1,"18":1}}],["g",{"2":{"1":13,"2":1,"4":1,"7":1,"8":2,"11":1,"22":1,"24":1,"45":1}}],["gdalwarp",{"2":{"1":4,"22":1,"55":1,"56":1}}],["gdals",{"2":{"1":2}}],["gdalsource",{"2":{"1":2,"2":3,"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"57":3,"59":3,"60":1,"62":1,"63":1}}],["gdal",{"0":{"14":1},"2":{"1":8,"2":15,"10":3,"14":1,"55":1,"56":1,"59":1}}],["gdalarray",{"2":{"1":1}}],["gt",{"2":{"1":26,"2":8}}],["getfutureprec",{"2":{"66":3}}],["gets",{"2":{"64":1}}],["getting",{"0":{"5":1}}],["getdriver",{"2":{"2":2}}],["getring",{"2":{"1":1}}],["getring`",{"2":{"1":1}}],["getraster",{"2":{"1":1,"20":1}}],["get",{"0":{"34":1},"2":{"1":9,"8":4,"11":1,"34":1,"47":1,"50":1,"61":1,"62":4,"63":1,"64":2,"65":1,"66":1}}],["getindex",{"2":{"1":10,"8":2}}],["geospatial",{"2":{"58":1}}],["geogcs",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["geographic",{"2":{"12":1,"63":1}}],["geoaxis",{"2":{"2":1,"43":1}}],["geomakie",{"2":{"2":1,"43":1}}],["geom",{"2":{"1":7}}],["geometric",{"2":{"1":1}}],["geometries",{"2":{"1":59,"21":3,"62":1,"64":1}}],["geometrycolumn",{"2":{"1":19}}],["geometry",{"2":{"1":32,"2":9,"33":1,"34":1,"36":20,"37":1,"62":2,"63":4,"64":1,"65":1}}],["geotiff",{"2":{"1":1,"4":1}}],["geointerface",{"2":{"1":18}}],["geoformattypes",{"2":{"1":7,"31":1}}],["geoformat",{"2":{"1":9,"31":1}}],["general",{"2":{"9":1,"64":1,"66":1}}],["generally",{"2":{"1":1,"14":1,"31":1,"55":1,"56":1}}],["generating",{"2":{"28":1,"32":1}}],["generator",{"2":{"1":1}}],["generates",{"2":{"4":1,"63":1}}],["generate",{"2":{"1":2}}],["generically",{"2":{"7":1}}],["generic",{"2":{"1":1,"47":1,"53":1,"66":1}}],["||",{"2":{"1":3}}],["|",{"2":{"1":2}}],["|>",{"2":{"1":9,"44":1,"47":2,"49":1,"66":2}}],["np",{"2":{"53":3}}],["nfolds",{"2":{"37":2}}],["ncdatasets",{"2":{"10":1,"15":1,"19":1,"47":1,"50":1}}],["ncdsource",{"2":{"1":2,"2":5,"47":2}}],["nc",{"2":{"2":4,"15":3,"47":2,"49":2,"53":1}}],["ntuple",{"2":{"2":3}}],["nuevo",{"2":{"1":1}}],["numbers",{"2":{"4":1}}],["number",{"2":{"1":3,"12":1,"13":1,"61":1,"63":1}}],["nvkelso",{"2":{"1":3,"51":1}}],["nz",{"2":{"1":6}}],["n",{"2":{"1":1,"2":5}}],["natively",{"2":{"18":1}}],["naturalearth",{"2":{"1":6,"62":3}}],["natural",{"2":{"1":5,"51":1}}],["na",{"2":{"2":3}}],["nansum",{"2":{"59":1,"60":1}}],["nanstatistics",{"2":{"57":1}}],["nanmaximum",{"2":{"57":2}}],["nanminimum",{"2":{"57":2}}],["nan",{"2":{"1":22,"2":6,"43":2,"57":63,"59":53,"60":63,"62":1,"66":1}}],["name=",{"2":{"15":1,"29":1}}],["nametuple",{"2":{"1":1}}],["names",{"2":{"1":6,"2":2,"7":1,"15":1,"37":1,"43":1}}],["named",{"2":{"1":1,"4":1}}],["namedtuple",{"2":{"1":14,"2":15,"36":1,"37":3}}],["name",{"2":{"1":28,"2":8,"15":1,"25":1,"29":2,"43":3,"47":6,"51":2,"52":1,"62":1}}],["nochecksum",{"2":{"2":2}}],["now",{"2":{"1":1,"12":1,"37":1,"47":2,"53":2,"59":1,"63":2,"64":1,"66":1}}],["nodataval",{"2":{"2":1}}],["nodata",{"2":{"1":9}}],["north",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["norway",{"2":{"1":3,"52":4,"53":11}}],["normally",{"2":{"1":4,"2":2}}],["non",{"2":{"1":14,"12":1,"49":1,"63":1}}],["nometadata",{"2":{"1":1}}],["no",{"2":{"1":27,"2":6}}],["notice",{"2":{"47":1}}],["note",{"2":{"1":14,"2":3,"8":1,"12":2,"23":1,"60":2,"64":2,"66":1}}],["nothing",{"2":{"1":22,"2":4,"37":1,"43":2}}],["not",{"2":{"1":113,"2":7,"11":1,"12":1,"15":1,"16":1,"17":1,"18":1,"19":1,"37":1,"40":1,"43":1,"45":1,"56":1,"61":2,"63":1,"65":2}}],["next",{"2":{"36":1,"37":1,"56":1,"66":1}}],["necessary",{"2":{"33":1,"57":1}}],["neighbour",{"2":{"1":1}}],["ne",{"2":{"1":3,"51":1}}],["newdocs",{"2":{"2":2}}],["newmissingval",{"2":{"1":2}}],["new",{"2":{"1":11,"28":1}}],["nested",{"2":{"1":13,"31":1}}],["needs",{"2":{"2":2}}],["needed",{"2":{"1":4,"16":1,"59":1}}],["need",{"2":{"1":6,"2":2,"10":1,"11":2,"12":1,"27":1,"29":1,"37":1,"43":1,"47":1,"55":1,"60":1,"61":1,"63":1,"65":1}}],["netcdf",{"0":{"15":1},"2":{"1":7,"2":14,"4":1,"7":1,"10":1,"15":3,"22":1,"47":2,"53":1}}],["nearer",{"2":{"63":1}}],["nearest",{"2":{"1":1}}],["nearly",{"2":{"11":1}}],["near",{"2":{"1":3,"7":1,"8":1,"47":2,"49":1,"57":1}}],["xlabel",{"2":{"2":1,"43":1,"44":1}}],["xs",{"2":{"1":8}}],["xdim",{"2":{"1":8,"2":3,"12":2,"43":1,"63":2}}],["x",{"2":{"1":69,"2":15,"4":4,"5":2,"6":6,"7":4,"8":6,"12":17,"15":1,"18":1,"23":1,"26":5,"27":2,"29":2,"30":2,"31":6,"34":7,"38":2,"40":2,"43":4,"44":7,"47":7,"49":1,"52":12,"53":7,"57":6,"59":6,"60":7,"62":2,"63":8,"64":2,"66":1}}],["x3c",{"2":{"1":14,"2":3}}],["ylabel",{"2":{"2":1,"43":1,"44":1}}],["year",{"2":{"33":1,"47":1}}],["year=",{"2":{"1":1}}],["yet",{"2":{"2":1,"16":1}}],["ydim",{"2":{"1":8,"2":4,"12":2,"43":2,"63":2}}],["y",{"2":{"1":17,"2":10,"4":4,"5":2,"6":6,"7":4,"8":2,"12":17,"15":1,"18":1,"23":1,"26":4,"27":2,"29":2,"30":2,"31":4,"34":7,"38":2,"40":2,"43":5,"44":7,"47":7,"49":2,"52":12,"53":7,"57":6,"59":6,"60":8,"62":2,"63":6,"64":2,"66":1}}],["your",{"2":{"1":3,"11":2,"12":1,"55":1,"63":2}}],["you",{"2":{"1":21,"2":6,"9":3,"10":2,"11":3,"12":8,"13":1,"28":2,"29":1,"31":1,"39":1,"41":2,"43":1,"45":1,"55":3,"56":1,"59":3,"60":2,"61":3,"62":1,"63":9,"64":1}}],["1×1080",{"2":{"26":1}}],["190",{"2":{"47":1}}],["194×161",{"2":{"44":5}}],["19851",{"2":{"37":1}}],["1984",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["19",{"2":{"36":2,"57":2}}],["199073",{"2":{"4":1,"6":3,"7":1}}],["197539",{"2":{"4":1,"6":3,"7":1}}],["192",{"2":{"1":1}}],["19279e6",{"2":{"1":4,"12":4,"63":4}}],["18512",{"2":{"59":1}}],["18547",{"2":{"59":1}}],["181",{"2":{"59":2}}],["182594",{"2":{"36":1}}],["189125",{"2":{"36":1}}],["18",{"2":{"26":2,"29":2,"30":2,"31":4,"36":2,"40":2,"57":6,"63":1,"64":1}}],["1837",{"2":{"1":1}}],["1865",{"2":{"1":1}}],["180×170×1",{"2":{"47":1}}],["180×170×24",{"2":{"47":1}}],["180",{"2":{"1":2,"26":8,"27":3,"29":3,"30":3,"31":6,"40":3,"52":2,"57":12,"59":6,"60":5,"62":3}}],["140398",{"2":{"37":1}}],["140",{"2":{"36":1}}],["146",{"2":{"36":1}}],["141",{"2":{"36":1}}],["149",{"2":{"36":2}}],["1424",{"2":{"57":1}}],["142",{"2":{"36":1}}],["143158931480214e13",{"2":{"64":1}}],["143",{"2":{"36":4}}],["147",{"2":{"33":2}}],["1478",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["148",{"2":{"33":6,"36":2}}],["14",{"2":{"1":2,"26":3,"29":3,"30":3,"31":6,"36":1,"40":3,"57":5}}],["145",{"2":{"1":1,"36":3}}],["1440×720",{"2":{"57":1,"59":2,"60":2}}],["1440",{"2":{"36":1,"57":2,"59":1,"60":4}}],["144",{"2":{"1":1}}],["163",{"2":{"62":1}}],["16t00",{"2":{"47":4}}],["1678",{"2":{"57":1}}],["167",{"2":{"38":2,"63":1,"64":1}}],["166666666666657",{"2":{"53":2}}],["166666666666668",{"2":{"34":1,"36":3,"38":1}}],["16666666666666",{"2":{"34":2,"38":2}}],["16666666666666666",{"2":{"26":3,"27":2,"29":2,"30":2,"31":4,"34":2,"38":2,"40":2,"52":4,"53":2,"57":3,"62":2,"63":2,"64":2}}],["1667",{"2":{"38":1,"64":1}}],["169252",{"2":{"36":1}}],["1622",{"2":{"1":1}}],["160",{"2":{"1":1,"44":1}}],["16",{"2":{"1":1,"12":3,"26":4,"29":4,"30":4,"31":8,"36":1,"40":4,"47":2,"57":8}}],["165",{"2":{"1":1}}],["1f0",{"2":{"1":1}}],["1730134537265886e7",{"2":{"59":1}}],["178",{"2":{"57":1,"60":1}}],["177",{"2":{"57":1}}],["177×119",{"2":{"53":5}}],["179",{"2":{"26":6,"27":6,"29":6,"30":6,"31":12,"40":6,"52":2,"57":14,"59":12,"60":9,"62":6}}],["17",{"2":{"1":6,"26":1,"29":1,"30":1,"31":2,"36":2,"40":1,"47":1,"57":4,"63":3,"64":3}}],["13371",{"2":{"37":1}}],["1336",{"2":{"36":1}}],["137678",{"2":{"36":1}}],["139",{"2":{"36":2}}],["1382",{"2":{"57":1}}],["138",{"2":{"34":3,"38":6}}],["13",{"2":{"1":2,"26":1,"29":1,"30":1,"31":2,"40":1,"44":2,"57":1}}],["130",{"2":{"1":1,"12":1,"63":1}}],["153",{"2":{"44":2}}],["153847f0",{"2":{"1":2}}],["151",{"2":{"36":1}}],["154",{"2":{"34":2,"38":7}}],["155",{"2":{"34":1}}],["15",{"2":{"1":7,"26":4,"29":4,"30":4,"31":8,"33":2,"36":3,"40":4,"57":9}}],["150573",{"2":{"36":1}}],["150",{"2":{"1":1,"36":1}}],["1263161695036696e7",{"2":{"59":1}}],["1287",{"2":{"1":1}}],["12",{"2":{"1":3,"8":2,"34":1,"36":2,"43":1,"47":2}}],["120",{"2":{"1":3,"2":1,"12":3,"63":3}}],["118",{"2":{"64":1}}],["113",{"2":{"44":2}}],["11",{"2":{"1":1,"12":3,"33":5,"47":2}}],["110",{"2":{"1":3,"2":1,"12":1,"63":1,"64":1}}],["11917e6",{"2":{"1":4,"12":4,"63":4}}],["108",{"2":{"64":1}}],["1080",{"2":{"57":1,"59":1}}],["101542",{"2":{"36":1}}],["101×90",{"2":{"34":5,"38":1}}],["109",{"2":{"27":1,"63":4,"64":5}}],["104756",{"2":{"4":1,"6":3,"7":1}}],["10m",{"2":{"1":6,"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"51":2,"57":1,"62":1,"63":1}}],["10",{"2":{"1":33,"2":5,"6":3,"12":5,"33":1,"44":3,"52":1,"57":2,"62":1,"63":5}}],["100mm",{"2":{"64":1}}],["1000",{"2":{"57":2}}],["100",{"2":{"1":27,"8":1,"12":2,"37":2,"44":1,"63":2}}],["1",{"2":{"1":43,"2":4,"4":7,"5":1,"6":10,"7":2,"8":1,"12":87,"26":4,"27":2,"29":2,"30":2,"31":4,"33":4,"34":2,"35":1,"37":5,"38":6,"40":4,"41":1,"43":2,"44":6,"47":8,"49":1,"53":2,"57":7,"59":10,"60":12,"62":2,"63":19,"66":3}}],["dp",{"2":{"53":1}}],["dpi=300",{"2":{"48":1}}],["d",{"0":{"40":1,"41":1},"2":{"39":1,"66":2}}],["df",{"2":{"35":2}}],["danger",{"2":{"60":1}}],["dark",{"2":{"44":1}}],["day",{"2":{"33":1}}],["datum",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["datsets",{"2":{"20":1}}],["date",{"2":{"47":1,"66":2}}],["date=datetime",{"2":{"1":2}}],["dates",{"2":{"1":10,"4":1,"20":1,"50":1,"52":1,"66":1}}],["datetime360day",{"2":{"47":12}}],["datetime",{"2":{"1":13,"4":7,"6":5,"7":1}}],["dataaspect",{"2":{"12":1,"40":1,"41":1,"62":1}}],["dataframe",{"2":{"1":5,"35":2}}],["dataframes",{"2":{"1":3,"35":1}}],["datasets",{"2":{"1":2,"20":1,"32":1,"58":1,"59":1,"66":1}}],["dataset",{"2":{"1":4,"2":4,"12":1,"52":1,"66":1}}],["data",{"0":{"13":1,"24":1,"47":1,"62":1,"63":1},"1":{"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"48":1,"49":1},"2":{"1":52,"2":3,"4":1,"7":1,"10":1,"13":1,"19":1,"20":3,"22":3,"24":4,"26":1,"32":3,"33":3,"37":7,"43":1,"44":1,"45":1,"47":2,"52":1,"55":2,"56":2,"60":3,"62":4,"63":4,"65":1,"66":6}}],["drive",{"2":{"11":1}}],["drivers",{"2":{"2":2}}],["drivername",{"2":{"2":2}}],["driver",{"2":{"2":12}}],["draws",{"2":{"2":1}}],["draw",{"2":{"2":2,"43":2}}],["drop",{"2":{"1":2,"11":1}}],["dropband",{"2":{"1":2}}],["dhekelia",{"2":{"1":1}}],["dstlookup",{"2":{"1":1}}],["dst",{"2":{"1":6,"2":4}}],["due",{"2":{"1":11}}],["during",{"2":{"1":3}}],["duplicate",{"2":{"1":4}}],["doing",{"2":{"64":1}}],["dof",{"2":{"37":1}}],["dot",{"2":{"26":1}}],["documentation",{"2":{"22":1}}],["docs",{"2":{"1":2,"19":1,"20":2}}],["down",{"2":{"1":2}}],["downloading",{"2":{"11":1}}],["downloads",{"2":{"1":6,"10":1,"11":1,"47":1,"50":1,"51":2}}],["download",{"0":{"51":1},"1":{"52":1,"53":1},"2":{"1":10,"10":1,"20":2,"33":1,"34":1,"47":2,"51":1}}],["don",{"2":{"1":1,"2":4,"31":1,"64":1}}],["done",{"2":{"1":3,"2":2,"6":1,"11":1,"57":1}}],["do",{"2":{"1":6,"2":5,"4":1,"10":1,"11":1,"26":1,"27":2,"28":1,"43":1,"44":1,"57":2,"61":2,"65":1,"66":3}}],["doesn",{"2":{"49":1,"59":1,"66":1}}],["does",{"2":{"1":6,"16":1,"56":1,"59":1}}],["degc",{"2":{"47":2}}],["degree",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"49":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["degrees",{"2":{"1":7}}],["deviance",{"2":{"37":1}}],["details",{"2":{"7":1}}],["determines",{"2":{"1":1}}],["determine",{"2":{"1":6}}],["detect",{"2":{"13":1}}],["detected",{"2":{"1":12,"2":6,"16":1}}],["detecting",{"2":{"1":1}}],["descriptions",{"2":{"22":1}}],["description",{"2":{"8":1,"21":1,"22":1,"23":1,"24":1}}],["designed",{"2":{"7":1}}],["desirable",{"2":{"1":3,"2":2}}],["destructively",{"2":{"2":6}}],["destination",{"2":{"1":1,"55":1}}],["dest",{"2":{"1":3}}],["denmark",{"2":{"1":2,"52":4,"53":4}}],["decline",{"2":{"1":2}}],["depending",{"2":{"1":2,"2":1,"12":1,"63":1}}],["depth",{"2":{"1":2,"22":1}}],["defining",{"2":{"66":1}}],["defines",{"2":{"7":1}}],["defined",{"2":{"1":1,"2":1,"12":1,"56":1,"60":1}}],["define",{"2":{"1":5,"2":2,"37":1,"53":1,"66":1}}],["defs",{"2":{"59":1}}],["deferred",{"2":{"8":1}}],["deflate",{"2":{"2":2}}],["deflatelevel",{"2":{"2":2}}],["defualts",{"2":{"1":2}}],["defaults",{"2":{"1":5,"2":2}}],["default",{"2":{"1":78,"2":22,"12":3,"14":1,"37":2,"43":1,"63":4}}],["defaulting",{"2":{"1":1}}],["dividing",{"2":{"61":1,"64":1}}],["divided",{"2":{"1":2,"37":1}}],["digits=4",{"2":{"57":1}}],["difficult",{"2":{"31":1}}],["difference",{"2":{"12":2}}],["differences",{"2":{"1":2}}],["differently",{"2":{"39":1}}],["different",{"2":{"1":4,"12":2,"15":1,"19":1,"22":3,"39":1,"58":1,"63":2,"66":3}}],["differnce",{"2":{"1":1}}],["directions",{"2":{"7":1}}],["directly",{"2":{"1":9,"2":1,"20":1,"26":1,"27":1,"55":1,"56":1}}],["directory",{"2":{"1":4,"2":2}}],["directories",{"2":{"1":1}}],["dir",{"2":{"1":4}}],["dictionary",{"2":{"2":2}}],["dict",{"2":{"1":5,"2":4,"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"47":2,"57":3,"59":3,"60":1,"62":1,"63":1}}],["disable",{"2":{"2":1}}],["disaggregate",{"2":{"0":2,"1":5,"22":2,"55":3}}],["distribution",{"0":{"32":1},"1":{"33":1,"34":1,"35":1,"36":1,"37":1,"38":1},"2":{"1":1,"32":1}}],["distance",{"2":{"1":4}}],["diskarrays",{"2":{"2":4}}],["disk",{"0":{"19":1,"49":1},"2":{"1":14,"2":3,"8":1,"19":1,"24":1,"26":1,"27":2,"47":2,"49":1,"53":1}}],["dimarray",{"2":{"2":1}}],["dimtuple",{"2":{"1":1}}],["dimz",{"2":{"1":2}}],["dim",{"2":{"1":2,"15":1,"66":2}}],["dims=ti",{"2":{"47":1}}],["dims=x",{"2":{"26":1}}],["dims=",{"2":{"1":2}}],["dims=band",{"2":{"1":1}}],["dims",{"2":{"1":22,"4":1,"6":3,"7":1,"12":4,"25":1,"26":2,"27":1,"29":1,"30":1,"31":2,"34":5,"38":1,"40":1,"44":5,"47":2,"52":10,"53":5,"57":3,"59":3,"60":2,"62":1,"63":2,"64":1,"66":1}}],["dimension",{"0":{"26":1},"2":{"1":56,"2":14,"7":2,"8":1,"14":1,"15":1,"22":2,"25":1,"26":1,"31":1,"43":8,"45":1,"47":2,"66":1}}],["dimensional",{"2":{"2":2,"18":1,"43":2,"45":1,"66":2}}],["dimensionalarray",{"2":{"1":1}}],["dimensionaldata",{"2":{"1":6,"4":1,"7":2,"8":1,"47":1,"49":1,"57":2,"59":1,"60":1,"66":2}}],["dimensions",{"0":{"5":1,"66":1},"2":{"1":45,"2":10,"4":2,"7":5,"8":1,"12":2,"15":3,"18":1,"23":1,"31":2,"43":2,"47":1,"49":1,"63":1,"66":5}}],["esm4",{"2":{"66":1}}],["especially",{"2":{"7":1,"61":1,"66":1}}],["emission",{"2":{"66":3}}],["empty",{"2":{"1":3}}],["economic",{"2":{"66":1}}],["ecology",{"2":{"20":1,"32":1}}],["equivalent",{"2":{"64":1}}],["equator",{"2":{"12":1,"63":3}}],["equal",{"2":{"1":1,"2":1,"12":1,"63":1,"64":1}}],["evaluate",{"2":{"37":2}}],["everything",{"2":{"2":2}}],["every",{"2":{"1":2,"47":1}}],["evenness",{"2":{"1":19,"44":2}}],["even",{"2":{"1":3,"2":7,"39":1,"40":1,"43":1}}],["efficient",{"2":{"41":1}}],["effort",{"2":{"11":1}}],["effect",{"2":{"1":3}}],["eltype",{"2":{"34":4,"44":4,"52":8,"53":4}}],["else",{"2":{"2":2}}],["elements",{"2":{"1":1,"2":1}}],["element",{"2":{"1":3,"2":2,"33":1,"36":1,"43":1}}],["elevation",{"2":{"1":1,"12":1,"63":1}}],["edu",{"2":{"2":2,"47":1}}],["etc",{"2":{"1":1}}],["errors",{"2":{"1":2,"11":1}}],["error",{"2":{"1":4,"11":1}}],["encompasses",{"2":{"63":1}}],["encodes",{"2":{"1":1,"12":1,"63":1}}],["enumerate",{"2":{"44":2,"57":6}}],["ensemble",{"0":{"37":1},"2":{"32":1,"37":7,"38":2}}],["ensure",{"2":{"2":1}}],["entries",{"2":{"47":2}}],["entry",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"57":3,"59":3,"60":1,"62":1,"63":1}}],["entire",{"2":{"1":2,"53":1}}],["environmental",{"2":{"20":1,"32":1}}],["enough",{"2":{"2":1}}],["end+1",{"2":{"57":2}}],["end",{"2":{"1":3,"2":1,"27":2,"34":2,"43":1,"44":2,"53":2,"57":4,"66":2}}],["ease",{"2":{"39":1}}],["easter",{"2":{"63":1}}],["east",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":2,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["eagerly",{"2":{"1":1}}],["earthenv",{"2":{"1":8,"44":2}}],["earth",{"2":{"1":7,"12":3,"51":1,"61":1,"63":2}}],["eachslice",{"2":{"66":1}}],["eachchunk",{"2":{"2":1}}],["each",{"2":{"1":26,"2":10,"12":6,"22":1,"43":1,"53":1,"61":1,"63":4,"64":1,"65":2,"66":4}}],["e",{"2":{"1":15,"2":2,"4":1,"7":1,"8":2,"11":1,"12":1,"22":1,"24":1,"43":1,"45":1}}],["eg",{"2":{"1":3}}],["epsg",{"2":{"1":8,"7":1,"12":7,"26":10,"27":5,"29":5,"30":5,"31":10,"34":5,"38":5,"40":5,"44":5,"47":4,"52":10,"53":5,"57":15,"58":1,"59":5,"60":5,"62":5,"63":6,"64":5}}],["either",{"2":{"1":3,"2":1}}],["exclude",{"2":{"35":1}}],["excluding",{"2":{"8":1}}],["excessive",{"2":{"1":7}}],["exact",{"2":{"11":1,"59":1}}],["exactly",{"2":{"8":1,"55":1}}],["examplemasked",{"2":{"66":2}}],["exampleprecip",{"2":{"66":1}}],["examplessps",{"2":{"66":1}}],["examples",{"2":{"4":1,"22":1,"47":1,"57":1}}],["example",{"2":{"1":44,"2":3,"10":1,"11":1,"12":1,"32":1,"37":1,"41":1,"47":1,"49":1,"50":1,"61":1,"63":1}}],["exists",{"2":{"2":8}}],["existing",{"2":{"1":5}}],["explicitly",{"2":{"12":1}}],["explicit",{"2":{"7":1,"47":2}}],["experience",{"2":{"1":1}}],["experimental",{"2":{"1":19,"12":1,"41":1,"63":1}}],["expected",{"2":{"1":6}}],["exported",{"0":{"1":1},"2":{"2":1}}],["extra",{"2":{"11":1}}],["extracted",{"2":{"1":4}}],["extracts",{"2":{"1":1}}],["extract",{"0":{"35":1},"2":{"0":1,"1":6,"2":2,"21":2,"32":1,"35":2,"36":1}}],["extrema",{"2":{"1":2}}],["ext",{"2":{"1":1,"2":2,"19":1}}],["extensive",{"2":{"12":1,"63":1}}],["extensions",{"0":{"10":1}}],["extension",{"2":{"1":2,"2":18,"36":1}}],["extents",{"2":{"1":21,"22":1}}],["extent",{"0":{"22":1},"2":{"1":49,"4":2,"6":6,"7":2,"12":8,"22":2,"26":4,"27":2,"29":2,"30":2,"31":4,"34":2,"38":2,"40":2,"44":2,"47":4,"52":4,"53":2,"57":6,"59":6,"60":4,"62":2,"63":4,"64":2}}],["extends",{"2":{"4":1}}],["extend",{"2":{"0":1,"1":8,"22":2}}],["lr",{"2":{"66":1}}],["l",{"2":{"44":4}}],["lq",{"2":{"37":2}}],["ll",{"2":{"12":4,"32":1,"62":1,"63":2,"66":2}}],["lscene",{"2":{"2":1,"43":1}}],["litres",{"2":{"66":2}}],["liter",{"2":{"64":1}}],["little",{"2":{"11":1,"19":1,"41":2,"60":1}}],["linrange",{"2":{"60":4}}],["linewidth=0",{"2":{"1":2,"53":1}}],["linearbinaryclassifier",{"2":{"37":4}}],["linear",{"2":{"1":1,"25":1}}],["linestrings",{"2":{"1":1}}],["lines",{"2":{"1":9,"51":1}}],["line",{"2":{"1":11}}],["limitations",{"2":{"56":1}}],["limited",{"2":{"45":1}}],["limit=300",{"2":{"33":1}}],["limit=5",{"2":{"1":1}}],["library",{"2":{"33":1,"56":1}}],["listed",{"2":{"8":1}}],["list",{"2":{"1":1}}],["likely",{"2":{"1":1,"12":1,"63":1}}],["like",{"2":{"1":19,"2":6,"4":1,"7":3,"12":3,"25":2,"26":1,"38":1,"39":1,"45":1,"55":2,"56":1,"59":1,"63":1,"66":2}}],["lt",{"2":{"1":22}}],["leverage",{"2":{"66":1}}],["level",{"2":{"1":1,"2":2}}],["least",{"2":{"64":1}}],["leave",{"2":{"1":2}}],["lets",{"2":{"53":1}}],["let",{"2":{"12":1,"38":1,"57":2,"58":1,"59":3,"61":1,"62":1,"63":2,"64":1}}],["left",{"2":{"2":1,"43":1,"62":1}}],["legend=false",{"2":{"1":1}}],["length",{"2":{"1":5,"2":1,"12":2,"43":1,"53":1,"64":1}}],["land",{"2":{"66":1}}],["lanczos",{"2":{"1":2,"57":1}}],["layout",{"2":{"44":2,"57":4}}],["layername",{"2":{"15":2}}],["layered",{"2":{"1":3,"2":1,"53":1}}],["layer",{"2":{"1":15,"2":3,"15":1,"29":1,"47":1,"53":1}}],["layersfrom",{"2":{"1":1}}],["layersfrom=band",{"2":{"1":2,"14":1}}],["layers",{"2":{"1":25,"2":4,"14":1,"15":4,"22":1,"27":1,"34":2,"44":5,"52":3,"53":1}}],["label",{"2":{"2":3,"43":3,"44":1,"47":1}}],["labels",{"2":{"1":1}}],["last",{"2":{"1":12}}],["largely",{"2":{"7":1}}],["largest",{"2":{"1":1,"63":1}}],["large",{"2":{"1":25,"45":2,"61":1}}],["larger",{"2":{"1":4}}],["lazy=false",{"2":{"2":1}}],["lazy=true",{"2":{"1":2,"2":1,"26":1}}],["lazy",{"2":{"1":10,"2":3,"8":1}}],["lazily",{"2":{"1":8,"2":1,"26":1,"53":1}}],["latest",{"2":{"9":1}}],["later",{"2":{"1":1}}],["latitude",{"2":{"1":1,"5":1,"7":1,"12":1,"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"49":1,"52":2,"53":1,"57":3,"59":1,"62":1,"63":2,"64":1}}],["latter",{"2":{"1":1}}],["lat",{"2":{"1":5,"4":2,"5":1,"12":1,"44":1,"47":1,"55":1,"63":1}}],["log",{"2":{"37":2}}],["logitlink",{"2":{"37":1}}],["look",{"2":{"60":1}}],["looks",{"2":{"12":1,"38":1,"59":1}}],["lookups",{"2":{"1":9,"2":2,"12":4,"55":1,"57":1,"59":1,"60":2,"63":1}}],["lookup",{"0":{"5":1},"2":{"1":18,"2":2,"5":2,"7":2,"55":2}}],["lot",{"2":{"2":2,"12":1,"53":1,"63":1}}],["loss",{"2":{"37":2}}],["lossless",{"2":{"1":1,"55":1}}],["lost",{"2":{"19":1}}],["loses",{"2":{"1":1}}],["lower",{"2":{"1":13,"66":1}}],["lower=",{"2":{"1":1}}],["low",{"2":{"1":7,"2":1,"43":1,"66":1}}],["locus",{"2":{"1":2,"59":1,"60":3}}],["location",{"2":{"1":1}}],["longest",{"2":{"45":1}}],["longitude",{"2":{"5":1,"7":1,"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"59":1,"62":1,"63":1,"64":1}}],["long",{"2":{"1":1,"12":1,"47":2,"55":1,"63":1}}],["lon",{"2":{"1":4,"4":2,"44":1,"47":1}}],["loads",{"2":{"47":1}}],["load",{"0":{"24":1,"33":1,"52":1},"2":{"1":14,"10":1,"13":1,"20":1,"32":1,"33":2,"37":1,"47":1,"52":2,"58":1}}],["loading",{"0":{"47":1},"1":{"48":1,"49":1},"2":{"1":5,"32":1,"45":1,"57":1,"62":1}}],["loaded",{"2":{"1":6,"12":1,"14":3,"15":2,"16":1,"17":1,"18":1,"19":1}}],["hm",{"2":{"57":4}}],["hm=nothing",{"2":{"57":2}}],["h5",{"2":{"15":1}}],["html",{"2":{"2":4}}],["https",{"2":{"1":3,"2":6,"47":1,"51":1}}],["hood",{"2":{"55":1,"56":1,"64":1}}],["hosting",{"2":{"11":1}}],["however",{"2":{"1":2,"55":1,"56":1}}],["how",{"0":{"9":1,"56":1},"2":{"1":3,"7":1,"11":1,"37":2,"45":1,"55":1,"59":1,"65":4,"66":2}}],["holding",{"2":{"2":1,"28":1}}],["holds",{"2":{"1":1,"2":3}}],["hold",{"2":{"1":6}}],["height=relative",{"2":{"43":1}}],["header",{"2":{"2":3}}],["heatmap",{"2":{"1":1,"2":4,"12":1,"39":1,"43":4,"44":1,"45":2,"57":2,"59":2,"60":3,"62":1,"63":2}}],["heterogeneity",{"2":{"1":1}}],["here",{"2":{"1":3,"2":1,"8":1,"12":4,"31":1,"41":1,"43":1,"47":1,"55":1,"58":1,"63":2,"64":1,"66":3}}],["historical",{"2":{"66":2}}],["history",{"2":{"47":2}}],["hidden",{"2":{"2":1}}],["hidedecorations",{"2":{"57":2}}],["hideydecorations",{"2":{"44":1}}],["hidexdecorations",{"2":{"44":1}}],["hide",{"2":{"1":9}}],["highlighted",{"2":{"62":1}}],["highlight",{"2":{"62":1}}],["high",{"2":{"1":8,"2":1,"8":1,"43":1,"45":1,"66":2}}],["happens",{"2":{"64":2}}],["had",{"2":{"28":1}}],["handling",{"2":{"1":1}}],["handled",{"2":{"1":1}}],["handle",{"2":{"1":3,"7":2,"52":1}}],["habitat",{"2":{"1":1}}],["habitatheterogeneity",{"2":{"1":7,"44":2}}],["having",{"2":{"1":3,"66":1}}],["have",{"2":{"1":15,"2":4,"7":1,"11":1,"12":4,"15":2,"18":1,"31":1,"47":1,"49":1,"61":1,"63":6,"64":1,"65":1,"66":5}}],["haschunks",{"2":{"2":1}}],["has",{"2":{"1":18,"2":4,"12":1,"19":1,"36":1,"41":1,"47":2,"55":1,"56":1,"63":1,"64":1}}],["hdf5",{"2":{"1":1,"2":1,"10":1,"15":1}}],["j",{"2":{"44":2,"57":4}}],["json3",{"2":{"33":2}}],["january",{"2":{"1":3,"43":1}}],["join",{"2":{"1":1,"22":1}}],["joined",{"2":{"1":2}}],["june",{"2":{"61":1,"62":1,"64":1,"66":1}}],["just",{"2":{"1":4,"2":2,"8":1,"11":2,"12":1,"26":1,"41":1,"62":1,"63":1,"66":1}}],["juliatotal",{"2":{"64":2}}],["juliatrim",{"2":{"1":1}}],["julianansum",{"2":{"59":1,"60":1}}],["julianorway",{"2":{"53":2}}],["julianp",{"2":{"53":1}}],["julianewstack",{"2":{"27":1}}],["juliadp",{"2":{"53":1}}],["juliadisaggregate",{"2":{"1":2}}],["juliaf",{"2":{"62":1}}],["juliafunction",{"2":{"53":1}}],["juliafig",{"2":{"40":1,"59":2,"60":2}}],["juliafilearray",{"2":{"2":1}}],["juliafilestack",{"2":{"2":1}}],["juliafiles",{"2":{"1":1}}],["juliawrite",{"2":{"49":1,"53":1}}],["juliawarp",{"2":{"1":1}}],["julialocus",{"2":{"59":1}}],["julialon",{"2":{"5":1}}],["julialayers",{"2":{"44":1}}],["juliaensemble",{"2":{"37":1}}],["juliaextract",{"2":{"1":1}}],["juliaextend",{"2":{"1":1}}],["juliaimport",{"2":{"37":1}}],["juliax",{"2":{"12":1,"60":1}}],["julia>",{"2":{"9":2,"60":1}}],["juliaopen",{"2":{"2":1,"27":1}}],["juliaopenstack",{"2":{"2":1}}],["juliazonal",{"2":{"1":1}}],["juliasinusoidal",{"2":{"59":2}}],["juliascandinavia",{"2":{"53":1}}],["juliasp",{"2":{"53":1}}],["juliashapes",{"2":{"52":1}}],["juliastack",{"2":{"41":1}}],["juliasuitability",{"2":{"38":1}}],["juliasdm",{"2":{"37":1}}],["julias",{"2":{"18":1}}],["juliaskipmissing",{"2":{"2":1}}],["juliaslice",{"2":{"1":1}}],["juliaset",{"2":{"31":1}}],["juliasetmappedcrs",{"2":{"1":1}}],["juliasetcrs",{"2":{"1":1}}],["juliaras",{"2":{"6":3,"7":1,"57":1,"58":1,"59":2,"60":1}}],["juliarasterdiskarray",{"2":{"2":1}}],["juliarasterize",{"2":{"1":2}}],["juliarasters",{"2":{"2":1,"43":1}}],["juliarasterstack",{"2":{"1":1}}],["juliarasterseries",{"2":{"1":2}}],["juliaraster",{"2":{"1":1}}],["juliarecords",{"2":{"33":1}}],["juliaread",{"2":{"2":2}}],["juliaresample",{"2":{"1":1}}],["juliareproject",{"2":{"1":2}}],["juliareplace",{"2":{"1":1,"30":1}}],["juliaprecip",{"2":{"64":1}}],["juliaprojected",{"2":{"1":1}}],["juliap",{"2":{"53":1}}],["juliaplot",{"2":{"38":1}}],["juliapkg>",{"2":{"9":1}}],["juliapoints",{"2":{"1":1}}],["juliacheckmem",{"2":{"2":1}}],["juliacropped",{"2":{"63":1}}],["juliacrop",{"2":{"1":1}}],["juliacrs",{"2":{"1":1}}],["juliacoverage",{"2":{"1":2}}],["juliaconvertlookup",{"2":{"1":1}}],["juliacombine",{"2":{"1":1}}],["juliaclassify",{"2":{"1":2}}],["juliacellarea",{"2":{"1":1,"12":1,"63":1}}],["juliab",{"2":{"29":1}}],["juliabad",{"2":{"64":1}}],["juliabase",{"2":{"2":4}}],["juliabanddim",{"2":{"1":1}}],["juliaband",{"2":{"1":1}}],["juliaboolmask",{"2":{"1":1}}],["juliausing",{"2":{"1":21,"2":1,"4":2,"8":1,"10":8,"12":4,"18":1,"20":1,"26":1,"31":1,"33":1,"35":2,"36":1,"37":1,"40":1,"44":1,"45":1,"46":1,"47":3,"48":1,"51":1,"52":1,"57":1,"62":1,"63":1,"66":1}}],["juliaavg",{"2":{"64":1}}],["juliaareas",{"2":{"63":1}}],["juliaall",{"2":{"62":1}}],["juliaa",{"2":{"27":1,"29":1,"34":1,"47":1,"49":1}}],["juliaabstractprojected",{"2":{"2":1}}],["juliaabstractrasterstack",{"2":{"1":1}}],["juliaabstractrasterseries",{"2":{"1":1}}],["juliaabstractraster",{"2":{"1":1}}],["juliaaggregate",{"2":{"1":2}}],["juliamethod",{"2":{"57":2}}],["juliamethods",{"2":{"57":1}}],["juliamean",{"2":{"26":1}}],["juliamosaic",{"2":{"1":2}}],["juliamodify",{"2":{"1":1}}],["juliamissingval",{"2":{"1":1}}],["juliamissingmask",{"2":{"1":1}}],["juliamakie",{"2":{"41":1,"42":1,"43":2}}],["juliamasked",{"2":{"63":1}}],["juliamask",{"2":{"1":2,"52":1}}],["juliamappedindex",{"2":{"1":1}}],["juliamappedcrs",{"2":{"1":1}}],["juliamappedbounds",{"2":{"1":1}}],["juliamapped",{"2":{"1":1}}],["juliajulia>",{"2":{"1":2,"9":1,"12":3,"57":2,"60":2}}],["juliagdalarray",{"2":{"1":1}}],["julia",{"2":{"1":1,"2":2,"4":1,"9":2,"10":1,"23":1,"25":1,"34":1,"44":1}}],["jl",{"0":{"9":1,"20":1,"52":1,"53":1},"2":{"1":45,"2":4,"4":2,"7":1,"8":1,"9":2,"11":3,"12":2,"13":1,"14":1,"15":1,"16":1,"17":1,"19":2,"20":3,"31":1,"32":2,"33":1,"37":3,"43":1,"45":3,"47":2,"49":2,"50":1,"52":1,"53":1,"55":1,"62":2,"66":1}}],["ipsl",{"2":{"66":1}}],["image",{"2":{"44":1}}],["imola",{"2":{"1":1}}],["implemented",{"2":{"1":1,"17":1,"19":1}}],["implementation",{"2":{"1":2}}],["implementations",{"2":{"1":1}}],["improve",{"2":{"2":2}}],["improvement",{"2":{"1":1}}],["improved",{"2":{"1":3,"2":2}}],["important",{"2":{"64":1}}],["import",{"2":{"1":1,"37":1,"62":1}}],["irregularly",{"2":{"59":1}}],["irregular",{"2":{"1":3}}],["ignored",{"2":{"1":3,"2":1}}],["ignore",{"2":{"1":8,"2":2}}],["i",{"2":{"1":2,"2":2,"12":2,"43":3,"44":6,"53":1,"57":8}}],["ie",{"2":{"1":1}}],["if",{"2":{"1":85,"2":37,"5":2,"9":1,"11":1,"12":4,"24":1,"26":1,"28":1,"29":1,"34":1,"43":7,"45":1,"47":1,"53":1,"55":2,"59":1,"63":2,"64":2}}],["identically",{"2":{"1":1}}],["identical",{"2":{"1":4}}],["initial",{"2":{"61":1}}],["inaccurate",{"2":{"12":1}}],["invoke",{"2":{"45":1}}],["involves",{"2":{"11":1}}],["invert",{"2":{"1":8}}],["info",{"2":{"8":1,"23":1}}],["information",{"2":{"1":1,"32":1}}],["indices",{"2":{"6":1,"8":2,"47":1}}],["indicates",{"2":{"2":1,"43":1}}],["individually",{"2":{"2":2}}],["individual",{"2":{"2":1,"53":1}}],["indonesian",{"2":{"1":1}}],["indonesia",{"2":{"1":7}}],["independently",{"2":{"1":1}}],["independent",{"2":{"1":2}}],["indexing",{"2":{"27":1}}],["indexed",{"2":{"1":3,"2":1,"4":1,"26":1}}],["index",{"0":{"0":1,"6":1},"2":{"1":19,"2":5,"6":1,"7":1,"8":4,"12":2,"47":1}}],["input",{"2":{"1":1,"12":1,"43":2,"56":1,"63":1,"66":1}}],["inputs",{"2":{"1":1}}],["install",{"0":{"4":1,"9":1},"2":{"10":1}}],["instead",{"2":{"1":4,"2":1,"31":1,"45":1,"47":2,"56":1}}],["insertcols",{"2":{"1":1}}],["inside",{"2":{"1":19}}],["including",{"2":{"1":4}}],["includes",{"2":{"10":1,"53":1}}],["included",{"2":{"1":4,"53":1}}],["include",{"2":{"1":10,"2":2,"11":1}}],["increase",{"2":{"1":1}}],["increases",{"2":{"1":2}}],["incorrectly",{"2":{"28":1}}],["incorrect",{"2":{"1":8,"2":2,"12":1,"63":1}}],["int16",{"2":{"52":2,"53":1,"62":1,"63":1}}],["int64",{"2":{"4":2,"5":1,"6":6,"7":2,"12":7,"33":4}}],["into",{"2":{"1":14,"11":1,"20":1,"22":1,"23":1,"37":1,"53":1,"61":1,"63":1,"66":1}}],["integrates",{"2":{"37":1}}],["integrated",{"2":{"20":1}}],["integration",{"0":{"20":1}}],["integer",{"2":{"1":2,"2":1}}],["integers",{"2":{"1":1}}],["interested",{"2":{"66":1}}],["interesting",{"2":{"64":1}}],["internet",{"2":{"64":1}}],["internal",{"0":{"2":1},"2":{"1":2,"2":3}}],["interpreted",{"2":{"41":1}}],["interpolation",{"2":{"1":1,"55":1}}],["interface",{"2":{"32":1,"41":1}}],["intervalsets",{"2":{"1":1}}],["intervals",{"2":{"1":3,"12":11,"26":4,"27":2,"29":2,"30":2,"31":4,"34":2,"38":2,"40":2,"44":2,"47":6,"52":4,"53":3,"57":6,"59":6,"60":5,"62":2,"63":4,"64":2}}],["interval",{"2":{"1":3,"6":1,"8":1,"12":1,"47":2}}],["int",{"2":{"1":35,"2":9}}],["in",{"0":{"39":1,"40":1,"41":1},"2":{"1":188,"2":16,"8":2,"9":2,"10":1,"11":1,"12":14,"15":2,"16":1,"19":2,"20":1,"22":1,"23":2,"24":1,"27":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":2,"39":1,"41":3,"43":1,"44":4,"45":1,"47":5,"49":1,"50":1,"53":1,"56":1,"57":10,"58":1,"59":2,"62":2,"63":12,"64":4,"65":2,"66":5}}],["inherit",{"2":{"1":1}}],["isa",{"2":{"34":1}}],["issue",{"2":{"11":3}}],["issues",{"2":{"1":19,"11":2,"12":1,"63":1}}],["islands",{"2":{"1":6,"53":1,"63":1}}],["island",{"2":{"1":2}}],["isfile",{"2":{"1":3}}],["is",{"0":{"55":1},"2":{"1":234,"2":33,"4":1,"5":2,"6":1,"7":3,"8":2,"9":1,"12":8,"14":1,"15":2,"17":1,"20":1,"24":1,"26":2,"31":1,"33":2,"34":1,"36":1,"37":1,"39":1,"40":2,"41":2,"43":2,"45":3,"49":1,"53":1,"55":8,"56":3,"57":1,"59":1,"61":2,"63":8,"64":5,"65":1,"66":5}}],["itr",{"2":{"2":1}}],["iteratively",{"2":{"1":1}}],["iterator",{"2":{"1":2}}],["iterable",{"2":{"1":7,"2":1}}],["iterables",{"2":{"1":1}}],["it",{"2":{"1":55,"2":25,"11":6,"12":5,"24":1,"31":1,"32":2,"41":1,"43":1,"45":1,"47":5,"53":1,"55":3,"56":3,"61":1,"63":4,"64":4}}],["itself",{"2":{"1":1}}],["its",{"2":{"1":2,"2":2,"10":1,"11":1,"43":1,"61":1}}],["wgs",{"2":{"26":6,"27":3,"29":3,"30":3,"31":6,"34":3,"38":3,"40":3,"44":3,"52":6,"53":3,"57":9,"62":3,"63":3,"64":3}}],["www",{"2":{"2":2,"47":1}}],["wc2",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"57":1,"62":1,"63":1}}],["wc",{"2":{"1":10}}],["wrong",{"2":{"2":1}}],["writing",{"0":{"19":1},"2":{"1":7,"2":6,"24":1}}],["written",{"2":{"1":9,"2":4,"19":2}}],["writes",{"2":{"2":2}}],["write=false",{"2":{"2":1}}],["write=true",{"2":{"1":2,"2":1,"27":1}}],["write",{"0":{"24":1,"49":1},"2":{"1":14,"2":24,"16":1,"17":1,"19":2,"24":2,"27":1,"35":2,"49":1,"53":3}}],["wrapping",{"2":{"2":4,"5":1}}],["wrapped",{"2":{"1":1,"2":1}}],["wrapper",{"2":{"1":2,"2":3}}],["wraper",{"2":{"1":1}}],["wrap",{"2":{"1":1}}],["worst",{"2":{"1":1}}],["world",{"2":{"1":1,"62":1}}],["worldclim",{"2":{"1":21,"8":1,"10":1,"20":1,"26":3,"27":1,"29":2,"30":1,"31":2,"32":1,"34":1,"40":2,"41":1,"43":2,"45":1,"46":1,"52":2,"57":2,"58":1,"62":3,"63":1,"66":3}}],["workflow",{"0":{"32":1},"1":{"33":1,"34":1,"35":1,"36":1,"37":1,"38":1},"2":{"32":1,"64":1}}],["works",{"0":{"56":1},"2":{"26":1,"31":1,"39":1}}],["working",{"2":{"2":1,"11":1,"12":1,"63":1}}],["work",{"2":{"1":7,"2":2,"7":1,"8":1,"11":1,"16":1,"23":1,"25":1,"40":1,"53":1,"59":1,"66":2}}],["would",{"2":{"1":2,"26":1,"64":1,"66":2}}],["way",{"2":{"1":3,"2":1,"8":1,"41":1,"45":1}}],["warned",{"2":{"1":1,"12":1,"63":1}}],["warning",{"2":{"1":21,"12":1,"41":1,"60":1,"63":1}}],["warping",{"2":{"1":2}}],["warped",{"2":{"1":2}}],["warp",{"2":{"0":1,"1":8,"22":1,"55":3}}],["want",{"2":{"1":3,"9":1,"12":2,"59":1,"61":1,"63":3}}],["was",{"2":{"1":2,"61":1}}],["well",{"2":{"63":1,"66":1}}],["wellknowntext",{"2":{"1":1}}],["welcome",{"2":{"55":1,"59":1}}],["were",{"2":{"19":1,"26":1}}],["weight",{"2":{"61":1}}],["weights=cellarea",{"2":{"2":1}}],["weightstype",{"2":{"2":1}}],["weights",{"2":{"2":4}}],["weighted",{"2":{"1":2,"2":2}}],["web",{"2":{"2":2,"11":1,"55":1}}],["wether",{"2":{"1":3}}],["we",{"2":{"1":11,"2":5,"11":7,"12":10,"26":1,"27":2,"31":2,"32":1,"37":3,"41":1,"45":1,"47":4,"49":1,"50":1,"52":2,"53":2,"55":1,"58":1,"60":1,"62":2,"63":8,"64":7,"65":4,"66":15}}],["wildly",{"2":{"12":1}}],["will",{"2":{"1":120,"2":20,"4":1,"7":1,"10":1,"12":3,"13":1,"15":1,"16":1,"26":1,"27":1,"29":1,"31":3,"34":1,"37":2,"45":5,"47":2,"50":1,"53":2,"55":1,"58":2,"61":1,"63":3,"64":1,"66":8}}],["width=5",{"2":{"43":1}}],["width",{"2":{"2":1,"43":1,"44":5}}],["wish",{"2":{"2":1}}],["windowed",{"2":{"1":1}}],["wind",{"2":{"1":2,"52":3,"53":3}}],["witih",{"2":{"1":1}}],["within",{"2":{"8":1,"65":1}}],["with=poly",{"2":{"52":1}}],["with=maskfile",{"2":{"2":1}}],["with=country",{"2":{"1":2}}],["with=wc",{"2":{"1":2}}],["without",{"2":{"1":6,"11":2,"15":1}}],["with",{"0":{"43":1,"53":1,"58":1},"1":{"59":1,"60":1},"2":{"1":84,"2":20,"4":1,"7":4,"8":1,"11":2,"12":1,"16":1,"17":1,"19":2,"20":1,"26":2,"27":1,"29":1,"30":1,"31":3,"35":1,"37":3,"39":1,"40":1,"43":1,"44":1,"45":2,"47":4,"50":1,"52":1,"53":3,"57":7,"59":4,"60":1,"62":1,"63":5,"66":4}}],["why",{"2":{"64":1}}],["what",{"0":{"55":1},"2":{"12":2,"37":1,"38":1,"55":1,"64":1}}],["whatever",{"2":{"1":1,"11":1}}],["whose",{"2":{"2":1,"43":1}}],["whole",{"2":{"1":7}}],["whether",{"2":{"1":9,"2":3,"12":1,"43":1,"63":2}}],["wherever",{"2":{"1":2}}],["where",{"2":{"1":54,"2":1,"7":2,"8":2,"12":2,"16":1,"19":1,"53":1,"55":1,"60":1,"61":1,"63":1}}],["when",{"2":{"1":69,"2":5,"11":1,"26":2,"27":2,"49":1,"53":1,"59":1,"64":1,"65":1}}],["while",{"2":{"1":1}}],["which",{"2":{"1":31,"2":6,"10":1,"12":3,"13":1,"14":1,"18":1,"27":1,"31":1,"32":1,"41":3,"43":3,"45":1,"47":1,"53":1,"55":2,"59":1,"63":1,"64":1,"66":4}}],["text",{"2":{"41":1}}],["tested",{"2":{"56":1}}],["test",{"2":{"37":3,"58":1}}],["temperatures",{"2":{"47":1}}],["temperature",{"2":{"29":2,"47":4,"49":1}}],["template",{"2":{"11":2}}],["tempname",{"2":{"1":1}}],["tempfile",{"2":{"1":4}}],["tempory",{"2":{"1":1}}],["temp=",{"2":{"1":1}}],["temp",{"2":{"1":2}}],["typing",{"0":{"4":1}}],["typically",{"2":{"2":1}}],["typename",{"2":{"2":2}}],["types",{"2":{"2":3,"11":1,"37":1,"53":1,"56":2,"60":1}}],["type",{"2":{"1":9,"2":12,"16":1,"19":1,"43":3,"66":1}}],["two",{"2":{"1":2,"8":1,"45":1,"66":1}}],["twice",{"2":{"1":2}}],["tmp",{"2":{"57":2,"59":3,"60":1}}],["tmax",{"2":{"1":5,"52":3,"53":3}}],["tmin",{"2":{"1":4,"52":3,"53":3}}],["t",{"2":{"1":1,"2":5,"31":1,"47":2,"49":1,"55":2,"59":1,"64":1,"66":1}}],["target",{"2":{"1":1}}],["tavg",{"2":{"1":3,"20":1}}],["tabular",{"2":{"1":1}}],["table",{"0":{"21":1},"2":{"1":16,"33":1,"34":1,"37":1}}],["tables",{"2":{"1":17}}],["take",{"2":{"2":1,"8":1,"11":1,"25":1,"43":1,"47":1,"53":1,"60":1}}],["takes",{"2":{"1":2,"66":1}}],["taken",{"2":{"1":4}}],["taking",{"2":{"1":3,"14":1}}],["tutorial",{"2":{"65":1}}],["turn",{"2":{"1":2}}],["tuples",{"2":{"1":3}}],["tuple",{"2":{"1":72,"2":14,"33":2,"36":1,"37":2}}],["tip",{"2":{"59":1}}],["tickalign",{"2":{"44":4}}],["tickalign=1",{"2":{"44":1}}],["ticks=false",{"2":{"44":2}}],["ticksize",{"2":{"44":5}}],["tiled",{"2":{"41":1,"45":1}}],["tightly",{"2":{"20":1}}],["ti=at",{"2":{"7":1}}],["ti=1",{"2":{"6":1,"47":1}}],["titlefont=",{"2":{"57":2}}],["title=",{"2":{"57":2}}],["titles",{"2":{"2":1,"43":1}}],["title",{"2":{"2":1,"43":1,"44":1,"63":1}}],["ti",{"2":{"1":7,"4":6,"6":4,"7":1,"15":1,"26":1,"47":5,"49":1}}],["tif",{"2":{"1":8,"14":2,"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"53":6,"57":1,"62":1,"63":1}}],["tifs",{"2":{"1":1}}],["tiff",{"2":{"1":2,"2":4,"14":1}}],["timespan",{"2":{"47":1}}],["time",{"0":{"26":1},"2":{"1":4,"4":1,"6":1,"7":1,"11":1,"26":1,"34":1,"41":1,"47":4,"53":1}}],["track",{"2":{"66":1}}],["trace",{"2":{"11":1}}],["trained",{"2":{"37":1}}],["train",{"2":{"37":2}}],["transect",{"2":{"49":1}}],["transparent",{"2":{"2":2,"43":2,"44":2}}],["transforms",{"2":{"10":1}}],["transforming",{"2":{"1":1,"12":1,"63":1}}],["transformations",{"2":{"10":1,"58":1}}],["transformation",{"2":{"1":3,"2":2,"12":1}}],["transferred",{"2":{"1":1}}],["tr",{"2":{"1":2}}],["treated",{"2":{"1":7,"7":1,"41":1}}],["trigger",{"2":{"11":1}}],["triggers",{"2":{"1":1,"11":1}}],["trims",{"2":{"22":1}}],["trimming",{"2":{"1":1}}],["trimmed",{"2":{"1":3,"44":1}}],["trim",{"2":{"0":1,"1":13,"22":1,"44":2,"52":7,"53":1}}],["try",{"2":{"1":1,"12":1,"31":1,"57":1}}],["true",{"2":{"1":46,"2":19,"12":1,"33":1,"35":1,"36":1,"37":3,"43":1,"63":1}}],["towards",{"2":{"63":1}}],["tos",{"2":{"47":5,"48":1,"49":3}}],["tools",{"2":{"66":1}}],["too",{"2":{"37":1}}],["toy",{"2":{"4":1}}],["top",{"2":{"2":1,"43":1}}],["touch",{"2":{"1":2}}],["touches=false",{"2":{"1":1}}],["touches",{"2":{"1":15}}],["together",{"2":{"1":1,"50":1}}],["tolerances",{"2":{"1":2}}],["tolerance",{"2":{"1":3}}],["to=ref",{"2":{"59":1}}],["to=rnge",{"2":{"1":1}}],["to=b",{"2":{"1":1}}],["to=first",{"2":{"1":1}}],["to=awap",{"2":{"1":2}}],["to=shp",{"2":{"1":1}}],["to=nz",{"2":{"1":1}}],["total",{"2":{"1":2,"59":1,"60":1,"61":1,"64":8,"66":4}}],["to",{"0":{"9":1,"19":1,"24":1,"49":1},"2":{"1":366,"2":67,"4":2,"7":4,"8":4,"9":1,"10":2,"11":5,"12":11,"13":2,"15":1,"19":2,"20":2,"22":5,"24":5,"26":1,"27":5,"28":1,"29":1,"31":6,"32":3,"33":3,"34":1,"35":3,"36":2,"37":5,"38":1,"39":1,"41":1,"43":8,"44":1,"45":4,"47":4,"49":1,"50":1,"53":5,"55":4,"56":3,"57":2,"59":4,"60":2,"61":5,"62":3,"63":10,"64":10,"65":7,"66":11}}],["things",{"2":{"2":1,"56":1,"59":1}}],["third",{"2":{"1":2,"2":1,"43":1,"47":1}}],["this",{"2":{"1":70,"2":14,"4":2,"11":1,"12":10,"27":1,"31":1,"32":1,"34":2,"36":1,"37":2,"40":1,"41":2,"43":4,"45":1,"47":1,"50":1,"55":2,"56":2,"59":4,"60":2,"61":4,"63":8,"64":7,"65":1,"66":5}}],["three",{"2":{"11":1}}],["thread",{"2":{"1":4}}],["threadsafe=true",{"2":{"1":1}}],["threadsafe",{"2":{"1":7}}],["threading",{"2":{"1":8}}],["threaded=false",{"2":{"1":1}}],["threaded=true",{"2":{"1":1}}],["threaded",{"2":{"1":29}}],["through",{"2":{"1":1,"2":1,"22":1}}],["than",{"2":{"1":7,"19":1,"39":1,"47":1,"63":1,"66":2}}],["that",{"0":{"22":1,"23":1},"2":{"1":60,"2":11,"4":1,"11":6,"12":7,"15":1,"19":1,"20":1,"23":1,"25":1,"28":1,"31":2,"36":1,"38":1,"41":1,"43":1,"47":1,"53":1,"55":1,"56":2,"59":1,"60":3,"61":3,"63":9,"64":5,"65":3,"66":6}}],["then",{"2":{"1":1,"2":1,"4":1,"11":2,"26":1,"29":1,"35":1,"43":1,"47":1,"50":1,"52":2,"61":1,"62":1,"64":1,"66":3}}],["theme",{"0":{"42":1},"1":{"43":1,"44":1},"2":{"41":3,"42":1,"43":4,"44":2,"57":4}}],["theming",{"2":{"41":1}}],["themselves",{"2":{"2":1}}],["them",{"2":{"1":4,"2":1,"7":1,"11":1,"35":1,"53":1,"56":1,"58":1}}],["there",{"2":{"1":4,"2":1,"11":2,"53":1}}],["these",{"2":{"1":13,"2":2,"7":1,"12":1,"14":1,"23":1,"43":1,"53":2,"55":2,"66":2}}],["their",{"2":{"1":1,"52":1}}],["they",{"2":{"1":8,"2":1,"7":1,"11":1,"18":2,"19":2,"55":1}}],["the",{"0":{"4":1,"5":1,"22":1,"26":1,"51":1,"62":1,"63":1,"64":1},"1":{"52":1,"53":1},"2":{"1":571,"2":140,"4":2,"6":1,"7":4,"8":13,"9":5,"10":1,"11":14,"12":40,"14":2,"15":3,"16":3,"17":1,"19":1,"20":4,"22":4,"24":2,"25":1,"26":2,"27":4,"28":2,"29":3,"31":4,"32":2,"33":3,"34":4,"35":2,"36":2,"37":10,"38":1,"39":1,"41":1,"43":42,"44":2,"45":7,"47":10,"49":3,"50":2,"52":2,"53":6,"55":17,"56":4,"57":2,"59":6,"60":4,"61":20,"62":10,"63":41,"64":13,"65":12,"66":23}}],["ocean",{"2":{"47":1,"49":1}}],["occurs",{"2":{"27":1}}],["occurrences",{"2":{"32":1,"33":1}}],["occurrence",{"0":{"35":1},"2":{"1":3,"33":3,"34":1,"37":1}}],["occur",{"2":{"1":26,"12":1,"63":1}}],["o1",{"2":{"47":2}}],["o",{"2":{"27":2}}],["omitted",{"2":{"1":1,"33":1}}],["obtain",{"2":{"1":1,"45":1}}],["observable",{"2":{"43":2}}],["observables",{"0":{"43":1}}],["observation",{"2":{"1":1}}],["obs",{"2":{"1":2,"43":3}}],["obj",{"2":{"1":10}}],["object",{"0":{"8":1,"22":1,"28":1},"1":{"29":1,"30":1,"31":1},"2":{"1":43,"2":10,"8":1,"21":1,"22":4,"23":2,"28":2,"31":1,"33":1,"37":2,"49":1,"66":2}}],["objects",{"0":{"23":1},"2":{"1":18,"2":6,"8":2,"22":2,"24":3,"31":1,"47":2}}],["our",{"2":{"1":1,"11":1,"37":1,"47":1,"58":1,"64":1,"66":3}}],["outside",{"2":{"1":2,"63":1}}],["outputs",{"2":{"66":1}}],["output",{"2":{"1":30,"2":1,"4":1,"12":1,"36":1,"63":1}}],["out",{"2":{"1":7,"43":1,"44":1,"53":1,"66":1}}],["op",{"2":{"1":5}}],["optionally",{"2":{"1":1,"2":1}}],["options",{"2":{"1":1,"2":6,"7":1,"57":1}}],["optimisations",{"2":{"1":3}}],["opbject",{"2":{"1":1}}],["operation",{"2":{"1":10,"2":1,"55":1}}],["operations",{"0":{"21":1,"25":1},"1":{"26":1,"27":1,"28":1,"29":1,"30":1,"31":1},"2":{"1":7,"2":1}}],["opens",{"2":{"2":1}}],["openstack",{"2":{"0":1,"2":3}}],["open",{"2":{"1":5,"2":11,"24":2,"27":1}}],["openinterval",{"2":{"1":1}}],["opened",{"2":{"1":3,"2":3}}],["otherwise",{"2":{"1":11,"15":1}}],["others=0",{"2":{"1":2}}],["others=nothing",{"2":{"1":1}}],["others",{"2":{"1":9}}],["other",{"2":{"1":22,"2":8,"7":1,"8":1,"11":1,"23":1,"41":1,"47":2,"53":1,"55":1,"57":1}}],["overridden",{"2":{"2":1}}],["overlap",{"2":{"1":2,"53":1}}],["overlapping",{"2":{"1":2}}],["overhead",{"2":{"1":6,"2":4}}],["over",{"0":{"26":1},"2":{"1":13,"2":1,"26":2,"27":1,"47":1,"53":1,"61":3,"64":2}}],["ones",{"2":{"12":1}}],["one",{"2":{"1":11,"2":5,"12":1,"31":2,"47":3}}],["on",{"2":{"1":26,"2":6,"7":1,"8":1,"11":3,"12":6,"20":1,"22":1,"24":1,"31":1,"34":1,"43":2,"45":3,"47":2,"55":1,"58":1,"62":1,"63":4,"66":2}}],["only",{"2":{"1":32,"2":5,"26":1,"27":1,"31":1,"45":1,"47":2,"55":2,"56":1,"63":2,"66":1}}],["off",{"2":{"60":1}}],["offset",{"2":{"1":14}}],["of=countries",{"2":{"1":1}}],["often",{"2":{"1":10,"2":1}}],["of",{"0":{"22":1,"38":1},"2":{"1":239,"2":62,"6":1,"7":1,"8":3,"11":4,"12":12,"13":1,"20":1,"22":3,"26":2,"27":2,"28":1,"29":2,"30":1,"31":5,"36":2,"37":1,"40":1,"41":1,"43":20,"44":1,"45":2,"47":4,"49":1,"53":3,"55":4,"56":2,"57":3,"59":3,"60":1,"61":5,"62":2,"63":15,"64":4,"65":3,"66":5}}],["org",{"2":{"2":4}}],["original",{"2":{"1":7,"2":3,"47":4}}],["ordered",{"2":{"2":1}}],["order=autoorder",{"2":{"1":2}}],["order",{"2":{"1":14,"2":1}}],["or",{"0":{"22":1},"2":{"1":316,"2":41,"4":1,"6":2,"9":1,"10":1,"11":2,"12":4,"19":1,"20":1,"21":1,"22":5,"23":2,"24":1,"27":1,"28":1,"29":1,"35":1,"39":1,"41":1,"43":8,"45":2,"49":1,"55":4,"56":1,"57":1,"58":1,"63":4}}],["few",{"2":{"55":1,"57":1}}],["features",{"2":{"1":2,"37":1}}],["feature",{"2":{"1":24,"10":1,"12":1,"63":1}}],["flipaxis",{"2":{"44":3}}],["fletcher32",{"2":{"2":2}}],["flexible",{"2":{"1":1,"55":2}}],["flag",{"2":{"1":1}}],["flags",{"2":{"1":4}}],["flatten=false",{"2":{"1":1}}],["flattening",{"2":{"1":1}}],["flattened",{"2":{"1":1}}],["flatten",{"2":{"1":2}}],["float",{"2":{"1":2}}],["floating",{"2":{"1":5}}],["float32",{"2":{"1":5,"26":2,"27":1,"29":1,"30":1,"31":2,"34":4,"36":4,"37":4,"40":1,"47":2,"52":6,"53":3}}],["float64",{"2":{"1":10,"2":18,"4":1,"6":3,"7":1,"12":5,"26":4,"27":2,"29":2,"30":2,"31":4,"33":2,"34":2,"36":2,"37":8,"38":3,"40":2,"44":2,"47":4,"52":4,"53":2,"57":9,"59":9,"60":8,"62":2,"63":5,"64":3}}],["framerate",{"2":{"43":1}}],["fractionally",{"2":{"55":1}}],["fraction",{"2":{"1":2}}],["from",{"0":{"5":1,"60":1},"2":{"1":76,"2":19,"7":1,"8":1,"12":1,"14":1,"15":1,"16":1,"21":1,"24":1,"26":1,"31":1,"32":2,"34":1,"43":1,"47":1,"52":1,"53":1,"60":1,"62":2,"63":2,"66":5}}],["fundamentally",{"2":{"64":1}}],["function",{"2":{"1":20,"2":4,"8":2,"11":1,"22":1,"26":1,"27":1,"37":1,"39":1,"45":3,"53":2,"64":2,"65":2,"66":2}}],["functions",{"0":{"1":1,"2":1},"2":{"1":12,"45":1,"47":1,"66":1}}],["full",{"2":{"32":1}}],["fully",{"2":{"1":1,"12":1,"45":1,"63":1}}],["future",{"2":{"1":19,"12":1,"16":1,"63":1,"66":18}}],["f",{"2":{"1":17,"2":3,"8":1,"62":1,"66":2}}],["far",{"2":{"64":1}}],["fast",{"2":{"18":1}}],["fastest",{"2":{"1":1}}],["faster",{"2":{"1":8,"12":1}}],["fail",{"2":{"1":1}}],["facility",{"2":{"32":1}}],["facilitate",{"2":{"1":1}}],["fact",{"2":{"12":1,"59":1,"63":1,"65":1}}],["factor",{"2":{"1":4}}],["fall",{"2":{"47":1}}],["falls",{"2":{"8":1}}],["falling",{"2":{"1":1}}],["fallback",{"2":{"1":2,"2":2,"49":1}}],["false",{"2":{"1":34,"2":13,"37":2,"44":1}}],["four",{"2":{"66":1}}],["found",{"2":{"1":4,"2":2}}],["folds",{"2":{"37":1}}],["fold",{"2":{"37":2}}],["following",{"2":{"4":1,"9":2,"37":1,"56":1,"57":1}}],["focus",{"2":{"20":1,"55":1,"58":1}}],["fo",{"2":{"1":1}}],["forecast",{"2":{"66":1}}],["forward",{"2":{"45":1}}],["forwardordered",{"2":{"1":4,"4":3,"5":1,"6":7,"7":2,"12":8,"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"47":6,"52":2,"53":1,"57":3,"59":3,"60":2,"62":1,"63":3,"64":1}}],["form",{"2":{"1":2}}],["formats",{"0":{"19":1},"2":{"19":2}}],["format",{"2":{"1":3,"37":1,"66":1}}],["forced",{"2":{"2":1}}],["force",{"2":{"1":9,"2":15}}],["for",{"2":{"1":152,"2":28,"7":2,"10":1,"11":2,"12":4,"13":1,"16":1,"17":1,"19":2,"20":3,"21":1,"22":3,"23":1,"24":1,"25":1,"27":1,"32":1,"33":1,"34":1,"37":1,"39":1,"41":1,"43":6,"44":4,"45":4,"49":1,"53":3,"55":1,"56":1,"57":10,"58":1,"59":2,"60":1,"61":3,"62":3,"63":3,"64":2,"65":2,"66":7}}],["figure",{"2":{"44":3,"57":2}}],["fig",{"2":{"40":4,"43":2,"44":10,"57":12,"59":4,"60":7}}],["five",{"2":{"12":1}}],["fixing",{"2":{"11":1}}],["fixed",{"2":{"11":1}}],["fix",{"2":{"11":2}}],["fix2",{"2":{"1":9}}],["finish",{"2":{"2":1}}],["findfirst",{"2":{"62":1}}],["find",{"2":{"1":4,"8":1,"11":1}}],["filter",{"2":{"2":2,"8":1}}],["filled",{"2":{"45":1,"47":1}}],["fillvalue",{"2":{"2":1,"47":2}}],["fillalpha=0",{"2":{"1":2,"53":1}}],["fill=1",{"2":{"1":2}}],["fill",{"2":{"1":12}}],["fills",{"2":{"1":2}}],["filepaths",{"2":{"1":1}}],["filepath",{"2":{"1":6,"2":6,"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"57":3,"59":3,"60":1,"62":1,"63":1}}],["file",{"0":{"19":1},"2":{"1":59,"2":31,"11":7,"12":1,"15":2,"16":1,"19":1,"22":1,"24":1,"27":1,"28":1,"47":2,"53":3,"63":1}}],["files",{"2":{"1":17,"2":7,"4":1,"10":1,"11":1,"14":2,"15":2,"16":1,"17":1,"18":1,"19":1,"28":1,"34":1,"45":1,"50":1}}],["filestack",{"2":{"0":1,"2":2}}],["filenames",{"2":{"1":5}}],["filename",{"2":{"1":34,"2":20,"14":2,"15":2,"16":2,"19":1,"27":1,"47":2}}],["filearray",{"2":{"0":1,"1":2,"2":3}}],["fitting",{"2":{"32":1}}],["fit",{"0":{"37":1},"2":{"1":1,"37":2}}],["field",{"2":{"1":3,"31":1}}],["fields",{"2":{"1":6,"28":1}}],["first",{"2":{"1":25,"11":1,"15":1,"34":1,"37":1,"47":3,"50":1,"53":4,"63":2,"64":1}}],["ssp370",{"2":{"66":3}}],["ssp126",{"2":{"66":2}}],["ssp",{"2":{"66":10}}],["ssps",{"2":{"66":3}}],["squished",{"2":{"41":1}}],["square",{"2":{"1":8,"63":3,"64":2}}],["sdmgroups",{"2":{"37":1}}],["sdmmachines",{"2":{"37":1}}],["sdmensembleevaluation",{"2":{"37":1}}],["sdmensemble",{"2":{"37":1}}],["sdmdata",{"2":{"37":3}}],["sdm",{"2":{"37":4,"38":1}}],["smaller",{"2":{"41":1,"63":1}}],["smallest",{"2":{"1":2,"63":1}}],["smap",{"2":{"10":1}}],["scenario",{"2":{"66":4}}],["scenarios",{"2":{"66":1}}],["scitypes",{"2":{"37":1}}],["sciences",{"2":{"20":1}}],["scratch",{"0":{"60":1},"2":{"60":3}}],["screen",{"2":{"44":1}}],["scr",{"2":{"2":1}}],["scatter",{"2":{"34":2}}],["scarborough",{"2":{"1":1}}],["scandinavia",{"2":{"1":4,"53":10}}],["scandinavian",{"2":{"1":1,"50":1}}],["scaling",{"2":{"1":2}}],["scale^2",{"2":{"1":2}}],["scale",{"2":{"1":37}}],["scaled=true",{"2":{"1":2}}],["scaled=false",{"2":{"1":2}}],["scaled",{"2":{"1":8}}],["snap",{"2":{"1":1,"22":1}}],["skewed",{"2":{"1":1}}],["skipping",{"2":{"2":1}}],["skipped",{"2":{"1":2}}],["skip",{"2":{"1":1,"2":1}}],["skipmissing=true",{"2":{"1":1}}],["skipmissing=false",{"2":{"1":1}}],["skipmissingval=true",{"2":{"1":1}}],["skipmissing",{"2":{"1":7,"2":2,"34":1,"35":2,"36":1,"64":4,"66":2}}],["sweden",{"2":{"1":2,"52":4,"53":5}}],["swapping",{"2":{"1":1}}],["slightly",{"2":{"66":2}}],["slicing",{"2":{"1":1}}],["slices",{"2":{"1":3}}],["sliced",{"2":{"1":5,"47":1}}],["slice",{"2":{"0":1,"1":6,"6":1,"66":2}}],["slowest",{"2":{"55":1}}],["slow",{"2":{"1":2}}],["src",{"2":{"1":7,"2":4}}],["s",{"2":{"1":11,"2":10,"8":2,"11":1,"12":2,"31":1,"37":1,"38":1,"55":1,"56":1,"57":2,"58":1,"59":3,"60":4,"61":2,"62":1,"63":4,"64":3,"66":1}}],["systems",{"2":{"55":1,"58":1}}],["system",{"2":{"1":10,"12":1,"39":1,"55":1,"63":1}}],["symbols",{"2":{"2":1,"43":1}}],["symbol",{"2":{"1":30,"2":8,"37":2}}],["syntax",{"2":{"1":2,"6":1,"20":1,"36":1,"53":1}}],["safe",{"2":{"1":4,"2":1}}],["sa",{"2":{"1":6}}],["saved",{"2":{"2":2}}],["savefig",{"2":{"1":22}}],["save",{"2":{"1":5,"2":2,"34":1,"44":1,"47":1,"53":1}}],["sampling=intervals",{"2":{"1":4,"2":2,"12":2,"60":3,"63":2}}],["sampling=autosampling",{"2":{"1":2}}],["sampling",{"2":{"1":2,"2":1,"12":5,"56":3,"59":1}}],["samples",{"2":{"55":1}}],["sampled",{"2":{"1":6,"4":3,"5":1,"6":7,"7":2,"47":2,"59":1}}],["sample",{"0":{"36":1},"2":{"0":1,"1":2,"2":9,"36":3,"57":2}}],["same",{"2":{"1":19,"2":2,"11":1,"12":1,"15":1,"22":1,"28":1,"43":2,"53":1,"55":1,"59":1,"61":1,"63":1,"64":1,"65":2}}],["sufficient",{"2":{"55":1}}],["suffix",{"2":{"1":21,"2":2}}],["suitability",{"0":{"38":1},"2":{"38":1}}],["sure",{"2":{"11":2,"45":1,"63":1}}],["surface",{"2":{"2":1,"39":2,"40":1,"43":1,"45":2,"47":4,"49":1}}],["sub",{"2":{"62":1}}],["subplot=i",{"2":{"53":1}}],["subplots",{"2":{"34":1,"53":1}}],["subarray",{"2":{"33":1}}],["substrin",{"2":{"1":1}}],["subsetting",{"0":{"8":1}}],["subset",{"2":{"1":3,"7":1,"8":1,"34":1}}],["subdivision",{"2":{"1":2}}],["summary",{"0":{"65":1}}],["summing",{"2":{"61":1}}],["summed",{"2":{"1":2}}],["sum",{"2":{"1":21,"57":2,"64":5,"66":2}}],["such",{"2":{"1":12,"2":7,"14":1,"23":1,"25":1,"59":1,"63":1}}],["supports",{"2":{"45":1}}],["supported",{"2":{"45":1,"56":1}}],["support",{"2":{"43":1}}],["supplied",{"2":{"1":1}}],["supertype",{"2":{"1":3,"2":1}}],["socioeconomic",{"2":{"66":1}}],["socio",{"2":{"66":1}}],["sosstsst",{"2":{"47":2}}],["software",{"2":{"2":2,"47":1}}],["sovereign",{"2":{"1":1}}],["south",{"2":{"1":1,"34":1}}],["source=zarrsource",{"2":{"16":1}}],["sources",{"0":{"13":1,"24":1},"1":{"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1},"2":{"20":2}}],["source",{"2":{"1":60,"2":28,"12":1,"43":1,"55":1,"63":1}}],["so",{"2":{"1":11,"2":1,"4":1,"11":3,"12":2,"20":1,"31":1,"40":1,"47":1,"49":1,"55":1,"63":1,"64":1,"66":2}}],["somewhat",{"2":{"39":1}}],["something",{"2":{"4":1}}],["somelayer",{"2":{"1":2}}],["some",{"2":{"1":19,"2":1,"11":2,"12":1,"15":1,"19":2,"41":1,"52":1,"56":2,"60":1,"61":2,"63":2,"66":1}}],["side",{"2":{"2":1,"12":2,"43":1}}],["sides",{"2":{"1":1}}],["sin",{"2":{"59":4,"60":5}}],["sinusoidal",{"0":{"59":1},"2":{"58":1}}],["since",{"2":{"1":1,"9":1,"39":1,"45":1,"56":1,"63":1,"66":1}}],["sinc",{"2":{"1":1}}],["singleton",{"2":{"2":1,"43":1}}],["single",{"2":{"1":41,"2":3,"22":1,"50":1,"53":2,"66":2}}],["silently",{"2":{"1":1}}],["simultaneously",{"2":{"66":1}}],["simply",{"2":{"1":2,"9":1,"12":1,"47":1,"61":1}}],["simple",{"0":{"45":1,"46":1},"2":{"1":7,"66":1}}],["similarly",{"2":{"22":1,"45":1}}],["similar",{"2":{"1":1,"4":1,"36":1,"45":1}}],["size=$",{"2":{"57":1}}],["size=size",{"2":{"57":1}}],["size=",{"2":{"44":1,"48":1,"57":1,"59":2,"60":2}}],["sizes",{"2":{"2":1,"22":2,"57":5}}],["size",{"0":{"57":1},"2":{"1":40,"2":10,"12":1,"22":1,"34":4,"44":4,"52":8,"53":4,"57":6,"63":1}}],["sized",{"2":{"1":1}}],["still",{"2":{"47":1,"66":1}}],["stderror",{"2":{"37":1}}],["store",{"2":{"19":1}}],["stored",{"2":{"1":1,"2":2}}],["stores",{"2":{"1":1}}],["stereographic",{"2":{"12":1}}],["step",{"2":{"12":1,"66":1}}],["steps",{"2":{"1":1,"11":1}}],["stem",{"2":{"1":1}}],["st",{"2":{"1":8,"44":2}}],["statistic",{"2":{"64":2}}],["statistical",{"0":{"37":1},"2":{"37":1}}],["statistics",{"2":{"1":8,"21":1,"25":1,"26":1,"47":1}}],["statsbase",{"2":{"2":7,"36":2}}],["stats",{"2":{"1":2}}],["stage",{"2":{"1":1}}],["starting",{"2":{"12":1}}],["start",{"0":{"3":1},"1":{"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"1":10,"2":2,"12":15,"26":4,"27":2,"29":2,"30":2,"31":3,"34":2,"38":2,"40":2,"44":2,"52":4,"53":2,"57":7,"59":4,"60":8,"62":2,"63":6,"64":2,"66":2}}],["stack",{"2":{"1":32,"2":7,"11":1,"22":2,"27":2,"41":2,"43":4,"53":1}}],["stacks",{"2":{"1":7}}],["standardises",{"2":{"20":1}}],["standard",{"2":{"1":1,"23":1,"47":2,"66":1}}],["strokewidth",{"2":{"62":1}}],["strokecolor",{"2":{"62":1}}],["strategy",{"2":{"37":1}}],["straightforward",{"2":{"36":1}}],["strings",{"2":{"1":1,"2":1,"43":1}}],["string",{"2":{"1":24,"2":9,"26":2,"27":1,"29":1,"30":1,"31":2,"33":2,"40":1,"44":1,"47":2,"57":3,"59":3,"60":1,"62":1,"63":1}}],["structures",{"2":{"1":1}}],["sp",{"2":{"53":1}}],["spratly",{"2":{"1":1}}],["spring",{"2":{"1":2}}],["spread",{"2":{"1":1}}],["spheroid",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["spherical",{"2":{"1":2,"12":4,"62":1,"63":4}}],["sphere",{"2":{"1":3,"12":4,"63":4}}],["speed",{"2":{"1":1}}],["speedups",{"2":{"1":7}}],["special",{"2":{"1":2}}],["speciesdistributionmodels",{"2":{"37":4}}],["species",{"0":{"32":1},"1":{"33":1,"34":1,"35":1,"36":1,"37":1,"38":1},"2":{"1":3,"32":2}}],["specifically",{"2":{"12":1}}],["specific",{"2":{"2":5,"10":1,"22":2,"31":1,"55":1}}],["specifies",{"2":{"1":3,"2":2,"45":1}}],["specified",{"2":{"1":16,"2":2,"28":1}}],["specify",{"2":{"1":5,"2":6,"7":1,"12":3,"20":1,"31":2,"56":1,"60":1,"63":3}}],["specifying",{"2":{"1":4,"2":4,"12":1}}],["spline",{"2":{"1":1}}],["splitting",{"2":{"55":1}}],["split",{"2":{"1":2}}],["splat",{"2":{"1":1}}],["splatted",{"2":{"1":2}}],["space",{"2":{"1":3,"8":1,"41":1}}],["spans",{"2":{"1":1,"7":1}}],["span=autospan",{"2":{"1":2}}],["span",{"2":{"1":2}}],["spatially",{"2":{"12":1,"63":1}}],["spatial",{"0":{"61":1,"64":1,"66":1},"1":{"62":1,"63":1,"64":1,"65":1,"66":1},"2":{"1":6,"4":2,"7":1,"19":1,"49":1,"61":2,"65":2}}],["shiftlocus",{"2":{"59":3,"60":1}}],["shrink",{"2":{"22":1}}],["shuffle",{"2":{"2":4}}],["shp",{"2":{"1":7,"51":2}}],["shapes",{"2":{"1":5,"52":6}}],["shapefile",{"0":{"51":1,"52":1},"1":{"52":1,"53":1},"2":{"1":28,"50":1,"51":5,"52":2}}],["shape",{"2":{"1":8,"50":1,"53":1}}],["sharing",{"2":{"1":1}}],["shared",{"2":{"1":4}}],["share",{"2":{"1":2,"11":1,"59":1}}],["shoudle",{"2":{"1":1}}],["should",{"2":{"1":20,"2":2,"9":1,"43":3,"55":1,"63":1}}],["shortcuts",{"2":{"1":2}}],["shows",{"2":{"32":1,"66":1}}],["show",{"2":{"1":10,"12":1,"45":1,"55":1,"66":1}}],["shown",{"2":{"1":1,"45":1}}],["seperate",{"2":{"66":1}}],["separated",{"2":{"1":1,"2":1}}],["separately",{"2":{"1":3}}],["separator",{"2":{"1":3}}],["section",{"2":{"56":1}}],["several",{"2":{"56":1}}],["sea",{"2":{"47":4}}],["search",{"2":{"1":1,"33":1}}],["se",{"2":{"34":2,"35":1,"36":1,"38":1}}],["seen",{"2":{"65":3}}],["seem",{"2":{"41":1}}],["seems",{"2":{"1":1,"64":1}}],["see",{"2":{"1":3,"2":2,"7":1,"12":2,"19":1,"20":1,"37":2,"38":1,"56":1,"62":1,"63":1,"64":1}}],["serranilla",{"2":{"1":1}}],["ser",{"2":{"1":2}}],["series",{"2":{"1":19,"2":2,"41":1}}],["selection",{"2":{"66":1}}],["selecting",{"2":{"6":1}}],["selects",{"2":{"1":6}}],["select",{"0":{"6":1,"7":1},"2":{"1":11,"66":1}}],["selectors",{"2":{"1":5,"8":3}}],["selector",{"2":{"1":10,"8":1}}],["sets",{"2":{"2":1,"43":1}}],["set",{"0":{"31":1},"2":{"1":20,"2":10,"31":6,"41":1,"42":1,"43":8,"45":1,"63":1}}],["setting",{"2":{"1":3,"2":3}}],["setmappedcrs",{"2":{"0":1,"1":2,"31":1}}],["setcrs",{"2":{"0":1,"1":2,"31":1}}],["rgb",{"2":{"56":1}}],["rs",{"2":{"8":1}}],["rng",{"2":{"2":1}}],["rnge",{"2":{"1":3}}],["rigurous",{"2":{"37":1}}],["right",{"2":{"2":2,"11":1,"43":2}}],["rings",{"2":{"1":2}}],["r",{"2":{"1":3,"2":2,"18":1}}],["rms",{"2":{"1":1}}],["round",{"2":{"57":1}}],["roughly",{"2":{"1":3,"44":1}}],["robust",{"2":{"56":1}}],["rotl90",{"2":{"25":1}}],["rotations",{"2":{"25":1}}],["rotated",{"2":{"1":1}}],["root",{"2":{"1":1}}],["rowgap",{"2":{"44":1,"57":2}}],["rows",{"2":{"1":5,"33":1}}],["row",{"2":{"1":3}}],["runs",{"2":{"11":1}}],["running",{"2":{"1":4,"11":1}}],["run",{"2":{"1":10,"2":1,"9":2,"12":1,"34":1,"60":1,"63":1,"66":1}}],["rain",{"2":{"64":1}}],["rainfall",{"2":{"61":2,"66":1}}],["ras",{"2":{"4":1,"5":2,"12":4,"57":12,"58":2,"59":9,"60":11}}],["rasterdatasources",{"0":{"20":1,"33":1},"2":{"1":21,"8":1,"10":2,"20":4,"26":1,"32":1,"33":2,"40":1,"44":1,"45":1,"46":1,"50":1,"52":2,"57":1,"62":2}}],["rasterdiskarray",{"2":{"0":1,"2":2}}],["rasterized",{"2":{"1":2}}],["rasterize",{"2":{"0":2,"1":10,"21":2}}],["raster",{"0":{"60":1},"2":{"0":1,"1":115,"2":32,"4":3,"6":6,"7":2,"8":1,"11":1,"12":16,"13":2,"14":1,"15":1,"16":1,"19":1,"20":4,"23":1,"26":6,"27":6,"29":3,"30":2,"31":4,"34":1,"36":1,"38":2,"39":1,"40":4,"43":11,"44":1,"45":4,"46":1,"47":5,"52":3,"53":3,"55":3,"57":7,"58":2,"59":7,"60":6,"61":2,"62":3,"63":9,"64":5,"65":3,"66":6}}],["rasterstacks",{"2":{"1":2,"41":1,"45":1,"53":1}}],["rasterstack",{"2":{"0":1,"1":60,"2":9,"13":1,"14":1,"15":1,"20":2,"27":1,"34":2,"35":1,"41":1,"43":5,"44":3,"45":1,"47":1,"52":3,"53":1}}],["rasterseries",{"2":{"0":1,"1":23,"13":1,"20":2,"53":1,"66":1}}],["rasters",{"0":{"9":1,"33":1,"40":1,"41":1},"2":{"0":57,"1":112,"2":27,"4":5,"7":2,"8":2,"9":4,"10":2,"11":3,"12":6,"13":1,"18":1,"20":2,"22":1,"26":3,"27":1,"29":1,"30":1,"31":3,"33":1,"34":1,"36":3,"40":2,"41":8,"43":6,"44":2,"45":5,"46":1,"47":3,"49":1,"50":1,"52":2,"53":1,"55":1,"56":1,"57":8,"59":4,"60":3,"62":3,"63":4,"66":4}}],["ratio",{"2":{"2":2}}],["rather",{"2":{"1":1,"66":1}}],["range",{"2":{"1":13,"12":1,"44":2,"53":1,"55":1,"60":4}}],["random",{"2":{"2":2,"4":1,"36":1,"49":1}}],["rand",{"2":{"1":1,"2":1,"4":1,"12":1,"63":1}}],["radius=",{"2":{"1":1,"12":1,"63":2}}],["radius",{"2":{"1":4,"12":4,"63":5}}],["race",{"2":{"1":7}}],["raw",{"2":{"1":9,"51":1,"59":1}}],["raw=true",{"2":{"1":5,"2":2}}],["rplot",{"2":{"0":2,"2":2,"34":1,"41":3,"43":6,"45":1}}],["red",{"2":{"62":3}}],["reduces",{"2":{"1":1}}],["reduce",{"2":{"1":2,"59":1}}],["reducer",{"2":{"1":9,"38":1}}],["reducing",{"2":{"1":5}}],["requires",{"2":{"60":1}}],["required",{"2":{"1":25,"2":2,"23":1}}],["remain",{"2":{"43":2}}],["remove",{"2":{"1":3,"2":2}}],["removes",{"2":{"1":3,"2":2}}],["record",{"2":{"43":1}}],["records",{"2":{"34":1}}],["recipes",{"2":{"45":1,"49":1}}],["recipe",{"2":{"39":1}}],["rectangle",{"2":{"12":1}}],["reverseordered",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"59":3,"60":2,"62":1,"63":1,"64":1}}],["reverse",{"2":{"25":1}}],["reversing",{"2":{"1":1}}],["re",{"2":{"12":2,"45":1,"55":1,"63":1,"66":1}}],["reef",{"2":{"1":1}}],["registry",{"2":{"9":1}}],["registered",{"2":{"9":1}}],["region",{"2":{"1":1,"53":3,"61":1}}],["regions",{"2":{"1":12}}],["regularization",{"2":{"37":2}}],["regular",{"2":{"1":6,"2":1,"4":3,"5":1,"6":7,"7":2,"8":1,"12":8,"23":1,"25":1,"26":4,"27":2,"29":2,"30":2,"31":4,"34":2,"38":2,"40":2,"44":2,"47":5,"52":4,"53":2,"55":1,"57":8,"59":6,"60":4,"62":2,"63":4,"64":2}}],["relies",{"2":{"12":1}}],["reliable",{"2":{"1":19,"12":1,"63":1}}],["relhum",{"2":{"1":2}}],["relhum=",{"2":{"1":1}}],["rebuild",{"0":{"29":1},"2":{"1":1,"28":1,"29":3,"31":1}}],["res=$",{"2":{"57":1}}],["res=res",{"2":{"57":1}}],["res=1",{"2":{"57":1}}],["res=3000",{"2":{"45":1}}],["res=0",{"2":{"1":1}}],["reset",{"0":{"42":1},"1":{"43":1,"44":1},"2":{"43":1,"59":1}}],["resembling",{"2":{"2":1}}],["residual",{"2":{"37":1}}],["responsible",{"2":{"1":1}}],["resampling",{"0":{"54":1,"55":1},"1":{"55":1,"56":1,"57":1,"58":1,"59":1,"60":1},"2":{"1":17,"37":2,"55":1,"57":1}}],["resampler",{"2":{"37":1}}],["resamples",{"2":{"1":1}}],["resampled",{"2":{"1":1,"59":1,"60":4}}],["resample",{"0":{"56":1,"58":1},"1":{"59":1,"60":1},"2":{"0":1,"1":15,"22":2,"55":3,"56":2,"57":4,"59":5,"60":2}}],["result",{"2":{"1":6}}],["results",{"2":{"1":7}}],["resulting",{"2":{"1":7}}],["res",{"2":{"1":24,"45":1,"57":6}}],["resolutions",{"2":{"57":3}}],["resolution",{"0":{"22":1,"57":1},"2":{"1":24,"45":3,"55":2,"57":1,"59":1}}],["rest",{"2":{"1":5}}],["reason",{"2":{"41":1,"61":1}}],["reasons",{"2":{"12":1,"58":1,"63":1}}],["reassign",{"2":{"31":1}}],["really",{"2":{"11":1,"63":1}}],["real",{"2":{"1":23}}],["reading",{"2":{"24":1}}],["reads",{"2":{"8":1}}],["read",{"2":{"1":9,"2":9,"4":1,"24":4,"27":1,"53":1}}],["refer",{"2":{"1":1}}],["reference",{"0":{"1":1,"2":1},"2":{"1":11,"58":1}}],["refdims",{"2":{"1":5}}],["retrieved",{"2":{"2":2}}],["retrieve",{"2":{"1":3,"2":1}}],["returning",{"2":{"1":2}}],["returned",{"2":{"1":13,"2":3,"66":1}}],["returns",{"2":{"1":9,"2":6,"12":2,"55":1,"63":1}}],["return",{"2":{"1":9,"2":1,"53":1,"66":1}}],["replicated",{"2":{"64":1}}],["repl",{"2":{"9":1}}],["replacing",{"2":{"1":3,"2":2}}],["replaced",{"2":{"1":1,"2":1}}],["replacement",{"2":{"1":6,"2":1}}],["replace",{"0":{"30":1},"2":{"0":1,"1":7,"2":1,"23":3,"24":1,"29":2,"57":1,"58":1,"62":1,"66":3}}],["reporting",{"2":{"2":1}}],["repeat",{"2":{"1":4,"66":1}}],["reproduced",{"2":{"11":1}}],["reprojects",{"2":{"55":1}}],["reprojection",{"0":{"54":1},"1":{"55":1,"56":1,"57":1,"58":1,"59":1,"60":1}}],["reprojecting",{"2":{"1":1}}],["reproject",{"0":{"58":1},"1":{"59":1,"60":1},"2":{"0":2,"1":6,"55":2}}],["represents",{"2":{"12":2,"66":1}}],["represent",{"2":{"1":1,"7":2}}],["representing",{"2":{"1":4,"2":2}}],["p2",{"2":{"62":1}}],["purely",{"2":{"62":1}}],["put",{"2":{"11":1}}],["px",{"2":{"46":1}}],["phylum",{"2":{"33":1}}],["pkg>",{"2":{"9":1}}],["pkg",{"2":{"9":2,"10":14}}],["p",{"2":{"1":4,"34":3,"53":8,"62":1}}],["pygmy",{"2":{"1":1,"32":1,"33":1}}],["period",{"2":{"66":1}}],["perfect",{"2":{"59":1}}],["performed",{"2":{"59":1}}],["performs",{"2":{"37":1}}],["perform",{"2":{"12":1}}],["performance",{"2":{"1":5,"37":1}}],["perfomance",{"2":{"1":3,"2":2}}],["per",{"2":{"12":1,"46":1,"63":2,"64":4}}],["peru",{"2":{"1":1}}],["permission",{"2":{"1":1}}],["permissions",{"2":{"1":1}}],["pixelated",{"2":{"1":1}}],["pixel",{"2":{"1":21,"45":2,"52":1}}],["pixels",{"2":{"1":16,"66":1}}],["png",{"2":{"1":22,"44":1}}],["plt",{"2":{"44":5,"59":4,"60":6}}],["play",{"2":{"61":1}}],["platform",{"2":{"11":1}}],["planar",{"2":{"1":2,"12":5,"63":3}}],["plane",{"2":{"1":2,"12":2,"63":3}}],["placed",{"2":{"2":1,"43":1}}],["place",{"2":{"1":8,"11":1}}],["please",{"2":{"1":19,"12":1,"63":1}}],["plotted",{"2":{"41":1}}],["plotting",{"0":{"39":1,"43":1,"53":1},"2":{"2":2,"39":1,"43":2,"45":2,"47":1,"49":1,"62":1}}],["plottype",{"2":{"2":1,"43":1}}],["plot`",{"2":{"1":1}}],["plots",{"0":{"45":1,"53":1},"2":{"1":20,"10":1,"39":1,"41":2,"45":4,"47":3,"48":2,"50":1,"53":1}}],["plot",{"0":{"48":2,"50":1},"2":{"1":39,"2":3,"8":1,"12":1,"20":1,"34":1,"39":1,"40":2,"43":3,"44":1,"45":7,"46":1,"47":8,"49":3,"50":1,"53":9,"62":1}}],["primitive",{"2":{"56":1}}],["primem",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["principle",{"2":{"31":1}}],["print",{"2":{"1":6,"2":2}}],["printed",{"2":{"1":2}}],["practise",{"2":{"1":1}}],["practice",{"2":{"1":2,"2":1,"43":1}}],["pretty",{"2":{"56":1,"64":1}}],["predict",{"2":{"38":1}}],["predictor",{"2":{"35":1,"37":1}}],["predictors",{"2":{"34":1,"35":2}}],["predictions",{"0":{"38":1},"2":{"32":1}}],["predefined",{"2":{"24":1}}],["prefer",{"2":{"1":1}}],["precip",{"2":{"62":3,"63":6,"64":10,"66":10}}],["precipitation",{"2":{"62":2,"63":1,"64":3,"66":3}}],["prec",{"2":{"1":10,"52":3,"53":3,"62":4,"63":3,"66":2}}],["preserve",{"2":{"66":1}}],["presence",{"2":{"37":1}}],["presences",{"2":{"35":3,"37":1}}],["present",{"2":{"1":2}}],["pressed",{"2":{"9":1}}],["pressure",{"2":{"1":1}}],["pressure=",{"2":{"1":1}}],["procedure",{"2":{"66":1}}],["processing",{"0":{"63":1}}],["problem",{"2":{"11":2,"55":1}}],["problems",{"2":{"1":25,"2":2,"12":1,"63":1}}],["provides",{"2":{"53":1}}],["provide",{"2":{"41":1}}],["provided",{"2":{"1":7,"45":1}}],["providing",{"2":{"2":1,"19":1,"57":1}}],["prod",{"2":{"1":1}}],["produces",{"2":{"11":1}}],["produce",{"2":{"1":2,"47":1}}],["productive",{"2":{"1":7}}],["properties",{"0":{"28":1},"1":{"29":1,"30":1,"31":1},"2":{"1":3,"7":1,"31":2}}],["projstring",{"0":{"58":1},"1":{"59":1,"60":1},"2":{"59":4}}],["proj",{"2":{"1":2,"2":1,"12":4,"62":1,"63":2}}],["projections",{"2":{"1":5,"7":1,"12":1,"55":1,"58":1,"63":1}}],["projection",{"0":{"59":1},"2":{"1":7,"7":2,"12":1,"22":1,"55":1,"60":1,"63":2}}],["projected",{"2":{"0":1,"1":16,"2":3,"7":1,"12":11,"26":4,"27":2,"29":2,"30":2,"31":4,"34":2,"38":2,"40":2,"44":2,"52":4,"53":2,"57":6,"59":6,"60":4,"62":2,"63":6,"64":2}}],["progress=false",{"2":{"1":4}}],["progress",{"2":{"1":20}}],["pacific",{"2":{"63":1}}],["packages",{"2":{"57":1}}],["package",{"0":{"4":1,"10":1},"2":{"10":1,"12":1,"66":1}}],["pane",{"2":{"47":1}}],["paste",{"2":{"11":1}}],["passes",{"2":{"1":1}}],["passed",{"2":{"1":29,"2":10,"8":2,"56":1}}],["passing",{"2":{"1":7,"2":2,"37":1}}],["pass",{"2":{"1":3,"2":1,"39":1,"41":1}}],["padding",{"2":{"1":1,"2":2,"43":2}}],["padded",{"2":{"1":1}}],["pad",{"2":{"1":3,"52":1}}],["pad=10",{"2":{"1":2,"52":1}}],["part",{"2":{"11":1}}],["parvus",{"2":{"1":2,"33":1,"35":2}}],["parallel",{"2":{"1":7}}],["parse",{"2":{"1":1}}],["parsed",{"2":{"1":1}}],["pair",{"2":{"1":10,"2":2}}],["pairs",{"2":{"1":16,"37":2}}],["path",{"2":{"1":7,"2":3}}],["paths",{"2":{"1":6}}],["powerful",{"2":{"55":1}}],["poly",{"2":{"52":1,"53":2,"62":1}}],["polygon",{"0":{"21":1,"50":1},"2":{"1":41,"23":1,"52":1}}],["polygons",{"2":{"1":15,"50":1}}],["polar",{"2":{"12":1}}],["poles",{"2":{"12":1}}],["population",{"2":{"12":1,"63":1}}],["poor",{"2":{"1":1}}],["pointer",{"2":{"2":1}}],["point",{"0":{"21":1},"2":{"1":29,"12":2,"56":2}}],["points",{"0":{"35":1,"36":1},"2":{"0":1,"1":45,"2":3,"4":3,"5":1,"6":7,"7":2,"12":2,"21":2,"31":4,"34":1,"36":1,"37":2,"63":1}}],["potential",{"2":{"1":6,"2":2}}],["possibly",{"2":{"28":1}}],["possible",{"2":{"1":7,"4":1,"11":1,"26":1}}],["possum",{"2":{"1":1,"32":1,"33":1}}],["positive",{"2":{"1":2}}],["position",{"2":{"1":1,"2":2,"43":2}}],["mm",{"2":{"64":2}}],["mmap",{"2":{"18":1}}],["m^2",{"2":{"64":1}}],["m",{"2":{"57":9,"58":1,"59":2}}],["mp4",{"2":{"43":2}}],["mljglminterface",{"2":{"37":2}}],["mlj",{"2":{"37":1}}],["my",{"2":{"1":2}}],["myraster",{"2":{"1":2,"2":3,"12":2,"63":2}}],["myseries",{"2":{"1":3}}],["motivation",{"2":{"61":1}}],["months",{"2":{"66":1}}],["month",{"2":{"4":2,"6":1,"33":1,"41":1,"43":1,"47":2,"61":1,"62":2,"66":1}}],["month=june",{"2":{"20":1}}],["month=july",{"2":{"1":2,"52":1}}],["month=jan",{"2":{"1":1}}],["month=6",{"2":{"1":1}}],["month=1",{"2":{"1":9}}],["move",{"2":{"2":1,"24":1}}],["mountain",{"2":{"1":1,"32":1,"33":1}}],["more",{"2":{"1":7,"2":1,"7":2,"22":1,"31":1,"47":1,"55":1,"57":1,"60":1,"64":1,"66":2}}],["modis",{"0":{"59":1},"2":{"58":1,"59":1}}],["modification",{"2":{"1":1}}],["modifying",{"0":{"28":1},"1":{"29":1,"30":1,"31":1}}],["modify",{"0":{"24":1},"2":{"1":1,"24":1,"28":1,"31":1}}],["models",{"2":{"37":8,"66":2}}],["modelling",{"0":{"32":1},"1":{"33":1,"34":1,"35":1,"36":1,"37":1,"38":1},"2":{"32":1}}],["model",{"2":{"1":1,"37":3,"66":2}}],["mode=",{"2":{"1":2}}],["mode",{"2":{"1":15,"27":1,"57":2}}],["most",{"2":{"1":4,"11":1,"23":1,"25":1,"55":2}}],["mosaic",{"0":{"50":1},"2":{"0":2,"1":13,"22":1,"50":1,"53":2}}],["misestimated",{"2":{"64":1}}],["missing",{"0":{"30":1},"2":{"0":1,"1":58,"2":18,"22":1,"23":2,"26":22,"27":17,"28":1,"29":17,"30":1,"31":34,"33":28,"34":5,"35":2,"38":39,"40":17,"44":5,"47":6,"52":11,"53":5,"57":1,"58":1,"62":13,"63":20,"64":47,"66":4}}],["missingval=nan",{"2":{"57":1,"58":1,"60":1}}],["missingval=",{"2":{"29":1,"30":1}}],["missingval=uint32",{"2":{"1":1}}],["missingval=missingval",{"2":{"1":2}}],["missingval=0",{"2":{"1":2}}],["missingval",{"2":{"0":1,"1":55,"2":14,"23":1,"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"47":2,"52":2,"53":1,"57":3,"59":3,"60":2,"62":1,"63":1,"64":1}}],["missingmask",{"2":{"0":1,"1":6}}],["middle",{"2":{"63":1}}],["mitigate",{"2":{"60":1}}],["might",{"2":{"59":1}}],["millisecond",{"2":{"47":1}}],["mind",{"2":{"59":1}}],["minutes",{"2":{"47":2}}],["min",{"2":{"1":3,"57":1}}],["minimum",{"2":{"1":7,"11":1}}],["minor",{"2":{"1":2}}],["mix",{"2":{"1":1}}],["mixed",{"2":{"1":7}}],["must",{"2":{"1":18,"10":1,"43":2}}],["multithreading",{"2":{"64":1}}],["multipolygonwith",{"2":{"62":1}}],["multiply",{"2":{"66":1}}],["multiplying",{"2":{"61":1}}],["multiple",{"2":{"1":17,"2":3,"66":1}}],["multidimensional",{"2":{"22":1}}],["multi",{"2":{"1":4,"2":1,"47":1,"53":1}}],["much",{"2":{"1":4}}],["measures",{"2":{"37":1}}],["meaning",{"2":{"12":1}}],["means",{"0":{"61":1,"66":1},"1":{"62":1,"63":1,"64":1,"65":1,"66":1},"2":{"1":4,"2":7,"18":1,"63":1}}],["mean",{"0":{"26":1,"64":1},"2":{"1":18,"2":3,"12":2,"25":1,"26":1,"38":1,"47":6,"48":1,"49":4,"56":1,"61":4,"63":1,"65":3}}],["merging",{"2":{"55":1}}],["merge",{"2":{"1":1}}],["mercator",{"2":{"12":1,"55":2}}],["med",{"2":{"1":1,"57":1}}],["median",{"2":{"1":6}}],["messages",{"2":{"1":6,"2":2}}],["meter",{"2":{"63":1,"64":2}}],["meters",{"2":{"1":8,"12":2,"63":3}}],["method=method",{"2":{"57":2}}],["method=",{"2":{"57":4,"59":2,"60":2}}],["method",{"2":{"1":17,"2":8,"12":5,"53":1,"55":1,"57":9,"62":1,"63":4,"66":1}}],["methods",{"0":{"22":1,"23":1,"24":1,"57":1},"2":{"1":5,"2":1,"21":1,"22":1,"23":3,"24":1,"25":2,"47":2,"53":3,"55":3,"56":1,"57":5}}],["metadata",{"2":{"1":11,"2":2,"19":3,"26":4,"27":2,"29":2,"30":2,"31":4,"40":2,"47":4,"57":6,"59":6,"60":2,"62":2,"63":2}}],["memory",{"2":{"1":19,"2":6,"12":1,"24":2}}],["macro",{"2":{"66":1}}],["macao",{"2":{"1":1}}],["made",{"2":{"64":1}}],["madagascar",{"2":{"8":3}}],["margin",{"2":{"52":1}}],["markersize",{"2":{"34":1}}],["marker=",{"2":{"34":1}}],["many",{"2":{"11":1,"58":1}}],["manually",{"2":{"1":20,"2":5,"24":1,"45":1}}],["mainly",{"2":{"63":1}}],["main",{"2":{"9":1}}],["making",{"2":{"8":1,"11":1}}],["makie",{"0":{"39":1,"40":1,"41":1,"44":1,"46":1},"2":{"2":13,"8":1,"10":1,"20":1,"39":1,"40":1,"41":2,"43":13,"44":1,"45":3,"46":1,"62":1}}],["makes",{"2":{"41":1}}],["make",{"0":{"38":1},"2":{"1":4,"2":1,"11":1,"12":1,"31":1,"36":1,"50":1,"63":2}}],["malaysia",{"2":{"1":1}}],["maxnet2",{"2":{"37":5}}],["maxnetbinaryclassifier",{"2":{"37":7}}],["maxnet",{"2":{"37":10}}],["max",{"2":{"1":1,"45":2,"57":2}}],["maximum",{"2":{"1":7,"2":2,"45":1}}],["magnitude",{"2":{"1":2}}],["magma",{"2":{"1":2}}],["map",{"2":{"1":2,"27":2,"62":1,"66":1}}],["mappedindex",{"2":{"0":1,"1":1}}],["mappedcrs=epsg",{"2":{"1":3}}],["mappedcrs=nothing",{"2":{"1":2}}],["mappedcrs",{"2":{"0":1,"1":20,"45":1,"47":2}}],["mappedbounds",{"2":{"0":1,"1":1}}],["mapped",{"2":{"0":1,"1":16,"7":3,"47":4}}],["master",{"2":{"1":3,"51":1}}],["masks",{"2":{"1":1}}],["masked",{"2":{"1":16,"21":1,"63":4,"64":5,"66":3}}],["masking",{"0":{"50":1},"2":{"1":2,"64":1}}],["mask",{"2":{"0":2,"1":38,"2":1,"23":2,"50":1,"52":5,"53":2,"62":1,"63":4,"65":1,"66":4}}],["matters",{"2":{"1":2}}],["matter",{"2":{"1":2}}],["matching",{"2":{"1":3,"8":1,"45":1,"66":1}}],["match",{"2":{"1":9}}],["matches",{"2":{"1":1,"2":1}}],["matrix",{"2":{"1":2}}],["may",{"2":{"1":79,"2":7,"12":2,"15":1,"16":1,"19":1,"41":1,"43":1,"63":2}}],["circulation",{"2":{"66":1}}],["circumstances",{"2":{"1":7}}],["cm6a",{"2":{"66":1}}],["cmip6",{"2":{"66":1}}],["cmor",{"2":{"47":2}}],["cylindrical",{"2":{"55":1}}],["cyprus",{"2":{"1":1}}],["cftime",{"2":{"47":2}}],["cv",{"2":{"37":2}}],["cgrads",{"2":{"2":1,"43":1}}],["c",{"2":{"2":2,"56":1}}],["cp",{"2":{"1":1}}],["c=",{"2":{"1":3}}],["csv",{"2":{"1":1,"35":5}}],["cs",{"2":{"1":1,"12":1,"63":1}}],["clogloglink",{"2":{"37":2}}],["close",{"2":{"64":1}}],["closest",{"2":{"8":1}}],["closely",{"2":{"2":1}}],["closed",{"2":{"2":1}}],["cleaning",{"2":{"32":1}}],["click",{"2":{"22":1}}],["clipperton",{"2":{"1":1}}],["climatic",{"0":{"38":1}}],["climates",{"2":{"1":4}}],["climate",{"2":{"1":23,"10":1,"20":1,"41":1,"43":2,"52":7,"53":1,"62":2,"63":1,"66":7}}],["clims=",{"2":{"1":4}}],["classes",{"2":{"1":5}}],["classified",{"2":{"1":3}}],["classify",{"2":{"0":2,"1":10,"23":2}}],["century",{"2":{"66":1}}],["centers",{"2":{"1":1}}],["center",{"2":{"1":21,"47":6,"59":3,"60":1}}],["certain",{"2":{"8":1}}],["cell",{"2":{"1":5,"2":1,"12":8,"47":2,"56":2,"59":1,"61":2,"63":7,"64":3,"65":2,"66":1}}],["cells",{"2":{"1":3,"12":1,"55":2,"61":1,"63":4,"64":1,"65":1}}],["cellarea",{"0":{"12":1},"2":{"0":1,"1":2,"12":7,"63":4,"65":1}}],["curvature",{"2":{"61":1}}],["current",{"2":{"1":3,"2":2,"29":1,"44":1}}],["currently",{"2":{"1":3}}],["cubicspline",{"2":{"1":1,"57":1}}],["cubic",{"2":{"1":3,"57":1}}],["custom",{"2":{"1":4}}],["cultural",{"2":{"1":3,"51":1}}],["cut",{"2":{"1":6,"44":1}}],["cuda",{"2":{"1":1}}],["cuarray",{"2":{"1":1}}],["chordata",{"2":{"33":15}}],["chosen",{"2":{"1":3,"2":1,"12":2,"63":1}}],["chunk",{"2":{"2":11}}],["chunks",{"2":{"2":6}}],["chunking",{"2":{"2":1}}],["chile",{"2":{"1":1,"61":1,"62":7,"63":6,"64":3,"66":5}}],["child",{"2":{"1":11,"2":1}}],["china",{"2":{"1":8}}],["checks",{"2":{"2":1}}],["checksum",{"2":{"2":4}}],["check",{"2":{"2":1}}],["checked",{"2":{"1":2}}],["checkmemory",{"2":{"2":1}}],["checkmem",{"2":{"0":1,"2":3}}],["changes",{"2":{"1":2,"59":1}}],["change",{"0":{"22":1,"23":1},"2":{"1":21,"12":1,"29":1,"31":2,"45":2,"55":4,"63":1,"66":1}}],["changed",{"2":{"1":3,"2":2,"55":1}}],["changing",{"2":{"1":4,"2":2,"55":1}}],["cross",{"2":{"37":1}}],["cropping",{"2":{"64":1}}],["cropped",{"2":{"63":1}}],["crop",{"2":{"0":1,"1":13,"22":1,"53":1,"63":3,"66":2}}],["creation",{"2":{"2":2}}],["creating",{"2":{"1":3}}],["creates",{"2":{"1":1}}],["create",{"2":{"1":6,"60":1}}],["crs=sinusoidal",{"2":{"59":1,"60":1}}],["crs=epsg",{"2":{"1":4,"2":2,"12":2,"59":1,"60":2,"63":2}}],["crs=nothing",{"2":{"1":1}}],["crs",{"2":{"1":59,"12":8,"26":2,"27":1,"29":1,"30":1,"31":5,"34":1,"38":1,"40":1,"44":1,"45":1,"47":2,"52":2,"53":1,"57":3,"58":1,"59":6,"60":3,"62":1,"63":3,"64":1}}],["care",{"2":{"63":1}}],["cartesianindex",{"2":{"2":1}}],["cartier",{"2":{"1":1}}],["categories",{"2":{"23":1}}],["caveats",{"2":{"19":1}}],["cab",{"2":{"15":1}}],["cairomakie",{"2":{"8":2,"12":1,"20":1,"34":1,"40":1,"44":1,"46":3,"57":1,"62":1}}],["caused",{"2":{"11":1}}],["cause",{"2":{"1":1}}],["caution",{"2":{"1":7}}],["calculating",{"2":{"66":1}}],["calculate",{"2":{"1":4,"21":1,"66":2}}],["calculated",{"2":{"1":9}}],["call",{"2":{"12":1,"55":1}}],["calling",{"2":{"1":2}}],["called",{"2":{"1":1,"2":2,"12":1}}],["cased",{"2":{"1":2}}],["case",{"2":{"1":8,"59":1}}],["cases",{"2":{"1":20,"12":1,"55":1,"63":1}}],["cant",{"2":{"16":1}}],["cannot",{"2":{"1":1,"2":1}}],["can",{"2":{"1":82,"2":34,"4":1,"7":1,"9":2,"11":5,"12":8,"14":3,"15":2,"16":1,"17":1,"18":1,"19":2,"20":1,"25":1,"28":2,"31":3,"39":1,"41":2,"43":5,"45":2,"53":2,"55":4,"56":1,"59":2,"61":1,"62":2,"63":5,"64":5,"66":3}}],["coef",{"2":{"37":1}}],["coords",{"2":{"34":2,"35":1}}],["coordinatetransformations",{"2":{"10":1}}],["coordinate",{"2":{"1":10,"10":1,"12":3,"55":2,"58":1,"63":1}}],["coordinates",{"2":{"1":10,"4":1,"8":1,"12":2,"34":1,"35":2,"47":1}}],["code",{"2":{"2":1,"11":1}}],["course",{"2":{"12":1}}],["could",{"2":{"1":1,"47":1,"49":1,"60":1}}],["counts",{"2":{"59":1,"60":2}}],["count",{"2":{"1":4}}],["country",{"2":{"1":13,"50":1,"61":1}}],["countries",{"2":{"1":15,"50":1,"51":1,"53":2,"62":4}}],["counted",{"2":{"1":2}}],["counter",{"2":{"1":7}}],["correspond",{"2":{"66":1}}],["corresponding",{"2":{"1":1,"2":1,"10":1,"60":1}}],["correlation",{"2":{"1":1,"44":2}}],["correctly",{"2":{"47":1}}],["correct",{"2":{"1":13,"2":8}}],["covering",{"2":{"22":1}}],["cover",{"2":{"1":2}}],["covered",{"2":{"1":11}}],["coverage",{"2":{"0":2,"1":15}}],["colgap",{"2":{"44":1,"57":2}}],["color",{"2":{"2":2,"43":2,"62":1}}],["colorrange",{"2":{"2":1,"38":1,"43":1,"57":4,"62":1}}],["colormaps",{"2":{"2":1,"43":1}}],["colormap",{"2":{"2":3,"43":3,"44":2}}],["colorbar=",{"2":{"43":1}}],["colorbarlabel",{"2":{"2":1,"43":1}}],["colorbar",{"2":{"2":8,"43":8,"44":5,"57":2,"59":2,"60":3}}],["color=",{"2":{"1":2,"34":1}}],["colon",{"2":{"1":4}}],["collect",{"2":{"1":1,"34":1,"64":1}}],["collection",{"2":{"1":1}}],["collections",{"2":{"1":3}}],["collapse",{"2":{"1":2}}],["columns",{"2":{"1":18,"33":1}}],["column",{"2":{"1":20}}],["copying",{"2":{"1":1}}],["copy",{"2":{"1":2,"2":1}}],["comes",{"2":{"61":1}}],["come",{"2":{"58":1,"66":1}}],["command",{"2":{"9":2,"49":1}}],["comments",{"2":{"2":2}}],["common",{"2":{"1":6,"15":1,"20":1,"32":1,"53":1,"61":1}}],["commonly",{"2":{"1":1,"23":1}}],["com",{"2":{"1":3,"51":1}}],["computing",{"0":{"61":1,"64":1,"66":1},"1":{"62":1,"63":1,"64":1,"65":1,"66":1},"2":{"12":1,"64":2,"65":1}}],["computes",{"2":{"1":1,"12":1,"63":1}}],["compute",{"2":{"1":4,"12":3,"61":3,"63":5,"64":3,"65":2}}],["compress",{"2":{"2":2}}],["compressed",{"2":{"2":2,"18":1}}],["compression",{"2":{"2":8}}],["compare",{"2":{"59":1,"60":1}}],["comparison",{"2":{"1":6}}],["compatable",{"2":{"1":1}}],["compatible",{"2":{"1":21}}],["complicated",{"2":{"1":7,"66":1}}],["completely",{"2":{"1":10,"2":1,"19":1}}],["complete",{"2":{"1":1,"11":1}}],["combining",{"2":{"1":3}}],["combination",{"2":{"1":5,"66":1}}],["combined",{"2":{"1":6}}],["combine",{"2":{"0":1,"1":6,"53":1,"66":3}}],["congratulations",{"2":{"64":1}}],["conveniently",{"2":{"33":1}}],["conversion",{"2":{"19":2}}],["converting",{"2":{"1":1}}],["converted",{"2":{"1":10,"2":2,"15":1,"45":1,"56":1}}],["convert",{"2":{"1":8,"35":1,"64":1}}],["convertlookup",{"2":{"0":1,"1":1}}],["confusion",{"2":{"2":1}}],["consider",{"2":{"55":1,"57":1}}],["considering",{"2":{"1":1}}],["construct",{"2":{"12":3}}],["constructor",{"2":{"1":3}}],["const",{"2":{"8":1,"37":1}}],["concatenate",{"2":{"1":2}}],["concrete",{"2":{"1":2}}],["conditions",{"2":{"1":7}}],["continuous",{"2":{"37":4}}],["content",{"2":{"34":1}}],["contents",{"2":{"1":2}}],["contourf",{"2":{"2":1,"39":1,"40":1,"43":1,"45":2,"48":1}}],["contour",{"0":{"48":1},"2":{"2":1,"39":1,"40":1,"43":1,"45":2,"47":1}}],["control",{"2":{"55":1}}],["contribution",{"2":{"63":1}}],["contributions",{"2":{"55":1,"59":1}}],["contributing",{"2":{"1":8}}],["contribute",{"2":{"1":4}}],["contrast",{"2":{"1":3,"12":1,"44":2}}],["contained",{"2":{"2":1}}],["contains",{"2":{"1":7,"7":1,"8":1,"37":1}}],["contain",{"2":{"1":4}}],["containing",{"2":{"1":13,"2":2,"37":1}}],["black",{"2":{"34":1}}],["block",{"2":{"2":2}}],["blocks",{"2":{"1":2}}],["blocking",{"2":{"1":4}}],["break",{"2":{"41":1}}],["breaks",{"2":{"11":1}}],["browser",{"2":{"37":1}}],["broadcast",{"2":{"2":1,"26":2,"27":2}}],["broadcasting",{"0":{"27":1},"2":{"1":1,"66":1}}],["b",{"2":{"1":11,"6":2,"8":2,"29":1}}],["bit",{"2":{"60":1,"66":1}}],["bitarray",{"2":{"1":7}}],["bigger",{"2":{"59":1}}],["bilinear",{"2":{"1":2,"57":1}}],["biodiversity",{"2":{"32":1}}],["bio",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["bio7",{"2":{"1":6,"34":1,"36":20,"37":1}}],["bio5",{"2":{"1":6,"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"57":3,"59":3}}],["bio3",{"2":{"1":6,"34":1,"36":20,"37":1}}],["bio12",{"2":{"1":6,"34":1,"36":20,"37":1}}],["bio1",{"2":{"1":6,"34":1,"36":20,"37":1}}],["bioclimatic",{"0":{"34":1}}],["bioclim",{"0":{"35":1},"2":{"1":2,"8":1,"26":3,"27":1,"29":2,"30":1,"31":2,"32":1,"33":2,"34":3,"40":2,"45":1,"46":1,"57":2,"58":1}}],["bug",{"2":{"11":4}}],["bugs",{"0":{"11":1},"2":{"11":1}}],["built",{"2":{"1":2,"10":1,"64":1}}],["building",{"2":{"59":1}}],["build",{"2":{"1":22}}],["burramys",{"2":{"1":1,"33":1,"35":2}}],["burramis",{"2":{"1":1}}],["but",{"2":{"1":13,"2":3,"7":1,"11":2,"12":1,"14":1,"16":1,"18":1,"28":1,"43":2,"55":2,"61":1,"63":1,"64":1,"66":1}}],["byrow",{"2":{"1":2}}],["by",{"0":{"4":1,"6":1,"7":1},"2":{"1":91,"2":23,"6":1,"8":1,"12":7,"21":1,"22":1,"23":1,"31":1,"41":1,"45":1,"55":2,"57":1,"59":1,"61":4,"63":7,"64":2,"66":3}}],["bonus",{"0":{"66":1}}],["box",{"2":{"11":1,"43":1,"63":1}}],["bottom",{"2":{"2":1,"11":1,"43":1,"62":1}}],["both",{"2":{"1":2,"35":1,"55":1}}],["bolivia",{"2":{"1":1}}],["border",{"2":{"1":8,"50":1,"52":7,"53":9}}],["borders",{"2":{"1":7,"53":11}}],["bounding",{"2":{"63":1}}],["bounded",{"2":{"63":1}}],["boundaries",{"2":{"1":1}}],["boundary=",{"2":{"1":2}}],["boundary",{"2":{"1":9,"50":1,"51":1}}],["bounds",{"2":{"1":9}}],["bool",{"2":{"1":5,"2":1}}],["boolmask",{"2":{"0":1,"1":6}}],["battle",{"2":{"56":1}}],["batlow",{"2":{"44":1}}],["bad",{"2":{"37":1,"64":2}}],["basic",{"2":{"2":1}}],["based",{"2":{"1":2,"2":2,"27":1,"53":1,"56":4}}],["base",{"2":{"1":2,"2":12,"25":2,"37":2}}],["bajo",{"2":{"1":1}}],["bank",{"2":{"1":2}}],["bang",{"2":{"1":4}}],["bands",{"2":{"1":1,"7":1,"66":1}}],["band",{"2":{"0":1,"1":10,"2":1,"7":1,"14":1,"18":1,"34":1,"43":1,"66":2}}],["backgroundcolor=",{"2":{"44":2}}],["background",{"0":{"36":1},"2":{"36":2,"37":2}}],["back",{"2":{"1":2,"12":1,"47":1,"59":1,"60":1,"63":1}}],["backends",{"2":{"13":1,"19":1}}],["backend",{"2":{"1":1,"2":10,"10":2,"13":1,"16":1}}],["backed",{"2":{"1":7}}],["bar",{"2":{"1":9}}],["becomes",{"2":{"31":1}}],["because",{"2":{"1":7,"4":1,"11":2,"63":1,"66":1}}],["best",{"2":{"2":1,"14":1,"43":1}}],["besides",{"2":{"1":2}}],["being",{"2":{"2":3,"12":1,"53":1}}],["beyond",{"2":{"1":1}}],["bets",{"2":{"2":1,"43":1}}],["better",{"2":{"1":1}}],["between",{"2":{"1":9,"2":1,"8":3,"12":1,"43":1,"58":1}}],["before",{"2":{"1":13,"2":1,"10":1}}],["behaviour",{"2":{"1":2}}],["behaviours",{"2":{"1":2}}],["been",{"2":{"1":4,"19":1}}],["below",{"2":{"1":1,"41":1}}],["be",{"2":{"1":217,"2":48,"4":1,"7":1,"9":1,"11":2,"12":5,"14":2,"15":2,"16":3,"17":1,"18":1,"19":3,"20":1,"26":1,"27":1,"28":1,"31":2,"43":7,"45":2,"59":1,"63":3,"64":4,"66":2}}],["away",{"2":{"63":2}}],["awap",{"2":{"1":13}}],["api",{"2":{"45":1}}],["appreciated",{"2":{"11":1}}],["approach",{"2":{"61":1}}],["appropriately",{"2":{"41":1}}],["appropriate",{"2":{"2":1,"66":1}}],["approximately",{"2":{"1":2}}],["approximates",{"2":{"1":1,"12":1,"63":1}}],["approximate",{"2":{"1":1,"12":1,"63":1}}],["appears",{"2":{"1":1}}],["appended",{"2":{"2":3}}],["append",{"2":{"1":9,"2":3}}],["apparent",{"2":{"1":1}}],["applies",{"2":{"27":1}}],["applied",{"2":{"1":16,"2":1,"26":1,"27":1}}],["applications",{"2":{"23":1}}],["applicable",{"2":{"2":1,"53":1,"55":1}}],["apply",{"2":{"1":4,"59":1}}],["amounts",{"2":{"22":1}}],["amount",{"2":{"2":1,"43":1}}],["americas",{"2":{"47":1}}],["america",{"2":{"1":1}}],["avg",{"2":{"64":1,"66":1}}],["avoid",{"2":{"2":1}}],["averages",{"2":{"64":1}}],["average",{"2":{"1":3,"57":3,"59":2,"60":2,"61":2,"63":2,"64":2,"65":1,"66":1}}],["available",{"2":{"1":3,"2":1,"7":1,"8":1,"12":1,"26":1,"37":1,"57":1,"63":1}}],["affected",{"2":{"31":1}}],["africa",{"2":{"1":1}}],["after",{"2":{"1":14,"2":1}}],["auc",{"2":{"37":2}}],["authority",{"2":{"26":10,"27":5,"29":5,"30":5,"31":10,"34":5,"38":5,"40":5,"44":5,"52":10,"53":5,"57":15,"62":5,"63":5,"64":5}}],["authentication",{"2":{"11":1}}],["automatic",{"2":{"2":9,"43":9}}],["automatically",{"2":{"1":11,"2":7,"13":1,"34":1}}],["aus",{"2":{"1":3,"34":2,"35":1,"36":1,"38":1,"44":3}}],["ausbounds",{"2":{"1":2,"44":2}}],["australian",{"2":{"1":1}}],["australia",{"2":{"1":2,"34":1,"44":2}}],["adding",{"2":{"26":1}}],["additional",{"2":{"1":3,"7":1,"23":1,"66":2}}],["additionally",{"2":{"1":6}}],["addition",{"2":{"1":2}}],["add",{"2":{"1":1,"4":1,"9":3,"10":7,"11":1,"53":1}}],["added",{"2":{"1":1,"53":1}}],["admin",{"2":{"1":7,"51":1,"62":1}}],["again",{"2":{"1":1,"2":1,"53":1,"60":1}}],["ag",{"2":{"1":2}}],["aggregation",{"2":{"1":12}}],["aggregated",{"2":{"1":6}}],["aggregate",{"2":{"0":2,"1":10,"22":2,"55":3}}],["axs",{"2":{"44":5,"57":6}}],["ax",{"2":{"34":3,"40":3,"57":4,"59":2,"60":3}}],["axis3",{"2":{"2":1,"43":1}}],["axistype",{"2":{"2":1,"43":1}}],["axis",{"2":{"1":6,"2":8,"8":1,"12":1,"22":1,"26":4,"27":2,"29":2,"30":2,"31":5,"34":3,"38":2,"40":3,"41":1,"43":8,"44":3,"45":1,"52":4,"53":2,"57":8,"62":3,"63":3,"64":2}}],["axes",{"2":{"1":4,"45":2,"47":1,"55":2}}],["acquiring",{"0":{"62":1}}],["across",{"0":{"66":1},"2":{"22":1,"37":1,"61":1,"62":1,"63":1,"64":1}}],["activate",{"2":{"8":1,"46":1,"62":1}}],["activated",{"2":{"2":2}}],["actually",{"2":{"2":2,"11":1,"12":1,"29":1,"66":1}}],["actual",{"2":{"1":2}}],["accomplish",{"2":{"66":1}}],["according",{"2":{"64":1}}],["account",{"2":{"12":1,"63":1,"64":2,"65":2}}],["accuracy",{"2":{"37":2}}],["accurate",{"2":{"1":1}}],["accept",{"2":{"45":1,"56":1}}],["accepts",{"2":{"1":2,"2":2,"43":1}}],["accepted",{"2":{"1":2,"40":1}}],["accessible",{"2":{"11":1}}],["access",{"2":{"1":3,"14":1,"33":1}}],["atol",{"2":{"1":9}}],["attributes",{"2":{"41":1,"44":1}}],["attempting",{"2":{"1":1}}],["attached",{"2":{"1":8}}],["at",{"0":{"35":1},"2":{"1":7,"2":5,"8":2,"11":1,"12":3,"41":1,"47":2,"49":1,"64":1}}],["alignment",{"2":{"59":1}}],["aligned",{"2":{"1":1}}],["alpha=0",{"2":{"34":1}}],["algebra",{"2":{"25":1}}],["algorithm",{"2":{"1":3,"55":1,"56":2}}],["altered",{"2":{"2":1,"47":2}}],["alternate",{"2":{"1":3,"2":2}}],["although",{"2":{"1":1}}],["along",{"2":{"1":7,"23":1}}],["already",{"2":{"1":4,"2":8}}],["also",{"2":{"1":34,"2":3,"6":1,"12":1,"14":1,"15":1,"25":1,"26":1,"31":2,"37":1,"53":1,"55":2,"64":1,"65":1,"66":2}}],["allow",{"2":{"1":1,"45":1}}],["allows",{"2":{"1":1,"56":1}}],["allocating",{"2":{"1":1}}],["alllayers",{"2":{"1":2}}],["alllayers=true",{"2":{"1":2}}],["all",{"2":{"1":75,"2":5,"8":2,"11":1,"12":2,"14":1,"15":1,"23":1,"34":1,"53":2,"55":1,"60":1,"62":2,"63":2,"64":2,"66":3}}],["always",{"2":{"1":3,"2":1,"8":1,"11":2,"18":1,"55":1,"56":1,"59":1,"61":1,"65":1}}],["arithmetic",{"2":{"61":1,"65":1}}],["around",{"2":{"47":1}}],["arbitrary",{"2":{"7":1,"15":1}}],["architectures",{"2":{"2":1}}],["archive",{"2":{"2":2}}],["archgdal",{"0":{"33":1},"2":{"1":21,"2":2,"10":2,"12":1,"14":1,"19":1,"33":2,"40":1,"45":1,"46":1,"50":1,"57":1,"62":1,"63":1}}],["args",{"2":{"45":1}}],["argentina",{"2":{"1":4}}],["argument",{"2":{"1":4,"2":2,"12":1,"25":1,"62":1,"63":1}}],["arguments",{"2":{"1":26,"2":2}}],["area",{"2":{"1":14,"2":1,"12":10,"61":5,"63":10,"64":7,"65":3,"66":4}}],["areas",{"2":{"1":19,"12":2,"22":1,"63":4,"64":5,"66":5}}],["are",{"2":{"1":103,"2":8,"7":1,"8":3,"11":4,"12":2,"14":1,"15":2,"18":3,"23":1,"31":1,"32":1,"37":2,"41":3,"43":3,"45":1,"47":1,"49":1,"53":1,"55":4,"56":2,"59":1,"60":2,"63":1,"66":2}}],["arrays",{"2":{"1":18,"2":2,"7":2,"22":1,"25":1,"28":1,"53":1}}],["array",{"0":{"5":1,"25":1},"1":{"26":1,"27":1,"28":1,"29":1,"30":1,"31":1},"2":{"1":48,"2":2,"8":2,"22":1,"23":1,"26":1,"27":2,"33":1,"45":1}}],["asc",{"2":{"14":1}}],["aspect",{"2":{"12":1,"40":1,"41":1,"62":1}}],["ashmore",{"2":{"1":1}}],["assumption",{"2":{"64":1}}],["assumes",{"2":{"56":1}}],["assuming",{"2":{"1":1,"12":2,"63":1}}],["associated",{"2":{"7":1}}],["assign",{"2":{"1":2}}],["assigned",{"2":{"1":6}}],["as",{"2":{"1":70,"2":14,"8":1,"10":1,"12":2,"14":3,"15":2,"19":1,"20":1,"23":2,"25":2,"29":1,"41":2,"47":1,"49":1,"63":2,"65":1,"66":6}}],["a",{"0":{"37":1,"48":1,"58":1,"60":1},"1":{"59":1,"60":1},"2":{"1":442,"2":108,"6":2,"8":7,"10":1,"11":5,"12":15,"13":1,"20":4,"22":3,"23":2,"24":1,"25":1,"26":4,"27":4,"28":2,"29":2,"30":1,"31":5,"32":1,"34":1,"35":1,"36":1,"37":1,"39":2,"40":7,"41":4,"43":11,"45":6,"46":2,"47":5,"49":3,"50":1,"52":1,"53":6,"55":6,"56":2,"57":3,"60":2,"61":2,"62":2,"63":11,"64":1,"65":3,"66":11}}],["above",{"2":{"66":2}}],["about",{"2":{"1":8,"2":2,"12":1,"63":2,"64":1}}],["absence",{"2":{"37":1}}],["absolute",{"2":{"1":2}}],["abstracrasterseries",{"2":{"1":2}}],["abstrackrasterstack",{"2":{"1":1}}],["abstractweights",{"2":{"2":1}}],["abstractdiskarray",{"2":{"2":3}}],["abstractdimensionalarray",{"2":{"1":1}}],["abstractdimarray",{"2":{"1":4}}],["abstractvector",{"2":{"1":3}}],["abstractgeometry",{"2":{"1":15}}],["abstractbasicdimarray",{"2":{"1":1}}],["abstractstack",{"2":{"1":2}}],["abstractstring",{"2":{"1":3,"2":6}}],["abstractsampled",{"2":{"1":2,"2":1}}],["abstractarray",{"2":{"1":5,"2":1}}],["abstract",{"2":{"1":3,"2":1}}],["abstractrasters",{"2":{"1":5}}],["abstractrasterstack",{"2":{"0":1,"1":12,"2":5}}],["abstractrasterseries",{"2":{"0":1,"1":8,"2":5}}],["abstractraster",{"2":{"0":1,"1":27,"2":9}}],["abstractprojected",{"2":{"0":1,"1":4,"2":1}}],["annoyingly",{"2":{"66":1}}],["analysis",{"2":{"66":2}}],["animations",{"0":{"43":1}}],["animalia",{"2":{"33":15}}],["answer",{"2":{"1":2}}],["anything",{"2":{"31":1}}],["any",{"2":{"1":16,"2":6,"11":1,"22":1,"26":3,"27":1,"29":1,"30":1,"31":3,"37":2,"39":1,"40":1,"41":2,"43":1,"45":1,"47":2,"57":3,"59":3,"60":1,"62":1,"63":2,"64":1}}],["another",{"2":{"1":11,"7":1,"22":3,"55":1,"59":1}}],["and",{"0":{"21":1,"24":1,"33":1,"50":1,"54":1,"57":1},"1":{"55":1,"56":1,"57":1,"58":1,"59":1,"60":1},"2":{"1":165,"2":24,"4":2,"6":1,"7":7,"8":3,"10":3,"11":6,"12":8,"13":1,"14":1,"15":2,"18":2,"19":1,"20":5,"21":1,"22":3,"23":1,"25":2,"26":1,"31":1,"32":3,"33":1,"34":3,"35":2,"36":1,"37":3,"38":1,"41":3,"43":2,"45":3,"47":5,"52":1,"53":9,"55":8,"56":1,"57":1,"58":2,"59":5,"60":6,"61":2,"62":3,"63":5,"64":4,"65":3,"66":10}}],["an",{"0":{"8":1,"22":1,"23":1},"2":{"1":77,"2":14,"8":3,"10":1,"11":2,"21":1,"23":2,"26":1,"28":2,"31":2,"32":2,"41":1,"43":1,"45":1,"53":1,"64":2,"66":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/dev/assets/chunks/@localSearchIndexroot.DLSKlNC3.js b/dev/assets/chunks/@localSearchIndexroot.DLSKlNC3.js new file mode 100644 index 00000000..0fb45936 --- /dev/null +++ b/dev/assets/chunks/@localSearchIndexroot.DLSKlNC3.js @@ -0,0 +1 @@ +const e='{"documentCount":67,"nextId":67,"documentIds":{"0":"/Rasters.jl/dev/api#index","1":"/Rasters.jl/dev/api#Reference-Exported-functions","2":"/Rasters.jl/dev/api#Reference-Internal-functions","3":"/Rasters.jl/dev/get_started#Quick-start","4":"/Rasters.jl/dev/get_started#Install-the-package-by-typing:","5":"/Rasters.jl/dev/get_started#Getting-the-lookup-array-from-dimensions","6":"/Rasters.jl/dev/get_started#Select-by-index","7":"/Rasters.jl/dev/get_started#Select-by-value","8":"/Rasters.jl/dev/get_started#Subsetting-an-object","9":"/Rasters.jl/dev/manual/cellarea#cellarea","10":"/Rasters.jl/dev/#How-to-Install-Rasters.jl?","11":"/Rasters.jl/dev/#Package-extensions","12":"/Rasters.jl/dev/#Bugs","13":"/Rasters.jl/dev/manual/data_sources#Data-sources","14":"/Rasters.jl/dev/manual/data_sources#gdal","15":"/Rasters.jl/dev/manual/data_sources#netcdf","16":"/Rasters.jl/dev/manual/data_sources#zarr","17":"/Rasters.jl/dev/manual/data_sources#grib","18":"/Rasters.jl/dev/manual/data_sources#grd","19":"/Rasters.jl/dev/manual/data_sources#Writing-file-formats-to-disk","20":"/Rasters.jl/dev/manual/data_sources#RasterDataSources.jl-integration","21":"/Rasters.jl/dev/manual/methods#Point,-polygon-and-table-operations","22":"/Rasters.jl/dev/manual/methods#Methods-that-change-the-resolution-or-extent-of-an-object","23":"/Rasters.jl/dev/manual/methods#Methods-that-change-an-objects-values","24":"/Rasters.jl/dev/manual/methods#Methods-to-load,-write-and-modify-data-sources","25":"/Rasters.jl/dev/tutorials/array_operations#Array-operations","26":"/Rasters.jl/dev/tutorials/array_operations#Mean-over-the-time-dimension:","27":"/Rasters.jl/dev/tutorials/array_operations#broadcasting","28":"/Rasters.jl/dev/tutorials/array_operations#Modifying-object-properties","29":"/Rasters.jl/dev/tutorials/array_operations#rebuild","30":"/Rasters.jl/dev/tutorials/array_operations#replace-missing","31":"/Rasters.jl/dev/tutorials/array_operations#set","32":"/Rasters.jl/dev/tutorials/gbif_wflow#Species-distribution-modelling-workflow","33":"/Rasters.jl/dev/tutorials/gbif_wflow#Load-Rasters,-ArchGDAL,-RasterDataSources-and-GBIF","34":"/Rasters.jl/dev/tutorials/gbif_wflow#Get-Bioclimatic-variables","35":"/Rasters.jl/dev/tutorials/gbif_wflow#Extract-bioclim-variables-at-occurrence-points","36":"/Rasters.jl/dev/tutorials/gbif_wflow#Sample-background-points","37":"/Rasters.jl/dev/tutorials/gbif_wflow#Fit-a-statistical-ensemble","38":"/Rasters.jl/dev/tutorials/gbif_wflow#Make-predictions-of-climatic-suitability","39":"/Rasters.jl/dev/tutorials/plot_makie#Plotting-in-Makie","40":"/Rasters.jl/dev/tutorials/plot_makie#2-D-rasters-in-Makie","41":"/Rasters.jl/dev/tutorials/plot_makie#3-D-rasters-in-Makie","42":"/Rasters.jl/dev/tutorials/plot_makie#reset-theme","43":"/Rasters.jl/dev/tutorials/plot_makie#Plotting-with-Observables,-animations","44":"/Rasters.jl/dev/tutorials/plot_makie#Using-vanilla-Makie","45":"/Rasters.jl/dev/tutorials/plotting#Plots,-simple","46":"/Rasters.jl/dev/tutorials/plotting#Makie,-simple","47":"/Rasters.jl/dev/tutorials/plotting#Loading-data","48":"/Rasters.jl/dev/tutorials/plotting#Plot-a-contour-plot","49":"/Rasters.jl/dev/tutorials/plotting#write-to-disk","50":"/Rasters.jl/dev/tutorials/plotting#Polygon-masking,-mosaic-and-plot","51":"/Rasters.jl/dev/tutorials/plotting#Download-the-shapefile","52":"/Rasters.jl/dev/tutorials/plotting#Load-using-Shapefile.jl","53":"/Rasters.jl/dev/tutorials/plotting#Plotting-with-Plots.jl","54":"/Rasters.jl/dev/tutorials/resample#Reprojection-and-resampling","55":"/Rasters.jl/dev/tutorials/resample#What-is-resampling?","56":"/Rasters.jl/dev/tutorials/resample#How-resample-works","57":"/Rasters.jl/dev/tutorials/resample#resolution,-size-and-methods","58":"/Rasters.jl/dev/tutorials/resample#reproject-with-resample-using-a-ProjString","59":"/Rasters.jl/dev/tutorials/resample#Sinusoidal-Projection-(MODIS)","60":"/Rasters.jl/dev/tutorials/resample#A-Raster-from-scratch","61":"/Rasters.jl/dev/tutorials/spatial_mean#Computing-spatial-means","62":"/Rasters.jl/dev/tutorials/spatial_mean#Acquiring-the-data","63":"/Rasters.jl/dev/tutorials/spatial_mean#Processing-the-data","64":"/Rasters.jl/dev/tutorials/spatial_mean#Computing-the-spatial-mean","65":"/Rasters.jl/dev/tutorials/spatial_mean#summary","66":"/Rasters.jl/dev/tutorials/spatial_mean#Bonus:-Computing-spatial-means-across-dimensions"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,49],"1":[3,1,1551],"2":[3,1,605],"3":[2,1,1],"4":[6,2,134],"5":[6,2,21],"6":[3,2,105],"7":[3,2,157],"8":[3,2,118],"9":[1,1,322],"10":[6,1,37],"11":[2,1,60],"12":[2,1,142],"13":[2,1,24],"14":[1,2,37],"15":[1,2,61],"16":[1,2,32],"17":[1,2,15],"18":[1,2,32],"19":[5,2,54],"20":[3,2,60],"21":[5,1,19],"22":[10,1,70],"23":[6,1,47],"24":[8,1,34],"25":[2,1,32],"26":[6,2,171],"27":[1,2,162],"28":[3,2,33],"29":[1,5,142],"30":[2,5,118],"31":[1,5,188],"32":[4,1,56],"33":[6,4,109],"34":[3,4,144],"35":[6,4,41],"36":[3,4,174],"37":[4,4,202],"38":[5,4,113],"39":[3,1,37],"40":[5,1,141],"41":[5,1,84],"42":[2,1,4],"43":[4,2,174],"44":[3,2,162],"45":[2,1,125],"46":[2,1,20],"47":[2,1,233],"48":[4,2,10],"49":[3,2,59],"50":[5,1,38],"51":[3,1,28],"52":[4,3,139],"53":[4,3,208],"54":[3,1,1],"55":[4,3,126],"56":[3,3,74],"57":[4,3,277],"58":[6,3,45],"59":[4,9,239],"60":[4,9,197],"61":[3,1,78],"62":[3,3,188],"63":[3,3,348],"64":[4,3,220],"65":[1,3,49],"66":[6,3,242]},"averageFieldLength":[3.4477611940298507,2.298507462686567,134.59701492537312],"storedFields":{"0":{"title":"Index","titles":[]},"1":{"title":"Reference - Exported functions","titles":[]},"2":{"title":"Reference - Internal functions","titles":[]},"3":{"title":"Quick start","titles":[]},"4":{"title":"Install the package by typing:","titles":["Quick start"]},"5":{"title":"Getting the lookup array from dimensions","titles":["Quick start"]},"6":{"title":"Select by index","titles":["Quick start"]},"7":{"title":"Select by value","titles":["Quick start"]},"8":{"title":"Subsetting an object","titles":["Quick start"]},"9":{"title":"cellarea","titles":[]},"10":{"title":"How to Install Rasters.jl?","titles":[]},"11":{"title":"Package extensions","titles":[]},"12":{"title":"🐞📌 Bugs","titles":[]},"13":{"title":"Data sources","titles":[]},"14":{"title":"GDAL","titles":["Data sources"]},"15":{"title":"NetCDF","titles":["Data sources"]},"16":{"title":"Zarr","titles":["Data sources"]},"17":{"title":"GRIB","titles":["Data sources"]},"18":{"title":"GRD","titles":["Data sources"]},"19":{"title":"Writing file formats to disk","titles":["Data sources"]},"20":{"title":"RasterDataSources.jl integration","titles":["Data sources"]},"21":{"title":"Point, polygon and table operations","titles":[]},"22":{"title":"Methods that change the resolution or extent of an object","titles":[]},"23":{"title":"Methods that change an objects values","titles":[]},"24":{"title":"Methods to load, write and modify data sources","titles":[]},"25":{"title":"Array operations","titles":[]},"26":{"title":"Mean over the time dimension:","titles":["Array operations"]},"27":{"title":"Broadcasting","titles":["Array operations"]},"28":{"title":"Modifying object properties","titles":["Array operations"]},"29":{"title":"rebuild","titles":["Array operations","Modifying object properties"]},"30":{"title":"replace_missing","titles":["Array operations","Modifying object properties"]},"31":{"title":"set","titles":["Array operations","Modifying object properties"]},"32":{"title":"Species distribution modelling workflow","titles":[]},"33":{"title":"Load Rasters, ArchGDAL, RasterDataSources and GBIF","titles":["Species distribution modelling workflow"]},"34":{"title":"Get Bioclimatic variables","titles":["Species distribution modelling workflow"]},"35":{"title":"Extract bioclim variables at occurrence points","titles":["Species distribution modelling workflow"]},"36":{"title":"Sample background points","titles":["Species distribution modelling workflow"]},"37":{"title":"Fit a statistical ensemble","titles":["Species distribution modelling workflow"]},"38":{"title":"Make predictions of climatic suitability","titles":["Species distribution modelling workflow"]},"39":{"title":"Plotting in Makie","titles":[]},"40":{"title":"2-D rasters in Makie","titles":[]},"41":{"title":"3-D rasters in Makie","titles":[]},"42":{"title":"reset theme","titles":[]},"43":{"title":"Plotting with Observables, animations","titles":["reset theme"]},"44":{"title":"Using vanilla Makie","titles":["reset theme"]},"45":{"title":"Plots, simple","titles":[]},"46":{"title":"Makie, simple","titles":[]},"47":{"title":"Loading data","titles":[]},"48":{"title":"Plot a contour plot","titles":["Loading data"]},"49":{"title":"write to disk","titles":["Loading data"]},"50":{"title":"Polygon masking, mosaic and plot","titles":[]},"51":{"title":"Download the shapefile","titles":[]},"52":{"title":"Load using Shapefile.jl","titles":["Download the shapefile"]},"53":{"title":"Plotting with Plots.jl","titles":["Download the shapefile"]},"54":{"title":"Reprojection and resampling","titles":[]},"55":{"title":"What is resampling?","titles":["Reprojection and resampling"]},"56":{"title":"How resample works","titles":["Reprojection and resampling"]},"57":{"title":"resolution, size and methods","titles":["Reprojection and resampling"]},"58":{"title":"reproject with resample using a ProjString","titles":["Reprojection and resampling"]},"59":{"title":"Sinusoidal Projection (MODIS)","titles":["Reprojection and resampling","reproject with resample using a ProjString"]},"60":{"title":"A Raster from scratch","titles":["Reprojection and resampling","reproject with resample using a ProjString"]},"61":{"title":"Computing spatial means","titles":[]},"62":{"title":"Acquiring the data","titles":["Computing spatial means"]},"63":{"title":"Processing the data","titles":["Computing spatial means"]},"64":{"title":"Computing the spatial mean","titles":["Computing spatial means"]},"65":{"title":"Summary","titles":["Computing spatial means"]},"66":{"title":"Bonus: Computing spatial means across dimensions","titles":["Computing spatial means"]}},"dirtCount":0,"index":[["$",{"2":{"57":2}}],["≡",{"2":{"57":1}}],["└──────────┴──────────┴──────────┴───────────┴──────────┘",{"2":{"37":2}}],["└──────────────────────────┴─────────┴─────────┴─────────┴──────────┴───────────",{"2":{"33":1}}],["└───────────────────────────────────────────────────────────┘",{"2":{"6":2,"7":1}}],["└──────────────────────────────────────────────────────────────────────────────┘",{"2":{"4":1,"6":1,"9":3,"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"47":2,"52":2,"53":1,"57":3,"59":3,"60":2,"62":1,"63":1,"64":1}}],["└─────────────────────────────────────────────────────────────────────────────────┘",{"2":{"1":1,"9":1,"63":1}}],["└───────┴────────────┴─────────┘",{"2":{"37":1}}],["└──────┴─────────┴────────┘",{"2":{"37":1}}],["├──────────┼──────────┼──────────┼───────────┼──────────┤",{"2":{"37":2}}],["├─────────────────────┴──────────────────────────────────────────────────",{"2":{"44":1,"53":1}}],["├──────────────────────┴─────────────────────────────────────────────────",{"2":{"9":1}}],["├───────────────────────┴────────────────────────────────────────────────",{"2":{"52":1}}],["├───────────────────────┴───────────────────────────────────────────────────",{"2":{"1":1,"9":1,"63":1}}],["├──────────────────────────┼─────────┼─────────┼─────────┼──────────┼───────────",{"2":{"33":1}}],["├─────────────────────────────┴──────────────────────────────────────────",{"2":{"60":2}}],["├─────────────────────────────────┴──────────────────────────────────────",{"2":{"57":1}}],["├──────────────────────────────────┴─────────────────────────────────────",{"2":{"57":1,"59":2}}],["├────────────────────────────────────────────┴───────────────────────────",{"2":{"64":1}}],["├───────────────────────────────────────────────┴────────────────────────",{"2":{"63":1}}],["├─────────────────────────────────────────────────┴──────────────────────",{"2":{"62":1}}],["├──────────────────────────────────────────────────┴─────────────────────",{"2":{"47":1}}],["├────────────────────────────────────────────────────────────────────",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"47":2,"57":3,"59":3,"60":1,"62":1,"63":1}}],["├──────────────────────────────────────────────────────────────────────",{"2":{"4":1,"6":1,"9":3,"26":2,"27":1,"29":1,"30":1,"31":2,"34":2,"38":1,"40":1,"44":2,"47":2,"52":4,"53":2,"57":3,"59":3,"60":2,"62":1,"63":1,"64":1}}],["├─────────────────────────────────────────────────────────────────────────",{"2":{"1":1,"9":1,"63":1}}],["├───────────────────────────────────────────────────┴────────────────────",{"2":{"26":1,"27":1,"29":1,"31":2,"40":1,"47":1}}],["├───────────────────────────────────────────────────",{"2":{"6":2,"7":1}}],["├────────────────────────────────────────────────┴───────────────────────",{"2":{"26":1}}],["├───────────────────────────────────────────┴────────────────────────────",{"2":{"38":1}}],["├───────────────────────────────────┴────────────────────────────────────",{"2":{"30":1,"57":1,"59":1}}],["├───────────────────────────┴────────────────────────────────────────────",{"2":{"4":1,"6":1}}],["├────────────────────────┴───────────────────────────────────────────────",{"2":{"9":2}}],["├────────────────────────┴────────────────────────────",{"2":{"6":2,"7":1}}],["├────────────────────┴───────────────────────────────────────────────────",{"2":{"34":1,"52":1}}],["├───────┼────────────┼─────────┤",{"2":{"37":1}}],["├──────┼─────────┼────────┤",{"2":{"37":1}}],["🐞📌",{"0":{"12":1}}],["↗",{"2":{"4":1,"6":1,"47":2}}],["┌──────────┬──────────┬──────────┬───────────┬──────────┐",{"2":{"37":2}}],["┌──────────────────────────┬─────────┬─────────┬─────────┬──────────┬───────────",{"2":{"33":1}}],["┌───────┬────────────┬─────────┐",{"2":{"37":1}}],["┌──────┬─────────┬────────┐",{"2":{"37":1}}],["┌",{"2":{"4":1,"6":3,"7":1,"9":3,"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"47":2,"52":2,"53":1,"57":3,"59":3,"60":2,"62":1,"63":1,"64":1}}],["⋱",{"2":{"1":1,"26":1,"27":1,"29":1,"30":1,"31":2,"33":1,"38":1,"40":1,"47":2,"57":3,"59":3,"60":2,"62":1,"63":1,"64":1}}],["⋮",{"2":{"1":6,"26":2,"27":2,"29":2,"30":2,"31":4,"33":6,"36":1,"38":2,"40":2,"47":2,"57":7,"59":6,"60":4,"62":2,"63":1,"64":1}}],["─────┼──────────────────────────────────────────────────────────────────────────",{"2":{"1":1}}],["⋯",{"2":{"1":6,"33":17}}],["^a",{"2":{"1":1}}],["quickly",{"2":{"12":1,"45":1}}],["quick",{"0":{"3":1},"1":{"4":1,"5":1,"6":1,"7":1,"8":1}}],["quot",{"2":{"2":18,"9":2,"14":4,"15":4,"19":2,"43":2,"55":2,"57":24}}],["quadrant",{"2":{"62":1}}],["quadratic",{"2":{"1":1}}],["quartile",{"2":{"1":4}}],["quality",{"2":{"1":1,"45":1}}],["q3",{"2":{"1":1,"57":1}}],["q1",{"2":{"1":1,"57":1}}],["`cellarea`",{"2":{"62":1}}],["`collect`",{"2":{"1":1}}],["`stack`",{"2":{"43":1}}],["`raster`",{"2":{"2":1}}],["`rasters",{"2":{"1":1}}],["`gi",{"2":{"1":1}}],["`missingval",{"2":{"1":1}}],["`missing`",{"2":{"1":1}}],["`vector`",{"2":{"1":1}}],["`extract`",{"2":{"1":1}}],["zscale",{"2":{"62":1}}],["z",{"2":{"1":1,"2":1,"7":1,"15":1,"31":4,"43":1,"47":1,"49":1}}],["zarrdatasets",{"2":{"16":1,"17":1}}],["zarr",{"0":{"16":1},"2":{"16":2}}],["za",{"2":{"1":1}}],["zone",{"2":{"1":1}}],["zonal",{"2":{"0":1,"1":5,"21":2,"64":3}}],["zeros",{"2":{"1":1}}],["zealand",{"2":{"1":1}}],["53",{"2":{"52":3,"53":2}}],["594",{"2":{"57":1}}],["59774",{"2":{"36":1}}],["591",{"2":{"27":1}}],["5151",{"2":{"57":1}}],["519",{"2":{"36":1}}],["5165",{"2":{"27":1}}],["5695",{"2":{"27":1}}],["552039794457",{"2":{"60":1}}],["5545",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["55",{"2":{"9":3,"53":1,"63":5,"64":5}}],["5504",{"2":{"1":1}}],["5898",{"2":{"57":1}}],["58336",{"2":{"4":1,"6":3,"7":1}}],["5858",{"2":{"1":1}}],["5468",{"2":{"57":1}}],["54",{"2":{"52":1}}],["541666666666664",{"2":{"44":2}}],["54166666666669",{"2":{"44":1}}],["542",{"2":{"1":1}}],["5447657183842469",{"2":{"2":2}}],["5447",{"2":{"1":1}}],["544561f0",{"2":{"1":1}}],["5249",{"2":{"33":1}}],["5291143028176258",{"2":{"2":1}}],["52",{"2":{"1":1,"36":2}}],["5754",{"2":{"60":1}}],["5736",{"2":{"60":1}}],["5718",{"2":{"59":2,"60":1}}],["5793",{"2":{"57":1}}],["57",{"2":{"1":1,"59":2,"60":1}}],["5",{"2":{"1":8,"2":3,"8":1,"9":8,"26":6,"27":3,"29":4,"30":3,"31":6,"34":1,"35":1,"38":6,"40":4,"44":2,"45":1,"46":1,"47":8,"52":1,"57":10,"58":1,"59":1,"60":5,"62":3,"63":3,"64":2,"66":1}}],["502",{"2":{"37":3}}],["5025",{"2":{"27":1}}],["509",{"2":{"36":1}}],["5001",{"2":{"59":1}}],["500",{"2":{"36":3,"37":1}}],["5047",{"2":{"33":1}}],["50",{"2":{"1":5,"2":1,"8":1,"9":13,"37":2,"44":1,"63":3}}],[">",{"2":{"1":1}}],[">=",{"2":{"1":2}}],["954096",{"2":{"37":1}}],["951177",{"2":{"37":1}}],["9515",{"2":{"36":1}}],["9464e6",{"2":{"60":1}}],["946312",{"2":{"36":1}}],["948418",{"2":{"37":2}}],["94846",{"2":{"37":1}}],["949887",{"2":{"37":1}}],["94992",{"2":{"37":1}}],["949934",{"2":{"37":1}}],["99406e7",{"2":{"60":1}}],["99963e7",{"2":{"60":1}}],["999626604247498e7",{"2":{"60":1}}],["9999",{"2":{"29":2,"30":17}}],["99999999999997",{"2":{"26":1,"27":1,"29":1,"30":1,"31":1,"34":1,"36":3,"38":1,"40":1,"52":1,"57":1,"62":1}}],["9987e7",{"2":{"59":1}}],["99174e6",{"2":{"59":1}}],["991737669952895e6",{"2":{"59":2}}],["995396",{"2":{"37":1}}],["995067",{"2":{"37":1}}],["995477",{"2":{"37":1}}],["995986",{"2":{"37":1}}],["99684e7",{"2":{"59":1,"60":1}}],["996417",{"2":{"37":1}}],["996724",{"2":{"37":1}}],["996619",{"2":{"37":1}}],["99703",{"2":{"37":1}}],["9817",{"2":{"59":1}}],["98168929439024",{"2":{"59":3}}],["981033",{"2":{"36":1}}],["98345e6",{"2":{"59":1}}],["983453040980069e6",{"2":{"59":1}}],["9826",{"2":{"57":1}}],["98×102",{"2":{"52":5}}],["98008",{"2":{"37":1}}],["987919",{"2":{"36":1}}],["91862e6",{"2":{"60":1}}],["9183",{"2":{"57":1}}],["912384183634",{"2":{"60":1}}],["9122",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["911459",{"2":{"36":1}}],["9375",{"2":{"36":1}}],["9373",{"2":{"26":1}}],["931553",{"2":{"36":1}}],["930569",{"2":{"36":1}}],["9357",{"2":{"33":1}}],["96494e6",{"2":{"59":1}}],["96977",{"2":{"36":1}}],["9605",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["963473",{"2":{"4":1,"6":3,"7":1}}],["921",{"2":{"27":1}}],["920474",{"2":{"4":1,"6":3,"7":1}}],["9262",{"2":{"1":1}}],["97418e6",{"2":{"60":1}}],["974183816928538e6",{"2":{"60":1}}],["97323e6",{"2":{"60":1}}],["97322e6",{"2":{"59":1}}],["9734",{"2":{"57":1}}],["973637",{"2":{"36":1}}],["978752",{"2":{"37":1}}],["978088",{"2":{"37":3}}],["977424",{"2":{"37":3}}],["970146",{"2":{"4":1,"6":3,"7":1}}],["97",{"2":{"1":3}}],["9",{"2":{"1":2,"2":2,"37":1,"38":1,"47":2,"52":2,"59":7,"60":5}}],["9043",{"2":{"60":1}}],["9049",{"2":{"59":2,"60":1}}],["9036",{"2":{"60":1}}],["9063",{"2":{"59":2,"60":1}}],["9056",{"2":{"59":2,"60":1}}],["9072",{"2":{"57":1}}],["90771",{"2":{"4":1,"6":3,"7":1}}],["90036e",{"2":{"38":1}}],["90",{"2":{"1":5,"2":5,"9":4,"26":8,"27":4,"29":4,"30":4,"31":8,"40":4,"47":3,"52":3,"57":12,"59":2,"60":5,"62":4,"63":4}}],["71",{"2":{"52":1}}],["712032",{"2":{"36":1}}],["712496",{"2":{"4":1,"6":3,"7":1}}],["7993",{"2":{"57":1}}],["79",{"2":{"47":2}}],["798",{"2":{"27":1}}],["7983f0",{"2":{"1":2}}],["7356",{"2":{"60":1}}],["7351",{"2":{"59":2,"60":1}}],["7338",{"2":{"59":2,"60":1}}],["7339",{"2":{"59":2,"60":1}}],["7341",{"2":{"60":1}}],["7343",{"2":{"60":1}}],["734",{"2":{"59":2,"60":1}}],["7346",{"2":{"59":2,"60":1}}],["738",{"2":{"57":1}}],["732",{"2":{"57":1}}],["73",{"2":{"53":1}}],["7317",{"2":{"59":1}}],["7315",{"2":{"36":1}}],["73103",{"2":{"36":1}}],["736",{"2":{"36":1,"60":1}}],["7360504790189618",{"2":{"2":2}}],["7799",{"2":{"57":1}}],["77775",{"2":{"36":1}}],["775f0",{"2":{"1":1}}],["728",{"2":{"57":1}}],["7288",{"2":{"1":1}}],["720",{"2":{"57":3,"59":1,"60":4}}],["72",{"2":{"26":2,"29":2,"30":2,"31":4,"40":2,"53":2,"57":2}}],["75002543153558",{"2":{"59":1}}],["75000000000003",{"2":{"44":1}}],["7547",{"2":{"57":1}}],["7513",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["7583",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["75",{"2":{"9":3,"43":1,"57":6,"59":4,"60":9}}],["74",{"2":{"63":1}}],["7431",{"2":{"57":1}}],["742603",{"2":{"36":1}}],["747373",{"2":{"4":1,"6":3,"7":1}}],["7454",{"2":{"1":1}}],["765247",{"2":{"36":1}}],["7645",{"2":{"36":1}}],["76",{"2":{"1":1}}],["780817076729905e6",{"2":{"60":1}}],["788089",{"2":{"4":1,"6":3,"7":1}}],["78",{"2":{"1":1,"33":1,"47":2}}],["7",{"2":{"1":5,"34":1,"38":1,"63":1,"64":1}}],["707096",{"2":{"36":1}}],["701",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["7030",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["708290",{"2":{"1":4,"9":4,"63":4}}],["70",{"2":{"1":2,"9":2,"52":2}}],["6th",{"2":{"66":1}}],["625",{"2":{"59":3}}],["6251",{"2":{"57":1}}],["627472",{"2":{"36":1}}],["68833265335",{"2":{"59":1}}],["68821e10",{"2":{"9":6}}],["6831",{"2":{"57":1}}],["684",{"2":{"36":1}}],["6942",{"2":{"57":1}}],["695862",{"2":{"36":1}}],["692479",{"2":{"36":1}}],["6988",{"2":{"1":1}}],["6×7",{"2":{"9":3}}],["6×6×10",{"2":{"6":1}}],["6×6×13",{"2":{"4":1}}],["6×6",{"2":{"6":2,"7":1}}],["610615",{"2":{"36":1}}],["61",{"2":{"8":1,"27":1,"63":1}}],["615364",{"2":{"4":1,"6":3,"7":1}}],["65",{"2":{"9":2}}],["651182",{"2":{"4":1,"6":3,"7":1}}],["65921",{"2":{"1":1}}],["659454f0",{"2":{"1":1}}],["640978",{"2":{"4":1,"6":3,"7":1}}],["66",{"2":{"63":5,"64":4}}],["66439e",{"2":{"38":1}}],["664186",{"2":{"4":1,"6":3,"7":1}}],["66275",{"2":{"36":1}}],["667",{"2":{"26":1,"27":1,"29":1,"30":1,"31":2,"38":2,"40":1,"57":1,"62":1}}],["66666666666665",{"2":{"53":1}}],["666666666666657",{"2":{"52":1}}],["66666666666667",{"2":{"52":1,"53":1,"63":1,"64":1}}],["666666666666668",{"2":{"36":3}}],["666666666666664",{"2":{"36":1,"52":2,"63":1,"64":1}}],["66666666666666",{"2":{"36":4}}],["6667",{"2":{"26":4,"27":2,"29":2,"30":2,"31":4,"38":1,"40":2,"57":2,"62":2,"63":2,"64":2}}],["6665",{"2":{"1":1}}],["66031e11",{"2":{"9":6}}],["6694",{"2":{"1":1}}],["67",{"2":{"1":1,"63":1,"64":3}}],["6732",{"2":{"1":1}}],["6716",{"2":{"1":1}}],["6751",{"2":{"1":1}}],["638035",{"2":{"36":1}}],["638462f0",{"2":{"1":2}}],["6326",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["6378137",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["6371008",{"2":{"1":1,"9":1,"63":1}}],["6",{"2":{"1":4,"9":9,"33":1,"37":2,"38":10,"53":1,"60":1,"62":1,"63":3,"66":1}}],["6067",{"2":{"59":1}}],["6031",{"2":{"57":1}}],["600",{"2":{"44":2,"57":2}}],["602",{"2":{"36":1}}],["60282",{"2":{"4":1,"6":3,"7":1}}],["604",{"2":{"36":1}}],["607",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["60",{"2":{"1":1,"9":4,"47":1,"63":1}}],["┤",{"2":{"1":1,"4":1,"6":3,"7":1,"9":4,"26":4,"27":2,"29":2,"30":2,"31":4,"34":2,"38":1,"40":2,"44":2,"47":4,"52":4,"53":2,"57":6,"59":6,"60":3,"62":2,"63":3,"64":1}}],["→",{"2":{"1":2,"4":2,"6":6,"7":2,"9":8,"26":4,"27":2,"29":2,"30":2,"31":4,"34":1,"38":2,"40":2,"44":1,"47":2,"52":2,"53":1,"57":6,"59":6,"60":4,"62":2,"63":4,"64":2}}],["↓",{"2":{"1":2,"4":2,"6":6,"7":2,"9":8,"26":4,"27":2,"29":2,"30":2,"31":4,"34":1,"38":2,"40":2,"44":1,"47":2,"52":2,"53":1,"57":6,"59":6,"60":4,"62":2,"63":4,"64":2}}],["┐",{"2":{"1":1,"4":2,"6":6,"7":2,"9":7,"26":4,"27":2,"29":2,"30":2,"31":4,"34":2,"38":2,"40":2,"44":2,"47":4,"52":4,"53":2,"57":6,"59":6,"60":4,"62":2,"63":3,"64":2}}],["4924",{"2":{"57":1}}],["499999999999986",{"2":{"53":1}}],["49999999999999",{"2":{"52":2}}],["49",{"2":{"36":1}}],["47",{"2":{"36":3}}],["4758",{"2":{"1":1}}],["4647",{"2":{"57":1}}],["464",{"2":{"36":1}}],["464265",{"2":{"4":1,"6":3,"7":1}}],["46",{"2":{"36":1}}],["42",{"2":{"36":1}}],["4243",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["42685e11",{"2":{"9":6}}],["4291",{"2":{"1":1}}],["4817",{"2":{"59":1}}],["489502",{"2":{"36":1}}],["48",{"2":{"8":1,"36":4}}],["480",{"2":{"1":1}}],["4317",{"2":{"33":1}}],["4333",{"2":{"33":1}}],["43",{"2":{"8":1,"36":1,"44":2}}],["4326",{"2":{"1":14,"2":2,"7":1,"9":9,"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"47":4,"52":2,"53":1,"57":3,"59":3,"60":3,"62":1,"63":4,"64":1}}],["45",{"2":{"1":4,"36":4,"47":1}}],["44",{"2":{"27":2,"36":2}}],["4474",{"2":{"1":1}}],["441",{"2":{"1":2}}],["446",{"2":{"1":1}}],["417503",{"2":{"4":1,"6":3,"7":1}}],["41",{"2":{"1":2}}],["4",{"2":{"1":3,"2":2,"9":6,"37":1,"44":2,"63":1,"66":1}}],["4063",{"2":{"57":1}}],["400",{"2":{"48":1}}],["402",{"2":{"27":1}}],["40",{"2":{"1":6,"9":1,"34":3,"38":3,"53":1,"63":1}}],["4×6",{"2":{"1":1,"9":1,"63":1}}],["│",{"2":{"1":20,"9":2,"33":108,"37":108,"63":2}}],["╭───────────────────────╮",{"2":{"1":1,"9":1,"63":1}}],["86",{"2":{"57":1}}],["8688",{"2":{"1":1}}],["82559e",{"2":{"38":1}}],["824715",{"2":{"36":1}}],["833",{"2":{"26":2,"27":2,"29":2,"30":2,"31":4,"38":1,"40":2,"57":2,"62":2,"64":1}}],["8333",{"2":{"26":4,"27":2,"29":2,"30":2,"31":4,"38":1,"40":2,"57":2,"62":2,"63":3,"64":3}}],["83333333333334",{"2":{"53":1}}],["833333333333325",{"2":{"52":1}}],["833333333333336",{"2":{"36":1,"63":2,"64":2}}],["833333333333332",{"2":{"36":3,"63":1,"64":1}}],["83333333333333",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"52":1,"57":1,"62":1}}],["83333333333331",{"2":{"26":1,"27":1,"29":1,"30":1,"31":3,"34":1,"36":1,"38":1,"40":1,"52":1,"57":1,"62":1}}],["8445",{"2":{"57":1}}],["84425",{"2":{"36":1}}],["8485",{"2":{"27":1}}],["84",{"2":{"26":4,"27":2,"29":2,"30":2,"31":4,"34":2,"38":2,"40":2,"44":2,"52":4,"53":2,"57":6,"62":2,"63":2,"64":2}}],["843774",{"2":{"4":1,"6":3,"7":1}}],["8567",{"2":{"59":1}}],["85670201015802",{"2":{"59":1}}],["85",{"2":{"9":3,"57":1}}],["800",{"2":{"48":1}}],["805",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["805253",{"2":{"4":1,"6":3,"7":1}}],["80",{"2":{"9":7,"47":2}}],["81865",{"2":{"4":1,"6":3,"7":1}}],["89325",{"2":{"36":1}}],["8901",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["89",{"2":{"26":12,"27":6,"29":6,"30":6,"31":12,"40":6,"47":2,"52":1,"57":16,"59":18,"60":8,"62":6}}],["891849",{"2":{"4":1,"6":3,"7":1}}],["8991",{"2":{"1":1}}],["8750127157678",{"2":{"59":1}}],["875",{"2":{"59":5}}],["87",{"2":{"57":1}}],["87126",{"2":{"1":1}}],["873182",{"2":{"1":4,"9":4,"63":4}}],["88013814783145",{"2":{"64":1}}],["88114e11",{"2":{"9":6}}],["882834",{"2":{"4":1,"6":3,"7":1}}],["8868",{"2":{"1":1}}],["88",{"2":{"1":1,"47":2,"57":2}}],["8",{"2":{"1":2,"9":1,"63":1,"64":1}}],["387",{"2":{"36":1}}],["38",{"2":{"36":1}}],["3818",{"2":{"33":1}}],["381",{"2":{"1":1}}],["344109655259728e11",{"2":{"64":1}}],["3424",{"2":{"60":1}}],["3405",{"2":{"59":2,"60":1}}],["3419",{"2":{"60":1}}],["3415",{"2":{"59":2,"60":1}}],["341",{"2":{"59":4,"60":2}}],["347",{"2":{"33":1}}],["34",{"2":{"27":1,"36":1}}],["315365",{"2":{"36":1}}],["31",{"2":{"9":3,"27":2,"36":4}}],["3692",{"2":{"57":1}}],["36",{"2":{"27":2,"33":7,"36":1}}],["360×180",{"2":{"57":1}}],["360",{"2":{"26":1,"47":2,"57":2}}],["360284",{"2":{"4":1,"6":3,"7":1}}],["3656",{"2":{"1":1}}],["3d",{"2":{"2":2,"39":1,"40":2,"41":2,"43":2,"45":1}}],["3378",{"2":{"60":1}}],["3389",{"2":{"60":1}}],["338789",{"2":{"4":1,"6":3,"7":1}}],["3399",{"2":{"59":2,"60":1}}],["3333",{"2":{"38":1,"64":1}}],["33333333333334",{"2":{"44":2,"63":2,"64":2}}],["333333333333332",{"2":{"36":2}}],["333333333333336",{"2":{"36":2}}],["33333333333331",{"2":{"36":6}}],["333",{"2":{"33":1,"38":2,"63":1,"64":1}}],["33",{"2":{"1":1,"27":4}}],["32807e",{"2":{"38":1}}],["328284",{"2":{"4":1,"6":3,"7":1}}],["32267",{"2":{"36":1}}],["321",{"2":{"36":1}}],["321388f0",{"2":{"1":1}}],["329",{"2":{"33":1}}],["32",{"2":{"1":3,"36":5,"53":2}}],["3568",{"2":{"59":1}}],["359",{"2":{"47":2}}],["357",{"2":{"47":2}}],["35825",{"2":{"36":1}}],["35",{"2":{"1":4,"36":1}}],["3",{"0":{"41":1},"2":{"1":9,"2":2,"4":1,"6":1,"18":1,"33":1,"34":1,"37":6,"43":3,"44":3,"47":5,"53":2,"62":1}}],["3036",{"2":{"33":1}}],["30075",{"2":{"36":1}}],["300",{"2":{"33":1}}],["309207",{"2":{"4":1,"6":3,"7":1}}],["306968",{"2":{"4":1,"6":3,"7":1}}],["3087",{"2":{"1":1}}],["30",{"2":{"1":5,"2":2,"4":8,"5":1,"6":18,"7":6,"9":2,"27":2,"36":8,"37":1,"47":2,"63":1}}],["375",{"2":{"59":1}}],["3751",{"2":{"59":1}}],["371211",{"2":{"4":1,"6":3,"7":1}}],["37",{"2":{"1":2,"33":1,"47":2}}],["396",{"2":{"33":1}}],["391",{"2":{"33":1}}],["399",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["39",{"2":{"1":7,"2":6,"9":8,"12":1,"31":1,"32":1,"37":1,"38":3,"45":1,"49":1,"55":3,"56":1,"57":2,"58":1,"59":4,"61":2,"62":2,"63":7,"64":5,"65":3,"66":4}}],["+no",{"2":{"59":1}}],["+units=m",{"2":{"59":1}}],["+b=6371007",{"2":{"59":1}}],["+a=6371007",{"2":{"59":1}}],["+y",{"2":{"59":1}}],["+x",{"2":{"59":1}}],["+type=crs",{"2":{"59":3,"60":1}}],["+lon",{"2":{"59":4,"60":1}}],["+proj=sinu",{"2":{"59":4,"60":1}}],["+",{"2":{"1":4,"34":1}}],["0=0",{"2":{"59":6,"60":1}}],["0f20",{"2":{"47":4}}],["0f0",{"2":{"1":5,"29":1,"30":1}}],["0816",{"2":{"57":1}}],["0861123",{"2":{"37":1}}],["083786",{"2":{"36":1}}],["0e",{"2":{"37":2}}],["06",{"2":{"62":1,"63":1}}],["0646276",{"2":{"37":1}}],["06475",{"2":{"36":1}}],["064573",{"2":{"36":1}}],["063",{"2":{"1":1}}],["098442",{"2":{"36":1}}],["090136",{"2":{"36":1}}],["096",{"2":{"33":1}}],["092",{"2":{"27":1}}],["046",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["04",{"2":{"8":1}}],["05119825708061",{"2":{"64":1}}],["051594",{"2":{"36":1}}],["054237",{"2":{"36":1}}],["0544021",{"2":{"4":1,"6":3,"7":1}}],["0520999",{"2":{"4":1,"6":3,"7":1}}],["05",{"2":{"1":1}}],["0275",{"2":{"36":1}}],["0273",{"2":{"1":1}}],["029825f0",{"2":{"1":1}}],["034693196307",{"2":{"59":1}}],["03897",{"2":{"36":1}}],["039394",{"2":{"36":1}}],["0334e10",{"2":{"9":6}}],["03",{"2":{"1":2}}],["078674",{"2":{"36":1}}],["0768",{"2":{"26":1}}],["076923f0",{"2":{"1":2}}],["077084f0",{"2":{"1":1}}],["07",{"2":{"1":1}}],["00375e7",{"2":{"59":1,"60":1}}],["0037508342789244e7",{"2":{"59":2,"60":2}}],["0024086594514776e7",{"2":{"59":1,"60":1}}],["0019e7",{"2":{"59":1}}],["001",{"2":{"37":1}}],["0094",{"2":{"26":1}}],["005fvlen",{"2":{"2":2}}],["005fdef",{"2":{"2":2}}],["007",{"2":{"1":1}}],["00097e7",{"2":{"60":1}}],["0001e7",{"2":{"60":1}}],["0001011187299494e7",{"2":{"60":2}}],["0001965729312722e7",{"2":{"59":1,"60":1}}],["00055e7",{"2":{"59":1}}],["000553955982158e7",{"2":{"59":1}}],["00000000000001",{"2":{"53":2,"59":1}}],["000",{"2":{"1":2}}],["00",{"2":{"1":12,"4":8,"6":8,"47":16}}],["0174532925199433",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["01154e6",{"2":{"1":4,"9":4,"63":4}}],["01t00",{"2":{"1":6,"4":4,"6":4,"47":4}}],["01",{"2":{"1":6,"4":4,"6":2,"47":10}}],["0",{"2":{"1":73,"2":24,"4":36,"6":108,"7":36,"9":79,"26":24,"27":11,"29":11,"30":26,"31":22,"34":7,"36":21,"37":37,"38":9,"40":11,"43":1,"44":8,"47":22,"49":1,"51":1,"52":13,"53":5,"57":54,"59":11,"60":10,"62":34,"63":43,"64":7}}],["kappa",{"2":{"37":2}}],["kingdom",{"2":{"33":1}}],["k",{"2":{"2":3,"47":2}}],["known",{"2":{"15":1}}],["know",{"2":{"1":3,"12":1,"28":1,"66":1}}],["keeps",{"2":{"1":1,"55":1}}],["keep",{"2":{"1":3,"2":2,"9":1,"59":1,"66":1}}],["keys",{"2":{"1":14,"2":4}}],["keyword",{"2":{"1":15,"2":6,"9":1,"35":1,"62":1,"63":1}}],["keywords",{"2":{"1":35,"2":12,"20":1,"41":1,"43":1}}],["key",{"2":{"1":2,"12":1}}],["kw",{"2":{"1":26,"2":6,"43":1,"45":1}}],["ucar",{"2":{"2":2,"47":1}}],["update",{"2":{"23":1,"31":1}}],["updating",{"2":{"1":1}}],["upper",{"2":{"1":13}}],["upper=",{"2":{"1":1}}],["uint16",{"2":{"44":3}}],["uint64",{"2":{"33":2}}],["uint32",{"2":{"1":1,"44":1}}],["uint8",{"2":{"1":2,"33":1}}],["url",{"2":{"1":6,"12":1,"47":2,"51":2}}],["unexported",{"2":{"41":1,"45":1}}],["unexpected",{"2":{"1":7}}],["unreleased",{"2":{"10":1}}],["until",{"2":{"8":1,"66":1}}],["units",{"2":{"47":4,"64":1}}],["unitrange",{"2":{"33":1}}],["unit",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"46":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["unidata",{"2":{"2":2,"47":1}}],["union",{"2":{"1":10,"2":8,"26":2,"27":1,"29":1,"31":2,"34":4,"37":2,"38":1,"40":1,"44":4,"47":2,"52":8,"53":4,"62":1,"63":1,"64":1}}],["unmasked",{"2":{"1":2}}],["unmixed",{"2":{"1":1}}],["underlies",{"2":{"66":1}}],["underlying",{"2":{"1":3,"2":1,"24":1,"43":1,"45":1}}],["under",{"2":{"55":1,"56":1,"64":1,"66":2}}],["underscores",{"2":{"2":1}}],["undefined",{"2":{"1":1}}],["unchanged",{"2":{"1":3}}],["unless",{"2":{"1":2}}],["unopened",{"2":{"1":1}}],["usable",{"2":{"55":1}}],["us",{"2":{"1":1,"66":1}}],["using",{"0":{"44":1,"52":1,"58":1},"1":{"59":1,"60":1},"2":{"1":29,"2":6,"4":2,"6":1,"8":1,"9":4,"10":1,"11":1,"14":1,"15":1,"18":1,"19":1,"20":1,"32":2,"33":2,"34":1,"37":2,"40":1,"46":1,"47":2,"50":2,"51":1,"52":3,"53":3,"57":4,"59":1,"60":2,"62":2,"63":2,"66":2}}],["usually",{"2":{"1":11,"2":5,"43":1,"56":1}}],["user",{"2":{"56":1}}],["users",{"2":{"2":1}}],["uses",{"2":{"1":3,"7":1,"13":1,"32":1,"37":1,"47":1,"55":1,"56":1}}],["used",{"2":{"1":101,"2":16,"7":1,"8":1,"15":2,"20":2,"28":1,"31":1,"33":1,"45":1,"49":1,"64":1}}],["use",{"2":{"1":50,"2":6,"8":2,"9":1,"10":1,"11":1,"12":1,"13":1,"15":1,"22":1,"25":1,"26":1,"27":1,"29":1,"35":1,"37":2,"38":1,"41":1,"45":1,"47":1,"55":1,"59":1,"62":2,"63":1,"65":2,"66":3}}],["usefull",{"2":{"1":2}}],["usefulnesss",{"2":{"1":1}}],["useful",{"2":{"1":10,"9":2,"24":1,"63":1}}],["=a",{"2":{"6":1}}],["===",{"2":{"1":1}}],["==",{"2":{"1":2,"62":1}}],["=>",{"2":{"1":16,"26":2,"27":1,"29":1,"30":1,"31":4,"37":3,"40":1,"47":18,"57":3,"59":3,"60":1,"62":1,"63":1}}],["=",{"2":{"1":142,"2":27,"4":6,"5":2,"6":7,"7":2,"8":3,"9":23,"20":1,"26":5,"27":5,"29":4,"30":2,"31":4,"33":1,"34":7,"35":3,"36":97,"37":14,"38":5,"40":6,"41":4,"43":20,"44":16,"45":1,"46":2,"47":10,"51":2,"52":13,"53":14,"57":25,"58":2,"59":13,"60":14,"62":14,"63":17,"64":8,"66":19}}],["vsimem",{"2":{"57":2,"59":3,"60":1}}],["vcov",{"2":{"37":1}}],["visualize",{"2":{"41":1}}],["via",{"2":{"2":2,"6":1,"52":1,"55":1,"62":1}}],["views",{"2":{"1":1}}],["view",{"2":{"1":4,"8":4,"63":1}}],["vlen",{"2":{"2":2}}],["vanilla",{"0":{"44":1}}],["various",{"2":{"20":1}}],["variations",{"2":{"12":1}}],["variable",{"2":{"2":2,"9":1,"63":1}}],["variables",{"0":{"34":1,"35":1},"2":{"1":1,"9":1,"15":1,"32":1,"35":1,"37":1,"63":1}}],["validation",{"2":{"37":1}}],["valid",{"2":{"2":2}}],["values",{"0":{"23":1},"2":{"1":83,"2":3,"8":3,"21":1,"22":1,"23":2,"29":1,"35":1,"43":1,"45":3,"49":1,"52":1,"61":4,"63":1}}],["value",{"0":{"7":1},"2":{"1":82,"2":20,"8":4,"9":2,"28":1,"31":1,"47":2,"53":1,"61":1,"63":1,"66":1}}],["val",{"2":{"1":2}}],["val=",{"2":{"1":1}}],["ve",{"2":{"64":1,"65":3}}],["vertical",{"2":{"7":1}}],["verbose",{"2":{"1":2}}],["version",{"2":{"1":2,"10":1}}],["versions",{"2":{"1":19,"9":1,"63":1}}],["very",{"2":{"1":7,"9":1,"18":1,"36":2,"45":1,"61":1}}],["vebose",{"2":{"1":6,"2":2}}],["vectors",{"2":{"1":1}}],["vector",{"2":{"1":18,"2":4,"33":2,"36":1,"43":2,"51":1}}],["2d",{"2":{"41":1,"45":1,"62":1}}],["23186e",{"2":{"38":1}}],["232",{"2":{"36":1}}],["234499",{"2":{"36":1}}],["236",{"2":{"33":1}}],["23",{"2":{"26":1,"33":1,"36":1,"47":2,"59":12,"60":10}}],["23017e6",{"2":{"1":4,"9":4,"63":4}}],["267757",{"2":{"36":1}}],["26",{"2":{"4":2,"6":6,"7":2,"9":6}}],["2285e",{"2":{"38":1}}],["225",{"2":{"36":1}}],["227006",{"2":{"4":1,"6":3,"7":1}}],["22",{"2":{"1":1,"26":2,"33":1,"36":2,"57":3,"59":4,"60":4}}],["27781",{"2":{"60":1}}],["277594",{"2":{"36":1}}],["27820",{"2":{"60":1}}],["276499",{"2":{"36":1}}],["2727",{"2":{"1":1}}],["27",{"2":{"1":4,"4":2,"6":6,"7":2,"27":1,"36":2}}],["273317",{"2":{"4":1,"6":3,"7":1}}],["273",{"2":{"1":1,"36":1}}],["271",{"2":{"1":1}}],["287521031058559e6",{"2":{"60":1}}],["285",{"2":{"33":1}}],["2847",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["282566",{"2":{"4":1,"6":3,"7":1}}],["2889",{"2":{"1":1}}],["28",{"2":{"1":2,"4":2,"6":6,"7":2,"27":1,"36":1}}],["2911",{"2":{"57":1}}],["2955",{"2":{"26":1,"27":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["298",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["29",{"2":{"1":4,"4":2,"6":6,"7":2,"27":2,"36":9}}],["2499745684644309",{"2":{"59":2}}],["248",{"2":{"36":1}}],["243294",{"2":{"36":1}}],["243",{"2":{"1":1}}],["24534",{"2":{"1":1}}],["24",{"2":{"1":5,"57":2,"59":6,"60":5}}],["21st",{"2":{"66":1}}],["2160",{"2":{"57":1,"59":1}}],["2160×1080",{"2":{"26":1,"27":1,"29":1,"30":1,"31":2,"40":1,"52":5,"57":1,"59":1,"62":1}}],["21705e",{"2":{"38":1}}],["212947",{"2":{"37":1}}],["214",{"2":{"27":1}}],["219414",{"2":{"4":1,"6":3,"7":1}}],["21141",{"2":{"4":1,"6":3,"7":1}}],["21",{"2":{"1":4,"9":3,"33":1,"36":3,"57":3,"59":8,"60":8}}],["2501",{"2":{"59":1}}],["2592000000",{"2":{"47":1}}],["251",{"2":{"37":3}}],["258",{"2":{"1":1}}],["258×8",{"2":{"1":1}}],["257×229",{"2":{"63":1,"64":1}}],["257223563",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["257",{"2":{"1":1}}],["256",{"2":{"1":1,"2":6}}],["255",{"2":{"1":1,"36":1}}],["254753",{"2":{"36":1}}],["254",{"2":{"1":1}}],["253",{"2":{"1":1,"37":1}}],["252",{"2":{"1":1}}],["25",{"2":{"1":9,"4":8,"5":1,"6":18,"7":6,"8":2,"9":42,"34":3,"36":2,"38":4,"52":2,"57":7,"59":3,"60":3}}],["2",{"0":{"40":1},"2":{"1":11,"2":3,"6":2,"7":1,"9":4,"26":2,"27":4,"29":1,"30":1,"31":2,"33":1,"37":1,"38":1,"39":1,"40":5,"43":2,"44":7,"46":1,"49":1,"57":3,"59":12,"60":10,"62":1,"63":2,"64":1}}],["2090",{"2":{"66":1}}],["208333333333334",{"2":{"44":1}}],["20833333333333334",{"2":{"44":2}}],["2020",{"2":{"33":1}}],["2021",{"2":{"33":1}}],["2012",{"2":{"33":2}}],["201635",{"2":{"37":1}}],["2016",{"2":{"33":2}}],["2011",{"2":{"33":1}}],["2015",{"2":{"33":1}}],["2065",{"2":{"1":1}}],["20417f0",{"2":{"1":1}}],["2003",{"2":{"47":2}}],["2005",{"2":{"47":2}}],["2009",{"2":{"1":1}}],["2002",{"2":{"1":3,"4":3,"47":5}}],["2001",{"2":{"1":6,"4":3,"6":4,"7":1,"47":7}}],["20",{"2":{"1":9,"9":1,"34":1,"36":4,"49":2,"63":1}}],["gfdl",{"2":{"66":1}}],["gcm",{"2":{"66":10}}],["gcms",{"2":{"66":4}}],["gadm",{"2":{"50":1}}],["globe",{"2":{"62":1}}],["global",{"2":{"32":1,"52":1}}],["glm",{"2":{"37":8}}],["glmakie",{"2":{"11":1}}],["gbif",{"0":{"33":1},"2":{"32":1,"33":1,"34":1}}],["gbif2",{"2":{"1":2,"32":1,"33":5}}],["going",{"2":{"45":1}}],["good",{"2":{"12":1}}],["google",{"2":{"12":1}}],["go",{"2":{"9":1,"59":1,"60":1}}],["guaranteed",{"2":{"2":2}}],["guessed",{"2":{"2":3}}],["guessing",{"2":{"2":2}}],["gis",{"2":{"23":1}}],["giving",{"2":{"1":1}}],["given",{"2":{"1":1,"4":1,"57":1}}],["gives",{"2":{"1":6,"9":1,"63":1}}],["give",{"2":{"1":9,"61":1}}],["github",{"2":{"1":22,"9":1,"51":1,"63":1}}],["gpu",{"2":{"1":1,"24":1}}],["greenwich",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["great",{"2":{"12":1}}],["grow",{"2":{"1":2}}],["group3",{"2":{"1":2}}],["group2",{"2":{"1":2}}],["group1",{"2":{"1":2}}],["group=",{"2":{"1":2}}],["groups",{"2":{"1":2}}],["group",{"2":{"1":6}}],["gri",{"2":{"2":4}}],["grid=false",{"2":{"44":2,"57":2}}],["gridposition",{"2":{"2":1,"43":1,"45":1}}],["grid",{"2":{"1":2,"2":2,"9":2,"59":1,"64":1}}],["gridcell",{"2":{"1":1,"9":1,"63":1}}],["gribdatasets",{"2":{"11":1}}],["gribsource",{"2":{"1":2,"2":3}}],["grib",{"0":{"17":1},"2":{"1":2,"2":3,"11":1,"17":2}}],["grdsource",{"2":{"2":1}}],["grd",{"0":{"18":1},"2":{"1":2,"2":12,"11":1,"18":1}}],["g",{"2":{"1":13,"2":1,"4":1,"7":1,"8":2,"12":1,"22":1,"24":1,"45":1}}],["gdalwarp",{"2":{"1":4,"22":1,"55":1,"56":1}}],["gdals",{"2":{"1":2}}],["gdalsource",{"2":{"1":2,"2":3,"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"57":3,"59":3,"60":1,"62":1,"63":1}}],["gdal",{"0":{"14":1},"2":{"1":8,"2":15,"11":3,"14":1,"55":1,"56":1,"59":1}}],["gdalarray",{"2":{"1":1}}],["gt",{"2":{"1":26,"2":8}}],["getfutureprec",{"2":{"66":3}}],["gets",{"2":{"64":1}}],["getting",{"0":{"5":1}}],["getdriver",{"2":{"2":2}}],["getring",{"2":{"1":1}}],["getring`",{"2":{"1":1}}],["getraster",{"2":{"1":1,"20":1}}],["get",{"0":{"34":1},"2":{"1":9,"8":4,"12":1,"34":1,"47":1,"50":1,"61":1,"62":4,"63":1,"64":2,"65":1,"66":1}}],["getindex",{"2":{"1":10,"8":2}}],["geospatial",{"2":{"58":1}}],["geogcs",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["geographic",{"2":{"9":1,"63":1}}],["geoaxis",{"2":{"2":1,"43":1}}],["geomakie",{"2":{"2":1,"43":1}}],["geom",{"2":{"1":7}}],["geometric",{"2":{"1":1}}],["geometries",{"2":{"1":59,"21":3,"62":1,"64":1}}],["geometrycolumn",{"2":{"1":19}}],["geometry",{"2":{"1":32,"2":9,"33":1,"34":1,"36":20,"37":1,"62":2,"63":4,"64":1,"65":1}}],["geotiff",{"2":{"1":1,"4":1}}],["geointerface",{"2":{"1":18}}],["geoformattypes",{"2":{"1":7,"31":1}}],["geoformat",{"2":{"1":9,"31":1}}],["general",{"2":{"10":1,"64":1,"66":1}}],["generally",{"2":{"1":1,"14":1,"31":1,"55":1,"56":1}}],["generating",{"2":{"28":1,"32":1}}],["generator",{"2":{"1":1}}],["generates",{"2":{"4":1,"63":1}}],["generate",{"2":{"1":2}}],["generically",{"2":{"7":1}}],["generic",{"2":{"1":1,"47":1,"53":1,"66":1}}],["||",{"2":{"1":3}}],["|",{"2":{"1":2}}],["|>",{"2":{"1":9,"44":1,"47":2,"49":1,"66":2}}],["np",{"2":{"53":3}}],["nfolds",{"2":{"37":2}}],["ncdatasets",{"2":{"11":1,"15":1,"19":1,"47":1,"50":1}}],["ncdsource",{"2":{"1":2,"2":5,"47":2}}],["nc",{"2":{"2":4,"15":3,"47":2,"49":2,"53":1}}],["ntuple",{"2":{"2":3}}],["nuevo",{"2":{"1":1}}],["numbers",{"2":{"4":1}}],["number",{"2":{"1":3,"9":1,"13":1,"61":1,"63":1}}],["nvkelso",{"2":{"1":3,"51":1}}],["nz",{"2":{"1":6}}],["n",{"2":{"1":1,"2":5}}],["natively",{"2":{"18":1}}],["naturalearth",{"2":{"1":6,"62":3}}],["natural",{"2":{"1":5,"51":1}}],["na",{"2":{"2":3}}],["nansum",{"2":{"59":1,"60":1}}],["nanstatistics",{"2":{"57":1}}],["nanmaximum",{"2":{"57":2}}],["nanminimum",{"2":{"57":2}}],["nan",{"2":{"1":22,"2":6,"43":2,"57":63,"59":53,"60":63,"62":1,"66":1}}],["name=",{"2":{"15":1,"29":1}}],["nametuple",{"2":{"1":1}}],["names",{"2":{"1":6,"2":2,"7":1,"15":1,"37":1,"43":1}}],["named",{"2":{"1":1,"4":1}}],["namedtuple",{"2":{"1":14,"2":15,"36":1,"37":3}}],["name",{"2":{"1":28,"2":8,"15":1,"25":1,"29":2,"43":3,"47":6,"51":2,"52":1,"62":1}}],["nochecksum",{"2":{"2":2}}],["now",{"2":{"1":1,"9":1,"37":1,"47":2,"53":2,"59":1,"63":2,"64":1,"66":1}}],["nodataval",{"2":{"2":1}}],["nodata",{"2":{"1":9}}],["north",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["norway",{"2":{"1":3,"52":4,"53":11}}],["normally",{"2":{"1":4,"2":2}}],["non",{"2":{"1":14,"9":1,"49":1,"63":1}}],["nometadata",{"2":{"1":1}}],["no",{"2":{"1":27,"2":6}}],["notice",{"2":{"47":1}}],["note",{"2":{"1":14,"2":3,"8":1,"9":2,"23":1,"60":2,"64":2,"66":1}}],["nothing",{"2":{"1":22,"2":4,"37":1,"43":2}}],["not",{"2":{"1":113,"2":7,"9":1,"12":1,"15":1,"16":1,"17":1,"18":1,"19":1,"37":1,"40":1,"43":1,"45":1,"56":1,"61":2,"63":1,"65":2}}],["next",{"2":{"36":1,"37":1,"56":1,"66":1}}],["necessary",{"2":{"33":1,"57":1}}],["neighbour",{"2":{"1":1}}],["ne",{"2":{"1":3,"51":1}}],["newdocs",{"2":{"2":2}}],["newmissingval",{"2":{"1":2}}],["new",{"2":{"1":11,"28":1}}],["nested",{"2":{"1":13,"31":1}}],["needs",{"2":{"2":2}}],["needed",{"2":{"1":4,"16":1,"59":1}}],["need",{"2":{"1":6,"2":2,"9":1,"11":1,"12":2,"27":1,"29":1,"37":1,"43":1,"47":1,"55":1,"60":1,"61":1,"63":1,"65":1}}],["netcdf",{"0":{"15":1},"2":{"1":7,"2":14,"4":1,"7":1,"11":1,"15":3,"22":1,"47":2,"53":1}}],["nearer",{"2":{"63":1}}],["nearest",{"2":{"1":1}}],["nearly",{"2":{"12":1}}],["near",{"2":{"1":3,"7":1,"8":1,"47":2,"49":1,"57":1}}],["xlabel",{"2":{"2":1,"43":1,"44":1}}],["xs",{"2":{"1":8}}],["xdim",{"2":{"1":8,"2":3,"9":2,"43":1,"63":2}}],["x",{"2":{"1":69,"2":15,"4":4,"5":2,"6":6,"7":4,"8":6,"9":17,"15":1,"18":1,"23":1,"26":5,"27":2,"29":2,"30":2,"31":6,"34":7,"38":2,"40":2,"43":4,"44":7,"47":7,"49":1,"52":12,"53":7,"57":6,"59":6,"60":7,"62":2,"63":8,"64":2,"66":1}}],["x3c",{"2":{"1":14,"2":3}}],["ylabel",{"2":{"2":1,"43":1,"44":1}}],["year",{"2":{"33":1,"47":1}}],["year=",{"2":{"1":1}}],["yet",{"2":{"2":1,"16":1}}],["ydim",{"2":{"1":8,"2":4,"9":2,"43":2,"63":2}}],["y",{"2":{"1":17,"2":10,"4":4,"5":2,"6":6,"7":4,"8":2,"9":17,"15":1,"18":1,"23":1,"26":4,"27":2,"29":2,"30":2,"31":4,"34":7,"38":2,"40":2,"43":5,"44":7,"47":7,"49":2,"52":12,"53":7,"57":6,"59":6,"60":8,"62":2,"63":6,"64":2,"66":1}}],["your",{"2":{"1":3,"9":1,"12":2,"55":1,"63":2}}],["you",{"2":{"1":21,"2":6,"9":8,"10":3,"11":2,"12":3,"13":1,"28":2,"29":1,"31":1,"39":1,"41":2,"43":1,"45":1,"55":3,"56":1,"59":3,"60":2,"61":3,"62":1,"63":9,"64":1}}],["1×1080",{"2":{"26":1}}],["190",{"2":{"47":1}}],["190764",{"2":{"37":1}}],["194×161",{"2":{"44":5}}],["194661",{"2":{"4":1,"6":3,"7":1}}],["199762",{"2":{"37":1}}],["191978",{"2":{"36":1}}],["19",{"2":{"36":5,"57":2}}],["1984",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["192418",{"2":{"4":1,"6":3,"7":1}}],["192",{"2":{"1":1}}],["19279e6",{"2":{"1":4,"9":4,"63":4}}],["18512",{"2":{"59":1}}],["18547",{"2":{"59":1}}],["181",{"2":{"59":2}}],["18",{"2":{"26":2,"29":2,"30":2,"31":4,"36":2,"40":2,"57":6,"63":1,"64":1}}],["1837",{"2":{"1":1}}],["1865",{"2":{"1":1}}],["180×170×1",{"2":{"47":1}}],["180×170×24",{"2":{"47":1}}],["180",{"2":{"1":2,"26":8,"27":3,"29":3,"30":3,"31":6,"40":3,"52":2,"57":12,"59":6,"60":5,"62":3}}],["141",{"2":{"36":2}}],["1424",{"2":{"57":1}}],["142381",{"2":{"37":1}}],["142",{"2":{"36":1}}],["146",{"2":{"36":2}}],["143158931480214e13",{"2":{"64":1}}],["143",{"2":{"36":1}}],["149",{"2":{"36":1}}],["147",{"2":{"33":2,"36":3}}],["1478",{"2":{"26":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["148",{"2":{"33":6,"36":1}}],["14",{"2":{"1":2,"26":3,"29":3,"30":3,"31":6,"36":2,"40":3,"57":5}}],["145",{"2":{"1":1,"36":1}}],["1440×720",{"2":{"57":1,"59":2,"60":2}}],["1440",{"2":{"57":2,"59":1,"60":4}}],["144",{"2":{"1":1,"36":2}}],["163",{"2":{"62":1}}],["16t00",{"2":{"47":4}}],["1678",{"2":{"57":1}}],["167",{"2":{"38":2,"63":1,"64":1}}],["166666666666657",{"2":{"53":2}}],["166666666666664",{"2":{"36":1}}],["166666666666668",{"2":{"34":1,"36":4,"38":1}}],["16666666666666",{"2":{"34":2,"36":5,"38":2}}],["16666666666666666",{"2":{"26":3,"27":2,"29":2,"30":2,"31":4,"34":2,"38":2,"40":2,"52":4,"53":2,"57":3,"62":2,"63":2,"64":2}}],["1667",{"2":{"38":1,"64":1}}],["168",{"2":{"36":1}}],["1622",{"2":{"1":1}}],["160",{"2":{"1":1,"44":1}}],["16",{"2":{"1":1,"9":3,"26":4,"29":4,"30":4,"31":8,"40":4,"47":2,"57":8}}],["165",{"2":{"1":1,"36":1}}],["1f0",{"2":{"1":1}}],["1730134537265886e7",{"2":{"59":1}}],["178",{"2":{"57":1,"60":1}}],["177",{"2":{"57":1}}],["177×119",{"2":{"53":5}}],["179",{"2":{"26":6,"27":6,"29":6,"30":6,"31":12,"40":6,"52":2,"57":14,"59":12,"60":9,"62":6}}],["17",{"2":{"1":6,"26":1,"29":1,"30":1,"31":2,"36":2,"40":1,"47":1,"57":4,"63":3,"64":3}}],["133137",{"2":{"36":1}}],["139",{"2":{"36":4}}],["1382",{"2":{"57":1}}],["138",{"2":{"34":3,"36":3,"38":6}}],["13",{"2":{"1":2,"26":1,"29":1,"30":1,"31":2,"40":1,"44":2,"57":1}}],["130",{"2":{"1":1,"9":1,"63":1}}],["153",{"2":{"44":2}}],["153847f0",{"2":{"1":2}}],["15985e",{"2":{"38":1}}],["158997",{"2":{"36":1}}],["154",{"2":{"34":2,"38":7}}],["155",{"2":{"34":1}}],["15",{"2":{"1":7,"26":4,"29":4,"30":4,"31":8,"33":2,"36":1,"40":4,"57":9}}],["150",{"2":{"1":1}}],["125842",{"2":{"37":1}}],["1263161695036696e7",{"2":{"59":1}}],["126327",{"2":{"4":1,"6":3,"7":1}}],["126854",{"2":{"36":1}}],["1287",{"2":{"1":1}}],["12",{"2":{"1":3,"8":2,"34":1,"43":1,"47":2}}],["120",{"2":{"1":3,"2":1,"9":3,"63":3}}],["118",{"2":{"64":1}}],["113",{"2":{"44":2}}],["111637",{"2":{"36":1}}],["11",{"2":{"1":1,"9":3,"33":5,"47":2}}],["110",{"2":{"1":3,"2":1,"9":1,"63":1,"64":1}}],["11917e6",{"2":{"1":4,"9":4,"63":4}}],["108",{"2":{"64":1}}],["1080",{"2":{"57":1,"59":1}}],["10275",{"2":{"36":1}}],["101×90",{"2":{"34":5,"38":1}}],["10925",{"2":{"36":1}}],["109",{"2":{"27":1,"63":4,"64":5}}],["10m",{"2":{"1":6,"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"51":2,"57":1,"62":1,"63":1}}],["10",{"2":{"1":33,"2":5,"6":3,"9":5,"33":1,"44":3,"52":1,"57":2,"62":1,"63":5}}],["100mm",{"2":{"64":1}}],["1000",{"2":{"57":2}}],["100",{"2":{"1":27,"8":1,"9":2,"37":2,"44":1,"63":2}}],["1",{"2":{"1":43,"2":4,"4":7,"5":1,"6":10,"7":2,"8":1,"9":87,"26":4,"27":2,"29":2,"30":2,"31":4,"33":4,"34":2,"35":1,"37":5,"38":1,"40":4,"41":1,"43":2,"44":6,"47":8,"49":1,"53":2,"57":7,"59":10,"60":12,"62":2,"63":19,"66":3}}],["dp",{"2":{"53":1}}],["dpi=300",{"2":{"48":1}}],["d",{"0":{"40":1,"41":1},"2":{"39":1,"66":2}}],["df",{"2":{"35":2}}],["danger",{"2":{"60":1}}],["dark",{"2":{"44":1}}],["day",{"2":{"33":1}}],["datum",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["datsets",{"2":{"20":1}}],["date",{"2":{"47":1,"66":2}}],["date=datetime",{"2":{"1":2}}],["dates",{"2":{"1":10,"4":1,"20":1,"50":1,"52":1,"66":1}}],["datetime360day",{"2":{"47":12}}],["datetime",{"2":{"1":13,"4":7,"6":5,"7":1}}],["dataaspect",{"2":{"9":1,"40":1,"41":1,"62":1}}],["dataframe",{"2":{"1":5,"35":2}}],["dataframes",{"2":{"1":3,"35":1}}],["datasets",{"2":{"1":2,"20":1,"32":1,"58":1,"59":1,"66":1}}],["dataset",{"2":{"1":4,"2":4,"9":1,"52":1,"66":1}}],["data",{"0":{"13":1,"24":1,"47":1,"62":1,"63":1},"1":{"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"48":1,"49":1},"2":{"1":52,"2":3,"4":1,"7":1,"11":1,"13":1,"19":1,"20":3,"22":3,"24":4,"26":1,"32":3,"33":3,"37":7,"43":1,"44":1,"45":1,"47":2,"52":1,"55":2,"56":2,"60":3,"62":4,"63":4,"65":1,"66":6}}],["drive",{"2":{"12":1}}],["drivers",{"2":{"2":2}}],["drivername",{"2":{"2":2}}],["driver",{"2":{"2":12}}],["draws",{"2":{"2":1}}],["draw",{"2":{"2":2,"43":2}}],["drop",{"2":{"1":2,"12":1}}],["dropband",{"2":{"1":2}}],["dhekelia",{"2":{"1":1}}],["dstlookup",{"2":{"1":1}}],["dst",{"2":{"1":6,"2":4}}],["due",{"2":{"1":11}}],["during",{"2":{"1":3}}],["duplicate",{"2":{"1":4}}],["doing",{"2":{"64":1}}],["dof",{"2":{"37":1}}],["dot",{"2":{"26":1}}],["documentation",{"2":{"22":1}}],["docs",{"2":{"1":2,"19":1,"20":2}}],["down",{"2":{"1":2}}],["downloading",{"2":{"12":1}}],["downloads",{"2":{"1":6,"11":1,"12":1,"47":1,"50":1,"51":2}}],["download",{"0":{"51":1},"1":{"52":1,"53":1},"2":{"1":10,"11":1,"20":2,"33":1,"34":1,"47":2,"51":1}}],["don",{"2":{"1":1,"2":4,"31":1,"64":1}}],["done",{"2":{"1":3,"2":2,"6":1,"12":1,"57":1}}],["do",{"2":{"1":6,"2":5,"4":1,"11":1,"12":1,"26":1,"27":2,"28":1,"43":1,"44":1,"57":2,"61":2,"65":1,"66":3}}],["doesn",{"2":{"49":1,"59":1,"66":1}}],["does",{"2":{"1":6,"16":1,"56":1,"59":1}}],["degc",{"2":{"47":2}}],["degree",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"49":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["degrees",{"2":{"1":7}}],["deviance",{"2":{"37":1}}],["details",{"2":{"7":1}}],["determines",{"2":{"1":1}}],["determine",{"2":{"1":6}}],["detect",{"2":{"13":1}}],["detected",{"2":{"1":12,"2":6,"16":1}}],["detecting",{"2":{"1":1}}],["descriptions",{"2":{"22":1}}],["description",{"2":{"8":1,"21":1,"22":1,"23":1,"24":1}}],["designed",{"2":{"7":1}}],["desirable",{"2":{"1":3,"2":2}}],["destructively",{"2":{"2":6}}],["destination",{"2":{"1":1,"55":1}}],["dest",{"2":{"1":3}}],["denmark",{"2":{"1":2,"52":4,"53":4}}],["decline",{"2":{"1":2}}],["depending",{"2":{"1":2,"2":1,"9":1,"63":1}}],["depth",{"2":{"1":2,"22":1}}],["defining",{"2":{"66":1}}],["defines",{"2":{"7":1}}],["defined",{"2":{"1":1,"2":1,"9":1,"56":1,"60":1}}],["define",{"2":{"1":5,"2":2,"37":1,"53":1,"66":1}}],["defs",{"2":{"59":1}}],["deferred",{"2":{"8":1}}],["deflate",{"2":{"2":2}}],["deflatelevel",{"2":{"2":2}}],["defualts",{"2":{"1":2}}],["defaults",{"2":{"1":5,"2":2}}],["default",{"2":{"1":78,"2":22,"9":3,"14":1,"37":2,"43":1,"63":4}}],["defaulting",{"2":{"1":1}}],["dividing",{"2":{"61":1,"64":1}}],["divided",{"2":{"1":2,"37":1}}],["digits=4",{"2":{"57":1}}],["difficult",{"2":{"31":1}}],["difference",{"2":{"9":2}}],["differences",{"2":{"1":2}}],["differently",{"2":{"39":1}}],["different",{"2":{"1":4,"9":2,"15":1,"19":1,"22":3,"39":1,"58":1,"63":2,"66":3}}],["differnce",{"2":{"1":1}}],["directions",{"2":{"7":1}}],["directly",{"2":{"1":9,"2":1,"20":1,"26":1,"27":1,"55":1,"56":1}}],["directory",{"2":{"1":4,"2":2}}],["directories",{"2":{"1":1}}],["dir",{"2":{"1":4}}],["dictionary",{"2":{"2":2}}],["dict",{"2":{"1":5,"2":4,"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"47":2,"57":3,"59":3,"60":1,"62":1,"63":1}}],["disable",{"2":{"2":1}}],["disaggregate",{"2":{"0":2,"1":5,"22":2,"55":3}}],["distribution",{"0":{"32":1},"1":{"33":1,"34":1,"35":1,"36":1,"37":1,"38":1},"2":{"1":1,"32":1}}],["distance",{"2":{"1":4}}],["diskarrays",{"2":{"2":4}}],["disk",{"0":{"19":1,"49":1},"2":{"1":14,"2":3,"8":1,"19":1,"24":1,"26":1,"27":2,"47":2,"49":1,"53":1}}],["dimarray",{"2":{"2":1}}],["dimtuple",{"2":{"1":1}}],["dimz",{"2":{"1":2}}],["dim",{"2":{"1":2,"15":1,"66":2}}],["dims=ti",{"2":{"47":1}}],["dims=x",{"2":{"26":1}}],["dims=",{"2":{"1":2}}],["dims=band",{"2":{"1":1}}],["dims",{"2":{"1":22,"4":1,"6":3,"7":1,"9":4,"25":1,"26":2,"27":1,"29":1,"30":1,"31":2,"34":5,"38":1,"40":1,"44":5,"47":2,"52":10,"53":5,"57":3,"59":3,"60":2,"62":1,"63":2,"64":1,"66":1}}],["dimension",{"0":{"26":1},"2":{"1":56,"2":14,"7":2,"8":1,"14":1,"15":1,"22":2,"25":1,"26":1,"31":1,"43":8,"45":1,"47":2,"66":1}}],["dimensional",{"2":{"2":2,"18":1,"43":2,"45":1,"66":2}}],["dimensionalarray",{"2":{"1":1}}],["dimensionaldata",{"2":{"1":6,"4":1,"7":2,"8":1,"47":1,"49":1,"57":2,"59":1,"60":1,"66":2}}],["dimensions",{"0":{"5":1,"66":1},"2":{"1":45,"2":10,"4":2,"7":5,"8":1,"9":2,"15":3,"18":1,"23":1,"31":2,"43":2,"47":1,"49":1,"63":1,"66":5}}],["esm4",{"2":{"66":1}}],["especially",{"2":{"7":1,"61":1,"66":1}}],["emission",{"2":{"66":3}}],["empty",{"2":{"1":3}}],["economic",{"2":{"66":1}}],["ecology",{"2":{"20":1,"32":1}}],["equivalent",{"2":{"64":1}}],["equator",{"2":{"9":1,"63":3}}],["equal",{"2":{"1":1,"2":1,"9":1,"63":1,"64":1}}],["evaluate",{"2":{"37":2}}],["everything",{"2":{"2":2}}],["every",{"2":{"1":2,"47":1}}],["evenness",{"2":{"1":19,"44":2}}],["even",{"2":{"1":3,"2":7,"39":1,"40":1,"43":1}}],["efficient",{"2":{"41":1}}],["effort",{"2":{"12":1}}],["effect",{"2":{"1":3}}],["eltype",{"2":{"34":4,"44":4,"52":8,"53":4}}],["else",{"2":{"2":2}}],["elements",{"2":{"1":1,"2":1}}],["element",{"2":{"1":3,"2":2,"33":1,"36":1,"43":1}}],["elevation",{"2":{"1":1,"9":1,"63":1}}],["edu",{"2":{"2":2,"47":1}}],["etc",{"2":{"1":1}}],["errors",{"2":{"1":2,"12":1}}],["error",{"2":{"1":4,"12":1}}],["encompasses",{"2":{"63":1}}],["encodes",{"2":{"1":1,"9":1,"63":1}}],["enumerate",{"2":{"44":2,"57":6}}],["ensemble",{"0":{"37":1},"2":{"32":1,"37":7,"38":2}}],["ensure",{"2":{"2":1}}],["entries",{"2":{"47":2}}],["entry",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"57":3,"59":3,"60":1,"62":1,"63":1}}],["entire",{"2":{"1":2,"53":1}}],["environmental",{"2":{"20":1,"32":1}}],["enough",{"2":{"2":1}}],["end+1",{"2":{"57":2}}],["end",{"2":{"1":3,"2":1,"27":2,"34":2,"43":1,"44":2,"53":2,"57":4,"66":2}}],["ease",{"2":{"39":1}}],["easter",{"2":{"63":1}}],["east",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":2,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["eagerly",{"2":{"1":1}}],["earthenv",{"2":{"1":8,"44":2}}],["earth",{"2":{"1":7,"9":3,"51":1,"61":1,"63":2}}],["eachslice",{"2":{"66":1}}],["eachchunk",{"2":{"2":1}}],["each",{"2":{"1":26,"2":10,"9":6,"22":1,"43":1,"53":1,"61":1,"63":4,"64":1,"65":2,"66":4}}],["e",{"2":{"1":15,"2":2,"4":1,"7":1,"8":2,"9":1,"12":1,"22":1,"24":1,"43":1,"45":1}}],["eg",{"2":{"1":3}}],["epsg",{"2":{"1":8,"7":1,"9":7,"26":10,"27":5,"29":5,"30":5,"31":10,"34":5,"38":5,"40":5,"44":5,"47":4,"52":10,"53":5,"57":15,"58":1,"59":5,"60":5,"62":5,"63":6,"64":5}}],["either",{"2":{"1":3,"2":1}}],["exclude",{"2":{"35":1}}],["excluding",{"2":{"8":1}}],["excessive",{"2":{"1":7}}],["exact",{"2":{"12":1,"59":1}}],["exactly",{"2":{"8":1,"55":1}}],["examplemasked",{"2":{"66":2}}],["exampleprecip",{"2":{"66":1}}],["examplessps",{"2":{"66":1}}],["examples",{"2":{"4":1,"22":1,"47":1,"57":1}}],["example",{"2":{"1":44,"2":3,"9":1,"11":1,"12":1,"32":1,"37":1,"41":1,"47":1,"49":1,"50":1,"61":1,"63":1}}],["exists",{"2":{"2":8}}],["existing",{"2":{"1":5}}],["explicitly",{"2":{"9":1}}],["explicit",{"2":{"7":1,"47":2}}],["experience",{"2":{"1":1}}],["experimental",{"2":{"1":19,"9":1,"41":1,"63":1}}],["expected",{"2":{"1":6}}],["exported",{"0":{"1":1},"2":{"2":1}}],["extra",{"2":{"12":1}}],["extracted",{"2":{"1":4}}],["extracts",{"2":{"1":1}}],["extract",{"0":{"35":1},"2":{"0":1,"1":6,"2":2,"21":2,"32":1,"35":2,"36":1}}],["extrema",{"2":{"1":2}}],["ext",{"2":{"1":1,"2":2,"19":1}}],["extensive",{"2":{"9":1,"63":1}}],["extensions",{"0":{"11":1}}],["extension",{"2":{"1":2,"2":18,"36":1}}],["extents",{"2":{"1":21,"22":1}}],["extent",{"0":{"22":1},"2":{"1":49,"4":2,"6":6,"7":2,"9":8,"22":2,"26":4,"27":2,"29":2,"30":2,"31":4,"34":2,"38":2,"40":2,"44":2,"47":4,"52":4,"53":2,"57":6,"59":6,"60":4,"62":2,"63":4,"64":2}}],["extends",{"2":{"4":1}}],["extend",{"2":{"0":1,"1":8,"22":2}}],["lr",{"2":{"66":1}}],["l",{"2":{"44":4}}],["lq",{"2":{"37":2}}],["ll",{"2":{"9":4,"32":1,"62":1,"63":2,"66":2}}],["lscene",{"2":{"2":1,"43":1}}],["litres",{"2":{"66":2}}],["liter",{"2":{"64":1}}],["little",{"2":{"12":1,"19":1,"41":2,"60":1}}],["linrange",{"2":{"60":4}}],["linewidth=0",{"2":{"1":2,"53":1}}],["linearbinaryclassifier",{"2":{"37":4}}],["linear",{"2":{"1":1,"25":1}}],["linestrings",{"2":{"1":1}}],["lines",{"2":{"1":9,"51":1}}],["line",{"2":{"1":11}}],["limitations",{"2":{"56":1}}],["limited",{"2":{"45":1}}],["limit=300",{"2":{"33":1}}],["limit=5",{"2":{"1":1}}],["library",{"2":{"33":1,"56":1}}],["listed",{"2":{"8":1}}],["list",{"2":{"1":1}}],["likely",{"2":{"1":1,"9":1,"63":1}}],["like",{"2":{"1":19,"2":6,"4":1,"7":3,"9":3,"25":2,"26":1,"38":1,"39":1,"45":1,"55":2,"56":1,"59":1,"63":1,"66":2}}],["lt",{"2":{"1":22}}],["leverage",{"2":{"66":1}}],["level",{"2":{"1":1,"2":2}}],["least",{"2":{"64":1}}],["leave",{"2":{"1":2}}],["lets",{"2":{"53":1}}],["let",{"2":{"9":1,"38":1,"57":2,"58":1,"59":3,"61":1,"62":1,"63":2,"64":1}}],["left",{"2":{"2":1,"43":1,"62":1}}],["legend=false",{"2":{"1":1}}],["length",{"2":{"1":5,"2":1,"9":2,"43":1,"53":1,"64":1}}],["land",{"2":{"66":1}}],["lanczos",{"2":{"1":2,"57":1}}],["layout",{"2":{"44":2,"57":4}}],["layername",{"2":{"15":2}}],["layered",{"2":{"1":3,"2":1,"53":1}}],["layer",{"2":{"1":15,"2":3,"15":1,"29":1,"47":1,"53":1}}],["layersfrom",{"2":{"1":1}}],["layersfrom=band",{"2":{"1":2,"14":1}}],["layers",{"2":{"1":25,"2":4,"14":1,"15":4,"22":1,"27":1,"34":2,"44":5,"52":3,"53":1}}],["label",{"2":{"2":3,"43":3,"44":1,"47":1}}],["labels",{"2":{"1":1}}],["last",{"2":{"1":12}}],["largely",{"2":{"7":1}}],["largest",{"2":{"1":1,"63":1}}],["large",{"2":{"1":25,"45":2,"61":1}}],["larger",{"2":{"1":4}}],["lazy=false",{"2":{"2":1}}],["lazy=true",{"2":{"1":2,"2":1,"26":1}}],["lazy",{"2":{"1":10,"2":3,"8":1}}],["lazily",{"2":{"1":8,"2":1,"26":1,"53":1}}],["latest",{"2":{"10":1}}],["later",{"2":{"1":1}}],["latitude",{"2":{"1":1,"5":1,"7":1,"9":1,"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"49":1,"52":2,"53":1,"57":3,"59":1,"62":1,"63":2,"64":1}}],["latter",{"2":{"1":1}}],["lat",{"2":{"1":5,"4":2,"5":1,"9":1,"44":1,"47":1,"55":1,"63":1}}],["log",{"2":{"37":2}}],["logitlink",{"2":{"37":1}}],["look",{"2":{"60":1}}],["looks",{"2":{"9":1,"38":1,"59":1}}],["lookups",{"2":{"1":9,"2":2,"9":4,"55":1,"57":1,"59":1,"60":2,"63":1}}],["lookup",{"0":{"5":1},"2":{"1":18,"2":2,"5":2,"7":2,"55":2}}],["lot",{"2":{"2":2,"9":1,"53":1,"63":1}}],["loss",{"2":{"37":2}}],["lossless",{"2":{"1":1,"55":1}}],["lost",{"2":{"19":1}}],["loses",{"2":{"1":1}}],["lower",{"2":{"1":13,"66":1}}],["lower=",{"2":{"1":1}}],["low",{"2":{"1":7,"2":1,"43":1,"66":1}}],["locus",{"2":{"1":2,"59":1,"60":3}}],["location",{"2":{"1":1}}],["longest",{"2":{"45":1}}],["longitude",{"2":{"5":1,"7":1,"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"59":1,"62":1,"63":1,"64":1}}],["long",{"2":{"1":1,"9":1,"47":2,"55":1,"63":1}}],["lon",{"2":{"1":4,"4":2,"44":1,"47":1}}],["loads",{"2":{"47":1}}],["load",{"0":{"24":1,"33":1,"52":1},"2":{"1":14,"11":1,"13":1,"20":1,"32":1,"33":2,"37":1,"47":1,"52":2,"58":1}}],["loading",{"0":{"47":1},"1":{"48":1,"49":1},"2":{"1":5,"32":1,"45":1,"57":1,"62":1}}],["loaded",{"2":{"1":6,"9":1,"14":3,"15":2,"16":1,"17":1,"18":1,"19":1}}],["hm",{"2":{"57":4}}],["hm=nothing",{"2":{"57":2}}],["h5",{"2":{"15":1}}],["html",{"2":{"2":4}}],["https",{"2":{"1":3,"2":6,"47":1,"51":1}}],["hood",{"2":{"55":1,"56":1,"64":1}}],["hosting",{"2":{"12":1}}],["however",{"2":{"1":2,"55":1,"56":1}}],["how",{"0":{"10":1,"56":1},"2":{"1":3,"7":1,"12":1,"37":2,"45":1,"55":1,"59":1,"65":4,"66":2}}],["holding",{"2":{"2":1,"28":1}}],["holds",{"2":{"1":1,"2":3}}],["hold",{"2":{"1":6}}],["height=relative",{"2":{"43":1}}],["header",{"2":{"2":3}}],["heatmap",{"2":{"1":1,"2":4,"9":1,"39":1,"43":4,"44":1,"45":2,"57":2,"59":2,"60":3,"62":1,"63":2}}],["heterogeneity",{"2":{"1":1}}],["here",{"2":{"1":3,"2":1,"8":1,"9":4,"31":1,"41":1,"43":1,"47":1,"55":1,"58":1,"63":2,"64":1,"66":3}}],["historical",{"2":{"66":2}}],["history",{"2":{"47":2}}],["hidden",{"2":{"2":1}}],["hidedecorations",{"2":{"57":2}}],["hideydecorations",{"2":{"44":1}}],["hidexdecorations",{"2":{"44":1}}],["hide",{"2":{"1":9}}],["highlighted",{"2":{"62":1}}],["highlight",{"2":{"62":1}}],["high",{"2":{"1":8,"2":1,"8":1,"43":1,"45":1,"66":2}}],["happens",{"2":{"64":2}}],["had",{"2":{"28":1}}],["handling",{"2":{"1":1}}],["handled",{"2":{"1":1}}],["handle",{"2":{"1":3,"7":2,"52":1}}],["habitat",{"2":{"1":1}}],["habitatheterogeneity",{"2":{"1":7,"44":2}}],["having",{"2":{"1":3,"66":1}}],["have",{"2":{"1":15,"2":4,"7":1,"9":4,"12":1,"15":2,"18":1,"31":1,"47":1,"49":1,"61":1,"63":6,"64":1,"65":1,"66":5}}],["haschunks",{"2":{"2":1}}],["has",{"2":{"1":18,"2":4,"9":1,"19":1,"36":1,"41":1,"47":2,"55":1,"56":1,"63":1,"64":1}}],["hdf5",{"2":{"1":1,"2":1,"11":1,"15":1}}],["j",{"2":{"44":2,"57":4}}],["json3",{"2":{"33":2}}],["january",{"2":{"1":3,"43":1}}],["join",{"2":{"1":1,"22":1}}],["joined",{"2":{"1":2}}],["june",{"2":{"61":1,"62":1,"64":1,"66":1}}],["just",{"2":{"1":4,"2":2,"8":1,"9":1,"12":2,"26":1,"41":1,"62":1,"63":1,"66":1}}],["juliatotal",{"2":{"64":2}}],["juliatrim",{"2":{"1":1}}],["julianansum",{"2":{"59":1,"60":1}}],["julianorway",{"2":{"53":2}}],["julianp",{"2":{"53":1}}],["julianewstack",{"2":{"27":1}}],["juliadp",{"2":{"53":1}}],["juliadisaggregate",{"2":{"1":2}}],["juliaf",{"2":{"62":1}}],["juliafunction",{"2":{"53":1}}],["juliafig",{"2":{"40":1,"59":2,"60":2}}],["juliafilearray",{"2":{"2":1}}],["juliafilestack",{"2":{"2":1}}],["juliafiles",{"2":{"1":1}}],["juliawrite",{"2":{"49":1,"53":1}}],["juliawarp",{"2":{"1":1}}],["julialocus",{"2":{"59":1}}],["julialon",{"2":{"5":1}}],["julialayers",{"2":{"44":1}}],["juliaensemble",{"2":{"37":1}}],["juliaextract",{"2":{"1":1}}],["juliaextend",{"2":{"1":1}}],["juliaimport",{"2":{"37":1}}],["julia>",{"2":{"10":2,"60":1}}],["juliax",{"2":{"9":1,"60":1}}],["juliaopen",{"2":{"2":1,"27":1}}],["juliaopenstack",{"2":{"2":1}}],["juliazonal",{"2":{"1":1}}],["juliasinusoidal",{"2":{"59":2}}],["juliascandinavia",{"2":{"53":1}}],["juliasp",{"2":{"53":1}}],["juliashapes",{"2":{"52":1}}],["juliastack",{"2":{"41":1}}],["juliasuitability",{"2":{"38":1}}],["juliasdm",{"2":{"37":1}}],["julias",{"2":{"18":1}}],["juliaskipmissing",{"2":{"2":1}}],["juliaslice",{"2":{"1":1}}],["juliaset",{"2":{"31":1}}],["juliasetmappedcrs",{"2":{"1":1}}],["juliasetcrs",{"2":{"1":1}}],["juliaras",{"2":{"6":3,"7":1,"57":1,"58":1,"59":2,"60":1}}],["juliarasterdiskarray",{"2":{"2":1}}],["juliarasterize",{"2":{"1":2}}],["juliarasters",{"2":{"2":1,"43":1}}],["juliarasterstack",{"2":{"1":1}}],["juliarasterseries",{"2":{"1":2}}],["juliaraster",{"2":{"1":1}}],["juliarecords",{"2":{"33":1}}],["juliaread",{"2":{"2":2}}],["juliaresample",{"2":{"1":1}}],["juliareproject",{"2":{"1":2}}],["juliareplace",{"2":{"1":1,"30":1}}],["juliaprecip",{"2":{"64":1}}],["juliaprojected",{"2":{"1":1}}],["juliap",{"2":{"53":1}}],["juliaplot",{"2":{"38":1}}],["juliapkg>",{"2":{"10":1}}],["juliapoints",{"2":{"1":1}}],["juliacheckmem",{"2":{"2":1}}],["juliacropped",{"2":{"63":1}}],["juliacrop",{"2":{"1":1}}],["juliacrs",{"2":{"1":1}}],["juliacoverage",{"2":{"1":2}}],["juliaconvertlookup",{"2":{"1":1}}],["juliacombine",{"2":{"1":1}}],["juliaclassify",{"2":{"1":2}}],["juliacellarea",{"2":{"1":1,"9":1,"63":1}}],["juliab",{"2":{"29":1}}],["juliabad",{"2":{"64":1}}],["juliabase",{"2":{"2":4}}],["juliabanddim",{"2":{"1":1}}],["juliaband",{"2":{"1":1}}],["juliaboolmask",{"2":{"1":1}}],["juliausing",{"2":{"1":21,"2":1,"4":2,"8":1,"9":4,"11":8,"18":1,"20":1,"26":1,"31":1,"33":1,"35":2,"36":1,"37":1,"40":1,"44":1,"45":1,"46":1,"47":3,"48":1,"51":1,"52":1,"57":1,"62":1,"63":1,"66":1}}],["juliaavg",{"2":{"64":1}}],["juliaareas",{"2":{"63":1}}],["juliaall",{"2":{"62":1}}],["juliaa",{"2":{"27":1,"29":1,"34":1,"47":1,"49":1}}],["juliaabstractprojected",{"2":{"2":1}}],["juliaabstractrasterstack",{"2":{"1":1}}],["juliaabstractrasterseries",{"2":{"1":1}}],["juliaabstractraster",{"2":{"1":1}}],["juliaaggregate",{"2":{"1":2}}],["juliamethod",{"2":{"57":2}}],["juliamethods",{"2":{"57":1}}],["juliamean",{"2":{"26":1}}],["juliamosaic",{"2":{"1":2}}],["juliamodify",{"2":{"1":1}}],["juliamissingval",{"2":{"1":1}}],["juliamissingmask",{"2":{"1":1}}],["juliamakie",{"2":{"41":1,"42":1,"43":2}}],["juliamasked",{"2":{"63":1}}],["juliamask",{"2":{"1":2,"52":1}}],["juliamappedindex",{"2":{"1":1}}],["juliamappedcrs",{"2":{"1":1}}],["juliamappedbounds",{"2":{"1":1}}],["juliamapped",{"2":{"1":1}}],["juliajulia>",{"2":{"1":2,"9":3,"10":1,"57":2,"60":2}}],["juliagdalarray",{"2":{"1":1}}],["julia",{"2":{"1":1,"2":2,"4":1,"10":2,"11":1,"23":1,"25":1,"34":1,"44":1}}],["jl",{"0":{"10":1,"20":1,"52":1,"53":1},"2":{"1":45,"2":4,"4":2,"7":1,"8":1,"9":2,"10":2,"12":3,"13":1,"14":1,"15":1,"16":1,"17":1,"19":2,"20":3,"31":1,"32":2,"33":1,"37":3,"43":1,"45":3,"47":2,"49":2,"50":1,"52":1,"53":1,"55":1,"62":2,"66":1}}],["ipsl",{"2":{"66":1}}],["image",{"2":{"44":1}}],["imola",{"2":{"1":1}}],["implemented",{"2":{"1":1,"17":1,"19":1}}],["implementation",{"2":{"1":2}}],["implementations",{"2":{"1":1}}],["improve",{"2":{"2":2}}],["improvement",{"2":{"1":1}}],["improved",{"2":{"1":3,"2":2}}],["important",{"2":{"64":1}}],["import",{"2":{"1":1,"37":1,"62":1}}],["irregularly",{"2":{"59":1}}],["irregular",{"2":{"1":3}}],["ignored",{"2":{"1":3,"2":1}}],["ignore",{"2":{"1":8,"2":2}}],["i",{"2":{"1":2,"2":2,"9":2,"43":3,"44":6,"53":1,"57":8}}],["ie",{"2":{"1":1}}],["if",{"2":{"1":85,"2":37,"5":2,"9":4,"10":1,"12":1,"24":1,"26":1,"28":1,"29":1,"34":1,"43":7,"45":1,"47":1,"53":1,"55":2,"59":1,"63":2,"64":2}}],["identically",{"2":{"1":1}}],["identical",{"2":{"1":4}}],["initial",{"2":{"61":1}}],["invoke",{"2":{"45":1}}],["involves",{"2":{"12":1}}],["invert",{"2":{"1":8}}],["inaccurate",{"2":{"9":1}}],["info",{"2":{"8":1,"23":1}}],["information",{"2":{"1":1,"32":1}}],["indices",{"2":{"6":1,"8":2,"47":1}}],["indicates",{"2":{"2":1,"43":1}}],["individually",{"2":{"2":2}}],["individual",{"2":{"2":1,"53":1}}],["indonesian",{"2":{"1":1}}],["indonesia",{"2":{"1":7}}],["independently",{"2":{"1":1}}],["independent",{"2":{"1":2}}],["indexing",{"2":{"27":1}}],["indexed",{"2":{"1":3,"2":1,"4":1,"26":1}}],["index",{"0":{"0":1,"6":1},"2":{"1":19,"2":5,"6":1,"7":1,"8":4,"9":2,"47":1}}],["input",{"2":{"1":1,"9":1,"43":2,"56":1,"63":1,"66":1}}],["inputs",{"2":{"1":1}}],["install",{"0":{"4":1,"10":1},"2":{"11":1}}],["instead",{"2":{"1":4,"2":1,"31":1,"45":1,"47":2,"56":1}}],["insertcols",{"2":{"1":1}}],["inside",{"2":{"1":19}}],["including",{"2":{"1":4}}],["includes",{"2":{"11":1,"53":1}}],["included",{"2":{"1":4,"53":1}}],["include",{"2":{"1":10,"2":2,"12":1}}],["increase",{"2":{"1":1}}],["increases",{"2":{"1":2}}],["incorrectly",{"2":{"28":1}}],["incorrect",{"2":{"1":8,"2":2,"9":1,"63":1}}],["int16",{"2":{"52":2,"53":1,"62":1,"63":1}}],["int64",{"2":{"4":2,"5":1,"6":6,"7":2,"9":7,"33":4}}],["into",{"2":{"1":14,"12":1,"20":1,"22":1,"23":1,"37":1,"53":1,"61":1,"63":1,"66":1}}],["integrates",{"2":{"37":1}}],["integrated",{"2":{"20":1}}],["integration",{"0":{"20":1}}],["integer",{"2":{"1":2,"2":1}}],["integers",{"2":{"1":1}}],["interested",{"2":{"66":1}}],["interesting",{"2":{"64":1}}],["internet",{"2":{"64":1}}],["internal",{"0":{"2":1},"2":{"1":2,"2":3}}],["interpreted",{"2":{"41":1}}],["interpolation",{"2":{"1":1,"55":1}}],["interface",{"2":{"32":1,"41":1}}],["intervalsets",{"2":{"1":1}}],["intervals",{"2":{"1":3,"9":11,"26":4,"27":2,"29":2,"30":2,"31":4,"34":2,"38":2,"40":2,"44":2,"47":6,"52":4,"53":3,"57":6,"59":6,"60":5,"62":2,"63":4,"64":2}}],["interval",{"2":{"1":3,"6":1,"8":1,"9":1,"47":2}}],["int",{"2":{"1":35,"2":9}}],["in",{"0":{"39":1,"40":1,"41":1},"2":{"1":188,"2":16,"8":2,"9":14,"10":2,"11":1,"12":1,"15":2,"16":1,"19":2,"20":1,"22":1,"23":2,"24":1,"27":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":2,"39":1,"41":3,"43":1,"44":4,"45":1,"47":5,"49":1,"50":1,"53":1,"56":1,"57":10,"58":1,"59":2,"62":2,"63":12,"64":4,"65":2,"66":5}}],["inherit",{"2":{"1":1}}],["isa",{"2":{"34":1}}],["issue",{"2":{"12":3}}],["issues",{"2":{"1":19,"9":1,"12":2,"63":1}}],["islands",{"2":{"1":6,"53":1,"63":1}}],["island",{"2":{"1":2}}],["isfile",{"2":{"1":3}}],["is",{"0":{"55":1},"2":{"1":234,"2":33,"4":1,"5":2,"6":1,"7":3,"8":2,"9":8,"10":1,"14":1,"15":2,"17":1,"20":1,"24":1,"26":2,"31":1,"33":2,"34":1,"36":1,"37":1,"39":1,"40":2,"41":2,"43":2,"45":3,"49":1,"53":1,"55":8,"56":3,"57":1,"59":1,"61":2,"63":8,"64":5,"65":1,"66":5}}],["itr",{"2":{"2":1}}],["iteratively",{"2":{"1":1}}],["iterator",{"2":{"1":2}}],["iterable",{"2":{"1":7,"2":1}}],["iterables",{"2":{"1":1}}],["it",{"2":{"1":55,"2":25,"9":5,"12":6,"24":1,"31":1,"32":2,"41":1,"43":1,"45":1,"47":5,"53":1,"55":3,"56":3,"61":1,"63":4,"64":4}}],["itself",{"2":{"1":1}}],["its",{"2":{"1":2,"2":2,"11":1,"12":1,"43":1,"61":1}}],["wgs",{"2":{"26":6,"27":3,"29":3,"30":3,"31":6,"34":3,"38":3,"40":3,"44":3,"52":6,"53":3,"57":9,"62":3,"63":3,"64":3}}],["www",{"2":{"2":2,"47":1}}],["wc2",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"57":1,"62":1,"63":1}}],["wc",{"2":{"1":10}}],["wrong",{"2":{"2":1}}],["writing",{"0":{"19":1},"2":{"1":7,"2":6,"24":1}}],["written",{"2":{"1":9,"2":4,"19":2}}],["writes",{"2":{"2":2}}],["write=false",{"2":{"2":1}}],["write=true",{"2":{"1":2,"2":1,"27":1}}],["write",{"0":{"24":1,"49":1},"2":{"1":14,"2":24,"16":1,"17":1,"19":2,"24":2,"27":1,"35":2,"49":1,"53":3}}],["wrapping",{"2":{"2":4,"5":1}}],["wrapped",{"2":{"1":1,"2":1}}],["wrapper",{"2":{"1":2,"2":3}}],["wraper",{"2":{"1":1}}],["wrap",{"2":{"1":1}}],["worst",{"2":{"1":1}}],["world",{"2":{"1":1,"62":1}}],["worldclim",{"2":{"1":21,"8":1,"11":1,"20":1,"26":3,"27":1,"29":2,"30":1,"31":2,"32":1,"34":1,"40":2,"41":1,"43":2,"45":1,"46":1,"52":2,"57":2,"58":1,"62":3,"63":1,"66":3}}],["workflow",{"0":{"32":1},"1":{"33":1,"34":1,"35":1,"36":1,"37":1,"38":1},"2":{"32":1,"64":1}}],["works",{"0":{"56":1},"2":{"26":1,"31":1,"39":1}}],["working",{"2":{"2":1,"9":1,"12":1,"63":1}}],["work",{"2":{"1":7,"2":2,"7":1,"8":1,"12":1,"16":1,"23":1,"25":1,"40":1,"53":1,"59":1,"66":2}}],["would",{"2":{"1":2,"26":1,"64":1,"66":2}}],["way",{"2":{"1":3,"2":1,"8":1,"41":1,"45":1}}],["warned",{"2":{"1":1,"9":1,"63":1}}],["warning",{"2":{"1":21,"9":1,"41":1,"60":1,"63":1}}],["warping",{"2":{"1":2}}],["warped",{"2":{"1":2}}],["warp",{"2":{"0":1,"1":8,"22":1,"55":3}}],["want",{"2":{"1":3,"9":2,"10":1,"59":1,"61":1,"63":3}}],["was",{"2":{"1":2,"61":1}}],["well",{"2":{"63":1,"66":1}}],["wellknowntext",{"2":{"1":1}}],["welcome",{"2":{"55":1,"59":1}}],["were",{"2":{"19":1,"26":1}}],["weight",{"2":{"61":1}}],["weights=cellarea",{"2":{"2":1}}],["weightstype",{"2":{"2":1}}],["weights",{"2":{"2":4}}],["weighted",{"2":{"1":2,"2":2}}],["web",{"2":{"2":2,"12":1,"55":1}}],["wether",{"2":{"1":3}}],["we",{"2":{"1":11,"2":5,"9":10,"12":7,"26":1,"27":2,"31":2,"32":1,"37":3,"41":1,"45":1,"47":4,"49":1,"50":1,"52":2,"53":2,"55":1,"58":1,"60":1,"62":2,"63":8,"64":7,"65":4,"66":15}}],["wildly",{"2":{"9":1}}],["will",{"2":{"1":120,"2":20,"4":1,"7":1,"9":3,"11":1,"13":1,"15":1,"16":1,"26":1,"27":1,"29":1,"31":3,"34":1,"37":2,"45":5,"47":2,"50":1,"53":2,"55":1,"58":2,"61":1,"63":3,"64":1,"66":8}}],["width=5",{"2":{"43":1}}],["width",{"2":{"2":1,"43":1,"44":5}}],["wish",{"2":{"2":1}}],["windowed",{"2":{"1":1}}],["wind",{"2":{"1":2,"52":3,"53":3}}],["witih",{"2":{"1":1}}],["within",{"2":{"8":1,"65":1}}],["with=poly",{"2":{"52":1}}],["with=maskfile",{"2":{"2":1}}],["with=country",{"2":{"1":2}}],["with=wc",{"2":{"1":2}}],["without",{"2":{"1":6,"12":2,"15":1}}],["with",{"0":{"43":1,"53":1,"58":1},"1":{"59":1,"60":1},"2":{"1":84,"2":20,"4":1,"7":4,"8":1,"9":1,"12":2,"16":1,"17":1,"19":2,"20":1,"26":2,"27":1,"29":1,"30":1,"31":3,"35":1,"37":3,"39":1,"40":1,"43":1,"44":1,"45":2,"47":4,"50":1,"52":1,"53":3,"57":7,"59":4,"60":1,"62":1,"63":5,"66":4}}],["why",{"2":{"64":1}}],["what",{"0":{"55":1},"2":{"9":2,"37":1,"38":1,"55":1,"64":1}}],["whatever",{"2":{"1":1,"12":1}}],["whose",{"2":{"2":1,"43":1}}],["whole",{"2":{"1":7}}],["whether",{"2":{"1":9,"2":3,"9":1,"43":1,"63":2}}],["wherever",{"2":{"1":2}}],["where",{"2":{"1":54,"2":1,"7":2,"8":2,"9":2,"16":1,"19":1,"53":1,"55":1,"60":1,"61":1,"63":1}}],["when",{"2":{"1":69,"2":5,"12":1,"26":2,"27":2,"49":1,"53":1,"59":1,"64":1,"65":1}}],["while",{"2":{"1":1}}],["which",{"2":{"1":31,"2":6,"9":3,"11":1,"13":1,"14":1,"18":1,"27":1,"31":1,"32":1,"41":3,"43":3,"45":1,"47":1,"53":1,"55":2,"59":1,"63":1,"64":1,"66":4}}],["text",{"2":{"41":1}}],["tested",{"2":{"56":1}}],["test",{"2":{"37":3,"58":1}}],["temperatures",{"2":{"47":1}}],["temperature",{"2":{"29":2,"47":4,"49":1}}],["template",{"2":{"12":2}}],["tempname",{"2":{"1":1}}],["tempfile",{"2":{"1":4}}],["tempory",{"2":{"1":1}}],["temp=",{"2":{"1":1}}],["temp",{"2":{"1":2}}],["typing",{"0":{"4":1}}],["typically",{"2":{"2":1}}],["typename",{"2":{"2":2}}],["types",{"2":{"2":3,"12":1,"37":1,"53":1,"56":2,"60":1}}],["type",{"2":{"1":9,"2":12,"16":1,"19":1,"43":3,"66":1}}],["two",{"2":{"1":2,"8":1,"45":1,"66":1}}],["twice",{"2":{"1":2}}],["tmp",{"2":{"57":2,"59":3,"60":1}}],["tmax",{"2":{"1":5,"52":3,"53":3}}],["tmin",{"2":{"1":4,"52":3,"53":3}}],["t",{"2":{"1":1,"2":5,"31":1,"47":2,"49":1,"55":2,"59":1,"64":1,"66":1}}],["target",{"2":{"1":1}}],["tavg",{"2":{"1":3,"20":1}}],["tabular",{"2":{"1":1}}],["table",{"0":{"21":1},"2":{"1":16,"33":1,"34":1,"37":1}}],["tables",{"2":{"1":17}}],["take",{"2":{"2":1,"8":1,"12":1,"25":1,"43":1,"47":1,"53":1,"60":1}}],["takes",{"2":{"1":2,"66":1}}],["taken",{"2":{"1":4}}],["taking",{"2":{"1":3,"14":1}}],["tutorial",{"2":{"65":1}}],["turn",{"2":{"1":2}}],["tuples",{"2":{"1":3}}],["tuple",{"2":{"1":72,"2":14,"33":2,"36":1,"37":2}}],["tip",{"2":{"59":1}}],["tickalign",{"2":{"44":4}}],["tickalign=1",{"2":{"44":1}}],["ticks=false",{"2":{"44":2}}],["ticksize",{"2":{"44":5}}],["tiled",{"2":{"41":1,"45":1}}],["tightly",{"2":{"20":1}}],["ti=at",{"2":{"7":1}}],["ti=1",{"2":{"6":1,"47":1}}],["titlefont=",{"2":{"57":2}}],["title=",{"2":{"57":2}}],["titles",{"2":{"2":1,"43":1}}],["title",{"2":{"2":1,"43":1,"44":1,"63":1}}],["ti",{"2":{"1":7,"4":6,"6":4,"7":1,"15":1,"26":1,"47":5,"49":1}}],["tif",{"2":{"1":8,"14":2,"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"53":6,"57":1,"62":1,"63":1}}],["tifs",{"2":{"1":1}}],["tiff",{"2":{"1":2,"2":4,"14":1}}],["timespan",{"2":{"47":1}}],["time",{"0":{"26":1},"2":{"1":4,"4":1,"6":1,"7":1,"12":1,"26":1,"34":1,"41":1,"47":4,"53":1}}],["track",{"2":{"66":1}}],["trace",{"2":{"12":1}}],["trained",{"2":{"37":1}}],["train",{"2":{"37":2}}],["transect",{"2":{"49":1}}],["transparent",{"2":{"2":2,"43":2,"44":2}}],["transforms",{"2":{"11":1}}],["transforming",{"2":{"1":1,"9":1,"63":1}}],["transformations",{"2":{"11":1,"58":1}}],["transformation",{"2":{"1":3,"2":2,"9":1}}],["transferred",{"2":{"1":1}}],["tr",{"2":{"1":2}}],["treated",{"2":{"1":7,"7":1,"41":1}}],["trigger",{"2":{"12":1}}],["triggers",{"2":{"1":1,"12":1}}],["trims",{"2":{"22":1}}],["trimming",{"2":{"1":1}}],["trimmed",{"2":{"1":3,"44":1}}],["trim",{"2":{"0":1,"1":13,"22":1,"44":2,"52":7,"53":1}}],["try",{"2":{"1":1,"9":1,"31":1,"57":1}}],["true",{"2":{"1":46,"2":19,"9":1,"33":1,"35":1,"36":1,"37":3,"43":1,"63":1}}],["towards",{"2":{"63":1}}],["tos",{"2":{"47":5,"48":1,"49":3}}],["tools",{"2":{"66":1}}],["too",{"2":{"37":1}}],["toy",{"2":{"4":1}}],["top",{"2":{"2":1,"43":1}}],["touch",{"2":{"1":2}}],["touches=false",{"2":{"1":1}}],["touches",{"2":{"1":15}}],["together",{"2":{"1":1,"50":1}}],["tolerances",{"2":{"1":2}}],["tolerance",{"2":{"1":3}}],["to=ref",{"2":{"59":1}}],["to=rnge",{"2":{"1":1}}],["to=b",{"2":{"1":1}}],["to=first",{"2":{"1":1}}],["to=awap",{"2":{"1":2}}],["to=shp",{"2":{"1":1}}],["to=nz",{"2":{"1":1}}],["total",{"2":{"1":2,"59":1,"60":1,"61":1,"64":8,"66":4}}],["to",{"0":{"10":1,"19":1,"24":1,"49":1},"2":{"1":366,"2":67,"4":2,"7":4,"8":4,"9":11,"10":1,"11":2,"12":5,"13":2,"15":1,"19":2,"20":2,"22":5,"24":5,"26":1,"27":5,"28":1,"29":1,"31":6,"32":3,"33":3,"34":1,"35":3,"36":2,"37":5,"38":1,"39":1,"41":1,"43":8,"44":1,"45":4,"47":4,"49":1,"50":1,"53":5,"55":4,"56":3,"57":2,"59":4,"60":2,"61":5,"62":3,"63":10,"64":10,"65":7,"66":11}}],["things",{"2":{"2":1,"56":1,"59":1}}],["third",{"2":{"1":2,"2":1,"43":1,"47":1}}],["this",{"2":{"1":70,"2":14,"4":2,"9":10,"12":1,"27":1,"31":1,"32":1,"34":2,"36":1,"37":2,"40":1,"41":2,"43":4,"45":1,"47":1,"50":1,"55":2,"56":2,"59":4,"60":2,"61":4,"63":8,"64":7,"65":1,"66":5}}],["three",{"2":{"12":1}}],["thread",{"2":{"1":4}}],["threadsafe=true",{"2":{"1":1}}],["threadsafe",{"2":{"1":7}}],["threading",{"2":{"1":8}}],["threaded=false",{"2":{"1":1}}],["threaded=true",{"2":{"1":1}}],["threaded",{"2":{"1":29}}],["through",{"2":{"1":1,"2":1,"22":1}}],["than",{"2":{"1":7,"19":1,"39":1,"47":1,"63":1,"66":2}}],["that",{"0":{"22":1,"23":1},"2":{"1":60,"2":11,"4":1,"9":7,"12":6,"15":1,"19":1,"20":1,"23":1,"25":1,"28":1,"31":2,"36":1,"38":1,"41":1,"43":1,"47":1,"53":1,"55":1,"56":2,"59":1,"60":3,"61":3,"63":9,"64":5,"65":3,"66":6}}],["then",{"2":{"1":1,"2":1,"4":1,"12":2,"26":1,"29":1,"35":1,"43":1,"47":1,"50":1,"52":2,"61":1,"62":1,"64":1,"66":3}}],["theme",{"0":{"42":1},"1":{"43":1,"44":1},"2":{"41":3,"42":1,"43":4,"44":2,"57":4}}],["theming",{"2":{"41":1}}],["themselves",{"2":{"2":1}}],["them",{"2":{"1":4,"2":1,"7":1,"12":1,"35":1,"53":1,"56":1,"58":1}}],["there",{"2":{"1":4,"2":1,"12":2,"53":1}}],["these",{"2":{"1":13,"2":2,"7":1,"9":1,"14":1,"23":1,"43":1,"53":2,"55":2,"66":2}}],["their",{"2":{"1":1,"52":1}}],["they",{"2":{"1":8,"2":1,"7":1,"12":1,"18":2,"19":2,"55":1}}],["the",{"0":{"4":1,"5":1,"22":1,"26":1,"51":1,"62":1,"63":1,"64":1},"1":{"52":1,"53":1},"2":{"1":571,"2":140,"4":2,"6":1,"7":4,"8":13,"9":40,"10":5,"11":1,"12":14,"14":2,"15":3,"16":3,"17":1,"19":1,"20":4,"22":4,"24":2,"25":1,"26":2,"27":4,"28":2,"29":3,"31":4,"32":2,"33":3,"34":4,"35":2,"36":2,"37":10,"38":1,"39":1,"41":1,"43":42,"44":2,"45":7,"47":10,"49":3,"50":2,"52":2,"53":6,"55":17,"56":4,"57":2,"59":6,"60":4,"61":20,"62":10,"63":41,"64":13,"65":12,"66":23}}],["ocean",{"2":{"47":1,"49":1}}],["occurs",{"2":{"27":1}}],["occurrences",{"2":{"32":1,"33":1}}],["occurrence",{"0":{"35":1},"2":{"1":3,"33":3,"34":1,"37":1}}],["occur",{"2":{"1":26,"9":1,"63":1}}],["o1",{"2":{"47":2}}],["o",{"2":{"27":2}}],["omitted",{"2":{"1":1,"33":1}}],["obtain",{"2":{"1":1,"45":1}}],["observable",{"2":{"43":2}}],["observables",{"0":{"43":1}}],["observation",{"2":{"1":1}}],["obs",{"2":{"1":2,"43":3}}],["obj",{"2":{"1":10}}],["object",{"0":{"8":1,"22":1,"28":1},"1":{"29":1,"30":1,"31":1},"2":{"1":43,"2":10,"8":1,"21":1,"22":4,"23":2,"28":2,"31":1,"33":1,"37":2,"49":1,"66":2}}],["objects",{"0":{"23":1},"2":{"1":18,"2":6,"8":2,"22":2,"24":3,"31":1,"47":2}}],["our",{"2":{"1":1,"12":1,"37":1,"47":1,"58":1,"64":1,"66":3}}],["outside",{"2":{"1":2,"63":1}}],["outputs",{"2":{"66":1}}],["output",{"2":{"1":30,"2":1,"4":1,"9":1,"36":1,"63":1}}],["out",{"2":{"1":7,"43":1,"44":1,"53":1,"66":1}}],["op",{"2":{"1":5}}],["optionally",{"2":{"1":1,"2":1}}],["options",{"2":{"1":1,"2":6,"7":1,"57":1}}],["optimisations",{"2":{"1":3}}],["opbject",{"2":{"1":1}}],["operation",{"2":{"1":10,"2":1,"55":1}}],["operations",{"0":{"21":1,"25":1},"1":{"26":1,"27":1,"28":1,"29":1,"30":1,"31":1},"2":{"1":7,"2":1}}],["opens",{"2":{"2":1}}],["openstack",{"2":{"0":1,"2":3}}],["open",{"2":{"1":5,"2":11,"24":2,"27":1}}],["openinterval",{"2":{"1":1}}],["opened",{"2":{"1":3,"2":3}}],["otherwise",{"2":{"1":11,"15":1}}],["others=0",{"2":{"1":2}}],["others=nothing",{"2":{"1":1}}],["others",{"2":{"1":9}}],["other",{"2":{"1":22,"2":8,"7":1,"8":1,"12":1,"23":1,"41":1,"47":2,"53":1,"55":1,"57":1}}],["overridden",{"2":{"2":1}}],["overlap",{"2":{"1":2,"53":1}}],["overlapping",{"2":{"1":2}}],["overhead",{"2":{"1":6,"2":4}}],["over",{"0":{"26":1},"2":{"1":13,"2":1,"26":2,"27":1,"47":1,"53":1,"61":3,"64":2}}],["ones",{"2":{"9":1}}],["one",{"2":{"1":11,"2":5,"9":1,"31":2,"47":3}}],["on",{"2":{"1":26,"2":6,"7":1,"8":1,"9":6,"12":3,"20":1,"22":1,"24":1,"31":1,"34":1,"43":2,"45":3,"47":2,"55":1,"58":1,"62":1,"63":4,"66":2}}],["only",{"2":{"1":32,"2":5,"26":1,"27":1,"31":1,"45":1,"47":2,"55":2,"56":1,"63":2,"66":1}}],["off",{"2":{"60":1}}],["offset",{"2":{"1":14}}],["of=countries",{"2":{"1":1}}],["often",{"2":{"1":10,"2":1}}],["of",{"0":{"22":1,"38":1},"2":{"1":239,"2":62,"6":1,"7":1,"8":3,"9":12,"12":4,"13":1,"20":1,"22":3,"26":2,"27":2,"28":1,"29":2,"30":1,"31":5,"36":2,"37":1,"40":1,"41":1,"43":20,"44":1,"45":2,"47":4,"49":1,"53":3,"55":4,"56":2,"57":3,"59":3,"60":1,"61":5,"62":2,"63":15,"64":4,"65":3,"66":5}}],["org",{"2":{"2":4}}],["original",{"2":{"1":7,"2":3,"47":4}}],["ordered",{"2":{"2":1}}],["order=autoorder",{"2":{"1":2}}],["order",{"2":{"1":14,"2":1}}],["or",{"0":{"22":1},"2":{"1":316,"2":41,"4":1,"6":2,"9":4,"10":1,"11":1,"12":2,"19":1,"20":1,"21":1,"22":5,"23":2,"24":1,"27":1,"28":1,"29":1,"35":1,"39":1,"41":1,"43":8,"45":2,"49":1,"55":4,"56":1,"57":1,"58":1,"63":4}}],["few",{"2":{"55":1,"57":1}}],["features",{"2":{"1":2,"37":1}}],["feature",{"2":{"1":24,"9":1,"11":1,"63":1}}],["flipaxis",{"2":{"44":3}}],["fletcher32",{"2":{"2":2}}],["flexible",{"2":{"1":1,"55":2}}],["flag",{"2":{"1":1}}],["flags",{"2":{"1":4}}],["flatten=false",{"2":{"1":1}}],["flattening",{"2":{"1":1}}],["flattened",{"2":{"1":1}}],["flatten",{"2":{"1":2}}],["float",{"2":{"1":2}}],["floating",{"2":{"1":5}}],["float32",{"2":{"1":5,"26":2,"27":1,"29":1,"30":1,"31":2,"34":4,"36":4,"37":4,"40":1,"47":2,"52":6,"53":3}}],["float64",{"2":{"1":10,"2":18,"4":1,"6":3,"7":1,"9":5,"26":4,"27":2,"29":2,"30":2,"31":4,"33":2,"34":2,"36":2,"37":8,"38":3,"40":2,"44":2,"47":4,"52":4,"53":2,"57":9,"59":9,"60":8,"62":2,"63":5,"64":3}}],["framerate",{"2":{"43":1}}],["fractionally",{"2":{"55":1}}],["fraction",{"2":{"1":2}}],["from",{"0":{"5":1,"60":1},"2":{"1":76,"2":19,"7":1,"8":1,"9":1,"14":1,"15":1,"16":1,"21":1,"24":1,"26":1,"31":1,"32":2,"34":1,"43":1,"47":1,"52":1,"53":1,"60":1,"62":2,"63":2,"66":5}}],["fundamentally",{"2":{"64":1}}],["function",{"2":{"1":20,"2":4,"8":2,"12":1,"22":1,"26":1,"27":1,"37":1,"39":1,"45":3,"53":2,"64":2,"65":2,"66":2}}],["functions",{"0":{"1":1,"2":1},"2":{"1":12,"45":1,"47":1,"66":1}}],["full",{"2":{"32":1}}],["fully",{"2":{"1":1,"9":1,"45":1,"63":1}}],["future",{"2":{"1":19,"9":1,"16":1,"63":1,"66":18}}],["f",{"2":{"1":17,"2":3,"8":1,"62":1,"66":2}}],["far",{"2":{"64":1}}],["fast",{"2":{"18":1}}],["fastest",{"2":{"1":1}}],["faster",{"2":{"1":8,"9":1}}],["fail",{"2":{"1":1}}],["facility",{"2":{"32":1}}],["facilitate",{"2":{"1":1}}],["fact",{"2":{"9":1,"59":1,"63":1,"65":1}}],["factor",{"2":{"1":4}}],["fall",{"2":{"47":1}}],["falls",{"2":{"8":1}}],["falling",{"2":{"1":1}}],["fallback",{"2":{"1":2,"2":2,"49":1}}],["false",{"2":{"1":34,"2":13,"37":2,"44":1}}],["four",{"2":{"66":1}}],["found",{"2":{"1":4,"2":2}}],["folds",{"2":{"37":1}}],["fold",{"2":{"37":2}}],["following",{"2":{"4":1,"10":2,"37":1,"56":1,"57":1}}],["focus",{"2":{"20":1,"55":1,"58":1}}],["fo",{"2":{"1":1}}],["forecast",{"2":{"66":1}}],["forward",{"2":{"45":1}}],["forwardordered",{"2":{"1":4,"4":3,"5":1,"6":7,"7":2,"9":8,"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"47":6,"52":2,"53":1,"57":3,"59":3,"60":2,"62":1,"63":3,"64":1}}],["form",{"2":{"1":2}}],["formats",{"0":{"19":1},"2":{"19":2}}],["format",{"2":{"1":3,"37":1,"66":1}}],["forced",{"2":{"2":1}}],["force",{"2":{"1":9,"2":15}}],["for",{"2":{"1":152,"2":28,"7":2,"9":4,"11":1,"12":2,"13":1,"16":1,"17":1,"19":2,"20":3,"21":1,"22":3,"23":1,"24":1,"25":1,"27":1,"32":1,"33":1,"34":1,"37":1,"39":1,"41":1,"43":6,"44":4,"45":4,"49":1,"53":3,"55":1,"56":1,"57":10,"58":1,"59":2,"60":1,"61":3,"62":3,"63":3,"64":2,"65":2,"66":7}}],["figure",{"2":{"44":3,"57":2}}],["fig",{"2":{"40":4,"43":2,"44":10,"57":12,"59":4,"60":7}}],["fixing",{"2":{"12":1}}],["fixed",{"2":{"12":1}}],["fix",{"2":{"12":2}}],["fix2",{"2":{"1":9}}],["five",{"2":{"9":1}}],["finish",{"2":{"2":1}}],["findfirst",{"2":{"62":1}}],["find",{"2":{"1":4,"8":1,"12":1}}],["filter",{"2":{"2":2,"8":1}}],["filled",{"2":{"45":1,"47":1}}],["fillvalue",{"2":{"2":1,"47":2}}],["fillalpha=0",{"2":{"1":2,"53":1}}],["fill=1",{"2":{"1":2}}],["fill",{"2":{"1":12}}],["fills",{"2":{"1":2}}],["filepaths",{"2":{"1":1}}],["filepath",{"2":{"1":6,"2":6,"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"57":3,"59":3,"60":1,"62":1,"63":1}}],["file",{"0":{"19":1},"2":{"1":59,"2":31,"9":1,"12":7,"15":2,"16":1,"19":1,"22":1,"24":1,"27":1,"28":1,"47":2,"53":3,"63":1}}],["files",{"2":{"1":17,"2":7,"4":1,"11":1,"12":1,"14":2,"15":2,"16":1,"17":1,"18":1,"19":1,"28":1,"34":1,"45":1,"50":1}}],["filestack",{"2":{"0":1,"2":2}}],["filenames",{"2":{"1":5}}],["filename",{"2":{"1":34,"2":20,"14":2,"15":2,"16":2,"19":1,"27":1,"47":2}}],["filearray",{"2":{"0":1,"1":2,"2":3}}],["fitting",{"2":{"32":1}}],["fit",{"0":{"37":1},"2":{"1":1,"37":2}}],["field",{"2":{"1":3,"31":1}}],["fields",{"2":{"1":6,"28":1}}],["first",{"2":{"1":25,"12":1,"15":1,"34":1,"37":1,"47":3,"50":1,"53":4,"63":2,"64":1}}],["ssp370",{"2":{"66":3}}],["ssp126",{"2":{"66":2}}],["ssp",{"2":{"66":10}}],["ssps",{"2":{"66":3}}],["squished",{"2":{"41":1}}],["square",{"2":{"1":8,"63":3,"64":2}}],["sdmgroups",{"2":{"37":1}}],["sdmmachines",{"2":{"37":1}}],["sdmensembleevaluation",{"2":{"37":1}}],["sdmensemble",{"2":{"37":1}}],["sdmdata",{"2":{"37":3}}],["sdm",{"2":{"37":4,"38":1}}],["smaller",{"2":{"41":1,"63":1}}],["smallest",{"2":{"1":2,"63":1}}],["smap",{"2":{"11":1}}],["scenario",{"2":{"66":4}}],["scenarios",{"2":{"66":1}}],["scitypes",{"2":{"37":1}}],["sciences",{"2":{"20":1}}],["scratch",{"0":{"60":1},"2":{"60":3}}],["screen",{"2":{"44":1}}],["scr",{"2":{"2":1}}],["scatter",{"2":{"34":2}}],["scarborough",{"2":{"1":1}}],["scandinavia",{"2":{"1":4,"53":10}}],["scandinavian",{"2":{"1":1,"50":1}}],["scaling",{"2":{"1":2}}],["scale^2",{"2":{"1":2}}],["scale",{"2":{"1":37}}],["scaled=true",{"2":{"1":2}}],["scaled=false",{"2":{"1":2}}],["scaled",{"2":{"1":8}}],["snap",{"2":{"1":1,"22":1}}],["skewed",{"2":{"1":1}}],["skipping",{"2":{"2":1}}],["skipped",{"2":{"1":2}}],["skip",{"2":{"1":1,"2":1}}],["skipmissing=true",{"2":{"1":1}}],["skipmissing=false",{"2":{"1":1}}],["skipmissingval=true",{"2":{"1":1}}],["skipmissing",{"2":{"1":7,"2":2,"34":1,"35":2,"36":1,"64":4,"66":2}}],["sweden",{"2":{"1":2,"52":4,"53":5}}],["swapping",{"2":{"1":1}}],["slightly",{"2":{"66":2}}],["slicing",{"2":{"1":1}}],["slices",{"2":{"1":3}}],["sliced",{"2":{"1":5,"47":1}}],["slice",{"2":{"0":1,"1":6,"6":1,"66":2}}],["slowest",{"2":{"55":1}}],["slow",{"2":{"1":2}}],["src",{"2":{"1":7,"2":4}}],["s",{"2":{"1":11,"2":10,"8":2,"9":2,"12":1,"31":1,"37":1,"38":1,"55":1,"56":1,"57":2,"58":1,"59":3,"60":4,"61":2,"62":1,"63":4,"64":3,"66":1}}],["systems",{"2":{"55":1,"58":1}}],["system",{"2":{"1":10,"9":1,"39":1,"55":1,"63":1}}],["symbols",{"2":{"2":1,"43":1}}],["symbol",{"2":{"1":30,"2":8,"37":2}}],["syntax",{"2":{"1":2,"6":1,"20":1,"36":1,"53":1}}],["safe",{"2":{"1":4,"2":1}}],["sa",{"2":{"1":6}}],["saved",{"2":{"2":2}}],["savefig",{"2":{"1":22}}],["save",{"2":{"1":5,"2":2,"34":1,"44":1,"47":1,"53":1}}],["sampling=intervals",{"2":{"1":4,"2":2,"9":2,"60":3,"63":2}}],["sampling=autosampling",{"2":{"1":2}}],["sampling",{"2":{"1":2,"2":1,"9":5,"56":3,"59":1}}],["samples",{"2":{"55":1}}],["sampled",{"2":{"1":6,"4":3,"5":1,"6":7,"7":2,"47":2,"59":1}}],["sample",{"0":{"36":1},"2":{"0":1,"1":2,"2":9,"36":3,"57":2}}],["same",{"2":{"1":19,"2":2,"9":1,"12":1,"15":1,"22":1,"28":1,"43":2,"53":1,"55":1,"59":1,"61":1,"63":1,"64":1,"65":2}}],["sufficient",{"2":{"55":1}}],["suffix",{"2":{"1":21,"2":2}}],["suitability",{"0":{"38":1},"2":{"38":1}}],["sure",{"2":{"12":2,"45":1,"63":1}}],["surface",{"2":{"2":1,"39":2,"40":1,"43":1,"45":2,"47":4,"49":1}}],["sub",{"2":{"62":1}}],["subplot=i",{"2":{"53":1}}],["subplots",{"2":{"34":1,"53":1}}],["subarray",{"2":{"33":1}}],["substrin",{"2":{"1":1}}],["subsetting",{"0":{"8":1}}],["subset",{"2":{"1":3,"7":1,"8":1,"34":1}}],["subdivision",{"2":{"1":2}}],["summary",{"0":{"65":1}}],["summing",{"2":{"61":1}}],["summed",{"2":{"1":2}}],["sum",{"2":{"1":21,"57":2,"64":5,"66":2}}],["such",{"2":{"1":12,"2":7,"14":1,"23":1,"25":1,"59":1,"63":1}}],["supports",{"2":{"45":1}}],["supported",{"2":{"45":1,"56":1}}],["support",{"2":{"43":1}}],["supplied",{"2":{"1":1}}],["supertype",{"2":{"1":3,"2":1}}],["socioeconomic",{"2":{"66":1}}],["socio",{"2":{"66":1}}],["sosstsst",{"2":{"47":2}}],["software",{"2":{"2":2,"47":1}}],["sovereign",{"2":{"1":1}}],["south",{"2":{"1":1,"34":1}}],["source=zarrsource",{"2":{"16":1}}],["sources",{"0":{"13":1,"24":1},"1":{"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1},"2":{"20":2}}],["source",{"2":{"1":60,"2":28,"9":1,"43":1,"55":1,"63":1}}],["so",{"2":{"1":11,"2":1,"4":1,"9":2,"12":3,"20":1,"31":1,"40":1,"47":1,"49":1,"55":1,"63":1,"64":1,"66":2}}],["somewhat",{"2":{"39":1}}],["something",{"2":{"4":1}}],["somelayer",{"2":{"1":2}}],["some",{"2":{"1":19,"2":1,"9":1,"12":2,"15":1,"19":2,"41":1,"52":1,"56":2,"60":1,"61":2,"63":2,"66":1}}],["side",{"2":{"2":1,"9":2,"43":1}}],["sides",{"2":{"1":1}}],["sin",{"2":{"59":4,"60":5}}],["sinusoidal",{"0":{"59":1},"2":{"58":1}}],["since",{"2":{"1":1,"10":1,"39":1,"45":1,"56":1,"63":1,"66":1}}],["sinc",{"2":{"1":1}}],["singleton",{"2":{"2":1,"43":1}}],["single",{"2":{"1":41,"2":3,"22":1,"50":1,"53":2,"66":2}}],["silently",{"2":{"1":1}}],["simultaneously",{"2":{"66":1}}],["simply",{"2":{"1":2,"9":1,"10":1,"47":1,"61":1}}],["simple",{"0":{"45":1,"46":1},"2":{"1":7,"66":1}}],["similarly",{"2":{"22":1,"45":1}}],["similar",{"2":{"1":1,"4":1,"36":1,"45":1}}],["size=$",{"2":{"57":1}}],["size=size",{"2":{"57":1}}],["size=",{"2":{"44":1,"48":1,"57":1,"59":2,"60":2}}],["sizes",{"2":{"2":1,"22":2,"57":5}}],["size",{"0":{"57":1},"2":{"1":40,"2":10,"9":1,"22":1,"34":4,"44":4,"52":8,"53":4,"57":6,"63":1}}],["sized",{"2":{"1":1}}],["still",{"2":{"47":1,"66":1}}],["stderror",{"2":{"37":1}}],["store",{"2":{"19":1}}],["stored",{"2":{"1":1,"2":2}}],["stores",{"2":{"1":1}}],["stereographic",{"2":{"9":1}}],["step",{"2":{"9":1,"66":1}}],["steps",{"2":{"1":1,"12":1}}],["stem",{"2":{"1":1}}],["st",{"2":{"1":8,"44":2}}],["statistic",{"2":{"64":2}}],["statistical",{"0":{"37":1},"2":{"37":1}}],["statistics",{"2":{"1":8,"21":1,"25":1,"26":1,"47":1}}],["statsbase",{"2":{"2":7,"36":2}}],["stats",{"2":{"1":2}}],["stage",{"2":{"1":1}}],["starting",{"2":{"9":1}}],["start",{"0":{"3":1},"1":{"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"1":10,"2":2,"9":15,"26":4,"27":2,"29":2,"30":2,"31":3,"34":2,"38":2,"40":2,"44":2,"52":4,"53":2,"57":7,"59":4,"60":8,"62":2,"63":6,"64":2,"66":2}}],["stack",{"2":{"1":32,"2":7,"12":1,"22":2,"27":2,"41":2,"43":4,"53":1}}],["stacks",{"2":{"1":7}}],["standardises",{"2":{"20":1}}],["standard",{"2":{"1":1,"23":1,"47":2,"66":1}}],["strokewidth",{"2":{"62":1}}],["strokecolor",{"2":{"62":1}}],["strategy",{"2":{"37":1}}],["straightforward",{"2":{"36":1}}],["strings",{"2":{"1":1,"2":1,"43":1}}],["string",{"2":{"1":24,"2":9,"26":2,"27":1,"29":1,"30":1,"31":2,"33":2,"40":1,"44":1,"47":2,"57":3,"59":3,"60":1,"62":1,"63":1}}],["structures",{"2":{"1":1}}],["sp",{"2":{"53":1}}],["spratly",{"2":{"1":1}}],["spring",{"2":{"1":2}}],["spread",{"2":{"1":1}}],["spheroid",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["spherical",{"2":{"1":2,"9":4,"62":1,"63":4}}],["sphere",{"2":{"1":3,"9":4,"63":4}}],["speed",{"2":{"1":1}}],["speedups",{"2":{"1":7}}],["special",{"2":{"1":2}}],["speciesdistributionmodels",{"2":{"37":4}}],["species",{"0":{"32":1},"1":{"33":1,"34":1,"35":1,"36":1,"37":1,"38":1},"2":{"1":3,"32":2}}],["specifically",{"2":{"9":1}}],["specific",{"2":{"2":5,"11":1,"22":2,"31":1,"55":1}}],["specifies",{"2":{"1":3,"2":2,"45":1}}],["specified",{"2":{"1":16,"2":2,"28":1}}],["specify",{"2":{"1":5,"2":6,"7":1,"9":3,"20":1,"31":2,"56":1,"60":1,"63":3}}],["specifying",{"2":{"1":4,"2":4,"9":1}}],["spline",{"2":{"1":1}}],["splitting",{"2":{"55":1}}],["split",{"2":{"1":2}}],["splat",{"2":{"1":1}}],["splatted",{"2":{"1":2}}],["space",{"2":{"1":3,"8":1,"41":1}}],["spans",{"2":{"1":1,"7":1}}],["span=autospan",{"2":{"1":2}}],["span",{"2":{"1":2}}],["spatially",{"2":{"9":1,"63":1}}],["spatial",{"0":{"61":1,"64":1,"66":1},"1":{"62":1,"63":1,"64":1,"65":1,"66":1},"2":{"1":6,"4":2,"7":1,"19":1,"49":1,"61":2,"65":2}}],["shiftlocus",{"2":{"59":3,"60":1}}],["shrink",{"2":{"22":1}}],["shuffle",{"2":{"2":4}}],["shp",{"2":{"1":7,"51":2}}],["shapes",{"2":{"1":5,"52":6}}],["shapefile",{"0":{"51":1,"52":1},"1":{"52":1,"53":1},"2":{"1":28,"50":1,"51":5,"52":2}}],["shape",{"2":{"1":8,"50":1,"53":1}}],["sharing",{"2":{"1":1}}],["shared",{"2":{"1":4}}],["share",{"2":{"1":2,"12":1,"59":1}}],["shoudle",{"2":{"1":1}}],["should",{"2":{"1":20,"2":2,"10":1,"43":3,"55":1,"63":1}}],["shortcuts",{"2":{"1":2}}],["shows",{"2":{"32":1,"66":1}}],["show",{"2":{"1":10,"9":1,"45":1,"55":1,"66":1}}],["shown",{"2":{"1":1,"45":1}}],["seperate",{"2":{"66":1}}],["separated",{"2":{"1":1,"2":1}}],["separately",{"2":{"1":3}}],["separator",{"2":{"1":3}}],["section",{"2":{"56":1}}],["several",{"2":{"56":1}}],["sea",{"2":{"47":4}}],["search",{"2":{"1":1,"33":1}}],["se",{"2":{"34":2,"35":1,"36":1,"38":1}}],["seen",{"2":{"65":3}}],["seem",{"2":{"41":1}}],["seems",{"2":{"1":1,"64":1}}],["see",{"2":{"1":3,"2":2,"7":1,"9":2,"19":1,"20":1,"37":2,"38":1,"56":1,"62":1,"63":1,"64":1}}],["serranilla",{"2":{"1":1}}],["ser",{"2":{"1":2}}],["series",{"2":{"1":19,"2":2,"41":1}}],["selection",{"2":{"66":1}}],["selecting",{"2":{"6":1}}],["selects",{"2":{"1":6}}],["select",{"0":{"6":1,"7":1},"2":{"1":11,"66":1}}],["selectors",{"2":{"1":5,"8":3}}],["selector",{"2":{"1":10,"8":1}}],["sets",{"2":{"2":1,"43":1}}],["set",{"0":{"31":1},"2":{"1":20,"2":10,"31":6,"41":1,"42":1,"43":8,"45":1,"63":1}}],["setting",{"2":{"1":3,"2":3}}],["setmappedcrs",{"2":{"0":1,"1":2,"31":1}}],["setcrs",{"2":{"0":1,"1":2,"31":1}}],["rgb",{"2":{"56":1}}],["rs",{"2":{"8":1}}],["rng",{"2":{"2":1}}],["rnge",{"2":{"1":3}}],["rigurous",{"2":{"37":1}}],["right",{"2":{"2":2,"12":1,"43":2}}],["rings",{"2":{"1":2}}],["r",{"2":{"1":3,"2":2,"18":1}}],["rms",{"2":{"1":1}}],["round",{"2":{"57":1}}],["roughly",{"2":{"1":3,"44":1}}],["robust",{"2":{"56":1}}],["rotl90",{"2":{"25":1}}],["rotations",{"2":{"25":1}}],["rotated",{"2":{"1":1}}],["root",{"2":{"1":1}}],["rowgap",{"2":{"44":1,"57":2}}],["rows",{"2":{"1":5,"33":1}}],["row",{"2":{"1":3}}],["runs",{"2":{"12":1}}],["running",{"2":{"1":4,"12":1}}],["run",{"2":{"1":10,"2":1,"9":1,"10":2,"34":1,"60":1,"63":1,"66":1}}],["rain",{"2":{"64":1}}],["rainfall",{"2":{"61":2,"66":1}}],["ras",{"2":{"4":1,"5":2,"9":4,"57":12,"58":2,"59":9,"60":11}}],["rasterdatasources",{"0":{"20":1,"33":1},"2":{"1":21,"8":1,"11":2,"20":4,"26":1,"32":1,"33":2,"40":1,"44":1,"45":1,"46":1,"50":1,"52":2,"57":1,"62":2}}],["rasterdiskarray",{"2":{"0":1,"2":2}}],["rasterized",{"2":{"1":2}}],["rasterize",{"2":{"0":2,"1":10,"21":2}}],["raster",{"0":{"60":1},"2":{"0":1,"1":115,"2":32,"4":3,"6":6,"7":2,"8":1,"9":16,"12":1,"13":2,"14":1,"15":1,"16":1,"19":1,"20":4,"23":1,"26":6,"27":6,"29":3,"30":2,"31":4,"34":1,"36":1,"38":2,"39":1,"40":4,"43":11,"44":1,"45":4,"46":1,"47":5,"52":3,"53":3,"55":3,"57":7,"58":2,"59":7,"60":6,"61":2,"62":3,"63":9,"64":5,"65":3,"66":6}}],["rasterstacks",{"2":{"1":2,"41":1,"45":1,"53":1}}],["rasterstack",{"2":{"0":1,"1":60,"2":9,"13":1,"14":1,"15":1,"20":2,"27":1,"34":2,"35":1,"41":1,"43":5,"44":3,"45":1,"47":1,"52":3,"53":1}}],["rasterseries",{"2":{"0":1,"1":23,"13":1,"20":2,"53":1,"66":1}}],["rasters",{"0":{"10":1,"33":1,"40":1,"41":1},"2":{"0":57,"1":112,"2":27,"4":5,"7":2,"8":2,"9":6,"10":4,"11":2,"12":3,"13":1,"18":1,"20":2,"22":1,"26":3,"27":1,"29":1,"30":1,"31":3,"33":1,"34":1,"36":3,"40":2,"41":8,"43":6,"44":2,"45":5,"46":1,"47":3,"49":1,"50":1,"52":2,"53":1,"55":1,"56":1,"57":8,"59":4,"60":3,"62":3,"63":4,"66":4}}],["ratio",{"2":{"2":2}}],["rather",{"2":{"1":1,"66":1}}],["range",{"2":{"1":13,"9":1,"44":2,"53":1,"55":1,"60":4}}],["random",{"2":{"2":2,"4":1,"36":1,"49":1}}],["rand",{"2":{"1":1,"2":1,"4":1,"9":1,"63":1}}],["radius=",{"2":{"1":1,"9":1,"63":2}}],["radius",{"2":{"1":4,"9":4,"63":5}}],["race",{"2":{"1":7}}],["raw",{"2":{"1":9,"51":1,"59":1}}],["raw=true",{"2":{"1":5,"2":2}}],["rplot",{"2":{"0":2,"2":2,"34":1,"41":3,"43":6,"45":1}}],["red",{"2":{"62":3}}],["reduces",{"2":{"1":1}}],["reduce",{"2":{"1":2,"59":1}}],["reducer",{"2":{"1":9,"38":1}}],["reducing",{"2":{"1":5}}],["requires",{"2":{"60":1}}],["required",{"2":{"1":25,"2":2,"23":1}}],["remain",{"2":{"43":2}}],["remove",{"2":{"1":3,"2":2}}],["removes",{"2":{"1":3,"2":2}}],["record",{"2":{"43":1}}],["records",{"2":{"34":1}}],["recipes",{"2":{"45":1,"49":1}}],["recipe",{"2":{"39":1}}],["rectangle",{"2":{"9":1}}],["reverseordered",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"59":3,"60":2,"62":1,"63":1,"64":1}}],["reverse",{"2":{"25":1}}],["reversing",{"2":{"1":1}}],["re",{"2":{"9":2,"45":1,"55":1,"63":1,"66":1}}],["reef",{"2":{"1":1}}],["registry",{"2":{"10":1}}],["registered",{"2":{"10":1}}],["region",{"2":{"1":1,"53":3,"61":1}}],["regions",{"2":{"1":12}}],["regularization",{"2":{"37":2}}],["regular",{"2":{"1":6,"2":1,"4":3,"5":1,"6":7,"7":2,"8":1,"9":8,"23":1,"25":1,"26":4,"27":2,"29":2,"30":2,"31":4,"34":2,"38":2,"40":2,"44":2,"47":5,"52":4,"53":2,"55":1,"57":8,"59":6,"60":4,"62":2,"63":4,"64":2}}],["relies",{"2":{"9":1}}],["reliable",{"2":{"1":19,"9":1,"63":1}}],["relhum",{"2":{"1":2}}],["relhum=",{"2":{"1":1}}],["rebuild",{"0":{"29":1},"2":{"1":1,"28":1,"29":3,"31":1}}],["res=$",{"2":{"57":1}}],["res=res",{"2":{"57":1}}],["res=1",{"2":{"57":1}}],["res=3000",{"2":{"45":1}}],["res=0",{"2":{"1":1}}],["reset",{"0":{"42":1},"1":{"43":1,"44":1},"2":{"43":1,"59":1}}],["resembling",{"2":{"2":1}}],["residual",{"2":{"37":1}}],["responsible",{"2":{"1":1}}],["resampling",{"0":{"54":1,"55":1},"1":{"55":1,"56":1,"57":1,"58":1,"59":1,"60":1},"2":{"1":17,"37":2,"55":1,"57":1}}],["resampler",{"2":{"37":1}}],["resamples",{"2":{"1":1}}],["resampled",{"2":{"1":1,"59":1,"60":4}}],["resample",{"0":{"56":1,"58":1},"1":{"59":1,"60":1},"2":{"0":1,"1":15,"22":2,"55":3,"56":2,"57":4,"59":5,"60":2}}],["result",{"2":{"1":6}}],["results",{"2":{"1":7}}],["resulting",{"2":{"1":7}}],["res",{"2":{"1":24,"45":1,"57":6}}],["resolutions",{"2":{"57":3}}],["resolution",{"0":{"22":1,"57":1},"2":{"1":24,"45":3,"55":2,"57":1,"59":1}}],["rest",{"2":{"1":5}}],["reason",{"2":{"41":1,"61":1}}],["reasons",{"2":{"9":1,"58":1,"63":1}}],["reassign",{"2":{"31":1}}],["really",{"2":{"12":1,"63":1}}],["real",{"2":{"1":23}}],["reading",{"2":{"24":1}}],["reads",{"2":{"8":1}}],["read",{"2":{"1":9,"2":9,"4":1,"24":4,"27":1,"53":1}}],["refer",{"2":{"1":1}}],["reference",{"0":{"1":1,"2":1},"2":{"1":11,"58":1}}],["refdims",{"2":{"1":5}}],["retrieved",{"2":{"2":2}}],["retrieve",{"2":{"1":3,"2":1}}],["returning",{"2":{"1":2}}],["returned",{"2":{"1":13,"2":3,"66":1}}],["returns",{"2":{"1":9,"2":6,"9":2,"55":1,"63":1}}],["return",{"2":{"1":9,"2":1,"53":1,"66":1}}],["replicated",{"2":{"64":1}}],["repl",{"2":{"10":1}}],["replacing",{"2":{"1":3,"2":2}}],["replaced",{"2":{"1":1,"2":1}}],["replacement",{"2":{"1":6,"2":1}}],["replace",{"0":{"30":1},"2":{"0":1,"1":7,"2":1,"23":3,"24":1,"29":2,"57":1,"58":1,"62":1,"66":3}}],["reporting",{"2":{"2":1}}],["repeat",{"2":{"1":4,"66":1}}],["reproduced",{"2":{"12":1}}],["reprojects",{"2":{"55":1}}],["reprojection",{"0":{"54":1},"1":{"55":1,"56":1,"57":1,"58":1,"59":1,"60":1}}],["reprojecting",{"2":{"1":1}}],["reproject",{"0":{"58":1},"1":{"59":1,"60":1},"2":{"0":2,"1":6,"55":2}}],["represents",{"2":{"9":2,"66":1}}],["represent",{"2":{"1":1,"7":2}}],["representing",{"2":{"1":4,"2":2}}],["p2",{"2":{"62":1}}],["purely",{"2":{"62":1}}],["put",{"2":{"12":1}}],["px",{"2":{"46":1}}],["phylum",{"2":{"33":1}}],["pkg>",{"2":{"10":1}}],["pkg",{"2":{"10":2,"11":14}}],["p",{"2":{"1":4,"34":3,"53":8,"62":1}}],["pygmy",{"2":{"1":1,"32":1,"33":1}}],["period",{"2":{"66":1}}],["perfect",{"2":{"59":1}}],["performed",{"2":{"59":1}}],["performs",{"2":{"37":1}}],["perform",{"2":{"9":1}}],["performance",{"2":{"1":5,"37":1}}],["perfomance",{"2":{"1":3,"2":2}}],["per",{"2":{"9":1,"46":1,"63":2,"64":4}}],["peru",{"2":{"1":1}}],["permission",{"2":{"1":1}}],["permissions",{"2":{"1":1}}],["pixelated",{"2":{"1":1}}],["pixel",{"2":{"1":21,"45":2,"52":1}}],["pixels",{"2":{"1":16,"66":1}}],["png",{"2":{"1":22,"44":1}}],["plt",{"2":{"44":5,"59":4,"60":6}}],["play",{"2":{"61":1}}],["platform",{"2":{"12":1}}],["planar",{"2":{"1":2,"9":5,"63":3}}],["plane",{"2":{"1":2,"9":2,"63":3}}],["placed",{"2":{"2":1,"43":1}}],["place",{"2":{"1":8,"12":1}}],["please",{"2":{"1":19,"9":1,"63":1}}],["plotted",{"2":{"41":1}}],["plotting",{"0":{"39":1,"43":1,"53":1},"2":{"2":2,"39":1,"43":2,"45":2,"47":1,"49":1,"62":1}}],["plottype",{"2":{"2":1,"43":1}}],["plot`",{"2":{"1":1}}],["plots",{"0":{"45":1,"53":1},"2":{"1":20,"11":1,"39":1,"41":2,"45":4,"47":3,"48":2,"50":1,"53":1}}],["plot",{"0":{"48":2,"50":1},"2":{"1":39,"2":3,"8":1,"9":1,"20":1,"34":1,"39":1,"40":2,"43":3,"44":1,"45":7,"46":1,"47":8,"49":3,"50":1,"53":9,"62":1}}],["primitive",{"2":{"56":1}}],["primem",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"52":2,"53":1,"57":3,"62":1,"63":1,"64":1}}],["principle",{"2":{"31":1}}],["print",{"2":{"1":6,"2":2}}],["printed",{"2":{"1":2}}],["practise",{"2":{"1":1}}],["practice",{"2":{"1":2,"2":1,"43":1}}],["pretty",{"2":{"56":1,"64":1}}],["predict",{"2":{"38":1}}],["predictor",{"2":{"35":1,"37":1}}],["predictors",{"2":{"34":1,"35":2}}],["predictions",{"0":{"38":1},"2":{"32":1}}],["predefined",{"2":{"24":1}}],["prefer",{"2":{"1":1}}],["precip",{"2":{"62":3,"63":6,"64":10,"66":10}}],["precipitation",{"2":{"62":2,"63":1,"64":3,"66":3}}],["prec",{"2":{"1":10,"52":3,"53":3,"62":4,"63":3,"66":2}}],["preserve",{"2":{"66":1}}],["presence",{"2":{"37":1}}],["presences",{"2":{"35":3,"37":1}}],["present",{"2":{"1":2}}],["pressed",{"2":{"10":1}}],["pressure",{"2":{"1":1}}],["pressure=",{"2":{"1":1}}],["procedure",{"2":{"66":1}}],["processing",{"0":{"63":1}}],["problem",{"2":{"12":2,"55":1}}],["problems",{"2":{"1":25,"2":2,"9":1,"63":1}}],["provides",{"2":{"53":1}}],["provide",{"2":{"41":1}}],["provided",{"2":{"1":7,"45":1}}],["providing",{"2":{"2":1,"19":1,"57":1}}],["prod",{"2":{"1":1}}],["produces",{"2":{"12":1}}],["produce",{"2":{"1":2,"47":1}}],["productive",{"2":{"1":7}}],["properties",{"0":{"28":1},"1":{"29":1,"30":1,"31":1},"2":{"1":3,"7":1,"31":2}}],["projstring",{"0":{"58":1},"1":{"59":1,"60":1},"2":{"59":4}}],["proj",{"2":{"1":2,"2":1,"9":4,"62":1,"63":2}}],["projections",{"2":{"1":5,"7":1,"9":1,"55":1,"58":1,"63":1}}],["projection",{"0":{"59":1},"2":{"1":7,"7":2,"9":1,"22":1,"55":1,"60":1,"63":2}}],["projected",{"2":{"0":1,"1":16,"2":3,"7":1,"9":11,"26":4,"27":2,"29":2,"30":2,"31":4,"34":2,"38":2,"40":2,"44":2,"52":4,"53":2,"57":6,"59":6,"60":4,"62":2,"63":6,"64":2}}],["progress=false",{"2":{"1":4}}],["progress",{"2":{"1":20}}],["pacific",{"2":{"63":1}}],["packages",{"2":{"57":1}}],["package",{"0":{"4":1,"11":1},"2":{"9":1,"11":1,"66":1}}],["pane",{"2":{"47":1}}],["paste",{"2":{"12":1}}],["passes",{"2":{"1":1}}],["passed",{"2":{"1":29,"2":10,"8":2,"56":1}}],["passing",{"2":{"1":7,"2":2,"37":1}}],["pass",{"2":{"1":3,"2":1,"39":1,"41":1}}],["padding",{"2":{"1":1,"2":2,"43":2}}],["padded",{"2":{"1":1}}],["pad",{"2":{"1":3,"52":1}}],["pad=10",{"2":{"1":2,"52":1}}],["part",{"2":{"12":1}}],["parvus",{"2":{"1":2,"33":1,"35":2}}],["parallel",{"2":{"1":7}}],["parse",{"2":{"1":1}}],["parsed",{"2":{"1":1}}],["pair",{"2":{"1":10,"2":2}}],["pairs",{"2":{"1":16,"37":2}}],["path",{"2":{"1":7,"2":3}}],["paths",{"2":{"1":6}}],["powerful",{"2":{"55":1}}],["poly",{"2":{"52":1,"53":2,"62":1}}],["polygon",{"0":{"21":1,"50":1},"2":{"1":41,"23":1,"52":1}}],["polygons",{"2":{"1":15,"50":1}}],["polar",{"2":{"9":1}}],["poles",{"2":{"9":1}}],["population",{"2":{"9":1,"63":1}}],["poor",{"2":{"1":1}}],["pointer",{"2":{"2":1}}],["point",{"0":{"21":1},"2":{"1":29,"9":2,"56":2}}],["points",{"0":{"35":1,"36":1},"2":{"0":1,"1":45,"2":3,"4":3,"5":1,"6":7,"7":2,"9":2,"21":2,"31":4,"34":1,"36":1,"37":2,"63":1}}],["potential",{"2":{"1":6,"2":2}}],["possibly",{"2":{"28":1}}],["possible",{"2":{"1":7,"4":1,"12":1,"26":1}}],["possum",{"2":{"1":1,"32":1,"33":1}}],["positive",{"2":{"1":2}}],["position",{"2":{"1":1,"2":2,"43":2}}],["mm",{"2":{"64":2}}],["mmap",{"2":{"18":1}}],["m^2",{"2":{"64":1}}],["m",{"2":{"57":9,"58":1,"59":2}}],["mp4",{"2":{"43":2}}],["mljglminterface",{"2":{"37":2}}],["mlj",{"2":{"37":1}}],["my",{"2":{"1":2}}],["myraster",{"2":{"1":2,"2":3,"9":2,"63":2}}],["myseries",{"2":{"1":3}}],["motivation",{"2":{"61":1}}],["months",{"2":{"66":1}}],["month",{"2":{"4":2,"6":1,"33":1,"41":1,"43":1,"47":2,"61":1,"62":2,"66":1}}],["month=june",{"2":{"20":1}}],["month=july",{"2":{"1":2,"52":1}}],["month=jan",{"2":{"1":1}}],["month=6",{"2":{"1":1}}],["month=1",{"2":{"1":9}}],["move",{"2":{"2":1,"24":1}}],["mountain",{"2":{"1":1,"32":1,"33":1}}],["more",{"2":{"1":7,"2":1,"7":2,"22":1,"31":1,"47":1,"55":1,"57":1,"60":1,"64":1,"66":2}}],["modis",{"0":{"59":1},"2":{"58":1,"59":1}}],["modification",{"2":{"1":1}}],["modifying",{"0":{"28":1},"1":{"29":1,"30":1,"31":1}}],["modify",{"0":{"24":1},"2":{"1":1,"24":1,"28":1,"31":1}}],["models",{"2":{"37":8,"66":2}}],["modelling",{"0":{"32":1},"1":{"33":1,"34":1,"35":1,"36":1,"37":1,"38":1},"2":{"32":1}}],["model",{"2":{"1":1,"37":3,"66":2}}],["mode=",{"2":{"1":2}}],["mode",{"2":{"1":15,"27":1,"57":2}}],["most",{"2":{"1":4,"12":1,"23":1,"25":1,"55":2}}],["mosaic",{"0":{"50":1},"2":{"0":2,"1":13,"22":1,"50":1,"53":2}}],["misestimated",{"2":{"64":1}}],["missing",{"0":{"30":1},"2":{"0":1,"1":58,"2":18,"22":1,"23":2,"26":22,"27":17,"28":1,"29":17,"30":1,"31":34,"33":28,"34":5,"35":2,"38":39,"40":17,"44":5,"47":6,"52":11,"53":5,"57":1,"58":1,"62":13,"63":20,"64":47,"66":4}}],["missingval=nan",{"2":{"57":1,"58":1,"60":1}}],["missingval=",{"2":{"29":1,"30":1}}],["missingval=uint32",{"2":{"1":1}}],["missingval=missingval",{"2":{"1":2}}],["missingval=0",{"2":{"1":2}}],["missingval",{"2":{"0":1,"1":55,"2":14,"23":1,"26":2,"27":1,"29":1,"30":1,"31":2,"34":1,"38":1,"40":1,"44":1,"47":2,"52":2,"53":1,"57":3,"59":3,"60":2,"62":1,"63":1,"64":1}}],["missingmask",{"2":{"0":1,"1":6}}],["middle",{"2":{"63":1}}],["mitigate",{"2":{"60":1}}],["might",{"2":{"59":1}}],["millisecond",{"2":{"47":1}}],["mind",{"2":{"59":1}}],["minutes",{"2":{"47":2}}],["min",{"2":{"1":3,"57":1}}],["minimum",{"2":{"1":7,"12":1}}],["minor",{"2":{"1":2}}],["mix",{"2":{"1":1}}],["mixed",{"2":{"1":7}}],["must",{"2":{"1":18,"11":1,"43":2}}],["multithreading",{"2":{"64":1}}],["multipolygonwith",{"2":{"62":1}}],["multiply",{"2":{"66":1}}],["multiplying",{"2":{"61":1}}],["multiple",{"2":{"1":17,"2":3,"66":1}}],["multidimensional",{"2":{"22":1}}],["multi",{"2":{"1":4,"2":1,"47":1,"53":1}}],["much",{"2":{"1":4}}],["measures",{"2":{"37":1}}],["meaning",{"2":{"9":1}}],["means",{"0":{"61":1,"66":1},"1":{"62":1,"63":1,"64":1,"65":1,"66":1},"2":{"1":4,"2":7,"18":1,"63":1}}],["mean",{"0":{"26":1,"64":1},"2":{"1":18,"2":3,"9":2,"25":1,"26":1,"38":1,"47":6,"48":1,"49":4,"56":1,"61":4,"63":1,"65":3}}],["merging",{"2":{"55":1}}],["merge",{"2":{"1":1}}],["mercator",{"2":{"9":1,"55":2}}],["med",{"2":{"1":1,"57":1}}],["median",{"2":{"1":6}}],["messages",{"2":{"1":6,"2":2}}],["meter",{"2":{"63":1,"64":2}}],["meters",{"2":{"1":8,"9":2,"63":3}}],["method=method",{"2":{"57":2}}],["method=",{"2":{"57":4,"59":2,"60":2}}],["method",{"2":{"1":17,"2":8,"9":5,"53":1,"55":1,"57":9,"62":1,"63":4,"66":1}}],["methods",{"0":{"22":1,"23":1,"24":1,"57":1},"2":{"1":5,"2":1,"21":1,"22":1,"23":3,"24":1,"25":2,"47":2,"53":3,"55":3,"56":1,"57":5}}],["metadata",{"2":{"1":11,"2":2,"19":3,"26":4,"27":2,"29":2,"30":2,"31":4,"40":2,"47":4,"57":6,"59":6,"60":2,"62":2,"63":2}}],["memory",{"2":{"1":19,"2":6,"9":1,"24":2}}],["macro",{"2":{"66":1}}],["macao",{"2":{"1":1}}],["made",{"2":{"64":1}}],["madagascar",{"2":{"8":3}}],["margin",{"2":{"52":1}}],["markersize",{"2":{"34":1}}],["marker=",{"2":{"34":1}}],["many",{"2":{"12":1,"58":1}}],["manually",{"2":{"1":20,"2":5,"24":1,"45":1}}],["mainly",{"2":{"63":1}}],["main",{"2":{"10":1}}],["making",{"2":{"8":1,"12":1}}],["makie",{"0":{"39":1,"40":1,"41":1,"44":1,"46":1},"2":{"2":13,"8":1,"11":1,"20":1,"39":1,"40":1,"41":2,"43":13,"44":1,"45":3,"46":1,"62":1}}],["makes",{"2":{"41":1}}],["make",{"0":{"38":1},"2":{"1":4,"2":1,"9":1,"12":1,"31":1,"36":1,"50":1,"63":2}}],["malaysia",{"2":{"1":1}}],["maxnet2",{"2":{"37":5}}],["maxnetbinaryclassifier",{"2":{"37":7}}],["maxnet",{"2":{"37":10}}],["max",{"2":{"1":1,"45":2,"57":2}}],["maximum",{"2":{"1":7,"2":2,"45":1}}],["magnitude",{"2":{"1":2}}],["magma",{"2":{"1":2}}],["map",{"2":{"1":2,"27":2,"62":1,"66":1}}],["mappedindex",{"2":{"0":1,"1":1}}],["mappedcrs=epsg",{"2":{"1":3}}],["mappedcrs=nothing",{"2":{"1":2}}],["mappedcrs",{"2":{"0":1,"1":20,"45":1,"47":2}}],["mappedbounds",{"2":{"0":1,"1":1}}],["mapped",{"2":{"0":1,"1":16,"7":3,"47":4}}],["master",{"2":{"1":3,"51":1}}],["masks",{"2":{"1":1}}],["masked",{"2":{"1":16,"21":1,"63":4,"64":5,"66":3}}],["masking",{"0":{"50":1},"2":{"1":2,"64":1}}],["mask",{"2":{"0":2,"1":38,"2":1,"23":2,"50":1,"52":5,"53":2,"62":1,"63":4,"65":1,"66":4}}],["matters",{"2":{"1":2}}],["matter",{"2":{"1":2}}],["matching",{"2":{"1":3,"8":1,"45":1,"66":1}}],["match",{"2":{"1":9}}],["matches",{"2":{"1":1,"2":1}}],["matrix",{"2":{"1":2}}],["may",{"2":{"1":79,"2":7,"9":2,"15":1,"16":1,"19":1,"41":1,"43":1,"63":2}}],["circulation",{"2":{"66":1}}],["circumstances",{"2":{"1":7}}],["cm6a",{"2":{"66":1}}],["cmip6",{"2":{"66":1}}],["cmor",{"2":{"47":2}}],["cylindrical",{"2":{"55":1}}],["cyprus",{"2":{"1":1}}],["cftime",{"2":{"47":2}}],["cv",{"2":{"37":2}}],["cgrads",{"2":{"2":1,"43":1}}],["c",{"2":{"2":2,"56":1}}],["cp",{"2":{"1":1}}],["c=",{"2":{"1":3}}],["csv",{"2":{"1":1,"35":5}}],["cs",{"2":{"1":1,"9":1,"63":1}}],["clogloglink",{"2":{"37":2}}],["close",{"2":{"64":1}}],["closest",{"2":{"8":1}}],["closely",{"2":{"2":1}}],["closed",{"2":{"2":1}}],["cleaning",{"2":{"32":1}}],["click",{"2":{"22":1}}],["clipperton",{"2":{"1":1}}],["climatic",{"0":{"38":1}}],["climates",{"2":{"1":4}}],["climate",{"2":{"1":23,"11":1,"20":1,"41":1,"43":2,"52":7,"53":1,"62":2,"63":1,"66":7}}],["clims=",{"2":{"1":4}}],["classes",{"2":{"1":5}}],["classified",{"2":{"1":3}}],["classify",{"2":{"0":2,"1":10,"23":2}}],["century",{"2":{"66":1}}],["centers",{"2":{"1":1}}],["center",{"2":{"1":21,"47":6,"59":3,"60":1}}],["certain",{"2":{"8":1}}],["cell",{"2":{"1":5,"2":1,"9":8,"47":2,"56":2,"59":1,"61":2,"63":7,"64":3,"65":2,"66":1}}],["cells",{"2":{"1":3,"9":1,"55":2,"61":1,"63":4,"64":1,"65":1}}],["cellarea",{"0":{"9":1},"2":{"0":1,"1":2,"9":7,"63":4,"65":1}}],["curvature",{"2":{"61":1}}],["current",{"2":{"1":3,"2":2,"29":1,"44":1}}],["currently",{"2":{"1":3}}],["cubicspline",{"2":{"1":1,"57":1}}],["cubic",{"2":{"1":3,"57":1}}],["custom",{"2":{"1":4}}],["cultural",{"2":{"1":3,"51":1}}],["cut",{"2":{"1":6,"44":1}}],["cuda",{"2":{"1":1}}],["cuarray",{"2":{"1":1}}],["chordata",{"2":{"33":15}}],["chosen",{"2":{"1":3,"2":1,"9":2,"63":1}}],["chunk",{"2":{"2":11}}],["chunks",{"2":{"2":6}}],["chunking",{"2":{"2":1}}],["chile",{"2":{"1":1,"61":1,"62":7,"63":6,"64":3,"66":5}}],["child",{"2":{"1":11,"2":1}}],["china",{"2":{"1":8}}],["checks",{"2":{"2":1}}],["checksum",{"2":{"2":4}}],["check",{"2":{"2":1}}],["checked",{"2":{"1":2}}],["checkmemory",{"2":{"2":1}}],["checkmem",{"2":{"0":1,"2":3}}],["changes",{"2":{"1":2,"59":1}}],["change",{"0":{"22":1,"23":1},"2":{"1":21,"9":1,"29":1,"31":2,"45":2,"55":4,"63":1,"66":1}}],["changed",{"2":{"1":3,"2":2,"55":1}}],["changing",{"2":{"1":4,"2":2,"55":1}}],["cross",{"2":{"37":1}}],["cropping",{"2":{"64":1}}],["cropped",{"2":{"63":1}}],["crop",{"2":{"0":1,"1":13,"22":1,"53":1,"63":3,"66":2}}],["creation",{"2":{"2":2}}],["creating",{"2":{"1":3}}],["creates",{"2":{"1":1}}],["create",{"2":{"1":6,"60":1}}],["crs=sinusoidal",{"2":{"59":1,"60":1}}],["crs=epsg",{"2":{"1":4,"2":2,"9":2,"59":1,"60":2,"63":2}}],["crs=nothing",{"2":{"1":1}}],["crs",{"2":{"1":59,"9":8,"26":2,"27":1,"29":1,"30":1,"31":5,"34":1,"38":1,"40":1,"44":1,"45":1,"47":2,"52":2,"53":1,"57":3,"58":1,"59":6,"60":3,"62":1,"63":3,"64":1}}],["care",{"2":{"63":1}}],["cartesianindex",{"2":{"2":1}}],["cartier",{"2":{"1":1}}],["categories",{"2":{"23":1}}],["caveats",{"2":{"19":1}}],["cab",{"2":{"15":1}}],["cairomakie",{"2":{"8":2,"9":1,"20":1,"34":1,"40":1,"44":1,"46":3,"57":1,"62":1}}],["caused",{"2":{"12":1}}],["cause",{"2":{"1":1}}],["caution",{"2":{"1":7}}],["calculating",{"2":{"66":1}}],["calculate",{"2":{"1":4,"21":1,"66":2}}],["calculated",{"2":{"1":9}}],["call",{"2":{"9":1,"55":1}}],["calling",{"2":{"1":2}}],["called",{"2":{"1":1,"2":2,"9":1}}],["cased",{"2":{"1":2}}],["case",{"2":{"1":8,"59":1}}],["cases",{"2":{"1":20,"9":1,"55":1,"63":1}}],["cant",{"2":{"16":1}}],["cannot",{"2":{"1":1,"2":1}}],["can",{"2":{"1":82,"2":34,"4":1,"7":1,"9":8,"10":2,"12":5,"14":3,"15":2,"16":1,"17":1,"18":1,"19":2,"20":1,"25":1,"28":2,"31":3,"39":1,"41":2,"43":5,"45":2,"53":2,"55":4,"56":1,"59":2,"61":1,"62":2,"63":5,"64":5,"66":3}}],["coef",{"2":{"37":1}}],["coords",{"2":{"34":2,"35":1}}],["coordinatetransformations",{"2":{"11":1}}],["coordinate",{"2":{"1":10,"9":3,"11":1,"55":2,"58":1,"63":1}}],["coordinates",{"2":{"1":10,"4":1,"8":1,"9":2,"34":1,"35":2,"47":1}}],["code",{"2":{"2":1,"12":1}}],["course",{"2":{"9":1}}],["could",{"2":{"1":1,"47":1,"49":1,"60":1}}],["counts",{"2":{"59":1,"60":2}}],["count",{"2":{"1":4}}],["country",{"2":{"1":13,"50":1,"61":1}}],["countries",{"2":{"1":15,"50":1,"51":1,"53":2,"62":4}}],["counted",{"2":{"1":2}}],["counter",{"2":{"1":7}}],["correspond",{"2":{"66":1}}],["corresponding",{"2":{"1":1,"2":1,"11":1,"60":1}}],["correlation",{"2":{"1":1,"44":2}}],["correctly",{"2":{"47":1}}],["correct",{"2":{"1":13,"2":8}}],["covering",{"2":{"22":1}}],["cover",{"2":{"1":2}}],["covered",{"2":{"1":11}}],["coverage",{"2":{"0":2,"1":15}}],["colgap",{"2":{"44":1,"57":2}}],["color",{"2":{"2":2,"43":2,"62":1}}],["colorrange",{"2":{"2":1,"38":1,"43":1,"57":4,"62":1}}],["colormaps",{"2":{"2":1,"43":1}}],["colormap",{"2":{"2":3,"43":3,"44":2}}],["colorbar=",{"2":{"43":1}}],["colorbarlabel",{"2":{"2":1,"43":1}}],["colorbar",{"2":{"2":8,"43":8,"44":5,"57":2,"59":2,"60":3}}],["color=",{"2":{"1":2,"34":1}}],["colon",{"2":{"1":4}}],["collect",{"2":{"1":1,"34":1,"64":1}}],["collection",{"2":{"1":1}}],["collections",{"2":{"1":3}}],["collapse",{"2":{"1":2}}],["columns",{"2":{"1":18,"33":1}}],["column",{"2":{"1":20}}],["copying",{"2":{"1":1}}],["copy",{"2":{"1":2,"2":1}}],["comes",{"2":{"61":1}}],["come",{"2":{"58":1,"66":1}}],["command",{"2":{"10":2,"49":1}}],["comments",{"2":{"2":2}}],["common",{"2":{"1":6,"15":1,"20":1,"32":1,"53":1,"61":1}}],["commonly",{"2":{"1":1,"23":1}}],["com",{"2":{"1":3,"51":1}}],["computing",{"0":{"61":1,"64":1,"66":1},"1":{"62":1,"63":1,"64":1,"65":1,"66":1},"2":{"9":1,"64":2,"65":1}}],["computes",{"2":{"1":1,"9":1,"63":1}}],["compute",{"2":{"1":4,"9":3,"61":3,"63":5,"64":3,"65":2}}],["compress",{"2":{"2":2}}],["compressed",{"2":{"2":2,"18":1}}],["compression",{"2":{"2":8}}],["compare",{"2":{"59":1,"60":1}}],["comparison",{"2":{"1":6}}],["compatable",{"2":{"1":1}}],["compatible",{"2":{"1":21}}],["complicated",{"2":{"1":7,"66":1}}],["completely",{"2":{"1":10,"2":1,"19":1}}],["complete",{"2":{"1":1,"12":1}}],["combining",{"2":{"1":3}}],["combination",{"2":{"1":5,"66":1}}],["combined",{"2":{"1":6}}],["combine",{"2":{"0":1,"1":6,"53":1,"66":3}}],["congratulations",{"2":{"64":1}}],["conveniently",{"2":{"33":1}}],["conversion",{"2":{"19":2}}],["converting",{"2":{"1":1}}],["converted",{"2":{"1":10,"2":2,"15":1,"45":1,"56":1}}],["convert",{"2":{"1":8,"35":1,"64":1}}],["convertlookup",{"2":{"0":1,"1":1}}],["confusion",{"2":{"2":1}}],["consider",{"2":{"55":1,"57":1}}],["considering",{"2":{"1":1}}],["construct",{"2":{"9":3}}],["constructor",{"2":{"1":3}}],["const",{"2":{"8":1,"37":1}}],["concatenate",{"2":{"1":2}}],["concrete",{"2":{"1":2}}],["conditions",{"2":{"1":7}}],["continuous",{"2":{"37":4}}],["content",{"2":{"34":1}}],["contents",{"2":{"1":2}}],["contourf",{"2":{"2":1,"39":1,"40":1,"43":1,"45":2,"48":1}}],["contour",{"0":{"48":1},"2":{"2":1,"39":1,"40":1,"43":1,"45":2,"47":1}}],["control",{"2":{"55":1}}],["contribution",{"2":{"63":1}}],["contributions",{"2":{"55":1,"59":1}}],["contributing",{"2":{"1":8}}],["contribute",{"2":{"1":4}}],["contrast",{"2":{"1":3,"9":1,"44":2}}],["contained",{"2":{"2":1}}],["contains",{"2":{"1":7,"7":1,"8":1,"37":1}}],["contain",{"2":{"1":4}}],["containing",{"2":{"1":13,"2":2,"37":1}}],["black",{"2":{"34":1}}],["block",{"2":{"2":2}}],["blocks",{"2":{"1":2}}],["blocking",{"2":{"1":4}}],["break",{"2":{"41":1}}],["breaks",{"2":{"12":1}}],["browser",{"2":{"37":1}}],["broadcast",{"2":{"2":1,"26":2,"27":2}}],["broadcasting",{"0":{"27":1},"2":{"1":1,"66":1}}],["b",{"2":{"1":11,"6":2,"8":2,"29":1}}],["bit",{"2":{"60":1,"66":1}}],["bitarray",{"2":{"1":7}}],["bigger",{"2":{"59":1}}],["bilinear",{"2":{"1":2,"57":1}}],["biodiversity",{"2":{"32":1}}],["bio",{"2":{"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"57":1}}],["bio7",{"2":{"1":6,"34":1,"36":20,"37":1}}],["bio5",{"2":{"1":6,"26":2,"27":1,"29":1,"30":1,"31":2,"40":1,"57":3,"59":3}}],["bio3",{"2":{"1":6,"34":1,"36":20,"37":1}}],["bio12",{"2":{"1":6,"34":1,"36":20,"37":1}}],["bio1",{"2":{"1":6,"34":1,"36":20,"37":1}}],["bioclimatic",{"0":{"34":1}}],["bioclim",{"0":{"35":1},"2":{"1":2,"8":1,"26":3,"27":1,"29":2,"30":1,"31":2,"32":1,"33":2,"34":3,"40":2,"45":1,"46":1,"57":2,"58":1}}],["bug",{"2":{"12":4}}],["bugs",{"0":{"12":1},"2":{"12":1}}],["built",{"2":{"1":2,"11":1,"64":1}}],["building",{"2":{"59":1}}],["build",{"2":{"1":22}}],["burramys",{"2":{"1":1,"33":1,"35":2}}],["burramis",{"2":{"1":1}}],["but",{"2":{"1":13,"2":3,"7":1,"9":1,"12":2,"14":1,"16":1,"18":1,"28":1,"43":2,"55":2,"61":1,"63":1,"64":1,"66":1}}],["byrow",{"2":{"1":2}}],["by",{"0":{"4":1,"6":1,"7":1},"2":{"1":91,"2":23,"6":1,"8":1,"9":7,"21":1,"22":1,"23":1,"31":1,"41":1,"45":1,"55":2,"57":1,"59":1,"61":4,"63":7,"64":2,"66":3}}],["bonus",{"0":{"66":1}}],["box",{"2":{"12":1,"43":1,"63":1}}],["bottom",{"2":{"2":1,"12":1,"43":1,"62":1}}],["both",{"2":{"1":2,"35":1,"55":1}}],["bolivia",{"2":{"1":1}}],["border",{"2":{"1":8,"50":1,"52":7,"53":9}}],["borders",{"2":{"1":7,"53":11}}],["bounding",{"2":{"63":1}}],["bounded",{"2":{"63":1}}],["boundaries",{"2":{"1":1}}],["boundary=",{"2":{"1":2}}],["boundary",{"2":{"1":9,"50":1,"51":1}}],["bounds",{"2":{"1":9}}],["bool",{"2":{"1":5,"2":1}}],["boolmask",{"2":{"0":1,"1":6}}],["battle",{"2":{"56":1}}],["batlow",{"2":{"44":1}}],["bad",{"2":{"37":1,"64":2}}],["basic",{"2":{"2":1}}],["based",{"2":{"1":2,"2":2,"27":1,"53":1,"56":4}}],["base",{"2":{"1":2,"2":12,"25":2,"37":2}}],["bajo",{"2":{"1":1}}],["bank",{"2":{"1":2}}],["bang",{"2":{"1":4}}],["bands",{"2":{"1":1,"7":1,"66":1}}],["band",{"2":{"0":1,"1":10,"2":1,"7":1,"14":1,"18":1,"34":1,"43":1,"66":2}}],["backgroundcolor=",{"2":{"44":2}}],["background",{"0":{"36":1},"2":{"36":2,"37":2}}],["back",{"2":{"1":2,"9":1,"47":1,"59":1,"60":1,"63":1}}],["backends",{"2":{"13":1,"19":1}}],["backend",{"2":{"1":1,"2":10,"11":2,"13":1,"16":1}}],["backed",{"2":{"1":7}}],["bar",{"2":{"1":9}}],["becomes",{"2":{"31":1}}],["because",{"2":{"1":7,"4":1,"12":2,"63":1,"66":1}}],["best",{"2":{"2":1,"14":1,"43":1}}],["besides",{"2":{"1":2}}],["being",{"2":{"2":3,"9":1,"53":1}}],["beyond",{"2":{"1":1}}],["bets",{"2":{"2":1,"43":1}}],["better",{"2":{"1":1}}],["between",{"2":{"1":9,"2":1,"8":3,"9":1,"43":1,"58":1}}],["before",{"2":{"1":13,"2":1,"11":1}}],["behaviour",{"2":{"1":2}}],["behaviours",{"2":{"1":2}}],["been",{"2":{"1":4,"19":1}}],["below",{"2":{"1":1,"41":1}}],["be",{"2":{"1":217,"2":48,"4":1,"7":1,"9":5,"10":1,"12":2,"14":2,"15":2,"16":3,"17":1,"18":1,"19":3,"20":1,"26":1,"27":1,"28":1,"31":2,"43":7,"45":2,"59":1,"63":3,"64":4,"66":2}}],["away",{"2":{"63":2}}],["awap",{"2":{"1":13}}],["api",{"2":{"45":1}}],["appreciated",{"2":{"12":1}}],["approach",{"2":{"61":1}}],["appropriately",{"2":{"41":1}}],["appropriate",{"2":{"2":1,"66":1}}],["approximately",{"2":{"1":2}}],["approximates",{"2":{"1":1,"9":1,"63":1}}],["approximate",{"2":{"1":1,"9":1,"63":1}}],["appears",{"2":{"1":1}}],["appended",{"2":{"2":3}}],["append",{"2":{"1":9,"2":3}}],["apparent",{"2":{"1":1}}],["applies",{"2":{"27":1}}],["applied",{"2":{"1":16,"2":1,"26":1,"27":1}}],["applications",{"2":{"23":1}}],["applicable",{"2":{"2":1,"53":1,"55":1}}],["apply",{"2":{"1":4,"59":1}}],["amounts",{"2":{"22":1}}],["amount",{"2":{"2":1,"43":1}}],["americas",{"2":{"47":1}}],["america",{"2":{"1":1}}],["avg",{"2":{"64":1,"66":1}}],["avoid",{"2":{"2":1}}],["averages",{"2":{"64":1}}],["average",{"2":{"1":3,"57":3,"59":2,"60":2,"61":2,"63":2,"64":2,"65":1,"66":1}}],["available",{"2":{"1":3,"2":1,"7":1,"8":1,"9":1,"26":1,"37":1,"57":1,"63":1}}],["affected",{"2":{"31":1}}],["africa",{"2":{"1":1}}],["after",{"2":{"1":14,"2":1}}],["auc",{"2":{"37":2}}],["authority",{"2":{"26":10,"27":5,"29":5,"30":5,"31":10,"34":5,"38":5,"40":5,"44":5,"52":10,"53":5,"57":15,"62":5,"63":5,"64":5}}],["authentication",{"2":{"12":1}}],["automatic",{"2":{"2":9,"43":9}}],["automatically",{"2":{"1":11,"2":7,"13":1,"34":1}}],["aus",{"2":{"1":3,"34":2,"35":1,"36":1,"38":1,"44":3}}],["ausbounds",{"2":{"1":2,"44":2}}],["australian",{"2":{"1":1}}],["australia",{"2":{"1":2,"34":1,"44":2}}],["adding",{"2":{"26":1}}],["additional",{"2":{"1":3,"7":1,"23":1,"66":2}}],["additionally",{"2":{"1":6}}],["addition",{"2":{"1":2}}],["add",{"2":{"1":1,"4":1,"10":3,"11":7,"12":1,"53":1}}],["added",{"2":{"1":1,"53":1}}],["admin",{"2":{"1":7,"51":1,"62":1}}],["again",{"2":{"1":1,"2":1,"53":1,"60":1}}],["ag",{"2":{"1":2}}],["aggregation",{"2":{"1":12}}],["aggregated",{"2":{"1":6}}],["aggregate",{"2":{"0":2,"1":10,"22":2,"55":3}}],["axs",{"2":{"44":5,"57":6}}],["ax",{"2":{"34":3,"40":3,"57":4,"59":2,"60":3}}],["axis3",{"2":{"2":1,"43":1}}],["axistype",{"2":{"2":1,"43":1}}],["axis",{"2":{"1":6,"2":8,"8":1,"9":1,"22":1,"26":4,"27":2,"29":2,"30":2,"31":5,"34":3,"38":2,"40":3,"41":1,"43":8,"44":3,"45":1,"52":4,"53":2,"57":8,"62":3,"63":3,"64":2}}],["axes",{"2":{"1":4,"45":2,"47":1,"55":2}}],["acquiring",{"0":{"62":1}}],["across",{"0":{"66":1},"2":{"22":1,"37":1,"61":1,"62":1,"63":1,"64":1}}],["activate",{"2":{"8":1,"46":1,"62":1}}],["activated",{"2":{"2":2}}],["actually",{"2":{"2":2,"9":1,"12":1,"29":1,"66":1}}],["actual",{"2":{"1":2}}],["accomplish",{"2":{"66":1}}],["according",{"2":{"64":1}}],["account",{"2":{"9":1,"63":1,"64":2,"65":2}}],["accuracy",{"2":{"37":2}}],["accurate",{"2":{"1":1}}],["accept",{"2":{"45":1,"56":1}}],["accepts",{"2":{"1":2,"2":2,"43":1}}],["accepted",{"2":{"1":2,"40":1}}],["accessible",{"2":{"12":1}}],["access",{"2":{"1":3,"14":1,"33":1}}],["atol",{"2":{"1":9}}],["attributes",{"2":{"41":1,"44":1}}],["attempting",{"2":{"1":1}}],["attached",{"2":{"1":8}}],["at",{"0":{"35":1},"2":{"1":7,"2":5,"8":2,"9":3,"12":1,"41":1,"47":2,"49":1,"64":1}}],["alignment",{"2":{"59":1}}],["aligned",{"2":{"1":1}}],["alpha=0",{"2":{"34":1}}],["algebra",{"2":{"25":1}}],["algorithm",{"2":{"1":3,"55":1,"56":2}}],["altered",{"2":{"2":1,"47":2}}],["alternate",{"2":{"1":3,"2":2}}],["although",{"2":{"1":1}}],["along",{"2":{"1":7,"23":1}}],["already",{"2":{"1":4,"2":8}}],["also",{"2":{"1":34,"2":3,"6":1,"9":1,"14":1,"15":1,"25":1,"26":1,"31":2,"37":1,"53":1,"55":2,"64":1,"65":1,"66":2}}],["allow",{"2":{"1":1,"45":1}}],["allows",{"2":{"1":1,"56":1}}],["allocating",{"2":{"1":1}}],["alllayers",{"2":{"1":2}}],["alllayers=true",{"2":{"1":2}}],["all",{"2":{"1":75,"2":5,"8":2,"9":2,"12":1,"14":1,"15":1,"23":1,"34":1,"53":2,"55":1,"60":1,"62":2,"63":2,"64":2,"66":3}}],["always",{"2":{"1":3,"2":1,"8":1,"12":2,"18":1,"55":1,"56":1,"59":1,"61":1,"65":1}}],["arithmetic",{"2":{"61":1,"65":1}}],["around",{"2":{"47":1}}],["arbitrary",{"2":{"7":1,"15":1}}],["architectures",{"2":{"2":1}}],["archive",{"2":{"2":2}}],["archgdal",{"0":{"33":1},"2":{"1":21,"2":2,"9":1,"11":2,"14":1,"19":1,"33":2,"40":1,"45":1,"46":1,"50":1,"57":1,"62":1,"63":1}}],["args",{"2":{"45":1}}],["argentina",{"2":{"1":4}}],["argument",{"2":{"1":4,"2":2,"9":1,"25":1,"62":1,"63":1}}],["arguments",{"2":{"1":26,"2":2}}],["area",{"2":{"1":14,"2":1,"9":10,"61":5,"63":10,"64":7,"65":3,"66":4}}],["areas",{"2":{"1":19,"9":2,"22":1,"63":4,"64":5,"66":5}}],["are",{"2":{"1":103,"2":8,"7":1,"8":3,"9":2,"12":4,"14":1,"15":2,"18":3,"23":1,"31":1,"32":1,"37":2,"41":3,"43":3,"45":1,"47":1,"49":1,"53":1,"55":4,"56":2,"59":1,"60":2,"63":1,"66":2}}],["arrays",{"2":{"1":18,"2":2,"7":2,"22":1,"25":1,"28":1,"53":1}}],["array",{"0":{"5":1,"25":1},"1":{"26":1,"27":1,"28":1,"29":1,"30":1,"31":1},"2":{"1":48,"2":2,"8":2,"22":1,"23":1,"26":1,"27":2,"33":1,"45":1}}],["asc",{"2":{"14":1}}],["aspect",{"2":{"9":1,"40":1,"41":1,"62":1}}],["ashmore",{"2":{"1":1}}],["assumption",{"2":{"64":1}}],["assumes",{"2":{"56":1}}],["assuming",{"2":{"1":1,"9":2,"63":1}}],["associated",{"2":{"7":1}}],["assign",{"2":{"1":2}}],["assigned",{"2":{"1":6}}],["as",{"2":{"1":70,"2":14,"8":1,"9":2,"11":1,"14":3,"15":2,"19":1,"20":1,"23":2,"25":2,"29":1,"41":2,"47":1,"49":1,"63":2,"65":1,"66":6}}],["a",{"0":{"37":1,"48":1,"58":1,"60":1},"1":{"59":1,"60":1},"2":{"1":442,"2":108,"6":2,"8":7,"9":15,"11":1,"12":5,"13":1,"20":4,"22":3,"23":2,"24":1,"25":1,"26":4,"27":4,"28":2,"29":2,"30":1,"31":5,"32":1,"34":1,"35":1,"36":1,"37":1,"39":2,"40":7,"41":4,"43":11,"45":6,"46":2,"47":5,"49":3,"50":1,"52":1,"53":6,"55":6,"56":2,"57":3,"60":2,"61":2,"62":2,"63":11,"64":1,"65":3,"66":11}}],["above",{"2":{"66":2}}],["about",{"2":{"1":8,"2":2,"9":1,"63":2,"64":1}}],["absence",{"2":{"37":1}}],["absolute",{"2":{"1":2}}],["abstracrasterseries",{"2":{"1":2}}],["abstrackrasterstack",{"2":{"1":1}}],["abstractweights",{"2":{"2":1}}],["abstractdiskarray",{"2":{"2":3}}],["abstractdimensionalarray",{"2":{"1":1}}],["abstractdimarray",{"2":{"1":4}}],["abstractvector",{"2":{"1":3}}],["abstractgeometry",{"2":{"1":15}}],["abstractbasicdimarray",{"2":{"1":1}}],["abstractstack",{"2":{"1":2}}],["abstractstring",{"2":{"1":3,"2":6}}],["abstractsampled",{"2":{"1":2,"2":1}}],["abstractarray",{"2":{"1":5,"2":1}}],["abstract",{"2":{"1":3,"2":1}}],["abstractrasters",{"2":{"1":5}}],["abstractrasterstack",{"2":{"0":1,"1":12,"2":5}}],["abstractrasterseries",{"2":{"0":1,"1":8,"2":5}}],["abstractraster",{"2":{"0":1,"1":27,"2":9}}],["abstractprojected",{"2":{"0":1,"1":4,"2":1}}],["annoyingly",{"2":{"66":1}}],["analysis",{"2":{"66":2}}],["animations",{"0":{"43":1}}],["animalia",{"2":{"33":15}}],["answer",{"2":{"1":2}}],["anything",{"2":{"31":1}}],["any",{"2":{"1":16,"2":6,"12":1,"22":1,"26":3,"27":1,"29":1,"30":1,"31":3,"37":2,"39":1,"40":1,"41":2,"43":1,"45":1,"47":2,"57":3,"59":3,"60":1,"62":1,"63":2,"64":1}}],["another",{"2":{"1":11,"7":1,"22":3,"55":1,"59":1}}],["and",{"0":{"21":1,"24":1,"33":1,"50":1,"54":1,"57":1},"1":{"55":1,"56":1,"57":1,"58":1,"59":1,"60":1},"2":{"1":165,"2":24,"4":2,"6":1,"7":7,"8":3,"9":8,"11":3,"12":6,"13":1,"14":1,"15":2,"18":2,"19":1,"20":5,"21":1,"22":3,"23":1,"25":2,"26":1,"31":1,"32":3,"33":1,"34":3,"35":2,"36":1,"37":3,"38":1,"41":3,"43":2,"45":3,"47":5,"52":1,"53":9,"55":8,"56":1,"57":1,"58":2,"59":5,"60":6,"61":2,"62":3,"63":5,"64":4,"65":3,"66":10}}],["an",{"0":{"8":1,"22":1,"23":1},"2":{"1":77,"2":14,"8":3,"11":1,"12":2,"21":1,"23":2,"26":1,"28":2,"31":2,"32":2,"41":1,"43":1,"45":1,"53":1,"64":2,"66":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/dev/assets/chunks/VPLocalSearchBox.B8E42HDE.js b/dev/assets/chunks/VPLocalSearchBox.BOox_SFc.js similarity index 99% rename from dev/assets/chunks/VPLocalSearchBox.B8E42HDE.js rename to dev/assets/chunks/VPLocalSearchBox.BOox_SFc.js index 2706bf5e..638995c3 100644 --- a/dev/assets/chunks/VPLocalSearchBox.B8E42HDE.js +++ b/dev/assets/chunks/VPLocalSearchBox.BOox_SFc.js @@ -1,4 +1,4 @@ -var Ot=Object.defineProperty;var Ft=(a,e,t)=>e in a?Ot(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Ae=(a,e,t)=>Ft(a,typeof e!="symbol"?e+"":e,t);import{V as Ct,p as ie,h as ge,aj as tt,ak as Rt,al as At,am as Mt,q as $e,an as Lt,d as Dt,D as xe,ao as nt,ap as zt,aq as Pt,s as jt,ar as Vt,v as Me,P as fe,O as _e,as as $t,at as Bt,W as Wt,R as Kt,$ as Jt,o as H,b as qt,j as _,a0 as Ut,k as L,au as Gt,av as Ht,aw as Qt,c as Z,n as st,e as Se,C as it,F as rt,a as he,t as pe,ax as Yt,ay as at,az as Zt,a8 as Xt,ae as en,aA as tn,_ as nn}from"./framework.CS7uZ9fp.js";import{u as sn,c as rn}from"./theme.Bxszwcx-.js";const an={root:()=>Ct(()=>import("./@localSearchIndexroot.CJzAcS6r.js"),[])};/*! +var Ot=Object.defineProperty;var Ft=(a,e,t)=>e in a?Ot(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Ae=(a,e,t)=>Ft(a,typeof e!="symbol"?e+"":e,t);import{V as Ct,p as ie,h as ge,aj as tt,ak as Rt,al as At,am as Mt,q as $e,an as Lt,d as Dt,D as xe,ao as nt,ap as zt,aq as Pt,s as jt,ar as Vt,v as Me,P as fe,O as _e,as as $t,at as Bt,W as Wt,R as Kt,$ as Jt,o as H,b as qt,j as _,a0 as Ut,k as L,au as Gt,av as Ht,aw as Qt,c as Z,n as st,e as Se,C as it,F as rt,a as he,t as pe,ax as Yt,ay as at,az as Zt,a8 as Xt,ae as en,aA as tn,_ as nn}from"./framework.CS7uZ9fp.js";import{u as sn,c as rn}from"./theme.Coy9cY5H.js";const an={root:()=>Ct(()=>import("./@localSearchIndexroot.DLSKlNC3.js"),[])};/*! * tabbable 6.2.0 * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE */var gt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ne=gt.join(","),vt=typeof Element>"u",ae=vt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Oe=!vt&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a==null?void 0:a.ownerDocument},Fe=function a(e,t){var n;t===void 0&&(t=!0);var s=e==null||(n=e.getAttribute)===null||n===void 0?void 0:n.call(e,"inert"),r=s===""||s==="true",i=r||t&&e&&a(e.parentNode);return i},on=function(e){var t,n=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return n===""||n==="true"},bt=function(e,t,n){if(Fe(e))return[];var s=Array.prototype.slice.apply(e.querySelectorAll(Ne));return t&&ae.call(e,Ne)&&s.unshift(e),s=s.filter(n),s},yt=function a(e,t,n){for(var s=[],r=Array.from(e);r.length;){var i=r.shift();if(!Fe(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=a(l,!0,n);n.flatten?s.push.apply(s,c):s.push({scopeParent:i,candidates:c})}else{var f=ae.call(i,Ne);f&&n.filter(i)&&(t||!e.includes(i))&&s.push(i);var g=i.shadowRoot||typeof n.getShadowRoot=="function"&&n.getShadowRoot(i),h=!Fe(g,!1)&&(!n.shadowRootFilter||n.shadowRootFilter(i));if(g&&h){var b=a(g===!0?i.children:g.children,!0,n);n.flatten?s.push.apply(s,b):s.push({scopeParent:i,candidates:b})}else r.unshift.apply(r,i.children)}}return s},wt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},re=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||on(e))&&!wt(e)?0:e.tabIndex},ln=function(e,t){var n=re(e);return n<0&&t&&!wt(e)?0:n},cn=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},xt=function(e){return e.tagName==="INPUT"},un=function(e){return xt(e)&&e.type==="hidden"},dn=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(n){return n.tagName==="SUMMARY"});return t},fn=function(e,t){for(var n=0;nsummary:first-of-type"),i=r?e.parentElement:e;if(ae.call(i,"details:not([open]) *"))return!0;if(!n||n==="full"||n==="legacy-full"){if(typeof s=="function"){for(var o=e;e;){var l=e.parentElement,c=Oe(e);if(l&&!l.shadowRoot&&s(l)===!0)return ot(e);e.assignedSlot?e=e.assignedSlot:!l&&c!==e.ownerDocument?e=c.host:e=l}e=o}if(gn(e))return!e.getClientRects().length;if(n!=="legacy-full")return!0}else if(n==="non-zero-area")return ot(e);return!1},bn=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var n=0;n=0)},wn=function a(e){var t=[],n=[];return e.forEach(function(s,r){var i=!!s.scopeParent,o=i?s.scopeParent:s,l=ln(o,i),c=i?a(s.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):n.push({documentOrder:r,tabIndex:l,item:s,isScope:i,content:c})}),n.sort(cn).reduce(function(s,r){return r.isScope?s.push.apply(s,r.content):s.push(r.content),s},[]).concat(t)},xn=function(e,t){t=t||{};var n;return t.getShadowRoot?n=yt([e],t.includeContainer,{filter:Be.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:yn}):n=bt(e,t.includeContainer,Be.bind(null,t)),wn(n)},_n=function(e,t){t=t||{};var n;return t.getShadowRoot?n=yt([e],t.includeContainer,{filter:Ce.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):n=bt(e,t.includeContainer,Ce.bind(null,t)),n},oe=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ae.call(e,Ne)===!1?!1:Be(t,e)},Sn=gt.concat("iframe").join(","),Le=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ae.call(e,Sn)===!1?!1:Ce(t,e)};/*! diff --git a/dev/assets/chunks/theme.Bxszwcx-.js b/dev/assets/chunks/theme.Coy9cY5H.js similarity index 99% rename from dev/assets/chunks/theme.Bxszwcx-.js rename to dev/assets/chunks/theme.Coy9cY5H.js index 7f463855..f899059c 100644 --- a/dev/assets/chunks/theme.Bxszwcx-.js +++ b/dev/assets/chunks/theme.Coy9cY5H.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.B8E42HDE.js","assets/chunks/framework.CS7uZ9fp.js"])))=>i.map(i=>d[i]); -import{d as b,o as a,c as d,r as f,n as I,a as X,t as N,b as g,w as v,e as _,T as Pe,_ as $,u as Je,i as _t,f as bt,g as Se,h as V,j as p,k as i,l as Y,m as _e,p as C,q as z,s as de,v as G,x as Ve,y as Le,z as gt,A as kt,B as Z,F as A,C as O,D as Xe,E as fe,G as k,H as U,I as Ye,J as pe,K as W,L as ee,M as $t,N as Ze,O as be,P as we,Q as Qe,R as ve,S as yt,U as Pt,V as St,W as xe,X as Te,Y as Vt,Z as Lt,$ as wt,a0 as Tt,a1 as et,a2 as Ct,a3 as Mt,a4 as Fe}from"./framework.CS7uZ9fp.js";const Nt=b({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(n){return(e,t)=>(a(),d("span",{class:I(["VPBadge",e.type])},[f(e.$slots,"default",{},()=>[X(N(e.text),1)])],2))}}),It={key:0,class:"VPBackdrop"},At=b({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(n){return(e,t)=>(a(),g(Pe,{name:"fade"},{default:v(()=>[e.show?(a(),d("div",It)):_("",!0)]),_:1}))}}),Et=$(At,[["__scopeId","data-v-b06cdb19"]]),L=Je;function Bt(n,e){let t,o=!1;return()=>{t&&clearTimeout(t),o?t=setTimeout(n,e):(n(),(o=!0)&&setTimeout(()=>o=!1,e))}}function ge(n){return n.startsWith("/")?n:`/${n}`}function Ce(n){const{pathname:e,search:t,hash:o,protocol:s}=new URL(n,"http://a.com");if(_t(n)||n.startsWith("#")||!s.startsWith("http")||!bt(e))return n;const{site:r}=L(),l=e.endsWith("/")||e.endsWith(".html")?n:n.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${o}`);return Se(l)}function ne({correspondingLink:n=!1}={}){const{site:e,localeIndex:t,page:o,theme:s,hash:r}=L(),l=V(()=>{var c,m;return{label:(c=e.value.locales[t.value])==null?void 0:c.label,link:((m=e.value.locales[t.value])==null?void 0:m.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:V(()=>Object.entries(e.value.locales).flatMap(([c,m])=>l.value.label===m.label?[]:{text:m.label,link:Ht(m.link||(c==="root"?"/":`/${c}/`),s.value.i18nRouting!==!1&&n,o.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+r.value})),currentLang:l}}function Ht(n,e,t,o){return e?n.replace(/\/$/,"")+ge(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,o?".html":"")):n}const Ot={class:"NotFound"},Dt={class:"code"},Ft={class:"title"},Rt={class:"quote"},Ut={class:"action"},jt=["href","aria-label"],zt=b({__name:"NotFound",setup(n){const{theme:e}=L(),{currentLang:t}=ne();return(o,s)=>{var r,l,u,c,m;return a(),d("div",Ot,[p("p",Dt,N(((r=i(e).notFound)==null?void 0:r.code)??"404"),1),p("h1",Ft,N(((l=i(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),s[0]||(s[0]=p("div",{class:"divider"},null,-1)),p("blockquote",Rt,N(((u=i(e).notFound)==null?void 0:u.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),p("div",Ut,[p("a",{class:"link",href:i(Se)(i(t).link),"aria-label":((c=i(e).notFound)==null?void 0:c.linkLabel)??"go to home"},N(((m=i(e).notFound)==null?void 0:m.linkText)??"Take me home"),9,jt)])])}}}),Gt=$(zt,[["__scopeId","data-v-951cab6c"]]);function tt(n,e){if(Array.isArray(n))return le(n);if(n==null)return[];e=ge(e);const t=Object.keys(n).sort((s,r)=>r.split("/").length-s.split("/").length).find(s=>e.startsWith(ge(s))),o=t?n[t]:[];return Array.isArray(o)?le(o):le(o.items,o.base)}function Kt(n){const e=[];let t=0;for(const o in n){const s=n[o];if(s.items){t=e.push(s);continue}e[t]||e.push({items:[]}),e[t].items.push(s)}return e}function qt(n){const e=[];function t(o){for(const s of o)s.text&&s.link&&e.push({text:s.text,link:s.link,docFooterText:s.docFooterText}),s.items&&t(s.items)}return t(n),e}function ke(n,e){return Array.isArray(e)?e.some(t=>ke(n,t)):Y(n,e.link)?!0:e.items?ke(n,e.items):!1}function le(n,e){return[...n].map(t=>{const o={...t},s=o.base||e;return s&&o.link&&(o.link=s+o.link),o.items&&(o.items=le(o.items,s)),o})}function q(){const{frontmatter:n,page:e,theme:t}=L(),o=_e("(min-width: 960px)"),s=C(!1),r=V(()=>{const E=t.value.sidebar,w=e.value.relativePath;return E?tt(E,w):[]}),l=C(r.value);z(r,(E,w)=>{JSON.stringify(E)!==JSON.stringify(w)&&(l.value=r.value)});const u=V(()=>n.value.sidebar!==!1&&l.value.length>0&&n.value.layout!=="home"),c=V(()=>m?n.value.aside==null?t.value.aside==="left":n.value.aside==="left":!1),m=V(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:t.value.aside!==!1),y=V(()=>u.value&&o.value),h=V(()=>u.value?Kt(l.value):[]);function P(){s.value=!0}function S(){s.value=!1}function T(){s.value?S():P()}return{isOpen:s,sidebar:l,sidebarGroups:h,hasSidebar:u,hasAside:m,leftAside:c,isSidebarEnabled:y,open:P,close:S,toggle:T}}function Wt(n,e){let t;de(()=>{t=n.value?document.activeElement:void 0}),G(()=>{window.addEventListener("keyup",o)}),Ve(()=>{window.removeEventListener("keyup",o)});function o(s){s.key==="Escape"&&n.value&&(e(),t==null||t.focus())}}function Jt(n){const{page:e,hash:t}=L(),o=C(!1),s=V(()=>n.value.collapsed!=null),r=V(()=>!!n.value.link),l=C(!1),u=()=>{l.value=Y(e.value.relativePath,n.value.link)};z([e,n,t],u),G(u);const c=V(()=>l.value?!0:n.value.items?ke(e.value.relativePath,n.value.items):!1),m=V(()=>!!(n.value.items&&n.value.items.length));de(()=>{o.value=!!(s.value&&n.value.collapsed)}),Le(()=>{(l.value||c.value)&&(o.value=!1)});function y(){s.value&&(o.value=!o.value)}return{collapsed:o,collapsible:s,isLink:r,isActiveLink:l,hasActiveLink:c,hasChildren:m,toggle:y}}function Xt(){const{hasSidebar:n}=q(),e=_e("(min-width: 960px)"),t=_e("(min-width: 1280px)");return{isAsideEnabled:V(()=>!t.value&&!e.value?!1:n.value?t.value:e.value)}}const Yt=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,$e=[];function nt(n){return typeof n.outline=="object"&&!Array.isArray(n.outline)&&n.outline.label||n.outlineTitle||"On this page"}function Me(n){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const o=Number(t.tagName[1]);return{element:t,title:Zt(t),link:"#"+t.id,level:o}});return Qt(e,n)}function Zt(n){let e="";for(const t of n.childNodes)if(t.nodeType===1){if(Yt.test(t.className))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function Qt(n,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[o,s]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;return tn(n,o,s)}function xt(n,e){const{isAsideEnabled:t}=Xt(),o=Bt(r,100);let s=null;G(()=>{requestAnimationFrame(r),window.addEventListener("scroll",o)}),gt(()=>{l(location.hash)}),Ve(()=>{window.removeEventListener("scroll",o)});function r(){if(!t.value)return;const u=window.scrollY,c=window.innerHeight,m=document.body.offsetHeight,y=Math.abs(u+c-m)<1,h=$e.map(({element:S,link:T})=>({link:T,top:en(S)})).filter(({top:S})=>!Number.isNaN(S)).sort((S,T)=>S.top-T.top);if(!h.length){l(null);return}if(u<1){l(null);return}if(y){l(h[h.length-1].link);return}let P=null;for(const{link:S,top:T}of h){if(T>u+kt()+4)break;P=S}l(P)}function l(u){s&&s.classList.remove("active"),u==null?s=null:s=n.value.querySelector(`a[href="${decodeURIComponent(u)}"]`);const c=s;c?(c.classList.add("active"),e.value.style.top=c.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function en(n){let e=0;for(;n!==document.body;){if(n===null)return NaN;e+=n.offsetTop,n=n.offsetParent}return e}function tn(n,e,t){$e.length=0;const o=[],s=[];return n.forEach(r=>{const l={...r,children:[]};let u=s[s.length-1];for(;u&&u.level>=l.level;)s.pop(),u=s[s.length-1];if(l.element.classList.contains("ignore-header")||u&&"shouldIgnore"in u){s.push({level:l.level,shouldIgnore:!0});return}l.level>t||l.level{const s=Z("VPDocOutlineItem",!0);return a(),d("ul",{class:I(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),d(A,null,O(t.headers,({children:r,link:l,title:u})=>(a(),d("li",null,[p("a",{class:"outline-link",href:l,onClick:e,title:u},N(u),9,nn),r!=null&&r.length?(a(),g(s,{key:0,headers:r},null,8,["headers"])):_("",!0)]))),256))],2)}}}),ot=$(on,[["__scopeId","data-v-3f927ebe"]]),sn={class:"content"},an={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},rn=b({__name:"VPDocAsideOutline",setup(n){const{frontmatter:e,theme:t}=L(),o=Xe([]);fe(()=>{o.value=Me(e.value.outline??t.value.outline)});const s=C(),r=C();return xt(s,r),(l,u)=>(a(),d("nav",{"aria-labelledby":"doc-outline-aria-label",class:I(["VPDocAsideOutline",{"has-outline":o.value.length>0}]),ref_key:"container",ref:s},[p("div",sn,[p("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),p("div",an,N(i(nt)(i(t))),1),k(ot,{headers:o.value,root:!0},null,8,["headers"])])],2))}}),ln=$(rn,[["__scopeId","data-v-b38bf2ff"]]),cn={class:"VPDocAsideCarbonAds"},un=b({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(n){const e=()=>null;return(t,o)=>(a(),d("div",cn,[k(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),dn={class:"VPDocAside"},fn=b({__name:"VPDocAside",setup(n){const{theme:e}=L();return(t,o)=>(a(),d("div",dn,[f(t.$slots,"aside-top",{},void 0,!0),f(t.$slots,"aside-outline-before",{},void 0,!0),k(ln),f(t.$slots,"aside-outline-after",{},void 0,!0),o[0]||(o[0]=p("div",{class:"spacer"},null,-1)),f(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(a(),g(un,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):_("",!0),f(t.$slots,"aside-ads-after",{},void 0,!0),f(t.$slots,"aside-bottom",{},void 0,!0)]))}}),pn=$(fn,[["__scopeId","data-v-6d7b3c46"]]);function vn(){const{theme:n,page:e}=L();return V(()=>{const{text:t="Edit this page",pattern:o=""}=n.value.editLink||{};let s;return typeof o=="function"?s=o(e.value):s=o.replace(/:path/g,e.value.filePath),{url:s,text:t}})}function hn(){const{page:n,theme:e,frontmatter:t}=L();return V(()=>{var m,y,h,P,S,T,E,w;const o=tt(e.value.sidebar,n.value.relativePath),s=qt(o),r=mn(s,B=>B.link.replace(/[?#].*$/,"")),l=r.findIndex(B=>Y(n.value.relativePath,B.link)),u=((m=e.value.docFooter)==null?void 0:m.prev)===!1&&!t.value.prev||t.value.prev===!1,c=((y=e.value.docFooter)==null?void 0:y.next)===!1&&!t.value.next||t.value.next===!1;return{prev:u?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((h=r[l-1])==null?void 0:h.docFooterText)??((P=r[l-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((S=r[l-1])==null?void 0:S.link)},next:c?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((T=r[l+1])==null?void 0:T.docFooterText)??((E=r[l+1])==null?void 0:E.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((w=r[l+1])==null?void 0:w.link)}}})}function mn(n,e){const t=new Set;return n.filter(o=>{const s=e(o);return t.has(s)?!1:t.add(s)})}const j=b({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(n){const e=n,t=V(()=>e.tag??(e.href?"a":"span")),o=V(()=>e.href&&Ye.test(e.href)||e.target==="_blank");return(s,r)=>(a(),g(U(t.value),{class:I(["VPLink",{link:s.href,"vp-external-link-icon":o.value,"no-icon":s.noIcon}]),href:s.href?i(Ce)(s.href):void 0,target:s.target??(o.value?"_blank":void 0),rel:s.rel??(o.value?"noreferrer":void 0)},{default:v(()=>[f(s.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),_n={class:"VPLastUpdated"},bn=["datetime"],gn=b({__name:"VPDocFooterLastUpdated",setup(n){const{theme:e,page:t,lang:o}=L(),s=V(()=>new Date(t.value.lastUpdated)),r=V(()=>s.value.toISOString()),l=C("");return G(()=>{de(()=>{var u,c,m;l.value=new Intl.DateTimeFormat((c=(u=e.value.lastUpdated)==null?void 0:u.formatOptions)!=null&&c.forceLocale?o.value:void 0,((m=e.value.lastUpdated)==null?void 0:m.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(s.value)})}),(u,c)=>{var m;return a(),d("p",_n,[X(N(((m=i(e).lastUpdated)==null?void 0:m.text)||i(e).lastUpdatedText||"Last updated")+": ",1),p("time",{datetime:r.value},N(l.value),9,bn)])}}}),kn=$(gn,[["__scopeId","data-v-475f71b8"]]),$n={key:0,class:"VPDocFooter"},yn={key:0,class:"edit-info"},Pn={key:0,class:"edit-link"},Sn={key:1,class:"last-updated"},Vn={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Ln={class:"pager"},wn=["innerHTML"],Tn=["innerHTML"],Cn={class:"pager"},Mn=["innerHTML"],Nn=["innerHTML"],In=b({__name:"VPDocFooter",setup(n){const{theme:e,page:t,frontmatter:o}=L(),s=vn(),r=hn(),l=V(()=>e.value.editLink&&o.value.editLink!==!1),u=V(()=>t.value.lastUpdated),c=V(()=>l.value||u.value||r.value.prev||r.value.next);return(m,y)=>{var h,P,S,T;return c.value?(a(),d("footer",$n,[f(m.$slots,"doc-footer-before",{},void 0,!0),l.value||u.value?(a(),d("div",yn,[l.value?(a(),d("div",Pn,[k(j,{class:"edit-link-button",href:i(s).url,"no-icon":!0},{default:v(()=>[y[0]||(y[0]=p("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),X(" "+N(i(s).text),1)]),_:1},8,["href"])])):_("",!0),u.value?(a(),d("div",Sn,[k(kn)])):_("",!0)])):_("",!0),(h=i(r).prev)!=null&&h.link||(P=i(r).next)!=null&&P.link?(a(),d("nav",Vn,[y[1]||(y[1]=p("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),p("div",Ln,[(S=i(r).prev)!=null&&S.link?(a(),g(j,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:v(()=>{var E;return[p("span",{class:"desc",innerHTML:((E=i(e).docFooter)==null?void 0:E.prev)||"Previous page"},null,8,wn),p("span",{class:"title",innerHTML:i(r).prev.text},null,8,Tn)]}),_:1},8,["href"])):_("",!0)]),p("div",Cn,[(T=i(r).next)!=null&&T.link?(a(),g(j,{key:0,class:"pager-link next",href:i(r).next.link},{default:v(()=>{var E;return[p("span",{class:"desc",innerHTML:((E=i(e).docFooter)==null?void 0:E.next)||"Next page"},null,8,Mn),p("span",{class:"title",innerHTML:i(r).next.text},null,8,Nn)]}),_:1},8,["href"])):_("",!0)])])):_("",!0)])):_("",!0)}}}),An=$(In,[["__scopeId","data-v-4f9813fa"]]),En={class:"container"},Bn={class:"aside-container"},Hn={class:"aside-content"},On={class:"content"},Dn={class:"content-container"},Fn={class:"main"},Rn=b({__name:"VPDoc",setup(n){const{theme:e}=L(),t=pe(),{hasSidebar:o,hasAside:s,leftAside:r}=q(),l=V(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(u,c)=>{const m=Z("Content");return a(),d("div",{class:I(["VPDoc",{"has-sidebar":i(o),"has-aside":i(s)}])},[f(u.$slots,"doc-top",{},void 0,!0),p("div",En,[i(s)?(a(),d("div",{key:0,class:I(["aside",{"left-aside":i(r)}])},[c[0]||(c[0]=p("div",{class:"aside-curtain"},null,-1)),p("div",Bn,[p("div",Hn,[k(pn,null,{"aside-top":v(()=>[f(u.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[f(u.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[f(u.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[f(u.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[f(u.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[f(u.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):_("",!0),p("div",On,[p("div",Dn,[f(u.$slots,"doc-before",{},void 0,!0),p("main",Fn,[k(m,{class:I(["vp-doc",[l.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),k(An,null,{"doc-footer-before":v(()=>[f(u.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),f(u.$slots,"doc-after",{},void 0,!0)])])]),f(u.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Un=$(Rn,[["__scopeId","data-v-83890dd9"]]),jn=b({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(n){const e=n,t=V(()=>e.href&&Ye.test(e.href)),o=V(()=>e.tag||(e.href?"a":"button"));return(s,r)=>(a(),g(U(o.value),{class:I(["VPButton",[s.size,s.theme]]),href:s.href?i(Ce)(s.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:v(()=>[X(N(s.text),1)]),_:1},8,["class","href","target","rel"]))}}),zn=$(jn,[["__scopeId","data-v-906d7fb4"]]),Gn=["src","alt"],Kn=b({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(n){return(e,t)=>{const o=Z("VPImage",!0);return e.image?(a(),d(A,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),d("img",W({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(Se)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Gn)):(a(),d(A,{key:1},[k(o,W({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),k(o,W({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):_("",!0)}}}),ce=$(Kn,[["__scopeId","data-v-35a7d0b8"]]),qn={class:"container"},Wn={class:"main"},Jn={class:"heading"},Xn=["innerHTML"],Yn=["innerHTML"],Zn=["innerHTML"],Qn={key:0,class:"actions"},xn={key:0,class:"image"},eo={class:"image-container"},to=b({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(n){const e=ee("hero-image-slot-exists");return(t,o)=>(a(),d("div",{class:I(["VPHero",{"has-image":t.image||i(e)}])},[p("div",qn,[p("div",Wn,[f(t.$slots,"home-hero-info-before",{},void 0,!0),f(t.$slots,"home-hero-info",{},()=>[p("h1",Jn,[t.name?(a(),d("span",{key:0,innerHTML:t.name,class:"name clip"},null,8,Xn)):_("",!0),t.text?(a(),d("span",{key:1,innerHTML:t.text,class:"text"},null,8,Yn)):_("",!0)]),t.tagline?(a(),d("p",{key:0,innerHTML:t.tagline,class:"tagline"},null,8,Zn)):_("",!0)],!0),f(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),d("div",Qn,[(a(!0),d(A,null,O(t.actions,s=>(a(),d("div",{key:s.link,class:"action"},[k(zn,{tag:"a",size:"medium",theme:s.theme,text:s.text,href:s.link,target:s.target,rel:s.rel},null,8,["theme","text","href","target","rel"])]))),128))])):_("",!0),f(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||i(e)?(a(),d("div",xn,[p("div",eo,[o[0]||(o[0]=p("div",{class:"image-bg"},null,-1)),f(t.$slots,"home-hero-image",{},()=>[t.image?(a(),g(ce,{key:0,class:"image-src",image:t.image},null,8,["image"])):_("",!0)],!0)])])):_("",!0)])],2))}}),no=$(to,[["__scopeId","data-v-3d256e5e"]]),oo=b({__name:"VPHomeHero",setup(n){const{frontmatter:e}=L();return(t,o)=>i(e).hero?(a(),g(no,{key:0,class:"VPHomeHero",name:i(e).hero.name,text:i(e).hero.text,tagline:i(e).hero.tagline,image:i(e).hero.image,actions:i(e).hero.actions},{"home-hero-info-before":v(()=>[f(t.$slots,"home-hero-info-before")]),"home-hero-info":v(()=>[f(t.$slots,"home-hero-info")]),"home-hero-info-after":v(()=>[f(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":v(()=>[f(t.$slots,"home-hero-actions-after")]),"home-hero-image":v(()=>[f(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):_("",!0)}}),so={class:"box"},ao={key:0,class:"icon"},ro=["innerHTML"],io=["innerHTML"],lo=["innerHTML"],co={key:4,class:"link-text"},uo={class:"link-text-value"},fo=b({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(n){return(e,t)=>(a(),g(j,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:v(()=>[p("article",so,[typeof e.icon=="object"&&e.icon.wrap?(a(),d("div",ao,[k(ce,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),g(ce,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),d("div",{key:2,class:"icon",innerHTML:e.icon},null,8,ro)):_("",!0),p("h2",{class:"title",innerHTML:e.title},null,8,io),e.details?(a(),d("p",{key:3,class:"details",innerHTML:e.details},null,8,lo)):_("",!0),e.linkText?(a(),d("div",co,[p("p",uo,[X(N(e.linkText)+" ",1),t[0]||(t[0]=p("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):_("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),po=$(fo,[["__scopeId","data-v-f5e9645b"]]),vo={key:0,class:"VPFeatures"},ho={class:"container"},mo={class:"items"},_o=b({__name:"VPFeatures",props:{features:{}},setup(n){const e=n,t=V(()=>{const o=e.features.length;if(o){if(o===2)return"grid-2";if(o===3)return"grid-3";if(o%3===0)return"grid-6";if(o>3)return"grid-4"}else return});return(o,s)=>o.features?(a(),d("div",vo,[p("div",ho,[p("div",mo,[(a(!0),d(A,null,O(o.features,r=>(a(),d("div",{key:r.title,class:I(["item",[t.value]])},[k(po,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):_("",!0)}}),bo=$(_o,[["__scopeId","data-v-d0a190d7"]]),go=b({__name:"VPHomeFeatures",setup(n){const{frontmatter:e}=L();return(t,o)=>i(e).features?(a(),g(bo,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):_("",!0)}}),ko=b({__name:"VPHomeContent",setup(n){const{width:e}=$t({initialWidth:0,includeScrollbar:!1});return(t,o)=>(a(),d("div",{class:"vp-doc container",style:Ze(i(e)?{"--vp-offset":`calc(50% - ${i(e)/2}px)`}:{})},[f(t.$slots,"default",{},void 0,!0)],4))}}),$o=$(ko,[["__scopeId","data-v-7a48a447"]]),yo=b({__name:"VPHome",setup(n){const{frontmatter:e,theme:t}=L();return(o,s)=>{const r=Z("Content");return a(),d("div",{class:I(["VPHome",{"external-link-icon-enabled":i(t).externalLinkIcon}])},[f(o.$slots,"home-hero-before",{},void 0,!0),k(oo,null,{"home-hero-info-before":v(()=>[f(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[f(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[f(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[f(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[f(o.$slots,"home-hero-image",{},void 0,!0)]),_:3}),f(o.$slots,"home-hero-after",{},void 0,!0),f(o.$slots,"home-features-before",{},void 0,!0),k(go),f(o.$slots,"home-features-after",{},void 0,!0),i(e).markdownStyles!==!1?(a(),g($o,{key:0},{default:v(()=>[k(r)]),_:1})):(a(),g(r,{key:1}))],2)}}}),Po=$(yo,[["__scopeId","data-v-e40e30de"]]),So={},Vo={class:"VPPage"};function Lo(n,e){const t=Z("Content");return a(),d("div",Vo,[f(n.$slots,"page-top"),k(t),f(n.$slots,"page-bottom")])}const wo=$(So,[["render",Lo]]),To=b({__name:"VPContent",setup(n){const{page:e,frontmatter:t}=L(),{hasSidebar:o}=q();return(s,r)=>(a(),d("div",{class:I(["VPContent",{"has-sidebar":i(o),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?f(s.$slots,"not-found",{key:0},()=>[k(Gt)],!0):i(t).layout==="page"?(a(),g(wo,{key:1},{"page-top":v(()=>[f(s.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[f(s.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(a(),g(Po,{key:2},{"home-hero-before":v(()=>[f(s.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[f(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[f(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[f(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[f(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[f(s.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[f(s.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[f(s.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[f(s.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(a(),g(U(i(t).layout),{key:3})):(a(),g(Un,{key:4},{"doc-top":v(()=>[f(s.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[f(s.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":v(()=>[f(s.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[f(s.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[f(s.$slots,"doc-after",{},void 0,!0)]),"aside-top":v(()=>[f(s.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":v(()=>[f(s.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[f(s.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[f(s.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[f(s.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":v(()=>[f(s.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),Co=$(To,[["__scopeId","data-v-91765379"]]),Mo={class:"container"},No=["innerHTML"],Io=["innerHTML"],Ao=b({__name:"VPFooter",setup(n){const{theme:e,frontmatter:t}=L(),{hasSidebar:o}=q();return(s,r)=>i(e).footer&&i(t).footer!==!1?(a(),d("footer",{key:0,class:I(["VPFooter",{"has-sidebar":i(o)}])},[p("div",Mo,[i(e).footer.message?(a(),d("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,No)):_("",!0),i(e).footer.copyright?(a(),d("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,Io)):_("",!0)])],2)):_("",!0)}}),Eo=$(Ao,[["__scopeId","data-v-c970a860"]]);function Bo(){const{theme:n,frontmatter:e}=L(),t=Xe([]),o=V(()=>t.value.length>0);return fe(()=>{t.value=Me(e.value.outline??n.value.outline)}),{headers:t,hasLocalNav:o}}const Ho={class:"menu-text"},Oo={class:"header"},Do={class:"outline"},Fo=b({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(n){const e=n,{theme:t}=L(),o=C(!1),s=C(0),r=C(),l=C();function u(h){var P;(P=r.value)!=null&&P.contains(h.target)||(o.value=!1)}z(o,h=>{if(h){document.addEventListener("click",u);return}document.removeEventListener("click",u)}),be("Escape",()=>{o.value=!1}),fe(()=>{o.value=!1});function c(){o.value=!o.value,s.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function m(h){h.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),we(()=>{o.value=!1}))}function y(){o.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(h,P)=>(a(),d("div",{class:"VPLocalNavOutlineDropdown",style:Ze({"--vp-vh":s.value+"px"}),ref_key:"main",ref:r},[h.headers.length>0?(a(),d("button",{key:0,onClick:c,class:I({open:o.value})},[p("span",Ho,N(i(nt)(i(t))),1),P[0]||(P[0]=p("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(a(),d("button",{key:1,onClick:y},N(i(t).returnToTopLabel||"Return to top"),1)),k(Pe,{name:"flyout"},{default:v(()=>[o.value?(a(),d("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:m},[p("div",Oo,[p("a",{class:"top-link",href:"#",onClick:y},N(i(t).returnToTopLabel||"Return to top"),1)]),p("div",Do,[k(ot,{headers:h.headers},null,8,["headers"])])],512)):_("",!0)]),_:1})],4))}}),Ro=$(Fo,[["__scopeId","data-v-168ddf5d"]]),Uo={class:"container"},jo=["aria-expanded"],zo={class:"menu-text"},Go=b({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(n){const{theme:e,frontmatter:t}=L(),{hasSidebar:o}=q(),{headers:s}=Bo(),{y:r}=Qe(),l=C(0);G(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),fe(()=>{s.value=Me(t.value.outline??e.value.outline)});const u=V(()=>s.value.length===0),c=V(()=>u.value&&!o.value),m=V(()=>({VPLocalNav:!0,"has-sidebar":o.value,empty:u.value,fixed:c.value}));return(y,h)=>i(t).layout!=="home"&&(!c.value||i(r)>=l.value)?(a(),d("div",{key:0,class:I(m.value)},[p("div",Uo,[i(o)?(a(),d("button",{key:0,class:"menu","aria-expanded":y.open,"aria-controls":"VPSidebarNav",onClick:h[0]||(h[0]=P=>y.$emit("open-menu"))},[h[1]||(h[1]=p("span",{class:"vpi-align-left menu-icon"},null,-1)),p("span",zo,N(i(e).sidebarMenuLabel||"Menu"),1)],8,jo)):_("",!0),k(Ro,{headers:i(s),navHeight:l.value},null,8,["headers","navHeight"])])],2)):_("",!0)}}),Ko=$(Go,[["__scopeId","data-v-070ab83d"]]);function qo(){const n=C(!1);function e(){n.value=!0,window.addEventListener("resize",s)}function t(){n.value=!1,window.removeEventListener("resize",s)}function o(){n.value?t():e()}function s(){window.outerWidth>=768&&t()}const r=pe();return z(()=>r.path,t),{isScreenOpen:n,openScreen:e,closeScreen:t,toggleScreen:o}}const Wo={},Jo={class:"VPSwitch",type:"button",role:"switch"},Xo={class:"check"},Yo={key:0,class:"icon"};function Zo(n,e){return a(),d("button",Jo,[p("span",Xo,[n.$slots.default?(a(),d("span",Yo,[f(n.$slots,"default",{},void 0,!0)])):_("",!0)])])}const Qo=$(Wo,[["render",Zo],["__scopeId","data-v-4a1c76db"]]),xo=b({__name:"VPSwitchAppearance",setup(n){const{isDark:e,theme:t}=L(),o=ee("toggle-appearance",()=>{e.value=!e.value}),s=C("");return Le(()=>{s.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(r,l)=>(a(),g(Qo,{title:s.value,class:"VPSwitchAppearance","aria-checked":i(e),onClick:i(o)},{default:v(()=>l[0]||(l[0]=[p("span",{class:"vpi-sun sun"},null,-1),p("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),Ne=$(xo,[["__scopeId","data-v-e40a8bb6"]]),es={key:0,class:"VPNavBarAppearance"},ts=b({__name:"VPNavBarAppearance",setup(n){const{site:e}=L();return(t,o)=>i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(a(),d("div",es,[k(Ne)])):_("",!0)}}),ns=$(ts,[["__scopeId","data-v-af096f4a"]]),Ie=C();let st=!1,me=0;function os(n){const e=C(!1);if(ve){!st&&ss(),me++;const t=z(Ie,o=>{var s,r,l;o===n.el.value||(s=n.el.value)!=null&&s.contains(o)?(e.value=!0,(r=n.onFocus)==null||r.call(n)):(e.value=!1,(l=n.onBlur)==null||l.call(n))});Ve(()=>{t(),me--,me||as()})}return yt(e)}function ss(){document.addEventListener("focusin",at),st=!0,Ie.value=document.activeElement}function as(){document.removeEventListener("focusin",at)}function at(){Ie.value=document.activeElement}const rs={class:"VPMenuLink"},is=["innerHTML"],ls=b({__name:"VPMenuLink",props:{item:{}},setup(n){const{page:e}=L();return(t,o)=>(a(),d("div",rs,[k(j,{class:I({active:i(Y)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon},{default:v(()=>[p("span",{innerHTML:t.item.text},null,8,is)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),he=$(ls,[["__scopeId","data-v-acbfed09"]]),cs={class:"VPMenuGroup"},us={key:0,class:"title"},ds=b({__name:"VPMenuGroup",props:{text:{},items:{}},setup(n){return(e,t)=>(a(),d("div",cs,[e.text?(a(),d("p",us,N(e.text),1)):_("",!0),(a(!0),d(A,null,O(e.items,o=>(a(),d(A,null,["link"in o?(a(),g(he,{key:0,item:o},null,8,["item"])):_("",!0)],64))),256))]))}}),fs=$(ds,[["__scopeId","data-v-48c802d0"]]),ps={class:"VPMenu"},vs={key:0,class:"items"},hs=b({__name:"VPMenu",props:{items:{}},setup(n){return(e,t)=>(a(),d("div",ps,[e.items?(a(),d("div",vs,[(a(!0),d(A,null,O(e.items,o=>(a(),d(A,{key:JSON.stringify(o)},["link"in o?(a(),g(he,{key:0,item:o},null,8,["item"])):"component"in o?(a(),g(U(o.component),W({key:1,ref_for:!0},o.props),null,16)):(a(),g(fs,{key:2,text:o.text,items:o.items},null,8,["text","items"]))],64))),128))])):_("",!0),f(e.$slots,"default",{},void 0,!0)]))}}),ms=$(hs,[["__scopeId","data-v-7dd3104a"]]),_s=["aria-expanded","aria-label"],bs={key:0,class:"text"},gs=["innerHTML"],ks={key:1,class:"vpi-more-horizontal icon"},$s={class:"menu"},ys=b({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(n){const e=C(!1),t=C();os({el:t,onBlur:o});function o(){e.value=!1}return(s,r)=>(a(),d("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=l=>e.value=!0),onMouseleave:r[2]||(r[2]=l=>e.value=!1)},[p("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":s.label,onClick:r[0]||(r[0]=l=>e.value=!e.value)},[s.button||s.icon?(a(),d("span",bs,[s.icon?(a(),d("span",{key:0,class:I([s.icon,"option-icon"])},null,2)):_("",!0),s.button?(a(),d("span",{key:1,innerHTML:s.button},null,8,gs)):_("",!0),r[3]||(r[3]=p("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(a(),d("span",ks))],8,_s),p("div",$s,[k(ms,{items:s.items},{default:v(()=>[f(s.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),Ae=$(ys,[["__scopeId","data-v-04f5c5e9"]]),Ps=["href","aria-label","innerHTML"],Ss=b({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(n){const e=n,t=C();G(async()=>{var r;await we();const s=(r=t.value)==null?void 0:r.children[0];s instanceof HTMLElement&&s.className.startsWith("vpi-social-")&&(getComputedStyle(s).maskImage||getComputedStyle(s).webkitMaskImage)==="none"&&s.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${e.icon}.svg')`)});const o=V(()=>typeof e.icon=="object"?e.icon.svg:``);return(s,r)=>(a(),d("a",{ref_key:"el",ref:t,class:"VPSocialLink no-icon",href:s.link,"aria-label":s.ariaLabel??(typeof s.icon=="string"?s.icon:""),target:"_blank",rel:"noopener",innerHTML:o.value},null,8,Ps))}}),Vs=$(Ss,[["__scopeId","data-v-d26d30cb"]]),Ls={class:"VPSocialLinks"},ws=b({__name:"VPSocialLinks",props:{links:{}},setup(n){return(e,t)=>(a(),d("div",Ls,[(a(!0),d(A,null,O(e.links,({link:o,icon:s,ariaLabel:r})=>(a(),g(Vs,{key:o,icon:s,link:o,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),Ee=$(ws,[["__scopeId","data-v-ee7a9424"]]),Ts={key:0,class:"group translations"},Cs={class:"trans-title"},Ms={key:1,class:"group"},Ns={class:"item appearance"},Is={class:"label"},As={class:"appearance-action"},Es={key:2,class:"group"},Bs={class:"item social-links"},Hs=b({__name:"VPNavBarExtra",setup(n){const{site:e,theme:t}=L(),{localeLinks:o,currentLang:s}=ne({correspondingLink:!0}),r=V(()=>o.value.length&&s.value.label||e.value.appearance||t.value.socialLinks);return(l,u)=>r.value?(a(),g(Ae,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:v(()=>[i(o).length&&i(s).label?(a(),d("div",Ts,[p("p",Cs,N(i(s).label),1),(a(!0),d(A,null,O(i(o),c=>(a(),g(he,{key:c.link,item:c},null,8,["item"]))),128))])):_("",!0),i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(a(),d("div",Ms,[p("div",Ns,[p("p",Is,N(i(t).darkModeSwitchLabel||"Appearance"),1),p("div",As,[k(Ne)])])])):_("",!0),i(t).socialLinks?(a(),d("div",Es,[p("div",Bs,[k(Ee,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):_("",!0)]),_:1})):_("",!0)}}),Os=$(Hs,[["__scopeId","data-v-925effce"]]),Ds=["aria-expanded"],Fs=b({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(n){return(e,t)=>(a(),d("button",{type:"button",class:I(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=o=>e.$emit("click"))},t[1]||(t[1]=[p("span",{class:"container"},[p("span",{class:"top"}),p("span",{class:"middle"}),p("span",{class:"bottom"})],-1)]),10,Ds))}}),Rs=$(Fs,[["__scopeId","data-v-5dea55bf"]]),Us=["innerHTML"],js=b({__name:"VPNavBarMenuLink",props:{item:{}},setup(n){const{page:e}=L();return(t,o)=>(a(),g(j,{class:I({VPNavBarMenuLink:!0,active:i(Y)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,tabindex:"0"},{default:v(()=>[p("span",{innerHTML:t.item.text},null,8,Us)]),_:1},8,["class","href","target","rel","no-icon"]))}}),zs=$(js,[["__scopeId","data-v-956ec74c"]]),rt=b({__name:"VPNavBarMenuGroup",props:{item:{}},setup(n){const e=n,{page:t}=L(),o=r=>"component"in r?!1:"link"in r?Y(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(o),s=V(()=>o(e.item));return(r,l)=>(a(),g(Ae,{class:I({VPNavBarMenuGroup:!0,active:i(Y)(i(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||s.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),Gs={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Ks=b({__name:"VPNavBarMenu",setup(n){const{theme:e}=L();return(t,o)=>i(e).nav?(a(),d("nav",Gs,[o[0]||(o[0]=p("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(a(!0),d(A,null,O(i(e).nav,s=>(a(),d(A,{key:JSON.stringify(s)},["link"in s?(a(),g(zs,{key:0,item:s},null,8,["item"])):"component"in s?(a(),g(U(s.component),W({key:1,ref_for:!0},s.props),null,16)):(a(),g(rt,{key:2,item:s},null,8,["item"]))],64))),128))])):_("",!0)}}),qs=$(Ks,[["__scopeId","data-v-e6d46098"]]);function Ws(n){const{localeIndex:e,theme:t}=L();function o(s){var T,E,w;const r=s.split("."),l=(T=t.value.search)==null?void 0:T.options,u=l&&typeof l=="object",c=u&&((w=(E=l.locales)==null?void 0:E[e.value])==null?void 0:w.translations)||null,m=u&&l.translations||null;let y=c,h=m,P=n;const S=r.pop();for(const B of r){let F=null;const D=P==null?void 0:P[B];D&&(F=P=D);const Q=h==null?void 0:h[B];Q&&(F=h=Q);const H=y==null?void 0:y[B];H&&(F=y=H),D||(P=F),Q||(h=F),H||(y=F)}return(y==null?void 0:y[S])??(h==null?void 0:h[S])??(P==null?void 0:P[S])??""}return o}const Js=["aria-label"],Xs={class:"DocSearch-Button-Container"},Ys={class:"DocSearch-Button-Placeholder"},Re=b({__name:"VPNavBarSearchButton",setup(n){const t=Ws({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(o,s)=>(a(),d("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(t)("button.buttonAriaLabel")},[p("span",Xs,[s[0]||(s[0]=p("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),p("span",Ys,N(i(t)("button.buttonText")),1)]),s[1]||(s[1]=p("span",{class:"DocSearch-Button-Keys"},[p("kbd",{class:"DocSearch-Button-Key"}),p("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,Js))}}),Zs={class:"VPNavBarSearch"},Qs={id:"local-search"},xs={key:1,id:"docsearch"},ea=b({__name:"VPNavBarSearch",setup(n){const e=Pt(()=>St(()=>import("./VPLocalSearchBox.B8E42HDE.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:o}=L(),s=C(!1),r=C(!1);G(()=>{});function l(){s.value||(s.value=!0,setTimeout(u,16))}function u(){const h=new Event("keydown");h.key="k",h.metaKey=!0,window.dispatchEvent(h),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||u()},16)}function c(h){const P=h.target,S=P.tagName;return P.isContentEditable||S==="INPUT"||S==="SELECT"||S==="TEXTAREA"}const m=C(!1);be("k",h=>{(h.ctrlKey||h.metaKey)&&(h.preventDefault(),m.value=!0)}),be("/",h=>{c(h)||(h.preventDefault(),m.value=!0)});const y="local";return(h,P)=>{var S;return a(),d("div",Zs,[i(y)==="local"?(a(),d(A,{key:0},[m.value?(a(),g(i(e),{key:0,onClose:P[0]||(P[0]=T=>m.value=!1)})):_("",!0),p("div",Qs,[k(Re,{onClick:P[1]||(P[1]=T=>m.value=!0)})])],64)):i(y)==="algolia"?(a(),d(A,{key:1},[s.value?(a(),g(i(t),{key:0,algolia:((S=i(o).search)==null?void 0:S.options)??i(o).algolia,onVnodeBeforeMount:P[2]||(P[2]=T=>r.value=!0)},null,8,["algolia"])):_("",!0),r.value?_("",!0):(a(),d("div",xs,[k(Re,{onClick:l})]))],64)):_("",!0)])}}}),ta=b({__name:"VPNavBarSocialLinks",setup(n){const{theme:e}=L();return(t,o)=>i(e).socialLinks?(a(),g(Ee,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):_("",!0)}}),na=$(ta,[["__scopeId","data-v-164c457f"]]),oa=["href","rel","target"],sa=["innerHTML"],aa={key:2},ra=b({__name:"VPNavBarTitle",setup(n){const{site:e,theme:t}=L(),{hasSidebar:o}=q(),{currentLang:s}=ne(),r=V(()=>{var c;return typeof t.value.logoLink=="string"?t.value.logoLink:(c=t.value.logoLink)==null?void 0:c.link}),l=V(()=>{var c;return typeof t.value.logoLink=="string"||(c=t.value.logoLink)==null?void 0:c.rel}),u=V(()=>{var c;return typeof t.value.logoLink=="string"||(c=t.value.logoLink)==null?void 0:c.target});return(c,m)=>(a(),d("div",{class:I(["VPNavBarTitle",{"has-sidebar":i(o)}])},[p("a",{class:"title",href:r.value??i(Ce)(i(s).link),rel:l.value,target:u.value},[f(c.$slots,"nav-bar-title-before",{},void 0,!0),i(t).logo?(a(),g(ce,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):_("",!0),i(t).siteTitle?(a(),d("span",{key:1,innerHTML:i(t).siteTitle},null,8,sa)):i(t).siteTitle===void 0?(a(),d("span",aa,N(i(e).title),1)):_("",!0),f(c.$slots,"nav-bar-title-after",{},void 0,!0)],8,oa)],2))}}),ia=$(ra,[["__scopeId","data-v-0f4f798b"]]),la={class:"items"},ca={class:"title"},ua=b({__name:"VPNavBarTranslations",setup(n){const{theme:e}=L(),{localeLinks:t,currentLang:o}=ne({correspondingLink:!0});return(s,r)=>i(t).length&&i(o).label?(a(),g(Ae,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(e).langMenuLabel||"Change language"},{default:v(()=>[p("div",la,[p("p",ca,N(i(o).label),1),(a(!0),d(A,null,O(i(t),l=>(a(),g(he,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):_("",!0)}}),da=$(ua,[["__scopeId","data-v-c80d9ad0"]]),fa={class:"wrapper"},pa={class:"container"},va={class:"title"},ha={class:"content"},ma={class:"content-body"},_a=b({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(n){const e=n,{y:t}=Qe(),{hasSidebar:o}=q(),{frontmatter:s}=L(),r=C({});return Le(()=>{r.value={"has-sidebar":o.value,home:s.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,u)=>(a(),d("div",{class:I(["VPNavBar",r.value])},[p("div",fa,[p("div",pa,[p("div",va,[k(ia,null,{"nav-bar-title-before":v(()=>[f(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[f(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),p("div",ha,[p("div",ma,[f(l.$slots,"nav-bar-content-before",{},void 0,!0),k(ea,{class:"search"}),k(qs,{class:"menu"}),k(da,{class:"translations"}),k(ns,{class:"appearance"}),k(na,{class:"social-links"}),k(Os,{class:"extra"}),f(l.$slots,"nav-bar-content-after",{},void 0,!0),k(Rs,{class:"hamburger",active:l.isScreenOpen,onClick:u[0]||(u[0]=c=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),u[1]||(u[1]=p("div",{class:"divider"},[p("div",{class:"divider-line"})],-1))],2))}}),ba=$(_a,[["__scopeId","data-v-822684d1"]]),ga={key:0,class:"VPNavScreenAppearance"},ka={class:"text"},$a=b({__name:"VPNavScreenAppearance",setup(n){const{site:e,theme:t}=L();return(o,s)=>i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(a(),d("div",ga,[p("p",ka,N(i(t).darkModeSwitchLabel||"Appearance"),1),k(Ne)])):_("",!0)}}),ya=$($a,[["__scopeId","data-v-ffb44008"]]),Pa=["innerHTML"],Sa=b({__name:"VPNavScreenMenuLink",props:{item:{}},setup(n){const e=ee("close-screen");return(t,o)=>(a(),g(j,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:i(e)},{default:v(()=>[p("span",{innerHTML:t.item.text},null,8,Pa)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Va=$(Sa,[["__scopeId","data-v-735512b8"]]),La=["innerHTML"],wa=b({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(n){const e=ee("close-screen");return(t,o)=>(a(),g(j,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:i(e)},{default:v(()=>[p("span",{innerHTML:t.item.text},null,8,La)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),it=$(wa,[["__scopeId","data-v-372ae7c0"]]),Ta={class:"VPNavScreenMenuGroupSection"},Ca={key:0,class:"title"},Ma=b({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(n){return(e,t)=>(a(),d("div",Ta,[e.text?(a(),d("p",Ca,N(e.text),1)):_("",!0),(a(!0),d(A,null,O(e.items,o=>(a(),g(it,{key:o.text,item:o},null,8,["item"]))),128))]))}}),Na=$(Ma,[["__scopeId","data-v-4b8941ac"]]),Ia=["aria-controls","aria-expanded"],Aa=["innerHTML"],Ea=["id"],Ba={key:0,class:"item"},Ha={key:1,class:"item"},Oa={key:2,class:"group"},Da=b({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(n){const e=n,t=C(!1),o=V(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function s(){t.value=!t.value}return(r,l)=>(a(),d("div",{class:I(["VPNavScreenMenuGroup",{open:t.value}])},[p("button",{class:"button","aria-controls":o.value,"aria-expanded":t.value,onClick:s},[p("span",{class:"button-text",innerHTML:r.text},null,8,Aa),l[0]||(l[0]=p("span",{class:"vpi-plus button-icon"},null,-1))],8,Ia),p("div",{id:o.value,class:"items"},[(a(!0),d(A,null,O(r.items,u=>(a(),d(A,{key:JSON.stringify(u)},["link"in u?(a(),d("div",Ba,[k(it,{item:u},null,8,["item"])])):"component"in u?(a(),d("div",Ha,[(a(),g(U(u.component),W({ref_for:!0},u.props,{"screen-menu":""}),null,16))])):(a(),d("div",Oa,[k(Na,{text:u.text,items:u.items},null,8,["text","items"])]))],64))),128))],8,Ea)],2))}}),lt=$(Da,[["__scopeId","data-v-875057a5"]]),Fa={key:0,class:"VPNavScreenMenu"},Ra=b({__name:"VPNavScreenMenu",setup(n){const{theme:e}=L();return(t,o)=>i(e).nav?(a(),d("nav",Fa,[(a(!0),d(A,null,O(i(e).nav,s=>(a(),d(A,{key:JSON.stringify(s)},["link"in s?(a(),g(Va,{key:0,item:s},null,8,["item"])):"component"in s?(a(),g(U(s.component),W({key:1,ref_for:!0},s.props,{"screen-menu":""}),null,16)):(a(),g(lt,{key:2,text:s.text||"",items:s.items},null,8,["text","items"]))],64))),128))])):_("",!0)}}),Ua=b({__name:"VPNavScreenSocialLinks",setup(n){const{theme:e}=L();return(t,o)=>i(e).socialLinks?(a(),g(Ee,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):_("",!0)}}),ja={class:"list"},za=b({__name:"VPNavScreenTranslations",setup(n){const{localeLinks:e,currentLang:t}=ne({correspondingLink:!0}),o=C(!1);function s(){o.value=!o.value}return(r,l)=>i(e).length&&i(t).label?(a(),d("div",{key:0,class:I(["VPNavScreenTranslations",{open:o.value}])},[p("button",{class:"title",onClick:s},[l[0]||(l[0]=p("span",{class:"vpi-languages icon lang"},null,-1)),X(" "+N(i(t).label)+" ",1),l[1]||(l[1]=p("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),p("ul",ja,[(a(!0),d(A,null,O(i(e),u=>(a(),d("li",{key:u.link,class:"item"},[k(j,{class:"link",href:u.link},{default:v(()=>[X(N(u.text),1)]),_:2},1032,["href"])]))),128))])],2)):_("",!0)}}),Ga=$(za,[["__scopeId","data-v-362991c2"]]),Ka={class:"container"},qa=b({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(n){const e=C(null),t=xe(ve?document.body:null);return(o,s)=>(a(),g(Pe,{name:"fade",onEnter:s[0]||(s[0]=r=>t.value=!0),onAfterLeave:s[1]||(s[1]=r=>t.value=!1)},{default:v(()=>[o.open?(a(),d("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[p("div",Ka,[f(o.$slots,"nav-screen-content-before",{},void 0,!0),k(Ra,{class:"menu"}),k(Ga,{class:"translations"}),k(ya,{class:"appearance"}),k(Ua,{class:"social-links"}),f(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):_("",!0)]),_:3}))}}),Wa=$(qa,[["__scopeId","data-v-833aabba"]]),Ja={key:0,class:"VPNav"},Xa=b({__name:"VPNav",setup(n){const{isScreenOpen:e,closeScreen:t,toggleScreen:o}=qo(),{frontmatter:s}=L(),r=V(()=>s.value.navbar!==!1);return Te("close-screen",t),de(()=>{ve&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(l,u)=>r.value?(a(),d("header",Ja,[k(ba,{"is-screen-open":i(e),onToggleScreen:i(o)},{"nav-bar-title-before":v(()=>[f(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[f(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[f(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[f(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),k(Wa,{open:i(e)},{"nav-screen-content-before":v(()=>[f(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[f(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):_("",!0)}}),Ya=$(Xa,[["__scopeId","data-v-f1e365da"]]),Za=["role","tabindex"],Qa={key:1,class:"items"},xa=b({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(n){const e=n,{collapsed:t,collapsible:o,isLink:s,isActiveLink:r,hasActiveLink:l,hasChildren:u,toggle:c}=Jt(V(()=>e.item)),m=V(()=>u.value?"section":"div"),y=V(()=>s.value?"a":"div"),h=V(()=>u.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=V(()=>s.value?void 0:"button"),S=V(()=>[[`level-${e.depth}`],{collapsible:o.value},{collapsed:t.value},{"is-link":s.value},{"is-active":r.value},{"has-active":l.value}]);function T(w){"key"in w&&w.key!=="Enter"||!e.item.link&&c()}function E(){e.item.link&&c()}return(w,B)=>{const F=Z("VPSidebarItem",!0);return a(),g(U(m.value),{class:I(["VPSidebarItem",S.value])},{default:v(()=>[w.item.text?(a(),d("div",W({key:0,class:"item",role:P.value},Vt(w.item.items?{click:T,keydown:T}:{},!0),{tabindex:w.item.items&&0}),[B[1]||(B[1]=p("div",{class:"indicator"},null,-1)),w.item.link?(a(),g(j,{key:0,tag:y.value,class:"link",href:w.item.link,rel:w.item.rel,target:w.item.target},{default:v(()=>[(a(),g(U(h.value),{class:"text",innerHTML:w.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),g(U(h.value),{key:1,class:"text",innerHTML:w.item.text},null,8,["innerHTML"])),w.item.collapsed!=null&&w.item.items&&w.item.items.length?(a(),d("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:E,onKeydown:Lt(E,["enter"]),tabindex:"0"},B[0]||(B[0]=[p("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):_("",!0)],16,Za)):_("",!0),w.item.items&&w.item.items.length?(a(),d("div",Qa,[w.depth<5?(a(!0),d(A,{key:0},O(w.item.items,D=>(a(),g(F,{key:D.text,item:D,depth:w.depth+1},null,8,["item","depth"]))),128)):_("",!0)])):_("",!0)]),_:1},8,["class"])}}}),er=$(xa,[["__scopeId","data-v-a4b0d9bf"]]),tr=b({__name:"VPSidebarGroup",props:{items:{}},setup(n){const e=C(!0);let t=null;return G(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),wt(()=>{t!=null&&(clearTimeout(t),t=null)}),(o,s)=>(a(!0),d(A,null,O(o.items,r=>(a(),d("div",{key:r.text,class:I(["group",{"no-transition":e.value}])},[k(er,{item:r,depth:0},null,8,["item"])],2))),128))}}),nr=$(tr,[["__scopeId","data-v-9e426adc"]]),or={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},sr=b({__name:"VPSidebar",props:{open:{type:Boolean}},setup(n){const{sidebarGroups:e,hasSidebar:t}=q(),o=n,s=C(null),r=xe(ve?document.body:null);z([o,s],()=>{var u;o.open?(r.value=!0,(u=s.value)==null||u.focus()):r.value=!1},{immediate:!0,flush:"post"});const l=C(0);return z(e,()=>{l.value+=1},{deep:!0}),(u,c)=>i(t)?(a(),d("aside",{key:0,class:I(["VPSidebar",{open:u.open}]),ref_key:"navEl",ref:s,onClick:c[0]||(c[0]=Tt(()=>{},["stop"]))},[c[2]||(c[2]=p("div",{class:"curtain"},null,-1)),p("nav",or,[c[1]||(c[1]=p("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),f(u.$slots,"sidebar-nav-before",{},void 0,!0),(a(),g(nr,{items:i(e),key:l.value},null,8,["items"])),f(u.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):_("",!0)}}),ar=$(sr,[["__scopeId","data-v-18756405"]]),rr=b({__name:"VPSkipLink",setup(n){const{theme:e}=L(),t=pe(),o=C();z(()=>t.path,()=>o.value.focus());function s({target:r}){const l=document.getElementById(decodeURIComponent(r.hash).slice(1));if(l){const u=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",u)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",u),l.focus(),window.scrollTo(0,0)}}return(r,l)=>(a(),d(A,null,[p("span",{ref_key:"backToTop",ref:o,tabindex:"-1"},null,512),p("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s},N(i(e).skipToContentLabel||"Skip to content"),1)],64))}}),ir=$(rr,[["__scopeId","data-v-492508fc"]]),lr=b({__name:"Layout",setup(n){const{isOpen:e,open:t,close:o}=q(),s=pe();z(()=>s.path,o),Wt(e,o);const{frontmatter:r}=L(),l=et(),u=V(()=>!!l["home-hero-image"]);return Te("hero-image-slot-exists",u),(c,m)=>{const y=Z("Content");return i(r).layout!==!1?(a(),d("div",{key:0,class:I(["Layout",i(r).pageClass])},[f(c.$slots,"layout-top",{},void 0,!0),k(ir),k(Et,{class:"backdrop",show:i(e),onClick:i(o)},null,8,["show","onClick"]),k(Ya,null,{"nav-bar-title-before":v(()=>[f(c.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[f(c.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[f(c.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[f(c.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":v(()=>[f(c.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[f(c.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),k(Ko,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),k(ar,{open:i(e)},{"sidebar-nav-before":v(()=>[f(c.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":v(()=>[f(c.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),k(Co,null,{"page-top":v(()=>[f(c.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[f(c.$slots,"page-bottom",{},void 0,!0)]),"not-found":v(()=>[f(c.$slots,"not-found",{},void 0,!0)]),"home-hero-before":v(()=>[f(c.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[f(c.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[f(c.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[f(c.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[f(c.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[f(c.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[f(c.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[f(c.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[f(c.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":v(()=>[f(c.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[f(c.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[f(c.$slots,"doc-after",{},void 0,!0)]),"doc-top":v(()=>[f(c.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[f(c.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":v(()=>[f(c.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[f(c.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[f(c.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[f(c.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[f(c.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[f(c.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),k(Eo),f(c.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),g(y,{key:1}))}}}),cr=$(lr,[["__scopeId","data-v-a9a9e638"]]),Ue={Layout:cr,enhanceApp:({app:n})=>{n.component("Badge",Nt)}},ur=b({__name:"VersionPicker",props:{screenMenu:{type:Boolean}},setup(n){const e=C([]),t=C("Versions"),o=C(!1);Je();const s=()=>typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"),r=()=>{if(typeof window>"u")return"";const{origin:c,pathname:m}=window.location;if(c.includes("github.io")){const y=m.split("/").filter(Boolean),h=y.length>0?`/${y[0]}`:"";return`${c}${h}`}else return c},l=()=>new Promise(c=>{if(s()){c(!1);return}const m=setInterval(()=>{window.DOC_VERSIONS&&window.DOCUMENTER_CURRENT_VERSION&&(clearInterval(m),c(!0))},100);setTimeout(()=>{clearInterval(m),c(!1)},5e3)});return G(async()=>{if(!(typeof window>"u")){try{if(s()){const c=["dev"];e.value=c.map(m=>({text:m,link:"/"})),t.value="dev"}else{const c=await l(),m=V(()=>r());if(c&&window.DOC_VERSIONS&&window.DOCUMENTER_CURRENT_VERSION)e.value=window.DOC_VERSIONS.map(y=>({text:y,link:`${m.value}/${y}/`})),t.value=window.DOCUMENTER_CURRENT_VERSION;else{const y=["dev"];e.value=y.map(h=>({text:h,link:`${m.value}/${h}/`})),t.value="dev"}}}catch(c){console.warn("Error loading versions:",c);const m=["dev"],y=V(()=>r());e.value=m.map(h=>({text:h,link:`${y.value}/${h}/`})),t.value="dev"}o.value=!0}}),(c,m)=>o.value?(a(),d(A,{key:0},[!c.screenMenu&&e.value.length>0?(a(),g(rt,{key:0,item:{text:t.value,items:e.value},class:"VPVersionPicker"},null,8,["item"])):c.screenMenu&&e.value.length>0?(a(),g(lt,{key:1,text:t.value,items:e.value,class:"VPVersionPicker"},null,8,["text","items"])):_("",!0)],64)):_("",!0)}}),dr=$(ur,[["__scopeId","data-v-44adf51f"]]);function fr(n){return Math.abs(n=Math.round(n))>=1e21?n.toLocaleString("en").replace(/,/g,""):n.toString(10)}function ue(n,e){if((t=(n=e?n.toExponential(e-1):n.toExponential()).indexOf("e"))<0)return null;var t,o=n.slice(0,t);return[o.length>1?o[0]+o.slice(2):o,+n.slice(t+1)]}function pr(n){return n=ue(Math.abs(n)),n?n[1]:NaN}function vr(n,e){return function(t,o){for(var s=t.length,r=[],l=0,u=n[0],c=0;s>0&&u>0&&(c+u+1>o&&(u=Math.max(1,o-c)),r.push(t.substring(s-=u,s+u)),!((c+=u+1)>o));)u=n[l=(l+1)%n.length];return r.reverse().join(e)}}function hr(n){return function(e){return e.replace(/[0-9]/g,function(t){return n[+t]})}}var mr=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function ye(n){if(!(e=mr.exec(n)))throw new Error("invalid format: "+n);var e;return new Be({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}ye.prototype=Be.prototype;function Be(n){this.fill=n.fill===void 0?" ":n.fill+"",this.align=n.align===void 0?">":n.align+"",this.sign=n.sign===void 0?"-":n.sign+"",this.symbol=n.symbol===void 0?"":n.symbol+"",this.zero=!!n.zero,this.width=n.width===void 0?void 0:+n.width,this.comma=!!n.comma,this.precision=n.precision===void 0?void 0:+n.precision,this.trim=!!n.trim,this.type=n.type===void 0?"":n.type+""}Be.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function _r(n){e:for(var e=n.length,t=1,o=-1,s;t0&&(o=0);break}return o>0?n.slice(0,o)+n.slice(s+1):n}var ct;function br(n,e){var t=ue(n,e);if(!t)return n+"";var o=t[0],s=t[1],r=s-(ct=Math.max(-8,Math.min(8,Math.floor(s/3)))*3)+1,l=o.length;return r===l?o:r>l?o+new Array(r-l+1).join("0"):r>0?o.slice(0,r)+"."+o.slice(r):"0."+new Array(1-r).join("0")+ue(n,Math.max(0,e+r-1))[0]}function je(n,e){var t=ue(n,e);if(!t)return n+"";var o=t[0],s=t[1];return s<0?"0."+new Array(-s).join("0")+o:o.length>s+1?o.slice(0,s+1)+"."+o.slice(s+1):o+new Array(s-o.length+2).join("0")}const ze={"%":(n,e)=>(n*100).toFixed(e),b:n=>Math.round(n).toString(2),c:n=>n+"",d:fr,e:(n,e)=>n.toExponential(e),f:(n,e)=>n.toFixed(e),g:(n,e)=>n.toPrecision(e),o:n=>Math.round(n).toString(8),p:(n,e)=>je(n*100,e),r:je,s:br,X:n=>Math.round(n).toString(16).toUpperCase(),x:n=>Math.round(n).toString(16)};function Ge(n){return n}var Ke=Array.prototype.map,qe=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function gr(n){var e=n.grouping===void 0||n.thousands===void 0?Ge:vr(Ke.call(n.grouping,Number),n.thousands+""),t=n.currency===void 0?"":n.currency[0]+"",o=n.currency===void 0?"":n.currency[1]+"",s=n.decimal===void 0?".":n.decimal+"",r=n.numerals===void 0?Ge:hr(Ke.call(n.numerals,String)),l=n.percent===void 0?"%":n.percent+"",u=n.minus===void 0?"−":n.minus+"",c=n.nan===void 0?"NaN":n.nan+"";function m(h){h=ye(h);var P=h.fill,S=h.align,T=h.sign,E=h.symbol,w=h.zero,B=h.width,F=h.comma,D=h.precision,Q=h.trim,H=h.type;H==="n"?(F=!0,H="g"):ze[H]||(D===void 0&&(D=12),Q=!0,H="g"),(w||P==="0"&&S==="=")&&(w=!0,P="0",S="=");var vt=E==="$"?t:E==="#"&&/[boxX]/.test(H)?"0"+H.toLowerCase():"",ht=E==="$"?o:/[%p]/.test(H)?l:"",He=ze[H],mt=/[defgprs%]/.test(H);D=D===void 0?6:/[gprs]/.test(H)?Math.max(1,Math.min(21,D)):Math.max(0,Math.min(20,D));function Oe(M){var J=vt,R=ht,x,De,oe;if(H==="c")R=He(M)+R,M="";else{M=+M;var se=M<0||1/M<0;if(M=isNaN(M)?c:He(Math.abs(M),D),Q&&(M=_r(M)),se&&+M==0&&T!=="+"&&(se=!1),J=(se?T==="("?T:u:T==="-"||T==="("?"":T)+J,R=(H==="s"?qe[8+ct/3]:"")+R+(se&&T==="("?")":""),mt){for(x=-1,De=M.length;++xoe||oe>57){R=(oe===46?s+M.slice(x+1):M.slice(x))+R,M=M.slice(0,x);break}}}F&&!w&&(M=e(M,1/0));var ae=J.length+M.length+R.length,K=ae>1)+J+M+R+K.slice(ae);break;default:M=K+J+M+R;break}return r(M)}return Oe.toString=function(){return h+""},Oe}function y(h,P){var S=m((h=ye(h),h.type="f",h)),T=Math.max(-8,Math.min(8,Math.floor(pr(P)/3)))*3,E=Math.pow(10,-T),w=qe[8+T/3];return function(B){return S(E*B)+w}}return{format:m,formatPrefix:y}}var re,ut;kr({thousands:",",grouping:[3],currency:["$",""]});function kr(n){return re=gr(n),re.format,ut=re.formatPrefix,re}const ie=JSON.parse("222"),$r=["title"],yr={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"20",height:"20",fill:"currentColor",style:{"vertical-align":"middle","margin-right":"0.25rem","margin-left":"0.5rem"}},Pr=["title"],Sr={__name:"StarUs",setup(n){const e=ie?ut(".1s",1e3)(ie):"";return(t,o)=>(a(),d(A,null,[p("a",{target:"_blank","data-decoration":"★",title:i(ie).toLocaleString("en-US").concat(" GitHub stars"),href:"https://github.com/rafaqz/Rasters.jl"},[(a(),d("svg",yr,o[0]||(o[0]=[p("path",{d:"M12 .297C5.375.297 0 5.673 0 12.3c0 5.292 3.438 9.8 8.207 11.387.6.11.793-.26.793-.577 0-.285-.01-1.04-.015-2.04-3.338.727-4.042-1.61-4.042-1.61-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.807 1.305 3.493.997.107-.774.42-1.305.762-1.605-2.665-.3-5.467-1.333-5.467-5.931 0-1.31.47-2.382 1.236-3.222-.123-.303-.535-1.52.117-3.166 0 0 1.01-.323 3.31 1.23.96-.267 1.98-.4 3-.405 1.02.005 2.04.138 3 .405 2.3-1.553 3.31-1.23 3.31-1.23.653 1.646.24 2.863.117 3.166.765.84 1.236 1.912 1.236 3.222 0 4.61-2.807 5.625-5.477 5.921.43.372.823 1.102.823 2.222 0 1.606-.015 2.902-.015 3.293 0 .32.192.693.8.577C20.565 22.1 24 17.588 24 12.297 24 5.673 18.627.297 12 .297z"},null,-1)]))),p("span",null,N(i(e)),1)],8,$r),p("a",{class:"mobile",target:"_blank",title:i(ie).toLocaleString("en-US").concat(" GitHub stars"),href:"https://github.com/rafaqz/Rasters.jl"},o[1]||(o[1]=[p("svg",{xmlns:"http://www.w3.org/2000/svg",width:"21",height:"21",viewBox:"0 0 21 21",fill:"none"},[p("path",{d:"M19.625 5.60534C18.7083 4.03477 17.4649 2.79135 15.8945 1.87479C14.3238 0.958185 12.6091 0.5 10.7492 0.5C8.88947 0.5 7.17422 0.958325 5.60388 1.87479C4.0333 2.7913 2.78997 4.03477 1.87332 5.60534C0.956814 7.17587 0.498535 8.89089 0.498535 10.7504C0.498535 12.984 1.15021 14.9926 2.4539 16.7766C3.75744 18.5607 5.44142 19.7952 7.50571 20.4803C7.746 20.5249 7.92388 20.4936 8.03954 20.387C8.15524 20.2804 8.21302 20.1467 8.21302 19.9868C8.21302 19.9601 8.21073 19.7199 8.20629 19.266C8.20171 18.8122 8.19956 18.4162 8.19956 18.0783L7.89256 18.1315C7.69682 18.1673 7.44989 18.1825 7.15178 18.1782C6.8538 18.174 6.54446 18.1428 6.22419 18.0847C5.90377 18.0272 5.60575 17.8937 5.32988 17.6846C5.05416 17.4755 4.85842 17.2018 4.74272 16.8639L4.60925 16.5568C4.52029 16.3523 4.38023 16.1251 4.18888 15.8761C3.99754 15.6269 3.80405 15.458 3.60831 15.369L3.51486 15.3021C3.45259 15.2577 3.39481 15.204 3.34138 15.1418C3.28799 15.0796 3.24802 15.0173 3.22132 14.955C3.19458 14.8926 3.21674 14.8414 3.28804 14.8012C3.35933 14.761 3.48817 14.7416 3.67512 14.7416L3.94196 14.7814C4.11993 14.8171 4.34007 14.9236 4.60266 15.1017C4.86511 15.2796 5.08085 15.5109 5.24994 15.7956C5.4547 16.1605 5.7014 16.4385 5.99072 16.6299C6.27982 16.8212 6.5713 16.9167 6.86488 16.9167C7.15846 16.9167 7.41203 16.8945 7.62567 16.8502C7.83908 16.8057 8.0393 16.7388 8.22625 16.6499C8.30633 16.0535 8.52437 15.5953 8.88017 15.275C8.37304 15.2217 7.9171 15.1414 7.51212 15.0347C7.10736 14.9278 6.6891 14.7544 6.25761 14.5139C5.82589 14.2738 5.46774 13.9756 5.18309 13.6198C4.89839 13.2639 4.66474 12.7966 4.48247 12.2183C4.3001 11.6399 4.20889 10.9726 4.20889 10.2163C4.20889 9.13941 4.56044 8.22304 5.26341 7.46665C4.93411 6.65705 4.96519 5.74947 5.35676 4.744C5.61482 4.66382 5.9975 4.72399 6.50463 4.92412C7.01186 5.12434 7.38323 5.29587 7.61912 5.43808C7.85502 5.58024 8.04402 5.70071 8.18642 5.79842C9.01411 5.56715 9.86825 5.45149 10.7491 5.45149C11.6299 5.45149 12.4843 5.56715 13.312 5.79842L13.8192 5.47823C14.166 5.26459 14.5756 5.06881 15.0469 4.89083C15.5185 4.71295 15.8791 4.66396 16.1284 4.74414C16.5286 5.74966 16.5643 6.65719 16.2349 7.46679C16.9378 8.22318 17.2895 9.13978 17.2895 10.2164C17.2895 10.9727 17.198 11.6421 17.0159 12.225C16.8336 12.808 16.5979 13.2749 16.3088 13.6265C16.0194 13.9781 15.659 14.274 15.2275 14.5141C14.7959 14.7544 14.3775 14.9278 13.9728 15.0347C13.5678 15.1415 13.1119 15.2219 12.6047 15.2752C13.0673 15.6755 13.2986 16.3073 13.2986 17.1704V19.9864C13.2986 20.1464 13.3542 20.2799 13.4656 20.3867C13.5768 20.4932 13.7524 20.5246 13.9927 20.4799C16.0573 19.7949 17.7413 18.5603 19.0448 16.7762C20.3481 14.9922 21 12.9837 21 10.75C20.9996 8.89075 20.541 7.17587 19.625 5.60534Z",fill:"currentColor"})],-1)]),8,Pr)],64))}},Vr=$(Sr,[["__scopeId","data-v-387d6b08"]]),Lr=n=>{if(typeof document>"u")return{stabilizeScrollPosition:s=>async(...r)=>s(...r)};const e=document.documentElement;return{stabilizeScrollPosition:o=>async(...s)=>{const r=o(...s),l=n.value;if(!l)return r;const u=l.offsetTop-e.scrollTop;return await we(),e.scrollTop=l.offsetTop-u,r}}},dt="vitepress:tabSharedState",te=typeof localStorage<"u"?localStorage:null,ft="vitepress:tabsSharedState",wr=()=>{const n=te==null?void 0:te.getItem(ft);if(n)try{return JSON.parse(n)}catch{}return{}},Tr=n=>{te&&te.setItem(ft,JSON.stringify(n))},Cr=n=>{const e=Ct({});z(()=>e.content,(t,o)=>{t&&o&&Tr(t)},{deep:!0}),n.provide(dt,e)},Mr=(n,e)=>{const t=ee(dt);if(!t)throw new Error("[vitepress-plugin-tabs] TabsSharedState should be injected");G(()=>{t.content||(t.content=wr())});const o=C(),s=V({get(){var c;const l=e.value,u=n.value;if(l){const m=(c=t.content)==null?void 0:c[l];if(m&&u.includes(m))return m}else{const m=o.value;if(m)return m}return u[0]},set(l){const u=e.value;u?t.content&&(t.content[u]=l):o.value=l}});return{selected:s,select:l=>{s.value=l}}};let We=0;const Nr=()=>(We++,""+We);function Ir(){const n=et();return V(()=>{var o;const t=(o=n.default)==null?void 0:o.call(n);return t?t.filter(s=>typeof s.type=="object"&&"__name"in s.type&&s.type.__name==="PluginTabsTab"&&s.props).map(s=>{var r;return(r=s.props)==null?void 0:r.label}):[]})}const pt="vitepress:tabSingleState",Ar=n=>{Te(pt,n)},Er=()=>{const n=ee(pt);if(!n)throw new Error("[vitepress-plugin-tabs] TabsSingleState should be injected");return n},Br={class:"plugin-tabs"},Hr=["id","aria-selected","aria-controls","tabindex","onClick"],Or=b({__name:"PluginTabs",props:{sharedStateKey:{}},setup(n){const e=n,t=Ir(),{selected:o,select:s}=Mr(t,Mt(e,"sharedStateKey")),r=C(),{stabilizeScrollPosition:l}=Lr(r),u=l(s),c=C([]),m=h=>{var T;const P=t.value.indexOf(o.value);let S;h.key==="ArrowLeft"?S=P>=1?P-1:t.value.length-1:h.key==="ArrowRight"&&(S=P(a(),d("div",Br,[p("div",{ref_key:"tablist",ref:r,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:m},[(a(!0),d(A,null,O(i(t),S=>(a(),d("button",{id:`tab-${S}-${i(y)}`,ref_for:!0,ref_key:"buttonRefs",ref:c,key:S,role:"tab",class:"plugin-tabs--tab","aria-selected":S===i(o),"aria-controls":`panel-${S}-${i(y)}`,tabindex:S===i(o)?0:-1,onClick:()=>i(u)(S)},N(S),9,Hr))),128))],544),f(h.$slots,"default")]))}}),Dr=["id","aria-labelledby"],Fr=b({__name:"PluginTabsTab",props:{label:{}},setup(n){const{uid:e,selected:t}=Er();return(o,s)=>i(t)===o.label?(a(),d("div",{key:0,id:`panel-${o.label}-${i(e)}`,class:"plugin-tabs--content",role:"tabpanel",tabindex:"0","aria-labelledby":`tab-${o.label}-${i(e)}`},[f(o.$slots,"default",{},void 0,!0)],8,Dr)):_("",!0)}}),Rr=$(Fr,[["__scopeId","data-v-9b0d03d2"]]),Ur=n=>{Cr(n),n.component("PluginTabs",Or),n.component("PluginTabsTab",Rr)},zr={extends:Ue,Layout(){return Fe(Ue.Layout,null,{"nav-bar-content-after":()=>Fe(Vr)})},enhanceApp({app:n,router:e,siteData:t}){Ur(n),n.component("VersionPicker",dr)}};export{zr as R,Ws as c,L as u}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.BOox_SFc.js","assets/chunks/framework.CS7uZ9fp.js"])))=>i.map(i=>d[i]); +import{d as b,o as a,c as d,r as f,n as I,a as X,t as N,b as g,w as v,e as _,T as Pe,_ as $,u as Je,i as _t,f as bt,g as Se,h as V,j as p,k as i,l as Y,m as _e,p as C,q as z,s as de,v as G,x as Ve,y as Le,z as gt,A as kt,B as Z,F as A,C as O,D as Xe,E as fe,G as k,H as U,I as Ye,J as pe,K as W,L as ee,M as $t,N as Ze,O as be,P as we,Q as Qe,R as ve,S as yt,U as Pt,V as St,W as xe,X as Te,Y as Vt,Z as Lt,$ as wt,a0 as Tt,a1 as et,a2 as Ct,a3 as Mt,a4 as Fe}from"./framework.CS7uZ9fp.js";const Nt=b({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(n){return(e,t)=>(a(),d("span",{class:I(["VPBadge",e.type])},[f(e.$slots,"default",{},()=>[X(N(e.text),1)])],2))}}),It={key:0,class:"VPBackdrop"},At=b({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(n){return(e,t)=>(a(),g(Pe,{name:"fade"},{default:v(()=>[e.show?(a(),d("div",It)):_("",!0)]),_:1}))}}),Et=$(At,[["__scopeId","data-v-b06cdb19"]]),L=Je;function Bt(n,e){let t,o=!1;return()=>{t&&clearTimeout(t),o?t=setTimeout(n,e):(n(),(o=!0)&&setTimeout(()=>o=!1,e))}}function ge(n){return n.startsWith("/")?n:`/${n}`}function Ce(n){const{pathname:e,search:t,hash:o,protocol:s}=new URL(n,"http://a.com");if(_t(n)||n.startsWith("#")||!s.startsWith("http")||!bt(e))return n;const{site:r}=L(),l=e.endsWith("/")||e.endsWith(".html")?n:n.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${o}`);return Se(l)}function ne({correspondingLink:n=!1}={}){const{site:e,localeIndex:t,page:o,theme:s,hash:r}=L(),l=V(()=>{var c,m;return{label:(c=e.value.locales[t.value])==null?void 0:c.label,link:((m=e.value.locales[t.value])==null?void 0:m.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:V(()=>Object.entries(e.value.locales).flatMap(([c,m])=>l.value.label===m.label?[]:{text:m.label,link:Ht(m.link||(c==="root"?"/":`/${c}/`),s.value.i18nRouting!==!1&&n,o.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+r.value})),currentLang:l}}function Ht(n,e,t,o){return e?n.replace(/\/$/,"")+ge(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,o?".html":"")):n}const Ot={class:"NotFound"},Dt={class:"code"},Ft={class:"title"},Rt={class:"quote"},Ut={class:"action"},jt=["href","aria-label"],zt=b({__name:"NotFound",setup(n){const{theme:e}=L(),{currentLang:t}=ne();return(o,s)=>{var r,l,u,c,m;return a(),d("div",Ot,[p("p",Dt,N(((r=i(e).notFound)==null?void 0:r.code)??"404"),1),p("h1",Ft,N(((l=i(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),s[0]||(s[0]=p("div",{class:"divider"},null,-1)),p("blockquote",Rt,N(((u=i(e).notFound)==null?void 0:u.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),p("div",Ut,[p("a",{class:"link",href:i(Se)(i(t).link),"aria-label":((c=i(e).notFound)==null?void 0:c.linkLabel)??"go to home"},N(((m=i(e).notFound)==null?void 0:m.linkText)??"Take me home"),9,jt)])])}}}),Gt=$(zt,[["__scopeId","data-v-951cab6c"]]);function tt(n,e){if(Array.isArray(n))return le(n);if(n==null)return[];e=ge(e);const t=Object.keys(n).sort((s,r)=>r.split("/").length-s.split("/").length).find(s=>e.startsWith(ge(s))),o=t?n[t]:[];return Array.isArray(o)?le(o):le(o.items,o.base)}function Kt(n){const e=[];let t=0;for(const o in n){const s=n[o];if(s.items){t=e.push(s);continue}e[t]||e.push({items:[]}),e[t].items.push(s)}return e}function qt(n){const e=[];function t(o){for(const s of o)s.text&&s.link&&e.push({text:s.text,link:s.link,docFooterText:s.docFooterText}),s.items&&t(s.items)}return t(n),e}function ke(n,e){return Array.isArray(e)?e.some(t=>ke(n,t)):Y(n,e.link)?!0:e.items?ke(n,e.items):!1}function le(n,e){return[...n].map(t=>{const o={...t},s=o.base||e;return s&&o.link&&(o.link=s+o.link),o.items&&(o.items=le(o.items,s)),o})}function q(){const{frontmatter:n,page:e,theme:t}=L(),o=_e("(min-width: 960px)"),s=C(!1),r=V(()=>{const E=t.value.sidebar,w=e.value.relativePath;return E?tt(E,w):[]}),l=C(r.value);z(r,(E,w)=>{JSON.stringify(E)!==JSON.stringify(w)&&(l.value=r.value)});const u=V(()=>n.value.sidebar!==!1&&l.value.length>0&&n.value.layout!=="home"),c=V(()=>m?n.value.aside==null?t.value.aside==="left":n.value.aside==="left":!1),m=V(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:t.value.aside!==!1),y=V(()=>u.value&&o.value),h=V(()=>u.value?Kt(l.value):[]);function P(){s.value=!0}function S(){s.value=!1}function T(){s.value?S():P()}return{isOpen:s,sidebar:l,sidebarGroups:h,hasSidebar:u,hasAside:m,leftAside:c,isSidebarEnabled:y,open:P,close:S,toggle:T}}function Wt(n,e){let t;de(()=>{t=n.value?document.activeElement:void 0}),G(()=>{window.addEventListener("keyup",o)}),Ve(()=>{window.removeEventListener("keyup",o)});function o(s){s.key==="Escape"&&n.value&&(e(),t==null||t.focus())}}function Jt(n){const{page:e,hash:t}=L(),o=C(!1),s=V(()=>n.value.collapsed!=null),r=V(()=>!!n.value.link),l=C(!1),u=()=>{l.value=Y(e.value.relativePath,n.value.link)};z([e,n,t],u),G(u);const c=V(()=>l.value?!0:n.value.items?ke(e.value.relativePath,n.value.items):!1),m=V(()=>!!(n.value.items&&n.value.items.length));de(()=>{o.value=!!(s.value&&n.value.collapsed)}),Le(()=>{(l.value||c.value)&&(o.value=!1)});function y(){s.value&&(o.value=!o.value)}return{collapsed:o,collapsible:s,isLink:r,isActiveLink:l,hasActiveLink:c,hasChildren:m,toggle:y}}function Xt(){const{hasSidebar:n}=q(),e=_e("(min-width: 960px)"),t=_e("(min-width: 1280px)");return{isAsideEnabled:V(()=>!t.value&&!e.value?!1:n.value?t.value:e.value)}}const Yt=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,$e=[];function nt(n){return typeof n.outline=="object"&&!Array.isArray(n.outline)&&n.outline.label||n.outlineTitle||"On this page"}function Me(n){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const o=Number(t.tagName[1]);return{element:t,title:Zt(t),link:"#"+t.id,level:o}});return Qt(e,n)}function Zt(n){let e="";for(const t of n.childNodes)if(t.nodeType===1){if(Yt.test(t.className))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function Qt(n,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[o,s]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;return tn(n,o,s)}function xt(n,e){const{isAsideEnabled:t}=Xt(),o=Bt(r,100);let s=null;G(()=>{requestAnimationFrame(r),window.addEventListener("scroll",o)}),gt(()=>{l(location.hash)}),Ve(()=>{window.removeEventListener("scroll",o)});function r(){if(!t.value)return;const u=window.scrollY,c=window.innerHeight,m=document.body.offsetHeight,y=Math.abs(u+c-m)<1,h=$e.map(({element:S,link:T})=>({link:T,top:en(S)})).filter(({top:S})=>!Number.isNaN(S)).sort((S,T)=>S.top-T.top);if(!h.length){l(null);return}if(u<1){l(null);return}if(y){l(h[h.length-1].link);return}let P=null;for(const{link:S,top:T}of h){if(T>u+kt()+4)break;P=S}l(P)}function l(u){s&&s.classList.remove("active"),u==null?s=null:s=n.value.querySelector(`a[href="${decodeURIComponent(u)}"]`);const c=s;c?(c.classList.add("active"),e.value.style.top=c.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function en(n){let e=0;for(;n!==document.body;){if(n===null)return NaN;e+=n.offsetTop,n=n.offsetParent}return e}function tn(n,e,t){$e.length=0;const o=[],s=[];return n.forEach(r=>{const l={...r,children:[]};let u=s[s.length-1];for(;u&&u.level>=l.level;)s.pop(),u=s[s.length-1];if(l.element.classList.contains("ignore-header")||u&&"shouldIgnore"in u){s.push({level:l.level,shouldIgnore:!0});return}l.level>t||l.level{const s=Z("VPDocOutlineItem",!0);return a(),d("ul",{class:I(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),d(A,null,O(t.headers,({children:r,link:l,title:u})=>(a(),d("li",null,[p("a",{class:"outline-link",href:l,onClick:e,title:u},N(u),9,nn),r!=null&&r.length?(a(),g(s,{key:0,headers:r},null,8,["headers"])):_("",!0)]))),256))],2)}}}),ot=$(on,[["__scopeId","data-v-3f927ebe"]]),sn={class:"content"},an={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},rn=b({__name:"VPDocAsideOutline",setup(n){const{frontmatter:e,theme:t}=L(),o=Xe([]);fe(()=>{o.value=Me(e.value.outline??t.value.outline)});const s=C(),r=C();return xt(s,r),(l,u)=>(a(),d("nav",{"aria-labelledby":"doc-outline-aria-label",class:I(["VPDocAsideOutline",{"has-outline":o.value.length>0}]),ref_key:"container",ref:s},[p("div",sn,[p("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),p("div",an,N(i(nt)(i(t))),1),k(ot,{headers:o.value,root:!0},null,8,["headers"])])],2))}}),ln=$(rn,[["__scopeId","data-v-b38bf2ff"]]),cn={class:"VPDocAsideCarbonAds"},un=b({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(n){const e=()=>null;return(t,o)=>(a(),d("div",cn,[k(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),dn={class:"VPDocAside"},fn=b({__name:"VPDocAside",setup(n){const{theme:e}=L();return(t,o)=>(a(),d("div",dn,[f(t.$slots,"aside-top",{},void 0,!0),f(t.$slots,"aside-outline-before",{},void 0,!0),k(ln),f(t.$slots,"aside-outline-after",{},void 0,!0),o[0]||(o[0]=p("div",{class:"spacer"},null,-1)),f(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(a(),g(un,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):_("",!0),f(t.$slots,"aside-ads-after",{},void 0,!0),f(t.$slots,"aside-bottom",{},void 0,!0)]))}}),pn=$(fn,[["__scopeId","data-v-6d7b3c46"]]);function vn(){const{theme:n,page:e}=L();return V(()=>{const{text:t="Edit this page",pattern:o=""}=n.value.editLink||{};let s;return typeof o=="function"?s=o(e.value):s=o.replace(/:path/g,e.value.filePath),{url:s,text:t}})}function hn(){const{page:n,theme:e,frontmatter:t}=L();return V(()=>{var m,y,h,P,S,T,E,w;const o=tt(e.value.sidebar,n.value.relativePath),s=qt(o),r=mn(s,B=>B.link.replace(/[?#].*$/,"")),l=r.findIndex(B=>Y(n.value.relativePath,B.link)),u=((m=e.value.docFooter)==null?void 0:m.prev)===!1&&!t.value.prev||t.value.prev===!1,c=((y=e.value.docFooter)==null?void 0:y.next)===!1&&!t.value.next||t.value.next===!1;return{prev:u?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((h=r[l-1])==null?void 0:h.docFooterText)??((P=r[l-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((S=r[l-1])==null?void 0:S.link)},next:c?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((T=r[l+1])==null?void 0:T.docFooterText)??((E=r[l+1])==null?void 0:E.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((w=r[l+1])==null?void 0:w.link)}}})}function mn(n,e){const t=new Set;return n.filter(o=>{const s=e(o);return t.has(s)?!1:t.add(s)})}const j=b({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(n){const e=n,t=V(()=>e.tag??(e.href?"a":"span")),o=V(()=>e.href&&Ye.test(e.href)||e.target==="_blank");return(s,r)=>(a(),g(U(t.value),{class:I(["VPLink",{link:s.href,"vp-external-link-icon":o.value,"no-icon":s.noIcon}]),href:s.href?i(Ce)(s.href):void 0,target:s.target??(o.value?"_blank":void 0),rel:s.rel??(o.value?"noreferrer":void 0)},{default:v(()=>[f(s.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),_n={class:"VPLastUpdated"},bn=["datetime"],gn=b({__name:"VPDocFooterLastUpdated",setup(n){const{theme:e,page:t,lang:o}=L(),s=V(()=>new Date(t.value.lastUpdated)),r=V(()=>s.value.toISOString()),l=C("");return G(()=>{de(()=>{var u,c,m;l.value=new Intl.DateTimeFormat((c=(u=e.value.lastUpdated)==null?void 0:u.formatOptions)!=null&&c.forceLocale?o.value:void 0,((m=e.value.lastUpdated)==null?void 0:m.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(s.value)})}),(u,c)=>{var m;return a(),d("p",_n,[X(N(((m=i(e).lastUpdated)==null?void 0:m.text)||i(e).lastUpdatedText||"Last updated")+": ",1),p("time",{datetime:r.value},N(l.value),9,bn)])}}}),kn=$(gn,[["__scopeId","data-v-475f71b8"]]),$n={key:0,class:"VPDocFooter"},yn={key:0,class:"edit-info"},Pn={key:0,class:"edit-link"},Sn={key:1,class:"last-updated"},Vn={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Ln={class:"pager"},wn=["innerHTML"],Tn=["innerHTML"],Cn={class:"pager"},Mn=["innerHTML"],Nn=["innerHTML"],In=b({__name:"VPDocFooter",setup(n){const{theme:e,page:t,frontmatter:o}=L(),s=vn(),r=hn(),l=V(()=>e.value.editLink&&o.value.editLink!==!1),u=V(()=>t.value.lastUpdated),c=V(()=>l.value||u.value||r.value.prev||r.value.next);return(m,y)=>{var h,P,S,T;return c.value?(a(),d("footer",$n,[f(m.$slots,"doc-footer-before",{},void 0,!0),l.value||u.value?(a(),d("div",yn,[l.value?(a(),d("div",Pn,[k(j,{class:"edit-link-button",href:i(s).url,"no-icon":!0},{default:v(()=>[y[0]||(y[0]=p("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),X(" "+N(i(s).text),1)]),_:1},8,["href"])])):_("",!0),u.value?(a(),d("div",Sn,[k(kn)])):_("",!0)])):_("",!0),(h=i(r).prev)!=null&&h.link||(P=i(r).next)!=null&&P.link?(a(),d("nav",Vn,[y[1]||(y[1]=p("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),p("div",Ln,[(S=i(r).prev)!=null&&S.link?(a(),g(j,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:v(()=>{var E;return[p("span",{class:"desc",innerHTML:((E=i(e).docFooter)==null?void 0:E.prev)||"Previous page"},null,8,wn),p("span",{class:"title",innerHTML:i(r).prev.text},null,8,Tn)]}),_:1},8,["href"])):_("",!0)]),p("div",Cn,[(T=i(r).next)!=null&&T.link?(a(),g(j,{key:0,class:"pager-link next",href:i(r).next.link},{default:v(()=>{var E;return[p("span",{class:"desc",innerHTML:((E=i(e).docFooter)==null?void 0:E.next)||"Next page"},null,8,Mn),p("span",{class:"title",innerHTML:i(r).next.text},null,8,Nn)]}),_:1},8,["href"])):_("",!0)])])):_("",!0)])):_("",!0)}}}),An=$(In,[["__scopeId","data-v-4f9813fa"]]),En={class:"container"},Bn={class:"aside-container"},Hn={class:"aside-content"},On={class:"content"},Dn={class:"content-container"},Fn={class:"main"},Rn=b({__name:"VPDoc",setup(n){const{theme:e}=L(),t=pe(),{hasSidebar:o,hasAside:s,leftAside:r}=q(),l=V(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(u,c)=>{const m=Z("Content");return a(),d("div",{class:I(["VPDoc",{"has-sidebar":i(o),"has-aside":i(s)}])},[f(u.$slots,"doc-top",{},void 0,!0),p("div",En,[i(s)?(a(),d("div",{key:0,class:I(["aside",{"left-aside":i(r)}])},[c[0]||(c[0]=p("div",{class:"aside-curtain"},null,-1)),p("div",Bn,[p("div",Hn,[k(pn,null,{"aside-top":v(()=>[f(u.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[f(u.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[f(u.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[f(u.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[f(u.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[f(u.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):_("",!0),p("div",On,[p("div",Dn,[f(u.$slots,"doc-before",{},void 0,!0),p("main",Fn,[k(m,{class:I(["vp-doc",[l.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),k(An,null,{"doc-footer-before":v(()=>[f(u.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),f(u.$slots,"doc-after",{},void 0,!0)])])]),f(u.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Un=$(Rn,[["__scopeId","data-v-83890dd9"]]),jn=b({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(n){const e=n,t=V(()=>e.href&&Ye.test(e.href)),o=V(()=>e.tag||(e.href?"a":"button"));return(s,r)=>(a(),g(U(o.value),{class:I(["VPButton",[s.size,s.theme]]),href:s.href?i(Ce)(s.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:v(()=>[X(N(s.text),1)]),_:1},8,["class","href","target","rel"]))}}),zn=$(jn,[["__scopeId","data-v-906d7fb4"]]),Gn=["src","alt"],Kn=b({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(n){return(e,t)=>{const o=Z("VPImage",!0);return e.image?(a(),d(A,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),d("img",W({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(Se)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Gn)):(a(),d(A,{key:1},[k(o,W({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),k(o,W({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):_("",!0)}}}),ce=$(Kn,[["__scopeId","data-v-35a7d0b8"]]),qn={class:"container"},Wn={class:"main"},Jn={class:"heading"},Xn=["innerHTML"],Yn=["innerHTML"],Zn=["innerHTML"],Qn={key:0,class:"actions"},xn={key:0,class:"image"},eo={class:"image-container"},to=b({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(n){const e=ee("hero-image-slot-exists");return(t,o)=>(a(),d("div",{class:I(["VPHero",{"has-image":t.image||i(e)}])},[p("div",qn,[p("div",Wn,[f(t.$slots,"home-hero-info-before",{},void 0,!0),f(t.$slots,"home-hero-info",{},()=>[p("h1",Jn,[t.name?(a(),d("span",{key:0,innerHTML:t.name,class:"name clip"},null,8,Xn)):_("",!0),t.text?(a(),d("span",{key:1,innerHTML:t.text,class:"text"},null,8,Yn)):_("",!0)]),t.tagline?(a(),d("p",{key:0,innerHTML:t.tagline,class:"tagline"},null,8,Zn)):_("",!0)],!0),f(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),d("div",Qn,[(a(!0),d(A,null,O(t.actions,s=>(a(),d("div",{key:s.link,class:"action"},[k(zn,{tag:"a",size:"medium",theme:s.theme,text:s.text,href:s.link,target:s.target,rel:s.rel},null,8,["theme","text","href","target","rel"])]))),128))])):_("",!0),f(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||i(e)?(a(),d("div",xn,[p("div",eo,[o[0]||(o[0]=p("div",{class:"image-bg"},null,-1)),f(t.$slots,"home-hero-image",{},()=>[t.image?(a(),g(ce,{key:0,class:"image-src",image:t.image},null,8,["image"])):_("",!0)],!0)])])):_("",!0)])],2))}}),no=$(to,[["__scopeId","data-v-3d256e5e"]]),oo=b({__name:"VPHomeHero",setup(n){const{frontmatter:e}=L();return(t,o)=>i(e).hero?(a(),g(no,{key:0,class:"VPHomeHero",name:i(e).hero.name,text:i(e).hero.text,tagline:i(e).hero.tagline,image:i(e).hero.image,actions:i(e).hero.actions},{"home-hero-info-before":v(()=>[f(t.$slots,"home-hero-info-before")]),"home-hero-info":v(()=>[f(t.$slots,"home-hero-info")]),"home-hero-info-after":v(()=>[f(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":v(()=>[f(t.$slots,"home-hero-actions-after")]),"home-hero-image":v(()=>[f(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):_("",!0)}}),so={class:"box"},ao={key:0,class:"icon"},ro=["innerHTML"],io=["innerHTML"],lo=["innerHTML"],co={key:4,class:"link-text"},uo={class:"link-text-value"},fo=b({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(n){return(e,t)=>(a(),g(j,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:v(()=>[p("article",so,[typeof e.icon=="object"&&e.icon.wrap?(a(),d("div",ao,[k(ce,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),g(ce,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),d("div",{key:2,class:"icon",innerHTML:e.icon},null,8,ro)):_("",!0),p("h2",{class:"title",innerHTML:e.title},null,8,io),e.details?(a(),d("p",{key:3,class:"details",innerHTML:e.details},null,8,lo)):_("",!0),e.linkText?(a(),d("div",co,[p("p",uo,[X(N(e.linkText)+" ",1),t[0]||(t[0]=p("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):_("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),po=$(fo,[["__scopeId","data-v-f5e9645b"]]),vo={key:0,class:"VPFeatures"},ho={class:"container"},mo={class:"items"},_o=b({__name:"VPFeatures",props:{features:{}},setup(n){const e=n,t=V(()=>{const o=e.features.length;if(o){if(o===2)return"grid-2";if(o===3)return"grid-3";if(o%3===0)return"grid-6";if(o>3)return"grid-4"}else return});return(o,s)=>o.features?(a(),d("div",vo,[p("div",ho,[p("div",mo,[(a(!0),d(A,null,O(o.features,r=>(a(),d("div",{key:r.title,class:I(["item",[t.value]])},[k(po,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):_("",!0)}}),bo=$(_o,[["__scopeId","data-v-d0a190d7"]]),go=b({__name:"VPHomeFeatures",setup(n){const{frontmatter:e}=L();return(t,o)=>i(e).features?(a(),g(bo,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):_("",!0)}}),ko=b({__name:"VPHomeContent",setup(n){const{width:e}=$t({initialWidth:0,includeScrollbar:!1});return(t,o)=>(a(),d("div",{class:"vp-doc container",style:Ze(i(e)?{"--vp-offset":`calc(50% - ${i(e)/2}px)`}:{})},[f(t.$slots,"default",{},void 0,!0)],4))}}),$o=$(ko,[["__scopeId","data-v-7a48a447"]]),yo=b({__name:"VPHome",setup(n){const{frontmatter:e,theme:t}=L();return(o,s)=>{const r=Z("Content");return a(),d("div",{class:I(["VPHome",{"external-link-icon-enabled":i(t).externalLinkIcon}])},[f(o.$slots,"home-hero-before",{},void 0,!0),k(oo,null,{"home-hero-info-before":v(()=>[f(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[f(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[f(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[f(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[f(o.$slots,"home-hero-image",{},void 0,!0)]),_:3}),f(o.$slots,"home-hero-after",{},void 0,!0),f(o.$slots,"home-features-before",{},void 0,!0),k(go),f(o.$slots,"home-features-after",{},void 0,!0),i(e).markdownStyles!==!1?(a(),g($o,{key:0},{default:v(()=>[k(r)]),_:1})):(a(),g(r,{key:1}))],2)}}}),Po=$(yo,[["__scopeId","data-v-e40e30de"]]),So={},Vo={class:"VPPage"};function Lo(n,e){const t=Z("Content");return a(),d("div",Vo,[f(n.$slots,"page-top"),k(t),f(n.$slots,"page-bottom")])}const wo=$(So,[["render",Lo]]),To=b({__name:"VPContent",setup(n){const{page:e,frontmatter:t}=L(),{hasSidebar:o}=q();return(s,r)=>(a(),d("div",{class:I(["VPContent",{"has-sidebar":i(o),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?f(s.$slots,"not-found",{key:0},()=>[k(Gt)],!0):i(t).layout==="page"?(a(),g(wo,{key:1},{"page-top":v(()=>[f(s.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[f(s.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(a(),g(Po,{key:2},{"home-hero-before":v(()=>[f(s.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[f(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[f(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[f(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[f(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[f(s.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[f(s.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[f(s.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[f(s.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(a(),g(U(i(t).layout),{key:3})):(a(),g(Un,{key:4},{"doc-top":v(()=>[f(s.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[f(s.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":v(()=>[f(s.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[f(s.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[f(s.$slots,"doc-after",{},void 0,!0)]),"aside-top":v(()=>[f(s.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":v(()=>[f(s.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[f(s.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[f(s.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[f(s.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":v(()=>[f(s.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),Co=$(To,[["__scopeId","data-v-91765379"]]),Mo={class:"container"},No=["innerHTML"],Io=["innerHTML"],Ao=b({__name:"VPFooter",setup(n){const{theme:e,frontmatter:t}=L(),{hasSidebar:o}=q();return(s,r)=>i(e).footer&&i(t).footer!==!1?(a(),d("footer",{key:0,class:I(["VPFooter",{"has-sidebar":i(o)}])},[p("div",Mo,[i(e).footer.message?(a(),d("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,No)):_("",!0),i(e).footer.copyright?(a(),d("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,Io)):_("",!0)])],2)):_("",!0)}}),Eo=$(Ao,[["__scopeId","data-v-c970a860"]]);function Bo(){const{theme:n,frontmatter:e}=L(),t=Xe([]),o=V(()=>t.value.length>0);return fe(()=>{t.value=Me(e.value.outline??n.value.outline)}),{headers:t,hasLocalNav:o}}const Ho={class:"menu-text"},Oo={class:"header"},Do={class:"outline"},Fo=b({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(n){const e=n,{theme:t}=L(),o=C(!1),s=C(0),r=C(),l=C();function u(h){var P;(P=r.value)!=null&&P.contains(h.target)||(o.value=!1)}z(o,h=>{if(h){document.addEventListener("click",u);return}document.removeEventListener("click",u)}),be("Escape",()=>{o.value=!1}),fe(()=>{o.value=!1});function c(){o.value=!o.value,s.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function m(h){h.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),we(()=>{o.value=!1}))}function y(){o.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(h,P)=>(a(),d("div",{class:"VPLocalNavOutlineDropdown",style:Ze({"--vp-vh":s.value+"px"}),ref_key:"main",ref:r},[h.headers.length>0?(a(),d("button",{key:0,onClick:c,class:I({open:o.value})},[p("span",Ho,N(i(nt)(i(t))),1),P[0]||(P[0]=p("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(a(),d("button",{key:1,onClick:y},N(i(t).returnToTopLabel||"Return to top"),1)),k(Pe,{name:"flyout"},{default:v(()=>[o.value?(a(),d("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:m},[p("div",Oo,[p("a",{class:"top-link",href:"#",onClick:y},N(i(t).returnToTopLabel||"Return to top"),1)]),p("div",Do,[k(ot,{headers:h.headers},null,8,["headers"])])],512)):_("",!0)]),_:1})],4))}}),Ro=$(Fo,[["__scopeId","data-v-168ddf5d"]]),Uo={class:"container"},jo=["aria-expanded"],zo={class:"menu-text"},Go=b({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(n){const{theme:e,frontmatter:t}=L(),{hasSidebar:o}=q(),{headers:s}=Bo(),{y:r}=Qe(),l=C(0);G(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),fe(()=>{s.value=Me(t.value.outline??e.value.outline)});const u=V(()=>s.value.length===0),c=V(()=>u.value&&!o.value),m=V(()=>({VPLocalNav:!0,"has-sidebar":o.value,empty:u.value,fixed:c.value}));return(y,h)=>i(t).layout!=="home"&&(!c.value||i(r)>=l.value)?(a(),d("div",{key:0,class:I(m.value)},[p("div",Uo,[i(o)?(a(),d("button",{key:0,class:"menu","aria-expanded":y.open,"aria-controls":"VPSidebarNav",onClick:h[0]||(h[0]=P=>y.$emit("open-menu"))},[h[1]||(h[1]=p("span",{class:"vpi-align-left menu-icon"},null,-1)),p("span",zo,N(i(e).sidebarMenuLabel||"Menu"),1)],8,jo)):_("",!0),k(Ro,{headers:i(s),navHeight:l.value},null,8,["headers","navHeight"])])],2)):_("",!0)}}),Ko=$(Go,[["__scopeId","data-v-070ab83d"]]);function qo(){const n=C(!1);function e(){n.value=!0,window.addEventListener("resize",s)}function t(){n.value=!1,window.removeEventListener("resize",s)}function o(){n.value?t():e()}function s(){window.outerWidth>=768&&t()}const r=pe();return z(()=>r.path,t),{isScreenOpen:n,openScreen:e,closeScreen:t,toggleScreen:o}}const Wo={},Jo={class:"VPSwitch",type:"button",role:"switch"},Xo={class:"check"},Yo={key:0,class:"icon"};function Zo(n,e){return a(),d("button",Jo,[p("span",Xo,[n.$slots.default?(a(),d("span",Yo,[f(n.$slots,"default",{},void 0,!0)])):_("",!0)])])}const Qo=$(Wo,[["render",Zo],["__scopeId","data-v-4a1c76db"]]),xo=b({__name:"VPSwitchAppearance",setup(n){const{isDark:e,theme:t}=L(),o=ee("toggle-appearance",()=>{e.value=!e.value}),s=C("");return Le(()=>{s.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(r,l)=>(a(),g(Qo,{title:s.value,class:"VPSwitchAppearance","aria-checked":i(e),onClick:i(o)},{default:v(()=>l[0]||(l[0]=[p("span",{class:"vpi-sun sun"},null,-1),p("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),Ne=$(xo,[["__scopeId","data-v-e40a8bb6"]]),es={key:0,class:"VPNavBarAppearance"},ts=b({__name:"VPNavBarAppearance",setup(n){const{site:e}=L();return(t,o)=>i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(a(),d("div",es,[k(Ne)])):_("",!0)}}),ns=$(ts,[["__scopeId","data-v-af096f4a"]]),Ie=C();let st=!1,me=0;function os(n){const e=C(!1);if(ve){!st&&ss(),me++;const t=z(Ie,o=>{var s,r,l;o===n.el.value||(s=n.el.value)!=null&&s.contains(o)?(e.value=!0,(r=n.onFocus)==null||r.call(n)):(e.value=!1,(l=n.onBlur)==null||l.call(n))});Ve(()=>{t(),me--,me||as()})}return yt(e)}function ss(){document.addEventListener("focusin",at),st=!0,Ie.value=document.activeElement}function as(){document.removeEventListener("focusin",at)}function at(){Ie.value=document.activeElement}const rs={class:"VPMenuLink"},is=["innerHTML"],ls=b({__name:"VPMenuLink",props:{item:{}},setup(n){const{page:e}=L();return(t,o)=>(a(),d("div",rs,[k(j,{class:I({active:i(Y)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon},{default:v(()=>[p("span",{innerHTML:t.item.text},null,8,is)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),he=$(ls,[["__scopeId","data-v-acbfed09"]]),cs={class:"VPMenuGroup"},us={key:0,class:"title"},ds=b({__name:"VPMenuGroup",props:{text:{},items:{}},setup(n){return(e,t)=>(a(),d("div",cs,[e.text?(a(),d("p",us,N(e.text),1)):_("",!0),(a(!0),d(A,null,O(e.items,o=>(a(),d(A,null,["link"in o?(a(),g(he,{key:0,item:o},null,8,["item"])):_("",!0)],64))),256))]))}}),fs=$(ds,[["__scopeId","data-v-48c802d0"]]),ps={class:"VPMenu"},vs={key:0,class:"items"},hs=b({__name:"VPMenu",props:{items:{}},setup(n){return(e,t)=>(a(),d("div",ps,[e.items?(a(),d("div",vs,[(a(!0),d(A,null,O(e.items,o=>(a(),d(A,{key:JSON.stringify(o)},["link"in o?(a(),g(he,{key:0,item:o},null,8,["item"])):"component"in o?(a(),g(U(o.component),W({key:1,ref_for:!0},o.props),null,16)):(a(),g(fs,{key:2,text:o.text,items:o.items},null,8,["text","items"]))],64))),128))])):_("",!0),f(e.$slots,"default",{},void 0,!0)]))}}),ms=$(hs,[["__scopeId","data-v-7dd3104a"]]),_s=["aria-expanded","aria-label"],bs={key:0,class:"text"},gs=["innerHTML"],ks={key:1,class:"vpi-more-horizontal icon"},$s={class:"menu"},ys=b({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(n){const e=C(!1),t=C();os({el:t,onBlur:o});function o(){e.value=!1}return(s,r)=>(a(),d("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=l=>e.value=!0),onMouseleave:r[2]||(r[2]=l=>e.value=!1)},[p("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":s.label,onClick:r[0]||(r[0]=l=>e.value=!e.value)},[s.button||s.icon?(a(),d("span",bs,[s.icon?(a(),d("span",{key:0,class:I([s.icon,"option-icon"])},null,2)):_("",!0),s.button?(a(),d("span",{key:1,innerHTML:s.button},null,8,gs)):_("",!0),r[3]||(r[3]=p("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(a(),d("span",ks))],8,_s),p("div",$s,[k(ms,{items:s.items},{default:v(()=>[f(s.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),Ae=$(ys,[["__scopeId","data-v-04f5c5e9"]]),Ps=["href","aria-label","innerHTML"],Ss=b({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(n){const e=n,t=C();G(async()=>{var r;await we();const s=(r=t.value)==null?void 0:r.children[0];s instanceof HTMLElement&&s.className.startsWith("vpi-social-")&&(getComputedStyle(s).maskImage||getComputedStyle(s).webkitMaskImage)==="none"&&s.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${e.icon}.svg')`)});const o=V(()=>typeof e.icon=="object"?e.icon.svg:``);return(s,r)=>(a(),d("a",{ref_key:"el",ref:t,class:"VPSocialLink no-icon",href:s.link,"aria-label":s.ariaLabel??(typeof s.icon=="string"?s.icon:""),target:"_blank",rel:"noopener",innerHTML:o.value},null,8,Ps))}}),Vs=$(Ss,[["__scopeId","data-v-d26d30cb"]]),Ls={class:"VPSocialLinks"},ws=b({__name:"VPSocialLinks",props:{links:{}},setup(n){return(e,t)=>(a(),d("div",Ls,[(a(!0),d(A,null,O(e.links,({link:o,icon:s,ariaLabel:r})=>(a(),g(Vs,{key:o,icon:s,link:o,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),Ee=$(ws,[["__scopeId","data-v-ee7a9424"]]),Ts={key:0,class:"group translations"},Cs={class:"trans-title"},Ms={key:1,class:"group"},Ns={class:"item appearance"},Is={class:"label"},As={class:"appearance-action"},Es={key:2,class:"group"},Bs={class:"item social-links"},Hs=b({__name:"VPNavBarExtra",setup(n){const{site:e,theme:t}=L(),{localeLinks:o,currentLang:s}=ne({correspondingLink:!0}),r=V(()=>o.value.length&&s.value.label||e.value.appearance||t.value.socialLinks);return(l,u)=>r.value?(a(),g(Ae,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:v(()=>[i(o).length&&i(s).label?(a(),d("div",Ts,[p("p",Cs,N(i(s).label),1),(a(!0),d(A,null,O(i(o),c=>(a(),g(he,{key:c.link,item:c},null,8,["item"]))),128))])):_("",!0),i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(a(),d("div",Ms,[p("div",Ns,[p("p",Is,N(i(t).darkModeSwitchLabel||"Appearance"),1),p("div",As,[k(Ne)])])])):_("",!0),i(t).socialLinks?(a(),d("div",Es,[p("div",Bs,[k(Ee,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):_("",!0)]),_:1})):_("",!0)}}),Os=$(Hs,[["__scopeId","data-v-925effce"]]),Ds=["aria-expanded"],Fs=b({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(n){return(e,t)=>(a(),d("button",{type:"button",class:I(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=o=>e.$emit("click"))},t[1]||(t[1]=[p("span",{class:"container"},[p("span",{class:"top"}),p("span",{class:"middle"}),p("span",{class:"bottom"})],-1)]),10,Ds))}}),Rs=$(Fs,[["__scopeId","data-v-5dea55bf"]]),Us=["innerHTML"],js=b({__name:"VPNavBarMenuLink",props:{item:{}},setup(n){const{page:e}=L();return(t,o)=>(a(),g(j,{class:I({VPNavBarMenuLink:!0,active:i(Y)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,tabindex:"0"},{default:v(()=>[p("span",{innerHTML:t.item.text},null,8,Us)]),_:1},8,["class","href","target","rel","no-icon"]))}}),zs=$(js,[["__scopeId","data-v-956ec74c"]]),rt=b({__name:"VPNavBarMenuGroup",props:{item:{}},setup(n){const e=n,{page:t}=L(),o=r=>"component"in r?!1:"link"in r?Y(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(o),s=V(()=>o(e.item));return(r,l)=>(a(),g(Ae,{class:I({VPNavBarMenuGroup:!0,active:i(Y)(i(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||s.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),Gs={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Ks=b({__name:"VPNavBarMenu",setup(n){const{theme:e}=L();return(t,o)=>i(e).nav?(a(),d("nav",Gs,[o[0]||(o[0]=p("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(a(!0),d(A,null,O(i(e).nav,s=>(a(),d(A,{key:JSON.stringify(s)},["link"in s?(a(),g(zs,{key:0,item:s},null,8,["item"])):"component"in s?(a(),g(U(s.component),W({key:1,ref_for:!0},s.props),null,16)):(a(),g(rt,{key:2,item:s},null,8,["item"]))],64))),128))])):_("",!0)}}),qs=$(Ks,[["__scopeId","data-v-e6d46098"]]);function Ws(n){const{localeIndex:e,theme:t}=L();function o(s){var T,E,w;const r=s.split("."),l=(T=t.value.search)==null?void 0:T.options,u=l&&typeof l=="object",c=u&&((w=(E=l.locales)==null?void 0:E[e.value])==null?void 0:w.translations)||null,m=u&&l.translations||null;let y=c,h=m,P=n;const S=r.pop();for(const B of r){let F=null;const D=P==null?void 0:P[B];D&&(F=P=D);const Q=h==null?void 0:h[B];Q&&(F=h=Q);const H=y==null?void 0:y[B];H&&(F=y=H),D||(P=F),Q||(h=F),H||(y=F)}return(y==null?void 0:y[S])??(h==null?void 0:h[S])??(P==null?void 0:P[S])??""}return o}const Js=["aria-label"],Xs={class:"DocSearch-Button-Container"},Ys={class:"DocSearch-Button-Placeholder"},Re=b({__name:"VPNavBarSearchButton",setup(n){const t=Ws({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(o,s)=>(a(),d("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(t)("button.buttonAriaLabel")},[p("span",Xs,[s[0]||(s[0]=p("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),p("span",Ys,N(i(t)("button.buttonText")),1)]),s[1]||(s[1]=p("span",{class:"DocSearch-Button-Keys"},[p("kbd",{class:"DocSearch-Button-Key"}),p("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,Js))}}),Zs={class:"VPNavBarSearch"},Qs={id:"local-search"},xs={key:1,id:"docsearch"},ea=b({__name:"VPNavBarSearch",setup(n){const e=Pt(()=>St(()=>import("./VPLocalSearchBox.BOox_SFc.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:o}=L(),s=C(!1),r=C(!1);G(()=>{});function l(){s.value||(s.value=!0,setTimeout(u,16))}function u(){const h=new Event("keydown");h.key="k",h.metaKey=!0,window.dispatchEvent(h),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||u()},16)}function c(h){const P=h.target,S=P.tagName;return P.isContentEditable||S==="INPUT"||S==="SELECT"||S==="TEXTAREA"}const m=C(!1);be("k",h=>{(h.ctrlKey||h.metaKey)&&(h.preventDefault(),m.value=!0)}),be("/",h=>{c(h)||(h.preventDefault(),m.value=!0)});const y="local";return(h,P)=>{var S;return a(),d("div",Zs,[i(y)==="local"?(a(),d(A,{key:0},[m.value?(a(),g(i(e),{key:0,onClose:P[0]||(P[0]=T=>m.value=!1)})):_("",!0),p("div",Qs,[k(Re,{onClick:P[1]||(P[1]=T=>m.value=!0)})])],64)):i(y)==="algolia"?(a(),d(A,{key:1},[s.value?(a(),g(i(t),{key:0,algolia:((S=i(o).search)==null?void 0:S.options)??i(o).algolia,onVnodeBeforeMount:P[2]||(P[2]=T=>r.value=!0)},null,8,["algolia"])):_("",!0),r.value?_("",!0):(a(),d("div",xs,[k(Re,{onClick:l})]))],64)):_("",!0)])}}}),ta=b({__name:"VPNavBarSocialLinks",setup(n){const{theme:e}=L();return(t,o)=>i(e).socialLinks?(a(),g(Ee,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):_("",!0)}}),na=$(ta,[["__scopeId","data-v-164c457f"]]),oa=["href","rel","target"],sa=["innerHTML"],aa={key:2},ra=b({__name:"VPNavBarTitle",setup(n){const{site:e,theme:t}=L(),{hasSidebar:o}=q(),{currentLang:s}=ne(),r=V(()=>{var c;return typeof t.value.logoLink=="string"?t.value.logoLink:(c=t.value.logoLink)==null?void 0:c.link}),l=V(()=>{var c;return typeof t.value.logoLink=="string"||(c=t.value.logoLink)==null?void 0:c.rel}),u=V(()=>{var c;return typeof t.value.logoLink=="string"||(c=t.value.logoLink)==null?void 0:c.target});return(c,m)=>(a(),d("div",{class:I(["VPNavBarTitle",{"has-sidebar":i(o)}])},[p("a",{class:"title",href:r.value??i(Ce)(i(s).link),rel:l.value,target:u.value},[f(c.$slots,"nav-bar-title-before",{},void 0,!0),i(t).logo?(a(),g(ce,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):_("",!0),i(t).siteTitle?(a(),d("span",{key:1,innerHTML:i(t).siteTitle},null,8,sa)):i(t).siteTitle===void 0?(a(),d("span",aa,N(i(e).title),1)):_("",!0),f(c.$slots,"nav-bar-title-after",{},void 0,!0)],8,oa)],2))}}),ia=$(ra,[["__scopeId","data-v-0f4f798b"]]),la={class:"items"},ca={class:"title"},ua=b({__name:"VPNavBarTranslations",setup(n){const{theme:e}=L(),{localeLinks:t,currentLang:o}=ne({correspondingLink:!0});return(s,r)=>i(t).length&&i(o).label?(a(),g(Ae,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(e).langMenuLabel||"Change language"},{default:v(()=>[p("div",la,[p("p",ca,N(i(o).label),1),(a(!0),d(A,null,O(i(t),l=>(a(),g(he,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):_("",!0)}}),da=$(ua,[["__scopeId","data-v-c80d9ad0"]]),fa={class:"wrapper"},pa={class:"container"},va={class:"title"},ha={class:"content"},ma={class:"content-body"},_a=b({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(n){const e=n,{y:t}=Qe(),{hasSidebar:o}=q(),{frontmatter:s}=L(),r=C({});return Le(()=>{r.value={"has-sidebar":o.value,home:s.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,u)=>(a(),d("div",{class:I(["VPNavBar",r.value])},[p("div",fa,[p("div",pa,[p("div",va,[k(ia,null,{"nav-bar-title-before":v(()=>[f(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[f(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),p("div",ha,[p("div",ma,[f(l.$slots,"nav-bar-content-before",{},void 0,!0),k(ea,{class:"search"}),k(qs,{class:"menu"}),k(da,{class:"translations"}),k(ns,{class:"appearance"}),k(na,{class:"social-links"}),k(Os,{class:"extra"}),f(l.$slots,"nav-bar-content-after",{},void 0,!0),k(Rs,{class:"hamburger",active:l.isScreenOpen,onClick:u[0]||(u[0]=c=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),u[1]||(u[1]=p("div",{class:"divider"},[p("div",{class:"divider-line"})],-1))],2))}}),ba=$(_a,[["__scopeId","data-v-822684d1"]]),ga={key:0,class:"VPNavScreenAppearance"},ka={class:"text"},$a=b({__name:"VPNavScreenAppearance",setup(n){const{site:e,theme:t}=L();return(o,s)=>i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(a(),d("div",ga,[p("p",ka,N(i(t).darkModeSwitchLabel||"Appearance"),1),k(Ne)])):_("",!0)}}),ya=$($a,[["__scopeId","data-v-ffb44008"]]),Pa=["innerHTML"],Sa=b({__name:"VPNavScreenMenuLink",props:{item:{}},setup(n){const e=ee("close-screen");return(t,o)=>(a(),g(j,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:i(e)},{default:v(()=>[p("span",{innerHTML:t.item.text},null,8,Pa)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Va=$(Sa,[["__scopeId","data-v-735512b8"]]),La=["innerHTML"],wa=b({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(n){const e=ee("close-screen");return(t,o)=>(a(),g(j,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:i(e)},{default:v(()=>[p("span",{innerHTML:t.item.text},null,8,La)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),it=$(wa,[["__scopeId","data-v-372ae7c0"]]),Ta={class:"VPNavScreenMenuGroupSection"},Ca={key:0,class:"title"},Ma=b({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(n){return(e,t)=>(a(),d("div",Ta,[e.text?(a(),d("p",Ca,N(e.text),1)):_("",!0),(a(!0),d(A,null,O(e.items,o=>(a(),g(it,{key:o.text,item:o},null,8,["item"]))),128))]))}}),Na=$(Ma,[["__scopeId","data-v-4b8941ac"]]),Ia=["aria-controls","aria-expanded"],Aa=["innerHTML"],Ea=["id"],Ba={key:0,class:"item"},Ha={key:1,class:"item"},Oa={key:2,class:"group"},Da=b({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(n){const e=n,t=C(!1),o=V(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function s(){t.value=!t.value}return(r,l)=>(a(),d("div",{class:I(["VPNavScreenMenuGroup",{open:t.value}])},[p("button",{class:"button","aria-controls":o.value,"aria-expanded":t.value,onClick:s},[p("span",{class:"button-text",innerHTML:r.text},null,8,Aa),l[0]||(l[0]=p("span",{class:"vpi-plus button-icon"},null,-1))],8,Ia),p("div",{id:o.value,class:"items"},[(a(!0),d(A,null,O(r.items,u=>(a(),d(A,{key:JSON.stringify(u)},["link"in u?(a(),d("div",Ba,[k(it,{item:u},null,8,["item"])])):"component"in u?(a(),d("div",Ha,[(a(),g(U(u.component),W({ref_for:!0},u.props,{"screen-menu":""}),null,16))])):(a(),d("div",Oa,[k(Na,{text:u.text,items:u.items},null,8,["text","items"])]))],64))),128))],8,Ea)],2))}}),lt=$(Da,[["__scopeId","data-v-875057a5"]]),Fa={key:0,class:"VPNavScreenMenu"},Ra=b({__name:"VPNavScreenMenu",setup(n){const{theme:e}=L();return(t,o)=>i(e).nav?(a(),d("nav",Fa,[(a(!0),d(A,null,O(i(e).nav,s=>(a(),d(A,{key:JSON.stringify(s)},["link"in s?(a(),g(Va,{key:0,item:s},null,8,["item"])):"component"in s?(a(),g(U(s.component),W({key:1,ref_for:!0},s.props,{"screen-menu":""}),null,16)):(a(),g(lt,{key:2,text:s.text||"",items:s.items},null,8,["text","items"]))],64))),128))])):_("",!0)}}),Ua=b({__name:"VPNavScreenSocialLinks",setup(n){const{theme:e}=L();return(t,o)=>i(e).socialLinks?(a(),g(Ee,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):_("",!0)}}),ja={class:"list"},za=b({__name:"VPNavScreenTranslations",setup(n){const{localeLinks:e,currentLang:t}=ne({correspondingLink:!0}),o=C(!1);function s(){o.value=!o.value}return(r,l)=>i(e).length&&i(t).label?(a(),d("div",{key:0,class:I(["VPNavScreenTranslations",{open:o.value}])},[p("button",{class:"title",onClick:s},[l[0]||(l[0]=p("span",{class:"vpi-languages icon lang"},null,-1)),X(" "+N(i(t).label)+" ",1),l[1]||(l[1]=p("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),p("ul",ja,[(a(!0),d(A,null,O(i(e),u=>(a(),d("li",{key:u.link,class:"item"},[k(j,{class:"link",href:u.link},{default:v(()=>[X(N(u.text),1)]),_:2},1032,["href"])]))),128))])],2)):_("",!0)}}),Ga=$(za,[["__scopeId","data-v-362991c2"]]),Ka={class:"container"},qa=b({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(n){const e=C(null),t=xe(ve?document.body:null);return(o,s)=>(a(),g(Pe,{name:"fade",onEnter:s[0]||(s[0]=r=>t.value=!0),onAfterLeave:s[1]||(s[1]=r=>t.value=!1)},{default:v(()=>[o.open?(a(),d("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[p("div",Ka,[f(o.$slots,"nav-screen-content-before",{},void 0,!0),k(Ra,{class:"menu"}),k(Ga,{class:"translations"}),k(ya,{class:"appearance"}),k(Ua,{class:"social-links"}),f(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):_("",!0)]),_:3}))}}),Wa=$(qa,[["__scopeId","data-v-833aabba"]]),Ja={key:0,class:"VPNav"},Xa=b({__name:"VPNav",setup(n){const{isScreenOpen:e,closeScreen:t,toggleScreen:o}=qo(),{frontmatter:s}=L(),r=V(()=>s.value.navbar!==!1);return Te("close-screen",t),de(()=>{ve&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(l,u)=>r.value?(a(),d("header",Ja,[k(ba,{"is-screen-open":i(e),onToggleScreen:i(o)},{"nav-bar-title-before":v(()=>[f(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[f(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[f(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[f(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),k(Wa,{open:i(e)},{"nav-screen-content-before":v(()=>[f(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[f(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):_("",!0)}}),Ya=$(Xa,[["__scopeId","data-v-f1e365da"]]),Za=["role","tabindex"],Qa={key:1,class:"items"},xa=b({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(n){const e=n,{collapsed:t,collapsible:o,isLink:s,isActiveLink:r,hasActiveLink:l,hasChildren:u,toggle:c}=Jt(V(()=>e.item)),m=V(()=>u.value?"section":"div"),y=V(()=>s.value?"a":"div"),h=V(()=>u.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=V(()=>s.value?void 0:"button"),S=V(()=>[[`level-${e.depth}`],{collapsible:o.value},{collapsed:t.value},{"is-link":s.value},{"is-active":r.value},{"has-active":l.value}]);function T(w){"key"in w&&w.key!=="Enter"||!e.item.link&&c()}function E(){e.item.link&&c()}return(w,B)=>{const F=Z("VPSidebarItem",!0);return a(),g(U(m.value),{class:I(["VPSidebarItem",S.value])},{default:v(()=>[w.item.text?(a(),d("div",W({key:0,class:"item",role:P.value},Vt(w.item.items?{click:T,keydown:T}:{},!0),{tabindex:w.item.items&&0}),[B[1]||(B[1]=p("div",{class:"indicator"},null,-1)),w.item.link?(a(),g(j,{key:0,tag:y.value,class:"link",href:w.item.link,rel:w.item.rel,target:w.item.target},{default:v(()=>[(a(),g(U(h.value),{class:"text",innerHTML:w.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),g(U(h.value),{key:1,class:"text",innerHTML:w.item.text},null,8,["innerHTML"])),w.item.collapsed!=null&&w.item.items&&w.item.items.length?(a(),d("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:E,onKeydown:Lt(E,["enter"]),tabindex:"0"},B[0]||(B[0]=[p("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):_("",!0)],16,Za)):_("",!0),w.item.items&&w.item.items.length?(a(),d("div",Qa,[w.depth<5?(a(!0),d(A,{key:0},O(w.item.items,D=>(a(),g(F,{key:D.text,item:D,depth:w.depth+1},null,8,["item","depth"]))),128)):_("",!0)])):_("",!0)]),_:1},8,["class"])}}}),er=$(xa,[["__scopeId","data-v-a4b0d9bf"]]),tr=b({__name:"VPSidebarGroup",props:{items:{}},setup(n){const e=C(!0);let t=null;return G(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),wt(()=>{t!=null&&(clearTimeout(t),t=null)}),(o,s)=>(a(!0),d(A,null,O(o.items,r=>(a(),d("div",{key:r.text,class:I(["group",{"no-transition":e.value}])},[k(er,{item:r,depth:0},null,8,["item"])],2))),128))}}),nr=$(tr,[["__scopeId","data-v-9e426adc"]]),or={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},sr=b({__name:"VPSidebar",props:{open:{type:Boolean}},setup(n){const{sidebarGroups:e,hasSidebar:t}=q(),o=n,s=C(null),r=xe(ve?document.body:null);z([o,s],()=>{var u;o.open?(r.value=!0,(u=s.value)==null||u.focus()):r.value=!1},{immediate:!0,flush:"post"});const l=C(0);return z(e,()=>{l.value+=1},{deep:!0}),(u,c)=>i(t)?(a(),d("aside",{key:0,class:I(["VPSidebar",{open:u.open}]),ref_key:"navEl",ref:s,onClick:c[0]||(c[0]=Tt(()=>{},["stop"]))},[c[2]||(c[2]=p("div",{class:"curtain"},null,-1)),p("nav",or,[c[1]||(c[1]=p("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),f(u.$slots,"sidebar-nav-before",{},void 0,!0),(a(),g(nr,{items:i(e),key:l.value},null,8,["items"])),f(u.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):_("",!0)}}),ar=$(sr,[["__scopeId","data-v-18756405"]]),rr=b({__name:"VPSkipLink",setup(n){const{theme:e}=L(),t=pe(),o=C();z(()=>t.path,()=>o.value.focus());function s({target:r}){const l=document.getElementById(decodeURIComponent(r.hash).slice(1));if(l){const u=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",u)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",u),l.focus(),window.scrollTo(0,0)}}return(r,l)=>(a(),d(A,null,[p("span",{ref_key:"backToTop",ref:o,tabindex:"-1"},null,512),p("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s},N(i(e).skipToContentLabel||"Skip to content"),1)],64))}}),ir=$(rr,[["__scopeId","data-v-492508fc"]]),lr=b({__name:"Layout",setup(n){const{isOpen:e,open:t,close:o}=q(),s=pe();z(()=>s.path,o),Wt(e,o);const{frontmatter:r}=L(),l=et(),u=V(()=>!!l["home-hero-image"]);return Te("hero-image-slot-exists",u),(c,m)=>{const y=Z("Content");return i(r).layout!==!1?(a(),d("div",{key:0,class:I(["Layout",i(r).pageClass])},[f(c.$slots,"layout-top",{},void 0,!0),k(ir),k(Et,{class:"backdrop",show:i(e),onClick:i(o)},null,8,["show","onClick"]),k(Ya,null,{"nav-bar-title-before":v(()=>[f(c.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[f(c.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[f(c.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[f(c.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":v(()=>[f(c.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[f(c.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),k(Ko,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),k(ar,{open:i(e)},{"sidebar-nav-before":v(()=>[f(c.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":v(()=>[f(c.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),k(Co,null,{"page-top":v(()=>[f(c.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[f(c.$slots,"page-bottom",{},void 0,!0)]),"not-found":v(()=>[f(c.$slots,"not-found",{},void 0,!0)]),"home-hero-before":v(()=>[f(c.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[f(c.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[f(c.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[f(c.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[f(c.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[f(c.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[f(c.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[f(c.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[f(c.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":v(()=>[f(c.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[f(c.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[f(c.$slots,"doc-after",{},void 0,!0)]),"doc-top":v(()=>[f(c.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[f(c.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":v(()=>[f(c.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[f(c.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[f(c.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[f(c.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[f(c.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[f(c.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),k(Eo),f(c.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),g(y,{key:1}))}}}),cr=$(lr,[["__scopeId","data-v-a9a9e638"]]),Ue={Layout:cr,enhanceApp:({app:n})=>{n.component("Badge",Nt)}},ur=b({__name:"VersionPicker",props:{screenMenu:{type:Boolean}},setup(n){const e=C([]),t=C("Versions"),o=C(!1);Je();const s=()=>typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"),r=()=>{if(typeof window>"u")return"";const{origin:c,pathname:m}=window.location;if(c.includes("github.io")){const y=m.split("/").filter(Boolean),h=y.length>0?`/${y[0]}`:"";return`${c}${h}`}else return c},l=()=>new Promise(c=>{if(s()){c(!1);return}const m=setInterval(()=>{window.DOC_VERSIONS&&window.DOCUMENTER_CURRENT_VERSION&&(clearInterval(m),c(!0))},100);setTimeout(()=>{clearInterval(m),c(!1)},5e3)});return G(async()=>{if(!(typeof window>"u")){try{if(s()){const c=["dev"];e.value=c.map(m=>({text:m,link:"/"})),t.value="dev"}else{const c=await l(),m=V(()=>r());if(c&&window.DOC_VERSIONS&&window.DOCUMENTER_CURRENT_VERSION)e.value=window.DOC_VERSIONS.map(y=>({text:y,link:`${m.value}/${y}/`})),t.value=window.DOCUMENTER_CURRENT_VERSION;else{const y=["dev"];e.value=y.map(h=>({text:h,link:`${m.value}/${h}/`})),t.value="dev"}}}catch(c){console.warn("Error loading versions:",c);const m=["dev"],y=V(()=>r());e.value=m.map(h=>({text:h,link:`${y.value}/${h}/`})),t.value="dev"}o.value=!0}}),(c,m)=>o.value?(a(),d(A,{key:0},[!c.screenMenu&&e.value.length>0?(a(),g(rt,{key:0,item:{text:t.value,items:e.value},class:"VPVersionPicker"},null,8,["item"])):c.screenMenu&&e.value.length>0?(a(),g(lt,{key:1,text:t.value,items:e.value,class:"VPVersionPicker"},null,8,["text","items"])):_("",!0)],64)):_("",!0)}}),dr=$(ur,[["__scopeId","data-v-44adf51f"]]);function fr(n){return Math.abs(n=Math.round(n))>=1e21?n.toLocaleString("en").replace(/,/g,""):n.toString(10)}function ue(n,e){if((t=(n=e?n.toExponential(e-1):n.toExponential()).indexOf("e"))<0)return null;var t,o=n.slice(0,t);return[o.length>1?o[0]+o.slice(2):o,+n.slice(t+1)]}function pr(n){return n=ue(Math.abs(n)),n?n[1]:NaN}function vr(n,e){return function(t,o){for(var s=t.length,r=[],l=0,u=n[0],c=0;s>0&&u>0&&(c+u+1>o&&(u=Math.max(1,o-c)),r.push(t.substring(s-=u,s+u)),!((c+=u+1)>o));)u=n[l=(l+1)%n.length];return r.reverse().join(e)}}function hr(n){return function(e){return e.replace(/[0-9]/g,function(t){return n[+t]})}}var mr=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function ye(n){if(!(e=mr.exec(n)))throw new Error("invalid format: "+n);var e;return new Be({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}ye.prototype=Be.prototype;function Be(n){this.fill=n.fill===void 0?" ":n.fill+"",this.align=n.align===void 0?">":n.align+"",this.sign=n.sign===void 0?"-":n.sign+"",this.symbol=n.symbol===void 0?"":n.symbol+"",this.zero=!!n.zero,this.width=n.width===void 0?void 0:+n.width,this.comma=!!n.comma,this.precision=n.precision===void 0?void 0:+n.precision,this.trim=!!n.trim,this.type=n.type===void 0?"":n.type+""}Be.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function _r(n){e:for(var e=n.length,t=1,o=-1,s;t0&&(o=0);break}return o>0?n.slice(0,o)+n.slice(s+1):n}var ct;function br(n,e){var t=ue(n,e);if(!t)return n+"";var o=t[0],s=t[1],r=s-(ct=Math.max(-8,Math.min(8,Math.floor(s/3)))*3)+1,l=o.length;return r===l?o:r>l?o+new Array(r-l+1).join("0"):r>0?o.slice(0,r)+"."+o.slice(r):"0."+new Array(1-r).join("0")+ue(n,Math.max(0,e+r-1))[0]}function je(n,e){var t=ue(n,e);if(!t)return n+"";var o=t[0],s=t[1];return s<0?"0."+new Array(-s).join("0")+o:o.length>s+1?o.slice(0,s+1)+"."+o.slice(s+1):o+new Array(s-o.length+2).join("0")}const ze={"%":(n,e)=>(n*100).toFixed(e),b:n=>Math.round(n).toString(2),c:n=>n+"",d:fr,e:(n,e)=>n.toExponential(e),f:(n,e)=>n.toFixed(e),g:(n,e)=>n.toPrecision(e),o:n=>Math.round(n).toString(8),p:(n,e)=>je(n*100,e),r:je,s:br,X:n=>Math.round(n).toString(16).toUpperCase(),x:n=>Math.round(n).toString(16)};function Ge(n){return n}var Ke=Array.prototype.map,qe=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function gr(n){var e=n.grouping===void 0||n.thousands===void 0?Ge:vr(Ke.call(n.grouping,Number),n.thousands+""),t=n.currency===void 0?"":n.currency[0]+"",o=n.currency===void 0?"":n.currency[1]+"",s=n.decimal===void 0?".":n.decimal+"",r=n.numerals===void 0?Ge:hr(Ke.call(n.numerals,String)),l=n.percent===void 0?"%":n.percent+"",u=n.minus===void 0?"−":n.minus+"",c=n.nan===void 0?"NaN":n.nan+"";function m(h){h=ye(h);var P=h.fill,S=h.align,T=h.sign,E=h.symbol,w=h.zero,B=h.width,F=h.comma,D=h.precision,Q=h.trim,H=h.type;H==="n"?(F=!0,H="g"):ze[H]||(D===void 0&&(D=12),Q=!0,H="g"),(w||P==="0"&&S==="=")&&(w=!0,P="0",S="=");var vt=E==="$"?t:E==="#"&&/[boxX]/.test(H)?"0"+H.toLowerCase():"",ht=E==="$"?o:/[%p]/.test(H)?l:"",He=ze[H],mt=/[defgprs%]/.test(H);D=D===void 0?6:/[gprs]/.test(H)?Math.max(1,Math.min(21,D)):Math.max(0,Math.min(20,D));function Oe(M){var J=vt,R=ht,x,De,oe;if(H==="c")R=He(M)+R,M="";else{M=+M;var se=M<0||1/M<0;if(M=isNaN(M)?c:He(Math.abs(M),D),Q&&(M=_r(M)),se&&+M==0&&T!=="+"&&(se=!1),J=(se?T==="("?T:u:T==="-"||T==="("?"":T)+J,R=(H==="s"?qe[8+ct/3]:"")+R+(se&&T==="("?")":""),mt){for(x=-1,De=M.length;++xoe||oe>57){R=(oe===46?s+M.slice(x+1):M.slice(x))+R,M=M.slice(0,x);break}}}F&&!w&&(M=e(M,1/0));var ae=J.length+M.length+R.length,K=ae>1)+J+M+R+K.slice(ae);break;default:M=K+J+M+R;break}return r(M)}return Oe.toString=function(){return h+""},Oe}function y(h,P){var S=m((h=ye(h),h.type="f",h)),T=Math.max(-8,Math.min(8,Math.floor(pr(P)/3)))*3,E=Math.pow(10,-T),w=qe[8+T/3];return function(B){return S(E*B)+w}}return{format:m,formatPrefix:y}}var re,ut;kr({thousands:",",grouping:[3],currency:["$",""]});function kr(n){return re=gr(n),re.format,ut=re.formatPrefix,re}const ie=JSON.parse("222"),$r=["title"],yr={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"20",height:"20",fill:"currentColor",style:{"vertical-align":"middle","margin-right":"0.25rem","margin-left":"0.5rem"}},Pr=["title"],Sr={__name:"StarUs",setup(n){const e=ie?ut(".1s",1e3)(ie):"";return(t,o)=>(a(),d(A,null,[p("a",{target:"_blank","data-decoration":"★",title:i(ie).toLocaleString("en-US").concat(" GitHub stars"),href:"https://github.com/rafaqz/Rasters.jl"},[(a(),d("svg",yr,o[0]||(o[0]=[p("path",{d:"M12 .297C5.375.297 0 5.673 0 12.3c0 5.292 3.438 9.8 8.207 11.387.6.11.793-.26.793-.577 0-.285-.01-1.04-.015-2.04-3.338.727-4.042-1.61-4.042-1.61-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.807 1.305 3.493.997.107-.774.42-1.305.762-1.605-2.665-.3-5.467-1.333-5.467-5.931 0-1.31.47-2.382 1.236-3.222-.123-.303-.535-1.52.117-3.166 0 0 1.01-.323 3.31 1.23.96-.267 1.98-.4 3-.405 1.02.005 2.04.138 3 .405 2.3-1.553 3.31-1.23 3.31-1.23.653 1.646.24 2.863.117 3.166.765.84 1.236 1.912 1.236 3.222 0 4.61-2.807 5.625-5.477 5.921.43.372.823 1.102.823 2.222 0 1.606-.015 2.902-.015 3.293 0 .32.192.693.8.577C20.565 22.1 24 17.588 24 12.297 24 5.673 18.627.297 12 .297z"},null,-1)]))),p("span",null,N(i(e)),1)],8,$r),p("a",{class:"mobile",target:"_blank",title:i(ie).toLocaleString("en-US").concat(" GitHub stars"),href:"https://github.com/rafaqz/Rasters.jl"},o[1]||(o[1]=[p("svg",{xmlns:"http://www.w3.org/2000/svg",width:"21",height:"21",viewBox:"0 0 21 21",fill:"none"},[p("path",{d:"M19.625 5.60534C18.7083 4.03477 17.4649 2.79135 15.8945 1.87479C14.3238 0.958185 12.6091 0.5 10.7492 0.5C8.88947 0.5 7.17422 0.958325 5.60388 1.87479C4.0333 2.7913 2.78997 4.03477 1.87332 5.60534C0.956814 7.17587 0.498535 8.89089 0.498535 10.7504C0.498535 12.984 1.15021 14.9926 2.4539 16.7766C3.75744 18.5607 5.44142 19.7952 7.50571 20.4803C7.746 20.5249 7.92388 20.4936 8.03954 20.387C8.15524 20.2804 8.21302 20.1467 8.21302 19.9868C8.21302 19.9601 8.21073 19.7199 8.20629 19.266C8.20171 18.8122 8.19956 18.4162 8.19956 18.0783L7.89256 18.1315C7.69682 18.1673 7.44989 18.1825 7.15178 18.1782C6.8538 18.174 6.54446 18.1428 6.22419 18.0847C5.90377 18.0272 5.60575 17.8937 5.32988 17.6846C5.05416 17.4755 4.85842 17.2018 4.74272 16.8639L4.60925 16.5568C4.52029 16.3523 4.38023 16.1251 4.18888 15.8761C3.99754 15.6269 3.80405 15.458 3.60831 15.369L3.51486 15.3021C3.45259 15.2577 3.39481 15.204 3.34138 15.1418C3.28799 15.0796 3.24802 15.0173 3.22132 14.955C3.19458 14.8926 3.21674 14.8414 3.28804 14.8012C3.35933 14.761 3.48817 14.7416 3.67512 14.7416L3.94196 14.7814C4.11993 14.8171 4.34007 14.9236 4.60266 15.1017C4.86511 15.2796 5.08085 15.5109 5.24994 15.7956C5.4547 16.1605 5.7014 16.4385 5.99072 16.6299C6.27982 16.8212 6.5713 16.9167 6.86488 16.9167C7.15846 16.9167 7.41203 16.8945 7.62567 16.8502C7.83908 16.8057 8.0393 16.7388 8.22625 16.6499C8.30633 16.0535 8.52437 15.5953 8.88017 15.275C8.37304 15.2217 7.9171 15.1414 7.51212 15.0347C7.10736 14.9278 6.6891 14.7544 6.25761 14.5139C5.82589 14.2738 5.46774 13.9756 5.18309 13.6198C4.89839 13.2639 4.66474 12.7966 4.48247 12.2183C4.3001 11.6399 4.20889 10.9726 4.20889 10.2163C4.20889 9.13941 4.56044 8.22304 5.26341 7.46665C4.93411 6.65705 4.96519 5.74947 5.35676 4.744C5.61482 4.66382 5.9975 4.72399 6.50463 4.92412C7.01186 5.12434 7.38323 5.29587 7.61912 5.43808C7.85502 5.58024 8.04402 5.70071 8.18642 5.79842C9.01411 5.56715 9.86825 5.45149 10.7491 5.45149C11.6299 5.45149 12.4843 5.56715 13.312 5.79842L13.8192 5.47823C14.166 5.26459 14.5756 5.06881 15.0469 4.89083C15.5185 4.71295 15.8791 4.66396 16.1284 4.74414C16.5286 5.74966 16.5643 6.65719 16.2349 7.46679C16.9378 8.22318 17.2895 9.13978 17.2895 10.2164C17.2895 10.9727 17.198 11.6421 17.0159 12.225C16.8336 12.808 16.5979 13.2749 16.3088 13.6265C16.0194 13.9781 15.659 14.274 15.2275 14.5141C14.7959 14.7544 14.3775 14.9278 13.9728 15.0347C13.5678 15.1415 13.1119 15.2219 12.6047 15.2752C13.0673 15.6755 13.2986 16.3073 13.2986 17.1704V19.9864C13.2986 20.1464 13.3542 20.2799 13.4656 20.3867C13.5768 20.4932 13.7524 20.5246 13.9927 20.4799C16.0573 19.7949 17.7413 18.5603 19.0448 16.7762C20.3481 14.9922 21 12.9837 21 10.75C20.9996 8.89075 20.541 7.17587 19.625 5.60534Z",fill:"currentColor"})],-1)]),8,Pr)],64))}},Vr=$(Sr,[["__scopeId","data-v-387d6b08"]]),Lr=n=>{if(typeof document>"u")return{stabilizeScrollPosition:s=>async(...r)=>s(...r)};const e=document.documentElement;return{stabilizeScrollPosition:o=>async(...s)=>{const r=o(...s),l=n.value;if(!l)return r;const u=l.offsetTop-e.scrollTop;return await we(),e.scrollTop=l.offsetTop-u,r}}},dt="vitepress:tabSharedState",te=typeof localStorage<"u"?localStorage:null,ft="vitepress:tabsSharedState",wr=()=>{const n=te==null?void 0:te.getItem(ft);if(n)try{return JSON.parse(n)}catch{}return{}},Tr=n=>{te&&te.setItem(ft,JSON.stringify(n))},Cr=n=>{const e=Ct({});z(()=>e.content,(t,o)=>{t&&o&&Tr(t)},{deep:!0}),n.provide(dt,e)},Mr=(n,e)=>{const t=ee(dt);if(!t)throw new Error("[vitepress-plugin-tabs] TabsSharedState should be injected");G(()=>{t.content||(t.content=wr())});const o=C(),s=V({get(){var c;const l=e.value,u=n.value;if(l){const m=(c=t.content)==null?void 0:c[l];if(m&&u.includes(m))return m}else{const m=o.value;if(m)return m}return u[0]},set(l){const u=e.value;u?t.content&&(t.content[u]=l):o.value=l}});return{selected:s,select:l=>{s.value=l}}};let We=0;const Nr=()=>(We++,""+We);function Ir(){const n=et();return V(()=>{var o;const t=(o=n.default)==null?void 0:o.call(n);return t?t.filter(s=>typeof s.type=="object"&&"__name"in s.type&&s.type.__name==="PluginTabsTab"&&s.props).map(s=>{var r;return(r=s.props)==null?void 0:r.label}):[]})}const pt="vitepress:tabSingleState",Ar=n=>{Te(pt,n)},Er=()=>{const n=ee(pt);if(!n)throw new Error("[vitepress-plugin-tabs] TabsSingleState should be injected");return n},Br={class:"plugin-tabs"},Hr=["id","aria-selected","aria-controls","tabindex","onClick"],Or=b({__name:"PluginTabs",props:{sharedStateKey:{}},setup(n){const e=n,t=Ir(),{selected:o,select:s}=Mr(t,Mt(e,"sharedStateKey")),r=C(),{stabilizeScrollPosition:l}=Lr(r),u=l(s),c=C([]),m=h=>{var T;const P=t.value.indexOf(o.value);let S;h.key==="ArrowLeft"?S=P>=1?P-1:t.value.length-1:h.key==="ArrowRight"&&(S=P(a(),d("div",Br,[p("div",{ref_key:"tablist",ref:r,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:m},[(a(!0),d(A,null,O(i(t),S=>(a(),d("button",{id:`tab-${S}-${i(y)}`,ref_for:!0,ref_key:"buttonRefs",ref:c,key:S,role:"tab",class:"plugin-tabs--tab","aria-selected":S===i(o),"aria-controls":`panel-${S}-${i(y)}`,tabindex:S===i(o)?0:-1,onClick:()=>i(u)(S)},N(S),9,Hr))),128))],544),f(h.$slots,"default")]))}}),Dr=["id","aria-labelledby"],Fr=b({__name:"PluginTabsTab",props:{label:{}},setup(n){const{uid:e,selected:t}=Er();return(o,s)=>i(t)===o.label?(a(),d("div",{key:0,id:`panel-${o.label}-${i(e)}`,class:"plugin-tabs--content",role:"tabpanel",tabindex:"0","aria-labelledby":`tab-${o.label}-${i(e)}`},[f(o.$slots,"default",{},void 0,!0)],8,Dr)):_("",!0)}}),Rr=$(Fr,[["__scopeId","data-v-9b0d03d2"]]),Ur=n=>{Cr(n),n.component("PluginTabs",Or),n.component("PluginTabsTab",Rr)},zr={extends:Ue,Layout(){return Fe(Ue.Layout,null,{"nav-bar-content-after":()=>Fe(Vr)})},enhanceApp({app:n,router:e,siteData:t}){Ur(n),n.component("VersionPicker",dr)}};export{zr as R,Ws as c,L as u}; diff --git a/dev/assets/tjcwnao.DI2ee96v.png b/dev/assets/fzkdzsl.DI2ee96v.png similarity index 100% rename from dev/assets/tjcwnao.DI2ee96v.png rename to dev/assets/fzkdzsl.DI2ee96v.png diff --git a/dev/assets/get_started.md.BhPL8eqt.js b/dev/assets/get_started.md.D7oDLQ_y.js similarity index 86% rename from dev/assets/get_started.md.BhPL8eqt.js rename to dev/assets/get_started.md.D7oDLQ_y.js index d07c5109..f293879a 100644 --- a/dev/assets/get_started.md.BhPL8eqt.js +++ b/dev/assets/get_started.md.D7oDLQ_y.js @@ -1,4 +1,4 @@ -import{_ as a,c as i,ai as n,o as e}from"./chunks/framework.CS7uZ9fp.js";const t="/Rasters.jl/dev/assets/xzatirm.DojgcnZi.png",g=JSON.parse('{"title":"Quick start","description":"","frontmatter":{},"headers":[],"relativePath":"get_started.md","filePath":"get_started.md","lastUpdated":null}'),p={name:"get_started.md"};function l(h,s,d,k,r,o){return e(),i("div",null,s[0]||(s[0]=[n(`

Quick start

Install the package by typing:

julia
] 
+import{_ as a,c as i,ai as n,o as e}from"./chunks/framework.CS7uZ9fp.js";const t="/Rasters.jl/dev/assets/tombfrf.DojgcnZi.png",g=JSON.parse('{"title":"Quick start","description":"","frontmatter":{},"headers":[],"relativePath":"get_started.md","filePath":"get_started.md","lastUpdated":null}'),p={name:"get_started.md"};function l(h,s,d,k,r,o){return e(),i("div",null,s[0]||(s[0]=[n(`

Quick start

Install the package by typing:

julia
] 
 add Rasters

then do

julia
using Rasters

Using Rasters to read GeoTiff or NetCDF files will output something similar to the following toy examples. This is possible because Rasters.jl extends DimensionalData.jl so that spatial data can be indexed using named dimensions like X, Y and Ti (time) and e.g. spatial coordinates.

julia
using Rasters, Dates
 
 lon, lat = X(25:1:30), Y(25:1:30)
@@ -12,13 +12,13 @@ import{_ as a,c as i,ai as n,o as e}from"./chunks/framework.CS7uZ9fp.js";const t
   extent: Extent(X = (25, 30), Y = (25, 30), Ti = (DateTime("2001-01-01T00:00:00"), DateTime("2002-01-01T00:00:00")))
 └──────────────────────────────────────────────────────────────────────────────┘
 [:, :, 1]
-  ↓ →  25         26          27         28         29         30
- 25     0.65026    0.267278    0.483487   0.220706   0.30298    0.846569
- 26     0.900098   0.287447    0.706145   0.583066   0.554699   0.762069
- 27     0.861332   0.0770929   0.197539   0.398214   0.205385   0.739134
- 28     0.249185   0.668468    0.104756   0.297448   0.317935   0.687694
- 29     0.199073   0.862607    0.320261   0.798959   0.305187   0.243058
- 30     0.815831   0.543596    0.732843   0.679485   0.578195   0.556124

Getting the lookup array from dimensions

julia
lon = lookup(ras, X) # if X is longitude
+  ↓ →  25         26         27          28         29         30
+ 25     0.227006   0.970146   0.0544021   0.371211   0.664186   0.21141
+ 26     0.273317   0.640978   0.194661    0.920474   0.615364   0.306968
+ 27     0.788089   0.417503   0.747373    0.360284   0.309207   0.192418
+ 28     0.651182   0.882834   0.843774    0.891849   0.90771    0.0520999
+ 29     0.464265   0.712496   0.219414    0.60282    0.963473   0.805253
+ 30     0.58336    0.81865    0.282566    0.338789   0.328284   0.126327

Getting the lookup array from dimensions

julia
lon = lookup(ras, X) # if X is longitude
 lat = lookup(ras, Y) # if Y is latitude
Sampled{Int64} ForwardOrdered Regular Points
 wrapping: 25:1:30

Select by index

Selecting a time slice by index is done via

julia
ras[Ti(1)]
┌ 6×6 Raster{Float64, 2} ┐
 ├────────────────────────┴──────────────────────────── dims ┐
@@ -27,26 +27,26 @@ import{_ as a,c as i,ai as n,o as e}from"./chunks/framework.CS7uZ9fp.js";const t
 ├─────────────────────────────────────────────────── raster ┤
   extent: Extent(X = (25, 30), Y = (25, 30))
 └───────────────────────────────────────────────────────────┘
-  ↓ →  25         26          27         28         29         30
- 25     0.65026    0.267278    0.483487   0.220706   0.30298    0.846569
- 26     0.900098   0.287447    0.706145   0.583066   0.554699   0.762069
- 27     0.861332   0.0770929   0.197539   0.398214   0.205385   0.739134
- 28     0.249185   0.668468    0.104756   0.297448   0.317935   0.687694
- 29     0.199073   0.862607    0.320261   0.798959   0.305187   0.243058
- 30     0.815831   0.543596    0.732843   0.679485   0.578195   0.556124

also

julia
ras[Ti=1]
┌ 6×6 Raster{Float64, 2} ┐
+  ↓ →  25         26         27          28         29         30
+ 25     0.227006   0.970146   0.0544021   0.371211   0.664186   0.21141
+ 26     0.273317   0.640978   0.194661    0.920474   0.615364   0.306968
+ 27     0.788089   0.417503   0.747373    0.360284   0.309207   0.192418
+ 28     0.651182   0.882834   0.843774    0.891849   0.90771    0.0520999
+ 29     0.464265   0.712496   0.219414    0.60282    0.963473   0.805253
+ 30     0.58336    0.81865    0.282566    0.338789   0.328284   0.126327

also

julia
ras[Ti=1]
┌ 6×6 Raster{Float64, 2} ┐
 ├────────────────────────┴──────────────────────────── dims ┐
   ↓ X Sampled{Int64} 25:1:30 ForwardOrdered Regular Points,
   → Y Sampled{Int64} 25:1:30 ForwardOrdered Regular Points
 ├─────────────────────────────────────────────────── raster ┤
   extent: Extent(X = (25, 30), Y = (25, 30))
 └───────────────────────────────────────────────────────────┘
-  ↓ →  25         26          27         28         29         30
- 25     0.65026    0.267278    0.483487   0.220706   0.30298    0.846569
- 26     0.900098   0.287447    0.706145   0.583066   0.554699   0.762069
- 27     0.861332   0.0770929   0.197539   0.398214   0.205385   0.739134
- 28     0.249185   0.668468    0.104756   0.297448   0.317935   0.687694
- 29     0.199073   0.862607    0.320261   0.798959   0.305187   0.243058
- 30     0.815831   0.543596    0.732843   0.679485   0.578195   0.556124

or and interval of indices using the syntax =a:b or (a:b)

julia
ras[Ti(1:10)]
┌ 6×6×10 Raster{Float64, 3} ┐
+  ↓ →  25         26         27          28         29         30
+ 25     0.227006   0.970146   0.0544021   0.371211   0.664186   0.21141
+ 26     0.273317   0.640978   0.194661    0.920474   0.615364   0.306968
+ 27     0.788089   0.417503   0.747373    0.360284   0.309207   0.192418
+ 28     0.651182   0.882834   0.843774    0.891849   0.90771    0.0520999
+ 29     0.464265   0.712496   0.219414    0.60282    0.963473   0.805253
+ 30     0.58336    0.81865    0.282566    0.338789   0.328284   0.126327

or and interval of indices using the syntax =a:b or (a:b)

julia
ras[Ti(1:10)]
┌ 6×6×10 Raster{Float64, 3} ┐
 ├───────────────────────────┴──────────────────────────────────────────── dims ┐
   ↓ X  Sampled{Int64} 25:1:30 ForwardOrdered Regular Points,
   → Y  Sampled{Int64} 25:1:30 ForwardOrdered Regular Points,
@@ -55,26 +55,26 @@ import{_ as a,c as i,ai as n,o as e}from"./chunks/framework.CS7uZ9fp.js";const t
   extent: Extent(X = (25, 30), Y = (25, 30), Ti = (DateTime("2001-01-01T00:00:00"), DateTime("2001-10-01T00:00:00")))
 └──────────────────────────────────────────────────────────────────────────────┘
 [:, :, 1]
-  ↓ →  25         26          27         28         29         30
- 25     0.65026    0.267278    0.483487   0.220706   0.30298    0.846569
- 26     0.900098   0.287447    0.706145   0.583066   0.554699   0.762069
- 27     0.861332   0.0770929   0.197539   0.398214   0.205385   0.739134
- 28     0.249185   0.668468    0.104756   0.297448   0.317935   0.687694
- 29     0.199073   0.862607    0.320261   0.798959   0.305187   0.243058
- 30     0.815831   0.543596    0.732843   0.679485   0.578195   0.556124

Select by value

julia
ras[Ti=At(DateTime(2001))]
┌ 6×6 Raster{Float64, 2} ┐
+  ↓ →  25         26         27          28         29         30
+ 25     0.227006   0.970146   0.0544021   0.371211   0.664186   0.21141
+ 26     0.273317   0.640978   0.194661    0.920474   0.615364   0.306968
+ 27     0.788089   0.417503   0.747373    0.360284   0.309207   0.192418
+ 28     0.651182   0.882834   0.843774    0.891849   0.90771    0.0520999
+ 29     0.464265   0.712496   0.219414    0.60282    0.963473   0.805253
+ 30     0.58336    0.81865    0.282566    0.338789   0.328284   0.126327

Select by value

julia
ras[Ti=At(DateTime(2001))]
┌ 6×6 Raster{Float64, 2} ┐
 ├────────────────────────┴──────────────────────────── dims ┐
   ↓ X Sampled{Int64} 25:1:30 ForwardOrdered Regular Points,
   → Y Sampled{Int64} 25:1:30 ForwardOrdered Regular Points
 ├─────────────────────────────────────────────────── raster ┤
   extent: Extent(X = (25, 30), Y = (25, 30))
 └───────────────────────────────────────────────────────────┘
-  ↓ →  25         26          27         28         29         30
- 25     0.65026    0.267278    0.483487   0.220706   0.30298    0.846569
- 26     0.900098   0.287447    0.706145   0.583066   0.554699   0.762069
- 27     0.861332   0.0770929   0.197539   0.398214   0.205385   0.739134
- 28     0.249185   0.668468    0.104756   0.297448   0.317935   0.687694
- 29     0.199073   0.862607    0.320261   0.798959   0.305187   0.243058
- 30     0.815831   0.543596    0.732843   0.679485   0.578195   0.556124

More options are available, like Near, Contains and Where.

Dimensions

Rasters uses X, Y, and Z dimensions from DimensionalData to represent spatial directions like longitude, latitude and the vertical dimension, and subset data with them. Ti is used for time, and Band represent bands. Other dimensions can have arbitrary names, but will be treated generically. See DimensionalData for more details on how they work.

Lookup Arrays

These specify properties of the index associated with e.g. the X and Y dimension. Rasters.jl defines additional lookup arrays: Projected to handle dimensions with projections, and Mapped where the projection is mapped to another projection like EPSG(4326). Mapped is largely designed to handle NetCDF dimensions, especially with Explicit spans.

Subsetting an object

Regular getindex (e.g. A[1:100, :]) and view work on all objects just as with an Array. view is always lazy, and reads from disk are deferred until getindex is used. DimensionalData.jl Dimensions and Selectors are the other way to subset an object, making use of the objects index to find values at e.g. certain X/Y coordinates. The available selectors are listed here:

SelectorsDescription
At(x)get the index exactly matching the passed in value(s).
Near(x)get the closest index to the passed in value(s).
Where(f::Function)filter the array axis by a function of the dimension index values.
a..b/Between(a, b)get all indices between two values, excluding the high value.
Contains(x)get indices where the value x falls within an interval.

Info

  • Use the .. selector to take a view of madagascar:
julia
using Rasters, RasterDataSources
+  ↓ →  25         26         27          28         29         30
+ 25     0.227006   0.970146   0.0544021   0.371211   0.664186   0.21141
+ 26     0.273317   0.640978   0.194661    0.920474   0.615364   0.306968
+ 27     0.788089   0.417503   0.747373    0.360284   0.309207   0.192418
+ 28     0.651182   0.882834   0.843774    0.891849   0.90771    0.0520999
+ 29     0.464265   0.712496   0.219414    0.60282    0.963473   0.805253
+ 30     0.58336    0.81865    0.282566    0.338789   0.328284   0.126327

More options are available, like Near, Contains and Where.

Dimensions

Rasters uses X, Y, and Z dimensions from DimensionalData to represent spatial directions like longitude, latitude and the vertical dimension, and subset data with them. Ti is used for time, and Band represent bands. Other dimensions can have arbitrary names, but will be treated generically. See DimensionalData for more details on how they work.

Lookup Arrays

These specify properties of the index associated with e.g. the X and Y dimension. Rasters.jl defines additional lookup arrays: Projected to handle dimensions with projections, and Mapped where the projection is mapped to another projection like EPSG(4326). Mapped is largely designed to handle NetCDF dimensions, especially with Explicit spans.

Subsetting an object

Regular getindex (e.g. A[1:100, :]) and view work on all objects just as with an Array. view is always lazy, and reads from disk are deferred until getindex is used. DimensionalData.jl Dimensions and Selectors are the other way to subset an object, making use of the objects index to find values at e.g. certain X/Y coordinates. The available selectors are listed here:

SelectorsDescription
At(x)get the index exactly matching the passed in value(s).
Near(x)get the closest index to the passed in value(s).
Where(f::Function)filter the array axis by a function of the dimension index values.
a..b/Between(a, b)get all indices between two values, excluding the high value.
Contains(x)get indices where the value x falls within an interval.

Info

  • Use the .. selector to take a view of madagascar:
julia
using Rasters, RasterDataSources
 const RS = Rasters
 using CairoMakie
 CairoMakie.activate!()
diff --git a/dev/assets/get_started.md.BhPL8eqt.lean.js b/dev/assets/get_started.md.D7oDLQ_y.lean.js
similarity index 86%
rename from dev/assets/get_started.md.BhPL8eqt.lean.js
rename to dev/assets/get_started.md.D7oDLQ_y.lean.js
index d9f287a1..9100613b 100644
--- a/dev/assets/get_started.md.BhPL8eqt.lean.js
+++ b/dev/assets/get_started.md.D7oDLQ_y.lean.js
@@ -1 +1 @@
-import{_ as a,c as i,ai as n,o as e}from"./chunks/framework.CS7uZ9fp.js";const t="/Rasters.jl/dev/assets/xzatirm.DojgcnZi.png",g=JSON.parse('{"title":"Quick start","description":"","frontmatter":{},"headers":[],"relativePath":"get_started.md","filePath":"get_started.md","lastUpdated":null}'),p={name:"get_started.md"};function l(h,s,d,k,r,o){return e(),i("div",null,s[0]||(s[0]=[n("",33)]))}const E=a(p,[["render",l]]);export{g as __pageData,E as default};
+import{_ as a,c as i,ai as n,o as e}from"./chunks/framework.CS7uZ9fp.js";const t="/Rasters.jl/dev/assets/tombfrf.DojgcnZi.png",g=JSON.parse('{"title":"Quick start","description":"","frontmatter":{},"headers":[],"relativePath":"get_started.md","filePath":"get_started.md","lastUpdated":null}'),p={name:"get_started.md"};function l(h,s,d,k,r,o){return e(),i("div",null,s[0]||(s[0]=[n("",33)]))}const E=a(p,[["render",l]]);export{g as __pageData,E as default};
diff --git a/dev/assets/srtxwje.N8Gnvb1L.png b/dev/assets/iellglg.N8Gnvb1L.png
similarity index 100%
rename from dev/assets/srtxwje.N8Gnvb1L.png
rename to dev/assets/iellglg.N8Gnvb1L.png
diff --git a/dev/assets/index.md.DGd3eXjH.js b/dev/assets/index.md.BBZM0PgG.js
similarity index 93%
rename from dev/assets/index.md.DGd3eXjH.js
rename to dev/assets/index.md.BBZM0PgG.js
index 9ce2c101..5b0e6c37 100644
--- a/dev/assets/index.md.DGd3eXjH.js
+++ b/dev/assets/index.md.BBZM0PgG.js
@@ -1,8 +1,8 @@
-import{_ as a,c as i,ai as e,o as t}from"./chunks/framework.CS7uZ9fp.js";const g=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Rasters.jl","text":"Manipulating spatial data","tagline":"a powerful package that simplifies the handling of rasterized spatial data in Julia.","image":{"src":"/logo.png","alt":"Rasters"},"actions":[{"theme":"brand","text":"Get Started","link":"/get_started"},{"theme":"alt","text":"View on Github","link":"https://github.com/rafaqz/Rasters.jl"},{"theme":"alt","text":"API Reference","link":"/api"}]},"features":[{"title":"💥💠 Core Functionality","details":"Defines common types and methods for reading, writing, and manipulating rasterized spatial data. Rasters.jl provides unified data handling through types like Raster, RasterStack, and RasterSeries, offering seamless abstraction regardless of storage backend.","link":"/manual/methods"},{"title":"⚙️ Data-Source Abstraction","details":"Rasters provides a standardized interface that enables various data source types to be used with consistent syntax. The data can include GeoTIFF or NetCDF files, in-memory Arrays, or CuArrays on the GPU—all of which will behave in the same way.","link":"/manual/data_sources"},{"title":"🗂️🌐 Data Formats","details":"A RasterStack can be backed by a NetCDF or HDF5 file, a NamedTuple of Rasters holding .tif files, or all Rasters in memory. Users do not need to worry about the specifics of spatial file types."},{"title":"🌍🔍 Effortless Spatial Lookups","details":"Projected lookups with cylindrical projections can be indexed using other cylindrical projections by setting the mappedcrs keyword during construction. You don’t need to know the underlying projection, as the conversion is handled automatically. This means that lat/lon EPSG(4326) can be used seamlessly if needed."},{"title":"🧩⚡ Modular Extensions with Faster Loading","details":"From version 0.8, Rasters.jl uses Julia's package extension system. On Julia 1.9, packages can be placed in extensions to load only when needed, reducing loading time to under a second. However, each backend or feature must be loaded manually.","link":"/#Package-extensions"},{"title":"🐞📌 Bug reports","details":"Raster data is complex, and there are many opportunities for subtle or obvious bugs to appear. We need bug reports to reduce how often these issues occur over time. However, it's also crucial that issues are easy to reproduce; otherwise, it becomes impractical to fix them. Please follow these guidelines!","link":"/#Bugs"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}`),l={name:"index.md"};function n(h,s,p,o,d,r){return t(),i("div",null,s[0]||(s[0]=[e(`

How to Install Rasters.jl?

Since Rasters.jl is registered in the Julia General registry, you can simply run the following command in the Julia REPL:

julia
julia> using Pkg
+import{_ as a,c as i,ai as t,o as e}from"./chunks/framework.CS7uZ9fp.js";const g=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Rasters.jl","text":"Manipulating spatial data","tagline":"a powerful package that simplifies the handling of rasterized spatial data in Julia.","image":{"src":"/logo.png","alt":"Rasters"},"actions":[{"theme":"brand","text":"Get Started","link":"/get_started"},{"theme":"alt","text":"View on Github","link":"https://github.com/rafaqz/Rasters.jl"},{"theme":"alt","text":"API Reference","link":"/api"}]},"features":[{"title":"💥💠 Core Functionality","details":"Defines common types and methods for reading, writing, and manipulating rasterized spatial data. Rasters.jl provides unified data handling through types like Raster, RasterStack, and RasterSeries, offering seamless abstraction regardless of storage backend.","link":"/manual/methods"},{"title":"⚙️ Data-Source Abstraction","details":"Rasters provides a standardized interface that enables various data source types to be used with consistent syntax. The data can include GeoTIFF or NetCDF files, in-memory Arrays, or CuArrays on the GPU—all of which will behave in the same way.","link":"/manual/data_sources"},{"title":"🗂️🌐 Data Formats","details":"A RasterStack can be backed by a NetCDF or HDF5 file, a NamedTuple of Rasters holding .tif files, or all Rasters in memory. Users do not need to worry about the specifics of spatial file types."},{"title":"🌍🔍 Effortless Spatial Lookups","details":"Projected lookups with cylindrical projections can be indexed using other cylindrical projections by setting the mappedcrs keyword during construction. You don’t need to know the underlying projection, as the conversion is handled automatically. This means that lat/lon EPSG(4326) can be used seamlessly if needed."},{"title":"🧩⚡ Modular Extensions with Faster Loading","details":"From version 0.8, Rasters.jl uses Julia's package extension system. On Julia 1.9, packages can be placed in extensions to load only when needed, reducing loading time to under a second. However, each backend or feature must be loaded manually.","link":"/#Package-extensions"},{"title":"🐞📌 Bug reports","details":"Raster data is complex, and there are many opportunities for subtle or obvious bugs to appear. We need bug reports to reduce how often these issues occur over time. However, it's also crucial that issues are easy to reproduce; otherwise, it becomes impractical to fix them. Please follow these guidelines!","link":"/#Bugs"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}`),l={name:"index.md"};function n(h,s,p,o,d,r){return e(),i("div",null,s[0]||(s[0]=[t(`

How to Install Rasters.jl?

Since Rasters.jl is registered in the Julia General registry, you can simply run the following command in the Julia REPL:

julia
julia> using Pkg
 julia> Pkg.add("Rasters.jl")
 # or
 julia> ] # ']' should be pressed
-pkg> add Rasters

If you want to use the latest unreleased version, you can run the following command:

julia
pkg> add Rasters#main

Package extensions

Before using a specific backend or feature, you must install and load its corresponding package,

julia
using Pkg
+pkg> add Rasters

If you want to use the latest unreleased version, you can run the following command:

julia
pkg> add Rasters#main

Package extensions

Before using a specific backend or feature, you must install and load its corresponding package,

julia
using Pkg
 Pkg.add("ArchGDAL")
julia
using Pkg
 Pkg.add("NCDatasets")
julia
# built-in
julia
using Pkg
 Pkg.add("HDF5")
julia
using Pkg
diff --git a/dev/assets/index.md.DGd3eXjH.lean.js b/dev/assets/index.md.BBZM0PgG.lean.js
similarity index 96%
rename from dev/assets/index.md.DGd3eXjH.lean.js
rename to dev/assets/index.md.BBZM0PgG.lean.js
index a52037b6..dca1d1af 100644
--- a/dev/assets/index.md.DGd3eXjH.lean.js
+++ b/dev/assets/index.md.BBZM0PgG.lean.js
@@ -1 +1 @@
-import{_ as a,c as i,ai as e,o as t}from"./chunks/framework.CS7uZ9fp.js";const g=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Rasters.jl","text":"Manipulating spatial data","tagline":"a powerful package that simplifies the handling of rasterized spatial data in Julia.","image":{"src":"/logo.png","alt":"Rasters"},"actions":[{"theme":"brand","text":"Get Started","link":"/get_started"},{"theme":"alt","text":"View on Github","link":"https://github.com/rafaqz/Rasters.jl"},{"theme":"alt","text":"API Reference","link":"/api"}]},"features":[{"title":"💥💠 Core Functionality","details":"Defines common types and methods for reading, writing, and manipulating rasterized spatial data. Rasters.jl provides unified data handling through types like Raster, RasterStack, and RasterSeries, offering seamless abstraction regardless of storage backend.","link":"/manual/methods"},{"title":"⚙️ Data-Source Abstraction","details":"Rasters provides a standardized interface that enables various data source types to be used with consistent syntax. The data can include GeoTIFF or NetCDF files, in-memory Arrays, or CuArrays on the GPU—all of which will behave in the same way.","link":"/manual/data_sources"},{"title":"🗂️🌐 Data Formats","details":"A RasterStack can be backed by a NetCDF or HDF5 file, a NamedTuple of Rasters holding .tif files, or all Rasters in memory. Users do not need to worry about the specifics of spatial file types."},{"title":"🌍🔍 Effortless Spatial Lookups","details":"Projected lookups with cylindrical projections can be indexed using other cylindrical projections by setting the mappedcrs keyword during construction. You don’t need to know the underlying projection, as the conversion is handled automatically. This means that lat/lon EPSG(4326) can be used seamlessly if needed."},{"title":"🧩⚡ Modular Extensions with Faster Loading","details":"From version 0.8, Rasters.jl uses Julia's package extension system. On Julia 1.9, packages can be placed in extensions to load only when needed, reducing loading time to under a second. However, each backend or feature must be loaded manually.","link":"/#Package-extensions"},{"title":"🐞📌 Bug reports","details":"Raster data is complex, and there are many opportunities for subtle or obvious bugs to appear. We need bug reports to reduce how often these issues occur over time. However, it's also crucial that issues are easy to reproduce; otherwise, it becomes impractical to fix them. Please follow these guidelines!","link":"/#Bugs"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}`),l={name:"index.md"};function n(h,s,p,o,d,r){return t(),i("div",null,s[0]||(s[0]=[e("",12)]))}const c=a(l,[["render",n]]);export{g as __pageData,c as default};
+import{_ as a,c as i,ai as t,o as e}from"./chunks/framework.CS7uZ9fp.js";const g=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Rasters.jl","text":"Manipulating spatial data","tagline":"a powerful package that simplifies the handling of rasterized spatial data in Julia.","image":{"src":"/logo.png","alt":"Rasters"},"actions":[{"theme":"brand","text":"Get Started","link":"/get_started"},{"theme":"alt","text":"View on Github","link":"https://github.com/rafaqz/Rasters.jl"},{"theme":"alt","text":"API Reference","link":"/api"}]},"features":[{"title":"💥💠 Core Functionality","details":"Defines common types and methods for reading, writing, and manipulating rasterized spatial data. Rasters.jl provides unified data handling through types like Raster, RasterStack, and RasterSeries, offering seamless abstraction regardless of storage backend.","link":"/manual/methods"},{"title":"⚙️ Data-Source Abstraction","details":"Rasters provides a standardized interface that enables various data source types to be used with consistent syntax. The data can include GeoTIFF or NetCDF files, in-memory Arrays, or CuArrays on the GPU—all of which will behave in the same way.","link":"/manual/data_sources"},{"title":"🗂️🌐 Data Formats","details":"A RasterStack can be backed by a NetCDF or HDF5 file, a NamedTuple of Rasters holding .tif files, or all Rasters in memory. Users do not need to worry about the specifics of spatial file types."},{"title":"🌍🔍 Effortless Spatial Lookups","details":"Projected lookups with cylindrical projections can be indexed using other cylindrical projections by setting the mappedcrs keyword during construction. You don’t need to know the underlying projection, as the conversion is handled automatically. This means that lat/lon EPSG(4326) can be used seamlessly if needed."},{"title":"🧩⚡ Modular Extensions with Faster Loading","details":"From version 0.8, Rasters.jl uses Julia's package extension system. On Julia 1.9, packages can be placed in extensions to load only when needed, reducing loading time to under a second. However, each backend or feature must be loaded manually.","link":"/#Package-extensions"},{"title":"🐞📌 Bug reports","details":"Raster data is complex, and there are many opportunities for subtle or obvious bugs to appear. We need bug reports to reduce how often these issues occur over time. However, it's also crucial that issues are easy to reproduce; otherwise, it becomes impractical to fix them. Please follow these guidelines!","link":"/#Bugs"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}`),l={name:"index.md"};function n(h,s,p,o,d,r){return e(),i("div",null,s[0]||(s[0]=[t("",12)]))}const c=a(l,[["render",n]]);export{g as __pageData,c as default};
diff --git a/dev/assets/nmqsuwx.BCgNrSTH.png b/dev/assets/kcsrzww.BCgNrSTH.png
similarity index 100%
rename from dev/assets/nmqsuwx.BCgNrSTH.png
rename to dev/assets/kcsrzww.BCgNrSTH.png
diff --git a/dev/assets/zqfwwxq.FyCPqsB9.png b/dev/assets/kimqups.FyCPqsB9.png
similarity index 100%
rename from dev/assets/zqfwwxq.FyCPqsB9.png
rename to dev/assets/kimqups.FyCPqsB9.png
diff --git a/dev/assets/ksljjed.DcvGbGtZ.png b/dev/assets/ksljjed.DcvGbGtZ.png
deleted file mode 100644
index d0a12a72..00000000
Binary files a/dev/assets/ksljjed.DcvGbGtZ.png and /dev/null differ
diff --git a/dev/assets/lqsoqjx.CQwE27po.png b/dev/assets/lqsoqjx.CQwE27po.png
new file mode 100644
index 00000000..f2c5dcaf
Binary files /dev/null and b/dev/assets/lqsoqjx.CQwE27po.png differ
diff --git a/dev/assets/vvaznqm.BsE3Kr89.png b/dev/assets/lzzhhns.BsE3Kr89.png
similarity index 100%
rename from dev/assets/vvaznqm.BsE3Kr89.png
rename to dev/assets/lzzhhns.BsE3Kr89.png
diff --git a/dev/assets/manual_cellarea.md.Bnt5lWlr.js b/dev/assets/manual_cellarea.md.yJARYC-J.js
similarity index 99%
rename from dev/assets/manual_cellarea.md.Bnt5lWlr.js
rename to dev/assets/manual_cellarea.md.yJARYC-J.js
index f338b211..5867a8a3 100644
--- a/dev/assets/manual_cellarea.md.Bnt5lWlr.js
+++ b/dev/assets/manual_cellarea.md.yJARYC-J.js
@@ -1,4 +1,4 @@
-import{_ as h,c as t,j as i,a,G as l,ai as e,B as k,o as p}from"./chunks/framework.CS7uZ9fp.js";const d="/Rasters.jl/dev/assets/ydeworb.DdtYyM8O.png",u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"manual/cellarea.md","filePath":"manual/cellarea.md","lastUpdated":null}'),r={name:"manual/cellarea.md"},g={class:"jldocstring custom-block"};function y(c,s,o,E,f,F){const n=k("Badge");return p(),t("div",null,[s[3]||(s[3]=i("h2",{id:"cellarea",tabindex:"-1"},[i("code",null,"cellarea"),a(),i("a",{class:"header-anchor",href:"#cellarea","aria-label":'Permalink to "`cellarea` {#cellarea}"'},"​")],-1)),i("details",g,[i("summary",null,[s[0]||(s[0]=i("a",{id:"Rasters.cellarea-manual-cellarea",href:"#Rasters.cellarea-manual-cellarea"},[i("span",{class:"jlbinding"},"Rasters.cellarea")],-1)),s[1]||(s[1]=a()),l(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=e(`
julia
cellarea([method], x)

Gives the approximate area of each gridcell of x. By assuming the earth is a sphere, it approximates the true size to about 0.1%, depending on latitude.

Run using ArchGDAL or using Proj to make this method fully available.

  • method: You can specify whether you want to compute the area in the plane of your projection Planar() or on a sphere of some radius Spherical(; radius=...)(the default).

  • Spherical will compute cell area on the sphere, by transforming all points back to long-lat. You can specify the radius by the radius keyword argument here. By default, this is 6371008.8, the mean radius of the Earth.

  • Planar will compute cell area in the plane of the CRS you have chosen. Be warned that this will likely be incorrect for non-equal-area projections.

Returns a Raster with the same x and y dimensions as the input, where each value in the raster encodes the area of the cell (in meters by default).

Example

julia
using Rasters, Proj, Rasters.Lookups
+import{_ as h,c as t,j as i,a,G as l,ai as e,B as k,o as p}from"./chunks/framework.CS7uZ9fp.js";const d="/Rasters.jl/dev/assets/nfuowhn.DdtYyM8O.png",u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"manual/cellarea.md","filePath":"manual/cellarea.md","lastUpdated":null}'),r={name:"manual/cellarea.md"},g={class:"jldocstring custom-block"};function y(c,s,o,E,f,F){const n=k("Badge");return p(),t("div",null,[s[3]||(s[3]=i("h2",{id:"cellarea",tabindex:"-1"},[i("code",null,"cellarea"),a(),i("a",{class:"header-anchor",href:"#cellarea","aria-label":'Permalink to "`cellarea` {#cellarea}"'},"​")],-1)),i("details",g,[i("summary",null,[s[0]||(s[0]=i("a",{id:"Rasters.cellarea-manual-cellarea",href:"#Rasters.cellarea-manual-cellarea"},[i("span",{class:"jlbinding"},"Rasters.cellarea")],-1)),s[1]||(s[1]=a()),l(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=e(`
julia
cellarea([method], x)

Gives the approximate area of each gridcell of x. By assuming the earth is a sphere, it approximates the true size to about 0.1%, depending on latitude.

Run using ArchGDAL or using Proj to make this method fully available.

  • method: You can specify whether you want to compute the area in the plane of your projection Planar() or on a sphere of some radius Spherical(; radius=...)(the default).

  • Spherical will compute cell area on the sphere, by transforming all points back to long-lat. You can specify the radius by the radius keyword argument here. By default, this is 6371008.8, the mean radius of the Earth.

  • Planar will compute cell area in the plane of the CRS you have chosen. Be warned that this will likely be incorrect for non-equal-area projections.

Returns a Raster with the same x and y dimensions as the input, where each value in the raster encodes the area of the cell (in meters by default).

Example

julia
using Rasters, Proj, Rasters.Lookups
 xdim = X(Projected(90.0:10.0:120; sampling=Intervals(Start()), crs=EPSG(4326)))
 ydim = Y(Projected(0.0:10.0:50; sampling=Intervals(Start()), crs=EPSG(4326)))
 myraster = rand(xdim, ydim)
@@ -19,7 +19,7 @@ import{_ as h,c as t,j as i,a,G as l,ai as e,B as k,o as p}from"./chunks/framewo
   90.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0
  100.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0
  110.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0
- 120.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

`,9))]),s[4]||(s[4]=e(`

Computing the area of each cell in a raster is useful for a number of reasons - if you have a variable like population per cell, or elevation (spatially extensive variables), you'll want to account for the fact that different cells have different areas.

Let's construct a raster and see what this looks like! We'll keep it in memory.

The spherical method relies on the Proj.jl package to perform coordinate transformation, so that has to be loaded explicitly.

julia
using Rasters, Proj

To construct a raster, we'll need to specify the x and y dimensions. These are called lookups in Rasters.jl.

julia
using Rasters.Lookups

We can now construct the x and y lookups. Here we'll use a start-at-one, step-by-five grid. Note that we're specifying that the "sampling", i.e., what the coordinates actually mean, is Intervals(Start()), meaning that the coordinates are the starting point of each interval.

This is in contrast to Points() sampling, where each index in the raster represents the value at a sampling point; here, each index represents a grid cell, which is defined by the coordinate being at the start.

julia
x = X(1:5:30; sampling = Intervals(Start()), crs = EPSG(4326))
+ 120.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

`,9))]),s[4]||(s[4]=e(`

Computing the area of each cell in a raster is useful for a number of reasons - if you have a variable like population per cell, or elevation (spatially extensive variables), you'll want to account for the fact that different cells have different areas.

Let's construct a raster and see what this looks like! We'll keep it in memory.

The spherical method relies on the Proj.jl package to perform coordinate transformation, so that has to be loaded explicitly.

julia
using Rasters, Proj

To construct a raster, we'll need to specify the x and y dimensions. These are called lookups in Rasters.jl.

julia
using Rasters.Lookups

We can now construct the x and y lookups. Here we'll use a start-at-one, step-by-five grid. Note that we're specifying that the "sampling", i.e., what the coordinates actually mean, is Intervals(Start()), meaning that the coordinates are the starting point of each interval.

This is in contrast to Points() sampling, where each index in the raster represents the value at a sampling point; here, each index represents a grid cell, which is defined by the coordinate being at the start.

julia
x = X(1:5:30; sampling = Intervals(Start()), crs = EPSG(4326))
 y = Y(50:5:80; sampling = Intervals(Start()), crs = EPSG(4326));

I have chosen the y-range here specifically so we can show the difference between spherical and planar cellarea.

julia
julia> ras = Raster(ones(x, y); crs = EPSG(4326))
6×7 Raster{Float64, 2}
 ├────────────────────────┴─────────────────────────────────────────────── dims ┐
 X Projected{Int64} 1:5:26 ForwardOrdered Regular Intervals{Start},
diff --git a/dev/assets/manual_cellarea.md.Bnt5lWlr.lean.js b/dev/assets/manual_cellarea.md.yJARYC-J.lean.js
similarity index 93%
rename from dev/assets/manual_cellarea.md.Bnt5lWlr.lean.js
rename to dev/assets/manual_cellarea.md.yJARYC-J.lean.js
index 0cee663d..7f21438f 100644
--- a/dev/assets/manual_cellarea.md.Bnt5lWlr.lean.js
+++ b/dev/assets/manual_cellarea.md.yJARYC-J.lean.js
@@ -1 +1 @@
-import{_ as h,c as t,j as i,a,G as l,ai as e,B as k,o as p}from"./chunks/framework.CS7uZ9fp.js";const d="/Rasters.jl/dev/assets/ydeworb.DdtYyM8O.png",u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"manual/cellarea.md","filePath":"manual/cellarea.md","lastUpdated":null}'),r={name:"manual/cellarea.md"},g={class:"jldocstring custom-block"};function y(c,s,o,E,f,F){const n=k("Badge");return p(),t("div",null,[s[3]||(s[3]=i("h2",{id:"cellarea",tabindex:"-1"},[i("code",null,"cellarea"),a(),i("a",{class:"header-anchor",href:"#cellarea","aria-label":'Permalink to "`cellarea` {#cellarea}"'},"​")],-1)),i("details",g,[i("summary",null,[s[0]||(s[0]=i("a",{id:"Rasters.cellarea-manual-cellarea",href:"#Rasters.cellarea-manual-cellarea"},[i("span",{class:"jlbinding"},"Rasters.cellarea")],-1)),s[1]||(s[1]=a()),l(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=e("",9))]),s[4]||(s[4]=e("",22))])}const m=h(r,[["render",y]]);export{u as __pageData,m as default};
+import{_ as h,c as t,j as i,a,G as l,ai as e,B as k,o as p}from"./chunks/framework.CS7uZ9fp.js";const d="/Rasters.jl/dev/assets/nfuowhn.DdtYyM8O.png",u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"manual/cellarea.md","filePath":"manual/cellarea.md","lastUpdated":null}'),r={name:"manual/cellarea.md"},g={class:"jldocstring custom-block"};function y(c,s,o,E,f,F){const n=k("Badge");return p(),t("div",null,[s[3]||(s[3]=i("h2",{id:"cellarea",tabindex:"-1"},[i("code",null,"cellarea"),a(),i("a",{class:"header-anchor",href:"#cellarea","aria-label":'Permalink to "`cellarea` {#cellarea}"'},"​")],-1)),i("details",g,[i("summary",null,[s[0]||(s[0]=i("a",{id:"Rasters.cellarea-manual-cellarea",href:"#Rasters.cellarea-manual-cellarea"},[i("span",{class:"jlbinding"},"Rasters.cellarea")],-1)),s[1]||(s[1]=a()),l(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=e("",9))]),s[4]||(s[4]=e("",22))])}const m=h(r,[["render",y]]);export{u as __pageData,m as default};
diff --git a/dev/assets/manual_data_sources.md.BQtt5CoE.js b/dev/assets/manual_data_sources.md.D6fGpeK6.js
similarity index 99%
rename from dev/assets/manual_data_sources.md.BQtt5CoE.js
rename to dev/assets/manual_data_sources.md.D6fGpeK6.js
index 3ef19bf5..1d7ed3ba 100644
--- a/dev/assets/manual_data_sources.md.BQtt5CoE.js
+++ b/dev/assets/manual_data_sources.md.D6fGpeK6.js
@@ -1,4 +1,4 @@
-import{_ as a,c as s,ai as t,o as i}from"./chunks/framework.CS7uZ9fp.js";const r="/Rasters.jl/dev/assets/aleahtu.CJTI567I.png",k=JSON.parse('{"title":"Data sources","description":"","frontmatter":{},"headers":[],"relativePath":"manual/data_sources.md","filePath":"manual/data_sources.md","lastUpdated":null}'),o={name:"manual/data_sources.md"};function n(d,e,l,c,h,p){return i(),s("div",null,e[0]||(e[0]=[t(`

Data sources

Rasters.jl uses a number of backends to load raster data. Raster, RasterStack and RasterSeries will detect which backend to use for you, automatically.

GDAL

All files GDAL can access, such as .tiff and .asc files, can be loaded, using ArchGDAL.jl. These are generally best loaded as Raster("filename.tif"), but can be loaded as RasterStack("filename.tif"; layersfrom=Band), taking layers from the Band dimension, which is also the default.

NetCDF

NetCDF .nc and some HDF5 .h5 files cab be loaded using NCDatasets.jl. Layers from files can be loaded as Raster("filename.nc"; name=:layername). Without name the first layer is used. RasterStack("filename.nc") will use all netcdf variables in the file that are not dimensions as layers.

NetCDF layers can have arbitrary dimensions. Known, common dimension names are converted to X, Y Z, and Ti, otherwise Dim{:layername} is used. Layers in the same file may also have different dimensions.

Zarr

Zarr files can be loaded with the ZarrDatasets.jl backend. Raster(filename; source=Zarrsource()) may be needed where the file type cant be detected from the filename. write does not yet work for Zarr but will in future.

GRIB

GRIB files can be loaded with the ZarrDatasets.jl. write is not implemented for GRIB.

GRD

R GRD files can be loaded natively, using Julias MMap - which means they are very fast, but are not compressed. They are always 3 dimensional, and have Y, X and Band dimensions.

julia
using Rasters

Writing file formats to disk

Files can be written to disk with ArchGDAL.jl and NCDatasets.jl backends using write("filename.ext", raster). See the docs for write.

They can (with some caveats) be written to different formats than they were loaded in as, providing file-type conversion for spatial data. Some metadata may be lost in formats that store little metadata, or where metadata conversion has not been completely implemented.

RasterDataSources.jl integration

RasterDataSources.jl standardises the download of common raster data sources, with a focus on datasets used in ecology and the environmental sciences. RasterDataSources.jl is tightly integrated into Rasters.jl, so that datsets and keywords can be used directly to download and load data as a Raster, RasterStack, or RasterSeries.

julia
using Rasters, CairoMakie, Dates
+import{_ as a,c as s,ai as t,o as i}from"./chunks/framework.CS7uZ9fp.js";const r="/Rasters.jl/dev/assets/pwjlbvi.CJTI567I.png",k=JSON.parse('{"title":"Data sources","description":"","frontmatter":{},"headers":[],"relativePath":"manual/data_sources.md","filePath":"manual/data_sources.md","lastUpdated":null}'),o={name:"manual/data_sources.md"};function n(d,e,l,c,h,p){return i(),s("div",null,e[0]||(e[0]=[t(`

Data sources

Rasters.jl uses a number of backends to load raster data. Raster, RasterStack and RasterSeries will detect which backend to use for you, automatically.

GDAL

All files GDAL can access, such as .tiff and .asc files, can be loaded, using ArchGDAL.jl. These are generally best loaded as Raster("filename.tif"), but can be loaded as RasterStack("filename.tif"; layersfrom=Band), taking layers from the Band dimension, which is also the default.

NetCDF

NetCDF .nc and some HDF5 .h5 files cab be loaded using NCDatasets.jl. Layers from files can be loaded as Raster("filename.nc"; name=:layername). Without name the first layer is used. RasterStack("filename.nc") will use all netcdf variables in the file that are not dimensions as layers.

NetCDF layers can have arbitrary dimensions. Known, common dimension names are converted to X, Y Z, and Ti, otherwise Dim{:layername} is used. Layers in the same file may also have different dimensions.

Zarr

Zarr files can be loaded with the ZarrDatasets.jl backend. Raster(filename; source=Zarrsource()) may be needed where the file type cant be detected from the filename. write does not yet work for Zarr but will in future.

GRIB

GRIB files can be loaded with the ZarrDatasets.jl. write is not implemented for GRIB.

GRD

R GRD files can be loaded natively, using Julias MMap - which means they are very fast, but are not compressed. They are always 3 dimensional, and have Y, X and Band dimensions.

julia
using Rasters

Writing file formats to disk

Files can be written to disk with ArchGDAL.jl and NCDatasets.jl backends using write("filename.ext", raster). See the docs for write.

They can (with some caveats) be written to different formats than they were loaded in as, providing file-type conversion for spatial data. Some metadata may be lost in formats that store little metadata, or where metadata conversion has not been completely implemented.

RasterDataSources.jl integration

RasterDataSources.jl standardises the download of common raster data sources, with a focus on datasets used in ecology and the environmental sciences. RasterDataSources.jl is tightly integrated into Rasters.jl, so that datsets and keywords can be used directly to download and load data as a Raster, RasterStack, or RasterSeries.

julia
using Rasters, CairoMakie, Dates
 using RasterDataSources
 A = Raster(WorldClim{Climate}, :tavg; month=June)
 Makie.plot(A)

See the docs for Raster, RasterStack and RasterSeries, and the docs for RasterDataSources.getraster for syntax to specify various data sources.

',22)]))}const f=a(o,[["render",n]]);export{k as __pageData,f as default}; diff --git a/dev/assets/manual_data_sources.md.BQtt5CoE.lean.js b/dev/assets/manual_data_sources.md.D6fGpeK6.lean.js similarity index 86% rename from dev/assets/manual_data_sources.md.BQtt5CoE.lean.js rename to dev/assets/manual_data_sources.md.D6fGpeK6.lean.js index c4085e3e..6fd68ad1 100644 --- a/dev/assets/manual_data_sources.md.BQtt5CoE.lean.js +++ b/dev/assets/manual_data_sources.md.D6fGpeK6.lean.js @@ -1 +1 @@ -import{_ as a,c as s,ai as t,o as i}from"./chunks/framework.CS7uZ9fp.js";const r="/Rasters.jl/dev/assets/aleahtu.CJTI567I.png",k=JSON.parse('{"title":"Data sources","description":"","frontmatter":{},"headers":[],"relativePath":"manual/data_sources.md","filePath":"manual/data_sources.md","lastUpdated":null}'),o={name:"manual/data_sources.md"};function n(d,e,l,c,h,p){return i(),s("div",null,e[0]||(e[0]=[t("",22)]))}const f=a(o,[["render",n]]);export{k as __pageData,f as default}; +import{_ as a,c as s,ai as t,o as i}from"./chunks/framework.CS7uZ9fp.js";const r="/Rasters.jl/dev/assets/pwjlbvi.CJTI567I.png",k=JSON.parse('{"title":"Data sources","description":"","frontmatter":{},"headers":[],"relativePath":"manual/data_sources.md","filePath":"manual/data_sources.md","lastUpdated":null}'),o={name:"manual/data_sources.md"};function n(d,e,l,c,h,p){return i(),s("div",null,e[0]||(e[0]=[t("",22)]))}const f=a(o,[["render",n]]);export{k as __pageData,f as default}; diff --git a/dev/assets/lpjjeuk.BtVap_ds.png b/dev/assets/maxvhnw.BtVap_ds.png similarity index 100% rename from dev/assets/lpjjeuk.BtVap_ds.png rename to dev/assets/maxvhnw.BtVap_ds.png diff --git a/dev/assets/dwjhmwz.DiS76DjI.png b/dev/assets/mcgxioy.DiS76DjI.png similarity index 100% rename from dev/assets/dwjhmwz.DiS76DjI.png rename to dev/assets/mcgxioy.DiS76DjI.png diff --git a/dev/assets/zrcbbdl.COZtemuK.png b/dev/assets/mlqvlbk.COZtemuK.png similarity index 100% rename from dev/assets/zrcbbdl.COZtemuK.png rename to dev/assets/mlqvlbk.COZtemuK.png diff --git a/dev/assets/ydeworb.DdtYyM8O.png b/dev/assets/nfuowhn.DdtYyM8O.png similarity index 100% rename from dev/assets/ydeworb.DdtYyM8O.png rename to dev/assets/nfuowhn.DdtYyM8O.png diff --git a/dev/assets/ooxrfqi.CO0mgiME.png b/dev/assets/npouqqo.CO0mgiME.png similarity index 100% rename from dev/assets/ooxrfqi.CO0mgiME.png rename to dev/assets/npouqqo.CO0mgiME.png diff --git a/dev/assets/kaghqrg.BjE2G97N.png b/dev/assets/numsjdg.BjE2G97N.png similarity index 100% rename from dev/assets/kaghqrg.BjE2G97N.png rename to dev/assets/numsjdg.BjE2G97N.png diff --git a/dev/assets/aleahtu.CJTI567I.png b/dev/assets/pwjlbvi.CJTI567I.png similarity index 100% rename from dev/assets/aleahtu.CJTI567I.png rename to dev/assets/pwjlbvi.CJTI567I.png diff --git a/dev/assets/xqrevef.BPZOvOxi.png b/dev/assets/rtqsxcn.BPZOvOxi.png similarity index 100% rename from dev/assets/xqrevef.BPZOvOxi.png rename to dev/assets/rtqsxcn.BPZOvOxi.png diff --git a/dev/assets/fmjlgpn.CVxd1wxn.png b/dev/assets/rtrytxw.CVxd1wxn.png similarity index 100% rename from dev/assets/fmjlgpn.CVxd1wxn.png rename to dev/assets/rtrytxw.CVxd1wxn.png diff --git a/dev/assets/rrszixb.D9tQTCLW.png b/dev/assets/sbxmsri.D9tQTCLW.png similarity index 100% rename from dev/assets/rrszixb.D9tQTCLW.png rename to dev/assets/sbxmsri.D9tQTCLW.png diff --git a/dev/assets/slskarr.DJPoMheF.png b/dev/assets/slskarr.DJPoMheF.png new file mode 100644 index 00000000..5e6c3d66 Binary files /dev/null and b/dev/assets/slskarr.DJPoMheF.png differ diff --git a/dev/assets/xzatirm.DojgcnZi.png b/dev/assets/tombfrf.DojgcnZi.png similarity index 100% rename from dev/assets/xzatirm.DojgcnZi.png rename to dev/assets/tombfrf.DojgcnZi.png diff --git a/dev/assets/zhghwpk.CUldC_pQ.png b/dev/assets/tqzmrxc.CUldC_pQ.png similarity index 100% rename from dev/assets/zhghwpk.CUldC_pQ.png rename to dev/assets/tqzmrxc.CUldC_pQ.png diff --git a/dev/assets/tutorials_gbif_wflow.md.CoZA3hlT.js b/dev/assets/tutorials_gbif_wflow.md.C6Zk9FfP.js similarity index 87% rename from dev/assets/tutorials_gbif_wflow.md.CoZA3hlT.js rename to dev/assets/tutorials_gbif_wflow.md.C6Zk9FfP.js index f921845e..3529be0d 100644 --- a/dev/assets/tutorials_gbif_wflow.md.CoZA3hlT.js +++ b/dev/assets/tutorials_gbif_wflow.md.C6Zk9FfP.js @@ -1,13 +1,13 @@ -import{_ as a,c as i,ai as n,o as e}from"./chunks/framework.CS7uZ9fp.js";const t="/Rasters.jl/dev/assets/ksljjed.DcvGbGtZ.png",p="/Rasters.jl/dev/assets/wbmakzk.CkoiSBCV.png",E=JSON.parse('{"title":"Species distribution modelling workflow","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/gbif_wflow.md","filePath":"tutorials/gbif_wflow.md","lastUpdated":null}'),l={name:"tutorials/gbif_wflow.md"};function h(o,s,r,k,d,c){return e(),i("div",null,s[0]||(s[0]=[n(`

Species distribution modelling workflow

This example shows a full Species distribution modelling workflow, from loading data, to cleaning it, to fitting an ensemble and generating predictions.

It uses GBIF and WorldClim data, which are common datasets in ecology. We'll load occurrences for the Mountain Pygmy Possum species using GBIF2.jl, an interface to the Global Biodiversity Information Facility, and extract environmental variables using BioClim data from RasterDataSources.jl.

Load Rasters, ArchGDAL, RasterDataSources and GBIF

The GBIF2 library is used to download occurrence data, RasterDataSources to conveniently access Bioclim data. ArchGDAL is necessary to load in the Bioclim data.

julia
using Rasters, GBIF2
+import{_ as a,c as i,ai as n,o as e}from"./chunks/framework.CS7uZ9fp.js";const t="/Rasters.jl/dev/assets/slskarr.DJPoMheF.png",p="/Rasters.jl/dev/assets/lqsoqjx.CQwE27po.png",E=JSON.parse('{"title":"Species distribution modelling workflow","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/gbif_wflow.md","filePath":"tutorials/gbif_wflow.md","lastUpdated":null}'),l={name:"tutorials/gbif_wflow.md"};function h(o,s,r,k,d,c){return e(),i("div",null,s[0]||(s[0]=[n(`

Species distribution modelling workflow

This example shows a full Species distribution modelling workflow, from loading data, to cleaning it, to fitting an ensemble and generating predictions.

It uses GBIF and WorldClim data, which are common datasets in ecology. We'll load occurrences for the Mountain Pygmy Possum species using GBIF2.jl, an interface to the Global Biodiversity Information Facility, and extract environmental variables using BioClim data from RasterDataSources.jl.

Load Rasters, ArchGDAL, RasterDataSources and GBIF

The GBIF2 library is used to download occurrence data, RasterDataSources to conveniently access Bioclim data. ArchGDAL is necessary to load in the Bioclim data.

julia
using Rasters, GBIF2
 using RasterDataSources, ArchGDAL

Load occurrences for the Mountain Pygmy Possum using GBIF.jl

julia
records = GBIF2.occurrence_search("Burramys parvus"; limit=300)
300-element GBIF2.Table{GBIF2.Occurrence, JSON3.Array{JSON3.Object, Vector{UInt8}, SubArray{UInt64, 1, Vector{UInt64}, Tuple{UnitRange{Int64}}, true}}}┌──────────────────────────┬─────────┬─────────┬─────────┬──────────┬───────────
 │                 geometry │    year │   month │     day │  kingdom │   phylum ⋯
 │ Tuple{Float64, Float64}? │  Int64? │  Int64? │  Int64? │  String? │  String? ⋯
 ├──────────────────────────┼─────────┼─────────┼─────────┼──────────┼───────────
 │                  missing │ missing │ missing │ missing │ Animalia │ Chordata ⋯
 │                  missing │    2021 │       1 │       6 │ Animalia │ Chordata ⋯
+│                  missing │ missing │ missing │ missing │ Animalia │ Chordata ⋯
 │      (148.391, -36.3036) │    2015 │      11 │      15 │ Animalia │ Chordata ⋯
 │      (148.333, -36.4333) │    2011 │      11 │      21 │ Animalia │ Chordata ⋯
-│                  missing │ missing │ missing │ missing │ Animalia │ Chordata ⋯
 │      (148.396, -36.3818) │    2016 │      11 │      15 │ Animalia │ Chordata ⋯
 │             (147.1, -37) │ missing │ missing │ missing │ Animalia │ Chordata ⋯
 │      (147.096, -36.9357) │    2020 │       2 │      10 │ Animalia │ Chordata ⋯
@@ -50,26 +50,26 @@ import{_ as a,c as i,ai as n,o as e}from"./chunks/framework.CS7uZ9fp.js";const t
 df = DataFrame(presences)
 df[1:5,:]

Sample background points

Next, sample random background points in the Raster. Rasters has a StatsBase extension to make this very straightforward. The syntax and output of Rasters.sample is very similar to that of extract.

julia
using StatsBase
 background = Rasters.sample(se_aus, 500, skipmissing = true)
500-element Vector{@NamedTuple{geometry::Tuple{Float64, Float64}, bio1::Float32, bio3::Float32, bio7::Float32, bio12::Float32}}:
- (geometry = (143.49999999999997, -35.0), bio1 = 16.920313, bio3 = 48.46072, bio7 = 28.61725, bio12 = 310.0)
- (geometry = (139.33333333333331, -33.333333333333336), bio1 = 17.204521, bio3 = 52.028885, bio7 = 28.8685, bio12 = 254.0)
- (geometry = (142.49999999999997, -31.5), bio1 = 19.189125, bio3 = 45.86967, bio7 = 30.271, bio12 = 218.0)
- (geometry = (139.66666666666666, -37.333333333333336), bio1 = 14.658376, bio3 = 47.899902, bio7 = 15.722448, bio12 = 664.0)
- (geometry = (145.33333333333331, -34.0), bio1 = 17.804218, bio3 = 46.467976, bio7 = 29.918499, bio12 = 398.0)
- (geometry = (149.33333333333331, -32.666666666666664), bio1 = 15.150573, bio3 = 45.629005, bio7 = 26.83075, bio12 = 775.0)
- (geometry = (143.66666666666666, -30.833333333333332), bio1 = 20.101542, bio3 = 44.904472, bio7 = 30.574999, bio12 = 239.0)
- (geometry = (143.49999999999997, -38.666666666666664), bio1 = 12.311052, bio3 = 44.804844, bio7 = 15.83325, bio12 = 1336.0)
- (geometry = (143.83333333333331, -26.333333333333332), bio1 = 22.566677, bio3 = 45.48981, bio7 = 30.887, bio12 = 351.0)
- (geometry = (148.33333333333331, -36.0), bio1 = 8.269542, bio3 = 41.030262, bio7 = 23.858, bio12 = 1440.0)
+ (geometry = (149.66666666666666, -29.833333333333332), bio1 = 19.277594, bio3 = 48.111637, bio7 = 29.77775, bio12 = 604.0)
+ (geometry = (143.33333333333331, -32.333333333333336), bio1 = 19.10275, bio3 = 48.054237, bio7 = 30.66275, bio12 = 255.0)
+ (geometry = (139.83333333333331, -36.166666666666664), bio1 = 15.692479, bio3 = 52.267757, bio7 = 23.0275, bio12 = 500.0)
+ (geometry = (146.16666666666666, -25.166666666666668), bio1 = 21.090136, bio3 = 52.078674, bio7 = 31.84425, bio12 = 509.0)
+ (geometry = (138.33333333333331, -35.666666666666664), bio1 = 14.930569, bio3 = 46.824715, bio7 = 18.039394, bio12 = 736.0)
+ (geometry = (147.66666666666666, -38.0), bio1 = 14.695862, bio3 = 48.73103, bio7 = 20.987919, bio12 = 684.0)
+ (geometry = (142.33333333333331, -29.166666666666668), bio1 = 21.126854, bio3 = 43.098442, bio7 = 30.489502, bio12 = 248.0)
+ (geometry = (147.99999999999997, -29.833333333333332), bio1 = 20.191978, bio3 = 47.133137, bio7 = 30.89325, bio12 = 464.0)
+ (geometry = (147.66666666666666, -25.666666666666668), bio1 = 18.96977, bio3 = 48.638035, bio7 = 29.10925, bio12 = 602.0)
+ (geometry = (138.16666666666666, -28.333333333333332), bio1 = 21.931553, bio3 = 45.243294, bio7 = 32.35825, bio12 = 141.0)
 
- (geometry = (145.83333333333331, -27.0), bio1 = 21.378376, bio3 = 46.3228, bio7 = 30.758251, bio12 = 406.0)
- (geometry = (141.49999999999997, -33.666666666666664), bio1 = 18.208448, bio3 = 48.684727, bio7 = 29.0925, bio12 = 272.0)
- (geometry = (146.49999999999997, -26.166666666666668), bio1 = 20.810135, bio3 = 48.435387, bio7 = 30.76775, bio12 = 506.0)
- (geometry = (140.83333333333331, -25.333333333333332), bio1 = 23.85276, bio3 = 45.726246, bio7 = 31.244501, bio12 = 245.0)
- (geometry = (151.83333333333331, -30.166666666666668), bio1 = 12.316885, bio3 = 46.64394, bio7 = 22.97275, bio12 = 945.0)
- (geometry = (150.33333333333331, -25.166666666666668), bio1 = 20.086199, bio3 = 52.501385, bio7 = 26.306252, bio12 = 652.0)
- (geometry = (149.33333333333331, -30.333333333333332), bio1 = 19.137678, bio3 = 49.03964, bio7 = 29.518002, bio12 = 619.0)
- (geometry = (148.33333333333331, -31.333333333333332), bio1 = 18.568552, bio3 = 47.261906, bio7 = 30.169252, bio12 = 538.0)
- (geometry = (145.99999999999997, -28.5), bio1 = 21.182594, bio3 = 45.081738, bio7 = 30.468498, bio12 = 371.0)

Fit a statistical ensemble

In this example, we will SpeciesDistributionModels.jl to fit a statistical ensemble to the occurrence and background data.

First we need to load the models. SDM.jl integrates with MLJ - see the model browser for what models are available.

julia
import Maxnet: MaxnetBinaryClassifier
+ (geometry = (141.33333333333331, -31.333333333333332), bio1 = 19.064573, bio3 = 45.707096, bio7 = 29.9375, bio12 = 225.0)
+ (geometry = (145.16666666666666, -29.666666666666668), bio1 = 20.742603, bio3 = 42.973637, bio7 = 30.06475, bio12 = 321.0)
+ (geometry = (148.33333333333331, -29.833333333333332), bio1 = 19.946312, bio3 = 47.627472, bio7 = 30.9515, bio12 = 519.0)
+ (geometry = (139.16666666666666, -32.333333333333336), bio1 = 17.610615, bio3 = 49.03897, bio7 = 30.234499, bio12 = 232.0)
+ (geometry = (144.66666666666666, -31.166666666666668), bio1 = 19.911459, bio3 = 45.083786, bio7 = 30.276499, bio12 = 273.0)
+ (geometry = (139.16666666666666, -27.0), bio1 = 22.7315, bio3 = 44.32267, bio7 = 32.254753, bio12 = 146.0)
+ (geometry = (138.33333333333331, -30.166666666666668), bio1 = 20.315365, bio3 = 45.981033, bio7 = 31.7645, bio12 = 165.0)
+ (geometry = (144.99999999999997, -34.833333333333336), bio1 = 17.051594, bio3 = 47.712032, bio7 = 29.765247, bio12 = 387.0)
+ (geometry = (139.99999999999997, -27.666666666666668), bio1 = 22.59774, bio3 = 44.158997, bio7 = 32.30075, bio12 = 168.0)

Fit a statistical ensemble

In this example, we will SpeciesDistributionModels.jl to fit a statistical ensemble to the occurrence and background data.

First we need to load the models. SDM.jl integrates with MLJ - see the model browser for what models are available.

julia
import Maxnet: MaxnetBinaryClassifier
 import MLJGLMInterface: LinearBinaryClassifier
 # define the models in the ensemble
 models = (
@@ -109,20 +109,20 @@ import{_ as a,c as i,ai as n,o as e}from"./chunks/framework.CS7uZ9fp.js";const t
 │    model │ accuracy │      auc │  log_loss │    kappa │
 │      Any │  Float64 │  Float64 │   Float64 │  Float64 │
 ├──────────┼──────────┼──────────┼───────────┼──────────┤
-│   maxnet │ 0.975432 │ 0.995305 │  0.204414 │ 0.944291 │
-│  maxnet2 │ 0.976096 │ 0.995163 │   0.19851 │ 0.946243 │
-│      glm │ 0.974104 │ 0.995784 │ 0.0785099 │ 0.941335 │
-│ ensemble │ 0.975432 │ 0.995446 │   0.13371 │ 0.944291 │
+│   maxnet │ 0.978088 │  0.99703 │  0.199762 │ 0.949934 │
+│  maxnet2 │ 0.978088 │ 0.995986 │  0.190764 │  0.94992 │
+│      glm │ 0.977424 │ 0.996619 │ 0.0646276 │  0.94846 │
+│ ensemble │ 0.978088 │ 0.996724 │  0.125842 │ 0.949887 │
 └──────────┴──────────┴──────────┴───────────┴──────────┘
 test
 ┌──────────┬──────────┬──────────┬───────────┬──────────┐
 │    model │ accuracy │      auc │  log_loss │    kappa │
 │      Any │  Float64 │  Float64 │   Float64 │  Float64 │
 ├──────────┼──────────┼──────────┼───────────┼──────────┤
-│   maxnet │ 0.977424 │ 0.994687 │  0.213052 │ 0.948857 │
-│  maxnet2 │ 0.976096 │ 0.994412 │  0.204085 │ 0.945886 │
-│      glm │ 0.976096 │ 0.994616 │ 0.0863287 │ 0.945886 │
-│ ensemble │ 0.976096 │ 0.994431 │  0.140398 │ 0.945886 │
+│   maxnet │ 0.978752 │ 0.996417 │  0.212947 │ 0.951177 │
+│  maxnet2 │  0.98008 │ 0.995477 │  0.201635 │ 0.954096 │
+│      glm │ 0.977424 │ 0.995067 │ 0.0861123 │ 0.948418 │
+│ ensemble │ 0.977424 │ 0.995396 │  0.142381 │ 0.948418 │
 └──────────┴──────────┴──────────┴───────────┴──────────┘

Not too bad!

Make predictions of climatic suitability

Use the ensemble to

julia
suitability = SDM.predict(ensemble, se_aus, reducer = mean)
┌ 101×90 Raster{Union{Missing, Float64}, 2} ┐
 ├───────────────────────────────────────────┴──────────────────────────── dims ┐
   ↓ X Projected{Float64} 138.16666666666666:0.16666666666666666:154.83333333333331 ForwardOrdered Regular Intervals{Start},
@@ -133,10 +133,10 @@ import{_ as a,c as i,ai as n,o as e}from"./chunks/framework.CS7uZ9fp.js";const t
   crs: GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]
 └──────────────────────────────────────────────────────────────────────────────┘
    ↓ →    -25.1667      -25.3333      …  -39.6667    -39.8333    -40.0
- 138.167    1.54196e-5    1.67051e-5        missing     missing     missing
- 138.333    1.57076e-5    1.71852e-5        missing     missing     missing
- 138.5      1.83785e-5    2.0916e-5         missing     missing     missing
- 138.667    2.00135e-5    2.64619e-5        missing     missing     missing
+ 138.167    5.2285e-6     5.66439e-6        missing     missing     missing
+ 138.333    5.32807e-6    5.82559e-6        missing     missing     missing
+ 138.5      6.23186e-6    7.15985e-6        missing     missing     missing
+ 138.667    6.90036e-6    9.21705e-6        missing     missing     missing
    ⋮                                  ⋱                            ⋮
  154.167     missing       missing          missing     missing     missing
  154.333     missing       missing          missing     missing     missing
diff --git a/dev/assets/tutorials_gbif_wflow.md.CoZA3hlT.lean.js b/dev/assets/tutorials_gbif_wflow.md.C6Zk9FfP.lean.js
similarity index 77%
rename from dev/assets/tutorials_gbif_wflow.md.CoZA3hlT.lean.js
rename to dev/assets/tutorials_gbif_wflow.md.C6Zk9FfP.lean.js
index 2d58bc20..3c4f1362 100644
--- a/dev/assets/tutorials_gbif_wflow.md.CoZA3hlT.lean.js
+++ b/dev/assets/tutorials_gbif_wflow.md.C6Zk9FfP.lean.js
@@ -1 +1 @@
-import{_ as a,c as i,ai as n,o as e}from"./chunks/framework.CS7uZ9fp.js";const t="/Rasters.jl/dev/assets/ksljjed.DcvGbGtZ.png",p="/Rasters.jl/dev/assets/wbmakzk.CkoiSBCV.png",E=JSON.parse('{"title":"Species distribution modelling workflow","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/gbif_wflow.md","filePath":"tutorials/gbif_wflow.md","lastUpdated":null}'),l={name:"tutorials/gbif_wflow.md"};function h(o,s,r,k,d,c){return e(),i("div",null,s[0]||(s[0]=[n("",48)]))}const u=a(l,[["render",h]]);export{E as __pageData,u as default};
+import{_ as a,c as i,ai as n,o as e}from"./chunks/framework.CS7uZ9fp.js";const t="/Rasters.jl/dev/assets/slskarr.DJPoMheF.png",p="/Rasters.jl/dev/assets/lqsoqjx.CQwE27po.png",E=JSON.parse('{"title":"Species distribution modelling workflow","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/gbif_wflow.md","filePath":"tutorials/gbif_wflow.md","lastUpdated":null}'),l={name:"tutorials/gbif_wflow.md"};function h(o,s,r,k,d,c){return e(),i("div",null,s[0]||(s[0]=[n("",48)]))}const u=a(l,[["render",h]]);export{E as __pageData,u as default};
diff --git a/dev/assets/tutorials_plot_makie.md.m_Nl5W9Y.js b/dev/assets/tutorials_plot_makie.md.Bk_H4aZQ.js
similarity index 99%
rename from dev/assets/tutorials_plot_makie.md.m_Nl5W9Y.js
rename to dev/assets/tutorials_plot_makie.md.Bk_H4aZQ.js
index adbe1222..440abc06 100644
--- a/dev/assets/tutorials_plot_makie.md.m_Nl5W9Y.js
+++ b/dev/assets/tutorials_plot_makie.md.Bk_H4aZQ.js
@@ -1,4 +1,4 @@
-import{_ as n,c as e,ai as a,j as i,a as l,G as h,B as p,o as k}from"./chunks/framework.CS7uZ9fp.js";const r="/Rasters.jl/dev/assets/srtxwje.N8Gnvb1L.png",d="/Rasters.jl/dev/assets/rjnlssn.BEMMLBYp.png",o="/Rasters.jl/dev/assets/cdghvgx.ChOTZYBM.png",E="/Rasters.jl/dev/assets/rplot.DkEPD8lH.mp4",g="/Rasters.jl/dev/assets/aus_trim.Dy0S3fw0.png",v=JSON.parse('{"title":"reset theme","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/plot_makie.md","filePath":"tutorials/plot_makie.md","lastUpdated":null}'),c={name:"tutorials/plot_makie.md"},y={class:"jldocstring custom-block",open:""};function F(u,s,C,m,b,A){const t=p("Badge");return k(),e("div",null,[s[3]||(s[3]=a(`

Plotting in Makie

Plotting in Makie works somewhat differently than Plots, since the recipe system is different. You can pass a 2-D raster to any surface-like function (heatmap, contour, contourf, or even surface for a 3D plot) with ease.

2-D rasters in Makie

julia
using CairoMakie, Makie
+import{_ as n,c as e,ai as a,j as i,a as l,G as h,B as p,o as k}from"./chunks/framework.CS7uZ9fp.js";const r="/Rasters.jl/dev/assets/iellglg.N8Gnvb1L.png",d="/Rasters.jl/dev/assets/ubmapbb.BEMMLBYp.png",o="/Rasters.jl/dev/assets/zeesmxw.ChOTZYBM.png",E="/Rasters.jl/dev/assets/rplot.DkEPD8lH.mp4",g="/Rasters.jl/dev/assets/aus_trim.Dy0S3fw0.png",v=JSON.parse('{"title":"reset theme","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/plot_makie.md","filePath":"tutorials/plot_makie.md","lastUpdated":null}'),c={name:"tutorials/plot_makie.md"},y={class:"jldocstring custom-block",open:""};function F(u,s,C,m,b,A){const t=p("Badge");return k(),e("div",null,[s[3]||(s[3]=a(`

Plotting in Makie

Plotting in Makie works somewhat differently than Plots, since the recipe system is different. You can pass a 2-D raster to any surface-like function (heatmap, contour, contourf, or even surface for a 3D plot) with ease.

2-D rasters in Makie

julia
using CairoMakie, Makie
 using Rasters, RasterDataSources, ArchGDAL
 A = Raster(WorldClim{BioClim}, 5) # this is a 3D raster, so is not accepted.
┌ 2160×1080 Raster{Union{Missing, Float32}, 2} bio5 ┐
 ├───────────────────────────────────────────────────┴──────────────────── dims ┐
@@ -33,7 +33,7 @@ import{_ as n,c as e,ai as a,j as i,a as l,G as h,B as p,o as k}from"./chunks/fr
 )
 record(fig, "rplot.mp4", 1:12; framerate = 3) do i
     stack_obs[] = RasterStack(WorldClim{Climate}; month = i)
-end
"rplot.mp4"

julia
Makie.set_theme!() # reset theme
',25)),i("details",y,[i("summary",null,[s[0]||(s[0]=i("a",{id:"Rasters.rplot",href:"#Rasters.rplot"},[i("span",{class:"jlbinding"},"Rasters.rplot")],-1)),s[1]||(s[1]=l()),h(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=a('
julia
Rasters.rplot([position::GridPosition], raster; kw...)

raster may be a Raster (of 2 or 3 dimensions) or a RasterStack whose underlying rasters are 2 dimensional, or 3-dimensional with a singleton (length-1) third dimension.

Keywords

  • plottype = Makie.Heatmap: The type of plot. Can be any Makie plot type which accepts a Raster; in practice, Heatmap, Contour, Contourf and Surface are the best bets.

  • axistype = Makie.Axis: The type of axis. This can be an Axis, Axis3, LScene, or even a GeoAxis from GeoMakie.jl.

  • X = XDim: The X dimension of the raster.

  • Y = YDim: The Y dimension of the raster.

  • Z = YDim: The Y dimension of the raster.

  • draw_colorbar = true: Whether to draw a colorbar for the axis or not.

  • colorbar_position = Makie.Right(): Indicates which side of the axis the colorbar should be placed on. Can be Makie.Top(), Makie.Bottom(), Makie.Left(), or Makie.Right().

  • colorbar_padding = Makie.automatic: The amount of padding between the colorbar and its axis. If automatic, then this is set to the width of the colorbar.

  • title = Makie.automatic: The titles of each plot. If automatic, these are set to the name of the band.

  • xlabel = Makie.automatic: The x-label for the axis. If automatic, set to the dimension name of the X-dimension of the raster.

  • ylabel = Makie.automatic: The y-label for the axis. If automatic, set to the dimension name of the Y-dimension of the raster.

  • colorbarlabel = "": Usually nothing, but here if you need it. Sets the label on the colorbar.

  • colormap = nothing: The colormap for the heatmap. This can be set to a vector of colormaps (symbols, strings, cgrads) if plotting a 3D raster or RasterStack.

  • colorrange = Makie.automatic: The colormap for the heatmap. This can be set to a vector of (low, high) if plotting a 3D raster or RasterStack.

  • nan_color = :transparent: The color which NaN values should take. Default to transparent.

source

',5))]),s[4]||(s[4]=a(`

Using vanilla Makie

julia
using Rasters, RasterDataSources

The data

julia
layers = (:evenness, :range, :contrast, :correlation)
+end
"rplot.mp4"

julia
Makie.set_theme!() # reset theme
',25)),i("details",y,[i("summary",null,[s[0]||(s[0]=i("a",{id:"Rasters.rplot",href:"#Rasters.rplot"},[i("span",{class:"jlbinding"},"Rasters.rplot")],-1)),s[1]||(s[1]=l()),h(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=a('
julia
Rasters.rplot([position::GridPosition], raster; kw...)

raster may be a Raster (of 2 or 3 dimensions) or a RasterStack whose underlying rasters are 2 dimensional, or 3-dimensional with a singleton (length-1) third dimension.

Keywords

  • plottype = Makie.Heatmap: The type of plot. Can be any Makie plot type which accepts a Raster; in practice, Heatmap, Contour, Contourf and Surface are the best bets.

  • axistype = Makie.Axis: The type of axis. This can be an Axis, Axis3, LScene, or even a GeoAxis from GeoMakie.jl.

  • X = XDim: The X dimension of the raster.

  • Y = YDim: The Y dimension of the raster.

  • Z = YDim: The Y dimension of the raster.

  • draw_colorbar = true: Whether to draw a colorbar for the axis or not.

  • colorbar_position = Makie.Right(): Indicates which side of the axis the colorbar should be placed on. Can be Makie.Top(), Makie.Bottom(), Makie.Left(), or Makie.Right().

  • colorbar_padding = Makie.automatic: The amount of padding between the colorbar and its axis. If automatic, then this is set to the width of the colorbar.

  • title = Makie.automatic: The titles of each plot. If automatic, these are set to the name of the band.

  • xlabel = Makie.automatic: The x-label for the axis. If automatic, set to the dimension name of the X-dimension of the raster.

  • ylabel = Makie.automatic: The y-label for the axis. If automatic, set to the dimension name of the Y-dimension of the raster.

  • colorbarlabel = "": Usually nothing, but here if you need it. Sets the label on the colorbar.

  • colormap = nothing: The colormap for the heatmap. This can be set to a vector of colormaps (symbols, strings, cgrads) if plotting a 3D raster or RasterStack.

  • colorrange = Makie.automatic: The colormap for the heatmap. This can be set to a vector of (low, high) if plotting a 3D raster or RasterStack.

  • nan_color = :transparent: The color which NaN values should take. Default to transparent.

source

',5))]),s[4]||(s[4]=a(`

Using vanilla Makie

julia
using Rasters, RasterDataSources

The data

julia
layers = (:evenness, :range, :contrast, :correlation)
 st = RasterStack(EarthEnv{HabitatHeterogeneity}, layers)
 ausbounds = X(100 .. 160), Y(-50 .. -10) # Roughly cut out australia
 aus = st[ausbounds...] |> Rasters.trim
┌ 194×161 RasterStack ┐
diff --git a/dev/assets/tutorials_plot_makie.md.m_Nl5W9Y.lean.js b/dev/assets/tutorials_plot_makie.md.Bk_H4aZQ.lean.js
similarity index 87%
rename from dev/assets/tutorials_plot_makie.md.m_Nl5W9Y.lean.js
rename to dev/assets/tutorials_plot_makie.md.Bk_H4aZQ.lean.js
index 25f25df2..ac57a27c 100644
--- a/dev/assets/tutorials_plot_makie.md.m_Nl5W9Y.lean.js
+++ b/dev/assets/tutorials_plot_makie.md.Bk_H4aZQ.lean.js
@@ -1 +1 @@
-import{_ as n,c as e,ai as a,j as i,a as l,G as h,B as p,o as k}from"./chunks/framework.CS7uZ9fp.js";const r="/Rasters.jl/dev/assets/srtxwje.N8Gnvb1L.png",d="/Rasters.jl/dev/assets/rjnlssn.BEMMLBYp.png",o="/Rasters.jl/dev/assets/cdghvgx.ChOTZYBM.png",E="/Rasters.jl/dev/assets/rplot.DkEPD8lH.mp4",g="/Rasters.jl/dev/assets/aus_trim.Dy0S3fw0.png",v=JSON.parse('{"title":"reset theme","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/plot_makie.md","filePath":"tutorials/plot_makie.md","lastUpdated":null}'),c={name:"tutorials/plot_makie.md"},y={class:"jldocstring custom-block",open:""};function F(u,s,C,m,b,A){const t=p("Badge");return k(),e("div",null,[s[3]||(s[3]=a("",25)),i("details",y,[i("summary",null,[s[0]||(s[0]=i("a",{id:"Rasters.rplot",href:"#Rasters.rplot"},[i("span",{class:"jlbinding"},"Rasters.rplot")],-1)),s[1]||(s[1]=l()),h(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=a("",5))]),s[4]||(s[4]=a("",9))])}const B=n(c,[["render",F]]);export{v as __pageData,B as default};
+import{_ as n,c as e,ai as a,j as i,a as l,G as h,B as p,o as k}from"./chunks/framework.CS7uZ9fp.js";const r="/Rasters.jl/dev/assets/iellglg.N8Gnvb1L.png",d="/Rasters.jl/dev/assets/ubmapbb.BEMMLBYp.png",o="/Rasters.jl/dev/assets/zeesmxw.ChOTZYBM.png",E="/Rasters.jl/dev/assets/rplot.DkEPD8lH.mp4",g="/Rasters.jl/dev/assets/aus_trim.Dy0S3fw0.png",v=JSON.parse('{"title":"reset theme","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/plot_makie.md","filePath":"tutorials/plot_makie.md","lastUpdated":null}'),c={name:"tutorials/plot_makie.md"},y={class:"jldocstring custom-block",open:""};function F(u,s,C,m,b,A){const t=p("Badge");return k(),e("div",null,[s[3]||(s[3]=a("",25)),i("details",y,[i("summary",null,[s[0]||(s[0]=i("a",{id:"Rasters.rplot",href:"#Rasters.rplot"},[i("span",{class:"jlbinding"},"Rasters.rplot")],-1)),s[1]||(s[1]=l()),h(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=a("",5))]),s[4]||(s[4]=a("",9))])}const B=n(c,[["render",F]]);export{v as __pageData,B as default};
diff --git a/dev/assets/tutorials_plotting.md.Bp0b_z1R.lean.js b/dev/assets/tutorials_plotting.md.Bp0b_z1R.lean.js
deleted file mode 100644
index 06a32b86..00000000
--- a/dev/assets/tutorials_plotting.md.Bp0b_z1R.lean.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as a,c as i,ai as n,o as t}from"./chunks/framework.CS7uZ9fp.js";const e="/Rasters.jl/dev/assets/errlplt.oyWWmvC1.png",p="/Rasters.jl/dev/assets/kaghqrg.BjE2G97N.png",l="/Rasters.jl/dev/assets/wlywzsg.2YhfOv1i.png",h="/Rasters.jl/dev/assets/ooxrfqi.CO0mgiME.png",k="/Rasters.jl/dev/assets/vvaznqm.BsE3Kr89.png",o="/Rasters.jl/dev/assets/fmjlgpn.CVxd1wxn.png",d="/Rasters.jl/dev/assets/xqrevef.BPZOvOxi.png",r="/Rasters.jl/dev/assets/mywptmj.Djo3H46f.png",c="/Rasters.jl/dev/assets/zhghwpk.CUldC_pQ.png",g="/Rasters.jl/dev/assets/tjcwnao.DI2ee96v.png",E="/Rasters.jl/dev/assets/rrszixb.D9tQTCLW.png",u="/Rasters.jl/dev/assets/ixwxbux.BYXOCgVD.png",w=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/plotting.md","filePath":"tutorials/plotting.md","lastUpdated":null}'),y={name:"tutorials/plotting.md"};function m(F,s,C,v,b,q){return t(),i("div",null,s[0]||(s[0]=[n("",78)]))}const A=a(y,[["render",m]]);export{w as __pageData,A as default};
diff --git a/dev/assets/tutorials_plotting.md.Bp0b_z1R.js b/dev/assets/tutorials_plotting.md.X0dPKc4T.js
similarity index 98%
rename from dev/assets/tutorials_plotting.md.Bp0b_z1R.js
rename to dev/assets/tutorials_plotting.md.X0dPKc4T.js
index 419dda5f..67e27261 100644
--- a/dev/assets/tutorials_plotting.md.Bp0b_z1R.js
+++ b/dev/assets/tutorials_plotting.md.X0dPKc4T.js
@@ -1,4 +1,4 @@
-import{_ as a,c as i,ai as n,o as t}from"./chunks/framework.CS7uZ9fp.js";const e="/Rasters.jl/dev/assets/errlplt.oyWWmvC1.png",p="/Rasters.jl/dev/assets/kaghqrg.BjE2G97N.png",l="/Rasters.jl/dev/assets/wlywzsg.2YhfOv1i.png",h="/Rasters.jl/dev/assets/ooxrfqi.CO0mgiME.png",k="/Rasters.jl/dev/assets/vvaznqm.BsE3Kr89.png",o="/Rasters.jl/dev/assets/fmjlgpn.CVxd1wxn.png",d="/Rasters.jl/dev/assets/xqrevef.BPZOvOxi.png",r="/Rasters.jl/dev/assets/mywptmj.Djo3H46f.png",c="/Rasters.jl/dev/assets/zhghwpk.CUldC_pQ.png",g="/Rasters.jl/dev/assets/tjcwnao.DI2ee96v.png",E="/Rasters.jl/dev/assets/rrszixb.D9tQTCLW.png",u="/Rasters.jl/dev/assets/ixwxbux.BYXOCgVD.png",w=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/plotting.md","filePath":"tutorials/plotting.md","lastUpdated":null}'),y={name:"tutorials/plotting.md"};function m(F,s,C,v,b,q){return t(),i("div",null,s[0]||(s[0]=[n(`

Plots, simple

Plots.jl and Makie.jl are fully supported by Rasters.jl, with recipes for plotting Raster and RasterStack provided. plot will plot a heatmap with axes matching dimension values. If mappedcrs is used, converted values will be shown on axes instead of the underlying crs values. contourf will similarly plot a filled contour plot.

Pixel resolution is limited to allow loading very large files quickly. max_res specifies the maximum pixel resolution to show on the longest axis of the array. It can be set manually to change the resolution (e.g. for large or high-quality plots):

julia
using Rasters, RasterDataSources, ArchGDAL, Plots
+import{_ as a,c as i,ai as n,o as t}from"./chunks/framework.CS7uZ9fp.js";const e="/Rasters.jl/dev/assets/avhnerf.oyWWmvC1.png",p="/Rasters.jl/dev/assets/numsjdg.BjE2G97N.png",l="/Rasters.jl/dev/assets/zxhifqy.2YhfOv1i.png",h="/Rasters.jl/dev/assets/npouqqo.CO0mgiME.png",k="/Rasters.jl/dev/assets/lzzhhns.BsE3Kr89.png",o="/Rasters.jl/dev/assets/rtrytxw.CVxd1wxn.png",d="/Rasters.jl/dev/assets/rtqsxcn.BPZOvOxi.png",r="/Rasters.jl/dev/assets/yapdujk.Djo3H46f.png",c="/Rasters.jl/dev/assets/tqzmrxc.CUldC_pQ.png",g="/Rasters.jl/dev/assets/fzkdzsl.DI2ee96v.png",E="/Rasters.jl/dev/assets/sbxmsri.D9tQTCLW.png",u="/Rasters.jl/dev/assets/wlqbrzs.BYXOCgVD.png",A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/plotting.md","filePath":"tutorials/plotting.md","lastUpdated":null}'),y={name:"tutorials/plotting.md"};function m(F,s,C,v,b,q){return t(),i("div",null,s[0]||(s[0]=[n(`

Plots, simple

Plots.jl and Makie.jl are fully supported by Rasters.jl, with recipes for plotting Raster and RasterStack provided. plot will plot a heatmap with axes matching dimension values. If mappedcrs is used, converted values will be shown on axes instead of the underlying crs values. contourf will similarly plot a filled contour plot.

Pixel resolution is limited to allow loading very large files quickly. max_res specifies the maximum pixel resolution to show on the longest axis of the array. It can be set manually to change the resolution (e.g. for large or high-quality plots):

julia
using Rasters, RasterDataSources, ArchGDAL, Plots
 A = Raster(WorldClim{BioClim}, 5)
 plot(A; max_res=3000)

For Makie, plot functions in a similar way. plot will only accept two-dimensional rasters. You can invoke contour, contourf, heatmap, surface or any Makie plotting function which supports surface-like data on a 2D raster.

To obtain tiled plots for 3D rasters and RasterStacks, use the function Rasters.rplot([gridposition], raster; kw_args...). This is an unexported function, since we're not sure how the API will change going forward.

Makie, simple

julia
using CairoMakie
 CairoMakie.activate!(px_per_unit = 2)
@@ -130,4 +130,4 @@ import{_ as a,c as i,ai as n,o as t}from"./chunks/framework.CS7uZ9fp.js";const e
 write("scandinavia.tif", scandinavia)
(tmin = "scandinavia_tmin.tif",
  tmax = "scandinavia_tmax.tif",
  prec = "scandinavia_prec.tif",
- wind = "scandinavia_wind.tif",)

Rasters.jl provides a range of other methods that are being added to over time. Where applicable these methods read and write lazily to and from disk-based arrays of common raster file types. These methods also work for entire RasterStacks and RasterSeries using the same syntax.

`,78)]))}const A=a(y,[["render",m]]);export{w as __pageData,A as default}; + wind = "scandinavia_wind.tif",)

Rasters.jl provides a range of other methods that are being added to over time. Where applicable these methods read and write lazily to and from disk-based arrays of common raster file types. These methods also work for entire RasterStacks and RasterSeries using the same syntax.

`,78)]))}const w=a(y,[["render",m]]);export{A as __pageData,w as default}; diff --git a/dev/assets/tutorials_plotting.md.X0dPKc4T.lean.js b/dev/assets/tutorials_plotting.md.X0dPKc4T.lean.js new file mode 100644 index 00000000..9522b6bd --- /dev/null +++ b/dev/assets/tutorials_plotting.md.X0dPKc4T.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,ai as n,o as t}from"./chunks/framework.CS7uZ9fp.js";const e="/Rasters.jl/dev/assets/avhnerf.oyWWmvC1.png",p="/Rasters.jl/dev/assets/numsjdg.BjE2G97N.png",l="/Rasters.jl/dev/assets/zxhifqy.2YhfOv1i.png",h="/Rasters.jl/dev/assets/npouqqo.CO0mgiME.png",k="/Rasters.jl/dev/assets/lzzhhns.BsE3Kr89.png",o="/Rasters.jl/dev/assets/rtrytxw.CVxd1wxn.png",d="/Rasters.jl/dev/assets/rtqsxcn.BPZOvOxi.png",r="/Rasters.jl/dev/assets/yapdujk.Djo3H46f.png",c="/Rasters.jl/dev/assets/tqzmrxc.CUldC_pQ.png",g="/Rasters.jl/dev/assets/fzkdzsl.DI2ee96v.png",E="/Rasters.jl/dev/assets/sbxmsri.D9tQTCLW.png",u="/Rasters.jl/dev/assets/wlqbrzs.BYXOCgVD.png",A=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/plotting.md","filePath":"tutorials/plotting.md","lastUpdated":null}'),y={name:"tutorials/plotting.md"};function m(F,s,C,v,b,q){return t(),i("div",null,s[0]||(s[0]=[n("",78)]))}const w=a(y,[["render",m]]);export{A as __pageData,w as default}; diff --git a/dev/assets/tutorials_resample.md.BDA314Vu.js b/dev/assets/tutorials_resample.md.BAA4w3x2.js similarity index 99% rename from dev/assets/tutorials_resample.md.BDA314Vu.js rename to dev/assets/tutorials_resample.md.BAA4w3x2.js index 34fb5315..35bc3cee 100644 --- a/dev/assets/tutorials_resample.md.BDA314Vu.js +++ b/dev/assets/tutorials_resample.md.BAA4w3x2.js @@ -1,4 +1,4 @@ -import{_ as p,c as d,ai as l,G as e,w as n,B as k,o as r,j as s,a as i}from"./chunks/framework.CS7uZ9fp.js";const g="/Rasters.jl/dev/assets/sntyqhb.BDm3KuYD.png",E="/Rasters.jl/dev/assets/dxilzxn.Czv1U7Yt.png",o="/Rasters.jl/dev/assets/dwjhmwz.DiS76DjI.png",y="/Rasters.jl/dev/assets/nqvouic.BEz2b9t9.png",c="/Rasters.jl/dev/assets/zrcbbdl.COZtemuK.png",u="/Rasters.jl/dev/assets/zqfwwxq.FyCPqsB9.png",F="/Rasters.jl/dev/assets/lpjjeuk.BtVap_ds.png",B=JSON.parse('{"title":"Reprojection and resampling","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/resample.md","filePath":"tutorials/resample.md","lastUpdated":null}'),f={name:"tutorials/resample.md"};function C(N,a,m,v,b,A){const t=k("PluginTabsTab"),h=k("PluginTabs");return r(),d("div",null,[a[4]||(a[4]=l(`

Reprojection and resampling

What is resampling?

resample "re-samples" the data by interpolation and can also aggregate or disaggregate, changing the resolution. It always returns a Regular lookup (like a range), and is the most flexible of the resampling methods.

This uses GDAL's gdalwarp algorithm under the hood. You can call that via warp if you need more control, but generally resample is sufficient.

warp, contributions are welcome!

  • Show how to use warp to reproject a raster

Rasters.jl has a few other methods to change the lookups of a raster. These are:

  • reproject, which directly reprojects the lookup axes (but is only usable for specific cases, where the source and destination coordinate systems are both cylindrical, like the long-lat, Mercator, or Web-Mercator projections.) This is a lossless operation and keeps the data exactly the same - only the axes are changed.

  • aggregate and disaggregate, which change the resolution of the raster by merging (aggregate) or splitting (disaggregate) cells. They can't change cells fractionally, and can't change the projection or coordinate system.

Of all these methods, resample is the most flexible and powerful, and is what we will focus on here. It is, however, also the slowest. So if another method is applicable to your problem, you should consider it.

How resample works

resample uses GDAL's gdalwarp algorithm under the hood. This is a battle-tested algorithm and is generally pretty robust. However, it has the following limitations:

  • It always assumes cell-based sampling, instead of point-based sampling. This does mean that point-based rasters are converted to cell-based sampling.

  • It can only accept some primitive types for the input data, since that data is passed directly to a C library. Things like RGB or user-defined types are not usually supported.

resample allows you to specify several methods, see some of them in the next section.

resolution, size and methods

Let's start by loading the necessary packages:

julia
using Rasters, RasterDataSources, ArchGDAL
+import{_ as p,c as d,ai as l,G as e,w as n,B as k,o as r,j as s,a as i}from"./chunks/framework.CS7uZ9fp.js";const g="/Rasters.jl/dev/assets/brxcfjr.BDm3KuYD.png",E="/Rasters.jl/dev/assets/zkyycgs.Czv1U7Yt.png",o="/Rasters.jl/dev/assets/mcgxioy.DiS76DjI.png",y="/Rasters.jl/dev/assets/bmhpyef.BEz2b9t9.png",c="/Rasters.jl/dev/assets/mlqvlbk.COZtemuK.png",u="/Rasters.jl/dev/assets/kimqups.FyCPqsB9.png",F="/Rasters.jl/dev/assets/maxvhnw.BtVap_ds.png",B=JSON.parse('{"title":"Reprojection and resampling","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/resample.md","filePath":"tutorials/resample.md","lastUpdated":null}'),f={name:"tutorials/resample.md"};function C(N,a,m,v,b,A){const t=k("PluginTabsTab"),h=k("PluginTabs");return r(),d("div",null,[a[4]||(a[4]=l(`

Reprojection and resampling

What is resampling?

resample "re-samples" the data by interpolation and can also aggregate or disaggregate, changing the resolution. It always returns a Regular lookup (like a range), and is the most flexible of the resampling methods.

This uses GDAL's gdalwarp algorithm under the hood. You can call that via warp if you need more control, but generally resample is sufficient.

warp, contributions are welcome!

  • Show how to use warp to reproject a raster

Rasters.jl has a few other methods to change the lookups of a raster. These are:

  • reproject, which directly reprojects the lookup axes (but is only usable for specific cases, where the source and destination coordinate systems are both cylindrical, like the long-lat, Mercator, or Web-Mercator projections.) This is a lossless operation and keeps the data exactly the same - only the axes are changed.

  • aggregate and disaggregate, which change the resolution of the raster by merging (aggregate) or splitting (disaggregate) cells. They can't change cells fractionally, and can't change the projection or coordinate system.

Of all these methods, resample is the most flexible and powerful, and is what we will focus on here. It is, however, also the slowest. So if another method is applicable to your problem, you should consider it.

How resample works

resample uses GDAL's gdalwarp algorithm under the hood. This is a battle-tested algorithm and is generally pretty robust. However, it has the following limitations:

  • It always assumes cell-based sampling, instead of point-based sampling. This does mean that point-based rasters are converted to cell-based sampling.

  • It can only accept some primitive types for the input data, since that data is passed directly to a C library. Things like RGB or user-defined types are not usually supported.

resample allows you to specify several methods, see some of them in the next section.

resolution, size and methods

Let's start by loading the necessary packages:

julia
using Rasters, RasterDataSources, ArchGDAL
 using DimensionalData
 using DimensionalData.Lookups
 using NaNStatistics
diff --git a/dev/assets/tutorials_resample.md.BDA314Vu.lean.js b/dev/assets/tutorials_resample.md.BAA4w3x2.lean.js
similarity index 99%
rename from dev/assets/tutorials_resample.md.BDA314Vu.lean.js
rename to dev/assets/tutorials_resample.md.BAA4w3x2.lean.js
index ce857b90..0b86671d 100644
--- a/dev/assets/tutorials_resample.md.BDA314Vu.lean.js
+++ b/dev/assets/tutorials_resample.md.BAA4w3x2.lean.js
@@ -1,4 +1,4 @@
-import{_ as p,c as d,ai as l,G as e,w as n,B as k,o as r,j as s,a as i}from"./chunks/framework.CS7uZ9fp.js";const g="/Rasters.jl/dev/assets/sntyqhb.BDm3KuYD.png",E="/Rasters.jl/dev/assets/dxilzxn.Czv1U7Yt.png",o="/Rasters.jl/dev/assets/dwjhmwz.DiS76DjI.png",y="/Rasters.jl/dev/assets/nqvouic.BEz2b9t9.png",c="/Rasters.jl/dev/assets/zrcbbdl.COZtemuK.png",u="/Rasters.jl/dev/assets/zqfwwxq.FyCPqsB9.png",F="/Rasters.jl/dev/assets/lpjjeuk.BtVap_ds.png",B=JSON.parse('{"title":"Reprojection and resampling","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/resample.md","filePath":"tutorials/resample.md","lastUpdated":null}'),f={name:"tutorials/resample.md"};function C(N,a,m,v,b,A){const t=k("PluginTabsTab"),h=k("PluginTabs");return r(),d("div",null,[a[4]||(a[4]=l("",18)),e(h,null,{default:n(()=>[e(t,{label:"size"},{default:n(()=>a[0]||(a[0]=[s("div",{class:"language-julia vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"julia"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"julia"),s("span",{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"}},">"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ras_sample "),s("span",{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"}},"="),s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," resample"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"(ras_m; size"),s("span",{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"}},"="),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"("),s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},"1440"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", "),s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},"720"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"), method"),s("span",{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"}},"="),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"average"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},")")])])])],-1),s("div",{class:"language- vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"}),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#959da5","--shiki-dark":"#959da5"}},"┌ "),s("span",{style:{"--shiki-light":"#ff875f","--shiki-dark":"#ff875f"}},"1440"),s("span",{style:{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8"}},"×"),s("span",{style:{"--shiki-light":"#0087d7","--shiki-dark":"#0087d7"}},"720"),s("span",{style:{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8"}}," Raster{Float64, 2}"),s("span",{style:{"--shiki-light":"#00afaf","--shiki-dark":"#00afaf"}}," bio5"),s("span",{style:{"--shiki-light":"#959da5","--shiki-dark":"#959da5"}}," ┐")]),i(`
+import{_ as p,c as d,ai as l,G as e,w as n,B as k,o as r,j as s,a as i}from"./chunks/framework.CS7uZ9fp.js";const g="/Rasters.jl/dev/assets/brxcfjr.BDm3KuYD.png",E="/Rasters.jl/dev/assets/zkyycgs.Czv1U7Yt.png",o="/Rasters.jl/dev/assets/mcgxioy.DiS76DjI.png",y="/Rasters.jl/dev/assets/bmhpyef.BEz2b9t9.png",c="/Rasters.jl/dev/assets/mlqvlbk.COZtemuK.png",u="/Rasters.jl/dev/assets/kimqups.FyCPqsB9.png",F="/Rasters.jl/dev/assets/maxvhnw.BtVap_ds.png",B=JSON.parse('{"title":"Reprojection and resampling","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/resample.md","filePath":"tutorials/resample.md","lastUpdated":null}'),f={name:"tutorials/resample.md"};function C(N,a,m,v,b,A){const t=k("PluginTabsTab"),h=k("PluginTabs");return r(),d("div",null,[a[4]||(a[4]=l("",18)),e(h,null,{default:n(()=>[e(t,{label:"size"},{default:n(()=>a[0]||(a[0]=[s("div",{class:"language-julia vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"julia"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"julia"),s("span",{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"}},">"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ras_sample "),s("span",{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"}},"="),s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," resample"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"(ras_m; size"),s("span",{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"}},"="),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"("),s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},"1440"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", "),s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},"720"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"), method"),s("span",{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"}},"="),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"average"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},")")])])])],-1),s("div",{class:"language- vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"}),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#959da5","--shiki-dark":"#959da5"}},"┌ "),s("span",{style:{"--shiki-light":"#ff875f","--shiki-dark":"#ff875f"}},"1440"),s("span",{style:{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8"}},"×"),s("span",{style:{"--shiki-light":"#0087d7","--shiki-dark":"#0087d7"}},"720"),s("span",{style:{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8"}}," Raster{Float64, 2}"),s("span",{style:{"--shiki-light":"#00afaf","--shiki-dark":"#00afaf"}}," bio5"),s("span",{style:{"--shiki-light":"#959da5","--shiki-dark":"#959da5"}}," ┐")]),i(`
 `),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#959da5","--shiki-dark":"#959da5"}},"├──────────────────────────────────┴───────────────────────────────────── dims ┐")]),i(`
 `),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#ff875f","--shiki-dark":"#ff875f"}},"  ↓ "),s("span",{style:{"--shiki-light":"#ff875f","--shiki-dark":"#ff875f"}},"X"),s("span",{style:{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8"}}," Projected{Float64} "),s("span",{style:{"--shiki-light":"#ff875f","--shiki-dark":"#ff875f"}},"-180.0:0.25:179.75"),s("span",{style:{"--shiki-light":"#808080","--shiki-dark":"#808080"}}," ForwardOrdered"),s("span",{style:{"--shiki-light":"#808080","--shiki-dark":"#808080"}}," Regular"),s("span",{style:{"--shiki-light":"#808080","--shiki-dark":"#808080"}}," Intervals{Start}"),s("span",{style:{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8"}},",")]),i(`
 `),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#0087d7","--shiki-dark":"#0087d7"}},"  → "),s("span",{style:{"--shiki-light":"#0087d7","--shiki-dark":"#0087d7"}},"Y"),s("span",{style:{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8"}}," Projected{Float64} "),s("span",{style:{"--shiki-light":"#0087d7","--shiki-dark":"#0087d7"}},"89.75:-0.25:-90.0"),s("span",{style:{"--shiki-light":"#808080","--shiki-dark":"#808080"}}," ReverseOrdered"),s("span",{style:{"--shiki-light":"#808080","--shiki-dark":"#808080"}}," Regular"),s("span",{style:{"--shiki-light":"#808080","--shiki-dark":"#808080"}}," Intervals{Start}")]),i(`
diff --git a/dev/assets/tutorials_spatial_mean.md.Lhsk7zAu.js b/dev/assets/tutorials_spatial_mean.md.BWTU-JLY.js
similarity index 99%
rename from dev/assets/tutorials_spatial_mean.md.Lhsk7zAu.js
rename to dev/assets/tutorials_spatial_mean.md.BWTU-JLY.js
index c8c3ebf5..950cf27e 100644
--- a/dev/assets/tutorials_spatial_mean.md.Lhsk7zAu.js
+++ b/dev/assets/tutorials_spatial_mean.md.BWTU-JLY.js
@@ -1,4 +1,4 @@
-import{_ as t,c as n,ai as i,j as a,a as p,G as l,B as h,o as r}from"./chunks/framework.CS7uZ9fp.js";const k="/Rasters.jl/dev/assets/nmqsuwx.BCgNrSTH.png",o="/Rasters.jl/dev/assets/isqpcyd.D-TYhoHQ.png",d="/Rasters.jl/dev/assets/usbfamj.CPrVXbo5.png",v=JSON.parse('{"title":"Computing spatial means","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/spatial_mean.md","filePath":"tutorials/spatial_mean.md","lastUpdated":null}'),c={name:"tutorials/spatial_mean.md"},g={class:"jldocstring custom-block"};function u(E,s,m,y,C,F){const e=h("Badge");return r(),n("div",null,[s[3]||(s[3]=i(`

Computing spatial means

It's very common to want to compute the mean of some value over some area of a raster. The initial approach is to simply average the values, but this will give you the arithmetic mean, not the spatial mean.

The reason for this is that raster cells do not always have the same area, especially over a large region of the Earth where its curvature comes into play.

To compute the spatial mean, you need to weight the values by the area of each cell. You can do this by multiplying the values by the cell area, then summing the values, and dividing that number by the total area. That was the motivation for this example.

Let's get the rainfall over Chile, and compute the average rainfall across the country for the month of June.

Acquiring the data

We'll get the precipitation data across the globe from WorldClim, via RasterDataSources.jl, and use the month keyword argument to get the June data.

Then, we can get the geometry of Chile from NaturalEarth.jl, and use Rasters.mask to get the data just for Chile.

julia
using Rasters
+import{_ as t,c as n,ai as i,j as a,a as p,G as l,B as h,o as r}from"./chunks/framework.CS7uZ9fp.js";const k="/Rasters.jl/dev/assets/kcsrzww.BCgNrSTH.png",o="/Rasters.jl/dev/assets/umlwnck.D-TYhoHQ.png",d="/Rasters.jl/dev/assets/uauobow.CPrVXbo5.png",v=JSON.parse('{"title":"Computing spatial means","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/spatial_mean.md","filePath":"tutorials/spatial_mean.md","lastUpdated":null}'),c={name:"tutorials/spatial_mean.md"},g={class:"jldocstring custom-block"};function u(E,s,m,y,C,F){const e=h("Badge");return r(),n("div",null,[s[3]||(s[3]=i(`

Computing spatial means

It's very common to want to compute the mean of some value over some area of a raster. The initial approach is to simply average the values, but this will give you the arithmetic mean, not the spatial mean.

The reason for this is that raster cells do not always have the same area, especially over a large region of the Earth where its curvature comes into play.

To compute the spatial mean, you need to weight the values by the area of each cell. You can do this by multiplying the values by the cell area, then summing the values, and dividing that number by the total area. That was the motivation for this example.

Let's get the rainfall over Chile, and compute the average rainfall across the country for the month of June.

Acquiring the data

We'll get the precipitation data across the globe from WorldClim, via RasterDataSources.jl, and use the month keyword argument to get the June data.

Then, we can get the geometry of Chile from NaturalEarth.jl, and use Rasters.mask to get the data just for Chile.

julia
using Rasters
 import Proj # to activate the spherical \`cellarea\` method
 
 using ArchGDAL, RasterDataSources, NaturalEarth # purely for data loading
@@ -66,7 +66,7 @@ import{_ as t,c as n,ai as i,j as a,a as p,G as l,B as h,o as r}from"./chunks/fr
   90.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0
  100.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0
  110.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0
- 120.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

`,9))]),s[4]||(s[4]=i(`

cellarea computes the area of each cell in a raster. This is useful for a number of reasons - if you have a variable like population per cell, or elevation (spatially extensive variables), you'll want to account for the fact that different cells have different areas.

You can specify whether you want to compute the area in the plane of your projection (Planar()), or on a sphere of some radius (Spherical(; radius=...)).

Now, let's compute the average precipitation per square meter across Chile. First, we need to get the area of each cell in square meters. We'll use the spherical method, since we're working with a geographic coordinate system. This is the default.

julia
areas = cellarea(masked_precip)
+ 120.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

`,9))]),s[4]||(s[4]=i(`

cellarea computes the area of each cell in a raster. This is useful for a number of reasons - if you have a variable like population per cell, or elevation (spatially extensive variables), you'll want to account for the fact that different cells have different areas.

You can specify whether you want to compute the area in the plane of your projection (Planar()), or on a sphere of some radius (Spherical(; radius=...)).

Now, let's compute the average precipitation per square meter across Chile. First, we need to get the area of each cell in square meters. We'll use the spherical method, since we're working with a geographic coordinate system. This is the default.

julia
areas = cellarea(masked_precip)
 masked_areas = mask(areas; with = chile)
 heatmap(masked_areas; axis = (; title = "Cell area in square meters"))

You can see here that cells are largest towards the equator, and smallest away from it. This means that cells away from the equator should have a smaller contribution to the average than cells nearer the equator.

Computing the spatial mean

Now we can compute the average precipitation per square meter. First, we compute total precipitation over each grid cell. (The units of this Raster will be m^2 * mm, which happens to be equal to liter.)

julia
precip_per_area = masked_precip .* masked_areas
┌ 257×229 Raster{Union{Missing, Float64}, 2} ┐
 ├────────────────────────────────────────────┴─────────────────────────── dims ┐
diff --git a/dev/assets/tutorials_spatial_mean.md.Lhsk7zAu.lean.js b/dev/assets/tutorials_spatial_mean.md.BWTU-JLY.lean.js
similarity index 87%
rename from dev/assets/tutorials_spatial_mean.md.Lhsk7zAu.lean.js
rename to dev/assets/tutorials_spatial_mean.md.BWTU-JLY.lean.js
index 37d6d25c..4f434eaf 100644
--- a/dev/assets/tutorials_spatial_mean.md.Lhsk7zAu.lean.js
+++ b/dev/assets/tutorials_spatial_mean.md.BWTU-JLY.lean.js
@@ -1 +1 @@
-import{_ as t,c as n,ai as i,j as a,a as p,G as l,B as h,o as r}from"./chunks/framework.CS7uZ9fp.js";const k="/Rasters.jl/dev/assets/nmqsuwx.BCgNrSTH.png",o="/Rasters.jl/dev/assets/isqpcyd.D-TYhoHQ.png",d="/Rasters.jl/dev/assets/usbfamj.CPrVXbo5.png",v=JSON.parse('{"title":"Computing spatial means","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/spatial_mean.md","filePath":"tutorials/spatial_mean.md","lastUpdated":null}'),c={name:"tutorials/spatial_mean.md"},g={class:"jldocstring custom-block"};function u(E,s,m,y,C,F){const e=h("Badge");return r(),n("div",null,[s[3]||(s[3]=i("",24)),a("details",g,[a("summary",null,[s[0]||(s[0]=a("a",{id:"Rasters.cellarea-tutorials-spatial_mean",href:"#Rasters.cellarea-tutorials-spatial_mean"},[a("span",{class:"jlbinding"},"Rasters.cellarea")],-1)),s[1]||(s[1]=p()),l(e,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=i("",9))]),s[4]||(s[4]=i("",45))])}const f=t(c,[["render",u]]);export{v as __pageData,f as default};
+import{_ as t,c as n,ai as i,j as a,a as p,G as l,B as h,o as r}from"./chunks/framework.CS7uZ9fp.js";const k="/Rasters.jl/dev/assets/kcsrzww.BCgNrSTH.png",o="/Rasters.jl/dev/assets/umlwnck.D-TYhoHQ.png",d="/Rasters.jl/dev/assets/uauobow.CPrVXbo5.png",v=JSON.parse('{"title":"Computing spatial means","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/spatial_mean.md","filePath":"tutorials/spatial_mean.md","lastUpdated":null}'),c={name:"tutorials/spatial_mean.md"},g={class:"jldocstring custom-block"};function u(E,s,m,y,C,F){const e=h("Badge");return r(),n("div",null,[s[3]||(s[3]=i("",24)),a("details",g,[a("summary",null,[s[0]||(s[0]=a("a",{id:"Rasters.cellarea-tutorials-spatial_mean",href:"#Rasters.cellarea-tutorials-spatial_mean"},[a("span",{class:"jlbinding"},"Rasters.cellarea")],-1)),s[1]||(s[1]=p()),l(e,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=i("",9))]),s[4]||(s[4]=i("",45))])}const f=t(c,[["render",u]]);export{v as __pageData,f as default};
diff --git a/dev/assets/usbfamj.CPrVXbo5.png b/dev/assets/uauobow.CPrVXbo5.png
similarity index 100%
rename from dev/assets/usbfamj.CPrVXbo5.png
rename to dev/assets/uauobow.CPrVXbo5.png
diff --git a/dev/assets/rjnlssn.BEMMLBYp.png b/dev/assets/ubmapbb.BEMMLBYp.png
similarity index 100%
rename from dev/assets/rjnlssn.BEMMLBYp.png
rename to dev/assets/ubmapbb.BEMMLBYp.png
diff --git a/dev/assets/isqpcyd.D-TYhoHQ.png b/dev/assets/umlwnck.D-TYhoHQ.png
similarity index 100%
rename from dev/assets/isqpcyd.D-TYhoHQ.png
rename to dev/assets/umlwnck.D-TYhoHQ.png
diff --git a/dev/assets/wbmakzk.CkoiSBCV.png b/dev/assets/wbmakzk.CkoiSBCV.png
deleted file mode 100644
index a6822080..00000000
Binary files a/dev/assets/wbmakzk.CkoiSBCV.png and /dev/null differ
diff --git a/dev/assets/ixwxbux.BYXOCgVD.png b/dev/assets/wlqbrzs.BYXOCgVD.png
similarity index 100%
rename from dev/assets/ixwxbux.BYXOCgVD.png
rename to dev/assets/wlqbrzs.BYXOCgVD.png
diff --git a/dev/assets/mywptmj.Djo3H46f.png b/dev/assets/yapdujk.Djo3H46f.png
similarity index 100%
rename from dev/assets/mywptmj.Djo3H46f.png
rename to dev/assets/yapdujk.Djo3H46f.png
diff --git a/dev/assets/cdghvgx.ChOTZYBM.png b/dev/assets/zeesmxw.ChOTZYBM.png
similarity index 100%
rename from dev/assets/cdghvgx.ChOTZYBM.png
rename to dev/assets/zeesmxw.ChOTZYBM.png
diff --git a/dev/assets/dxilzxn.Czv1U7Yt.png b/dev/assets/zkyycgs.Czv1U7Yt.png
similarity index 100%
rename from dev/assets/dxilzxn.Czv1U7Yt.png
rename to dev/assets/zkyycgs.Czv1U7Yt.png
diff --git a/dev/assets/wlywzsg.2YhfOv1i.png b/dev/assets/zxhifqy.2YhfOv1i.png
similarity index 100%
rename from dev/assets/wlywzsg.2YhfOv1i.png
rename to dev/assets/zxhifqy.2YhfOv1i.png
diff --git a/dev/get_started.html b/dev/get_started.html
index 6090734c..e02528a9 100644
--- a/dev/get_started.html
+++ b/dev/get_started.html
@@ -9,11 +9,11 @@
     
     
     
-    
+    
     
-    
+    
     
-    
+    
     
     
     
@@ -35,13 +35,13 @@
   extent: Extent(X = (25, 30), Y = (25, 30), Ti = (DateTime("2001-01-01T00:00:00"), DateTime("2002-01-01T00:00:00")))
 └──────────────────────────────────────────────────────────────────────────────┘
 [:, :, 1]
-  ↓ →  25         26          27         28         29         30
- 25     0.65026    0.267278    0.483487   0.220706   0.30298    0.846569
- 26     0.900098   0.287447    0.706145   0.583066   0.554699   0.762069
- 27     0.861332   0.0770929   0.197539   0.398214   0.205385   0.739134
- 28     0.249185   0.668468    0.104756   0.297448   0.317935   0.687694
- 29     0.199073   0.862607    0.320261   0.798959   0.305187   0.243058
- 30     0.815831   0.543596    0.732843   0.679485   0.578195   0.556124

Getting the lookup array from dimensions

julia
lon = lookup(ras, X) # if X is longitude
+  ↓ →  25         26         27          28         29         30
+ 25     0.227006   0.970146   0.0544021   0.371211   0.664186   0.21141
+ 26     0.273317   0.640978   0.194661    0.920474   0.615364   0.306968
+ 27     0.788089   0.417503   0.747373    0.360284   0.309207   0.192418
+ 28     0.651182   0.882834   0.843774    0.891849   0.90771    0.0520999
+ 29     0.464265   0.712496   0.219414    0.60282    0.963473   0.805253
+ 30     0.58336    0.81865    0.282566    0.338789   0.328284   0.126327

Getting the lookup array from dimensions

julia
lon = lookup(ras, X) # if X is longitude
 lat = lookup(ras, Y) # if Y is latitude
Sampled{Int64} ForwardOrdered Regular Points
 wrapping: 25:1:30

Select by index

Selecting a time slice by index is done via

julia
ras[Ti(1)]
┌ 6×6 Raster{Float64, 2} ┐
 ├────────────────────────┴──────────────────────────── dims ┐
@@ -50,26 +50,26 @@
 ├─────────────────────────────────────────────────── raster ┤
   extent: Extent(X = (25, 30), Y = (25, 30))
 └───────────────────────────────────────────────────────────┘
-  ↓ →  25         26          27         28         29         30
- 25     0.65026    0.267278    0.483487   0.220706   0.30298    0.846569
- 26     0.900098   0.287447    0.706145   0.583066   0.554699   0.762069
- 27     0.861332   0.0770929   0.197539   0.398214   0.205385   0.739134
- 28     0.249185   0.668468    0.104756   0.297448   0.317935   0.687694
- 29     0.199073   0.862607    0.320261   0.798959   0.305187   0.243058
- 30     0.815831   0.543596    0.732843   0.679485   0.578195   0.556124

also

julia
ras[Ti=1]
┌ 6×6 Raster{Float64, 2} ┐
+  ↓ →  25         26         27          28         29         30
+ 25     0.227006   0.970146   0.0544021   0.371211   0.664186   0.21141
+ 26     0.273317   0.640978   0.194661    0.920474   0.615364   0.306968
+ 27     0.788089   0.417503   0.747373    0.360284   0.309207   0.192418
+ 28     0.651182   0.882834   0.843774    0.891849   0.90771    0.0520999
+ 29     0.464265   0.712496   0.219414    0.60282    0.963473   0.805253
+ 30     0.58336    0.81865    0.282566    0.338789   0.328284   0.126327

also

julia
ras[Ti=1]
┌ 6×6 Raster{Float64, 2} ┐
 ├────────────────────────┴──────────────────────────── dims ┐
   ↓ X Sampled{Int64} 25:1:30 ForwardOrdered Regular Points,
   → Y Sampled{Int64} 25:1:30 ForwardOrdered Regular Points
 ├─────────────────────────────────────────────────── raster ┤
   extent: Extent(X = (25, 30), Y = (25, 30))
 └───────────────────────────────────────────────────────────┘
-  ↓ →  25         26          27         28         29         30
- 25     0.65026    0.267278    0.483487   0.220706   0.30298    0.846569
- 26     0.900098   0.287447    0.706145   0.583066   0.554699   0.762069
- 27     0.861332   0.0770929   0.197539   0.398214   0.205385   0.739134
- 28     0.249185   0.668468    0.104756   0.297448   0.317935   0.687694
- 29     0.199073   0.862607    0.320261   0.798959   0.305187   0.243058
- 30     0.815831   0.543596    0.732843   0.679485   0.578195   0.556124

or and interval of indices using the syntax =a:b or (a:b)

julia
ras[Ti(1:10)]
┌ 6×6×10 Raster{Float64, 3} ┐
+  ↓ →  25         26         27          28         29         30
+ 25     0.227006   0.970146   0.0544021   0.371211   0.664186   0.21141
+ 26     0.273317   0.640978   0.194661    0.920474   0.615364   0.306968
+ 27     0.788089   0.417503   0.747373    0.360284   0.309207   0.192418
+ 28     0.651182   0.882834   0.843774    0.891849   0.90771    0.0520999
+ 29     0.464265   0.712496   0.219414    0.60282    0.963473   0.805253
+ 30     0.58336    0.81865    0.282566    0.338789   0.328284   0.126327

or and interval of indices using the syntax =a:b or (a:b)

julia
ras[Ti(1:10)]
┌ 6×6×10 Raster{Float64, 3} ┐
 ├───────────────────────────┴──────────────────────────────────────────── dims ┐
   ↓ X  Sampled{Int64} 25:1:30 ForwardOrdered Regular Points,
   → Y  Sampled{Int64} 25:1:30 ForwardOrdered Regular Points,
@@ -78,26 +78,26 @@
   extent: Extent(X = (25, 30), Y = (25, 30), Ti = (DateTime("2001-01-01T00:00:00"), DateTime("2001-10-01T00:00:00")))
 └──────────────────────────────────────────────────────────────────────────────┘
 [:, :, 1]
-  ↓ →  25         26          27         28         29         30
- 25     0.65026    0.267278    0.483487   0.220706   0.30298    0.846569
- 26     0.900098   0.287447    0.706145   0.583066   0.554699   0.762069
- 27     0.861332   0.0770929   0.197539   0.398214   0.205385   0.739134
- 28     0.249185   0.668468    0.104756   0.297448   0.317935   0.687694
- 29     0.199073   0.862607    0.320261   0.798959   0.305187   0.243058
- 30     0.815831   0.543596    0.732843   0.679485   0.578195   0.556124

Select by value

julia
ras[Ti=At(DateTime(2001))]
┌ 6×6 Raster{Float64, 2} ┐
+  ↓ →  25         26         27          28         29         30
+ 25     0.227006   0.970146   0.0544021   0.371211   0.664186   0.21141
+ 26     0.273317   0.640978   0.194661    0.920474   0.615364   0.306968
+ 27     0.788089   0.417503   0.747373    0.360284   0.309207   0.192418
+ 28     0.651182   0.882834   0.843774    0.891849   0.90771    0.0520999
+ 29     0.464265   0.712496   0.219414    0.60282    0.963473   0.805253
+ 30     0.58336    0.81865    0.282566    0.338789   0.328284   0.126327

Select by value

julia
ras[Ti=At(DateTime(2001))]
┌ 6×6 Raster{Float64, 2} ┐
 ├────────────────────────┴──────────────────────────── dims ┐
   ↓ X Sampled{Int64} 25:1:30 ForwardOrdered Regular Points,
   → Y Sampled{Int64} 25:1:30 ForwardOrdered Regular Points
 ├─────────────────────────────────────────────────── raster ┤
   extent: Extent(X = (25, 30), Y = (25, 30))
 └───────────────────────────────────────────────────────────┘
-  ↓ →  25         26          27         28         29         30
- 25     0.65026    0.267278    0.483487   0.220706   0.30298    0.846569
- 26     0.900098   0.287447    0.706145   0.583066   0.554699   0.762069
- 27     0.861332   0.0770929   0.197539   0.398214   0.205385   0.739134
- 28     0.249185   0.668468    0.104756   0.297448   0.317935   0.687694
- 29     0.199073   0.862607    0.320261   0.798959   0.305187   0.243058
- 30     0.815831   0.543596    0.732843   0.679485   0.578195   0.556124

More options are available, like Near, Contains and Where.

Dimensions

Rasters uses X, Y, and Z dimensions from DimensionalData to represent spatial directions like longitude, latitude and the vertical dimension, and subset data with them. Ti is used for time, and Band represent bands. Other dimensions can have arbitrary names, but will be treated generically. See DimensionalData for more details on how they work.

Lookup Arrays

These specify properties of the index associated with e.g. the X and Y dimension. Rasters.jl defines additional lookup arrays: Projected to handle dimensions with projections, and Mapped where the projection is mapped to another projection like EPSG(4326). Mapped is largely designed to handle NetCDF dimensions, especially with Explicit spans.

Subsetting an object

Regular getindex (e.g. A[1:100, :]) and view work on all objects just as with an Array. view is always lazy, and reads from disk are deferred until getindex is used. DimensionalData.jl Dimensions and Selectors are the other way to subset an object, making use of the objects index to find values at e.g. certain X/Y coordinates. The available selectors are listed here:

SelectorsDescription
At(x)get the index exactly matching the passed in value(s).
Near(x)get the closest index to the passed in value(s).
Where(f::Function)filter the array axis by a function of the dimension index values.
a..b/Between(a, b)get all indices between two values, excluding the high value.
Contains(x)get indices where the value x falls within an interval.

Info

  • Use the .. selector to take a view of madagascar:
julia
using Rasters, RasterDataSources
+  ↓ →  25         26         27          28         29         30
+ 25     0.227006   0.970146   0.0544021   0.371211   0.664186   0.21141
+ 26     0.273317   0.640978   0.194661    0.920474   0.615364   0.306968
+ 27     0.788089   0.417503   0.747373    0.360284   0.309207   0.192418
+ 28     0.651182   0.882834   0.843774    0.891849   0.90771    0.0520999
+ 29     0.464265   0.712496   0.219414    0.60282    0.963473   0.805253
+ 30     0.58336    0.81865    0.282566    0.338789   0.328284   0.126327

More options are available, like Near, Contains and Where.

Dimensions

Rasters uses X, Y, and Z dimensions from DimensionalData to represent spatial directions like longitude, latitude and the vertical dimension, and subset data with them. Ti is used for time, and Band represent bands. Other dimensions can have arbitrary names, but will be treated generically. See DimensionalData for more details on how they work.

Lookup Arrays

These specify properties of the index associated with e.g. the X and Y dimension. Rasters.jl defines additional lookup arrays: Projected to handle dimensions with projections, and Mapped where the projection is mapped to another projection like EPSG(4326). Mapped is largely designed to handle NetCDF dimensions, especially with Explicit spans.

Subsetting an object

Regular getindex (e.g. A[1:100, :]) and view work on all objects just as with an Array. view is always lazy, and reads from disk are deferred until getindex is used. DimensionalData.jl Dimensions and Selectors are the other way to subset an object, making use of the objects index to find values at e.g. certain X/Y coordinates. The available selectors are listed here:

SelectorsDescription
At(x)get the index exactly matching the passed in value(s).
Near(x)get the closest index to the passed in value(s).
Where(f::Function)filter the array axis by a function of the dimension index values.
a..b/Between(a, b)get all indices between two values, excluding the high value.
Contains(x)get indices where the value x falls within an interval.

Info

  • Use the .. selector to take a view of madagascar:
julia
using Rasters, RasterDataSources
 const RS = Rasters
 using CairoMakie
 CairoMakie.activate!()
@@ -105,8 +105,8 @@
 A = Raster(WorldClim{BioClim}, 5)
 madagascar = view(A, X(43.25 .. 50.48), Y(-25.61 .. -12.04))
 # Note the space between .. -12
-Makie.plot(madagascar)

- +Makie.plot(madagascar)

+ \ No newline at end of file diff --git a/dev/hashmap.json b/dev/hashmap.json index 8e911a41..707f6a9e 100644 --- a/dev/hashmap.json +++ b/dev/hashmap.json @@ -1 +1 @@ -{"api.md":"BNfv_PPm","get_started.md":"BhPL8eqt","index.md":"DGd3eXjH","manual_cellarea.md":"Bnt5lWlr","manual_data_sources.md":"BQtt5CoE","manual_methods.md":"D_h9Yuq8","tutorials_array_operations.md":"WIiTMpeB","tutorials_gbif_wflow.md":"CoZA3hlT","tutorials_plot_makie.md":"m_Nl5W9Y","tutorials_plotting.md":"Bp0b_z1R","tutorials_resample.md":"BDA314Vu","tutorials_spatial_mean.md":"Lhsk7zAu"} +{"api.md":"B98S4G2z","get_started.md":"D7oDLQ_y","index.md":"BBZM0PgG","manual_cellarea.md":"yJARYC-J","manual_data_sources.md":"D6fGpeK6","manual_methods.md":"D_h9Yuq8","tutorials_array_operations.md":"WIiTMpeB","tutorials_gbif_wflow.md":"C6Zk9FfP","tutorials_plot_makie.md":"Bk_H4aZQ","tutorials_plotting.md":"X0dPKc4T","tutorials_resample.md":"BAA4w3x2","tutorials_spatial_mean.md":"BWTU-JLY"} diff --git a/dev/index.html b/dev/index.html index 4457cd4b..8e713c43 100644 --- a/dev/index.html +++ b/dev/index.html @@ -9,11 +9,11 @@ - + - + - + @@ -25,7 +25,7 @@ julia> Pkg.add("Rasters.jl") # or julia> ] # ']' should be pressed -pkg> add Rasters

If you want to use the latest unreleased version, you can run the following command:

julia
pkg> add Rasters#main

Package extensions

Before using a specific backend or feature, you must install and load its corresponding package,

julia
using Pkg
+pkg> add Rasters

If you want to use the latest unreleased version, you can run the following command:

julia
pkg> add Rasters#main

Package extensions

Before using a specific backend or feature, you must install and load its corresponding package,

julia
using Pkg
 Pkg.add("ArchGDAL")
julia
using Pkg
 Pkg.add("NCDatasets")
julia
# built-in
julia
using Pkg
 Pkg.add("HDF5")
julia
using Pkg
@@ -33,7 +33,7 @@
 Pkg.add(["GLMakie"])
julia
using Pkg
 Pkg.add(["RasterDataSources"]) # which includes Worldclim{Climate}
julia
using Pkg
 Pkg.add(["CoordinateTransformations"]) # transformations for gdal rasters

and as an example, to use the GDAL backend and download files, you will need to do:

julia
using Rasters, ArchGDAL, RasterDataSources

🐞📌 Bugs

Bugs, errors and making issues for Rasters.jl

Because there are so many raster file types and variations of them, most of the time we need the exact file that caused your problem to know how to fix it, and be sure that we have actually fixed it when we are done. So fixing a Rasters.jl bug nearly always involves downloading some file and running some code that breaks with it (if you can trigger the bug without a file, that's great! but its not always possible).

To make an issue we can fix quickly (or at all) there are three key steps:

  1. Include the file in an accessible place on web without authentication or any other work on our part, so we can just get it and find your bug. You can put it on a file hosting platform (e.g. google drive, drop box, whatever you use) and share the url.

  2. Add a minimum working example to the issue template that first downloads the file, then runs the function that triggers the bug.

  3. Paste the complete stack trace of the error it produces, right to the bottom, into the issue template. Then we can be sure we reproduced the same problem.

Good issues are really appreciated, but they do take just a little extra effort with Rasters.jl because of this need for files.

- + \ No newline at end of file diff --git a/dev/manual/cellarea.html b/dev/manual/cellarea.html index 530a3895..35904431 100644 --- a/dev/manual/cellarea.html +++ b/dev/manual/cellarea.html @@ -9,11 +9,11 @@ - + - + - + @@ -42,7 +42,7 @@ 90.0 1.23017e6 1.19279e6 1.11917e6 1.01154e6 873182.0 708290.0 100.0 1.23017e6 1.19279e6 1.11917e6 1.01154e6 873182.0 708290.0 110.0 1.23017e6 1.19279e6 1.11917e6 1.01154e6 873182.0 708290.0 - 120.0 1.23017e6 1.19279e6 1.11917e6 1.01154e6 873182.0 708290.0

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Computing the area of each cell in a raster is useful for a number of reasons - if you have a variable like population per cell, or elevation (spatially extensive variables), you'll want to account for the fact that different cells have different areas.

Let's construct a raster and see what this looks like! We'll keep it in memory.

The spherical method relies on the Proj.jl package to perform coordinate transformation, so that has to be loaded explicitly.

julia
using Rasters, Proj

To construct a raster, we'll need to specify the x and y dimensions. These are called lookups in Rasters.jl.

julia
using Rasters.Lookups

We can now construct the x and y lookups. Here we'll use a start-at-one, step-by-five grid. Note that we're specifying that the "sampling", i.e., what the coordinates actually mean, is Intervals(Start()), meaning that the coordinates are the starting point of each interval.

This is in contrast to Points() sampling, where each index in the raster represents the value at a sampling point; here, each index represents a grid cell, which is defined by the coordinate being at the start.

julia
x = X(1:5:30; sampling = Intervals(Start()), crs = EPSG(4326))
+ 120.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

Computing the area of each cell in a raster is useful for a number of reasons - if you have a variable like population per cell, or elevation (spatially extensive variables), you'll want to account for the fact that different cells have different areas.

Let's construct a raster and see what this looks like! We'll keep it in memory.

The spherical method relies on the Proj.jl package to perform coordinate transformation, so that has to be loaded explicitly.

julia
using Rasters, Proj

To construct a raster, we'll need to specify the x and y dimensions. These are called lookups in Rasters.jl.

julia
using Rasters.Lookups

We can now construct the x and y lookups. Here we'll use a start-at-one, step-by-five grid. Note that we're specifying that the "sampling", i.e., what the coordinates actually mean, is Intervals(Start()), meaning that the coordinates are the starting point of each interval.

This is in contrast to Points() sampling, where each index in the raster represents the value at a sampling point; here, each index represents a grid cell, which is defined by the coordinate being at the start.

julia
x = X(1:5:30; sampling = Intervals(Start()), crs = EPSG(4326))
 y = Y(50:5:80; sampling = Intervals(Start()), crs = EPSG(4326));

I have chosen the y-range here specifically so we can show the difference between spherical and planar cellarea.

julia
julia> ras = Raster(ones(x, y); crs = EPSG(4326))
6×7 Raster{Float64, 2}
 ├────────────────────────┴─────────────────────────────────────────────── dims ┐
 X Projected{Int64} 1:5:26 ForwardOrdered Regular Intervals{Start},
@@ -72,7 +72,7 @@
  16     1.88114e11   1.66031e11   1.42685e11      6.68821e10   4.0334e10
  21     1.88114e11   1.66031e11   1.42685e11  …   6.68821e10   4.0334e10
  26     1.88114e11   1.66031e11   1.42685e11      6.68821e10   4.0334e10

and if we plot it, you can see the difference in cell area as we go from the equator to the poles:

julia
using CairoMakie
-heatmap(cellarea(ras); axis = (; aspect = DataAspect()))

We can also try this using the planar method, which simply computes the area of the rectangle using area = x_side_length * y_side_length:

julia
julia> cellarea(Planar(), ras)
6×7 Raster{Int64, 2}
+heatmap(cellarea(ras); axis = (; aspect = DataAspect()))

We can also try this using the planar method, which simply computes the area of the rectangle using area = x_side_length * y_side_length:

julia
julia> cellarea(Planar(), ras)
6×7 Raster{Int64, 2}
 ├──────────────────────┴───────────────────────────────────────────────── dims ┐
 X Projected{Int64} 1:5:26 ForwardOrdered Regular Intervals{Start},
 Y Projected{Int64} 50:5:80 ForwardOrdered Regular Intervals{Start}
@@ -87,7 +87,7 @@
  16    25  25  25  25  25  25  25
  21    25  25  25  25  25  25  25
  26    25  25  25  25  25  25  25

Note that this is of course wildly inaccurate for a geographic dataset - but if you're working in a projected coordinate system, like polar stereographic or Mercator, this can be very useful (and a lot faster)!

- + \ No newline at end of file diff --git a/dev/manual/data_sources.html b/dev/manual/data_sources.html index dc759cec..92b12ae4 100644 --- a/dev/manual/data_sources.html +++ b/dev/manual/data_sources.html @@ -9,11 +9,11 @@ - + - + - + @@ -24,8 +24,8 @@
Skip to content

Data sources

Rasters.jl uses a number of backends to load raster data. Raster, RasterStack and RasterSeries will detect which backend to use for you, automatically.

GDAL

All files GDAL can access, such as .tiff and .asc files, can be loaded, using ArchGDAL.jl. These are generally best loaded as Raster("filename.tif"), but can be loaded as RasterStack("filename.tif"; layersfrom=Band), taking layers from the Band dimension, which is also the default.

NetCDF

NetCDF .nc and some HDF5 .h5 files cab be loaded using NCDatasets.jl. Layers from files can be loaded as Raster("filename.nc"; name=:layername). Without name the first layer is used. RasterStack("filename.nc") will use all netcdf variables in the file that are not dimensions as layers.

NetCDF layers can have arbitrary dimensions. Known, common dimension names are converted to X, Y Z, and Ti, otherwise Dim{:layername} is used. Layers in the same file may also have different dimensions.

Zarr

Zarr files can be loaded with the ZarrDatasets.jl backend. Raster(filename; source=Zarrsource()) may be needed where the file type cant be detected from the filename. write does not yet work for Zarr but will in future.

GRIB

GRIB files can be loaded with the ZarrDatasets.jl. write is not implemented for GRIB.

GRD

R GRD files can be loaded natively, using Julias MMap - which means they are very fast, but are not compressed. They are always 3 dimensional, and have Y, X and Band dimensions.

julia
using Rasters

Writing file formats to disk

Files can be written to disk with ArchGDAL.jl and NCDatasets.jl backends using write("filename.ext", raster). See the docs for write.

They can (with some caveats) be written to different formats than they were loaded in as, providing file-type conversion for spatial data. Some metadata may be lost in formats that store little metadata, or where metadata conversion has not been completely implemented.

RasterDataSources.jl integration

RasterDataSources.jl standardises the download of common raster data sources, with a focus on datasets used in ecology and the environmental sciences. RasterDataSources.jl is tightly integrated into Rasters.jl, so that datsets and keywords can be used directly to download and load data as a Raster, RasterStack, or RasterSeries.

julia
using Rasters, CairoMakie, Dates
 using RasterDataSources
 A = Raster(WorldClim{Climate}, :tavg; month=June)
-Makie.plot(A)

See the docs for Raster, RasterStack and RasterSeries, and the docs for RasterDataSources.getraster for syntax to specify various data sources.

- +Makie.plot(A)

See the docs for Raster, RasterStack and RasterSeries, and the docs for RasterDataSources.getraster for syntax to specify various data sources.

+ \ No newline at end of file diff --git a/dev/manual/methods.html b/dev/manual/methods.html index 470692b3..89a43c6f 100644 --- a/dev/manual/methods.html +++ b/dev/manual/methods.html @@ -9,9 +9,9 @@ - + - + @@ -22,7 +22,7 @@
Skip to content

Point, polygon and table operations

MethodsDescription
rasterizerasterize points and geometries.
extractextract values from points or geometries.
zonalcalculate zonal statistics for an object masked by geometries.

Methods that change the resolution or extent of an object

Click through to the function documentation for more in-depth descriptions and examples.

MethodsDescription
aggregateaggregate data by the same or different amounts for each axis.
disaggregatesimilarly disaggregate data.
mosaicjoin rasters covering different extents into a single array or file.
cropshrink objects to specific dimension sizes or the extent of another object.
extendextend objects to specific dimension sizes or the extent of another object.
trimtrims areas of missing values for arrays and across stack layers.
resampleresample data to a different size and projection, or snap to another object.
warpuse gdalwarp on any object, e.g. a multidimensional NetCDF stack.

Methods that change an objects values

MethodsDescription
classifyclassify values into categories.
maskmask an object by a polygon or Raster along X/Y, or other dimensions.
replace_missingreplace all missing values in an object and update missingval.

Info

Note that most regular Julia methods, such as replace, work as for a standard Array. These additional methods are commonly required in GIS applications.

Methods to load, write and modify data sources

MethodsDescription
modifyreplace the data in objects. Useful to e.g. move objects to/from a GPU.
readread data to memory if it is on disk.
read!read data to predefined memory.
openopen the underlying data for manually reading or writing.
writewrite objects to file.
- + \ No newline at end of file diff --git a/dev/tutorials/array_operations.html b/dev/tutorials/array_operations.html index 66575b2b..6e9abe44 100644 --- a/dev/tutorials/array_operations.html +++ b/dev/tutorials/array_operations.html @@ -9,9 +9,9 @@ - + - + @@ -152,7 +152,7 @@ 179.5 missing missing missing -18.2955 -16.7583 -16.72 179.667 missing missing missing -18.2847 -16.7513 -16.72 179.833 missing missing missing … -17.1478 -15.4243 -15.701

setcrs(A, crs) and setmappedcrs(A, crs) will set the crs value/s of an object to any GeoFormat from GeoFormatTypes.jl.

- + \ No newline at end of file diff --git a/dev/tutorials/gbif_wflow.html b/dev/tutorials/gbif_wflow.html index 0ce7c33d..003b9b38 100644 --- a/dev/tutorials/gbif_wflow.html +++ b/dev/tutorials/gbif_wflow.html @@ -9,11 +9,11 @@ - + - + - + @@ -28,9 +28,9 @@ ├──────────────────────────┼─────────┼─────────┼─────────┼──────────┼─────────── │ missing │ missing │ missing │ missing │ Animalia │ Chordata ⋯ │ missing │ 2021 │ 1 │ 6 │ Animalia │ Chordata ⋯ +│ missing │ missing │ missing │ missing │ Animalia │ Chordata ⋯ │ (148.391, -36.3036) │ 2015 │ 11 │ 15 │ Animalia │ Chordata ⋯ │ (148.333, -36.4333) │ 2011 │ 11 │ 21 │ Animalia │ Chordata ⋯ -│ missing │ missing │ missing │ missing │ Animalia │ Chordata ⋯ │ (148.396, -36.3818) │ 2016 │ 11 │ 15 │ Animalia │ Chordata ⋯ │ (147.1, -37) │ missing │ missing │ missing │ Animalia │ Chordata ⋯ │ (147.096, -36.9357) │ 2020 │ 2 │ 10 │ Animalia │ Chordata ⋯ @@ -67,32 +67,32 @@ scatter!(ax, coords; alpha=0.5, marker='+', color=:black, markersize = 20) end end -p

Extract bioclim variables at occurrence points

Then extract predictor variables and write to CSV. Use the skipmissing keyword to exclude both missing coordinates and coordinates with missing values in the RasterStack.

julia
using CSV
+p

Extract bioclim variables at occurrence points

Then extract predictor variables and write to CSV. Use the skipmissing keyword to exclude both missing coordinates and coordinates with missing values in the RasterStack.

julia
using CSV
 presences = extract(se_aus, coords, skipmissing = true)
 CSV.write("burramys_parvus_predictors.csv", presences)
"burramys_parvus_predictors.csv"

Or convert them to a DataFrame:

julia
using DataFrames
 df = DataFrame(presences)
 df[1:5,:]

Sample background points

Next, sample random background points in the Raster. Rasters has a StatsBase extension to make this very straightforward. The syntax and output of Rasters.sample is very similar to that of extract.

julia
using StatsBase
 background = Rasters.sample(se_aus, 500, skipmissing = true)
500-element Vector{@NamedTuple{geometry::Tuple{Float64, Float64}, bio1::Float32, bio3::Float32, bio7::Float32, bio12::Float32}}:
- (geometry = (143.49999999999997, -35.0), bio1 = 16.920313, bio3 = 48.46072, bio7 = 28.61725, bio12 = 310.0)
- (geometry = (139.33333333333331, -33.333333333333336), bio1 = 17.204521, bio3 = 52.028885, bio7 = 28.8685, bio12 = 254.0)
- (geometry = (142.49999999999997, -31.5), bio1 = 19.189125, bio3 = 45.86967, bio7 = 30.271, bio12 = 218.0)
- (geometry = (139.66666666666666, -37.333333333333336), bio1 = 14.658376, bio3 = 47.899902, bio7 = 15.722448, bio12 = 664.0)
- (geometry = (145.33333333333331, -34.0), bio1 = 17.804218, bio3 = 46.467976, bio7 = 29.918499, bio12 = 398.0)
- (geometry = (149.33333333333331, -32.666666666666664), bio1 = 15.150573, bio3 = 45.629005, bio7 = 26.83075, bio12 = 775.0)
- (geometry = (143.66666666666666, -30.833333333333332), bio1 = 20.101542, bio3 = 44.904472, bio7 = 30.574999, bio12 = 239.0)
- (geometry = (143.49999999999997, -38.666666666666664), bio1 = 12.311052, bio3 = 44.804844, bio7 = 15.83325, bio12 = 1336.0)
- (geometry = (143.83333333333331, -26.333333333333332), bio1 = 22.566677, bio3 = 45.48981, bio7 = 30.887, bio12 = 351.0)
- (geometry = (148.33333333333331, -36.0), bio1 = 8.269542, bio3 = 41.030262, bio7 = 23.858, bio12 = 1440.0)
+ (geometry = (149.66666666666666, -29.833333333333332), bio1 = 19.277594, bio3 = 48.111637, bio7 = 29.77775, bio12 = 604.0)
+ (geometry = (143.33333333333331, -32.333333333333336), bio1 = 19.10275, bio3 = 48.054237, bio7 = 30.66275, bio12 = 255.0)
+ (geometry = (139.83333333333331, -36.166666666666664), bio1 = 15.692479, bio3 = 52.267757, bio7 = 23.0275, bio12 = 500.0)
+ (geometry = (146.16666666666666, -25.166666666666668), bio1 = 21.090136, bio3 = 52.078674, bio7 = 31.84425, bio12 = 509.0)
+ (geometry = (138.33333333333331, -35.666666666666664), bio1 = 14.930569, bio3 = 46.824715, bio7 = 18.039394, bio12 = 736.0)
+ (geometry = (147.66666666666666, -38.0), bio1 = 14.695862, bio3 = 48.73103, bio7 = 20.987919, bio12 = 684.0)
+ (geometry = (142.33333333333331, -29.166666666666668), bio1 = 21.126854, bio3 = 43.098442, bio7 = 30.489502, bio12 = 248.0)
+ (geometry = (147.99999999999997, -29.833333333333332), bio1 = 20.191978, bio3 = 47.133137, bio7 = 30.89325, bio12 = 464.0)
+ (geometry = (147.66666666666666, -25.666666666666668), bio1 = 18.96977, bio3 = 48.638035, bio7 = 29.10925, bio12 = 602.0)
+ (geometry = (138.16666666666666, -28.333333333333332), bio1 = 21.931553, bio3 = 45.243294, bio7 = 32.35825, bio12 = 141.0)
 
- (geometry = (145.83333333333331, -27.0), bio1 = 21.378376, bio3 = 46.3228, bio7 = 30.758251, bio12 = 406.0)
- (geometry = (141.49999999999997, -33.666666666666664), bio1 = 18.208448, bio3 = 48.684727, bio7 = 29.0925, bio12 = 272.0)
- (geometry = (146.49999999999997, -26.166666666666668), bio1 = 20.810135, bio3 = 48.435387, bio7 = 30.76775, bio12 = 506.0)
- (geometry = (140.83333333333331, -25.333333333333332), bio1 = 23.85276, bio3 = 45.726246, bio7 = 31.244501, bio12 = 245.0)
- (geometry = (151.83333333333331, -30.166666666666668), bio1 = 12.316885, bio3 = 46.64394, bio7 = 22.97275, bio12 = 945.0)
- (geometry = (150.33333333333331, -25.166666666666668), bio1 = 20.086199, bio3 = 52.501385, bio7 = 26.306252, bio12 = 652.0)
- (geometry = (149.33333333333331, -30.333333333333332), bio1 = 19.137678, bio3 = 49.03964, bio7 = 29.518002, bio12 = 619.0)
- (geometry = (148.33333333333331, -31.333333333333332), bio1 = 18.568552, bio3 = 47.261906, bio7 = 30.169252, bio12 = 538.0)
- (geometry = (145.99999999999997, -28.5), bio1 = 21.182594, bio3 = 45.081738, bio7 = 30.468498, bio12 = 371.0)

Fit a statistical ensemble

In this example, we will SpeciesDistributionModels.jl to fit a statistical ensemble to the occurrence and background data.

First we need to load the models. SDM.jl integrates with MLJ - see the model browser for what models are available.

julia
import Maxnet: MaxnetBinaryClassifier
+ (geometry = (141.33333333333331, -31.333333333333332), bio1 = 19.064573, bio3 = 45.707096, bio7 = 29.9375, bio12 = 225.0)
+ (geometry = (145.16666666666666, -29.666666666666668), bio1 = 20.742603, bio3 = 42.973637, bio7 = 30.06475, bio12 = 321.0)
+ (geometry = (148.33333333333331, -29.833333333333332), bio1 = 19.946312, bio3 = 47.627472, bio7 = 30.9515, bio12 = 519.0)
+ (geometry = (139.16666666666666, -32.333333333333336), bio1 = 17.610615, bio3 = 49.03897, bio7 = 30.234499, bio12 = 232.0)
+ (geometry = (144.66666666666666, -31.166666666666668), bio1 = 19.911459, bio3 = 45.083786, bio7 = 30.276499, bio12 = 273.0)
+ (geometry = (139.16666666666666, -27.0), bio1 = 22.7315, bio3 = 44.32267, bio7 = 32.254753, bio12 = 146.0)
+ (geometry = (138.33333333333331, -30.166666666666668), bio1 = 20.315365, bio3 = 45.981033, bio7 = 31.7645, bio12 = 165.0)
+ (geometry = (144.99999999999997, -34.833333333333336), bio1 = 17.051594, bio3 = 47.712032, bio7 = 29.765247, bio12 = 387.0)
+ (geometry = (139.99999999999997, -27.666666666666668), bio1 = 22.59774, bio3 = 44.158997, bio7 = 32.30075, bio12 = 168.0)

Fit a statistical ensemble

In this example, we will SpeciesDistributionModels.jl to fit a statistical ensemble to the occurrence and background data.

First we need to load the models. SDM.jl integrates with MLJ - see the model browser for what models are available.

julia
import Maxnet: MaxnetBinaryClassifier
 import MLJGLMInterface: LinearBinaryClassifier
 # define the models in the ensemble
 models = (
@@ -132,20 +132,20 @@
 │    model │ accuracy │      auc │  log_loss │    kappa │
 │      Any │  Float64 │  Float64 │   Float64 │  Float64 │
 ├──────────┼──────────┼──────────┼───────────┼──────────┤
-│   maxnet │ 0.975432 │ 0.995305 │  0.204414 │ 0.944291 │
-│  maxnet2 │ 0.976096 │ 0.995163 │   0.19851 │ 0.946243 │
-│      glm │ 0.974104 │ 0.995784 │ 0.0785099 │ 0.941335 │
-│ ensemble │ 0.975432 │ 0.995446 │   0.13371 │ 0.944291 │
+│   maxnet │ 0.978088 │  0.99703 │  0.199762 │ 0.949934 │
+│  maxnet2 │ 0.978088 │ 0.995986 │  0.190764 │  0.94992 │
+│      glm │ 0.977424 │ 0.996619 │ 0.0646276 │  0.94846 │
+│ ensemble │ 0.978088 │ 0.996724 │  0.125842 │ 0.949887 │
 └──────────┴──────────┴──────────┴───────────┴──────────┘
 test
 ┌──────────┬──────────┬──────────┬───────────┬──────────┐
 │    model │ accuracy │      auc │  log_loss │    kappa │
 │      Any │  Float64 │  Float64 │   Float64 │  Float64 │
 ├──────────┼──────────┼──────────┼───────────┼──────────┤
-│   maxnet │ 0.977424 │ 0.994687 │  0.213052 │ 0.948857 │
-│  maxnet2 │ 0.976096 │ 0.994412 │  0.204085 │ 0.945886 │
-│      glm │ 0.976096 │ 0.994616 │ 0.0863287 │ 0.945886 │
-│ ensemble │ 0.976096 │ 0.994431 │  0.140398 │ 0.945886 │
+│   maxnet │ 0.978752 │ 0.996417 │  0.212947 │ 0.951177 │
+│  maxnet2 │  0.98008 │ 0.995477 │  0.201635 │ 0.954096 │
+│      glm │ 0.977424 │ 0.995067 │ 0.0861123 │ 0.948418 │
+│ ensemble │ 0.977424 │ 0.995396 │  0.142381 │ 0.948418 │
 └──────────┴──────────┴──────────┴───────────┴──────────┘

Not too bad!

Make predictions of climatic suitability

Use the ensemble to

julia
suitability = SDM.predict(ensemble, se_aus, reducer = mean)
┌ 101×90 Raster{Union{Missing, Float64}, 2} ┐
 ├───────────────────────────────────────────┴──────────────────────────── dims ┐
   ↓ X Projected{Float64} 138.16666666666666:0.16666666666666666:154.83333333333331 ForwardOrdered Regular Intervals{Start},
@@ -156,17 +156,17 @@
   crs: GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]
 └──────────────────────────────────────────────────────────────────────────────┘
    ↓ →    -25.1667      -25.3333      …  -39.6667    -39.8333    -40.0
- 138.167    1.54196e-5    1.67051e-5        missing     missing     missing
- 138.333    1.57076e-5    1.71852e-5        missing     missing     missing
- 138.5      1.83785e-5    2.0916e-5         missing     missing     missing
- 138.667    2.00135e-5    2.64619e-5        missing     missing     missing
+ 138.167    5.2285e-6     5.66439e-6        missing     missing     missing
+ 138.333    5.32807e-6    5.82559e-6        missing     missing     missing
+ 138.5      6.23186e-6    7.15985e-6        missing     missing     missing
+ 138.667    6.90036e-6    9.21705e-6        missing     missing     missing
    ⋮                                  ⋱                            ⋮
  154.167     missing       missing          missing     missing     missing
  154.333     missing       missing          missing     missing     missing
  154.5       missing       missing          missing     missing     missing
  154.667     missing       missing    …     missing     missing     missing
- 154.833     missing       missing          missing     missing     missing

And let's see what that looks like

julia
plot(suitability, colorrange = (0,1))

- + 154.833 missing missing missing missing missing

And let's see what that looks like

julia
plot(suitability, colorrange = (0,1))

+ \ No newline at end of file diff --git a/dev/tutorials/plot_makie.html b/dev/tutorials/plot_makie.html index 5f7a3d31..25b20740 100644 --- a/dev/tutorials/plot_makie.html +++ b/dev/tutorials/plot_makie.html @@ -9,11 +9,11 @@ - + - + - + @@ -46,9 +46,9 @@ ax = Axis(fig[2, 1]; aspect = DataAspect()) contourf!(ax, A) surface(fig[2, 2], A) # even a 3D plot work! -fig

3-D rasters in Makie

Warning

This interface is experimental, and unexported for that reason. It may break at any time!

Just as in Plots, 3D rasters are treated as a series of 2D rasters, which are tiled and plotted.

You can use Rasters.rplot to visualize 3D rasters or RasterStacks in this way. An example is below:

julia
stack = RasterStack(WorldClim{Climate}; month = 1)
-Rasters.rplot(stack; Axis = (aspect = DataAspect(),),)

You can pass any theming keywords in, which are interpreted by Makie appropriately.

The plots seem a little squished here. We provide a Makie theme which makes text a little smaller and has some other space-efficient attributes:

julia
Makie.set_theme!(Rasters.theme_rasters())
-Rasters.rplot(stack)

reset theme

julia
Makie.set_theme!()

Plotting with Observables, animations

Rasters.rplot should support Observable input out of the box, but the dimensions of that input must remain the same - i.e., the element names of a RasterStack must remain the same.

julia
Makie.set_theme!(Rasters.theme_rasters())
+fig

3-D rasters in Makie

Warning

This interface is experimental, and unexported for that reason. It may break at any time!

Just as in Plots, 3D rasters are treated as a series of 2D rasters, which are tiled and plotted.

You can use Rasters.rplot to visualize 3D rasters or RasterStacks in this way. An example is below:

julia
stack = RasterStack(WorldClim{Climate}; month = 1)
+Rasters.rplot(stack; Axis = (aspect = DataAspect(),),)

You can pass any theming keywords in, which are interpreted by Makie appropriately.

The plots seem a little squished here. We provide a Makie theme which makes text a little smaller and has some other space-efficient attributes:

julia
Makie.set_theme!(Rasters.theme_rasters())
+Rasters.rplot(stack)

reset theme

julia
Makie.set_theme!()

Plotting with Observables, animations

Rasters.rplot should support Observable input out of the box, but the dimensions of that input must remain the same - i.e., the element names of a RasterStack must remain the same.

julia
Makie.set_theme!(Rasters.theme_rasters())
 # `stack` is the WorldClim climate data for January
 stack_obs = Observable(stack)
 fig = Rasters.rplot(stack_obs;
@@ -56,7 +56,7 @@
 )
 record(fig, "rplot.mp4", 1:12; framerate = 3) do i
     stack_obs[] = RasterStack(WorldClim{Climate}; month = i)
-end
"rplot.mp4"

julia
Makie.set_theme!() # reset theme
Rasters.rplot Function
julia
Rasters.rplot([position::GridPosition], raster; kw...)

raster may be a Raster (of 2 or 3 dimensions) or a RasterStack whose underlying rasters are 2 dimensional, or 3-dimensional with a singleton (length-1) third dimension.

Keywords

  • plottype = Makie.Heatmap: The type of plot. Can be any Makie plot type which accepts a Raster; in practice, Heatmap, Contour, Contourf and Surface are the best bets.

  • axistype = Makie.Axis: The type of axis. This can be an Axis, Axis3, LScene, or even a GeoAxis from GeoMakie.jl.

  • X = XDim: The X dimension of the raster.

  • Y = YDim: The Y dimension of the raster.

  • Z = YDim: The Y dimension of the raster.

  • draw_colorbar = true: Whether to draw a colorbar for the axis or not.

  • colorbar_position = Makie.Right(): Indicates which side of the axis the colorbar should be placed on. Can be Makie.Top(), Makie.Bottom(), Makie.Left(), or Makie.Right().

  • colorbar_padding = Makie.automatic: The amount of padding between the colorbar and its axis. If automatic, then this is set to the width of the colorbar.

  • title = Makie.automatic: The titles of each plot. If automatic, these are set to the name of the band.

  • xlabel = Makie.automatic: The x-label for the axis. If automatic, set to the dimension name of the X-dimension of the raster.

  • ylabel = Makie.automatic: The y-label for the axis. If automatic, set to the dimension name of the Y-dimension of the raster.

  • colorbarlabel = "": Usually nothing, but here if you need it. Sets the label on the colorbar.

  • colormap = nothing: The colormap for the heatmap. This can be set to a vector of colormaps (symbols, strings, cgrads) if plotting a 3D raster or RasterStack.

  • colorrange = Makie.automatic: The colormap for the heatmap. This can be set to a vector of (low, high) if plotting a 3D raster or RasterStack.

  • nan_color = :transparent: The color which NaN values should take. Default to transparent.

source

Using vanilla Makie

julia
using Rasters, RasterDataSources

The data

julia
layers = (:evenness, :range, :contrast, :correlation)
+end
"rplot.mp4"

julia
Makie.set_theme!() # reset theme
Rasters.rplot Function
julia
Rasters.rplot([position::GridPosition], raster; kw...)

raster may be a Raster (of 2 or 3 dimensions) or a RasterStack whose underlying rasters are 2 dimensional, or 3-dimensional with a singleton (length-1) third dimension.

Keywords

  • plottype = Makie.Heatmap: The type of plot. Can be any Makie plot type which accepts a Raster; in practice, Heatmap, Contour, Contourf and Surface are the best bets.

  • axistype = Makie.Axis: The type of axis. This can be an Axis, Axis3, LScene, or even a GeoAxis from GeoMakie.jl.

  • X = XDim: The X dimension of the raster.

  • Y = YDim: The Y dimension of the raster.

  • Z = YDim: The Y dimension of the raster.

  • draw_colorbar = true: Whether to draw a colorbar for the axis or not.

  • colorbar_position = Makie.Right(): Indicates which side of the axis the colorbar should be placed on. Can be Makie.Top(), Makie.Bottom(), Makie.Left(), or Makie.Right().

  • colorbar_padding = Makie.automatic: The amount of padding between the colorbar and its axis. If automatic, then this is set to the width of the colorbar.

  • title = Makie.automatic: The titles of each plot. If automatic, these are set to the name of the band.

  • xlabel = Makie.automatic: The x-label for the axis. If automatic, set to the dimension name of the X-dimension of the raster.

  • ylabel = Makie.automatic: The y-label for the axis. If automatic, set to the dimension name of the Y-dimension of the raster.

  • colorbarlabel = "": Usually nothing, but here if you need it. Sets the label on the colorbar.

  • colormap = nothing: The colormap for the heatmap. This can be set to a vector of colormaps (symbols, strings, cgrads) if plotting a 3D raster or RasterStack.

  • colorrange = Makie.automatic: The colormap for the heatmap. This can be set to a vector of (low, high) if plotting a 3D raster or RasterStack.

  • nan_color = :transparent: The color which NaN values should take. Default to transparent.

source

Using vanilla Makie

julia
using Rasters, RasterDataSources

The data

julia
layers = (:evenness, :range, :contrast, :correlation)
 st = RasterStack(EarthEnv{HabitatHeterogeneity}, layers)
 ausbounds = X(100 .. 160), Y(-50 .. -10) # Roughly cut out australia
 aus = st[ausbounds...] |> Rasters.trim
┌ 194×161 RasterStack ┐
@@ -97,7 +97,7 @@
     fig
 end
 save("aus_trim.png", current_figure());
CairoMakie.Screen{IMAGE}

- + \ No newline at end of file diff --git a/dev/tutorials/plotting.html b/dev/tutorials/plotting.html index 5f5bb110..83f5b74b 100644 --- a/dev/tutorials/plotting.html +++ b/dev/tutorials/plotting.html @@ -9,11 +9,11 @@ - + - + - + @@ -23,11 +23,11 @@
Skip to content

Plots, simple

Plots.jl and Makie.jl are fully supported by Rasters.jl, with recipes for plotting Raster and RasterStack provided. plot will plot a heatmap with axes matching dimension values. If mappedcrs is used, converted values will be shown on axes instead of the underlying crs values. contourf will similarly plot a filled contour plot.

Pixel resolution is limited to allow loading very large files quickly. max_res specifies the maximum pixel resolution to show on the longest axis of the array. It can be set manually to change the resolution (e.g. for large or high-quality plots):

julia
using Rasters, RasterDataSources, ArchGDAL, Plots
 A = Raster(WorldClim{BioClim}, 5)
-plot(A; max_res=3000)

For Makie, plot functions in a similar way. plot will only accept two-dimensional rasters. You can invoke contour, contourf, heatmap, surface or any Makie plotting function which supports surface-like data on a 2D raster.

To obtain tiled plots for 3D rasters and RasterStacks, use the function Rasters.rplot([gridposition], raster; kw_args...). This is an unexported function, since we're not sure how the API will change going forward.

Makie, simple

julia
using CairoMakie
+plot(A; max_res=3000)

For Makie, plot functions in a similar way. plot will only accept two-dimensional rasters. You can invoke contour, contourf, heatmap, surface or any Makie plotting function which supports surface-like data on a 2D raster.

To obtain tiled plots for 3D rasters and RasterStacks, use the function Rasters.rplot([gridposition], raster; kw_args...). This is an unexported function, since we're not sure how the API will change going forward.

Makie, simple

julia
using CairoMakie
 CairoMakie.activate!(px_per_unit = 2)
 using Rasters, CairoMakie, RasterDataSources, ArchGDAL
 A = Raster(WorldClim{BioClim}, 5)
-Makie.plot(A)

Loading data

Our first example simply loads a file from disk and plots it.

This netcdf file only has one layer, if it has more we could use RasterStack instead.

julia
using Rasters, NCDatasets, Plots
+Makie.plot(A)

Loading data

Our first example simply loads a file from disk and plots it.

This netcdf file only has one layer, if it has more we could use RasterStack instead.

julia
using Rasters, NCDatasets, Plots
 using Downloads: download
 
 url = "https://www.unidata.ucar.edu/software/netcdf/examples/tos_O1_2001-2002.nc";
@@ -55,8 +55,8 @@
   mappedcrs: EPSG:4326
 └──────────────────────────────────────────────────────────────────────────────┘
 [:, :, 1]
- ⋮      ⋱

Objects with Dimensions other than X and Y will produce multi-pane plots. Here we plot every third month in the first year in one plot:

julia
A[Ti=1:3:12] |> plot

Now plot the ocean temperatures around the Americas in the first month of 2001. Notice we are using lat/lon coordinates and date/time instead of regular indices. The time dimension uses DateTime360Day, so we need to load CFTime.jl to index it with Near.

julia
using CFTime
-A[Ti(Near(DateTime360Day(2001, 01, 17))), Y(-60.0 .. 90.0), X(45.0 .. 190.0)] |> plot

Now get the mean over the timespan, then save it to disk, and plot it as a filled contour.

Other plot functions and sliced objects that have only one X/Y/Z dimension fall back to generic DimensionalData.jl plotting, which will still correctly label plot axes.

julia
using Statistics
+ ⋮      ⋱

Objects with Dimensions other than X and Y will produce multi-pane plots. Here we plot every third month in the first year in one plot:

julia
A[Ti=1:3:12] |> plot

Now plot the ocean temperatures around the Americas in the first month of 2001. Notice we are using lat/lon coordinates and date/time instead of regular indices. The time dimension uses DateTime360Day, so we need to load CFTime.jl to index it with Near.

julia
using CFTime
+A[Ti(Near(DateTime360Day(2001, 01, 17))), Y(-60.0 .. 90.0), X(45.0 .. 190.0)] |> plot

Now get the mean over the timespan, then save it to disk, and plot it as a filled contour.

Other plot functions and sliced objects that have only one X/Y/Z dimension fall back to generic DimensionalData.jl plotting, which will still correctly label plot axes.

julia
using Statistics
 # Take the mean
 mean_tos = mean(A; dims=Ti)
┌ 180×170×1 Raster{Union{Missing, Float32}, 3} tos ┐
 ├──────────────────────────────────────────────────┴───────────────────── dims ┐
@@ -82,7 +82,7 @@
 └──────────────────────────────────────────────────────────────────────────────┘
 [:, :, 1]
  ⋮      ⋱

Plot a contour plot

julia
using Plots
-Plots.contourf(mean_tos; dpi=300, size=(800, 400))

write to disk

Write the mean values to disk

julia
write("mean_tos.nc", mean_tos)
"mean_tos.nc"

Plotting recipes in DimensionalData.jl are the fallback for Rasters.jl when the object doesn't have 2 X/Y/Z dimensions, or a non-spatial plot command is used. So (as a random example) we could plot a transect of ocean surface temperature at 20 degree latitude :

julia
A[Y(Near(20.0)), Ti(1)] |> plot

Polygon masking, mosaic and plot

In this example we will mask the Scandinavian countries with border polygons, then mosaic together to make a single plot.

First, get the country boundary shape files using GADM.jl.

using Rasters, RasterDataSources, ArchGDAL, Shapefile, Plots, Dates, Downloads, NCDatasets

Download the shapefile

julia
using Downloads
+Plots.contourf(mean_tos; dpi=300, size=(800, 400))

write to disk

Write the mean values to disk

julia
write("mean_tos.nc", mean_tos)
"mean_tos.nc"

Plotting recipes in DimensionalData.jl are the fallback for Rasters.jl when the object doesn't have 2 X/Y/Z dimensions, or a non-spatial plot command is used. So (as a random example) we could plot a transect of ocean surface temperature at 20 degree latitude :

julia
A[Y(Near(20.0)), Ti(1)] |> plot

Polygon masking, mosaic and plot

In this example we will mask the Scandinavian countries with border polygons, then mosaic together to make a single plot.

First, get the country boundary shape files using GADM.jl.

using Rasters, RasterDataSources, ArchGDAL, Shapefile, Plots, Dates, Downloads, NCDatasets

Download the shapefile

julia
using Downloads
 using Shapefile
 shapefile_url = "https://github.com/nvkelso/natural-earth-vector/raw/master/10m_cultural/ne_10m_admin_0_countries.shp"
 shapefile_name = "boundary_lines.shp"
@@ -127,12 +127,12 @@
     end
     return p
 end
borders! (generic function with 1 method)

Now we can plot the individual countries.

julia
dp = plot(denmark)
-borders!(dp, denmark_border)

and sweden

julia
sp = plot(sweden)
-borders!(sp, sweden_border)

and norway

julia
np = plot(norway)
-borders!(np, norway_border)

The Norway shape includes a lot of islands. Lets crop them out using .. intervals:

julia
norway_region = climate[X(0..40), Y(55..73)]
-plot(norway_region)

And mask it with the border again:

julia
norway = mask_trim(norway_region, norway_border)
+borders!(dp, denmark_border)

and sweden

julia
sp = plot(sweden)
+borders!(sp, sweden_border)

and norway

julia
np = plot(norway)
+borders!(np, norway_border)

The Norway shape includes a lot of islands. Lets crop them out using .. intervals:

julia
norway_region = climate[X(0..40), Y(55..73)]
+plot(norway_region)

And mask it with the border again:

julia
norway = mask_trim(norway_region, norway_border)
 np = plot(norway)
-borders!(np, norway_border)

Now we can combine the countries into a single raster using mosaic. first will take the first value if/when there is an overlap.

julia
scandinavia = mosaic(first, denmark, norway, sweden)
┌ 177×119 RasterStack ┐
+borders!(np, norway_border)

Now we can combine the countries into a single raster using mosaic. first will take the first value if/when there is an overlap.

julia
scandinavia = mosaic(first, denmark, norway, sweden)
┌ 177×119 RasterStack ┐
 ├─────────────────────┴────────────────────────────────────────────────── dims ┐
   ↓ X Projected{Float64} 3.166666666666657:0.16666666666666666:32.499999999999986 ForwardOrdered Regular Intervals{Start},
   → Y Projected{Float64} 72.66666666666667:-0.16666666666666666:53.00000000000001 ReverseOrdered Regular Intervals{Start}
@@ -149,12 +149,12 @@
 borders!(p, denmark_border)
 borders!(p, norway_border)
 borders!(p, sweden_border)
-p

And save to netcdf - a single multi-layered file, and tif, which will write a file for each stack layer.

julia
write("scandinavia.nc", scandinavia)
+p

And save to netcdf - a single multi-layered file, and tif, which will write a file for each stack layer.

julia
write("scandinavia.nc", scandinavia)
 write("scandinavia.tif", scandinavia)
(tmin = "scandinavia_tmin.tif",
  tmax = "scandinavia_tmax.tif",
  prec = "scandinavia_prec.tif",
  wind = "scandinavia_wind.tif",)

Rasters.jl provides a range of other methods that are being added to over time. Where applicable these methods read and write lazily to and from disk-based arrays of common raster file types. These methods also work for entire RasterStacks and RasterSeries using the same syntax.

- + \ No newline at end of file diff --git a/dev/tutorials/resample.html b/dev/tutorials/resample.html index 9021d95b..e614a761 100644 --- a/dev/tutorials/resample.html +++ b/dev/tutorials/resample.html @@ -9,11 +9,11 @@ - + - + - + @@ -79,7 +79,7 @@ rowgap!(fig.layout, 5) colgap!(fig.layout, 10) fig -end

reproject with resample using a ProjString

Geospatial datasets will come in different projections or coordinate reference systems (CRS) for many reasons. Here, we will focus on MODIS SINUSOIDAL and EPSG, and transformations between them.

Let's load our test raster

julia
ras = Raster(WorldClim{BioClim}, 5)
+end

reproject with resample using a ProjString

Geospatial datasets will come in different projections or coordinate reference systems (CRS) for many reasons. Here, we will focus on MODIS SINUSOIDAL and EPSG, and transformations between them.

Let's load our test raster

julia
ras = Raster(WorldClim{BioClim}, 5)
 ras_m = replace_missing(ras, missingval=NaN);

Sinusoidal Projection (MODIS)

julia
SINUSOIDAL_CRS = ProjString("+proj=sinu +lon_0=0 +type=crs")
ProjString: +proj=sinu +lon_0=0 +type=crs
Raw MODIS ProjString
julia
SINUSOIDAL_CRS = ProjString("+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371007.181 +b=6371007.181 +units=m +no_defs")

and the resample is performed with

julia
ras_sin = resample(ras_m; size=(2160, 1080), crs=SINUSOIDAL_CRS, method="average")
┌ 2160×1080 Raster{Float64, 2} bio5 ┐
 ├───────────────────────────────────┴──────────────────────────────────── dims ┐
   ↓ X Projected{Float64} -2.0037508342789244e7:18547.034693196307:2.000553955982158e7 ForwardOrdered Regular Intervals{Start},
@@ -100,7 +100,7 @@
   1.9987e7   NaN          NaN             NaN          NaN
   2.00055e7  NaN          NaN          …  NaN          NaN

TIP

GDAL always changes the locus to cell sampling, you can reset this by using shiftlocus.

let's compare the total counts!

julia
nansum(ras_m), nansum(ras_sin)
(1.1263161695036696e7, 1.1730134537265886e7)

and, how does this looks like?

julia
fig, ax, plt = heatmap(ras_sin)
 Colorbar(fig[1,2], plt)
-fig

now, let's go back to latitude and longitude and reduce the resolution

julia
ras_epsg = resample(ras_sin; size=(1440,720), crs=EPSG(4326), method="average")
┌ 1440×720 Raster{Float64, 2} bio5 ┐
+fig

now, let's go back to latitude and longitude and reduce the resolution

julia
ras_epsg = resample(ras_sin; size=(1440,720), crs=EPSG(4326), method="average")
┌ 1440×720 Raster{Float64, 2} bio5 ┐
 ├──────────────────────────────────┴───────────────────────────────────── dims ┐
   ↓ X Projected{Float64} -180.0:0.25:179.75 ForwardOrdered Regular Intervals{Start},
   → Y Projected{Float64} 89.75002543153558:-0.2499745684644309:-89.98168929439024 ReverseOrdered Regular Intervals{Start}
@@ -138,7 +138,7 @@
   179.625  NaN      NaN      NaN          -24.341   -23.9056  -23.7339
   179.875  NaN      NaN      NaN       …  -24.3405  -23.9063  -23.7338

Things to keep in mind

  • You can in fact resample to another raster resample(ras; to=ref_ras), if you want perfect alignment. Contributions are welcome for this use case!

  • This doesn't work for irregularly sampled rasters.

julia
fig, ax, plt = heatmap(ras_epsg)
 Colorbar(fig[1,2], plt)
-fig

A Raster from scratch

julia
x_range = LinRange(-180, 179.75, 1440)
+fig

A Raster from scratch

julia
x_range = LinRange(-180, 179.75, 1440)
 y_range = LinRange(89.75, -90, 720)
 ras_data = ras_epsg.data

create the raster

julia
julia> using Rasters.Lookups
 
@@ -164,7 +164,7 @@
   179.5   NaN     NaN    NaN     NaN       -24.341   -23.9056  -23.7339
   179.75  NaN     NaN    NaN     NaN    …  -24.3405  -23.9063  -23.7338

WARNING

Note that you need to specify sampling=Intervals(Start()) for X and Y.

This requires that you run using Rasters.Lookups, where the Intervals and Start types are defined.

and take a look

julia
fig, ax, plt = heatmap(ras_scratch)
 Colorbar(fig[1,2], plt)
-fig

and the corresponding resampled projection

julia
julia> ras_sin_s = resample(ras_scratch; size=(1440,720), crs=SINUSOIDAL_CRS, method="average")
1440×720 Raster{Float64, 2}
+fig

and the corresponding resampled projection

julia
julia> ras_sin_s = resample(ras_scratch; size=(1440,720), crs=SINUSOIDAL_CRS, method="average")
1440×720 Raster{Float64, 2}
 ├─────────────────────────────┴────────────────────────────────────────── dims ┐
 X Projected{Float64} -2.0037508342789244e7:27820.552039794457:1.999626604247498e7 ForwardOrdered Regular Intervals{Start},
 Y Projected{Float64} 9.974183816928538e6:-27781.912384183634:-1.0001011187299494e7 ReverseOrdered Regular Intervals{Start}
@@ -184,13 +184,13 @@
   1.99684e7  NaN          NaN         NaN             NaN          NaN
   1.99963e7  NaN          NaN         NaN          …  NaN          NaN
julia
fig, ax, plt = heatmap(ras_sin_s)
 Colorbar(fig[1,2], plt)
-fig

and go back from sin to epsg:

julia
ras_epsg = resample(ras_sin_s; size=(1440,720), crs=EPSG(4326), method="average")
+fig

and go back from sin to epsg:

julia
ras_epsg = resample(ras_sin_s; size=(1440,720), crs=EPSG(4326), method="average")
 locus_resampled = DimensionalData.shiftlocus(Center(), ras_epsg)
 
 fig, ax, plt = heatmap(locus_resampled)
 Colorbar(fig[1,2], plt)
-fig

and compare the total counts again!

julia
nansum(ras_sin_s), nansum(locus_resampled)
(5.780817076729905e6, 6.287521031058559e6)

DANGER

Note that all counts are a little bit off. Could we mitigate this some more?

- +fig

and compare the total counts again!

julia
nansum(ras_sin_s), nansum(locus_resampled)
(5.780817076729905e6, 6.287521031058559e6)

DANGER

Note that all counts are a little bit off. Could we mitigate this some more?

+ \ No newline at end of file diff --git a/dev/tutorials/spatial_mean.html b/dev/tutorials/spatial_mean.html index 0a12c6ae..d4abcd91 100644 --- a/dev/tutorials/spatial_mean.html +++ b/dev/tutorials/spatial_mean.html @@ -9,11 +9,11 @@ - + - + - + @@ -49,7 +49,7 @@ 179.833 missing missing … 0 0 0 0
julia
all_countries = naturalearth("admin_0_countries", 10)
 chile = all_countries.geometry[findfirst(==("Chile"), all_countries.NAME)]
2D MultiPolygonwith 163 sub-geometries

Let's plot the precipitation on the world map, and highlight Chile:

julia
f, a, p = heatmap(precip; colorrange = Makie.zscale(replace_missing(precip, NaN)), axis = (; aspect = DataAspect()))
 p2 = poly!(a, chile; color = (:red, 0.3), strokecolor = :red, strokewidth = 0.5)
-f

You can see Chile highlighted in red, in the bottom left quadrant.

Processing the data

First, let's make sure that we only have the data that we care about, and crop and mask the raster so it only has values in Chile. We can crop by the geometry, which really just generates a view into the raster that is bounded by the geometry's bounding box.

julia
cropped_precip = crop(precip; to = chile)
┌ 257×229 Raster{Union{Missing, Int16}, 2} prec ┐
+f

You can see Chile highlighted in red, in the bottom left quadrant.

Processing the data

First, let's make sure that we only have the data that we care about, and crop and mask the raster so it only has values in Chile. We can crop by the geometry, which really just generates a view into the raster that is bounded by the geometry's bounding box.

julia
cropped_precip = crop(precip; to = chile)
┌ 257×229 Raster{Union{Missing, Int16}, 2} prec ┐
 ├───────────────────────────────────────────────┴──────────────────────── dims ┐
   ↓ X Projected{Float64} -109.33333333333334:0.16666666666666666:-66.66666666666667 ForwardOrdered Regular Intervals{Start},
   → Y Projected{Float64} -17.833333333333332:-0.16666666666666666:-55.833333333333336 ReverseOrdered Regular Intervals{Start}
@@ -68,7 +68,7 @@
   -67.0       6           4         …   61            missing     missing
   -66.8333    7           6               missing   66          74
   -66.6667    6           5               missing     missing     missing

Now, we mask the data such that any data outside the geometry is set to missing.

julia
masked_precip = mask(cropped_precip; with = chile)
-heatmap(masked_precip)

This is a lot of missing data, but that's mainly because the Chile geometry we have encompasses the Easter Islands as well, in the middle of the Pacific.

Rasters.cellarea Function
julia
cellarea([method], x)

Gives the approximate area of each gridcell of x. By assuming the earth is a sphere, it approximates the true size to about 0.1%, depending on latitude.

Run using ArchGDAL or using Proj to make this method fully available.

  • method: You can specify whether you want to compute the area in the plane of your projection Planar() or on a sphere of some radius Spherical(; radius=...)(the default).

  • Spherical will compute cell area on the sphere, by transforming all points back to long-lat. You can specify the radius by the radius keyword argument here. By default, this is 6371008.8, the mean radius of the Earth.

  • Planar will compute cell area in the plane of the CRS you have chosen. Be warned that this will likely be incorrect for non-equal-area projections.

Returns a Raster with the same x and y dimensions as the input, where each value in the raster encodes the area of the cell (in meters by default).

Example

julia
using Rasters, Proj, Rasters.Lookups
+heatmap(masked_precip)

This is a lot of missing data, but that's mainly because the Chile geometry we have encompasses the Easter Islands as well, in the middle of the Pacific.

Rasters.cellarea Function
julia
cellarea([method], x)

Gives the approximate area of each gridcell of x. By assuming the earth is a sphere, it approximates the true size to about 0.1%, depending on latitude.

Run using ArchGDAL or using Proj to make this method fully available.

  • method: You can specify whether you want to compute the area in the plane of your projection Planar() or on a sphere of some radius Spherical(; radius=...)(the default).

  • Spherical will compute cell area on the sphere, by transforming all points back to long-lat. You can specify the radius by the radius keyword argument here. By default, this is 6371008.8, the mean radius of the Earth.

  • Planar will compute cell area in the plane of the CRS you have chosen. Be warned that this will likely be incorrect for non-equal-area projections.

Returns a Raster with the same x and y dimensions as the input, where each value in the raster encodes the area of the cell (in meters by default).

Example

julia
using Rasters, Proj, Rasters.Lookups
 xdim = X(Projected(90.0:10.0:120; sampling=Intervals(Start()), crs=EPSG(4326)))
 ydim = Y(Projected(0.0:10.0:50; sampling=Intervals(Start()), crs=EPSG(4326)))
 myraster = rand(xdim, ydim)
@@ -89,9 +89,9 @@
   90.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0
  100.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0
  110.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0
- 120.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

cellarea computes the area of each cell in a raster. This is useful for a number of reasons - if you have a variable like population per cell, or elevation (spatially extensive variables), you'll want to account for the fact that different cells have different areas.

You can specify whether you want to compute the area in the plane of your projection (Planar()), or on a sphere of some radius (Spherical(; radius=...)).

Now, let's compute the average precipitation per square meter across Chile. First, we need to get the area of each cell in square meters. We'll use the spherical method, since we're working with a geographic coordinate system. This is the default.

julia
areas = cellarea(masked_precip)
+ 120.0  1.23017e6   1.19279e6   1.11917e6   1.01154e6  873182.0  708290.0

WARNING: This feature is experimental. It may change in future versions, and may not be 100% reliable in all cases. Please file github issues if problems occur.

source

cellarea computes the area of each cell in a raster. This is useful for a number of reasons - if you have a variable like population per cell, or elevation (spatially extensive variables), you'll want to account for the fact that different cells have different areas.

You can specify whether you want to compute the area in the plane of your projection (Planar()), or on a sphere of some radius (Spherical(; radius=...)).

Now, let's compute the average precipitation per square meter across Chile. First, we need to get the area of each cell in square meters. We'll use the spherical method, since we're working with a geographic coordinate system. This is the default.

julia
areas = cellarea(masked_precip)
 masked_areas = mask(areas; with = chile)
-heatmap(masked_areas; axis = (; title = "Cell area in square meters"))

You can see here that cells are largest towards the equator, and smallest away from it. This means that cells away from the equator should have a smaller contribution to the average than cells nearer the equator.

Computing the spatial mean

Now we can compute the average precipitation per square meter. First, we compute total precipitation over each grid cell. (The units of this Raster will be m^2 * mm, which happens to be equal to liter.)

julia
precip_per_area = masked_precip .* masked_areas
┌ 257×229 Raster{Union{Missing, Float64}, 2} ┐
+heatmap(masked_areas; axis = (; title = "Cell area in square meters"))

You can see here that cells are largest towards the equator, and smallest away from it. This means that cells away from the equator should have a smaller contribution to the average than cells nearer the equator.

Computing the spatial mean

Now we can compute the average precipitation per square meter. First, we compute total precipitation over each grid cell. (The units of this Raster will be m^2 * mm, which happens to be equal to liter.)

julia
precip_per_area = masked_precip .* masked_areas
┌ 257×229 Raster{Union{Missing, Float64}, 2} ┐
 ├────────────────────────────────────────────┴─────────────────────────── dims ┐
   ↓ X Projected{Float64} -109.33333333333334:0.16666666666666666:-66.66666666666667 ForwardOrdered Regular Intervals{Start},
   → Y Projected{Float64} -17.833333333333332:-0.16666666666666666:-55.833333333333336 ReverseOrdered Regular Intervals{Start}
@@ -124,7 +124,7 @@
 avg_prec_future = map(eachslice(precip_litres_future; dims = (:ssp, :gcm))) do slice
    sum(skipmissing(slice)) / total_area_f
 end

Which shows us that June rainfall in Chile will be slightly lower in the future, especially under the high-emission SSP370 scenario.

- + \ No newline at end of file