From b1e7a4cc9596b0abd762591f1524f4b22762e50b Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Wed, 2 Oct 2024 01:03:13 +0000 Subject: [PATCH] build based on aa4c092 --- dev/404.html | 4 +- dev/api.html | 40 ++++++++++--------- ...{api.md.NYkrqh02.js => api.md.DehzNRDj.js} | 32 ++++++++------- ...krqh02.lean.js => api.md.DehzNRDj.lean.js} | 32 ++++++++------- .../{app.IVjkfSMU.js => app.DWRAVX01.js} | 2 +- .../chunks/@localSearchIndexroot.BIq-6JjD.js | 1 + .../chunks/@localSearchIndexroot.Drtoz-t2.js | 1 - ...u90fND.js => VPLocalSearchBox.BO9Crzas.js} | 2 +- .../{theme.CHEpmyUw.js => theme._B5YJXUN.js} | 4 +- dev/docker.html | 6 +-- dev/getting_started.html | 6 +-- dev/hashmap.json | 2 +- dev/index.html | 6 +-- 13 files changed, 75 insertions(+), 63 deletions(-) rename dev/assets/{api.md.NYkrqh02.js => api.md.DehzNRDj.js} (51%) rename dev/assets/{api.md.NYkrqh02.lean.js => api.md.DehzNRDj.lean.js} (51%) rename dev/assets/{app.IVjkfSMU.js => app.DWRAVX01.js} (95%) create mode 100644 dev/assets/chunks/@localSearchIndexroot.BIq-6JjD.js delete mode 100644 dev/assets/chunks/@localSearchIndexroot.Drtoz-t2.js rename dev/assets/chunks/{VPLocalSearchBox.DUu90fND.js => VPLocalSearchBox.BO9Crzas.js} (99%) rename dev/assets/chunks/{theme.CHEpmyUw.js => theme._B5YJXUN.js} (99%) diff --git a/dev/404.html b/dev/404.html index c580912..b6924e3 100644 --- a/dev/404.html +++ b/dev/404.html @@ -8,14 +8,14 @@ - +
- + \ No newline at end of file diff --git a/dev/api.html b/dev/api.html index 5df55bc..2604fd6 100644 --- a/dev/api.html +++ b/dev/api.html @@ -8,18 +8,18 @@ - + - + - + -
Skip to content

API

ReefGuideAPI._cache_location Method
julia
_cache_location(config::Dict)::String

Retrieve cache location for geotiffs.

source

ReefGuideAPI._lon_lat_to_tile Method
julia
_lon_lat_to_tile(zoom, lon, lat)

Identify the corresponding tile coordinates for a given lon/lat.

Returns

x and y tile coordinates

source

ReefGuideAPI._tile_bounds Method
julia
_tile_bounds(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat bounds of a requested tile.

Returns

West, East, North South (min lon, max lon, lat max, lat min)

source

ReefGuideAPI._tile_to_lon_lat Method
julia
_tile_to_lon_lat(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat of top-left corner of a requested tile.

Returns

lon, lat

source

ReefGuideAPI.apply_criteria_thresholds Method
julia
apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})::Raster
+    
Skip to content

API

ReefGuideAPI._cache_location Method
julia
_cache_location(config::Dict)::String

Retrieve cache location for geotiffs.

source

ReefGuideAPI._lon_lat_to_tile Method
julia
_lon_lat_to_tile(zoom, lon, lat)

Identify the corresponding tile coordinates for a given lon/lat.

Returns

x and y tile coordinates

source

ReefGuideAPI._tile_bounds Method
julia
_tile_bounds(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat bounds of a requested tile.

Returns

West, East, North South (min lon, max lon, lat max, lat min)

source

ReefGuideAPI._tile_to_lon_lat Method
julia
_tile_to_lon_lat(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat of top-left corner of a requested tile.

Returns

lon, lat

source

ReefGuideAPI.apply_criteria_thresholds Method
julia
apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})::Raster
 apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Dict)::Raster
-apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::NamedTuple)::Raster

Apply thresholds for each criteria.

Arguments

  • criteria_stack : RasterStack of criteria data for a given region

  • lookup : Lookup dataframe for the region

  • ruleset : A set of CriteriaBounds, Dictionary or NamedTuple indicating a mapping of criteria names to their lower and upper thresholds.

Returns

BitMatrix indicating locations within desired thresholds

source

ReefGuideAPI.assess_reef_site Method
julia
assess_reef_site(
+apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::NamedTuple)::Raster

Apply thresholds for each criteria.

Arguments

  • criteria_stack : RasterStack of criteria data for a given region

  • lookup : Lookup dataframe for the region

  • ruleset : A set of CriteriaBounds, Dictionary or NamedTuple indicating a mapping of criteria names to their lower and upper thresholds.

Returns

BitMatrix indicating locations within desired thresholds

source

ReefGuideAPI.assess_reef_site Method
julia
assess_reef_site(
     rel_pix::DataFrame,
     geom::GI.Wrappers.Polygon,
     max_count::Float64,
@@ -28,20 +28,20 @@
     start_rot::Float64=0.0,
     n_per_side::Int64=2,
     surr_threshold::Float64=0.33
-)::Tuple{Float64,Int64,GI.Wrappers.Polygon,Int64}

Assesses the rotations of a search box geom for their suitability score (calculated as the proportion of pixels that meet all specified criteria thresholds). Search box rotation steps are returned so that the start_rot angle is 0, rotations anti-clockwise are negative and rotations clockwise are positive.

Arguments

  • rel_pix : DataFrame containing the point data for pixels that are within maxmimum user search box dimensions from a pixel.

  • geom : Starting search box for assessment.

  • max_count : The maximum number of pixels that can intersect the search box (used to standardise scores between 0 and 1).

  • target_crs : Coordinate Reference System used for analysis vector and raster data.

  • degree_step : Step to vary the search box rotations.

  • start_rot : Starting angle rotation that aligns the box with the closest reef edge.

  • n_per_side : Number of rotations to perform around the starting search box angle.

  • surr_threshold : Suitability threshold, below which sites are excluded from result sets.

Returns

Returns the highest score, rotation step, polygon and a quality control flag for each assessment.

source

ReefGuideAPI.assess_reef_site Method
julia
assess_reef_site(
+)::Tuple{Float64,Int64,GI.Wrappers.Polygon,Int64}

Assesses the rotations of a search box geom for their suitability score (calculated as the proportion of pixels that meet all specified criteria thresholds). Search box rotation steps are returned so that the start_rot angle is 0, rotations anti-clockwise are negative and rotations clockwise are positive.

Arguments

  • rel_pix : DataFrame containing the point data for pixels that are within maxmimum user search box dimensions from a pixel.

  • geom : Starting search box for assessment.

  • max_count : The maximum number of pixels that can intersect the search box (used to standardise scores between 0 and 1).

  • target_crs : Coordinate Reference System used for analysis vector and raster data.

  • degree_step : Step to vary the search box rotations.

  • start_rot : Starting angle rotation that aligns the box with the closest reef edge.

  • n_per_side : Number of rotations to perform around the starting search box angle.

  • surr_threshold : Suitability threshold, below which sites are excluded from result sets.

Returns

  • Highest score

  • Highest scoring rotation step

  • Highest scoring polygon

  • Quality control flag for site, indicating if surr_threshold was met in the highest scoring rotation.

source

ReefGuideAPI.assess_reef_site Method
julia
assess_reef_site(
     rst::Union{Raster,RasterStack},
     geom::GI.Wrappers.Polygon,
     ruleset::Dict{Symbol,Function};
     degree_step::Float64=15.0,
     start_rot::Float64=0.0,
     n_per_side::Int64=1
-)::Tuple{Float64,Int64,GI.Wrappers.Polygon}

Assess given reef site.

source

ReefGuideAPI.closest_reef_edge Method
julia
closest_reef_edge(
+)::Tuple{Float64,Int64,GI.Wrappers.Polygon}

Assess given reef site for it's suitability score at different specified rotations around the initial reef-edge rotation.

Arguments

  • rst : Raster or RasterStack object used to assess site suitability.

  • geom : Initial site polygon with no rotation applied.

  • ruleset : Criteria ruleset to apply to rst pixels when assessing which pixels are suitable.

  • degree_step : Degree value to vary each rotation by. Default = 15 degrees.

  • start_rot : Initial rotation used to align the site polygon with the nearest reef edge. Default = 0 degrees.

  • n_per_side : Number of times to rotate polygon on each side (clockwise and anticlockwise). Default = 2 rotations on each side.

Returns

  • Highest score identified with rotating polygons.

  • The index of the highest scoring rotation.

  • The polygon with the highest score out of the assessed rotated polygons.

source

ReefGuideAPI.closest_reef_edge Method
julia
closest_reef_edge(
     pixel::GeometryBasics.Point{2, Float64},
     reef_lines::Vector{GeometryBasics.Line{2, Float64}}
-)::Vector{Tuple{Float64, Float64}}

Find the nearest line in reef_lines to a point pixel.

Arguments

  • pixel : Target point geometry.

  • reef_lines : Vector containing lines for comparison.

Returns

Coordinates of the reef edge line that is closest to the target pixel. Returned in Tuples.

source

ReefGuideAPI.create_bbox Method
julia
create_bbox(xs::Tuple, ys::Tuple)::Vector{Tuple{Float64, Float64}}

Create bounding box from x and y coordinates

Returns in order of top left, top right, bottom right, bottom left

source

ReefGuideAPI.criteria_middleware Method
julia
criteria_middleware(handle)

Creates middleware that parses a criteria query before reaching an endpoint

Example

https:😕/somewhere:8000/suitability/assess/region-name/reeftype?criteria_names=Depth,Slope&lb=-9.0,0.0&ub=-2.0,40

source

ReefGuideAPI.degrees_to_meters Method
julia
degrees_to_meters(x, lat)

Convert degrees to meters at target latitude.

source

ReefGuideAPI.filter_distances Method
julia
filter_distances(
+)::Vector{Tuple{Float64, Float64}}

Find the nearest line in reef_lines to a point pixel.

Arguments

  • pixel : Target point geometry.

  • reef_lines : Vector containing lines for comparison.

Returns

Coordinates of the reef edge line that is closest to the target pixel. Returned in Tuples.

source

ReefGuideAPI.create_bbox Method
julia
create_bbox(xs::Tuple, ys::Tuple)::Vector{Tuple{Float64, Float64}}

Create bounding box from x and y coordinates

Returns

Bounding box coordinates in order of top left, top right, bottom right, bottom left, top left.

source

ReefGuideAPI.criteria_middleware Method
julia
criteria_middleware(handle)

Creates middleware that parses a criteria query before reaching an endpoint

Example

https://somewhere:8000/suitability/assess/region-name/reeftype?criteria_names=Depth,Slope&lb=-9.0,0.0&ub=-2.0,40

source

ReefGuideAPI.degrees_to_meters Method
julia
degrees_to_meters(x, lat)

Convert degrees to meters at target latitude.

source

ReefGuideAPI.filter_distances Method
julia
filter_distances(
     target_rast::Raster,
     dist_buffer
-)::Raster

Apply a mask to exclude pixels that are outside the indicated distance buffer(s).

target_rast and the dist_buffer should be in the same CRS (e.g., EPSG:7844 / GDA2020).

Arguments

  • target_rast : Raster of suitable pixels (Bool) to filter pixels from.

  • dist_buffer : Buffer geometry to use as the mask.

Returns

  • Masked boolean raster indicating pixels that are within the target distance.

source

ReefGuideAPI.filter_far_polygons Method
julia
filter_far_polygons(gdf::DataFrame, pixel::GIWrap.Point, lat::Float64, dist::Union{Int64,Float64})::BitVector

Filter out reefs that are > 10km from the target pixel (currently hardcoded threshold).

source

ReefGuideAPI.filter_sites Method
julia
filter_sites(res_df::DataFrame)::DataFrame

Filter out sites where the qc_flag indicates a suitabiltiy < surr_threshold in searching. Identify and keep the highest scoring site polygon where site polygons are overlapping.

Arguments

  • res_df : Results DataFrame containing potential site polygons (output from identify_potential_sites() or identify_potential_sites_edges()).

Returns

DataFrame containing only the highest scoring sites where site polygons intersect, and containing only sites with scores greater than the surr_threshold specified in identify_potential_sites_edges() (default=0.33).

source

ReefGuideAPI.find_horizontal Method
julia
find_horizontal(geom::GI.Wrappers.Polygon)::Vector{Tuple{Float64,Float64}, Tuple{Float64,Float64}}

Find a horizontal line if one exists within a geometry.

Returns

Vector containing tuples of coordinates for a horizontal line found within geom.

source

ReefGuideAPI.from_zero Method
julia
from_zero(v::Vector{Tuple{Float64,Float64}})::Vector{Tuple{Float64, Float64}}

Translates Vector of points v to begin from (0, 0), retaining direction and length.

Argument

  • v : Vector of point coordinates (Tuple{Float64, Float64}).

source

ReefGuideAPI.generate_criteria_mask! Method
julia
generate_criteria_mask!(fn::String, rst_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})

Generate mask file for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zero values indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • fn : File to write geotiff to

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

Returns

Nothing

source

ReefGuideAPI.get_points Method
julia
get_points(geom)

Helper method to retrieve points for a geometry.

source

ReefGuideAPI.identify_potential_sites_edges Method
julia
identify_potential_sites_edges(
+)::Raster

Apply a mask to exclude pixels that are outside the indicated distance buffer(s).

target_rast and the dist_buffer should be in the same CRS (e.g., EPSG:7844 / GDA2020).

Arguments

  • target_rast : Raster of suitable pixels (Bool) to filter pixels from.

  • dist_buffer : Buffer geometry to use as the mask.

Returns

  • Masked boolean raster indicating pixels that are within the target distance.

source

ReefGuideAPI.filter_far_polygons Method
julia
filter_far_polygons(gdf::DataFrame, pixel::GIWrap.Point, lat::Float64, dist::Union{Int64,Float64})::BitVector

Filter out reefs that are > dist (meters) from the target pixel (currently dist is hardcoded in initial_search_rotation()).

source

ReefGuideAPI.filter_sites Method
julia
filter_sites(res_df::DataFrame)::DataFrame

Filter out sites where the qc_flag indicates a suitabiltiy < surr_threshold in searching. Where site polygons are overlapping, keep only the highest scoring site polygon.

Arguments

  • res_df : Results DataFrame containing potential site polygons (output from identify_potential_sites() or identify_potential_sites_edges()).

Returns

DataFrame containing only the highest scoring sites where site polygons intersect, and containing only sites with scores greater than the surr_threshold specified in identify_potential_sites_edges() (default=0.33).

source

ReefGuideAPI.find_horizontal Method
julia
find_horizontal(geom::GI.Wrappers.Polygon)::Vector{Tuple{Float64,Float64}, Tuple{Float64,Float64}}

Find a horizontal line if one exists within a geometry.

Returns

Vector containing tuples of coordinates for a horizontal line found within geom.

source

ReefGuideAPI.from_zero Method
julia
from_zero(v::Vector{Tuple{Float64,Float64}})::Vector{Tuple{Float64, Float64}}

Translates Vector of points v to begin from (0, 0), retaining direction and length.

Argument

  • v : Vector of point coordinates (Tuple{Float64, Float64}).

source

ReefGuideAPI.generate_criteria_mask! Method
julia
generate_criteria_mask!(fn::String, rst_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})

Generate mask file for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • fn : File to write geotiff to

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

Returns

Nothing

source

ReefGuideAPI.get_points Method
julia
get_points(geom)

Helper method to retrieve points for a geometry.

source

ReefGuideAPI.identify_potential_sites_edges Method
julia
identify_potential_sites_edges(
     df::DataFrame,
     search_pixels::DataFrame,
     res::Float64,
@@ -54,7 +54,7 @@
     degree_step::Float64=15.0,
     n_rot_p_side::Int64=2,
     surr_threshold::Float64=0.33
-)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon in meters. A buffer of the raster files' resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters. Method is currently opperating for CRS in degrees units.

Arguments

  • df : DataFrame containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat columns for each pixel that is intended for analysis.

  • res : Resolution of the original raster pixels. Can by found via abs(step(dims(raster, X))).

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box (in meters).

  • y_dist : Length of vertical side of search box (in meters).

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • reef_lines : Vector containing reef outline segments created from polygons in gdf.geometry (Must be separate object to gdf rather than column).

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_p_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

  • surr_threshold : Theshold used to skip searching where the proportion of suitable pixels is too low.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

ReefGuideAPI.identify_potential_sites_edges Method
julia
identify_potential_sites_edges(
+)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon in meters. A buffer of the raster files' resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters. Method is currently opperating for CRS in degrees units.

Arguments

  • df : DataFrame containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat columns for each pixel that is intended for analysis.

  • res : Resolution of the original raster pixels. Can by found via abs(step(dims(raster, X))).

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box (in meters).

  • y_dist : Length of vertical side of search box (in meters).

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • reef_lines : Vector containing reef outline segments created from polygons in gdf.geometry (Must be separate object to gdf rather than column).

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_p_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

  • surr_threshold : Theshold used to skip searching where the proportion of suitable pixels is too low.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

ReefGuideAPI.identify_potential_sites_edges Method
julia
identify_potential_sites_edges(
     rst_stack::RasterStack,
     search_pixels::DataFrame,
     gdf::DataFrame,
@@ -65,28 +65,32 @@
     reef_lines::Vector{Vector{GeometryBasics.Line{2,Float64}}};
     degree_step::Float64=15.0,
     n_rot_per_side::Int64=2
-)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon. A buffer of rst_stack resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters.

Arguments

  • rst_stack : RasterStack containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat values for each pixel intended for

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box.

  • y_dist : Length of vertical side of search box.

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • reef_lines : Vector containing reef outline segments for each reef in gdf.geometry (Must be separate object to gdf rather than a column).

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_per_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

ReefGuideAPI.identify_search_pixels Method
julia
identify_search_pixels(input_raster::Raster, criteria_function)::DataFrame

Identifies all pixels in an input raster that return true for the function criteria_function.

Arguments

  • input_raster : Raster containing pixels for the target region.

  • criteria_function : Function that returns a boolean value for each pixel in input_raster. Pixels that return true will be targetted in analysis.

Returns

DataFrame containing indices, lon and lat for each pixel that is intended for further analysis.

source

ReefGuideAPI.initial_search_box Method
julia
initial_search_box(
+)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon. A buffer of rst_stack resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters.

Arguments

  • rst_stack : RasterStack containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat values for each pixel intended for

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box.

  • y_dist : Length of vertical side of search box.

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • reef_lines : Vector containing reef outline segments for each reef in gdf.geometry (Must be separate object to gdf rather than a column).

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_per_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

ReefGuideAPI.identify_search_pixels Method
julia
identify_search_pixels(input_raster::Raster, criteria_function)::DataFrame

Identifies all pixels in an input raster that return true for the function criteria_function.

Arguments

  • input_raster : Raster containing pixels for the target region.

  • criteria_function : Function that returns a boolean value for each pixel in input_raster. Pixels that return true will be targetted in analysis.

Returns

DataFrame containing indices, lon and lat for each pixel that is intended for further analysis.

source

ReefGuideAPI.initial_search_box Method
julia
initial_search_box(
     (lon::Float64, lat::Float64),
     x_dist::Union{Int64, Float64},
     y_dist::Union{Int64, Float64},
     target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat,
     res::Float64
-)::GI.Wrappers.Polygon

Create an initial search box that is centered around the point (lon, lat) in target_crs, and is buffered by res distance.

Arguments

  • (lon, lat) : Longitude and latitude coordinates of the center target pixel.

  • x_dist : x (longitude) dimension length of initial search box.

  • y_dist : y (latitude) dimension length of initial search box.

  • target_crs : Target CRS of box to match input data types.

  • res : Buffer distance (resolution of input raster search data).

Returns

Initial search box geometry.

source

ReefGuideAPI.initial_search_rotation Method
julia
initial_search_rotation(
+)::GI.Wrappers.Polygon

Create an initial search box that is centered around the point (lon, lat) in target_crs, and is buffered by res distance.

Arguments

  • (lon, lat) : Longitude and latitude coordinates of the center target pixel.

  • x_dist : x (longitude) dimension length of initial search box.

  • y_dist : y (latitude) dimension length of initial search box.

  • target_crs : Target CRS of box to match input data types.

  • res : Buffer distance (resolution of input raster search data).

Returns

Initial search box geometry.

source

ReefGuideAPI.initial_search_rotation Method
julia
initial_search_rotation(
     pixel::GeometryBasics.Point{2, Float64},
     geom_buff::GI.Wrappers.Polygon,
     gdf::DataFrame,
     reef_outlines::Vector{Vector{GeometryBasics.Line{2, Float64}}};
     search_buffer::Union{Int64,Float64}=20000.0
-)::Float64

Identifies the closest edge to the target pixel/'geom_buff and returns the initial rotation angle required to match the edge line.

Arguments

  • pixel : Target point at the center of the search polygon.

  • geom_buff : Initial search box with zero rotation.

  • gdf : GeoDataFrame containing a geometry column used for pixel masking.

  • reef_outlines : Line segments for the outlines of each reef in gdf.

  • search_buffer : Distance to search from pixel to find closest reef.

source

ReefGuideAPI.line_angle Method
julia
line_angle(a::T, b::T)::Float64 where {T <: Vector{Tuple{Float64,Float64}}}

Calculate the angle between two lines.

Arguments

  • a : Line between point coordinates.

  • b : Line between point coordinates.

Returns

Angle between the two lines.

Examples

julia
line_angle([(0.0,5.0), (0.0,0.0)], from_zero(edge_line))
-line_angle([(0.0,5.0), (0.0,0.0)], [(1.0, 4.0), (7.0, 8.0)])

source

ReefGuideAPI.make_threshold_mask Method
julia
make_threshold_mask(reg::String, rtype::Symbol, crit_map)

Generate mask for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zero values indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

  • lons : Longitudinal extent (min and max)

  • lats : Latitudinal extent (min and max)

Returns

True/false mask indicating locations within desired thresholds.

source

ReefGuideAPI.masked_nearest Method
julia
masked_nearest(rst::Raster, z::Int, x::Int, y::Int, tile_size::Tuple{Int,Int}, orig_rst_size::Tuple{Int,Int})::Matrix

Resample a raster using nearest neighbor interpolation when the tile includes area outside where data exists (e.g., viewing the globe where the data may appear in a small corner of the tile). This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • z: Tile zoom level requested.

  • x: x coordinate for requested tile.

  • y: y coordinate for the requested tile.

  • tile_size: The desired dimensions of the tile (lat, long).

Returns

Matrix with the resampled data.

source

ReefGuideAPI.meters_to_degrees Method
julia
meters_to_degrees(x, lat)

Convert meters to degrees at target latitude.

source

ReefGuideAPI.move_geom Method
julia
move_geom(geom, new_centroid::Tuple)

Move a geom to a new centroid.

Arguments

  • geom : geometry to move

  • new_centroid : Centroid given in lon, lat

source

ReefGuideAPI.n_gdal_threads Method
julia
n_gdal_threads(config::Dict)::String

Retrieve the configured number of threads to use when writing COGs with GDAL.

source

ReefGuideAPI.nearest Method
julia
nearest(rst::Raster, tile_size::Tuple{Int, Int})::Matrix

Resample a raster to a tile size using nearest neighbor interpolation. This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • tile_size: The desired dimensions of the tile (lat, long).

Returns

Matrix with the resampled data.

Examples

julia
large_raster = Raster(rand(UInt8, 14756, 14838); dims=(X(1:1:14756), Y(1:1:14838)))
-small_matrix = nearest(large_raster, (256, 256))

source

ReefGuideAPI.output_geojson Method
julia
output_geojson(
+)::Float64

Identifies the closest edge to the target pixel/'geom_buff and returns the initial rotation angle required to match the edge line.

Arguments

  • pixel : Target point at the center of the search polygon.

  • geom_buff : Initial search box with zero rotation.

  • gdf : GeoDataFrame containing a geometry column used for pixel masking.

  • reef_outlines : Line segments for the outlines of each reef in gdf.

  • search_buffer : Distance to search from pixel to find closest reef.

source

ReefGuideAPI.line_angle Method
julia
line_angle(a::T, b::T)::Float64 where {T <: Vector{Tuple{Float64,Float64}}}

Calculate the angle between two lines.

Arguments

  • a : Line between point coordinates.

  • b : Line between point coordinates.

Returns

Angle between the two lines.

Examples

julia
line_angle([(0.0,5.0), (0.0,0.0)], from_zero(edge_line))
+line_angle([(0.0,5.0), (0.0,0.0)], [(1.0, 4.0), (7.0, 8.0)])

source

ReefGuideAPI.make_threshold_mask Method
julia
make_threshold_mask(reg::String, rtype::Symbol, crit_map)

Generate mask for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

  • lons : Longitudinal extent (min and max)

  • lats : Latitudinal extent (min and max)

Returns

True/false mask indicating locations within desired thresholds.

source

ReefGuideAPI.masked_nearest Method
julia
masked_nearest(rst::Raster, z::Int, x::Int, y::Int, tile_size::Tuple{Int,Int}, orig_rst_size::Tuple{Int,Int})::Matrix

Resample a raster using nearest neighbor interpolation when the tile includes area outside where data exists (e.g., viewing the globe where the data may appear in a small corner of the tile). This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • z: Tile zoom level requested.

  • x: x coordinate for requested tile.

  • y: y coordinate for the requested tile.

  • tile_size: The desired dimensions of the tile (lat, long). Note reversed order of coordinates.

Returns

Matrix with the resampled data.

source

ReefGuideAPI.meters_to_degrees Method
julia
meters_to_degrees(x, lat)

Convert meters to degrees at target latitude.

source

ReefGuideAPI.move_geom Method
julia
move_geom(geom, new_centroid::Tuple)

Move a geom to a new centroid.

Arguments

  • geom : geometry to move

  • new_centroid : Centroid given in (lon, lat).

source

ReefGuideAPI.n_gdal_threads Method
julia
n_gdal_threads(config::Dict)::String

Retrieve the configured number of threads to use when writing COGs with GDAL.

source

ReefGuideAPI.nearest Method
julia
nearest(rst::Raster, tile_size::Tuple{Int, Int})::Matrix

Resample a raster to a tile size using nearest neighbor interpolation. This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • tile_size: The desired dimensions of the tile (lat, long).

Returns

Matrix with the resampled data.

Examples

julia
large_raster = Raster(rand(UInt8, 14756, 14838); dims=(X(1:1:14756), Y(1:1:14838)))
+small_matrix = nearest(large_raster, (256, 256))

source

ReefGuideAPI.output_geojson Method
julia
output_geojson(
     df::DataFrame,
     region::String,
     output_dir::String
-)::Nothing

Writes out GeoJSON file to a target directory. Output file will be located at location: "output_dir/output_sites_region.geojson"

Arguments

  • df : DataFrame intended for writing to geojson file.

  • region : Region name for labelling output file.

  • output_dir : Directory to write geojson file to.

source

ReefGuideAPI.parse_criteria_query Method
julia
parse_criteria_query(qp)::Tuple

Parse criteria values from request query.

Queries should take the form of: Depth=-9.0:0.0&Slope=0.0:40.0&Rugosity=0.0:0.0

Arguments

  • qp : Parsed query string from request.

Returns

Tuple of criteria names, lower bounds, upper bounds

source

ReefGuideAPI.polygon_to_lines Method
julia
polygon_to_lines(
+)::Nothing

Writes out GeoJSON file to a target directory. Output file will be located at location: "output_dir/output_sites_region.geojson"

Arguments

  • df : DataFrame intended for writing to geojson file.

  • region : Region name for labelling output file.

  • output_dir : Directory to write geojson file to.

source

ReefGuideAPI.parse_criteria_query Method
julia
parse_criteria_query(qp)::Tuple

Parse criteria values from request query.

Queries should take the form of: Depth=-9.0:0.0&Slope=0.0:40.0&Rugosity=0.0:0.0

Arguments

  • qp : Parsed query string from request.

Returns

Tuple of criteria names, lower bounds, upper bounds

source

ReefGuideAPI.polygon_to_lines Method
julia
polygon_to_lines(
     polygon::Union{Vector{T},T,GIWrap.MultiPolygon}
-) where {T<:GIWrap.Polygon}

Extract the individual lines between vertices that make up the outline of a polygon.

source

ReefGuideAPI.port_buffer_mask Method
julia
port_buffer_mask(gdf::DataFrame, dist::Float64; unit::String="NM")

Create a masking buffer around indicated port locations.

Arguments

  • gdf : GeoDataFrame of port locations (given as long/lat points)

  • dist : distance from port in degrees (deg), kilometers (km), or nautical miles (NM; default)

  • unit : unit dist is in

source

ReefGuideAPI.remove_rugosity Method
julia
remove_rugosity(reg, criteria, lbs, ubs)

Remove rugosity layer from consideration if region is not Townsville. Rugosity data currently only exists for the Townsville region.

source

ReefGuideAPI.rotate_polygon Method

Rotate the polygon by the given angle about its center.

source

ReefGuideAPI.setup_regional_data Method
julia
setup_regional_data(config::Dict)

Load regional data to act as an in-memory cache.

Arguments

  • config : Configuration settings, typically loaded from a TOML file.

  • reef_data_path : Path to pre-prepared reef data

Returns

OrderedDict of RegionalCriteria for each region.

source

ReefGuideAPI.tile_size Method
julia
tile_size(config::Dict)::Tuple

Retrieve the configured size of map tiles in pixels (width and height / lon and lat).

source

ReefGuideAPI.valid_lonlat_inds Method
julia
valid_lonlat_inds(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Retrieve the indices of valid data for a region.

Arguments

  • data :

  • criteria :

  • lb :

  • ub :

Returns

Tuple{Vector{Int64}, Vector{Int64}}, of lon and lat indices.

source

ReefGuideAPI.valid_pixel_positions Method
julia
valid_pixel_positions(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Obtain the pixel positions of valid data.

Intended for use in something like: https://developers.arcgis.com/javascript/latest/sample-code/layers-imagery-pixelvalues/

Arguments

  • data :

  • criteria :

  • lb : lower bound

  • ub : upper bound

source

ReefGuideAPI.warmup_cache Method
julia
warmup_cache(config_path::String)

Invokes warm up of regional data cache to reduce later spin up times.

source

ReefGuideAPI.within_thresholds Method
julia
within_thresholds(ctype::Val, data::Raster, lb::T, ub::T) where {T}

Apply in-bound constraints.

Notes

Why is this a simple one line function? Because we want to be able to cache results for each constraint type.

source

- +) where {T<:GIWrap.Polygon}

Extract the individual lines between vertices that make up the outline of a polygon.

Returns

Vector of GeometryBasics.Line{2, Float64} with one line for each adjacent vertex pair in polygon.

source

ReefGuideAPI.port_buffer_mask Method
julia
port_buffer_mask(gdf::DataFrame, dist::Float64; unit::String="NM")

Create a masking buffer around indicated port locations.

Arguments

  • gdf : GeoDataFrame of port locations (given as long/lat points)

  • dist : distance from port in degrees (deg), kilometers (km), or nautical miles (NM; default)

  • unit : unit dist is in

source

ReefGuideAPI.remove_rugosity Method
julia
remove_rugosity(reg, criteria, lbs, ubs)

Remove rugosity layer from consideration if region is not Townsville. Rugosity data currently only exists for the Townsville region.

source

ReefGuideAPI.rotate_geom Method
julia
rotate_geom(
+    geom,
+    degrees::Float64,
+    target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat
+)

Rotate target geom by degrees rotation in clockwise direction. target_crs is applied to output geometry.

Returns

Rotated geometry.

source

ReefGuideAPI.rotate_polygon Method

Rotate the polygon by the given angle about its center.

source

ReefGuideAPI.setup_regional_data Method
julia
setup_regional_data(config::Dict)

Load regional data to act as an in-memory cache.

Arguments

  • config : Configuration settings, typically loaded from a TOML file.

  • reef_data_path : Path to pre-prepared reef data

Returns

OrderedDict of RegionalCriteria for each region.

source

ReefGuideAPI.tile_size Method
julia
tile_size(config::Dict)::Tuple

Retrieve the configured size of map tiles in pixels (width and height / lon and lat).

source

ReefGuideAPI.valid_lonlat_inds Method
julia
valid_lonlat_inds(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Retrieve the indices of valid data for a region.

Arguments

  • data :

  • criteria :

  • lb :

  • ub :

Returns

Tuple{Vector{Int64}, Vector{Int64}}, of lon and lat indices.

source

ReefGuideAPI.valid_pixel_positions Method
julia
valid_pixel_positions(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Obtain the pixel positions of valid data.

Intended for use in applications similar to ImageryLayer - client side pixel filter.

Arguments

  • data :

  • criteria :

  • lb : lower bound

  • ub : upper bound

source

ReefGuideAPI.warmup_cache Method
julia
warmup_cache(config_path::String)

Invokes warm up of regional data cache to reduce later spin up times.

source

ReefGuideAPI.within_thresholds Method
julia
within_thresholds(ctype::Val, data::Raster, lb::T, ub::T) where {T}

Apply in-bound constraints.

Notes

Why is this a simple one line function? Because we want to be able to cache results for each constraint type.

source

+ \ No newline at end of file diff --git a/dev/assets/api.md.NYkrqh02.js b/dev/assets/api.md.DehzNRDj.js similarity index 51% rename from dev/assets/api.md.NYkrqh02.js rename to dev/assets/api.md.DehzNRDj.js index deaee5d..96aaa0c 100644 --- a/dev/assets/api.md.NYkrqh02.js +++ b/dev/assets/api.md.DehzNRDj.js @@ -1,6 +1,6 @@ -import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o as h}from"./chunks/framework.BvdfcH24.js";const ls=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),o={name:"api.md"},d={class:"jldocstring custom-block",open:""},k={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""},c={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},E={class:"jldocstring custom-block",open:""},F={class:"jldocstring custom-block",open:""},b={class:"jldocstring custom-block",open:""},f={class:"jldocstring custom-block",open:""},m={class:"jldocstring custom-block",open:""},C={class:"jldocstring custom-block",open:""},A={class:"jldocstring custom-block",open:""},_={class:"jldocstring custom-block",open:""},j={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},R={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},B={class:"jldocstring custom-block",open:""},G={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""},M={class:"jldocstring custom-block",open:""},S={class:"jldocstring custom-block",open:""},L={class:"jldocstring custom-block",open:""},w={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},O={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},z={class:"jldocstring custom-block",open:""},W={class:"jldocstring custom-block",open:""},N={class:"jldocstring custom-block",open:""},$={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},X={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},H={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},Y={class:"jldocstring custom-block",open:""};function K(ss,s,is,es,as,ts){const a=r("Badge");return h(),p("div",null,[s[127]||(s[127]=i("h1",{id:"api",tabindex:"-1"},[e("API "),i("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1)),i("details",d,[i("summary",null,[s[0]||(s[0]=i("a",{id:"ReefGuideAPI._cache_location-Tuple{Dict}",href:"#ReefGuideAPI._cache_location-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._cache_location")],-1)),s[1]||(s[1]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[2]||(s[2]=n('
julia
_cache_location(config::Dict)::String

Retrieve cache location for geotiffs.

source

',3))]),i("details",k,[i("summary",null,[s[3]||(s[3]=i("a",{id:"ReefGuideAPI._lon_lat_to_tile-Tuple{Any, Any, Any}",href:"#ReefGuideAPI._lon_lat_to_tile-Tuple{Any, Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._lon_lat_to_tile")],-1)),s[4]||(s[4]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[5]||(s[5]=n('
julia
_lon_lat_to_tile(zoom, lon, lat)

Identify the corresponding tile coordinates for a given lon/lat.

Returns

x and y tile coordinates

source

',5))]),i("details",g,[i("summary",null,[s[6]||(s[6]=i("a",{id:"ReefGuideAPI._tile_bounds-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64",href:"#ReefGuideAPI._tile_bounds-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64"},[i("span",{class:"jlbinding"},"ReefGuideAPI._tile_bounds")],-1)),s[7]||(s[7]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[8]||(s[8]=n('
julia
_tile_bounds(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat bounds of a requested tile.

Returns

West, East, North South (min lon, max lon, lat max, lat min)

source

',5))]),i("details",c,[i("summary",null,[s[9]||(s[9]=i("a",{id:"ReefGuideAPI._tile_to_lon_lat-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64",href:"#ReefGuideAPI._tile_to_lon_lat-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64"},[i("span",{class:"jlbinding"},"ReefGuideAPI._tile_to_lon_lat")],-1)),s[10]||(s[10]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[11]||(s[11]=n('
julia
_tile_to_lon_lat(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat of top-left corner of a requested tile.

Returns

lon, lat

source

',5))]),i("details",u,[i("summary",null,[s[12]||(s[12]=i("a",{id:"ReefGuideAPI.apply_criteria_thresholds-Tuple{Rasters.RasterStack, DataFrames.DataFrame, Dict}",href:"#ReefGuideAPI.apply_criteria_thresholds-Tuple{Rasters.RasterStack, DataFrames.DataFrame, Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.apply_criteria_thresholds")],-1)),s[13]||(s[13]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[14]||(s[14]=n(`
julia
apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})::Raster
+import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o}from"./chunks/framework.BvdfcH24.js";const ps=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),h={name:"api.md"},d={class:"jldocstring custom-block",open:""},k={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""},c={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},E={class:"jldocstring custom-block",open:""},f={class:"jldocstring custom-block",open:""},F={class:"jldocstring custom-block",open:""},b={class:"jldocstring custom-block",open:""},m={class:"jldocstring custom-block",open:""},C={class:"jldocstring custom-block",open:""},A={class:"jldocstring custom-block",open:""},_={class:"jldocstring custom-block",open:""},j={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},R={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},B={class:"jldocstring custom-block",open:""},G={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""},M={class:"jldocstring custom-block",open:""},S={class:"jldocstring custom-block",open:""},L={class:"jldocstring custom-block",open:""},w={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},O={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},z={class:"jldocstring custom-block",open:""},W={class:"jldocstring custom-block",open:""},N={class:"jldocstring custom-block",open:""},H={class:"jldocstring custom-block",open:""},$={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},X={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},Y={class:"jldocstring custom-block",open:""},K={class:"jldocstring custom-block",open:""};function ss(is,s,es,as,ts,ns){const a=r("Badge");return o(),p("div",null,[s[130]||(s[130]=i("h1",{id:"api",tabindex:"-1"},[e("API "),i("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1)),i("details",d,[i("summary",null,[s[0]||(s[0]=i("a",{id:"ReefGuideAPI._cache_location-Tuple{Dict}",href:"#ReefGuideAPI._cache_location-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._cache_location")],-1)),s[1]||(s[1]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[2]||(s[2]=n('
julia
_cache_location(config::Dict)::String

Retrieve cache location for geotiffs.

source

',3))]),i("details",k,[i("summary",null,[s[3]||(s[3]=i("a",{id:"ReefGuideAPI._lon_lat_to_tile-Tuple{Any, Any, Any}",href:"#ReefGuideAPI._lon_lat_to_tile-Tuple{Any, Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._lon_lat_to_tile")],-1)),s[4]||(s[4]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[5]||(s[5]=n('
julia
_lon_lat_to_tile(zoom, lon, lat)

Identify the corresponding tile coordinates for a given lon/lat.

Returns

x and y tile coordinates

source

',5))]),i("details",g,[i("summary",null,[s[6]||(s[6]=i("a",{id:"ReefGuideAPI._tile_bounds-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64",href:"#ReefGuideAPI._tile_bounds-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64"},[i("span",{class:"jlbinding"},"ReefGuideAPI._tile_bounds")],-1)),s[7]||(s[7]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[8]||(s[8]=n('
julia
_tile_bounds(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat bounds of a requested tile.

Returns

West, East, North South (min lon, max lon, lat max, lat min)

source

',5))]),i("details",c,[i("summary",null,[s[9]||(s[9]=i("a",{id:"ReefGuideAPI._tile_to_lon_lat-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64",href:"#ReefGuideAPI._tile_to_lon_lat-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64"},[i("span",{class:"jlbinding"},"ReefGuideAPI._tile_to_lon_lat")],-1)),s[10]||(s[10]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[11]||(s[11]=n('
julia
_tile_to_lon_lat(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat of top-left corner of a requested tile.

Returns

lon, lat

source

',5))]),i("details",u,[i("summary",null,[s[12]||(s[12]=i("a",{id:"ReefGuideAPI.apply_criteria_thresholds-Tuple{Rasters.RasterStack, DataFrames.DataFrame, Dict}",href:"#ReefGuideAPI.apply_criteria_thresholds-Tuple{Rasters.RasterStack, DataFrames.DataFrame, Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.apply_criteria_thresholds")],-1)),s[13]||(s[13]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[14]||(s[14]=n(`
julia
apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})::Raster
 apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Dict)::Raster
-apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::NamedTuple)::Raster

Apply thresholds for each criteria.

Arguments

  • criteria_stack : RasterStack of criteria data for a given region

  • lookup : Lookup dataframe for the region

  • ruleset : A set of CriteriaBounds, Dictionary or NamedTuple indicating a mapping of criteria names to their lower and upper thresholds.

Returns

BitMatrix indicating locations within desired thresholds

source

`,7))]),i("details",y,[i("summary",null,[s[15]||(s[15]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{DataFrames.DataFrame, GeoInterface.Wrappers.Polygon, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}",href:"#ReefGuideAPI.assess_reef_site-Tuple{DataFrames.DataFrame, GeoInterface.Wrappers.Polygon, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[16]||(s[16]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[17]||(s[17]=n(`
julia
assess_reef_site(
+apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::NamedTuple)::Raster

Apply thresholds for each criteria.

Arguments

  • criteria_stack : RasterStack of criteria data for a given region

  • lookup : Lookup dataframe for the region

  • ruleset : A set of CriteriaBounds, Dictionary or NamedTuple indicating a mapping of criteria names to their lower and upper thresholds.

Returns

BitMatrix indicating locations within desired thresholds

source

`,7))]),i("details",y,[i("summary",null,[s[15]||(s[15]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{DataFrames.DataFrame, GeoInterface.Wrappers.Polygon, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}",href:"#ReefGuideAPI.assess_reef_site-Tuple{DataFrames.DataFrame, GeoInterface.Wrappers.Polygon, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[16]||(s[16]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[17]||(s[17]=n(`
julia
assess_reef_site(
     rel_pix::DataFrame,
     geom::GI.Wrappers.Polygon,
     max_count::Float64,
@@ -9,20 +9,20 @@ import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o as h}from"./chunks/fr
     start_rot::Float64=0.0,
     n_per_side::Int64=2,
     surr_threshold::Float64=0.33
-)::Tuple{Float64,Int64,GI.Wrappers.Polygon,Int64}

Assesses the rotations of a search box geom for their suitability score (calculated as the proportion of pixels that meet all specified criteria thresholds). Search box rotation steps are returned so that the start_rot angle is 0, rotations anti-clockwise are negative and rotations clockwise are positive.

Arguments

  • rel_pix : DataFrame containing the point data for pixels that are within maxmimum user search box dimensions from a pixel.

  • geom : Starting search box for assessment.

  • max_count : The maximum number of pixels that can intersect the search box (used to standardise scores between 0 and 1).

  • target_crs : Coordinate Reference System used for analysis vector and raster data.

  • degree_step : Step to vary the search box rotations.

  • start_rot : Starting angle rotation that aligns the box with the closest reef edge.

  • n_per_side : Number of rotations to perform around the starting search box angle.

  • surr_threshold : Suitability threshold, below which sites are excluded from result sets.

Returns

Returns the highest score, rotation step, polygon and a quality control flag for each assessment.

source

`,7))]),i("details",E,[i("summary",null,[s[18]||(s[18]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon, Dict{Symbol, Function}}",href:"#ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon, Dict{Symbol, Function}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[19]||(s[19]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[20]||(s[20]=n(`
julia
assess_reef_site(
+)::Tuple{Float64,Int64,GI.Wrappers.Polygon,Int64}

Assesses the rotations of a search box geom for their suitability score (calculated as the proportion of pixels that meet all specified criteria thresholds). Search box rotation steps are returned so that the start_rot angle is 0, rotations anti-clockwise are negative and rotations clockwise are positive.

Arguments

  • rel_pix : DataFrame containing the point data for pixels that are within maxmimum user search box dimensions from a pixel.

  • geom : Starting search box for assessment.

  • max_count : The maximum number of pixels that can intersect the search box (used to standardise scores between 0 and 1).

  • target_crs : Coordinate Reference System used for analysis vector and raster data.

  • degree_step : Step to vary the search box rotations.

  • start_rot : Starting angle rotation that aligns the box with the closest reef edge.

  • n_per_side : Number of rotations to perform around the starting search box angle.

  • surr_threshold : Suitability threshold, below which sites are excluded from result sets.

Returns

  • Highest score

  • Highest scoring rotation step

  • Highest scoring polygon

  • Quality control flag for site, indicating if surr_threshold was met in the highest scoring rotation.

source

`,7))]),i("details",E,[i("summary",null,[s[18]||(s[18]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon, Dict{Symbol, Function}}",href:"#ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon, Dict{Symbol, Function}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[19]||(s[19]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[20]||(s[20]=n(`
julia
assess_reef_site(
     rst::Union{Raster,RasterStack},
     geom::GI.Wrappers.Polygon,
     ruleset::Dict{Symbol,Function};
     degree_step::Float64=15.0,
     start_rot::Float64=0.0,
     n_per_side::Int64=1
-)::Tuple{Float64,Int64,GI.Wrappers.Polygon}

Assess given reef site.

source

`,3))]),i("details",F,[i("summary",null,[s[21]||(s[21]=i("a",{id:"ReefGuideAPI.closest_reef_edge-Tuple{GeometryBasics.Point{2, Float64}, Vector{GeometryBasics.Line{2, Float64}}}",href:"#ReefGuideAPI.closest_reef_edge-Tuple{GeometryBasics.Point{2, Float64}, Vector{GeometryBasics.Line{2, Float64}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.closest_reef_edge")],-1)),s[22]||(s[22]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[23]||(s[23]=n(`
julia
closest_reef_edge(
+)::Tuple{Float64,Int64,GI.Wrappers.Polygon}

Assess given reef site for it's suitability score at different specified rotations around the initial reef-edge rotation.

Arguments

  • rst : Raster or RasterStack object used to assess site suitability.

  • geom : Initial site polygon with no rotation applied.

  • ruleset : Criteria ruleset to apply to rst pixels when assessing which pixels are suitable.

  • degree_step : Degree value to vary each rotation by. Default = 15 degrees.

  • start_rot : Initial rotation used to align the site polygon with the nearest reef edge. Default = 0 degrees.

  • n_per_side : Number of times to rotate polygon on each side (clockwise and anticlockwise). Default = 2 rotations on each side.

Returns

  • Highest score identified with rotating polygons.

  • The index of the highest scoring rotation.

  • The polygon with the highest score out of the assessed rotated polygons.

source

`,7))]),i("details",f,[i("summary",null,[s[21]||(s[21]=i("a",{id:"ReefGuideAPI.closest_reef_edge-Tuple{GeometryBasics.Point{2, Float64}, Vector{GeometryBasics.Line{2, Float64}}}",href:"#ReefGuideAPI.closest_reef_edge-Tuple{GeometryBasics.Point{2, Float64}, Vector{GeometryBasics.Line{2, Float64}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.closest_reef_edge")],-1)),s[22]||(s[22]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[23]||(s[23]=n(`
julia
closest_reef_edge(
     pixel::GeometryBasics.Point{2, Float64},
     reef_lines::Vector{GeometryBasics.Line{2, Float64}}
-)::Vector{Tuple{Float64, Float64}}

Find the nearest line in reef_lines to a point pixel.

Arguments

  • pixel : Target point geometry.

  • reef_lines : Vector containing lines for comparison.

Returns

Coordinates of the reef edge line that is closest to the target pixel. Returned in Tuples.

source

`,7))]),i("details",b,[i("summary",null,[s[24]||(s[24]=i("a",{id:"ReefGuideAPI.create_bbox-Tuple{Tuple, Tuple}",href:"#ReefGuideAPI.create_bbox-Tuple{Tuple, Tuple}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.create_bbox")],-1)),s[25]||(s[25]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[26]||(s[26]=n('
julia
create_bbox(xs::Tuple, ys::Tuple)::Vector{Tuple{Float64, Float64}}

Create bounding box from x and y coordinates

Returns in order of top left, top right, bottom right, bottom left

source

',4))]),i("details",f,[i("summary",null,[s[27]||(s[27]=i("a",{id:"ReefGuideAPI.criteria_middleware-Tuple{Any}",href:"#ReefGuideAPI.criteria_middleware-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.criteria_middleware")],-1)),s[28]||(s[28]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[29]||(s[29]=n('
julia
criteria_middleware(handle)

Creates middleware that parses a criteria query before reaching an endpoint

Example

https:😕/somewhere:8000/suitability/assess/region-name/reeftype?criteria_names=Depth,Slope&lb=-9.0,0.0&ub=-2.0,40

source

',5))]),i("details",m,[i("summary",null,[s[30]||(s[30]=i("a",{id:"ReefGuideAPI.degrees_to_meters-Tuple{Any, Any}",href:"#ReefGuideAPI.degrees_to_meters-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.degrees_to_meters")],-1)),s[31]||(s[31]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[32]||(s[32]=n('
julia
degrees_to_meters(x, lat)

Convert degrees to meters at target latitude.

source

',3))]),i("details",C,[i("summary",null,[s[33]||(s[33]=i("a",{id:"ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, Any}",href:"#ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_distances")],-1)),s[34]||(s[34]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[35]||(s[35]=n(`
julia
filter_distances(
+)::Vector{Tuple{Float64, Float64}}

Find the nearest line in reef_lines to a point pixel.

Arguments

  • pixel : Target point geometry.

  • reef_lines : Vector containing lines for comparison.

Returns

Coordinates of the reef edge line that is closest to the target pixel. Returned in Tuples.

source

`,7))]),i("details",F,[i("summary",null,[s[24]||(s[24]=i("a",{id:"ReefGuideAPI.create_bbox-Tuple{Tuple, Tuple}",href:"#ReefGuideAPI.create_bbox-Tuple{Tuple, Tuple}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.create_bbox")],-1)),s[25]||(s[25]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[26]||(s[26]=n('
julia
create_bbox(xs::Tuple, ys::Tuple)::Vector{Tuple{Float64, Float64}}

Create bounding box from x and y coordinates

Returns

Bounding box coordinates in order of top left, top right, bottom right, bottom left, top left.

source

',5))]),i("details",b,[i("summary",null,[s[27]||(s[27]=i("a",{id:"ReefGuideAPI.criteria_middleware-Tuple{Any}",href:"#ReefGuideAPI.criteria_middleware-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.criteria_middleware")],-1)),s[28]||(s[28]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[29]||(s[29]=n('
julia
criteria_middleware(handle)

Creates middleware that parses a criteria query before reaching an endpoint

Example

https://somewhere:8000/suitability/assess/region-name/reeftype?criteria_names=Depth,Slope&lb=-9.0,0.0&ub=-2.0,40

source

',5))]),i("details",m,[i("summary",null,[s[30]||(s[30]=i("a",{id:"ReefGuideAPI.degrees_to_meters-Tuple{Any, Any}",href:"#ReefGuideAPI.degrees_to_meters-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.degrees_to_meters")],-1)),s[31]||(s[31]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[32]||(s[32]=n('
julia
degrees_to_meters(x, lat)

Convert degrees to meters at target latitude.

source

',3))]),i("details",C,[i("summary",null,[s[33]||(s[33]=i("a",{id:"ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, Any}",href:"#ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_distances")],-1)),s[34]||(s[34]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[35]||(s[35]=n(`
julia
filter_distances(
     target_rast::Raster,
     dist_buffer
-)::Raster

Apply a mask to exclude pixels that are outside the indicated distance buffer(s).

target_rast and the dist_buffer should be in the same CRS (e.g., EPSG:7844 / GDA2020).

Arguments

  • target_rast : Raster of suitable pixels (Bool) to filter pixels from.

  • dist_buffer : Buffer geometry to use as the mask.

Returns

  • Masked boolean raster indicating pixels that are within the target distance.

source

`,8))]),i("details",A,[i("summary",null,[s[36]||(s[36]=i("a",{id:"ReefGuideAPI.filter_far_polygons-Tuple{DataFrames.DataFrame, GeometryBasics.Point, Float64, Union{Float64, Int64}}",href:"#ReefGuideAPI.filter_far_polygons-Tuple{DataFrames.DataFrame, GeometryBasics.Point, Float64, Union{Float64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_far_polygons")],-1)),s[37]||(s[37]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[38]||(s[38]=n('
julia
filter_far_polygons(gdf::DataFrame, pixel::GIWrap.Point, lat::Float64, dist::Union{Int64,Float64})::BitVector

Filter out reefs that are > 10km from the target pixel (currently hardcoded threshold).

source

',3))]),i("details",_,[i("summary",null,[s[39]||(s[39]=i("a",{id:"ReefGuideAPI.filter_sites-Tuple{DataFrames.DataFrame}",href:"#ReefGuideAPI.filter_sites-Tuple{DataFrames.DataFrame}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_sites")],-1)),s[40]||(s[40]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[41]||(s[41]=n('
julia
filter_sites(res_df::DataFrame)::DataFrame

Filter out sites where the qc_flag indicates a suitabiltiy < surr_threshold in searching. Identify and keep the highest scoring site polygon where site polygons are overlapping.

Arguments

  • res_df : Results DataFrame containing potential site polygons (output from identify_potential_sites() or identify_potential_sites_edges()).

Returns

DataFrame containing only the highest scoring sites where site polygons intersect, and containing only sites with scores greater than the surr_threshold specified in identify_potential_sites_edges() (default=0.33).

source

',7))]),i("details",j,[i("summary",null,[s[42]||(s[42]=i("a",{id:"ReefGuideAPI.find_horizontal-Tuple{GeoInterface.Wrappers.Polygon}",href:"#ReefGuideAPI.find_horizontal-Tuple{GeoInterface.Wrappers.Polygon}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.find_horizontal")],-1)),s[43]||(s[43]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[44]||(s[44]=n('
julia
find_horizontal(geom::GI.Wrappers.Polygon)::Vector{Tuple{Float64,Float64}, Tuple{Float64,Float64}}

Find a horizontal line if one exists within a geometry.

Returns

Vector containing tuples of coordinates for a horizontal line found within geom.

source

',5))]),i("details",I,[i("summary",null,[s[45]||(s[45]=i("a",{id:"ReefGuideAPI.from_zero-Tuple{Vector{Tuple{Float64, Float64}}}",href:"#ReefGuideAPI.from_zero-Tuple{Vector{Tuple{Float64, Float64}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.from_zero")],-1)),s[46]||(s[46]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[47]||(s[47]=n('
julia
from_zero(v::Vector{Tuple{Float64,Float64}})::Vector{Tuple{Float64, Float64}}

Translates Vector of points v to begin from (0, 0), retaining direction and length.

Argument

  • v : Vector of point coordinates (Tuple{Float64, Float64}).

source

',5))]),i("details",D,[i("summary",null,[s[48]||(s[48]=i("a",{id:"ReefGuideAPI.generate_criteria_mask!-Tuple{String, Rasters.RasterStack, DataFrames.DataFrame, Vector{ReefGuideAPI.CriteriaBounds{Function}}}",href:"#ReefGuideAPI.generate_criteria_mask!-Tuple{String, Rasters.RasterStack, DataFrames.DataFrame, Vector{ReefGuideAPI.CriteriaBounds{Function}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.generate_criteria_mask!")],-1)),s[49]||(s[49]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[50]||(s[50]=n('
julia
generate_criteria_mask!(fn::String, rst_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})

Generate mask file for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zero values indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • fn : File to write geotiff to

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

Returns

Nothing

source

',9))]),i("details",R,[i("summary",null,[s[51]||(s[51]=i("a",{id:"ReefGuideAPI.get_points-Tuple{Any}",href:"#ReefGuideAPI.get_points-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.get_points")],-1)),s[52]||(s[52]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[53]||(s[53]=n('
julia
get_points(geom)

Helper method to retrieve points for a geometry.

source

',3))]),i("details",T,[i("summary",null,[s[54]||(s[54]=i("a",{id:"ReefGuideAPI.identify_potential_sites_edges-Tuple{DataFrames.DataFrame, DataFrames.DataFrame, Float64, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Vector{Vector{GeometryBasics.Line{2, Float64}}}, String}",href:"#ReefGuideAPI.identify_potential_sites_edges-Tuple{DataFrames.DataFrame, DataFrames.DataFrame, Float64, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Vector{Vector{GeometryBasics.Line{2, Float64}}}, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_potential_sites_edges")],-1)),s[55]||(s[55]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[56]||(s[56]=n(`
julia
identify_potential_sites_edges(
+)::Raster

Apply a mask to exclude pixels that are outside the indicated distance buffer(s).

target_rast and the dist_buffer should be in the same CRS (e.g., EPSG:7844 / GDA2020).

Arguments

  • target_rast : Raster of suitable pixels (Bool) to filter pixels from.

  • dist_buffer : Buffer geometry to use as the mask.

Returns

  • Masked boolean raster indicating pixels that are within the target distance.

source

`,8))]),i("details",A,[i("summary",null,[s[36]||(s[36]=i("a",{id:"ReefGuideAPI.filter_far_polygons-Tuple{DataFrames.DataFrame, GeometryBasics.Point, Float64, Union{Float64, Int64}}",href:"#ReefGuideAPI.filter_far_polygons-Tuple{DataFrames.DataFrame, GeometryBasics.Point, Float64, Union{Float64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_far_polygons")],-1)),s[37]||(s[37]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[38]||(s[38]=n('
julia
filter_far_polygons(gdf::DataFrame, pixel::GIWrap.Point, lat::Float64, dist::Union{Int64,Float64})::BitVector

Filter out reefs that are > dist (meters) from the target pixel (currently dist is hardcoded in initial_search_rotation()).

source

',3))]),i("details",_,[i("summary",null,[s[39]||(s[39]=i("a",{id:"ReefGuideAPI.filter_sites-Tuple{DataFrames.DataFrame}",href:"#ReefGuideAPI.filter_sites-Tuple{DataFrames.DataFrame}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_sites")],-1)),s[40]||(s[40]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[41]||(s[41]=n('
julia
filter_sites(res_df::DataFrame)::DataFrame

Filter out sites where the qc_flag indicates a suitabiltiy < surr_threshold in searching. Where site polygons are overlapping, keep only the highest scoring site polygon.

Arguments

  • res_df : Results DataFrame containing potential site polygons (output from identify_potential_sites() or identify_potential_sites_edges()).

Returns

DataFrame containing only the highest scoring sites where site polygons intersect, and containing only sites with scores greater than the surr_threshold specified in identify_potential_sites_edges() (default=0.33).

source

',7))]),i("details",j,[i("summary",null,[s[42]||(s[42]=i("a",{id:"ReefGuideAPI.find_horizontal-Tuple{GeoInterface.Wrappers.Polygon}",href:"#ReefGuideAPI.find_horizontal-Tuple{GeoInterface.Wrappers.Polygon}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.find_horizontal")],-1)),s[43]||(s[43]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[44]||(s[44]=n('
julia
find_horizontal(geom::GI.Wrappers.Polygon)::Vector{Tuple{Float64,Float64}, Tuple{Float64,Float64}}

Find a horizontal line if one exists within a geometry.

Returns

Vector containing tuples of coordinates for a horizontal line found within geom.

source

',5))]),i("details",I,[i("summary",null,[s[45]||(s[45]=i("a",{id:"ReefGuideAPI.from_zero-Tuple{Vector{Tuple{Float64, Float64}}}",href:"#ReefGuideAPI.from_zero-Tuple{Vector{Tuple{Float64, Float64}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.from_zero")],-1)),s[46]||(s[46]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[47]||(s[47]=n('
julia
from_zero(v::Vector{Tuple{Float64,Float64}})::Vector{Tuple{Float64, Float64}}

Translates Vector of points v to begin from (0, 0), retaining direction and length.

Argument

  • v : Vector of point coordinates (Tuple{Float64, Float64}).

source

',5))]),i("details",R,[i("summary",null,[s[48]||(s[48]=i("a",{id:"ReefGuideAPI.generate_criteria_mask!-Tuple{String, Rasters.RasterStack, DataFrames.DataFrame, Vector{ReefGuideAPI.CriteriaBounds{Function}}}",href:"#ReefGuideAPI.generate_criteria_mask!-Tuple{String, Rasters.RasterStack, DataFrames.DataFrame, Vector{ReefGuideAPI.CriteriaBounds{Function}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.generate_criteria_mask!")],-1)),s[49]||(s[49]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[50]||(s[50]=n('
julia
generate_criteria_mask!(fn::String, rst_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})

Generate mask file for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • fn : File to write geotiff to

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

Returns

Nothing

source

',9))]),i("details",D,[i("summary",null,[s[51]||(s[51]=i("a",{id:"ReefGuideAPI.get_points-Tuple{Any}",href:"#ReefGuideAPI.get_points-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.get_points")],-1)),s[52]||(s[52]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[53]||(s[53]=n('
julia
get_points(geom)

Helper method to retrieve points for a geometry.

source

',3))]),i("details",T,[i("summary",null,[s[54]||(s[54]=i("a",{id:"ReefGuideAPI.identify_potential_sites_edges-Tuple{DataFrames.DataFrame, DataFrames.DataFrame, Float64, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Vector{Vector{GeometryBasics.Line{2, Float64}}}, String}",href:"#ReefGuideAPI.identify_potential_sites_edges-Tuple{DataFrames.DataFrame, DataFrames.DataFrame, Float64, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Vector{Vector{GeometryBasics.Line{2, Float64}}}, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_potential_sites_edges")],-1)),s[55]||(s[55]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[56]||(s[56]=n(`
julia
identify_potential_sites_edges(
     df::DataFrame,
     search_pixels::DataFrame,
     res::Float64,
@@ -35,7 +35,7 @@ import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o as h}from"./chunks/fr
     degree_step::Float64=15.0,
     n_rot_p_side::Int64=2,
     surr_threshold::Float64=0.33
-)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon in meters. A buffer of the raster files' resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters. Method is currently opperating for CRS in degrees units.

Arguments

  • df : DataFrame containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat columns for each pixel that is intended for analysis.

  • res : Resolution of the original raster pixels. Can by found via abs(step(dims(raster, X))).

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box (in meters).

  • y_dist : Length of vertical side of search box (in meters).

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • reef_lines : Vector containing reef outline segments created from polygons in gdf.geometry (Must be separate object to gdf rather than column).

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_p_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

  • surr_threshold : Theshold used to skip searching where the proportion of suitable pixels is too low.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

`,7))]),i("details",v,[i("summary",null,[s[57]||(s[57]=i("a",{id:"ReefGuideAPI.identify_potential_sites_edges-Tuple{Rasters.RasterStack, DataFrames.DataFrame, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, String, Vector{Vector{GeometryBasics.Line{2, Float64}}}}",href:"#ReefGuideAPI.identify_potential_sites_edges-Tuple{Rasters.RasterStack, DataFrames.DataFrame, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, String, Vector{Vector{GeometryBasics.Line{2, Float64}}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_potential_sites_edges")],-1)),s[58]||(s[58]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[59]||(s[59]=n(`
julia
identify_potential_sites_edges(
+)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon in meters. A buffer of the raster files' resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters. Method is currently opperating for CRS in degrees units.

Arguments

  • df : DataFrame containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat columns for each pixel that is intended for analysis.

  • res : Resolution of the original raster pixels. Can by found via abs(step(dims(raster, X))).

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box (in meters).

  • y_dist : Length of vertical side of search box (in meters).

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • reef_lines : Vector containing reef outline segments created from polygons in gdf.geometry (Must be separate object to gdf rather than column).

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_p_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

  • surr_threshold : Theshold used to skip searching where the proportion of suitable pixels is too low.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

`,7))]),i("details",v,[i("summary",null,[s[57]||(s[57]=i("a",{id:"ReefGuideAPI.identify_potential_sites_edges-Tuple{Rasters.RasterStack, DataFrames.DataFrame, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, String, Vector{Vector{GeometryBasics.Line{2, Float64}}}}",href:"#ReefGuideAPI.identify_potential_sites_edges-Tuple{Rasters.RasterStack, DataFrames.DataFrame, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, String, Vector{Vector{GeometryBasics.Line{2, Float64}}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_potential_sites_edges")],-1)),s[58]||(s[58]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[59]||(s[59]=n(`
julia
identify_potential_sites_edges(
     rst_stack::RasterStack,
     search_pixels::DataFrame,
     gdf::DataFrame,
@@ -46,24 +46,28 @@ import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o as h}from"./chunks/fr
     reef_lines::Vector{Vector{GeometryBasics.Line{2,Float64}}};
     degree_step::Float64=15.0,
     n_rot_per_side::Int64=2
-)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon. A buffer of rst_stack resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters.

Arguments

  • rst_stack : RasterStack containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat values for each pixel intended for

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box.

  • y_dist : Length of vertical side of search box.

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • reef_lines : Vector containing reef outline segments for each reef in gdf.geometry (Must be separate object to gdf rather than a column).

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_per_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

`,7))]),i("details",B,[i("summary",null,[s[60]||(s[60]=i("a",{id:"ReefGuideAPI.identify_search_pixels-Tuple{Rasters.Raster, Any}",href:"#ReefGuideAPI.identify_search_pixels-Tuple{Rasters.Raster, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_search_pixels")],-1)),s[61]||(s[61]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[62]||(s[62]=n('
julia
identify_search_pixels(input_raster::Raster, criteria_function)::DataFrame

Identifies all pixels in an input raster that return true for the function criteria_function.

Arguments

  • input_raster : Raster containing pixels for the target region.

  • criteria_function : Function that returns a boolean value for each pixel in input_raster. Pixels that return true will be targetted in analysis.

Returns

DataFrame containing indices, lon and lat for each pixel that is intended for further analysis.

source

',7))]),i("details",G,[i("summary",null,[s[63]||(s[63]=i("a",{id:"ReefGuideAPI.initial_search_box-Tuple{Any, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Float64}",href:"#ReefGuideAPI.initial_search_box-Tuple{Any, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Float64}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.initial_search_box")],-1)),s[64]||(s[64]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[65]||(s[65]=n(`
julia
initial_search_box(
+)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon. A buffer of rst_stack resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters.

Arguments

  • rst_stack : RasterStack containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat values for each pixel intended for

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box.

  • y_dist : Length of vertical side of search box.

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • reef_lines : Vector containing reef outline segments for each reef in gdf.geometry (Must be separate object to gdf rather than a column).

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_per_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

`,7))]),i("details",B,[i("summary",null,[s[60]||(s[60]=i("a",{id:"ReefGuideAPI.identify_search_pixels-Tuple{Rasters.Raster, Any}",href:"#ReefGuideAPI.identify_search_pixels-Tuple{Rasters.Raster, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_search_pixels")],-1)),s[61]||(s[61]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[62]||(s[62]=n('
julia
identify_search_pixels(input_raster::Raster, criteria_function)::DataFrame

Identifies all pixels in an input raster that return true for the function criteria_function.

Arguments

  • input_raster : Raster containing pixels for the target region.

  • criteria_function : Function that returns a boolean value for each pixel in input_raster. Pixels that return true will be targetted in analysis.

Returns

DataFrame containing indices, lon and lat for each pixel that is intended for further analysis.

source

',7))]),i("details",G,[i("summary",null,[s[63]||(s[63]=i("a",{id:"ReefGuideAPI.initial_search_box-Tuple{Any, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Float64}",href:"#ReefGuideAPI.initial_search_box-Tuple{Any, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Float64}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.initial_search_box")],-1)),s[64]||(s[64]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[65]||(s[65]=n(`
julia
initial_search_box(
     (lon::Float64, lat::Float64),
     x_dist::Union{Int64, Float64},
     y_dist::Union{Int64, Float64},
     target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat,
     res::Float64
-)::GI.Wrappers.Polygon

Create an initial search box that is centered around the point (lon, lat) in target_crs, and is buffered by res distance.

Arguments

  • (lon, lat) : Longitude and latitude coordinates of the center target pixel.

  • x_dist : x (longitude) dimension length of initial search box.

  • y_dist : y (latitude) dimension length of initial search box.

  • target_crs : Target CRS of box to match input data types.

  • res : Buffer distance (resolution of input raster search data).

Returns

Initial search box geometry.

source

`,7))]),i("details",x,[i("summary",null,[s[66]||(s[66]=i("a",{id:"ReefGuideAPI.initial_search_rotation-Tuple{GeometryBasics.Point{2, Float64}, GeoInterface.Wrappers.Polygon, DataFrames.DataFrame, Vector{Vector{GeometryBasics.Line{2, Float64}}}}",href:"#ReefGuideAPI.initial_search_rotation-Tuple{GeometryBasics.Point{2, Float64}, GeoInterface.Wrappers.Polygon, DataFrames.DataFrame, Vector{Vector{GeometryBasics.Line{2, Float64}}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.initial_search_rotation")],-1)),s[67]||(s[67]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[68]||(s[68]=n(`
julia
initial_search_rotation(
+)::GI.Wrappers.Polygon

Create an initial search box that is centered around the point (lon, lat) in target_crs, and is buffered by res distance.

Arguments

  • (lon, lat) : Longitude and latitude coordinates of the center target pixel.

  • x_dist : x (longitude) dimension length of initial search box.

  • y_dist : y (latitude) dimension length of initial search box.

  • target_crs : Target CRS of box to match input data types.

  • res : Buffer distance (resolution of input raster search data).

Returns

Initial search box geometry.

source

`,7))]),i("details",x,[i("summary",null,[s[66]||(s[66]=i("a",{id:"ReefGuideAPI.initial_search_rotation-Tuple{GeometryBasics.Point{2, Float64}, GeoInterface.Wrappers.Polygon, DataFrames.DataFrame, Vector{Vector{GeometryBasics.Line{2, Float64}}}}",href:"#ReefGuideAPI.initial_search_rotation-Tuple{GeometryBasics.Point{2, Float64}, GeoInterface.Wrappers.Polygon, DataFrames.DataFrame, Vector{Vector{GeometryBasics.Line{2, Float64}}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.initial_search_rotation")],-1)),s[67]||(s[67]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[68]||(s[68]=n(`
julia
initial_search_rotation(
     pixel::GeometryBasics.Point{2, Float64},
     geom_buff::GI.Wrappers.Polygon,
     gdf::DataFrame,
     reef_outlines::Vector{Vector{GeometryBasics.Line{2, Float64}}};
     search_buffer::Union{Int64,Float64}=20000.0
-)::Float64

Identifies the closest edge to the target pixel/'geom_buff and returns the initial rotation angle required to match the edge line.

Arguments

  • pixel : Target point at the center of the search polygon.

  • geom_buff : Initial search box with zero rotation.

  • gdf : GeoDataFrame containing a geometry column used for pixel masking.

  • reef_outlines : Line segments for the outlines of each reef in gdf.

  • search_buffer : Distance to search from pixel to find closest reef.

source

`,5))]),i("details",P,[i("summary",null,[s[69]||(s[69]=i("a",{id:"ReefGuideAPI.line_angle-Union{Tuple{T}, Tuple{T, T}} where T<:Vector{Tuple{Float64, Float64}}",href:"#ReefGuideAPI.line_angle-Union{Tuple{T}, Tuple{T, T}} where T<:Vector{Tuple{Float64, Float64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.line_angle")],-1)),s[70]||(s[70]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[71]||(s[71]=n(`
julia
line_angle(a::T, b::T)::Float64 where {T <: Vector{Tuple{Float64,Float64}}}

Calculate the angle between two lines.

Arguments

  • a : Line between point coordinates.

  • b : Line between point coordinates.

Returns

Angle between the two lines.

Examples

julia
line_angle([(0.0,5.0), (0.0,0.0)], from_zero(edge_line))
-line_angle([(0.0,5.0), (0.0,0.0)], [(1.0, 4.0), (7.0, 8.0)])

source

`,9))]),i("details",M,[i("summary",null,[s[72]||(s[72]=i("a",{id:"ReefGuideAPI.make_threshold_mask-Tuple{Any, Symbol, Any}",href:"#ReefGuideAPI.make_threshold_mask-Tuple{Any, Symbol, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.make_threshold_mask")],-1)),s[73]||(s[73]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[74]||(s[74]=n('
julia
make_threshold_mask(reg::String, rtype::Symbol, crit_map)

Generate mask for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zero values indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

  • lons : Longitudinal extent (min and max)

  • lats : Latitudinal extent (min and max)

Returns

True/false mask indicating locations within desired thresholds.

source

',9))]),i("details",S,[i("summary",null,[s[75]||(s[75]=i("a",{id:"ReefGuideAPI.masked_nearest-Tuple{Rasters.Raster, Int64, Int64, Int64, Tuple{Int64, Int64}}",href:"#ReefGuideAPI.masked_nearest-Tuple{Rasters.Raster, Int64, Int64, Int64, Tuple{Int64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.masked_nearest")],-1)),s[76]||(s[76]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[77]||(s[77]=n('
julia
masked_nearest(rst::Raster, z::Int, x::Int, y::Int, tile_size::Tuple{Int,Int}, orig_rst_size::Tuple{Int,Int})::Matrix

Resample a raster using nearest neighbor interpolation when the tile includes area outside where data exists (e.g., viewing the globe where the data may appear in a small corner of the tile). This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • z: Tile zoom level requested.

  • x: x coordinate for requested tile.

  • y: y coordinate for the requested tile.

  • tile_size: The desired dimensions of the tile (lat, long).

Returns

Matrix with the resampled data.

source

',7))]),i("details",L,[i("summary",null,[s[78]||(s[78]=i("a",{id:"ReefGuideAPI.meters_to_degrees-Tuple{Any, Any}",href:"#ReefGuideAPI.meters_to_degrees-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.meters_to_degrees")],-1)),s[79]||(s[79]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[80]||(s[80]=n('
julia
meters_to_degrees(x, lat)

Convert meters to degrees at target latitude.

source

',3))]),i("details",w,[i("summary",null,[s[81]||(s[81]=i("a",{id:"ReefGuideAPI.move_geom-Tuple{Any, Tuple}",href:"#ReefGuideAPI.move_geom-Tuple{Any, Tuple}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.move_geom")],-1)),s[82]||(s[82]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[83]||(s[83]=n('
julia
move_geom(geom, new_centroid::Tuple)

Move a geom to a new centroid.

Arguments

  • geom : geometry to move

  • new_centroid : Centroid given in lon, lat

source

',5))]),i("details",V,[i("summary",null,[s[84]||(s[84]=i("a",{id:"ReefGuideAPI.n_gdal_threads-Tuple{Dict}",href:"#ReefGuideAPI.n_gdal_threads-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.n_gdal_threads")],-1)),s[85]||(s[85]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[86]||(s[86]=n('
julia
n_gdal_threads(config::Dict)::String

Retrieve the configured number of threads to use when writing COGs with GDAL.

source

',3))]),i("details",O,[i("summary",null,[s[87]||(s[87]=i("a",{id:"ReefGuideAPI.nearest-Tuple{Rasters.Raster, Tuple{Int64, Int64}}",href:"#ReefGuideAPI.nearest-Tuple{Rasters.Raster, Tuple{Int64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.nearest")],-1)),s[88]||(s[88]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[89]||(s[89]=n(`
julia
nearest(rst::Raster, tile_size::Tuple{Int, Int})::Matrix

Resample a raster to a tile size using nearest neighbor interpolation. This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • tile_size: The desired dimensions of the tile (lat, long).

Returns

Matrix with the resampled data.

Examples

julia
large_raster = Raster(rand(UInt8, 14756, 14838); dims=(X(1:1:14756), Y(1:1:14838)))
-small_matrix = nearest(large_raster, (256, 256))

source

`,9))]),i("details",U,[i("summary",null,[s[90]||(s[90]=i("a",{id:"ReefGuideAPI.output_geojson-Tuple{DataFrames.DataFrame, String, String}",href:"#ReefGuideAPI.output_geojson-Tuple{DataFrames.DataFrame, String, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.output_geojson")],-1)),s[91]||(s[91]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[92]||(s[92]=n(`
julia
output_geojson(
+)::Float64

Identifies the closest edge to the target pixel/'geom_buff and returns the initial rotation angle required to match the edge line.

Arguments

  • pixel : Target point at the center of the search polygon.

  • geom_buff : Initial search box with zero rotation.

  • gdf : GeoDataFrame containing a geometry column used for pixel masking.

  • reef_outlines : Line segments for the outlines of each reef in gdf.

  • search_buffer : Distance to search from pixel to find closest reef.

source

`,5))]),i("details",P,[i("summary",null,[s[69]||(s[69]=i("a",{id:"ReefGuideAPI.line_angle-Union{Tuple{T}, Tuple{T, T}} where T<:Vector{Tuple{Float64, Float64}}",href:"#ReefGuideAPI.line_angle-Union{Tuple{T}, Tuple{T, T}} where T<:Vector{Tuple{Float64, Float64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.line_angle")],-1)),s[70]||(s[70]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[71]||(s[71]=n(`
julia
line_angle(a::T, b::T)::Float64 where {T <: Vector{Tuple{Float64,Float64}}}

Calculate the angle between two lines.

Arguments

  • a : Line between point coordinates.

  • b : Line between point coordinates.

Returns

Angle between the two lines.

Examples

julia
line_angle([(0.0,5.0), (0.0,0.0)], from_zero(edge_line))
+line_angle([(0.0,5.0), (0.0,0.0)], [(1.0, 4.0), (7.0, 8.0)])

source

`,9))]),i("details",M,[i("summary",null,[s[72]||(s[72]=i("a",{id:"ReefGuideAPI.make_threshold_mask-Tuple{Any, Symbol, Any}",href:"#ReefGuideAPI.make_threshold_mask-Tuple{Any, Symbol, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.make_threshold_mask")],-1)),s[73]||(s[73]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[74]||(s[74]=n('
julia
make_threshold_mask(reg::String, rtype::Symbol, crit_map)

Generate mask for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

  • lons : Longitudinal extent (min and max)

  • lats : Latitudinal extent (min and max)

Returns

True/false mask indicating locations within desired thresholds.

source

',9))]),i("details",S,[i("summary",null,[s[75]||(s[75]=i("a",{id:"ReefGuideAPI.masked_nearest-Tuple{Rasters.Raster, Int64, Int64, Int64, Tuple{Int64, Int64}}",href:"#ReefGuideAPI.masked_nearest-Tuple{Rasters.Raster, Int64, Int64, Int64, Tuple{Int64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.masked_nearest")],-1)),s[76]||(s[76]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[77]||(s[77]=n('
julia
masked_nearest(rst::Raster, z::Int, x::Int, y::Int, tile_size::Tuple{Int,Int}, orig_rst_size::Tuple{Int,Int})::Matrix

Resample a raster using nearest neighbor interpolation when the tile includes area outside where data exists (e.g., viewing the globe where the data may appear in a small corner of the tile). This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • z: Tile zoom level requested.

  • x: x coordinate for requested tile.

  • y: y coordinate for the requested tile.

  • tile_size: The desired dimensions of the tile (lat, long). Note reversed order of coordinates.

Returns

Matrix with the resampled data.

source

',7))]),i("details",L,[i("summary",null,[s[78]||(s[78]=i("a",{id:"ReefGuideAPI.meters_to_degrees-Tuple{Any, Any}",href:"#ReefGuideAPI.meters_to_degrees-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.meters_to_degrees")],-1)),s[79]||(s[79]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[80]||(s[80]=n('
julia
meters_to_degrees(x, lat)

Convert meters to degrees at target latitude.

source

',3))]),i("details",w,[i("summary",null,[s[81]||(s[81]=i("a",{id:"ReefGuideAPI.move_geom-Tuple{Any, Tuple}",href:"#ReefGuideAPI.move_geom-Tuple{Any, Tuple}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.move_geom")],-1)),s[82]||(s[82]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[83]||(s[83]=n('
julia
move_geom(geom, new_centroid::Tuple)

Move a geom to a new centroid.

Arguments

  • geom : geometry to move

  • new_centroid : Centroid given in (lon, lat).

source

',5))]),i("details",V,[i("summary",null,[s[84]||(s[84]=i("a",{id:"ReefGuideAPI.n_gdal_threads-Tuple{Dict}",href:"#ReefGuideAPI.n_gdal_threads-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.n_gdal_threads")],-1)),s[85]||(s[85]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[86]||(s[86]=n('
julia
n_gdal_threads(config::Dict)::String

Retrieve the configured number of threads to use when writing COGs with GDAL.

source

',3))]),i("details",O,[i("summary",null,[s[87]||(s[87]=i("a",{id:"ReefGuideAPI.nearest-Tuple{Rasters.Raster, Tuple{Int64, Int64}}",href:"#ReefGuideAPI.nearest-Tuple{Rasters.Raster, Tuple{Int64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.nearest")],-1)),s[88]||(s[88]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[89]||(s[89]=n(`
julia
nearest(rst::Raster, tile_size::Tuple{Int, Int})::Matrix

Resample a raster to a tile size using nearest neighbor interpolation. This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • tile_size: The desired dimensions of the tile (lat, long).

Returns

Matrix with the resampled data.

Examples

julia
large_raster = Raster(rand(UInt8, 14756, 14838); dims=(X(1:1:14756), Y(1:1:14838)))
+small_matrix = nearest(large_raster, (256, 256))

source

`,9))]),i("details",U,[i("summary",null,[s[90]||(s[90]=i("a",{id:"ReefGuideAPI.output_geojson-Tuple{DataFrames.DataFrame, String, String}",href:"#ReefGuideAPI.output_geojson-Tuple{DataFrames.DataFrame, String, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.output_geojson")],-1)),s[91]||(s[91]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[92]||(s[92]=n(`
julia
output_geojson(
     df::DataFrame,
     region::String,
     output_dir::String
-)::Nothing

Writes out GeoJSON file to a target directory. Output file will be located at location: "output_dir/output_sites_region.geojson"

Arguments

  • df : DataFrame intended for writing to geojson file.

  • region : Region name for labelling output file.

  • output_dir : Directory to write geojson file to.

source

`,5))]),i("details",q,[i("summary",null,[s[93]||(s[93]=i("a",{id:"ReefGuideAPI.parse_criteria_query-Tuple{Dict}",href:"#ReefGuideAPI.parse_criteria_query-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.parse_criteria_query")],-1)),s[94]||(s[94]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[95]||(s[95]=n('
julia
parse_criteria_query(qp)::Tuple

Parse criteria values from request query.

Queries should take the form of: Depth=-9.0:0.0&Slope=0.0:40.0&Rugosity=0.0:0.0

Arguments

  • qp : Parsed query string from request.

Returns

Tuple of criteria names, lower bounds, upper bounds

source

',8))]),i("details",z,[i("summary",null,[s[96]||(s[96]=i("a",{id:"ReefGuideAPI.polygon_to_lines-Union{Tuple{Union{GeoInterface.Wrappers.MultiPolygon, Vector{T}, T}}, Tuple{T}} where T<:GeoInterface.Wrappers.Polygon",href:"#ReefGuideAPI.polygon_to_lines-Union{Tuple{Union{GeoInterface.Wrappers.MultiPolygon, Vector{T}, T}}, Tuple{T}} where T<:GeoInterface.Wrappers.Polygon"},[i("span",{class:"jlbinding"},"ReefGuideAPI.polygon_to_lines")],-1)),s[97]||(s[97]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[98]||(s[98]=n(`
julia
polygon_to_lines(
+)::Nothing

Writes out GeoJSON file to a target directory. Output file will be located at location: "output_dir/output_sites_region.geojson"

Arguments

  • df : DataFrame intended for writing to geojson file.

  • region : Region name for labelling output file.

  • output_dir : Directory to write geojson file to.

source

`,5))]),i("details",q,[i("summary",null,[s[93]||(s[93]=i("a",{id:"ReefGuideAPI.parse_criteria_query-Tuple{Dict}",href:"#ReefGuideAPI.parse_criteria_query-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.parse_criteria_query")],-1)),s[94]||(s[94]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[95]||(s[95]=n('
julia
parse_criteria_query(qp)::Tuple

Parse criteria values from request query.

Queries should take the form of: Depth=-9.0:0.0&Slope=0.0:40.0&Rugosity=0.0:0.0

Arguments

  • qp : Parsed query string from request.

Returns

Tuple of criteria names, lower bounds, upper bounds

source

',8))]),i("details",z,[i("summary",null,[s[96]||(s[96]=i("a",{id:"ReefGuideAPI.polygon_to_lines-Union{Tuple{Union{GeoInterface.Wrappers.MultiPolygon, Vector{T}, T}}, Tuple{T}} where T<:GeoInterface.Wrappers.Polygon",href:"#ReefGuideAPI.polygon_to_lines-Union{Tuple{Union{GeoInterface.Wrappers.MultiPolygon, Vector{T}, T}}, Tuple{T}} where T<:GeoInterface.Wrappers.Polygon"},[i("span",{class:"jlbinding"},"ReefGuideAPI.polygon_to_lines")],-1)),s[97]||(s[97]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[98]||(s[98]=n(`
julia
polygon_to_lines(
     polygon::Union{Vector{T},T,GIWrap.MultiPolygon}
-) where {T<:GIWrap.Polygon}

Extract the individual lines between vertices that make up the outline of a polygon.

source

`,3))]),i("details",W,[i("summary",null,[s[99]||(s[99]=i("a",{id:"ReefGuideAPI.port_buffer_mask-Tuple{DataFrames.DataFrame, Float64}",href:"#ReefGuideAPI.port_buffer_mask-Tuple{DataFrames.DataFrame, Float64}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.port_buffer_mask")],-1)),s[100]||(s[100]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[101]||(s[101]=n('
julia
port_buffer_mask(gdf::DataFrame, dist::Float64; unit::String="NM")

Create a masking buffer around indicated port locations.

Arguments

  • gdf : GeoDataFrame of port locations (given as long/lat points)

  • dist : distance from port in degrees (deg), kilometers (km), or nautical miles (NM; default)

  • unit : unit dist is in

source

',5))]),i("details",N,[i("summary",null,[s[102]||(s[102]=i("a",{id:"ReefGuideAPI.remove_rugosity-NTuple{4, Any}",href:"#ReefGuideAPI.remove_rugosity-NTuple{4, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.remove_rugosity")],-1)),s[103]||(s[103]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[104]||(s[104]=n('
julia
remove_rugosity(reg, criteria, lbs, ubs)

Remove rugosity layer from consideration if region is not Townsville. Rugosity data currently only exists for the Townsville region.

source

',3))]),i("details",$,[i("summary",null,[s[105]||(s[105]=i("a",{id:"ReefGuideAPI.rotate_polygon-Tuple{Any, Any, Any}",href:"#ReefGuideAPI.rotate_polygon-Tuple{Any, Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.rotate_polygon")],-1)),s[106]||(s[106]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[107]||(s[107]=i("p",null,"Rotate the polygon by the given angle about its center.",-1)),s[108]||(s[108]=i("p",null,[i("a",{href:"https://github.com/open-AIMS/ReefGuideAPI.jl/blob/c49be35f3c12a0853b16d29abcc7310085bc17c7/src/site_assessment/geom_ops.jl#L47",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",J,[i("summary",null,[s[109]||(s[109]=i("a",{id:"ReefGuideAPI.setup_regional_data-Tuple{Dict}",href:"#ReefGuideAPI.setup_regional_data-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.setup_regional_data")],-1)),s[110]||(s[110]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[111]||(s[111]=n('
julia
setup_regional_data(config::Dict)

Load regional data to act as an in-memory cache.

Arguments

  • config : Configuration settings, typically loaded from a TOML file.

  • reef_data_path : Path to pre-prepared reef data

Returns

OrderedDict of RegionalCriteria for each region.

source

',7))]),i("details",X,[i("summary",null,[s[112]||(s[112]=i("a",{id:"ReefGuideAPI.tile_size-Tuple{Dict}",href:"#ReefGuideAPI.tile_size-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.tile_size")],-1)),s[113]||(s[113]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[114]||(s[114]=n('
julia
tile_size(config::Dict)::Tuple

Retrieve the configured size of map tiles in pixels (width and height / lon and lat).

source

',3))]),i("details",Z,[i("summary",null,[s[115]||(s[115]=i("a",{id:"ReefGuideAPI.valid_lonlat_inds-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T",href:"#ReefGuideAPI.valid_lonlat_inds-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.valid_lonlat_inds")],-1)),s[116]||(s[116]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[117]||(s[117]=n('
julia
valid_lonlat_inds(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Retrieve the indices of valid data for a region.

Arguments

  • data :

  • criteria :

  • lb :

  • ub :

Returns

Tuple{Vector{Int64}, Vector{Int64}}, of lon and lat indices.

source

',7))]),i("details",H,[i("summary",null,[s[118]||(s[118]=i("a",{id:"ReefGuideAPI.valid_pixel_positions-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T",href:"#ReefGuideAPI.valid_pixel_positions-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.valid_pixel_positions")],-1)),s[119]||(s[119]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[120]||(s[120]=n('
julia
valid_pixel_positions(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Obtain the pixel positions of valid data.

Intended for use in something like: https://developers.arcgis.com/javascript/latest/sample-code/layers-imagery-pixelvalues/

Arguments

  • data :

  • criteria :

  • lb : lower bound

  • ub : upper bound

source

',6))]),i("details",Q,[i("summary",null,[s[121]||(s[121]=i("a",{id:"ReefGuideAPI.warmup_cache-Tuple{String}",href:"#ReefGuideAPI.warmup_cache-Tuple{String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.warmup_cache")],-1)),s[122]||(s[122]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[123]||(s[123]=n('
julia
warmup_cache(config_path::String)

Invokes warm up of regional data cache to reduce later spin up times.

source

',3))]),i("details",Y,[i("summary",null,[s[124]||(s[124]=i("a",{id:"ReefGuideAPI.within_thresholds-Union{Tuple{T}, Tuple{Val, Val, Rasters.Raster, T, T}} where T",href:"#ReefGuideAPI.within_thresholds-Union{Tuple{T}, Tuple{Val, Val, Rasters.Raster, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.within_thresholds")],-1)),s[125]||(s[125]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[126]||(s[126]=n('
julia
within_thresholds(ctype::Val, data::Raster, lb::T, ub::T) where {T}

Apply in-bound constraints.

Notes

Why is this a simple one line function? Because we want to be able to cache results for each constraint type.

source

',5))])])}const ps=l(o,[["render",K]]);export{ls as __pageData,ps as default}; +) where {T<:GIWrap.Polygon}

Extract the individual lines between vertices that make up the outline of a polygon.

Returns

Vector of GeometryBasics.Line{2, Float64} with one line for each adjacent vertex pair in polygon.

source

`,5))]),i("details",W,[i("summary",null,[s[99]||(s[99]=i("a",{id:"ReefGuideAPI.port_buffer_mask-Tuple{DataFrames.DataFrame, Float64}",href:"#ReefGuideAPI.port_buffer_mask-Tuple{DataFrames.DataFrame, Float64}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.port_buffer_mask")],-1)),s[100]||(s[100]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[101]||(s[101]=n('
julia
port_buffer_mask(gdf::DataFrame, dist::Float64; unit::String="NM")

Create a masking buffer around indicated port locations.

Arguments

source

',5))]),i("details",N,[i("summary",null,[s[102]||(s[102]=i("a",{id:"ReefGuideAPI.remove_rugosity-NTuple{4, Any}",href:"#ReefGuideAPI.remove_rugosity-NTuple{4, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.remove_rugosity")],-1)),s[103]||(s[103]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[104]||(s[104]=n('
julia
remove_rugosity(reg, criteria, lbs, ubs)

Remove rugosity layer from consideration if region is not Townsville. Rugosity data currently only exists for the Townsville region.

source

',3))]),i("details",H,[i("summary",null,[s[105]||(s[105]=i("a",{id:"ReefGuideAPI.rotate_geom-Tuple{Any, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}",href:"#ReefGuideAPI.rotate_geom-Tuple{Any, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.rotate_geom")],-1)),s[106]||(s[106]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[107]||(s[107]=n(`
julia
rotate_geom(
+    geom,
+    degrees::Float64,
+    target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat
+)

Rotate target geom by degrees rotation in clockwise direction. target_crs is applied to output geometry.

Returns

Rotated geometry.

source

`,5))]),i("details",$,[i("summary",null,[s[108]||(s[108]=i("a",{id:"ReefGuideAPI.rotate_polygon-Tuple{Any, Any, Any}",href:"#ReefGuideAPI.rotate_polygon-Tuple{Any, Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.rotate_polygon")],-1)),s[109]||(s[109]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[110]||(s[110]=i("p",null,"Rotate the polygon by the given angle about its center.",-1)),s[111]||(s[111]=i("p",null,[i("a",{href:"https://github.com/open-AIMS/ReefGuideAPI.jl/blob/aa4c0921565db4a6bfff4662e5b5e4220d4c4723/src/site_assessment/geom_ops.jl#L47",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",J,[i("summary",null,[s[112]||(s[112]=i("a",{id:"ReefGuideAPI.setup_regional_data-Tuple{Dict}",href:"#ReefGuideAPI.setup_regional_data-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.setup_regional_data")],-1)),s[113]||(s[113]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[114]||(s[114]=n('
julia
setup_regional_data(config::Dict)

Load regional data to act as an in-memory cache.

Arguments

Returns

OrderedDict of RegionalCriteria for each region.

source

',7))]),i("details",Q,[i("summary",null,[s[115]||(s[115]=i("a",{id:"ReefGuideAPI.tile_size-Tuple{Dict}",href:"#ReefGuideAPI.tile_size-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.tile_size")],-1)),s[116]||(s[116]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[117]||(s[117]=n('
julia
tile_size(config::Dict)::Tuple

Retrieve the configured size of map tiles in pixels (width and height / lon and lat).

source

',3))]),i("details",X,[i("summary",null,[s[118]||(s[118]=i("a",{id:"ReefGuideAPI.valid_lonlat_inds-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T",href:"#ReefGuideAPI.valid_lonlat_inds-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.valid_lonlat_inds")],-1)),s[119]||(s[119]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[120]||(s[120]=n('
julia
valid_lonlat_inds(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Retrieve the indices of valid data for a region.

Arguments

Returns

Tuple{Vector{Int64}, Vector{Int64}}, of lon and lat indices.

source

',7))]),i("details",Z,[i("summary",null,[s[121]||(s[121]=i("a",{id:"ReefGuideAPI.valid_pixel_positions-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T",href:"#ReefGuideAPI.valid_pixel_positions-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.valid_pixel_positions")],-1)),s[122]||(s[122]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[123]||(s[123]=n('
julia
valid_pixel_positions(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Obtain the pixel positions of valid data.

Intended for use in applications similar to ImageryLayer - client side pixel filter.

Arguments

source

',6))]),i("details",Y,[i("summary",null,[s[124]||(s[124]=i("a",{id:"ReefGuideAPI.warmup_cache-Tuple{String}",href:"#ReefGuideAPI.warmup_cache-Tuple{String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.warmup_cache")],-1)),s[125]||(s[125]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[126]||(s[126]=n('
julia
warmup_cache(config_path::String)

Invokes warm up of regional data cache to reduce later spin up times.

source

',3))]),i("details",K,[i("summary",null,[s[127]||(s[127]=i("a",{id:"ReefGuideAPI.within_thresholds-Union{Tuple{T}, Tuple{Val, Val, Rasters.Raster, T, T}} where T",href:"#ReefGuideAPI.within_thresholds-Union{Tuple{T}, Tuple{Val, Val, Rasters.Raster, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.within_thresholds")],-1)),s[128]||(s[128]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[129]||(s[129]=n('
julia
within_thresholds(ctype::Val, data::Raster, lb::T, ub::T) where {T}

Apply in-bound constraints.

Notes

Why is this a simple one line function? Because we want to be able to cache results for each constraint type.

source

',5))])])}const rs=l(h,[["render",ss]]);export{ps as __pageData,rs as default}; diff --git a/dev/assets/api.md.NYkrqh02.lean.js b/dev/assets/api.md.DehzNRDj.lean.js similarity index 51% rename from dev/assets/api.md.NYkrqh02.lean.js rename to dev/assets/api.md.DehzNRDj.lean.js index deaee5d..96aaa0c 100644 --- a/dev/assets/api.md.NYkrqh02.lean.js +++ b/dev/assets/api.md.DehzNRDj.lean.js @@ -1,6 +1,6 @@ -import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o as h}from"./chunks/framework.BvdfcH24.js";const ls=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),o={name:"api.md"},d={class:"jldocstring custom-block",open:""},k={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""},c={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},E={class:"jldocstring custom-block",open:""},F={class:"jldocstring custom-block",open:""},b={class:"jldocstring custom-block",open:""},f={class:"jldocstring custom-block",open:""},m={class:"jldocstring custom-block",open:""},C={class:"jldocstring custom-block",open:""},A={class:"jldocstring custom-block",open:""},_={class:"jldocstring custom-block",open:""},j={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},R={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},B={class:"jldocstring custom-block",open:""},G={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""},M={class:"jldocstring custom-block",open:""},S={class:"jldocstring custom-block",open:""},L={class:"jldocstring custom-block",open:""},w={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},O={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},z={class:"jldocstring custom-block",open:""},W={class:"jldocstring custom-block",open:""},N={class:"jldocstring custom-block",open:""},$={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},X={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},H={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},Y={class:"jldocstring custom-block",open:""};function K(ss,s,is,es,as,ts){const a=r("Badge");return h(),p("div",null,[s[127]||(s[127]=i("h1",{id:"api",tabindex:"-1"},[e("API "),i("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1)),i("details",d,[i("summary",null,[s[0]||(s[0]=i("a",{id:"ReefGuideAPI._cache_location-Tuple{Dict}",href:"#ReefGuideAPI._cache_location-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._cache_location")],-1)),s[1]||(s[1]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[2]||(s[2]=n('
julia
_cache_location(config::Dict)::String

Retrieve cache location for geotiffs.

source

',3))]),i("details",k,[i("summary",null,[s[3]||(s[3]=i("a",{id:"ReefGuideAPI._lon_lat_to_tile-Tuple{Any, Any, Any}",href:"#ReefGuideAPI._lon_lat_to_tile-Tuple{Any, Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._lon_lat_to_tile")],-1)),s[4]||(s[4]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[5]||(s[5]=n('
julia
_lon_lat_to_tile(zoom, lon, lat)

Identify the corresponding tile coordinates for a given lon/lat.

Returns

x and y tile coordinates

source

',5))]),i("details",g,[i("summary",null,[s[6]||(s[6]=i("a",{id:"ReefGuideAPI._tile_bounds-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64",href:"#ReefGuideAPI._tile_bounds-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64"},[i("span",{class:"jlbinding"},"ReefGuideAPI._tile_bounds")],-1)),s[7]||(s[7]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[8]||(s[8]=n('
julia
_tile_bounds(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat bounds of a requested tile.

Returns

West, East, North South (min lon, max lon, lat max, lat min)

source

',5))]),i("details",c,[i("summary",null,[s[9]||(s[9]=i("a",{id:"ReefGuideAPI._tile_to_lon_lat-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64",href:"#ReefGuideAPI._tile_to_lon_lat-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64"},[i("span",{class:"jlbinding"},"ReefGuideAPI._tile_to_lon_lat")],-1)),s[10]||(s[10]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[11]||(s[11]=n('
julia
_tile_to_lon_lat(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat of top-left corner of a requested tile.

Returns

lon, lat

source

',5))]),i("details",u,[i("summary",null,[s[12]||(s[12]=i("a",{id:"ReefGuideAPI.apply_criteria_thresholds-Tuple{Rasters.RasterStack, DataFrames.DataFrame, Dict}",href:"#ReefGuideAPI.apply_criteria_thresholds-Tuple{Rasters.RasterStack, DataFrames.DataFrame, Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.apply_criteria_thresholds")],-1)),s[13]||(s[13]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[14]||(s[14]=n(`
julia
apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})::Raster
+import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o}from"./chunks/framework.BvdfcH24.js";const ps=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),h={name:"api.md"},d={class:"jldocstring custom-block",open:""},k={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""},c={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},E={class:"jldocstring custom-block",open:""},f={class:"jldocstring custom-block",open:""},F={class:"jldocstring custom-block",open:""},b={class:"jldocstring custom-block",open:""},m={class:"jldocstring custom-block",open:""},C={class:"jldocstring custom-block",open:""},A={class:"jldocstring custom-block",open:""},_={class:"jldocstring custom-block",open:""},j={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},R={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},B={class:"jldocstring custom-block",open:""},G={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""},M={class:"jldocstring custom-block",open:""},S={class:"jldocstring custom-block",open:""},L={class:"jldocstring custom-block",open:""},w={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},O={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},z={class:"jldocstring custom-block",open:""},W={class:"jldocstring custom-block",open:""},N={class:"jldocstring custom-block",open:""},H={class:"jldocstring custom-block",open:""},$={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},X={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},Y={class:"jldocstring custom-block",open:""},K={class:"jldocstring custom-block",open:""};function ss(is,s,es,as,ts,ns){const a=r("Badge");return o(),p("div",null,[s[130]||(s[130]=i("h1",{id:"api",tabindex:"-1"},[e("API "),i("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1)),i("details",d,[i("summary",null,[s[0]||(s[0]=i("a",{id:"ReefGuideAPI._cache_location-Tuple{Dict}",href:"#ReefGuideAPI._cache_location-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._cache_location")],-1)),s[1]||(s[1]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[2]||(s[2]=n('
julia
_cache_location(config::Dict)::String

Retrieve cache location for geotiffs.

source

',3))]),i("details",k,[i("summary",null,[s[3]||(s[3]=i("a",{id:"ReefGuideAPI._lon_lat_to_tile-Tuple{Any, Any, Any}",href:"#ReefGuideAPI._lon_lat_to_tile-Tuple{Any, Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._lon_lat_to_tile")],-1)),s[4]||(s[4]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[5]||(s[5]=n('
julia
_lon_lat_to_tile(zoom, lon, lat)

Identify the corresponding tile coordinates for a given lon/lat.

Returns

x and y tile coordinates

source

',5))]),i("details",g,[i("summary",null,[s[6]||(s[6]=i("a",{id:"ReefGuideAPI._tile_bounds-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64",href:"#ReefGuideAPI._tile_bounds-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64"},[i("span",{class:"jlbinding"},"ReefGuideAPI._tile_bounds")],-1)),s[7]||(s[7]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[8]||(s[8]=n('
julia
_tile_bounds(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat bounds of a requested tile.

Returns

West, East, North South (min lon, max lon, lat max, lat min)

source

',5))]),i("details",c,[i("summary",null,[s[9]||(s[9]=i("a",{id:"ReefGuideAPI._tile_to_lon_lat-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64",href:"#ReefGuideAPI._tile_to_lon_lat-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64"},[i("span",{class:"jlbinding"},"ReefGuideAPI._tile_to_lon_lat")],-1)),s[10]||(s[10]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[11]||(s[11]=n('
julia
_tile_to_lon_lat(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat of top-left corner of a requested tile.

Returns

lon, lat

source

',5))]),i("details",u,[i("summary",null,[s[12]||(s[12]=i("a",{id:"ReefGuideAPI.apply_criteria_thresholds-Tuple{Rasters.RasterStack, DataFrames.DataFrame, Dict}",href:"#ReefGuideAPI.apply_criteria_thresholds-Tuple{Rasters.RasterStack, DataFrames.DataFrame, Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.apply_criteria_thresholds")],-1)),s[13]||(s[13]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[14]||(s[14]=n(`
julia
apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})::Raster
 apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Dict)::Raster
-apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::NamedTuple)::Raster

Apply thresholds for each criteria.

Arguments

  • criteria_stack : RasterStack of criteria data for a given region

  • lookup : Lookup dataframe for the region

  • ruleset : A set of CriteriaBounds, Dictionary or NamedTuple indicating a mapping of criteria names to their lower and upper thresholds.

Returns

BitMatrix indicating locations within desired thresholds

source

`,7))]),i("details",y,[i("summary",null,[s[15]||(s[15]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{DataFrames.DataFrame, GeoInterface.Wrappers.Polygon, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}",href:"#ReefGuideAPI.assess_reef_site-Tuple{DataFrames.DataFrame, GeoInterface.Wrappers.Polygon, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[16]||(s[16]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[17]||(s[17]=n(`
julia
assess_reef_site(
+apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::NamedTuple)::Raster

Apply thresholds for each criteria.

Arguments

  • criteria_stack : RasterStack of criteria data for a given region

  • lookup : Lookup dataframe for the region

  • ruleset : A set of CriteriaBounds, Dictionary or NamedTuple indicating a mapping of criteria names to their lower and upper thresholds.

Returns

BitMatrix indicating locations within desired thresholds

source

`,7))]),i("details",y,[i("summary",null,[s[15]||(s[15]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{DataFrames.DataFrame, GeoInterface.Wrappers.Polygon, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}",href:"#ReefGuideAPI.assess_reef_site-Tuple{DataFrames.DataFrame, GeoInterface.Wrappers.Polygon, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[16]||(s[16]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[17]||(s[17]=n(`
julia
assess_reef_site(
     rel_pix::DataFrame,
     geom::GI.Wrappers.Polygon,
     max_count::Float64,
@@ -9,20 +9,20 @@ import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o as h}from"./chunks/fr
     start_rot::Float64=0.0,
     n_per_side::Int64=2,
     surr_threshold::Float64=0.33
-)::Tuple{Float64,Int64,GI.Wrappers.Polygon,Int64}

Assesses the rotations of a search box geom for their suitability score (calculated as the proportion of pixels that meet all specified criteria thresholds). Search box rotation steps are returned so that the start_rot angle is 0, rotations anti-clockwise are negative and rotations clockwise are positive.

Arguments

  • rel_pix : DataFrame containing the point data for pixels that are within maxmimum user search box dimensions from a pixel.

  • geom : Starting search box for assessment.

  • max_count : The maximum number of pixels that can intersect the search box (used to standardise scores between 0 and 1).

  • target_crs : Coordinate Reference System used for analysis vector and raster data.

  • degree_step : Step to vary the search box rotations.

  • start_rot : Starting angle rotation that aligns the box with the closest reef edge.

  • n_per_side : Number of rotations to perform around the starting search box angle.

  • surr_threshold : Suitability threshold, below which sites are excluded from result sets.

Returns

Returns the highest score, rotation step, polygon and a quality control flag for each assessment.

source

`,7))]),i("details",E,[i("summary",null,[s[18]||(s[18]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon, Dict{Symbol, Function}}",href:"#ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon, Dict{Symbol, Function}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[19]||(s[19]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[20]||(s[20]=n(`
julia
assess_reef_site(
+)::Tuple{Float64,Int64,GI.Wrappers.Polygon,Int64}

Assesses the rotations of a search box geom for their suitability score (calculated as the proportion of pixels that meet all specified criteria thresholds). Search box rotation steps are returned so that the start_rot angle is 0, rotations anti-clockwise are negative and rotations clockwise are positive.

Arguments

  • rel_pix : DataFrame containing the point data for pixels that are within maxmimum user search box dimensions from a pixel.

  • geom : Starting search box for assessment.

  • max_count : The maximum number of pixels that can intersect the search box (used to standardise scores between 0 and 1).

  • target_crs : Coordinate Reference System used for analysis vector and raster data.

  • degree_step : Step to vary the search box rotations.

  • start_rot : Starting angle rotation that aligns the box with the closest reef edge.

  • n_per_side : Number of rotations to perform around the starting search box angle.

  • surr_threshold : Suitability threshold, below which sites are excluded from result sets.

Returns

  • Highest score

  • Highest scoring rotation step

  • Highest scoring polygon

  • Quality control flag for site, indicating if surr_threshold was met in the highest scoring rotation.

source

`,7))]),i("details",E,[i("summary",null,[s[18]||(s[18]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon, Dict{Symbol, Function}}",href:"#ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon, Dict{Symbol, Function}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[19]||(s[19]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[20]||(s[20]=n(`
julia
assess_reef_site(
     rst::Union{Raster,RasterStack},
     geom::GI.Wrappers.Polygon,
     ruleset::Dict{Symbol,Function};
     degree_step::Float64=15.0,
     start_rot::Float64=0.0,
     n_per_side::Int64=1
-)::Tuple{Float64,Int64,GI.Wrappers.Polygon}

Assess given reef site.

source

`,3))]),i("details",F,[i("summary",null,[s[21]||(s[21]=i("a",{id:"ReefGuideAPI.closest_reef_edge-Tuple{GeometryBasics.Point{2, Float64}, Vector{GeometryBasics.Line{2, Float64}}}",href:"#ReefGuideAPI.closest_reef_edge-Tuple{GeometryBasics.Point{2, Float64}, Vector{GeometryBasics.Line{2, Float64}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.closest_reef_edge")],-1)),s[22]||(s[22]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[23]||(s[23]=n(`
julia
closest_reef_edge(
+)::Tuple{Float64,Int64,GI.Wrappers.Polygon}

Assess given reef site for it's suitability score at different specified rotations around the initial reef-edge rotation.

Arguments

  • rst : Raster or RasterStack object used to assess site suitability.

  • geom : Initial site polygon with no rotation applied.

  • ruleset : Criteria ruleset to apply to rst pixels when assessing which pixels are suitable.

  • degree_step : Degree value to vary each rotation by. Default = 15 degrees.

  • start_rot : Initial rotation used to align the site polygon with the nearest reef edge. Default = 0 degrees.

  • n_per_side : Number of times to rotate polygon on each side (clockwise and anticlockwise). Default = 2 rotations on each side.

Returns

  • Highest score identified with rotating polygons.

  • The index of the highest scoring rotation.

  • The polygon with the highest score out of the assessed rotated polygons.

source

`,7))]),i("details",f,[i("summary",null,[s[21]||(s[21]=i("a",{id:"ReefGuideAPI.closest_reef_edge-Tuple{GeometryBasics.Point{2, Float64}, Vector{GeometryBasics.Line{2, Float64}}}",href:"#ReefGuideAPI.closest_reef_edge-Tuple{GeometryBasics.Point{2, Float64}, Vector{GeometryBasics.Line{2, Float64}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.closest_reef_edge")],-1)),s[22]||(s[22]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[23]||(s[23]=n(`
julia
closest_reef_edge(
     pixel::GeometryBasics.Point{2, Float64},
     reef_lines::Vector{GeometryBasics.Line{2, Float64}}
-)::Vector{Tuple{Float64, Float64}}

Find the nearest line in reef_lines to a point pixel.

Arguments

  • pixel : Target point geometry.

  • reef_lines : Vector containing lines for comparison.

Returns

Coordinates of the reef edge line that is closest to the target pixel. Returned in Tuples.

source

`,7))]),i("details",b,[i("summary",null,[s[24]||(s[24]=i("a",{id:"ReefGuideAPI.create_bbox-Tuple{Tuple, Tuple}",href:"#ReefGuideAPI.create_bbox-Tuple{Tuple, Tuple}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.create_bbox")],-1)),s[25]||(s[25]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[26]||(s[26]=n('
julia
create_bbox(xs::Tuple, ys::Tuple)::Vector{Tuple{Float64, Float64}}

Create bounding box from x and y coordinates

Returns in order of top left, top right, bottom right, bottom left

source

',4))]),i("details",f,[i("summary",null,[s[27]||(s[27]=i("a",{id:"ReefGuideAPI.criteria_middleware-Tuple{Any}",href:"#ReefGuideAPI.criteria_middleware-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.criteria_middleware")],-1)),s[28]||(s[28]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[29]||(s[29]=n('
julia
criteria_middleware(handle)

Creates middleware that parses a criteria query before reaching an endpoint

Example

https:😕/somewhere:8000/suitability/assess/region-name/reeftype?criteria_names=Depth,Slope&lb=-9.0,0.0&ub=-2.0,40

source

',5))]),i("details",m,[i("summary",null,[s[30]||(s[30]=i("a",{id:"ReefGuideAPI.degrees_to_meters-Tuple{Any, Any}",href:"#ReefGuideAPI.degrees_to_meters-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.degrees_to_meters")],-1)),s[31]||(s[31]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[32]||(s[32]=n('
julia
degrees_to_meters(x, lat)

Convert degrees to meters at target latitude.

source

',3))]),i("details",C,[i("summary",null,[s[33]||(s[33]=i("a",{id:"ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, Any}",href:"#ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_distances")],-1)),s[34]||(s[34]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[35]||(s[35]=n(`
julia
filter_distances(
+)::Vector{Tuple{Float64, Float64}}

Find the nearest line in reef_lines to a point pixel.

Arguments

  • pixel : Target point geometry.

  • reef_lines : Vector containing lines for comparison.

Returns

Coordinates of the reef edge line that is closest to the target pixel. Returned in Tuples.

source

`,7))]),i("details",F,[i("summary",null,[s[24]||(s[24]=i("a",{id:"ReefGuideAPI.create_bbox-Tuple{Tuple, Tuple}",href:"#ReefGuideAPI.create_bbox-Tuple{Tuple, Tuple}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.create_bbox")],-1)),s[25]||(s[25]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[26]||(s[26]=n('
julia
create_bbox(xs::Tuple, ys::Tuple)::Vector{Tuple{Float64, Float64}}

Create bounding box from x and y coordinates

Returns

Bounding box coordinates in order of top left, top right, bottom right, bottom left, top left.

source

',5))]),i("details",b,[i("summary",null,[s[27]||(s[27]=i("a",{id:"ReefGuideAPI.criteria_middleware-Tuple{Any}",href:"#ReefGuideAPI.criteria_middleware-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.criteria_middleware")],-1)),s[28]||(s[28]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[29]||(s[29]=n('
julia
criteria_middleware(handle)

Creates middleware that parses a criteria query before reaching an endpoint

Example

https://somewhere:8000/suitability/assess/region-name/reeftype?criteria_names=Depth,Slope&lb=-9.0,0.0&ub=-2.0,40

source

',5))]),i("details",m,[i("summary",null,[s[30]||(s[30]=i("a",{id:"ReefGuideAPI.degrees_to_meters-Tuple{Any, Any}",href:"#ReefGuideAPI.degrees_to_meters-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.degrees_to_meters")],-1)),s[31]||(s[31]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[32]||(s[32]=n('
julia
degrees_to_meters(x, lat)

Convert degrees to meters at target latitude.

source

',3))]),i("details",C,[i("summary",null,[s[33]||(s[33]=i("a",{id:"ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, Any}",href:"#ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_distances")],-1)),s[34]||(s[34]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[35]||(s[35]=n(`
julia
filter_distances(
     target_rast::Raster,
     dist_buffer
-)::Raster

Apply a mask to exclude pixels that are outside the indicated distance buffer(s).

target_rast and the dist_buffer should be in the same CRS (e.g., EPSG:7844 / GDA2020).

Arguments

  • target_rast : Raster of suitable pixels (Bool) to filter pixels from.

  • dist_buffer : Buffer geometry to use as the mask.

Returns

  • Masked boolean raster indicating pixels that are within the target distance.

source

`,8))]),i("details",A,[i("summary",null,[s[36]||(s[36]=i("a",{id:"ReefGuideAPI.filter_far_polygons-Tuple{DataFrames.DataFrame, GeometryBasics.Point, Float64, Union{Float64, Int64}}",href:"#ReefGuideAPI.filter_far_polygons-Tuple{DataFrames.DataFrame, GeometryBasics.Point, Float64, Union{Float64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_far_polygons")],-1)),s[37]||(s[37]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[38]||(s[38]=n('
julia
filter_far_polygons(gdf::DataFrame, pixel::GIWrap.Point, lat::Float64, dist::Union{Int64,Float64})::BitVector

Filter out reefs that are > 10km from the target pixel (currently hardcoded threshold).

source

',3))]),i("details",_,[i("summary",null,[s[39]||(s[39]=i("a",{id:"ReefGuideAPI.filter_sites-Tuple{DataFrames.DataFrame}",href:"#ReefGuideAPI.filter_sites-Tuple{DataFrames.DataFrame}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_sites")],-1)),s[40]||(s[40]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[41]||(s[41]=n('
julia
filter_sites(res_df::DataFrame)::DataFrame

Filter out sites where the qc_flag indicates a suitabiltiy < surr_threshold in searching. Identify and keep the highest scoring site polygon where site polygons are overlapping.

Arguments

  • res_df : Results DataFrame containing potential site polygons (output from identify_potential_sites() or identify_potential_sites_edges()).

Returns

DataFrame containing only the highest scoring sites where site polygons intersect, and containing only sites with scores greater than the surr_threshold specified in identify_potential_sites_edges() (default=0.33).

source

',7))]),i("details",j,[i("summary",null,[s[42]||(s[42]=i("a",{id:"ReefGuideAPI.find_horizontal-Tuple{GeoInterface.Wrappers.Polygon}",href:"#ReefGuideAPI.find_horizontal-Tuple{GeoInterface.Wrappers.Polygon}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.find_horizontal")],-1)),s[43]||(s[43]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[44]||(s[44]=n('
julia
find_horizontal(geom::GI.Wrappers.Polygon)::Vector{Tuple{Float64,Float64}, Tuple{Float64,Float64}}

Find a horizontal line if one exists within a geometry.

Returns

Vector containing tuples of coordinates for a horizontal line found within geom.

source

',5))]),i("details",I,[i("summary",null,[s[45]||(s[45]=i("a",{id:"ReefGuideAPI.from_zero-Tuple{Vector{Tuple{Float64, Float64}}}",href:"#ReefGuideAPI.from_zero-Tuple{Vector{Tuple{Float64, Float64}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.from_zero")],-1)),s[46]||(s[46]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[47]||(s[47]=n('
julia
from_zero(v::Vector{Tuple{Float64,Float64}})::Vector{Tuple{Float64, Float64}}

Translates Vector of points v to begin from (0, 0), retaining direction and length.

Argument

  • v : Vector of point coordinates (Tuple{Float64, Float64}).

source

',5))]),i("details",D,[i("summary",null,[s[48]||(s[48]=i("a",{id:"ReefGuideAPI.generate_criteria_mask!-Tuple{String, Rasters.RasterStack, DataFrames.DataFrame, Vector{ReefGuideAPI.CriteriaBounds{Function}}}",href:"#ReefGuideAPI.generate_criteria_mask!-Tuple{String, Rasters.RasterStack, DataFrames.DataFrame, Vector{ReefGuideAPI.CriteriaBounds{Function}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.generate_criteria_mask!")],-1)),s[49]||(s[49]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[50]||(s[50]=n('
julia
generate_criteria_mask!(fn::String, rst_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})

Generate mask file for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zero values indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • fn : File to write geotiff to

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

Returns

Nothing

source

',9))]),i("details",R,[i("summary",null,[s[51]||(s[51]=i("a",{id:"ReefGuideAPI.get_points-Tuple{Any}",href:"#ReefGuideAPI.get_points-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.get_points")],-1)),s[52]||(s[52]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[53]||(s[53]=n('
julia
get_points(geom)

Helper method to retrieve points for a geometry.

source

',3))]),i("details",T,[i("summary",null,[s[54]||(s[54]=i("a",{id:"ReefGuideAPI.identify_potential_sites_edges-Tuple{DataFrames.DataFrame, DataFrames.DataFrame, Float64, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Vector{Vector{GeometryBasics.Line{2, Float64}}}, String}",href:"#ReefGuideAPI.identify_potential_sites_edges-Tuple{DataFrames.DataFrame, DataFrames.DataFrame, Float64, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Vector{Vector{GeometryBasics.Line{2, Float64}}}, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_potential_sites_edges")],-1)),s[55]||(s[55]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[56]||(s[56]=n(`
julia
identify_potential_sites_edges(
+)::Raster

Apply a mask to exclude pixels that are outside the indicated distance buffer(s).

target_rast and the dist_buffer should be in the same CRS (e.g., EPSG:7844 / GDA2020).

Arguments

  • target_rast : Raster of suitable pixels (Bool) to filter pixels from.

  • dist_buffer : Buffer geometry to use as the mask.

Returns

  • Masked boolean raster indicating pixels that are within the target distance.

source

`,8))]),i("details",A,[i("summary",null,[s[36]||(s[36]=i("a",{id:"ReefGuideAPI.filter_far_polygons-Tuple{DataFrames.DataFrame, GeometryBasics.Point, Float64, Union{Float64, Int64}}",href:"#ReefGuideAPI.filter_far_polygons-Tuple{DataFrames.DataFrame, GeometryBasics.Point, Float64, Union{Float64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_far_polygons")],-1)),s[37]||(s[37]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[38]||(s[38]=n('
julia
filter_far_polygons(gdf::DataFrame, pixel::GIWrap.Point, lat::Float64, dist::Union{Int64,Float64})::BitVector

Filter out reefs that are > dist (meters) from the target pixel (currently dist is hardcoded in initial_search_rotation()).

source

',3))]),i("details",_,[i("summary",null,[s[39]||(s[39]=i("a",{id:"ReefGuideAPI.filter_sites-Tuple{DataFrames.DataFrame}",href:"#ReefGuideAPI.filter_sites-Tuple{DataFrames.DataFrame}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_sites")],-1)),s[40]||(s[40]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[41]||(s[41]=n('
julia
filter_sites(res_df::DataFrame)::DataFrame

Filter out sites where the qc_flag indicates a suitabiltiy < surr_threshold in searching. Where site polygons are overlapping, keep only the highest scoring site polygon.

Arguments

  • res_df : Results DataFrame containing potential site polygons (output from identify_potential_sites() or identify_potential_sites_edges()).

Returns

DataFrame containing only the highest scoring sites where site polygons intersect, and containing only sites with scores greater than the surr_threshold specified in identify_potential_sites_edges() (default=0.33).

source

',7))]),i("details",j,[i("summary",null,[s[42]||(s[42]=i("a",{id:"ReefGuideAPI.find_horizontal-Tuple{GeoInterface.Wrappers.Polygon}",href:"#ReefGuideAPI.find_horizontal-Tuple{GeoInterface.Wrappers.Polygon}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.find_horizontal")],-1)),s[43]||(s[43]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[44]||(s[44]=n('
julia
find_horizontal(geom::GI.Wrappers.Polygon)::Vector{Tuple{Float64,Float64}, Tuple{Float64,Float64}}

Find a horizontal line if one exists within a geometry.

Returns

Vector containing tuples of coordinates for a horizontal line found within geom.

source

',5))]),i("details",I,[i("summary",null,[s[45]||(s[45]=i("a",{id:"ReefGuideAPI.from_zero-Tuple{Vector{Tuple{Float64, Float64}}}",href:"#ReefGuideAPI.from_zero-Tuple{Vector{Tuple{Float64, Float64}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.from_zero")],-1)),s[46]||(s[46]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[47]||(s[47]=n('
julia
from_zero(v::Vector{Tuple{Float64,Float64}})::Vector{Tuple{Float64, Float64}}

Translates Vector of points v to begin from (0, 0), retaining direction and length.

Argument

  • v : Vector of point coordinates (Tuple{Float64, Float64}).

source

',5))]),i("details",R,[i("summary",null,[s[48]||(s[48]=i("a",{id:"ReefGuideAPI.generate_criteria_mask!-Tuple{String, Rasters.RasterStack, DataFrames.DataFrame, Vector{ReefGuideAPI.CriteriaBounds{Function}}}",href:"#ReefGuideAPI.generate_criteria_mask!-Tuple{String, Rasters.RasterStack, DataFrames.DataFrame, Vector{ReefGuideAPI.CriteriaBounds{Function}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.generate_criteria_mask!")],-1)),s[49]||(s[49]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[50]||(s[50]=n('
julia
generate_criteria_mask!(fn::String, rst_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})

Generate mask file for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • fn : File to write geotiff to

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

Returns

Nothing

source

',9))]),i("details",D,[i("summary",null,[s[51]||(s[51]=i("a",{id:"ReefGuideAPI.get_points-Tuple{Any}",href:"#ReefGuideAPI.get_points-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.get_points")],-1)),s[52]||(s[52]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[53]||(s[53]=n('
julia
get_points(geom)

Helper method to retrieve points for a geometry.

source

',3))]),i("details",T,[i("summary",null,[s[54]||(s[54]=i("a",{id:"ReefGuideAPI.identify_potential_sites_edges-Tuple{DataFrames.DataFrame, DataFrames.DataFrame, Float64, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Vector{Vector{GeometryBasics.Line{2, Float64}}}, String}",href:"#ReefGuideAPI.identify_potential_sites_edges-Tuple{DataFrames.DataFrame, DataFrames.DataFrame, Float64, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Vector{Vector{GeometryBasics.Line{2, Float64}}}, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_potential_sites_edges")],-1)),s[55]||(s[55]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[56]||(s[56]=n(`
julia
identify_potential_sites_edges(
     df::DataFrame,
     search_pixels::DataFrame,
     res::Float64,
@@ -35,7 +35,7 @@ import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o as h}from"./chunks/fr
     degree_step::Float64=15.0,
     n_rot_p_side::Int64=2,
     surr_threshold::Float64=0.33
-)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon in meters. A buffer of the raster files' resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters. Method is currently opperating for CRS in degrees units.

Arguments

  • df : DataFrame containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat columns for each pixel that is intended for analysis.

  • res : Resolution of the original raster pixels. Can by found via abs(step(dims(raster, X))).

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box (in meters).

  • y_dist : Length of vertical side of search box (in meters).

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • reef_lines : Vector containing reef outline segments created from polygons in gdf.geometry (Must be separate object to gdf rather than column).

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_p_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

  • surr_threshold : Theshold used to skip searching where the proportion of suitable pixels is too low.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

`,7))]),i("details",v,[i("summary",null,[s[57]||(s[57]=i("a",{id:"ReefGuideAPI.identify_potential_sites_edges-Tuple{Rasters.RasterStack, DataFrames.DataFrame, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, String, Vector{Vector{GeometryBasics.Line{2, Float64}}}}",href:"#ReefGuideAPI.identify_potential_sites_edges-Tuple{Rasters.RasterStack, DataFrames.DataFrame, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, String, Vector{Vector{GeometryBasics.Line{2, Float64}}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_potential_sites_edges")],-1)),s[58]||(s[58]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[59]||(s[59]=n(`
julia
identify_potential_sites_edges(
+)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon in meters. A buffer of the raster files' resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters. Method is currently opperating for CRS in degrees units.

Arguments

  • df : DataFrame containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat columns for each pixel that is intended for analysis.

  • res : Resolution of the original raster pixels. Can by found via abs(step(dims(raster, X))).

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box (in meters).

  • y_dist : Length of vertical side of search box (in meters).

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • reef_lines : Vector containing reef outline segments created from polygons in gdf.geometry (Must be separate object to gdf rather than column).

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_p_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

  • surr_threshold : Theshold used to skip searching where the proportion of suitable pixels is too low.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

`,7))]),i("details",v,[i("summary",null,[s[57]||(s[57]=i("a",{id:"ReefGuideAPI.identify_potential_sites_edges-Tuple{Rasters.RasterStack, DataFrames.DataFrame, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, String, Vector{Vector{GeometryBasics.Line{2, Float64}}}}",href:"#ReefGuideAPI.identify_potential_sites_edges-Tuple{Rasters.RasterStack, DataFrames.DataFrame, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, String, Vector{Vector{GeometryBasics.Line{2, Float64}}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_potential_sites_edges")],-1)),s[58]||(s[58]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[59]||(s[59]=n(`
julia
identify_potential_sites_edges(
     rst_stack::RasterStack,
     search_pixels::DataFrame,
     gdf::DataFrame,
@@ -46,24 +46,28 @@ import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o as h}from"./chunks/fr
     reef_lines::Vector{Vector{GeometryBasics.Line{2,Float64}}};
     degree_step::Float64=15.0,
     n_rot_per_side::Int64=2
-)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon. A buffer of rst_stack resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters.

Arguments

  • rst_stack : RasterStack containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat values for each pixel intended for

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box.

  • y_dist : Length of vertical side of search box.

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • reef_lines : Vector containing reef outline segments for each reef in gdf.geometry (Must be separate object to gdf rather than a column).

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_per_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

`,7))]),i("details",B,[i("summary",null,[s[60]||(s[60]=i("a",{id:"ReefGuideAPI.identify_search_pixels-Tuple{Rasters.Raster, Any}",href:"#ReefGuideAPI.identify_search_pixels-Tuple{Rasters.Raster, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_search_pixels")],-1)),s[61]||(s[61]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[62]||(s[62]=n('
julia
identify_search_pixels(input_raster::Raster, criteria_function)::DataFrame

Identifies all pixels in an input raster that return true for the function criteria_function.

Arguments

  • input_raster : Raster containing pixels for the target region.

  • criteria_function : Function that returns a boolean value for each pixel in input_raster. Pixels that return true will be targetted in analysis.

Returns

DataFrame containing indices, lon and lat for each pixel that is intended for further analysis.

source

',7))]),i("details",G,[i("summary",null,[s[63]||(s[63]=i("a",{id:"ReefGuideAPI.initial_search_box-Tuple{Any, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Float64}",href:"#ReefGuideAPI.initial_search_box-Tuple{Any, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Float64}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.initial_search_box")],-1)),s[64]||(s[64]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[65]||(s[65]=n(`
julia
initial_search_box(
+)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon. A buffer of rst_stack resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters.

Arguments

  • rst_stack : RasterStack containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat values for each pixel intended for

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box.

  • y_dist : Length of vertical side of search box.

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • reef_lines : Vector containing reef outline segments for each reef in gdf.geometry (Must be separate object to gdf rather than a column).

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_per_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

`,7))]),i("details",B,[i("summary",null,[s[60]||(s[60]=i("a",{id:"ReefGuideAPI.identify_search_pixels-Tuple{Rasters.Raster, Any}",href:"#ReefGuideAPI.identify_search_pixels-Tuple{Rasters.Raster, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_search_pixels")],-1)),s[61]||(s[61]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[62]||(s[62]=n('
julia
identify_search_pixels(input_raster::Raster, criteria_function)::DataFrame

Identifies all pixels in an input raster that return true for the function criteria_function.

Arguments

  • input_raster : Raster containing pixels for the target region.

  • criteria_function : Function that returns a boolean value for each pixel in input_raster. Pixels that return true will be targetted in analysis.

Returns

DataFrame containing indices, lon and lat for each pixel that is intended for further analysis.

source

',7))]),i("details",G,[i("summary",null,[s[63]||(s[63]=i("a",{id:"ReefGuideAPI.initial_search_box-Tuple{Any, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Float64}",href:"#ReefGuideAPI.initial_search_box-Tuple{Any, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Float64}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.initial_search_box")],-1)),s[64]||(s[64]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[65]||(s[65]=n(`
julia
initial_search_box(
     (lon::Float64, lat::Float64),
     x_dist::Union{Int64, Float64},
     y_dist::Union{Int64, Float64},
     target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat,
     res::Float64
-)::GI.Wrappers.Polygon

Create an initial search box that is centered around the point (lon, lat) in target_crs, and is buffered by res distance.

Arguments

  • (lon, lat) : Longitude and latitude coordinates of the center target pixel.

  • x_dist : x (longitude) dimension length of initial search box.

  • y_dist : y (latitude) dimension length of initial search box.

  • target_crs : Target CRS of box to match input data types.

  • res : Buffer distance (resolution of input raster search data).

Returns

Initial search box geometry.

source

`,7))]),i("details",x,[i("summary",null,[s[66]||(s[66]=i("a",{id:"ReefGuideAPI.initial_search_rotation-Tuple{GeometryBasics.Point{2, Float64}, GeoInterface.Wrappers.Polygon, DataFrames.DataFrame, Vector{Vector{GeometryBasics.Line{2, Float64}}}}",href:"#ReefGuideAPI.initial_search_rotation-Tuple{GeometryBasics.Point{2, Float64}, GeoInterface.Wrappers.Polygon, DataFrames.DataFrame, Vector{Vector{GeometryBasics.Line{2, Float64}}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.initial_search_rotation")],-1)),s[67]||(s[67]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[68]||(s[68]=n(`
julia
initial_search_rotation(
+)::GI.Wrappers.Polygon

Create an initial search box that is centered around the point (lon, lat) in target_crs, and is buffered by res distance.

Arguments

  • (lon, lat) : Longitude and latitude coordinates of the center target pixel.

  • x_dist : x (longitude) dimension length of initial search box.

  • y_dist : y (latitude) dimension length of initial search box.

  • target_crs : Target CRS of box to match input data types.

  • res : Buffer distance (resolution of input raster search data).

Returns

Initial search box geometry.

source

`,7))]),i("details",x,[i("summary",null,[s[66]||(s[66]=i("a",{id:"ReefGuideAPI.initial_search_rotation-Tuple{GeometryBasics.Point{2, Float64}, GeoInterface.Wrappers.Polygon, DataFrames.DataFrame, Vector{Vector{GeometryBasics.Line{2, Float64}}}}",href:"#ReefGuideAPI.initial_search_rotation-Tuple{GeometryBasics.Point{2, Float64}, GeoInterface.Wrappers.Polygon, DataFrames.DataFrame, Vector{Vector{GeometryBasics.Line{2, Float64}}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.initial_search_rotation")],-1)),s[67]||(s[67]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[68]||(s[68]=n(`
julia
initial_search_rotation(
     pixel::GeometryBasics.Point{2, Float64},
     geom_buff::GI.Wrappers.Polygon,
     gdf::DataFrame,
     reef_outlines::Vector{Vector{GeometryBasics.Line{2, Float64}}};
     search_buffer::Union{Int64,Float64}=20000.0
-)::Float64

Identifies the closest edge to the target pixel/'geom_buff and returns the initial rotation angle required to match the edge line.

Arguments

  • pixel : Target point at the center of the search polygon.

  • geom_buff : Initial search box with zero rotation.

  • gdf : GeoDataFrame containing a geometry column used for pixel masking.

  • reef_outlines : Line segments for the outlines of each reef in gdf.

  • search_buffer : Distance to search from pixel to find closest reef.

source

`,5))]),i("details",P,[i("summary",null,[s[69]||(s[69]=i("a",{id:"ReefGuideAPI.line_angle-Union{Tuple{T}, Tuple{T, T}} where T<:Vector{Tuple{Float64, Float64}}",href:"#ReefGuideAPI.line_angle-Union{Tuple{T}, Tuple{T, T}} where T<:Vector{Tuple{Float64, Float64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.line_angle")],-1)),s[70]||(s[70]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[71]||(s[71]=n(`
julia
line_angle(a::T, b::T)::Float64 where {T <: Vector{Tuple{Float64,Float64}}}

Calculate the angle between two lines.

Arguments

  • a : Line between point coordinates.

  • b : Line between point coordinates.

Returns

Angle between the two lines.

Examples

julia
line_angle([(0.0,5.0), (0.0,0.0)], from_zero(edge_line))
-line_angle([(0.0,5.0), (0.0,0.0)], [(1.0, 4.0), (7.0, 8.0)])

source

`,9))]),i("details",M,[i("summary",null,[s[72]||(s[72]=i("a",{id:"ReefGuideAPI.make_threshold_mask-Tuple{Any, Symbol, Any}",href:"#ReefGuideAPI.make_threshold_mask-Tuple{Any, Symbol, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.make_threshold_mask")],-1)),s[73]||(s[73]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[74]||(s[74]=n('
julia
make_threshold_mask(reg::String, rtype::Symbol, crit_map)

Generate mask for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zero values indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

  • lons : Longitudinal extent (min and max)

  • lats : Latitudinal extent (min and max)

Returns

True/false mask indicating locations within desired thresholds.

source

',9))]),i("details",S,[i("summary",null,[s[75]||(s[75]=i("a",{id:"ReefGuideAPI.masked_nearest-Tuple{Rasters.Raster, Int64, Int64, Int64, Tuple{Int64, Int64}}",href:"#ReefGuideAPI.masked_nearest-Tuple{Rasters.Raster, Int64, Int64, Int64, Tuple{Int64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.masked_nearest")],-1)),s[76]||(s[76]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[77]||(s[77]=n('
julia
masked_nearest(rst::Raster, z::Int, x::Int, y::Int, tile_size::Tuple{Int,Int}, orig_rst_size::Tuple{Int,Int})::Matrix

Resample a raster using nearest neighbor interpolation when the tile includes area outside where data exists (e.g., viewing the globe where the data may appear in a small corner of the tile). This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • z: Tile zoom level requested.

  • x: x coordinate for requested tile.

  • y: y coordinate for the requested tile.

  • tile_size: The desired dimensions of the tile (lat, long).

Returns

Matrix with the resampled data.

source

',7))]),i("details",L,[i("summary",null,[s[78]||(s[78]=i("a",{id:"ReefGuideAPI.meters_to_degrees-Tuple{Any, Any}",href:"#ReefGuideAPI.meters_to_degrees-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.meters_to_degrees")],-1)),s[79]||(s[79]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[80]||(s[80]=n('
julia
meters_to_degrees(x, lat)

Convert meters to degrees at target latitude.

source

',3))]),i("details",w,[i("summary",null,[s[81]||(s[81]=i("a",{id:"ReefGuideAPI.move_geom-Tuple{Any, Tuple}",href:"#ReefGuideAPI.move_geom-Tuple{Any, Tuple}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.move_geom")],-1)),s[82]||(s[82]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[83]||(s[83]=n('
julia
move_geom(geom, new_centroid::Tuple)

Move a geom to a new centroid.

Arguments

  • geom : geometry to move

  • new_centroid : Centroid given in lon, lat

source

',5))]),i("details",V,[i("summary",null,[s[84]||(s[84]=i("a",{id:"ReefGuideAPI.n_gdal_threads-Tuple{Dict}",href:"#ReefGuideAPI.n_gdal_threads-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.n_gdal_threads")],-1)),s[85]||(s[85]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[86]||(s[86]=n('
julia
n_gdal_threads(config::Dict)::String

Retrieve the configured number of threads to use when writing COGs with GDAL.

source

',3))]),i("details",O,[i("summary",null,[s[87]||(s[87]=i("a",{id:"ReefGuideAPI.nearest-Tuple{Rasters.Raster, Tuple{Int64, Int64}}",href:"#ReefGuideAPI.nearest-Tuple{Rasters.Raster, Tuple{Int64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.nearest")],-1)),s[88]||(s[88]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[89]||(s[89]=n(`
julia
nearest(rst::Raster, tile_size::Tuple{Int, Int})::Matrix

Resample a raster to a tile size using nearest neighbor interpolation. This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • tile_size: The desired dimensions of the tile (lat, long).

Returns

Matrix with the resampled data.

Examples

julia
large_raster = Raster(rand(UInt8, 14756, 14838); dims=(X(1:1:14756), Y(1:1:14838)))
-small_matrix = nearest(large_raster, (256, 256))

source

`,9))]),i("details",U,[i("summary",null,[s[90]||(s[90]=i("a",{id:"ReefGuideAPI.output_geojson-Tuple{DataFrames.DataFrame, String, String}",href:"#ReefGuideAPI.output_geojson-Tuple{DataFrames.DataFrame, String, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.output_geojson")],-1)),s[91]||(s[91]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[92]||(s[92]=n(`
julia
output_geojson(
+)::Float64

Identifies the closest edge to the target pixel/'geom_buff and returns the initial rotation angle required to match the edge line.

Arguments

  • pixel : Target point at the center of the search polygon.

  • geom_buff : Initial search box with zero rotation.

  • gdf : GeoDataFrame containing a geometry column used for pixel masking.

  • reef_outlines : Line segments for the outlines of each reef in gdf.

  • search_buffer : Distance to search from pixel to find closest reef.

source

`,5))]),i("details",P,[i("summary",null,[s[69]||(s[69]=i("a",{id:"ReefGuideAPI.line_angle-Union{Tuple{T}, Tuple{T, T}} where T<:Vector{Tuple{Float64, Float64}}",href:"#ReefGuideAPI.line_angle-Union{Tuple{T}, Tuple{T, T}} where T<:Vector{Tuple{Float64, Float64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.line_angle")],-1)),s[70]||(s[70]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[71]||(s[71]=n(`
julia
line_angle(a::T, b::T)::Float64 where {T <: Vector{Tuple{Float64,Float64}}}

Calculate the angle between two lines.

Arguments

  • a : Line between point coordinates.

  • b : Line between point coordinates.

Returns

Angle between the two lines.

Examples

julia
line_angle([(0.0,5.0), (0.0,0.0)], from_zero(edge_line))
+line_angle([(0.0,5.0), (0.0,0.0)], [(1.0, 4.0), (7.0, 8.0)])

source

`,9))]),i("details",M,[i("summary",null,[s[72]||(s[72]=i("a",{id:"ReefGuideAPI.make_threshold_mask-Tuple{Any, Symbol, Any}",href:"#ReefGuideAPI.make_threshold_mask-Tuple{Any, Symbol, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.make_threshold_mask")],-1)),s[73]||(s[73]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[74]||(s[74]=n('
julia
make_threshold_mask(reg::String, rtype::Symbol, crit_map)

Generate mask for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

  • lons : Longitudinal extent (min and max)

  • lats : Latitudinal extent (min and max)

Returns

True/false mask indicating locations within desired thresholds.

source

',9))]),i("details",S,[i("summary",null,[s[75]||(s[75]=i("a",{id:"ReefGuideAPI.masked_nearest-Tuple{Rasters.Raster, Int64, Int64, Int64, Tuple{Int64, Int64}}",href:"#ReefGuideAPI.masked_nearest-Tuple{Rasters.Raster, Int64, Int64, Int64, Tuple{Int64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.masked_nearest")],-1)),s[76]||(s[76]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[77]||(s[77]=n('
julia
masked_nearest(rst::Raster, z::Int, x::Int, y::Int, tile_size::Tuple{Int,Int}, orig_rst_size::Tuple{Int,Int})::Matrix

Resample a raster using nearest neighbor interpolation when the tile includes area outside where data exists (e.g., viewing the globe where the data may appear in a small corner of the tile). This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • z: Tile zoom level requested.

  • x: x coordinate for requested tile.

  • y: y coordinate for the requested tile.

  • tile_size: The desired dimensions of the tile (lat, long). Note reversed order of coordinates.

Returns

Matrix with the resampled data.

source

',7))]),i("details",L,[i("summary",null,[s[78]||(s[78]=i("a",{id:"ReefGuideAPI.meters_to_degrees-Tuple{Any, Any}",href:"#ReefGuideAPI.meters_to_degrees-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.meters_to_degrees")],-1)),s[79]||(s[79]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[80]||(s[80]=n('
julia
meters_to_degrees(x, lat)

Convert meters to degrees at target latitude.

source

',3))]),i("details",w,[i("summary",null,[s[81]||(s[81]=i("a",{id:"ReefGuideAPI.move_geom-Tuple{Any, Tuple}",href:"#ReefGuideAPI.move_geom-Tuple{Any, Tuple}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.move_geom")],-1)),s[82]||(s[82]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[83]||(s[83]=n('
julia
move_geom(geom, new_centroid::Tuple)

Move a geom to a new centroid.

Arguments

  • geom : geometry to move

  • new_centroid : Centroid given in (lon, lat).

source

',5))]),i("details",V,[i("summary",null,[s[84]||(s[84]=i("a",{id:"ReefGuideAPI.n_gdal_threads-Tuple{Dict}",href:"#ReefGuideAPI.n_gdal_threads-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.n_gdal_threads")],-1)),s[85]||(s[85]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[86]||(s[86]=n('
julia
n_gdal_threads(config::Dict)::String

Retrieve the configured number of threads to use when writing COGs with GDAL.

source

',3))]),i("details",O,[i("summary",null,[s[87]||(s[87]=i("a",{id:"ReefGuideAPI.nearest-Tuple{Rasters.Raster, Tuple{Int64, Int64}}",href:"#ReefGuideAPI.nearest-Tuple{Rasters.Raster, Tuple{Int64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.nearest")],-1)),s[88]||(s[88]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[89]||(s[89]=n(`
julia
nearest(rst::Raster, tile_size::Tuple{Int, Int})::Matrix

Resample a raster to a tile size using nearest neighbor interpolation. This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • tile_size: The desired dimensions of the tile (lat, long).

Returns

Matrix with the resampled data.

Examples

julia
large_raster = Raster(rand(UInt8, 14756, 14838); dims=(X(1:1:14756), Y(1:1:14838)))
+small_matrix = nearest(large_raster, (256, 256))

source

`,9))]),i("details",U,[i("summary",null,[s[90]||(s[90]=i("a",{id:"ReefGuideAPI.output_geojson-Tuple{DataFrames.DataFrame, String, String}",href:"#ReefGuideAPI.output_geojson-Tuple{DataFrames.DataFrame, String, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.output_geojson")],-1)),s[91]||(s[91]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[92]||(s[92]=n(`
julia
output_geojson(
     df::DataFrame,
     region::String,
     output_dir::String
-)::Nothing

Writes out GeoJSON file to a target directory. Output file will be located at location: "output_dir/output_sites_region.geojson"

Arguments

  • df : DataFrame intended for writing to geojson file.

  • region : Region name for labelling output file.

  • output_dir : Directory to write geojson file to.

source

`,5))]),i("details",q,[i("summary",null,[s[93]||(s[93]=i("a",{id:"ReefGuideAPI.parse_criteria_query-Tuple{Dict}",href:"#ReefGuideAPI.parse_criteria_query-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.parse_criteria_query")],-1)),s[94]||(s[94]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[95]||(s[95]=n('
julia
parse_criteria_query(qp)::Tuple

Parse criteria values from request query.

Queries should take the form of: Depth=-9.0:0.0&Slope=0.0:40.0&Rugosity=0.0:0.0

Arguments

  • qp : Parsed query string from request.

Returns

Tuple of criteria names, lower bounds, upper bounds

source

',8))]),i("details",z,[i("summary",null,[s[96]||(s[96]=i("a",{id:"ReefGuideAPI.polygon_to_lines-Union{Tuple{Union{GeoInterface.Wrappers.MultiPolygon, Vector{T}, T}}, Tuple{T}} where T<:GeoInterface.Wrappers.Polygon",href:"#ReefGuideAPI.polygon_to_lines-Union{Tuple{Union{GeoInterface.Wrappers.MultiPolygon, Vector{T}, T}}, Tuple{T}} where T<:GeoInterface.Wrappers.Polygon"},[i("span",{class:"jlbinding"},"ReefGuideAPI.polygon_to_lines")],-1)),s[97]||(s[97]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[98]||(s[98]=n(`
julia
polygon_to_lines(
+)::Nothing

Writes out GeoJSON file to a target directory. Output file will be located at location: "output_dir/output_sites_region.geojson"

Arguments

  • df : DataFrame intended for writing to geojson file.

  • region : Region name for labelling output file.

  • output_dir : Directory to write geojson file to.

source

`,5))]),i("details",q,[i("summary",null,[s[93]||(s[93]=i("a",{id:"ReefGuideAPI.parse_criteria_query-Tuple{Dict}",href:"#ReefGuideAPI.parse_criteria_query-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.parse_criteria_query")],-1)),s[94]||(s[94]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[95]||(s[95]=n('
julia
parse_criteria_query(qp)::Tuple

Parse criteria values from request query.

Queries should take the form of: Depth=-9.0:0.0&Slope=0.0:40.0&Rugosity=0.0:0.0

Arguments

  • qp : Parsed query string from request.

Returns

Tuple of criteria names, lower bounds, upper bounds

source

',8))]),i("details",z,[i("summary",null,[s[96]||(s[96]=i("a",{id:"ReefGuideAPI.polygon_to_lines-Union{Tuple{Union{GeoInterface.Wrappers.MultiPolygon, Vector{T}, T}}, Tuple{T}} where T<:GeoInterface.Wrappers.Polygon",href:"#ReefGuideAPI.polygon_to_lines-Union{Tuple{Union{GeoInterface.Wrappers.MultiPolygon, Vector{T}, T}}, Tuple{T}} where T<:GeoInterface.Wrappers.Polygon"},[i("span",{class:"jlbinding"},"ReefGuideAPI.polygon_to_lines")],-1)),s[97]||(s[97]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[98]||(s[98]=n(`
julia
polygon_to_lines(
     polygon::Union{Vector{T},T,GIWrap.MultiPolygon}
-) where {T<:GIWrap.Polygon}

Extract the individual lines between vertices that make up the outline of a polygon.

source

`,3))]),i("details",W,[i("summary",null,[s[99]||(s[99]=i("a",{id:"ReefGuideAPI.port_buffer_mask-Tuple{DataFrames.DataFrame, Float64}",href:"#ReefGuideAPI.port_buffer_mask-Tuple{DataFrames.DataFrame, Float64}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.port_buffer_mask")],-1)),s[100]||(s[100]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[101]||(s[101]=n('
julia
port_buffer_mask(gdf::DataFrame, dist::Float64; unit::String="NM")

Create a masking buffer around indicated port locations.

Arguments

  • gdf : GeoDataFrame of port locations (given as long/lat points)

  • dist : distance from port in degrees (deg), kilometers (km), or nautical miles (NM; default)

  • unit : unit dist is in

source

',5))]),i("details",N,[i("summary",null,[s[102]||(s[102]=i("a",{id:"ReefGuideAPI.remove_rugosity-NTuple{4, Any}",href:"#ReefGuideAPI.remove_rugosity-NTuple{4, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.remove_rugosity")],-1)),s[103]||(s[103]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[104]||(s[104]=n('
julia
remove_rugosity(reg, criteria, lbs, ubs)

Remove rugosity layer from consideration if region is not Townsville. Rugosity data currently only exists for the Townsville region.

source

',3))]),i("details",$,[i("summary",null,[s[105]||(s[105]=i("a",{id:"ReefGuideAPI.rotate_polygon-Tuple{Any, Any, Any}",href:"#ReefGuideAPI.rotate_polygon-Tuple{Any, Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.rotate_polygon")],-1)),s[106]||(s[106]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[107]||(s[107]=i("p",null,"Rotate the polygon by the given angle about its center.",-1)),s[108]||(s[108]=i("p",null,[i("a",{href:"https://github.com/open-AIMS/ReefGuideAPI.jl/blob/c49be35f3c12a0853b16d29abcc7310085bc17c7/src/site_assessment/geom_ops.jl#L47",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",J,[i("summary",null,[s[109]||(s[109]=i("a",{id:"ReefGuideAPI.setup_regional_data-Tuple{Dict}",href:"#ReefGuideAPI.setup_regional_data-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.setup_regional_data")],-1)),s[110]||(s[110]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[111]||(s[111]=n('
julia
setup_regional_data(config::Dict)

Load regional data to act as an in-memory cache.

Arguments

  • config : Configuration settings, typically loaded from a TOML file.

  • reef_data_path : Path to pre-prepared reef data

Returns

OrderedDict of RegionalCriteria for each region.

source

',7))]),i("details",X,[i("summary",null,[s[112]||(s[112]=i("a",{id:"ReefGuideAPI.tile_size-Tuple{Dict}",href:"#ReefGuideAPI.tile_size-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.tile_size")],-1)),s[113]||(s[113]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[114]||(s[114]=n('
julia
tile_size(config::Dict)::Tuple

Retrieve the configured size of map tiles in pixels (width and height / lon and lat).

source

',3))]),i("details",Z,[i("summary",null,[s[115]||(s[115]=i("a",{id:"ReefGuideAPI.valid_lonlat_inds-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T",href:"#ReefGuideAPI.valid_lonlat_inds-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.valid_lonlat_inds")],-1)),s[116]||(s[116]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[117]||(s[117]=n('
julia
valid_lonlat_inds(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Retrieve the indices of valid data for a region.

Arguments

  • data :

  • criteria :

  • lb :

  • ub :

Returns

Tuple{Vector{Int64}, Vector{Int64}}, of lon and lat indices.

source

',7))]),i("details",H,[i("summary",null,[s[118]||(s[118]=i("a",{id:"ReefGuideAPI.valid_pixel_positions-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T",href:"#ReefGuideAPI.valid_pixel_positions-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.valid_pixel_positions")],-1)),s[119]||(s[119]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[120]||(s[120]=n('
julia
valid_pixel_positions(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Obtain the pixel positions of valid data.

Intended for use in something like: https://developers.arcgis.com/javascript/latest/sample-code/layers-imagery-pixelvalues/

Arguments

  • data :

  • criteria :

  • lb : lower bound

  • ub : upper bound

source

',6))]),i("details",Q,[i("summary",null,[s[121]||(s[121]=i("a",{id:"ReefGuideAPI.warmup_cache-Tuple{String}",href:"#ReefGuideAPI.warmup_cache-Tuple{String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.warmup_cache")],-1)),s[122]||(s[122]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[123]||(s[123]=n('
julia
warmup_cache(config_path::String)

Invokes warm up of regional data cache to reduce later spin up times.

source

',3))]),i("details",Y,[i("summary",null,[s[124]||(s[124]=i("a",{id:"ReefGuideAPI.within_thresholds-Union{Tuple{T}, Tuple{Val, Val, Rasters.Raster, T, T}} where T",href:"#ReefGuideAPI.within_thresholds-Union{Tuple{T}, Tuple{Val, Val, Rasters.Raster, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.within_thresholds")],-1)),s[125]||(s[125]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[126]||(s[126]=n('
julia
within_thresholds(ctype::Val, data::Raster, lb::T, ub::T) where {T}

Apply in-bound constraints.

Notes

Why is this a simple one line function? Because we want to be able to cache results for each constraint type.

source

',5))])])}const ps=l(o,[["render",K]]);export{ls as __pageData,ps as default}; +) where {T<:GIWrap.Polygon}

Extract the individual lines between vertices that make up the outline of a polygon.

Returns

Vector of GeometryBasics.Line{2, Float64} with one line for each adjacent vertex pair in polygon.

source

`,5))]),i("details",W,[i("summary",null,[s[99]||(s[99]=i("a",{id:"ReefGuideAPI.port_buffer_mask-Tuple{DataFrames.DataFrame, Float64}",href:"#ReefGuideAPI.port_buffer_mask-Tuple{DataFrames.DataFrame, Float64}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.port_buffer_mask")],-1)),s[100]||(s[100]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[101]||(s[101]=n('
julia
port_buffer_mask(gdf::DataFrame, dist::Float64; unit::String="NM")

Create a masking buffer around indicated port locations.

Arguments

source

',5))]),i("details",N,[i("summary",null,[s[102]||(s[102]=i("a",{id:"ReefGuideAPI.remove_rugosity-NTuple{4, Any}",href:"#ReefGuideAPI.remove_rugosity-NTuple{4, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.remove_rugosity")],-1)),s[103]||(s[103]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[104]||(s[104]=n('
julia
remove_rugosity(reg, criteria, lbs, ubs)

Remove rugosity layer from consideration if region is not Townsville. Rugosity data currently only exists for the Townsville region.

source

',3))]),i("details",H,[i("summary",null,[s[105]||(s[105]=i("a",{id:"ReefGuideAPI.rotate_geom-Tuple{Any, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}",href:"#ReefGuideAPI.rotate_geom-Tuple{Any, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.rotate_geom")],-1)),s[106]||(s[106]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[107]||(s[107]=n(`
julia
rotate_geom(
+    geom,
+    degrees::Float64,
+    target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat
+)

Rotate target geom by degrees rotation in clockwise direction. target_crs is applied to output geometry.

Returns

Rotated geometry.

source

`,5))]),i("details",$,[i("summary",null,[s[108]||(s[108]=i("a",{id:"ReefGuideAPI.rotate_polygon-Tuple{Any, Any, Any}",href:"#ReefGuideAPI.rotate_polygon-Tuple{Any, Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.rotate_polygon")],-1)),s[109]||(s[109]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[110]||(s[110]=i("p",null,"Rotate the polygon by the given angle about its center.",-1)),s[111]||(s[111]=i("p",null,[i("a",{href:"https://github.com/open-AIMS/ReefGuideAPI.jl/blob/aa4c0921565db4a6bfff4662e5b5e4220d4c4723/src/site_assessment/geom_ops.jl#L47",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",J,[i("summary",null,[s[112]||(s[112]=i("a",{id:"ReefGuideAPI.setup_regional_data-Tuple{Dict}",href:"#ReefGuideAPI.setup_regional_data-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.setup_regional_data")],-1)),s[113]||(s[113]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[114]||(s[114]=n('
julia
setup_regional_data(config::Dict)

Load regional data to act as an in-memory cache.

Arguments

Returns

OrderedDict of RegionalCriteria for each region.

source

',7))]),i("details",Q,[i("summary",null,[s[115]||(s[115]=i("a",{id:"ReefGuideAPI.tile_size-Tuple{Dict}",href:"#ReefGuideAPI.tile_size-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.tile_size")],-1)),s[116]||(s[116]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[117]||(s[117]=n('
julia
tile_size(config::Dict)::Tuple

Retrieve the configured size of map tiles in pixels (width and height / lon and lat).

source

',3))]),i("details",X,[i("summary",null,[s[118]||(s[118]=i("a",{id:"ReefGuideAPI.valid_lonlat_inds-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T",href:"#ReefGuideAPI.valid_lonlat_inds-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.valid_lonlat_inds")],-1)),s[119]||(s[119]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[120]||(s[120]=n('
julia
valid_lonlat_inds(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Retrieve the indices of valid data for a region.

Arguments

Returns

Tuple{Vector{Int64}, Vector{Int64}}, of lon and lat indices.

source

',7))]),i("details",Z,[i("summary",null,[s[121]||(s[121]=i("a",{id:"ReefGuideAPI.valid_pixel_positions-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T",href:"#ReefGuideAPI.valid_pixel_positions-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.valid_pixel_positions")],-1)),s[122]||(s[122]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[123]||(s[123]=n('
julia
valid_pixel_positions(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Obtain the pixel positions of valid data.

Intended for use in applications similar to ImageryLayer - client side pixel filter.

Arguments

source

',6))]),i("details",Y,[i("summary",null,[s[124]||(s[124]=i("a",{id:"ReefGuideAPI.warmup_cache-Tuple{String}",href:"#ReefGuideAPI.warmup_cache-Tuple{String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.warmup_cache")],-1)),s[125]||(s[125]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[126]||(s[126]=n('
julia
warmup_cache(config_path::String)

Invokes warm up of regional data cache to reduce later spin up times.

source

',3))]),i("details",K,[i("summary",null,[s[127]||(s[127]=i("a",{id:"ReefGuideAPI.within_thresholds-Union{Tuple{T}, Tuple{Val, Val, Rasters.Raster, T, T}} where T",href:"#ReefGuideAPI.within_thresholds-Union{Tuple{T}, Tuple{Val, Val, Rasters.Raster, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.within_thresholds")],-1)),s[128]||(s[128]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[129]||(s[129]=n('
julia
within_thresholds(ctype::Val, data::Raster, lb::T, ub::T) where {T}

Apply in-bound constraints.

Notes

Why is this a simple one line function? Because we want to be able to cache results for each constraint type.

source

',5))])])}const rs=l(h,[["render",ss]]);export{ps as __pageData,rs as default}; diff --git a/dev/assets/app.IVjkfSMU.js b/dev/assets/app.DWRAVX01.js similarity index 95% rename from dev/assets/app.IVjkfSMU.js rename to dev/assets/app.DWRAVX01.js index 0a9dd0a..ba59e77 100644 --- a/dev/assets/app.IVjkfSMU.js +++ b/dev/assets/app.DWRAVX01.js @@ -1 +1 @@ -import{R as p}from"./chunks/theme.CHEpmyUw.js";import{R as o,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,af as v,d as P,u as R,v as w,s as y,ag as C,ah as b,ai as E,a4 as S}from"./chunks/framework.BvdfcH24.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(p),T=P({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(),b(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=j(),a=_();a.provide(c,e);const t=l(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:h}),{app:a,router:e,data:t}}function _(){return g(T)}function j(){let e=o,a;return A(t=>{let n=v(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{D as createApp}; +import{R as p}from"./chunks/theme._B5YJXUN.js";import{R as o,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,af as v,d as P,u as R,v as w,s as y,ag as C,ah as b,ai as E,a4 as S}from"./chunks/framework.BvdfcH24.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(p),T=P({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(),b(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=j(),a=_();a.provide(c,e);const t=l(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:h}),{app:a,router:e,data:t}}function _(){return g(T)}function j(){let e=o,a;return A(t=>{let n=v(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{D as createApp}; diff --git a/dev/assets/chunks/@localSearchIndexroot.BIq-6JjD.js b/dev/assets/chunks/@localSearchIndexroot.BIq-6JjD.js new file mode 100644 index 0000000..b416742 --- /dev/null +++ b/dev/assets/chunks/@localSearchIndexroot.BIq-6JjD.js @@ -0,0 +1 @@ +const e='{"documentCount":20,"nextId":20,"documentIds":{"0":"/ReefGuideAPI.jl/dev/api#api","1":"/ReefGuideAPI.jl/dev/docker#Docker-build-and-run","2":"/ReefGuideAPI.jl/dev/docker#Mounting-files-and-required-data","3":"/ReefGuideAPI.jl/dev/docker#To-build-from-src-files-using-Docker","4":"/ReefGuideAPI.jl/dev/docker#To-build-from-src-files-using-Docker-Compose","5":"/ReefGuideAPI.jl/dev/docker#To-run-with-mounted-files-(launch-server)-using-Docker","6":"/ReefGuideAPI.jl/dev/docker#To-run-with-mounted-files-(launch-server)-using-Docker-Compose","7":"/ReefGuideAPI.jl/dev/docker#To-run-with-mounted-files-(interactive-shell)-using-Docker","8":"/ReefGuideAPI.jl/dev/getting_started#Getting-Started","9":"/ReefGuideAPI.jl/dev/getting_started#setup","10":"/ReefGuideAPI.jl/dev/getting_started#JWT-Auth-configuration","11":"/ReefGuideAPI.jl/dev/getting_started#Auth-TODOs","12":"/ReefGuideAPI.jl/dev/getting_started#quickstart","13":"/ReefGuideAPI.jl/dev/getting_started#Dynamic-COG-generation","14":"/ReefGuideAPI.jl/dev/getting_started#Simple-Slippy-Tiles","15":"/ReefGuideAPI.jl/dev/getting_started#Development-setup","16":"/ReefGuideAPI.jl/dev/getting_started#Performance-notes","17":"/ReefGuideAPI.jl/dev/getting_started#Reef-edge-alignment-for-site-searching","18":"/ReefGuideAPI.jl/dev/getting_started#Parquet-assessment-additional-setup","19":"/ReefGuideAPI.jl/dev/#reefguideapi-jl"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,640],"1":[4,1,45],"2":[5,4,54],"3":[7,4,7],"4":[8,4,7],"5":[9,4,8],"6":[10,4,6],"7":[9,4,31],"8":[2,1,1],"9":[1,2,93],"10":[3,2,73],"11":[2,5,8],"12":[1,2,95],"13":[3,2,17],"14":[3,2,22],"15":[2,2,71],"16":[2,2,49],"17":[6,2,94],"18":[4,8,51],"19":[2,1,8]},"averageFieldLength":[4.2,2.85,69],"storedFields":{"0":{"title":"API","titles":[]},"1":{"title":"Docker build and run","titles":[]},"2":{"title":"Mounting files and required data","titles":["Docker build and run"]},"3":{"title":"To build from src files using Docker","titles":["Docker build and run"]},"4":{"title":"To build from src files using Docker Compose","titles":["Docker build and run"]},"5":{"title":"To run with mounted files (launch server) using Docker","titles":["Docker build and run"]},"6":{"title":"To run with mounted files (launch server) using Docker Compose","titles":["Docker build and run"]},"7":{"title":"To run with mounted files (interactive shell) using Docker","titles":["Docker build and run"]},"8":{"title":"Getting Started","titles":[]},"9":{"title":"Setup","titles":["Getting Started"]},"10":{"title":"JWT Auth configuration","titles":["Getting Started"]},"11":{"title":"Auth TODOs","titles":["Getting Started","JWT Auth configuration"]},"12":{"title":"Quickstart","titles":["Getting Started"]},"13":{"title":"Dynamic COG generation","titles":["Getting Started"]},"14":{"title":"Simple Slippy Tiles","titles":["Getting Started"]},"15":{"title":"Development setup","titles":["Getting Started"]},"16":{"title":"Performance notes","titles":["Getting Started"]},"17":{"title":"Reef edge alignment for site searching","titles":["Getting Started"]},"18":{"title":"Parquet assessment additional setup","titles":["Getting Started","Reef edge alignment for site searching"]},"19":{"title":"ReefGuideAPI.jl","titles":[]}},"dirtCount":0,"index":[["$",{"2":{"15":2}}],["json",{"2":{"10":2}}],["jwks",{"2":{"10":2}}],["jwts",{"2":{"10":1}}],["jwt",{"0":{"10":1},"1":{"11":1},"2":{"10":6}}],["jl",{"0":{"19":1},"2":{"1":2,"2":1,"15":2}}],["julia>",{"2":{"15":2}}],["juliausing",{"2":{"7":1,"12":1}}],["juliawithin",{"2":{"0":1}}],["juliawarmup",{"2":{"0":1}}],["juliavalid",{"2":{"0":2}}],["juliatile",{"2":{"0":1}}],["juliasetup",{"2":{"0":1}}],["juliarotate",{"2":{"0":1}}],["juliaremove",{"2":{"0":1}}],["juliaport",{"2":{"0":1}}],["juliapolygon",{"2":{"0":1}}],["juliaparse",{"2":{"0":1}}],["juliaoutput",{"2":{"0":1}}],["julialarge",{"2":{"0":1}}],["julialine",{"2":{"0":2}}],["julianearest",{"2":{"0":1}}],["julian",{"2":{"0":1}}],["juliamove",{"2":{"0":1}}],["juliameters",{"2":{"0":1}}],["juliamasked",{"2":{"0":1}}],["juliamake",{"2":{"0":1}}],["juliainitial",{"2":{"0":2}}],["juliaidentify",{"2":{"0":3}}],["juliaget",{"2":{"0":1}}],["juliagenerate",{"2":{"0":1}}],["juliafrom",{"2":{"0":1}}],["juliafind",{"2":{"0":1}}],["juliafilter",{"2":{"0":3}}],["juliadegrees",{"2":{"0":1}}],["juliacriteria",{"2":{"0":1}}],["juliacreate",{"2":{"0":1}}],["juliaclosest",{"2":{"0":1}}],["juliaassess",{"2":{"0":2}}],["juliaapply",{"2":{"0":1}}],["julia",{"2":{"0":4,"1":1,"7":2,"9":1,"12":1,"15":4}}],["known",{"2":{"10":1}}],["key",{"2":{"10":2}}],["keep",{"2":{"0":3}}],["km",{"2":{"0":1}}],["kilometers",{"2":{"0":1}}],["8",{"2":{"0":1,"12":1,"14":1,"16":1}}],["8000",{"2":{"0":1,"5":2,"13":1,"14":1}}],["7",{"2":{"0":1}}],["7844",{"2":{"0":1}}],["4",{"2":{"0":1,"12":1,"16":1}}],["40",{"2":{"0":2,"13":1,"14":1}}],["5",{"2":{"0":2}}],["qp",{"2":{"0":2}}],["qc",{"2":{"0":1}}],["quickstart",{"0":{"12":1},"2":{"15":1}}],["queries",{"2":{"0":1}}],["query",{"2":{"0":5}}],["quot",{"2":{"0":6,"17":4}}],["quality",{"2":{"0":1}}],["9",{"2":{"0":2,"13":1,"14":1}}],["higher",{"2":{"12":1,"16":1}}],["highest",{"2":{"0":11}}],["how",{"2":{"2":1,"12":1,"16":1}}],["horizontal",{"2":{"0":6}}],["health",{"2":{"11":1}}],["header",{"2":{"10":1}}],["height",{"2":{"0":1}}],["helper",{"2":{"0":1}}],["have",{"2":{"2":2,"17":1}}],["has",{"2":{"1":1}}],["hardcoded",{"2":{"0":1}}],["handle",{"2":{"0":1}}],["https",{"2":{"0":1,"9":1,"10":3}}],["231",{"2":{"14":1}}],["256",{"2":{"0":2,"9":2}}],["2",{"2":{"0":11,"9":1,"12":1,"16":1}}],["=20000",{"2":{"0":1}}],["=",{"2":{"0":5,"9":6,"10":3,"12":1,"18":2}}],["3",{"2":{"14":1}}],["39",{"2":{"0":3}}],["33",{"2":{"0":3}}],["environment",{"2":{"15":1}}],["environmental",{"2":{"0":2}}],["enviroment",{"2":{"15":1}}],["env",{"2":{"12":1}}],["ensure",{"2":{"11":1}}],["enabled",{"2":{"10":1}}],["enable",{"2":{"10":1,"12":1}}],["entrypoint=",{"2":{"7":1}}],["endpoints",{"2":{"10":1}}],["endpoint",{"2":{"0":1,"10":2}}],["epsg",{"2":{"0":3}}],["e",{"2":{"0":4,"7":1,"15":1,"17":1,"18":1}}],["exactly",{"2":{"10":1}}],["examples",{"2":{"0":2}}],["example",{"2":{"0":1,"13":1,"14":1}}],["expected",{"2":{"10":1}}],["expect",{"2":{"10":1}}],["extract",{"2":{"0":1}}],["extent",{"2":{"0":2}}],["exists",{"2":{"0":3}}],["excludes",{"2":{"2":1}}],["exclude",{"2":{"0":1}}],["excluded",{"2":{"0":1}}],["edges",{"2":{"0":6,"17":2,"18":1}}],["edge",{"0":{"17":1},"1":{"18":1},"2":{"0":17,"17":2}}],["each",{"2":{"0":17}}],["east",{"2":{"0":1}}],["vs",{"2":{"15":1}}],["view",{"2":{"1":1}}],["viewing",{"2":{"0":1}}],["via",{"2":{"0":1}}],["versions",{"2":{"1":1}}],["vertex",{"2":{"0":1,"17":2}}],["vertices",{"2":{"0":1}}],["vertical",{"2":{"0":2}}],["vector",{"2":{"0":26,"17":1}}],["v",{"2":{"0":3,"5":1,"7":1}}],["val",{"2":{"0":1}}],["validate",{"2":{"10":1}}],["valid",{"2":{"0":4,"10":1,"18":2}}],["values",{"2":{"0":2,"12":1,"16":1}}],["value",{"2":{"0":2}}],["variables",{"2":{"0":2}}],["vary",{"2":{"0":2}}],["139",{"2":{"14":1}}],["127",{"2":{"13":1,"14":1}}],["10",{"2":{"12":1,"16":1}}],["1a",{"2":{"9":1}}],["14838",{"2":{"0":2}}],["14756",{"2":{"0":2}}],["15",{"2":{"0":1,"12":1,"16":1}}],["1",{"2":{"0":6,"9":1,"12":1,"13":1,"14":1}}],["unsuitable",{"2":{"18":1}}],["unit",{"2":{"0":3}}],["units",{"2":{"0":1}}],["union",{"2":{"0":10}}],["url",{"2":{"13":1,"14":1}}],["ub",{"2":{"0":5}}],["ubs",{"2":{"0":1}}],["ub=",{"2":{"0":1}}],["up",{"2":{"0":3,"4":1,"6":1,"12":2,"16":1}}],["upper",{"2":{"0":3}}],["uint8",{"2":{"0":1}}],["usual",{"2":{"9":1}}],["using",{"0":{"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":4,"18":1}}],["use",{"2":{"0":3,"7":1,"9":2,"17":2}}],["used",{"2":{"0":10,"17":1,"18":1}}],["user",{"2":{"0":1,"18":1}}],["0",{"2":{"0":42,"13":7,"14":9}}],["purposes",{"2":{"12":1}}],["public",{"2":{"10":2}}],["published",{"2":{"1":1}}],["publish",{"2":{"1":1}}],["please",{"2":{"2":1}}],["pay",{"2":{"10":1}}],["page",{"2":{"1":1,"12":1}}],["packages",{"2":{"1":1}}],["package",{"2":{"1":2,"2":1}}],["path",{"2":{"0":3,"9":1}}],["pair",{"2":{"0":1}}],["parquet",{"0":{"18":1},"2":{"18":1}}],["parallel",{"2":{"12":1}}],["parameters",{"2":{"0":2}}],["parsed",{"2":{"0":1}}],["parse",{"2":{"0":2}}],["parses",{"2":{"0":1}}],["provided",{"2":{"17":1}}],["provides",{"2":{"10":1}}],["project=",{"2":{"12":1,"15":1}}],["project",{"2":{"9":1,"15":2}}],["processing",{"2":{"17":1}}],["process",{"2":{"1":1}}],["proportion",{"2":{"0":2}}],["preferably",{"2":{"12":1,"16":1}}],["prepped",{"2":{"9":2}}],["prepared",{"2":{"0":1}}],["pre",{"2":{"0":1}}],["prioritising",{"2":{"0":2}}],["p",{"2":{"0":2,"5":1}}],["possibly",{"2":{"17":1}}],["positions",{"2":{"0":3}}],["positive",{"2":{"0":1}}],["port",{"2":{"0":4}}],["potential",{"2":{"0":8,"17":2,"18":1}}],["points",{"2":{"0":5}}],["point",{"2":{"0":11}}],["polygons",{"2":{"0":10,"17":4}}],["polygon",{"2":{"0":25,"17":2}}],["performance",{"0":{"16":1},"2":{"0":2,"12":1}}],["perform",{"2":{"0":5}}],["per",{"2":{"0":6}}],["pixel",{"2":{"0":25,"17":1}}],["pixels",{"2":{"0":25,"17":3,"18":3}}],["pix",{"2":{"0":2}}],["based",{"2":{"18":1}}],["bash$",{"2":{"15":1}}],["bashjulia",{"2":{"12":1}}],["bashdocker",{"2":{"3":1,"4":1,"5":1,"6":1,"7":1}}],["block",{"2":{"9":1}}],["but",{"2":{"12":1,"16":1}}],["build",{"0":{"1":1,"3":1,"4":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"1":2,"3":1,"4":1}}],["buff",{"2":{"0":3}}],["buffered",{"2":{"0":1,"17":1}}],["buffer",{"2":{"0":13}}],["b",{"2":{"0":2}}],["bitvector",{"2":{"0":1}}],["bitmatrix",{"2":{"0":1}}],["bbox",{"2":{"0":2}}],["by",{"2":{"0":5,"9":1,"17":2}}],["been",{"2":{"17":1}}],["best",{"2":{"12":1}}],["bearer",{"2":{"10":1}}],["because",{"2":{"0":1}}],["begin",{"2":{"0":1}}],["be",{"2":{"0":8,"1":1,"9":1,"10":3,"12":3,"15":1,"16":2,"17":5,"18":3}}],["before",{"2":{"0":1,"17":1}}],["below",{"2":{"0":1,"2":1,"15":1}}],["between",{"2":{"0":6,"15":1}}],["boolean",{"2":{"0":2}}],["bool",{"2":{"0":1,"10":1,"17":1}}],["bottom",{"2":{"0":2}}],["bound",{"2":{"0":3}}],["bounding",{"2":{"0":2}}],["bounds",{"2":{"0":5}}],["box",{"2":{"0":26}}],["nautical",{"2":{"0":1}}],["named",{"2":{"2":1,"9":1}}],["namedtuple",{"2":{"0":2}}],["name",{"2":{"0":4,"17":1}}],["names=depth",{"2":{"0":1}}],["names",{"2":{"0":2}}],["nm",{"2":{"0":2}}],["necessary",{"2":{"15":1}}],["needing",{"2":{"1":1}}],["new",{"2":{"0":3}}],["neighbor",{"2":{"0":2}}],["nearest",{"2":{"0":8,"17":1}}],["negative",{"2":{"0":1}}],["now",{"2":{"15":1}}],["not",{"2":{"0":1,"11":1}}],["note",{"2":{"0":1,"2":1,"9":1,"15":1}}],["notes",{"0":{"16":1},"2":{"0":3}}],["nothing",{"2":{"0":2}}],["no",{"2":{"0":1}}],["north",{"2":{"0":1}}],["number",{"2":{"0":6,"9":1}}],["n",{"2":{"0":9}}],["false",{"2":{"0":1,"9":1,"10":1}}],["far",{"2":{"0":2}}],["further",{"2":{"0":1}}],["function",{"2":{"0":9}}],["fn",{"2":{"0":2}}],["four",{"2":{"12":1,"16":1}}],["found",{"2":{"0":2}}],["following",{"2":{"10":1,"17":1}}],["folder",{"2":{"2":2}}],["form",{"2":{"0":1,"12":1}}],["format",{"2":{"0":2,"10":1,"17":1}}],["for",{"0":{"17":1},"1":{"18":1},"2":{"0":47,"7":1,"10":1,"12":2,"17":1,"18":2,"19":1}}],["first",{"2":{"10":1,"18":1}}],["files",{"0":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":1,"2":3,"9":1}}],["file",{"2":{"0":8,"2":2,"9":3,"15":2}}],["filtered",{"2":{"18":1}}],["filter",{"2":{"0":7}}],["findall",{"2":{"17":1}}],["find",{"2":{"0":4}}],["flats",{"2":{"0":4}}],["flag",{"2":{"0":2}}],["float64=0",{"2":{"0":4}}],["float64=15",{"2":{"0":4}}],["float64",{"2":{"0":43,"18":1}}],["from",{"0":{"3":1,"4":1},"2":{"0":18,"12":1,"16":1,"17":1}}],["dynamic",{"0":{"13":1}}],["downtime",{"2":{"15":1}}],["do",{"2":{"12":1,"16":1}}],["dockerfile",{"2":{"1":1}}],["docker",{"0":{"1":1,"3":1,"4":1,"5":1,"6":1,"7":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"1":1,"2":1}}],["due",{"2":{"2":1}}],["df",{"2":{"0":6}}],["displays",{"2":{"9":1,"12":1}}],["disables",{"2":{"9":1}}],["distance",{"2":{"0":6}}],["distances",{"2":{"0":2}}],["dist",{"2":{"0":25}}],["directory",{"2":{"0":2,"2":1,"15":1}}],["direction",{"2":{"0":2}}],["dir",{"2":{"0":3,"9":3}}],["diminishing",{"2":{"12":1,"16":1}}],["dimension",{"2":{"0":2}}],["dimensions",{"2":{"0":3}}],["dims=",{"2":{"0":1}}],["dims",{"2":{"0":1}}],["different",{"2":{"0":1}}],["dictionary",{"2":{"0":1}}],["dict",{"2":{"0":6,"18":1}}],["development",{"0":{"15":1}}],["dev",{"2":{"12":1,"15":3}}],["debug",{"2":{"9":2,"12":2}}],["defined",{"2":{"9":1}}],["defaults",{"2":{"9":2}}],["default=0",{"2":{"0":1}}],["default",{"2":{"0":6,"15":1,"18":1}}],["deg",{"2":{"0":1}}],["degrees",{"2":{"0":11}}],["degree",{"2":{"0":11}}],["depth=",{"2":{"0":1,"13":1,"14":1}}],["desired",{"2":{"0":4}}],["datasets>",{"2":{"9":1}}],["dataset",{"2":{"9":1}}],["data",{"0":{"2":1},"2":{"0":23,"2":4,"5":2,"7":3,"9":4,"15":2}}],["dataframe",{"2":{"0":34}}],["root",{"2":{"15":2}}],["route",{"2":{"11":1}}],["rotating",{"2":{"0":1}}],["rotation",{"2":{"0":19}}],["rotations",{"2":{"0":13,"17":1}}],["rotated",{"2":{"0":2}}],["rotate",{"2":{"0":5}}],["rot",{"2":{"0":9}}],["rm",{"2":{"7":1}}],["running",{"2":{"2":1}}],["run",{"0":{"1":1,"5":1,"6":1,"7":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"1":1,"5":1,"7":1}}],["rugosity",{"2":{"0":4}}],["rugosity=0",{"2":{"0":1,"14":1}}],["ruleset",{"2":{"0":8}}],["range",{"2":{"12":1,"16":1}}],["rand",{"2":{"0":1}}],["rather",{"2":{"0":2,"17":1}}],["rast",{"2":{"0":3}}],["rasters",{"2":{"0":2}}],["rasterstack",{"2":{"0":9}}],["raster",{"2":{"0":30,"17":3}}],["rtype=slopes",{"2":{"14":1}}],["rtype",{"2":{"0":3}}],["right",{"2":{"0":2}}],["rst",{"2":{"0":12}}],["repl",{"2":{"15":1}}],["repository",{"2":{"1":1}}],["revise",{"2":{"15":1}}],["reversed",{"2":{"0":1}}],["ready",{"2":{"7":1}}],["reaching",{"2":{"0":1}}],["reduce",{"2":{"0":1,"12":1,"15":1,"16":1}}],["remove",{"2":{"0":2}}],["require",{"2":{"17":1}}],["requires",{"2":{"2":1}}],["required",{"0":{"2":1},"2":{"0":1,"2":2,"17":1}}],["request",{"2":{"0":2}}],["requested",{"2":{"0":5,"12":1,"16":1}}],["reg",{"2":{"0":4}}],["region=cairns",{"2":{"14":1}}],["regional",{"2":{"0":4,"9":2}}],["regionalcriteria",{"2":{"0":3}}],["region",{"2":{"0":20,"17":1}}],["restart",{"2":{"15":1}}],["resolvable",{"2":{"10":1}}],["resolution",{"2":{"0":4}}],["resampled",{"2":{"0":4}}],["resample",{"2":{"0":2}}],["res",{"2":{"0":7}}],["results",{"2":{"0":2}}],["result",{"2":{"0":1}}],["reference",{"2":{"0":1}}],["reload",{"2":{"15":1}}],["rel",{"2":{"0":2}}],["reefguide",{"2":{"3":2,"4":1,"5":2,"6":1,"7":3}}],["reefguideapi",{"0":{"19":1},"2":{"0":43,"1":2,"2":1,"7":3,"12":3}}],["reefs",{"2":{"0":1}}],["reeftype",{"2":{"0":1}}],["reef",{"0":{"17":1},"1":{"18":1},"2":{"0":35,"9":1,"17":7,"19":1}}],["retaining",{"2":{"0":1}}],["return",{"2":{"0":2,"10":1,"17":1}}],["returned",{"2":{"0":2}}],["returns",{"2":{"0":27,"12":1,"16":1}}],["retrieved",{"2":{"10":1}}],["retrieve",{"2":{"0":5}}],["mkdir",{"2":{"15":1}}],["mpa",{"2":{"9":2}}],["multiple",{"2":{"12":1}}],["multipolygon",{"2":{"0":1}}],["must",{"2":{"0":2,"18":2}}],["mode",{"2":{"9":1}}],["mounted",{"0":{"5":1,"6":1,"7":1}}],["mounting",{"0":{"2":1}}],["move",{"2":{"0":3}}],["most",{"2":{"0":2}}],["miles",{"2":{"0":1}}],["middleware",{"2":{"0":3}}],["min",{"2":{"0":4}}],["messages",{"2":{"12":1}}],["mentioned",{"2":{"2":1}}],["means",{"2":{"1":1}}],["memory",{"2":{"0":1}}],["method",{"2":{"0":2,"17":1}}],["meters",{"2":{"0":9}}],["met",{"2":{"0":1}}],["meet",{"2":{"0":1}}],["main",{"2":{"12":1}}],["many",{"2":{"12":1,"16":1}}],["management",{"2":{"0":4,"17":1}}],["may",{"2":{"0":1}}],["matrix",{"2":{"0":5}}],["matching",{"2":{"17":1}}],["match",{"2":{"0":2,"10":1}}],["make",{"2":{"0":2}}],["mackay",{"2":{"0":2}}],["map",{"2":{"0":4}}],["mapping",{"2":{"0":1}}],["masking",{"2":{"0":2,"18":1}}],["masked",{"2":{"0":2,"17":1}}],["mask",{"2":{"0":13}}],["maximum",{"2":{"0":1}}],["maxmimum",{"2":{"0":1}}],["max",{"2":{"0":6}}],["works",{"2":{"17":1}}],["working",{"2":{"2":1}}],["wkt",{"2":{"10":4}}],["web",{"2":{"10":1}}],["well",{"2":{"10":1}}],["we",{"2":{"0":1,"2":1}}],["west",{"2":{"0":1}}],["way",{"2":{"9":1}}],["want",{"2":{"0":1}}],["warm",{"2":{"0":1}}],["warmup",{"2":{"0":1}}],["was",{"2":{"0":1}}],["width",{"2":{"0":1}}],["will",{"2":{"0":2,"1":1,"7":1,"12":2,"15":1,"16":1}}],["without",{"2":{"1":1}}],["with",{"0":{"5":1,"6":1,"7":1},"2":{"0":13,"1":1,"2":1,"12":3,"16":2,"17":2}}],["within",{"2":{"0":7,"18":1}}],["writing",{"2":{"0":2,"12":1,"16":1}}],["writes",{"2":{"0":1}}],["write",{"2":{"0":2,"12":2,"16":2}}],["wrappers",{"2":{"0":7}}],["whitsunday",{"2":{"17":2}}],["which",{"2":{"0":2,"10":2}}],["why",{"2":{"0":1}}],["when",{"2":{"0":3,"2":1,"9":1,"12":1,"16":1}}],["where",{"2":{"0":13,"7":1,"10":1}}],["optional",{"2":{"9":3}}],["open",{"2":{"9":1}}],["opperating",{"2":{"0":1}}],["over",{"2":{"0":2}}],["overlapping",{"2":{"0":1}}],["outline",{"2":{"0":3}}],["outlines",{"2":{"0":5}}],["output",{"2":{"0":9}}],["outside",{"2":{"0":2}}],["out",{"2":{"0":6,"12":1,"16":1}}],["ones",{"2":{"0":2}}],["one",{"2":{"0":3,"12":1}}],["only",{"2":{"0":4,"17":1}}],["on",{"2":{"0":2,"1":1,"18":1}}],["object",{"2":{"0":3}}],["obtain",{"2":{"0":3}}],["orig",{"2":{"0":1}}],["original",{"2":{"0":1}}],["ordereddict",{"2":{"0":1}}],["order",{"2":{"0":2}}],["or",{"2":{"0":8,"17":2}}],["of",{"2":{"0":64,"1":2,"2":1,"9":2,"17":4}}],["ideally",{"2":{"12":1,"16":1}}],["identifies",{"2":{"0":2}}],["identified",{"2":{"0":7}}],["identifying",{"2":{"17":2}}],["identify",{"2":{"0":9,"17":2,"18":1}}],["image",{"2":{"1":1}}],["imagerylayer",{"2":{"0":1}}],["its",{"2":{"0":1,"12":1}}],["it",{"2":{"0":1,"1":1,"2":1,"15":1}}],["if",{"2":{"0":3,"12":1}}],["issuer",{"2":{"10":4}}],["iss",{"2":{"10":2}}],["is",{"2":{"0":17,"2":2,"7":1,"9":1,"11":1,"15":1,"17":1}}],["inaccurate",{"2":{"17":1}}],["infiltrator",{"2":{"15":1}}],["info",{"2":{"9":1,"12":1}}],["include",{"2":{"2":1,"15":1}}],["includes",{"2":{"0":1}}],["instantiate",{"2":{"9":1}}],["instance",{"2":{"1":1}}],["installation",{"2":{"1":1}}],["invokes",{"2":{"0":1}}],["input",{"2":{"0":10,"2":1}}],["inds",{"2":{"0":2}}],["individual",{"2":{"0":1}}],["indices",{"2":{"0":5,"17":2}}],["indicate",{"2":{"0":4}}],["indicates",{"2":{"0":1}}],["indicated",{"2":{"0":2}}],["indicating",{"2":{"0":5,"9":1}}],["index",{"2":{"0":1}}],["initially",{"2":{"15":1}}],["initialize",{"2":{"9":1}}],["initial",{"2":{"0":12}}],["in",{"2":{"0":35,"2":4,"9":2,"10":1,"12":1,"15":2,"17":1,"18":1}}],["into",{"2":{"17":1}}],["int",{"2":{"0":9}}],["interactive",{"0":{"7":1},"2":{"7":1,"12":1}}],["interpolation",{"2":{"0":2}}],["intersect",{"2":{"0":2}}],["intended",{"2":{"0":5}}],["int64=1",{"2":{"0":1}}],["int64=2",{"2":{"0":3}}],["int64",{"2":{"0":15}}],["zeros",{"2":{"0":2}}],["zero",{"2":{"0":4}}],["z",{"2":{"0":4}}],["zoom",{"2":{"0":2}}],["your",{"2":{"2":1}}],["you",{"2":{"1":2,"2":1,"15":1}}],["ys",{"2":{"0":1}}],["y",{"2":{"0":19}}],["x26",{"2":{"13":1,"14":4}}],["xs",{"2":{"0":1}}],["x3c",{"2":{"0":4,"9":2}}],["x",{"2":{"0":22}}],["go",{"2":{"17":1}}],["guidance",{"2":{"9":1}}],["gbr",{"2":{"9":1}}],["gbrmpa",{"2":{"0":2,"17":1}}],["globe",{"2":{"0":1}}],["generation",{"0":{"13":1}}],["generate",{"2":{"0":3}}],["getting",{"0":{"8":1},"1":{"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1},"2":{"2":1}}],["get",{"2":{"0":1}}],["geojson",{"2":{"0":6}}],["geodataframe",{"2":{"0":4,"18":2}}],["geotiff",{"2":{"0":1}}],["geotiffs>",{"2":{"9":1}}],["geotiffs",{"2":{"0":1}}],["geoformattypes",{"2":{"0":7}}],["geometries",{"2":{"17":1}}],["geometry",{"2":{"0":11,"18":3}}],["geometrybasics",{"2":{"0":7}}],["geom",{"2":{"0":20}}],["greater",{"2":{"0":1}}],["gt",{"2":{"0":1,"10":1}}],["gdal",{"2":{"0":3}}],["gda2020",{"2":{"0":1}}],["gdf",{"2":{"0":14}}],["g",{"2":{"0":4,"7":1,"15":1,"17":1,"18":1}}],["github",{"2":{"9":1}}],["giwrap",{"2":{"0":3}}],["gi",{"2":{"0":7,"18":1}}],["given",{"2":{"0":8}}],["avoid",{"2":{"17":1}}],["available",{"2":{"2":1,"12":1}}],["away",{"2":{"17":1}}],["added",{"2":{"18":1}}],["additional",{"0":{"18":1}}],["additionally",{"2":{"10":1}}],["add",{"2":{"10":1,"15":1}}],["adjacent",{"2":{"0":1}}],["authorised",{"2":{"11":1}}],["authorization",{"2":{"10":1}}],["auth",{"0":{"10":1,"11":1},"1":{"11":1},"2":{"10":2}}],["aims",{"2":{"9":1}}],["act",{"2":{"0":1}}],["accuracy",{"2":{"0":2}}],["according",{"2":{"0":2}}],["able",{"2":{"0":1,"1":1}}],["about",{"2":{"0":1}}],["abs",{"2":{"0":1}}],["amp",{"2":{"0":4}}],["attention",{"2":{"10":1}}],["at",{"2":{"0":7,"12":2,"15":1,"16":1}}],["alignment",{"0":{"17":1},"1":{"18":1}}],["align",{"2":{"0":3,"17":1}}],["aligns",{"2":{"0":1}}],["all",{"2":{"0":2}}],["an",{"2":{"0":4,"1":2,"19":1}}],["analysis",{"2":{"0":4}}],["anticlockwise",{"2":{"0":3}}],["anti",{"2":{"0":1}}],["angle",{"2":{"0":17,"17":1}}],["and",{"0":{"1":1,"2":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":35,"1":1,"2":1,"7":1,"9":1,"10":2,"15":2,"17":2,"18":3}}],["argument",{"2":{"0":1}}],["arguments",{"2":{"0":23}}],["around",{"2":{"0":8}}],["area",{"2":{"0":3,"17":1}}],["are",{"2":{"0":12,"9":1,"12":1,"15":1}}],["assuming",{"2":{"15":1}}],["assumes",{"2":{"15":1}}],["assumed",{"2":{"2":1}}],["associated",{"2":{"1":1}}],["assessed",{"2":{"0":1}}],["assesses",{"2":{"0":1}}],["assessing",{"2":{"0":1}}],["assessments",{"2":{"19":1}}],["assessment",{"0":{"18":1},"2":{"0":5,"9":1}}],["assess",{"2":{"0":9,"13":1}}],["as",{"2":{"0":4,"2":1,"17":1,"18":2}}],["approach",{"2":{"0":2}}],["appear",{"2":{"0":1}}],["applications",{"2":{"0":1}}],["applied",{"2":{"0":6}}],["apply",{"2":{"0":11}}],["api",{"0":{"0":1},"2":{"10":2,"19":1}}],["a",{"2":{"0":43,"1":1,"2":3,"7":1,"9":1,"10":2,"12":2,"15":2,"17":1,"18":2}}],["testing",{"2":{"12":1}}],["tested",{"2":{"12":1,"16":1}}],["tty",{"2":{"7":1}}],["typically",{"2":{"0":1}}],["types",{"2":{"0":1}}],["type",{"2":{"0":5}}],["take",{"2":{"0":1}}],["targetted",{"2":{"0":1}}],["target",{"2":{"0":27,"3":1,"17":2}}],["two",{"2":{"0":2}}],["true",{"2":{"0":3,"10":2}}],["translates",{"2":{"0":1}}],["tip",{"2":{"12":1}}],["tiff",{"2":{"9":1}}],["times",{"2":{"0":2,"12":2,"16":2}}],["tiles",{"0":{"14":1},"2":{"0":1}}],["tile",{"2":{"0":23,"9":2,"14":1}}],["tuples",{"2":{"0":2}}],["tuple",{"2":{"0":20}}],["thread",{"2":{"12":1}}],["threads=4",{"2":{"12":1}}],["threads",{"2":{"0":3,"9":2,"12":4,"16":3}}],["threshold",{"2":{"0":10}}],["thresholds",{"2":{"0":17,"18":2}}],["this",{"2":{"0":3,"1":1,"2":1,"7":1,"9":1,"12":1,"16":1,"17":2}}],["than",{"2":{"0":3,"17":1}}],["that",{"2":{"0":17,"15":1,"17":2}}],["these",{"2":{"2":1,"9":1}}],["theshold",{"2":{"0":1}}],["their",{"2":{"0":2,"17":1}}],["the",{"2":{"0":89,"1":5,"2":6,"9":5,"10":9,"12":2,"15":10,"16":1,"17":4,"18":4}}],["t",{"2":{"0":23,"3":1}}],["todos",{"0":{"11":1}}],["token",{"2":{"10":1}}],["toml",{"2":{"0":1,"2":2,"7":1,"9":3,"10":2,"12":1,"15":1}}],["townsville",{"2":{"0":2,"17":2}}],["too",{"2":{"0":1}}],["top",{"2":{"0":4}}],["to",{"0":{"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":80,"1":2,"2":2,"9":7,"10":4,"12":5,"15":7,"16":4,"17":5,"18":1}}],["lb",{"2":{"0":5}}],["lbs",{"2":{"0":1}}],["lb=",{"2":{"0":1}}],["launches",{"2":{"15":1}}],["launch",{"0":{"5":1,"6":1},"2":{"2":1}}],["layer",{"2":{"0":1}}],["labelling",{"2":{"0":1}}],["large",{"2":{"0":1}}],["latest",{"2":{"1":1}}],["later",{"2":{"0":1}}],["latitudinal",{"2":{"0":1}}],["latitude",{"2":{"0":4}}],["lats",{"2":{"0":1}}],["lat",{"2":{"0":26,"18":1}}],["list",{"2":{"0":2}}],["line",{"2":{"0":18}}],["lines",{"2":{"0":13,"17":3}}],["least",{"2":{"12":2,"16":1}}],["leading",{"2":{"9":1}}],["level",{"2":{"0":1}}],["lengths",{"2":{"0":2}}],["length",{"2":{"0":7}}],["left",{"2":{"0":4}}],["lt",{"2":{"0":1,"10":1}}],["logs",{"2":{"9":1}}],["locally",{"2":{"2":1,"12":1,"16":1}}],["local",{"2":{"1":1}}],["located",{"2":{"0":1}}],["locations",{"2":{"0":8}}],["location",{"2":{"0":4,"9":3}}],["loaded",{"2":{"0":1,"15":1,"18":1}}],["load",{"2":{"0":1}}],["low",{"2":{"0":1}}],["lower",{"2":{"0":3}}],["lookup",{"2":{"0":6}}],["lonlat",{"2":{"0":2}}],["long",{"2":{"0":3}}],["longitudinal",{"2":{"0":1}}],["longitude",{"2":{"0":2}}],["lons",{"2":{"0":1}}],["lon",{"2":{"0":20,"18":2}}],["save",{"2":{"15":1}}],["sandbox",{"2":{"15":8}}],["same",{"2":{"0":1,"18":1}}],["slippy",{"0":{"14":1}}],["slope=0",{"2":{"0":1,"13":1,"14":1}}],["slopes",{"2":{"0":4,"13":1}}],["slope",{"2":{"0":1}}],["script",{"2":{"9":1}}],["scoring",{"2":{"0":6}}],["scores",{"2":{"0":2}}],["score",{"2":{"0":7}}],["shell",{"0":{"7":1},"2":{"7":1}}],["should",{"2":{"0":2,"9":1,"10":2,"12":1,"16":1,"17":4,"18":1}}],["src",{"0":{"3":1,"4":1},"2":{"3":1,"4":1,"6":1}}],["spatial",{"2":{"15":2}}],["spun",{"2":{"12":1}}],["spin",{"2":{"0":1}}],["specified",{"2":{"0":3,"17":2,"18":1}}],["small",{"2":{"0":2}}],["skip",{"2":{"0":1}}],["s",{"2":{"0":2}}],["symbol",{"2":{"0":4}}],["system",{"2":{"0":1}}],["some",{"2":{"9":3}}],["somewhere",{"2":{"0":1}}],["so",{"2":{"0":1}}],["south",{"2":{"0":1}}],["source",{"2":{"0":43}}],["supporting",{"2":{"19":1}}],["suitabiltiy",{"2":{"0":1}}],["suitability",{"2":{"0":5,"19":1}}],["suitable",{"2":{"0":5}}],["surr",{"2":{"0":7}}],["session",{"2":{"15":1}}],["seconds",{"2":{"12":1,"16":1}}],["second",{"2":{"10":1}}],["server",{"0":{"5":1,"6":1},"2":{"2":1,"7":1,"9":1,"12":2,"15":4}}],["separate",{"2":{"0":2}}],["segments",{"2":{"0":3}}],["seem",{"2":{"12":1,"16":1}}],["see",{"2":{"0":2}}],["searching",{"0":{"17":1},"1":{"18":1},"2":{"0":4}}],["search",{"2":{"0":40,"17":4}}],["setting",{"2":{"12":1,"16":1}}],["settings",{"2":{"0":1}}],["setup",{"0":{"9":1,"15":1,"18":1},"2":{"0":1}}],["sets",{"2":{"0":1}}],["set",{"2":{"0":3,"2":1,"12":1,"16":1}}],["simplify",{"2":{"17":1}}],["simplified",{"2":{"17":3}}],["simple",{"0":{"14":1},"2":{"0":1,"12":1}}],["similar",{"2":{"0":1}}],["size",{"2":{"0":9,"9":2}}],["side",{"2":{"0":15}}],["sites",{"2":{"0":14,"17":2,"18":1}}],["site",{"0":{"17":1},"1":{"18":1},"2":{"0":15}}],["state",{"2":{"12":1}}],["standardise",{"2":{"0":1}}],["started",{"0":{"8":1},"1":{"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1},"2":{"2":1}}],["starting",{"2":{"0":3}}],["start",{"2":{"0":5,"7":2,"12":2,"15":1}}],["stack",{"2":{"0":8}}],["steps",{"2":{"0":1,"15":1}}],["step",{"2":{"0":11,"9":1}}],["string=",{"2":{"0":1}}],["string",{"2":{"0":10}}],["chairmarks",{"2":{"15":1}}],["check",{"2":{"11":1}}],["cd",{"2":{"15":2}}],["c",{"2":{"9":1}}],["ctype",{"2":{"0":1}}],["claim",{"2":{"10":1}}],["client",{"2":{"0":1}}],["closest",{"2":{"0":5,"17":1}}],["clockwise",{"2":{"0":6}}],["centroid",{"2":{"0":4}}],["center",{"2":{"0":3}}],["centered",{"2":{"0":1}}],["current",{"2":{"12":1}}],["currently",{"2":{"0":3,"2":1,"9":1,"17":1}}],["custom",{"2":{"0":2}}],["cartesianindices",{"2":{"17":1}}],["cairns",{"2":{"13":1}}],["caching",{"2":{"9":1}}],["caches",{"2":{"15":1}}],["cache",{"2":{"0":8,"9":4}}],["called",{"2":{"2":1}}],["calculate",{"2":{"0":1}}],["calculated",{"2":{"0":1}}],["capricorn",{"2":{"0":2}}],["can",{"2":{"0":2,"1":1,"10":2,"17":1}}],["creating",{"2":{"9":1}}],["created",{"2":{"0":1,"9":1}}],["creates",{"2":{"0":1}}],["create",{"2":{"0":4,"15":2}}],["crit",{"2":{"0":3}}],["criteriabounds",{"2":{"0":3}}],["criteria",{"2":{"0":38,"18":1}}],["crs",{"2":{"0":16}}],["col",{"2":{"18":1}}],["column",{"2":{"0":3,"18":2}}],["columns",{"2":{"0":1,"18":1}}],["code",{"2":{"15":1}}],["codehttp",{"2":{"13":1,"14":1}}],["copy",{"2":{"15":1}}],["cooktown",{"2":{"13":1,"14":1}}],["coordinate",{"2":{"0":3}}],["coordinatereferencesystemformat",{"2":{"0":5}}],["coordinates",{"2":{"0":11,"18":1}}],["cog",{"0":{"13":1},"2":{"9":1,"12":1,"16":1}}],["cogs",{"2":{"0":1,"9":1,"12":1,"16":1}}],["com",{"2":{"9":1,"10":2}}],["commands",{"2":{"2":1}}],["compose",{"0":{"4":1,"6":1},"2":{"4":1,"6":1}}],["compiled",{"2":{"7":1}}],["compile",{"2":{"1":1}}],["comparison",{"2":{"0":1}}],["convention",{"2":{"9":1}}],["converted",{"2":{"17":1}}],["convert",{"2":{"0":2}}],["constraint",{"2":{"0":1}}],["constraints",{"2":{"0":1}}],["consideration",{"2":{"0":1}}],["controls",{"2":{"12":1,"16":1}}],["control",{"2":{"0":1}}],["containing",{"2":{"0":19}}],["configuration",{"0":{"10":1},"1":{"11":1},"2":{"0":1}}],["configured",{"2":{"0":2,"10":1,"12":1,"15":1,"16":1}}],["config",{"2":{"0":6,"2":3,"7":1,"9":2,"10":1,"12":2,"15":1,"16":1}}],["count",{"2":{"0":2}}],["corner",{"2":{"0":2}}],["corresponding",{"2":{"0":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/dev/assets/chunks/@localSearchIndexroot.Drtoz-t2.js b/dev/assets/chunks/@localSearchIndexroot.Drtoz-t2.js deleted file mode 100644 index ad29834..0000000 --- a/dev/assets/chunks/@localSearchIndexroot.Drtoz-t2.js +++ /dev/null @@ -1 +0,0 @@ -const e='{"documentCount":20,"nextId":20,"documentIds":{"0":"/ReefGuideAPI.jl/dev/api#api","1":"/ReefGuideAPI.jl/dev/docker#Docker-build-and-run","2":"/ReefGuideAPI.jl/dev/docker#Mounting-files-and-required-data","3":"/ReefGuideAPI.jl/dev/docker#To-build-from-src-files-using-Docker","4":"/ReefGuideAPI.jl/dev/docker#To-build-from-src-files-using-Docker-Compose","5":"/ReefGuideAPI.jl/dev/docker#To-run-with-mounted-files-(launch-server)-using-Docker","6":"/ReefGuideAPI.jl/dev/docker#To-run-with-mounted-files-(launch-server)-using-Docker-Compose","7":"/ReefGuideAPI.jl/dev/docker#To-run-with-mounted-files-(interactive-shell)-using-Docker","8":"/ReefGuideAPI.jl/dev/#reefguideapi-jl","9":"/ReefGuideAPI.jl/dev/getting_started#Getting-Started","10":"/ReefGuideAPI.jl/dev/getting_started#setup","11":"/ReefGuideAPI.jl/dev/getting_started#JWT-Auth-configuration","12":"/ReefGuideAPI.jl/dev/getting_started#Auth-TODOs","13":"/ReefGuideAPI.jl/dev/getting_started#quickstart","14":"/ReefGuideAPI.jl/dev/getting_started#Dynamic-COG-generation","15":"/ReefGuideAPI.jl/dev/getting_started#Simple-Slippy-Tiles","16":"/ReefGuideAPI.jl/dev/getting_started#Development-setup","17":"/ReefGuideAPI.jl/dev/getting_started#Performance-notes","18":"/ReefGuideAPI.jl/dev/getting_started#Reef-edge-alignment-for-site-searching","19":"/ReefGuideAPI.jl/dev/getting_started#Parquet-assessment-additional-setup"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,627],"1":[4,1,45],"2":[5,4,54],"3":[7,4,7],"4":[8,4,7],"5":[9,4,8],"6":[10,4,6],"7":[9,4,31],"8":[2,1,8],"9":[2,1,1],"10":[1,2,93],"11":[3,2,73],"12":[2,5,8],"13":[1,2,95],"14":[3,2,17],"15":[3,2,22],"16":[2,2,71],"17":[2,2,49],"18":[6,2,94],"19":[4,8,51]},"averageFieldLength":[4.2,2.85,68.35],"storedFields":{"0":{"title":"API","titles":[]},"1":{"title":"Docker build and run","titles":[]},"2":{"title":"Mounting files and required data","titles":["Docker build and run"]},"3":{"title":"To build from src files using Docker","titles":["Docker build and run"]},"4":{"title":"To build from src files using Docker Compose","titles":["Docker build and run"]},"5":{"title":"To run with mounted files (launch server) using Docker","titles":["Docker build and run"]},"6":{"title":"To run with mounted files (launch server) using Docker Compose","titles":["Docker build and run"]},"7":{"title":"To run with mounted files (interactive shell) using Docker","titles":["Docker build and run"]},"8":{"title":"ReefGuideAPI.jl","titles":[]},"9":{"title":"Getting Started","titles":[]},"10":{"title":"Setup","titles":["Getting Started"]},"11":{"title":"JWT Auth configuration","titles":["Getting Started"]},"12":{"title":"Auth TODOs","titles":["Getting Started","JWT Auth configuration"]},"13":{"title":"Quickstart","titles":["Getting Started"]},"14":{"title":"Dynamic COG generation","titles":["Getting Started"]},"15":{"title":"Simple Slippy Tiles","titles":["Getting Started"]},"16":{"title":"Development setup","titles":["Getting Started"]},"17":{"title":"Performance notes","titles":["Getting Started"]},"18":{"title":"Reef edge alignment for site searching","titles":["Getting Started"]},"19":{"title":"Parquet assessment additional setup","titles":["Getting Started","Reef edge alignment for site searching"]}},"dirtCount":0,"index":[["$",{"2":{"16":2}}],["json",{"2":{"11":2}}],["jwks",{"2":{"11":2}}],["jwts",{"2":{"11":1}}],["jwt",{"0":{"11":1},"1":{"12":1},"2":{"11":6}}],["jl",{"0":{"8":1},"2":{"1":2,"2":1,"16":2}}],["javascript",{"2":{"0":1}}],["julia>",{"2":{"16":2}}],["juliausing",{"2":{"7":1,"13":1}}],["juliawithin",{"2":{"0":1}}],["juliawarmup",{"2":{"0":1}}],["juliavalid",{"2":{"0":2}}],["juliatile",{"2":{"0":1}}],["juliasetup",{"2":{"0":1}}],["juliaremove",{"2":{"0":1}}],["juliaport",{"2":{"0":1}}],["juliapolygon",{"2":{"0":1}}],["juliaparse",{"2":{"0":1}}],["juliaoutput",{"2":{"0":1}}],["julialarge",{"2":{"0":1}}],["julialine",{"2":{"0":2}}],["julianearest",{"2":{"0":1}}],["julian",{"2":{"0":1}}],["juliamove",{"2":{"0":1}}],["juliameters",{"2":{"0":1}}],["juliamasked",{"2":{"0":1}}],["juliamake",{"2":{"0":1}}],["juliainitial",{"2":{"0":2}}],["juliaidentify",{"2":{"0":3}}],["juliaget",{"2":{"0":1}}],["juliagenerate",{"2":{"0":1}}],["juliafrom",{"2":{"0":1}}],["juliafind",{"2":{"0":1}}],["juliafilter",{"2":{"0":3}}],["juliadegrees",{"2":{"0":1}}],["juliacriteria",{"2":{"0":1}}],["juliacreate",{"2":{"0":1}}],["juliaclosest",{"2":{"0":1}}],["juliaassess",{"2":{"0":2}}],["juliaapply",{"2":{"0":1}}],["julia",{"2":{"0":4,"1":1,"7":2,"10":1,"13":1,"16":4}}],["known",{"2":{"11":1}}],["key",{"2":{"11":2}}],["keep",{"2":{"0":3}}],["km",{"2":{"0":1}}],["kilometers",{"2":{"0":1}}],["=",{"2":{"0":2,"10":6,"11":3,"13":1,"19":2}}],["=20000",{"2":{"0":1}}],["8",{"2":{"0":1,"13":1,"15":1,"17":1}}],["8000",{"2":{"0":1,"5":2,"14":1,"15":1}}],["7",{"2":{"0":1}}],["7844",{"2":{"0":1}}],["4",{"2":{"0":1,"13":1,"17":1}}],["40",{"2":{"0":2,"14":1,"15":1}}],["5",{"2":{"0":2}}],["3",{"2":{"15":1}}],["39",{"2":{"0":2}}],["33",{"2":{"0":3}}],["qp",{"2":{"0":2}}],["qc",{"2":{"0":1}}],["quickstart",{"0":{"13":1},"2":{"16":1}}],["queries",{"2":{"0":1}}],["query",{"2":{"0":5}}],["quot",{"2":{"0":6,"18":4}}],["quality",{"2":{"0":1}}],["9",{"2":{"0":2,"14":1,"15":1}}],["😕",{"2":{"0":1}}],["higher",{"2":{"13":1,"17":1}}],["highest",{"2":{"0":5}}],["how",{"2":{"2":1,"13":1,"17":1}}],["horizontal",{"2":{"0":6}}],["health",{"2":{"12":1}}],["header",{"2":{"11":1}}],["height",{"2":{"0":1}}],["helper",{"2":{"0":1}}],["have",{"2":{"2":2,"18":1}}],["has",{"2":{"1":1}}],["hardcoded",{"2":{"0":1}}],["handle",{"2":{"0":1}}],["https",{"2":{"0":2,"10":1,"11":3}}],["231",{"2":{"15":1}}],["256",{"2":{"0":2,"10":2}}],["2",{"2":{"0":9,"10":1,"13":1,"17":1}}],["environment",{"2":{"16":1}}],["environmental",{"2":{"0":2}}],["enviroment",{"2":{"16":1}}],["env",{"2":{"13":1}}],["ensure",{"2":{"12":1}}],["enabled",{"2":{"11":1}}],["enable",{"2":{"11":1,"13":1}}],["entrypoint=",{"2":{"7":1}}],["endpoints",{"2":{"11":1}}],["endpoint",{"2":{"0":1,"11":2}}],["epsg",{"2":{"0":3}}],["e",{"2":{"0":4,"7":1,"16":1,"18":1,"19":1}}],["exactly",{"2":{"11":1}}],["examples",{"2":{"0":2}}],["example",{"2":{"0":1,"14":1,"15":1}}],["expected",{"2":{"11":1}}],["expect",{"2":{"11":1}}],["extract",{"2":{"0":1}}],["extent",{"2":{"0":2}}],["exists",{"2":{"0":3}}],["excludes",{"2":{"2":1}}],["exclude",{"2":{"0":1}}],["excluded",{"2":{"0":1}}],["edges",{"2":{"0":6,"18":2,"19":1}}],["edge",{"0":{"18":1},"1":{"19":1},"2":{"0":15,"18":2}}],["each",{"2":{"0":14}}],["east",{"2":{"0":1}}],["vs",{"2":{"16":1}}],["view",{"2":{"1":1}}],["viewing",{"2":{"0":1}}],["via",{"2":{"0":1}}],["vertex",{"2":{"18":2}}],["vertices",{"2":{"0":1}}],["vertical",{"2":{"0":2}}],["versions",{"2":{"1":1}}],["vector",{"2":{"0":25,"18":1}}],["val",{"2":{"0":1}}],["validate",{"2":{"11":1}}],["valid",{"2":{"0":4,"11":1,"19":2}}],["value",{"2":{"0":1}}],["values",{"2":{"0":4,"13":1,"17":1}}],["variables",{"2":{"0":2}}],["vary",{"2":{"0":1}}],["v",{"2":{"0":3,"5":1,"7":1}}],["139",{"2":{"15":1}}],["127",{"2":{"14":1,"15":1}}],["15",{"2":{"13":1,"17":1}}],["10",{"2":{"13":1,"17":1}}],["10km",{"2":{"0":1}}],["1a",{"2":{"10":1}}],["14838",{"2":{"0":2}}],["14756",{"2":{"0":2}}],["1",{"2":{"0":6,"10":1,"13":1,"14":1,"15":1}}],["unsuitable",{"2":{"19":1}}],["unit",{"2":{"0":3}}],["units",{"2":{"0":1}}],["union",{"2":{"0":10}}],["url",{"2":{"14":1,"15":1}}],["ub",{"2":{"0":5}}],["ubs",{"2":{"0":1}}],["ub=",{"2":{"0":1}}],["up",{"2":{"0":3,"4":1,"6":1,"13":2,"17":1}}],["upper",{"2":{"0":3}}],["uint8",{"2":{"0":1}}],["usual",{"2":{"10":1}}],["using",{"0":{"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":4,"19":1}}],["use",{"2":{"0":3,"7":1,"10":2,"18":2}}],["used",{"2":{"0":8,"18":1,"19":1}}],["user",{"2":{"0":1,"19":1}}],["0",{"2":{"0":41,"14":7,"15":9}}],["purposes",{"2":{"13":1}}],["public",{"2":{"11":2}}],["published",{"2":{"1":1}}],["publish",{"2":{"1":1}}],["please",{"2":{"2":1}}],["pay",{"2":{"11":1}}],["page",{"2":{"1":1,"13":1}}],["packages",{"2":{"1":1}}],["package",{"2":{"1":2,"2":1}}],["path",{"2":{"0":3,"10":1}}],["parquet",{"0":{"19":1},"2":{"19":1}}],["parallel",{"2":{"13":1}}],["parameters",{"2":{"0":2}}],["parsed",{"2":{"0":1}}],["parse",{"2":{"0":2}}],["parses",{"2":{"0":1}}],["provided",{"2":{"18":1}}],["provides",{"2":{"11":1}}],["project=",{"2":{"13":1,"16":1}}],["project",{"2":{"10":1,"16":2}}],["processing",{"2":{"18":1}}],["process",{"2":{"1":1}}],["proportion",{"2":{"0":2}}],["preferably",{"2":{"13":1,"17":1}}],["prepped",{"2":{"10":2}}],["prepared",{"2":{"0":1}}],["pre",{"2":{"0":1}}],["prioritising",{"2":{"0":2}}],["p",{"2":{"0":2,"5":1}}],["possibly",{"2":{"18":1}}],["positions",{"2":{"0":3}}],["positive",{"2":{"0":1}}],["port",{"2":{"0":4}}],["potential",{"2":{"0":8,"18":2,"19":1}}],["points",{"2":{"0":5}}],["point",{"2":{"0":11}}],["polygons",{"2":{"0":8,"18":4}}],["polygon",{"2":{"0":20,"18":2}}],["performance",{"0":{"17":1},"2":{"0":2,"13":1}}],["perform",{"2":{"0":5}}],["per",{"2":{"0":5}}],["pixelvalues",{"2":{"0":1}}],["pixel",{"2":{"0":24,"18":1}}],["pixels",{"2":{"0":23,"18":3,"19":3}}],["pix",{"2":{"0":2}}],["based",{"2":{"19":1}}],["bash$",{"2":{"16":1}}],["bashjulia",{"2":{"13":1}}],["bashdocker",{"2":{"3":1,"4":1,"5":1,"6":1,"7":1}}],["block",{"2":{"10":1}}],["but",{"2":{"13":1,"17":1}}],["build",{"0":{"1":1,"3":1,"4":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"1":2,"3":1,"4":1}}],["buff",{"2":{"0":3}}],["buffered",{"2":{"0":1,"18":1}}],["buffer",{"2":{"0":13}}],["b",{"2":{"0":2}}],["by",{"2":{"0":3,"10":1,"18":2}}],["bitvector",{"2":{"0":1}}],["bitmatrix",{"2":{"0":1}}],["bbox",{"2":{"0":2}}],["been",{"2":{"18":1}}],["best",{"2":{"13":1}}],["bearer",{"2":{"11":1}}],["because",{"2":{"0":1}}],["begin",{"2":{"0":1}}],["be",{"2":{"0":8,"1":1,"10":1,"11":3,"13":3,"16":1,"17":2,"18":5,"19":3}}],["before",{"2":{"0":1,"18":1}}],["below",{"2":{"0":1,"2":1,"16":1}}],["between",{"2":{"0":6,"16":1}}],["boolean",{"2":{"0":2}}],["bool",{"2":{"0":1,"11":1,"18":1}}],["bottom",{"2":{"0":2}}],["bound",{"2":{"0":3}}],["bounding",{"2":{"0":1}}],["bounds",{"2":{"0":5}}],["box",{"2":{"0":25}}],["nautical",{"2":{"0":1}}],["named",{"2":{"2":1,"10":1}}],["namedtuple",{"2":{"0":2}}],["name",{"2":{"0":4,"18":1}}],["names=depth",{"2":{"0":1}}],["names",{"2":{"0":2}}],["nm",{"2":{"0":2}}],["now",{"2":{"16":1}}],["note",{"2":{"2":1,"10":1,"16":1}}],["notes",{"0":{"17":1},"2":{"0":3}}],["not",{"2":{"0":1,"12":1}}],["nothing",{"2":{"0":2}}],["north",{"2":{"0":1}}],["necessary",{"2":{"16":1}}],["needing",{"2":{"1":1}}],["new",{"2":{"0":3}}],["neighbor",{"2":{"0":2}}],["nearest",{"2":{"0":7,"18":1}}],["negative",{"2":{"0":1}}],["number",{"2":{"0":5,"10":1}}],["n",{"2":{"0":8}}],["false",{"2":{"0":1,"10":1,"11":1}}],["far",{"2":{"0":2}}],["further",{"2":{"0":1}}],["function",{"2":{"0":9}}],["fn",{"2":{"0":2}}],["four",{"2":{"13":1,"17":1}}],["found",{"2":{"0":2}}],["following",{"2":{"11":1,"18":1}}],["folder",{"2":{"2":2}}],["form",{"2":{"0":1,"13":1}}],["format",{"2":{"0":2,"11":1,"18":1}}],["for",{"0":{"18":1},"1":{"19":1},"2":{"0":45,"7":1,"8":1,"11":1,"13":2,"18":1,"19":2}}],["first",{"2":{"11":1,"19":1}}],["files",{"0":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":1,"2":3,"10":1}}],["file",{"2":{"0":8,"2":2,"10":3,"16":2}}],["filtered",{"2":{"19":1}}],["filter",{"2":{"0":6}}],["findall",{"2":{"18":1}}],["find",{"2":{"0":4}}],["flats",{"2":{"0":4}}],["flag",{"2":{"0":2}}],["float64=0",{"2":{"0":4}}],["float64=15",{"2":{"0":4}}],["float64",{"2":{"0":41,"19":1}}],["from",{"0":{"3":1,"4":1},"2":{"0":18,"13":1,"17":1,"18":1}}],["dynamic",{"0":{"14":1}}],["downtime",{"2":{"16":1}}],["do",{"2":{"13":1,"17":1}}],["dockerfile",{"2":{"1":1}}],["docker",{"0":{"1":1,"3":1,"4":1,"5":1,"6":1,"7":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"1":1,"2":1}}],["due",{"2":{"2":1}}],["df",{"2":{"0":6}}],["displays",{"2":{"10":1,"13":1}}],["disables",{"2":{"10":1}}],["distance",{"2":{"0":6}}],["distances",{"2":{"0":2}}],["dist",{"2":{"0":23}}],["directory",{"2":{"0":2,"2":1,"16":1}}],["direction",{"2":{"0":1}}],["dir",{"2":{"0":3,"10":3}}],["diminishing",{"2":{"13":1,"17":1}}],["dimension",{"2":{"0":2}}],["dimensions",{"2":{"0":3}}],["dims=",{"2":{"0":1}}],["dims",{"2":{"0":1}}],["dictionary",{"2":{"0":1}}],["dict",{"2":{"0":6,"19":1}}],["development",{"0":{"16":1}}],["developers",{"2":{"0":1}}],["dev",{"2":{"13":1,"16":3}}],["debug",{"2":{"10":2,"13":2}}],["defined",{"2":{"10":1}}],["defaults",{"2":{"10":2}}],["default",{"2":{"0":3,"16":1,"19":1}}],["default=0",{"2":{"0":1}}],["deg",{"2":{"0":1}}],["degrees",{"2":{"0":7}}],["degree",{"2":{"0":9}}],["depth=",{"2":{"0":1,"14":1,"15":1}}],["desired",{"2":{"0":4}}],["datasets>",{"2":{"10":1}}],["dataset",{"2":{"10":1}}],["data",{"0":{"2":1},"2":{"0":23,"2":4,"5":2,"7":3,"10":4,"16":2}}],["dataframe",{"2":{"0":34}}],["root",{"2":{"16":2}}],["route",{"2":{"12":1}}],["rotate",{"2":{"0":2}}],["rotation",{"2":{"0":11}}],["rotations",{"2":{"0":11,"18":1}}],["rot",{"2":{"0":8}}],["rm",{"2":{"7":1}}],["running",{"2":{"2":1}}],["run",{"0":{"1":1,"5":1,"6":1,"7":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"1":1,"5":1,"7":1}}],["rugosity",{"2":{"0":4}}],["rugosity=0",{"2":{"0":1,"15":1}}],["ruleset",{"2":{"0":6}}],["range",{"2":{"13":1,"17":1}}],["rand",{"2":{"0":1}}],["rather",{"2":{"0":2,"18":1}}],["rast",{"2":{"0":3}}],["rasters",{"2":{"0":2}}],["rasterstack",{"2":{"0":8}}],["raster",{"2":{"0":29,"18":3}}],["rtype=slopes",{"2":{"15":1}}],["rtype",{"2":{"0":3}}],["right",{"2":{"0":2}}],["rst",{"2":{"0":10}}],["repl",{"2":{"16":1}}],["repository",{"2":{"1":1}}],["revise",{"2":{"16":1}}],["ready",{"2":{"7":1}}],["reaching",{"2":{"0":1}}],["reduce",{"2":{"0":1,"13":1,"16":1,"17":1}}],["remove",{"2":{"0":2}}],["require",{"2":{"18":1}}],["requires",{"2":{"2":1}}],["required",{"0":{"2":1},"2":{"0":1,"2":2,"18":1}}],["request",{"2":{"0":2}}],["requested",{"2":{"0":5,"13":1,"17":1}}],["reg",{"2":{"0":4}}],["region=cairns",{"2":{"15":1}}],["regional",{"2":{"0":4,"10":2}}],["regionalcriteria",{"2":{"0":3}}],["region",{"2":{"0":20,"18":1}}],["restart",{"2":{"16":1}}],["resolvable",{"2":{"11":1}}],["resolution",{"2":{"0":4}}],["resampled",{"2":{"0":4}}],["resample",{"2":{"0":2}}],["res",{"2":{"0":7}}],["results",{"2":{"0":2}}],["result",{"2":{"0":1}}],["reference",{"2":{"0":1}}],["reload",{"2":{"16":1}}],["rel",{"2":{"0":2}}],["reefguide",{"2":{"3":2,"4":1,"5":2,"6":1,"7":3}}],["reefguideapi",{"0":{"8":1},"2":{"0":42,"1":2,"2":1,"7":3,"13":3}}],["reefs",{"2":{"0":1}}],["reeftype",{"2":{"0":1}}],["reef",{"0":{"18":1},"1":{"19":1},"2":{"0":33,"8":1,"10":1,"18":7}}],["retaining",{"2":{"0":1}}],["return",{"2":{"0":2,"11":1,"18":1}}],["returned",{"2":{"0":2}}],["returns",{"2":{"0":25,"13":1,"17":1}}],["retrieved",{"2":{"11":1}}],["retrieve",{"2":{"0":5}}],["mkdir",{"2":{"16":1}}],["mpa",{"2":{"10":2}}],["multiple",{"2":{"13":1}}],["multipolygon",{"2":{"0":1}}],["must",{"2":{"0":2,"19":2}}],["mode",{"2":{"10":1}}],["mounted",{"0":{"5":1,"6":1,"7":1}}],["mounting",{"0":{"2":1}}],["move",{"2":{"0":3}}],["most",{"2":{"0":2}}],["messages",{"2":{"13":1}}],["mentioned",{"2":{"2":1}}],["means",{"2":{"1":1}}],["memory",{"2":{"0":1}}],["method",{"2":{"0":2,"18":1}}],["meters",{"2":{"0":8}}],["meet",{"2":{"0":1}}],["miles",{"2":{"0":1}}],["middleware",{"2":{"0":3}}],["min",{"2":{"0":4}}],["main",{"2":{"13":1}}],["many",{"2":{"13":1,"17":1}}],["management",{"2":{"0":4,"18":1}}],["may",{"2":{"0":1}}],["matrix",{"2":{"0":5}}],["matching",{"2":{"18":1}}],["match",{"2":{"0":2,"11":1}}],["make",{"2":{"0":2}}],["mackay",{"2":{"0":2}}],["map",{"2":{"0":4}}],["mapping",{"2":{"0":1}}],["masking",{"2":{"0":2,"19":1}}],["masked",{"2":{"0":2,"18":1}}],["mask",{"2":{"0":13}}],["maximum",{"2":{"0":1}}],["maxmimum",{"2":{"0":1}}],["max",{"2":{"0":6}}],["works",{"2":{"18":1}}],["working",{"2":{"2":1}}],["wkt",{"2":{"11":4}}],["way",{"2":{"10":1}}],["want",{"2":{"0":1}}],["warm",{"2":{"0":1}}],["warmup",{"2":{"0":1}}],["web",{"2":{"11":1}}],["well",{"2":{"11":1}}],["we",{"2":{"0":1,"2":1}}],["west",{"2":{"0":1}}],["width",{"2":{"0":1}}],["will",{"2":{"0":2,"1":1,"7":1,"13":2,"16":1,"17":1}}],["without",{"2":{"1":1}}],["with",{"0":{"5":1,"6":1,"7":1},"2":{"0":8,"1":1,"2":1,"13":3,"17":2,"18":2}}],["within",{"2":{"0":7,"19":1}}],["writing",{"2":{"0":2,"13":1,"17":1}}],["writes",{"2":{"0":1}}],["write",{"2":{"0":2,"13":2,"17":2}}],["wrappers",{"2":{"0":7}}],["whitsunday",{"2":{"18":2}}],["which",{"2":{"0":1,"11":2}}],["why",{"2":{"0":1}}],["when",{"2":{"0":2,"2":1,"10":1,"13":1,"17":1}}],["where",{"2":{"0":13,"7":1,"11":1}}],["optional",{"2":{"10":3}}],["open",{"2":{"10":1}}],["opperating",{"2":{"0":1}}],["over",{"2":{"0":2}}],["overlapping",{"2":{"0":1}}],["object",{"2":{"0":2}}],["obtain",{"2":{"0":3}}],["on",{"2":{"1":1,"19":1}}],["ones",{"2":{"0":2}}],["one",{"2":{"0":2,"13":1}}],["only",{"2":{"0":3,"18":1}}],["outline",{"2":{"0":3}}],["outlines",{"2":{"0":5}}],["output",{"2":{"0":8}}],["out",{"2":{"0":5,"13":1,"17":1}}],["outside",{"2":{"0":2}}],["orig",{"2":{"0":1}}],["original",{"2":{"0":1}}],["ordereddict",{"2":{"0":1}}],["order",{"2":{"0":1}}],["or",{"2":{"0":7,"18":2}}],["of",{"2":{"0":59,"1":2,"2":1,"10":2,"18":4}}],["ideally",{"2":{"13":1,"17":1}}],["identifies",{"2":{"0":2}}],["identified",{"2":{"0":6}}],["identifying",{"2":{"18":2}}],["identify",{"2":{"0":10,"18":2,"19":1}}],["image",{"2":{"1":1}}],["imagery",{"2":{"0":1}}],["it",{"2":{"1":1,"2":1,"16":1}}],["its",{"2":{"0":1,"13":1}}],["if",{"2":{"0":2,"13":1}}],["issuer",{"2":{"11":4}}],["iss",{"2":{"11":2}}],["is",{"2":{"0":15,"2":2,"7":1,"10":1,"12":1,"16":1,"18":1}}],["inaccurate",{"2":{"18":1}}],["infiltrator",{"2":{"16":1}}],["info",{"2":{"10":1,"13":1}}],["include",{"2":{"2":1,"16":1}}],["includes",{"2":{"0":1}}],["instantiate",{"2":{"10":1}}],["instance",{"2":{"1":1}}],["installation",{"2":{"1":1}}],["invokes",{"2":{"0":1}}],["inds",{"2":{"0":2}}],["individual",{"2":{"0":1}}],["indices",{"2":{"0":5,"18":2}}],["indicate",{"2":{"0":4}}],["indicates",{"2":{"0":1}}],["indicated",{"2":{"0":2}}],["indicating",{"2":{"0":4,"10":1}}],["initially",{"2":{"16":1}}],["initialize",{"2":{"10":1}}],["initial",{"2":{"0":8}}],["input",{"2":{"0":10,"2":1}}],["in",{"2":{"0":31,"2":4,"10":2,"11":1,"13":1,"16":2,"18":1,"19":1}}],["into",{"2":{"18":1}}],["int",{"2":{"0":9}}],["interactive",{"0":{"7":1},"2":{"7":1,"13":1}}],["interpolation",{"2":{"0":2}}],["intersect",{"2":{"0":2}}],["intended",{"2":{"0":5}}],["int64=1",{"2":{"0":1}}],["int64=2",{"2":{"0":3}}],["int64",{"2":{"0":15}}],["zero",{"2":{"0":6}}],["z",{"2":{"0":4}}],["zoom",{"2":{"0":2}}],["your",{"2":{"2":1}}],["you",{"2":{"1":2,"2":1,"16":1}}],["ys",{"2":{"0":1}}],["y",{"2":{"0":19}}],["x26",{"2":{"14":1,"15":4}}],["xs",{"2":{"0":1}}],["x3c",{"2":{"0":4,"10":2}}],["x",{"2":{"0":22}}],["go",{"2":{"18":1}}],["guidance",{"2":{"10":1}}],["gbr",{"2":{"10":1}}],["gbrmpa",{"2":{"0":2,"18":1}}],["globe",{"2":{"0":1}}],["generation",{"0":{"14":1}}],["generate",{"2":{"0":3}}],["getting",{"0":{"9":1},"1":{"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1},"2":{"2":1}}],["get",{"2":{"0":1}}],["geojson",{"2":{"0":6}}],["geodataframe",{"2":{"0":4,"19":2}}],["geotiff",{"2":{"0":1}}],["geotiffs>",{"2":{"10":1}}],["geotiffs",{"2":{"0":1}}],["geoformattypes",{"2":{"0":6}}],["geometries",{"2":{"18":1}}],["geometry",{"2":{"0":9,"19":3}}],["geometrybasics",{"2":{"0":6}}],["geom",{"2":{"0":15}}],["greater",{"2":{"0":1}}],["gt",{"2":{"0":1,"11":1}}],["gdal",{"2":{"0":3}}],["gda2020",{"2":{"0":1}}],["gdf",{"2":{"0":14}}],["g",{"2":{"0":4,"7":1,"16":1,"18":1,"19":1}}],["github",{"2":{"10":1}}],["giwrap",{"2":{"0":3}}],["gi",{"2":{"0":7,"19":1}}],["given",{"2":{"0":8}}],["avoid",{"2":{"18":1}}],["available",{"2":{"2":1,"13":1}}],["away",{"2":{"18":1}}],["added",{"2":{"19":1}}],["additional",{"0":{"19":1}}],["additionally",{"2":{"11":1}}],["add",{"2":{"11":1,"16":1}}],["authorised",{"2":{"12":1}}],["authorization",{"2":{"11":1}}],["auth",{"0":{"11":1,"12":1},"1":{"12":1},"2":{"11":2}}],["aims",{"2":{"10":1}}],["act",{"2":{"0":1}}],["accuracy",{"2":{"0":2}}],["according",{"2":{"0":2}}],["able",{"2":{"0":1,"1":1}}],["about",{"2":{"0":1}}],["abs",{"2":{"0":1}}],["attention",{"2":{"11":1}}],["at",{"2":{"0":6,"13":2,"16":1,"17":1}}],["amp",{"2":{"0":4}}],["alignment",{"0":{"18":1},"1":{"19":1}}],["align",{"2":{"0":2,"18":1}}],["aligns",{"2":{"0":1}}],["all",{"2":{"0":2}}],["an",{"2":{"0":4,"1":2,"8":1}}],["analysis",{"2":{"0":4}}],["anticlockwise",{"2":{"0":2}}],["anti",{"2":{"0":1}}],["angle",{"2":{"0":17,"18":1}}],["and",{"0":{"1":1,"2":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":36,"1":1,"2":1,"7":1,"10":1,"11":2,"16":2,"18":2,"19":3}}],["arcgis",{"2":{"0":1}}],["argument",{"2":{"0":1}}],["arguments",{"2":{"0":22}}],["around",{"2":{"0":7}}],["area",{"2":{"0":3,"18":1}}],["are",{"2":{"0":11,"10":1,"13":1,"16":1}}],["assuming",{"2":{"16":1}}],["assumes",{"2":{"16":1}}],["assumed",{"2":{"2":1}}],["associated",{"2":{"1":1}}],["assessments",{"2":{"8":1}}],["assessment",{"0":{"19":1},"2":{"0":6,"10":1}}],["assesses",{"2":{"0":1}}],["assess",{"2":{"0":8,"14":1}}],["as",{"2":{"0":4,"2":1,"18":1,"19":2}}],["approach",{"2":{"0":2}}],["appear",{"2":{"0":1}}],["applied",{"2":{"0":4}}],["apply",{"2":{"0":10}}],["api",{"0":{"0":1},"2":{"8":1,"11":2}}],["a",{"2":{"0":44,"1":1,"2":3,"7":1,"10":1,"11":2,"13":2,"16":2,"18":1,"19":2}}],["testing",{"2":{"13":1}}],["tested",{"2":{"13":1,"17":1}}],["tty",{"2":{"7":1}}],["tip",{"2":{"13":1}}],["tiff",{"2":{"10":1}}],["times",{"2":{"0":1,"13":2,"17":2}}],["tiles",{"0":{"15":1},"2":{"0":1}}],["tile",{"2":{"0":23,"10":2,"15":1}}],["typically",{"2":{"0":1}}],["types",{"2":{"0":1}}],["type",{"2":{"0":5}}],["take",{"2":{"0":1}}],["targetted",{"2":{"0":1}}],["target",{"2":{"0":24,"3":1,"18":2}}],["two",{"2":{"0":2}}],["true",{"2":{"0":3,"11":2}}],["translates",{"2":{"0":1}}],["tuples",{"2":{"0":2}}],["tuple",{"2":{"0":20}}],["thread",{"2":{"13":1}}],["threads=4",{"2":{"13":1}}],["threads",{"2":{"0":3,"10":2,"13":4,"17":3}}],["threshold",{"2":{"0":10}}],["thresholds",{"2":{"0":17,"19":2}}],["this",{"2":{"0":3,"1":1,"2":1,"7":1,"10":1,"13":1,"17":1,"18":2}}],["than",{"2":{"0":3,"18":1}}],["that",{"2":{"0":17,"16":1,"18":2}}],["these",{"2":{"2":1,"10":1}}],["theshold",{"2":{"0":1}}],["their",{"2":{"0":2,"18":1}}],["the",{"2":{"0":81,"1":5,"2":6,"10":5,"11":9,"13":2,"16":10,"17":1,"18":4,"19":4}}],["t",{"2":{"0":23,"3":1}}],["todos",{"0":{"12":1}}],["token",{"2":{"11":1}}],["toml",{"2":{"0":1,"2":2,"7":1,"10":3,"11":2,"13":1,"16":1}}],["townsville",{"2":{"0":2,"18":2}}],["too",{"2":{"0":1}}],["top",{"2":{"0":3}}],["to",{"0":{"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":72,"1":2,"2":2,"10":7,"11":4,"13":5,"16":7,"17":4,"18":5,"19":1}}],["lb",{"2":{"0":5}}],["lbs",{"2":{"0":1}}],["lb=",{"2":{"0":1}}],["launches",{"2":{"16":1}}],["launch",{"0":{"5":1,"6":1},"2":{"2":1}}],["layers",{"2":{"0":1}}],["layer",{"2":{"0":1}}],["labelling",{"2":{"0":1}}],["large",{"2":{"0":1}}],["later",{"2":{"0":1}}],["latest",{"2":{"0":1,"1":1}}],["latitudinal",{"2":{"0":1}}],["latitude",{"2":{"0":4}}],["lats",{"2":{"0":1}}],["lat",{"2":{"0":26,"19":1}}],["like",{"2":{"0":1}}],["list",{"2":{"0":2}}],["line",{"2":{"0":16}}],["lines",{"2":{"0":13,"18":3}}],["least",{"2":{"13":2,"17":1}}],["leading",{"2":{"10":1}}],["level",{"2":{"0":1}}],["lengths",{"2":{"0":2}}],["length",{"2":{"0":7}}],["left",{"2":{"0":3}}],["lt",{"2":{"0":1,"11":1}}],["logs",{"2":{"10":1}}],["locally",{"2":{"2":1,"13":1,"17":1}}],["local",{"2":{"1":1}}],["located",{"2":{"0":1}}],["locations",{"2":{"0":8}}],["location",{"2":{"0":4,"10":3}}],["loaded",{"2":{"0":1,"16":1,"19":1}}],["load",{"2":{"0":1}}],["low",{"2":{"0":1}}],["lower",{"2":{"0":3}}],["lookup",{"2":{"0":6}}],["lonlat",{"2":{"0":2}}],["long",{"2":{"0":3}}],["longitudinal",{"2":{"0":1}}],["longitude",{"2":{"0":2}}],["lons",{"2":{"0":1}}],["lon",{"2":{"0":20,"19":2}}],["save",{"2":{"16":1}}],["sandbox",{"2":{"16":8}}],["sample",{"2":{"0":1}}],["same",{"2":{"0":1,"19":1}}],["slippy",{"0":{"15":1}}],["slope=0",{"2":{"0":1,"14":1,"15":1}}],["slopes",{"2":{"0":4,"14":1}}],["slope",{"2":{"0":1}}],["script",{"2":{"10":1}}],["scoring",{"2":{"0":2}}],["scores",{"2":{"0":2}}],["score",{"2":{"0":4}}],["shell",{"0":{"7":1},"2":{"7":1}}],["should",{"2":{"0":2,"10":1,"11":2,"13":1,"17":1,"18":4,"19":1}}],["src",{"0":{"3":1,"4":1},"2":{"3":1,"4":1,"6":1}}],["spatial",{"2":{"16":2}}],["spun",{"2":{"13":1}}],["spin",{"2":{"0":1}}],["specified",{"2":{"0":2,"18":2,"19":1}}],["small",{"2":{"0":2}}],["skip",{"2":{"0":1}}],["s",{"2":{"0":1}}],["symbol",{"2":{"0":4}}],["system",{"2":{"0":1}}],["some",{"2":{"10":3}}],["something",{"2":{"0":1}}],["somewhere",{"2":{"0":1}}],["so",{"2":{"0":1}}],["south",{"2":{"0":1}}],["source",{"2":{"0":42}}],["supporting",{"2":{"8":1}}],["suitabiltiy",{"2":{"0":1}}],["suitability",{"2":{"0":3,"8":1}}],["suitable",{"2":{"0":4}}],["surr",{"2":{"0":6}}],["session",{"2":{"16":1}}],["seconds",{"2":{"13":1,"17":1}}],["second",{"2":{"11":1}}],["server",{"0":{"5":1,"6":1},"2":{"2":1,"7":1,"10":1,"13":2,"16":4}}],["separate",{"2":{"0":2}}],["segments",{"2":{"0":3}}],["seem",{"2":{"13":1,"17":1}}],["see",{"2":{"0":2}}],["searching",{"0":{"18":1},"1":{"19":1},"2":{"0":4}}],["search",{"2":{"0":39,"18":4}}],["setting",{"2":{"13":1,"17":1}}],["settings",{"2":{"0":1}}],["setup",{"0":{"10":1,"16":1,"19":1},"2":{"0":1}}],["sets",{"2":{"0":1}}],["set",{"2":{"0":3,"2":1,"13":1,"17":1}}],["simplify",{"2":{"18":1}}],["simplified",{"2":{"18":3}}],["simple",{"0":{"15":1},"2":{"0":1,"13":1}}],["size",{"2":{"0":9,"10":2}}],["side",{"2":{"0":11}}],["sites",{"2":{"0":14,"18":2,"19":1}}],["site",{"0":{"18":1},"1":{"19":1},"2":{"0":11}}],["state",{"2":{"13":1}}],["standardise",{"2":{"0":1}}],["started",{"0":{"9":1},"1":{"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1},"2":{"2":1}}],["starting",{"2":{"0":3}}],["start",{"2":{"0":4,"7":2,"13":2,"16":1}}],["stack",{"2":{"0":8}}],["steps",{"2":{"0":1,"16":1}}],["step",{"2":{"0":10,"10":1}}],["string=",{"2":{"0":1}}],["string",{"2":{"0":10}}],["chairmarks",{"2":{"16":1}}],["check",{"2":{"12":1}}],["cd",{"2":{"16":2}}],["claim",{"2":{"11":1}}],["closest",{"2":{"0":5,"18":1}}],["clockwise",{"2":{"0":4}}],["c",{"2":{"10":1}}],["ctype",{"2":{"0":1}}],["centroid",{"2":{"0":4}}],["center",{"2":{"0":3}}],["centered",{"2":{"0":1}}],["current",{"2":{"13":1}}],["currently",{"2":{"0":3,"2":1,"10":1,"18":1}}],["custom",{"2":{"0":2}}],["cartesianindices",{"2":{"18":1}}],["cairns",{"2":{"14":1}}],["caching",{"2":{"10":1}}],["caches",{"2":{"16":1}}],["cache",{"2":{"0":8,"10":4}}],["called",{"2":{"2":1}}],["calculate",{"2":{"0":1}}],["calculated",{"2":{"0":1}}],["capricorn",{"2":{"0":2}}],["can",{"2":{"0":2,"1":1,"11":2,"18":1}}],["creating",{"2":{"10":1}}],["created",{"2":{"0":1,"10":1}}],["creates",{"2":{"0":1}}],["create",{"2":{"0":4,"16":2}}],["crit",{"2":{"0":3}}],["criteriabounds",{"2":{"0":3}}],["criteria",{"2":{"0":37,"19":1}}],["crs",{"2":{"0":14}}],["col",{"2":{"19":1}}],["column",{"2":{"0":3,"19":2}}],["columns",{"2":{"0":1,"19":1}}],["copy",{"2":{"16":1}}],["cooktown",{"2":{"14":1,"15":1}}],["coordinate",{"2":{"0":3}}],["coordinatereferencesystemformat",{"2":{"0":4}}],["coordinates",{"2":{"0":9,"19":1}}],["cog",{"0":{"14":1},"2":{"10":1,"13":1,"17":1}}],["cogs",{"2":{"0":1,"10":1,"13":1,"17":1}}],["codehttp",{"2":{"14":1,"15":1}}],["code",{"2":{"0":1,"16":1}}],["commands",{"2":{"2":1}}],["compose",{"0":{"4":1,"6":1},"2":{"4":1,"6":1}}],["compiled",{"2":{"7":1}}],["compile",{"2":{"1":1}}],["comparison",{"2":{"0":1}}],["com",{"2":{"0":1,"10":1,"11":2}}],["convention",{"2":{"10":1}}],["converted",{"2":{"18":1}}],["convert",{"2":{"0":2}}],["constraint",{"2":{"0":1}}],["constraints",{"2":{"0":1}}],["consideration",{"2":{"0":1}}],["controls",{"2":{"13":1,"17":1}}],["control",{"2":{"0":1}}],["containing",{"2":{"0":19}}],["configuration",{"0":{"11":1},"1":{"12":1},"2":{"0":1}}],["configured",{"2":{"0":2,"11":1,"13":1,"16":1,"17":1}}],["config",{"2":{"0":6,"2":3,"7":1,"10":2,"11":1,"13":2,"16":1,"17":1}}],["count",{"2":{"0":2}}],["corner",{"2":{"0":2}}],["corresponding",{"2":{"0":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/dev/assets/chunks/VPLocalSearchBox.DUu90fND.js b/dev/assets/chunks/VPLocalSearchBox.BO9Crzas.js similarity index 99% rename from dev/assets/chunks/VPLocalSearchBox.DUu90fND.js rename to dev/assets/chunks/VPLocalSearchBox.BO9Crzas.js index 5e9213c..47aba65 100644 --- a/dev/assets/chunks/VPLocalSearchBox.DUu90fND.js +++ b/dev/assets/chunks/VPLocalSearchBox.BO9Crzas.js @@ -1,4 +1,4 @@ -var Nt=Object.defineProperty;var Ft=(a,e,t)=>e in a?Nt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Re=(a,e,t)=>Ft(a,typeof e!="symbol"?e+"":e,t);import{V as Ot,p as se,h as pe,aj as Xe,ak as Rt,al as Ct,q as je,am as Mt,d as At,D as ye,an as et,ao as Lt,ap as Dt,s as zt,aq as Pt,v as Ce,P as ue,O as we,ar as jt,as as Vt,W as $t,R as Bt,$ as Wt,o as q,b as Kt,j as S,a0 as Jt,k as D,at as Ut,au as qt,av as Gt,c as Y,n as tt,e as xe,C as st,F as nt,a as de,t as he,aw as Ht,ax as it,ay as Qt,a9 as Yt,af as Zt,az as Xt,_ as es}from"./framework.BvdfcH24.js";import{u as ts,c as ss}from"./theme.CHEpmyUw.js";const ns={root:()=>Ot(()=>import("./@localSearchIndexroot.Drtoz-t2.js"),[])};/*! +var Nt=Object.defineProperty;var Ft=(a,e,t)=>e in a?Nt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Re=(a,e,t)=>Ft(a,typeof e!="symbol"?e+"":e,t);import{V as Ot,p as se,h as pe,aj as Xe,ak as Rt,al as Ct,q as je,am as Mt,d as At,D as ye,an as et,ao as Lt,ap as Dt,s as zt,aq as Pt,v as Ce,P as ue,O as we,ar as jt,as as Vt,W as $t,R as Bt,$ as Wt,o as q,b as Kt,j as S,a0 as Jt,k as D,at as Ut,au as qt,av as Gt,c as Y,n as tt,e as xe,C as st,F as nt,a as de,t as he,aw as Ht,ax as it,ay as Qt,a9 as Yt,af as Zt,az as Xt,_ as es}from"./framework.BvdfcH24.js";import{u as ts,c as ss}from"./theme._B5YJXUN.js";const ns={root:()=>Ot(()=>import("./@localSearchIndexroot.BIq-6JjD.js"),[])};/*! * tabbable 6.2.0 * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE */var vt=["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])"],Ie=vt.join(","),mt=typeof Element>"u",ie=mt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,ke=!mt&&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},Ne=function a(e,t){var s;t===void 0&&(t=!0);var n=e==null||(s=e.getAttribute)===null||s===void 0?void 0:s.call(e,"inert"),r=n===""||n==="true",i=r||t&&e&&a(e.parentNode);return i},is=function(e){var t,s=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return s===""||s==="true"},gt=function(e,t,s){if(Ne(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ie));return t&&ie.call(e,Ie)&&n.unshift(e),n=n.filter(s),n},bt=function a(e,t,s){for(var n=[],r=Array.from(e);r.length;){var i=r.shift();if(!Ne(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=a(l,!0,s);s.flatten?n.push.apply(n,c):n.push({scopeParent:i,candidates:c})}else{var h=ie.call(i,Ie);h&&s.filter(i)&&(t||!e.includes(i))&&n.push(i);var v=i.shadowRoot||typeof s.getShadowRoot=="function"&&s.getShadowRoot(i),p=!Ne(v,!1)&&(!s.shadowRootFilter||s.shadowRootFilter(i));if(v&&p){var b=a(v===!0?i.children:v.children,!0,s);s.flatten?n.push.apply(n,b):n.push({scopeParent:i,candidates:b})}else r.unshift.apply(r,i.children)}}return n},yt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},ne=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||is(e))&&!yt(e)?0:e.tabIndex},rs=function(e,t){var s=ne(e);return s<0&&t&&!yt(e)?0:s},as=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},wt=function(e){return e.tagName==="INPUT"},os=function(e){return wt(e)&&e.type==="hidden"},ls=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(s){return s.tagName==="SUMMARY"});return t},cs=function(e,t){for(var s=0;ssummary:first-of-type"),i=r?e.parentElement:e;if(ie.call(i,"details:not([open]) *"))return!0;if(!s||s==="full"||s==="legacy-full"){if(typeof n=="function"){for(var o=e;e;){var l=e.parentElement,c=ke(e);if(l&&!l.shadowRoot&&n(l)===!0)return rt(e);e.assignedSlot?e=e.assignedSlot:!l&&c!==e.ownerDocument?e=c.host:e=l}e=o}if(fs(e))return!e.getClientRects().length;if(s!=="legacy-full")return!0}else if(s==="non-zero-area")return rt(e);return!1},vs=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var s=0;s=0)},gs=function a(e){var t=[],s=[];return e.forEach(function(n,r){var i=!!n.scopeParent,o=i?n.scopeParent:n,l=rs(o,i),c=i?a(n.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):s.push({documentOrder:r,tabIndex:l,item:n,isScope:i,content:c})}),s.sort(as).reduce(function(n,r){return r.isScope?n.push.apply(n,r.content):n.push(r.content),n},[]).concat(t)},bs=function(e,t){t=t||{};var s;return t.getShadowRoot?s=bt([e],t.includeContainer,{filter:Ve.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:ms}):s=gt(e,t.includeContainer,Ve.bind(null,t)),gs(s)},ys=function(e,t){t=t||{};var s;return t.getShadowRoot?s=bt([e],t.includeContainer,{filter:Fe.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):s=gt(e,t.includeContainer,Fe.bind(null,t)),s},re=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ie.call(e,Ie)===!1?!1:Ve(t,e)},ws=vt.concat("iframe").join(","),Me=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ie.call(e,ws)===!1?!1:Fe(t,e)};/*! diff --git a/dev/assets/chunks/theme.CHEpmyUw.js b/dev/assets/chunks/theme._B5YJXUN.js similarity index 99% rename from dev/assets/chunks/theme.CHEpmyUw.js rename to dev/assets/chunks/theme._B5YJXUN.js index d88d27b..4a44459 100644 --- a/dev/assets/chunks/theme.CHEpmyUw.js +++ b/dev/assets/chunks/theme._B5YJXUN.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.DUu90fND.js","assets/chunks/framework.BvdfcH24.js"])))=>i.map(i=>d[i]); -import{d as m,o as a,c as u,r as c,n as I,a as O,t as w,b as g,w as f,e as h,T as de,_ as $,u as je,i as Ge,f as ze,g as ve,h as y,j as p,k as r,l as K,m as re,p as T,q as F,s as Z,v as z,x as pe,y as fe,z as Ke,A as Re,B as R,F as M,C as B,D as Ve,E as x,G as k,H as E,I as Le,J as ee,K as G,L as q,M as We,N as Te,O as ie,P as Ne,Q as we,R as te,S as qe,U as Je,V as Ye,W as Ie,X as he,Y as Xe,Z as Qe,$ as Ze,a0 as xe,a1 as Me,a2 as et,a3 as tt,a4 as nt}from"./framework.BvdfcH24.js";const st=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),u("span",{class:I(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[O(w(e.text),1)])],2))}}),ot={key:0,class:"VPBackdrop"},at=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),g(de,{name:"fade"},{default:f(()=>[e.show?(a(),u("div",ot)):h("",!0)]),_:1}))}}),rt=$(at,[["__scopeId","data-v-b06cdb19"]]),L=je;function it(o,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(o,e):(o(),(s=!0)&&setTimeout(()=>s=!1,e))}}function le(o){return/^\//.test(o)?o:`/${o}`}function me(o){const{pathname:e,search:t,hash:s,protocol:n}=new URL(o,"http://a.com");if(Ge(o)||o.startsWith("#")||!n.startsWith("http")||!ze(e))return o;const{site:i}=L(),l=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${s}`);return ve(l)}function Y({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:s,theme:n,hash:i}=L(),l=y(()=>{var d,_;return{label:(d=e.value.locales[t.value])==null?void 0:d.label,link:((_=e.value.locales[t.value])==null?void 0:_.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([d,_])=>l.value.label===_.label?[]:{text:_.label,link:lt(_.link||(d==="root"?"/":`/${d}/`),n.value.i18nRouting!==!1&&o,s.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:l}}function lt(o,e,t,s){return e?o.replace(/\/$/,"")+le(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):o}const ct={class:"NotFound"},ut={class:"code"},dt={class:"title"},vt={class:"quote"},pt={class:"action"},ft=["href","aria-label"],ht=m({__name:"NotFound",setup(o){const{theme:e}=L(),{currentLang:t}=Y();return(s,n)=>{var i,l,v,d,_;return a(),u("div",ct,[p("p",ut,w(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),p("h1",dt,w(((l=r(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),n[0]||(n[0]=p("div",{class:"divider"},null,-1)),p("blockquote",vt,w(((v=r(e).notFound)==null?void 0:v.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",pt,[p("a",{class:"link",href:r(ve)(r(t).link),"aria-label":((d=r(e).notFound)==null?void 0:d.linkLabel)??"go to home"},w(((_=r(e).notFound)==null?void 0:_.linkText)??"Take me home"),9,ft)])])}}}),mt=$(ht,[["__scopeId","data-v-951cab6c"]]);function Ae(o,e){if(Array.isArray(o))return X(o);if(o==null)return[];e=le(e);const t=Object.keys(o).sort((n,i)=>i.split("/").length-n.split("/").length).find(n=>e.startsWith(le(n))),s=t?o[t]:[];return Array.isArray(s)?X(s):X(s.items,s.base)}function _t(o){const e=[];let t=0;for(const s in o){const n=o[s];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function bt(o){const e=[];function t(s){for(const n of s)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(o),e}function ce(o,e){return Array.isArray(e)?e.some(t=>ce(o,t)):K(o,e.link)?!0:e.items?ce(o,e.items):!1}function X(o,e){return[...o].map(t=>{const s={...t},n=s.base||e;return n&&s.link&&(s.link=n+s.link),s.items&&(s.items=X(s.items,n)),s})}function U(){const{frontmatter:o,page:e,theme:t}=L(),s=re("(min-width: 960px)"),n=T(!1),i=y(()=>{const C=t.value.sidebar,N=e.value.relativePath;return C?Ae(C,N):[]}),l=T(i.value);F(i,(C,N)=>{JSON.stringify(C)!==JSON.stringify(N)&&(l.value=i.value)});const v=y(()=>o.value.sidebar!==!1&&l.value.length>0&&o.value.layout!=="home"),d=y(()=>_?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),_=y(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),V=y(()=>v.value&&s.value),b=y(()=>v.value?_t(l.value):[]);function P(){n.value=!0}function S(){n.value=!1}function A(){n.value?S():P()}return{isOpen:n,sidebar:l,sidebarGroups:b,hasSidebar:v,hasAside:_,leftAside:d,isSidebarEnabled:V,open:P,close:S,toggle:A}}function kt(o,e){let t;Z(()=>{t=o.value?document.activeElement:void 0}),z(()=>{window.addEventListener("keyup",s)}),pe(()=>{window.removeEventListener("keyup",s)});function s(n){n.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function gt(o){const{page:e,hash:t}=L(),s=T(!1),n=y(()=>o.value.collapsed!=null),i=y(()=>!!o.value.link),l=T(!1),v=()=>{l.value=K(e.value.relativePath,o.value.link)};F([e,o,t],v),z(v);const d=y(()=>l.value?!0:o.value.items?ce(e.value.relativePath,o.value.items):!1),_=y(()=>!!(o.value.items&&o.value.items.length));Z(()=>{s.value=!!(n.value&&o.value.collapsed)}),fe(()=>{(l.value||d.value)&&(s.value=!1)});function V(){n.value&&(s.value=!s.value)}return{collapsed:s,collapsible:n,isLink:i,isActiveLink:l,hasActiveLink:d,hasChildren:_,toggle:V}}function $t(){const{hasSidebar:o}=U(),e=re("(min-width: 960px)"),t=re("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const ue=[];function Ce(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function _e(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:yt(t),link:"#"+t.id,level:s}});return Pt(e,o)}function yt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function Pt(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(l=>l.level>=s&&l.level<=n),ue.length=0;for(const{element:l,link:v}of o)ue.push({element:l,link:v});const i=[];e:for(let l=0;l=0;d--){const _=o[d];if(_.level{requestAnimationFrame(i),window.addEventListener("scroll",s)}),Ke(()=>{l(location.hash)}),pe(()=>{window.removeEventListener("scroll",s)});function i(){if(!t.value)return;const v=window.scrollY,d=window.innerHeight,_=document.body.offsetHeight,V=Math.abs(v+d-_)<1,b=ue.map(({element:S,link:A})=>({link:A,top:Vt(S)})).filter(({top:S})=>!Number.isNaN(S)).sort((S,A)=>S.top-A.top);if(!b.length){l(null);return}if(v<1){l(null);return}if(V){l(b[b.length-1].link);return}let P=null;for(const{link:S,top:A}of b){if(A>v+Re()+4)break;P=S}l(P)}function l(v){n&&n.classList.remove("active"),v==null?n=null:n=o.value.querySelector(`a[href="${decodeURIComponent(v)}"]`);const d=n;d?(d.classList.add("active"),e.value.style.top=d.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Vt(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const Lt=["href","title"],Tt=m({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const s=t.href.split("#")[1],n=document.getElementById(decodeURIComponent(s));n==null||n.focus({preventScroll:!0})}return(t,s)=>{const n=R("VPDocOutlineItem",!0);return a(),u("ul",{class:I(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),u(M,null,B(t.headers,({children:i,link:l,title:v})=>(a(),u("li",null,[p("a",{class:"outline-link",href:l,onClick:e,title:v},w(v),9,Lt),i!=null&&i.length?(a(),g(n,{key:0,headers:i},null,8,["headers"])):h("",!0)]))),256))],2)}}}),Be=$(Tt,[["__scopeId","data-v-3f927ebe"]]),Nt={class:"content"},wt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},It=m({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=L(),s=Ve([]);x(()=>{s.value=_e(e.value.outline??t.value.outline)});const n=T(),i=T();return St(n,i),(l,v)=>(a(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:I(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:n},[p("div",Nt,[p("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),p("div",wt,w(r(Ce)(r(t))),1),k(Be,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),Mt=$(It,[["__scopeId","data-v-b38bf2ff"]]),At={class:"VPDocAsideCarbonAds"},Ct=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,s)=>(a(),u("div",At,[k(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Bt={class:"VPDocAside"},Ht=m({__name:"VPDocAside",setup(o){const{theme:e}=L();return(t,s)=>(a(),u("div",Bt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),k(Mt),c(t.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=p("div",{class:"spacer"},null,-1)),c(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),g(Ct,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):h("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Et=$(Ht,[["__scopeId","data-v-6d7b3c46"]]);function Dt(){const{theme:o,page:e}=L();return y(()=>{const{text:t="Edit this page",pattern:s=""}=o.value.editLink||{};let n;return typeof s=="function"?n=s(e.value):n=s.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Ft(){const{page:o,theme:e,frontmatter:t}=L();return y(()=>{var _,V,b,P,S,A,C,N;const s=Ae(e.value.sidebar,o.value.relativePath),n=bt(s),i=Ot(n,H=>H.link.replace(/[?#].*$/,"")),l=i.findIndex(H=>K(o.value.relativePath,H.link)),v=((_=e.value.docFooter)==null?void 0:_.prev)===!1&&!t.value.prev||t.value.prev===!1,d=((V=e.value.docFooter)==null?void 0:V.next)===!1&&!t.value.next||t.value.next===!1;return{prev:v?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((b=i[l-1])==null?void 0:b.docFooterText)??((P=i[l-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((S=i[l-1])==null?void 0:S.link)},next:d?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=i[l+1])==null?void 0:A.docFooterText)??((C=i[l+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((N=i[l+1])==null?void 0:N.link)}}})}function Ot(o,e){const t=new Set;return o.filter(s=>{const n=e(s);return t.has(n)?!1:t.add(n)})}const D=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.tag??(e.href?"a":"span")),s=y(()=>e.href&&Le.test(e.href)||e.target==="_blank");return(n,i)=>(a(),g(E(t.value),{class:I(["VPLink",{link:n.href,"vp-external-link-icon":s.value,"no-icon":n.noIcon}]),href:n.href?r(me)(n.href):void 0,target:n.target??(s.value?"_blank":void 0),rel:n.rel??(s.value?"noreferrer":void 0)},{default:f(()=>[c(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Ut={class:"VPLastUpdated"},jt=["datetime"],Gt=m({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,lang:s}=L(),n=y(()=>new Date(t.value.lastUpdated)),i=y(()=>n.value.toISOString()),l=T("");return z(()=>{Z(()=>{var v,d,_;l.value=new Intl.DateTimeFormat((d=(v=e.value.lastUpdated)==null?void 0:v.formatOptions)!=null&&d.forceLocale?s.value:void 0,((_=e.value.lastUpdated)==null?void 0:_.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(v,d)=>{var _;return a(),u("p",Ut,[O(w(((_=r(e).lastUpdated)==null?void 0:_.text)||r(e).lastUpdatedText||"Last updated")+": ",1),p("time",{datetime:i.value},w(l.value),9,jt)])}}}),zt=$(Gt,[["__scopeId","data-v-475f71b8"]]),Kt={key:0,class:"VPDocFooter"},Rt={key:0,class:"edit-info"},Wt={key:0,class:"edit-link"},qt={key:1,class:"last-updated"},Jt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Yt={class:"pager"},Xt=["innerHTML"],Qt=["innerHTML"],Zt={class:"pager"},xt=["innerHTML"],en=["innerHTML"],tn=m({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:s}=L(),n=Dt(),i=Ft(),l=y(()=>e.value.editLink&&s.value.editLink!==!1),v=y(()=>t.value.lastUpdated),d=y(()=>l.value||v.value||i.value.prev||i.value.next);return(_,V)=>{var b,P,S,A;return d.value?(a(),u("footer",Kt,[c(_.$slots,"doc-footer-before",{},void 0,!0),l.value||v.value?(a(),u("div",Rt,[l.value?(a(),u("div",Wt,[k(D,{class:"edit-link-button",href:r(n).url,"no-icon":!0},{default:f(()=>[V[0]||(V[0]=p("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),O(" "+w(r(n).text),1)]),_:1},8,["href"])])):h("",!0),v.value?(a(),u("div",qt,[k(zt)])):h("",!0)])):h("",!0),(b=r(i).prev)!=null&&b.link||(P=r(i).next)!=null&&P.link?(a(),u("nav",Jt,[V[1]||(V[1]=p("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),p("div",Yt,[(S=r(i).prev)!=null&&S.link?(a(),g(D,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:f(()=>{var C;return[p("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,Xt),p("span",{class:"title",innerHTML:r(i).prev.text},null,8,Qt)]}),_:1},8,["href"])):h("",!0)]),p("div",Zt,[(A=r(i).next)!=null&&A.link?(a(),g(D,{key:0,class:"pager-link next",href:r(i).next.link},{default:f(()=>{var C;return[p("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,xt),p("span",{class:"title",innerHTML:r(i).next.text},null,8,en)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),nn=$(tn,[["__scopeId","data-v-4f9813fa"]]),sn={class:"container"},on={class:"aside-container"},an={class:"aside-content"},rn={class:"content"},ln={class:"content-container"},cn={class:"main"},un=m({__name:"VPDoc",setup(o){const{theme:e}=L(),t=ee(),{hasSidebar:s,hasAside:n,leftAside:i}=U(),l=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(v,d)=>{const _=R("Content");return a(),u("div",{class:I(["VPDoc",{"has-sidebar":r(s),"has-aside":r(n)}])},[c(v.$slots,"doc-top",{},void 0,!0),p("div",sn,[r(n)?(a(),u("div",{key:0,class:I(["aside",{"left-aside":r(i)}])},[d[0]||(d[0]=p("div",{class:"aside-curtain"},null,-1)),p("div",on,[p("div",an,[k(Et,null,{"aside-top":f(()=>[c(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),p("div",rn,[p("div",ln,[c(v.$slots,"doc-before",{},void 0,!0),p("main",cn,[k(_,{class:I(["vp-doc",[l.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),k(nn,null,{"doc-footer-before":f(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(v.$slots,"doc-after",{},void 0,!0)])])]),c(v.$slots,"doc-bottom",{},void 0,!0)],2)}}}),dn=$(un,[["__scopeId","data-v-83890dd9"]]),vn=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.href&&Le.test(e.href)),s=y(()=>e.tag||e.href?"a":"button");return(n,i)=>(a(),g(E(s.value),{class:I(["VPButton",[n.size,n.theme]]),href:n.href?r(me)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[O(w(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),pn=$(vn,[["__scopeId","data-v-14206e74"]]),fn=["src","alt"],hn=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const s=R("VPImage",!0);return e.image?(a(),u(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),u("img",G({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(ve)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,fn)):(a(),u(M,{key:1},[k(s,G({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),k(s,G({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),Q=$(hn,[["__scopeId","data-v-35a7d0b8"]]),mn={class:"container"},_n={class:"main"},bn={key:0,class:"name"},kn=["innerHTML"],gn=["innerHTML"],$n=["innerHTML"],yn={key:0,class:"actions"},Pn={key:0,class:"image"},Sn={class:"image-container"},Vn=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=q("hero-image-slot-exists");return(t,s)=>(a(),u("div",{class:I(["VPHero",{"has-image":t.image||r(e)}])},[p("div",mn,[p("div",_n,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(a(),u("h1",bn,[p("span",{innerHTML:t.name,class:"clip"},null,8,kn)])):h("",!0),t.text?(a(),u("p",{key:1,innerHTML:t.text,class:"text"},null,8,gn)):h("",!0),t.tagline?(a(),u("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,$n)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",yn,[(a(!0),u(M,null,B(t.actions,n=>(a(),u("div",{key:n.link,class:"action"},[k(pn,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),u("div",Pn,[p("div",Sn,[s[0]||(s[0]=p("div",{class:"image-bg"},null,-1)),c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),g(Q,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),Ln=$(Vn,[["__scopeId","data-v-955009fc"]]),Tn=m({__name:"VPHomeHero",setup(o){const{frontmatter:e}=L();return(t,s)=>r(e).hero?(a(),g(Ln,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),Nn={class:"box"},wn={key:0,class:"icon"},In=["innerHTML"],Mn=["innerHTML"],An=["innerHTML"],Cn={key:4,class:"link-text"},Bn={class:"link-text-value"},Hn=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),g(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[p("article",Nn,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",wn,[k(Q,{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(Q,{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(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,In)):h("",!0),p("h2",{class:"title",innerHTML:e.title},null,8,Mn),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,An)):h("",!0),e.linkText?(a(),u("div",Cn,[p("p",Bn,[O(w(e.linkText)+" ",1),t[0]||(t[0]=p("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),En=$(Hn,[["__scopeId","data-v-f5e9645b"]]),Dn={key:0,class:"VPFeatures"},Fn={class:"container"},On={class:"items"},Un=m({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=y(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,n)=>s.features?(a(),u("div",Dn,[p("div",Fn,[p("div",On,[(a(!0),u(M,null,B(s.features,i=>(a(),u("div",{key:i.title,class:I(["item",[t.value]])},[k(En,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),jn=$(Un,[["__scopeId","data-v-d0a190d7"]]),Gn=m({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=L();return(t,s)=>r(e).features?(a(),g(jn,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):h("",!0)}}),zn=m({__name:"VPHomeContent",setup(o){const{width:e}=We({initialWidth:0,includeScrollbar:!1});return(t,s)=>(a(),u("div",{class:"vp-doc container",style:Te(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),Kn=$(zn,[["__scopeId","data-v-7a48a447"]]),Rn={class:"VPHome"},Wn=m({__name:"VPHome",setup(o){const{frontmatter:e}=L();return(t,s)=>{const n=R("Content");return a(),u("div",Rn,[c(t.$slots,"home-hero-before",{},void 0,!0),k(Tn,null,{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(t.$slots,"home-hero-after",{},void 0,!0),c(t.$slots,"home-features-before",{},void 0,!0),k(Gn),c(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),g(Kn,{key:0},{default:f(()=>[k(n)]),_:1})):(a(),g(n,{key:1}))])}}}),qn=$(Wn,[["__scopeId","data-v-cbb6ec48"]]),Jn={},Yn={class:"VPPage"};function Xn(o,e){const t=R("Content");return a(),u("div",Yn,[c(o.$slots,"page-top"),k(t),c(o.$slots,"page-bottom")])}const Qn=$(Jn,[["render",Xn]]),Zn=m({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=L(),{hasSidebar:s}=U();return(n,i)=>(a(),u("div",{class:I(["VPContent",{"has-sidebar":r(s),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?c(n.$slots,"not-found",{key:0},()=>[k(mt)],!0):r(t).layout==="page"?(a(),g(Qn,{key:1},{"page-top":f(()=>[c(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),g(qn,{key:2},{"home-hero-before":f(()=>[c(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),g(E(r(t).layout),{key:3})):(a(),g(dn,{key:4},{"doc-top":f(()=>[c(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[c(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[c(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[c(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[c(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),xn=$(Zn,[["__scopeId","data-v-91765379"]]),es={class:"container"},ts=["innerHTML"],ns=["innerHTML"],ss=m({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=L(),{hasSidebar:s}=U();return(n,i)=>r(e).footer&&r(t).footer!==!1?(a(),u("footer",{key:0,class:I(["VPFooter",{"has-sidebar":r(s)}])},[p("div",es,[r(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,ts)):h("",!0),r(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,ns)):h("",!0)])],2)):h("",!0)}}),os=$(ss,[["__scopeId","data-v-c970a860"]]);function as(){const{theme:o,frontmatter:e}=L(),t=Ve([]),s=y(()=>t.value.length>0);return x(()=>{t.value=_e(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:s}}const rs={class:"menu-text"},is={class:"header"},ls={class:"outline"},cs=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=L(),s=T(!1),n=T(0),i=T(),l=T();function v(b){var P;(P=i.value)!=null&&P.contains(b.target)||(s.value=!1)}F(s,b=>{if(b){document.addEventListener("click",v);return}document.removeEventListener("click",v)}),ie("Escape",()=>{s.value=!1}),x(()=>{s.value=!1});function d(){s.value=!s.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function _(b){b.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Ne(()=>{s.value=!1}))}function V(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(b,P)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:Te({"--vp-vh":n.value+"px"}),ref_key:"main",ref:i},[b.headers.length>0?(a(),u("button",{key:0,onClick:d,class:I({open:s.value})},[p("span",rs,w(r(Ce)(r(t))),1),P[0]||(P[0]=p("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(a(),u("button",{key:1,onClick:V},w(r(t).returnToTopLabel||"Return to top"),1)),k(de,{name:"flyout"},{default:f(()=>[s.value?(a(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:_},[p("div",is,[p("a",{class:"top-link",href:"#",onClick:V},w(r(t).returnToTopLabel||"Return to top"),1)]),p("div",ls,[k(Be,{headers:b.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),us=$(cs,[["__scopeId","data-v-bc9dc845"]]),ds={class:"container"},vs=["aria-expanded"],ps={class:"menu-text"},fs=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=L(),{hasSidebar:s}=U(),{headers:n}=as(),{y:i}=we(),l=T(0);z(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),x(()=>{n.value=_e(t.value.outline??e.value.outline)});const v=y(()=>n.value.length===0),d=y(()=>v.value&&!s.value),_=y(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:v.value,fixed:d.value}));return(V,b)=>r(t).layout!=="home"&&(!d.value||r(i)>=l.value)?(a(),u("div",{key:0,class:I(_.value)},[p("div",ds,[r(s)?(a(),u("button",{key:0,class:"menu","aria-expanded":V.open,"aria-controls":"VPSidebarNav",onClick:b[0]||(b[0]=P=>V.$emit("open-menu"))},[b[1]||(b[1]=p("span",{class:"vpi-align-left menu-icon"},null,-1)),p("span",ps,w(r(e).sidebarMenuLabel||"Menu"),1)],8,vs)):h("",!0),k(us,{headers:r(n),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),hs=$(fs,[["__scopeId","data-v-070ab83d"]]);function ms(){const o=T(!1);function e(){o.value=!0,window.addEventListener("resize",n)}function t(){o.value=!1,window.removeEventListener("resize",n)}function s(){o.value?t():e()}function n(){window.outerWidth>=768&&t()}const i=ee();return F(()=>i.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:s}}const _s={},bs={class:"VPSwitch",type:"button",role:"switch"},ks={class:"check"},gs={key:0,class:"icon"};function $s(o,e){return a(),u("button",bs,[p("span",ks,[o.$slots.default?(a(),u("span",gs,[c(o.$slots,"default",{},void 0,!0)])):h("",!0)])])}const ys=$(_s,[["render",$s],["__scopeId","data-v-4a1c76db"]]),Ps=m({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=L(),s=q("toggle-appearance",()=>{e.value=!e.value}),n=T("");return fe(()=>{n.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,l)=>(a(),g(ys,{title:n.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(s)},{default:f(()=>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"]))}}),be=$(Ps,[["__scopeId","data-v-e40a8bb6"]]),Ss={key:0,class:"VPNavBarAppearance"},Vs=m({__name:"VPNavBarAppearance",setup(o){const{site:e}=L();return(t,s)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ss,[k(be)])):h("",!0)}}),Ls=$(Vs,[["__scopeId","data-v-af096f4a"]]),ke=T();let He=!1,ae=0;function Ts(o){const e=T(!1);if(te){!He&&Ns(),ae++;const t=F(ke,s=>{var n,i,l;s===o.el.value||(n=o.el.value)!=null&&n.contains(s)?(e.value=!0,(i=o.onFocus)==null||i.call(o)):(e.value=!1,(l=o.onBlur)==null||l.call(o))});pe(()=>{t(),ae--,ae||ws()})}return qe(e)}function Ns(){document.addEventListener("focusin",Ee),He=!0,ke.value=document.activeElement}function ws(){document.removeEventListener("focusin",Ee)}function Ee(){ke.value=document.activeElement}const Is={class:"VPMenuLink"},Ms=m({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=L();return(t,s)=>(a(),u("div",Is,[k(D,{class:I({active:r(K)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:f(()=>[O(w(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),ne=$(Ms,[["__scopeId","data-v-8b74d055"]]),As={class:"VPMenuGroup"},Cs={key:0,class:"title"},Bs=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",As,[e.text?(a(),u("p",Cs,w(e.text),1)):h("",!0),(a(!0),u(M,null,B(e.items,s=>(a(),u(M,null,["link"in s?(a(),g(ne,{key:0,item:s},null,8,["item"])):h("",!0)],64))),256))]))}}),Hs=$(Bs,[["__scopeId","data-v-48c802d0"]]),Es={class:"VPMenu"},Ds={key:0,class:"items"},Fs=m({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),u("div",Es,[e.items?(a(),u("div",Ds,[(a(!0),u(M,null,B(e.items,s=>(a(),u(M,{key:JSON.stringify(s)},["link"in s?(a(),g(ne,{key:0,item:s},null,8,["item"])):"component"in s?(a(),g(E(s.component),G({key:1,ref_for:!0},s.props),null,16)):(a(),g(Hs,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),Os=$(Fs,[["__scopeId","data-v-7dd3104a"]]),Us=["aria-expanded","aria-label"],js={key:0,class:"text"},Gs=["innerHTML"],zs={key:1,class:"vpi-more-horizontal icon"},Ks={class:"menu"},Rs=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=T(!1),t=T();Ts({el:t,onBlur:s});function s(){e.value=!1}return(n,i)=>(a(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=l=>e.value=!0),onMouseleave:i[2]||(i[2]=l=>e.value=!1)},[p("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:i[0]||(i[0]=l=>e.value=!e.value)},[n.button||n.icon?(a(),u("span",js,[n.icon?(a(),u("span",{key:0,class:I([n.icon,"option-icon"])},null,2)):h("",!0),n.button?(a(),u("span",{key:1,innerHTML:n.button},null,8,Gs)):h("",!0),i[3]||(i[3]=p("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(a(),u("span",zs))],8,Us),p("div",Ks,[k(Os,{items:n.items},{default:f(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ge=$(Rs,[["__scopeId","data-v-e5380155"]]),Ws=["href","aria-label","innerHTML"],qs=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(s,n)=>(a(),u("a",{class:"VPSocialLink no-icon",href:s.link,"aria-label":s.ariaLabel??(typeof s.icon=="string"?s.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,Ws))}}),Js=$(qs,[["__scopeId","data-v-717b8b75"]]),Ys={class:"VPSocialLinks"},Xs=m({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),u("div",Ys,[(a(!0),u(M,null,B(e.links,({link:s,icon:n,ariaLabel:i})=>(a(),g(Js,{key:s,icon:n,link:s,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),$e=$(Xs,[["__scopeId","data-v-ee7a9424"]]),Qs={key:0,class:"group translations"},Zs={class:"trans-title"},xs={key:1,class:"group"},eo={class:"item appearance"},to={class:"label"},no={class:"appearance-action"},so={key:2,class:"group"},oo={class:"item social-links"},ao=m({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=L(),{localeLinks:s,currentLang:n}=Y({correspondingLink:!0}),i=y(()=>s.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(l,v)=>i.value?(a(),g(ge,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[r(s).length&&r(n).label?(a(),u("div",Qs,[p("p",Zs,w(r(n).label),1),(a(!0),u(M,null,B(r(s),d=>(a(),g(ne,{key:d.link,item:d},null,8,["item"]))),128))])):h("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",xs,[p("div",eo,[p("p",to,w(r(t).darkModeSwitchLabel||"Appearance"),1),p("div",no,[k(be)])])])):h("",!0),r(t).socialLinks?(a(),u("div",so,[p("div",oo,[k($e,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),ro=$(ao,[["__scopeId","data-v-925effce"]]),io=["aria-expanded"],lo=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),u("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]=s=>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,io))}}),co=$(lo,[["__scopeId","data-v-5dea55bf"]]),uo=["innerHTML"],vo=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=L();return(t,s)=>(a(),g(D,{class:I({VPNavBarMenuLink:!0,active:r(K)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:f(()=>[p("span",{innerHTML:t.item.text},null,8,uo)]),_:1},8,["class","href","noIcon","target","rel"]))}}),po=$(vo,[["__scopeId","data-v-ed5ac1f6"]]),fo=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=L(),s=i=>"component"in i?!1:"link"in i?K(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(s),n=y(()=>s(e.item));return(i,l)=>(a(),g(ge,{class:I({VPNavBarMenuGroup:!0,active:r(K)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||n.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),ho={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},mo=m({__name:"VPNavBarMenu",setup(o){const{theme:e}=L();return(t,s)=>r(e).nav?(a(),u("nav",ho,[s[0]||(s[0]=p("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(a(!0),u(M,null,B(r(e).nav,n=>(a(),u(M,{key:JSON.stringify(n)},["link"in n?(a(),g(po,{key:0,item:n},null,8,["item"])):"component"in n?(a(),g(E(n.component),G({key:1,ref_for:!0},n.props),null,16)):(a(),g(fo,{key:2,item:n},null,8,["item"]))],64))),128))])):h("",!0)}}),_o=$(mo,[["__scopeId","data-v-e6d46098"]]);function bo(o){const{localeIndex:e,theme:t}=L();function s(n){var A,C,N;const i=n.split("."),l=(A=t.value.search)==null?void 0:A.options,v=l&&typeof l=="object",d=v&&((N=(C=l.locales)==null?void 0:C[e.value])==null?void 0:N.translations)||null,_=v&&l.translations||null;let V=d,b=_,P=o;const S=i.pop();for(const H of i){let j=null;const W=P==null?void 0:P[H];W&&(j=P=W);const se=b==null?void 0:b[H];se&&(j=b=se);const oe=V==null?void 0:V[H];oe&&(j=V=oe),W||(P=j),se||(b=j),oe||(V=j)}return(V==null?void 0:V[S])??(b==null?void 0:b[S])??(P==null?void 0:P[S])??""}return s}const ko=["aria-label"],go={class:"DocSearch-Button-Container"},$o={class:"DocSearch-Button-Placeholder"},ye=m({__name:"VPNavBarSearchButton",setup(o){const t=bo({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,n)=>(a(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[p("span",go,[n[0]||(n[0]=p("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),p("span",$o,w(r(t)("button.buttonText")),1)]),n[1]||(n[1]=p("span",{class:"DocSearch-Button-Keys"},[p("kbd",{class:"DocSearch-Button-Key"}),p("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,ko))}}),yo={class:"VPNavBarSearch"},Po={id:"local-search"},So={key:1,id:"docsearch"},Vo=m({__name:"VPNavBarSearch",setup(o){const e=Je(()=>Ye(()=>import("./VPLocalSearchBox.DUu90fND.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:s}=L(),n=T(!1),i=T(!1);z(()=>{});function l(){n.value||(n.value=!0,setTimeout(v,16))}function v(){const b=new Event("keydown");b.key="k",b.metaKey=!0,window.dispatchEvent(b),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||v()},16)}function d(b){const P=b.target,S=P.tagName;return P.isContentEditable||S==="INPUT"||S==="SELECT"||S==="TEXTAREA"}const _=T(!1);ie("k",b=>{(b.ctrlKey||b.metaKey)&&(b.preventDefault(),_.value=!0)}),ie("/",b=>{d(b)||(b.preventDefault(),_.value=!0)});const V="local";return(b,P)=>{var S;return a(),u("div",yo,[r(V)==="local"?(a(),u(M,{key:0},[_.value?(a(),g(r(e),{key:0,onClose:P[0]||(P[0]=A=>_.value=!1)})):h("",!0),p("div",Po,[k(ye,{onClick:P[1]||(P[1]=A=>_.value=!0)})])],64)):r(V)==="algolia"?(a(),u(M,{key:1},[n.value?(a(),g(r(t),{key:0,algolia:((S=r(s).search)==null?void 0:S.options)??r(s).algolia,onVnodeBeforeMount:P[2]||(P[2]=A=>i.value=!0)},null,8,["algolia"])):h("",!0),i.value?h("",!0):(a(),u("div",So,[k(ye,{onClick:l})]))],64)):h("",!0)])}}}),Lo=m({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=L();return(t,s)=>r(e).socialLinks?(a(),g($e,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),To=$(Lo,[["__scopeId","data-v-164c457f"]]),No=["href","rel","target"],wo={key:1},Io={key:2},Mo=m({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=L(),{hasSidebar:s}=U(),{currentLang:n}=Y(),i=y(()=>{var d;return typeof t.value.logoLink=="string"?t.value.logoLink:(d=t.value.logoLink)==null?void 0:d.link}),l=y(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.rel}),v=y(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.target});return(d,_)=>(a(),u("div",{class:I(["VPNavBarTitle",{"has-sidebar":r(s)}])},[p("a",{class:"title",href:i.value??r(me)(r(n).link),rel:l.value,target:v.value},[c(d.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),g(Q,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):h("",!0),r(t).siteTitle?(a(),u("span",wo,w(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),u("span",Io,w(r(e).title),1)):h("",!0),c(d.$slots,"nav-bar-title-after",{},void 0,!0)],8,No)],2))}}),Ao=$(Mo,[["__scopeId","data-v-28a961f9"]]),Co={class:"items"},Bo={class:"title"},Ho=m({__name:"VPNavBarTranslations",setup(o){const{theme:e}=L(),{localeLinks:t,currentLang:s}=Y({correspondingLink:!0});return(n,i)=>r(t).length&&r(s).label?(a(),g(ge,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:f(()=>[p("div",Co,[p("p",Bo,w(r(s).label),1),(a(!0),u(M,null,B(r(t),l=>(a(),g(ne,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),Eo=$(Ho,[["__scopeId","data-v-c80d9ad0"]]),Do={class:"wrapper"},Fo={class:"container"},Oo={class:"title"},Uo={class:"content"},jo={class:"content-body"},Go=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const e=o,{y:t}=we(),{hasSidebar:s}=U(),{frontmatter:n}=L(),i=T({});return fe(()=>{i.value={"has-sidebar":s.value,home:n.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,v)=>(a(),u("div",{class:I(["VPNavBar",i.value])},[p("div",Do,[p("div",Fo,[p("div",Oo,[k(Ao,null,{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),p("div",Uo,[p("div",jo,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),k(Vo,{class:"search"}),k(_o,{class:"menu"}),k(Eo,{class:"translations"}),k(Ls,{class:"appearance"}),k(To,{class:"social-links"}),k(ro,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),k(co,{class:"hamburger",active:l.isScreenOpen,onClick:v[0]||(v[0]=d=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),v[1]||(v[1]=p("div",{class:"divider"},[p("div",{class:"divider-line"})],-1))],2))}}),zo=$(Go,[["__scopeId","data-v-822684d1"]]),Ko={key:0,class:"VPNavScreenAppearance"},Ro={class:"text"},Wo=m({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=L();return(s,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ko,[p("p",Ro,w(r(t).darkModeSwitchLabel||"Appearance"),1),k(be)])):h("",!0)}}),qo=$(Wo,[["__scopeId","data-v-ffb44008"]]),Jo=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=q("close-screen");return(t,s)=>(a(),g(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),Yo=$(Jo,[["__scopeId","data-v-27d04aeb"]]),Xo=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=q("close-screen");return(t,s)=>(a(),g(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:f(()=>[O(w(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),De=$(Xo,[["__scopeId","data-v-7179dbb7"]]),Qo={class:"VPNavScreenMenuGroupSection"},Zo={key:0,class:"title"},xo=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",Qo,[e.text?(a(),u("p",Zo,w(e.text),1)):h("",!0),(a(!0),u(M,null,B(e.items,s=>(a(),g(De,{key:s.text,item:s},null,8,["item"]))),128))]))}}),ea=$(xo,[["__scopeId","data-v-4b8941ac"]]),ta=["aria-controls","aria-expanded"],na=["innerHTML"],sa=["id"],oa={key:0,class:"item"},aa={key:1,class:"item"},ra={key:2,class:"group"},ia=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=T(!1),s=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(i,l)=>(a(),u("div",{class:I(["VPNavScreenMenuGroup",{open:t.value}])},[p("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:n},[p("span",{class:"button-text",innerHTML:i.text},null,8,na),l[0]||(l[0]=p("span",{class:"vpi-plus button-icon"},null,-1))],8,ta),p("div",{id:s.value,class:"items"},[(a(!0),u(M,null,B(i.items,v=>(a(),u(M,{key:JSON.stringify(v)},["link"in v?(a(),u("div",oa,[k(De,{item:v},null,8,["item"])])):"component"in v?(a(),u("div",aa,[(a(),g(E(v.component),G({ref_for:!0},v.props,{"screen-menu":""}),null,16))])):(a(),u("div",ra,[k(ea,{text:v.text,items:v.items},null,8,["text","items"])]))],64))),128))],8,sa)],2))}}),la=$(ia,[["__scopeId","data-v-875057a5"]]),ca={key:0,class:"VPNavScreenMenu"},ua=m({__name:"VPNavScreenMenu",setup(o){const{theme:e}=L();return(t,s)=>r(e).nav?(a(),u("nav",ca,[(a(!0),u(M,null,B(r(e).nav,n=>(a(),u(M,{key:JSON.stringify(n)},["link"in n?(a(),g(Yo,{key:0,item:n},null,8,["item"])):"component"in n?(a(),g(E(n.component),G({key:1,ref_for:!0},n.props,{"screen-menu":""}),null,16)):(a(),g(la,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),da=m({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=L();return(t,s)=>r(e).socialLinks?(a(),g($e,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),va={class:"list"},pa=m({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=Y({correspondingLink:!0}),s=T(!1);function n(){s.value=!s.value}return(i,l)=>r(e).length&&r(t).label?(a(),u("div",{key:0,class:I(["VPNavScreenTranslations",{open:s.value}])},[p("button",{class:"title",onClick:n},[l[0]||(l[0]=p("span",{class:"vpi-languages icon lang"},null,-1)),O(" "+w(r(t).label)+" ",1),l[1]||(l[1]=p("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),p("ul",va,[(a(!0),u(M,null,B(r(e),v=>(a(),u("li",{key:v.link,class:"item"},[k(D,{class:"link",href:v.link},{default:f(()=>[O(w(v.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),fa=$(pa,[["__scopeId","data-v-362991c2"]]),ha={class:"container"},ma=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=T(null),t=Ie(te?document.body:null);return(s,n)=>(a(),g(de,{name:"fade",onEnter:n[0]||(n[0]=i=>t.value=!0),onAfterLeave:n[1]||(n[1]=i=>t.value=!1)},{default:f(()=>[s.open?(a(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[p("div",ha,[c(s.$slots,"nav-screen-content-before",{},void 0,!0),k(ua,{class:"menu"}),k(fa,{class:"translations"}),k(qo,{class:"appearance"}),k(da,{class:"social-links"}),c(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),_a=$(ma,[["__scopeId","data-v-833aabba"]]),ba={key:0,class:"VPNav"},ka=m({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=ms(),{frontmatter:n}=L(),i=y(()=>n.value.navbar!==!1);return he("close-screen",t),Z(()=>{te&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(l,v)=>i.value?(a(),u("header",ba,[k(zo,{"is-screen-open":r(e),onToggleScreen:r(s)},{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),k(_a,{open:r(e)},{"nav-screen-content-before":f(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),ga=$(ka,[["__scopeId","data-v-f1e365da"]]),$a=["role","tabindex"],ya={key:1,class:"items"},Pa=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:s,isLink:n,isActiveLink:i,hasActiveLink:l,hasChildren:v,toggle:d}=gt(y(()=>e.item)),_=y(()=>v.value?"section":"div"),V=y(()=>n.value?"a":"div"),b=y(()=>v.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=y(()=>n.value?void 0:"button"),S=y(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":n.value},{"is-active":i.value},{"has-active":l.value}]);function A(N){"key"in N&&N.key!=="Enter"||!e.item.link&&d()}function C(){e.item.link&&d()}return(N,H)=>{const j=R("VPSidebarItem",!0);return a(),g(E(_.value),{class:I(["VPSidebarItem",S.value])},{default:f(()=>[N.item.text?(a(),u("div",G({key:0,class:"item",role:P.value},Qe(N.item.items?{click:A,keydown:A}:{},!0),{tabindex:N.item.items&&0}),[H[1]||(H[1]=p("div",{class:"indicator"},null,-1)),N.item.link?(a(),g(D,{key:0,tag:V.value,class:"link",href:N.item.link,rel:N.item.rel,target:N.item.target},{default:f(()=>[(a(),g(E(b.value),{class:"text",innerHTML:N.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),g(E(b.value),{key:1,class:"text",innerHTML:N.item.text},null,8,["innerHTML"])),N.item.collapsed!=null&&N.item.items&&N.item.items.length?(a(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:Xe(C,["enter"]),tabindex:"0"},H[0]||(H[0]=[p("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):h("",!0)],16,$a)):h("",!0),N.item.items&&N.item.items.length?(a(),u("div",ya,[N.depth<5?(a(!0),u(M,{key:0},B(N.item.items,W=>(a(),g(j,{key:W.text,item:W,depth:N.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),Sa=$(Pa,[["__scopeId","data-v-196b2e5f"]]),Va=m({__name:"VPSidebarGroup",props:{items:{}},setup(o){const e=T(!0);let t=null;return z(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),Ze(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,n)=>(a(!0),u(M,null,B(s.items,i=>(a(),u("div",{key:i.text,class:I(["group",{"no-transition":e.value}])},[k(Sa,{item:i,depth:0},null,8,["item"])],2))),128))}}),La=$(Va,[["__scopeId","data-v-9e426adc"]]),Ta={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Na=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=U(),s=o,n=T(null),i=Ie(te?document.body:null);F([s,n],()=>{var v;s.open?(i.value=!0,(v=n.value)==null||v.focus()):i.value=!1},{immediate:!0,flush:"post"});const l=T(0);return F(e,()=>{l.value+=1},{deep:!0}),(v,d)=>r(t)?(a(),u("aside",{key:0,class:I(["VPSidebar",{open:v.open}]),ref_key:"navEl",ref:n,onClick:d[0]||(d[0]=xe(()=>{},["stop"]))},[d[2]||(d[2]=p("div",{class:"curtain"},null,-1)),p("nav",Ta,[d[1]||(d[1]=p("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(v.$slots,"sidebar-nav-before",{},void 0,!0),(a(),g(La,{items:r(e),key:l.value},null,8,["items"])),c(v.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),wa=$(Na,[["__scopeId","data-v-18756405"]]),Ia=m({__name:"VPSkipLink",setup(o){const e=ee(),t=T();F(()=>e.path,()=>t.value.focus());function s({target:n}){const i=document.getElementById(decodeURIComponent(n.hash).slice(1));if(i){const l=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",l)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",l),i.focus(),window.scrollTo(0,0)}}return(n,i)=>(a(),u(M,null,[p("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),p("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}}),Ma=$(Ia,[["__scopeId","data-v-c3508ec8"]]),Aa=m({__name:"Layout",setup(o){const{isOpen:e,open:t,close:s}=U(),n=ee();F(()=>n.path,s),kt(e,s);const{frontmatter:i}=L(),l=Me(),v=y(()=>!!l["home-hero-image"]);return he("hero-image-slot-exists",v),(d,_)=>{const V=R("Content");return r(i).layout!==!1?(a(),u("div",{key:0,class:I(["Layout",r(i).pageClass])},[c(d.$slots,"layout-top",{},void 0,!0),k(Ma),k(rt,{class:"backdrop",show:r(e),onClick:r(s)},null,8,["show","onClick"]),k(ga,null,{"nav-bar-title-before":f(()=>[c(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(d.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[c(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),k(hs,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),k(wa,{open:r(e)},{"sidebar-nav-before":f(()=>[c(d.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[c(d.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),k(xn,null,{"page-top":f(()=>[c(d.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(d.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[c(d.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[c(d.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(d.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(d.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(d.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(d.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(d.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(d.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(d.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(d.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[c(d.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(d.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(d.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[c(d.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(d.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[c(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),k(os),c(d.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),g(V,{key:1}))}}}),Ca=$(Aa,[["__scopeId","data-v-a9a9e638"]]),Pe={Layout:Ca,enhanceApp:({app:o})=>{o.component("Badge",st)}},Ba=o=>{if(typeof document>"u")return{stabilizeScrollPosition:n=>async(...i)=>n(...i)};const e=document.documentElement;return{stabilizeScrollPosition:s=>async(...n)=>{const i=s(...n),l=o.value;if(!l)return i;const v=l.offsetTop-e.scrollTop;return await Ne(),e.scrollTop=l.offsetTop-v,i}}},Fe="vitepress:tabSharedState",J=typeof localStorage<"u"?localStorage:null,Oe="vitepress:tabsSharedState",Ha=()=>{const o=J==null?void 0:J.getItem(Oe);if(o)try{return JSON.parse(o)}catch{}return{}},Ea=o=>{J&&J.setItem(Oe,JSON.stringify(o))},Da=o=>{const e=et({});F(()=>e.content,(t,s)=>{t&&s&&Ea(t)},{deep:!0}),o.provide(Fe,e)},Fa=(o,e)=>{const t=q(Fe);if(!t)throw new Error("[vitepress-plugin-tabs] TabsSharedState should be injected");z(()=>{t.content||(t.content=Ha())});const s=T(),n=y({get(){var d;const l=e.value,v=o.value;if(l){const _=(d=t.content)==null?void 0:d[l];if(_&&v.includes(_))return _}else{const _=s.value;if(_)return _}return v[0]},set(l){const v=e.value;v?t.content&&(t.content[v]=l):s.value=l}});return{selected:n,select:l=>{n.value=l}}};let Se=0;const Oa=()=>(Se++,""+Se);function Ua(){const o=Me();return y(()=>{var s;const t=(s=o.default)==null?void 0:s.call(o);return t?t.filter(n=>typeof n.type=="object"&&"__name"in n.type&&n.type.__name==="PluginTabsTab"&&n.props).map(n=>{var i;return(i=n.props)==null?void 0:i.label}):[]})}const Ue="vitepress:tabSingleState",ja=o=>{he(Ue,o)},Ga=()=>{const o=q(Ue);if(!o)throw new Error("[vitepress-plugin-tabs] TabsSingleState should be injected");return o},za={class:"plugin-tabs"},Ka=["id","aria-selected","aria-controls","tabindex","onClick"],Ra=m({__name:"PluginTabs",props:{sharedStateKey:{}},setup(o){const e=o,t=Ua(),{selected:s,select:n}=Fa(t,tt(e,"sharedStateKey")),i=T(),{stabilizeScrollPosition:l}=Ba(i),v=l(n),d=T([]),_=b=>{var A;const P=t.value.indexOf(s.value);let S;b.key==="ArrowLeft"?S=P>=1?P-1:t.value.length-1:b.key==="ArrowRight"&&(S=P(a(),u("div",za,[p("div",{ref_key:"tablist",ref:i,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:_},[(a(!0),u(M,null,B(r(t),S=>(a(),u("button",{id:`tab-${S}-${r(V)}`,ref_for:!0,ref_key:"buttonRefs",ref:d,key:S,role:"tab",class:"plugin-tabs--tab","aria-selected":S===r(s),"aria-controls":`panel-${S}-${r(V)}`,tabindex:S===r(s)?0:-1,onClick:()=>r(v)(S)},w(S),9,Ka))),128))],544),c(b.$slots,"default")]))}}),Wa=["id","aria-labelledby"],qa=m({__name:"PluginTabsTab",props:{label:{}},setup(o){const{uid:e,selected:t}=Ga();return(s,n)=>r(t)===s.label?(a(),u("div",{key:0,id:`panel-${s.label}-${r(e)}`,class:"plugin-tabs--content",role:"tabpanel",tabindex:"0","aria-labelledby":`tab-${s.label}-${r(e)}`},[c(s.$slots,"default",{},void 0,!0)],8,Wa)):h("",!0)}}),Ja=$(qa,[["__scopeId","data-v-9b0d03d2"]]),Ya=o=>{Da(o),o.component("PluginTabs",Ra),o.component("PluginTabsTab",Ja)},Qa={extends:Pe,Layout(){return nt(Pe.Layout,null,{})},enhanceApp({app:o,router:e,siteData:t}){Ya(o)}};export{Qa as R,bo as c,L as u}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.BO9Crzas.js","assets/chunks/framework.BvdfcH24.js"])))=>i.map(i=>d[i]); +import{d as m,o as a,c as u,r as c,n as I,a as O,t as w,b as g,w as f,e as h,T as de,_ as $,u as je,i as Ge,f as ze,g as ve,h as y,j as p,k as r,l as K,m as re,p as T,q as F,s as Z,v as z,x as pe,y as fe,z as Ke,A as Re,B as R,F as M,C as B,D as Ve,E as x,G as k,H as E,I as Le,J as ee,K as G,L as q,M as We,N as Te,O as ie,P as Ne,Q as we,R as te,S as qe,U as Je,V as Ye,W as Ie,X as he,Y as Xe,Z as Qe,$ as Ze,a0 as xe,a1 as Me,a2 as et,a3 as tt,a4 as nt}from"./framework.BvdfcH24.js";const st=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),u("span",{class:I(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[O(w(e.text),1)])],2))}}),ot={key:0,class:"VPBackdrop"},at=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),g(de,{name:"fade"},{default:f(()=>[e.show?(a(),u("div",ot)):h("",!0)]),_:1}))}}),rt=$(at,[["__scopeId","data-v-b06cdb19"]]),L=je;function it(o,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(o,e):(o(),(s=!0)&&setTimeout(()=>s=!1,e))}}function le(o){return/^\//.test(o)?o:`/${o}`}function me(o){const{pathname:e,search:t,hash:s,protocol:n}=new URL(o,"http://a.com");if(Ge(o)||o.startsWith("#")||!n.startsWith("http")||!ze(e))return o;const{site:i}=L(),l=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${s}`);return ve(l)}function Y({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:s,theme:n,hash:i}=L(),l=y(()=>{var d,_;return{label:(d=e.value.locales[t.value])==null?void 0:d.label,link:((_=e.value.locales[t.value])==null?void 0:_.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([d,_])=>l.value.label===_.label?[]:{text:_.label,link:lt(_.link||(d==="root"?"/":`/${d}/`),n.value.i18nRouting!==!1&&o,s.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:l}}function lt(o,e,t,s){return e?o.replace(/\/$/,"")+le(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):o}const ct={class:"NotFound"},ut={class:"code"},dt={class:"title"},vt={class:"quote"},pt={class:"action"},ft=["href","aria-label"],ht=m({__name:"NotFound",setup(o){const{theme:e}=L(),{currentLang:t}=Y();return(s,n)=>{var i,l,v,d,_;return a(),u("div",ct,[p("p",ut,w(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),p("h1",dt,w(((l=r(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),n[0]||(n[0]=p("div",{class:"divider"},null,-1)),p("blockquote",vt,w(((v=r(e).notFound)==null?void 0:v.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",pt,[p("a",{class:"link",href:r(ve)(r(t).link),"aria-label":((d=r(e).notFound)==null?void 0:d.linkLabel)??"go to home"},w(((_=r(e).notFound)==null?void 0:_.linkText)??"Take me home"),9,ft)])])}}}),mt=$(ht,[["__scopeId","data-v-951cab6c"]]);function Ae(o,e){if(Array.isArray(o))return X(o);if(o==null)return[];e=le(e);const t=Object.keys(o).sort((n,i)=>i.split("/").length-n.split("/").length).find(n=>e.startsWith(le(n))),s=t?o[t]:[];return Array.isArray(s)?X(s):X(s.items,s.base)}function _t(o){const e=[];let t=0;for(const s in o){const n=o[s];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function bt(o){const e=[];function t(s){for(const n of s)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(o),e}function ce(o,e){return Array.isArray(e)?e.some(t=>ce(o,t)):K(o,e.link)?!0:e.items?ce(o,e.items):!1}function X(o,e){return[...o].map(t=>{const s={...t},n=s.base||e;return n&&s.link&&(s.link=n+s.link),s.items&&(s.items=X(s.items,n)),s})}function U(){const{frontmatter:o,page:e,theme:t}=L(),s=re("(min-width: 960px)"),n=T(!1),i=y(()=>{const C=t.value.sidebar,N=e.value.relativePath;return C?Ae(C,N):[]}),l=T(i.value);F(i,(C,N)=>{JSON.stringify(C)!==JSON.stringify(N)&&(l.value=i.value)});const v=y(()=>o.value.sidebar!==!1&&l.value.length>0&&o.value.layout!=="home"),d=y(()=>_?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),_=y(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),V=y(()=>v.value&&s.value),b=y(()=>v.value?_t(l.value):[]);function P(){n.value=!0}function S(){n.value=!1}function A(){n.value?S():P()}return{isOpen:n,sidebar:l,sidebarGroups:b,hasSidebar:v,hasAside:_,leftAside:d,isSidebarEnabled:V,open:P,close:S,toggle:A}}function kt(o,e){let t;Z(()=>{t=o.value?document.activeElement:void 0}),z(()=>{window.addEventListener("keyup",s)}),pe(()=>{window.removeEventListener("keyup",s)});function s(n){n.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function gt(o){const{page:e,hash:t}=L(),s=T(!1),n=y(()=>o.value.collapsed!=null),i=y(()=>!!o.value.link),l=T(!1),v=()=>{l.value=K(e.value.relativePath,o.value.link)};F([e,o,t],v),z(v);const d=y(()=>l.value?!0:o.value.items?ce(e.value.relativePath,o.value.items):!1),_=y(()=>!!(o.value.items&&o.value.items.length));Z(()=>{s.value=!!(n.value&&o.value.collapsed)}),fe(()=>{(l.value||d.value)&&(s.value=!1)});function V(){n.value&&(s.value=!s.value)}return{collapsed:s,collapsible:n,isLink:i,isActiveLink:l,hasActiveLink:d,hasChildren:_,toggle:V}}function $t(){const{hasSidebar:o}=U(),e=re("(min-width: 960px)"),t=re("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const ue=[];function Ce(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function _e(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:yt(t),link:"#"+t.id,level:s}});return Pt(e,o)}function yt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function Pt(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(l=>l.level>=s&&l.level<=n),ue.length=0;for(const{element:l,link:v}of o)ue.push({element:l,link:v});const i=[];e:for(let l=0;l=0;d--){const _=o[d];if(_.level{requestAnimationFrame(i),window.addEventListener("scroll",s)}),Ke(()=>{l(location.hash)}),pe(()=>{window.removeEventListener("scroll",s)});function i(){if(!t.value)return;const v=window.scrollY,d=window.innerHeight,_=document.body.offsetHeight,V=Math.abs(v+d-_)<1,b=ue.map(({element:S,link:A})=>({link:A,top:Vt(S)})).filter(({top:S})=>!Number.isNaN(S)).sort((S,A)=>S.top-A.top);if(!b.length){l(null);return}if(v<1){l(null);return}if(V){l(b[b.length-1].link);return}let P=null;for(const{link:S,top:A}of b){if(A>v+Re()+4)break;P=S}l(P)}function l(v){n&&n.classList.remove("active"),v==null?n=null:n=o.value.querySelector(`a[href="${decodeURIComponent(v)}"]`);const d=n;d?(d.classList.add("active"),e.value.style.top=d.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Vt(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const Lt=["href","title"],Tt=m({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const s=t.href.split("#")[1],n=document.getElementById(decodeURIComponent(s));n==null||n.focus({preventScroll:!0})}return(t,s)=>{const n=R("VPDocOutlineItem",!0);return a(),u("ul",{class:I(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),u(M,null,B(t.headers,({children:i,link:l,title:v})=>(a(),u("li",null,[p("a",{class:"outline-link",href:l,onClick:e,title:v},w(v),9,Lt),i!=null&&i.length?(a(),g(n,{key:0,headers:i},null,8,["headers"])):h("",!0)]))),256))],2)}}}),Be=$(Tt,[["__scopeId","data-v-3f927ebe"]]),Nt={class:"content"},wt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},It=m({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=L(),s=Ve([]);x(()=>{s.value=_e(e.value.outline??t.value.outline)});const n=T(),i=T();return St(n,i),(l,v)=>(a(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:I(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:n},[p("div",Nt,[p("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),p("div",wt,w(r(Ce)(r(t))),1),k(Be,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),Mt=$(It,[["__scopeId","data-v-b38bf2ff"]]),At={class:"VPDocAsideCarbonAds"},Ct=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,s)=>(a(),u("div",At,[k(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Bt={class:"VPDocAside"},Ht=m({__name:"VPDocAside",setup(o){const{theme:e}=L();return(t,s)=>(a(),u("div",Bt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),k(Mt),c(t.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=p("div",{class:"spacer"},null,-1)),c(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),g(Ct,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):h("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Et=$(Ht,[["__scopeId","data-v-6d7b3c46"]]);function Dt(){const{theme:o,page:e}=L();return y(()=>{const{text:t="Edit this page",pattern:s=""}=o.value.editLink||{};let n;return typeof s=="function"?n=s(e.value):n=s.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Ft(){const{page:o,theme:e,frontmatter:t}=L();return y(()=>{var _,V,b,P,S,A,C,N;const s=Ae(e.value.sidebar,o.value.relativePath),n=bt(s),i=Ot(n,H=>H.link.replace(/[?#].*$/,"")),l=i.findIndex(H=>K(o.value.relativePath,H.link)),v=((_=e.value.docFooter)==null?void 0:_.prev)===!1&&!t.value.prev||t.value.prev===!1,d=((V=e.value.docFooter)==null?void 0:V.next)===!1&&!t.value.next||t.value.next===!1;return{prev:v?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((b=i[l-1])==null?void 0:b.docFooterText)??((P=i[l-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((S=i[l-1])==null?void 0:S.link)},next:d?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=i[l+1])==null?void 0:A.docFooterText)??((C=i[l+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((N=i[l+1])==null?void 0:N.link)}}})}function Ot(o,e){const t=new Set;return o.filter(s=>{const n=e(s);return t.has(n)?!1:t.add(n)})}const D=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.tag??(e.href?"a":"span")),s=y(()=>e.href&&Le.test(e.href)||e.target==="_blank");return(n,i)=>(a(),g(E(t.value),{class:I(["VPLink",{link:n.href,"vp-external-link-icon":s.value,"no-icon":n.noIcon}]),href:n.href?r(me)(n.href):void 0,target:n.target??(s.value?"_blank":void 0),rel:n.rel??(s.value?"noreferrer":void 0)},{default:f(()=>[c(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Ut={class:"VPLastUpdated"},jt=["datetime"],Gt=m({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,lang:s}=L(),n=y(()=>new Date(t.value.lastUpdated)),i=y(()=>n.value.toISOString()),l=T("");return z(()=>{Z(()=>{var v,d,_;l.value=new Intl.DateTimeFormat((d=(v=e.value.lastUpdated)==null?void 0:v.formatOptions)!=null&&d.forceLocale?s.value:void 0,((_=e.value.lastUpdated)==null?void 0:_.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(v,d)=>{var _;return a(),u("p",Ut,[O(w(((_=r(e).lastUpdated)==null?void 0:_.text)||r(e).lastUpdatedText||"Last updated")+": ",1),p("time",{datetime:i.value},w(l.value),9,jt)])}}}),zt=$(Gt,[["__scopeId","data-v-475f71b8"]]),Kt={key:0,class:"VPDocFooter"},Rt={key:0,class:"edit-info"},Wt={key:0,class:"edit-link"},qt={key:1,class:"last-updated"},Jt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Yt={class:"pager"},Xt=["innerHTML"],Qt=["innerHTML"],Zt={class:"pager"},xt=["innerHTML"],en=["innerHTML"],tn=m({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:s}=L(),n=Dt(),i=Ft(),l=y(()=>e.value.editLink&&s.value.editLink!==!1),v=y(()=>t.value.lastUpdated),d=y(()=>l.value||v.value||i.value.prev||i.value.next);return(_,V)=>{var b,P,S,A;return d.value?(a(),u("footer",Kt,[c(_.$slots,"doc-footer-before",{},void 0,!0),l.value||v.value?(a(),u("div",Rt,[l.value?(a(),u("div",Wt,[k(D,{class:"edit-link-button",href:r(n).url,"no-icon":!0},{default:f(()=>[V[0]||(V[0]=p("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),O(" "+w(r(n).text),1)]),_:1},8,["href"])])):h("",!0),v.value?(a(),u("div",qt,[k(zt)])):h("",!0)])):h("",!0),(b=r(i).prev)!=null&&b.link||(P=r(i).next)!=null&&P.link?(a(),u("nav",Jt,[V[1]||(V[1]=p("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),p("div",Yt,[(S=r(i).prev)!=null&&S.link?(a(),g(D,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:f(()=>{var C;return[p("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,Xt),p("span",{class:"title",innerHTML:r(i).prev.text},null,8,Qt)]}),_:1},8,["href"])):h("",!0)]),p("div",Zt,[(A=r(i).next)!=null&&A.link?(a(),g(D,{key:0,class:"pager-link next",href:r(i).next.link},{default:f(()=>{var C;return[p("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,xt),p("span",{class:"title",innerHTML:r(i).next.text},null,8,en)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),nn=$(tn,[["__scopeId","data-v-4f9813fa"]]),sn={class:"container"},on={class:"aside-container"},an={class:"aside-content"},rn={class:"content"},ln={class:"content-container"},cn={class:"main"},un=m({__name:"VPDoc",setup(o){const{theme:e}=L(),t=ee(),{hasSidebar:s,hasAside:n,leftAside:i}=U(),l=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(v,d)=>{const _=R("Content");return a(),u("div",{class:I(["VPDoc",{"has-sidebar":r(s),"has-aside":r(n)}])},[c(v.$slots,"doc-top",{},void 0,!0),p("div",sn,[r(n)?(a(),u("div",{key:0,class:I(["aside",{"left-aside":r(i)}])},[d[0]||(d[0]=p("div",{class:"aside-curtain"},null,-1)),p("div",on,[p("div",an,[k(Et,null,{"aside-top":f(()=>[c(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),p("div",rn,[p("div",ln,[c(v.$slots,"doc-before",{},void 0,!0),p("main",cn,[k(_,{class:I(["vp-doc",[l.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),k(nn,null,{"doc-footer-before":f(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(v.$slots,"doc-after",{},void 0,!0)])])]),c(v.$slots,"doc-bottom",{},void 0,!0)],2)}}}),dn=$(un,[["__scopeId","data-v-83890dd9"]]),vn=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.href&&Le.test(e.href)),s=y(()=>e.tag||e.href?"a":"button");return(n,i)=>(a(),g(E(s.value),{class:I(["VPButton",[n.size,n.theme]]),href:n.href?r(me)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[O(w(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),pn=$(vn,[["__scopeId","data-v-14206e74"]]),fn=["src","alt"],hn=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const s=R("VPImage",!0);return e.image?(a(),u(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),u("img",G({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(ve)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,fn)):(a(),u(M,{key:1},[k(s,G({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),k(s,G({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),Q=$(hn,[["__scopeId","data-v-35a7d0b8"]]),mn={class:"container"},_n={class:"main"},bn={key:0,class:"name"},kn=["innerHTML"],gn=["innerHTML"],$n=["innerHTML"],yn={key:0,class:"actions"},Pn={key:0,class:"image"},Sn={class:"image-container"},Vn=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=q("hero-image-slot-exists");return(t,s)=>(a(),u("div",{class:I(["VPHero",{"has-image":t.image||r(e)}])},[p("div",mn,[p("div",_n,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(a(),u("h1",bn,[p("span",{innerHTML:t.name,class:"clip"},null,8,kn)])):h("",!0),t.text?(a(),u("p",{key:1,innerHTML:t.text,class:"text"},null,8,gn)):h("",!0),t.tagline?(a(),u("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,$n)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",yn,[(a(!0),u(M,null,B(t.actions,n=>(a(),u("div",{key:n.link,class:"action"},[k(pn,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),u("div",Pn,[p("div",Sn,[s[0]||(s[0]=p("div",{class:"image-bg"},null,-1)),c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),g(Q,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),Ln=$(Vn,[["__scopeId","data-v-955009fc"]]),Tn=m({__name:"VPHomeHero",setup(o){const{frontmatter:e}=L();return(t,s)=>r(e).hero?(a(),g(Ln,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),Nn={class:"box"},wn={key:0,class:"icon"},In=["innerHTML"],Mn=["innerHTML"],An=["innerHTML"],Cn={key:4,class:"link-text"},Bn={class:"link-text-value"},Hn=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),g(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[p("article",Nn,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",wn,[k(Q,{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(Q,{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(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,In)):h("",!0),p("h2",{class:"title",innerHTML:e.title},null,8,Mn),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,An)):h("",!0),e.linkText?(a(),u("div",Cn,[p("p",Bn,[O(w(e.linkText)+" ",1),t[0]||(t[0]=p("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),En=$(Hn,[["__scopeId","data-v-f5e9645b"]]),Dn={key:0,class:"VPFeatures"},Fn={class:"container"},On={class:"items"},Un=m({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=y(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,n)=>s.features?(a(),u("div",Dn,[p("div",Fn,[p("div",On,[(a(!0),u(M,null,B(s.features,i=>(a(),u("div",{key:i.title,class:I(["item",[t.value]])},[k(En,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),jn=$(Un,[["__scopeId","data-v-d0a190d7"]]),Gn=m({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=L();return(t,s)=>r(e).features?(a(),g(jn,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):h("",!0)}}),zn=m({__name:"VPHomeContent",setup(o){const{width:e}=We({initialWidth:0,includeScrollbar:!1});return(t,s)=>(a(),u("div",{class:"vp-doc container",style:Te(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),Kn=$(zn,[["__scopeId","data-v-7a48a447"]]),Rn={class:"VPHome"},Wn=m({__name:"VPHome",setup(o){const{frontmatter:e}=L();return(t,s)=>{const n=R("Content");return a(),u("div",Rn,[c(t.$slots,"home-hero-before",{},void 0,!0),k(Tn,null,{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(t.$slots,"home-hero-after",{},void 0,!0),c(t.$slots,"home-features-before",{},void 0,!0),k(Gn),c(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),g(Kn,{key:0},{default:f(()=>[k(n)]),_:1})):(a(),g(n,{key:1}))])}}}),qn=$(Wn,[["__scopeId","data-v-cbb6ec48"]]),Jn={},Yn={class:"VPPage"};function Xn(o,e){const t=R("Content");return a(),u("div",Yn,[c(o.$slots,"page-top"),k(t),c(o.$slots,"page-bottom")])}const Qn=$(Jn,[["render",Xn]]),Zn=m({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=L(),{hasSidebar:s}=U();return(n,i)=>(a(),u("div",{class:I(["VPContent",{"has-sidebar":r(s),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?c(n.$slots,"not-found",{key:0},()=>[k(mt)],!0):r(t).layout==="page"?(a(),g(Qn,{key:1},{"page-top":f(()=>[c(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),g(qn,{key:2},{"home-hero-before":f(()=>[c(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),g(E(r(t).layout),{key:3})):(a(),g(dn,{key:4},{"doc-top":f(()=>[c(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[c(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[c(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[c(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[c(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),xn=$(Zn,[["__scopeId","data-v-91765379"]]),es={class:"container"},ts=["innerHTML"],ns=["innerHTML"],ss=m({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=L(),{hasSidebar:s}=U();return(n,i)=>r(e).footer&&r(t).footer!==!1?(a(),u("footer",{key:0,class:I(["VPFooter",{"has-sidebar":r(s)}])},[p("div",es,[r(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,ts)):h("",!0),r(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,ns)):h("",!0)])],2)):h("",!0)}}),os=$(ss,[["__scopeId","data-v-c970a860"]]);function as(){const{theme:o,frontmatter:e}=L(),t=Ve([]),s=y(()=>t.value.length>0);return x(()=>{t.value=_e(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:s}}const rs={class:"menu-text"},is={class:"header"},ls={class:"outline"},cs=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=L(),s=T(!1),n=T(0),i=T(),l=T();function v(b){var P;(P=i.value)!=null&&P.contains(b.target)||(s.value=!1)}F(s,b=>{if(b){document.addEventListener("click",v);return}document.removeEventListener("click",v)}),ie("Escape",()=>{s.value=!1}),x(()=>{s.value=!1});function d(){s.value=!s.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function _(b){b.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Ne(()=>{s.value=!1}))}function V(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(b,P)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:Te({"--vp-vh":n.value+"px"}),ref_key:"main",ref:i},[b.headers.length>0?(a(),u("button",{key:0,onClick:d,class:I({open:s.value})},[p("span",rs,w(r(Ce)(r(t))),1),P[0]||(P[0]=p("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(a(),u("button",{key:1,onClick:V},w(r(t).returnToTopLabel||"Return to top"),1)),k(de,{name:"flyout"},{default:f(()=>[s.value?(a(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:_},[p("div",is,[p("a",{class:"top-link",href:"#",onClick:V},w(r(t).returnToTopLabel||"Return to top"),1)]),p("div",ls,[k(Be,{headers:b.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),us=$(cs,[["__scopeId","data-v-bc9dc845"]]),ds={class:"container"},vs=["aria-expanded"],ps={class:"menu-text"},fs=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=L(),{hasSidebar:s}=U(),{headers:n}=as(),{y:i}=we(),l=T(0);z(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),x(()=>{n.value=_e(t.value.outline??e.value.outline)});const v=y(()=>n.value.length===0),d=y(()=>v.value&&!s.value),_=y(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:v.value,fixed:d.value}));return(V,b)=>r(t).layout!=="home"&&(!d.value||r(i)>=l.value)?(a(),u("div",{key:0,class:I(_.value)},[p("div",ds,[r(s)?(a(),u("button",{key:0,class:"menu","aria-expanded":V.open,"aria-controls":"VPSidebarNav",onClick:b[0]||(b[0]=P=>V.$emit("open-menu"))},[b[1]||(b[1]=p("span",{class:"vpi-align-left menu-icon"},null,-1)),p("span",ps,w(r(e).sidebarMenuLabel||"Menu"),1)],8,vs)):h("",!0),k(us,{headers:r(n),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),hs=$(fs,[["__scopeId","data-v-070ab83d"]]);function ms(){const o=T(!1);function e(){o.value=!0,window.addEventListener("resize",n)}function t(){o.value=!1,window.removeEventListener("resize",n)}function s(){o.value?t():e()}function n(){window.outerWidth>=768&&t()}const i=ee();return F(()=>i.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:s}}const _s={},bs={class:"VPSwitch",type:"button",role:"switch"},ks={class:"check"},gs={key:0,class:"icon"};function $s(o,e){return a(),u("button",bs,[p("span",ks,[o.$slots.default?(a(),u("span",gs,[c(o.$slots,"default",{},void 0,!0)])):h("",!0)])])}const ys=$(_s,[["render",$s],["__scopeId","data-v-4a1c76db"]]),Ps=m({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=L(),s=q("toggle-appearance",()=>{e.value=!e.value}),n=T("");return fe(()=>{n.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,l)=>(a(),g(ys,{title:n.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(s)},{default:f(()=>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"]))}}),be=$(Ps,[["__scopeId","data-v-e40a8bb6"]]),Ss={key:0,class:"VPNavBarAppearance"},Vs=m({__name:"VPNavBarAppearance",setup(o){const{site:e}=L();return(t,s)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ss,[k(be)])):h("",!0)}}),Ls=$(Vs,[["__scopeId","data-v-af096f4a"]]),ke=T();let He=!1,ae=0;function Ts(o){const e=T(!1);if(te){!He&&Ns(),ae++;const t=F(ke,s=>{var n,i,l;s===o.el.value||(n=o.el.value)!=null&&n.contains(s)?(e.value=!0,(i=o.onFocus)==null||i.call(o)):(e.value=!1,(l=o.onBlur)==null||l.call(o))});pe(()=>{t(),ae--,ae||ws()})}return qe(e)}function Ns(){document.addEventListener("focusin",Ee),He=!0,ke.value=document.activeElement}function ws(){document.removeEventListener("focusin",Ee)}function Ee(){ke.value=document.activeElement}const Is={class:"VPMenuLink"},Ms=m({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=L();return(t,s)=>(a(),u("div",Is,[k(D,{class:I({active:r(K)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:f(()=>[O(w(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),ne=$(Ms,[["__scopeId","data-v-8b74d055"]]),As={class:"VPMenuGroup"},Cs={key:0,class:"title"},Bs=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",As,[e.text?(a(),u("p",Cs,w(e.text),1)):h("",!0),(a(!0),u(M,null,B(e.items,s=>(a(),u(M,null,["link"in s?(a(),g(ne,{key:0,item:s},null,8,["item"])):h("",!0)],64))),256))]))}}),Hs=$(Bs,[["__scopeId","data-v-48c802d0"]]),Es={class:"VPMenu"},Ds={key:0,class:"items"},Fs=m({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),u("div",Es,[e.items?(a(),u("div",Ds,[(a(!0),u(M,null,B(e.items,s=>(a(),u(M,{key:JSON.stringify(s)},["link"in s?(a(),g(ne,{key:0,item:s},null,8,["item"])):"component"in s?(a(),g(E(s.component),G({key:1,ref_for:!0},s.props),null,16)):(a(),g(Hs,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),Os=$(Fs,[["__scopeId","data-v-7dd3104a"]]),Us=["aria-expanded","aria-label"],js={key:0,class:"text"},Gs=["innerHTML"],zs={key:1,class:"vpi-more-horizontal icon"},Ks={class:"menu"},Rs=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=T(!1),t=T();Ts({el:t,onBlur:s});function s(){e.value=!1}return(n,i)=>(a(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=l=>e.value=!0),onMouseleave:i[2]||(i[2]=l=>e.value=!1)},[p("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:i[0]||(i[0]=l=>e.value=!e.value)},[n.button||n.icon?(a(),u("span",js,[n.icon?(a(),u("span",{key:0,class:I([n.icon,"option-icon"])},null,2)):h("",!0),n.button?(a(),u("span",{key:1,innerHTML:n.button},null,8,Gs)):h("",!0),i[3]||(i[3]=p("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(a(),u("span",zs))],8,Us),p("div",Ks,[k(Os,{items:n.items},{default:f(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ge=$(Rs,[["__scopeId","data-v-e5380155"]]),Ws=["href","aria-label","innerHTML"],qs=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(s,n)=>(a(),u("a",{class:"VPSocialLink no-icon",href:s.link,"aria-label":s.ariaLabel??(typeof s.icon=="string"?s.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,Ws))}}),Js=$(qs,[["__scopeId","data-v-717b8b75"]]),Ys={class:"VPSocialLinks"},Xs=m({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),u("div",Ys,[(a(!0),u(M,null,B(e.links,({link:s,icon:n,ariaLabel:i})=>(a(),g(Js,{key:s,icon:n,link:s,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),$e=$(Xs,[["__scopeId","data-v-ee7a9424"]]),Qs={key:0,class:"group translations"},Zs={class:"trans-title"},xs={key:1,class:"group"},eo={class:"item appearance"},to={class:"label"},no={class:"appearance-action"},so={key:2,class:"group"},oo={class:"item social-links"},ao=m({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=L(),{localeLinks:s,currentLang:n}=Y({correspondingLink:!0}),i=y(()=>s.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(l,v)=>i.value?(a(),g(ge,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[r(s).length&&r(n).label?(a(),u("div",Qs,[p("p",Zs,w(r(n).label),1),(a(!0),u(M,null,B(r(s),d=>(a(),g(ne,{key:d.link,item:d},null,8,["item"]))),128))])):h("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",xs,[p("div",eo,[p("p",to,w(r(t).darkModeSwitchLabel||"Appearance"),1),p("div",no,[k(be)])])])):h("",!0),r(t).socialLinks?(a(),u("div",so,[p("div",oo,[k($e,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),ro=$(ao,[["__scopeId","data-v-925effce"]]),io=["aria-expanded"],lo=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),u("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]=s=>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,io))}}),co=$(lo,[["__scopeId","data-v-5dea55bf"]]),uo=["innerHTML"],vo=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=L();return(t,s)=>(a(),g(D,{class:I({VPNavBarMenuLink:!0,active:r(K)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:f(()=>[p("span",{innerHTML:t.item.text},null,8,uo)]),_:1},8,["class","href","noIcon","target","rel"]))}}),po=$(vo,[["__scopeId","data-v-ed5ac1f6"]]),fo=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=L(),s=i=>"component"in i?!1:"link"in i?K(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(s),n=y(()=>s(e.item));return(i,l)=>(a(),g(ge,{class:I({VPNavBarMenuGroup:!0,active:r(K)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||n.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),ho={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},mo=m({__name:"VPNavBarMenu",setup(o){const{theme:e}=L();return(t,s)=>r(e).nav?(a(),u("nav",ho,[s[0]||(s[0]=p("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(a(!0),u(M,null,B(r(e).nav,n=>(a(),u(M,{key:JSON.stringify(n)},["link"in n?(a(),g(po,{key:0,item:n},null,8,["item"])):"component"in n?(a(),g(E(n.component),G({key:1,ref_for:!0},n.props),null,16)):(a(),g(fo,{key:2,item:n},null,8,["item"]))],64))),128))])):h("",!0)}}),_o=$(mo,[["__scopeId","data-v-e6d46098"]]);function bo(o){const{localeIndex:e,theme:t}=L();function s(n){var A,C,N;const i=n.split("."),l=(A=t.value.search)==null?void 0:A.options,v=l&&typeof l=="object",d=v&&((N=(C=l.locales)==null?void 0:C[e.value])==null?void 0:N.translations)||null,_=v&&l.translations||null;let V=d,b=_,P=o;const S=i.pop();for(const H of i){let j=null;const W=P==null?void 0:P[H];W&&(j=P=W);const se=b==null?void 0:b[H];se&&(j=b=se);const oe=V==null?void 0:V[H];oe&&(j=V=oe),W||(P=j),se||(b=j),oe||(V=j)}return(V==null?void 0:V[S])??(b==null?void 0:b[S])??(P==null?void 0:P[S])??""}return s}const ko=["aria-label"],go={class:"DocSearch-Button-Container"},$o={class:"DocSearch-Button-Placeholder"},ye=m({__name:"VPNavBarSearchButton",setup(o){const t=bo({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,n)=>(a(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[p("span",go,[n[0]||(n[0]=p("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),p("span",$o,w(r(t)("button.buttonText")),1)]),n[1]||(n[1]=p("span",{class:"DocSearch-Button-Keys"},[p("kbd",{class:"DocSearch-Button-Key"}),p("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,ko))}}),yo={class:"VPNavBarSearch"},Po={id:"local-search"},So={key:1,id:"docsearch"},Vo=m({__name:"VPNavBarSearch",setup(o){const e=Je(()=>Ye(()=>import("./VPLocalSearchBox.BO9Crzas.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:s}=L(),n=T(!1),i=T(!1);z(()=>{});function l(){n.value||(n.value=!0,setTimeout(v,16))}function v(){const b=new Event("keydown");b.key="k",b.metaKey=!0,window.dispatchEvent(b),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||v()},16)}function d(b){const P=b.target,S=P.tagName;return P.isContentEditable||S==="INPUT"||S==="SELECT"||S==="TEXTAREA"}const _=T(!1);ie("k",b=>{(b.ctrlKey||b.metaKey)&&(b.preventDefault(),_.value=!0)}),ie("/",b=>{d(b)||(b.preventDefault(),_.value=!0)});const V="local";return(b,P)=>{var S;return a(),u("div",yo,[r(V)==="local"?(a(),u(M,{key:0},[_.value?(a(),g(r(e),{key:0,onClose:P[0]||(P[0]=A=>_.value=!1)})):h("",!0),p("div",Po,[k(ye,{onClick:P[1]||(P[1]=A=>_.value=!0)})])],64)):r(V)==="algolia"?(a(),u(M,{key:1},[n.value?(a(),g(r(t),{key:0,algolia:((S=r(s).search)==null?void 0:S.options)??r(s).algolia,onVnodeBeforeMount:P[2]||(P[2]=A=>i.value=!0)},null,8,["algolia"])):h("",!0),i.value?h("",!0):(a(),u("div",So,[k(ye,{onClick:l})]))],64)):h("",!0)])}}}),Lo=m({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=L();return(t,s)=>r(e).socialLinks?(a(),g($e,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),To=$(Lo,[["__scopeId","data-v-164c457f"]]),No=["href","rel","target"],wo={key:1},Io={key:2},Mo=m({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=L(),{hasSidebar:s}=U(),{currentLang:n}=Y(),i=y(()=>{var d;return typeof t.value.logoLink=="string"?t.value.logoLink:(d=t.value.logoLink)==null?void 0:d.link}),l=y(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.rel}),v=y(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.target});return(d,_)=>(a(),u("div",{class:I(["VPNavBarTitle",{"has-sidebar":r(s)}])},[p("a",{class:"title",href:i.value??r(me)(r(n).link),rel:l.value,target:v.value},[c(d.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),g(Q,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):h("",!0),r(t).siteTitle?(a(),u("span",wo,w(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),u("span",Io,w(r(e).title),1)):h("",!0),c(d.$slots,"nav-bar-title-after",{},void 0,!0)],8,No)],2))}}),Ao=$(Mo,[["__scopeId","data-v-28a961f9"]]),Co={class:"items"},Bo={class:"title"},Ho=m({__name:"VPNavBarTranslations",setup(o){const{theme:e}=L(),{localeLinks:t,currentLang:s}=Y({correspondingLink:!0});return(n,i)=>r(t).length&&r(s).label?(a(),g(ge,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:f(()=>[p("div",Co,[p("p",Bo,w(r(s).label),1),(a(!0),u(M,null,B(r(t),l=>(a(),g(ne,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),Eo=$(Ho,[["__scopeId","data-v-c80d9ad0"]]),Do={class:"wrapper"},Fo={class:"container"},Oo={class:"title"},Uo={class:"content"},jo={class:"content-body"},Go=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const e=o,{y:t}=we(),{hasSidebar:s}=U(),{frontmatter:n}=L(),i=T({});return fe(()=>{i.value={"has-sidebar":s.value,home:n.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,v)=>(a(),u("div",{class:I(["VPNavBar",i.value])},[p("div",Do,[p("div",Fo,[p("div",Oo,[k(Ao,null,{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),p("div",Uo,[p("div",jo,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),k(Vo,{class:"search"}),k(_o,{class:"menu"}),k(Eo,{class:"translations"}),k(Ls,{class:"appearance"}),k(To,{class:"social-links"}),k(ro,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),k(co,{class:"hamburger",active:l.isScreenOpen,onClick:v[0]||(v[0]=d=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),v[1]||(v[1]=p("div",{class:"divider"},[p("div",{class:"divider-line"})],-1))],2))}}),zo=$(Go,[["__scopeId","data-v-822684d1"]]),Ko={key:0,class:"VPNavScreenAppearance"},Ro={class:"text"},Wo=m({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=L();return(s,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ko,[p("p",Ro,w(r(t).darkModeSwitchLabel||"Appearance"),1),k(be)])):h("",!0)}}),qo=$(Wo,[["__scopeId","data-v-ffb44008"]]),Jo=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=q("close-screen");return(t,s)=>(a(),g(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),Yo=$(Jo,[["__scopeId","data-v-27d04aeb"]]),Xo=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=q("close-screen");return(t,s)=>(a(),g(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:f(()=>[O(w(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),De=$(Xo,[["__scopeId","data-v-7179dbb7"]]),Qo={class:"VPNavScreenMenuGroupSection"},Zo={key:0,class:"title"},xo=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",Qo,[e.text?(a(),u("p",Zo,w(e.text),1)):h("",!0),(a(!0),u(M,null,B(e.items,s=>(a(),g(De,{key:s.text,item:s},null,8,["item"]))),128))]))}}),ea=$(xo,[["__scopeId","data-v-4b8941ac"]]),ta=["aria-controls","aria-expanded"],na=["innerHTML"],sa=["id"],oa={key:0,class:"item"},aa={key:1,class:"item"},ra={key:2,class:"group"},ia=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=T(!1),s=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(i,l)=>(a(),u("div",{class:I(["VPNavScreenMenuGroup",{open:t.value}])},[p("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:n},[p("span",{class:"button-text",innerHTML:i.text},null,8,na),l[0]||(l[0]=p("span",{class:"vpi-plus button-icon"},null,-1))],8,ta),p("div",{id:s.value,class:"items"},[(a(!0),u(M,null,B(i.items,v=>(a(),u(M,{key:JSON.stringify(v)},["link"in v?(a(),u("div",oa,[k(De,{item:v},null,8,["item"])])):"component"in v?(a(),u("div",aa,[(a(),g(E(v.component),G({ref_for:!0},v.props,{"screen-menu":""}),null,16))])):(a(),u("div",ra,[k(ea,{text:v.text,items:v.items},null,8,["text","items"])]))],64))),128))],8,sa)],2))}}),la=$(ia,[["__scopeId","data-v-875057a5"]]),ca={key:0,class:"VPNavScreenMenu"},ua=m({__name:"VPNavScreenMenu",setup(o){const{theme:e}=L();return(t,s)=>r(e).nav?(a(),u("nav",ca,[(a(!0),u(M,null,B(r(e).nav,n=>(a(),u(M,{key:JSON.stringify(n)},["link"in n?(a(),g(Yo,{key:0,item:n},null,8,["item"])):"component"in n?(a(),g(E(n.component),G({key:1,ref_for:!0},n.props,{"screen-menu":""}),null,16)):(a(),g(la,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),da=m({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=L();return(t,s)=>r(e).socialLinks?(a(),g($e,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),va={class:"list"},pa=m({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=Y({correspondingLink:!0}),s=T(!1);function n(){s.value=!s.value}return(i,l)=>r(e).length&&r(t).label?(a(),u("div",{key:0,class:I(["VPNavScreenTranslations",{open:s.value}])},[p("button",{class:"title",onClick:n},[l[0]||(l[0]=p("span",{class:"vpi-languages icon lang"},null,-1)),O(" "+w(r(t).label)+" ",1),l[1]||(l[1]=p("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),p("ul",va,[(a(!0),u(M,null,B(r(e),v=>(a(),u("li",{key:v.link,class:"item"},[k(D,{class:"link",href:v.link},{default:f(()=>[O(w(v.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),fa=$(pa,[["__scopeId","data-v-362991c2"]]),ha={class:"container"},ma=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=T(null),t=Ie(te?document.body:null);return(s,n)=>(a(),g(de,{name:"fade",onEnter:n[0]||(n[0]=i=>t.value=!0),onAfterLeave:n[1]||(n[1]=i=>t.value=!1)},{default:f(()=>[s.open?(a(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[p("div",ha,[c(s.$slots,"nav-screen-content-before",{},void 0,!0),k(ua,{class:"menu"}),k(fa,{class:"translations"}),k(qo,{class:"appearance"}),k(da,{class:"social-links"}),c(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),_a=$(ma,[["__scopeId","data-v-833aabba"]]),ba={key:0,class:"VPNav"},ka=m({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=ms(),{frontmatter:n}=L(),i=y(()=>n.value.navbar!==!1);return he("close-screen",t),Z(()=>{te&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(l,v)=>i.value?(a(),u("header",ba,[k(zo,{"is-screen-open":r(e),onToggleScreen:r(s)},{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),k(_a,{open:r(e)},{"nav-screen-content-before":f(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),ga=$(ka,[["__scopeId","data-v-f1e365da"]]),$a=["role","tabindex"],ya={key:1,class:"items"},Pa=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:s,isLink:n,isActiveLink:i,hasActiveLink:l,hasChildren:v,toggle:d}=gt(y(()=>e.item)),_=y(()=>v.value?"section":"div"),V=y(()=>n.value?"a":"div"),b=y(()=>v.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=y(()=>n.value?void 0:"button"),S=y(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":n.value},{"is-active":i.value},{"has-active":l.value}]);function A(N){"key"in N&&N.key!=="Enter"||!e.item.link&&d()}function C(){e.item.link&&d()}return(N,H)=>{const j=R("VPSidebarItem",!0);return a(),g(E(_.value),{class:I(["VPSidebarItem",S.value])},{default:f(()=>[N.item.text?(a(),u("div",G({key:0,class:"item",role:P.value},Qe(N.item.items?{click:A,keydown:A}:{},!0),{tabindex:N.item.items&&0}),[H[1]||(H[1]=p("div",{class:"indicator"},null,-1)),N.item.link?(a(),g(D,{key:0,tag:V.value,class:"link",href:N.item.link,rel:N.item.rel,target:N.item.target},{default:f(()=>[(a(),g(E(b.value),{class:"text",innerHTML:N.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),g(E(b.value),{key:1,class:"text",innerHTML:N.item.text},null,8,["innerHTML"])),N.item.collapsed!=null&&N.item.items&&N.item.items.length?(a(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:Xe(C,["enter"]),tabindex:"0"},H[0]||(H[0]=[p("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):h("",!0)],16,$a)):h("",!0),N.item.items&&N.item.items.length?(a(),u("div",ya,[N.depth<5?(a(!0),u(M,{key:0},B(N.item.items,W=>(a(),g(j,{key:W.text,item:W,depth:N.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),Sa=$(Pa,[["__scopeId","data-v-196b2e5f"]]),Va=m({__name:"VPSidebarGroup",props:{items:{}},setup(o){const e=T(!0);let t=null;return z(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),Ze(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,n)=>(a(!0),u(M,null,B(s.items,i=>(a(),u("div",{key:i.text,class:I(["group",{"no-transition":e.value}])},[k(Sa,{item:i,depth:0},null,8,["item"])],2))),128))}}),La=$(Va,[["__scopeId","data-v-9e426adc"]]),Ta={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Na=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=U(),s=o,n=T(null),i=Ie(te?document.body:null);F([s,n],()=>{var v;s.open?(i.value=!0,(v=n.value)==null||v.focus()):i.value=!1},{immediate:!0,flush:"post"});const l=T(0);return F(e,()=>{l.value+=1},{deep:!0}),(v,d)=>r(t)?(a(),u("aside",{key:0,class:I(["VPSidebar",{open:v.open}]),ref_key:"navEl",ref:n,onClick:d[0]||(d[0]=xe(()=>{},["stop"]))},[d[2]||(d[2]=p("div",{class:"curtain"},null,-1)),p("nav",Ta,[d[1]||(d[1]=p("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(v.$slots,"sidebar-nav-before",{},void 0,!0),(a(),g(La,{items:r(e),key:l.value},null,8,["items"])),c(v.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),wa=$(Na,[["__scopeId","data-v-18756405"]]),Ia=m({__name:"VPSkipLink",setup(o){const e=ee(),t=T();F(()=>e.path,()=>t.value.focus());function s({target:n}){const i=document.getElementById(decodeURIComponent(n.hash).slice(1));if(i){const l=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",l)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",l),i.focus(),window.scrollTo(0,0)}}return(n,i)=>(a(),u(M,null,[p("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),p("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}}),Ma=$(Ia,[["__scopeId","data-v-c3508ec8"]]),Aa=m({__name:"Layout",setup(o){const{isOpen:e,open:t,close:s}=U(),n=ee();F(()=>n.path,s),kt(e,s);const{frontmatter:i}=L(),l=Me(),v=y(()=>!!l["home-hero-image"]);return he("hero-image-slot-exists",v),(d,_)=>{const V=R("Content");return r(i).layout!==!1?(a(),u("div",{key:0,class:I(["Layout",r(i).pageClass])},[c(d.$slots,"layout-top",{},void 0,!0),k(Ma),k(rt,{class:"backdrop",show:r(e),onClick:r(s)},null,8,["show","onClick"]),k(ga,null,{"nav-bar-title-before":f(()=>[c(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(d.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[c(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),k(hs,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),k(wa,{open:r(e)},{"sidebar-nav-before":f(()=>[c(d.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[c(d.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),k(xn,null,{"page-top":f(()=>[c(d.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(d.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[c(d.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[c(d.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(d.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(d.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(d.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(d.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(d.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(d.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(d.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(d.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[c(d.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(d.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(d.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[c(d.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(d.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[c(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),k(os),c(d.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),g(V,{key:1}))}}}),Ca=$(Aa,[["__scopeId","data-v-a9a9e638"]]),Pe={Layout:Ca,enhanceApp:({app:o})=>{o.component("Badge",st)}},Ba=o=>{if(typeof document>"u")return{stabilizeScrollPosition:n=>async(...i)=>n(...i)};const e=document.documentElement;return{stabilizeScrollPosition:s=>async(...n)=>{const i=s(...n),l=o.value;if(!l)return i;const v=l.offsetTop-e.scrollTop;return await Ne(),e.scrollTop=l.offsetTop-v,i}}},Fe="vitepress:tabSharedState",J=typeof localStorage<"u"?localStorage:null,Oe="vitepress:tabsSharedState",Ha=()=>{const o=J==null?void 0:J.getItem(Oe);if(o)try{return JSON.parse(o)}catch{}return{}},Ea=o=>{J&&J.setItem(Oe,JSON.stringify(o))},Da=o=>{const e=et({});F(()=>e.content,(t,s)=>{t&&s&&Ea(t)},{deep:!0}),o.provide(Fe,e)},Fa=(o,e)=>{const t=q(Fe);if(!t)throw new Error("[vitepress-plugin-tabs] TabsSharedState should be injected");z(()=>{t.content||(t.content=Ha())});const s=T(),n=y({get(){var d;const l=e.value,v=o.value;if(l){const _=(d=t.content)==null?void 0:d[l];if(_&&v.includes(_))return _}else{const _=s.value;if(_)return _}return v[0]},set(l){const v=e.value;v?t.content&&(t.content[v]=l):s.value=l}});return{selected:n,select:l=>{n.value=l}}};let Se=0;const Oa=()=>(Se++,""+Se);function Ua(){const o=Me();return y(()=>{var s;const t=(s=o.default)==null?void 0:s.call(o);return t?t.filter(n=>typeof n.type=="object"&&"__name"in n.type&&n.type.__name==="PluginTabsTab"&&n.props).map(n=>{var i;return(i=n.props)==null?void 0:i.label}):[]})}const Ue="vitepress:tabSingleState",ja=o=>{he(Ue,o)},Ga=()=>{const o=q(Ue);if(!o)throw new Error("[vitepress-plugin-tabs] TabsSingleState should be injected");return o},za={class:"plugin-tabs"},Ka=["id","aria-selected","aria-controls","tabindex","onClick"],Ra=m({__name:"PluginTabs",props:{sharedStateKey:{}},setup(o){const e=o,t=Ua(),{selected:s,select:n}=Fa(t,tt(e,"sharedStateKey")),i=T(),{stabilizeScrollPosition:l}=Ba(i),v=l(n),d=T([]),_=b=>{var A;const P=t.value.indexOf(s.value);let S;b.key==="ArrowLeft"?S=P>=1?P-1:t.value.length-1:b.key==="ArrowRight"&&(S=P(a(),u("div",za,[p("div",{ref_key:"tablist",ref:i,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:_},[(a(!0),u(M,null,B(r(t),S=>(a(),u("button",{id:`tab-${S}-${r(V)}`,ref_for:!0,ref_key:"buttonRefs",ref:d,key:S,role:"tab",class:"plugin-tabs--tab","aria-selected":S===r(s),"aria-controls":`panel-${S}-${r(V)}`,tabindex:S===r(s)?0:-1,onClick:()=>r(v)(S)},w(S),9,Ka))),128))],544),c(b.$slots,"default")]))}}),Wa=["id","aria-labelledby"],qa=m({__name:"PluginTabsTab",props:{label:{}},setup(o){const{uid:e,selected:t}=Ga();return(s,n)=>r(t)===s.label?(a(),u("div",{key:0,id:`panel-${s.label}-${r(e)}`,class:"plugin-tabs--content",role:"tabpanel",tabindex:"0","aria-labelledby":`tab-${s.label}-${r(e)}`},[c(s.$slots,"default",{},void 0,!0)],8,Wa)):h("",!0)}}),Ja=$(qa,[["__scopeId","data-v-9b0d03d2"]]),Ya=o=>{Da(o),o.component("PluginTabs",Ra),o.component("PluginTabsTab",Ja)},Qa={extends:Pe,Layout(){return nt(Pe.Layout,null,{})},enhanceApp({app:o,router:e,siteData:t}){Ya(o)}};export{Qa as R,bo as c,L as u}; diff --git a/dev/docker.html b/dev/docker.html index 636e0e5..1594295 100644 --- a/dev/docker.html +++ b/dev/docker.html @@ -8,9 +8,9 @@ - + - + @@ -19,7 +19,7 @@
Skip to content

Docker build and run

The ReefGuideAPI.jl package has an associated Dockerfile and build/publish process. This means you can run an instance of the ReefGuideAPI.jl package without needing to compile/build it with a local Julia installation. You will be able to view the latest published versions of the Docker image on the repository packages page.

Mounting files and required data

As mentioned in Getting Started, the ReefGuideAPI.jl package currently requires

  • a config.toml file and

  • a set of input data files

Please include these in a folder called data in your working directory.

When running the below commands, it is assumed you have data available locally with the required files.

Note: Due to how Docker excludes . files, we have named the config file config.toml in the data folder. This is required to launch the server.

To build from src files using Docker

bash
docker build . --target reefguide-src -t reefguide

To build from src files using Docker Compose

bash
docker compose up --build reefguide-src

To run with mounted files (launch server) using Docker

bash
docker run -p 8000:8000 -v ./data:/data/reefguide reefguide

To run with mounted files (launch server) using Docker Compose

bash
docker compose up reefguide-src

To run with mounted files (interactive shell) using Docker

This will start a Julia shell where ReefGuideAPI is compiled and ready for use e.g.

julia
using ReefGuideAPI
 ReefGuideAPI.start_server("/data/reefguide/config.toml")
bash
docker run --rm --interactive --entrypoint="julia" --tty -v ./data:/data/reefguide reefguide
- + \ No newline at end of file diff --git a/dev/getting_started.html b/dev/getting_started.html index 5f15fea..c532d8c 100644 --- a/dev/getting_started.html +++ b/dev/getting_started.html @@ -8,9 +8,9 @@ - + - + @@ -43,7 +43,7 @@ (sandbox) julia> ]add Revise Infiltrator Chairmarks (sandbox) julia> ]dev ..

Copy the quickstart to a file (e.g., dev_server.jl).

Create the .config.toml file and save to the sandbox directory.

Assuming VS Code is configured to default to the sandbox environment and start the Julia REPL at project root:

julia
;cd sandbox
 include("dev_server.jl")

Note that the server now caches the initially loaded spatial data in between server launches to reduce downtime. It will be necessary to restart the Julia session to reload spatial data.

Performance notes

The config setting COG_THREADS controls how many threads should be requested when writing out COGs. Ideally this will be set to at least 2 (preferably 4). Higher values do seem to reduce write times but with diminishing returns (tested up to 8). Locally, write times with four threads configured range from 10 to 15 seconds.

Reef edge alignment for site searching

identify_potential_sites_edges() can be used to identify potential sites that only align with the nearest reef edge (or specified rotations away from this angle). This method works by identifying the closest edge of reef polygon geometries that have been converted into lines.

The following processing is required before use:

  • Reef polygons should be simplified (GO.simplify()) and buffered to avoid matching possibly inaccurate reef edges.

  • Simplified reef polygons should be provided as vertex-vertex lines with polygon_to_lines().

  • Require raster of target pixels to search, and their indices (currently a vector of CartesianIndices for identifying search pixels). Use findall(bool_search_raster) to return pixel indices.

  • Raster of search pixels should be masked by reef polygons or simplified reef polygons.

  • The target region name should be specified in GBRMPA format.

    • E.g. "Townsville/Whitsunday Management Area" rather than "Townsville-Whitsunday".

Parquet assessment additional setup

  • A parquet GeoDataFrame must be loaded and filtered for unsuitable pixels based on user criteria thresholds using a Dict and within_thresholds().

  • lon and lat columns (FLoat64) must be added to the GeoDataFrame.

    • E.g. valid_pixels.lon = first.(GI.coordinates.(valid_pixels.geometry))

    The column used for masking should be the same as the column specified as geometry_col in identify_potential_sites_edges(default =:geometry).

- + \ No newline at end of file diff --git a/dev/hashmap.json b/dev/hashmap.json index d08eda9..b6abe4d 100644 --- a/dev/hashmap.json +++ b/dev/hashmap.json @@ -1 +1 @@ -{"api.md":"NYkrqh02","docker.md":"CFpyQib2","getting_started.md":"DKqyPY1d","index.md":"kAlQC9BQ"} +{"api.md":"DehzNRDj","docker.md":"CFpyQib2","getting_started.md":"DKqyPY1d","index.md":"kAlQC9BQ"} diff --git a/dev/index.html b/dev/index.html index e8fc753..505630f 100644 --- a/dev/index.html +++ b/dev/index.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@
Skip to content

ReefGuideAPI.jl

An API for supporting reef suitability assessments.

- + \ No newline at end of file