diff --git a/dev/404.html b/dev/404.html index 6a10b5c89..0c4604013 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 16f93f846..cfa473beb 100644 --- a/dev/api.html +++ b/dev/api.html @@ -8,16 +8,16 @@ - + - - - + + + -
Skip to content

Full GeometryOps API documentation

Warning

This page is still very much WIP!

Documentation for GeometryOps's full API (only for reference!).

apply and associated functions

GeometryOps.GeometryOpsCore.apply Function
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
+    
Skip to content

Full GeometryOps API documentation

Warning

This page is still very much WIP!

Documentation for GeometryOps's full API (only for reference!).

apply and associated functions

GeometryOps.GeometryOpsCore.apply Function
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
 import GeometryOps as GO
 geom = GI.Polygon([GI.LinearRing([(1, 2), (3, 4), (5, 6), (1, 2)]),
                    GI.LinearRing([(3, 4), (5, 6), (6, 7), (3, 4)])])
@@ -287,15 +287,15 @@
 - The angles of a multi-geometry collection is a vector of the angles of each of the
     sub-geometries as defined above.

Result will be a Vector, or nested set of vectors, of type T where an optional argument with a default value of Float64.

source

GeometryOps.embed_extent Function
julia
embed_extent(obj)

Recursively wrap the object with a GeoInterface.jl geometry, calculating and adding an Extents.Extent to all objects.

This can improve performance when extents need to be checked multiple times, such when needing to check if many points are in geometries, and using their extents as a quick filter for obviously exterior points.

Keywords

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

source

julia
embed_extent(obj)

Recursively wrap the object with a GeoInterface.jl geometry, calculating and adding an Extents.Extent to all objects.

This can improve performance when extents need to be checked multiple times, such when needing to check if many points are in geometries, and using their extents as a quick filter for obviously exterior points.

Keywords

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

source

Barycentric coordinates

GeometryOps.barycentric_coordinates Function
julia
barycentric_coordinates(method = MeanValue(), polygon, point)

Returns the barycentric coordinates of point in polygon using the barycentric coordinate method method.

source

julia
barycentric_coordinates(method = MeanValue(), polygon, point)

Returns the barycentric coordinates of point in polygon using the barycentric coordinate method method.

source

GeometryOps.barycentric_coordinates! Function
julia
barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, polygon, point)

Loads the barycentric coordinates of point in polygon into λs using the barycentric coordinate method method.

λs must be of the length of the polygon plus its holes.

Tip

Use this method to avoid excess allocations when you need to calculate barycentric coordinates for many points.

source

julia
barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, polygon, point)

Loads the barycentric coordinates of point in polygon into λs using the barycentric coordinate method method.

λs must be of the length of the polygon plus its holes.

Tip

Use this method to avoid excess allocations when you need to calculate barycentric coordinates for many points.

source

GeometryOps.barycentric_interpolate Function
julia
barycentric_interpolate(method = MeanValue(), polygon, values::AbstractVector{V}, point)

Returns the interpolated value at point within polygon using the barycentric coordinate method method. values are the per-point values for the polygon which are to be interpolated.

Returns an object of type V.

Warning

Barycentric interpolation is currently defined only for 2-dimensional polygons. If you pass a 3-D polygon in, the Z coordinate will be used as per-vertex value to be interpolated (the M coordinate in GIS parlance).

source

julia
barycentric_interpolate(method = MeanValue(), polygon, values::AbstractVector{V}, point)

Returns the interpolated value at point within polygon using the barycentric coordinate method method. values are the per-point values for the polygon which are to be interpolated.

Returns an object of type V.

Warning

Barycentric interpolation is currently defined only for 2-dimensional polygons. If you pass a 3-D polygon in, the Z coordinate will be used as per-vertex value to be interpolated (the M coordinate in GIS parlance).

source

Other methods

GeometryOps.AbstractBarycentricCoordinateMethod Type
julia
abstract type AbstractBarycentricCoordinateMethod

Abstract supertype for barycentric coordinate methods. The subtypes may serve as dispatch types, or may cache some information about the target polygon.

API

The following methods must be implemented for all subtypes:

  • barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, point::Point{2, T2})

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, values::Vector{V}, point::Point{2, T2})::V

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, interiors::Vector{<: Vector{<: Point{2, T1}}} values::Vector{V}, point::Point{2, T2})::V

The rest of the methods will be implemented in terms of these, and have efficient dispatches for broadcasting.

source

GeometryOps.ClosedRing Type
julia
ClosedRing() <: GeometryCorrection

This correction ensures that a polygon's exterior and interior rings are closed.

It can be called on any geometry correction as usual.

See also GeometryCorrection.

source

GeometryOps.DiffIntersectingPolygons Type
julia
DiffIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygons included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be made nonintersecting through the difference operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area. See also GeometryCorrection, UnionIntersectingPolygons.

source

GeometryOps.DouglasPeucker Type
julia
DouglasPeucker <: SimplifyAlg
 
-DouglasPeucker(; number, ratio, tol)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance a point will be from the line joining its neighboring points.

Note: user input tol is squared to avoid unnecessary computation in algorithm.

source

GeometryOps.GEOS Type
julia
GEOS(; params...)

A struct which instructs the method it's passed to as an algorithm to use the appropriate GEOS function via LibGEOS.jl for the operation.

Dispatch is generally carried out using the names of the keyword arguments. For example, segmentize will only accept a GEOS struct with only a max_distance keyword, and no other.

It's generally a lot slower than the native Julia implementations, since it must convert to the LibGEOS implementation and back - so be warned!

source

GeometryOps.GeodesicSegments Type
julia
GeodesicSegments(; max_distance::Real, equatorial_radius::Real=6378137, flattening::Real=1/298.257223563)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance. This method calculates the distance between points on the geodesic, and assumes input in lat/long coordinates.

Warning

Any input geometries must be in lon/lat coordinates! If not, the method may fail or error.

Arguments

  • max_distance::Real: The maximum distance, in meters, between vertices in the geometry.

  • equatorial_radius::Real=6378137: The equatorial radius of the Earth, in meters. Passed to Proj.geod_geodesic.

  • flattening::Real=1/298.257223563: The flattening of the Earth, which is the ratio of the difference between the equatorial and polar radii to the equatorial radius. Passed to Proj.geod_geodesic.

One can also omit the equatorial_radius and flattening keyword arguments, and pass a geodesic object directly to the eponymous keyword.

This method uses the Proj/GeographicLib API for geodesic calculations.

source

GeometryOps.GeometryCorrection Type
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source

GeometryOps.GeometryOpsCore.BoolsAsTypes Type
julia
abstract type BoolsAsTypes

source

GeometryOps.GeometryOpsCore.Geodesic Type
julia
Geodesic(; semimajor_axis, inv_flattening)

A geodesic manifold means that the geometry is on a 3-dimensional ellipsoid, parameterized by semimajor_axis (a in mathematical parlance) and inv_flattening (1/f).

Usually, this is only relevant for area and segmentization calculations. It becomes more relevant as one grows closer to the poles (or equator).

source

GeometryOps.GeometryOpsCore.Linear Type
julia
Linear()

A linear manifold means that the space is completely Euclidean, and planar geometry suffices.

source

GeometryOps.GeometryOpsCore.Manifold Type
julia
abstract type Manifold

A manifold is mathematically defined as a topological space that resembles Euclidean space locally.

We use the manifold definition to define the space in which an operation should be performed, or where a geometry lies.

Currently we have Linear, Spherical, and Geodesic manifolds.

source

GeometryOps.GeometryOpsCore.Spherical Type
julia
Spherical(; radius)

A spherical manifold means that the geometry is on the 3-sphere (but is represented by 2-D longitude and latitude).

Extended help

Note

The traditional definition of spherical coordinates in physics and mathematics, r,θ,ϕ, uses the colatitude, that measures angular displacement from the z-axis.

Here, we use the geographic definition of longitude and latitude, meaning that lon is longitude between -180 and 180, and lat is latitude between -90 (south pole) and 90 (north pole).

source

GeometryOps.GeometryOpsCore.TraitTarget Type
julia
TraitTarget{T}

This struct holds a trait parameter or a union of trait parameters.

It is primarily used for dispatch into methods which select trait levels, like apply, or as a parameter to target.

Constructors

julia
TraitTarget(GI.PointTrait())
+DouglasPeucker(; number, ratio, tol)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance a point will be from the line joining its neighboring points.

Note: user input tol is squared to avoid unnecessary computation in algorithm.

source

GeometryOps.GEOS Type
julia
GEOS(; params...)

A struct which instructs the method it's passed to as an algorithm to use the appropriate GEOS function via LibGEOS.jl for the operation.

Dispatch is generally carried out using the names of the keyword arguments. For example, segmentize will only accept a GEOS struct with only a max_distance keyword, and no other.

It's generally a lot slower than the native Julia implementations, since it must convert to the LibGEOS implementation and back - so be warned!

source

GeometryOps.GeodesicSegments Type
julia
GeodesicSegments(; max_distance::Real, equatorial_radius::Real=6378137, flattening::Real=1/298.257223563)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance. This method calculates the distance between points on the geodesic, and assumes input in lat/long coordinates.

Warning

Any input geometries must be in lon/lat coordinates! If not, the method may fail or error.

Arguments

  • max_distance::Real: The maximum distance, in meters, between vertices in the geometry.

  • equatorial_radius::Real=6378137: The equatorial radius of the Earth, in meters. Passed to Proj.geod_geodesic.

  • flattening::Real=1/298.257223563: The flattening of the Earth, which is the ratio of the difference between the equatorial and polar radii to the equatorial radius. Passed to Proj.geod_geodesic.

One can also omit the equatorial_radius and flattening keyword arguments, and pass a geodesic object directly to the eponymous keyword.

This method uses the Proj/GeographicLib API for geodesic calculations.

source

GeometryOps.GeometryCorrection Type
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source

GeometryOps.GeometryOpsCore.BoolsAsTypes Type
julia
abstract type BoolsAsTypes

source

GeometryOps.GeometryOpsCore.Geodesic Type
julia
Geodesic(; semimajor_axis, inv_flattening)

A geodesic manifold means that the geometry is on a 3-dimensional ellipsoid, parameterized by semimajor_axis (a in mathematical parlance) and inv_flattening (1/f).

Usually, this is only relevant for area and segmentization calculations. It becomes more relevant as one grows closer to the poles (or equator).

source

GeometryOps.GeometryOpsCore.Manifold Type
julia
abstract type Manifold

A manifold is mathematically defined as a topological space that resembles Euclidean space locally.

We use the manifold definition to define the space in which an operation should be performed, or where a geometry lies.

Currently we have Planar, Spherical, and Geodesic manifolds.

source

GeometryOps.GeometryOpsCore.Planar Type
julia
Planar()

A planar manifold refers to the 2D Euclidean plane.

Z coordinates may be accepted but will not influence geometry calculations, which are done purely on 2D geometry. This is the standard "2.5D" model used by e.g. GEOS.

source

GeometryOps.GeometryOpsCore.Spherical Type
julia
Spherical(; radius)

A spherical manifold means that the geometry is on the 3-sphere (but is represented by 2-D longitude and latitude).

Extended help

Note

The traditional definition of spherical coordinates in physics and mathematics, r,θ,ϕ, uses the colatitude, that measures angular displacement from the z-axis.

Here, we use the geographic definition of longitude and latitude, meaning that lon is longitude between -180 and 180, and lat is latitude between -90 (south pole) and 90 (north pole).

source

GeometryOps.GeometryOpsCore.TraitTarget Type
julia
TraitTarget{T}

This struct holds a trait parameter or a union of trait parameters.

It is primarily used for dispatch into methods which select trait levels, like apply, or as a parameter to target.

Constructors

julia
TraitTarget(GI.PointTrait())
 TraitTarget(GI.LineStringTrait(), GI.LinearRingTrait()) # and other traits as you may like
 TraitTarget(TraitTarget(...))
 # There are also type based constructors available, but that's not advised.
 TraitTarget(GI.PointTrait)
 TraitTarget(Union{GI.LineStringTrait, GI.LinearRingTrait})
-# etc.

source

GeometryOps.GeometryOpsCore._False Type
julia
struct _False <: BoolsAsTypes

A struct that means false.

source

GeometryOps.GeometryOpsCore._True Type
julia
struct _True <: BoolsAsTypes

A struct that means true.

source

GeometryOps.LineOrientation Type
julia
Enum LineOrientation

Enum for the orientation of a line with respect to a curve. A line can be line_cross (crossing over the curve), line_hinge (crossing the endpoint of the curve), line_over (collinear with the curve), or line_out (not interacting with the curve).

source

GeometryOps.LinearSegments Type
julia
LinearSegments(; max_distance::Real)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance.

Here, max_distance is a purely nondimensional quantity and will apply in the input space. This is to say, that if the polygon is provided in lat/lon coordinates then the max_distance will be in degrees of arc. If the polygon is provided in meters, then the max_distance will be in meters.

source

GeometryOps.MeanValue Type
julia
MeanValue() <: AbstractBarycentricCoordinateMethod

This method calculates barycentric coordinates using the mean value method.

References

source

GeometryOps.MonotoneChainMethod Type
julia
MonotoneChainMethod()

This is an algorithm for the convex_hull function.

Uses DelaunayTriangulation.jl to compute the convex hull. This is a pure Julia algorithm which provides an optimal Delaunay triangulation.

See also convex_hull

source

GeometryOps.PointOrientation Type
julia
Enum PointOrientation

Enum for the orientation of a point with respect to a curve. A point can be point_in the curve, point_on the curve, or point_out of the curve.

source

GeometryOps.RadialDistance Type
julia
RadialDistance <: SimplifyAlg

Simplifies geometries by removing points less than tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance between points.

Note: user input tol is squared to avoid unnecessary computation in algorithm.

source

GeometryOps.SimplifyAlg Type
julia
abstract type SimplifyAlg

Abstract type for simplification algorithms.

API

For now, the algorithm must hold the number, ratio and tol properties.

Simplification algorithm types can hook into the interface by implementing the _simplify(trait, alg, geom) methods for whichever traits are necessary.

source

GeometryOps.UnionIntersectingPolygons Type
julia
UnionIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygon's included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be combined through the union operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area.

See also GeometryCorrection.

source

GeometryOps.VisvalingamWhyatt Type
julia
VisvalingamWhyatt <: SimplifyAlg
+# etc.

source

GeometryOps.GeometryOpsCore._False Type
julia
struct _False <: BoolsAsTypes

A struct that means false.

source

GeometryOps.GeometryOpsCore._True Type
julia
struct _True <: BoolsAsTypes

A struct that means true.

source

GeometryOps.LineOrientation Type
julia
Enum LineOrientation

Enum for the orientation of a line with respect to a curve. A line can be line_cross (crossing over the curve), line_hinge (crossing the endpoint of the curve), line_over (collinear with the curve), or line_out (not interacting with the curve).

source

GeometryOps.LinearSegments Type
julia
LinearSegments(; max_distance::Real)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance.

Here, max_distance is a purely nondimensional quantity and will apply in the input space. This is to say, that if the polygon is provided in lat/lon coordinates then the max_distance will be in degrees of arc. If the polygon is provided in meters, then the max_distance will be in meters.

source

GeometryOps.MeanValue Type
julia
MeanValue() <: AbstractBarycentricCoordinateMethod

This method calculates barycentric coordinates using the mean value method.

References

source

GeometryOps.MonotoneChainMethod Type
julia
MonotoneChainMethod()

This is an algorithm for the convex_hull function.

Uses DelaunayTriangulation.jl to compute the convex hull. This is a pure Julia algorithm which provides an optimal Delaunay triangulation.

See also convex_hull

source

GeometryOps.PointOrientation Type
julia
Enum PointOrientation

Enum for the orientation of a point with respect to a curve. A point can be point_in the curve, point_on the curve, or point_out of the curve.

source

GeometryOps.RadialDistance Type
julia
RadialDistance <: SimplifyAlg

Simplifies geometries by removing points less than tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance between points.

Note: user input tol is squared to avoid unnecessary computation in algorithm.

source

GeometryOps.SimplifyAlg Type
julia
abstract type SimplifyAlg

Abstract type for simplification algorithms.

API

For now, the algorithm must hold the number, ratio and tol properties.

Simplification algorithm types can hook into the interface by implementing the _simplify(trait, alg, geom) methods for whichever traits are necessary.

source

GeometryOps.UnionIntersectingPolygons Type
julia
UnionIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygon's included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be combined through the union operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area.

See also GeometryCorrection.

source

GeometryOps.VisvalingamWhyatt Type
julia
VisvalingamWhyatt <: SimplifyAlg
 
-VisvalingamWhyatt(; kw...)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum area of a triangle made with a point and its neighboring points.

Note: user input tol is doubled to avoid unnecessary computation in algorithm.

source

GeometryOps.GeometryOpsCore._booltype Function
julia
_booltype(x)

Returns a BoolsAsTypes from x, whether it's a boolean or a BoolsAsTypes.

source

GeometryOps.GeometryOpsCore.apply Method
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
+VisvalingamWhyatt(; kw...)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum area of a triangle made with a point and its neighboring points.

Note: user input tol is doubled to avoid unnecessary computation in algorithm.

source

GeometryOps.GeometryOpsCore._booltype Function
julia
_booltype(x)

Returns a BoolsAsTypes from x, whether it's a boolean or a BoolsAsTypes.

source

GeometryOps.GeometryOpsCore.apply Method
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
 import GeometryOps as GO
 geom = GI.Polygon([GI.LinearRing([(1, 2), (3, 4), (5, 6), (1, 2)]),
                    GI.LinearRing([(3, 4), (5, 6), (6, 7), (3, 4)])])
@@ -547,7 +547,7 @@
 
 # output
 true

source


  1. K. Hormann and N. Sukumar. Generalized Barycentric Coordinates in Computer Graphics and Computational Mechanics. Taylor & Fancis, CRC Press, 2017. ↩︎

- + \ No newline at end of file diff --git a/dev/assets/api.md.Bk3hzA-P.js b/dev/assets/api.md.rwOlNC64.js similarity index 98% rename from dev/assets/api.md.Bk3hzA-P.js rename to dev/assets/api.md.rwOlNC64.js index d8dda28c3..16c910c01 100644 --- a/dev/assets/api.md.Bk3hzA-P.js +++ b/dev/assets/api.md.rwOlNC64.js @@ -1,4 +1,4 @@ -import{_ as h,c as l,a5 as e,j as i,a,G as n,B as k,o as p}from"./chunks/framework.O43fB7X6.js";const Si=JSON.parse('{"title":"Full GeometryOps API documentation","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),r={name:"api.md"},o={class:"jldocstring custom-block",open:""},d={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},E={class:"jldocstring custom-block",open:""},c={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""},m={class:"jldocstring custom-block",open:""},F={class:"jldocstring custom-block",open:""},C={class:"jldocstring custom-block",open:""},b={class:"jldocstring custom-block",open:""},f={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},G={class:"jldocstring custom-block",open:""},A={class:"jldocstring custom-block",open:""},j={class:"jldocstring custom-block",open:""},B={class:"jldocstring custom-block",open:""},O={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},w={class:"jldocstring custom-block",open:""},L={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},M={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},R={class:"jldocstring custom-block",open:""},S={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},H={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},N={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.023ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.197ex",height:"1.02ex",role:"img",focusable:"false",viewBox:"0 -441 529 451","aria-hidden":"true"},W={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},_={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"3.507ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 1550 1000","aria-hidden":"true"},z={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},K={class:"jldocstring custom-block",open:""},X={class:"tip custom-block"},$={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.464ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.442ex",height:"2.059ex",role:"img",focusable:"false",viewBox:"0 -705 2405.3 910","aria-hidden":"true"},ss={class:"jldocstring custom-block",open:""},is={class:"jldocstring custom-block",open:""},as={class:"jldocstring custom-block",open:""},es={class:"jldocstring custom-block",open:""},ts={class:"jldocstring custom-block",open:""},ns={class:"jldocstring custom-block",open:""},ls={class:"jldocstring custom-block",open:""},ps={class:"jldocstring custom-block",open:""},hs={class:"jldocstring custom-block",open:""},ks={class:"jldocstring custom-block",open:""},rs={class:"jldocstring custom-block",open:""},os={class:"jldocstring custom-block",open:""},ds={class:"jldocstring custom-block",open:""},gs={class:"jldocstring custom-block",open:""},ys={class:"jldocstring custom-block",open:""},Es={class:"jldocstring custom-block",open:""},cs={class:"jldocstring custom-block",open:""},us={class:"jldocstring custom-block",open:""},ms={class:"jldocstring custom-block",open:""},Fs={class:"jldocstring custom-block",open:""},Cs={class:"jldocstring custom-block",open:""},bs={class:"jldocstring custom-block",open:""},fs={class:"jldocstring custom-block",open:""},Ts={class:"jldocstring custom-block",open:""},vs={class:"jldocstring custom-block",open:""},Gs={class:"jldocstring custom-block",open:""},As={class:"jldocstring custom-block",open:""},js={class:"jldocstring custom-block",open:""},Bs={class:"jldocstring custom-block",open:""},Os={class:"jldocstring custom-block",open:""},Ds={class:"jldocstring custom-block",open:""},xs={class:"jldocstring custom-block",open:""},Qs={class:"jldocstring custom-block",open:""},ws={class:"jldocstring custom-block",open:""},Ls={class:"jldocstring custom-block",open:""},Is={class:"jldocstring custom-block",open:""},Ms={class:"jldocstring custom-block",open:""},Ps={class:"jldocstring custom-block",open:""},qs={class:"jldocstring custom-block",open:""},Rs={class:"jldocstring custom-block",open:""},Ss={class:"jldocstring custom-block",open:""},Vs={class:"jldocstring custom-block",open:""},Js={class:"jldocstring custom-block",open:""},Us={class:"jldocstring custom-block",open:""},Hs={class:"jldocstring custom-block",open:""},Ns={class:"jldocstring custom-block",open:""},Ws={class:"jldocstring custom-block",open:""},_s={class:"jldocstring custom-block",open:""},zs={class:"jldocstring custom-block",open:""},Zs={class:"jldocstring custom-block",open:""},Ks={class:"jldocstring custom-block",open:""},Xs={class:"jldocstring custom-block",open:""},$s={class:"jldocstring custom-block",open:""},Ys={class:"jldocstring custom-block",open:""},si={class:"jldocstring custom-block",open:""},ii={class:"jldocstring custom-block",open:""},ai={class:"jldocstring custom-block",open:""},ei={class:"jldocstring custom-block",open:""},ti={class:"jldocstring custom-block",open:""},ni={class:"jldocstring custom-block",open:""},li={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},pi={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.827ex"},xmlns:"http://www.w3.org/2000/svg",width:"33.539ex",height:"6.785ex",role:"img",focusable:"false",viewBox:"0 -1749.5 14824.1 2999","aria-hidden":"true"},hi={class:"jldocstring custom-block",open:""},ki={class:"jldocstring custom-block",open:""},ri={class:"jldocstring custom-block",open:""},oi={class:"jldocstring custom-block",open:""},di={class:"jldocstring custom-block",open:""},gi={class:"jldocstring custom-block",open:""},yi={class:"jldocstring custom-block",open:""},Ei={class:"jldocstring custom-block",open:""},ci={class:"jldocstring custom-block",open:""},ui={class:"jldocstring custom-block",open:""},mi={class:"jldocstring custom-block",open:""},Fi={class:"jldocstring custom-block",open:""},Ci={class:"jldocstring custom-block",open:""},bi={class:"jldocstring custom-block",open:""},fi={class:"jldocstring custom-block",open:""},Ti={class:"jldocstring custom-block",open:""},vi={class:"jldocstring custom-block",open:""},Gi={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},Ai={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.059ex"},xmlns:"http://www.w3.org/2000/svg",width:"27.746ex",height:"5.362ex",role:"img",focusable:"false",viewBox:"0 -1460 12263.9 2370","aria-hidden":"true"},ji={class:"jldocstring custom-block",open:""},Bi={class:"jldocstring custom-block",open:""},Oi={class:"jldocstring custom-block",open:""},Di={class:"jldocstring custom-block",open:""},xi={class:"jldocstring custom-block",open:""},Qi={class:"jldocstring custom-block",open:""};function wi(Li,s,Ii,Mi,Pi,qi){const t=k("Badge");return p(),l("div",null,[s[387]||(s[387]=e('

Full GeometryOps API documentation

Warning

This page is still very much WIP!

Documentation for GeometryOps's full API (only for reference!).

apply and associated functions

',5)),i("details",o,[i("summary",null,[s[0]||(s[0]=i("a",{id:"GeometryOps.GeometryOpsCore.apply",href:"#GeometryOps.GeometryOpsCore.apply"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.apply")],-1)),s[1]||(s[1]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=e(`
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
+import{_ as h,c as l,a5 as e,j as i,a,G as n,B as k,o as p}from"./chunks/framework.B_n_RGhH.js";const Si=JSON.parse('{"title":"Full GeometryOps API documentation","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),r={name:"api.md"},o={class:"jldocstring custom-block",open:""},d={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},E={class:"jldocstring custom-block",open:""},c={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""},m={class:"jldocstring custom-block",open:""},F={class:"jldocstring custom-block",open:""},C={class:"jldocstring custom-block",open:""},b={class:"jldocstring custom-block",open:""},f={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},G={class:"jldocstring custom-block",open:""},A={class:"jldocstring custom-block",open:""},j={class:"jldocstring custom-block",open:""},B={class:"jldocstring custom-block",open:""},O={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},w={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},L={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},M={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},R={class:"jldocstring custom-block",open:""},S={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},H={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},N={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.023ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.197ex",height:"1.02ex",role:"img",focusable:"false",viewBox:"0 -441 529 451","aria-hidden":"true"},W={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},_={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"3.507ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 1550 1000","aria-hidden":"true"},z={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},K={class:"jldocstring custom-block",open:""},X={class:"tip custom-block"},$={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.464ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.442ex",height:"2.059ex",role:"img",focusable:"false",viewBox:"0 -705 2405.3 910","aria-hidden":"true"},ss={class:"jldocstring custom-block",open:""},is={class:"jldocstring custom-block",open:""},as={class:"jldocstring custom-block",open:""},es={class:"jldocstring custom-block",open:""},ts={class:"jldocstring custom-block",open:""},ns={class:"jldocstring custom-block",open:""},ls={class:"jldocstring custom-block",open:""},ps={class:"jldocstring custom-block",open:""},hs={class:"jldocstring custom-block",open:""},ks={class:"jldocstring custom-block",open:""},rs={class:"jldocstring custom-block",open:""},os={class:"jldocstring custom-block",open:""},ds={class:"jldocstring custom-block",open:""},gs={class:"jldocstring custom-block",open:""},ys={class:"jldocstring custom-block",open:""},Es={class:"jldocstring custom-block",open:""},cs={class:"jldocstring custom-block",open:""},us={class:"jldocstring custom-block",open:""},ms={class:"jldocstring custom-block",open:""},Fs={class:"jldocstring custom-block",open:""},Cs={class:"jldocstring custom-block",open:""},bs={class:"jldocstring custom-block",open:""},fs={class:"jldocstring custom-block",open:""},Ts={class:"jldocstring custom-block",open:""},vs={class:"jldocstring custom-block",open:""},Gs={class:"jldocstring custom-block",open:""},As={class:"jldocstring custom-block",open:""},js={class:"jldocstring custom-block",open:""},Bs={class:"jldocstring custom-block",open:""},Os={class:"jldocstring custom-block",open:""},Ds={class:"jldocstring custom-block",open:""},xs={class:"jldocstring custom-block",open:""},ws={class:"jldocstring custom-block",open:""},Qs={class:"jldocstring custom-block",open:""},Ls={class:"jldocstring custom-block",open:""},Is={class:"jldocstring custom-block",open:""},Ms={class:"jldocstring custom-block",open:""},Ps={class:"jldocstring custom-block",open:""},qs={class:"jldocstring custom-block",open:""},Rs={class:"jldocstring custom-block",open:""},Ss={class:"jldocstring custom-block",open:""},Vs={class:"jldocstring custom-block",open:""},Js={class:"jldocstring custom-block",open:""},Us={class:"jldocstring custom-block",open:""},Hs={class:"jldocstring custom-block",open:""},Ns={class:"jldocstring custom-block",open:""},Ws={class:"jldocstring custom-block",open:""},_s={class:"jldocstring custom-block",open:""},zs={class:"jldocstring custom-block",open:""},Zs={class:"jldocstring custom-block",open:""},Ks={class:"jldocstring custom-block",open:""},Xs={class:"jldocstring custom-block",open:""},$s={class:"jldocstring custom-block",open:""},Ys={class:"jldocstring custom-block",open:""},si={class:"jldocstring custom-block",open:""},ii={class:"jldocstring custom-block",open:""},ai={class:"jldocstring custom-block",open:""},ei={class:"jldocstring custom-block",open:""},ti={class:"jldocstring custom-block",open:""},ni={class:"jldocstring custom-block",open:""},li={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},pi={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.827ex"},xmlns:"http://www.w3.org/2000/svg",width:"33.539ex",height:"6.785ex",role:"img",focusable:"false",viewBox:"0 -1749.5 14824.1 2999","aria-hidden":"true"},hi={class:"jldocstring custom-block",open:""},ki={class:"jldocstring custom-block",open:""},ri={class:"jldocstring custom-block",open:""},oi={class:"jldocstring custom-block",open:""},di={class:"jldocstring custom-block",open:""},gi={class:"jldocstring custom-block",open:""},yi={class:"jldocstring custom-block",open:""},Ei={class:"jldocstring custom-block",open:""},ci={class:"jldocstring custom-block",open:""},ui={class:"jldocstring custom-block",open:""},mi={class:"jldocstring custom-block",open:""},Fi={class:"jldocstring custom-block",open:""},Ci={class:"jldocstring custom-block",open:""},bi={class:"jldocstring custom-block",open:""},fi={class:"jldocstring custom-block",open:""},Ti={class:"jldocstring custom-block",open:""},vi={class:"jldocstring custom-block",open:""},Gi={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},Ai={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.059ex"},xmlns:"http://www.w3.org/2000/svg",width:"27.746ex",height:"5.362ex",role:"img",focusable:"false",viewBox:"0 -1460 12263.9 2370","aria-hidden":"true"},ji={class:"jldocstring custom-block",open:""},Bi={class:"jldocstring custom-block",open:""},Oi={class:"jldocstring custom-block",open:""},Di={class:"jldocstring custom-block",open:""},xi={class:"jldocstring custom-block",open:""},wi={class:"jldocstring custom-block",open:""};function Qi(Li,s,Ii,Mi,Pi,qi){const t=k("Badge");return p(),l("div",null,[s[387]||(s[387]=e('

Full GeometryOps API documentation

Warning

This page is still very much WIP!

Documentation for GeometryOps's full API (only for reference!).

apply and associated functions

',5)),i("details",o,[i("summary",null,[s[0]||(s[0]=i("a",{id:"GeometryOps.GeometryOpsCore.apply",href:"#GeometryOps.GeometryOpsCore.apply"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.apply")],-1)),s[1]||(s[1]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=e(`
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
 import GeometryOps as GO
 geom = GI.Polygon([GI.LinearRing([(1, 2), (3, 4), (5, 6), (1, 2)]),
                    GI.LinearRing([(3, 4), (5, 6), (6, 7), (3, 4)])])
@@ -266,17 +266,17 @@ import{_ as h,c as l,a5 as e,j as i,a,G as n,B as k,o as p}from"./chunks/framewo
 - The angles of a linestring or linearring is a vector of angles formed by the curve.
 - The angles of a polygon is a vector of vectors of angles formed by each ring.
 - The angles of a multi-geometry collection is a vector of the angles of each of the
-    sub-geometries as defined above.

Result will be a Vector, or nested set of vectors, of type T where an optional argument with a default value of Float64.

source

`,10))]),i("details",x,[i("summary",null,[s[60]||(s[60]=i("a",{id:"GeometryOps.embed_extent",href:"#GeometryOps.embed_extent"},[i("span",{class:"jlbinding"},"GeometryOps.embed_extent")],-1)),s[61]||(s[61]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[62]||(s[62]=e('
julia
embed_extent(obj)

Recursively wrap the object with a GeoInterface.jl geometry, calculating and adding an Extents.Extent to all objects.

This can improve performance when extents need to be checked multiple times, such when needing to check if many points are in geometries, and using their extents as a quick filter for obviously exterior points.

Keywords

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

source

julia
embed_extent(obj)

Recursively wrap the object with a GeoInterface.jl geometry, calculating and adding an Extents.Extent to all objects.

This can improve performance when extents need to be checked multiple times, such when needing to check if many points are in geometries, and using their extents as a quick filter for obviously exterior points.

Keywords

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

source

',12))]),s[391]||(s[391]=i("h2",{id:"Barycentric-coordinates",tabindex:"-1"},[a("Barycentric coordinates "),i("a",{class:"header-anchor",href:"#Barycentric-coordinates","aria-label":'Permalink to "Barycentric coordinates {#Barycentric-coordinates}"'},"​")],-1)),i("details",Q,[i("summary",null,[s[63]||(s[63]=i("a",{id:"GeometryOps.barycentric_coordinates",href:"#GeometryOps.barycentric_coordinates"},[i("span",{class:"jlbinding"},"GeometryOps.barycentric_coordinates")],-1)),s[64]||(s[64]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[65]||(s[65]=e('
julia
barycentric_coordinates(method = MeanValue(), polygon, point)

Returns the barycentric coordinates of point in polygon using the barycentric coordinate method method.

source

julia
barycentric_coordinates(method = MeanValue(), polygon, point)

Returns the barycentric coordinates of point in polygon using the barycentric coordinate method method.

source

',6))]),i("details",w,[i("summary",null,[s[66]||(s[66]=i("a",{id:"GeometryOps.barycentric_coordinates!",href:"#GeometryOps.barycentric_coordinates!"},[i("span",{class:"jlbinding"},"GeometryOps.barycentric_coordinates!")],-1)),s[67]||(s[67]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[68]||(s[68]=e('
julia
barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, polygon, point)

Loads the barycentric coordinates of point in polygon into λs using the barycentric coordinate method method.

λs must be of the length of the polygon plus its holes.

Tip

Use this method to avoid excess allocations when you need to calculate barycentric coordinates for many points.

source

julia
barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, polygon, point)

Loads the barycentric coordinates of point in polygon into λs using the barycentric coordinate method method.

λs must be of the length of the polygon plus its holes.

Tip

Use this method to avoid excess allocations when you need to calculate barycentric coordinates for many points.

source

',10))]),i("details",L,[i("summary",null,[s[69]||(s[69]=i("a",{id:"GeometryOps.barycentric_interpolate",href:"#GeometryOps.barycentric_interpolate"},[i("span",{class:"jlbinding"},"GeometryOps.barycentric_interpolate")],-1)),s[70]||(s[70]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[71]||(s[71]=e('
julia
barycentric_interpolate(method = MeanValue(), polygon, values::AbstractVector{V}, point)

Returns the interpolated value at point within polygon using the barycentric coordinate method method. values are the per-point values for the polygon which are to be interpolated.

Returns an object of type V.

Warning

Barycentric interpolation is currently defined only for 2-dimensional polygons. If you pass a 3-D polygon in, the Z coordinate will be used as per-vertex value to be interpolated (the M coordinate in GIS parlance).

source

julia
barycentric_interpolate(method = MeanValue(), polygon, values::AbstractVector{V}, point)

Returns the interpolated value at point within polygon using the barycentric coordinate method method. values are the per-point values for the polygon which are to be interpolated.

Returns an object of type V.

Warning

Barycentric interpolation is currently defined only for 2-dimensional polygons. If you pass a 3-D polygon in, the Z coordinate will be used as per-vertex value to be interpolated (the M coordinate in GIS parlance).

source

',10))]),s[392]||(s[392]=i("h2",{id:"Other-methods",tabindex:"-1"},[a("Other methods "),i("a",{class:"header-anchor",href:"#Other-methods","aria-label":'Permalink to "Other methods {#Other-methods}"'},"​")],-1)),i("details",I,[i("summary",null,[s[72]||(s[72]=i("a",{id:"GeometryOps.AbstractBarycentricCoordinateMethod",href:"#GeometryOps.AbstractBarycentricCoordinateMethod"},[i("span",{class:"jlbinding"},"GeometryOps.AbstractBarycentricCoordinateMethod")],-1)),s[73]||(s[73]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[74]||(s[74]=e('
julia
abstract type AbstractBarycentricCoordinateMethod

Abstract supertype for barycentric coordinate methods. The subtypes may serve as dispatch types, or may cache some information about the target polygon.

API

The following methods must be implemented for all subtypes:

  • barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, point::Point{2, T2})

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, values::Vector{V}, point::Point{2, T2})::V

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, interiors::Vector{<: Vector{<: Point{2, T1}}} values::Vector{V}, point::Point{2, T2})::V

The rest of the methods will be implemented in terms of these, and have efficient dispatches for broadcasting.

source

',7))]),i("details",M,[i("summary",null,[s[75]||(s[75]=i("a",{id:"GeometryOps.ClosedRing",href:"#GeometryOps.ClosedRing"},[i("span",{class:"jlbinding"},"GeometryOps.ClosedRing")],-1)),s[76]||(s[76]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[77]||(s[77]=e('
julia
ClosedRing() <: GeometryCorrection

This correction ensures that a polygon's exterior and interior rings are closed.

It can be called on any geometry correction as usual.

See also GeometryCorrection.

source

',5))]),i("details",P,[i("summary",null,[s[78]||(s[78]=i("a",{id:"GeometryOps.DiffIntersectingPolygons",href:"#GeometryOps.DiffIntersectingPolygons"},[i("span",{class:"jlbinding"},"GeometryOps.DiffIntersectingPolygons")],-1)),s[79]||(s[79]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[80]||(s[80]=e('
julia
DiffIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygons included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be made nonintersecting through the difference operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area. See also GeometryCorrection, UnionIntersectingPolygons.

source

',3))]),i("details",q,[i("summary",null,[s[81]||(s[81]=i("a",{id:"GeometryOps.DouglasPeucker",href:"#GeometryOps.DouglasPeucker"},[i("span",{class:"jlbinding"},"GeometryOps.DouglasPeucker")],-1)),s[82]||(s[82]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[83]||(s[83]=e(`
julia
DouglasPeucker <: SimplifyAlg
+    sub-geometries as defined above.

Result will be a Vector, or nested set of vectors, of type T where an optional argument with a default value of Float64.

source

`,10))]),i("details",x,[i("summary",null,[s[60]||(s[60]=i("a",{id:"GeometryOps.embed_extent",href:"#GeometryOps.embed_extent"},[i("span",{class:"jlbinding"},"GeometryOps.embed_extent")],-1)),s[61]||(s[61]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[62]||(s[62]=e('
julia
embed_extent(obj)

Recursively wrap the object with a GeoInterface.jl geometry, calculating and adding an Extents.Extent to all objects.

This can improve performance when extents need to be checked multiple times, such when needing to check if many points are in geometries, and using their extents as a quick filter for obviously exterior points.

Keywords

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

source

julia
embed_extent(obj)

Recursively wrap the object with a GeoInterface.jl geometry, calculating and adding an Extents.Extent to all objects.

This can improve performance when extents need to be checked multiple times, such when needing to check if many points are in geometries, and using their extents as a quick filter for obviously exterior points.

Keywords

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

source

',12))]),s[391]||(s[391]=i("h2",{id:"Barycentric-coordinates",tabindex:"-1"},[a("Barycentric coordinates "),i("a",{class:"header-anchor",href:"#Barycentric-coordinates","aria-label":'Permalink to "Barycentric coordinates {#Barycentric-coordinates}"'},"​")],-1)),i("details",w,[i("summary",null,[s[63]||(s[63]=i("a",{id:"GeometryOps.barycentric_coordinates",href:"#GeometryOps.barycentric_coordinates"},[i("span",{class:"jlbinding"},"GeometryOps.barycentric_coordinates")],-1)),s[64]||(s[64]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[65]||(s[65]=e('
julia
barycentric_coordinates(method = MeanValue(), polygon, point)

Returns the barycentric coordinates of point in polygon using the barycentric coordinate method method.

source

julia
barycentric_coordinates(method = MeanValue(), polygon, point)

Returns the barycentric coordinates of point in polygon using the barycentric coordinate method method.

source

',6))]),i("details",Q,[i("summary",null,[s[66]||(s[66]=i("a",{id:"GeometryOps.barycentric_coordinates!",href:"#GeometryOps.barycentric_coordinates!"},[i("span",{class:"jlbinding"},"GeometryOps.barycentric_coordinates!")],-1)),s[67]||(s[67]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[68]||(s[68]=e('
julia
barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, polygon, point)

Loads the barycentric coordinates of point in polygon into λs using the barycentric coordinate method method.

λs must be of the length of the polygon plus its holes.

Tip

Use this method to avoid excess allocations when you need to calculate barycentric coordinates for many points.

source

julia
barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, polygon, point)

Loads the barycentric coordinates of point in polygon into λs using the barycentric coordinate method method.

λs must be of the length of the polygon plus its holes.

Tip

Use this method to avoid excess allocations when you need to calculate barycentric coordinates for many points.

source

',10))]),i("details",L,[i("summary",null,[s[69]||(s[69]=i("a",{id:"GeometryOps.barycentric_interpolate",href:"#GeometryOps.barycentric_interpolate"},[i("span",{class:"jlbinding"},"GeometryOps.barycentric_interpolate")],-1)),s[70]||(s[70]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[71]||(s[71]=e('
julia
barycentric_interpolate(method = MeanValue(), polygon, values::AbstractVector{V}, point)

Returns the interpolated value at point within polygon using the barycentric coordinate method method. values are the per-point values for the polygon which are to be interpolated.

Returns an object of type V.

Warning

Barycentric interpolation is currently defined only for 2-dimensional polygons. If you pass a 3-D polygon in, the Z coordinate will be used as per-vertex value to be interpolated (the M coordinate in GIS parlance).

source

julia
barycentric_interpolate(method = MeanValue(), polygon, values::AbstractVector{V}, point)

Returns the interpolated value at point within polygon using the barycentric coordinate method method. values are the per-point values for the polygon which are to be interpolated.

Returns an object of type V.

Warning

Barycentric interpolation is currently defined only for 2-dimensional polygons. If you pass a 3-D polygon in, the Z coordinate will be used as per-vertex value to be interpolated (the M coordinate in GIS parlance).

source

',10))]),s[392]||(s[392]=i("h2",{id:"Other-methods",tabindex:"-1"},[a("Other methods "),i("a",{class:"header-anchor",href:"#Other-methods","aria-label":'Permalink to "Other methods {#Other-methods}"'},"​")],-1)),i("details",I,[i("summary",null,[s[72]||(s[72]=i("a",{id:"GeometryOps.AbstractBarycentricCoordinateMethod",href:"#GeometryOps.AbstractBarycentricCoordinateMethod"},[i("span",{class:"jlbinding"},"GeometryOps.AbstractBarycentricCoordinateMethod")],-1)),s[73]||(s[73]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[74]||(s[74]=e('
julia
abstract type AbstractBarycentricCoordinateMethod

Abstract supertype for barycentric coordinate methods. The subtypes may serve as dispatch types, or may cache some information about the target polygon.

API

The following methods must be implemented for all subtypes:

  • barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, point::Point{2, T2})

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, values::Vector{V}, point::Point{2, T2})::V

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, interiors::Vector{<: Vector{<: Point{2, T1}}} values::Vector{V}, point::Point{2, T2})::V

The rest of the methods will be implemented in terms of these, and have efficient dispatches for broadcasting.

source

',7))]),i("details",M,[i("summary",null,[s[75]||(s[75]=i("a",{id:"GeometryOps.ClosedRing",href:"#GeometryOps.ClosedRing"},[i("span",{class:"jlbinding"},"GeometryOps.ClosedRing")],-1)),s[76]||(s[76]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[77]||(s[77]=e('
julia
ClosedRing() <: GeometryCorrection

This correction ensures that a polygon's exterior and interior rings are closed.

It can be called on any geometry correction as usual.

See also GeometryCorrection.

source

',5))]),i("details",P,[i("summary",null,[s[78]||(s[78]=i("a",{id:"GeometryOps.DiffIntersectingPolygons",href:"#GeometryOps.DiffIntersectingPolygons"},[i("span",{class:"jlbinding"},"GeometryOps.DiffIntersectingPolygons")],-1)),s[79]||(s[79]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[80]||(s[80]=e('
julia
DiffIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygons included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be made nonintersecting through the difference operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area. See also GeometryCorrection, UnionIntersectingPolygons.

source

',3))]),i("details",q,[i("summary",null,[s[81]||(s[81]=i("a",{id:"GeometryOps.DouglasPeucker",href:"#GeometryOps.DouglasPeucker"},[i("span",{class:"jlbinding"},"GeometryOps.DouglasPeucker")],-1)),s[82]||(s[82]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[83]||(s[83]=e(`
julia
DouglasPeucker <: SimplifyAlg
 
-DouglasPeucker(; number, ratio, tol)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance a point will be from the line joining its neighboring points.

Note: user input tol is squared to avoid unnecessary computation in algorithm.

source

`,6))]),i("details",R,[i("summary",null,[s[84]||(s[84]=i("a",{id:"GeometryOps.GEOS",href:"#GeometryOps.GEOS"},[i("span",{class:"jlbinding"},"GeometryOps.GEOS")],-1)),s[85]||(s[85]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[86]||(s[86]=e('
julia
GEOS(; params...)

A struct which instructs the method it's passed to as an algorithm to use the appropriate GEOS function via LibGEOS.jl for the operation.

Dispatch is generally carried out using the names of the keyword arguments. For example, segmentize will only accept a GEOS struct with only a max_distance keyword, and no other.

It's generally a lot slower than the native Julia implementations, since it must convert to the LibGEOS implementation and back - so be warned!

source

',5))]),i("details",S,[i("summary",null,[s[87]||(s[87]=i("a",{id:"GeometryOps.GeodesicSegments",href:"#GeometryOps.GeodesicSegments"},[i("span",{class:"jlbinding"},"GeometryOps.GeodesicSegments")],-1)),s[88]||(s[88]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[89]||(s[89]=e('
julia
GeodesicSegments(; max_distance::Real, equatorial_radius::Real=6378137, flattening::Real=1/298.257223563)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance. This method calculates the distance between points on the geodesic, and assumes input in lat/long coordinates.

Warning

Any input geometries must be in lon/lat coordinates! If not, the method may fail or error.

Arguments

  • max_distance::Real: The maximum distance, in meters, between vertices in the geometry.

  • equatorial_radius::Real=6378137: The equatorial radius of the Earth, in meters. Passed to Proj.geod_geodesic.

  • flattening::Real=1/298.257223563: The flattening of the Earth, which is the ratio of the difference between the equatorial and polar radii to the equatorial radius. Passed to Proj.geod_geodesic.

One can also omit the equatorial_radius and flattening keyword arguments, and pass a geodesic object directly to the eponymous keyword.

This method uses the Proj/GeographicLib API for geodesic calculations.

source

',8))]),i("details",V,[i("summary",null,[s[90]||(s[90]=i("a",{id:"GeometryOps.GeometryCorrection",href:"#GeometryOps.GeometryCorrection"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryCorrection")],-1)),s[91]||(s[91]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[92]||(s[92]=e('
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source

',5))]),i("details",J,[i("summary",null,[s[93]||(s[93]=i("a",{id:"GeometryOps.GeometryOpsCore.BoolsAsTypes",href:"#GeometryOps.GeometryOpsCore.BoolsAsTypes"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.BoolsAsTypes")],-1)),s[94]||(s[94]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[95]||(s[95]=e('
julia
abstract type BoolsAsTypes

source

',2))]),i("details",U,[i("summary",null,[s[96]||(s[96]=i("a",{id:"GeometryOps.GeometryOpsCore.Geodesic",href:"#GeometryOps.GeometryOpsCore.Geodesic"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.Geodesic")],-1)),s[97]||(s[97]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[109]||(s[109]=e('
julia
Geodesic(; semimajor_axis, inv_flattening)
',1)),i("p",null,[s[102]||(s[102]=a("A geodesic manifold means that the geometry is on a 3-dimensional ellipsoid, parameterized by ")),s[103]||(s[103]=i("code",null,"semimajor_axis",-1)),s[104]||(s[104]=a(" (")),i("mjx-container",H,[(p(),l("svg",N,s[98]||(s[98]=[i("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[i("g",{"data-mml-node":"math"},[i("g",{"data-mml-node":"mi"},[i("path",{"data-c":"1D44E",d:"M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z",style:{"stroke-width":"3"}})])])],-1)]))),s[99]||(s[99]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mi",null,"a")])],-1))]),s[105]||(s[105]=a(" in mathematical parlance) and ")),s[106]||(s[106]=i("code",null,"inv_flattening",-1)),s[107]||(s[107]=a(" (")),i("mjx-container",W,[(p(),l("svg",_,s[100]||(s[100]=[e('',1)]))),s[101]||(s[101]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mn",null,"1"),i("mrow",{"data-mjx-texclass":"ORD"},[i("mo",null,"/")]),i("mi",null,"f")])],-1))]),s[108]||(s[108]=a(")."))]),s[110]||(s[110]=i("p",null,"Usually, this is only relevant for area and segmentization calculations. It becomes more relevant as one grows closer to the poles (or equator).",-1)),s[111]||(s[111]=i("p",null,[i("a",{href:"https://github.com/JuliaGeo/GeometryOps.jl/blob/v0.1.12/GeometryOpsCore/src/types.jl#L66-L73",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",z,[i("summary",null,[s[112]||(s[112]=i("a",{id:"GeometryOps.GeometryOpsCore.Linear",href:"#GeometryOps.GeometryOpsCore.Linear"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.Linear")],-1)),s[113]||(s[113]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[114]||(s[114]=e('
julia
Linear()

A linear manifold means that the space is completely Euclidean, and planar geometry suffices.

source

',3))]),i("details",Z,[i("summary",null,[s[115]||(s[115]=i("a",{id:"GeometryOps.GeometryOpsCore.Manifold",href:"#GeometryOps.GeometryOpsCore.Manifold"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.Manifold")],-1)),s[116]||(s[116]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[117]||(s[117]=e('
julia
abstract type Manifold

A manifold is mathematically defined as a topological space that resembles Euclidean space locally.

We use the manifold definition to define the space in which an operation should be performed, or where a geometry lies.

Currently we have Linear, Spherical, and Geodesic manifolds.

source

',5))]),i("details",K,[i("summary",null,[s[118]||(s[118]=i("a",{id:"GeometryOps.GeometryOpsCore.Spherical",href:"#GeometryOps.GeometryOpsCore.Spherical"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.Spherical")],-1)),s[119]||(s[119]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[130]||(s[130]=e('
julia
Spherical(; radius)

A spherical manifold means that the geometry is on the 3-sphere (but is represented by 2-D longitude and latitude).

Extended help

',3)),i("div",X,[s[128]||(s[128]=i("p",{class:"custom-block-title"},"Note",-1)),i("p",null,[s[122]||(s[122]=a("The traditional definition of spherical coordinates in physics and mathematics, ")),i("mjx-container",$,[(p(),l("svg",Y,s[120]||(s[120]=[e('',1)]))),s[121]||(s[121]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mi",null,"r"),i("mo",null,","),i("mi",null,"θ"),i("mo",null,","),i("mi",null,"ϕ")])],-1))]),s[123]||(s[123]=a(", uses the ")),s[124]||(s[124]=i("em",null,"colatitude",-1)),s[125]||(s[125]=a(", that measures angular displacement from the ")),s[126]||(s[126]=i("code",null,"z",-1)),s[127]||(s[127]=a("-axis."))]),s[129]||(s[129]=i("p",null,[a("Here, we use the geographic definition of longitude and latitude, meaning that "),i("code",null,"lon"),a(" is longitude between -180 and 180, and "),i("code",null,"lat"),a(" is latitude between "),i("code",null,"-90"),a(" (south pole) and "),i("code",null,"90"),a(" (north pole).")],-1))]),s[131]||(s[131]=i("p",null,[i("a",{href:"https://github.com/JuliaGeo/GeometryOps.jl/blob/v0.1.12/GeometryOpsCore/src/types.jl#L47-L61",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",ss,[i("summary",null,[s[132]||(s[132]=i("a",{id:"GeometryOps.GeometryOpsCore.TraitTarget",href:"#GeometryOps.GeometryOpsCore.TraitTarget"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.TraitTarget")],-1)),s[133]||(s[133]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[134]||(s[134]=e(`
julia
TraitTarget{T}

This struct holds a trait parameter or a union of trait parameters.

It is primarily used for dispatch into methods which select trait levels, like apply, or as a parameter to target.

Constructors

julia
TraitTarget(GI.PointTrait())
+DouglasPeucker(; number, ratio, tol)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance a point will be from the line joining its neighboring points.

Note: user input tol is squared to avoid unnecessary computation in algorithm.

source

`,6))]),i("details",R,[i("summary",null,[s[84]||(s[84]=i("a",{id:"GeometryOps.GEOS",href:"#GeometryOps.GEOS"},[i("span",{class:"jlbinding"},"GeometryOps.GEOS")],-1)),s[85]||(s[85]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[86]||(s[86]=e('
julia
GEOS(; params...)

A struct which instructs the method it's passed to as an algorithm to use the appropriate GEOS function via LibGEOS.jl for the operation.

Dispatch is generally carried out using the names of the keyword arguments. For example, segmentize will only accept a GEOS struct with only a max_distance keyword, and no other.

It's generally a lot slower than the native Julia implementations, since it must convert to the LibGEOS implementation and back - so be warned!

source

',5))]),i("details",S,[i("summary",null,[s[87]||(s[87]=i("a",{id:"GeometryOps.GeodesicSegments",href:"#GeometryOps.GeodesicSegments"},[i("span",{class:"jlbinding"},"GeometryOps.GeodesicSegments")],-1)),s[88]||(s[88]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[89]||(s[89]=e('
julia
GeodesicSegments(; max_distance::Real, equatorial_radius::Real=6378137, flattening::Real=1/298.257223563)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance. This method calculates the distance between points on the geodesic, and assumes input in lat/long coordinates.

Warning

Any input geometries must be in lon/lat coordinates! If not, the method may fail or error.

Arguments

  • max_distance::Real: The maximum distance, in meters, between vertices in the geometry.

  • equatorial_radius::Real=6378137: The equatorial radius of the Earth, in meters. Passed to Proj.geod_geodesic.

  • flattening::Real=1/298.257223563: The flattening of the Earth, which is the ratio of the difference between the equatorial and polar radii to the equatorial radius. Passed to Proj.geod_geodesic.

One can also omit the equatorial_radius and flattening keyword arguments, and pass a geodesic object directly to the eponymous keyword.

This method uses the Proj/GeographicLib API for geodesic calculations.

source

',8))]),i("details",V,[i("summary",null,[s[90]||(s[90]=i("a",{id:"GeometryOps.GeometryCorrection",href:"#GeometryOps.GeometryCorrection"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryCorrection")],-1)),s[91]||(s[91]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[92]||(s[92]=e('
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source

',5))]),i("details",J,[i("summary",null,[s[93]||(s[93]=i("a",{id:"GeometryOps.GeometryOpsCore.BoolsAsTypes",href:"#GeometryOps.GeometryOpsCore.BoolsAsTypes"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.BoolsAsTypes")],-1)),s[94]||(s[94]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[95]||(s[95]=e('
julia
abstract type BoolsAsTypes

source

',2))]),i("details",U,[i("summary",null,[s[96]||(s[96]=i("a",{id:"GeometryOps.GeometryOpsCore.Geodesic",href:"#GeometryOps.GeometryOpsCore.Geodesic"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.Geodesic")],-1)),s[97]||(s[97]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[109]||(s[109]=e('
julia
Geodesic(; semimajor_axis, inv_flattening)
',1)),i("p",null,[s[102]||(s[102]=a("A geodesic manifold means that the geometry is on a 3-dimensional ellipsoid, parameterized by ")),s[103]||(s[103]=i("code",null,"semimajor_axis",-1)),s[104]||(s[104]=a(" (")),i("mjx-container",H,[(p(),l("svg",N,s[98]||(s[98]=[i("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[i("g",{"data-mml-node":"math"},[i("g",{"data-mml-node":"mi"},[i("path",{"data-c":"1D44E",d:"M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z",style:{"stroke-width":"3"}})])])],-1)]))),s[99]||(s[99]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mi",null,"a")])],-1))]),s[105]||(s[105]=a(" in mathematical parlance) and ")),s[106]||(s[106]=i("code",null,"inv_flattening",-1)),s[107]||(s[107]=a(" (")),i("mjx-container",W,[(p(),l("svg",_,s[100]||(s[100]=[e('',1)]))),s[101]||(s[101]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mn",null,"1"),i("mrow",{"data-mjx-texclass":"ORD"},[i("mo",null,"/")]),i("mi",null,"f")])],-1))]),s[108]||(s[108]=a(")."))]),s[110]||(s[110]=i("p",null,"Usually, this is only relevant for area and segmentization calculations. It becomes more relevant as one grows closer to the poles (or equator).",-1)),s[111]||(s[111]=i("p",null,[i("a",{href:"https://github.com/JuliaGeo/GeometryOps.jl/blob/v0.1.12/GeometryOpsCore/src/types.jl#L68-L75",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",z,[i("summary",null,[s[112]||(s[112]=i("a",{id:"GeometryOps.GeometryOpsCore.Manifold",href:"#GeometryOps.GeometryOpsCore.Manifold"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.Manifold")],-1)),s[113]||(s[113]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[114]||(s[114]=e('
julia
abstract type Manifold

A manifold is mathematically defined as a topological space that resembles Euclidean space locally.

We use the manifold definition to define the space in which an operation should be performed, or where a geometry lies.

Currently we have Planar, Spherical, and Geodesic manifolds.

source

',5))]),i("details",Z,[i("summary",null,[s[115]||(s[115]=i("a",{id:"GeometryOps.GeometryOpsCore.Planar",href:"#GeometryOps.GeometryOpsCore.Planar"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.Planar")],-1)),s[116]||(s[116]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[117]||(s[117]=e('
julia
Planar()

A planar manifold refers to the 2D Euclidean plane.

Z coordinates may be accepted but will not influence geometry calculations, which are done purely on 2D geometry. This is the standard "2.5D" model used by e.g. GEOS.

source

',4))]),i("details",K,[i("summary",null,[s[118]||(s[118]=i("a",{id:"GeometryOps.GeometryOpsCore.Spherical",href:"#GeometryOps.GeometryOpsCore.Spherical"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.Spherical")],-1)),s[119]||(s[119]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[130]||(s[130]=e('
julia
Spherical(; radius)

A spherical manifold means that the geometry is on the 3-sphere (but is represented by 2-D longitude and latitude).

Extended help

',3)),i("div",X,[s[128]||(s[128]=i("p",{class:"custom-block-title"},"Note",-1)),i("p",null,[s[122]||(s[122]=a("The traditional definition of spherical coordinates in physics and mathematics, ")),i("mjx-container",$,[(p(),l("svg",Y,s[120]||(s[120]=[e('',1)]))),s[121]||(s[121]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mi",null,"r"),i("mo",null,","),i("mi",null,"θ"),i("mo",null,","),i("mi",null,"ϕ")])],-1))]),s[123]||(s[123]=a(", uses the ")),s[124]||(s[124]=i("em",null,"colatitude",-1)),s[125]||(s[125]=a(", that measures angular displacement from the ")),s[126]||(s[126]=i("code",null,"z",-1)),s[127]||(s[127]=a("-axis."))]),s[129]||(s[129]=i("p",null,[a("Here, we use the geographic definition of longitude and latitude, meaning that "),i("code",null,"lon"),a(" is longitude between -180 and 180, and "),i("code",null,"lat"),a(" is latitude between "),i("code",null,"-90"),a(" (south pole) and "),i("code",null,"90"),a(" (north pole).")],-1))]),s[131]||(s[131]=i("p",null,[i("a",{href:"https://github.com/JuliaGeo/GeometryOps.jl/blob/v0.1.12/GeometryOpsCore/src/types.jl#L49-L63",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",ss,[i("summary",null,[s[132]||(s[132]=i("a",{id:"GeometryOps.GeometryOpsCore.TraitTarget",href:"#GeometryOps.GeometryOpsCore.TraitTarget"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.TraitTarget")],-1)),s[133]||(s[133]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[134]||(s[134]=e(`
julia
TraitTarget{T}

This struct holds a trait parameter or a union of trait parameters.

It is primarily used for dispatch into methods which select trait levels, like apply, or as a parameter to target.

Constructors

julia
TraitTarget(GI.PointTrait())
 TraitTarget(GI.LineStringTrait(), GI.LinearRingTrait()) # and other traits as you may like
 TraitTarget(TraitTarget(...))
 # There are also type based constructors available, but that's not advised.
 TraitTarget(GI.PointTrait)
 TraitTarget(Union{GI.LineStringTrait, GI.LinearRingTrait})
-# etc.

source

`,6))]),i("details",is,[i("summary",null,[s[135]||(s[135]=i("a",{id:"GeometryOps.GeometryOpsCore._False",href:"#GeometryOps.GeometryOpsCore._False"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore._False")],-1)),s[136]||(s[136]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[137]||(s[137]=e('
julia
struct _False <: BoolsAsTypes

A struct that means false.

source

',3))]),i("details",as,[i("summary",null,[s[138]||(s[138]=i("a",{id:"GeometryOps.GeometryOpsCore._True",href:"#GeometryOps.GeometryOpsCore._True"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore._True")],-1)),s[139]||(s[139]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[140]||(s[140]=e('
julia
struct _True <: BoolsAsTypes

A struct that means true.

source

',3))]),i("details",es,[i("summary",null,[s[141]||(s[141]=i("a",{id:"GeometryOps.LineOrientation",href:"#GeometryOps.LineOrientation"},[i("span",{class:"jlbinding"},"GeometryOps.LineOrientation")],-1)),s[142]||(s[142]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[143]||(s[143]=e('
julia
Enum LineOrientation

Enum for the orientation of a line with respect to a curve. A line can be line_cross (crossing over the curve), line_hinge (crossing the endpoint of the curve), line_over (collinear with the curve), or line_out (not interacting with the curve).

source

',3))]),i("details",ts,[i("summary",null,[s[144]||(s[144]=i("a",{id:"GeometryOps.LinearSegments",href:"#GeometryOps.LinearSegments"},[i("span",{class:"jlbinding"},"GeometryOps.LinearSegments")],-1)),s[145]||(s[145]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[146]||(s[146]=e('
julia
LinearSegments(; max_distance::Real)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance.

Here, max_distance is a purely nondimensional quantity and will apply in the input space. This is to say, that if the polygon is provided in lat/lon coordinates then the max_distance will be in degrees of arc. If the polygon is provided in meters, then the max_distance will be in meters.

source

',4))]),i("details",ns,[i("summary",null,[s[147]||(s[147]=i("a",{id:"GeometryOps.MeanValue",href:"#GeometryOps.MeanValue"},[i("span",{class:"jlbinding"},"GeometryOps.MeanValue")],-1)),s[148]||(s[148]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[149]||(s[149]=e('
julia
MeanValue() <: AbstractBarycentricCoordinateMethod

This method calculates barycentric coordinates using the mean value method.

References

source

',4))]),i("details",ls,[i("summary",null,[s[150]||(s[150]=i("a",{id:"GeometryOps.MonotoneChainMethod",href:"#GeometryOps.MonotoneChainMethod"},[i("span",{class:"jlbinding"},"GeometryOps.MonotoneChainMethod")],-1)),s[151]||(s[151]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[152]||(s[152]=e('
julia
MonotoneChainMethod()

This is an algorithm for the convex_hull function.

Uses DelaunayTriangulation.jl to compute the convex hull. This is a pure Julia algorithm which provides an optimal Delaunay triangulation.

See also convex_hull

source

',5))]),i("details",ps,[i("summary",null,[s[153]||(s[153]=i("a",{id:"GeometryOps.PointOrientation",href:"#GeometryOps.PointOrientation"},[i("span",{class:"jlbinding"},"GeometryOps.PointOrientation")],-1)),s[154]||(s[154]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[155]||(s[155]=e('
julia
Enum PointOrientation

Enum for the orientation of a point with respect to a curve. A point can be point_in the curve, point_on the curve, or point_out of the curve.

source

',3))]),i("details",hs,[i("summary",null,[s[156]||(s[156]=i("a",{id:"GeometryOps.RadialDistance",href:"#GeometryOps.RadialDistance"},[i("span",{class:"jlbinding"},"GeometryOps.RadialDistance")],-1)),s[157]||(s[157]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[158]||(s[158]=e('
julia
RadialDistance <: SimplifyAlg

Simplifies geometries by removing points less than tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance between points.

Note: user input tol is squared to avoid unnecessary computation in algorithm.

source

',6))]),i("details",ks,[i("summary",null,[s[159]||(s[159]=i("a",{id:"GeometryOps.SimplifyAlg",href:"#GeometryOps.SimplifyAlg"},[i("span",{class:"jlbinding"},"GeometryOps.SimplifyAlg")],-1)),s[160]||(s[160]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[161]||(s[161]=e('
julia
abstract type SimplifyAlg

Abstract type for simplification algorithms.

API

For now, the algorithm must hold the number, ratio and tol properties.

Simplification algorithm types can hook into the interface by implementing the _simplify(trait, alg, geom) methods for whichever traits are necessary.

source

',6))]),i("details",rs,[i("summary",null,[s[162]||(s[162]=i("a",{id:"GeometryOps.UnionIntersectingPolygons",href:"#GeometryOps.UnionIntersectingPolygons"},[i("span",{class:"jlbinding"},"GeometryOps.UnionIntersectingPolygons")],-1)),s[163]||(s[163]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[164]||(s[164]=e('
julia
UnionIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygon's included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be combined through the union operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area.

See also GeometryCorrection.

source

',4))]),i("details",os,[i("summary",null,[s[165]||(s[165]=i("a",{id:"GeometryOps.VisvalingamWhyatt",href:"#GeometryOps.VisvalingamWhyatt"},[i("span",{class:"jlbinding"},"GeometryOps.VisvalingamWhyatt")],-1)),s[166]||(s[166]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[167]||(s[167]=e(`
julia
VisvalingamWhyatt <: SimplifyAlg
+# etc.

source

`,6))]),i("details",is,[i("summary",null,[s[135]||(s[135]=i("a",{id:"GeometryOps.GeometryOpsCore._False",href:"#GeometryOps.GeometryOpsCore._False"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore._False")],-1)),s[136]||(s[136]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[137]||(s[137]=e('
julia
struct _False <: BoolsAsTypes

A struct that means false.

source

',3))]),i("details",as,[i("summary",null,[s[138]||(s[138]=i("a",{id:"GeometryOps.GeometryOpsCore._True",href:"#GeometryOps.GeometryOpsCore._True"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore._True")],-1)),s[139]||(s[139]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[140]||(s[140]=e('
julia
struct _True <: BoolsAsTypes

A struct that means true.

source

',3))]),i("details",es,[i("summary",null,[s[141]||(s[141]=i("a",{id:"GeometryOps.LineOrientation",href:"#GeometryOps.LineOrientation"},[i("span",{class:"jlbinding"},"GeometryOps.LineOrientation")],-1)),s[142]||(s[142]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[143]||(s[143]=e('
julia
Enum LineOrientation

Enum for the orientation of a line with respect to a curve. A line can be line_cross (crossing over the curve), line_hinge (crossing the endpoint of the curve), line_over (collinear with the curve), or line_out (not interacting with the curve).

source

',3))]),i("details",ts,[i("summary",null,[s[144]||(s[144]=i("a",{id:"GeometryOps.LinearSegments",href:"#GeometryOps.LinearSegments"},[i("span",{class:"jlbinding"},"GeometryOps.LinearSegments")],-1)),s[145]||(s[145]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[146]||(s[146]=e('
julia
LinearSegments(; max_distance::Real)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance.

Here, max_distance is a purely nondimensional quantity and will apply in the input space. This is to say, that if the polygon is provided in lat/lon coordinates then the max_distance will be in degrees of arc. If the polygon is provided in meters, then the max_distance will be in meters.

source

',4))]),i("details",ns,[i("summary",null,[s[147]||(s[147]=i("a",{id:"GeometryOps.MeanValue",href:"#GeometryOps.MeanValue"},[i("span",{class:"jlbinding"},"GeometryOps.MeanValue")],-1)),s[148]||(s[148]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[149]||(s[149]=e('
julia
MeanValue() <: AbstractBarycentricCoordinateMethod

This method calculates barycentric coordinates using the mean value method.

References

source

',4))]),i("details",ls,[i("summary",null,[s[150]||(s[150]=i("a",{id:"GeometryOps.MonotoneChainMethod",href:"#GeometryOps.MonotoneChainMethod"},[i("span",{class:"jlbinding"},"GeometryOps.MonotoneChainMethod")],-1)),s[151]||(s[151]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[152]||(s[152]=e('
julia
MonotoneChainMethod()

This is an algorithm for the convex_hull function.

Uses DelaunayTriangulation.jl to compute the convex hull. This is a pure Julia algorithm which provides an optimal Delaunay triangulation.

See also convex_hull

source

',5))]),i("details",ps,[i("summary",null,[s[153]||(s[153]=i("a",{id:"GeometryOps.PointOrientation",href:"#GeometryOps.PointOrientation"},[i("span",{class:"jlbinding"},"GeometryOps.PointOrientation")],-1)),s[154]||(s[154]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[155]||(s[155]=e('
julia
Enum PointOrientation

Enum for the orientation of a point with respect to a curve. A point can be point_in the curve, point_on the curve, or point_out of the curve.

source

',3))]),i("details",hs,[i("summary",null,[s[156]||(s[156]=i("a",{id:"GeometryOps.RadialDistance",href:"#GeometryOps.RadialDistance"},[i("span",{class:"jlbinding"},"GeometryOps.RadialDistance")],-1)),s[157]||(s[157]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[158]||(s[158]=e('
julia
RadialDistance <: SimplifyAlg

Simplifies geometries by removing points less than tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance between points.

Note: user input tol is squared to avoid unnecessary computation in algorithm.

source

',6))]),i("details",ks,[i("summary",null,[s[159]||(s[159]=i("a",{id:"GeometryOps.SimplifyAlg",href:"#GeometryOps.SimplifyAlg"},[i("span",{class:"jlbinding"},"GeometryOps.SimplifyAlg")],-1)),s[160]||(s[160]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[161]||(s[161]=e('
julia
abstract type SimplifyAlg

Abstract type for simplification algorithms.

API

For now, the algorithm must hold the number, ratio and tol properties.

Simplification algorithm types can hook into the interface by implementing the _simplify(trait, alg, geom) methods for whichever traits are necessary.

source

',6))]),i("details",rs,[i("summary",null,[s[162]||(s[162]=i("a",{id:"GeometryOps.UnionIntersectingPolygons",href:"#GeometryOps.UnionIntersectingPolygons"},[i("span",{class:"jlbinding"},"GeometryOps.UnionIntersectingPolygons")],-1)),s[163]||(s[163]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[164]||(s[164]=e('
julia
UnionIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygon's included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be combined through the union operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area.

See also GeometryCorrection.

source

',4))]),i("details",os,[i("summary",null,[s[165]||(s[165]=i("a",{id:"GeometryOps.VisvalingamWhyatt",href:"#GeometryOps.VisvalingamWhyatt"},[i("span",{class:"jlbinding"},"GeometryOps.VisvalingamWhyatt")],-1)),s[166]||(s[166]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[167]||(s[167]=e(`
julia
VisvalingamWhyatt <: SimplifyAlg
 
-VisvalingamWhyatt(; kw...)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum area of a triangle made with a point and its neighboring points.

Note: user input tol is doubled to avoid unnecessary computation in algorithm.

source

`,6))]),i("details",ds,[i("summary",null,[s[168]||(s[168]=i("a",{id:"GeometryOps.GeometryOpsCore._booltype",href:"#GeometryOps.GeometryOpsCore._booltype"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore._booltype")],-1)),s[169]||(s[169]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[170]||(s[170]=e('
julia
_booltype(x)

Returns a BoolsAsTypes from x, whether it's a boolean or a BoolsAsTypes.

source

',3))]),i("details",gs,[i("summary",null,[s[171]||(s[171]=i("a",{id:"GeometryOps.GeometryOpsCore.apply-Union{Tuple{F}, Tuple{F, Any, Any}} where F",href:"#GeometryOps.GeometryOpsCore.apply-Union{Tuple{F}, Tuple{F, Any, Any}} where F"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.apply")],-1)),s[172]||(s[172]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[173]||(s[173]=e(`
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
+VisvalingamWhyatt(; kw...)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum area of a triangle made with a point and its neighboring points.

Note: user input tol is doubled to avoid unnecessary computation in algorithm.

source

`,6))]),i("details",ds,[i("summary",null,[s[168]||(s[168]=i("a",{id:"GeometryOps.GeometryOpsCore._booltype",href:"#GeometryOps.GeometryOpsCore._booltype"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore._booltype")],-1)),s[169]||(s[169]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[170]||(s[170]=e('
julia
_booltype(x)

Returns a BoolsAsTypes from x, whether it's a boolean or a BoolsAsTypes.

source

',3))]),i("details",gs,[i("summary",null,[s[171]||(s[171]=i("a",{id:"GeometryOps.GeometryOpsCore.apply-Union{Tuple{F}, Tuple{F, Any, Any}} where F",href:"#GeometryOps.GeometryOpsCore.apply-Union{Tuple{F}, Tuple{F, Any, Any}} where F"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.apply")],-1)),s[172]||(s[172]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[173]||(s[173]=e(`
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
 import GeometryOps as GO
 geom = GI.Polygon([GI.LinearRing([(1, 2), (3, 4), (5, 6), (1, 2)]),
                    GI.LinearRing([(3, 4), (5, 6), (6, 7), (3, 4)])])
@@ -301,14 +301,14 @@ import{_ as h,c as l,a5 as e,j as i,a,G as n,B as k,o as p}from"./chunks/framewo
 
 GO.contains(line, point)
 # output
-true

source

`,6))]),i("details",Ds,[i("summary",null,[s[222]||(s[222]=i("a",{id:"GeometryOps.convex_hull",href:"#GeometryOps.convex_hull"},[i("span",{class:"jlbinding"},"GeometryOps.convex_hull")],-1)),s[223]||(s[223]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[224]||(s[224]=e('
julia
convex_hull([method], geometries)

Compute the convex hull of the points in geometries. Returns a GI.Polygon representing the convex hull.

Note that the polygon returned is wound counterclockwise as in the Simple Features standard by default. If you choose GEOS, the winding order will be inverted.

Warning

This interface only computes the 2-dimensional convex hull!

For higher dimensional hulls, use the relevant package (Qhull.jl, Quickhull.jl, or similar).

source

',5))]),i("details",xs,[i("summary",null,[s[225]||(s[225]=i("a",{id:"GeometryOps.coverage-Union{Tuple{T}, NTuple{5, Any}, Tuple{Any, Any, Any, Any, Any, Type{T}}} where T<:AbstractFloat",href:"#GeometryOps.coverage-Union{Tuple{T}, NTuple{5, Any}, Tuple{Any, Any, Any, Any, Any, Type{T}}} where T<:AbstractFloat"},[i("span",{class:"jlbinding"},"GeometryOps.coverage")],-1)),s[226]||(s[226]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[227]||(s[227]=e('
julia
coverage(geom, xmin, xmax, ymin, ymax, [T = Float64])::T

Returns the area of intersection between given geometry and grid cell defined by its minimum and maximum x and y-values. This is computed differently for different geometries:

  • The signed area of a point is always zero.

  • The signed area of a curve is always zero.

  • The signed area of a polygon is calculated by tracing along its edges and switching to the cell edges if needed.

  • The coverage of a geometry collection, multi-geometry, feature collection of array/iterable is the sum of the coverages of all of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source

',5))]),i("details",Qs,[i("summary",null,[s[228]||(s[228]=i("a",{id:"GeometryOps.coveredby-Tuple{Any, Any}",href:"#GeometryOps.coveredby-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"GeometryOps.coveredby")],-1)),s[229]||(s[229]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[230]||(s[230]=e(`
julia
coveredby(g1, g2)::Bool

Return true if the first geometry is completely covered by the second geometry. The interior and boundary of the primary geometry (g1) must not intersect the exterior of the secondary geometry (g2).

Furthermore, coveredby returns the exact opposite result of covers. They are equivalent with the order of the arguments swapped.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+true

source

`,6))]),i("details",Ds,[i("summary",null,[s[222]||(s[222]=i("a",{id:"GeometryOps.convex_hull",href:"#GeometryOps.convex_hull"},[i("span",{class:"jlbinding"},"GeometryOps.convex_hull")],-1)),s[223]||(s[223]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[224]||(s[224]=e('
julia
convex_hull([method], geometries)

Compute the convex hull of the points in geometries. Returns a GI.Polygon representing the convex hull.

Note that the polygon returned is wound counterclockwise as in the Simple Features standard by default. If you choose GEOS, the winding order will be inverted.

Warning

This interface only computes the 2-dimensional convex hull!

For higher dimensional hulls, use the relevant package (Qhull.jl, Quickhull.jl, or similar).

source

',5))]),i("details",xs,[i("summary",null,[s[225]||(s[225]=i("a",{id:"GeometryOps.coverage-Union{Tuple{T}, NTuple{5, Any}, Tuple{Any, Any, Any, Any, Any, Type{T}}} where T<:AbstractFloat",href:"#GeometryOps.coverage-Union{Tuple{T}, NTuple{5, Any}, Tuple{Any, Any, Any, Any, Any, Type{T}}} where T<:AbstractFloat"},[i("span",{class:"jlbinding"},"GeometryOps.coverage")],-1)),s[226]||(s[226]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[227]||(s[227]=e('
julia
coverage(geom, xmin, xmax, ymin, ymax, [T = Float64])::T

Returns the area of intersection between given geometry and grid cell defined by its minimum and maximum x and y-values. This is computed differently for different geometries:

  • The signed area of a point is always zero.

  • The signed area of a curve is always zero.

  • The signed area of a polygon is calculated by tracing along its edges and switching to the cell edges if needed.

  • The coverage of a geometry collection, multi-geometry, feature collection of array/iterable is the sum of the coverages of all of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source

',5))]),i("details",ws,[i("summary",null,[s[228]||(s[228]=i("a",{id:"GeometryOps.coveredby-Tuple{Any, Any}",href:"#GeometryOps.coveredby-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"GeometryOps.coveredby")],-1)),s[229]||(s[229]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[230]||(s[230]=e(`
julia
coveredby(g1, g2)::Bool

Return true if the first geometry is completely covered by the second geometry. The interior and boundary of the primary geometry (g1) must not intersect the exterior of the secondary geometry (g2).

Furthermore, coveredby returns the exact opposite result of covers. They are equivalent with the order of the arguments swapped.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 p1 = GI.Point(0.0, 0.0)
 p2 = GI.Point(1.0, 1.0)
 l1 = GI.Line([p1, p2])
 
 GO.coveredby(p1, l1)
 # output
-true

source

`,6))]),i("details",ws,[i("summary",null,[s[231]||(s[231]=i("a",{id:"GeometryOps.covers-Tuple{Any, Any}",href:"#GeometryOps.covers-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"GeometryOps.covers")],-1)),s[232]||(s[232]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[233]||(s[233]=e(`
julia
covers(g1::AbstractGeometry, g2::AbstractGeometry)::Bool

Return true if the first geometry is completely covers the second geometry, The exterior and boundary of the second geometry must not be outside of the interior and boundary of the first geometry. However, the interiors need not intersect.

covers returns the exact opposite result of coveredby.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+true

source

`,6))]),i("details",Qs,[i("summary",null,[s[231]||(s[231]=i("a",{id:"GeometryOps.covers-Tuple{Any, Any}",href:"#GeometryOps.covers-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"GeometryOps.covers")],-1)),s[232]||(s[232]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[233]||(s[233]=e(`
julia
covers(g1::AbstractGeometry, g2::AbstractGeometry)::Bool

Return true if the first geometry is completely covers the second geometry, The exterior and boundary of the second geometry must not be outside of the interior and boundary of the first geometry. However, the interiors need not intersect.

covers returns the exact opposite result of coveredby.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 l1 = GI.LineString([(1.0, 1.0), (1.0, 2.0), (1.0, 3.0), (1.0, 4.0)])
 l2 = GI.LineString([(1.0, 1.0), (1.0, 2.0)])
 
@@ -520,11 +520,11 @@ import{_ as h,c as l,a5 as e,j as i,a,G as n,B as k,o as p}from"./chunks/framewo
 
 # output
 1-element Vector{Vector{Vector{Vector{Float64}}}}:
- [[[6.5, 3.5], [5.0, 5.0], [0.0, 0.0], [5.0, -5.0], [6.5, -3.5], [8.0, -5.0], [13.0, 0.0], [8.0, 5.0], [6.5, 3.5]]]

source

`,6))]),i("details",xi,[i("summary",null,[s[381]||(s[381]=i("a",{id:"GeometryOps.weighted_mean-Union{Tuple{WT}, Tuple{WT, Any, Any}} where WT<:Real",href:"#GeometryOps.weighted_mean-Union{Tuple{WT}, Tuple{WT, Any, Any}} where WT<:Real"},[i("span",{class:"jlbinding"},"GeometryOps.weighted_mean")],-1)),s[382]||(s[382]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[383]||(s[383]=e('
julia
weighted_mean(weight::Real, x1, x2)

Returns the weighted mean of x1 and x2, where weight is the weight of x1.

Specifically, calculates x1 * weight + x2 * (1 - weight).

Note

The idea for this method is that you can override this for custom types, like Color types, in extension modules.

source

',5))]),i("details",Qi,[i("summary",null,[s[384]||(s[384]=i("a",{id:"GeometryOps.within-Tuple{Any, Any}",href:"#GeometryOps.within-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"GeometryOps.within")],-1)),s[385]||(s[385]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[386]||(s[386]=e(`
julia
within(geom1, geom2)::Bool

Return true if the first geometry is completely within the second geometry. The interiors of both geometries must intersect and the interior and boundary of the primary geometry (geom1) must not intersect the exterior of the secondary geometry (geom2).

Furthermore, within returns the exact opposite result of contains.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+ [[[6.5, 3.5], [5.0, 5.0], [0.0, 0.0], [5.0, -5.0], [6.5, -3.5], [8.0, -5.0], [13.0, 0.0], [8.0, 5.0], [6.5, 3.5]]]

source

`,6))]),i("details",xi,[i("summary",null,[s[381]||(s[381]=i("a",{id:"GeometryOps.weighted_mean-Union{Tuple{WT}, Tuple{WT, Any, Any}} where WT<:Real",href:"#GeometryOps.weighted_mean-Union{Tuple{WT}, Tuple{WT, Any, Any}} where WT<:Real"},[i("span",{class:"jlbinding"},"GeometryOps.weighted_mean")],-1)),s[382]||(s[382]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[383]||(s[383]=e('
julia
weighted_mean(weight::Real, x1, x2)

Returns the weighted mean of x1 and x2, where weight is the weight of x1.

Specifically, calculates x1 * weight + x2 * (1 - weight).

Note

The idea for this method is that you can override this for custom types, like Color types, in extension modules.

source

',5))]),i("details",wi,[i("summary",null,[s[384]||(s[384]=i("a",{id:"GeometryOps.within-Tuple{Any, Any}",href:"#GeometryOps.within-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"GeometryOps.within")],-1)),s[385]||(s[385]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[386]||(s[386]=e(`
julia
within(geom1, geom2)::Bool

Return true if the first geometry is completely within the second geometry. The interiors of both geometries must intersect and the interior and boundary of the primary geometry (geom1) must not intersect the exterior of the secondary geometry (geom2).

Furthermore, within returns the exact opposite result of contains.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 
 line = GI.LineString([(1, 1), (1, 2), (1, 3), (1, 4)])
 point = (1, 2)
 GO.within(point, line)
 
 # output
-true

source

`,6))]),s[393]||(s[393]=e('
  1. K. Hormann and N. Sukumar. Generalized Barycentric Coordinates in Computer Graphics and Computational Mechanics. Taylor & Fancis, CRC Press, 2017. ↩︎

',2))])}const Vi=h(r,[["render",wi]]);export{Si as __pageData,Vi as default}; +true

source

`,6))]),s[393]||(s[393]=e('
  1. K. Hormann and N. Sukumar. Generalized Barycentric Coordinates in Computer Graphics and Computational Mechanics. Taylor & Fancis, CRC Press, 2017. ↩︎

',2))])}const Vi=h(r,[["render",Qi]]);export{Si as __pageData,Vi as default}; diff --git a/dev/assets/api.md.Bk3hzA-P.lean.js b/dev/assets/api.md.rwOlNC64.lean.js similarity index 98% rename from dev/assets/api.md.Bk3hzA-P.lean.js rename to dev/assets/api.md.rwOlNC64.lean.js index d8dda28c3..16c910c01 100644 --- a/dev/assets/api.md.Bk3hzA-P.lean.js +++ b/dev/assets/api.md.rwOlNC64.lean.js @@ -1,4 +1,4 @@ -import{_ as h,c as l,a5 as e,j as i,a,G as n,B as k,o as p}from"./chunks/framework.O43fB7X6.js";const Si=JSON.parse('{"title":"Full GeometryOps API documentation","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),r={name:"api.md"},o={class:"jldocstring custom-block",open:""},d={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},E={class:"jldocstring custom-block",open:""},c={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""},m={class:"jldocstring custom-block",open:""},F={class:"jldocstring custom-block",open:""},C={class:"jldocstring custom-block",open:""},b={class:"jldocstring custom-block",open:""},f={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},G={class:"jldocstring custom-block",open:""},A={class:"jldocstring custom-block",open:""},j={class:"jldocstring custom-block",open:""},B={class:"jldocstring custom-block",open:""},O={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},w={class:"jldocstring custom-block",open:""},L={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},M={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},R={class:"jldocstring custom-block",open:""},S={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},H={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},N={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.023ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.197ex",height:"1.02ex",role:"img",focusable:"false",viewBox:"0 -441 529 451","aria-hidden":"true"},W={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},_={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"3.507ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 1550 1000","aria-hidden":"true"},z={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},K={class:"jldocstring custom-block",open:""},X={class:"tip custom-block"},$={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.464ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.442ex",height:"2.059ex",role:"img",focusable:"false",viewBox:"0 -705 2405.3 910","aria-hidden":"true"},ss={class:"jldocstring custom-block",open:""},is={class:"jldocstring custom-block",open:""},as={class:"jldocstring custom-block",open:""},es={class:"jldocstring custom-block",open:""},ts={class:"jldocstring custom-block",open:""},ns={class:"jldocstring custom-block",open:""},ls={class:"jldocstring custom-block",open:""},ps={class:"jldocstring custom-block",open:""},hs={class:"jldocstring custom-block",open:""},ks={class:"jldocstring custom-block",open:""},rs={class:"jldocstring custom-block",open:""},os={class:"jldocstring custom-block",open:""},ds={class:"jldocstring custom-block",open:""},gs={class:"jldocstring custom-block",open:""},ys={class:"jldocstring custom-block",open:""},Es={class:"jldocstring custom-block",open:""},cs={class:"jldocstring custom-block",open:""},us={class:"jldocstring custom-block",open:""},ms={class:"jldocstring custom-block",open:""},Fs={class:"jldocstring custom-block",open:""},Cs={class:"jldocstring custom-block",open:""},bs={class:"jldocstring custom-block",open:""},fs={class:"jldocstring custom-block",open:""},Ts={class:"jldocstring custom-block",open:""},vs={class:"jldocstring custom-block",open:""},Gs={class:"jldocstring custom-block",open:""},As={class:"jldocstring custom-block",open:""},js={class:"jldocstring custom-block",open:""},Bs={class:"jldocstring custom-block",open:""},Os={class:"jldocstring custom-block",open:""},Ds={class:"jldocstring custom-block",open:""},xs={class:"jldocstring custom-block",open:""},Qs={class:"jldocstring custom-block",open:""},ws={class:"jldocstring custom-block",open:""},Ls={class:"jldocstring custom-block",open:""},Is={class:"jldocstring custom-block",open:""},Ms={class:"jldocstring custom-block",open:""},Ps={class:"jldocstring custom-block",open:""},qs={class:"jldocstring custom-block",open:""},Rs={class:"jldocstring custom-block",open:""},Ss={class:"jldocstring custom-block",open:""},Vs={class:"jldocstring custom-block",open:""},Js={class:"jldocstring custom-block",open:""},Us={class:"jldocstring custom-block",open:""},Hs={class:"jldocstring custom-block",open:""},Ns={class:"jldocstring custom-block",open:""},Ws={class:"jldocstring custom-block",open:""},_s={class:"jldocstring custom-block",open:""},zs={class:"jldocstring custom-block",open:""},Zs={class:"jldocstring custom-block",open:""},Ks={class:"jldocstring custom-block",open:""},Xs={class:"jldocstring custom-block",open:""},$s={class:"jldocstring custom-block",open:""},Ys={class:"jldocstring custom-block",open:""},si={class:"jldocstring custom-block",open:""},ii={class:"jldocstring custom-block",open:""},ai={class:"jldocstring custom-block",open:""},ei={class:"jldocstring custom-block",open:""},ti={class:"jldocstring custom-block",open:""},ni={class:"jldocstring custom-block",open:""},li={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},pi={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.827ex"},xmlns:"http://www.w3.org/2000/svg",width:"33.539ex",height:"6.785ex",role:"img",focusable:"false",viewBox:"0 -1749.5 14824.1 2999","aria-hidden":"true"},hi={class:"jldocstring custom-block",open:""},ki={class:"jldocstring custom-block",open:""},ri={class:"jldocstring custom-block",open:""},oi={class:"jldocstring custom-block",open:""},di={class:"jldocstring custom-block",open:""},gi={class:"jldocstring custom-block",open:""},yi={class:"jldocstring custom-block",open:""},Ei={class:"jldocstring custom-block",open:""},ci={class:"jldocstring custom-block",open:""},ui={class:"jldocstring custom-block",open:""},mi={class:"jldocstring custom-block",open:""},Fi={class:"jldocstring custom-block",open:""},Ci={class:"jldocstring custom-block",open:""},bi={class:"jldocstring custom-block",open:""},fi={class:"jldocstring custom-block",open:""},Ti={class:"jldocstring custom-block",open:""},vi={class:"jldocstring custom-block",open:""},Gi={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},Ai={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.059ex"},xmlns:"http://www.w3.org/2000/svg",width:"27.746ex",height:"5.362ex",role:"img",focusable:"false",viewBox:"0 -1460 12263.9 2370","aria-hidden":"true"},ji={class:"jldocstring custom-block",open:""},Bi={class:"jldocstring custom-block",open:""},Oi={class:"jldocstring custom-block",open:""},Di={class:"jldocstring custom-block",open:""},xi={class:"jldocstring custom-block",open:""},Qi={class:"jldocstring custom-block",open:""};function wi(Li,s,Ii,Mi,Pi,qi){const t=k("Badge");return p(),l("div",null,[s[387]||(s[387]=e('

Full GeometryOps API documentation

Warning

This page is still very much WIP!

Documentation for GeometryOps's full API (only for reference!).

apply and associated functions

',5)),i("details",o,[i("summary",null,[s[0]||(s[0]=i("a",{id:"GeometryOps.GeometryOpsCore.apply",href:"#GeometryOps.GeometryOpsCore.apply"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.apply")],-1)),s[1]||(s[1]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=e(`
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
+import{_ as h,c as l,a5 as e,j as i,a,G as n,B as k,o as p}from"./chunks/framework.B_n_RGhH.js";const Si=JSON.parse('{"title":"Full GeometryOps API documentation","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),r={name:"api.md"},o={class:"jldocstring custom-block",open:""},d={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},E={class:"jldocstring custom-block",open:""},c={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""},m={class:"jldocstring custom-block",open:""},F={class:"jldocstring custom-block",open:""},C={class:"jldocstring custom-block",open:""},b={class:"jldocstring custom-block",open:""},f={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},G={class:"jldocstring custom-block",open:""},A={class:"jldocstring custom-block",open:""},j={class:"jldocstring custom-block",open:""},B={class:"jldocstring custom-block",open:""},O={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},w={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},L={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},M={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},R={class:"jldocstring custom-block",open:""},S={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},H={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},N={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.023ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.197ex",height:"1.02ex",role:"img",focusable:"false",viewBox:"0 -441 529 451","aria-hidden":"true"},W={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},_={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"3.507ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 1550 1000","aria-hidden":"true"},z={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},K={class:"jldocstring custom-block",open:""},X={class:"tip custom-block"},$={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.464ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.442ex",height:"2.059ex",role:"img",focusable:"false",viewBox:"0 -705 2405.3 910","aria-hidden":"true"},ss={class:"jldocstring custom-block",open:""},is={class:"jldocstring custom-block",open:""},as={class:"jldocstring custom-block",open:""},es={class:"jldocstring custom-block",open:""},ts={class:"jldocstring custom-block",open:""},ns={class:"jldocstring custom-block",open:""},ls={class:"jldocstring custom-block",open:""},ps={class:"jldocstring custom-block",open:""},hs={class:"jldocstring custom-block",open:""},ks={class:"jldocstring custom-block",open:""},rs={class:"jldocstring custom-block",open:""},os={class:"jldocstring custom-block",open:""},ds={class:"jldocstring custom-block",open:""},gs={class:"jldocstring custom-block",open:""},ys={class:"jldocstring custom-block",open:""},Es={class:"jldocstring custom-block",open:""},cs={class:"jldocstring custom-block",open:""},us={class:"jldocstring custom-block",open:""},ms={class:"jldocstring custom-block",open:""},Fs={class:"jldocstring custom-block",open:""},Cs={class:"jldocstring custom-block",open:""},bs={class:"jldocstring custom-block",open:""},fs={class:"jldocstring custom-block",open:""},Ts={class:"jldocstring custom-block",open:""},vs={class:"jldocstring custom-block",open:""},Gs={class:"jldocstring custom-block",open:""},As={class:"jldocstring custom-block",open:""},js={class:"jldocstring custom-block",open:""},Bs={class:"jldocstring custom-block",open:""},Os={class:"jldocstring custom-block",open:""},Ds={class:"jldocstring custom-block",open:""},xs={class:"jldocstring custom-block",open:""},ws={class:"jldocstring custom-block",open:""},Qs={class:"jldocstring custom-block",open:""},Ls={class:"jldocstring custom-block",open:""},Is={class:"jldocstring custom-block",open:""},Ms={class:"jldocstring custom-block",open:""},Ps={class:"jldocstring custom-block",open:""},qs={class:"jldocstring custom-block",open:""},Rs={class:"jldocstring custom-block",open:""},Ss={class:"jldocstring custom-block",open:""},Vs={class:"jldocstring custom-block",open:""},Js={class:"jldocstring custom-block",open:""},Us={class:"jldocstring custom-block",open:""},Hs={class:"jldocstring custom-block",open:""},Ns={class:"jldocstring custom-block",open:""},Ws={class:"jldocstring custom-block",open:""},_s={class:"jldocstring custom-block",open:""},zs={class:"jldocstring custom-block",open:""},Zs={class:"jldocstring custom-block",open:""},Ks={class:"jldocstring custom-block",open:""},Xs={class:"jldocstring custom-block",open:""},$s={class:"jldocstring custom-block",open:""},Ys={class:"jldocstring custom-block",open:""},si={class:"jldocstring custom-block",open:""},ii={class:"jldocstring custom-block",open:""},ai={class:"jldocstring custom-block",open:""},ei={class:"jldocstring custom-block",open:""},ti={class:"jldocstring custom-block",open:""},ni={class:"jldocstring custom-block",open:""},li={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},pi={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.827ex"},xmlns:"http://www.w3.org/2000/svg",width:"33.539ex",height:"6.785ex",role:"img",focusable:"false",viewBox:"0 -1749.5 14824.1 2999","aria-hidden":"true"},hi={class:"jldocstring custom-block",open:""},ki={class:"jldocstring custom-block",open:""},ri={class:"jldocstring custom-block",open:""},oi={class:"jldocstring custom-block",open:""},di={class:"jldocstring custom-block",open:""},gi={class:"jldocstring custom-block",open:""},yi={class:"jldocstring custom-block",open:""},Ei={class:"jldocstring custom-block",open:""},ci={class:"jldocstring custom-block",open:""},ui={class:"jldocstring custom-block",open:""},mi={class:"jldocstring custom-block",open:""},Fi={class:"jldocstring custom-block",open:""},Ci={class:"jldocstring custom-block",open:""},bi={class:"jldocstring custom-block",open:""},fi={class:"jldocstring custom-block",open:""},Ti={class:"jldocstring custom-block",open:""},vi={class:"jldocstring custom-block",open:""},Gi={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},Ai={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.059ex"},xmlns:"http://www.w3.org/2000/svg",width:"27.746ex",height:"5.362ex",role:"img",focusable:"false",viewBox:"0 -1460 12263.9 2370","aria-hidden":"true"},ji={class:"jldocstring custom-block",open:""},Bi={class:"jldocstring custom-block",open:""},Oi={class:"jldocstring custom-block",open:""},Di={class:"jldocstring custom-block",open:""},xi={class:"jldocstring custom-block",open:""},wi={class:"jldocstring custom-block",open:""};function Qi(Li,s,Ii,Mi,Pi,qi){const t=k("Badge");return p(),l("div",null,[s[387]||(s[387]=e('

Full GeometryOps API documentation

Warning

This page is still very much WIP!

Documentation for GeometryOps's full API (only for reference!).

apply and associated functions

',5)),i("details",o,[i("summary",null,[s[0]||(s[0]=i("a",{id:"GeometryOps.GeometryOpsCore.apply",href:"#GeometryOps.GeometryOpsCore.apply"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.apply")],-1)),s[1]||(s[1]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=e(`
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
 import GeometryOps as GO
 geom = GI.Polygon([GI.LinearRing([(1, 2), (3, 4), (5, 6), (1, 2)]),
                    GI.LinearRing([(3, 4), (5, 6), (6, 7), (3, 4)])])
@@ -266,17 +266,17 @@ import{_ as h,c as l,a5 as e,j as i,a,G as n,B as k,o as p}from"./chunks/framewo
 - The angles of a linestring or linearring is a vector of angles formed by the curve.
 - The angles of a polygon is a vector of vectors of angles formed by each ring.
 - The angles of a multi-geometry collection is a vector of the angles of each of the
-    sub-geometries as defined above.

Result will be a Vector, or nested set of vectors, of type T where an optional argument with a default value of Float64.

source

`,10))]),i("details",x,[i("summary",null,[s[60]||(s[60]=i("a",{id:"GeometryOps.embed_extent",href:"#GeometryOps.embed_extent"},[i("span",{class:"jlbinding"},"GeometryOps.embed_extent")],-1)),s[61]||(s[61]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[62]||(s[62]=e('
julia
embed_extent(obj)

Recursively wrap the object with a GeoInterface.jl geometry, calculating and adding an Extents.Extent to all objects.

This can improve performance when extents need to be checked multiple times, such when needing to check if many points are in geometries, and using their extents as a quick filter for obviously exterior points.

Keywords

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

source

julia
embed_extent(obj)

Recursively wrap the object with a GeoInterface.jl geometry, calculating and adding an Extents.Extent to all objects.

This can improve performance when extents need to be checked multiple times, such when needing to check if many points are in geometries, and using their extents as a quick filter for obviously exterior points.

Keywords

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

source

',12))]),s[391]||(s[391]=i("h2",{id:"Barycentric-coordinates",tabindex:"-1"},[a("Barycentric coordinates "),i("a",{class:"header-anchor",href:"#Barycentric-coordinates","aria-label":'Permalink to "Barycentric coordinates {#Barycentric-coordinates}"'},"​")],-1)),i("details",Q,[i("summary",null,[s[63]||(s[63]=i("a",{id:"GeometryOps.barycentric_coordinates",href:"#GeometryOps.barycentric_coordinates"},[i("span",{class:"jlbinding"},"GeometryOps.barycentric_coordinates")],-1)),s[64]||(s[64]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[65]||(s[65]=e('
julia
barycentric_coordinates(method = MeanValue(), polygon, point)

Returns the barycentric coordinates of point in polygon using the barycentric coordinate method method.

source

julia
barycentric_coordinates(method = MeanValue(), polygon, point)

Returns the barycentric coordinates of point in polygon using the barycentric coordinate method method.

source

',6))]),i("details",w,[i("summary",null,[s[66]||(s[66]=i("a",{id:"GeometryOps.barycentric_coordinates!",href:"#GeometryOps.barycentric_coordinates!"},[i("span",{class:"jlbinding"},"GeometryOps.barycentric_coordinates!")],-1)),s[67]||(s[67]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[68]||(s[68]=e('
julia
barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, polygon, point)

Loads the barycentric coordinates of point in polygon into λs using the barycentric coordinate method method.

λs must be of the length of the polygon plus its holes.

Tip

Use this method to avoid excess allocations when you need to calculate barycentric coordinates for many points.

source

julia
barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, polygon, point)

Loads the barycentric coordinates of point in polygon into λs using the barycentric coordinate method method.

λs must be of the length of the polygon plus its holes.

Tip

Use this method to avoid excess allocations when you need to calculate barycentric coordinates for many points.

source

',10))]),i("details",L,[i("summary",null,[s[69]||(s[69]=i("a",{id:"GeometryOps.barycentric_interpolate",href:"#GeometryOps.barycentric_interpolate"},[i("span",{class:"jlbinding"},"GeometryOps.barycentric_interpolate")],-1)),s[70]||(s[70]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[71]||(s[71]=e('
julia
barycentric_interpolate(method = MeanValue(), polygon, values::AbstractVector{V}, point)

Returns the interpolated value at point within polygon using the barycentric coordinate method method. values are the per-point values for the polygon which are to be interpolated.

Returns an object of type V.

Warning

Barycentric interpolation is currently defined only for 2-dimensional polygons. If you pass a 3-D polygon in, the Z coordinate will be used as per-vertex value to be interpolated (the M coordinate in GIS parlance).

source

julia
barycentric_interpolate(method = MeanValue(), polygon, values::AbstractVector{V}, point)

Returns the interpolated value at point within polygon using the barycentric coordinate method method. values are the per-point values for the polygon which are to be interpolated.

Returns an object of type V.

Warning

Barycentric interpolation is currently defined only for 2-dimensional polygons. If you pass a 3-D polygon in, the Z coordinate will be used as per-vertex value to be interpolated (the M coordinate in GIS parlance).

source

',10))]),s[392]||(s[392]=i("h2",{id:"Other-methods",tabindex:"-1"},[a("Other methods "),i("a",{class:"header-anchor",href:"#Other-methods","aria-label":'Permalink to "Other methods {#Other-methods}"'},"​")],-1)),i("details",I,[i("summary",null,[s[72]||(s[72]=i("a",{id:"GeometryOps.AbstractBarycentricCoordinateMethod",href:"#GeometryOps.AbstractBarycentricCoordinateMethod"},[i("span",{class:"jlbinding"},"GeometryOps.AbstractBarycentricCoordinateMethod")],-1)),s[73]||(s[73]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[74]||(s[74]=e('
julia
abstract type AbstractBarycentricCoordinateMethod

Abstract supertype for barycentric coordinate methods. The subtypes may serve as dispatch types, or may cache some information about the target polygon.

API

The following methods must be implemented for all subtypes:

  • barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, point::Point{2, T2})

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, values::Vector{V}, point::Point{2, T2})::V

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, interiors::Vector{<: Vector{<: Point{2, T1}}} values::Vector{V}, point::Point{2, T2})::V

The rest of the methods will be implemented in terms of these, and have efficient dispatches for broadcasting.

source

',7))]),i("details",M,[i("summary",null,[s[75]||(s[75]=i("a",{id:"GeometryOps.ClosedRing",href:"#GeometryOps.ClosedRing"},[i("span",{class:"jlbinding"},"GeometryOps.ClosedRing")],-1)),s[76]||(s[76]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[77]||(s[77]=e('
julia
ClosedRing() <: GeometryCorrection

This correction ensures that a polygon's exterior and interior rings are closed.

It can be called on any geometry correction as usual.

See also GeometryCorrection.

source

',5))]),i("details",P,[i("summary",null,[s[78]||(s[78]=i("a",{id:"GeometryOps.DiffIntersectingPolygons",href:"#GeometryOps.DiffIntersectingPolygons"},[i("span",{class:"jlbinding"},"GeometryOps.DiffIntersectingPolygons")],-1)),s[79]||(s[79]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[80]||(s[80]=e('
julia
DiffIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygons included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be made nonintersecting through the difference operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area. See also GeometryCorrection, UnionIntersectingPolygons.

source

',3))]),i("details",q,[i("summary",null,[s[81]||(s[81]=i("a",{id:"GeometryOps.DouglasPeucker",href:"#GeometryOps.DouglasPeucker"},[i("span",{class:"jlbinding"},"GeometryOps.DouglasPeucker")],-1)),s[82]||(s[82]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[83]||(s[83]=e(`
julia
DouglasPeucker <: SimplifyAlg
+    sub-geometries as defined above.

Result will be a Vector, or nested set of vectors, of type T where an optional argument with a default value of Float64.

source

`,10))]),i("details",x,[i("summary",null,[s[60]||(s[60]=i("a",{id:"GeometryOps.embed_extent",href:"#GeometryOps.embed_extent"},[i("span",{class:"jlbinding"},"GeometryOps.embed_extent")],-1)),s[61]||(s[61]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[62]||(s[62]=e('
julia
embed_extent(obj)

Recursively wrap the object with a GeoInterface.jl geometry, calculating and adding an Extents.Extent to all objects.

This can improve performance when extents need to be checked multiple times, such when needing to check if many points are in geometries, and using their extents as a quick filter for obviously exterior points.

Keywords

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

source

julia
embed_extent(obj)

Recursively wrap the object with a GeoInterface.jl geometry, calculating and adding an Extents.Extent to all objects.

This can improve performance when extents need to be checked multiple times, such when needing to check if many points are in geometries, and using their extents as a quick filter for obviously exterior points.

Keywords

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

source

',12))]),s[391]||(s[391]=i("h2",{id:"Barycentric-coordinates",tabindex:"-1"},[a("Barycentric coordinates "),i("a",{class:"header-anchor",href:"#Barycentric-coordinates","aria-label":'Permalink to "Barycentric coordinates {#Barycentric-coordinates}"'},"​")],-1)),i("details",w,[i("summary",null,[s[63]||(s[63]=i("a",{id:"GeometryOps.barycentric_coordinates",href:"#GeometryOps.barycentric_coordinates"},[i("span",{class:"jlbinding"},"GeometryOps.barycentric_coordinates")],-1)),s[64]||(s[64]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[65]||(s[65]=e('
julia
barycentric_coordinates(method = MeanValue(), polygon, point)

Returns the barycentric coordinates of point in polygon using the barycentric coordinate method method.

source

julia
barycentric_coordinates(method = MeanValue(), polygon, point)

Returns the barycentric coordinates of point in polygon using the barycentric coordinate method method.

source

',6))]),i("details",Q,[i("summary",null,[s[66]||(s[66]=i("a",{id:"GeometryOps.barycentric_coordinates!",href:"#GeometryOps.barycentric_coordinates!"},[i("span",{class:"jlbinding"},"GeometryOps.barycentric_coordinates!")],-1)),s[67]||(s[67]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[68]||(s[68]=e('
julia
barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, polygon, point)

Loads the barycentric coordinates of point in polygon into λs using the barycentric coordinate method method.

λs must be of the length of the polygon plus its holes.

Tip

Use this method to avoid excess allocations when you need to calculate barycentric coordinates for many points.

source

julia
barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, polygon, point)

Loads the barycentric coordinates of point in polygon into λs using the barycentric coordinate method method.

λs must be of the length of the polygon plus its holes.

Tip

Use this method to avoid excess allocations when you need to calculate barycentric coordinates for many points.

source

',10))]),i("details",L,[i("summary",null,[s[69]||(s[69]=i("a",{id:"GeometryOps.barycentric_interpolate",href:"#GeometryOps.barycentric_interpolate"},[i("span",{class:"jlbinding"},"GeometryOps.barycentric_interpolate")],-1)),s[70]||(s[70]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[71]||(s[71]=e('
julia
barycentric_interpolate(method = MeanValue(), polygon, values::AbstractVector{V}, point)

Returns the interpolated value at point within polygon using the barycentric coordinate method method. values are the per-point values for the polygon which are to be interpolated.

Returns an object of type V.

Warning

Barycentric interpolation is currently defined only for 2-dimensional polygons. If you pass a 3-D polygon in, the Z coordinate will be used as per-vertex value to be interpolated (the M coordinate in GIS parlance).

source

julia
barycentric_interpolate(method = MeanValue(), polygon, values::AbstractVector{V}, point)

Returns the interpolated value at point within polygon using the barycentric coordinate method method. values are the per-point values for the polygon which are to be interpolated.

Returns an object of type V.

Warning

Barycentric interpolation is currently defined only for 2-dimensional polygons. If you pass a 3-D polygon in, the Z coordinate will be used as per-vertex value to be interpolated (the M coordinate in GIS parlance).

source

',10))]),s[392]||(s[392]=i("h2",{id:"Other-methods",tabindex:"-1"},[a("Other methods "),i("a",{class:"header-anchor",href:"#Other-methods","aria-label":'Permalink to "Other methods {#Other-methods}"'},"​")],-1)),i("details",I,[i("summary",null,[s[72]||(s[72]=i("a",{id:"GeometryOps.AbstractBarycentricCoordinateMethod",href:"#GeometryOps.AbstractBarycentricCoordinateMethod"},[i("span",{class:"jlbinding"},"GeometryOps.AbstractBarycentricCoordinateMethod")],-1)),s[73]||(s[73]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[74]||(s[74]=e('
julia
abstract type AbstractBarycentricCoordinateMethod

Abstract supertype for barycentric coordinate methods. The subtypes may serve as dispatch types, or may cache some information about the target polygon.

API

The following methods must be implemented for all subtypes:

  • barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, point::Point{2, T2})

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, values::Vector{V}, point::Point{2, T2})::V

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, interiors::Vector{<: Vector{<: Point{2, T1}}} values::Vector{V}, point::Point{2, T2})::V

The rest of the methods will be implemented in terms of these, and have efficient dispatches for broadcasting.

source

',7))]),i("details",M,[i("summary",null,[s[75]||(s[75]=i("a",{id:"GeometryOps.ClosedRing",href:"#GeometryOps.ClosedRing"},[i("span",{class:"jlbinding"},"GeometryOps.ClosedRing")],-1)),s[76]||(s[76]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[77]||(s[77]=e('
julia
ClosedRing() <: GeometryCorrection

This correction ensures that a polygon's exterior and interior rings are closed.

It can be called on any geometry correction as usual.

See also GeometryCorrection.

source

',5))]),i("details",P,[i("summary",null,[s[78]||(s[78]=i("a",{id:"GeometryOps.DiffIntersectingPolygons",href:"#GeometryOps.DiffIntersectingPolygons"},[i("span",{class:"jlbinding"},"GeometryOps.DiffIntersectingPolygons")],-1)),s[79]||(s[79]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[80]||(s[80]=e('
julia
DiffIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygons included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be made nonintersecting through the difference operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area. See also GeometryCorrection, UnionIntersectingPolygons.

source

',3))]),i("details",q,[i("summary",null,[s[81]||(s[81]=i("a",{id:"GeometryOps.DouglasPeucker",href:"#GeometryOps.DouglasPeucker"},[i("span",{class:"jlbinding"},"GeometryOps.DouglasPeucker")],-1)),s[82]||(s[82]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[83]||(s[83]=e(`
julia
DouglasPeucker <: SimplifyAlg
 
-DouglasPeucker(; number, ratio, tol)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance a point will be from the line joining its neighboring points.

Note: user input tol is squared to avoid unnecessary computation in algorithm.

source

`,6))]),i("details",R,[i("summary",null,[s[84]||(s[84]=i("a",{id:"GeometryOps.GEOS",href:"#GeometryOps.GEOS"},[i("span",{class:"jlbinding"},"GeometryOps.GEOS")],-1)),s[85]||(s[85]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[86]||(s[86]=e('
julia
GEOS(; params...)

A struct which instructs the method it's passed to as an algorithm to use the appropriate GEOS function via LibGEOS.jl for the operation.

Dispatch is generally carried out using the names of the keyword arguments. For example, segmentize will only accept a GEOS struct with only a max_distance keyword, and no other.

It's generally a lot slower than the native Julia implementations, since it must convert to the LibGEOS implementation and back - so be warned!

source

',5))]),i("details",S,[i("summary",null,[s[87]||(s[87]=i("a",{id:"GeometryOps.GeodesicSegments",href:"#GeometryOps.GeodesicSegments"},[i("span",{class:"jlbinding"},"GeometryOps.GeodesicSegments")],-1)),s[88]||(s[88]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[89]||(s[89]=e('
julia
GeodesicSegments(; max_distance::Real, equatorial_radius::Real=6378137, flattening::Real=1/298.257223563)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance. This method calculates the distance between points on the geodesic, and assumes input in lat/long coordinates.

Warning

Any input geometries must be in lon/lat coordinates! If not, the method may fail or error.

Arguments

  • max_distance::Real: The maximum distance, in meters, between vertices in the geometry.

  • equatorial_radius::Real=6378137: The equatorial radius of the Earth, in meters. Passed to Proj.geod_geodesic.

  • flattening::Real=1/298.257223563: The flattening of the Earth, which is the ratio of the difference between the equatorial and polar radii to the equatorial radius. Passed to Proj.geod_geodesic.

One can also omit the equatorial_radius and flattening keyword arguments, and pass a geodesic object directly to the eponymous keyword.

This method uses the Proj/GeographicLib API for geodesic calculations.

source

',8))]),i("details",V,[i("summary",null,[s[90]||(s[90]=i("a",{id:"GeometryOps.GeometryCorrection",href:"#GeometryOps.GeometryCorrection"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryCorrection")],-1)),s[91]||(s[91]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[92]||(s[92]=e('
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source

',5))]),i("details",J,[i("summary",null,[s[93]||(s[93]=i("a",{id:"GeometryOps.GeometryOpsCore.BoolsAsTypes",href:"#GeometryOps.GeometryOpsCore.BoolsAsTypes"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.BoolsAsTypes")],-1)),s[94]||(s[94]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[95]||(s[95]=e('
julia
abstract type BoolsAsTypes

source

',2))]),i("details",U,[i("summary",null,[s[96]||(s[96]=i("a",{id:"GeometryOps.GeometryOpsCore.Geodesic",href:"#GeometryOps.GeometryOpsCore.Geodesic"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.Geodesic")],-1)),s[97]||(s[97]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[109]||(s[109]=e('
julia
Geodesic(; semimajor_axis, inv_flattening)
',1)),i("p",null,[s[102]||(s[102]=a("A geodesic manifold means that the geometry is on a 3-dimensional ellipsoid, parameterized by ")),s[103]||(s[103]=i("code",null,"semimajor_axis",-1)),s[104]||(s[104]=a(" (")),i("mjx-container",H,[(p(),l("svg",N,s[98]||(s[98]=[i("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[i("g",{"data-mml-node":"math"},[i("g",{"data-mml-node":"mi"},[i("path",{"data-c":"1D44E",d:"M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z",style:{"stroke-width":"3"}})])])],-1)]))),s[99]||(s[99]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mi",null,"a")])],-1))]),s[105]||(s[105]=a(" in mathematical parlance) and ")),s[106]||(s[106]=i("code",null,"inv_flattening",-1)),s[107]||(s[107]=a(" (")),i("mjx-container",W,[(p(),l("svg",_,s[100]||(s[100]=[e('',1)]))),s[101]||(s[101]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mn",null,"1"),i("mrow",{"data-mjx-texclass":"ORD"},[i("mo",null,"/")]),i("mi",null,"f")])],-1))]),s[108]||(s[108]=a(")."))]),s[110]||(s[110]=i("p",null,"Usually, this is only relevant for area and segmentization calculations. It becomes more relevant as one grows closer to the poles (or equator).",-1)),s[111]||(s[111]=i("p",null,[i("a",{href:"https://github.com/JuliaGeo/GeometryOps.jl/blob/v0.1.12/GeometryOpsCore/src/types.jl#L66-L73",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",z,[i("summary",null,[s[112]||(s[112]=i("a",{id:"GeometryOps.GeometryOpsCore.Linear",href:"#GeometryOps.GeometryOpsCore.Linear"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.Linear")],-1)),s[113]||(s[113]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[114]||(s[114]=e('
julia
Linear()

A linear manifold means that the space is completely Euclidean, and planar geometry suffices.

source

',3))]),i("details",Z,[i("summary",null,[s[115]||(s[115]=i("a",{id:"GeometryOps.GeometryOpsCore.Manifold",href:"#GeometryOps.GeometryOpsCore.Manifold"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.Manifold")],-1)),s[116]||(s[116]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[117]||(s[117]=e('
julia
abstract type Manifold

A manifold is mathematically defined as a topological space that resembles Euclidean space locally.

We use the manifold definition to define the space in which an operation should be performed, or where a geometry lies.

Currently we have Linear, Spherical, and Geodesic manifolds.

source

',5))]),i("details",K,[i("summary",null,[s[118]||(s[118]=i("a",{id:"GeometryOps.GeometryOpsCore.Spherical",href:"#GeometryOps.GeometryOpsCore.Spherical"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.Spherical")],-1)),s[119]||(s[119]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[130]||(s[130]=e('
julia
Spherical(; radius)

A spherical manifold means that the geometry is on the 3-sphere (but is represented by 2-D longitude and latitude).

Extended help

',3)),i("div",X,[s[128]||(s[128]=i("p",{class:"custom-block-title"},"Note",-1)),i("p",null,[s[122]||(s[122]=a("The traditional definition of spherical coordinates in physics and mathematics, ")),i("mjx-container",$,[(p(),l("svg",Y,s[120]||(s[120]=[e('',1)]))),s[121]||(s[121]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mi",null,"r"),i("mo",null,","),i("mi",null,"θ"),i("mo",null,","),i("mi",null,"ϕ")])],-1))]),s[123]||(s[123]=a(", uses the ")),s[124]||(s[124]=i("em",null,"colatitude",-1)),s[125]||(s[125]=a(", that measures angular displacement from the ")),s[126]||(s[126]=i("code",null,"z",-1)),s[127]||(s[127]=a("-axis."))]),s[129]||(s[129]=i("p",null,[a("Here, we use the geographic definition of longitude and latitude, meaning that "),i("code",null,"lon"),a(" is longitude between -180 and 180, and "),i("code",null,"lat"),a(" is latitude between "),i("code",null,"-90"),a(" (south pole) and "),i("code",null,"90"),a(" (north pole).")],-1))]),s[131]||(s[131]=i("p",null,[i("a",{href:"https://github.com/JuliaGeo/GeometryOps.jl/blob/v0.1.12/GeometryOpsCore/src/types.jl#L47-L61",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",ss,[i("summary",null,[s[132]||(s[132]=i("a",{id:"GeometryOps.GeometryOpsCore.TraitTarget",href:"#GeometryOps.GeometryOpsCore.TraitTarget"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.TraitTarget")],-1)),s[133]||(s[133]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[134]||(s[134]=e(`
julia
TraitTarget{T}

This struct holds a trait parameter or a union of trait parameters.

It is primarily used for dispatch into methods which select trait levels, like apply, or as a parameter to target.

Constructors

julia
TraitTarget(GI.PointTrait())
+DouglasPeucker(; number, ratio, tol)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance a point will be from the line joining its neighboring points.

Note: user input tol is squared to avoid unnecessary computation in algorithm.

source

`,6))]),i("details",R,[i("summary",null,[s[84]||(s[84]=i("a",{id:"GeometryOps.GEOS",href:"#GeometryOps.GEOS"},[i("span",{class:"jlbinding"},"GeometryOps.GEOS")],-1)),s[85]||(s[85]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[86]||(s[86]=e('
julia
GEOS(; params...)

A struct which instructs the method it's passed to as an algorithm to use the appropriate GEOS function via LibGEOS.jl for the operation.

Dispatch is generally carried out using the names of the keyword arguments. For example, segmentize will only accept a GEOS struct with only a max_distance keyword, and no other.

It's generally a lot slower than the native Julia implementations, since it must convert to the LibGEOS implementation and back - so be warned!

source

',5))]),i("details",S,[i("summary",null,[s[87]||(s[87]=i("a",{id:"GeometryOps.GeodesicSegments",href:"#GeometryOps.GeodesicSegments"},[i("span",{class:"jlbinding"},"GeometryOps.GeodesicSegments")],-1)),s[88]||(s[88]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[89]||(s[89]=e('
julia
GeodesicSegments(; max_distance::Real, equatorial_radius::Real=6378137, flattening::Real=1/298.257223563)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance. This method calculates the distance between points on the geodesic, and assumes input in lat/long coordinates.

Warning

Any input geometries must be in lon/lat coordinates! If not, the method may fail or error.

Arguments

  • max_distance::Real: The maximum distance, in meters, between vertices in the geometry.

  • equatorial_radius::Real=6378137: The equatorial radius of the Earth, in meters. Passed to Proj.geod_geodesic.

  • flattening::Real=1/298.257223563: The flattening of the Earth, which is the ratio of the difference between the equatorial and polar radii to the equatorial radius. Passed to Proj.geod_geodesic.

One can also omit the equatorial_radius and flattening keyword arguments, and pass a geodesic object directly to the eponymous keyword.

This method uses the Proj/GeographicLib API for geodesic calculations.

source

',8))]),i("details",V,[i("summary",null,[s[90]||(s[90]=i("a",{id:"GeometryOps.GeometryCorrection",href:"#GeometryOps.GeometryCorrection"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryCorrection")],-1)),s[91]||(s[91]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[92]||(s[92]=e('
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source

',5))]),i("details",J,[i("summary",null,[s[93]||(s[93]=i("a",{id:"GeometryOps.GeometryOpsCore.BoolsAsTypes",href:"#GeometryOps.GeometryOpsCore.BoolsAsTypes"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.BoolsAsTypes")],-1)),s[94]||(s[94]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[95]||(s[95]=e('
julia
abstract type BoolsAsTypes

source

',2))]),i("details",U,[i("summary",null,[s[96]||(s[96]=i("a",{id:"GeometryOps.GeometryOpsCore.Geodesic",href:"#GeometryOps.GeometryOpsCore.Geodesic"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.Geodesic")],-1)),s[97]||(s[97]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[109]||(s[109]=e('
julia
Geodesic(; semimajor_axis, inv_flattening)
',1)),i("p",null,[s[102]||(s[102]=a("A geodesic manifold means that the geometry is on a 3-dimensional ellipsoid, parameterized by ")),s[103]||(s[103]=i("code",null,"semimajor_axis",-1)),s[104]||(s[104]=a(" (")),i("mjx-container",H,[(p(),l("svg",N,s[98]||(s[98]=[i("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[i("g",{"data-mml-node":"math"},[i("g",{"data-mml-node":"mi"},[i("path",{"data-c":"1D44E",d:"M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z",style:{"stroke-width":"3"}})])])],-1)]))),s[99]||(s[99]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mi",null,"a")])],-1))]),s[105]||(s[105]=a(" in mathematical parlance) and ")),s[106]||(s[106]=i("code",null,"inv_flattening",-1)),s[107]||(s[107]=a(" (")),i("mjx-container",W,[(p(),l("svg",_,s[100]||(s[100]=[e('',1)]))),s[101]||(s[101]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mn",null,"1"),i("mrow",{"data-mjx-texclass":"ORD"},[i("mo",null,"/")]),i("mi",null,"f")])],-1))]),s[108]||(s[108]=a(")."))]),s[110]||(s[110]=i("p",null,"Usually, this is only relevant for area and segmentization calculations. It becomes more relevant as one grows closer to the poles (or equator).",-1)),s[111]||(s[111]=i("p",null,[i("a",{href:"https://github.com/JuliaGeo/GeometryOps.jl/blob/v0.1.12/GeometryOpsCore/src/types.jl#L68-L75",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",z,[i("summary",null,[s[112]||(s[112]=i("a",{id:"GeometryOps.GeometryOpsCore.Manifold",href:"#GeometryOps.GeometryOpsCore.Manifold"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.Manifold")],-1)),s[113]||(s[113]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[114]||(s[114]=e('
julia
abstract type Manifold

A manifold is mathematically defined as a topological space that resembles Euclidean space locally.

We use the manifold definition to define the space in which an operation should be performed, or where a geometry lies.

Currently we have Planar, Spherical, and Geodesic manifolds.

source

',5))]),i("details",Z,[i("summary",null,[s[115]||(s[115]=i("a",{id:"GeometryOps.GeometryOpsCore.Planar",href:"#GeometryOps.GeometryOpsCore.Planar"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.Planar")],-1)),s[116]||(s[116]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[117]||(s[117]=e('
julia
Planar()

A planar manifold refers to the 2D Euclidean plane.

Z coordinates may be accepted but will not influence geometry calculations, which are done purely on 2D geometry. This is the standard "2.5D" model used by e.g. GEOS.

source

',4))]),i("details",K,[i("summary",null,[s[118]||(s[118]=i("a",{id:"GeometryOps.GeometryOpsCore.Spherical",href:"#GeometryOps.GeometryOpsCore.Spherical"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.Spherical")],-1)),s[119]||(s[119]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[130]||(s[130]=e('
julia
Spherical(; radius)

A spherical manifold means that the geometry is on the 3-sphere (but is represented by 2-D longitude and latitude).

Extended help

',3)),i("div",X,[s[128]||(s[128]=i("p",{class:"custom-block-title"},"Note",-1)),i("p",null,[s[122]||(s[122]=a("The traditional definition of spherical coordinates in physics and mathematics, ")),i("mjx-container",$,[(p(),l("svg",Y,s[120]||(s[120]=[e('',1)]))),s[121]||(s[121]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mi",null,"r"),i("mo",null,","),i("mi",null,"θ"),i("mo",null,","),i("mi",null,"ϕ")])],-1))]),s[123]||(s[123]=a(", uses the ")),s[124]||(s[124]=i("em",null,"colatitude",-1)),s[125]||(s[125]=a(", that measures angular displacement from the ")),s[126]||(s[126]=i("code",null,"z",-1)),s[127]||(s[127]=a("-axis."))]),s[129]||(s[129]=i("p",null,[a("Here, we use the geographic definition of longitude and latitude, meaning that "),i("code",null,"lon"),a(" is longitude between -180 and 180, and "),i("code",null,"lat"),a(" is latitude between "),i("code",null,"-90"),a(" (south pole) and "),i("code",null,"90"),a(" (north pole).")],-1))]),s[131]||(s[131]=i("p",null,[i("a",{href:"https://github.com/JuliaGeo/GeometryOps.jl/blob/v0.1.12/GeometryOpsCore/src/types.jl#L49-L63",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",ss,[i("summary",null,[s[132]||(s[132]=i("a",{id:"GeometryOps.GeometryOpsCore.TraitTarget",href:"#GeometryOps.GeometryOpsCore.TraitTarget"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.TraitTarget")],-1)),s[133]||(s[133]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[134]||(s[134]=e(`
julia
TraitTarget{T}

This struct holds a trait parameter or a union of trait parameters.

It is primarily used for dispatch into methods which select trait levels, like apply, or as a parameter to target.

Constructors

julia
TraitTarget(GI.PointTrait())
 TraitTarget(GI.LineStringTrait(), GI.LinearRingTrait()) # and other traits as you may like
 TraitTarget(TraitTarget(...))
 # There are also type based constructors available, but that's not advised.
 TraitTarget(GI.PointTrait)
 TraitTarget(Union{GI.LineStringTrait, GI.LinearRingTrait})
-# etc.

source

`,6))]),i("details",is,[i("summary",null,[s[135]||(s[135]=i("a",{id:"GeometryOps.GeometryOpsCore._False",href:"#GeometryOps.GeometryOpsCore._False"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore._False")],-1)),s[136]||(s[136]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[137]||(s[137]=e('
julia
struct _False <: BoolsAsTypes

A struct that means false.

source

',3))]),i("details",as,[i("summary",null,[s[138]||(s[138]=i("a",{id:"GeometryOps.GeometryOpsCore._True",href:"#GeometryOps.GeometryOpsCore._True"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore._True")],-1)),s[139]||(s[139]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[140]||(s[140]=e('
julia
struct _True <: BoolsAsTypes

A struct that means true.

source

',3))]),i("details",es,[i("summary",null,[s[141]||(s[141]=i("a",{id:"GeometryOps.LineOrientation",href:"#GeometryOps.LineOrientation"},[i("span",{class:"jlbinding"},"GeometryOps.LineOrientation")],-1)),s[142]||(s[142]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[143]||(s[143]=e('
julia
Enum LineOrientation

Enum for the orientation of a line with respect to a curve. A line can be line_cross (crossing over the curve), line_hinge (crossing the endpoint of the curve), line_over (collinear with the curve), or line_out (not interacting with the curve).

source

',3))]),i("details",ts,[i("summary",null,[s[144]||(s[144]=i("a",{id:"GeometryOps.LinearSegments",href:"#GeometryOps.LinearSegments"},[i("span",{class:"jlbinding"},"GeometryOps.LinearSegments")],-1)),s[145]||(s[145]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[146]||(s[146]=e('
julia
LinearSegments(; max_distance::Real)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance.

Here, max_distance is a purely nondimensional quantity and will apply in the input space. This is to say, that if the polygon is provided in lat/lon coordinates then the max_distance will be in degrees of arc. If the polygon is provided in meters, then the max_distance will be in meters.

source

',4))]),i("details",ns,[i("summary",null,[s[147]||(s[147]=i("a",{id:"GeometryOps.MeanValue",href:"#GeometryOps.MeanValue"},[i("span",{class:"jlbinding"},"GeometryOps.MeanValue")],-1)),s[148]||(s[148]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[149]||(s[149]=e('
julia
MeanValue() <: AbstractBarycentricCoordinateMethod

This method calculates barycentric coordinates using the mean value method.

References

source

',4))]),i("details",ls,[i("summary",null,[s[150]||(s[150]=i("a",{id:"GeometryOps.MonotoneChainMethod",href:"#GeometryOps.MonotoneChainMethod"},[i("span",{class:"jlbinding"},"GeometryOps.MonotoneChainMethod")],-1)),s[151]||(s[151]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[152]||(s[152]=e('
julia
MonotoneChainMethod()

This is an algorithm for the convex_hull function.

Uses DelaunayTriangulation.jl to compute the convex hull. This is a pure Julia algorithm which provides an optimal Delaunay triangulation.

See also convex_hull

source

',5))]),i("details",ps,[i("summary",null,[s[153]||(s[153]=i("a",{id:"GeometryOps.PointOrientation",href:"#GeometryOps.PointOrientation"},[i("span",{class:"jlbinding"},"GeometryOps.PointOrientation")],-1)),s[154]||(s[154]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[155]||(s[155]=e('
julia
Enum PointOrientation

Enum for the orientation of a point with respect to a curve. A point can be point_in the curve, point_on the curve, or point_out of the curve.

source

',3))]),i("details",hs,[i("summary",null,[s[156]||(s[156]=i("a",{id:"GeometryOps.RadialDistance",href:"#GeometryOps.RadialDistance"},[i("span",{class:"jlbinding"},"GeometryOps.RadialDistance")],-1)),s[157]||(s[157]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[158]||(s[158]=e('
julia
RadialDistance <: SimplifyAlg

Simplifies geometries by removing points less than tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance between points.

Note: user input tol is squared to avoid unnecessary computation in algorithm.

source

',6))]),i("details",ks,[i("summary",null,[s[159]||(s[159]=i("a",{id:"GeometryOps.SimplifyAlg",href:"#GeometryOps.SimplifyAlg"},[i("span",{class:"jlbinding"},"GeometryOps.SimplifyAlg")],-1)),s[160]||(s[160]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[161]||(s[161]=e('
julia
abstract type SimplifyAlg

Abstract type for simplification algorithms.

API

For now, the algorithm must hold the number, ratio and tol properties.

Simplification algorithm types can hook into the interface by implementing the _simplify(trait, alg, geom) methods for whichever traits are necessary.

source

',6))]),i("details",rs,[i("summary",null,[s[162]||(s[162]=i("a",{id:"GeometryOps.UnionIntersectingPolygons",href:"#GeometryOps.UnionIntersectingPolygons"},[i("span",{class:"jlbinding"},"GeometryOps.UnionIntersectingPolygons")],-1)),s[163]||(s[163]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[164]||(s[164]=e('
julia
UnionIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygon's included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be combined through the union operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area.

See also GeometryCorrection.

source

',4))]),i("details",os,[i("summary",null,[s[165]||(s[165]=i("a",{id:"GeometryOps.VisvalingamWhyatt",href:"#GeometryOps.VisvalingamWhyatt"},[i("span",{class:"jlbinding"},"GeometryOps.VisvalingamWhyatt")],-1)),s[166]||(s[166]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[167]||(s[167]=e(`
julia
VisvalingamWhyatt <: SimplifyAlg
+# etc.

source

`,6))]),i("details",is,[i("summary",null,[s[135]||(s[135]=i("a",{id:"GeometryOps.GeometryOpsCore._False",href:"#GeometryOps.GeometryOpsCore._False"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore._False")],-1)),s[136]||(s[136]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[137]||(s[137]=e('
julia
struct _False <: BoolsAsTypes

A struct that means false.

source

',3))]),i("details",as,[i("summary",null,[s[138]||(s[138]=i("a",{id:"GeometryOps.GeometryOpsCore._True",href:"#GeometryOps.GeometryOpsCore._True"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore._True")],-1)),s[139]||(s[139]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[140]||(s[140]=e('
julia
struct _True <: BoolsAsTypes

A struct that means true.

source

',3))]),i("details",es,[i("summary",null,[s[141]||(s[141]=i("a",{id:"GeometryOps.LineOrientation",href:"#GeometryOps.LineOrientation"},[i("span",{class:"jlbinding"},"GeometryOps.LineOrientation")],-1)),s[142]||(s[142]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[143]||(s[143]=e('
julia
Enum LineOrientation

Enum for the orientation of a line with respect to a curve. A line can be line_cross (crossing over the curve), line_hinge (crossing the endpoint of the curve), line_over (collinear with the curve), or line_out (not interacting with the curve).

source

',3))]),i("details",ts,[i("summary",null,[s[144]||(s[144]=i("a",{id:"GeometryOps.LinearSegments",href:"#GeometryOps.LinearSegments"},[i("span",{class:"jlbinding"},"GeometryOps.LinearSegments")],-1)),s[145]||(s[145]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[146]||(s[146]=e('
julia
LinearSegments(; max_distance::Real)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance.

Here, max_distance is a purely nondimensional quantity and will apply in the input space. This is to say, that if the polygon is provided in lat/lon coordinates then the max_distance will be in degrees of arc. If the polygon is provided in meters, then the max_distance will be in meters.

source

',4))]),i("details",ns,[i("summary",null,[s[147]||(s[147]=i("a",{id:"GeometryOps.MeanValue",href:"#GeometryOps.MeanValue"},[i("span",{class:"jlbinding"},"GeometryOps.MeanValue")],-1)),s[148]||(s[148]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[149]||(s[149]=e('
julia
MeanValue() <: AbstractBarycentricCoordinateMethod

This method calculates barycentric coordinates using the mean value method.

References

source

',4))]),i("details",ls,[i("summary",null,[s[150]||(s[150]=i("a",{id:"GeometryOps.MonotoneChainMethod",href:"#GeometryOps.MonotoneChainMethod"},[i("span",{class:"jlbinding"},"GeometryOps.MonotoneChainMethod")],-1)),s[151]||(s[151]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[152]||(s[152]=e('
julia
MonotoneChainMethod()

This is an algorithm for the convex_hull function.

Uses DelaunayTriangulation.jl to compute the convex hull. This is a pure Julia algorithm which provides an optimal Delaunay triangulation.

See also convex_hull

source

',5))]),i("details",ps,[i("summary",null,[s[153]||(s[153]=i("a",{id:"GeometryOps.PointOrientation",href:"#GeometryOps.PointOrientation"},[i("span",{class:"jlbinding"},"GeometryOps.PointOrientation")],-1)),s[154]||(s[154]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[155]||(s[155]=e('
julia
Enum PointOrientation

Enum for the orientation of a point with respect to a curve. A point can be point_in the curve, point_on the curve, or point_out of the curve.

source

',3))]),i("details",hs,[i("summary",null,[s[156]||(s[156]=i("a",{id:"GeometryOps.RadialDistance",href:"#GeometryOps.RadialDistance"},[i("span",{class:"jlbinding"},"GeometryOps.RadialDistance")],-1)),s[157]||(s[157]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[158]||(s[158]=e('
julia
RadialDistance <: SimplifyAlg

Simplifies geometries by removing points less than tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance between points.

Note: user input tol is squared to avoid unnecessary computation in algorithm.

source

',6))]),i("details",ks,[i("summary",null,[s[159]||(s[159]=i("a",{id:"GeometryOps.SimplifyAlg",href:"#GeometryOps.SimplifyAlg"},[i("span",{class:"jlbinding"},"GeometryOps.SimplifyAlg")],-1)),s[160]||(s[160]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[161]||(s[161]=e('
julia
abstract type SimplifyAlg

Abstract type for simplification algorithms.

API

For now, the algorithm must hold the number, ratio and tol properties.

Simplification algorithm types can hook into the interface by implementing the _simplify(trait, alg, geom) methods for whichever traits are necessary.

source

',6))]),i("details",rs,[i("summary",null,[s[162]||(s[162]=i("a",{id:"GeometryOps.UnionIntersectingPolygons",href:"#GeometryOps.UnionIntersectingPolygons"},[i("span",{class:"jlbinding"},"GeometryOps.UnionIntersectingPolygons")],-1)),s[163]||(s[163]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[164]||(s[164]=e('
julia
UnionIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygon's included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be combined through the union operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area.

See also GeometryCorrection.

source

',4))]),i("details",os,[i("summary",null,[s[165]||(s[165]=i("a",{id:"GeometryOps.VisvalingamWhyatt",href:"#GeometryOps.VisvalingamWhyatt"},[i("span",{class:"jlbinding"},"GeometryOps.VisvalingamWhyatt")],-1)),s[166]||(s[166]=a()),n(t,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[167]||(s[167]=e(`
julia
VisvalingamWhyatt <: SimplifyAlg
 
-VisvalingamWhyatt(; kw...)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum area of a triangle made with a point and its neighboring points.

Note: user input tol is doubled to avoid unnecessary computation in algorithm.

source

`,6))]),i("details",ds,[i("summary",null,[s[168]||(s[168]=i("a",{id:"GeometryOps.GeometryOpsCore._booltype",href:"#GeometryOps.GeometryOpsCore._booltype"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore._booltype")],-1)),s[169]||(s[169]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[170]||(s[170]=e('
julia
_booltype(x)

Returns a BoolsAsTypes from x, whether it's a boolean or a BoolsAsTypes.

source

',3))]),i("details",gs,[i("summary",null,[s[171]||(s[171]=i("a",{id:"GeometryOps.GeometryOpsCore.apply-Union{Tuple{F}, Tuple{F, Any, Any}} where F",href:"#GeometryOps.GeometryOpsCore.apply-Union{Tuple{F}, Tuple{F, Any, Any}} where F"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.apply")],-1)),s[172]||(s[172]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[173]||(s[173]=e(`
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
+VisvalingamWhyatt(; kw...)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum area of a triangle made with a point and its neighboring points.

Note: user input tol is doubled to avoid unnecessary computation in algorithm.

source

`,6))]),i("details",ds,[i("summary",null,[s[168]||(s[168]=i("a",{id:"GeometryOps.GeometryOpsCore._booltype",href:"#GeometryOps.GeometryOpsCore._booltype"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore._booltype")],-1)),s[169]||(s[169]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[170]||(s[170]=e('
julia
_booltype(x)

Returns a BoolsAsTypes from x, whether it's a boolean or a BoolsAsTypes.

source

',3))]),i("details",gs,[i("summary",null,[s[171]||(s[171]=i("a",{id:"GeometryOps.GeometryOpsCore.apply-Union{Tuple{F}, Tuple{F, Any, Any}} where F",href:"#GeometryOps.GeometryOpsCore.apply-Union{Tuple{F}, Tuple{F, Any, Any}} where F"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.apply")],-1)),s[172]||(s[172]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[173]||(s[173]=e(`
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
 import GeometryOps as GO
 geom = GI.Polygon([GI.LinearRing([(1, 2), (3, 4), (5, 6), (1, 2)]),
                    GI.LinearRing([(3, 4), (5, 6), (6, 7), (3, 4)])])
@@ -301,14 +301,14 @@ import{_ as h,c as l,a5 as e,j as i,a,G as n,B as k,o as p}from"./chunks/framewo
 
 GO.contains(line, point)
 # output
-true

source

`,6))]),i("details",Ds,[i("summary",null,[s[222]||(s[222]=i("a",{id:"GeometryOps.convex_hull",href:"#GeometryOps.convex_hull"},[i("span",{class:"jlbinding"},"GeometryOps.convex_hull")],-1)),s[223]||(s[223]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[224]||(s[224]=e('
julia
convex_hull([method], geometries)

Compute the convex hull of the points in geometries. Returns a GI.Polygon representing the convex hull.

Note that the polygon returned is wound counterclockwise as in the Simple Features standard by default. If you choose GEOS, the winding order will be inverted.

Warning

This interface only computes the 2-dimensional convex hull!

For higher dimensional hulls, use the relevant package (Qhull.jl, Quickhull.jl, or similar).

source

',5))]),i("details",xs,[i("summary",null,[s[225]||(s[225]=i("a",{id:"GeometryOps.coverage-Union{Tuple{T}, NTuple{5, Any}, Tuple{Any, Any, Any, Any, Any, Type{T}}} where T<:AbstractFloat",href:"#GeometryOps.coverage-Union{Tuple{T}, NTuple{5, Any}, Tuple{Any, Any, Any, Any, Any, Type{T}}} where T<:AbstractFloat"},[i("span",{class:"jlbinding"},"GeometryOps.coverage")],-1)),s[226]||(s[226]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[227]||(s[227]=e('
julia
coverage(geom, xmin, xmax, ymin, ymax, [T = Float64])::T

Returns the area of intersection between given geometry and grid cell defined by its minimum and maximum x and y-values. This is computed differently for different geometries:

  • The signed area of a point is always zero.

  • The signed area of a curve is always zero.

  • The signed area of a polygon is calculated by tracing along its edges and switching to the cell edges if needed.

  • The coverage of a geometry collection, multi-geometry, feature collection of array/iterable is the sum of the coverages of all of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source

',5))]),i("details",Qs,[i("summary",null,[s[228]||(s[228]=i("a",{id:"GeometryOps.coveredby-Tuple{Any, Any}",href:"#GeometryOps.coveredby-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"GeometryOps.coveredby")],-1)),s[229]||(s[229]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[230]||(s[230]=e(`
julia
coveredby(g1, g2)::Bool

Return true if the first geometry is completely covered by the second geometry. The interior and boundary of the primary geometry (g1) must not intersect the exterior of the secondary geometry (g2).

Furthermore, coveredby returns the exact opposite result of covers. They are equivalent with the order of the arguments swapped.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+true

source

`,6))]),i("details",Ds,[i("summary",null,[s[222]||(s[222]=i("a",{id:"GeometryOps.convex_hull",href:"#GeometryOps.convex_hull"},[i("span",{class:"jlbinding"},"GeometryOps.convex_hull")],-1)),s[223]||(s[223]=a()),n(t,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[224]||(s[224]=e('
julia
convex_hull([method], geometries)

Compute the convex hull of the points in geometries. Returns a GI.Polygon representing the convex hull.

Note that the polygon returned is wound counterclockwise as in the Simple Features standard by default. If you choose GEOS, the winding order will be inverted.

Warning

This interface only computes the 2-dimensional convex hull!

For higher dimensional hulls, use the relevant package (Qhull.jl, Quickhull.jl, or similar).

source

',5))]),i("details",xs,[i("summary",null,[s[225]||(s[225]=i("a",{id:"GeometryOps.coverage-Union{Tuple{T}, NTuple{5, Any}, Tuple{Any, Any, Any, Any, Any, Type{T}}} where T<:AbstractFloat",href:"#GeometryOps.coverage-Union{Tuple{T}, NTuple{5, Any}, Tuple{Any, Any, Any, Any, Any, Type{T}}} where T<:AbstractFloat"},[i("span",{class:"jlbinding"},"GeometryOps.coverage")],-1)),s[226]||(s[226]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[227]||(s[227]=e('
julia
coverage(geom, xmin, xmax, ymin, ymax, [T = Float64])::T

Returns the area of intersection between given geometry and grid cell defined by its minimum and maximum x and y-values. This is computed differently for different geometries:

  • The signed area of a point is always zero.

  • The signed area of a curve is always zero.

  • The signed area of a polygon is calculated by tracing along its edges and switching to the cell edges if needed.

  • The coverage of a geometry collection, multi-geometry, feature collection of array/iterable is the sum of the coverages of all of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source

',5))]),i("details",ws,[i("summary",null,[s[228]||(s[228]=i("a",{id:"GeometryOps.coveredby-Tuple{Any, Any}",href:"#GeometryOps.coveredby-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"GeometryOps.coveredby")],-1)),s[229]||(s[229]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[230]||(s[230]=e(`
julia
coveredby(g1, g2)::Bool

Return true if the first geometry is completely covered by the second geometry. The interior and boundary of the primary geometry (g1) must not intersect the exterior of the secondary geometry (g2).

Furthermore, coveredby returns the exact opposite result of covers. They are equivalent with the order of the arguments swapped.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 p1 = GI.Point(0.0, 0.0)
 p2 = GI.Point(1.0, 1.0)
 l1 = GI.Line([p1, p2])
 
 GO.coveredby(p1, l1)
 # output
-true

source

`,6))]),i("details",ws,[i("summary",null,[s[231]||(s[231]=i("a",{id:"GeometryOps.covers-Tuple{Any, Any}",href:"#GeometryOps.covers-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"GeometryOps.covers")],-1)),s[232]||(s[232]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[233]||(s[233]=e(`
julia
covers(g1::AbstractGeometry, g2::AbstractGeometry)::Bool

Return true if the first geometry is completely covers the second geometry, The exterior and boundary of the second geometry must not be outside of the interior and boundary of the first geometry. However, the interiors need not intersect.

covers returns the exact opposite result of coveredby.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+true

source

`,6))]),i("details",Qs,[i("summary",null,[s[231]||(s[231]=i("a",{id:"GeometryOps.covers-Tuple{Any, Any}",href:"#GeometryOps.covers-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"GeometryOps.covers")],-1)),s[232]||(s[232]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[233]||(s[233]=e(`
julia
covers(g1::AbstractGeometry, g2::AbstractGeometry)::Bool

Return true if the first geometry is completely covers the second geometry, The exterior and boundary of the second geometry must not be outside of the interior and boundary of the first geometry. However, the interiors need not intersect.

covers returns the exact opposite result of coveredby.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 l1 = GI.LineString([(1.0, 1.0), (1.0, 2.0), (1.0, 3.0), (1.0, 4.0)])
 l2 = GI.LineString([(1.0, 1.0), (1.0, 2.0)])
 
@@ -520,11 +520,11 @@ import{_ as h,c as l,a5 as e,j as i,a,G as n,B as k,o as p}from"./chunks/framewo
 
 # output
 1-element Vector{Vector{Vector{Vector{Float64}}}}:
- [[[6.5, 3.5], [5.0, 5.0], [0.0, 0.0], [5.0, -5.0], [6.5, -3.5], [8.0, -5.0], [13.0, 0.0], [8.0, 5.0], [6.5, 3.5]]]

source

`,6))]),i("details",xi,[i("summary",null,[s[381]||(s[381]=i("a",{id:"GeometryOps.weighted_mean-Union{Tuple{WT}, Tuple{WT, Any, Any}} where WT<:Real",href:"#GeometryOps.weighted_mean-Union{Tuple{WT}, Tuple{WT, Any, Any}} where WT<:Real"},[i("span",{class:"jlbinding"},"GeometryOps.weighted_mean")],-1)),s[382]||(s[382]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[383]||(s[383]=e('
julia
weighted_mean(weight::Real, x1, x2)

Returns the weighted mean of x1 and x2, where weight is the weight of x1.

Specifically, calculates x1 * weight + x2 * (1 - weight).

Note

The idea for this method is that you can override this for custom types, like Color types, in extension modules.

source

',5))]),i("details",Qi,[i("summary",null,[s[384]||(s[384]=i("a",{id:"GeometryOps.within-Tuple{Any, Any}",href:"#GeometryOps.within-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"GeometryOps.within")],-1)),s[385]||(s[385]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[386]||(s[386]=e(`
julia
within(geom1, geom2)::Bool

Return true if the first geometry is completely within the second geometry. The interiors of both geometries must intersect and the interior and boundary of the primary geometry (geom1) must not intersect the exterior of the secondary geometry (geom2).

Furthermore, within returns the exact opposite result of contains.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+ [[[6.5, 3.5], [5.0, 5.0], [0.0, 0.0], [5.0, -5.0], [6.5, -3.5], [8.0, -5.0], [13.0, 0.0], [8.0, 5.0], [6.5, 3.5]]]

source

`,6))]),i("details",xi,[i("summary",null,[s[381]||(s[381]=i("a",{id:"GeometryOps.weighted_mean-Union{Tuple{WT}, Tuple{WT, Any, Any}} where WT<:Real",href:"#GeometryOps.weighted_mean-Union{Tuple{WT}, Tuple{WT, Any, Any}} where WT<:Real"},[i("span",{class:"jlbinding"},"GeometryOps.weighted_mean")],-1)),s[382]||(s[382]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[383]||(s[383]=e('
julia
weighted_mean(weight::Real, x1, x2)

Returns the weighted mean of x1 and x2, where weight is the weight of x1.

Specifically, calculates x1 * weight + x2 * (1 - weight).

Note

The idea for this method is that you can override this for custom types, like Color types, in extension modules.

source

',5))]),i("details",wi,[i("summary",null,[s[384]||(s[384]=i("a",{id:"GeometryOps.within-Tuple{Any, Any}",href:"#GeometryOps.within-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"GeometryOps.within")],-1)),s[385]||(s[385]=a()),n(t,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[386]||(s[386]=e(`
julia
within(geom1, geom2)::Bool

Return true if the first geometry is completely within the second geometry. The interiors of both geometries must intersect and the interior and boundary of the primary geometry (geom1) must not intersect the exterior of the secondary geometry (geom2).

Furthermore, within returns the exact opposite result of contains.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 
 line = GI.LineString([(1, 1), (1, 2), (1, 3), (1, 4)])
 point = (1, 2)
 GO.within(point, line)
 
 # output
-true

source

`,6))]),s[393]||(s[393]=e('
  1. K. Hormann and N. Sukumar. Generalized Barycentric Coordinates in Computer Graphics and Computational Mechanics. Taylor & Fancis, CRC Press, 2017. ↩︎

',2))])}const Vi=h(r,[["render",wi]]);export{Si as __pageData,Vi as default}; +true

source

`,6))]),s[393]||(s[393]=e('
  1. K. Hormann and N. Sukumar. Generalized Barycentric Coordinates in Computer Graphics and Computational Mechanics. Taylor & Fancis, CRC Press, 2017. ↩︎

',2))])}const Vi=h(r,[["render",Qi]]);export{Si as __pageData,Vi as default}; diff --git a/dev/assets/pupvizg.Bglvb-jp.png b/dev/assets/aplmaug.Bglvb-jp.png similarity index 100% rename from dev/assets/pupvizg.Bglvb-jp.png rename to dev/assets/aplmaug.Bglvb-jp.png diff --git a/dev/assets/app.C6vbXxf5.js b/dev/assets/app.1ogsJ7mO.js similarity index 90% rename from dev/assets/app.C6vbXxf5.js rename to dev/assets/app.1ogsJ7mO.js index 4d4ccc4ba..d187828c6 100644 --- a/dev/assets/app.C6vbXxf5.js +++ b/dev/assets/app.1ogsJ7mO.js @@ -1 +1 @@ -import{R as p}from"./chunks/theme.D9kCPeTG.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.O43fB7X6.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.D6URMT7s.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.B_n_RGhH.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/rvdgstm.-VpeHhXX.png b/dev/assets/bhglzly.-VpeHhXX.png similarity index 100% rename from dev/assets/rvdgstm.-VpeHhXX.png rename to dev/assets/bhglzly.-VpeHhXX.png diff --git a/dev/assets/vygiwkc.B94PsR1K.png b/dev/assets/bqfrspk.B94PsR1K.png similarity index 100% rename from dev/assets/vygiwkc.B94PsR1K.png rename to dev/assets/bqfrspk.B94PsR1K.png diff --git a/dev/assets/kycmsab.BD0hVfse.png b/dev/assets/bsfjfzw.BD0hVfse.png similarity index 100% rename from dev/assets/kycmsab.BD0hVfse.png rename to dev/assets/bsfjfzw.BD0hVfse.png diff --git a/dev/assets/jqhztwg.Dig-DWOQ.png b/dev/assets/byztndv.Dig-DWOQ.png similarity index 100% rename from dev/assets/jqhztwg.Dig-DWOQ.png rename to dev/assets/byztndv.Dig-DWOQ.png diff --git a/dev/assets/call_notes.md.CbnJ0VFx.lean.js b/dev/assets/call_notes.md.4XfLIuCb.js similarity index 98% rename from dev/assets/call_notes.md.CbnJ0VFx.lean.js rename to dev/assets/call_notes.md.4XfLIuCb.js index 01f15df40..bc66d8a83 100644 --- a/dev/assets/call_notes.md.CbnJ0VFx.lean.js +++ b/dev/assets/call_notes.md.4XfLIuCb.js @@ -1 +1 @@ -import{_ as i,c as l,a5 as t,o}from"./chunks/framework.O43fB7X6.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"call_notes.md","filePath":"call_notes.md","lastUpdated":null}'),a={name:"call_notes.md"};function r(n,e,s,p,c,d){return o(),l("div",null,e[0]||(e[0]=[t('

20th April, 2024

See GeometryOps#114.

  • [ ] Exact predicates can be defined for lower-level, more atomic predicates within GeometryOps.

  • [ ] Add Shewchuck's adaptive math as a stage for exact predicates.

  • [x] @skygering to write docstrings for the predicates

29th Feb, 2024

To do

  • [ ] Finish clipping degeneracies

  • [ ] Fix cross & overlap functions

  • [x] Benchmarks to show why things you couldn't concieve of in R are doable in Julia

  • [x] profile functions for exponential improvements

  • [ ] A list of projects people can work on...the beauty here is that each function is kind of self-contained so it's an undergrad level project

  • [ ] Doc improvements

    • more

    • benchmarks page

  • Methods to validate and fix geometry

    • [ ] Polygons and LinearRings:

      • [ ] self-intersection

      • [ ] holes are actually within the polygon

      • [ ] Polygon exteriors must be counterclockwise, holes clockwise.

      • [ ] length of all rings > 4

      • [ ] repeated last point

    • [ ] LineStrings: NaN/Inf points

    • [x] Fix linear rings at some point to make sure the ring is closed, i.e., points[end] == points[begin]

  • Tests

    • [x] Simplify functions

    • [x] Polygonize

    • Barycentric tests for n_vertices > 4

Done

  • Rename bools.jl to something more relevant to the actual code -> orientation.jl

  • Doc improvements:

    • organise sections
',8)]))}const f=i(a,[["render",r]]);export{u as __pageData,f as default}; +import{_ as i,c as l,a5 as t,o}from"./chunks/framework.B_n_RGhH.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"call_notes.md","filePath":"call_notes.md","lastUpdated":null}'),a={name:"call_notes.md"};function r(n,e,s,p,c,d){return o(),l("div",null,e[0]||(e[0]=[t('

20th April, 2024

See GeometryOps#114.

  • [ ] Exact predicates can be defined for lower-level, more atomic predicates within GeometryOps.

  • [ ] Add Shewchuck's adaptive math as a stage for exact predicates.

  • [x] @skygering to write docstrings for the predicates

29th Feb, 2024

To do

  • [ ] Finish clipping degeneracies

  • [ ] Fix cross & overlap functions

  • [x] Benchmarks to show why things you couldn't concieve of in R are doable in Julia

  • [x] profile functions for exponential improvements

  • [ ] A list of projects people can work on...the beauty here is that each function is kind of self-contained so it's an undergrad level project

  • [ ] Doc improvements

    • more

    • benchmarks page

  • Methods to validate and fix geometry

    • [ ] Polygons and LinearRings:

      • [ ] self-intersection

      • [ ] holes are actually within the polygon

      • [ ] Polygon exteriors must be counterclockwise, holes clockwise.

      • [ ] length of all rings > 4

      • [ ] repeated last point

    • [ ] LineStrings: NaN/Inf points

    • [x] Fix linear rings at some point to make sure the ring is closed, i.e., points[end] == points[begin]

  • Tests

    • [x] Simplify functions

    • [x] Polygonize

    • Barycentric tests for n_vertices > 4

Done

  • Rename bools.jl to something more relevant to the actual code -> orientation.jl

  • Doc improvements:

    • organise sections
',8)]))}const f=i(a,[["render",r]]);export{u as __pageData,f as default}; diff --git a/dev/assets/call_notes.md.CbnJ0VFx.js b/dev/assets/call_notes.md.4XfLIuCb.lean.js similarity index 98% rename from dev/assets/call_notes.md.CbnJ0VFx.js rename to dev/assets/call_notes.md.4XfLIuCb.lean.js index 01f15df40..bc66d8a83 100644 --- a/dev/assets/call_notes.md.CbnJ0VFx.js +++ b/dev/assets/call_notes.md.4XfLIuCb.lean.js @@ -1 +1 @@ -import{_ as i,c as l,a5 as t,o}from"./chunks/framework.O43fB7X6.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"call_notes.md","filePath":"call_notes.md","lastUpdated":null}'),a={name:"call_notes.md"};function r(n,e,s,p,c,d){return o(),l("div",null,e[0]||(e[0]=[t('

20th April, 2024

See GeometryOps#114.

  • [ ] Exact predicates can be defined for lower-level, more atomic predicates within GeometryOps.

  • [ ] Add Shewchuck's adaptive math as a stage for exact predicates.

  • [x] @skygering to write docstrings for the predicates

29th Feb, 2024

To do

  • [ ] Finish clipping degeneracies

  • [ ] Fix cross & overlap functions

  • [x] Benchmarks to show why things you couldn't concieve of in R are doable in Julia

  • [x] profile functions for exponential improvements

  • [ ] A list of projects people can work on...the beauty here is that each function is kind of self-contained so it's an undergrad level project

  • [ ] Doc improvements

    • more

    • benchmarks page

  • Methods to validate and fix geometry

    • [ ] Polygons and LinearRings:

      • [ ] self-intersection

      • [ ] holes are actually within the polygon

      • [ ] Polygon exteriors must be counterclockwise, holes clockwise.

      • [ ] length of all rings > 4

      • [ ] repeated last point

    • [ ] LineStrings: NaN/Inf points

    • [x] Fix linear rings at some point to make sure the ring is closed, i.e., points[end] == points[begin]

  • Tests

    • [x] Simplify functions

    • [x] Polygonize

    • Barycentric tests for n_vertices > 4

Done

  • Rename bools.jl to something more relevant to the actual code -> orientation.jl

  • Doc improvements:

    • organise sections
',8)]))}const f=i(a,[["render",r]]);export{u as __pageData,f as default}; +import{_ as i,c as l,a5 as t,o}from"./chunks/framework.B_n_RGhH.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"call_notes.md","filePath":"call_notes.md","lastUpdated":null}'),a={name:"call_notes.md"};function r(n,e,s,p,c,d){return o(),l("div",null,e[0]||(e[0]=[t('

20th April, 2024

See GeometryOps#114.

  • [ ] Exact predicates can be defined for lower-level, more atomic predicates within GeometryOps.

  • [ ] Add Shewchuck's adaptive math as a stage for exact predicates.

  • [x] @skygering to write docstrings for the predicates

29th Feb, 2024

To do

  • [ ] Finish clipping degeneracies

  • [ ] Fix cross & overlap functions

  • [x] Benchmarks to show why things you couldn't concieve of in R are doable in Julia

  • [x] profile functions for exponential improvements

  • [ ] A list of projects people can work on...the beauty here is that each function is kind of self-contained so it's an undergrad level project

  • [ ] Doc improvements

    • more

    • benchmarks page

  • Methods to validate and fix geometry

    • [ ] Polygons and LinearRings:

      • [ ] self-intersection

      • [ ] holes are actually within the polygon

      • [ ] Polygon exteriors must be counterclockwise, holes clockwise.

      • [ ] length of all rings > 4

      • [ ] repeated last point

    • [ ] LineStrings: NaN/Inf points

    • [x] Fix linear rings at some point to make sure the ring is closed, i.e., points[end] == points[begin]

  • Tests

    • [x] Simplify functions

    • [x] Polygonize

    • Barycentric tests for n_vertices > 4

Done

  • Rename bools.jl to something more relevant to the actual code -> orientation.jl

  • Doc improvements:

    • organise sections
',8)]))}const f=i(a,[["render",r]]);export{u as __pageData,f as default}; diff --git a/dev/assets/chunks/@localSearchIndexroot.BIJELIzt.js b/dev/assets/chunks/@localSearchIndexroot.BIJELIzt.js new file mode 100644 index 000000000..5b6a5e800 --- /dev/null +++ b/dev/assets/chunks/@localSearchIndexroot.BIJELIzt.js @@ -0,0 +1 @@ +const e='{"documentCount":201,"nextId":201,"documentIds":{"0":"/GeometryOps.jl/dev/api#Full-GeometryOps-API-documentation","1":"/GeometryOps.jl/dev/api#apply-and-associated-functions","2":"/GeometryOps.jl/dev/api#General-geometry-methods","3":"/GeometryOps.jl/dev/api#OGC-methods","4":"/GeometryOps.jl/dev/api#Other-general-methods","5":"/GeometryOps.jl/dev/api#Barycentric-coordinates","6":"/GeometryOps.jl/dev/api#Other-methods","7":"/GeometryOps.jl/dev/call_notes#20th-April,-2024","8":"/GeometryOps.jl/dev/call_notes#29th-Feb,-2024","9":"/GeometryOps.jl/dev/call_notes#To-do","10":"/GeometryOps.jl/dev/call_notes#done","11":"/GeometryOps.jl/dev/experiments/accurate_accumulators#Accurate-accumulation","12":"/GeometryOps.jl/dev/experiments/predicates#predicates","13":"/GeometryOps.jl/dev/experiments/predicates#orient","14":"/GeometryOps.jl/dev/experiments/predicates#dashboard","15":"/GeometryOps.jl/dev/experiments/predicates#Testing-robust-vs-regular-predicates","16":"/GeometryOps.jl/dev/experiments/predicates#incircle","17":"/GeometryOps.jl/dev/explanations/paradigms#paradigms","18":"/GeometryOps.jl/dev/explanations/paradigms#apply","19":"/GeometryOps.jl/dev/explanations/paradigms#applyreduce","20":"/GeometryOps.jl/dev/explanations/paradigms#fix-and-prepare","21":"/GeometryOps.jl/dev/#what-is-geometryops-jl","22":"/GeometryOps.jl/dev/#how-to-navigate-the-docs","23":"/GeometryOps.jl/dev/introduction#introduction","24":"/GeometryOps.jl/dev/introduction#Main-concepts","25":"/GeometryOps.jl/dev/introduction#The-apply-paradigm","26":"/GeometryOps.jl/dev/introduction#What\'s-this-GeoInterface.Wrapper-thing?","27":"/GeometryOps.jl/dev/source/GeometryOps#geometryops-jl","28":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/segmentize#segmentize","29":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#Simple-overrides","30":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#Polygon-set-operations","31":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#difference","32":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#union","33":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#intersection","34":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#Symmetric-difference","35":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#DE-9IM-boolean-methods","36":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#equals","37":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#disjoint","38":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#touches","39":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#crosses","40":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#within","41":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#contains","42":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#overlaps","43":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#covers","44":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#coveredby","45":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#intersects","46":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#Convex-hull","47":"/GeometryOps.jl/dev/explanations/peculiarities#peculiarities","48":"/GeometryOps.jl/dev/explanations/peculiarities#What-does-apply-return-and-why?","49":"/GeometryOps.jl/dev/explanations/peculiarities#Why-do-you-want-me-to-provide-a-target-in-set-operations?","50":"/GeometryOps.jl/dev/explanations/peculiarities#_True-and-_False-(or-BoolsAsTypes)","51":"/GeometryOps.jl/dev/source/methods/angles#angles","52":"/GeometryOps.jl/dev/source/methods/angles#What-is-angles?","53":"/GeometryOps.jl/dev/source/methods/angles#implementation","54":"/GeometryOps.jl/dev/source/methods/area#Area-and-signed-area","55":"/GeometryOps.jl/dev/source/methods/area#What-is-area?-What-is-signed-area?","56":"/GeometryOps.jl/dev/source/methods/area#implementation","57":"/GeometryOps.jl/dev/source/methods/barycentric#Barycentric-coordinates","58":"/GeometryOps.jl/dev/source/methods/barycentric#example","59":"/GeometryOps.jl/dev/source/methods/barycentric#Barycentric-coordinate-API","60":"/GeometryOps.jl/dev/source/methods/buffer#buffer","61":"/GeometryOps.jl/dev/source/methods/centroid#centroid","62":"/GeometryOps.jl/dev/source/methods/centroid#What-is-the-centroid?","63":"/GeometryOps.jl/dev/source/methods/centroid#implementation","64":"/GeometryOps.jl/dev/source/methods/clipping/clipping_processor#Polygon-clipping-helpers","65":"/GeometryOps.jl/dev/source/methods/clipping/coverage#What-is-coverage?","66":"/GeometryOps.jl/dev/source/methods/clipping/coverage#implementation","67":"/GeometryOps.jl/dev/source/methods/clipping/cut#Polygon-cutting","68":"/GeometryOps.jl/dev/source/methods/clipping/cut#What-is-cut?","69":"/GeometryOps.jl/dev/source/methods/clipping/cut#implementation","70":"/GeometryOps.jl/dev/source/methods/clipping/difference#Difference-Polygon-Clipping","71":"/GeometryOps.jl/dev/source/methods/clipping/difference#Helper-functions-for-Differences-with-Greiner-and-Hormann-Polygon-Clipping","72":"/GeometryOps.jl/dev/source/methods/clipping/predicates#If-we-want-to-inject-adaptivity,-we-would-do-something-like:","73":"/GeometryOps.jl/dev/source/methods/clipping/intersection#Geometry-Intersection","74":"/GeometryOps.jl/dev/source/methods/clipping/intersection#Helper-functions-for-Intersections-with-Greiner-and-Hormann-Polygon-Clipping","75":"/GeometryOps.jl/dev/source/methods/clipping/union#Union-Polygon-Clipping","76":"/GeometryOps.jl/dev/source/methods/clipping/union#Helper-functions-for-Unions-with-Greiner-and-Hormann-Polygon-Clipping","77":"/GeometryOps.jl/dev/source/methods/convex_hull#Convex-hull","78":"/GeometryOps.jl/dev/source/methods/convex_hull#example","79":"/GeometryOps.jl/dev/source/methods/convex_hull#Simple-hull","80":"/GeometryOps.jl/dev/source/methods/convex_hull#Convex-hull-of-the-USA","81":"/GeometryOps.jl/dev/source/methods/convex_hull#Investigating-the-winding-order","82":"/GeometryOps.jl/dev/source/methods/convex_hull#implementation","83":"/GeometryOps.jl/dev/source/methods/distance#Distance-and-signed-distance","84":"/GeometryOps.jl/dev/source/methods/distance#What-is-distance?-What-is-signed-distance?","85":"/GeometryOps.jl/dev/source/methods/distance#implementation","86":"/GeometryOps.jl/dev/source/methods/equals#equals","87":"/GeometryOps.jl/dev/source/methods/equals#What-is-equals?","88":"/GeometryOps.jl/dev/source/methods/equals#implementation","89":"/GeometryOps.jl/dev/source/methods/geom_relations/contains#contains","90":"/GeometryOps.jl/dev/source/methods/geom_relations/contains#What-is-contains?","91":"/GeometryOps.jl/dev/source/methods/geom_relations/contains#implementation","92":"/GeometryOps.jl/dev/source/methods/geom_relations/covers#covers","93":"/GeometryOps.jl/dev/source/methods/geom_relations/covers#What-is-covers?","94":"/GeometryOps.jl/dev/source/methods/geom_relations/covers#implementation","95":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#coveredby","96":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#What-is-coveredby?","97":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#implementation","98":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#Convert-features-to-geometries","99":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#Points-coveredby-geometries","100":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#Lines-coveredby-geometries","101":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#Rings-covered-by-geometries","102":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#Polygons-covered-by-geometries","103":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#Geometries-coveredby-multi-geometry/geometry-collections","104":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#Multi-geometry/geometry-collections-coveredby-geometries","105":"/GeometryOps.jl/dev/source/methods/geom_relations/crosses#Crossing-checks","106":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#disjoint","107":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#What-is-disjoint?","108":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#implementation","109":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#Convert-features-to-geometries","110":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#Point-disjoint-geometries","111":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#Lines-disjoint-geometries","112":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#Rings-disjoint-geometries","113":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#Polygon-disjoint-geometries","114":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#Geometries-disjoint-multi-geometry/geometry-collections","115":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#Multi-geometry/geometry-collections-coveredby-geometries","116":"/GeometryOps.jl/dev/source/methods/geom_relations/geom_geom_processors#Line-curve-interaction","117":"/GeometryOps.jl/dev/source/methods/geom_relations/intersects#Intersection-checks","118":"/GeometryOps.jl/dev/source/methods/geom_relations/intersects#What-is-intersects?","119":"/GeometryOps.jl/dev/source/methods/geom_relations/intersects#implementation","120":"/GeometryOps.jl/dev/source/methods/geom_relations/overlaps#overlaps","121":"/GeometryOps.jl/dev/source/methods/geom_relations/overlaps#What-is-overlaps?","122":"/GeometryOps.jl/dev/source/methods/geom_relations/overlaps#implementation","123":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#touches","124":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#What-is-touches?","125":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#implementation","126":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#Convert-features-to-geometries","127":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#Point-touches-geometries","128":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#Lines-touching-geometries","129":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#Rings-touch-geometries","130":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#Polygons-touch-geometries","131":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#Geometries-touch-multi-geometry/geometry-collections","132":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#Multi-geometry/geometry-collections-cross-geometries","133":"/GeometryOps.jl/dev/source/methods/geom_relations/within#within","134":"/GeometryOps.jl/dev/source/methods/geom_relations/within#What-is-within?","135":"/GeometryOps.jl/dev/source/methods/geom_relations/within#implementation","136":"/GeometryOps.jl/dev/source/methods/geom_relations/within#Convert-features-to-geometries","137":"/GeometryOps.jl/dev/source/methods/geom_relations/within#Points-within-geometries","138":"/GeometryOps.jl/dev/source/methods/geom_relations/within#Lines-within-geometries","139":"/GeometryOps.jl/dev/source/methods/geom_relations/within#Rings-covered-by-geometries","140":"/GeometryOps.jl/dev/source/methods/geom_relations/within#Polygons-within-geometries","141":"/GeometryOps.jl/dev/source/methods/geom_relations/within#Geometries-within-multi-geometry/geometry-collections","142":"/GeometryOps.jl/dev/source/methods/geom_relations/within#Multi-geometry/geometry-collections-within-geometries","143":"/GeometryOps.jl/dev/source/methods/orientation#orientation","144":"/GeometryOps.jl/dev/source/methods/orientation#isclockwise","145":"/GeometryOps.jl/dev/source/methods/orientation#isconcave","146":"/GeometryOps.jl/dev/source/methods/polygonize#Polygonizing-raster-data","147":"/GeometryOps.jl/dev/source/not_implemented_yet#Not-implemented-yet","148":"/GeometryOps.jl/dev/source/src/apply#apply","149":"/GeometryOps.jl/dev/source/src/apply#docstrings","150":"/GeometryOps.jl/dev/source/src/apply#functions","151":"/GeometryOps.jl/dev/source/src/apply#What-is-apply?","152":"/GeometryOps.jl/dev/source/src/apply#embedding","153":"/GeometryOps.jl/dev/source/src/apply#threading","154":"/GeometryOps.jl/dev/source/src/keyword_docs#Keyword-docs","155":"/GeometryOps.jl/dev/source/src/other_primitives#Other-primitives-(unwrap,-flatten,-etc)","156":"/GeometryOps.jl/dev/source/src/types#types","157":"/GeometryOps.jl/dev/source/src/types#Manifold","158":"/GeometryOps.jl/dev/source/src/types#TraitTarget","159":"/GeometryOps.jl/dev/source/src/types#BoolsAsTypes","160":"/GeometryOps.jl/dev/source/transformations/correction/closed_ring#Closed-Rings","161":"/GeometryOps.jl/dev/source/transformations/correction/closed_ring#example","162":"/GeometryOps.jl/dev/source/transformations/correction/closed_ring#implementation","163":"/GeometryOps.jl/dev/source/transformations/correction/geometry_correction#Geometry-Corrections","164":"/GeometryOps.jl/dev/source/transformations/correction/geometry_correction#interface","165":"/GeometryOps.jl/dev/source/transformations/correction/geometry_correction#Available-corrections","166":"/GeometryOps.jl/dev/source/transformations/extent#Extent-embedding","167":"/GeometryOps.jl/dev/source/transformations/correction/intersecting_polygons#Intersecting-Polygons","168":"/GeometryOps.jl/dev/source/transformations/correction/intersecting_polygons#example","169":"/GeometryOps.jl/dev/source/transformations/correction/intersecting_polygons#implementation","170":"/GeometryOps.jl/dev/source/src/applyreduce#applyreduce","171":"/GeometryOps.jl/dev/source/transformations/flip#Coordinate-flipping","172":"/GeometryOps.jl/dev/source/transformations/reproject#Geometry-reprojection","173":"/GeometryOps.jl/dev/source/transformations/reproject#Method-error-handling","174":"/GeometryOps.jl/dev/source/transformations/segmentize#segmentize","175":"/GeometryOps.jl/dev/source/transformations/segmentize#examples","176":"/GeometryOps.jl/dev/source/transformations/segmentize#benchmark","177":"/GeometryOps.jl/dev/source/transformations/segmentize#implementation","178":"/GeometryOps.jl/dev/source/transformations/simplify#Geometry-simplification","179":"/GeometryOps.jl/dev/source/transformations/simplify#examples","180":"/GeometryOps.jl/dev/source/transformations/simplify#benchmark","181":"/GeometryOps.jl/dev/source/transformations/simplify#Simplify-with-RadialDistance-Algorithm","182":"/GeometryOps.jl/dev/source/transformations/simplify#Simplify-with-DouglasPeucker-Algorithm","183":"/GeometryOps.jl/dev/source/transformations/simplify#Simplify-with-VisvalingamWhyatt-Algorithm","184":"/GeometryOps.jl/dev/source/transformations/simplify#Shared-utils","185":"/GeometryOps.jl/dev/source/transformations/transform#Pointwise-transformation","186":"/GeometryOps.jl/dev/source/transformations/tuples#Tuple-conversion","187":"/GeometryOps.jl/dev/source/types#types","188":"/GeometryOps.jl/dev/source/types#GEOS","189":"/GeometryOps.jl/dev/source/utils#Utility-functions","190":"/GeometryOps.jl/dev/tutorials/creating_geometry#Creating-Geometry","191":"/GeometryOps.jl/dev/tutorials/creating_geometry#creating-geometry","192":"/GeometryOps.jl/dev/tutorials/creating_geometry#plot-geometry","193":"/GeometryOps.jl/dev/tutorials/creating_geometry#geom-crs","194":"/GeometryOps.jl/dev/tutorials/creating_geometry#attributes","195":"/GeometryOps.jl/dev/tutorials/creating_geometry#save-geometry","196":"/GeometryOps.jl/dev/tutorials/geodesic_paths#Geodesic-paths","197":"/GeometryOps.jl/dev/tutorials/spatial_joins#Spatial-joins","198":"/GeometryOps.jl/dev/tutorials/spatial_joins#Simple-example","199":"/GeometryOps.jl/dev/tutorials/spatial_joins#Real-world-example","200":"/GeometryOps.jl/dev/tutorials/spatial_joins#Enabling-custom-predicates"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[4,1,100],"1":[4,4,246],"2":[3,4,1],"3":[2,7,205],"4":[3,7,255],"5":[2,4,81],"6":[2,4,1151],"7":[3,1,55],"8":[3,1,1],"9":[2,3,107],"10":[1,3,17],"11":[2,1,74],"12":[1,1,5],"13":[1,1,128],"14":[1,2,116],"15":[5,2,72],"16":[1,1,1],"17":[1,1,53],"18":[1,1,109],"19":[1,2,35],"20":[3,1,79],"21":[5,1,72],"22":[5,1,61],"23":[1,1,72],"24":[2,1,1],"25":[3,3,50],"26":[8,3,18],"27":[2,1,138],"28":[1,1,106],"29":[2,1,23],"30":[3,2,1],"31":[1,5,20],"32":[1,5,20],"33":[1,5,20],"34":[2,5,22],"35":[4,2,1],"36":[1,6,13],"37":[1,6,13],"38":[1,6,13],"39":[1,6,13],"40":[1,6,13],"41":[1,6,13],"42":[1,6,13],"43":[1,6,13],"44":[1,6,13],"45":[1,6,13],"46":[2,2,34],"47":[1,1,1],"48":[7,1,71],"49":[13,1,101],"50":[6,1,66],"51":[1,1,3],"52":[4,1,57],"53":[1,1,268],"54":[4,1,4],"55":[5,4,100],"56":[1,4,246],"57":[2,1,65],"58":[1,2,211],"59":[3,2,414],"60":[1,1,110],"61":[1,1,6],"62":[5,1,91],"63":[1,1,199],"64":[3,1,610],"65":[4,1,70],"66":[1,1,327],"67":[2,1,3],"68":[4,2,57],"69":[1,2,200],"70":[3,1,214],"71":[10,1,190],"72":[11,1,25],"73":[2,1,250],"74":[10,1,480],"75":[3,1,236],"76":[10,1,284],"77":[2,1,56],"78":[1,2,1],"79":[2,3,32],"80":[5,2,40],"81":[4,2,100],"82":[1,2,166],"83":[4,1,4],"84":[5,4,128],"85":[1,4,260],"86":[1,1,3],"87":[4,1,68],"88":[1,1,265],"89":[1,1,3],"90":[4,1,79],"91":[1,1,79],"92":[1,1,3],"93":[4,1,67],"94":[1,1,78],"95":[1,1,3],"96":[4,1,81],"97":[1,1,128],"98":[4,1,11],"99":[3,1,56],"100":[3,1,46],"101":[4,1,48],"102":[4,1,40],"103":[5,1,40],"104":[5,1,44],"105":[2,1,149],"106":[1,1,3],"107":[4,1,68],"108":[1,1,110],"109":[4,1,10],"110":[3,1,57],"111":[3,1,58],"112":[3,1,47],"113":[3,1,33],"114":[5,1,39],"115":[5,1,44],"116":[3,1,432],"117":[2,1,3],"118":[4,2,80],"119":[1,2,76],"120":[1,1,3],"121":[4,1,82],"122":[1,1,244],"123":[1,1,3],"124":[4,1,70],"125":[1,1,125],"126":[4,1,11],"127":[3,1,69],"128":[3,1,52],"129":[3,1,61],"130":[3,1,40],"131":[5,1,39],"132":[5,1,42],"133":[1,1,3],"134":[4,1,72],"135":[1,1,129],"136":[4,1,11],"137":[3,1,63],"138":[3,1,53],"139":[4,1,53],"140":[3,1,38],"141":[5,1,39],"142":[5,1,42],"143":[1,1,4],"144":[1,1,21],"145":[1,1,206],"146":[3,1,511],"147":[3,1,47],"148":[1,1,114],"149":[1,1,1],"150":[1,2,152],"151":[4,1,114],"152":[2,1,36],"153":[1,1,490],"154":[2,1,51],"155":[6,1,218],"156":[1,1,17],"157":[1,1,216],"158":[1,1,74],"159":[1,1,98],"160":[2,1,54],"161":[1,2,87],"162":[1,2,83],"163":[2,1,41],"164":[1,2,109],"165":[2,2,106],"166":[2,1,71],"167":[2,1,77],"168":[1,2,70],"169":[1,2,135],"170":[1,1,291],"171":[2,1,56],"172":[2,1,132],"173":[3,2,77],"174":[1,1,76],"175":[1,1,147],"176":[1,1,268],"177":[1,1,188],"178":[2,1,44],"179":[1,2,67],"180":[1,2,391],"181":[4,1,75],"182":[4,1,186],"183":[4,1,85],"184":[2,1,149],"185":[2,1,111],"186":[2,1,58],"187":[1,1,37],"188":[1,1,147],"189":[2,1,136],"190":[2,1,60],"191":[4,2,287],"192":[13,2,280],"193":[9,2,199],"194":[7,2,63],"195":[4,2,140],"196":[2,1,52],"197":[2,1,141],"198":[2,2,137],"199":[3,2,117],"200":[3,2,68]},"averageFieldLength":[2.7213930348258706,1.7263681592039801,102.43283582089553],"storedFields":{"0":{"title":"Full GeometryOps API documentation","titles":[]},"1":{"title":"apply and associated functions","titles":["Full GeometryOps API documentation"]},"2":{"title":"General geometry methods","titles":["Full GeometryOps API documentation"]},"3":{"title":"OGC methods","titles":["Full GeometryOps API documentation","General geometry methods"]},"4":{"title":"Other general methods","titles":["Full GeometryOps API documentation","General geometry methods"]},"5":{"title":"Barycentric coordinates","titles":["Full GeometryOps API documentation"]},"6":{"title":"Other methods","titles":["Full GeometryOps API documentation"]},"7":{"title":"20th April, 2024","titles":[]},"8":{"title":"29th Feb, 2024","titles":[]},"9":{"title":"To do","titles":["29th Feb, 2024"]},"10":{"title":"Done","titles":["29th Feb, 2024"]},"11":{"title":"Accurate accumulation","titles":[]},"12":{"title":"Predicates","titles":[]},"13":{"title":"Orient","titles":["Predicates"]},"14":{"title":"Dashboard","titles":["Predicates","Orient"]},"15":{"title":"Testing robust vs regular predicates","titles":["Predicates","Orient"]},"16":{"title":"Incircle","titles":["Predicates"]},"17":{"title":"Paradigms","titles":[]},"18":{"title":"apply","titles":["Paradigms"]},"19":{"title":"applyreduce","titles":["Paradigms","apply"]},"20":{"title":"fix and prepare","titles":["Paradigms"]},"21":{"title":"What is GeometryOps.jl?","titles":[]},"22":{"title":"How to navigate the docs","titles":[]},"23":{"title":"Introduction","titles":[]},"24":{"title":"Main concepts","titles":["Introduction"]},"25":{"title":"The apply paradigm","titles":["Introduction","Main concepts"]},"26":{"title":"What's this GeoInterface.Wrapper thing?","titles":["Introduction","Main concepts"]},"27":{"title":"GeometryOps.jl","titles":[]},"28":{"title":"Segmentize","titles":[]},"29":{"title":"Simple overrides","titles":[]},"30":{"title":"Polygon set operations","titles":["Simple overrides"]},"31":{"title":"Difference","titles":["Simple overrides","Polygon set operations"]},"32":{"title":"Union","titles":["Simple overrides","Polygon set operations"]},"33":{"title":"Intersection","titles":["Simple overrides","Polygon set operations"]},"34":{"title":"Symmetric difference","titles":["Simple overrides","Polygon set operations"]},"35":{"title":"DE-9IM boolean methods","titles":["Simple overrides"]},"36":{"title":"Equals","titles":["Simple overrides","DE-9IM boolean methods"]},"37":{"title":"Disjoint","titles":["Simple overrides","DE-9IM boolean methods"]},"38":{"title":"Touches","titles":["Simple overrides","DE-9IM boolean methods"]},"39":{"title":"Crosses","titles":["Simple overrides","DE-9IM boolean methods"]},"40":{"title":"Within","titles":["Simple overrides","DE-9IM boolean methods"]},"41":{"title":"Contains","titles":["Simple overrides","DE-9IM boolean methods"]},"42":{"title":"Overlaps","titles":["Simple overrides","DE-9IM boolean methods"]},"43":{"title":"Covers","titles":["Simple overrides","DE-9IM boolean methods"]},"44":{"title":"CoveredBy","titles":["Simple overrides","DE-9IM boolean methods"]},"45":{"title":"Intersects","titles":["Simple overrides","DE-9IM boolean methods"]},"46":{"title":"Convex hull","titles":["Simple overrides"]},"47":{"title":"Peculiarities","titles":[]},"48":{"title":"What does apply return and why?","titles":["Peculiarities"]},"49":{"title":"Why do you want me to provide a target in set operations?","titles":["Peculiarities"]},"50":{"title":"_True and _False (or BoolsAsTypes)","titles":["Peculiarities"]},"51":{"title":"Angles","titles":[]},"52":{"title":"What is angles?","titles":["Angles"]},"53":{"title":"Implementation","titles":["Angles"]},"54":{"title":"Area and signed area","titles":[]},"55":{"title":"What is area? What is signed area?","titles":["Area and signed area"]},"56":{"title":"Implementation","titles":["Area and signed area"]},"57":{"title":"Barycentric coordinates","titles":[]},"58":{"title":"Example","titles":["Barycentric coordinates"]},"59":{"title":"Barycentric-coordinate API","titles":["Barycentric coordinates"]},"60":{"title":"Buffer","titles":[]},"61":{"title":"Centroid","titles":[]},"62":{"title":"What is the centroid?","titles":["Centroid"]},"63":{"title":"Implementation","titles":["Centroid"]},"64":{"title":"Polygon clipping helpers","titles":[]},"65":{"title":"What is coverage?","titles":[]},"66":{"title":"Implementation","titles":[]},"67":{"title":"Polygon cutting","titles":[]},"68":{"title":"What is cut?","titles":["Polygon cutting"]},"69":{"title":"Implementation","titles":["Polygon cutting"]},"70":{"title":"Difference Polygon Clipping","titles":[]},"71":{"title":"Helper functions for Differences with Greiner and Hormann Polygon Clipping","titles":[]},"72":{"title":"If we want to inject adaptivity, we would do something like:","titles":[]},"73":{"title":"Geometry Intersection","titles":[]},"74":{"title":"Helper functions for Intersections with Greiner and Hormann Polygon Clipping","titles":[]},"75":{"title":"Union Polygon Clipping","titles":[]},"76":{"title":"Helper functions for Unions with Greiner and Hormann Polygon Clipping","titles":[]},"77":{"title":"Convex hull","titles":[]},"78":{"title":"Example","titles":["Convex hull"]},"79":{"title":"Simple hull","titles":["Convex hull","Example"]},"80":{"title":"Convex hull of the USA","titles":["Convex hull"]},"81":{"title":"Investigating the winding order","titles":["Convex hull"]},"82":{"title":"Implementation","titles":["Convex hull"]},"83":{"title":"Distance and signed distance","titles":[]},"84":{"title":"What is distance? What is signed distance?","titles":["Distance and signed distance"]},"85":{"title":"Implementation","titles":["Distance and signed distance"]},"86":{"title":"Equals","titles":[]},"87":{"title":"What is equals?","titles":["Equals"]},"88":{"title":"Implementation","titles":["Equals"]},"89":{"title":"Contains","titles":[]},"90":{"title":"What is contains?","titles":["Contains"]},"91":{"title":"Implementation","titles":["Contains"]},"92":{"title":"Covers","titles":[]},"93":{"title":"What is covers?","titles":["Covers"]},"94":{"title":"Implementation","titles":["Covers"]},"95":{"title":"CoveredBy","titles":[]},"96":{"title":"What is coveredby?","titles":["CoveredBy"]},"97":{"title":"Implementation","titles":["CoveredBy"]},"98":{"title":"Convert features to geometries","titles":[]},"99":{"title":"Points coveredby geometries","titles":[]},"100":{"title":"Lines coveredby geometries","titles":[]},"101":{"title":"Rings covered by geometries","titles":[]},"102":{"title":"Polygons covered by geometries","titles":[]},"103":{"title":"Geometries coveredby multi-geometry/geometry collections","titles":[]},"104":{"title":"Multi-geometry/geometry collections coveredby geometries","titles":[]},"105":{"title":"Crossing checks","titles":[]},"106":{"title":"Disjoint","titles":[]},"107":{"title":"What is disjoint?","titles":["Disjoint"]},"108":{"title":"Implementation","titles":["Disjoint"]},"109":{"title":"Convert features to geometries","titles":[]},"110":{"title":"Point disjoint geometries","titles":[]},"111":{"title":"Lines disjoint geometries","titles":[]},"112":{"title":"Rings disjoint geometries","titles":[]},"113":{"title":"Polygon disjoint geometries","titles":[]},"114":{"title":"Geometries disjoint multi-geometry/geometry collections","titles":[]},"115":{"title":"Multi-geometry/geometry collections coveredby geometries","titles":[]},"116":{"title":"Line-curve interaction","titles":[]},"117":{"title":"Intersection checks","titles":[]},"118":{"title":"What is intersects?","titles":["Intersection checks"]},"119":{"title":"Implementation","titles":["Intersection checks"]},"120":{"title":"Overlaps","titles":[]},"121":{"title":"What is overlaps?","titles":["Overlaps"]},"122":{"title":"Implementation","titles":["Overlaps"]},"123":{"title":"Touches","titles":[]},"124":{"title":"What is touches?","titles":["Touches"]},"125":{"title":"Implementation","titles":["Touches"]},"126":{"title":"Convert features to geometries","titles":[]},"127":{"title":"Point touches geometries","titles":[]},"128":{"title":"Lines touching geometries","titles":[]},"129":{"title":"Rings touch geometries","titles":[]},"130":{"title":"Polygons touch geometries","titles":[]},"131":{"title":"Geometries touch multi-geometry/geometry collections","titles":[]},"132":{"title":"Multi-geometry/geometry collections cross geometries","titles":[]},"133":{"title":"Within","titles":[]},"134":{"title":"What is within?","titles":["Within"]},"135":{"title":"Implementation","titles":["Within"]},"136":{"title":"Convert features to geometries","titles":[]},"137":{"title":"Points within geometries","titles":[]},"138":{"title":"Lines within geometries","titles":[]},"139":{"title":"Rings covered by geometries","titles":[]},"140":{"title":"Polygons within geometries","titles":[]},"141":{"title":"Geometries within multi-geometry/geometry collections","titles":[]},"142":{"title":"Multi-geometry/geometry collections within geometries","titles":[]},"143":{"title":"Orientation","titles":[]},"144":{"title":"isclockwise","titles":["Orientation"]},"145":{"title":"isconcave","titles":["Orientation"]},"146":{"title":"Polygonizing raster data","titles":[]},"147":{"title":"Not implemented yet","titles":[]},"148":{"title":"apply","titles":[]},"149":{"title":"Docstrings","titles":["apply"]},"150":{"title":"Functions","titles":["apply","Docstrings"]},"151":{"title":"What is apply?","titles":["apply"]},"152":{"title":"Embedding:","titles":["apply"]},"153":{"title":"Threading","titles":["apply"]},"154":{"title":"Keyword docs","titles":[]},"155":{"title":"Other primitives (unwrap, flatten, etc)","titles":[]},"156":{"title":"Types","titles":[]},"157":{"title":"Manifold","titles":["Types"]},"158":{"title":"TraitTarget","titles":["Types"]},"159":{"title":"BoolsAsTypes","titles":["Types"]},"160":{"title":"Closed Rings","titles":[]},"161":{"title":"Example","titles":["Closed Rings"]},"162":{"title":"Implementation","titles":["Closed Rings"]},"163":{"title":"Geometry Corrections","titles":[]},"164":{"title":"Interface","titles":["Geometry Corrections"]},"165":{"title":"Available corrections","titles":["Geometry Corrections"]},"166":{"title":"Extent embedding","titles":[]},"167":{"title":"Intersecting Polygons","titles":[]},"168":{"title":"Example","titles":["Intersecting Polygons"]},"169":{"title":"Implementation","titles":["Intersecting Polygons"]},"170":{"title":"applyreduce","titles":[]},"171":{"title":"Coordinate flipping","titles":[]},"172":{"title":"Geometry reprojection","titles":[]},"173":{"title":"Method error handling","titles":["Geometry reprojection"]},"174":{"title":"Segmentize","titles":[]},"175":{"title":"Examples","titles":["Segmentize"]},"176":{"title":"Benchmark","titles":["Segmentize"]},"177":{"title":"Implementation","titles":["Segmentize"]},"178":{"title":"Geometry simplification","titles":[]},"179":{"title":"Examples","titles":["Geometry simplification"]},"180":{"title":"Benchmark","titles":["Geometry simplification"]},"181":{"title":"Simplify with RadialDistance Algorithm","titles":[]},"182":{"title":"Simplify with DouglasPeucker Algorithm","titles":[]},"183":{"title":"Simplify with VisvalingamWhyatt Algorithm","titles":[]},"184":{"title":"Shared utils","titles":[]},"185":{"title":"Pointwise transformation","titles":[]},"186":{"title":"Tuple conversion","titles":[]},"187":{"title":"Types","titles":[]},"188":{"title":"GEOS","titles":["Types"]},"189":{"title":"Utility functions","titles":[]},"190":{"title":"Creating Geometry","titles":[]},"191":{"title":"Creating and plotting geometries","titles":["Creating Geometry"]},"192":{"title":"Plot geometries on a map using GeoMakie and coordinate reference system (CRS)","titles":["Creating Geometry"]},"193":{"title":"Create geospatial geometries with embedded coordinate reference system information","titles":["Creating Geometry"]},"194":{"title":"Creating a table with attributes and geometry","titles":["Creating Geometry"]},"195":{"title":"Saving your geospatial data","titles":["Creating Geometry"]},"196":{"title":"Geodesic paths","titles":[]},"197":{"title":"Spatial joins","titles":[]},"198":{"title":"Simple example","titles":["Spatial joins"]},"199":{"title":"Real-world example","titles":["Spatial joins"]},"200":{"title":"Enabling custom predicates","titles":["Spatial joins"]}},"dirtCount":0,"index":[["⋮",{"2":{"192":1}}],["☁",{"2":{"191":1}}],["✈",{"2":{"191":1}}],["÷",{"2":{"153":1,"170":1}}],["ϵ",{"2":{"74":5}}],["∘",{"2":{"74":1,"122":2,"146":2,"164":1,"180":2,"200":2}}],["⊻",{"2":{"64":1,"71":2}}],["≥",{"2":{"64":1,"116":2,"169":1,"182":1}}],["α≈1",{"2":{"74":1}}],["α≈0",{"2":{"74":1}}],["α2",{"2":{"64":4,"74":2}}],["α",{"2":{"64":3,"74":28,"116":7}}],["α1",{"2":{"64":4,"74":2}}],["β2",{"2":{"64":4,"74":2}}],["β",{"2":{"64":4,"74":28,"116":7}}],["β1",{"2":{"64":4,"74":2}}],["≤",{"2":{"64":5,"66":14,"116":6,"182":1,"184":1,"189":4}}],["^",{"2":{"192":1}}],["^3",{"2":{"192":1}}],["^n",{"2":{"145":1}}],["^2",{"2":{"63":2,"85":2}}],["^hormannpresentation",{"2":{"59":2}}],["∑λ",{"2":{"59":2}}],["∑i=2n",{"2":{"6":1}}],["λ₁",{"2":{"59":2}}],["λn",{"2":{"57":1}}],["λ3",{"2":{"57":1}}],["λ2",{"2":{"57":2}}],["λ1",{"2":{"57":2}}],["λs",{"2":{"5":6,"6":4,"59":27}}],["π",{"2":{"53":1,"180":1}}],["δbay",{"2":{"74":3}}],["δbax",{"2":{"74":3}}],["δby",{"2":{"74":5}}],["δbx",{"2":{"74":5}}],["δb",{"2":{"74":2}}],["δay",{"2":{"74":5}}],["δax",{"2":{"74":5}}],["δa",{"2":{"74":2}}],["δintrs",{"2":{"64":2}}],["δy2",{"2":{"145":2}}],["δy1",{"2":{"145":2}}],["δyl",{"2":{"122":4}}],["δy",{"2":{"53":8,"66":3,"116":7}}],["δys",{"2":{"53":1}}],["δx2",{"2":{"145":2}}],["δx1",{"2":{"145":2}}],["δxl",{"2":{"122":4}}],["δx",{"2":{"53":9,"66":3,"116":7}}],["`$",{"2":{"188":1}}],["`equatorial",{"2":{"176":2}}],["`extents",{"2":{"166":1}}],["`+`",{"2":{"170":1}}],["`op`",{"2":{"170":2}}],["`obj`",{"2":{"155":1,"185":1,"186":1}}],["`inf`",{"2":{"172":1}}],["`inv",{"2":{"157":1}}],["`intersects`",{"2":{"119":1}}],["`intersectingpolygons`",{"2":{"70":1,"73":1,"75":1}}],["`90`",{"2":{"157":1}}],["`libgeos",{"2":{"188":1}}],["`linearring`",{"2":{"177":1}}],["`linearsegments`",{"2":{"177":1}}],["`linestring`",{"2":{"177":1}}],["`linestringtrait`",{"2":{"164":1}}],["`line2`",{"2":{"145":1}}],["`line1`",{"2":{"145":1}}],["`line",{"2":{"73":4}}],["`lat`",{"2":{"157":1}}],["`lon`",{"2":{"157":1}}],["`z`",{"2":{"157":1}}],["``1",{"2":{"157":1}}],["``a``",{"2":{"157":1}}],["``r",{"2":{"157":1}}],["```jldoctest",{"2":{"69":1,"70":1,"73":1,"74":1,"75":1,"88":1,"91":1,"94":1,"97":1,"108":1,"119":1,"122":1,"125":1,"135":1,"145":1,"180":1}}],["```julia",{"2":{"6":2,"59":1,"105":1,"145":1,"153":1,"158":1,"185":2}}],["```math",{"2":{"59":1,"145":1}}],["```",{"2":{"11":1,"59":3,"69":1,"70":1,"73":1,"75":1,"88":1,"91":1,"94":1,"97":1,"108":1,"119":1,"122":1,"125":1,"135":1,"145":3,"146":11,"153":1,"180":1,"185":2,"189":1}}],["`prefilter",{"2":{"180":1}}],["`proj",{"2":{"172":1,"176":2}}],["`planar`",{"2":{"157":1}}],["`polgontrait`",{"2":{"153":1}}],["`polygontrait`",{"2":{"153":1,"164":1}}],["`polygonize`",{"2":{"146":2}}],["`polygon`",{"2":{"59":3}}],["`polys`",{"2":{"71":1}}],["`poly",{"2":{"71":3,"74":1,"76":1}}],["`pointrait`",{"2":{"180":1}}],["`pointtrait`",{"2":{"155":3,"164":1}}],["`point",{"2":{"116":3}}],["`point`",{"2":{"59":4,"85":1}}],["`point2f`",{"2":{"58":1}}],["`calc",{"2":{"154":1}}],["`crs`",{"2":{"154":1}}],["`collect`",{"2":{"170":1}}],["`components`",{"2":{"155":1}}],["`coveredby`",{"2":{"94":1,"97":1}}],["`covers`",{"2":{"94":1,"97":1}}],["`contains`",{"2":{"91":1,"135":1}}],["`convex",{"2":{"82":2}}],["`alg",{"2":{"188":1}}],["`alg`",{"2":{"184":1}}],["`always",{"2":{"172":1}}],["`application",{"2":{"164":1}}],["`apply`",{"2":{"153":1,"158":1}}],["`abstractgeometrytrait`",{"2":{"155":1}}],["`abstractarray`",{"2":{"155":1}}],["`abstractmatrix`",{"2":{"146":1}}],["`ys`",{"2":{"146":1}}],["`flattening`",{"2":{"176":1}}],["`flattening",{"2":{"176":1}}],["`flatten`",{"2":{"155":1}}],["`f",{"2":{"153":1}}],["`featurecollectiontrait`",{"2":{"153":1,"155":1}}],["`featurecollection`",{"2":{"146":2}}],["`featuretrait`",{"2":{"153":2,"155":1}}],["`feature`s",{"2":{"146":1}}],["`f`",{"2":{"146":5,"153":3,"155":2,"170":1,"185":2,"188":1}}],["`false`",{"2":{"145":1,"146":1,"154":4,"159":1,"172":1}}],["`fix",{"2":{"70":2,"71":2,"73":2,"74":2,"75":2,"76":2}}],["`douglaspeucker`",{"2":{"180":1}}],["`d`",{"2":{"172":1}}],["`difference`",{"2":{"169":1}}],["`disjoint`",{"2":{"119":1}}],["`delaunaytriangulation",{"2":{"82":1}}],["`within`",{"2":{"91":1,"135":1}}],["`weight`",{"2":{"59":1}}],["`geos`",{"2":{"188":3}}],["`geodesicsegments`",{"2":{"175":1,"176":1,"177":1}}],["`geodesic`",{"2":{"157":1,"176":1}}],["`geointerface`",{"2":{"164":1}}],["`geointerface",{"2":{"153":1,"155":2,"172":2}}],["`geom`",{"2":{"85":3,"155":1,"177":1}}],["`geometrycorrection`",{"2":{"162":1,"164":1,"169":2}}],["`geometry`",{"2":{"153":1,"172":2}}],["`geometrybasics",{"2":{"59":3}}],["`geometries`",{"2":{"82":1}}],["`g1`",{"2":{"85":1}}],["`gi",{"2":{"82":1,"146":1}}],["`tuple",{"2":{"189":1}}],["`tuple`s",{"2":{"186":1}}],["`tuple`",{"2":{"146":1,"186":1}}],["`time`",{"2":{"172":1}}],["`transform`",{"2":{"172":1}}],["`true`",{"2":{"97":1,"105":1,"108":2,"125":1,"135":1,"145":2,"146":1,"154":2,"159":1,"172":1}}],["`threaded==true`",{"2":{"170":1}}],["`threaded`",{"2":{"154":1}}],["`tol`",{"2":{"180":2,"181":3,"182":2,"183":3,"184":4}}],["`to",{"2":{"74":1}}],["`target",{"2":{"172":3}}],["`target`",{"2":{"73":1,"153":2,"155":1,"158":1,"170":1}}],["`tables",{"2":{"153":1}}],["`taget`",{"2":{"70":1,"75":1}}],["`method",{"2":{"177":1}}],["`method`",{"2":{"59":3,"177":1}}],["`max",{"2":{"176":4,"177":2,"188":1}}],["`map`",{"2":{"153":1}}],["`makie",{"2":{"146":1}}],["`multipointtrait`",{"2":{"153":1,"180":1}}],["`multipolygontrait`",{"2":{"153":1}}],["`multipolygon`",{"2":{"146":3}}],["`multipolygon",{"2":{"71":3,"74":3,"76":2}}],["`multipoly",{"2":{"71":7,"74":3,"76":3}}],["`minpoints`",{"2":{"146":2}}],["`union",{"2":{"146":2}}],["`unionintersectingpolygons`",{"2":{"169":1}}],["`unionintersectingpolygons",{"2":{"70":1,"71":2,"73":1,"74":2,"75":1,"76":2}}],["`using",{"2":{"27":1}}],["`number`",{"2":{"180":2,"184":3}}],["`namedtuple`",{"2":{"153":1}}],["`nothing`",{"2":{"64":1,"154":1}}],["`next",{"2":{"64":1}}],["`boolsastypes`",{"2":{"159":1}}],["`bool`",{"2":{"146":2}}],["`buffer`",{"2":{"60":1}}],["`barycentric",{"2":{"59":3}}],["`radialdistance`",{"2":{"180":1}}],["`ratio`",{"2":{"180":2,"184":3}}],["`reproject`",{"2":{"173":1}}],["`rebuild`",{"2":{"155":1}}],["`r`",{"2":{"59":1}}],["`rᵢ`",{"2":{"59":1}}],["`segmentize`",{"2":{"188":1}}],["`semimajor",{"2":{"157":1}}],["`svector`",{"2":{"185":3}}],["`simplifyalg`",{"2":{"180":2}}],["`simplify",{"2":{"180":1}}],["`simplify`",{"2":{"180":2}}],["`source",{"2":{"172":3}}],["`spherical`",{"2":{"157":1}}],["`s`",{"2":{"59":1}}],["`sᵢ`",{"2":{"59":2}}],["`s2`",{"2":{"59":1}}],["`s1`",{"2":{"59":1}}],["`hcat`",{"2":{"59":1}}],["`x`",{"2":{"153":1,"159":1}}],["`xs`",{"2":{"146":1}}],["`x1",{"2":{"59":1}}],["`x1`",{"2":{"59":2}}],["`x2`",{"2":{"59":1}}],["`visvalingamwhyatt`",{"2":{"180":1}}],["`vector",{"2":{"172":1}}],["`vector`",{"2":{"146":1,"153":1}}],["`vᵢ`",{"2":{"59":1}}],["`v`",{"2":{"59":1}}],["`values`",{"2":{"59":1,"146":1}}],["`λs`",{"2":{"59":2}}],["`",{"2":{"59":2,"70":1,"71":2,"73":1,"74":3,"75":1,"76":2,"146":3,"153":2,"157":1,"164":2,"170":1,"172":2,"177":1,"180":3,"188":2,"189":1}}],["∈",{"2":{"14":1}}],["~",{"2":{"14":3}}],["$ratio",{"2":{"184":1}}],["$rectangle",{"2":{"176":2}}],["$number",{"2":{"184":1}}],["$name",{"2":{"27":4}}],["$min",{"2":{"184":1}}],["$douglas",{"2":{"180":1,"182":1}}],["$simplify",{"2":{"180":1,"181":1,"183":1}}],["$lg",{"2":{"176":1}}],["$lin",{"2":{"176":2}}],["$geom",{"2":{"180":8}}],["$geo",{"2":{"176":1}}],["$calc",{"2":{"154":1}}],["$crs",{"2":{"154":1,"166":1}}],["$apply",{"2":{"153":1,"171":1,"172":1,"180":1}}],["$tol",{"2":{"184":1}}],["$threaded",{"2":{"154":1}}],["$t",{"2":{"88":1,"153":2,"170":2}}],["$target",{"2":{"71":1,"74":1,"76":1,"155":3}}],["$trait",{"2":{"69":1,"71":2,"74":2,"76":2}}],["$",{"2":{"13":4,"14":1,"59":4,"64":2,"146":3,"164":4,"177":1,"180":12,"188":1}}],["|=",{"2":{"116":4,"122":1}}],["||",{"2":{"53":2,"64":13,"66":8,"69":1,"73":1,"74":5,"75":1,"88":18,"105":2,"116":8,"122":1,"127":1,"146":7,"182":1,"184":3}}],["|",{"2":{"11":4,"116":1}}],["|>",{"2":{"11":8,"13":2,"155":3,"175":1,"176":1,"180":3,"199":2}}],["↩︎",{"2":{"6":1}}],["ᵢᵢᵢ₊₁ᵢᵢ₊₁ᵢᵢ₊₁tᵢ=det",{"2":{"6":1}}],["⋅",{"2":{"6":1,"59":1}}],["qy",{"2":{"13":2,"14":2}}],["qx",{"2":{"13":2,"14":2}}],["q",{"2":{"13":13,"14":12,"64":4}}],["qhull",{"2":{"6":1,"82":1}}],["queue",{"2":{"182":41}}],["questions",{"2":{"74":1}}],["quite",{"2":{"161":1,"199":1}}],["quickhull",{"2":{"6":1,"77":1,"82":2}}],["quick",{"2":{"4":2,"6":1,"59":1,"166":1,"179":1}}],["quality",{"2":{"6":1,"180":1}}],["quantity",{"2":{"6":1,"176":1}}],["quot",{"2":{"1":8,"6":12,"20":2,"64":8,"84":2,"85":2,"88":2,"93":4,"116":10,"150":8,"151":2,"153":2,"155":4,"170":2,"174":6,"191":2,"198":2}}],["ϕ",{"2":{"6":1}}],["θ",{"2":{"6":1,"191":7,"192":3,"193":5}}],["zone",{"2":{"192":1}}],["zoom",{"2":{"14":1}}],["zs",{"2":{"146":5}}],["zip",{"2":{"13":1,"14":1,"191":4,"192":1,"193":1}}],["zeros",{"2":{"59":1,"66":1}}],["zero",{"2":{"4":12,"6":8,"56":11,"63":3,"64":4,"66":11,"74":22,"84":1,"85":3,"145":1,"153":1,"182":4}}],["z",{"2":{"4":2,"5":2,"6":4,"59":3,"88":3,"146":3,"157":1,"171":1,"185":1,"186":1}}],["0e6",{"2":{"192":6}}],["0example",{"2":{"6":1}}],["097075198097933",{"2":{"193":1}}],["09707519809793252",{"2":{"193":2}}],["091887951911644",{"2":{"193":3}}],["0999933334666654",{"2":{"191":1}}],["09801605542096",{"2":{"191":1}}],["098016055420953",{"2":{"191":3}}],["09297443860091348",{"2":{"191":4}}],["09",{"2":{"58":1}}],["08506974233813636",{"2":{"193":2}}],["08",{"2":{"58":1}}],["062749678615475",{"2":{"193":1}}],["06274967861547665",{"2":{"193":2}}],["06592462566760626",{"2":{"191":1}}],["0650624499034016",{"2":{"191":4}}],["06",{"2":{"58":1}}],["02017324484778",{"2":{"193":1}}],["020173244847778715",{"2":{"193":2}}],["027886421973952302",{"2":{"191":4}}],["02",{"2":{"58":3}}],["04500741774392",{"2":{"193":1}}],["045007417743918",{"2":{"193":2}}],["049999166670833324",{"2":{"191":1}}],["0438052480035",{"2":{"191":1}}],["043805248003498",{"2":{"191":3}}],["04",{"2":{"58":6}}],["07518688541961",{"2":{"193":1}}],["075186885419612",{"2":{"193":2}}],["071",{"2":{"175":2,"176":2}}],["07",{"2":{"58":6,"175":6,"176":6}}],["009176636029576",{"2":{"193":1}}],["0091766360295773",{"2":{"193":2}}],["003135308800957",{"2":{"193":1}}],["0031353088009582475",{"2":{"193":2}}],["0035114210915891397",{"2":{"191":4}}],["006784125578492062",{"2":{"193":2}}],["0020133807972559925",{"2":{"193":2}}],["00839489109211",{"2":{"193":3}}],["008696",{"2":{"3":2,"6":3,"73":1,"74":1,"118":1,"119":1}}],["005465967083412071",{"2":{"191":4}}],["00111595449914",{"2":{"191":1}}],["001115954499138",{"2":{"191":3}}],["0010075412835199304",{"2":{"191":4}}],["001",{"2":{"180":1}}],["00085222666982",{"2":{"193":3}}],["000577332369005",{"2":{"193":1}}],["0005773323690041465",{"2":{"193":2}}],["000510363870095e6",{"2":{"192":2}}],["00025191811248184703",{"2":{"193":2}}],["000215611503127e6",{"2":{"192":2}}],["0007260527263e6",{"2":{"192":2}}],["000342160541625e6",{"2":{"192":2}}],["000124843834609e6",{"2":{"192":2}}],["000063948817746e6",{"2":{"192":2}}],["000026987852369e6",{"2":{"192":2}}],["000008144045314",{"2":{"193":1}}],["000007998400139e6",{"2":{"192":2}}],["000000999950001e6",{"2":{"192":2}}],["00001e6",{"2":{"192":1}}],["0004397316773170068",{"2":{"191":4}}],["000",{"2":{"180":1,"196":1}}],["00",{"2":{"58":2}}],["053798628882221644",{"2":{"193":2}}],["05877989361332",{"2":{"191":1}}],["058779893613323",{"2":{"191":3}}],["05416726609360478",{"2":{"191":4}}],["05",{"2":{"58":1}}],["052704767595",{"2":{"15":1}}],["037564867762832",{"2":{"193":1}}],["03756486776283019",{"2":{"193":2}}],["031245035570328428",{"2":{"193":2}}],["033518309870985",{"2":{"193":3}}],["03503632062070827",{"2":{"191":4}}],["03",{"2":{"58":4}}],["01458815628695",{"2":{"193":3}}],["016044338630866517",{"2":{"193":2}}],["01592650896568995",{"2":{"191":1}}],["01597247419241532",{"2":{"191":4}}],["01908693278165",{"2":{"191":1}}],["019086932781654",{"2":{"191":3}}],["01098781325325",{"2":{"191":1}}],["010987813253244",{"2":{"191":3}}],["011814947665167774",{"2":{"191":4}}],["01362848005",{"2":{"15":1}}],["01",{"2":{"14":1,"58":1,"175":1,"176":1,"191":1,"192":1,"193":1}}],["0^",{"2":{"13":2,"14":2}}],["0+2",{"2":{"13":2,"14":2}}],["0",{"2":{"3":70,"4":24,"6":190,"11":1,"13":5,"14":8,"15":32,"52":20,"53":3,"55":9,"56":4,"58":155,"59":2,"62":6,"63":6,"64":49,"65":13,"66":5,"68":22,"69":49,"70":42,"73":2,"74":21,"75":46,"76":2,"80":1,"84":20,"85":2,"87":13,"88":18,"90":16,"93":6,"94":12,"96":6,"97":6,"105":9,"107":15,"116":37,"121":13,"122":9,"124":12,"125":11,"134":16,"145":21,"146":7,"157":1,"161":24,"168":64,"169":4,"175":16,"176":13,"177":1,"180":11,"182":7,"184":4,"189":2,"191":129,"192":2,"193":46,"198":13}}],[">=",{"2":{"59":6,"105":4,"122":1,"184":1}}],[">geometryops",{"2":{"6":2}}],[">",{"2":{"1":2,"6":6,"11":2,"13":1,"15":2,"46":1,"53":1,"59":1,"64":17,"66":3,"69":5,"70":1,"71":1,"74":2,"75":1,"76":3,"84":1,"88":1,"105":8,"116":10,"122":2,"145":4,"146":12,"155":6,"164":1,"169":3,"177":2,"180":1,"182":12,"184":3,"185":1,"189":1,"199":1}}],["914930257661865",{"2":{"193":1}}],["96875496442967",{"2":{"193":1}}],["961329",{"2":{"3":2,"6":3,"73":1,"74":1,"118":1,"119":1}}],["983955661369134",{"2":{"193":1}}],["9833",{"2":{"15":1}}],["9877550012664",{"2":{"191":1}}],["9840085315131",{"2":{"191":1}}],["98271048511609",{"2":{"191":1}}],["98661575256801",{"2":{"191":1}}],["99321587442151",{"2":{"193":1}}],["99375130197483",{"2":{"191":1}}],["997986619202745",{"2":{"193":1}}],["997750168744936",{"2":{"191":1}}],["997247091122496",{"2":{"191":1}}],["99600053330489",{"2":{"191":1}}],["991002699676024",{"2":{"191":1}}],["990022362600165",{"2":{"191":1}}],["99292997455441",{"2":{"191":1}}],["99533829767195",{"2":{"191":1}}],["99865616402829",{"2":{"191":1}}],["999999967681458e6",{"2":{"192":2}}],["999997707902938e6",{"2":{"192":2}}],["999987539891298e6",{"2":{"192":2}}],["999963474314044e6",{"2":{"192":2}}],["999919535736425e6",{"2":{"192":2}}],["999974634566875",{"2":{"191":1}}],["999849768598615e6",{"2":{"192":2}}],["999748081887518",{"2":{"193":1}}],["999748243174828e6",{"2":{"192":2}}],["999750002083324",{"2":{"191":1}}],["999609061508909e6",{"2":{"192":2}}],["999426363321033e6",{"2":{"192":2}}],["999194331880103e6",{"2":{"192":2}}],["99900003333289",{"2":{"191":1}}],["999565375483215",{"2":{"191":1}}],["97976366505997",{"2":{"191":1}}],["9783069507679",{"2":{"191":1}}],["97",{"2":{"58":1}}],["946201371117777",{"2":{"193":1}}],["94",{"2":{"58":1}}],["92",{"2":{"58":1}}],["9im",{"0":{"35":1},"1":{"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1},"2":{"116":2,"197":1}}],["95770326033",{"2":{"15":1}}],["95",{"2":{"13":1,"14":1,"196":1}}],["900",{"2":{"176":1}}],["90063612163",{"2":{"11":2}}],["90`",{"2":{"157":1}}],["909318372607",{"2":{"11":3}}],["90",{"2":{"6":2,"52":9,"58":1}}],["9",{"2":{"1":2,"6":1,"116":2,"145":12,"175":1,"185":1}}],["897070",{"2":{"196":1}}],["873633668827033",{"2":{"193":1}}],["8135804051007",{"2":{"191":1}}],["813580405100698",{"2":{"191":3}}],["88",{"2":{"58":1}}],["86641841658641",{"2":{"191":1}}],["866418416586406",{"2":{"191":3}}],["86",{"2":{"58":1}}],["868447876892",{"2":{"15":2}}],["84",{"2":{"58":1}}],["821068835162155",{"2":{"193":1}}],["82",{"2":{"58":1}}],["800",{"2":{"58":1}}],["80000",{"2":{"15":5}}],["80",{"2":{"58":1}}],["80869813739",{"2":{"15":2}}],["856614689791036e",{"2":{"15":2}}],["83572303404496",{"2":{"6":2,"73":1,"74":1}}],["8",{"2":{"1":6,"6":9,"13":1,"14":1,"70":2,"75":4,"116":1,"146":3,"157":1,"175":1,"185":3,"193":2}}],["karnataka",{"2":{"199":1}}],["kbn",{"2":{"11":2}}],["kinds",{"2":{"49":1}}],["kind",{"2":{"9":1,"146":1,"197":1}}],["k",{"2":{"6":1,"14":6,"59":1,"64":5,"116":5,"191":5,"193":5}}],["kernel",{"2":{"177":4}}],["keepat",{"2":{"75":1,"169":2}}],["keep",{"2":{"64":3,"146":1,"169":14,"175":1,"198":1}}],["keeping",{"2":{"6":1,"153":1,"171":1}}],["keys",{"2":{"146":4,"153":1}}],["key",{"2":{"6":1,"146":4,"153":2,"188":5}}],["keyword",{"0":{"154":1},"2":{"6":8,"49":1,"70":1,"73":1,"75":1,"153":1,"154":7,"166":2,"176":2,"188":4,"192":1,"193":1}}],["keywords",{"2":{"1":4,"4":2,"6":10,"116":2,"146":1,"153":1,"154":1,"166":1,"171":2,"172":3,"180":8,"181":1,"182":1,"183":1,"184":1,"186":2}}],["known",{"2":{"66":2}}],["know",{"2":{"6":3,"53":2,"64":1,"66":1,"70":1,"73":1,"74":2,"75":1,"76":1,"153":1,"198":1}}],["kwargs",{"2":{"28":2,"60":3,"66":1,"69":1,"70":3,"71":3,"73":4,"74":5,"75":3,"76":5,"164":2,"173":1,"176":1}}],["kwdef",{"2":{"27":1,"64":1,"157":2,"176":1,"181":1,"182":1,"183":1}}],["kw",{"2":{"1":2,"6":11,"116":10,"146":20,"150":2,"153":18,"155":2,"170":3,"171":3,"180":15,"183":1,"185":3,"186":3,"188":6}}],["json",{"2":{"195":3}}],["jstep",{"2":{"88":3}}],["jstart",{"2":{"88":7}}],["joined",{"2":{"198":4}}],["joins",{"0":{"197":1},"1":{"198":1,"199":1,"200":1},"2":{"197":3}}],["joinpath",{"2":{"180":2}}],["join",{"2":{"153":1,"170":1,"197":4,"198":5,"200":1}}],["joining",{"2":{"6":2,"180":1,"197":1}}],["jpn",{"2":{"199":2}}],["jp",{"2":{"88":2}}],["jhole",{"2":{"88":2}}],["jh",{"2":{"76":5}}],["j+1",{"2":{"64":1,"146":1,"184":1}}],["j",{"2":{"64":24,"88":8,"105":9,"116":12,"145":2,"146":8,"184":2}}],["jet",{"2":{"58":1}}],["just",{"2":{"4":2,"6":1,"28":1,"63":1,"64":2,"74":4,"76":1,"81":1,"85":2,"146":1,"151":1,"153":2,"156":1,"170":1,"176":1,"197":1}}],["julialand",{"2":{"192":2}}],["julialines",{"2":{"55":1}}],["julialinearsegments",{"2":{"6":1}}],["juliahole",{"2":{"191":1}}],["juliaxoffset",{"2":{"191":3,"193":1}}],["juliax",{"2":{"191":2}}],["juliaxrange",{"2":{"84":1}}],["julia$apply",{"2":{"186":1}}],["julia$threaded",{"2":{"166":1}}],["julia6",{"2":{"180":1}}],["julia```jldoctest",{"2":{"189":1}}],["julia```julia",{"2":{"146":1}}],["julia```",{"2":{"105":1,"158":1}}],["julia1",{"2":{"70":1,"73":1,"74":1,"75":1}}],["julia2",{"2":{"69":1}}],["juliabase",{"2":{"59":1,"85":4,"153":1,"188":1}}],["juliabarycentric",{"2":{"5":6,"6":3}}],["juliafig",{"2":{"191":1,"192":1}}],["juliafalse",{"2":{"145":1}}],["juliafunction",{"2":{"28":1,"31":1,"32":1,"33":1,"34":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"53":2,"59":3,"60":2,"63":1,"64":11,"66":2,"69":1,"71":1,"74":2,"76":1,"82":1,"85":8,"116":6,"122":2,"127":1,"147":1,"155":4,"170":2,"173":1,"176":1,"184":2}}],["juliafor",{"2":{"27":1,"153":1,"170":1}}],["juliaflexijoins",{"2":{"200":1}}],["juliaflipped",{"2":{"148":1}}],["juliaflip",{"2":{"6":1}}],["juliaflatten",{"2":{"6":1}}],["juliagi",{"2":{"11":2}}],["juliago",{"2":{"11":1,"52":1,"55":1,"65":1,"87":1,"90":1,"93":1,"96":1,"107":1,"118":1,"121":1,"124":1,"134":1,"197":1}}],["juliageopoly1",{"2":{"193":1}}],["juliageointerface",{"2":{"189":1}}],["juliageometry",{"2":{"82":1}}],["juliageo",{"2":{"6":2,"157":1}}],["juliageodesic",{"2":{"6":1}}],["juliageodesicsegments",{"2":{"6":1}}],["juliageos",{"2":{"6":1}}],["juliaweighted",{"2":{"6":1}}],["juliawithin",{"2":{"3":2,"6":1}}],["juliausing",{"2":{"6":1,"13":1,"14":1,"58":1,"175":2,"176":1,"179":1,"180":1,"194":1,"197":1}}],["juliaunion",{"2":{"6":1}}],["juliaunionintersectingpolygons",{"2":{"6":1,"165":1}}],["juliaunwrap",{"2":{"6":1,"155":6}}],["juliaplot",{"2":{"192":2}}],["juliaplanar",{"2":{"6":1}}],["juliap1",{"2":{"191":1}}],["juliapoly",{"2":{"192":1}}],["juliapolygon3",{"2":{"192":1}}],["juliapolygon1",{"2":{"191":1}}],["juliapolygonize",{"2":{"6":1}}],["juliapolygon",{"2":{"6":1}}],["juliapoints",{"2":{"198":1}}],["juliapoint",{"2":{"191":1}}],["juliavisvalingamwhyatt",{"2":{"6":1}}],["juliaring3",{"2":{"192":1}}],["juliaring1",{"2":{"191":1}}],["juliar",{"2":{"191":2,"192":1,"193":1}}],["juliareconstruct",{"2":{"6":1}}],["juliarebuild",{"2":{"6":1}}],["juliareproject",{"2":{"1":2}}],["juliaradialdistance",{"2":{"6":1}}],["juliamy",{"2":{"200":1}}],["juliamultipoly",{"2":{"180":1}}],["juliamodule",{"2":{"27":1}}],["juliamonotonechainmethod",{"2":{"6":1}}],["juliameanvalue",{"2":{"6":1}}],["juliascatter",{"2":{"198":1}}],["juliasource",{"2":{"192":2}}],["juliasimplify",{"2":{"6":1,"180":3}}],["juliasigned",{"2":{"4":4,"6":2}}],["juliasegmentize",{"2":{"6":1}}],["julias1",{"2":{"6":1}}],["juliastruct",{"2":{"6":2}}],["juliaspherical",{"2":{"6":1}}],["juliadf",{"2":{"194":1}}],["juliadestination",{"2":{"192":1}}],["juliadouglaspeucker",{"2":{"6":1}}],["juliadifference",{"2":{"6":1}}],["juliadiffintersectingpolygons",{"2":{"6":1,"165":1}}],["juliadistance",{"2":{"4":2,"6":1}}],["juliadisjoint",{"2":{"3":2,"6":1}}],["juliaexport",{"2":{"51":1,"54":1,"57":1,"61":1,"67":1,"70":1,"73":1,"75":1,"83":1,"86":1,"89":1,"92":1,"95":1,"106":1,"117":1,"120":1,"123":1,"133":1,"143":1,"146":1,"148":1,"157":1,"160":1,"163":1,"167":1,"170":1,"172":1,"174":1,"180":1,"187":1}}],["juliaend",{"2":{"85":1}}],["juliaenforce",{"2":{"6":1}}],["juliaenum",{"2":{"6":2}}],["juliaembed",{"2":{"4":2,"6":1}}],["juliaequals",{"2":{"4":30,"6":15,"64":1}}],["juliaaccuratearithmetic",{"2":{"11":2}}],["juliaabstract",{"2":{"6":5,"164":2,"165":1,"176":1}}],["juliaangles",{"2":{"4":2,"6":1}}],["juliaarea",{"2":{"4":2,"6":1}}],["juliaapplyreduce",{"2":{"1":2,"6":1,"150":2}}],["juliaapply",{"2":{"1":2,"6":1,"18":1,"150":2}}],["juliacent",{"2":{"62":1}}],["juliacentroid",{"2":{"4":2,"6":3}}],["juliacut",{"2":{"6":1}}],["juliaclosedring",{"2":{"6":1,"165":1}}],["juliaconst",{"2":{"53":1,"56":1,"59":1,"64":1,"66":2,"85":1,"97":1,"108":1,"125":1,"135":1,"154":1}}],["juliaconvex",{"2":{"6":1,"82":1}}],["juliacontains",{"2":{"3":2,"6":1}}],["juliacoverage",{"2":{"6":1}}],["juliacovers",{"2":{"3":2,"6":1}}],["juliacoveredby",{"2":{"3":2,"6":1}}],["juliatrue",{"2":{"88":1,"91":1,"94":1,"97":1,"108":1,"119":1,"122":1,"125":1,"135":1,"145":1}}],["juliatraittarget",{"2":{"6":2,"158":1}}],["juliatransform",{"2":{"1":2,"6":1}}],["juliatuples",{"2":{"6":1}}],["juliat",{"2":{"6":1}}],["juliatouches",{"2":{"3":2,"6":1}}],["juliaoverlaps",{"2":{"3":18,"6":9}}],["juliainnerjoin",{"2":{"199":1}}],["juliaintersection",{"2":{"6":2}}],["juliaintersects",{"2":{"3":2}}],["juliaisconcave",{"2":{"6":1}}],["juliaisclockwise",{"2":{"6":1}}],["juliaimport",{"2":{"1":2,"3":18,"4":2,"6":18,"11":1,"28":1,"52":1,"55":1,"62":1,"65":1,"68":1,"79":1,"80":1,"81":1,"84":1,"87":1,"90":1,"93":1,"96":1,"107":1,"118":1,"121":1,"124":1,"134":1,"150":2,"161":2,"168":2,"175":1,"195":4,"196":1,"198":1,"199":1}}],["julia",{"2":{"3":2,"6":6,"9":1,"15":1,"21":1,"23":1,"27":3,"28":2,"53":4,"56":10,"59":8,"63":19,"64":60,"66":18,"69":10,"70":6,"71":1,"73":5,"74":29,"75":6,"76":4,"77":1,"82":5,"84":1,"85":4,"88":15,"91":1,"94":1,"98":1,"99":5,"100":1,"101":1,"102":2,"103":1,"104":1,"105":3,"109":1,"110":3,"111":1,"112":1,"113":1,"114":1,"115":1,"116":50,"119":1,"122":7,"126":1,"127":3,"128":1,"129":1,"130":1,"131":1,"132":1,"136":1,"137":3,"138":1,"139":1,"140":2,"141":1,"142":1,"145":9,"146":40,"147":2,"153":44,"155":11,"158":1,"159":1,"162":5,"164":1,"166":1,"169":3,"170":18,"171":1,"172":1,"176":1,"177":2,"180":1,"181":2,"182":15,"183":3,"185":1,"186":1,"187":1,"188":4,"189":1,"190":2,"192":2,"195":2,"198":1}}],["julia>",{"2":{"1":10,"6":7,"145":3,"185":7}}],["juliajulia>",{"2":{"1":4,"6":3}}],["jl`",{"2":{"82":1,"172":1,"188":1}}],["jlmethod",{"2":{"6":2}}],["jlobjecttype",{"2":{"6":2}}],["jlbinding",{"2":{"6":2}}],["jldocstring",{"2":{"6":2}}],["jldoctest",{"2":{"6":1}}],["jl",{"0":{"21":1,"27":1},"2":{"1":20,"4":2,"6":16,"10":2,"11":1,"21":2,"23":2,"27":43,"28":1,"46":1,"48":2,"53":1,"56":1,"59":1,"60":3,"63":1,"64":1,"66":1,"69":1,"71":1,"72":1,"74":1,"76":1,"77":3,"82":6,"85":1,"88":1,"91":1,"94":1,"104":1,"105":1,"115":1,"116":1,"119":1,"122":1,"132":1,"142":1,"145":2,"146":1,"147":1,"153":2,"154":1,"155":2,"157":1,"159":2,"162":1,"165":1,"166":2,"169":1,"170":1,"171":1,"172":4,"173":3,"174":1,"176":3,"177":2,"180":2,"184":1,"185":6,"186":2,"188":2,"189":1,"192":1,"197":1}}],["+5000000",{"2":{"192":1}}],["+proj=natearth2",{"2":{"192":2}}],["+=",{"2":{"56":2,"59":11,"63":6,"64":17,"66":10,"69":1,"88":1,"105":1,"116":5,"145":1,"169":2,"182":4,"189":3}}],["+",{"2":{"1":2,"6":2,"13":1,"14":1,"53":4,"56":1,"59":20,"63":10,"64":15,"66":7,"69":1,"74":10,"85":3,"88":2,"105":2,"116":6,"145":6,"146":2,"150":2,"169":3,"177":2,"182":3,"183":2,"184":2,"191":6,"192":1,"193":4}}],["yticklabelsvisible",{"2":{"192":1}}],["yzfbc",{"2":{"192":1}}],["york",{"2":{"199":1}}],["yoffset",{"2":{"191":7,"193":2}}],["your",{"0":{"195":1},"2":{"18":1,"60":1,"146":1,"148":1,"173":1,"176":1,"194":1,"195":1,"200":2}}],["you",{"0":{"49":1},"2":{"1":2,"4":2,"5":4,"6":11,"9":1,"11":1,"17":1,"18":5,"25":2,"49":1,"53":1,"56":1,"59":8,"60":1,"63":1,"70":1,"73":1,"75":1,"81":1,"82":1,"148":1,"153":1,"158":1,"161":1,"168":1,"170":1,"173":1,"175":1,"176":1,"177":1,"185":1,"192":1,"194":2,"195":3,"198":2,"199":3,"200":4}}],["y=y",{"2":{"189":1}}],["yvec",{"2":{"146":4}}],["ybounds",{"2":{"146":4}}],["yhalf",{"2":{"146":2}}],["ylast",{"2":{"85":3}}],["yfirst",{"2":{"85":5}}],["y0",{"2":{"85":5}}],["yw",{"2":{"66":4}}],["ye",{"2":{"66":4}}],["yet",{"0":{"147":1},"2":{"27":1,"59":1,"69":1,"71":1,"74":1,"76":1,"88":1,"146":1,"147":1,"164":2,"199":1}}],["y2",{"2":{"63":2,"66":18,"85":7,"105":10,"116":5,"122":4,"146":5,"177":6,"189":2}}],["y1",{"2":{"63":2,"66":22,"85":7,"105":11,"116":6,"122":5,"146":5,"177":7,"189":2}}],["yind+1",{"2":{"146":1}}],["yind",{"2":{"146":2}}],["yinterior",{"2":{"63":2}}],["yield",{"2":{"74":1,"176":1}}],["yi+yi−1",{"2":{"6":1}}],["ycentroid",{"2":{"63":13}}],["yrange",{"2":{"58":3,"84":3}}],["yautolimits",{"2":{"58":2}}],["yp2",{"2":{"53":4}}],["ys",{"2":{"6":3,"146":30}}],["ymax",{"2":{"6":1,"65":2,"66":48}}],["ymin",{"2":{"6":1,"65":2,"66":49}}],["y",{"2":{"1":4,"4":2,"6":4,"13":9,"14":10,"53":8,"56":2,"58":8,"62":1,"63":10,"64":6,"65":1,"66":8,"71":6,"74":8,"84":2,"85":7,"88":3,"105":21,"116":16,"122":7,"145":10,"148":2,"150":2,"153":1,"171":4,"172":1,"177":2,"184":1,"185":2,"186":2,"189":7,"191":8,"192":2,"193":2,"197":1}}],["75",{"2":{"84":2,"90":1,"107":1,"134":1}}],["78",{"2":{"58":1}}],["749907",{"2":{"196":1}}],["74",{"2":{"58":1}}],["72",{"2":{"58":1}}],["726711609794",{"2":{"15":1}}],["76",{"2":{"58":1}}],["76085",{"2":{"15":1}}],["768946",{"2":{"3":2,"6":3,"73":1,"74":1,"118":1,"119":1}}],["70440582002419",{"2":{"191":1}}],["704405820024185",{"2":{"191":3}}],["704377648755",{"2":{"15":2}}],["700",{"2":{"14":1}}],["700454",{"2":{"6":1,"179":1,"180":1}}],["701141",{"2":{"6":1,"179":1,"180":1}}],["70",{"2":{"6":20,"58":1,"179":20,"180":20,"191":20}}],["738281",{"2":{"3":2,"6":3,"73":1,"74":1,"118":1,"119":1}}],["7",{"2":{"1":10,"6":5,"116":1,"150":2,"153":1,"175":4,"176":4,"185":4,"193":1}}],["65533525026046",{"2":{"191":1}}],["655335250260467",{"2":{"191":3}}],["659942",{"2":{"6":1,"179":1,"180":1}}],["6378137",{"2":{"157":1}}],["6371008",{"2":{"157":1}}],["639343",{"2":{"6":1,"179":1,"180":1}}],["6area",{"2":{"63":2}}],["66",{"2":{"58":1}}],["668869",{"2":{"6":1,"179":1,"180":1}}],["64744840486518",{"2":{"193":3}}],["64",{"2":{"58":1,"175":2,"176":2}}],["646209",{"2":{"6":1,"179":1,"180":1}}],["629",{"2":{"192":1}}],["62",{"2":{"58":1}}],["624923",{"2":{"6":1,"179":1,"180":1}}],["61366192682",{"2":{"15":1}}],["614624",{"2":{"6":1,"179":1,"180":1}}],["605000000000004",{"2":{"175":2}}],["60",{"2":{"58":1,"175":2}}],["60000",{"2":{"15":3}}],["609817",{"2":{"6":1,"179":1,"180":1}}],["603637",{"2":{"6":2,"179":2,"180":2}}],["68",{"2":{"58":1}}],["682601",{"2":{"6":1,"179":1,"180":1}}],["683975",{"2":{"6":1,"179":1,"180":1}}],["69159119078359",{"2":{"193":3}}],["694274",{"2":{"6":1,"179":1,"180":1}}],["697021",{"2":{"6":1,"179":1,"180":1}}],["6",{"2":{"1":24,"3":8,"6":23,"70":3,"75":3,"116":1,"122":4,"150":6,"153":3,"180":1,"185":9,"193":2}}],["51695367760999",{"2":{"193":1}}],["516953677609987",{"2":{"193":2}}],["51030066635026",{"2":{"191":4}}],["5e6",{"2":{"192":2}}],["55715336218991",{"2":{"193":1}}],["557153362189904",{"2":{"193":2}}],["55",{"2":{"191":3}}],["55494217175954",{"2":{"191":4}}],["57",{"2":{"175":4,"176":4}}],["57725",{"2":{"15":2}}],["5x",{"2":{"153":1}}],["563198",{"2":{"74":1}}],["56",{"2":{"58":1}}],["54",{"2":{"58":1,"191":19}}],["50",{"2":{"58":1,"175":4,"176":4,"191":3}}],["500000",{"2":{"192":1}}],["50000",{"2":{"15":1}}],["500",{"2":{"14":1,"192":1}}],["52",{"2":{"58":1,"196":1}}],["52521",{"2":{"15":1}}],["52709",{"2":{"15":2}}],["594711",{"2":{"6":1,"179":1,"180":1}}],["590591",{"2":{"6":1,"179":1,"180":1}}],["595397",{"2":{"6":1,"179":1,"180":1}}],["535",{"2":{"175":4}}],["5355",{"2":{"175":2}}],["53333",{"2":{"15":4}}],["53",{"2":{"6":10,"175":2,"189":10}}],["58",{"2":{"58":1}}],["58059",{"2":{"15":2}}],["587158",{"2":{"6":2,"179":2,"180":2}}],["58375366067548",{"2":{"6":2,"73":1,"74":1}}],["584961",{"2":{"3":2,"6":3,"73":1,"74":1,"118":1,"119":1}}],["5d",{"2":{"6":1,"21":1,"23":1,"157":1}}],["5",{"2":{"1":58,"3":8,"4":16,"6":84,"13":1,"58":1,"68":5,"69":8,"70":16,"75":18,"84":8,"88":8,"116":1,"122":4,"146":1,"150":4,"153":2,"175":1,"176":1,"185":27,"191":32,"192":25,"200":1}}],["4983491639274692e6",{"2":{"192":2}}],["4986507085647392e6",{"2":{"192":2}}],["497205585568957e6",{"2":{"192":2}}],["4976022389592e6",{"2":{"192":2}}],["4957639801366436e6",{"2":{"192":2}}],["4940253560034204e6",{"2":{"192":2}}],["4946113281484335e6",{"2":{"192":2}}],["491990928929295e6",{"2":{"192":2}}],["4904357734399722e6",{"2":{"192":2}}],["4926709788709967e6",{"2":{"192":2}}],["4962554647802354e6",{"2":{"192":2}}],["499984780817334e6",{"2":{"192":2}}],["4997392479570867e6",{"2":{"192":2}}],["4991939151049731e6",{"2":{"192":2}}],["4994001399837343e6",{"2":{"192":2}}],["4998500087497458e6",{"2":{"192":2}}],["49",{"2":{"146":1}}],["43541888381864",{"2":{"193":3}}],["4326",{"2":{"192":2,"193":3}}],["43787",{"2":{"15":1}}],["439295815226",{"2":{"15":1}}],["434306",{"2":{"6":1,"179":1,"180":1}}],["4896621210021754e6",{"2":{"192":2}}],["489271",{"2":{"6":4,"189":4}}],["4870405593989636e6",{"2":{"192":2}}],["4879072738504685e6",{"2":{"192":2}}],["484003",{"2":{"145":4}}],["482551",{"2":{"145":4}}],["48268",{"2":{"15":1}}],["48",{"2":{"58":1}}],["48001",{"2":{"15":1}}],["45",{"2":{"58":2,"145":12,"191":2}}],["450",{"2":{"13":1}}],["458369",{"2":{"6":2,"179":2,"180":2}}],["42004014766201",{"2":{"191":1}}],["420040147662014",{"2":{"191":3}}],["4219350464667047e",{"2":{"191":4}}],["42",{"2":{"13":1,"14":1,"58":3}}],["426283",{"2":{"6":1,"179":1,"180":1}}],["400",{"2":{"58":3}}],["40000",{"2":{"15":1}}],["40",{"2":{"14":1,"58":3}}],["406224",{"2":{"6":1,"179":1,"180":1}}],["404504",{"2":{"6":1,"179":1,"180":1}}],["41544701408748197",{"2":{"191":1}}],["41",{"2":{"58":1,"193":20}}],["41878",{"2":{"15":1}}],["414248",{"2":{"6":1,"179":1,"180":1}}],["419406",{"2":{"6":1,"179":1,"180":1}}],["4493927459900552",{"2":{"191":1}}],["44121252392",{"2":{"15":1}}],["44",{"2":{"14":1,"58":2}}],["442901",{"2":{"6":1,"179":1,"180":1}}],["446339",{"2":{"6":1,"179":1,"180":1}}],["477985",{"2":{"145":4}}],["47",{"2":{"58":3}}],["473835",{"2":{"6":1,"179":1,"180":1}}],["472117",{"2":{"6":2,"179":2,"180":2}}],["46525251631344455",{"2":{"191":1}}],["465816",{"2":{"6":1,"179":1,"180":1}}],["46",{"2":{"58":3}}],["468107",{"2":{"6":1,"179":1,"180":1}}],["464547",{"2":{"6":6,"189":6}}],["4",{"2":{"1":22,"3":8,"6":15,"9":2,"13":2,"14":1,"52":1,"66":1,"91":1,"94":1,"108":1,"116":2,"135":1,"145":1,"150":6,"153":3,"175":1,"182":1,"185":8,"192":20,"195":2,"196":1}}],["358421",{"2":{"196":1}}],["3585",{"2":{"175":1}}],["35",{"2":{"58":3}}],["354492",{"2":{"3":2,"6":3,"73":1,"74":1,"118":1,"119":1}}],["38042741557976",{"2":{"191":1}}],["380427415579764",{"2":{"191":3}}],["38",{"2":{"58":3}}],["3655999675063154",{"2":{"191":1}}],["36",{"2":{"58":2}}],["360",{"2":{"53":1}}],["36022",{"2":{"15":1}}],["327284472232776",{"2":{"193":3}}],["32610",{"2":{"192":3}}],["32",{"2":{"58":3}}],["377956",{"2":{"196":1}}],["37",{"2":{"58":5}}],["3497142366876638",{"2":{"191":1}}],["34",{"2":{"58":3}}],["31571636123306385",{"2":{"191":1}}],["31",{"2":{"58":2}}],["30151010318639",{"2":{"191":4}}],["30527612515520186",{"2":{"191":4}}],["300",{"2":{"84":1}}],["30",{"2":{"14":2,"58":3,"191":2}}],["3376428491230612",{"2":{"191":4}}],["3390",{"2":{"116":1}}],["33333333333",{"2":{"15":1}}],["333333333336",{"2":{"15":3}}],["33",{"2":{"6":20,"179":20,"180":20}}],["3d",{"2":{"4":2,"6":1,"59":2,"88":1,"155":1,"174":1}}],["3",{"2":{"1":26,"3":8,"5":2,"6":31,"14":2,"59":13,"62":6,"64":1,"70":6,"75":5,"87":1,"91":1,"94":1,"108":1,"116":2,"121":1,"135":1,"146":7,"150":6,"153":3,"157":2,"168":16,"175":4,"180":3,"182":2,"184":1,"185":11,"192":1,"193":1,"198":1}}],["39945867303846",{"2":{"193":3}}],["3995734698458635",{"2":{"191":1}}],["399918",{"2":{"6":2,"179":2,"180":2}}],["394759",{"2":{"6":1,"179":1,"180":1}}],["392466",{"2":{"6":1,"179":1,"180":1}}],["395332",{"2":{"6":1,"179":1,"180":1}}],["39",{"0":{"26":1},"2":{"0":1,"3":2,"4":10,"6":22,"7":1,"9":2,"17":2,"18":1,"19":1,"25":1,"28":1,"49":1,"53":1,"55":1,"56":1,"57":1,"58":3,"59":2,"62":6,"63":3,"64":28,"66":1,"68":1,"69":1,"71":1,"73":4,"74":1,"76":2,"81":2,"85":4,"88":7,"93":2,"96":1,"110":2,"116":19,"122":1,"124":2,"127":2,"146":3,"148":2,"153":5,"155":4,"158":2,"159":3,"165":6,"167":1,"170":4,"175":6,"176":1,"178":1,"180":2,"188":6,"190":1,"191":6,"192":6,"193":4,"194":4,"195":5,"197":1,"199":1,"200":2}}],["2pi",{"2":{"191":1,"192":1,"193":1}}],["2nd",{"2":{"74":6}}],["2335447787454",{"2":{"193":1}}],["233544778745394",{"2":{"193":2}}],["23",{"2":{"58":3,"116":1}}],["23699059147",{"2":{"15":1}}],["28",{"2":{"58":2}}],["28083",{"2":{"15":2}}],["2658011835867806",{"2":{"191":1}}],["26745668457025",{"2":{"191":1}}],["267456684570245",{"2":{"191":3}}],["26",{"2":{"58":5,"116":2}}],["24989584635339165",{"2":{"191":1}}],["24279488312757858",{"2":{"191":4}}],["24",{"2":{"58":7,"116":1,"193":9}}],["274364",{"2":{"70":1,"73":1,"75":1}}],["274363",{"2":{"70":1,"73":1,"75":1}}],["27",{"2":{"58":2}}],["275543",{"2":{"6":6,"189":6}}],["2^",{"2":{"14":1}}],["2158594260436434",{"2":{"191":1}}],["215118",{"2":{"6":4,"189":4}}],["21664550952386064",{"2":{"191":4}}],["21",{"2":{"58":4,"116":2,"193":40}}],["21427",{"2":{"11":5}}],["25",{"2":{"58":3,"90":1,"116":1,"134":1,"193":12}}],["258",{"2":{"11":1}}],["257223563`",{"2":{"176":1}}],["257223563",{"2":{"6":2,"157":1,"176":1}}],["295828190107045",{"2":{"193":1}}],["29582819010705",{"2":{"193":2}}],["299820032397223",{"2":{"191":1}}],["29",{"2":{"58":3,"196":1}}],["29th",{"0":{"8":1},"1":{"9":1,"10":1}}],["298",{"2":{"6":2,"157":1,"176":2}}],["20340",{"2":{"195":1}}],["20682326747054",{"2":{"193":1}}],["206823267470536",{"2":{"193":2}}],["20093817218219",{"2":{"191":1}}],["200938172182195",{"2":{"191":3}}],["2018",{"2":{"116":1}}],["2017",{"2":{"6":1,"59":1}}],["20",{"2":{"58":3,"116":2,"191":60,"193":1}}],["2024",{"0":{"7":1,"8":1},"1":{"9":1,"10":1}}],["20th",{"0":{"7":1}}],["2d",{"2":{"6":2,"21":1,"23":1,"157":4,"174":1}}],["22",{"2":{"58":3,"116":1}}],["22168",{"2":{"3":2,"6":3,"73":1,"74":1,"118":1,"119":1}}],["224758",{"2":{"3":2,"6":3,"73":1,"74":1,"118":1,"119":1}}],["2",{"2":{"1":38,"3":18,"5":2,"6":52,"13":1,"14":1,"15":3,"21":2,"23":2,"28":1,"53":3,"56":1,"58":6,"59":32,"62":2,"63":4,"64":10,"65":6,"66":7,"68":1,"69":2,"74":2,"75":1,"79":1,"80":1,"81":3,"82":1,"84":1,"85":3,"88":4,"91":2,"94":2,"105":2,"107":2,"108":3,"116":11,"135":2,"145":2,"146":23,"150":4,"153":4,"157":2,"169":1,"170":1,"177":1,"180":5,"182":7,"183":7,"184":5,"185":18,"189":11,"191":7,"192":6,"193":10,"194":1,"196":1}}],["1st",{"2":{"74":6}}],["198232937815632",{"2":{"193":1}}],["19823293781563178",{"2":{"193":2}}],["1999466709331708",{"2":{"191":1}}],["1998",{"2":{"70":1,"73":1,"75":1}}],["19",{"2":{"58":2,"116":2}}],["11591614996189725",{"2":{"191":1}}],["11966707868197",{"2":{"191":1}}],["119667078681967",{"2":{"191":3}}],["110m",{"2":{"192":2}}],["110",{"2":{"80":1,"192":1}}],["11",{"2":{"15":2,"58":2,"116":1}}],["1145",{"2":{"70":1,"73":1,"75":1}}],["114",{"2":{"7":1}}],["16589608273778408",{"2":{"191":1}}],["165644",{"2":{"145":2}}],["16692537029320365",{"2":{"191":4}}],["166644",{"2":{"145":2}}],["163434",{"2":{"145":2}}],["169356",{"2":{"145":2}}],["164434",{"2":{"145":2}}],["16111",{"2":{"15":1}}],["16",{"2":{"13":1,"14":1,"58":2,"116":2}}],["18593721105",{"2":{"15":1}}],["18",{"2":{"13":1,"14":1,"58":3,"116":2}}],["180",{"2":{"6":2,"53":1,"145":1,"157":2}}],["13309630561615",{"2":{"193":3}}],["13401805979",{"2":{"15":2}}],["13",{"2":{"6":3,"58":1,"70":1,"75":2,"116":1}}],["10n",{"2":{"192":1}}],["10832215707812454",{"2":{"191":4}}],["10^9",{"2":{"13":1}}],["1000000",{"2":{"192":1}}],["1000",{"2":{"13":2,"175":2,"192":1,"198":2}}],["100",{"2":{"6":2,"14":3,"79":1,"81":1,"146":2,"196":1}}],["10",{"2":{"6":12,"11":1,"55":1,"58":5,"68":4,"69":10,"70":2,"73":1,"75":2,"87":2,"116":3,"121":2,"176":1,"180":4,"191":1}}],["14182952335953",{"2":{"193":1}}],["14182952335952814",{"2":{"193":2}}],["14404531208901e",{"2":{"193":2}}],["1499775010124783",{"2":{"191":1}}],["1464721641710074",{"2":{"191":4}}],["14",{"2":{"3":2,"6":5,"58":2,"73":2,"74":2,"116":1,"118":1,"119":1,"175":2,"176":2}}],["15488729606723",{"2":{"193":3}}],["15",{"2":{"3":2,"6":4,"58":1,"68":1,"69":1,"73":1,"74":1,"116":1,"118":1,"119":1}}],["17893116483784577",{"2":{"193":2}}],["17289902010158",{"2":{"191":1}}],["172899020101585",{"2":{"191":3}}],["170356",{"2":{"145":2}}],["17",{"2":{"3":2,"6":3,"58":3,"73":1,"74":1,"116":2,"118":1,"119":1}}],["125",{"2":{"6":2,"73":1,"74":1}}],["127",{"2":{"3":2,"6":3,"73":1,"74":1,"118":1,"119":1,"192":1}}],["123",{"2":{"3":2,"6":3,"73":1,"74":1,"118":1,"119":1}}],["12636633117296836",{"2":{"193":2}}],["126",{"2":{"3":2,"6":3,"73":1,"74":1,"118":1,"119":1}}],["12",{"2":{"3":2,"6":5,"58":2,"73":1,"74":1,"116":1,"118":1,"119":1,"199":1}}],["124",{"2":{"3":2,"6":3,"73":1,"74":1,"118":1,"119":1}}],["1",{"2":{"1":16,"3":76,"6":64,"13":1,"14":4,"15":1,"52":4,"53":15,"55":7,"57":2,"58":11,"59":16,"62":4,"63":7,"64":72,"65":9,"66":15,"68":1,"69":10,"71":3,"74":9,"75":4,"76":11,"81":6,"84":7,"85":6,"88":16,"90":2,"91":6,"93":2,"94":8,"96":2,"97":2,"105":12,"107":2,"108":5,"116":38,"122":6,"124":4,"125":5,"127":1,"134":2,"135":6,"145":16,"146":27,"150":4,"153":6,"155":1,"161":12,"162":2,"169":9,"170":3,"176":1,"177":4,"180":8,"182":15,"183":3,"184":15,"185":6,"189":9,"191":8,"192":44,"193":12,"194":1,"198":8,"199":3}}],["nselected",{"2":{"184":3}}],["nmax",{"2":{"184":2}}],["nice",{"2":{"182":1}}],["n+1",{"2":{"161":1}}],["nfeature",{"2":{"153":1,"170":1}}],["nkeys",{"2":{"146":8}}],["nc",{"2":{"116":13}}],["ncoord",{"2":{"88":2}}],["nl",{"2":{"116":11}}],["nhole",{"2":{"64":2,"70":2,"73":2,"75":2,"76":1,"88":2}}],["nbpts",{"2":{"64":2}}],["ngeom",{"2":{"63":1,"153":2,"170":1,"189":1}}],["nt",{"2":{"188":2}}],["ntasks",{"2":{"153":3,"170":3}}],["nthreads",{"2":{"153":2,"170":2}}],["nthe",{"2":{"60":1,"173":1,"176":1}}],["ntuple",{"2":{"59":3,"177":1}}],["n2",{"2":{"59":8,"88":10}}],["n1",{"2":{"59":8,"88":9}}],["np2",{"2":{"105":4}}],["npolygon",{"2":{"71":1,"88":3,"169":2}}],["npoints",{"2":{"53":6,"64":5,"116":3,"176":6,"182":7}}],["npoint",{"2":{"6":1,"53":2,"55":1,"56":1,"66":2,"81":2,"85":1,"88":6,"105":6,"116":6,"127":1,"145":2,"162":1,"176":3,"177":1,"180":14,"184":1,"189":13}}],["npts",{"2":{"64":6,"182":3}}],["np",{"2":{"56":2,"85":5}}],["null",{"2":{"28":1,"176":1}}],["numeric",{"2":{"11":1}}],["numbers",{"2":{"6":1,"7":1,"57":2,"59":1,"176":1}}],["number=6",{"2":{"6":1,"179":1,"180":1}}],["number",{"2":{"6":11,"59":1,"64":2,"69":1,"77":1,"81":1,"84":1,"88":2,"116":2,"174":1,"175":1,"177":1,"180":2,"181":4,"182":7,"183":4,"184":12}}],["n",{"2":{"6":1,"9":1,"57":2,"59":36,"60":2,"64":51,"69":10,"75":4,"76":4,"116":11,"127":2,"145":6,"146":5,"161":1,"169":25,"173":2,"176":2,"177":3,"180":2,"184":7,"189":32}}],["naive",{"2":{"72":1}}],["napts",{"2":{"64":3}}],["navigate",{"0":{"22":1}}],["natearth2",{"2":{"192":1}}],["natural",{"2":{"180":1,"192":2,"197":1}}],["naturalearth",{"2":{"11":2,"80":2,"180":3,"192":1}}],["nature",{"2":{"146":1}}],["native",{"2":{"6":1,"147":1,"188":4,"195":1}}],["nan",{"2":{"9":1}}],["named",{"2":{"153":1}}],["namedtuple",{"2":{"48":2,"153":2,"188":2}}],["name",{"2":{"6":1,"27":4,"180":1,"188":1,"194":1,"195":2,"199":1}}],["namespaced",{"2":{"153":1}}],["names",{"2":{"6":1,"27":4,"153":3,"170":3,"188":1}}],["nodestatus",{"2":{"146":6}}],["nodes",{"2":{"64":1,"146":4}}],["node",{"2":{"64":26,"146":17}}],["nor",{"2":{"60":1,"173":1,"176":1}}],["normalized",{"2":{"59":1}}],["normalize",{"2":{"59":1}}],["norm",{"2":{"6":1,"59":22}}],["north",{"2":{"6":1,"66":12,"157":1}}],["now",{"2":{"6":1,"13":1,"21":1,"23":1,"55":1,"58":2,"59":4,"60":1,"64":1,"69":1,"76":1,"77":1,"85":1,"145":1,"146":2,"168":1,"174":1,"175":3,"176":1,"180":1,"191":5,"192":6,"193":2,"194":1,"195":3,"198":2}}],["no",{"2":{"6":6,"53":1,"59":2,"64":4,"70":1,"71":1,"73":1,"74":14,"75":1,"88":2,"97":3,"108":3,"116":2,"125":2,"127":1,"129":1,"130":2,"135":2,"137":1,"138":3,"139":3,"140":1,"146":2,"147":1,"148":1,"153":3,"174":1,"176":2,"177":1,"180":1,"188":1,"195":1}}],["nonzero",{"2":{"177":1}}],["none",{"2":{"6":4,"64":1,"69":1,"70":1,"73":1,"75":1,"76":1,"105":4,"107":1}}],["nondimensional",{"2":{"6":1,"176":1}}],["nonintersecting",{"2":{"6":1,"49":1,"165":1,"169":1}}],["non",{"2":{"3":4,"6":2,"48":1,"57":2,"64":15,"70":2,"71":1,"73":1,"74":4,"75":1,"76":2,"84":1,"122":2,"129":1,"151":1,"159":1}}],["note",{"2":{"4":8,"6":12,"19":1,"25":1,"53":1,"56":2,"59":1,"62":2,"63":2,"64":3,"66":1,"69":2,"71":3,"74":5,"76":3,"82":1,"85":1,"88":5,"116":1,"121":1,"122":1,"157":1,"159":1,"172":1,"177":1,"181":1,"182":2,"183":1,"192":2,"193":1}}],["not",{"0":{"147":1},"2":{"1":4,"3":16,"4":2,"6":19,"18":1,"19":1,"27":1,"48":1,"50":1,"53":4,"56":1,"59":4,"60":1,"62":1,"64":18,"69":1,"73":1,"74":7,"76":3,"81":1,"87":2,"88":4,"90":2,"91":1,"93":1,"94":2,"96":2,"97":2,"108":3,"110":5,"111":3,"112":2,"113":2,"116":5,"121":1,"122":2,"125":1,"134":2,"135":2,"137":1,"145":4,"146":2,"147":1,"150":2,"151":1,"152":1,"153":7,"155":3,"157":2,"158":1,"159":1,"161":2,"164":2,"168":3,"170":4,"171":1,"172":1,"173":1,"174":1,"176":2,"177":1,"187":1,"188":2,"192":1,"193":1,"197":1}}],["nothing`",{"2":{"71":2,"74":2,"76":2}}],["nothing",{"2":{"1":68,"4":2,"6":42,"15":3,"64":4,"69":1,"71":2,"73":1,"74":2,"76":2,"88":1,"116":1,"145":9,"146":3,"150":2,"153":3,"155":3,"161":24,"164":1,"168":60,"170":2,"173":1,"177":1,"180":2,"181":6,"182":6,"183":6,"184":1,"185":32,"189":7,"191":252,"192":16,"193":20}}],["ne",{"2":{"192":2}}],["net",{"2":{"164":2}}],["ness",{"2":{"155":1}}],["nesting",{"2":{"151":2}}],["nestedloopfast",{"2":{"200":1}}],["nested",{"2":{"1":4,"4":2,"6":5,"18":1,"53":1,"150":4,"151":2,"153":2,"170":2,"180":1,"186":1}}],["never",{"2":{"151":1,"181":1}}],["neumann",{"2":{"146":1}}],["neither",{"2":{"76":1}}],["neighborhood",{"2":{"146":2}}],["neighbor",{"2":{"64":27}}],["neighboring",{"2":{"6":6,"64":1,"180":1,"181":1,"182":1,"183":2}}],["nearly",{"2":{"195":1}}],["nearest",{"2":{"64":1,"74":2}}],["neatly",{"2":{"17":1}}],["nedge",{"2":{"64":2,"189":13}}],["nextnode",{"2":{"146":27}}],["nextnodes",{"2":{"146":6}}],["next",{"2":{"63":1,"64":81,"66":3,"69":4,"116":14,"146":3,"169":13,"182":5}}],["necessarily",{"2":{"6":1,"145":1,"171":1}}],["necessary",{"2":{"6":1,"151":1,"180":1}}],["newfeature",{"2":{"155":2}}],["newnodes",{"2":{"146":2}}],["new",{"2":{"6":1,"60":1,"64":58,"66":9,"70":3,"71":1,"76":16,"116":2,"146":4,"152":1,"153":21,"164":3,"165":1,"167":1,"169":19,"170":1,"177":8,"181":1,"182":2,"183":1,"193":1,"194":1,"199":1}}],["negative",{"2":{"4":6,"6":3,"55":2,"56":1,"57":2,"84":2,"85":3}}],["needs",{"2":{"63":1}}],["needing",{"2":{"4":2,"6":1,"17":1,"166":1}}],["need",{"2":{"1":2,"3":2,"4":4,"5":2,"6":5,"28":1,"59":2,"62":1,"64":2,"71":1,"81":1,"88":4,"93":1,"94":1,"116":1,"146":2,"148":1,"153":3,"166":1,"170":1,"184":1,"185":1,"192":1,"193":2,"200":2}}],["needed",{"2":{"1":4,"6":4,"53":1,"59":1,"64":4,"66":1,"70":1,"73":1,"75":1,"85":2,"116":5,"146":1,"153":1,"164":1,"170":1,"172":3,"193":1}}],["human",{"2":{"195":1}}],["hull`",{"2":{"82":2}}],["hulls",{"2":{"6":1,"77":1,"82":1}}],["hull",{"0":{"46":1,"77":1,"79":1,"80":1},"1":{"78":1,"79":1,"80":1,"81":1,"82":1},"2":{"0":1,"6":8,"27":2,"46":1,"77":2,"79":4,"80":1,"81":10,"82":15}}],["hypot",{"2":{"177":1}}],["h2",{"2":{"116":6}}],["h1",{"2":{"116":11}}],["hm",{"2":{"58":2}}],["h",{"2":{"53":2,"64":2,"76":8}}],["href=",{"2":{"6":2}}],["https",{"2":{"6":2,"70":1,"73":1,"74":1,"75":1,"82":1,"116":2,"157":1,"182":1}}],["high",{"2":{"195":1}}],["highest",{"2":{"193":1}}],["higher",{"2":{"6":1,"82":1}}],["hit",{"2":{"64":1,"153":1,"155":3,"170":1}}],["hits",{"2":{"18":1}}],["hidedecorations",{"2":{"58":2}}],["hinter",{"2":{"27":3,"60":1,"173":1,"176":1}}],["hint",{"2":{"27":3,"60":1,"176":1}}],["hinge=2",{"2":{"73":1}}],["hinge`",{"2":{"73":1}}],["hinge",{"2":{"6":1,"64":1,"74":13,"116":15}}],["hist",{"2":{"13":1}}],["histogram",{"2":{"13":1}}],["hcat",{"2":{"6":1}}],["heavily",{"2":{"153":1}}],["heatmap",{"2":{"13":5,"14":6,"58":2,"84":2,"146":1}}],["here",{"2":{"6":3,"9":1,"13":1,"14":1,"20":1,"59":1,"74":1,"82":2,"105":1,"146":2,"153":2,"155":4,"157":1,"161":1,"176":1,"192":2,"197":5,"198":3}}],["helpers",{"0":{"64":1},"2":{"105":1,"122":1}}],["helper",{"0":{"71":1,"74":1,"76":1},"2":{"63":1,"64":1,"69":1}}],["helps",{"2":{"26":1}}],["help",{"2":{"6":1,"157":1,"159":1}}],["held",{"2":{"1":2,"6":1,"150":2,"153":1}}],["hours",{"2":{"199":1}}],["hood",{"2":{"195":1}}],["hook",{"2":{"6":1,"180":1}}],["home",{"2":{"192":1}}],["horizontal",{"2":{"66":1,"74":1,"146":1,"180":1}}],["hormann",{"0":{"71":1,"74":1,"76":1},"2":{"6":2,"59":2,"64":3,"69":2,"70":1,"73":1,"75":1}}],["how",{"0":{"22":1},"2":{"6":2,"22":2,"55":1,"59":1,"64":1,"74":1,"88":1,"146":2,"155":1,"171":1,"180":1,"192":1,"195":1,"197":2,"198":2,"199":1,"200":1}}],["however",{"2":{"3":2,"6":2,"53":1,"59":1,"63":1,"64":1,"74":1,"81":1,"84":1,"88":1,"90":1,"94":1,"167":1}}],["hole",{"2":{"53":1,"56":3,"58":2,"59":9,"63":4,"64":60,"66":3,"70":6,"73":2,"76":15,"85":3,"100":1,"101":1,"102":1,"116":33,"146":5,"162":2,"191":1}}],["holes=",{"2":{"64":1}}],["holes",{"2":{"4":6,"5":2,"6":4,"9":2,"53":2,"55":1,"59":2,"63":1,"64":19,"69":4,"70":2,"73":2,"75":6,"76":29,"85":3,"88":3,"113":1,"116":11,"137":1,"146":17,"162":2,"191":4}}],["holding",{"2":{"6":1,"146":1,"153":2}}],["hold",{"2":{"6":1,"146":1,"159":1,"180":1,"195":1}}],["holds",{"2":{"6":1,"64":1,"158":2,"178":1}}],["halign",{"2":{"180":1}}],["half",{"2":{"65":2}}],["hail",{"2":{"162":1}}],["handling",{"0":{"173":1},"2":{"148":1}}],["handler",{"2":{"60":1,"173":1}}],["handle",{"2":{"27":1,"145":1,"151":2,"153":1,"192":1}}],["handled",{"2":{"18":1}}],["hao",{"2":{"116":1}}],["had",{"2":{"70":1,"73":1,"88":1,"159":1,"175":1}}],["happens",{"2":{"64":1}}],["happen",{"2":{"50":1,"153":1}}],["have",{"2":{"3":6,"4":18,"6":18,"19":1,"29":1,"49":1,"53":2,"56":3,"59":6,"60":1,"64":4,"74":1,"82":2,"84":1,"85":2,"88":10,"116":5,"121":1,"122":3,"124":1,"125":1,"146":1,"147":1,"148":2,"152":1,"153":1,"155":2,"157":2,"159":1,"170":2,"180":1,"182":1,"188":1,"191":1,"192":1,"197":1,"198":1,"199":3}}],["haskey",{"2":{"153":1,"188":1}}],["hash",{"2":{"146":1}}],["hasn",{"2":{"146":1}}],["hassle",{"2":{"1":2,"6":1,"185":1}}],["has",{"2":{"1":8,"6":4,"52":1,"55":2,"59":2,"64":2,"71":2,"74":1,"76":1,"84":1,"85":1,"88":11,"127":1,"145":1,"150":8,"153":6,"160":1,"175":2,"184":1,"192":1}}],["xticklabelsvisible",{"2":{"192":1}}],["xticklabelrotation",{"2":{"13":2}}],["xoffset",{"2":{"191":4,"193":1}}],["x=x",{"2":{"189":1}}],["x`",{"2":{"153":1}}],["xvec",{"2":{"146":4}}],["xbounds",{"2":{"146":4}}],["xhalf",{"2":{"146":2}}],["xlast",{"2":{"85":3}}],["xfirst",{"2":{"85":5}}],["x0",{"2":{"85":5}}],["xn",{"2":{"66":4}}],["xind+1",{"2":{"146":1}}],["xind",{"2":{"146":2}}],["xinterior",{"2":{"63":2}}],["xi−xi−1",{"2":{"6":1}}],["xcentroid",{"2":{"63":13}}],["xrange",{"2":{"58":3,"84":2}}],["xautolimits",{"2":{"58":2}}],["xp2",{"2":{"53":5}}],["x26",{"2":{"53":2,"56":6,"59":1,"60":4,"64":58,"66":36,"70":4,"71":4,"74":24,"76":2,"85":3,"88":14,"103":2,"104":2,"105":48,"114":2,"115":2,"116":170,"122":22,"127":2,"131":2,"132":2,"141":2,"142":2,"145":4,"146":12,"153":2,"164":2,"169":6,"173":2,"176":2,"182":10,"183":2,"189":4,"197":4}}],["x2",{"2":{"6":3,"59":4,"63":2,"66":18,"85":8,"105":10,"116":5,"122":4,"146":5,"177":6,"189":2}}],["x1",{"2":{"6":4,"59":3,"63":2,"66":22,"85":8,"105":11,"116":6,"122":5,"146":5,"177":7,"189":2}}],["xs",{"2":{"6":3,"66":4,"146":30,"189":4}}],["xmax",{"2":{"6":1,"65":2,"66":48}}],["xmin",{"2":{"6":1,"65":2,"66":49}}],["x3c",{"2":{"5":2,"6":34,"27":1,"53":4,"56":2,"59":66,"64":17,"66":11,"69":3,"70":1,"73":1,"74":6,"75":1,"84":1,"85":13,"88":2,"105":33,"116":13,"122":10,"145":1,"146":4,"153":3,"155":15,"157":3,"158":4,"159":4,"162":2,"165":3,"169":5,"170":2,"176":2,"181":2,"182":6,"183":3,"184":9,"200":1}}],["xy`",{"2":{"172":1}}],["xy",{"2":{"1":8,"59":1,"172":3}}],["x",{"2":{"1":8,"4":2,"6":8,"7":1,"9":5,"11":6,"13":11,"14":10,"15":4,"46":2,"53":9,"56":2,"58":8,"62":1,"63":10,"64":21,"65":1,"66":8,"69":6,"71":9,"74":18,"76":9,"84":2,"85":7,"88":3,"105":21,"116":16,"122":7,"145":11,"146":2,"148":2,"150":6,"153":5,"155":10,"159":5,"164":2,"166":2,"170":4,"171":4,"172":1,"177":2,"180":2,"182":2,"184":1,"185":2,"186":2,"189":33,"191":6,"192":2,"193":2,"197":1,"199":2}}],["=>",{"2":{"153":2}}],["=float64",{"2":{"63":3,"73":1,"75":1}}],["=false",{"2":{"53":1}}],["===",{"2":{"105":8,"145":4}}],["==",{"2":{"9":1,"19":1,"28":1,"53":4,"56":2,"59":9,"60":2,"63":1,"64":34,"66":30,"71":1,"74":20,"75":2,"76":1,"80":1,"84":1,"88":16,"116":44,"122":2,"145":3,"146":18,"153":2,"162":1,"164":1,"169":1,"173":1,"176":2,"180":1,"184":3}}],["=",{"2":{"1":10,"3":34,"4":14,"5":4,"6":62,"11":1,"13":19,"14":33,"15":18,"27":5,"28":7,"31":2,"32":2,"33":2,"34":2,"46":3,"52":4,"53":56,"55":6,"56":25,"58":35,"59":110,"60":3,"62":6,"63":36,"64":324,"65":6,"66":96,"68":7,"69":29,"70":21,"71":30,"73":18,"74":143,"75":21,"76":78,"79":6,"80":4,"81":14,"82":4,"84":15,"85":52,"87":7,"88":40,"90":7,"91":3,"93":5,"94":3,"96":4,"97":23,"98":3,"99":7,"100":14,"101":14,"102":4,"103":2,"104":2,"105":57,"107":7,"108":18,"109":3,"110":11,"111":17,"112":9,"113":3,"114":2,"115":2,"116":189,"118":3,"119":3,"121":7,"122":40,"124":3,"125":22,"126":3,"127":9,"128":14,"129":10,"130":6,"131":2,"132":2,"134":7,"135":22,"136":3,"137":11,"138":14,"139":14,"140":4,"141":2,"142":2,"145":32,"146":110,"148":1,"150":6,"153":40,"154":4,"155":39,"157":3,"158":6,"159":2,"161":2,"162":4,"164":9,"166":1,"168":3,"169":30,"170":20,"173":2,"175":16,"176":21,"177":18,"178":2,"179":5,"180":60,"181":11,"182":49,"183":7,"184":43,"185":2,"186":1,"188":3,"189":42,"191":45,"192":19,"193":13,"194":3,"195":4,"196":7,"198":12,"199":6,"200":2}}],["utm",{"2":{"192":1}}],["utility",{"0":{"189":1},"2":{"59":1,"153":1,"170":1}}],["utils",{"0":{"184":1},"2":{"27":1}}],["u2",{"2":{"116":4}}],["u1",{"2":{"116":4}}],["update",{"2":{"64":6,"146":10}}],["updated",{"2":{"64":6,"155":3}}],["updates",{"2":{"59":1}}],["up",{"2":{"64":2,"74":1,"116":1,"129":1,"151":1,"168":1,"182":2,"191":2}}],["upper",{"2":{"6":1,"146":1,"198":1}}],["uv",{"2":{"59":1}}],["usage",{"2":{"199":1}}],["usable",{"2":{"156":1}}],["usa",{"0":{"80":1},"2":{"80":4,"180":15,"199":3}}],["us",{"2":{"56":1,"82":1,"192":1,"199":1}}],["usually",{"2":{"6":2,"22":2,"77":1,"153":1,"155":1,"157":1,"195":1}}],["usual",{"2":{"6":1,"162":1,"165":1}}],["usecases",{"2":{"21":1,"23":1}}],["uses",{"2":{"6":3,"77":1,"82":1,"116":1,"156":1,"157":1,"172":1,"176":1,"180":1,"195":1}}],["users",{"2":{"27":1,"148":1,"167":1}}],["user",{"2":{"6":12,"49":1,"63":1,"70":3,"73":3,"75":3,"153":1,"181":1,"182":1,"183":1,"197":1}}],["useful",{"2":{"6":10,"59":1,"146":1,"174":1,"177":1,"180":2,"188":1}}],["used",{"2":{"1":2,"5":2,"6":9,"53":1,"56":1,"57":1,"59":1,"63":2,"64":7,"66":1,"69":1,"74":1,"84":1,"85":1,"88":1,"122":1,"146":2,"150":2,"153":1,"155":1,"157":1,"158":1,"160":1,"170":1,"177":1,"180":1,"182":2,"187":2,"192":1,"195":1,"197":2,"198":1}}],["use",{"2":{"1":4,"4":2,"5":2,"6":12,"11":1,"20":1,"22":1,"49":1,"59":1,"64":1,"76":1,"82":2,"105":2,"122":1,"146":1,"147":1,"150":2,"153":4,"154":1,"157":2,"162":1,"170":3,"171":1,"175":1,"177":1,"180":1,"182":2,"188":3,"191":1,"195":1,"197":2,"200":2}}],["using",{"0":{"192":1},"2":{"1":8,"4":2,"5":6,"6":12,"11":4,"13":4,"14":1,"15":1,"27":6,"28":1,"46":1,"52":1,"53":1,"55":2,"56":2,"58":4,"59":7,"60":3,"62":2,"63":1,"64":5,"65":2,"66":1,"68":2,"69":1,"71":3,"72":1,"74":4,"76":3,"79":1,"80":2,"81":1,"82":2,"84":2,"85":2,"87":2,"88":1,"90":2,"91":1,"93":2,"94":1,"96":2,"97":1,"104":1,"105":1,"107":2,"108":1,"115":1,"116":1,"118":2,"119":1,"121":2,"122":1,"124":2,"125":1,"132":1,"134":2,"135":1,"142":1,"145":1,"146":5,"147":1,"148":2,"150":2,"151":1,"153":4,"154":1,"155":1,"159":1,"162":1,"165":1,"166":2,"169":1,"170":2,"171":1,"172":1,"173":3,"175":1,"176":5,"177":1,"180":3,"182":1,"184":1,"185":4,"186":2,"188":2,"189":1,"190":4,"191":1,"193":1,"194":2,"196":1,"197":1,"198":4,"199":2}}],["until",{"2":{"146":3,"151":1,"182":1,"188":1}}],["unprocessed",{"2":{"64":1}}],["unknown",{"2":{"64":4,"66":15}}],["unknown=3",{"2":{"64":1}}],["unmatched",{"2":{"64":9,"66":26}}],["understand",{"2":{"187":1}}],["under",{"2":{"56":2,"195":1}}],["undergrad",{"2":{"9":1}}],["undef",{"2":{"53":2,"64":1,"181":1,"182":1,"184":2,"189":2}}],["unless",{"2":{"48":1,"64":1,"71":2,"74":2,"76":2,"153":1}}],["unlike",{"2":{"18":1,"187":1}}],["unstable",{"2":{"13":1,"153":1,"159":1}}],["unneeded",{"2":{"6":3,"64":1,"70":2,"73":2,"75":2}}],["unnecessary",{"2":{"6":3,"146":1,"181":1,"182":1,"183":1}}],["universal",{"2":{"192":1}}],["united",{"2":{"180":1}}],["unit",{"2":{"157":1}}],["unify",{"2":{"21":1,"23":1}}],["unique",{"2":{"6":2,"74":3,"165":2,"169":2}}],["unioning",{"2":{"76":1}}],["unionintersectingpolygons",{"2":{"0":1,"6":8,"70":1,"71":2,"73":1,"74":2,"75":1,"76":2,"165":2,"167":2,"168":1,"169":4}}],["unions",{"0":{"76":1},"2":{"18":1,"158":1}}],["union",{"0":{"32":1,"75":1},"2":{"0":1,"1":4,"3":4,"4":8,"6":22,"11":3,"27":1,"28":1,"32":2,"49":2,"53":2,"56":1,"59":1,"63":4,"64":7,"66":1,"73":2,"75":18,"76":30,"85":1,"88":8,"99":2,"100":4,"101":1,"103":2,"104":1,"110":2,"111":6,"114":2,"115":1,"122":4,"127":2,"128":4,"129":1,"131":2,"132":1,"137":2,"138":4,"139":1,"141":2,"142":1,"145":1,"146":5,"148":1,"150":4,"151":3,"153":3,"158":4,"165":1,"167":1,"169":9,"170":3,"177":4,"180":2,"181":3,"182":3,"183":3,"189":1}}],["unchanged",{"2":{"1":2,"6":2,"150":2,"153":1,"180":1}}],["unwrap",{"0":{"155":1},"2":{"0":1,"6":3,"155":17}}],["gdal",{"2":{"195":1}}],["gml",{"2":{"195":1}}],["gpkg",{"2":{"195":3}}],["gadm",{"2":{"199":4}}],["ga",{"2":{"192":3,"196":2}}],["gaps",{"2":{"146":1}}],["global",{"2":{"192":1}}],["globally",{"2":{"157":1,"170":1}}],["gft",{"2":{"190":1,"192":2}}],["gc",{"2":{"164":6}}],["gb",{"2":{"27":1}}],["guarantee",{"2":{"19":1,"26":1}}],["guaranteed",{"2":{"1":2,"6":1,"53":1,"150":2,"170":1}}],["grand",{"2":{"199":1}}],["grained",{"2":{"175":1}}],["grahamscanmethod",{"2":{"82":1}}],["graphics",{"2":{"6":1,"59":1}}],["great",{"2":{"191":1,"193":1,"195":1}}],["greater",{"2":{"6":1,"145":1,"177":1}}],["greiner",{"0":{"71":1,"74":1,"76":1},"2":{"64":3,"69":2,"70":1,"73":1,"75":1}}],["green",{"2":{"14":1,"192":1}}],["grid",{"2":{"6":1,"58":1,"66":4}}],["grouped",{"2":{"191":1}}],["groups",{"2":{"6":1,"146":1}}],["grouping",{"2":{"1":2,"6":1,"150":2,"170":3}}],["grows",{"2":{"6":1,"157":1}}],["g",{"2":{"6":1,"53":3,"56":3,"60":1,"63":3,"66":3,"85":6,"151":1,"153":2,"155":4,"157":1,"180":2,"189":2,"195":1}}],["g2",{"2":{"3":10,"6":5,"91":4,"94":3,"97":12,"98":6,"99":9,"100":6,"101":6,"102":3,"103":4,"104":2,"105":21,"108":10,"109":6,"110":10,"111":8,"112":4,"113":2,"114":4,"115":2,"125":10,"126":6,"127":10,"128":6,"129":5,"130":4,"131":4,"132":2,"135":10,"136":6,"137":9,"138":6,"139":6,"140":3,"141":4,"142":2}}],["g1",{"2":{"3":10,"4":2,"6":6,"91":4,"94":3,"97":12,"98":6,"99":9,"100":6,"101":6,"102":3,"103":2,"104":4,"105":21,"108":9,"109":6,"110":10,"111":8,"112":4,"113":2,"114":2,"115":4,"125":10,"126":6,"127":9,"128":6,"129":5,"130":4,"131":2,"132":4,"135":10,"136":6,"137":9,"138":6,"139":6,"140":3,"141":2,"142":4}}],["generic",{"2":{"48":1}}],["generation",{"2":{"180":2}}],["generated",{"2":{"27":1,"28":1,"46":1,"53":1,"56":1,"59":1,"60":1,"63":1,"64":1,"66":1,"69":1,"71":1,"72":1,"74":1,"76":1,"82":1,"85":1,"88":1,"91":1,"94":1,"104":1,"105":1,"115":1,"116":1,"119":1,"122":1,"132":1,"142":1,"145":1,"146":1,"147":1,"153":1,"154":1,"155":1,"159":1,"162":1,"165":1,"166":1,"169":1,"170":1,"171":1,"173":1,"177":1,"180":1,"184":1,"185":1,"186":1,"188":1,"189":1,"198":1}}],["generate",{"2":{"7":1,"13":2,"180":1,"198":2}}],["generalization",{"2":{"57":1}}],["generalized",{"2":{"6":1,"57":3,"59":1}}],["generalise",{"2":{"6":4,"180":1}}],["generally",{"2":{"6":2,"157":2,"188":3}}],["general",{"0":{"2":1,"4":1},"1":{"3":1,"4":1},"2":{"18":1,"20":1,"21":1,"23":1,"148":1,"170":1,"173":1}}],["getfeature",{"2":{"153":1,"155":3,"170":1,"189":5}}],["getcolumn",{"2":{"153":2,"155":1,"170":2}}],["getgeom",{"2":{"103":1,"104":1,"114":1,"115":1,"122":2,"131":1,"132":1,"141":1,"142":1,"153":3,"155":3,"170":2,"180":3,"189":6}}],["getring",{"2":{"64":1}}],["getindex",{"2":{"59":2}}],["gethole",{"2":{"53":1,"56":1,"63":1,"64":4,"66":1,"69":1,"70":2,"73":2,"76":6,"85":1,"88":2,"116":5,"162":1,"191":1}}],["getexterior",{"2":{"53":1,"56":1,"59":1,"63":1,"64":3,"66":1,"69":1,"70":2,"73":2,"75":3,"76":6,"85":1,"88":2,"116":5,"145":1,"146":1,"162":1,"191":1}}],["getpolygon",{"2":{"71":3,"74":2,"76":2,"88":3}}],["getpoint",{"2":{"52":1,"53":5,"55":2,"56":1,"59":1,"62":1,"63":6,"64":3,"65":2,"66":3,"68":3,"84":1,"85":6,"87":4,"88":13,"90":4,"93":1,"96":1,"105":7,"107":4,"116":28,"118":2,"121":4,"122":2,"124":2,"127":2,"134":4,"145":5,"162":3,"175":4,"177":2,"184":1,"189":3,"191":2}}],["getproperty",{"2":{"13":2,"14":1}}],["get",{"2":{"6":1,"13":1,"28":1,"55":1,"60":1,"64":9,"70":1,"71":1,"73":1,"74":2,"75":2,"82":2,"146":4,"153":3,"170":1,"173":1,"176":3,"180":1,"181":1,"183":1,"184":2,"188":5,"189":1,"191":2,"199":2}}],["geoparquet",{"2":{"195":4}}],["geopoly1",{"2":{"193":1,"194":1}}],["geopoly2",{"2":{"193":1,"194":1}}],["geoaxis",{"2":{"192":4,"196":1}}],["geointeface",{"2":{"151":1}}],["geointerace",{"2":{"48":1}}],["geointerfacemakie",{"2":{"179":1,"198":1,"199":1}}],["geointerface",{"0":{"26":1},"2":{"1":40,"3":18,"4":4,"6":41,"11":1,"13":1,"14":1,"15":1,"21":1,"23":1,"26":1,"27":7,"48":3,"52":1,"53":1,"55":1,"56":1,"59":23,"62":1,"63":1,"64":1,"65":1,"66":1,"68":1,"69":1,"70":1,"73":1,"74":1,"75":1,"79":1,"80":1,"81":1,"84":1,"85":11,"87":1,"88":2,"90":1,"91":2,"93":1,"94":2,"96":1,"97":2,"105":1,"107":1,"108":3,"118":1,"119":2,"121":1,"122":2,"124":1,"125":2,"134":1,"135":2,"145":5,"146":1,"150":6,"151":3,"153":11,"155":2,"161":9,"164":2,"165":1,"166":1,"168":23,"172":2,"175":1,"176":1,"179":1,"180":2,"185":13,"186":1,"189":1,"190":1,"191":122,"192":5,"193":9,"196":1,"198":1,"199":1}}],["geo",{"2":{"146":1,"176":4,"192":2}}],["geotable",{"2":{"25":1}}],["geojson",{"2":{"11":1,"180":2,"190":1,"192":4,"195":3}}],["geographic",{"2":{"6":1,"157":1,"192":1,"195":1}}],["geographiclib",{"2":{"6":1,"176":1}}],["geodataframes",{"2":{"195":3}}],["geodesy",{"2":{"157":1}}],["geodesic`",{"2":{"176":2}}],["geodesic",{"0":{"196":1},"2":{"0":1,"6":8,"27":1,"157":6,"175":6,"176":8,"177":1,"196":1}}],["geodesicsegments",{"2":{"0":1,"6":2,"174":1,"175":3,"176":6,"177":2,"196":1}}],["geod",{"2":{"6":2,"176":3}}],["geoformattypes",{"2":{"1":4,"172":2,"190":1,"192":2,"193":8}}],["geomakie",{"0":{"192":1},"2":{"190":2,"192":5,"196":2}}],["geomtype",{"2":{"153":2,"155":1}}],["geomfromgeos",{"2":{"28":1,"176":1}}],["geoms",{"2":{"6":1,"46":3,"82":1,"116":1,"153":12,"155":8}}],["geom2",{"2":{"3":16,"4":2,"6":9,"85":6,"88":1,"105":6,"108":1,"119":3,"122":6,"125":1,"135":2}}],["geom1",{"2":{"3":16,"4":2,"6":9,"85":6,"88":1,"105":4,"108":1,"119":3,"122":6,"125":1,"135":2}}],["geometrical",{"2":{"197":1}}],["geometric",{"2":{"21":2,"23":2,"62":1,"157":1}}],["geometries",{"0":{"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"191":1,"192":1,"193":1},"2":{"1":12,"3":16,"4":28,"6":63,"18":3,"20":1,"21":2,"23":2,"25":4,"48":3,"52":1,"53":3,"56":4,"63":1,"66":2,"69":1,"70":5,"73":5,"74":4,"75":5,"82":6,"84":1,"85":4,"87":1,"88":7,"91":1,"96":1,"97":1,"105":2,"108":2,"116":1,"118":1,"119":1,"121":2,"122":3,"124":2,"125":2,"135":2,"137":1,"148":1,"150":6,"152":2,"153":6,"154":1,"155":5,"166":1,"170":3,"172":2,"174":3,"175":1,"176":4,"177":1,"178":1,"181":1,"182":1,"183":1,"186":1,"189":1,"190":5,"192":1,"193":2,"194":2,"195":1,"197":5,"198":1,"200":1}}],["geometry=",{"2":{"194":1}}],["geometrycolumns",{"2":{"153":5,"155":1,"170":2}}],["geometrycollections",{"2":{"197":1}}],["geometrycollection",{"2":{"49":1,"199":1}}],["geometrycollectiontrait",{"2":{"28":1,"49":1,"103":1,"104":1,"114":1,"115":1,"131":1,"132":1,"141":1,"142":1}}],["geometrycorrections",{"2":{"164":1}}],["geometrycorrection",{"2":{"0":1,"6":11,"162":2,"163":2,"164":17,"165":11,"169":4}}],["geometrybasics",{"2":{"27":3,"58":2,"59":10,"82":1,"84":1,"97":1,"125":1,"135":1}}],["geometry",{"0":{"2":1,"73":1,"103":2,"104":2,"114":2,"115":2,"131":2,"132":2,"141":2,"142":2,"163":1,"172":1,"178":1,"190":1,"194":1},"1":{"3":1,"4":1,"164":1,"165":1,"173":1,"179":1,"180":1,"191":1,"192":1,"193":1,"194":1,"195":1},"2":{"1":20,"3":48,"4":24,"6":75,"9":1,"11":2,"18":4,"20":1,"25":1,"27":1,"49":3,"53":7,"56":4,"60":4,"63":3,"65":1,"66":4,"69":4,"80":1,"84":4,"85":6,"88":8,"90":5,"91":2,"93":4,"94":4,"96":4,"97":5,"98":4,"99":1,"103":3,"104":4,"105":3,"107":2,"108":5,"109":4,"110":2,"111":2,"114":3,"115":4,"116":2,"118":2,"122":3,"124":3,"125":4,"126":4,"127":2,"131":3,"132":4,"134":4,"135":5,"136":4,"141":3,"142":4,"144":1,"148":4,"150":6,"151":2,"153":28,"155":8,"157":5,"161":1,"162":1,"163":2,"164":28,"165":6,"166":1,"170":12,"171":1,"172":6,"174":3,"175":1,"176":5,"177":8,"180":6,"189":6,"191":1,"192":1,"193":4,"194":2,"195":2,"197":1,"198":7,"199":4,"200":2}}],["geometryopsprojext",{"2":{"172":1,"173":1,"176":1,"177":1}}],["geometryopslibgeosext",{"2":{"60":1}}],["geometryopscore`",{"2":{"27":1}}],["geometryopscore",{"2":{"0":17,"1":2,"6":15,"27":7,"150":2}}],["geometryops",{"0":{"0":1,"21":1,"27":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"0":122,"1":8,"3":27,"4":10,"5":3,"6":122,"7":2,"11":1,"13":1,"14":1,"15":1,"17":2,"21":1,"22":4,"23":1,"27":1,"28":2,"52":1,"55":1,"58":5,"60":1,"62":1,"65":1,"68":1,"69":1,"70":1,"73":1,"74":1,"75":1,"77":1,"79":1,"80":1,"81":3,"84":1,"87":1,"88":1,"90":1,"91":2,"93":1,"94":2,"96":1,"97":2,"105":2,"107":1,"108":2,"118":1,"119":1,"121":1,"122":1,"124":1,"125":2,"134":1,"135":2,"145":3,"146":2,"150":4,"153":1,"156":2,"157":1,"161":1,"164":1,"165":4,"168":1,"173":1,"175":1,"176":2,"179":1,"180":2,"185":1,"187":1,"188":2,"189":1,"190":1,"191":3,"196":1,"197":1,"198":2,"199":2}}],["geom",{"2":{"1":14,"4":42,"6":48,"18":3,"27":12,"28":10,"31":5,"32":5,"33":5,"34":5,"36":4,"37":4,"38":4,"39":4,"40":4,"41":4,"42":4,"43":4,"44":4,"45":4,"53":25,"56":17,"63":28,"64":16,"66":6,"69":15,"70":8,"71":2,"73":12,"74":10,"75":9,"76":9,"85":28,"88":45,"97":4,"105":1,"108":4,"116":3,"122":1,"125":4,"135":4,"145":3,"146":1,"148":2,"150":8,"153":34,"155":49,"169":11,"170":13,"171":4,"177":13,"180":36,"184":3,"185":7,"186":4,"189":13,"199":6}}],["geospatial",{"0":{"193":1,"195":1},"2":{"190":5,"192":1,"193":3,"195":5}}],["geoscontext",{"2":{"176":1}}],["geosdensify",{"2":{"28":2,"176":3}}],["geos",{"0":{"188":1},"2":{"0":1,"6":7,"28":8,"29":1,"31":1,"32":1,"33":1,"34":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"60":4,"77":1,"81":4,"82":1,"157":1,"178":5,"180":2,"187":1,"188":12}}],["got",{"2":{"184":3}}],["goes",{"2":{"6":2,"145":2}}],["good",{"2":{"6":1,"59":1,"188":2,"193":1}}],["going",{"2":{"4":8,"6":5,"66":2,"81":1,"88":5,"145":1,"146":1,"190":1}}],["go",{"2":{"1":10,"3":34,"4":4,"6":43,"11":9,"13":1,"14":1,"15":6,"18":1,"27":2,"28":5,"31":1,"32":1,"33":1,"34":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":2,"52":1,"55":1,"59":1,"62":2,"65":1,"68":2,"69":2,"70":2,"73":2,"74":2,"75":2,"79":3,"80":2,"81":8,"82":2,"84":6,"87":1,"88":2,"90":2,"91":2,"93":2,"94":2,"96":1,"97":2,"105":1,"107":1,"108":2,"118":1,"119":2,"121":1,"122":2,"124":1,"125":2,"134":2,"135":2,"145":6,"146":2,"148":1,"150":4,"153":2,"155":1,"161":3,"168":3,"175":7,"176":8,"179":2,"180":49,"185":3,"188":1,"189":2,"190":1,"191":3,"193":1,"195":1,"196":3,"197":9,"198":2,"199":5,"200":1}}],["gtrait",{"2":{"85":2}}],["gt",{"2":{"1":2,"6":2,"9":2,"10":1,"11":5,"64":3,"145":3,"150":2}}],["gif",{"2":{"182":1}}],["gives",{"2":{"199":1}}],["give",{"2":{"116":1,"195":1}}],["given",{"2":{"4":14,"6":21,"18":2,"25":1,"52":1,"53":1,"56":2,"63":3,"64":8,"66":3,"69":5,"70":1,"71":2,"73":1,"74":2,"75":1,"76":2,"85":8,"88":4,"90":1,"91":1,"93":1,"94":1,"97":1,"108":1,"116":7,"118":1,"119":1,"125":1,"127":1,"135":1,"148":1,"164":5,"165":1,"168":1,"170":1,"174":2,"176":2,"177":2,"183":1}}],["github",{"2":{"6":2,"82":1,"157":1}}],["gis",{"2":{"5":2,"6":1,"21":1,"23":1,"59":1}}],["gi",{"2":{"1":26,"3":84,"4":62,"6":125,"11":8,"13":15,"14":15,"15":8,"18":2,"27":1,"28":12,"31":3,"32":3,"33":3,"34":3,"36":2,"37":2,"38":2,"39":2,"40":2,"41":2,"42":2,"43":2,"44":2,"45":2,"46":3,"52":3,"53":30,"55":5,"56":21,"58":1,"62":5,"63":38,"64":34,"65":5,"66":17,"68":6,"69":13,"70":19,"71":16,"73":25,"74":24,"75":17,"76":36,"79":1,"80":1,"81":3,"82":4,"84":8,"85":42,"87":7,"88":99,"90":7,"91":3,"93":3,"94":3,"96":3,"97":4,"98":6,"99":12,"100":10,"101":7,"102":4,"103":8,"104":6,"105":21,"107":7,"108":2,"109":3,"110":12,"111":14,"112":4,"113":2,"114":8,"115":6,"116":59,"118":5,"119":3,"121":7,"122":51,"124":5,"125":3,"126":6,"127":15,"128":10,"129":7,"130":4,"131":8,"132":6,"134":7,"135":2,"136":6,"137":12,"138":10,"139":7,"140":4,"141":8,"142":6,"145":32,"146":15,"148":4,"150":18,"153":42,"155":52,"158":9,"161":2,"162":10,"164":9,"166":1,"168":3,"169":8,"170":25,"171":5,"175":6,"176":6,"177":12,"179":2,"180":34,"184":4,"185":9,"186":5,"189":55,"190":1,"191":21,"192":2,"193":2,"196":2,"198":5,"199":2}}],["o",{"2":{"170":24}}],["odd",{"2":{"116":1}}],["own",{"2":{"76":1,"148":2}}],["occur",{"2":{"74":1}}],["occurs",{"2":{"74":1}}],["occupied",{"2":{"55":1}}],["old",{"2":{"64":8,"153":3}}],["ourselves",{"2":{"176":1}}],["our",{"2":{"50":1,"176":1,"191":4,"192":3,"198":1}}],["out=3",{"2":{"116":1}}],["out=4",{"2":{"73":1}}],["out`",{"2":{"73":1,"116":1}}],["out",{"2":{"6":3,"64":12,"66":23,"74":6,"76":4,"82":1,"84":5,"97":4,"105":1,"108":3,"116":102,"122":2,"125":4,"135":4,"145":1,"153":1,"177":1,"188":2}}],["outside",{"2":{"3":4,"4":2,"6":3,"64":3,"66":1,"71":2,"74":4,"76":3,"84":2,"85":1,"94":1,"96":1,"107":1,"116":12,"122":3,"140":1}}],["outputs",{"2":{"64":1}}],["output",{"2":{"3":16,"4":2,"6":18,"18":1,"49":1,"69":2,"70":1,"73":1,"74":1,"75":1,"76":2,"88":1,"91":1,"94":1,"97":1,"108":1,"119":1,"122":1,"125":1,"135":1,"145":2,"180":1,"184":1,"189":1}}],["outerjoin",{"2":{"197":1}}],["outermost",{"2":{"153":1}}],["outer",{"2":{"1":2,"6":1,"150":2,"151":1,"153":2,"198":1}}],["omit",{"2":{"6":1,"176":1}}],["obtain",{"2":{"153":1}}],["obtained",{"2":{"49":1}}],["observable",{"2":{"14":2}}],["obs",{"2":{"14":10}}],["obviously",{"2":{"4":2,"6":1,"166":1}}],["objects",{"2":{"1":8,"4":2,"6":17,"150":8,"151":5,"153":4,"155":3,"166":1,"170":1,"174":1,"180":2,"186":1}}],["object",{"2":{"1":8,"4":2,"5":2,"6":8,"20":1,"59":1,"84":1,"116":4,"150":2,"151":5,"153":1,"155":2,"166":1,"172":3,"176":1,"180":1,"186":1}}],["obj",{"2":{"1":8,"4":2,"6":17,"150":4,"153":1,"155":8,"166":1,"170":1,"171":2,"176":3,"180":3,"185":1,"186":1}}],["others",{"2":{"60":1,"169":1}}],["otherwise",{"2":{"4":4,"6":3,"60":1,"64":1,"71":1,"74":1,"85":2,"146":1,"171":1,"173":1,"176":1,"189":1}}],["other",{"0":{"4":1,"6":1,"155":1},"2":{"3":8,"6":12,"53":1,"64":5,"70":1,"73":1,"74":1,"75":2,"76":3,"77":2,"85":2,"88":2,"90":1,"99":1,"116":8,"118":1,"121":1,"122":4,"124":2,"125":2,"128":1,"137":1,"146":1,"151":1,"153":1,"155":1,"158":1,"165":2,"167":1,"169":2,"180":2,"182":2,"187":1,"188":1,"192":1,"197":4,"200":1}}],["ogc",{"0":{"3":1}}],["over=3",{"2":{"73":1}}],["over`",{"2":{"73":1}}],["overflow",{"2":{"69":1}}],["overhead",{"2":{"48":1,"153":1,"170":1}}],["overrides",{"0":{"29":1},"1":{"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1},"2":{"29":1}}],["override",{"2":{"6":1,"59":1}}],["overlapping",{"2":{"64":11,"74":4,"76":6}}],["overlap",{"2":{"3":8,"6":4,"9":1,"64":2,"74":8,"76":2,"93":1,"97":1,"116":2,"121":5,"122":6,"135":1,"167":1}}],["overlaps",{"0":{"42":1,"120":1,"121":1},"1":{"121":1,"122":1},"2":{"0":10,"3":9,"6":13,"27":1,"42":2,"74":1,"120":1,"121":3,"122":30,"146":1,"197":1}}],["over",{"2":{"1":2,"6":3,"55":2,"56":1,"63":3,"64":5,"66":1,"73":1,"74":11,"76":1,"81":1,"97":1,"105":1,"108":1,"116":15,"122":2,"125":1,"135":1,"150":2,"153":9,"155":3,"170":11,"191":3}}],["opposed",{"2":{"196":1}}],["opposite",{"2":{"3":10,"6":5,"64":2,"71":1,"74":2,"76":1,"91":2,"94":2,"97":1,"119":2,"135":1}}],["ops",{"2":{"170":1}}],["operable",{"2":{"157":1}}],["operates",{"2":{"153":1,"160":1,"167":1,"170":1}}],["operate",{"2":{"18":1,"25":1,"170":1}}],["operations",{"0":{"30":1,"49":1},"1":{"31":1,"32":1,"33":1,"34":1},"2":{"22":1,"49":1,"74":1,"76":1,"148":1}}],["operation",{"2":{"6":4,"64":1,"148":1,"157":1,"165":2,"169":2,"170":1,"188":2,"197":1}}],["open",{"2":{"64":1,"161":1,"192":1}}],["open>",{"2":{"6":2}}],["optimisation",{"2":{"116":1}}],["optimise",{"2":{"105":1}}],["optimal",{"2":{"6":1,"82":1}}],["options",{"2":{"14":1,"64":1}}],["optional",{"2":{"4":10,"6":6,"53":1,"56":2,"66":1,"85":2}}],["op",{"2":{"1":6,"6":3,"19":2,"63":1,"150":6,"170":35}}],["on=2",{"2":{"116":1}}],["on`",{"2":{"116":1}}],["once",{"2":{"105":1,"122":1,"146":1}}],["onto",{"2":{"85":1}}],["ones",{"2":{"168":1}}],["oneunit",{"2":{"59":1}}],["one",{"2":{"1":2,"3":18,"6":15,"49":1,"53":4,"56":2,"58":1,"59":1,"63":1,"64":5,"66":3,"70":1,"71":1,"73":1,"74":32,"75":2,"76":2,"77":1,"84":2,"96":1,"103":1,"105":1,"107":1,"116":18,"121":1,"122":18,"124":2,"125":2,"128":3,"129":2,"130":2,"131":1,"132":1,"134":1,"135":1,"141":1,"145":1,"146":5,"153":1,"157":2,"168":1,"172":1,"176":1,"184":1,"185":1,"192":1,"197":1}}],["on",{"0":{"192":1},"2":{"1":4,"4":6,"6":14,"9":1,"18":1,"20":1,"21":3,"23":3,"25":2,"28":1,"49":2,"53":5,"56":3,"58":1,"59":2,"63":3,"64":28,"66":8,"69":1,"70":1,"71":5,"73":1,"74":4,"75":1,"76":2,"82":1,"84":1,"85":3,"88":2,"96":1,"97":7,"99":2,"100":3,"101":3,"102":1,"105":4,"108":6,"110":4,"111":1,"112":1,"116":125,"122":9,"125":7,"127":2,"135":7,"137":2,"138":1,"139":1,"146":3,"148":1,"150":4,"153":12,"155":1,"157":4,"159":2,"160":1,"162":1,"165":1,"167":1,"170":4,"174":1,"176":1,"182":1,"190":1,"192":3,"193":1,"195":1,"196":1,"197":4,"198":1,"199":2,"200":2}}],["only",{"2":{"0":1,"5":2,"6":12,"29":2,"49":1,"56":2,"58":2,"59":1,"60":1,"63":2,"64":4,"66":3,"69":1,"70":1,"73":1,"74":1,"75":1,"82":3,"85":2,"88":3,"121":3,"122":1,"124":1,"146":2,"153":1,"157":2,"168":1,"170":2,"174":1,"175":1,"177":2,"187":1,"188":2,"193":1,"199":1,"200":1}}],["often",{"2":{"192":1}}],["offers",{"2":{"191":1}}],["offer",{"2":{"176":1}}],["offset",{"2":{"53":8,"88":1}}],["off",{"2":{"4":2,"6":1,"64":4,"88":1,"116":6,"170":1}}],["of",{"0":{"80":1},"2":{"1":14,"3":58,"4":132,"5":10,"6":196,"7":2,"9":4,"17":3,"18":5,"19":1,"20":2,"21":1,"22":1,"23":1,"25":3,"28":2,"48":1,"49":2,"50":2,"52":1,"53":38,"55":5,"56":28,"57":9,"58":1,"59":13,"60":1,"62":3,"63":12,"64":84,"65":5,"66":31,"69":5,"70":12,"71":13,"73":10,"74":48,"75":9,"76":20,"77":5,"81":3,"82":3,"84":6,"85":18,"87":2,"88":19,"90":4,"91":5,"94":5,"96":6,"97":18,"99":1,"100":5,"101":5,"102":1,"103":2,"104":1,"105":1,"107":3,"108":14,"110":1,"111":1,"112":1,"114":2,"115":1,"116":85,"118":1,"119":3,"121":1,"122":13,"124":2,"125":15,"127":3,"128":7,"129":5,"130":1,"131":2,"132":1,"134":4,"135":18,"137":3,"138":6,"139":6,"140":4,"141":1,"142":1,"144":2,"145":3,"146":19,"147":2,"148":3,"150":12,"151":5,"152":2,"153":21,"155":1,"157":4,"158":2,"160":1,"161":1,"165":2,"167":4,"169":4,"170":7,"171":3,"172":1,"174":2,"175":2,"176":5,"177":2,"180":8,"182":4,"183":2,"184":1,"186":1,"188":4,"189":2,"191":6,"192":4,"193":2,"194":1,"195":4,"197":4,"198":4,"199":2}}],["org",{"2":{"70":1,"73":1,"75":1,"116":2,"182":1}}],["organise",{"2":{"10":1}}],["orange",{"2":{"68":1,"84":1,"87":2,"90":2,"107":2,"121":2,"134":2}}],["oro",{"2":{"11":2}}],["originate",{"2":{"76":1}}],["originals",{"2":{"48":1}}],["original",{"2":{"6":4,"18":1,"48":1,"64":10,"69":5,"70":1,"73":1,"76":4,"151":1,"153":7,"164":1,"171":2,"177":1,"179":4,"180":1}}],["orient",{"0":{"13":1},"1":{"14":1,"15":1},"2":{"13":7,"14":12,"64":15,"74":53}}],["orientation",{"0":{"143":1},"1":{"144":1,"145":1},"2":{"6":2,"10":1,"27":1,"56":1,"64":10,"66":2,"70":1,"73":2,"74":2,"75":1,"116":16,"144":1,"180":1}}],["ordered",{"2":{"55":1}}],["order",{"0":{"81":1},"2":{"1":8,"3":2,"4":4,"6":7,"53":1,"55":1,"56":2,"59":1,"64":4,"74":1,"76":1,"81":4,"82":1,"85":2,"88":3,"91":1,"94":1,"97":1,"119":1,"150":4,"153":1,"170":1,"172":2,"180":1,"197":1}}],["or",{"0":{"50":1},"2":{"1":22,"3":6,"4":20,"6":57,"18":1,"20":1,"21":1,"23":1,"25":2,"27":1,"28":1,"48":1,"49":1,"53":4,"56":1,"59":1,"60":1,"62":2,"63":4,"64":24,"65":1,"69":1,"70":1,"71":3,"73":2,"74":9,"75":1,"76":2,"77":1,"82":1,"84":2,"85":4,"88":3,"90":1,"97":1,"99":2,"100":1,"101":1,"102":1,"103":1,"104":1,"107":2,"110":2,"111":3,"112":2,"113":1,"114":1,"115":1,"116":26,"118":2,"119":1,"121":1,"122":2,"124":1,"125":1,"131":1,"132":1,"135":1,"137":2,"141":1,"142":1,"144":2,"145":3,"146":7,"148":4,"150":14,"152":1,"153":8,"154":2,"155":1,"157":2,"158":3,"159":1,"160":1,"162":1,"164":7,"165":2,"170":3,"172":2,"173":1,"174":2,"176":2,"177":2,"178":1,"180":3,"182":2,"184":2,"186":1,"189":2,"197":1,"199":2}}],["ecosystem",{"2":{"156":1}}],["effects",{"2":{"153":2,"170":1}}],["efficiently",{"2":{"20":1}}],["efficient",{"2":{"6":1,"59":1,"70":2,"73":2,"75":2,"82":1,"162":1}}],["e2",{"2":{"116":4}}],["e1",{"2":{"116":8}}],["euclid",{"2":{"66":2,"85":11,"116":1,"181":1}}],["euclidean",{"2":{"4":2,"6":3,"59":13,"85":6,"157":6,"177":1}}],["everything",{"2":{"180":1}}],["everywhere",{"2":{"157":1}}],["every",{"2":{"64":1,"88":2,"151":1,"188":1}}],["evenly",{"2":{"198":1}}],["eventually",{"2":{"64":1}}],["even",{"2":{"56":2,"66":1,"74":1,"85":1,"88":1,"148":1,"161":1,"167":1}}],["evaluated",{"2":{"197":1}}],["eval",{"2":{"27":6,"153":1,"170":1}}],["epsg",{"2":{"192":5,"193":8}}],["eps",{"2":{"53":2,"74":14}}],["eponymous",{"2":{"6":1,"176":1}}],["est",{"2":{"199":1}}],["essentially",{"2":{"29":1,"158":1}}],["especially",{"2":{"6":1,"18":1,"49":1,"146":1}}],["eg",{"2":{"28":1}}],["etc",{"0":{"155":1},"2":{"6":1,"20":2,"55":1,"82":1,"158":1,"195":1}}],["e",{"2":{"6":1,"9":1,"48":1,"60":1,"146":1,"151":1,"153":2,"157":1,"191":2,"192":1,"195":1}}],["eltype",{"2":{"146":4}}],["elements",{"2":{"103":1,"104":1,"114":1,"115":1,"122":1,"131":1,"132":1,"141":1,"142":1}}],["element",{"2":{"6":6,"52":1,"64":4,"69":2,"70":1,"73":1,"74":1,"75":3,"175":1,"192":1}}],["ellipsoid",{"2":{"6":1,"157":2,"196":1}}],["elsewhere",{"2":{"69":1}}],["elseif",{"2":{"64":5,"66":7,"70":1,"73":1,"74":14,"75":2,"76":1,"105":3,"116":10,"145":1,"146":2,"169":1,"182":2,"184":2}}],["else",{"2":{"3":12,"6":6,"53":1,"59":2,"64":19,"66":9,"69":1,"71":2,"74":9,"75":1,"76":9,"105":2,"116":17,"122":8,"146":20,"153":6,"155":2,"162":1,"170":2,"171":1,"173":1,"180":2,"182":4,"184":2,"185":1,"186":1,"188":1}}],["empty",{"2":{"4":4,"6":6,"53":2,"64":2,"70":1,"73":1,"74":2,"75":1,"146":2}}],["embedding",{"0":{"152":1,"166":1}}],["embedded",{"0":{"193":1},"2":{"146":1,"152":3,"190":1,"193":1}}],["embed",{"2":{"0":2,"4":1,"6":1,"152":1,"166":2}}],["errors",{"2":{"27":1,"74":1,"177":1}}],["error",{"0":{"173":1},"2":{"4":2,"6":4,"7":1,"18":1,"27":6,"28":2,"59":1,"60":4,"64":2,"72":1,"74":2,"88":2,"146":1,"151":1,"164":2,"173":3,"176":5,"184":4,"188":3,"189":1}}],["edgekeys",{"2":{"146":3}}],["edge",{"2":{"3":2,"4":6,"6":4,"20":1,"27":1,"56":1,"62":1,"64":25,"66":13,"70":1,"73":1,"74":6,"75":1,"85":4,"88":1,"99":2,"111":2,"112":1,"116":7,"122":21,"137":2,"138":1,"139":1,"146":7,"189":2}}],["edges`",{"2":{"74":1}}],["edges",{"2":{"0":1,"4":4,"6":9,"64":12,"66":8,"71":3,"74":10,"76":3,"85":3,"87":2,"88":1,"90":1,"99":1,"100":3,"101":7,"102":3,"107":1,"110":3,"113":1,"116":3,"122":20,"134":1,"137":1,"146":22,"189":29}}],["earlier",{"2":{"191":3}}],["earth",{"2":{"6":2,"21":1,"23":1,"157":2,"176":2,"180":1,"192":2,"197":1}}],["easiest",{"2":{"194":1}}],["easier",{"2":{"159":1,"187":1}}],["easily",{"2":{"148":1}}],["east",{"2":{"66":9}}],["easy",{"2":{"1":2,"6":1,"167":1,"185":1}}],["eachindex",{"2":{"53":1,"145":1,"146":3,"153":1,"170":1,"181":1,"184":1}}],["each",{"2":{"3":4,"4":6,"6":6,"9":1,"18":2,"20":1,"53":4,"56":2,"57":4,"59":1,"64":5,"66":1,"74":3,"85":1,"88":2,"97":1,"108":1,"116":6,"121":1,"122":3,"125":1,"135":1,"145":1,"146":1,"153":1,"167":2,"180":1,"194":1,"195":1,"198":2,"199":2,"200":1}}],["equator",{"2":{"6":1,"157":1}}],["equatorial",{"2":{"6":6,"176":4}}],["equality",{"2":{"64":1,"74":1,"197":1}}],["equal",{"2":{"3":4,"4":32,"6":19,"53":6,"74":1,"84":1,"85":4,"87":3,"88":22,"99":1,"110":1,"116":15,"121":1,"122":2,"127":2,"137":1,"161":1}}],["equals",{"0":{"36":1,"86":1,"87":1},"1":{"87":1,"88":1},"2":{"0":17,"4":5,"6":19,"27":1,"36":2,"53":2,"64":4,"69":2,"74":8,"85":1,"86":1,"87":2,"88":50,"99":1,"110":1,"116":10,"122":2,"127":3,"137":1,"197":1}}],["equivalent",{"2":{"3":2,"4":8,"6":6,"56":1,"64":1,"74":1,"76":1,"88":5,"97":1,"116":1}}],["enable",{"2":{"200":1}}],["enabled",{"2":{"197":1}}],["enabling",{"0":{"200":1}}],["enclosed",{"2":{"116":1}}],["encode",{"2":{"50":1}}],["encompasses",{"2":{"18":1,"116":1}}],["encounters",{"2":{"18":1}}],["en",{"2":{"116":1,"182":1}}],["envelope",{"2":{"74":2}}],["envelopes",{"2":{"74":2}}],["enough",{"2":{"64":1}}],["entirely",{"2":{"116":1}}],["entire",{"2":{"66":1,"116":4}}],["entry",{"2":{"64":11,"71":3,"74":4,"76":3,"146":1}}],["ent",{"2":{"64":19,"69":2}}],["enter",{"2":{"64":4}}],["ensuring",{"2":{"6":1,"174":1,"177":1}}],["ensure",{"2":{"6":3,"59":1,"70":1,"73":1,"75":1,"153":2,"160":2,"163":1}}],["ensures",{"2":{"6":3,"162":1,"165":3,"169":2}}],["enumerate",{"2":{"13":2,"53":1,"64":10,"66":1,"69":1,"71":1,"76":2,"116":1,"146":2,"169":2,"184":1}}],["enum",{"2":{"6":2,"64":3,"73":3,"116":3}}],["endpt",{"2":{"182":3}}],["endpoints",{"2":{"64":3,"66":1,"71":1,"74":6,"76":1,"85":2,"116":11,"122":2,"124":1}}],["endpoint=3",{"2":{"64":1}}],["endpointtype",{"2":{"64":2}}],["endpoint",{"2":{"3":2,"6":2,"64":27,"73":1,"74":16,"85":2,"96":1,"116":3,"122":2,"180":4,"182":4,"191":1}}],["ending",{"2":{"64":1,"66":1}}],["end",{"2":{"1":2,"6":1,"9":1,"13":4,"14":3,"27":6,"28":4,"31":1,"32":1,"33":1,"34":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"53":18,"56":8,"59":35,"60":3,"63":10,"64":130,"66":43,"69":9,"70":8,"71":12,"72":1,"73":5,"74":31,"75":6,"76":24,"82":3,"85":19,"88":20,"103":2,"104":2,"105":20,"114":2,"115":2,"116":104,"122":21,"127":1,"131":2,"132":2,"137":1,"141":2,"142":2,"145":9,"146":44,"147":4,"148":1,"150":2,"153":27,"155":15,"157":4,"158":1,"159":4,"160":1,"162":5,"164":3,"169":18,"170":17,"171":4,"172":1,"173":2,"176":8,"177":8,"180":7,"181":6,"182":30,"183":3,"184":27,"185":4,"186":4,"188":4,"189":19}}],["enforce",{"2":{"0":1,"6":2,"28":3,"188":3}}],["exits",{"2":{"64":1}}],["exit",{"2":{"64":32,"69":2,"71":3,"74":3,"76":2}}],["existingnodes",{"2":{"146":3}}],["existing",{"2":{"64":3,"75":1,"146":1,"192":2,"194":1}}],["exists",{"2":{"64":1,"66":1,"74":1}}],["exist",{"2":{"6":1,"64":1,"74":3,"188":1}}],["excluding",{"2":{"113":1,"116":1,"137":2}}],["exclude",{"2":{"105":9}}],["exclusively",{"2":{"129":1}}],["exclusive",{"2":{"66":1,"74":2}}],["exc",{"2":{"60":2,"173":2,"176":2}}],["excellent",{"2":{"49":1}}],["except",{"2":{"18":1,"19":1}}],["excess",{"2":{"5":2,"6":1,"59":1}}],["exp10",{"2":{"176":1,"180":2}}],["expressed",{"2":{"57":2}}],["express",{"2":{"57":1}}],["experimental",{"2":{"27":3}}],["expect",{"2":{"1":2,"118":1,"172":1}}],["explain",{"2":{"22":1}}],["explanations",{"2":{"22":3}}],["explicitly",{"2":{"6":1,"18":1,"50":1,"53":2,"56":1,"59":1,"60":1,"85":2,"88":1,"173":1,"176":1,"177":1}}],["expose",{"2":{"77":1}}],["exposes",{"2":{"17":1}}],["exported",{"2":{"27":1}}],["export",{"2":{"27":2,"57":1,"157":2,"174":1,"193":1,"195":1}}],["exponential",{"2":{"9":1}}],["ext2",{"2":{"116":3}}],["ext1",{"2":{"116":3}}],["ext",{"2":{"58":15,"64":10,"66":2,"69":3,"70":8,"73":8,"74":18,"75":8,"76":14,"105":7,"116":7}}],["extrema",{"2":{"146":1,"189":1}}],["extreem",{"2":{"53":10}}],["extracts",{"2":{"82":1}}],["extract",{"2":{"82":1,"146":1,"153":1,"170":2,"180":1}}],["extra",{"2":{"6":3,"64":1,"75":1,"174":1,"176":2,"177":1}}],["external",{"2":{"56":1,"116":2}}],["exteriors",{"2":{"9":1,"73":2,"75":2,"146":1}}],["exterior",{"2":{"3":8,"4":4,"6":10,"53":1,"55":1,"56":1,"58":1,"59":36,"63":2,"64":4,"70":2,"75":3,"76":14,"85":1,"88":2,"90":1,"91":1,"94":1,"97":3,"108":2,"116":9,"125":2,"134":1,"135":3,"138":3,"139":3,"145":6,"146":6,"162":3,"163":1,"165":1,"166":1,"191":2}}],["extending",{"2":{"122":1}}],["extended",{"2":{"6":1,"85":1,"157":2}}],["extensions",{"2":{"77":1,"195":1}}],["extension",{"2":{"1":2,"6":1,"59":1,"60":1,"82":1,"96":1,"147":1,"172":3,"173":2,"176":1,"177":1,"178":1,"195":1}}],["extent`",{"2":{"154":1,"166":1}}],["extent=true",{"2":{"166":1}}],["extent=nothing",{"2":{"155":1}}],["extent=",{"2":{"153":4}}],["extent=false",{"2":{"153":1,"180":1}}],["extent=gi",{"2":{"146":3}}],["extents",{"2":{"4":6,"6":3,"27":5,"66":1,"74":3,"116":5,"122":1,"146":3,"153":2,"166":2,"189":2}}],["extent",{"0":{"166":1},"2":{"0":2,"1":8,"4":5,"6":11,"27":2,"28":1,"31":2,"32":2,"33":2,"34":2,"46":1,"50":1,"58":1,"65":1,"66":1,"74":10,"116":4,"122":2,"146":12,"150":4,"152":4,"153":29,"154":3,"155":2,"159":1,"166":2,"180":1,"189":7}}],["exactly",{"2":{"184":1}}],["exactpredicates",{"2":{"7":1,"13":2,"14":2,"27":1}}],["exact",{"2":{"3":10,"6":5,"7":2,"12":1,"13":1,"64":36,"66":6,"69":7,"70":5,"72":1,"73":5,"74":7,"75":5,"76":7,"91":2,"94":2,"97":3,"99":1,"100":3,"101":3,"102":1,"105":1,"108":2,"110":1,"111":3,"112":2,"113":1,"116":24,"119":2,"122":3,"125":2,"127":1,"128":3,"129":1,"130":1,"135":3,"137":1,"138":3,"139":3,"140":1,"146":1,"168":1}}],["examples",{"0":{"175":1,"179":1},"2":{"3":16,"4":2,"6":11,"22":2,"88":1,"91":1,"94":1,"97":1,"105":1,"108":1,"122":1,"125":1,"135":1,"145":2,"189":1}}],["example",{"0":{"58":1,"78":1,"161":1,"168":1,"198":1,"199":1},"1":{"79":1},"2":{"1":6,"3":4,"6":13,"11":1,"20":1,"49":2,"52":1,"55":1,"58":1,"62":1,"63":1,"65":1,"68":1,"69":1,"70":1,"73":1,"74":1,"75":1,"84":1,"87":1,"88":1,"90":1,"93":1,"96":1,"105":1,"107":1,"116":1,"118":1,"119":1,"121":1,"124":1,"134":1,"145":1,"146":8,"148":1,"150":4,"153":2,"161":1,"163":1,"167":1,"168":1,"171":1,"179":1,"180":2,"185":1,"188":1,"198":1,"200":1}}],["either",{"2":{"1":4,"3":2,"6":4,"21":1,"23":1,"48":1,"64":9,"70":1,"73":1,"74":2,"75":1,"76":1,"84":1,"97":1,"116":5,"118":1,"124":1,"125":1,"135":1,"146":1,"150":4,"153":3,"164":1,"197":1}}],["lj",{"2":{"146":2}}],["lrs",{"2":{"180":2}}],["lr",{"2":{"146":3,"153":3}}],["lp",{"2":{"116":2}}],["lstart",{"2":{"116":2}}],["ls",{"2":{"116":12}}],["ll",{"2":{"17":1,"58":1,"175":2,"180":1,"192":1,"194":1}}],["l",{"2":{"14":4,"59":6,"105":2,"116":32}}],["lgeos",{"2":{"180":1}}],["lg",{"2":{"13":1,"14":1,"15":2,"28":5,"29":1,"31":3,"32":3,"33":3,"34":3,"36":3,"37":3,"38":3,"39":3,"40":3,"41":3,"42":3,"43":3,"44":3,"45":3,"46":3,"81":4,"176":9,"180":17}}],["l305",{"2":{"6":1}}],["log10",{"2":{"176":2,"180":4}}],["log",{"2":{"155":4,"175":2}}],["loudly",{"2":{"153":1}}],["location",{"2":{"64":1,"116":6}}],["local",{"2":{"53":3,"56":1,"64":4,"71":1,"76":1,"146":1}}],["locally",{"2":{"6":1,"157":2}}],["loose",{"2":{"160":1}}],["lookup",{"2":{"146":1,"153":1}}],["looks",{"2":{"62":1}}],["look",{"2":{"55":2,"146":2,"161":1,"175":1}}],["looping",{"2":{"146":1}}],["loop",{"2":{"53":1,"59":2,"63":3,"64":8,"66":1,"74":1,"76":1,"116":5,"146":3,"182":1}}],["lower",{"2":{"6":1,"7":1,"146":1,"198":1}}],["lon",{"2":{"6":3,"175":1,"176":2}}],["longitude",{"2":{"6":3,"157":3,"192":2}}],["long",{"2":{"6":1,"74":1,"176":1,"199":1}}],["longer",{"2":{"6":3,"174":1,"176":2,"177":1}}],["lots",{"2":{"192":1}}],["lot",{"2":{"6":1,"49":1,"53":1,"56":1,"63":1,"66":1,"85":1,"88":1,"122":1,"148":1,"175":1,"188":2}}],["load",{"2":{"153":1,"170":1,"180":1,"190":2}}],["loading",{"2":{"60":1,"173":1,"176":1}}],["loads",{"2":{"5":2,"6":1,"59":1}}],["loaded",{"2":{"1":2,"60":3,"172":1,"173":2,"176":2}}],["laptop",{"2":{"199":1}}],["land",{"2":{"192":8}}],["layers",{"2":{"151":1}}],["label",{"2":{"14":4,"15":2,"79":2,"81":1,"84":1,"146":3,"175":2,"179":2,"180":2}}],["labels",{"2":{"13":2,"146":1}}],["lazily",{"2":{"6":1,"155":1}}],["later",{"2":{"56":1,"81":1,"146":1}}],["latitude",{"2":{"6":3,"157":3,"192":2}}],["lat",{"2":{"6":4,"175":1,"176":3}}],["larger",{"2":{"64":1,"75":1,"184":1}}],["large",{"2":{"6":8,"59":1,"180":2,"195":1,"199":1}}],["lastindex",{"2":{"184":1}}],["last",{"2":{"4":6,"6":3,"9":1,"53":11,"56":2,"58":2,"64":9,"66":4,"85":7,"88":5,"116":20,"127":1,"146":6,"161":1,"169":2,"182":1}}],["lt",{"2":{"6":6,"74":4,"175":1}}],["len",{"2":{"182":7}}],["length",{"2":{"0":1,"5":2,"6":5,"9":1,"18":1,"59":32,"61":1,"62":1,"63":22,"64":11,"66":1,"69":2,"70":2,"73":1,"74":1,"75":1,"76":1,"116":1,"146":16,"153":2,"169":2,"170":1,"175":1,"181":1,"182":1,"183":1,"184":7}}],["legend",{"2":{"180":4}}],["le",{"2":{"116":10}}],["leaving",{"2":{"161":1}}],["leaf",{"2":{"153":1,"155":3}}],["leading",{"2":{"191":1}}],["lead",{"2":{"74":1,"161":1}}],["least",{"2":{"3":8,"6":4,"64":1,"74":1,"76":2,"116":14,"122":6,"125":1,"128":3,"129":2,"130":2,"131":1,"132":1,"135":1,"141":1,"145":1}}],["leftjoin",{"2":{"197":1}}],["leftover",{"2":{"64":1}}],["left=1",{"2":{"64":1}}],["left",{"2":{"59":1,"64":5,"145":1,"146":2,"182":17,"184":5}}],["lets",{"2":{"56":1}}],["let",{"2":{"55":1,"62":1,"116":1,"146":3,"175":1,"191":6,"192":4,"193":3,"194":2,"195":2,"200":1}}],["levels",{"2":{"6":1,"146":1,"151":1,"158":1}}],["level",{"2":{"6":1,"7":1,"9":1,"18":2,"20":1,"25":1,"151":1,"153":2,"160":1,"162":1,"164":5,"165":1,"167":1,"169":2,"193":2}}],["less",{"2":{"3":2,"6":7,"53":1,"56":1,"59":1,"63":1,"66":1,"85":1,"88":1,"105":1,"122":1,"146":1,"180":1,"181":1}}],["l289",{"2":{"6":1}}],["l2",{"2":{"3":8,"4":8,"6":8,"87":4,"88":12,"90":8,"94":2,"107":5,"121":4,"124":3,"125":2,"134":8}}],["l195",{"2":{"6":1}}],["l177",{"2":{"6":1}}],["l1",{"2":{"3":12,"4":8,"6":10,"87":4,"88":12,"90":8,"93":4,"94":2,"96":4,"97":2,"107":5,"121":4,"124":3,"125":2,"134":8}}],["li",{"2":{"146":2}}],["lie",{"2":{"74":1}}],["lies",{"2":{"6":1,"64":3,"157":1,"198":1}}],["limitations",{"2":{"74":1}}],["limits",{"2":{"58":1}}],["limited",{"2":{"6":1,"174":1,"177":1}}],["library",{"2":{"69":1,"195":1}}],["libraries",{"2":{"56":1,"167":1,"195":1}}],["libgeos",{"2":{"6":2,"13":1,"14":1,"15":1,"28":2,"49":1,"56":1,"60":5,"81":1,"147":1,"176":7,"180":4,"188":2}}],["little",{"2":{"22":1}}],["literate",{"2":{"22":1,"27":1,"28":1,"46":1,"53":1,"56":1,"59":1,"60":1,"63":1,"64":1,"66":1,"69":1,"71":1,"72":1,"74":1,"76":1,"82":1,"85":1,"88":1,"91":1,"94":1,"104":1,"105":1,"115":1,"116":1,"119":1,"122":1,"132":1,"142":1,"145":1,"146":1,"147":1,"153":1,"154":1,"155":1,"159":1,"162":1,"165":1,"166":1,"169":1,"170":1,"171":1,"173":1,"177":1,"184":1,"185":1,"186":1,"188":1,"189":1}}],["lift",{"2":{"14":2}}],["lin",{"2":{"176":5}}],["linked",{"2":{"77":1}}],["linrange",{"2":{"13":2,"14":5,"58":2,"84":1,"146":2,"176":1,"180":2}}],["linering",{"2":{"192":1}}],["linewidth",{"2":{"55":1,"191":1}}],["linesegment",{"2":{"145":2,"177":1}}],["lines",{"0":{"100":1,"111":1,"128":1,"138":1},"2":{"3":2,"4":8,"6":5,"64":3,"68":1,"74":9,"79":1,"80":2,"81":2,"84":1,"87":4,"88":4,"90":3,"93":2,"96":1,"97":1,"105":1,"107":3,"116":2,"118":3,"121":4,"122":2,"124":4,"134":3,"135":1,"146":3,"178":1,"191":4,"196":2}}],["linestrings",{"2":{"4":4,"6":2,"9":1,"88":2,"144":1,"160":1,"191":1}}],["linestringtrait",{"2":{"3":4,"4":8,"6":9,"11":3,"28":1,"53":1,"63":4,"73":2,"85":2,"88":8,"99":1,"100":4,"101":1,"105":6,"110":1,"111":5,"122":4,"127":1,"128":4,"129":1,"137":1,"138":4,"139":1,"151":1,"158":2,"164":3,"165":1,"177":2}}],["linestring",{"2":{"3":10,"4":12,"6":15,"18":1,"20":1,"53":2,"63":2,"85":4,"87":2,"88":2,"90":2,"91":1,"94":2,"99":1,"100":3,"107":2,"108":1,"110":1,"111":4,"116":2,"121":2,"127":1,"128":3,"129":1,"134":2,"135":1,"137":1,"138":4,"139":1,"145":7,"153":2,"170":2,"189":3,"191":5,"196":1}}],["linetrait",{"2":{"3":4,"4":8,"6":6,"53":1,"64":2,"69":2,"73":2,"85":2,"88":8,"99":1,"100":4,"101":1,"110":1,"111":5,"122":4,"127":1,"128":4,"129":1,"137":1,"138":4,"139":1}}],["line2",{"2":{"3":6,"6":7,"73":2,"74":2,"105":5,"118":3,"119":2,"122":3,"145":5}}],["line1",{"2":{"3":8,"6":8,"73":2,"74":2,"105":5,"118":3,"119":2,"122":5,"145":5}}],["linea",{"2":{"1":2,"6":1,"185":1}}],["linearmap",{"2":{"180":1}}],["linearalgebra",{"2":{"27":1}}],["linear",{"2":{"4":14,"6":10,"9":1,"56":2,"59":1,"62":1,"63":3,"66":1,"74":1,"85":5,"88":8,"101":1,"116":2,"128":1,"129":2,"138":1,"144":1,"153":1,"157":1,"162":3,"170":1,"175":5,"176":3,"177":4}}],["linearr",{"2":{"1":2,"6":1,"185":1}}],["linearrings",{"2":{"9":1,"112":1,"146":6,"160":1,"191":1}}],["linearringtrait",{"2":{"4":8,"6":6,"11":3,"28":1,"53":3,"56":2,"63":4,"64":4,"73":2,"85":2,"88":8,"99":1,"100":1,"101":4,"110":1,"111":2,"112":3,"127":1,"128":1,"129":4,"137":1,"138":1,"139":4,"158":2,"164":1,"177":2,"180":1}}],["linearring",{"2":{"1":20,"3":4,"4":2,"6":15,"53":2,"63":2,"64":2,"75":2,"76":1,"82":1,"85":1,"99":1,"101":3,"110":1,"111":1,"112":2,"116":2,"122":4,"127":1,"128":1,"129":3,"137":1,"139":4,"145":1,"146":3,"150":4,"153":5,"160":1,"161":6,"162":1,"168":13,"170":2,"180":1,"185":8,"191":24,"192":6,"193":8,"198":2}}],["linearsegments",{"2":{"0":1,"6":4,"174":1,"175":1,"176":3,"177":5}}],["line",{"0":{"116":1},"2":{"0":1,"3":26,"4":18,"6":52,"49":1,"52":2,"53":7,"62":3,"63":10,"64":12,"66":8,"68":6,"69":18,"73":8,"74":67,"76":6,"85":11,"88":5,"91":2,"93":1,"96":2,"97":1,"99":2,"100":11,"101":8,"105":11,"108":2,"110":1,"111":9,"112":4,"116":141,"118":2,"119":2,"121":3,"122":12,"124":2,"125":2,"127":1,"128":10,"129":3,"135":2,"137":2,"138":10,"139":7,"145":6,"146":2,"177":1,"180":1,"181":1,"182":4,"183":1,"189":3,"191":3}}],["lineorientation",{"2":{"0":1,"6":2,"73":2}}],["lists",{"2":{"20":1,"64":3,"122":1}}],["listed",{"2":{"6":1,"53":1,"180":1}}],["list",{"2":{"6":16,"9":1,"53":20,"64":233,"69":20,"70":14,"71":8,"73":13,"74":5,"75":13,"76":1,"199":2}}],["likely",{"2":{"151":1}}],["like",{"0":{"72":1},"2":{"1":4,"6":9,"17":1,"18":2,"19":1,"20":1,"25":1,"49":1,"50":1,"56":1,"58":1,"59":1,"62":1,"66":1,"70":1,"73":1,"75":1,"82":1,"84":1,"85":1,"88":1,"148":2,"150":4,"153":1,"158":2,"164":3,"165":1,"170":2,"174":1,"175":1,"192":2}}],["iah",{"2":{"196":2}}],["image",{"2":{"146":1}}],["impossible",{"2":{"69":1,"121":1}}],["important",{"2":{"175":1}}],["import",{"2":{"1":6,"6":5,"13":2,"14":2,"15":1,"27":10,"52":1,"55":1,"60":1,"62":1,"65":1,"69":1,"70":1,"73":1,"74":1,"75":1,"84":1,"87":1,"88":1,"90":1,"91":1,"93":1,"94":1,"96":1,"97":1,"105":1,"107":1,"108":1,"118":1,"119":1,"121":1,"122":1,"124":1,"125":1,"134":1,"135":1,"145":3,"150":2,"153":2,"170":1,"173":1,"176":2,"179":2,"180":3,"185":2,"189":1,"190":5}}],["implements",{"2":{"28":1,"188":1}}],["implementing",{"2":{"6":1,"180":1}}],["implement",{"2":{"6":1,"17":1,"49":1,"53":1,"56":1,"59":1,"63":1,"66":1,"82":1,"85":1,"88":1,"97":1,"108":1,"122":1,"125":1,"135":1,"148":1,"163":1,"164":4,"165":1}}],["implementation",{"0":{"53":1,"56":1,"63":1,"66":1,"69":1,"82":1,"85":1,"88":1,"91":1,"94":1,"97":1,"108":1,"119":1,"122":1,"125":1,"135":1,"162":1,"169":1,"177":1},"2":{"6":1,"53":3,"56":3,"59":1,"63":3,"66":3,"75":1,"85":3,"88":3,"91":1,"94":1,"97":2,"108":2,"119":1,"122":3,"125":2,"135":2,"146":2,"147":1,"153":1,"170":1,"172":1,"180":1,"188":1}}],["implementations",{"2":{"6":1,"97":1,"108":1,"125":1,"135":1,"147":1,"178":1,"188":3}}],["implemented",{"0":{"147":1},"2":{"1":2,"6":2,"27":1,"56":1,"59":3,"69":2,"71":2,"74":2,"76":2,"82":1,"85":2,"147":1,"148":2,"164":2,"170":1,"172":1,"178":1}}],["improvements",{"2":{"9":2,"10":1}}],["improve",{"2":{"4":2,"6":1,"166":1}}],["i=2",{"2":{"145":1}}],["ipoints",{"2":{"116":4}}],["ip",{"2":{"88":2}}],["ipt",{"2":{"64":8}}],["ihole",{"2":{"88":2}}],["ih",{"2":{"76":22}}],["i2",{"2":{"66":2}}],["i1",{"2":{"66":2}}],["ii",{"2":{"64":8}}],["io",{"2":{"60":5,"173":5,"176":5}}],["i+1",{"2":{"59":8,"146":1,"182":2,"184":1}}],["i",{"2":{"9":1,"13":4,"48":1,"53":14,"56":1,"59":16,"64":28,"66":4,"71":2,"75":2,"76":4,"85":2,"88":8,"105":7,"116":28,"145":14,"146":17,"153":8,"170":8,"177":2,"181":3,"182":12,"184":28,"189":2,"191":2,"192":1,"199":3}}],["id",{"2":{"194":1}}],["identical",{"2":{"153":1,"168":1}}],["identity",{"2":{"146":4,"155":2,"166":1}}],["ideal",{"2":{"146":1}}],["idea",{"2":{"6":1,"20":1,"21":1,"23":1,"59":1,"148":1,"170":1}}],["idx`",{"2":{"64":1}}],["idx",{"2":{"53":6,"64":167,"66":9,"69":23,"70":5,"73":5,"75":2,"169":34,"182":51}}],["id=",{"2":{"6":2}}],["ignored",{"2":{"6":1,"146":1}}],["ignore",{"2":{"6":1,"146":2}}],["innerjoin",{"2":{"197":1,"198":1,"199":1}}],["inner",{"2":{"116":6,"153":5}}],["in=1",{"2":{"116":1}}],["in`",{"2":{"116":1}}],["inaccuracies",{"2":{"74":1}}],["inject",{"0":{"72":1},"2":{"173":1}}],["ind",{"2":{"199":2}}],["individual",{"2":{"193":1}}],["indicate",{"2":{"155":1}}],["indicates",{"2":{"20":1}}],["indices",{"2":{"64":4,"153":2,"170":2,"184":16}}],["indeed",{"2":{"161":1}}],["index",{"2":{"59":8,"64":11,"116":1,"153":1,"182":1}}],["inds",{"2":{"146":3}}],["inplace",{"2":{"59":1}}],["inputs",{"2":{"6":1,"64":1,"88":1,"91":1,"94":1,"119":1,"184":1}}],["input",{"2":{"6":12,"53":1,"69":1,"70":1,"73":1,"74":1,"75":1,"146":1,"148":1,"170":1,"176":3,"177":2,"181":1,"182":1,"183":1,"192":1}}],["inbounds",{"2":{"59":16,"85":5,"116":1}}],["inspiration",{"2":{"69":1}}],["inspired",{"2":{"68":1,"69":2}}],["inside",{"2":{"53":3,"62":1,"64":3,"66":1,"70":1,"71":1,"73":1,"74":1,"75":1,"76":2,"84":3,"85":1,"99":1,"116":1,"134":1,"137":1,"146":2}}],["insertion",{"2":{"64":1}}],["insert",{"2":{"53":1,"182":1}}],["instability",{"2":{"50":2}}],["instantiating",{"2":{"20":1}}],["instead",{"2":{"18":1,"50":1,"170":1}}],["instructs",{"2":{"6":1,"188":2}}],["inline",{"2":{"28":1,"116":4,"145":1,"153":12,"159":2,"170":10}}],["init=nothing",{"2":{"170":1}}],["init=typemax",{"2":{"85":2}}],["init=zero",{"2":{"56":1,"66":1}}],["initial",{"2":{"74":2,"176":1}}],["initially",{"2":{"64":1}}],["initialize",{"2":{"59":3,"63":2,"64":1,"74":1}}],["init",{"2":{"19":1,"27":1,"53":1,"63":2,"170":30,"176":4}}],["incorrect",{"2":{"160":1,"161":1}}],["increase",{"2":{"64":1,"116":1}}],["increasing",{"2":{"6":1,"180":1}}],["increment",{"2":{"59":5}}],["including",{"2":{"53":1,"64":2,"74":1,"85":1,"99":1,"100":1,"101":1,"102":1,"116":2}}],["include",{"2":{"27":44,"53":1,"64":1,"77":1,"85":2,"159":1,"180":2,"193":2,"194":1}}],["included",{"2":{"6":2,"76":2,"165":2,"169":2,"193":1}}],["includes",{"2":{"4":4,"6":2,"76":1,"85":2,"88":1,"116":1}}],["incircle",{"0":{"16":1}}],["investigate",{"2":{"146":1}}],["investigating",{"0":{"81":1}}],["inverted",{"2":{"6":1,"82":1}}],["invalid",{"2":{"20":1,"71":2,"161":1,"167":1,"168":1}}],["invoke",{"2":{"20":1}}],["involved",{"2":{"148":1}}],["involve",{"2":{"20":1}}],["involving",{"2":{"6":3,"70":1,"73":1,"75":1}}],["invocation",{"2":{"18":1}}],["inv",{"2":{"6":2,"157":3}}],["ing",{"2":{"1":2,"6":2,"59":1,"185":1}}],["intr",{"2":{"64":28,"66":9,"69":16,"74":8}}],["intr2",{"2":{"64":2,"74":14}}],["intr1",{"2":{"64":3,"74":21,"116":2}}],["intrs",{"2":{"64":10,"74":5}}],["introducing",{"2":{"50":1}}],["introduces",{"2":{"50":1}}],["introduction",{"0":{"23":1},"1":{"24":1,"25":1,"26":1}}],["int",{"2":{"64":6,"76":7,"105":7,"177":1,"180":1,"182":5,"183":1,"184":1}}],["integrate",{"2":{"56":1}}],["integrating",{"2":{"56":1}}],["integrals",{"2":{"55":1}}],["integral",{"2":{"55":1}}],["intended",{"2":{"6":1,"164":3,"165":1}}],["intermediate",{"2":{"66":1}}],["inter2",{"2":{"66":15}}],["inter1",{"2":{"66":23}}],["interpreted",{"2":{"59":1}}],["interpolation",{"2":{"5":2,"6":1,"58":1,"59":2,"174":1}}],["interpolated",{"2":{"5":6,"6":3,"59":17,"174":1}}],["interpolate",{"2":{"0":2,"5":3,"6":4,"57":1,"58":2,"59":25}}],["interest",{"2":{"59":1,"85":1}}],["internal",{"2":{"58":1}}],["internals",{"2":{"50":1}}],["inter",{"2":{"6":3,"64":21,"69":1,"70":1,"73":5,"74":4}}],["interface",{"0":{"164":1},"2":{"6":3,"20":1,"77":1,"82":1,"153":1,"163":1,"164":5,"165":1,"180":1,"192":1}}],["interacted",{"2":{"116":1}}],["interaction",{"0":{"116":1},"2":{"116":2}}],["interactions",{"2":{"64":1,"76":3,"116":15}}],["interactive",{"2":{"13":1,"14":1}}],["interacting",{"2":{"6":1,"73":1,"116":2}}],["interacts",{"2":{"3":2,"6":1,"116":3,"124":1,"125":1,"128":3,"129":1,"130":1}}],["interact",{"2":{"3":4,"6":2,"75":1,"76":1,"107":1,"116":5,"119":1,"124":1,"125":1,"127":1,"128":2,"129":2,"130":1}}],["interior",{"2":{"3":12,"6":7,"53":9,"55":1,"59":7,"63":5,"64":1,"76":18,"90":1,"91":1,"93":2,"94":1,"96":1,"97":3,"100":5,"101":1,"102":2,"105":1,"108":2,"110":2,"111":6,"112":3,"116":15,"124":1,"125":3,"128":1,"129":2,"130":2,"134":1,"135":3,"140":2,"145":2,"162":1,"165":1}}],["interiors",{"2":{"3":12,"6":7,"59":20,"90":1,"91":1,"93":1,"94":1,"96":1,"107":1,"108":1,"113":1,"116":5,"118":1,"119":1,"124":1,"125":1,"127":1,"128":2,"129":1,"134":1,"135":1,"138":3,"139":3}}],["intersectingpolygons",{"2":{"6":3}}],["intersecting",{"0":{"167":1},"1":{"168":1,"169":1},"2":{"6":4,"27":1,"64":2,"76":2,"165":4,"167":1,"169":4}}],["intersections",{"0":{"74":1},"2":{"64":2,"66":2,"71":1,"73":2,"74":1,"76":1,"116":2}}],["intersection",{"0":{"33":1,"73":1,"117":1},"1":{"118":1,"119":1},"2":{"0":2,"3":6,"6":19,"9":1,"15":4,"27":1,"33":2,"49":1,"64":38,"66":6,"69":3,"70":4,"71":4,"73":15,"74":73,"75":2,"76":2,"105":2,"116":6,"118":1,"122":5}}],["intersect",{"2":{"3":16,"6":11,"64":4,"66":3,"70":2,"73":1,"74":1,"75":1,"76":5,"90":1,"91":2,"94":1,"96":1,"97":1,"108":1,"111":1,"113":1,"116":4,"118":2,"122":1,"134":1,"135":2,"138":3,"139":3,"168":1,"169":4}}],["intersects",{"0":{"45":1,"118":1},"2":{"0":2,"3":5,"6":6,"27":1,"45":2,"64":1,"74":2,"76":2,"105":2,"117":1,"118":4,"119":4,"122":5,"140":1,"169":2,"197":1}}],["into",{"2":{"5":2,"6":7,"17":1,"22":1,"53":1,"56":1,"59":1,"63":4,"64":2,"69":1,"70":1,"73":1,"116":1,"146":4,"153":3,"154":1,"155":1,"158":1,"169":1,"170":2,"180":1,"189":2,"191":2,"197":1}}],["int64",{"2":{"1":12,"6":6,"161":6,"181":1,"182":1,"184":1,"185":6,"191":14}}],["infinity",{"2":{"116":1,"122":1}}],["info",{"2":{"6":2,"174":1}}],["information",{"0":{"193":1},"2":{"6":1,"25":1,"59":1,"64":2,"65":1,"74":1,"82":1,"116":1,"190":1,"193":3,"195":2}}],["influence",{"2":{"6":1,"157":1}}],["inf",{"2":{"1":2,"9":1,"69":2,"181":1,"184":3}}],["in",{"0":{"49":1},"2":{"1":12,"3":6,"4":2,"5":8,"6":54,"7":1,"9":2,"13":6,"14":2,"17":2,"18":4,"20":1,"21":1,"22":3,"23":1,"25":1,"26":1,"27":3,"28":1,"29":1,"49":3,"50":2,"53":7,"55":1,"56":3,"57":2,"59":22,"60":1,"62":2,"63":5,"64":72,"66":31,"69":6,"70":9,"71":3,"73":5,"74":29,"75":11,"76":28,"81":1,"82":3,"84":6,"85":6,"87":1,"88":17,"90":2,"91":1,"94":1,"97":10,"100":1,"101":1,"102":1,"103":1,"104":1,"105":7,"108":9,"110":1,"111":1,"112":1,"114":1,"115":1,"116":135,"118":2,"119":1,"121":1,"122":11,"124":1,"125":11,"129":1,"131":1,"132":1,"134":1,"135":10,"138":3,"139":3,"141":1,"142":1,"145":4,"146":10,"147":3,"148":1,"150":4,"151":2,"152":1,"153":8,"155":4,"156":1,"157":5,"158":1,"159":1,"163":1,"164":1,"165":2,"166":1,"167":1,"169":7,"170":4,"171":2,"172":3,"173":1,"174":2,"175":2,"176":14,"177":7,"178":1,"180":5,"181":2,"182":4,"183":1,"184":5,"185":2,"186":1,"187":4,"188":4,"189":8,"190":1,"191":2,"192":6,"195":2,"197":4,"198":3,"199":1,"200":1}}],["itererable",{"2":{"189":1}}],["iter",{"2":{"155":31}}],["iterate",{"2":{"59":2,"151":1,"153":1,"155":4}}],["iteration",{"2":{"56":1}}],["iterators",{"2":{"13":1,"59":1,"64":5,"66":3,"73":1,"76":2,"146":1,"153":2,"155":8,"169":6,"170":3,"177":1}}],["iterator",{"2":{"6":2,"64":4,"73":2,"155":2}}],["iterabletype",{"2":{"153":5,"170":6}}],["iterable",{"2":{"4":2,"6":3,"18":1,"56":1,"66":1,"82":1,"153":17,"155":10,"170":15,"191":1}}],["iterables",{"2":{"1":4,"6":2,"48":1,"150":4,"153":1,"155":3,"170":2}}],["ith",{"2":{"64":3,"76":7}}],["itself",{"2":{"66":1,"145":1,"151":1}}],["its",{"2":{"5":2,"6":10,"18":1,"55":1,"59":1,"64":2,"66":4,"76":1,"100":1,"155":1,"163":1,"180":1,"181":1,"182":1,"183":3,"197":1}}],["it",{"2":{"1":8,"4":2,"6":21,"9":1,"18":11,"19":2,"20":1,"25":3,"26":1,"48":1,"52":1,"53":1,"55":2,"56":3,"58":1,"60":1,"63":2,"64":2,"65":1,"66":2,"70":1,"71":1,"73":1,"74":4,"75":1,"76":3,"81":2,"82":2,"85":3,"88":1,"96":2,"99":3,"110":3,"116":14,"121":1,"122":1,"127":2,"137":3,"144":1,"145":2,"146":4,"148":3,"150":2,"151":3,"152":1,"153":8,"155":4,"157":1,"158":2,"159":2,"161":1,"162":1,"163":1,"165":1,"167":1,"170":5,"172":5,"175":2,"176":1,"180":1,"182":1,"187":1,"188":7,"192":3,"193":3,"195":3,"199":2,"200":2}}],["iff",{"2":{"153":1}}],["if",{"0":{"72":1},"2":{"1":10,"3":34,"4":38,"5":2,"6":74,"18":1,"27":1,"28":1,"48":2,"52":1,"53":15,"55":1,"56":6,"59":5,"60":3,"63":1,"64":95,"66":36,"69":8,"70":13,"71":12,"73":9,"74":44,"75":10,"76":22,"82":3,"84":2,"85":8,"87":2,"88":35,"90":1,"91":1,"93":1,"94":1,"96":1,"97":2,"99":4,"100":3,"101":3,"102":2,"103":1,"104":1,"105":9,"107":1,"108":3,"110":5,"111":4,"112":2,"113":2,"114":1,"115":1,"116":132,"118":1,"119":1,"121":4,"122":16,"124":1,"125":2,"127":4,"128":3,"129":2,"130":2,"131":1,"132":1,"134":1,"135":2,"137":5,"138":3,"139":3,"140":1,"141":1,"142":1,"145":5,"146":35,"150":6,"151":1,"153":19,"155":7,"159":1,"162":1,"164":1,"165":2,"166":1,"167":1,"169":12,"170":6,"171":1,"172":3,"173":2,"176":6,"177":2,"180":1,"182":12,"184":12,"185":1,"186":1,"188":2,"192":1,"195":1,"198":2,"199":1}}],["isolate",{"2":{"180":1}}],["isodd",{"2":{"69":1}}],["istable",{"2":{"153":1,"155":1,"170":1}}],["isparallel",{"2":{"116":1,"145":8}}],["is3d",{"2":{"88":1,"155":1,"171":1,"185":1,"186":1,"189":10}}],["issue",{"2":{"64":1}}],["issues",{"2":{"21":1,"23":1}}],["isequal",{"2":{"146":1}}],["iseven",{"2":{"116":1}}],["isempty",{"2":{"56":1,"59":4,"66":1,"70":1,"71":2,"73":1,"146":1,"164":1,"182":1}}],["isexported",{"2":{"27":1}}],["isa",{"2":{"18":1,"59":9,"153":3,"170":1,"189":1}}],["isnothing",{"2":{"60":1,"64":9,"69":1,"71":2,"74":2,"76":2,"88":1,"146":1,"173":1,"176":1,"180":1,"181":1,"182":5,"183":1,"184":6}}],["isn",{"2":{"6":1,"56":1,"64":4,"66":1,"69":1,"71":1,"74":3,"76":2,"85":3,"88":1,"96":1,"116":9,"122":1,"180":1,"188":1}}],["isconcave",{"0":{"145":1},"2":{"0":1,"6":2,"81":1,"143":1,"145":3}}],["isclockwise",{"0":{"144":1},"2":{"0":1,"6":2,"66":1,"143":1,"145":5,"146":2}}],["is",{"0":{"21":1,"52":1,"55":2,"62":1,"65":1,"68":1,"84":2,"87":1,"90":1,"93":1,"96":1,"107":1,"118":1,"121":1,"124":1,"134":1,"151":1},"2":{"0":1,"1":20,"3":16,"4":86,"5":2,"6":116,"9":3,"11":1,"13":1,"14":1,"18":3,"19":1,"20":1,"21":2,"23":2,"48":3,"49":2,"52":1,"53":19,"55":7,"56":19,"57":2,"58":2,"59":15,"60":3,"62":2,"63":5,"64":82,"65":3,"66":22,"68":1,"69":2,"70":4,"71":13,"73":4,"74":40,"75":7,"76":20,"77":1,"81":5,"82":4,"84":8,"85":23,"88":13,"90":2,"91":3,"94":3,"96":4,"97":4,"99":7,"100":3,"101":3,"102":1,"103":1,"104":1,"105":3,"107":1,"108":5,"110":9,"111":4,"112":2,"113":1,"114":1,"115":1,"116":91,"119":2,"121":3,"122":12,"125":4,"127":2,"134":4,"135":5,"137":8,"138":3,"139":3,"140":1,"141":2,"142":1,"144":2,"145":7,"146":11,"147":1,"148":3,"150":6,"151":3,"152":1,"153":18,"155":5,"157":10,"158":1,"159":1,"160":7,"161":2,"162":1,"163":3,"164":3,"165":1,"167":4,"168":1,"169":2,"170":4,"171":1,"172":7,"173":2,"174":3,"175":3,"176":9,"177":6,"179":1,"180":4,"181":1,"182":2,"183":1,"185":2,"187":1,"188":3,"191":4,"192":5,"193":3,"194":1,"195":3,"197":2,"198":5,"199":2}}],["bx",{"2":{"145":2}}],["b2y",{"2":{"74":4}}],["b2x",{"2":{"74":4}}],["b2",{"2":{"74":47,"85":3,"122":6}}],["b``",{"2":{"71":1}}],["b`",{"2":{"71":3,"74":4,"76":4}}],["bigger",{"2":{"64":1}}],["bit",{"2":{"21":1,"23":1,"184":8,"191":2}}],["b1y",{"2":{"74":7}}],["b1x",{"2":{"74":7}}],["b1",{"2":{"64":8,"74":63,"122":6}}],["breaks",{"2":{"169":1}}],["break",{"2":{"64":3,"66":1,"71":2,"88":4,"116":11,"122":1,"146":6,"169":2}}],["brevity",{"2":{"59":1}}],["broadcasting",{"2":{"6":1,"59":1}}],["broken",{"2":{"3":2,"6":1,"105":1}}],["building",{"2":{"191":1}}],["build",{"2":{"64":13,"69":1,"70":1,"73":1,"75":1,"155":4,"175":2,"183":1,"184":1}}],["built",{"2":{"17":1,"20":1}}],["buffers",{"2":{"146":1}}],["buffered",{"2":{"60":2}}],["buffering",{"2":{"59":1,"60":1}}],["buffer",{"0":{"60":1},"2":{"27":2,"60":5,"63":2,"64":1,"147":1}}],["but",{"2":{"1":4,"3":10,"4":6,"6":17,"18":1,"21":1,"23":1,"28":1,"48":1,"53":1,"55":1,"56":1,"66":1,"74":2,"76":2,"81":2,"82":2,"88":4,"96":2,"116":1,"121":1,"122":5,"124":1,"125":1,"128":2,"129":1,"134":1,"145":1,"146":1,"147":1,"150":4,"151":1,"153":10,"155":4,"157":5,"158":1,"170":3,"171":1,"172":1,"177":1,"180":1,"188":2,"192":2,"193":2,"195":1,"197":1,"198":1,"199":2}}],["black",{"2":{"68":1,"192":1}}],["blue",{"2":{"14":1,"68":1,"87":2,"90":2,"107":2,"121":2,"134":2,"198":2}}],["bloat",{"2":{"193":1}}],["block",{"2":{"6":2,"191":1}}],["blob",{"2":{"6":2,"180":1}}],["balancing",{"2":{"153":1,"170":1}}],["barrier",{"2":{"153":1}}],["barycentric",{"0":{"5":1,"57":1,"59":1},"1":{"58":1,"59":1},"2":{"0":6,"5":17,"6":17,"9":1,"27":1,"57":9,"58":4,"59":52}}],["basic",{"2":{"146":1}}],["base",{"2":{"27":5,"28":1,"59":15,"60":1,"64":2,"146":6,"153":3,"157":2,"158":1,"170":3,"173":1,"176":2,"177":1,"188":3}}],["based",{"2":{"4":4,"6":3,"19":1,"53":2,"56":2,"58":2,"63":1,"66":1,"85":2,"88":1,"97":1,"108":1,"116":2,"122":1,"125":1,"135":1,"158":1,"195":1,"197":1,"198":1}}],["badge",{"2":{"6":2}}],["backs",{"2":{"69":4}}],["backwards",{"2":{"64":1,"71":1,"74":1,"76":1}}],["backing",{"2":{"64":1}}],["backend",{"2":{"60":2,"188":1}}],["back",{"2":{"6":1,"18":1,"48":1,"49":1,"69":4,"188":1}}],["b",{"2":{"3":4,"4":14,"6":13,"31":2,"32":2,"33":2,"34":2,"36":2,"37":2,"38":2,"39":2,"40":2,"41":2,"42":2,"43":2,"44":2,"45":2,"64":206,"66":9,"70":26,"71":18,"72":3,"73":26,"74":77,"75":27,"76":39,"88":29,"116":2,"122":22,"194":1}}],["box",{"2":{"65":2,"66":3,"198":1}}],["bounce",{"2":{"64":8,"70":1,"71":1,"73":1,"74":1,"75":1,"76":1}}],["bouncings",{"2":{"64":1}}],["bouncing",{"2":{"64":13,"71":3,"74":4,"76":4}}],["bound",{"2":{"72":1}}],["bounding",{"2":{"64":1,"65":2,"66":3}}],["boundscheck",{"2":{"59":14}}],["bounds",{"2":{"6":1,"146":4}}],["boundaries",{"2":{"3":4,"6":2,"93":2,"107":1,"108":1,"116":2,"118":1,"119":1,"146":1}}],["boundary",{"2":{"3":14,"6":7,"84":1,"90":1,"91":1,"94":2,"96":1,"97":3,"100":4,"105":9,"108":2,"110":1,"111":6,"112":3,"116":18,"124":2,"125":4,"127":3,"128":5,"129":3,"130":3,"134":1,"135":3}}],["bold",{"2":{"60":1,"173":1,"176":1}}],["both",{"2":{"3":10,"6":6,"64":2,"74":4,"75":1,"76":1,"81":2,"84":1,"88":3,"91":1,"105":4,"108":1,"116":2,"122":1,"129":1,"135":1,"175":1,"177":1}}],["bools",{"2":{"10":1}}],["boolsastypes",{"0":{"50":1,"159":1},"2":{"0":1,"6":6,"28":1,"157":1,"159":10,"177":2}}],["booleans",{"2":{"64":1,"116":2}}],["boolean",{"0":{"35":1},"1":{"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1},"2":{"6":1,"50":2,"64":1,"71":1,"74":1,"76":1,"155":1,"159":2,"197":1}}],["bool",{"2":{"3":34,"4":28,"6":40,"28":1,"64":3,"88":17,"91":1,"94":2,"97":1,"105":13,"108":1,"116":2,"119":1,"122":10,"125":2,"135":1,"145":7,"146":6,"159":2,"177":2,"189":5}}],["booltype",{"2":{"0":1,"6":2,"153":2,"157":1,"159":5,"170":1,"177":1}}],["bypred",{"2":{"200":1}}],["by",{"0":{"101":1,"102":1,"139":1},"2":{"1":6,"3":4,"4":16,"6":34,"7":1,"17":1,"18":2,"19":1,"21":1,"22":1,"23":1,"48":1,"50":1,"52":1,"53":6,"55":1,"56":1,"59":4,"60":1,"62":5,"63":4,"64":14,"65":1,"66":6,"68":1,"69":6,"70":1,"73":1,"74":5,"75":4,"76":3,"82":2,"85":5,"88":8,"91":1,"93":1,"96":1,"97":1,"101":2,"102":2,"103":1,"104":2,"115":2,"116":10,"145":2,"146":4,"153":2,"155":5,"157":6,"165":2,"167":1,"169":3,"171":1,"172":2,"173":1,"174":1,"176":3,"177":1,"178":1,"180":1,"181":1,"182":3,"183":1,"185":1,"191":1,"192":1,"193":1,"195":1,"197":5,"198":1,"199":2,"200":1}}],["berlin",{"2":{"199":1}}],["bearing",{"2":{"145":4}}],["beauty",{"2":{"9":1}}],["better",{"2":{"105":1,"153":1,"170":1,"180":1}}],["between",{"2":{"4":8,"6":20,"49":1,"53":2,"59":13,"64":1,"66":18,"70":1,"71":4,"73":1,"74":11,"75":2,"76":4,"85":8,"88":1,"116":4,"122":4,"146":1,"157":2,"176":3,"177":1,"181":2,"182":2,"183":1,"192":1,"197":2,"198":1}}],["been",{"2":{"71":1,"146":1,"148":2,"159":1,"170":1}}],["because",{"2":{"64":1,"82":1,"148":1,"170":1,"187":1}}],["become",{"2":{"48":1}}],["becomes",{"2":{"6":1,"157":1}}],["being",{"2":{"53":1,"74":1,"116":1,"122":1,"167":1}}],["behind",{"2":{"21":1,"22":1,"23":1,"58":1,"148":1,"170":1}}],["behaviours",{"2":{"28":1}}],["behaviour",{"2":{"6":1,"18":1,"49":1,"180":1}}],["best",{"2":{"19":1,"153":2,"180":1}}],["beware",{"2":{"18":1}}],["benchmarking",{"2":{"176":1,"180":1}}],["benchmarkgroup",{"2":{"176":2,"180":3}}],["benchmark",{"0":{"176":1,"180":1},"2":{"176":1,"180":1}}],["benchmarktools",{"2":{"13":1,"176":1,"180":1}}],["benchmarks",{"2":{"9":2}}],["beginning",{"2":{"66":1,"191":1}}],["begin+1",{"2":{"59":5}}],["begin",{"2":{"9":1,"59":7,"153":1,"170":1,"181":1,"195":1}}],["before",{"2":{"6":4,"29":1,"59":1,"70":1,"73":1,"74":1,"75":1,"180":1,"192":1}}],["below",{"2":{"6":2,"17":1,"60":1,"164":1,"182":1,"183":1,"184":1,"195":1}}],["be",{"2":{"1":14,"3":6,"4":22,"5":8,"6":68,"7":1,"9":1,"13":2,"20":3,"21":3,"22":1,"23":3,"28":1,"49":2,"50":1,"53":8,"56":7,"57":2,"58":1,"59":10,"60":2,"62":1,"63":3,"64":14,"65":1,"66":2,"69":1,"70":7,"71":4,"73":7,"74":12,"75":6,"76":5,"82":6,"84":2,"85":4,"88":15,"93":2,"94":1,"97":6,"108":6,"116":21,"122":2,"125":6,"135":6,"137":1,"138":1,"139":1,"140":1,"145":2,"146":1,"150":8,"151":2,"152":2,"153":9,"154":1,"155":3,"157":4,"159":1,"161":1,"162":1,"163":1,"164":4,"165":4,"166":1,"167":2,"169":2,"170":1,"172":3,"173":1,"174":1,"176":8,"177":2,"180":10,"182":1,"184":3,"185":1,"188":2,"191":2,"193":1,"197":4}}],["cpu",{"2":{"199":1}}],["cp",{"2":{"196":1}}],["circumstances",{"2":{"157":2}}],["cy",{"2":{"145":2}}],["cyan",{"2":{"60":1,"173":1,"176":1}}],["cx",{"2":{"145":2}}],["cdot",{"2":{"145":1}}],["cs",{"2":{"116":9}}],["cshape",{"2":{"62":3}}],["cw",{"2":{"66":2}}],["cb",{"2":{"58":1,"81":1,"146":1}}],["cgrad",{"2":{"58":1}}],["cgal",{"2":{"58":1}}],["c",{"2":{"28":1,"56":1,"62":1,"66":4,"69":5,"72":3,"116":24,"176":1}}],["cleaner",{"2":{"82":1}}],["cleanest",{"2":{"82":1}}],["clear",{"2":{"65":1}}],["clearly",{"2":{"52":1,"55":1,"84":1}}],["clamped",{"2":{"74":18}}],["clamp",{"2":{"53":1,"74":1}}],["classified",{"2":{"64":1}}],["classify",{"2":{"64":4}}],["class",{"2":{"6":1,"146":1}}],["class=",{"2":{"6":6}}],["clipping",{"0":{"64":1,"70":1,"71":1,"74":1,"75":1,"76":1},"2":{"6":1,"9":1,"27":8,"64":9,"69":3,"70":1,"73":1,"75":1,"167":1}}],["closure",{"2":{"153":2}}],["closing",{"2":{"53":1}}],["close",{"2":{"53":5,"64":2,"66":1,"69":1,"74":1,"85":9,"146":1,"161":1,"162":4}}],["closer",{"2":{"6":1,"157":1}}],["closest",{"2":{"4":6,"6":3,"74":2,"84":1,"85":6,"157":1}}],["closed2",{"2":{"88":2}}],["closed1",{"2":{"88":2}}],["closed",{"0":{"160":1},"1":{"161":1,"162":1},"2":{"4":8,"6":11,"9":1,"27":1,"53":6,"56":3,"63":3,"64":1,"66":1,"74":1,"76":3,"88":21,"99":2,"100":5,"101":5,"110":2,"111":5,"112":3,"116":52,"128":5,"129":1,"137":3,"138":5,"139":5,"145":1,"146":1,"160":1,"161":1,"162":2,"163":1,"165":1,"191":1}}],["closedring",{"2":{"0":1,"6":1,"160":1,"161":1,"162":4,"163":1,"164":1,"165":1}}],["clockwise",{"2":{"4":2,"6":4,"9":1,"55":1,"56":1,"66":7,"81":1,"144":2,"145":3,"146":1}}],["ceil",{"2":{"177":1}}],["ce",{"2":{"116":11}}],["certainly",{"2":{"74":1}}],["certain",{"2":{"17":1,"18":1,"22":1,"25":1}}],["central",{"2":{"64":1}}],["centroids",{"2":{"62":1,"63":1}}],["centroid",{"0":{"61":1,"62":1},"1":{"62":1,"63":1},"2":{"0":4,"4":3,"6":6,"27":1,"61":3,"62":4,"63":38,"148":1,"170":1,"180":4}}],["cent",{"2":{"62":2}}],["centered",{"2":{"64":1}}],["center",{"2":{"6":1,"62":1,"146":1}}],["cells",{"2":{"146":1}}],["cell",{"2":{"6":4,"65":3,"66":28,"146":2}}],["c2",{"2":{"6":3,"15":2,"85":3,"88":14,"146":21}}],["c1",{"2":{"6":3,"15":2,"85":4,"88":13,"146":26}}],["chunks",{"2":{"153":4,"170":5}}],["chunk",{"2":{"153":6,"170":7}}],["chull",{"2":{"46":2}}],["chose",{"2":{"50":1,"146":1}}],["choose",{"2":{"6":1,"82":1,"146":2}}],["changes",{"2":{"64":1}}],["changed",{"2":{"64":1}}],["change",{"2":{"50":1,"64":1,"81":1}}],["chain=2",{"2":{"64":1}}],["chain=1",{"2":{"64":1}}],["chain",{"2":{"64":66,"71":3,"74":4,"76":4,"81":2}}],["chains",{"2":{"20":1,"64":1}}],["chairmarks",{"2":{"13":1,"176":1,"180":1}}],["children",{"2":{"180":1}}],["child",{"2":{"6":2,"155":7}}],["checkargs",{"2":{"181":1,"182":1,"183":1,"184":1}}],["checking",{"2":{"88":1,"182":1}}],["checks",{"0":{"105":1,"117":1},"1":{"118":1,"119":1},"2":{"60":1,"64":1,"74":1,"87":1,"90":1,"93":1,"96":1,"107":1,"116":5,"118":1,"121":1,"122":1,"124":1,"134":1,"198":1}}],["check",{"2":{"4":2,"6":1,"7":1,"63":1,"64":8,"66":3,"69":1,"70":1,"72":1,"74":4,"75":1,"88":8,"116":11,"146":5,"153":1,"155":4,"166":1,"168":1,"175":2,"182":1,"184":1}}],["checked",{"2":{"4":2,"6":1,"64":1,"74":1,"81":1,"116":1,"166":1}}],["ctor",{"2":{"1":2,"6":1,"185":1}}],["categorize",{"2":{"69":1}}],["categorical",{"2":{"58":1}}],["came",{"2":{"69":1}}],["case",{"2":{"53":1,"57":2,"63":1,"64":1,"70":1,"74":2,"76":1,"116":16,"170":1,"200":1}}],["cases",{"2":{"6":1,"59":1,"69":2,"116":3,"151":1,"153":1,"155":3,"170":1}}],["cause",{"2":{"18":1,"49":1,"182":1}}],["careful",{"2":{"59":1,"151":1}}],["care",{"2":{"17":1,"153":1,"157":1}}],["carried",{"2":{"6":1,"188":1}}],["cairomakie",{"2":{"13":1,"52":1,"55":1,"58":2,"62":1,"65":1,"68":1,"79":1,"80":1,"81":1,"84":1,"87":1,"90":1,"93":1,"96":1,"107":1,"118":1,"121":1,"124":1,"134":1,"175":1,"176":1,"180":1,"190":1,"196":1,"198":1,"199":1}}],["california",{"2":{"199":1}}],["callable",{"2":{"146":4,"164":1}}],["calls",{"2":{"64":1,"74":1,"76":1,"85":1,"97":1,"108":1,"125":1,"135":1,"151":1,"153":1,"177":1}}],["calling",{"2":{"29":1,"64":2,"153":1}}],["call",{"2":{"18":1,"50":1,"56":1,"63":1,"153":4,"178":1}}],["called",{"2":{"6":2,"63":3,"64":1,"153":1,"162":1,"164":1,"165":1,"188":1,"192":1}}],["calculation",{"2":{"74":1}}],["calculations",{"2":{"6":3,"21":2,"23":2,"74":1,"157":2,"176":1}}],["calculating",{"2":{"4":2,"6":1,"18":1,"64":1,"166":1}}],["calculated",{"2":{"6":1,"62":2,"66":1,"74":2,"85":1,"153":4}}],["calculates",{"2":{"4":4,"6":6,"56":1,"59":2,"66":1,"74":2,"75":1,"85":2,"176":1,"183":1}}],["calculate",{"2":{"1":4,"5":2,"6":6,"11":1,"53":3,"59":3,"63":1,"66":1,"74":1,"116":1,"146":1,"150":2,"153":3,"154":1}}],["calc",{"2":{"1":4,"6":4,"28":1,"31":2,"32":2,"33":2,"34":2,"46":1,"50":1,"53":4,"150":2,"152":1,"153":19,"154":1,"159":1,"166":1,"180":2}}],["cache",{"2":{"6":1,"59":1}}],["cant",{"2":{"88":1,"146":1,"189":1}}],["cannot",{"2":{"3":6,"4":4,"6":5,"56":1,"88":1,"99":1,"102":1,"122":2,"125":1,"127":2,"129":1,"140":1}}],["can",{"2":{"1":2,"4":4,"6":16,"7":2,"9":1,"13":1,"14":1,"22":1,"27":1,"50":1,"53":1,"56":1,"57":2,"58":1,"59":3,"60":1,"63":1,"64":3,"66":1,"70":3,"73":3,"74":1,"75":3,"76":1,"81":1,"82":2,"87":1,"88":3,"90":1,"96":1,"105":1,"107":1,"116":23,"118":2,"121":2,"122":3,"124":1,"128":1,"129":1,"134":1,"137":1,"138":1,"139":1,"146":1,"147":1,"148":1,"150":2,"152":1,"153":8,"154":1,"155":1,"157":1,"161":2,"162":1,"165":1,"166":1,"167":2,"168":1,"173":1,"175":1,"176":2,"180":2,"188":1,"191":6,"192":1,"193":3,"195":3,"197":3,"198":3}}],["creation",{"2":{"191":1,"193":1}}],["creating",{"0":{"190":1,"191":1,"194":1},"1":{"191":1,"192":1,"193":1,"194":1,"195":1},"2":{"116":1}}],["creates",{"2":{"7":1,"64":3}}],["create",{"0":{"193":1},"2":{"6":2,"13":2,"14":1,"64":1,"69":1,"74":2,"82":1,"146":2,"153":1,"165":2,"167":3,"169":2,"190":2,"191":4,"192":5,"193":3,"194":1,"195":1,"198":1}}],["created",{"2":{"4":4,"6":2,"64":1,"85":3}}],["criteria",{"2":{"97":2,"108":2,"125":2,"135":2,"182":3}}],["cropping",{"2":{"58":2}}],["cross=1",{"2":{"73":1}}],["cross`",{"2":{"73":1}}],["crossings",{"2":{"64":3,"116":1}}],["crossing",{"0":{"105":1},"2":{"6":2,"64":81,"70":1,"71":7,"73":3,"74":7,"75":1,"76":6,"97":1,"105":1,"116":1,"135":1}}],["cross",{"0":{"132":1},"2":{"6":1,"9":1,"53":3,"64":13,"69":14,"70":2,"71":1,"72":4,"73":2,"74":10,"75":2,"76":1,"97":1,"105":2,"108":1,"116":17,"122":2,"125":1,"135":1,"145":3}}],["crosses",{"0":{"39":1},"2":{"0":2,"3":3,"6":3,"27":1,"39":2,"64":1,"69":1,"105":26,"116":2,"197":1}}],["crc",{"2":{"6":1,"59":1}}],["crs2",{"2":{"192":2}}],["crs1",{"2":{"192":2,"193":1}}],["crs=nothing",{"2":{"153":1,"166":1,"180":1}}],["crs=gi",{"2":{"153":5,"155":3}}],["crs`",{"2":{"153":1,"172":6}}],["crs",{"0":{"192":1},"2":{"1":32,"4":4,"6":10,"28":2,"31":2,"32":2,"33":2,"34":2,"46":2,"82":1,"146":10,"150":4,"152":3,"153":36,"154":2,"155":5,"166":1,"172":7,"180":1,"190":1,"192":13,"193":7,"195":1}}],["customize",{"2":{"153":1,"170":1}}],["custom",{"0":{"200":1},"2":{"6":3,"59":1,"200":2}}],["curr^2",{"2":{"53":2}}],["curr",{"2":{"53":8,"64":116,"69":9,"76":3,"169":26}}],["currentnode",{"2":{"146":8}}],["current",{"2":{"53":1,"59":8,"64":3,"69":2,"71":1,"74":1,"76":6,"146":2,"169":3}}],["currently",{"2":{"5":2,"6":4,"49":1,"59":1,"64":1,"69":1,"71":2,"146":1,"153":1,"157":2}}],["curve",{"0":{"116":1},"2":{"3":2,"4":14,"6":18,"53":6,"56":7,"64":5,"66":3,"73":7,"84":1,"85":22,"88":6,"97":2,"99":4,"100":9,"101":9,"108":1,"110":4,"111":6,"112":3,"116":152,"122":1,"125":1,"128":6,"130":3,"135":1,"137":4,"138":6,"139":6}}],["curves",{"2":{"0":1,"3":2,"6":5,"56":3,"66":3,"74":1,"84":1,"85":1,"88":13,"102":1,"116":1,"122":1,"140":1,"180":2}}],["cutpolygon",{"2":{"68":1}}],["cuts",{"2":{"68":1}}],["cutting",{"0":{"67":1},"1":{"68":1,"69":1},"2":{"64":1,"69":2}}],["cut",{"0":{"68":1},"2":{"0":1,"6":6,"27":1,"59":1,"67":1,"68":5,"69":22,"116":1}}],["coastlines",{"2":{"196":1}}],["coarse",{"2":{"6":1,"174":1,"177":1}}],["cos",{"2":{"191":3,"192":1,"193":2}}],["copy",{"2":{"153":1,"164":1,"184":1}}],["coors1",{"2":{"145":2}}],["coors2",{"2":{"145":3}}],["coord",{"2":{"177":6}}],["coords",{"2":{"69":9,"177":8}}],["coordinatetransformations",{"2":{"1":4,"6":2,"180":1,"185":2,"190":1,"191":5,"193":2}}],["coordinate",{"0":{"59":1,"171":1,"192":1,"193":1},"2":{"1":8,"5":10,"6":7,"21":1,"23":1,"58":2,"59":10,"155":1,"172":4,"177":1,"190":3,"192":1}}],["coordinates",{"0":{"5":1,"57":1},"1":{"58":1,"59":1},"2":{"0":4,"1":2,"4":4,"5":12,"6":22,"56":2,"57":8,"59":25,"64":2,"65":1,"69":2,"70":1,"73":1,"75":1,"85":1,"88":2,"148":1,"157":2,"171":2,"172":1,"175":1,"176":3,"192":2}}],["co",{"2":{"116":2}}],["core",{"2":{"156":1}}],["corner",{"2":{"66":4,"146":1}}],["corners",{"2":{"66":1}}],["correspondent",{"2":{"145":1}}],["correspond",{"2":{"64":1}}],["corresponding",{"2":{"53":3,"71":2}}],["corrected",{"2":{"164":1}}],["correctness",{"2":{"160":1,"188":1}}],["correctly",{"2":{"153":1,"175":1}}],["correcting",{"2":{"20":1,"164":1}}],["corrections",{"0":{"163":1,"165":1},"1":{"164":1,"165":1},"2":{"161":1,"164":6,"168":1}}],["correction",{"2":{"6":10,"27":4,"70":1,"71":2,"73":1,"74":2,"75":1,"76":2,"160":1,"162":2,"163":2,"164":11,"165":7,"167":1,"169":2}}],["correct",{"2":{"6":3,"50":1,"53":1,"56":1,"63":1,"64":1,"66":1,"70":1,"73":1,"75":1,"85":1,"88":1,"97":1,"108":1,"122":1,"125":1,"135":1,"160":1,"161":2,"163":1}}],["cov",{"2":{"66":16}}],["cover",{"2":{"99":1,"103":1}}],["covering",{"2":{"6":2,"93":1,"165":2,"169":2}}],["covered",{"0":{"101":1,"102":1,"139":1},"2":{"3":2,"6":1,"71":1,"76":1,"93":1,"96":1,"97":1,"101":2,"102":2,"103":1,"104":2,"115":2,"116":3,"169":1}}],["coveredby",{"0":{"44":1,"95":1,"96":1,"99":1,"100":1,"103":1,"104":1,"115":1},"1":{"96":1,"97":1},"2":{"0":2,"3":7,"6":4,"27":1,"44":2,"64":1,"94":3,"95":1,"96":3,"97":10,"98":6,"99":13,"100":15,"101":13,"102":5,"103":2,"104":2,"197":1}}],["covers",{"0":{"43":1,"92":1,"93":1},"1":{"93":1,"94":1},"2":{"0":2,"3":9,"6":5,"27":1,"43":2,"92":1,"93":4,"94":5,"146":1,"197":1}}],["coverages",{"2":{"6":1,"66":1}}],["coverage",{"0":{"65":1},"2":{"0":1,"6":2,"27":1,"65":3,"66":16}}],["code",{"2":{"7":1,"10":1,"22":5,"59":1,"97":1,"108":1,"116":1,"125":1,"135":1,"145":1,"159":1,"187":1,"199":1}}],["come",{"2":{"157":1}}],["commonly",{"2":{"195":1}}],["common",{"2":{"87":1,"154":1,"177":1,"190":1,"192":1,"193":1}}],["commented",{"2":{"145":1}}],["comments",{"2":{"116":1}}],["comment",{"2":{"26":1}}],["combos",{"2":{"71":1,"74":1,"76":1}}],["combines",{"2":{"63":1}}],["combine",{"2":{"63":2,"64":5,"169":1}}],["combined",{"2":{"6":1,"64":4,"76":1,"165":1,"169":2,"191":1}}],["combination",{"2":{"6":1,"64":1,"155":1}}],["coming",{"2":{"66":1}}],["com",{"2":{"6":2,"74":1,"82":1,"157":1}}],["compilation",{"2":{"159":1}}],["compiled",{"2":{"50":1}}],["compiler",{"2":{"50":1,"153":2,"159":2}}],["complex",{"2":{"148":1,"180":1,"197":1}}],["complexity",{"2":{"6":1,"148":1,"177":1}}],["complete",{"2":{"56":1}}],["completely",{"2":{"1":2,"3":8,"6":5,"64":2,"71":1,"76":1,"90":2,"91":1,"93":1,"94":1,"97":1,"116":1,"135":1,"150":2,"153":1,"157":1}}],["comprised",{"2":{"6":3,"70":1,"73":1,"75":1}}],["component",{"2":{"6":1,"56":3,"63":11,"66":8,"74":1,"153":2,"155":1}}],["components",{"2":{"6":2,"62":1,"63":2,"155":23,"170":1}}],["composed",{"2":{"4":8,"6":5,"88":5,"191":2}}],["computing",{"2":{"60":1,"77":1}}],["computational",{"2":{"6":1,"59":1}}],["computation",{"2":{"6":6,"59":1,"63":1,"70":1,"73":1,"75":1,"181":2,"182":2,"183":2}}],["computer",{"2":{"6":1,"59":1}}],["computes",{"2":{"6":1,"82":1}}],["compute",{"2":{"4":2,"6":3,"56":1,"59":1,"82":3,"177":1}}],["computed",{"2":{"4":8,"6":5,"53":1,"56":3,"59":3,"66":1,"196":1}}],["compact",{"2":{"199":3}}],["comparisons",{"2":{"197":1}}],["comparing",{"2":{"76":1,"88":1}}],["compares",{"2":{"146":1}}],["compared",{"2":{"88":1}}],["compare",{"2":{"3":2,"4":2,"6":2,"53":1,"76":1,"88":2,"122":1}}],["compatibility",{"2":{"56":1}}],["compatible",{"2":{"1":6,"6":1,"21":1,"23":1,"48":1,"53":1,"56":1,"59":2,"63":1,"66":1,"85":1,"88":1,"91":1,"94":1,"97":1,"108":1,"119":1,"122":1,"125":1,"135":1,"150":2,"151":1,"153":1,"172":2}}],["colname",{"2":{"153":3}}],["col",{"2":{"153":2,"170":1}}],["columns",{"2":{"153":2}}],["column",{"2":{"48":1,"153":9,"155":2,"170":8,"194":2,"197":8}}],["colored",{"2":{"198":1}}],["color=",{"2":{"192":2}}],["colors",{"2":{"79":1,"80":1,"196":1,"198":2}}],["colorrange",{"2":{"58":2,"84":1}}],["colorbar",{"2":{"58":1,"81":1,"84":1,"146":1}}],["colormap",{"2":{"14":1,"58":3,"84":1}}],["color",{"2":{"6":1,"55":1,"58":2,"59":1,"60":1,"62":1,"68":3,"79":1,"80":1,"81":2,"84":2,"87":4,"90":4,"93":1,"96":1,"107":4,"121":4,"134":4,"173":1,"176":1,"191":1,"192":1,"196":1,"198":5}}],["colatitude",{"2":{"6":1,"157":1}}],["collect",{"2":{"11":3,"13":1,"46":1,"52":1,"55":2,"59":1,"62":1,"65":2,"68":2,"82":2,"84":1,"146":3,"153":2,"170":1,"175":4,"189":2}}],["collections",{"0":{"103":1,"104":1,"114":1,"115":1,"131":1,"132":1,"141":1,"142":1},"2":{"1":4,"6":10,"48":1,"150":4,"152":1,"153":2,"155":3,"170":2,"180":2,"195":1}}],["collection",{"2":{"1":2,"4":14,"6":13,"18":2,"25":2,"53":2,"56":3,"66":2,"85":2,"103":2,"104":2,"114":2,"115":2,"131":2,"132":2,"141":2,"142":2,"148":1,"150":2,"153":3,"170":1,"180":1,"186":1,"189":1}}],["collinear",{"2":{"3":2,"6":2,"64":5,"70":2,"73":3,"74":12,"75":2,"121":1,"122":2}}],["couple",{"2":{"194":1}}],["course",{"2":{"152":1}}],["country",{"2":{"199":8}}],["countries",{"2":{"11":1,"80":1,"180":1}}],["counted",{"2":{"74":2}}],["counters",{"2":{"59":8}}],["counterparts",{"2":{"29":1}}],["counter",{"2":{"6":1,"64":7,"116":1,"144":1,"145":1}}],["counterclockwise",{"2":{"4":2,"6":2,"9":1,"55":2,"56":1,"81":1,"82":1}}],["count",{"2":{"64":16,"146":1,"184":1}}],["couldn",{"2":{"9":1,"159":1}}],["could",{"2":{"4":2,"6":1,"56":3,"74":4,"76":1,"77":1,"85":1,"116":2,"157":1,"172":1}}],["conditions",{"2":{"197":4}}],["connected",{"2":{"116":5}}],["connect",{"2":{"66":11}}],["connecting",{"2":{"53":1,"182":1,"191":2}}],["connections",{"2":{"6":2,"165":2,"169":2}}],["consistent",{"2":{"64":1,"148":1}}],["consistency",{"2":{"48":1}}],["considered",{"2":{"53":1,"59":1}}],["consider",{"2":{"52":1,"55":1,"62":1,"65":1,"66":3,"68":1,"84":2,"87":1,"90":1,"93":1,"96":1,"107":1,"116":3,"118":1,"121":1,"124":1,"134":1}}],["constprop",{"2":{"105":1}}],["constants",{"2":{"64":1}}],["const",{"2":{"27":4,"64":1,"97":4,"108":3,"125":4,"135":4,"154":3,"180":4}}],["constrained",{"2":{"6":3,"70":1,"73":1,"75":1}}],["constructing",{"2":{"193":1}}],["construct",{"2":{"158":1}}],["constructors",{"2":{"6":2,"158":2}}],["constructed",{"2":{"1":2,"20":1,"172":1}}],["contents",{"2":{"153":1,"160":1}}],["context",{"2":{"28":4,"176":4,"192":2}}],["contours",{"2":{"146":1}}],["contour",{"2":{"146":4}}],["continue",{"2":{"56":1,"64":7,"66":1,"71":2,"74":1,"116":1,"153":1,"164":1,"169":3,"184":1,"199":1}}],["controlled",{"2":{"50":1}}],["control",{"2":{"49":1}}],["contributions",{"2":{"21":1,"23":1}}],["containing",{"2":{"65":1,"198":1}}],["contain",{"2":{"3":2,"6":1,"22":1,"76":1,"90":1,"122":1,"191":1}}],["contained",{"2":{"3":2,"6":1,"9":1,"76":4,"91":1,"93":1,"121":1,"122":1,"153":1,"198":1}}],["contains",{"0":{"41":1,"89":1,"90":1},"1":{"90":1,"91":1},"2":{"0":2,"3":7,"6":4,"22":1,"27":1,"29":1,"41":2,"64":1,"76":1,"77":1,"89":1,"90":5,"91":4,"151":1,"168":1,"197":1,"198":1}}],["concepts",{"0":{"24":1},"1":{"25":1,"26":1},"2":{"22":1}}],["concieve",{"2":{"9":1}}],["concavehull",{"2":{"147":1}}],["concave",{"2":{"6":1,"53":2,"62":2,"145":2}}],["convention",{"2":{"62":1}}],["convenience",{"2":{"59":1,"188":1}}],["conversely",{"2":{"64":1}}],["conversion",{"0":{"186":1},"2":{"29":1,"48":1}}],["converted",{"2":{"48":1,"59":3}}],["converts",{"2":{"6":1,"189":1}}],["convert",{"0":{"98":1,"109":1,"126":1,"136":1},"2":{"6":3,"28":1,"31":2,"32":2,"33":2,"34":2,"36":2,"37":2,"38":2,"39":2,"40":2,"41":2,"42":2,"43":2,"44":2,"45":2,"46":1,"59":6,"82":1,"84":1,"146":2,"176":1,"180":3,"186":1,"188":1,"189":1}}],["convexity",{"2":{"81":2}}],["convexhull",{"2":{"46":1,"147":1}}],["convex",{"0":{"46":1,"77":1,"80":1},"1":{"78":1,"79":1,"80":1,"81":1,"82":1},"2":{"0":1,"6":7,"27":2,"46":1,"53":3,"77":4,"79":2,"80":1,"81":4,"82":11,"145":1}}],["vw",{"2":{"180":3}}],["von",{"2":{"146":1}}],["v2",{"2":{"116":9}}],["v1",{"2":{"116":9}}],["v`",{"2":{"59":2}}],["vcat",{"2":{"53":1,"59":1,"153":1}}],["vararg",{"2":{"59":1}}],["varying",{"2":{"157":1}}],["vary",{"2":{"53":1}}],["variables",{"2":{"50":1,"59":8,"91":1,"94":1,"119":1}}],["variable",{"2":{"50":1,"71":2}}],["var",{"2":{"27":2}}],["vals",{"2":{"182":9}}],["valign",{"2":{"180":1}}],["validated",{"2":{"71":2,"74":2,"76":2}}],["validate",{"2":{"9":1}}],["valid",{"2":{"1":2,"6":8,"63":1,"70":2,"73":2,"74":3,"75":2,"146":1,"160":3,"161":1,"167":1,"168":1,"184":1,"185":1}}],["val",{"2":{"53":2,"64":2,"74":8,"116":30,"122":4}}],["values=",{"2":{"146":2}}],["values=sort",{"2":{"146":1}}],["values",{"2":{"1":2,"5":6,"6":16,"53":2,"58":3,"59":40,"63":2,"64":5,"66":5,"74":1,"85":2,"116":4,"146":19,"150":2,"153":2,"159":1,"182":2,"184":1}}],["value",{"2":{"0":1,"4":14,"5":4,"6":15,"14":1,"28":2,"50":1,"53":1,"55":2,"56":4,"59":45,"64":5,"66":2,"74":7,"84":1,"85":3,"146":6,"153":2,"182":11,"188":2,"197":1}}],["vs",{"0":{"15":1},"2":{"12":1,"74":2}}],["vᵢ",{"2":{"6":1}}],["v0",{"2":{"6":2}}],["v",{"2":{"5":4,"6":6,"14":4,"59":23,"85":8}}],["visvalingam",{"2":{"178":1}}],["visvalingamwhyatt",{"0":{"183":1},"2":{"0":1,"6":3,"180":4,"183":5}}],["visualized",{"2":{"161":1}}],["visualize",{"2":{"118":1,"192":1}}],["visa",{"2":{"64":1}}],["visited",{"2":{"64":4}}],["view",{"2":{"64":2,"82":1,"146":1,"169":1,"182":3,"199":1}}],["viewport",{"2":{"14":1}}],["views",{"2":{"1":2,"64":1,"75":1,"172":1}}],["via",{"2":{"6":1,"60":1,"77":1,"147":1,"173":1,"176":1,"188":2}}],["vec",{"2":{"82":2}}],["vect",{"2":{"155":2}}],["vectypes",{"2":{"59":5}}],["vector",{"2":{"1":24,"4":12,"5":2,"6":46,"18":1,"25":1,"49":1,"52":1,"53":10,"59":14,"64":7,"69":6,"70":4,"71":1,"73":2,"74":3,"75":4,"116":1,"122":2,"145":3,"146":4,"148":1,"150":2,"153":4,"161":8,"162":1,"168":22,"170":3,"174":1,"175":1,"177":1,"181":1,"182":4,"183":1,"184":2,"185":10,"189":15,"191":18,"192":6,"193":9}}],["vectors",{"2":{"1":2,"4":4,"6":5,"48":1,"53":4,"59":3,"64":1,"82":1,"85":1,"144":1,"146":1,"150":2,"153":1,"155":1,"180":1}}],["ve",{"2":{"17":1,"177":1}}],["vein",{"2":{"7":1}}],["version",{"2":{"188":1}}],["versa",{"2":{"64":1}}],["vert",{"2":{"184":21}}],["verts",{"2":{"180":2}}],["vertical",{"2":{"58":1,"66":1,"74":1,"146":1}}],["vertices",{"2":{"6":7,"9":1,"57":4,"59":5,"64":1,"69":2,"82":1,"99":1,"101":5,"107":1,"110":3,"113":1,"116":1,"137":1,"161":1,"174":2,"175":1,"176":3,"177":3,"180":1,"183":1}}],["vertex",{"2":{"5":2,"6":2,"53":1,"57":2,"59":2,"64":19,"74":12,"81":1,"99":2,"111":2,"112":1,"116":1,"137":3}}],["very",{"2":{"0":1,"175":1,"199":2}}],["rd",{"2":{"180":3}}],["rdbu",{"2":{"84":1}}],["rhumb",{"2":{"145":2}}],["runner",{"2":{"192":1}}],["running",{"2":{"153":1,"155":2}}],["run",{"2":{"153":5,"170":3,"199":1}}],["runs",{"2":{"74":2,"144":1}}],["rule",{"2":{"64":1}}],["rules",{"2":{"64":1}}],["rightjoin",{"2":{"197":1}}],["right=2",{"2":{"64":1}}],["right",{"2":{"59":1,"64":4,"69":1,"85":1,"145":1,"182":19,"184":5,"191":1}}],["ring4",{"2":{"193":2}}],["ring3",{"2":{"192":1}}],["ring2",{"2":{"191":2}}],["ring1",{"2":{"191":2}}],["rings",{"0":{"101":1,"112":1,"129":1,"139":1,"160":1},"1":{"161":1,"162":1},"2":{"4":8,"6":6,"9":2,"56":1,"63":1,"64":3,"74":1,"88":7,"144":1,"146":5,"162":1,"165":1,"180":1}}],["ring",{"2":{"4":14,"6":13,"9":1,"27":1,"53":3,"56":2,"59":1,"62":1,"63":4,"64":12,"66":13,"76":3,"85":5,"88":4,"99":1,"100":2,"101":5,"110":1,"112":1,"116":2,"127":1,"128":1,"129":3,"137":1,"138":2,"139":4,"145":3,"146":11,"160":2,"161":1,"162":14,"163":1,"191":1}}],["rtrees",{"2":{"20":1}}],["r+y",{"2":{"13":2,"14":1}}],["r+x",{"2":{"13":2,"14":1}}],["ry",{"2":{"13":3,"14":3}}],["rx",{"2":{"13":3,"14":3}}],["round",{"2":{"180":1,"182":1,"184":1}}],["routines",{"2":{"11":1}}],["row",{"2":{"170":3}}],["rows",{"2":{"170":2}}],["robust",{"0":{"15":1},"2":{"81":1}}],["rotate",{"2":{"66":1}}],["rotation",{"2":{"1":2,"6":1,"185":1}}],["rotations",{"2":{"1":6,"6":3,"185":3}}],["rotmatrix2d",{"2":{"180":1}}],["rotmatrix",{"2":{"1":2,"6":1,"185":1}}],["rᵢ₋₁",{"2":{"59":20}}],["rᵢ∗rᵢ₊₁+sᵢ⋅sᵢ₊₁",{"2":{"6":1}}],["rᵢ₊₁",{"2":{"6":1,"59":29}}],["rᵢ",{"2":{"6":2,"59":49}}],["r",{"2":{"6":2,"9":1,"13":11,"14":12,"28":1,"176":1,"184":2,"191":6,"192":2,"193":4}}],["ramer",{"2":{"182":1}}],["raster",{"0":{"146":1},"2":{"146":4}}],["ray",{"2":{"116":4}}],["raw",{"2":{"18":1}}],["range",{"2":{"13":8,"14":4,"146":3,"153":2,"170":2}}],["ranges",{"2":{"6":1,"146":2}}],["randomly",{"2":{"198":2}}],["random",{"2":{"180":2}}],["randn",{"2":{"79":1}}],["rand",{"2":{"6":1,"81":1,"146":1,"198":2}}],["rather",{"2":{"6":1,"146":1,"168":1}}],["ratio",{"2":{"6":7,"74":1,"176":1,"180":1,"181":4,"182":6,"183":4,"184":11}}],["radii",{"2":{"6":1,"176":1}}],["radius`",{"2":{"176":1}}],["radius",{"2":{"6":6,"59":13,"157":3,"176":4}}],["radialdistance",{"0":{"181":1},"2":{"0":1,"6":2,"178":1,"180":4,"181":4}}],["rrayscore",{"2":{"1":2,"6":1,"185":1}}],["rring",{"2":{"1":2,"6":1,"185":1}}],["rewrap",{"2":{"153":2,"155":1}}],["req",{"2":{"116":44}}],["requirement",{"2":{"160":1,"167":1}}],["requirements",{"2":{"116":5}}],["required",{"2":{"82":1,"97":3,"108":3,"125":3,"135":3,"175":1,"190":1}}],["requires",{"2":{"60":1,"88":1,"90":1,"97":2,"100":3,"101":3,"102":1,"108":1,"111":3,"112":2,"113":1,"125":1,"128":3,"129":1,"130":1,"134":1,"135":1,"138":3,"139":3,"140":1,"173":1,"176":1,"188":1}}],["require",{"2":{"29":1,"82":1,"96":2,"97":6,"108":3,"116":32,"125":3,"135":3}}],["requests",{"2":{"21":1,"23":1}}],["reflected",{"2":{"180":3}}],["ref",{"2":{"84":1}}],["referring",{"2":{"116":1}}],["refer",{"2":{"6":1,"146":1}}],["refers",{"2":{"6":1,"157":1}}],["references",{"2":{"6":1,"59":1}}],["reference",{"0":{"192":1,"193":1},"2":{"0":1,"1":4,"172":2,"190":2,"192":1}}],["reveal",{"2":{"76":1}}],["reveals",{"2":{"76":1}}],["reverse",{"2":{"55":1,"58":1,"59":1,"64":2,"191":2}}],["rev",{"2":{"75":1}}],["render",{"2":{"58":1}}],["rendering",{"2":{"58":3,"59":1}}],["rename",{"2":{"10":1}}],["readable",{"2":{"195":1}}],["readability",{"2":{"64":1}}],["read",{"2":{"153":1,"192":2}}],["reading",{"2":{"153":1}}],["reads",{"2":{"153":1}}],["reached",{"2":{"153":1,"155":3}}],["reaches",{"2":{"151":1}}],["reach",{"2":{"151":1}}],["reasons",{"2":{"188":1}}],["reason",{"2":{"50":1,"159":1,"160":1,"167":1}}],["real`",{"2":{"176":1,"177":1}}],["reality",{"2":{"81":1}}],["really",{"2":{"56":1,"116":1,"146":1,"159":1}}],["real=1",{"2":{"6":2,"176":2}}],["real=6378137`",{"2":{"176":1}}],["real=6378137",{"2":{"6":2,"176":1}}],["real",{"0":{"199":1},"2":{"5":2,"6":13,"53":1,"59":45,"63":2,"74":1,"176":3,"177":1,"184":5,"197":1}}],["regardless",{"2":{"74":1,"116":1}}],["regions",{"2":{"71":3,"74":5,"75":1,"76":3,"116":2,"199":1}}],["region",{"2":{"60":2,"74":3,"76":2,"199":1}}],["register",{"2":{"27":3,"59":3}}],["regular",{"0":{"15":1}}],["relation",{"2":{"64":2}}],["relationship",{"2":{"49":1,"197":2}}],["relations",{"2":{"27":10,"105":1,"122":1}}],["relative",{"2":{"59":3}}],["relevant",{"2":{"6":3,"10":1,"82":1,"157":2}}],["reducing",{"2":{"170":2}}],["reduced",{"2":{"181":1,"182":1,"183":1}}],["reduces",{"2":{"19":1,"76":1,"170":1}}],["reduce",{"2":{"1":2,"6":1,"146":1,"150":2,"164":1,"170":2}}],["redundant",{"2":{"64":1}}],["red",{"2":{"14":1,"62":2,"84":1,"93":1,"96":1,"118":1,"191":1,"192":1,"198":2}}],["removal",{"2":{"64":1}}],["removes",{"2":{"64":1,"148":1}}],["removed",{"2":{"64":3,"71":5,"146":1}}],["remove",{"2":{"56":1,"64":33,"66":1,"69":2,"70":5,"73":5,"75":2,"169":2,"181":1,"182":3,"184":4}}],["removing",{"2":{"6":3,"64":1,"71":1,"181":1,"182":1,"183":1}}],["remainingnode",{"2":{"146":3}}],["remaining",{"2":{"64":1,"88":1,"116":2,"182":1}}],["remain",{"2":{"1":2,"6":9,"150":2,"153":1,"180":2}}],["resolution",{"2":{"192":1}}],["resolved",{"2":{"146":1}}],["reset",{"2":{"64":1,"153":1}}],["resembles",{"2":{"6":1,"157":2}}],["resize",{"2":{"13":1,"14":1,"64":2}}],["resampled",{"2":{"6":1,"177":1}}],["respectively",{"2":{"64":1,"122":1,"155":1,"191":1}}],["respect",{"2":{"6":2,"73":1,"74":1,"82":1,"116":6}}],["rest",{"2":{"6":1,"59":2,"75":1}}],["resulting",{"2":{"69":1,"76":1,"146":1,"198":1}}],["results",{"2":{"3":4,"6":2,"74":1,"105":1,"122":1,"153":1,"161":1,"170":1,"182":25,"191":3}}],["result",{"2":{"1":4,"3":10,"4":10,"6":13,"19":1,"28":3,"53":1,"56":2,"66":1,"74":15,"82":1,"85":2,"91":1,"94":1,"97":1,"119":1,"135":1,"150":4,"153":9,"170":2,"176":3,"184":6}}],["receives",{"2":{"153":1,"170":1}}],["recent",{"2":{"64":1,"71":1,"74":1,"76":1}}],["recalculate",{"2":{"152":1}}],["recursive",{"2":{"151":1}}],["recursively",{"2":{"4":2,"6":1,"151":1,"166":1}}],["rect",{"2":{"52":3,"55":5,"65":3,"84":7}}],["rectangle",{"2":{"52":2,"55":2,"58":2,"65":2,"66":1,"84":2,"175":5,"176":8,"198":2}}],["rectangletrait",{"2":{"28":1}}],["recommended",{"2":{"48":1}}],["reconstructing",{"2":{"180":1}}],["reconstructed",{"2":{"18":1}}],["reconstruct",{"2":{"0":1,"1":2,"6":3,"18":1,"150":2,"153":2,"155":27,"170":1}}],["repl",{"2":{"60":1,"173":1,"176":1}}],["replaced",{"2":{"48":1}}],["replace",{"2":{"27":1,"64":1,"146":2,"182":1}}],["repeat",{"2":{"63":1,"64":3,"88":6}}],["repeating",{"2":{"56":1,"76":1}}],["repeated",{"2":{"4":6,"6":3,"9":1,"53":2,"59":1,"64":2,"76":2,"85":2,"88":4,"116":1}}],["represent",{"2":{"17":1,"59":1,"64":4,"88":1,"157":1}}],["representing",{"2":{"6":2,"71":1,"74":1,"76":1,"82":1,"84":1,"88":1,"157":1,"199":1}}],["represented",{"2":{"6":1,"157":1,"198":1}}],["represents",{"2":{"6":1,"164":3,"165":1}}],["reprojects",{"2":{"172":1}}],["reprojection",{"0":{"172":1},"1":{"173":1}}],["reproject",{"2":{"0":1,"1":7,"27":2,"148":1,"172":6,"173":2}}],["re",{"2":{"1":2,"6":1,"17":1,"27":1,"82":1,"185":1,"190":1,"192":1}}],["retrievable",{"2":{"1":2,"172":1}}],["returnval",{"2":{"116":9}}],["returntype",{"2":{"19":1}}],["returning",{"2":{"18":1,"60":1,"71":2}}],["return",{"0":{"48":1},"2":{"1":2,"3":36,"4":4,"6":37,"13":3,"14":3,"26":1,"28":3,"31":1,"32":1,"33":1,"34":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"49":2,"53":5,"56":5,"59":20,"60":1,"63":4,"64":36,"66":12,"69":12,"70":5,"71":4,"73":4,"74":18,"75":6,"76":9,"82":2,"85":8,"88":30,"91":1,"94":1,"97":1,"103":2,"104":2,"105":18,"108":2,"114":2,"115":2,"116":71,"118":1,"119":1,"122":28,"125":1,"127":2,"131":2,"132":2,"135":1,"141":2,"142":2,"145":10,"146":12,"153":17,"155":7,"160":1,"162":4,"164":8,"165":2,"169":2,"170":3,"171":2,"172":1,"177":4,"180":3,"181":1,"182":5,"183":3,"184":7,"185":2,"186":2,"188":3,"189":8}}],["returned",{"2":{"1":2,"6":11,"48":2,"49":1,"64":3,"69":1,"70":2,"73":2,"74":2,"75":2,"81":1,"82":1,"146":1,"153":1,"155":1,"159":1,"172":1,"180":1}}],["returns",{"2":{"1":2,"3":10,"4":8,"5":6,"6":25,"18":1,"48":2,"53":1,"56":2,"59":6,"63":3,"64":4,"66":6,"69":1,"70":1,"74":1,"75":1,"82":1,"85":8,"87":1,"90":2,"91":1,"93":2,"94":1,"97":1,"107":1,"116":4,"119":1,"122":2,"135":1,"146":2,"150":2,"153":2,"159":1,"177":1,"186":1,"197":1}}],["rebuilt",{"2":{"1":2,"6":2,"148":1,"150":2,"153":1,"155":1}}],["rebuilding",{"2":{"153":1,"170":1}}],["rebuild",{"2":{"0":1,"6":4,"151":1,"153":3,"155":8,"177":1,"180":2}}],["ty",{"2":{"146":3}}],["typing",{"2":{"60":1,"173":1,"176":1}}],["typically",{"2":{"57":1,"194":1}}],["typemax",{"2":{"85":1,"146":9}}],["typeof",{"2":{"19":1,"59":3,"153":2,"155":1,"158":1,"200":1}}],["type=",{"2":{"6":2}}],["type2",{"2":{"6":2,"88":4}}],["type1",{"2":{"6":2,"88":5}}],["types",{"0":{"156":1,"187":1},"1":{"157":1,"158":1,"159":1,"188":1},"2":{"6":4,"27":1,"49":1,"50":1,"59":3,"66":1,"69":1,"116":3,"156":1,"159":1,"180":1,"187":3,"197":1}}],["type",{"2":{"4":22,"5":2,"6":47,"11":1,"26":2,"48":2,"49":1,"50":2,"53":9,"56":11,"58":1,"59":8,"63":8,"64":21,"66":8,"69":6,"70":7,"71":6,"73":8,"74":19,"75":7,"76":5,"85":28,"88":2,"153":5,"155":38,"157":2,"158":3,"159":6,"163":1,"164":7,"165":2,"171":1,"176":1,"177":1,"180":3,"186":1,"188":1,"189":3,"196":1}}],["tx",{"2":{"146":3}}],["tᵢ",{"2":{"59":1}}],["tutorial",{"2":{"190":1,"197":1}}],["tutorials",{"2":{"22":2}}],["tups",{"2":{"162":4}}],["tuplepoint",{"2":{"27":3,"189":1}}],["tuple",{"0":{"186":1},"2":{"4":2,"6":19,"27":2,"59":2,"63":3,"64":5,"66":3,"69":1,"74":31,"116":17,"145":2,"146":5,"153":2,"161":6,"168":13,"175":1,"180":2,"182":1,"184":2,"189":6,"191":99,"198":2}}],["tuples",{"2":{"0":1,"6":2,"27":1,"60":1,"63":1,"64":1,"69":1,"70":3,"71":1,"73":2,"74":1,"75":4,"76":5,"82":2,"162":2,"169":2,"180":2,"186":2,"199":2}}],["turf",{"2":{"145":1}}],["turned",{"2":{"146":1,"153":1}}],["turning",{"2":{"146":8}}],["turn",{"2":{"6":1,"146":1}}],["temporary",{"2":{"64":1}}],["term",{"2":{"56":1}}],["terms",{"2":{"6":1,"59":1}}],["technically",{"2":{"49":1,"160":1}}],["technique",{"2":{"11":1}}],["teach",{"2":{"22":1}}],["tell",{"2":{"18":1,"116":1,"159":1,"200":1}}],["test",{"2":{"64":1,"180":2,"188":1}}],["testing",{"0":{"15":1}}],["tests",{"2":{"9":2}}],["text=",{"2":{"6":2}}],["t2",{"2":{"6":5,"59":47,"98":1,"105":2,"126":1,"136":1}}],["t1",{"2":{"6":6,"59":51,"105":2}}],["t=float64",{"2":{"4":2,"6":3,"63":3}}],["two",{"2":{"3":10,"4":20,"6":23,"49":2,"53":2,"55":1,"59":1,"63":1,"64":6,"66":3,"70":2,"73":1,"74":14,"75":4,"76":3,"85":5,"87":3,"88":12,"90":2,"91":1,"93":1,"94":1,"96":1,"105":1,"107":1,"116":2,"118":2,"119":2,"121":4,"122":5,"124":3,"125":1,"134":2,"146":3,"164":3,"165":1,"168":2,"169":2,"175":1,"188":1,"191":1,"197":3,"198":3}}],["task",{"2":{"153":3,"170":3}}],["tasks",{"2":{"153":5,"170":5}}],["taskrange",{"2":{"153":5,"170":5}}],["tags",{"2":{"64":4}}],["taget",{"2":{"6":2}}],["taylor",{"2":{"6":1,"59":1}}],["table2",{"2":{"197":4}}],["table1",{"2":{"197":12}}],["tables",{"2":{"27":1,"48":4,"153":6,"155":2,"170":5}}],["table",{"0":{"194":1},"2":{"6":1,"18":1,"25":2,"153":13,"170":4,"180":1,"194":1,"195":1,"197":2}}],["taking",{"2":{"6":3,"63":1,"70":1,"71":1,"73":1,"74":1,"75":1,"76":1,"167":1}}],["takes",{"2":{"64":3,"197":1}}],["taken",{"2":{"20":1,"58":1}}],["take",{"2":{"1":2,"6":2,"25":1,"64":3,"70":1,"71":1,"73":1,"74":1,"76":1,"145":2,"146":2,"148":1,"170":1,"172":1}}],["target=gi",{"2":{"64":1}}],["target=nothing",{"2":{"31":1,"32":1,"33":1,"34":1,"70":1,"73":1,"75":1}}],["targets",{"2":{"49":1,"53":2,"56":3,"66":3,"85":3}}],["target",{"0":{"49":1},"2":{"1":28,"6":28,"15":3,"28":1,"48":2,"49":2,"59":1,"63":2,"64":1,"70":5,"71":11,"73":6,"74":10,"75":4,"76":13,"146":1,"148":1,"150":16,"151":5,"152":1,"153":34,"155":79,"158":3,"169":2,"170":33,"172":3,"180":2}}],["tilted",{"2":{"66":1}}],["tie",{"2":{"53":1}}],["timings",{"2":{"13":5}}],["timing",{"2":{"13":2}}],["times",{"2":{"4":2,"6":1,"166":1}}],["time",{"2":{"1":10,"13":3,"50":1,"58":1,"146":1,"157":1,"172":4,"188":1,"191":1,"192":1,"193":2,"198":1,"199":1}}],["title",{"2":{"13":2,"58":2,"81":2,"146":1,"176":1,"180":2}}],["tip",{"2":{"1":2,"5":2,"6":1,"59":1,"172":1,"197":1}}],["thus",{"2":{"53":1,"56":1,"64":3,"71":1,"74":1,"76":1}}],["those",{"2":{"29":1,"53":1,"64":1,"74":1,"99":1,"137":1,"157":1}}],["though",{"2":{"20":1,"161":1}}],["thing",{"0":{"26":1}}],["things",{"2":{"9":1}}],["this",{"0":{"26":1},"2":{"0":1,"1":2,"3":2,"4":12,"5":2,"6":32,"7":1,"18":1,"21":2,"23":2,"25":1,"27":2,"28":3,"29":1,"46":1,"49":3,"50":2,"52":2,"53":6,"55":2,"56":9,"58":3,"59":11,"60":2,"62":1,"63":4,"64":26,"65":1,"66":4,"68":1,"69":5,"71":1,"72":1,"74":5,"75":1,"76":2,"82":5,"84":4,"85":6,"88":4,"90":1,"91":2,"93":1,"94":2,"96":3,"97":3,"104":1,"105":1,"108":3,"115":1,"116":3,"119":2,"121":1,"122":4,"125":3,"132":1,"134":1,"135":3,"142":1,"144":1,"145":3,"146":8,"147":2,"148":2,"151":2,"153":15,"154":2,"155":2,"156":1,"157":4,"158":2,"159":4,"160":3,"162":3,"163":1,"164":9,"165":7,"166":2,"167":4,"169":3,"170":7,"171":2,"172":4,"173":3,"174":3,"175":5,"176":5,"177":4,"178":2,"180":3,"184":9,"185":1,"186":1,"187":3,"188":2,"189":1,"190":1,"191":2,"192":4,"193":3,"194":3,"195":1,"197":3,"198":3,"199":3,"200":1}}],["three",{"2":{"22":1,"57":1,"74":1,"157":1}}],["thread",{"2":{"153":3,"170":3}}],["threading",{"0":{"153":1},"2":{"153":5,"159":1,"170":2}}],["threads",{"2":{"1":2,"6":1,"150":2,"153":5,"170":7}}],["threaded=",{"2":{"153":4,"170":5}}],["threaded=true",{"2":{"153":1}}],["threaded=false",{"2":{"56":1,"63":4,"66":2,"85":8,"153":1,"166":1,"170":1,"180":1}}],["threaded==true",{"2":{"1":2,"6":1,"150":2,"153":1}}],["threaded",{"2":{"1":6,"4":2,"6":7,"28":2,"50":1,"53":2,"56":1,"63":3,"66":3,"85":5,"150":4,"153":25,"154":1,"159":2,"166":1,"170":27,"177":6,"180":1}}],["through",{"2":{"6":4,"53":1,"59":1,"64":3,"66":1,"68":1,"69":2,"82":1,"97":1,"116":5,"135":1,"146":1,"151":1,"153":1,"165":2,"169":2,"182":1,"188":1,"191":1}}],["thrown",{"2":{"151":1}}],["throws",{"2":{"6":1,"188":1}}],["throw",{"2":{"4":2,"6":1,"76":1,"88":1,"146":1,"153":1,"155":3,"170":1}}],["than",{"2":{"1":2,"3":2,"6":11,"11":1,"64":2,"99":1,"105":1,"122":1,"137":1,"145":1,"146":2,"150":2,"152":1,"153":1,"156":1,"165":2,"167":1,"168":1,"169":2,"174":1,"176":2,"177":1,"181":1,"188":2}}],["that",{"2":{"1":2,"3":6,"4":16,"6":51,"9":1,"17":1,"18":4,"19":3,"20":1,"21":1,"22":1,"23":1,"48":3,"53":4,"55":2,"56":4,"59":4,"60":2,"62":2,"63":3,"64":17,"65":3,"66":5,"70":4,"71":5,"73":4,"74":14,"75":3,"76":5,"77":1,"81":3,"82":4,"85":2,"87":1,"88":11,"90":4,"91":1,"94":1,"96":2,"97":1,"107":1,"108":1,"116":3,"118":1,"119":1,"121":2,"122":10,"124":2,"125":2,"127":2,"134":3,"135":1,"137":3,"145":1,"146":4,"148":1,"150":2,"153":5,"154":1,"155":2,"156":2,"157":6,"158":1,"159":3,"160":3,"161":2,"162":1,"163":3,"164":3,"165":4,"167":2,"168":3,"169":4,"170":1,"172":1,"174":2,"175":2,"176":3,"177":2,"180":2,"182":1,"184":1,"188":1,"192":4,"193":1,"194":2,"195":3,"197":1,"198":2}}],["theta",{"2":{"157":1}}],["theorem",{"2":{"85":1}}],["themselves",{"2":{"59":1}}],["them",{"2":{"6":1,"21":1,"23":1,"64":1,"146":2,"147":2,"153":3,"155":1,"161":2,"167":1,"168":1,"180":1,"191":1,"193":1,"195":3}}],["then",{"2":{"6":5,"18":1,"25":1,"48":1,"53":3,"59":2,"64":6,"66":1,"70":1,"72":2,"73":2,"74":6,"75":2,"76":2,"82":1,"116":1,"146":2,"148":1,"151":1,"153":2,"167":1,"170":3,"176":2,"180":1,"192":1,"197":1,"198":1}}],["thereof",{"2":{"148":1,"170":1}}],["therefore",{"2":{"84":1,"160":1}}],["there",{"2":{"6":3,"48":1,"53":1,"59":2,"60":1,"64":3,"66":1,"69":2,"71":1,"72":1,"74":6,"76":1,"116":1,"122":2,"146":3,"147":1,"148":1,"153":4,"157":1,"158":1,"161":1,"175":1,"184":1,"188":1,"192":2,"195":3}}],["their",{"2":{"3":2,"4":2,"6":2,"59":1,"62":2,"76":1,"85":2,"113":1,"122":1,"124":1,"128":1,"129":1,"138":3,"139":3,"148":1,"161":1,"166":1,"168":1,"170":1}}],["they",{"2":{"3":6,"4":22,"6":25,"20":2,"48":1,"49":1,"50":1,"57":1,"63":2,"64":8,"66":2,"70":2,"73":1,"74":6,"75":2,"76":3,"81":1,"87":3,"88":16,"97":1,"107":1,"111":2,"112":1,"113":1,"116":2,"118":1,"121":2,"122":4,"127":1,"129":1,"130":1,"138":1,"139":1,"146":6,"153":2,"155":1,"160":1,"165":2,"169":2,"175":1,"184":1,"187":1,"198":1}}],["these",{"2":{"1":4,"6":5,"50":1,"53":1,"59":5,"64":3,"76":1,"87":1,"88":1,"90":1,"93":1,"97":1,"105":2,"107":1,"108":1,"118":1,"121":1,"122":1,"124":2,"125":1,"134":1,"135":1,"145":1,"146":3,"150":2,"151":1,"153":2,"172":1,"176":1,"180":2,"188":1,"195":1,"197":1}}],["the",{"0":{"22":1,"25":1,"62":1,"80":1,"81":1},"2":{"1":56,"3":128,"4":224,"5":24,"6":415,"7":5,"9":3,"10":1,"11":3,"17":5,"18":10,"19":2,"20":4,"21":3,"22":4,"23":3,"25":3,"28":3,"48":4,"49":5,"50":3,"52":1,"53":63,"55":12,"56":43,"57":15,"58":12,"59":71,"60":6,"62":6,"63":25,"64":116,"65":7,"66":47,"68":2,"69":7,"70":27,"71":23,"72":1,"73":27,"74":82,"75":29,"76":70,"77":6,"81":11,"82":16,"84":11,"85":81,"87":5,"88":47,"90":9,"91":11,"93":4,"94":11,"96":8,"97":25,"100":8,"101":9,"102":3,"103":3,"104":2,"105":5,"107":2,"108":21,"110":8,"111":6,"112":4,"114":3,"115":2,"116":123,"118":5,"119":6,"121":5,"122":26,"124":5,"125":21,"127":6,"128":10,"129":7,"130":3,"131":3,"132":2,"134":7,"135":24,"137":2,"138":9,"139":9,"140":6,"141":2,"142":2,"144":1,"145":8,"146":47,"147":1,"148":9,"150":28,"151":11,"153":69,"154":2,"155":12,"156":1,"157":21,"159":5,"160":5,"161":5,"162":4,"163":2,"164":17,"165":10,"166":1,"167":4,"168":8,"169":6,"170":23,"171":5,"172":14,"173":2,"174":3,"175":5,"176":26,"177":17,"178":3,"180":18,"181":3,"182":6,"183":3,"184":2,"185":3,"186":1,"187":2,"188":21,"191":10,"192":11,"193":10,"194":2,"195":4,"197":10,"198":17,"199":3}}],["t",{"2":{"0":1,"4":56,"6":56,"9":1,"27":8,"28":1,"49":1,"53":32,"56":41,"59":26,"63":38,"64":74,"66":44,"69":18,"70":12,"71":12,"73":12,"74":156,"75":10,"76":20,"85":87,"88":17,"96":1,"111":1,"116":24,"122":1,"124":1,"128":2,"129":1,"146":14,"153":5,"155":3,"157":5,"158":14,"159":2,"165":2,"169":2,"170":4,"176":3,"177":5,"180":1,"186":7,"188":3,"189":10,"191":4,"199":1}}],["tokyo",{"2":{"199":1}}],["toy",{"2":{"197":1}}],["together",{"2":{"74":1,"76":1,"191":1,"198":1}}],["touching",{"0":{"128":1},"2":{"74":1,"76":1}}],["touch",{"0":{"129":1,"130":1,"131":1},"2":{"64":1,"124":1,"127":2,"129":1,"131":1}}],["touches",{"0":{"38":1,"123":1,"124":1,"127":1},"1":{"124":1,"125":1},"2":{"0":2,"3":5,"6":3,"27":1,"38":2,"123":1,"124":3,"125":11,"126":6,"127":11,"128":15,"129":9,"130":8,"131":3,"132":4,"197":1}}],["totally",{"2":{"75":1}}],["total",{"2":{"56":1,"59":2,"64":2,"66":1}}],["towards",{"2":{"21":1,"23":1}}],["topright",{"2":{"180":1}}],["topologypreserve",{"2":{"178":1}}],["topology",{"2":{"178":1}}],["topological",{"2":{"6":1,"157":2}}],["top",{"2":{"20":1,"22":1,"64":1,"146":1}}],["took",{"2":{"199":1}}],["tools",{"2":{"17":1}}],["too",{"2":{"6":1,"74":1,"174":1,"177":1}}],["tol^2",{"2":{"181":1,"182":1}}],["tolerances",{"2":{"183":1,"184":29}}],["tolerance",{"2":{"181":1,"182":1,"183":1,"184":17}}],["tol",{"2":{"6":12,"176":2,"180":18,"181":7,"182":15,"183":8,"184":18}}],["todo",{"2":{"3":4,"6":2,"27":1,"28":1,"64":1,"74":1,"82":2,"105":4,"122":1,"146":1,"153":1,"159":1,"162":1,"180":1}}],["to",{"0":{"9":1,"22":1,"49":1,"72":1,"98":1,"109":1,"126":1,"136":1},"2":{"0":2,"1":44,"3":2,"4":66,"5":8,"6":145,"7":2,"9":3,"10":2,"11":2,"13":1,"17":2,"18":9,"19":1,"20":2,"21":3,"22":2,"23":3,"25":4,"26":1,"48":3,"49":4,"50":2,"52":1,"53":8,"55":1,"56":4,"57":4,"58":1,"59":26,"60":2,"62":2,"63":5,"64":32,"65":1,"66":12,"68":1,"69":3,"70":8,"71":4,"73":8,"74":27,"75":7,"76":11,"77":1,"79":1,"80":1,"81":4,"82":6,"84":6,"85":32,"87":2,"88":17,"90":1,"91":1,"93":3,"94":1,"96":2,"97":7,"105":2,"107":1,"108":7,"116":21,"118":2,"119":1,"121":3,"122":7,"124":1,"125":7,"127":1,"134":1,"135":7,"145":4,"146":16,"148":4,"150":18,"151":6,"152":1,"153":33,"154":7,"155":16,"157":7,"158":2,"159":6,"160":2,"161":3,"163":4,"164":11,"165":5,"166":3,"167":3,"168":1,"169":4,"170":11,"171":1,"172":4,"173":1,"174":3,"175":3,"176":9,"177":7,"178":1,"180":4,"181":1,"182":15,"183":1,"184":2,"185":4,"186":1,"187":2,"188":9,"189":28,"190":4,"191":6,"192":10,"193":6,"194":7,"195":5,"196":1,"197":7,"198":5,"199":2,"200":8}}],["tree",{"2":{"197":1}}],["treating",{"2":{"180":1}}],["treated",{"2":{"116":5,"191":1}}],["treats",{"2":{"56":1,"85":1}}],["trials",{"2":{"176":2,"180":2}}],["triangles",{"2":{"57":1}}],["triangle",{"2":{"6":1,"57":4,"183":4,"198":1}}],["triangulation",{"2":{"6":1,"27":1,"82":1}}],["trivially",{"2":{"148":1}}],["try",{"2":{"72":3,"146":1,"151":1,"153":3,"155":3,"170":3,"199":1}}],["tr",{"2":{"56":3}}],["traverse",{"2":{"64":1}}],["traced",{"2":{"64":1}}],["traces",{"2":{"64":1}}],["trace",{"2":{"64":2,"70":1,"73":1,"75":1}}],["track",{"2":{"64":3,"169":2}}],["tracing",{"2":{"6":1,"64":4,"66":1,"71":5,"74":2,"76":2}}],["traditional",{"2":{"6":1,"146":1,"157":1}}],["transverse",{"2":{"192":1}}],["translate",{"2":{"58":2}}],["translation",{"2":{"1":4,"6":2,"180":2,"185":2,"191":3,"193":1}}],["transformations",{"2":{"27":10}}],["transformation",{"0":{"185":1},"2":{"6":1,"146":1,"153":1,"163":1,"172":1,"190":1}}],["transform",{"2":{"0":2,"1":11,"6":3,"15":2,"27":1,"148":1,"172":2,"180":1,"185":4,"191":4,"193":1}}],["trait`",{"2":{"155":1}}],["trait2",{"2":{"85":10,"88":2,"110":2,"111":2,"122":2,"127":2,"129":2,"130":2}}],["trait1",{"2":{"85":12,"88":2,"110":2,"111":2,"122":2,"127":2,"129":2,"130":2}}],["traits",{"2":{"6":2,"18":1,"122":1,"151":2,"158":3,"164":2,"180":2}}],["trait",{"2":{"1":10,"3":4,"4":4,"6":17,"18":7,"20":1,"27":1,"28":1,"48":1,"53":2,"56":5,"59":6,"63":7,"66":2,"69":3,"70":2,"71":2,"73":6,"74":4,"75":2,"76":2,"85":7,"88":11,"97":3,"105":2,"108":3,"116":4,"122":10,"125":3,"135":3,"145":1,"148":1,"150":10,"151":3,"153":19,"155":24,"158":8,"164":10,"165":1,"170":9,"177":1,"180":2,"189":7,"191":1}}],["traittarget",{"0":{"158":1},"2":{"0":1,"1":4,"6":8,"28":1,"53":1,"56":1,"63":1,"66":1,"70":2,"71":4,"73":3,"74":4,"75":2,"76":4,"85":1,"148":1,"150":4,"153":6,"157":1,"158":20,"170":6,"177":1,"180":1}}],["trues",{"2":{"169":3}}],["true",{"0":{"50":1},"2":{"0":1,"1":10,"3":50,"4":6,"6":45,"27":1,"53":7,"56":1,"58":2,"60":1,"64":30,"66":6,"69":1,"70":1,"71":2,"73":1,"74":1,"75":2,"76":3,"85":4,"88":21,"90":1,"91":1,"93":2,"94":1,"96":2,"97":6,"99":1,"100":1,"101":4,"103":1,"104":1,"105":9,"107":2,"108":2,"110":1,"111":1,"112":3,"114":1,"115":1,"116":78,"118":3,"119":1,"121":2,"122":18,"124":2,"125":6,"128":1,"129":1,"131":1,"132":1,"134":2,"135":7,"137":1,"138":1,"139":4,"141":1,"142":1,"145":4,"146":5,"150":4,"153":6,"155":1,"157":1,"159":3,"169":1,"170":2,"173":1,"176":1,"180":1,"197":1,"200":1}}],["phi``",{"2":{"157":1}}],["physics",{"2":{"6":1,"157":1}}],["psa",{"2":{"153":1,"170":1}}],["pb",{"2":{"105":2}}],["p0",{"2":{"85":9}}],["p3",{"2":{"64":8,"183":4}}],["ptm",{"2":{"145":3}}],["ptj",{"2":{"145":5}}],["pti",{"2":{"145":3}}],["ptrait",{"2":{"85":2}}],["pts",{"2":{"64":22,"69":7}}],["pt",{"2":{"64":114,"69":2,"74":26,"116":8,"182":4}}],["pt2",{"2":{"64":14,"74":2}}],["pt1",{"2":{"64":18,"74":2}}],["pn",{"2":{"127":3}}],["pn2",{"2":{"64":4}}],["pn1",{"2":{"64":4}}],["pfirst",{"2":{"56":3}}],["pu",{"2":{"198":2}}],["purpose",{"2":{"153":1}}],["pure",{"2":{"6":1,"82":1,"146":1}}],["purely",{"2":{"6":2,"18":1,"157":1,"176":1}}],["push",{"2":{"64":15,"69":5,"70":2,"73":2,"74":2,"75":4,"76":5,"146":3,"162":1,"177":3,"182":3}}],["public",{"2":{"50":1}}],["pulling",{"2":{"82":1}}],["pull",{"2":{"21":1,"23":1}}],["pick",{"2":{"192":2}}],["piece",{"2":{"64":6,"169":6}}],["pieces",{"2":{"64":12,"69":1,"71":2,"75":4,"116":1,"169":9}}],["pi",{"2":{"13":2}}],["pixels",{"2":{"146":1}}],["pixel",{"2":{"6":2,"146":7}}],["pythagorean",{"2":{"85":1}}],["py",{"2":{"13":2,"14":2}}],["px",{"2":{"13":2,"14":2}}],["peucker",{"2":{"178":2,"180":3,"182":2}}],["peaks",{"2":{"146":2}}],["peculiarities",{"0":{"47":1},"1":{"48":1,"49":1,"50":1}}],["people",{"2":{"9":1}}],["persist",{"2":{"153":1}}],["performs",{"2":{"59":1,"170":1,"177":1}}],["perform",{"2":{"22":1,"58":1,"59":2,"64":1,"148":1,"170":1,"197":3,"198":2,"200":1}}],["performing",{"2":{"6":3,"49":1,"59":1,"70":1,"73":1,"75":1,"198":1}}],["performed",{"2":{"6":1,"157":1,"198":1}}],["performance",{"2":{"4":2,"6":2,"48":1,"146":1,"166":1,"167":1,"180":1,"195":1}}],["per",{"2":{"5":4,"6":2,"58":1,"59":2,"64":5,"146":1,"153":2,"170":2,"177":1}}],["pl",{"2":{"198":2}}],["plt",{"2":{"191":1}}],["please",{"2":{"64":1}}],["place",{"2":{"74":1,"197":1}}],["placement",{"2":{"64":1}}],["plan",{"2":{"174":1}}],["plane",{"2":{"6":1,"59":1,"157":3,"196":1}}],["planar",{"2":{"0":1,"6":3,"157":5}}],["plottable",{"2":{"146":1}}],["plotted",{"2":{"62":1}}],["plotting",{"0":{"191":1},"2":{"6":1,"146":1,"174":1,"177":1,"190":1,"191":4,"192":1}}],["plots",{"2":{"58":2}}],["plot",{"0":{"192":1},"2":{"13":1,"58":3,"79":2,"80":1,"81":1,"87":1,"121":1,"146":1,"176":2,"180":4,"190":2,"191":9,"192":5,"193":1,"195":1,"198":1}}],["plus",{"2":{"5":2,"6":1,"59":1}}],["p2y",{"2":{"189":3}}],["p2x",{"2":{"189":3}}],["p2box",{"2":{"58":1}}],["p2",{"2":{"3":4,"4":4,"6":6,"15":12,"53":12,"56":9,"64":18,"66":19,"75":2,"81":1,"85":15,"88":11,"93":2,"97":2,"116":12,"122":2,"145":3,"175":1,"183":4,"189":3,"191":2}}],["p1y",{"2":{"189":3}}],["p1x",{"2":{"189":3}}],["p1",{"2":{"3":6,"4":4,"6":7,"15":12,"53":21,"56":8,"58":4,"64":9,"66":25,"68":1,"75":2,"81":2,"85":15,"88":14,"93":5,"96":5,"97":3,"116":4,"122":2,"127":3,"145":3,"183":4,"189":3,"191":1}}],["practice",{"2":{"193":1}}],["pred",{"2":{"197":5,"198":1,"199":2,"200":1}}],["predicate",{"2":{"7":1,"105":1,"197":6,"198":1,"200":5}}],["predicates",{"0":{"12":1,"15":1,"200":1},"1":{"13":1,"14":1,"15":1,"16":1},"2":{"7":4,"12":1,"27":1,"64":5,"72":3,"74":4,"116":1,"197":1,"199":1}}],["pretty",{"2":{"172":1}}],["prettytime",{"2":{"13":2}}],["prevent",{"2":{"71":2,"74":2,"76":2}}],["prev^2",{"2":{"53":2}}],["prev",{"2":{"53":14,"64":69,"145":4}}],["previously",{"2":{"175":1}}],["previous",{"2":{"19":1,"53":1,"153":1,"181":3}}],["preparations",{"2":{"20":1}}],["prepared",{"2":{"20":1,"146":2}}],["prepare",{"0":{"20":1},"2":{"17":1,"20":1}}],["precision",{"2":{"11":1}}],["preserve",{"2":{"180":4,"182":3}}],["preserved",{"2":{"153":2}}],["preserving",{"2":{"178":1}}],["presentation",{"2":{"6":1,"59":1}}],["present",{"2":{"6":1,"153":1,"188":1}}],["presence",{"2":{"6":1,"28":1,"188":1}}],["prescribes",{"2":{"20":1}}],["press",{"2":{"6":1,"59":1}}],["pre",{"2":{"6":1,"75":1,"180":1,"182":2}}],["prefilter",{"2":{"6":1,"180":7}}],["protters",{"2":{"153":1,"170":1}}],["progressively",{"2":{"151":1}}],["program",{"2":{"17":1}}],["programming",{"2":{"17":1,"22":1}}],["promote",{"2":{"59":5}}],["property",{"2":{"170":2}}],["properties=namedtuple",{"2":{"170":1}}],["properties=gi",{"2":{"155":1}}],["properties=",{"2":{"146":1}}],["properties",{"2":{"6":1,"153":8,"155":1,"180":1,"184":1}}],["propagated",{"2":{"153":1}}],["propagate",{"2":{"59":16,"85":4}}],["probably",{"2":{"56":1,"153":1}}],["prod",{"2":{"53":4}}],["product",{"2":{"53":1}}],["process",{"2":{"99":3,"100":3,"101":3,"102":1,"105":1,"110":3,"111":3,"112":2,"113":1,"116":11,"127":1,"128":3,"129":1,"130":1,"137":3,"138":3,"139":3,"140":1,"153":1,"170":1,"182":1}}],["processed",{"2":{"64":6}}],["processing",{"2":{"49":1}}],["processors",{"2":{"27":1,"97":2,"108":2,"125":2,"135":2}}],["processor",{"2":{"27":1}}],["profile",{"2":{"9":1}}],["providers",{"2":{"161":1,"168":1}}],["provide",{"0":{"49":1},"2":{"6":6,"52":1,"55":1,"57":1,"62":1,"65":1,"68":1,"70":2,"73":2,"75":2,"84":1,"87":1,"90":1,"93":1,"96":1,"107":1,"116":2,"118":1,"121":1,"124":1,"134":1,"146":1,"184":1}}],["provides",{"2":{"6":1,"77":1,"82":1,"192":1}}],["provided",{"2":{"4":2,"6":3,"11":1,"64":1,"85":1,"88":1,"168":1,"176":2,"188":1}}],["projecting",{"2":{"192":1}}],["projections",{"2":{"157":1}}],["projection",{"2":{"85":2,"190":1,"192":1}}],["project",{"2":{"9":1}}],["projects",{"2":{"9":1}}],["proj",{"2":{"1":4,"6":3,"172":2,"173":4,"175":1,"176":6,"190":1}}],["prints",{"2":{"173":1}}],["printstyled",{"2":{"60":1,"173":1,"176":1}}],["println",{"2":{"60":1,"173":1,"176":1,"180":2}}],["print",{"2":{"60":2,"173":2,"176":2}}],["primitives",{"0":{"155":1},"2":{"27":1,"155":1}}],["primitive",{"2":{"25":1}}],["primarily",{"2":{"6":1,"21":2,"23":2,"158":1}}],["primary",{"2":{"3":4,"6":3,"97":1,"135":1,"180":1}}],["priority",{"2":{"1":2,"172":1}}],["pay",{"2":{"170":1}}],["paper",{"2":{"116":2}}],["pa",{"2":{"105":2}}],["pathof",{"2":{"180":2}}],["paths",{"0":{"196":1},"2":{"159":1,"196":2}}],["path",{"2":{"55":3,"192":2}}],["parquet",{"2":{"195":3}}],["parent",{"2":{"159":1}}],["parse",{"2":{"116":1,"122":1}}],["part",{"2":{"66":2,"76":2,"116":3,"152":1}}],["partition",{"2":{"153":2,"170":2}}],["partialsort",{"2":{"184":1}}],["partial",{"2":{"66":4}}],["partially",{"2":{"64":2,"76":2}}],["particularly",{"2":{"59":1}}],["particular",{"2":{"26":1,"53":1,"146":1,"192":2}}],["parallel",{"2":{"116":1,"145":1}}],["paradigm",{"0":{"25":1}}],["paradigms",{"0":{"17":1},"1":{"18":1,"19":1,"20":1},"2":{"17":2,"20":1}}],["parametrized",{"2":{"157":1}}],["parameters",{"2":{"6":1,"155":1,"158":2}}],["parameter",{"2":{"6":2,"158":3}}],["parameterized",{"2":{"6":1,"157":1}}],["params",{"2":{"6":2,"188":10}}],["parlance",{"2":{"5":2,"6":2,"59":1,"157":1}}],["passes",{"2":{"66":2,"116":1}}],["passed",{"2":{"1":4,"6":7,"82":1,"146":1,"155":2,"172":1,"176":2,"185":1,"188":2,"200":1}}],["passable",{"2":{"59":18}}],["passing",{"2":{"18":1,"153":1,"178":1}}],["pass",{"2":{"5":2,"6":4,"18":1,"59":1,"91":1,"94":1,"116":2,"119":1,"153":1,"159":1,"176":1,"177":1,"180":1}}],["pairs",{"2":{"74":1,"191":1}}],["pair",{"2":{"3":4,"6":2,"66":1,"122":2,"153":2,"170":1}}],["packages",{"2":{"6":1,"21":1,"23":1,"77":1,"155":1,"160":1,"187":1,"190":3,"192":1,"195":1}}],["package",{"2":{"1":4,"6":1,"21":2,"23":2,"48":1,"60":1,"77":2,"82":1,"146":1,"172":3,"173":1,"176":1,"192":1,"195":2}}],["page",{"2":{"0":1,"9":1,"22":1,"25":1,"27":1,"28":1,"46":1,"53":1,"56":1,"58":1,"59":1,"60":1,"63":1,"64":1,"66":1,"69":1,"71":1,"72":1,"74":1,"76":1,"82":1,"85":1,"88":1,"91":1,"94":1,"104":1,"105":1,"115":1,"116":1,"119":1,"122":1,"132":1,"142":1,"145":1,"146":1,"147":1,"153":1,"154":1,"155":1,"159":1,"162":1,"165":1,"166":1,"169":1,"170":1,"171":1,"173":1,"177":1,"184":1,"185":1,"186":1,"188":1,"189":1}}],["p",{"2":{"1":10,"6":5,"13":13,"14":12,"15":2,"52":1,"55":1,"62":1,"64":5,"65":1,"66":5,"71":2,"75":2,"79":1,"80":1,"84":3,"87":1,"90":1,"93":1,"96":1,"105":4,"107":1,"116":20,"118":1,"121":1,"124":1,"134":1,"145":4,"146":3,"148":3,"150":6,"153":5,"171":7,"175":1,"179":1,"180":1,"184":3,"185":9,"186":7,"189":11,"197":1,"198":1}}],["poylgon",{"2":{"116":1}}],["potential",{"2":{"66":1}}],["potentially",{"2":{"6":2,"64":1,"165":2,"169":2}}],["post",{"2":{"182":2}}],["possibly",{"2":{"153":1}}],["possiblenodes",{"2":{"146":2}}],["possible",{"2":{"6":3,"70":1,"73":1,"75":1,"146":1,"153":1,"170":1}}],["possibility",{"2":{"151":1}}],["possibilities",{"2":{"74":1}}],["position=",{"2":{"180":1}}],["position",{"2":{"6":1,"145":1,"175":1}}],["positive",{"2":{"4":8,"6":4,"55":3,"56":1,"84":3,"85":3,"177":1,"184":1}}],["polgons",{"2":{"146":1}}],["polgontrait",{"2":{"1":2,"6":1,"150":2}}],["pole",{"2":{"6":2,"157":2}}],["poles",{"2":{"6":1,"157":1}}],["polar",{"2":{"6":1,"176":1}}],["polynodes",{"2":{"64":7,"70":1,"73":1,"75":1}}],["polynode",{"2":{"64":36}}],["polypoints",{"2":{"59":46}}],["polys",{"2":{"6":2,"64":39,"68":3,"69":10,"70":14,"71":14,"73":9,"74":6,"75":14,"76":28,"169":26}}],["polys1",{"2":{"3":4,"6":2,"122":6}}],["polys2",{"2":{"3":4,"6":2,"122":6}}],["poly",{"2":{"3":4,"6":16,"15":2,"52":1,"55":1,"56":6,"58":2,"59":3,"62":1,"64":107,"65":2,"66":4,"68":4,"69":20,"70":22,"71":12,"73":15,"74":10,"75":19,"76":79,"79":2,"84":1,"85":3,"88":4,"105":10,"116":21,"122":8,"145":5,"146":5,"169":18,"175":2,"179":2,"180":8,"189":8,"191":2,"198":5}}],["poly2",{"2":{"3":6,"4":4,"6":7,"70":2,"88":2,"116":19,"122":7}}],["poly1",{"2":{"3":6,"4":4,"6":7,"70":2,"88":2,"116":14,"122":7}}],["polygon3",{"2":{"191":2,"192":1}}],["polygon2",{"2":{"191":6}}],["polygon1",{"2":{"191":4}}],["polygonization",{"2":{"146":1}}],["polygonizing",{"0":{"146":1}}],["polygonized",{"2":{"146":1}}],["polygonize",{"2":{"0":1,"6":6,"9":1,"27":1,"146":31}}],["polygon`",{"2":{"59":3,"82":1}}],["polygons",{"0":{"102":1,"130":1,"140":1,"167":1},"1":{"168":1,"169":1},"2":{"3":8,"4":6,"5":2,"6":18,"9":1,"27":1,"49":5,"56":5,"57":1,"59":2,"62":1,"63":1,"64":14,"66":1,"69":2,"70":9,"71":5,"73":3,"74":8,"75":6,"76":19,"84":1,"85":1,"88":5,"102":1,"122":5,"140":1,"145":1,"146":19,"151":1,"161":2,"165":3,"167":2,"168":2,"169":10,"178":1,"180":1,"191":3,"192":1,"198":5,"199":3}}],["polygontrait",{"2":{"1":2,"3":8,"4":12,"6":14,"15":3,"28":1,"49":1,"53":2,"56":3,"59":3,"63":2,"64":2,"66":2,"69":1,"70":5,"71":5,"73":3,"74":5,"75":4,"76":8,"85":2,"88":10,"99":2,"100":1,"101":1,"102":3,"103":1,"105":4,"110":2,"111":2,"112":1,"113":2,"114":1,"122":8,"127":2,"128":1,"129":1,"130":3,"131":1,"137":2,"138":1,"139":1,"140":3,"141":1,"148":1,"150":2,"151":2,"153":2,"162":2,"164":3,"165":1,"169":2,"170":1,"180":2,"189":1}}],["polygon",{"0":{"30":1,"64":1,"67":1,"70":1,"71":1,"74":1,"75":1,"76":1,"113":1},"1":{"31":1,"32":1,"33":1,"34":1,"68":1,"69":1},"2":{"0":1,"1":8,"3":8,"4":42,"5":18,"6":65,"9":2,"11":3,"15":4,"20":1,"49":1,"52":1,"53":5,"55":2,"56":5,"57":5,"58":16,"59":57,"62":2,"63":4,"64":39,"65":3,"66":4,"68":3,"69":10,"70":5,"71":7,"73":5,"74":6,"75":6,"76":34,"77":1,"81":1,"82":3,"84":3,"85":14,"88":12,"97":1,"99":3,"100":3,"101":4,"102":8,"105":1,"110":3,"111":4,"112":4,"113":4,"116":66,"122":4,"125":1,"127":3,"128":4,"129":5,"130":7,"135":1,"137":3,"138":4,"139":4,"140":8,"145":5,"146":4,"150":2,"153":1,"160":4,"161":8,"162":5,"163":1,"165":4,"167":3,"168":12,"169":7,"175":1,"176":4,"179":1,"180":9,"185":3,"189":6,"191":12,"192":5,"193":7,"194":2,"198":6}}],["pointwise",{"0":{"185":1},"2":{"172":1}}],["point1",{"2":{"85":4}}],["point`",{"2":{"74":1}}],["pointedgeside",{"2":{"64":1}}],["point₂",{"2":{"63":13}}],["point₁",{"2":{"63":13}}],["point3s",{"2":{"59":10}}],["point3f",{"2":{"58":1}}],["pointrait",{"2":{"6":1}}],["point2f",{"2":{"58":4,"59":2,"79":1,"84":1}}],["point2d",{"2":{"58":1}}],["point2",{"2":{"6":2,"59":5,"81":1,"85":4}}],["pointtrait",{"2":{"1":2,"4":8,"6":9,"18":1,"28":1,"46":1,"53":2,"56":1,"59":3,"66":1,"73":2,"82":1,"85":17,"88":8,"99":6,"103":1,"110":6,"114":1,"127":6,"131":1,"137":6,"141":1,"148":2,"150":2,"151":1,"153":7,"155":12,"158":2,"164":3,"165":1,"166":1,"170":4,"171":2,"180":2,"185":2,"186":2,"189":1}}],["point",{"0":{"110":1,"127":1},"2":{"1":8,"3":20,"4":74,"5":14,"6":83,"9":2,"20":1,"46":1,"53":12,"56":3,"57":3,"58":1,"59":126,"63":6,"64":97,"66":50,"69":13,"71":9,"73":1,"74":71,"76":9,"82":3,"84":17,"85":73,"88":27,"91":3,"96":1,"97":2,"99":8,"105":21,"108":2,"110":10,"116":138,"118":1,"121":2,"122":21,"124":1,"125":3,"127":10,"128":1,"130":1,"135":4,"137":11,"145":1,"146":3,"150":2,"153":1,"160":1,"161":2,"165":2,"167":1,"169":2,"172":1,"174":1,"180":2,"181":3,"182":9,"183":1,"185":2,"189":4,"191":111,"192":7,"193":8,"198":2}}],["points2",{"2":{"3":2,"6":1,"122":3}}],["points1",{"2":{"3":2,"6":1,"122":3}}],["points",{"0":{"99":1,"137":1},"2":{"0":1,"1":6,"3":2,"4":22,"5":2,"6":53,"9":3,"13":1,"53":2,"55":3,"56":3,"58":8,"59":32,"63":1,"64":55,"66":5,"69":3,"70":5,"71":1,"73":8,"74":28,"75":4,"76":1,"77":3,"79":4,"81":4,"82":6,"84":2,"85":8,"87":2,"88":13,"90":1,"97":6,"99":3,"100":4,"108":6,"110":1,"111":7,"112":3,"116":10,"122":5,"125":5,"127":1,"128":2,"129":4,"130":3,"134":1,"135":5,"137":3,"138":3,"139":3,"140":1,"144":1,"146":3,"153":2,"166":2,"170":1,"172":1,"175":2,"176":2,"180":11,"181":11,"182":26,"183":10,"184":33,"185":2,"186":2,"189":25,"191":8,"192":1,"197":1,"198":11}}],["pointorientation",{"2":{"0":1,"6":2,"116":2}}],["my",{"2":{"199":1,"200":2}}],["mdk",{"2":{"153":2}}],["moore",{"2":{"146":1}}],["moved",{"2":{"64":1,"172":1}}],["move",{"2":{"63":1,"116":1}}],["most",{"2":{"21":1,"23":1,"64":1,"71":1,"74":1,"76":1,"81":1,"116":1,"180":1,"195":2}}],["monotone",{"2":{"20":1,"81":2}}],["monotonechainmethod",{"2":{"0":1,"6":1,"77":1,"81":2,"82":4}}],["mode",{"2":{"200":3}}],["model",{"2":{"6":1,"157":1,"197":1}}],["modify",{"2":{"191":1}}],["modified",{"2":{"153":1,"170":1}}],["module",{"2":{"172":1,"177":1}}],["modules",{"2":{"6":1,"59":1}}],["mod1",{"2":{"59":5}}],["mod",{"2":{"59":1,"64":1}}],["moment",{"2":{"6":1,"175":1,"177":1}}],["more",{"2":{"6":4,"7":1,"9":1,"10":1,"11":1,"22":1,"25":1,"49":1,"64":1,"70":1,"73":1,"75":1,"82":1,"116":1,"122":1,"153":2,"156":1,"157":2,"162":1,"170":2,"173":1,"175":1,"177":1,"191":2,"197":1}}],["mistakenly",{"2":{"167":1}}],["missing",{"2":{"155":8,"175":4}}],["missed",{"2":{"146":1}}],["mid",{"2":{"66":2,"116":3}}],["midpoint",{"2":{"64":2}}],["middle",{"2":{"64":2}}],["mining",{"2":{"199":1}}],["minimal",{"2":{"199":1}}],["minimize",{"2":{"74":1}}],["minimum",{"2":{"4":14,"6":12,"65":1,"66":2,"85":12,"180":1,"181":1,"183":1}}],["mind",{"2":{"175":1,"198":1}}],["minmax",{"2":{"74":4}}],["min",{"2":{"66":1,"74":16,"85":15,"180":1,"182":3,"183":1,"184":28}}],["minus",{"2":{"55":1}}],["minpoints=0",{"2":{"146":1}}],["minpoints",{"2":{"6":2}}],["might",{"2":{"6":3,"21":1,"23":1,"56":1,"70":1,"73":1,"74":1,"75":1,"163":1,"182":1}}],["mixed",{"2":{"6":4,"180":1}}],["m",{"2":{"5":2,"6":1,"15":10,"59":2,"66":6,"145":2,"192":1}}],["mp",{"2":{"105":2}}],["mp1",{"2":{"4":4,"6":2,"88":7}}],["mp2",{"2":{"4":4,"6":2,"88":8}}],["mercator",{"2":{"192":1}}],["merge",{"2":{"153":1}}],["meets",{"2":{"116":9,"122":1,"182":1}}],["meet",{"2":{"74":3,"96":1,"97":1,"108":1,"116":7,"125":1,"135":1}}],["memory",{"2":{"59":1,"193":1}}],["mesh",{"2":{"58":1}}],["message",{"2":{"6":1,"188":1}}],["me",{"0":{"49":1}}],["mentioned",{"2":{"19":1}}],["mentions",{"2":{"6":1,"188":1}}],["menu",{"2":{"14":3}}],["median",{"2":{"13":4,"170":1}}],["mechanics",{"2":{"6":1,"59":1}}],["measure",{"2":{"155":1,"174":1}}],["measures",{"2":{"6":1,"157":1}}],["meant",{"2":{"22":1}}],["meaning",{"2":{"3":6,"4":2,"6":5,"50":1,"56":1,"60":1,"122":4,"145":1,"157":1}}],["means",{"2":{"3":2,"6":6,"55":1,"56":1,"60":1,"96":1,"116":3,"121":1,"122":1,"145":1,"151":1,"157":2,"159":2}}],["mean",{"2":{"0":1,"6":5,"17":1,"58":2,"59":5,"170":1}}],["meanvalue",{"2":{"0":1,"5":4,"6":3,"57":1,"58":2,"59":15}}],["metadatakeys",{"2":{"153":1}}],["metadatasupport",{"2":{"153":2}}],["metadata",{"2":{"153":11}}],["met",{"2":{"116":44}}],["meters",{"2":{"6":4,"175":1,"176":4,"192":1}}],["methoderror",{"2":{"27":3}}],["methods",{"0":{"2":1,"3":1,"4":1,"6":1,"35":1},"1":{"3":1,"4":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1},"2":{"1":2,"6":9,"9":1,"21":1,"23":1,"27":27,"59":3,"77":1,"97":1,"108":1,"125":1,"135":1,"146":1,"151":1,"153":1,"155":1,"158":1,"175":1,"180":2,"185":1,"191":1}}],["method",{"0":{"173":1},"2":{"1":2,"4":2,"5":20,"6":31,"28":1,"50":1,"53":1,"56":1,"59":37,"60":2,"63":1,"66":1,"74":1,"76":1,"81":3,"82":2,"85":4,"88":1,"97":2,"108":2,"122":1,"125":2,"135":2,"146":1,"153":1,"155":3,"159":1,"170":1,"172":1,"173":2,"175":2,"176":9,"177":14,"178":2,"188":3,"197":1,"200":1}}],["mason",{"2":{"153":1,"170":1}}],["markersize",{"2":{"191":2}}],["marker",{"2":{"191":2}}],["marked",{"2":{"64":6,"71":1,"74":1,"76":1}}],["marking",{"2":{"71":2,"74":2,"76":2}}],["mark",{"2":{"64":2}}],["marks",{"2":{"64":1}}],["mag",{"2":{"53":4}}],["making",{"2":{"64":1,"146":1,"151":1,"168":1,"191":1,"193":2}}],["makie",{"2":{"13":1,"14":1,"52":1,"55":1,"58":3,"62":1,"65":1,"68":4,"79":1,"80":1,"84":1,"87":1,"90":1,"93":1,"96":1,"107":1,"118":1,"121":1,"124":1,"134":1,"146":3,"179":1,"180":1,"196":1}}],["makevalid",{"2":{"180":2}}],["makes",{"2":{"56":1,"64":1,"85":1,"153":1,"161":1,"167":1,"168":1}}],["make",{"2":{"9":1,"21":1,"23":1,"53":1,"64":3,"74":1,"85":1,"122":1,"146":2,"151":1,"162":1,"175":1,"184":1,"187":1,"191":2,"193":1}}],["mainly",{"2":{"59":1,"84":1,"148":1,"170":1}}],["maintain",{"2":{"56":1}}],["main",{"0":{"24":1},"1":{"25":1,"26":1},"2":{"7":1,"22":1,"64":1,"146":1,"153":1,"176":1}}],["mapped",{"2":{"195":1}}],["maptasks`",{"2":{"153":1}}],["maptasks",{"2":{"153":7}}],["mapreducetasks`",{"2":{"170":1}}],["mapreducetasks",{"2":{"170":5}}],["mapreduce",{"2":{"71":1,"146":2,"153":3,"170":7}}],["map",{"0":{"192":1},"2":{"6":1,"13":1,"18":3,"19":1,"25":1,"59":1,"64":1,"74":1,"122":2,"146":17,"153":11,"155":10,"157":1,"158":1,"162":1,"170":5,"180":1,"190":1,"192":1,"193":1,"195":1}}],["matlab",{"2":{"68":1}}],["materializer`",{"2":{"153":1}}],["materializer",{"2":{"48":1,"153":1}}],["mathrm",{"2":{"59":1}}],["math",{"2":{"7":1}}],["mathematics",{"2":{"6":1,"157":1}}],["mathematically",{"2":{"6":2,"145":1,"157":2}}],["mathematical",{"2":{"6":1,"157":1}}],["matrix",{"2":{"6":1,"14":2,"59":1}}],["matches",{"2":{"88":1,"146":1}}],["match",{"2":{"6":1,"88":12,"122":3,"146":1,"153":1,"155":1}}],["matching",{"2":{"3":2,"6":1,"48":1,"88":3,"122":1,"151":2}}],["maximal",{"2":{"74":1}}],["maximum",{"2":{"3":2,"6":4,"14":1,"65":1,"66":4,"105":1,"146":1,"176":1,"177":1,"182":4}}],["max",{"2":{"6":9,"28":9,"53":2,"66":1,"146":1,"153":1,"170":1,"175":5,"176":8,"177":7,"182":36,"184":1,"196":1}}],["made",{"2":{"6":2,"63":1,"64":1,"74":1,"129":1,"151":1,"165":1,"169":1,"183":1}}],["manner",{"2":{"197":1}}],["manipulate",{"2":{"195":1}}],["manifolds",{"2":{"6":1,"157":2}}],["manifold",{"0":{"157":1},"2":{"0":1,"6":7,"157":12}}],["manually",{"2":{"160":1}}],["many",{"2":{"4":2,"5":2,"6":2,"22":1,"49":1,"59":1,"64":1,"69":1,"71":1,"74":2,"76":1,"88":1,"161":1,"166":1}}],["maybe",{"2":{"6":1,"28":1,"116":4,"153":2,"155":1,"170":3}}],["may",{"2":{"1":2,"6":6,"49":2,"50":1,"59":2,"64":1,"74":1,"81":1,"145":1,"147":1,"150":2,"151":1,"153":4,"157":1,"158":1,"167":1,"168":1,"176":1}}],["mutation",{"2":{"194":1}}],["mutlipolygon",{"2":{"4":2,"6":1,"63":1}}],["muladd",{"2":{"59":2}}],["multifloats",{"2":{"13":1,"14":1,"15":1}}],["multifloat",{"2":{"7":1}}],["multilinestringtrait",{"2":{"28":1,"164":1}}],["multilinestring",{"2":{"6":1,"189":2}}],["multi",{"0":{"103":1,"104":1,"114":1,"115":1,"131":1,"132":1,"141":1,"142":1},"2":{"4":4,"6":3,"53":1,"56":1,"66":1,"88":2,"103":1,"104":1,"114":1,"115":1,"131":1,"132":1,"141":1,"142":1}}],["multicurves",{"2":{"56":1,"66":1}}],["multicurve",{"2":{"4":2,"6":1,"56":1}}],["multigeometry",{"2":{"4":4,"6":2,"85":2}}],["multiplication",{"2":{"177":1}}],["multiplied",{"2":{"59":3,"157":1}}],["multiple",{"2":{"4":2,"6":1,"59":1,"116":1,"166":1,"184":1,"191":1,"195":1}}],["multiply",{"2":{"1":2,"6":1,"185":1}}],["multipolys",{"2":{"76":3}}],["multipoly`",{"2":{"70":2,"73":2,"75":2}}],["multipoly",{"2":{"6":9,"15":3,"70":1,"71":27,"73":1,"74":26,"75":1,"76":24,"169":21,"180":9}}],["multipolygon`",{"2":{"146":1}}],["multipolygons",{"2":{"3":2,"4":2,"6":11,"63":1,"70":3,"73":3,"74":3,"75":3,"84":1,"88":1,"122":2,"168":1,"191":1,"192":1}}],["multipolygon",{"2":{"3":4,"4":10,"6":16,"56":2,"62":1,"70":1,"71":7,"73":1,"74":5,"75":1,"76":6,"88":4,"122":2,"146":7,"165":2,"167":7,"168":8,"169":2,"180":3,"191":8,"192":1}}],["multipolygontrait",{"2":{"1":2,"3":8,"4":4,"6":7,"28":1,"49":1,"71":4,"74":4,"76":4,"88":6,"103":1,"104":1,"114":1,"115":1,"122":8,"131":1,"132":1,"141":1,"142":1,"150":2,"153":1,"164":1,"169":4}}],["multipoint",{"2":{"4":10,"6":5,"46":1,"56":1,"88":5,"105":6,"153":1,"170":2,"180":1,"191":5}}],["multipoints",{"2":{"3":4,"4":2,"6":3,"56":1,"66":1,"88":2,"122":2,"180":1,"191":1}}],["multipointtrait",{"2":{"1":2,"3":4,"4":8,"6":8,"28":1,"53":2,"56":1,"66":1,"88":8,"103":1,"104":1,"105":4,"114":1,"115":1,"122":4,"131":1,"132":1,"141":1,"142":1,"150":2,"151":1,"164":1,"180":2,"189":1}}],["multithreading",{"2":{"1":4,"4":2,"6":5,"150":2,"154":1}}],["must",{"2":{"1":2,"3":16,"4":4,"5":2,"6":23,"9":1,"53":1,"59":5,"60":1,"64":2,"66":3,"69":1,"74":2,"88":5,"91":2,"93":1,"94":1,"97":1,"108":1,"116":13,"122":1,"124":1,"125":1,"135":2,"146":1,"153":1,"155":1,"163":1,"164":4,"165":1,"172":1,"176":1,"177":1,"180":1,"184":4,"188":1}}],["much",{"2":{"0":1,"6":3,"70":1,"73":1,"75":1}}],["df",{"2":{"194":3,"195":4,"198":10,"199":12}}],["dp",{"2":{"180":3}}],["dy",{"2":{"145":2,"177":3}}],["dy2",{"2":{"145":2}}],["dy1",{"2":{"105":10,"145":2}}],["dyc",{"2":{"105":2}}],["dx",{"2":{"145":2,"177":3}}],["dx2",{"2":{"145":2}}],["dx1",{"2":{"105":10,"145":2}}],["dxc",{"2":{"105":2}}],["drop",{"2":{"76":1,"169":1,"177":1}}],["driven",{"2":{"21":1,"23":1}}],["driving",{"2":{"21":1,"23":1}}],["duplicated",{"2":{"74":2}}],["during",{"2":{"64":1}}],["due",{"2":{"63":1,"64":1,"74":3}}],["date",{"2":{"81":1}}],["datas",{"2":{"200":1}}],["datasets",{"2":{"192":1,"197":1,"198":1}}],["dataset",{"2":{"192":1,"197":1}}],["datainterpolations",{"2":{"174":1}}],["dataapi",{"2":{"27":1,"153":7}}],["dataaspect",{"2":{"13":1,"14":1,"52":1,"55":1,"58":2,"62":1,"65":1,"84":2,"146":2,"175":1,"180":1}}],["dataframes",{"2":{"194":3,"198":2,"199":1}}],["dataframe",{"2":{"25":1,"194":1,"197":1,"198":5,"199":2}}],["data",{"0":{"146":1,"195":1},"2":{"21":1,"23":1,"49":1,"80":1,"146":2,"153":1,"180":10,"190":1,"192":2,"193":2,"194":2,"195":6,"198":1}}],["dashboard",{"0":{"14":1},"2":{"13":1,"14":1}}],["d",{"2":{"1":4,"5":2,"6":2,"59":1,"157":1,"172":1,"182":3}}],["deu",{"2":{"199":2}}],["demonstrates",{"2":{"198":1}}],["densify",{"2":{"176":3}}],["densifying",{"2":{"176":1}}],["densifies",{"2":{"174":1}}],["denoted",{"2":{"116":1}}],["denotes",{"2":{"64":1}}],["debug",{"2":{"164":1}}],["debugging",{"2":{"59":1,"64":1}}],["derivation",{"2":{"74":1}}],["dealing",{"2":{"66":1}}],["delete",{"2":{"105":1,"122":1,"146":1,"182":1}}],["deleteat",{"2":{"64":6,"182":1,"184":2}}],["deltri",{"2":{"82":1}}],["delayed",{"2":{"64":10,"71":2,"74":2,"76":2}}],["delay",{"2":{"64":14,"70":2,"71":2,"73":2,"74":2,"75":2,"76":2}}],["delaunay",{"2":{"6":1,"82":1}}],["delaunaytriangulation",{"2":{"6":1,"27":1,"77":1,"82":6}}],["depend",{"2":{"64":2}}],["depends",{"2":{"64":1,"69":1}}],["depending",{"2":{"1":2,"6":1,"49":1,"74":1,"150":2,"153":1}}],["depth",{"2":{"59":2}}],["desktop",{"2":{"195":1}}],["dest",{"2":{"192":2}}],["destination",{"2":{"192":5}}],["desired",{"2":{"75":1,"195":1}}],["despite",{"2":{"53":1}}],["describe",{"2":{"17":1}}],["described",{"2":{"6":1,"59":1,"63":1,"64":1}}],["de",{"0":{"35":1},"1":{"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1},"2":{"116":2,"197":1}}],["deconstruct",{"2":{"148":1,"170":1}}],["decomposition",{"2":{"18":1,"148":1}}],["decomposing",{"2":{"18":1}}],["decompose",{"2":{"18":2,"25":1,"59":4,"160":1,"170":1}}],["decrementing",{"2":{"146":1}}],["decrease",{"2":{"63":1}}],["decreasing",{"2":{"6":1,"180":1}}],["decide",{"2":{"81":1,"146":1}}],["decision",{"2":{"50":1}}],["degeneracies",{"2":{"9":1}}],["degenerate",{"2":{"6":1,"59":1,"69":2}}],["degrees",{"2":{"6":1,"52":1,"145":1,"157":1,"176":1}}],["defines",{"2":{"64":1,"148":1,"154":1,"155":1,"156":1,"163":1,"170":1,"187":1}}],["define",{"2":{"6":1,"58":1,"74":2,"87":1,"146":2,"148":1,"151":1,"153":1,"157":1,"187":1,"200":2}}],["defined",{"2":{"4":2,"5":2,"6":4,"7":1,"48":1,"53":2,"59":1,"65":1,"66":4,"74":4,"85":2,"144":1,"153":1,"157":2,"177":1,"187":1}}],["definitions",{"2":{"188":1}}],["definition",{"2":{"4":8,"6":9,"88":8,"96":1,"157":3,"177":1}}],["default",{"2":{"1":4,"4":10,"6":14,"28":1,"53":1,"56":2,"66":1,"70":1,"71":2,"73":1,"74":5,"75":1,"76":2,"82":1,"85":2,"146":5,"153":5,"155":1,"172":2,"180":2}}],["defaults",{"2":{"1":12,"4":4,"6":14,"150":6,"153":1,"154":3}}],["deeper",{"2":{"1":2,"6":1,"150":2,"152":1,"153":2}}],["detrimental",{"2":{"167":1}}],["detector",{"2":{"81":1}}],["detection",{"2":{"81":1,"146":1}}],["determined",{"2":{"64":1,"66":1}}],["determine",{"2":{"64":10,"66":3,"70":2,"73":2,"74":9,"75":2,"97":1,"108":1,"116":9,"122":1,"125":1,"135":1,"182":3,"197":1}}],["determines",{"2":{"56":1,"64":3,"74":1,"116":10}}],["determinant",{"2":{"6":1,"59":1}}],["detail",{"2":{"22":1}}],["details",{"2":{"6":2,"155":4,"175":2}}],["details>",{"2":{"6":2}}],["det",{"2":{"0":1,"6":2,"59":4}}],["dirname",{"2":{"180":4}}],["dirty",{"2":{"179":1}}],["directive",{"2":{"153":1}}],["direction",{"2":{"6":1,"64":1,"88":5,"146":3}}],["direct",{"2":{"29":1}}],["directly",{"2":{"6":1,"82":3,"146":1,"176":1}}],["dig",{"2":{"153":1}}],["dict",{"2":{"146":5}}],["didn",{"2":{"76":1,"116":1,"159":1}}],["division",{"2":{"58":1}}],["divided",{"2":{"22":1}}],["ditance",{"2":{"4":2,"6":1,"85":1}}],["dimensional",{"2":{"5":2,"6":4,"55":1,"59":1,"82":2,"157":1}}],["dimensions",{"2":{"3":2,"6":1,"122":2}}],["dimension",{"2":{"1":2,"3":8,"6":4,"105":2,"121":1,"122":4,"172":1}}],["discouraged",{"2":{"193":1}}],["discussion",{"2":{"21":1,"23":1,"69":1}}],["distributed",{"2":{"198":2}}],["distinct",{"2":{"74":1,"146":1}}],["dist",{"2":{"74":40,"85":19,"116":2,"176":8,"182":40}}],["distance`",{"2":{"176":3,"177":1,"188":1}}],["distances",{"2":{"74":1,"84":1,"176":1,"181":5}}],["distance",{"0":{"83":2,"84":2},"1":{"84":2,"85":2},"2":{"0":4,"4":50,"6":47,"27":1,"28":9,"59":13,"60":3,"66":3,"74":32,"83":2,"84":17,"85":92,"116":1,"148":1,"170":1,"174":1,"175":5,"176":13,"177":14,"180":1,"181":3,"182":6,"183":1,"196":1,"200":2}}],["disagree",{"2":{"56":1}}],["disparate",{"2":{"21":1,"23":1}}],["dispatches",{"2":{"6":1,"53":1,"56":1,"59":1,"63":1,"66":1,"85":1,"88":1,"97":1,"108":1,"122":1,"125":1,"135":1}}],["dispatch",{"2":{"4":2,"6":5,"50":1,"59":1,"88":1,"155":2,"158":1,"188":1}}],["displaying",{"2":{"192":1}}],["display",{"2":{"13":1,"58":1,"192":1}}],["displacement",{"2":{"6":1,"157":1}}],["disjoint",{"0":{"37":1,"106":1,"107":1,"110":1,"111":1,"112":1,"113":1,"114":1},"1":{"107":1,"108":1},"2":{"0":2,"3":9,"6":7,"27":1,"37":2,"49":1,"76":2,"106":1,"107":3,"108":11,"109":6,"110":15,"111":18,"112":10,"113":5,"114":4,"115":2,"116":16,"119":3,"165":2,"167":2,"169":7,"197":1}}],["diffs",{"2":{"53":4}}],["diff",{"2":{"6":2,"53":17,"70":5,"71":3,"122":3,"169":8}}],["differs",{"2":{"192":1}}],["differ",{"2":{"4":2,"6":1,"85":1}}],["differently",{"2":{"4":6,"6":4,"53":1,"56":2,"66":1}}],["different",{"2":{"3":2,"4":8,"6":6,"20":1,"49":1,"53":1,"56":4,"64":3,"66":1,"74":2,"81":1,"122":3,"146":1,"151":1,"153":1,"167":2,"192":2,"195":1}}],["differences",{"0":{"71":1},"2":{"74":1,"182":1}}],["difference",{"0":{"31":1,"34":1,"70":1},"2":{"0":1,"6":7,"11":1,"27":1,"31":2,"34":1,"49":1,"64":3,"70":12,"71":14,"74":1,"75":1,"76":3,"165":1,"169":1,"176":1}}],["diffintersectingpolygons",{"2":{"0":1,"6":1,"165":1,"169":4}}],["doi",{"2":{"70":2,"73":2,"75":2,"116":1}}],["doing",{"2":{"17":1,"48":1,"153":1,"193":1}}],["dot",{"2":{"53":2,"59":1}}],["doable",{"2":{"9":1}}],["documenter",{"2":{"155":4,"175":2}}],["documentation",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"0":1,"22":1,"58":1,"154":1}}],["docstring",{"2":{"155":8,"175":4}}],["docstrings",{"0":{"149":1},"1":{"150":1},"2":{"7":1,"154":1}}],["docs",{"0":{"22":1,"154":1},"2":{"22":1,"146":1}}],["doc",{"2":{"9":1,"10":1}}],["does",{"0":{"48":1},"2":{"7":1,"19":1,"62":1,"74":2,"90":1,"96":3,"116":1}}],["doesn",{"2":{"4":2,"6":2,"28":1,"56":1,"69":1,"88":1,"176":1,"188":1,"199":1}}],["download",{"2":{"192":1}}],["down",{"2":{"6":1,"18":1,"25":1,"59":1,"155":1}}],["doublets",{"2":{"199":2}}],["double",{"2":{"183":4}}],["doubled",{"2":{"6":1,"183":1}}],["douglas",{"2":{"178":2,"180":2,"182":1}}],["douglaspeucker",{"0":{"182":1},"2":{"0":1,"6":5,"178":1,"180":5,"182":6}}],["done",{"0":{"10":1},"2":{"6":1,"13":1,"14":1,"116":2,"146":1,"148":1,"157":1,"167":1,"191":1,"197":1}}],["don",{"2":{"4":4,"6":3,"64":4,"70":1,"76":1,"88":6,"111":1,"116":1,"124":1,"128":1,"146":2,"153":3,"170":2,"177":1,"188":1}}],["do",{"0":{"9":1,"49":1,"72":1},"2":{"1":2,"6":2,"14":1,"27":1,"49":1,"53":1,"56":2,"59":2,"60":1,"63":1,"66":1,"69":1,"76":3,"85":2,"87":1,"88":1,"93":1,"111":2,"112":1,"113":2,"116":1,"146":4,"148":1,"150":2,"153":5,"155":4,"161":1,"162":1,"168":1,"170":2,"171":2,"173":1,"176":1,"180":1,"185":2,"186":2,"192":2,"193":2,"194":3,"198":1,"199":1}}],["aim",{"2":{"157":1}}],["ay",{"2":{"145":2}}],["azimuth",{"2":{"145":2}}],["automatically",{"2":{"122":1,"153":1,"192":1}}],["a3",{"2":{"80":1}}],["against",{"2":{"88":1,"116":2,"176":1,"180":1}}],["again",{"2":{"74":1,"153":1}}],["a``",{"2":{"71":2}}],["a`",{"2":{"71":7,"74":3,"76":2}}],["away",{"2":{"60":1,"105":1,"200":1}}],["a2y",{"2":{"74":4}}],["a2x",{"2":{"74":4}}],["a2",{"2":{"58":4,"74":54,"81":1,"122":6}}],["a1y",{"2":{"74":7}}],["a1x",{"2":{"74":7}}],["a1",{"2":{"58":2,"64":9,"74":66,"81":1,"122":6}}],["ams",{"2":{"196":2}}],["america",{"2":{"180":1}}],["am",{"2":{"116":1}}],["ambiguity",{"2":{"85":2,"153":1,"155":3,"170":1}}],["amounts",{"2":{"195":1}}],["amount",{"2":{"55":1,"65":1}}],["amp",{"2":{"6":1,"9":1}}],["axes",{"2":{"146":6}}],["ax",{"2":{"13":3,"14":3,"145":2,"191":5}}],["axs",{"2":{"13":2}}],["axis`",{"2":{"157":1}}],["axislegend",{"2":{"79":1,"175":1,"179":1}}],["axis",{"2":{"6":3,"13":2,"14":1,"52":1,"55":1,"58":4,"62":1,"65":1,"81":2,"84":1,"146":2,"157":4,"175":1,"180":1,"196":1}}],["a>",{"2":{"6":2}}],["adjust",{"2":{"74":1}}],["adjacent",{"2":{"64":1,"71":1,"74":1,"76":1}}],["adaptivity",{"0":{"72":1}}],["adaptive",{"2":{"7":1,"13":3,"14":2,"72":1}}],["adapted",{"2":{"70":1,"73":1,"75":1,"145":1}}],["advance",{"2":{"63":2}}],["advised",{"2":{"6":1,"158":1}}],["administrative",{"2":{"199":1}}],["admin",{"2":{"11":1,"80":1,"180":2}}],["adm0",{"2":{"11":7,"80":4}}],["additional",{"2":{"195":1}}],["additionally",{"2":{"64":3,"88":1}}],["addition",{"2":{"58":1,"76":1}}],["adding",{"2":{"4":2,"6":4,"7":1,"76":2,"146":1,"166":1,"174":1,"176":2,"177":1}}],["added",{"2":{"6":1,"53":1,"64":6,"66":1,"76":2,"155":1,"169":2,"182":1}}],["add",{"2":{"3":2,"6":1,"7":2,"59":1,"60":1,"64":16,"66":1,"69":4,"70":3,"73":1,"74":2,"75":2,"76":9,"82":1,"105":1,"146":4,"155":1,"159":1,"174":1,"176":1,"182":10,"192":1,"194":2,"197":4}}],["average",{"2":{"57":3,"63":4,"74":1}}],["available",{"0":{"165":1},"2":{"6":3,"27":1,"63":1,"158":1,"164":3,"174":1,"175":1,"177":1,"180":1,"184":1}}],["avoid",{"2":{"5":2,"6":7,"59":1,"70":1,"73":1,"74":1,"75":1,"76":1,"146":2,"153":1,"155":3,"170":1,"177":1,"181":1,"182":1,"183":1,"191":3}}],["achieve",{"2":{"167":1}}],["across",{"2":{"151":1}}],["acos",{"2":{"53":1}}],["activate",{"2":{"175":1}}],["action",{"2":{"20":2}}],["actions",{"2":{"20":2}}],["actual",{"2":{"10":1,"59":1,"145":1,"162":1,"172":1,"176":1}}],["actually",{"2":{"1":2,"6":1,"9":1,"59":4,"74":1,"76":3,"116":1,"146":1,"185":1,"195":1}}],["access",{"2":{"192":1}}],["accessed",{"2":{"188":1}}],["acceptable",{"2":{"116":1}}],["accepts",{"2":{"82":1}}],["accepted",{"2":{"6":1,"157":1}}],["accept",{"2":{"6":1,"188":1}}],["according",{"2":{"161":1,"167":1,"168":1,"198":1}}],["accordingly",{"2":{"64":1}}],["account",{"2":{"70":1,"73":1}}],["accurary",{"2":{"74":1}}],["accuratearithmetic",{"2":{"11":2}}],["accurate",{"0":{"11":1},"2":{"11":3,"175":1}}],["accumulators",{"2":{"59":1}}],["accumulator",{"2":{"59":1}}],["accumulate",{"2":{"56":1,"63":3}}],["accumulation",{"0":{"11":1},"2":{"59":1}}],["after",{"2":{"6":8,"53":1,"64":3,"153":1,"170":1,"180":2}}],["ab",{"2":{"64":3,"70":1,"73":1,"74":5,"75":1}}],["able",{"2":{"20":1,"74":1}}],["ability",{"2":{"17":1}}],["about",{"2":{"6":1,"26":1,"50":2,"59":2,"116":1,"153":1,"157":1,"160":1}}],["above",{"2":{"4":2,"6":1,"53":1,"63":1,"64":1,"74":1,"76":1,"164":1}}],["abs",{"2":{"53":1,"56":4,"63":1,"66":2,"105":8,"122":2,"146":1,"183":1,"200":1}}],["absolutely",{"2":{"170":1}}],["absolute",{"2":{"4":2,"6":1,"55":1,"56":2}}],["abstractrange",{"2":{"146":6}}],["abstractmulticurvetrait",{"2":{"103":1,"104":1,"114":1,"115":1,"131":1,"132":1,"141":1,"142":1}}],["abstractmatrix",{"2":{"6":5,"146":13}}],["abstractpolygontrait",{"2":{"85":1}}],["abstractcurvetrait",{"2":{"53":1,"56":1,"66":1,"99":1,"102":1,"103":1,"105":1,"110":1,"114":1,"127":1,"130":1,"131":1,"137":1,"140":1,"141":1,"145":1,"180":2,"189":3}}],["abstractwkbgeomtrait",{"2":{"28":1}}],["abstractfloat",{"2":{"27":1,"53":1,"56":2,"64":1,"66":2,"69":1,"70":1,"73":1,"74":1,"75":1,"85":8}}],["abstractarrays",{"2":{"151":1}}],["abstractarray",{"2":{"6":1,"153":4,"170":2,"189":2}}],["abstract",{"2":{"6":3,"28":1,"59":3,"157":2,"159":3,"163":1,"164":5,"165":1,"180":3}}],["abstractvector",{"2":{"5":2,"6":1,"59":26,"146":8}}],["abstractgeometrytrait`",{"2":{"164":1}}],["abstractgeometrytrait",{"2":{"6":3,"28":1,"56":2,"66":1,"85":1,"104":1,"115":1,"132":1,"142":1,"151":1,"164":6,"165":2,"189":5}}],["abstractgeometry",{"2":{"3":8,"6":4,"28":1,"91":2,"94":2}}],["abstracttrait",{"2":{"1":4,"3":4,"6":8,"69":1,"71":2,"74":4,"76":2,"122":4,"148":1,"150":4,"153":1,"155":7,"158":3,"170":2}}],["abstractbarycentriccoordinatemethod",{"2":{"0":1,"5":2,"6":7,"59":18}}],["attribute",{"2":{"195":1}}],["attributed",{"2":{"194":1}}],["attributes",{"0":{"194":1},"2":{"190":1,"194":3}}],["attempt",{"2":{"157":1}}],["attempts",{"2":{"116":1}}],["attach",{"2":{"1":4,"4":2,"6":5,"150":2,"154":1}}],["atomic",{"2":{"7":1}}],["at",{"2":{"3":8,"5":2,"6":6,"9":1,"18":1,"20":1,"22":1,"50":1,"53":2,"55":1,"56":1,"58":1,"59":2,"64":4,"66":2,"74":8,"76":2,"81":1,"116":17,"122":6,"124":1,"125":1,"128":3,"129":2,"130":2,"131":1,"132":1,"135":1,"141":1,"145":1,"151":1,"153":1,"175":1,"177":1,"182":1,"184":1,"192":1,"193":2}}],["arbitrarily",{"2":{"151":1}}],["arbitrary",{"2":{"57":1,"148":1,"170":1,"191":1}}],["around",{"2":{"58":1,"59":2,"69":1,"84":1,"88":1,"146":1,"180":1,"198":1}}],["argmin",{"2":{"184":1}}],["argtypes",{"2":{"60":2,"173":1,"176":1}}],["args",{"2":{"13":2}}],["argumenterror",{"2":{"76":1,"146":1,"153":1,"155":3,"170":1}}],["argument",{"2":{"4":10,"6":10,"53":1,"56":2,"63":1,"66":1,"70":1,"73":1,"75":1,"85":2,"153":1,"155":1,"188":2,"192":1,"193":1}}],["arguments",{"2":{"1":2,"3":2,"6":5,"64":1,"97":2,"108":1,"125":1,"135":1,"172":1,"176":2,"177":1,"188":1}}],["arithmetic",{"2":{"11":1}}],["archgdal",{"2":{"49":1}}],["arc",{"2":{"6":1,"176":1}}],["array",{"2":{"4":2,"6":2,"56":1,"66":1,"146":5,"153":5,"170":2,"181":1,"184":1}}],["arrays",{"2":{"1":2,"6":2,"48":1,"146":1,"150":2,"170":2}}],["aren",{"2":{"4":6,"6":5,"69":1,"71":1,"74":2,"76":4,"88":3,"165":2,"169":2}}],["are",{"2":{"1":2,"3":8,"4":36,"5":4,"6":51,"9":2,"20":2,"21":1,"22":2,"23":1,"48":3,"50":1,"52":1,"53":8,"55":1,"56":2,"57":6,"59":11,"62":1,"63":3,"64":31,"66":6,"69":3,"70":3,"71":15,"73":2,"74":16,"75":5,"76":9,"81":3,"84":1,"85":1,"87":3,"88":26,"90":1,"97":7,"99":1,"100":3,"101":3,"102":1,"104":1,"107":1,"108":5,"110":1,"111":1,"112":1,"114":1,"115":1,"116":12,"122":7,"125":5,"127":1,"129":2,"134":1,"135":5,"137":1,"138":3,"139":3,"140":1,"142":1,"145":1,"146":14,"147":1,"150":2,"151":1,"153":6,"155":2,"156":1,"157":4,"158":1,"160":1,"161":1,"162":1,"164":1,"165":3,"166":1,"167":1,"168":1,"169":2,"175":1,"176":1,"177":1,"180":4,"182":1,"184":2,"186":1,"187":2,"188":1,"191":1,"194":2,"195":2,"196":1,"197":3,"198":6,"199":1,"200":1}}],["area2",{"2":{"63":4}}],["area1",{"2":{"63":4}}],["areas",{"2":{"4":4,"6":2,"56":3,"157":1,"183":2}}],["area",{"0":{"54":2,"55":2},"1":{"55":2,"56":2},"2":{"0":5,"4":28,"6":26,"11":6,"27":1,"54":2,"55":9,"56":61,"61":1,"62":3,"63":49,"65":2,"66":44,"75":2,"76":1,"122":1,"148":1,"157":2,"165":2,"169":2,"170":1,"180":2,"183":4,"192":1}}],["asked",{"2":{"153":1}}],["ask",{"2":{"49":1}}],["aspect",{"2":{"13":1,"14":1,"52":1,"55":1,"58":2,"62":1,"65":1,"84":2,"146":2,"175":1,"180":1}}],["assign",{"2":{"190":1}}],["assigned",{"2":{"64":1,"146":7,"198":1}}],["assets",{"2":{"192":1}}],["assetpath",{"2":{"192":1}}],["assemble",{"2":{"162":1}}],["assert",{"2":{"59":23,"63":1,"64":1,"69":1,"71":1,"74":1,"177":1,"189":1}}],["assume",{"2":{"122":2,"153":3,"161":1,"169":1,"170":1}}],["assumed",{"2":{"56":1,"88":1,"116":1}}],["assumes",{"2":{"6":1,"64":1,"85":1,"176":1,"184":1}}],["associativity",{"2":{"19":1}}],["associated",{"0":{"1":1},"2":{"57":2}}],["as",{"2":{"1":16,"3":36,"4":12,"5":2,"6":82,"7":1,"11":2,"13":3,"14":3,"15":3,"17":2,"18":2,"20":1,"21":1,"23":1,"48":1,"49":2,"50":1,"52":2,"53":4,"55":2,"56":3,"57":4,"58":1,"59":4,"60":3,"62":2,"63":1,"64":15,"65":2,"66":5,"68":3,"69":5,"70":8,"71":2,"73":7,"74":8,"75":7,"76":5,"77":1,"79":2,"80":2,"81":3,"82":3,"84":3,"85":1,"87":2,"88":2,"90":2,"91":2,"93":2,"94":2,"96":3,"97":3,"105":2,"107":2,"108":3,"116":7,"118":2,"119":2,"121":2,"122":2,"124":2,"125":3,"127":1,"134":2,"135":3,"145":8,"146":3,"148":3,"150":4,"151":2,"152":2,"153":10,"155":2,"157":3,"158":2,"159":2,"161":2,"162":2,"164":1,"165":1,"166":1,"168":2,"170":4,"172":3,"174":2,"175":2,"176":3,"178":2,"179":2,"180":7,"182":2,"185":3,"188":2,"189":2,"190":3,"191":2,"192":1,"193":1,"195":3,"196":3,"197":2,"198":3,"199":2}}],["alone",{"2":{"153":1}}],["along",{"2":{"4":8,"6":5,"64":3,"66":2,"74":4,"88":4,"116":1}}],["although",{"2":{"138":1,"139":1}}],["alternate",{"2":{"64":1}}],["alternative",{"2":{"64":1}}],["already",{"2":{"88":1,"116":2,"153":1,"182":1}}],["almost",{"2":{"74":1}}],["alg=nothing",{"2":{"180":1}}],["alg`",{"2":{"180":1}}],["alg",{"2":{"6":4,"28":2,"180":21,"181":3,"182":8,"183":3,"184":7,"188":9}}],["algorithms",{"2":{"6":3,"77":1,"81":1,"161":1,"177":1,"178":1,"180":4,"182":1,"184":1}}],["algorithm",{"0":{"181":1,"182":1,"183":1},"2":{"6":12,"58":1,"64":2,"66":1,"69":3,"70":1,"73":1,"75":1,"77":1,"82":4,"116":1,"178":1,"180":8,"181":1,"182":3,"183":1,"188":4}}],["allocating",{"2":{"82":1}}],["allocations",{"2":{"5":2,"6":1,"59":1}}],["allocate",{"2":{"82":1}}],["allow=",{"2":{"116":1}}],["allows",{"2":{"11":1,"18":1,"25":1,"49":1,"50":1,"97":2,"99":3,"100":3,"101":3,"102":1,"108":2,"110":3,"111":3,"112":2,"113":1,"125":1,"128":1,"129":1,"130":1,"135":3,"137":3,"138":3,"139":3,"140":1,"148":1,"178":1,"192":1,"194":1,"197":1}}],["allowed",{"2":{"6":1,"97":3,"108":3,"116":6,"125":5,"127":1,"128":2,"135":3,"180":1}}],["allow",{"2":{"1":2,"6":1,"49":1,"74":1,"97":7,"105":3,"108":7,"116":73,"125":10,"135":10,"185":1}}],["all",{"2":{"1":6,"3":4,"4":6,"6":14,"9":1,"11":7,"21":1,"23":1,"27":5,"48":1,"53":5,"56":3,"59":1,"64":13,"66":3,"70":1,"71":3,"74":3,"76":5,"77":1,"80":3,"82":1,"84":1,"88":2,"90":1,"100":3,"101":3,"104":1,"114":1,"115":1,"116":7,"122":4,"134":1,"142":1,"145":1,"146":3,"147":1,"150":2,"151":2,"152":1,"153":7,"155":1,"157":1,"162":1,"164":1,"166":1,"167":1,"170":1,"171":1,"180":1,"185":2,"186":1,"187":1,"191":1,"193":1,"195":1,"197":1}}],["always",{"2":{"1":14,"4":12,"6":10,"21":1,"23":1,"55":1,"56":4,"66":2,"81":1,"84":1,"85":1,"88":1,"150":4,"153":3,"170":1,"172":4,"197":1}}],["also",{"2":{"1":4,"6":11,"49":1,"53":1,"56":2,"63":2,"64":3,"66":1,"70":1,"73":1,"74":2,"75":1,"77":1,"81":1,"82":1,"84":1,"85":2,"88":3,"122":1,"146":1,"150":2,"151":1,"153":1,"158":1,"162":1,"165":3,"169":2,"173":1,"174":1,"175":1,"176":1,"178":1,"185":1,"191":2,"194":1}}],["a",{"0":{"49":1,"192":1,"194":1},"2":{"1":26,"3":10,"4":158,"5":2,"6":209,"7":3,"9":1,"11":1,"15":2,"17":1,"18":6,"20":3,"21":2,"23":2,"25":2,"26":2,"28":4,"31":3,"32":3,"33":3,"34":3,"36":2,"37":2,"38":2,"39":2,"40":2,"41":2,"42":2,"43":2,"44":2,"45":2,"48":3,"49":4,"50":2,"52":3,"53":22,"55":11,"56":20,"57":13,"58":4,"59":11,"60":2,"62":5,"63":8,"64":281,"65":2,"66":17,"68":3,"69":4,"70":39,"71":30,"72":3,"73":38,"74":91,"75":36,"76":45,"77":3,"79":3,"80":2,"81":1,"82":4,"84":15,"85":27,"87":2,"88":54,"90":2,"93":2,"96":1,"97":3,"99":5,"100":3,"101":2,"103":2,"104":2,"105":1,"107":1,"108":3,"110":4,"111":3,"112":1,"114":2,"115":2,"116":52,"118":2,"121":5,"122":27,"124":2,"125":4,"127":4,"128":2,"129":2,"130":1,"131":2,"132":2,"134":1,"135":3,"137":5,"138":2,"139":2,"141":2,"142":2,"144":1,"145":4,"146":79,"148":4,"150":8,"151":4,"153":27,"155":5,"157":11,"158":6,"159":6,"160":6,"161":2,"162":2,"163":5,"164":7,"165":9,"166":2,"167":8,"169":6,"170":6,"171":3,"172":8,"173":3,"174":5,"175":4,"176":8,"177":10,"179":3,"180":5,"183":3,"184":1,"185":2,"186":1,"188":12,"189":2,"190":1,"191":21,"192":12,"193":5,"194":5,"195":11,"196":1,"197":5,"198":8,"199":3,"200":3}}],["annotation",{"2":{"159":1}}],["annotated",{"2":{"22":1}}],["answers",{"2":{"167":1}}],["answer",{"2":{"6":3,"70":1,"73":1,"74":1,"75":1}}],["angels",{"2":{"53":1}}],["angle",{"2":{"53":35,"145":1}}],["angles",{"0":{"51":1,"52":1},"1":{"52":1,"53":1},"2":{"0":2,"4":19,"6":10,"27":1,"51":1,"52":4,"53":42}}],["angular",{"2":{"6":1,"157":1}}],["another",{"2":{"3":2,"6":1,"64":2,"74":1,"82":1,"84":1,"90":1,"93":1,"96":1,"99":1,"101":1,"102":1,"107":1,"110":1,"111":1,"112":1,"113":1,"116":1,"118":1,"121":1,"122":1,"124":1,"127":1,"128":1,"129":1,"130":1,"134":1,"137":1,"138":1,"139":1,"140":1,"146":1,"172":1}}],["anonymous",{"2":{"1":2,"6":1,"185":1}}],["an",{"2":{"1":6,"4":22,"5":2,"6":30,"9":1,"13":1,"14":1,"18":1,"20":1,"28":1,"49":2,"52":1,"53":4,"55":1,"56":2,"58":1,"59":3,"60":2,"62":1,"64":15,"65":2,"66":2,"68":1,"69":1,"70":2,"71":5,"73":2,"74":9,"75":2,"76":2,"82":3,"84":2,"85":5,"87":1,"88":1,"90":1,"93":1,"96":2,"99":2,"107":1,"116":13,"118":1,"121":1,"122":1,"124":1,"134":1,"137":2,"138":1,"139":1,"146":3,"147":1,"150":2,"151":1,"152":1,"153":5,"155":1,"157":1,"162":1,"166":1,"170":2,"172":1,"176":1,"185":2,"188":3,"189":1,"191":2,"192":2,"194":1,"196":1,"198":1}}],["anything",{"2":{"58":1,"116":1}}],["any",{"2":{"1":6,"3":2,"4":4,"6":19,"18":1,"21":1,"23":1,"25":1,"50":1,"57":2,"63":1,"64":7,"66":1,"69":1,"71":1,"74":4,"76":1,"85":2,"98":2,"99":1,"102":1,"107":1,"109":2,"110":1,"111":2,"112":1,"113":2,"116":8,"122":2,"126":2,"136":2,"140":1,"146":2,"148":2,"150":2,"153":2,"155":1,"162":1,"163":1,"164":4,"165":4,"169":4,"170":2,"172":2,"174":1,"176":1,"177":1,"182":1,"189":1,"197":3,"198":2}}],["and",{"0":{"1":1,"20":1,"48":1,"50":1,"54":1,"71":1,"74":1,"76":1,"83":1,"191":1,"192":1,"194":1},"1":{"55":1,"56":1,"84":1,"85":1},"2":{"0":2,"1":16,"3":22,"4":36,"6":93,"7":1,"9":2,"17":4,"18":4,"20":2,"21":2,"22":5,"23":2,"25":2,"26":1,"27":2,"28":2,"29":1,"48":1,"49":2,"50":3,"53":13,"55":1,"56":7,"57":2,"58":2,"59":20,"60":1,"61":2,"62":1,"63":29,"64":71,"65":2,"66":18,"68":1,"69":4,"70":4,"71":16,"73":4,"74":38,"75":6,"76":15,"81":1,"82":2,"84":2,"85":13,"87":2,"88":13,"90":3,"91":2,"93":2,"94":2,"96":2,"97":3,"100":3,"101":4,"102":1,"105":1,"108":3,"111":3,"112":1,"113":1,"116":36,"118":1,"121":2,"122":3,"125":2,"129":2,"130":2,"134":3,"135":4,"137":2,"138":3,"139":3,"140":1,"145":2,"146":16,"148":6,"150":10,"151":2,"152":3,"153":16,"155":2,"156":1,"157":14,"158":1,"159":3,"160":1,"161":2,"162":1,"163":1,"164":5,"165":2,"166":2,"167":1,"170":10,"171":2,"172":2,"175":1,"176":5,"177":4,"178":2,"179":1,"180":8,"182":8,"183":1,"184":1,"185":1,"188":4,"190":3,"191":9,"192":7,"193":2,"195":5,"197":2,"198":4,"199":2}}],["apart",{"2":{"169":1}}],["april",{"0":{"7":1}}],["appears",{"2":{"161":1}}],["append",{"2":{"53":1,"64":5,"70":1,"71":2,"74":2,"75":1,"76":5,"169":2}}],["approximately",{"2":{"64":1,"175":1}}],["approach",{"2":{"19":1}}],["appropriately",{"2":{"198":1}}],["appropriate",{"2":{"6":1,"188":2}}],["applies",{"2":{"151":2}}],["applied",{"2":{"6":3,"20":1,"155":2,"163":2,"164":3,"165":1}}],["application",{"2":{"1":2,"6":3,"150":2,"162":1,"164":4,"165":1,"169":2,"170":1,"174":1,"177":1}}],["apply`",{"2":{"153":1}}],["applys",{"2":{"56":1,"66":1}}],["applyreduce",{"0":{"19":1,"170":1},"2":{"0":2,"1":1,"6":1,"17":1,"19":2,"25":1,"53":1,"56":1,"63":2,"66":1,"85":2,"148":1,"150":1,"159":1,"170":42}}],["apply",{"0":{"1":1,"18":1,"25":1,"48":1,"148":1,"151":1},"1":{"19":1,"149":1,"150":1,"151":1,"152":1,"153":1},"2":{"0":2,"1":7,"6":7,"17":1,"18":5,"20":1,"25":3,"28":2,"48":1,"50":1,"148":5,"150":5,"151":4,"152":1,"153":55,"154":1,"155":3,"157":1,"159":1,"164":5,"165":1,"166":1,"170":5,"171":3,"172":1,"176":1,"177":1,"180":2,"185":3,"186":2}}],["apis",{"2":{"17":1}}],["api",{"0":{"0":1,"59":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"0":1,"6":3,"50":1,"59":1,"176":1,"180":1,"188":1}}],["snapped",{"2":{"146":1}}],["s3",{"2":{"64":3}}],["scratch",{"2":{"195":1}}],["sciences",{"2":{"192":1}}],["scalefactor",{"2":{"176":3}}],["scattered",{"2":{"198":1}}],["scatter",{"2":{"62":1,"84":2,"87":2,"90":2,"93":1,"96":1,"107":2,"121":2,"134":2,"198":1}}],["schema",{"2":{"153":5,"170":1}}],["scheme",{"2":{"63":1}}],["scenario",{"2":{"116":2}}],["scene",{"2":{"14":1}}],["skipmissing",{"2":{"146":1}}],["skipped",{"2":{"146":1}}],["skip",{"2":{"56":1,"116":14,"146":1,"153":1,"184":4}}],["skygering",{"2":{"7":1}}],["square",{"2":{"85":1,"181":1,"182":1}}],["squared",{"2":{"6":2,"66":2,"85":12,"181":2,"182":7}}],["sqrt",{"2":{"53":2,"63":1,"85":3}}],["sgn",{"2":{"53":5}}],["smallest",{"2":{"53":2,"74":1,"77":1}}],["sᵢ₋₁",{"2":{"59":25}}],["sᵢ₊₁",{"2":{"6":2,"59":41}}],["sᵢ",{"2":{"6":4,"59":46}}],["src",{"2":{"6":2,"27":1}}],["syntax",{"2":{"194":1}}],["sym10100477",{"2":{"116":1}}],["symdifference",{"2":{"34":1,"147":1}}],["symmetric",{"0":{"34":1},"2":{"34":1}}],["symbol=",{"2":{"105":1}}],["symbols",{"2":{"27":2}}],["symbol",{"2":{"6":1,"188":2}}],["system",{"0":{"192":1,"193":1},"2":{"1":4,"172":2,"190":2,"192":1}}],["switches",{"2":{"74":1,"76":1}}],["switch",{"2":{"64":1,"76":1,"159":1}}],["switching",{"2":{"6":1,"66":1}}],["swap",{"2":{"6":1,"76":1,"85":2,"171":1}}],["swapped",{"2":{"3":2,"6":1,"91":1,"94":1,"97":1,"105":1,"119":1,"122":1}}],["swapping",{"2":{"1":2,"6":1,"150":2,"153":1}}],["s2",{"2":{"6":4,"59":6,"64":3}}],["s1",{"2":{"6":3,"59":6,"64":3}}],["saving",{"0":{"195":1}}],["saved",{"2":{"88":1}}],["save",{"2":{"53":1,"190":1,"195":3}}],["samples",{"2":{"13":1}}],["sample",{"2":{"13":1}}],["same",{"2":{"3":4,"4":24,"6":23,"18":1,"53":3,"56":1,"64":15,"66":1,"69":1,"70":3,"73":1,"74":1,"75":1,"76":1,"81":1,"84":1,"87":2,"88":30,"116":2,"121":1,"122":8,"151":1,"153":5,"155":1,"160":1,"165":2,"168":1,"169":2,"175":1,"191":1,"192":1,"195":1}}],["says",{"2":{"81":1}}],["say",{"2":{"6":1,"59":1,"176":1}}],["slow",{"2":{"199":1}}],["slower",{"2":{"6":1,"188":2}}],["slope2",{"2":{"145":2}}],["slope1",{"2":{"145":2}}],["slidergrid",{"2":{"14":1}}],["sliders",{"2":{"14":3}}],["slightly",{"2":{"4":4,"6":2,"56":2}}],["suite",{"2":{"176":5,"180":13}}],["suggestion",{"2":{"173":1}}],["success",{"2":{"157":1}}],["such",{"2":{"4":2,"6":1,"55":1,"68":1,"77":1,"151":1,"166":1}}],["sun",{"2":{"116":1}}],["surrounds",{"2":{"116":1}}],["sure",{"2":{"9":1,"53":1,"64":2,"85":1,"122":1,"184":1}}],["suppose",{"2":{"199":1,"200":1}}],["supports",{"2":{"58":1,"59":1,"77":1,"153":3,"195":1,"200":2}}],["supported",{"2":{"49":1,"195":1}}],["support",{"2":{"28":1,"60":1,"174":1,"200":1}}],["supertype",{"2":{"6":1,"59":1}}],["sukumar",{"2":{"6":1,"59":1}}],["sum=1",{"2":{"59":1}}],["summary>",{"2":{"6":4}}],["sum",{"2":{"4":4,"6":3,"11":6,"55":1,"56":2,"57":2,"59":8,"66":1,"85":2,"145":5,"184":1,"189":4}}],["sublevel",{"2":{"199":1}}],["subsequent",{"2":{"191":1}}],["substituted",{"2":{"1":2,"6":1,"150":2,"153":1}}],["subgeom1",{"2":{"155":2}}],["subgeom",{"2":{"155":3}}],["subject",{"2":{"64":1}}],["subtype",{"2":{"153":1}}],["subtypes",{"2":{"6":2,"59":2}}],["subtracted",{"2":{"145":1}}],["subtitle",{"2":{"13":1,"58":2,"176":1,"180":2}}],["sub",{"2":{"4":12,"6":7,"53":1,"56":3,"66":1,"71":6,"74":3,"76":4,"85":2,"103":2,"104":2,"114":2,"115":2,"131":2,"132":2,"141":2,"142":2,"153":3,"167":4,"168":2,"169":4}}],["spliced",{"2":{"154":1}}],["split",{"2":{"69":1}}],["sp",{"2":{"116":2}}],["specialized",{"2":{"21":1,"23":1,"82":1,"153":1}}],["specification",{"2":{"161":1,"164":1,"167":1,"168":1}}],["specifically",{"2":{"6":2,"59":3,"178":1,"197":1}}],["specific",{"2":{"64":1,"97":1,"108":1,"125":1,"135":1,"153":1,"155":3,"157":1,"170":1}}],["specified",{"2":{"3":2,"6":2,"64":1,"71":2,"74":2,"76":2,"122":1,"151":1,"180":1}}],["specify",{"2":{"6":1,"155":1,"192":1,"193":1,"197":1}}],["spatial",{"0":{"197":1},"1":{"198":1,"199":1,"200":1},"2":{"197":6,"198":3,"200":1}}],["spawn",{"2":{"153":3,"170":3}}],["span>",{"2":{"6":2}}],["span",{"2":{"6":2,"198":1}}],["space",{"2":{"6":5,"21":1,"23":1,"53":1,"55":1,"116":1,"157":5,"176":1,"177":1}}],["sphere",{"2":{"6":1,"157":3}}],["sphericalgeodesics",{"2":{"157":1}}],["spherical",{"2":{"0":1,"6":4,"157":7}}],["series",{"2":{"191":1}}],["serve",{"2":{"6":1,"59":1}}],["searchsortedfirst",{"2":{"182":1}}],["seg2",{"2":{"145":2}}],["seg1",{"2":{"145":3}}],["seg",{"2":{"116":23,"122":9}}],["segmentation",{"2":{"175":1}}],["segments",{"2":{"27":1,"49":1,"52":2,"53":1,"62":1,"63":2,"64":3,"66":1,"74":6,"116":18,"176":1,"177":3}}],["segmentization",{"2":{"6":1,"28":1,"157":1,"174":1}}],["segmentizing",{"2":{"6":3,"175":1,"176":2,"177":1}}],["segmentized",{"2":{"175":1}}],["segmentizes",{"2":{"174":1}}],["segmentizemethod",{"2":{"6":1,"176":3,"177":2}}],["segmentize",{"0":{"28":1,"174":1},"1":{"175":1,"176":1,"177":1},"2":{"0":1,"6":4,"27":1,"28":9,"60":1,"148":1,"157":1,"174":1,"175":5,"176":11,"177":13,"196":1}}],["segment",{"2":{"4":8,"6":7,"53":1,"63":5,"64":6,"66":3,"68":1,"74":17,"85":2,"105":3,"116":43,"122":3,"145":2,"174":1,"176":2,"177":1}}],["seperate",{"2":{"74":1}}],["separates",{"2":{"116":1}}],["separate",{"2":{"64":1,"146":1,"153":1,"159":1,"195":1,"198":1}}],["separately",{"2":{"59":1,"146":1}}],["sense",{"2":{"56":1,"85":1}}],["several",{"2":{"20":2,"56":1,"160":1,"169":1}}],["section",{"2":{"22":1,"116":3,"121":1}}],["sections",{"2":{"10":1,"22":1}}],["seconds=1",{"2":{"176":3,"180":8}}],["secondisleft",{"2":{"146":4}}],["secondisstraight",{"2":{"146":7}}],["secondary",{"2":{"3":6,"6":3,"91":1,"97":1,"135":1}}],["second",{"2":{"3":16,"6":9,"64":1,"74":4,"88":1,"90":2,"91":1,"94":2,"96":1,"97":1,"100":1,"101":1,"102":1,"108":2,"116":2,"125":1,"134":1,"135":1,"138":1,"139":1,"140":2,"182":1,"193":1,"197":1}}],["self",{"2":{"9":2}}],["selected",{"2":{"146":1}}],["selectednode",{"2":{"146":3}}],["selection",{"2":{"14":1}}],["select",{"2":{"6":1,"158":1}}],["semimajor",{"2":{"6":2,"157":3}}],["seem",{"2":{"21":1,"23":1}}],["see",{"2":{"6":4,"7":1,"25":1,"62":1,"82":1,"85":1,"87":1,"90":1,"96":1,"107":1,"116":5,"118":1,"121":1,"124":1,"134":1,"146":2,"161":1,"162":1,"164":1,"165":3,"168":1,"169":2,"175":2,"182":1,"198":2}}],["setup=",{"2":{"97":1,"108":1,"125":1,"135":1}}],["sets",{"2":{"64":1,"81":1}}],["setting",{"2":{"49":1}}],["setdiff",{"2":{"27":1}}],["set",{"0":{"30":1,"49":1},"1":{"31":1,"32":1,"33":1,"34":1},"2":{"3":4,"4":14,"6":19,"49":1,"53":1,"57":2,"59":8,"64":3,"70":2,"73":2,"74":7,"75":2,"77":2,"87":2,"88":10,"97":1,"105":1,"108":1,"116":2,"122":1,"125":1,"135":1,"145":1,"146":1,"153":5,"165":2,"169":2,"182":2,"191":1,"195":1,"198":3}}],["sve",{"2":{"1":2,"6":1,"185":1}}],["svector",{"2":{"1":28,"6":14,"64":5,"70":1,"74":2,"76":6,"116":1,"146":1,"185":13,"191":6,"193":4}}],["solution",{"2":{"116":1}}],["sort",{"2":{"64":4,"69":2,"74":2,"75":2,"116":1,"122":2,"146":1,"182":1}}],["sorted",{"2":{"20":1,"64":1,"182":7,"197":1}}],["south",{"2":{"6":1,"66":7,"157":1}}],["source",{"2":{"1":20,"3":38,"4":44,"5":6,"6":99,"22":4,"105":2,"150":4,"164":2,"165":4,"172":3,"192":13,"193":1}}],["someone",{"2":{"82":1,"188":1}}],["something",{"0":{"72":1},"2":{"10":1}}],["some",{"2":{"3":2,"6":3,"9":1,"17":1,"59":4,"88":1,"116":3,"122":1,"146":1,"147":1,"148":1,"151":2,"153":2,"163":1,"164":3,"165":1,"170":1,"184":1,"187":2,"190":2,"197":1,"200":1}}],["so",{"2":{"1":2,"4":8,"6":10,"9":1,"17":1,"19":1,"21":1,"23":1,"27":1,"58":1,"59":1,"64":1,"65":1,"74":1,"75":2,"76":2,"84":1,"85":1,"87":1,"88":4,"90":1,"107":1,"116":2,"118":1,"134":1,"146":3,"153":8,"155":1,"174":1,"175":1,"176":3,"177":1,"184":1,"185":1,"188":2,"192":1,"193":1}}],["styles",{"2":{"153":1}}],["style",{"2":{"153":7}}],["step",{"2":{"64":7,"70":1,"71":3,"73":1,"74":3,"75":1,"76":3,"146":6,"189":1}}],["storing",{"2":{"195":1}}],["stored",{"2":{"64":2,"198":1}}],["stores",{"2":{"64":1}}],["store",{"2":{"59":1,"195":1}}],["stopping",{"2":{"182":2}}],["stops",{"2":{"151":1}}],["stop",{"2":{"18":2,"105":3,"116":4,"122":3}}],["stay",{"2":{"76":1}}],["stackoverflow",{"2":{"74":1}}],["stack",{"2":{"69":1}}],["states",{"2":{"180":1}}],["state",{"2":{"75":1,"199":9}}],["status",{"2":{"64":31,"71":4,"74":5,"76":4,"146":1}}],["static",{"2":{"159":1}}],["staticarray",{"2":{"59":1}}],["staticarrays",{"2":{"27":1,"64":5,"70":1,"74":2,"76":6,"116":1,"146":1,"185":2}}],["staticarraysco",{"2":{"1":2,"6":1,"185":1}}],["staticarrayscore",{"2":{"1":20,"6":10,"59":1,"185":10,"191":6,"193":4}}],["statica",{"2":{"1":2,"6":1,"185":1}}],["statistics",{"2":{"13":2,"27":1}}],["stability",{"2":{"26":1,"49":1}}],["stable",{"2":{"13":1,"50":1,"177":1}}],["stage",{"2":{"7":1}}],["started",{"2":{"64":1}}],["starting",{"2":{"63":2,"64":1,"66":1,"74":1,"169":4}}],["startvalue",{"2":{"14":4}}],["start",{"2":{"6":1,"18":1,"53":7,"59":1,"64":76,"66":17,"71":4,"74":4,"76":5,"88":1,"105":4,"116":44,"122":3,"137":1,"146":2,"160":1,"182":16,"191":1}}],["standardized",{"2":{"116":1}}],["standards",{"2":{"116":1}}],["standard",{"2":{"6":2,"82":1,"157":1}}],["straightline",{"2":{"146":3}}],["straight",{"2":{"146":6,"170":1}}],["strait",{"2":{"146":1}}],["structs",{"2":{"20":1,"164":1}}],["structures",{"2":{"148":1}}],["structure",{"2":{"6":2,"148":1,"155":1,"171":1}}],["struct",{"2":{"6":5,"59":2,"64":2,"82":1,"157":3,"158":3,"159":6,"162":1,"169":2,"176":2,"181":1,"182":1,"183":1,"188":4}}],["strings",{"2":{"6":1,"63":1,"74":1}}],["string",{"2":{"1":4,"14":1,"62":1,"63":1,"172":2}}],["still",{"2":{"0":1,"56":1,"63":1,"64":3,"96":1,"182":1}}],["shp",{"2":{"195":1}}],["ships",{"2":{"192":1}}],["shifting",{"2":{"193":1}}],["shift",{"2":{"191":3}}],["shewchuck",{"2":{"7":1}}],["short",{"2":{"153":1}}],["shorthand",{"2":{"82":1}}],["show",{"2":{"9":1,"11":1,"13":1,"14":1,"58":1,"192":1,"195":1,"197":2}}],["shoelace",{"2":{"4":2,"6":1,"56":2,"66":1}}],["shouldn",{"2":{"74":1}}],["should",{"2":{"1":2,"4":2,"6":15,"17":1,"18":1,"20":2,"21":1,"23":1,"28":1,"53":3,"56":1,"63":1,"64":3,"65":1,"88":1,"116":4,"146":2,"150":2,"153":2,"155":1,"157":1,"159":1,"161":1,"164":6,"165":2,"177":1,"180":2}}],["sharing",{"2":{"107":1}}],["shares",{"2":{"74":1}}],["share",{"2":{"4":14,"6":8,"87":2,"88":8,"111":2,"112":1,"113":1,"122":1,"130":1}}],["shared",{"0":{"184":1},"2":{"3":2,"6":1,"64":2,"74":2,"122":3}}],["shapes",{"2":{"85":1,"195":7}}],["shape",{"2":{"62":1,"71":1,"74":1,"87":1,"157":1,"168":1,"191":1}}],["shaped",{"2":{"58":1}}],["shapefiles",{"2":{"195":1}}],["shapefile",{"2":{"25":1,"195":4}}],["shallower",{"2":{"1":2,"6":1,"150":2,"153":1}}],["sites",{"2":{"199":1}}],["sides",{"2":{"64":3,"161":1}}],["side",{"2":{"53":4,"64":26}}],["signals",{"2":{"152":1}}],["sign",{"2":{"13":2,"14":2,"53":7,"56":2,"145":3}}],["signed",{"0":{"54":1,"55":1,"83":1,"84":1},"1":{"55":1,"56":1,"84":1,"85":1},"2":{"0":4,"4":28,"6":18,"11":3,"54":1,"55":5,"56":23,"66":3,"83":1,"84":7,"85":19}}],["six",{"2":{"6":1,"180":1}}],["size=",{"2":{"192":1}}],["sizehint",{"2":{"64":2,"71":1,"177":1}}],["size",{"2":{"6":4,"13":2,"14":5,"58":1,"76":1,"146":2,"153":2,"170":2,"180":1}}],["sin",{"2":{"191":3,"192":1,"193":2}}],["singed",{"2":{"85":1}}],["singular",{"2":{"74":1}}],["singlepoly",{"2":{"180":6}}],["single",{"2":{"4":12,"6":10,"49":1,"53":2,"56":1,"66":1,"88":5,"121":2,"146":2,"165":2,"167":1,"169":2,"170":1,"191":3,"195":1}}],["since",{"2":{"1":2,"6":2,"22":1,"53":1,"56":1,"63":1,"66":2,"75":1,"85":1,"88":1,"116":1,"122":2,"129":1,"153":1,"159":1,"172":1,"188":2,"199":1}}],["simulation",{"2":{"49":1}}],["simultaneously",{"2":{"20":1}}],["simply",{"2":{"7":1,"55":1,"60":1,"64":1,"74":1,"76":1,"91":1,"94":1,"119":1,"146":1,"163":1,"172":1,"173":1,"176":1,"191":1,"194":1}}],["simpler",{"2":{"6":1,"146":1}}],["simple",{"0":{"29":1,"79":1,"198":1},"1":{"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1},"2":{"6":3,"29":1,"59":1,"82":1,"148":3,"157":1,"159":1,"171":1,"172":1,"179":2,"180":2}}],["simplifier",{"2":{"180":4}}],["simplified",{"2":{"49":1,"179":1}}],["simplifies",{"2":{"6":3,"181":1,"182":1,"183":1}}],["simplification",{"0":{"178":1},"1":{"179":1,"180":1},"2":{"6":2,"178":2,"180":3}}],["simplifying",{"2":{"178":1}}],["simplify",{"0":{"181":1,"182":1,"183":1},"2":{"0":1,"6":15,"9":1,"27":1,"64":1,"148":1,"179":1,"180":41,"181":1,"182":2,"183":1}}],["simplifyalgs",{"2":{"184":1}}],["simplifyalg",{"2":{"0":1,"6":8,"180":5,"181":2,"182":2,"183":2}}],["similarly",{"2":{"148":1}}],["similar",{"2":{"1":2,"6":4,"18":1,"21":1,"23":1,"25":1,"60":1,"77":1,"82":1,"146":2,"150":2,"153":1,"176":2,"177":1,"186":1}}],["s",{"0":{"26":1},"2":{"0":1,"3":2,"6":11,"7":1,"9":1,"18":1,"19":1,"25":1,"53":1,"55":1,"56":4,"57":1,"58":2,"59":5,"62":3,"63":3,"64":3,"66":1,"68":1,"71":1,"74":2,"76":3,"81":1,"85":1,"88":1,"93":2,"110":3,"111":4,"112":2,"116":9,"122":1,"124":1,"125":1,"130":1,"146":5,"148":2,"153":2,"155":4,"158":2,"159":2,"162":1,"165":4,"167":1,"169":3,"170":1,"175":4,"176":1,"178":1,"180":2,"184":4,"188":6,"191":6,"192":4,"193":4,"194":2,"195":5,"200":2}}],["fn",{"2":{"195":8}}],["f``",{"2":{"157":1}}],["fc",{"2":{"153":4,"155":13,"170":5,"180":3,"189":14}}],["fj",{"2":{"146":2}}],["f2",{"2":{"64":2}}],["f1",{"2":{"64":2}}],["f64",{"2":{"13":2,"14":2}}],["few",{"2":{"161":1}}],["fetched",{"2":{"146":1}}],["fetch",{"2":{"28":2,"153":1,"170":1}}],["feb",{"0":{"8":1},"1":{"9":1,"10":1}}],["featurecollection",{"2":{"6":2,"11":1,"18":1,"146":4,"153":6,"155":1,"192":2}}],["featurecollectiontrait",{"2":{"1":2,"6":2,"150":2,"151":1,"153":3,"155":9,"170":2,"189":5}}],["features",{"0":{"98":1,"109":1,"126":1,"136":1},"2":{"1":2,"6":3,"11":1,"48":1,"82":1,"146":3,"150":2,"152":1,"153":11,"155":2,"170":6,"192":1}}],["featuretrait",{"2":{"1":4,"6":3,"98":4,"105":2,"109":4,"126":4,"136":4,"150":4,"151":3,"153":3,"155":9,"170":3,"189":5}}],["feature",{"2":{"1":12,"4":2,"6":10,"18":2,"48":1,"56":1,"66":1,"146":2,"148":1,"150":12,"152":1,"153":22,"155":22,"170":6,"180":2,"189":2,"195":1}}],["fra",{"2":{"199":2}}],["frame",{"2":{"194":1}}],["framework",{"2":{"148":4,"170":2}}],["fracs",{"2":{"64":20,"69":1}}],["frac",{"2":{"59":1,"64":2,"74":17,"180":2}}],["fractional",{"2":{"64":1,"74":3}}],["fractions",{"2":{"64":1,"74":4}}],["fraction",{"2":{"6":4,"74":2,"85":1,"180":1}}],["front",{"2":{"53":1}}],["from",{"2":{"1":6,"3":8,"4":32,"6":31,"7":1,"11":1,"20":1,"22":1,"27":2,"48":1,"56":2,"58":1,"59":4,"60":1,"63":1,"64":6,"66":11,"69":1,"70":1,"71":3,"73":1,"74":11,"75":1,"76":6,"82":1,"85":25,"108":2,"110":5,"111":4,"112":2,"113":1,"114":2,"116":6,"122":2,"145":2,"146":7,"153":1,"155":3,"157":1,"159":1,"169":1,"172":4,"174":1,"180":1,"181":1,"182":3,"183":1,"189":1,"190":1,"192":5,"195":1,"197":1,"198":1,"200":1}}],["footprint",{"2":{"193":1}}],["foldable",{"2":{"153":2,"170":1}}],["follows",{"2":{"64":2,"97":1,"108":1,"125":1,"135":1,"146":1}}],["followed",{"2":{"22":1}}],["following",{"2":{"6":1,"59":1,"68":1,"155":1,"161":1,"168":1,"180":1,"197":1}}],["focusing",{"2":{"21":1,"23":1}}],["foundational",{"2":{"17":1}}],["found",{"2":{"6":8,"22":1,"66":1,"69":1,"70":2,"73":2,"74":1,"75":2,"88":1,"146":5,"151":3,"153":2,"155":4,"170":1,"177":1}}],["forward",{"2":{"74":1}}],["forwards",{"2":{"64":1,"71":1,"76":1}}],["formats",{"2":{"190":1,"193":1,"195":3}}],["format",{"2":{"69":1,"195":3}}],["form",{"2":{"18":1,"64":3,"74":8,"76":3,"153":1}}],["formed",{"2":{"4":4,"6":3,"52":1,"53":4,"59":1,"64":8,"75":1,"76":1,"182":1}}],["formula",{"2":{"4":2,"6":1,"56":2,"66":1}}],["force",{"2":{"1":2,"153":3,"172":1,"180":1}}],["for",{"0":{"71":1,"74":1,"76":1},"2":{"0":2,"1":6,"3":2,"4":8,"5":6,"6":47,"7":4,"9":2,"13":5,"14":1,"18":1,"20":1,"21":3,"22":1,"23":3,"25":1,"27":3,"28":1,"29":1,"48":1,"49":5,"53":5,"56":8,"57":1,"58":1,"59":19,"60":3,"63":7,"64":35,"66":11,"69":5,"70":2,"71":3,"73":1,"74":7,"75":1,"76":9,"77":2,"80":1,"82":3,"84":2,"85":7,"88":13,"93":1,"97":3,"103":1,"104":1,"105":6,"108":2,"114":1,"115":1,"116":22,"121":1,"122":11,"125":2,"131":1,"132":1,"135":3,"141":1,"142":1,"144":1,"145":5,"146":13,"147":1,"148":3,"150":2,"153":7,"155":9,"157":1,"158":1,"159":2,"160":3,"161":2,"163":1,"164":5,"166":1,"167":3,"168":1,"169":5,"170":1,"172":3,"174":4,"175":7,"176":6,"177":8,"178":4,"180":12,"181":2,"182":2,"183":1,"184":6,"188":5,"189":7,"190":1,"192":4,"193":1,"195":3,"197":2,"199":2,"200":1}}],["fi",{"2":{"146":2}}],["fine",{"2":{"175":1}}],["final",{"2":{"76":1,"164":4,"176":1}}],["finally",{"2":{"58":2,"74":1,"146":1,"153":3,"170":1,"195":1}}],["findmin",{"2":{"184":1}}],["findmax",{"2":{"180":1,"182":1}}],["findall",{"2":{"164":1}}],["finding",{"2":{"74":1}}],["findfirst",{"2":{"64":6,"69":2,"80":1,"180":1}}],["findnext",{"2":{"64":3}}],["findlast",{"2":{"64":2}}],["findprev",{"2":{"64":2}}],["finds",{"2":{"64":1,"66":1}}],["find",{"2":{"53":6,"56":1,"64":12,"66":3,"69":2,"70":4,"73":2,"74":8,"75":1,"85":3,"88":1,"116":7,"146":2,"182":5,"199":1}}],["finish",{"2":{"9":1}}],["fill",{"2":{"64":1,"146":1,"177":3}}],["filled",{"2":{"64":5,"66":3,"84":1,"85":2,"116":16}}],["files",{"2":{"187":1,"195":2}}],["file",{"2":{"22":1,"28":1,"29":1,"64":1,"97":3,"108":3,"125":3,"135":3,"146":1,"147":1,"148":1,"154":1,"155":1,"163":1,"170":1,"172":1,"177":1,"178":1,"187":2,"190":1,"195":2}}],["filters",{"2":{"64":1}}],["filtering",{"2":{"6":1,"180":1}}],["filter",{"2":{"4":2,"6":2,"64":2,"153":2,"166":1,"169":2,"170":1,"180":1}}],["fit",{"2":{"17":1}}],["field",{"2":{"13":2,"64":2}}],["figure",{"2":{"13":1,"14":1,"55":1,"58":2,"81":1,"192":3}}],["fig",{"2":{"13":6,"14":6,"81":5,"191":7,"192":4,"196":2}}],["fix1",{"2":{"153":1,"170":1,"177":1}}],["fixme",{"2":{"145":1}}],["fix2",{"2":{"28":1,"64":2}}],["fixed",{"2":{"6":3,"70":1,"73":1,"75":1}}],["fix",{"0":{"20":1},"2":{"6":9,"9":3,"15":3,"17":1,"20":1,"70":1,"71":11,"73":1,"74":11,"75":1,"76":10,"81":2,"161":1,"163":1,"164":1,"168":1}}],["firstisright",{"2":{"146":2}}],["firstisleft",{"2":{"146":4}}],["firstisstraight",{"2":{"146":4}}],["firstnode",{"2":{"146":9}}],["first",{"2":{"3":18,"6":10,"53":14,"56":7,"58":1,"59":9,"60":1,"63":1,"64":17,"66":2,"69":1,"70":2,"73":1,"74":5,"75":3,"85":8,"88":4,"90":2,"91":2,"94":2,"96":1,"97":2,"100":1,"101":1,"102":1,"108":3,"116":22,"122":1,"125":2,"127":1,"134":1,"135":2,"138":1,"139":1,"140":2,"145":1,"146":16,"153":3,"155":2,"161":1,"170":2,"177":3,"181":1,"182":2,"189":2,"190":1,"191":1,"192":1,"193":1,"197":1,"198":1}}],["fancy",{"2":{"191":1}}],["fancis",{"2":{"6":1,"59":1}}],["fair",{"2":{"175":1}}],["fail",{"2":{"1":2,"6":2,"150":2,"153":2,"155":3,"170":1,"176":1}}],["fallback",{"2":{"153":1}}],["falses",{"2":{"64":2,"69":1,"70":1,"73":1}}],["false",{"0":{"50":1},"2":{"0":1,"1":58,"3":14,"4":6,"6":58,"28":2,"31":1,"32":1,"33":1,"34":1,"46":1,"53":2,"56":1,"58":5,"64":26,"66":5,"69":1,"70":1,"71":3,"74":1,"75":4,"85":2,"87":2,"88":27,"90":2,"93":2,"97":8,"99":2,"100":4,"101":1,"102":1,"103":1,"104":1,"105":11,"108":9,"110":1,"111":4,"114":1,"115":1,"116":39,"122":22,"125":8,"127":3,"128":4,"129":1,"131":1,"132":1,"134":1,"135":7,"137":2,"138":4,"139":1,"140":1,"141":1,"142":1,"145":10,"146":5,"150":8,"153":11,"155":3,"157":1,"159":3,"161":16,"168":44,"169":4,"170":7,"177":2,"180":1,"184":2,"185":20,"189":2,"191":242,"192":12,"193":18,"197":1}}],["fashion",{"2":{"55":1}}],["faster",{"2":{"59":1,"153":1}}],["fast",{"2":{"12":1}}],["f",{"2":{"1":24,"6":26,"15":1,"18":3,"19":1,"48":2,"52":1,"55":2,"58":4,"60":1,"62":2,"64":19,"65":2,"68":2,"70":2,"71":2,"73":2,"74":2,"75":2,"76":2,"79":2,"80":2,"84":5,"87":2,"90":2,"93":2,"96":2,"107":2,"116":7,"118":2,"121":2,"124":2,"134":2,"146":30,"150":14,"151":2,"153":61,"155":48,"170":64,"173":1,"175":2,"176":1,"179":2,"180":1,"184":6,"185":6,"188":5,"189":16,"191":6,"193":2,"198":3}}],["fulfilled",{"2":{"182":1}}],["fully",{"2":{"6":1,"64":4,"69":1,"122":4}}],["full",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"0":1,"66":5,"164":1,"199":4}}],["furthest",{"2":{"146":1}}],["further",{"2":{"62":1,"153":1}}],["furthermore",{"2":{"3":4,"6":5,"64":1,"70":1,"73":1,"75":1,"97":1,"135":1}}],["future",{"2":{"49":1,"77":1,"85":1,"174":2}}],["fun",{"2":{"191":1}}],["fundamental",{"2":{"22":1,"187":1}}],["func",{"2":{"13":5}}],["funcs",{"2":{"13":2,"14":3}}],["functionality",{"2":{"74":1,"171":1,"172":1,"177":1,"188":1}}],["functionalities",{"2":{"64":1}}],["functionally",{"2":{"1":2,"6":1,"18":1,"25":1,"150":2,"153":1}}],["function",{"2":{"1":8,"4":2,"6":12,"7":2,"9":1,"13":3,"14":2,"18":2,"25":1,"27":1,"28":2,"53":5,"56":3,"59":13,"63":6,"64":18,"66":7,"68":2,"69":4,"70":3,"71":3,"72":1,"73":2,"74":7,"75":2,"76":4,"82":2,"85":6,"87":1,"88":8,"90":1,"93":1,"96":1,"97":1,"103":1,"104":1,"105":5,"107":1,"108":1,"114":1,"115":1,"116":9,"118":1,"121":1,"122":7,"124":1,"125":1,"131":1,"132":1,"134":1,"135":1,"141":1,"142":1,"145":4,"146":16,"147":3,"148":1,"150":4,"151":2,"153":15,"155":5,"159":1,"162":2,"164":9,"165":2,"169":2,"170":11,"171":2,"172":1,"174":2,"176":2,"177":7,"180":3,"181":2,"182":3,"183":2,"184":7,"185":3,"186":1,"188":6,"189":12,"191":1,"197":4,"200":4}}],["functions",{"0":{"1":1,"71":1,"74":1,"76":1,"150":1,"189":1},"2":{"6":1,"9":3,"17":1,"22":1,"25":1,"29":1,"56":1,"59":1,"63":1,"64":2,"66":1,"68":1,"116":1,"147":1,"148":1,"151":1,"164":3,"165":1}}],["flexijoins",{"2":{"197":2,"198":3,"199":1,"200":5}}],["flexible",{"2":{"153":1,"170":1}}],["flags",{"2":{"64":5}}],["flag",{"2":{"64":12,"69":1}}],["flat",{"2":{"6":1,"184":2,"189":1}}],["flattened",{"2":{"18":1}}],["flattening`",{"2":{"157":1}}],["flattening",{"2":{"6":6,"157":3,"170":1,"176":2}}],["flatten",{"0":{"155":1},"2":{"0":1,"6":4,"11":3,"13":1,"18":1,"46":1,"59":1,"64":2,"66":3,"73":1,"76":1,"82":2,"105":1,"155":30,"169":1}}],["floating",{"2":{"6":1,"64":1,"74":5,"146":2}}],["float",{"2":{"6":3,"70":1,"73":1,"75":1}}],["float64x2",{"2":{"13":6,"14":6,"15":2}}],["float64",{"2":{"1":12,"4":20,"6":30,"13":1,"52":1,"53":3,"56":6,"63":1,"66":4,"69":2,"70":2,"73":1,"74":3,"75":1,"81":1,"85":12,"116":4,"122":2,"145":4,"161":6,"168":26,"175":2,"176":2,"177":1,"181":4,"182":9,"183":2,"184":6,"185":6,"186":1,"189":8,"191":190,"192":7,"193":10}}],["flipping",{"0":{"171":1},"2":{"171":1}}],["flipped",{"2":{"1":4,"6":2,"150":4,"153":2}}],["flipaxis",{"2":{"58":1}}],["flip",{"2":{"0":1,"6":1,"27":1,"148":2,"153":1,"171":2}}],["wgs84",{"2":{"192":1}}],["wglmakie",{"2":{"14":1}}],["wₜₒₜ",{"2":{"59":8}}],["wᵢ",{"2":{"59":18}}],["wt",{"2":{"59":3}}],["w",{"2":{"13":13,"14":7,"85":4,"146":1}}],["wrong",{"2":{"167":1,"184":1}}],["writing",{"2":{"195":1}}],["written",{"2":{"88":1}}],["writes",{"2":{"153":1}}],["write",{"2":{"7":1,"26":1,"146":1,"153":1,"195":7}}],["wrap",{"2":{"4":2,"6":1,"28":3,"31":1,"32":1,"33":1,"34":1,"46":1,"166":1,"176":1}}],["wrapped",{"2":{"48":1,"146":2,"151":1,"153":1}}],["wrapper",{"0":{"26":1},"2":{"26":1,"53":1,"56":1,"63":1,"66":1,"85":1,"88":1,"97":1,"108":1,"122":1,"125":1,"135":1}}],["wrappers`",{"2":{"155":1}}],["wrappers",{"2":{"1":20,"6":12,"48":1,"145":2,"146":1,"161":8,"162":1,"168":22,"175":1,"176":1,"180":1,"185":10,"189":1,"191":121,"192":5,"193":9}}],["wrappergeometry`",{"2":{"172":1}}],["wrappergeometry",{"2":{"1":2}}],["wrapping",{"2":{"1":2,"6":1,"88":1,"172":1,"186":1}}],["walk",{"2":{"69":1}}],["wall2",{"2":{"66":7}}],["wall1",{"2":{"66":12}}],["walls",{"2":{"66":3}}],["wall",{"2":{"66":69}}],["wachspress",{"2":{"59":1}}],["wasincreasing",{"2":{"146":10}}],["wasn",{"2":{"64":1}}],["was",{"2":{"27":1,"28":1,"46":1,"53":1,"56":1,"58":1,"59":4,"60":1,"63":1,"64":1,"66":1,"69":1,"70":1,"71":3,"72":1,"73":1,"74":2,"75":1,"76":3,"82":1,"85":1,"88":1,"91":1,"94":1,"104":1,"105":1,"115":1,"116":1,"119":1,"122":1,"132":1,"142":1,"145":1,"146":1,"147":1,"151":1,"153":1,"154":1,"155":1,"159":1,"162":1,"165":1,"166":1,"169":1,"170":1,"171":1,"173":1,"175":1,"177":1,"184":1,"185":1,"186":1,"188":2,"189":1}}],["wanted",{"2":{"200":1}}],["wants",{"2":{"82":1,"170":1}}],["want",{"0":{"49":1,"72":1},"2":{"13":1,"18":1,"49":1,"59":1,"64":1,"145":1,"192":2,"194":1,"199":1,"200":1}}],["ways",{"2":{"167":1}}],["way",{"2":{"6":1,"17":1,"18":1,"25":1,"50":1,"57":1,"148":1,"158":1,"163":1,"177":1,"188":2,"194":1}}],["warn",{"2":{"146":2}}],["warned",{"2":{"6":1,"188":1}}],["warning",{"2":{"0":1,"5":2,"6":3,"50":1,"59":1,"82":1,"170":1,"176":1,"187":1,"199":1}}],["wong",{"2":{"79":1,"80":1,"196":1}}],["won",{"2":{"49":1,"64":1,"170":1}}],["wouldn",{"2":{"74":1}}],["would",{"0":{"72":1},"2":{"6":3,"49":1,"70":1,"73":1,"74":1,"75":1,"82":4,"146":1,"153":1,"159":2,"192":1,"199":1,"200":1}}],["wound",{"2":{"6":1,"82":1}}],["world",{"0":{"199":1},"2":{"197":1}}],["worrying",{"2":{"50":1}}],["words",{"2":{"3":2,"6":1,"90":1,"118":1,"124":1,"125":1}}],["workflow",{"2":{"105":1,"122":1}}],["workflows",{"2":{"21":1,"23":1,"49":1}}],["works",{"2":{"22":1,"172":1,"174":1}}],["working",{"2":{"3":2,"6":1,"105":1,"192":1}}],["work",{"2":{"1":6,"6":3,"9":1,"53":1,"56":2,"63":1,"66":2,"69":2,"77":1,"85":1,"88":1,"116":1,"122":1,"145":1,"150":2,"153":1,"170":1,"172":1,"185":1,"199":1}}],["web",{"2":{"195":1}}],["west",{"2":{"66":8}}],["were",{"2":{"64":1,"146":1,"198":1}}],["welcome",{"2":{"21":1,"23":1}}],["well",{"2":{"17":1,"64":1,"66":1,"82":1,"159":1,"174":1,"178":1}}],["weighting",{"2":{"62":2,"63":1}}],["weights",{"2":{"57":4}}],["weight",{"2":{"6":5,"59":14,"63":1}}],["weighted",{"2":{"0":1,"6":2,"57":3,"59":4,"63":4}}],["we",{"0":{"72":2},"2":{"6":3,"7":1,"11":1,"13":1,"17":3,"19":1,"21":2,"22":1,"23":2,"28":1,"49":3,"50":1,"53":1,"55":2,"56":2,"58":4,"59":8,"60":2,"63":1,"64":7,"66":4,"71":8,"73":2,"74":3,"76":1,"77":1,"81":3,"82":2,"85":1,"87":1,"88":5,"90":1,"91":1,"94":1,"96":1,"97":1,"107":1,"108":1,"116":2,"118":3,"119":1,"121":1,"122":2,"124":1,"125":1,"134":1,"135":1,"146":21,"147":1,"151":1,"153":19,"155":3,"157":6,"159":4,"160":1,"170":6,"173":1,"174":2,"175":2,"176":3,"177":1,"180":5,"184":2,"187":1,"188":1,"190":2,"191":4,"192":6,"193":4,"194":1,"195":3,"197":3,"198":7}}],["whole",{"2":{"116":1}}],["whose",{"2":{"3":2,"6":1,"105":1}}],["white",{"2":{"58":1}}],["while",{"2":{"53":1,"62":1,"63":1,"64":5,"74":2,"81":2,"84":1,"88":1,"105":1,"116":1,"146":3,"169":1,"182":1,"184":2,"198":1}}],["whichever",{"2":{"6":1,"180":1}}],["which",{"2":{"1":2,"4":4,"5":2,"6":10,"7":1,"11":1,"13":1,"14":1,"17":1,"18":4,"20":1,"29":1,"49":2,"55":1,"56":1,"57":1,"58":2,"59":5,"60":1,"64":11,"66":2,"74":2,"77":1,"82":1,"88":2,"116":3,"146":3,"147":1,"148":1,"153":1,"157":2,"158":1,"160":2,"161":1,"164":1,"167":1,"168":1,"173":1,"174":1,"175":1,"176":3,"177":2,"180":1,"182":2,"185":1,"188":4,"195":3,"197":3,"198":6,"200":1}}],["what",{"0":{"21":1,"26":1,"48":1,"52":1,"55":2,"62":1,"65":1,"68":1,"84":2,"87":1,"90":1,"93":1,"96":1,"107":1,"118":1,"121":1,"124":1,"134":1,"151":1},"2":{"13":1,"14":1,"50":1,"62":1,"145":1,"146":1,"159":1,"175":1,"192":1,"199":1}}],["whatever",{"2":{"1":2,"6":1,"48":1,"150":2,"153":1}}],["whyatt",{"2":{"178":1}}],["why",{"0":{"48":1,"49":1},"2":{"9":1,"17":1,"26":1,"56":1}}],["wheel",{"2":{"17":1}}],["whether",{"2":{"1":8,"4":2,"6":11,"144":1,"145":1,"150":4,"154":2,"159":1,"160":1}}],["when",{"2":{"1":2,"4":4,"5":2,"6":5,"18":1,"20":1,"49":2,"50":1,"56":1,"59":3,"63":1,"64":2,"71":5,"74":6,"76":7,"116":1,"146":1,"150":2,"151":3,"153":1,"161":1,"164":1,"166":2,"180":1,"192":1,"193":2,"195":1,"200":1}}],["whereas",{"2":{"157":1}}],["wherever",{"2":{"6":1,"186":1}}],["where",{"2":{"1":4,"4":10,"6":12,"20":1,"27":2,"53":8,"56":12,"57":2,"59":24,"63":8,"64":14,"66":8,"69":5,"70":2,"71":5,"73":3,"74":18,"75":2,"76":9,"85":25,"88":1,"116":9,"146":3,"150":2,"153":18,"155":17,"157":2,"158":5,"167":1,"170":18,"172":1,"175":1,"186":1,"187":1,"189":3,"191":4}}],["widely",{"2":{"195":1}}],["widths",{"2":{"14":1}}],["wiki",{"2":{"116":1,"182":1}}],["wikipedia",{"2":{"116":1,"182":2}}],["wind",{"2":{"4":2,"6":2,"56":1,"88":1}}],["winding",{"0":{"81":1},"2":{"4":4,"6":3,"56":3,"64":7,"81":4,"82":1,"88":1,"146":1}}],["without",{"2":{"1":4,"6":1,"17":1,"50":1,"64":1,"107":1,"122":1,"153":1,"155":2,"170":1,"172":1,"185":1}}],["with",{"0":{"71":1,"74":1,"76":1,"181":1,"182":1,"183":1,"193":1,"194":1},"2":{"1":10,"3":10,"4":14,"6":27,"11":1,"20":1,"27":1,"48":2,"49":1,"52":1,"53":2,"56":7,"57":4,"58":1,"59":2,"63":1,"64":14,"66":6,"71":8,"73":5,"74":15,"75":1,"76":12,"84":1,"85":2,"97":1,"107":1,"111":1,"116":28,"118":1,"121":2,"122":5,"124":1,"125":1,"128":3,"129":2,"130":2,"140":1,"146":7,"148":1,"150":6,"151":1,"153":12,"155":2,"157":1,"159":1,"161":1,"166":1,"167":1,"170":3,"172":1,"174":1,"177":2,"180":2,"182":2,"183":1,"185":1,"188":1,"190":1,"191":4,"192":6,"193":2,"194":2,"195":2,"197":1,"198":1,"199":1}}],["within",{"0":{"40":1,"133":1,"134":1,"137":1,"138":1,"140":1,"141":1,"142":1},"1":{"134":1,"135":1},"2":{"0":2,"3":17,"4":6,"5":2,"6":13,"7":1,"9":1,"27":1,"40":2,"53":2,"56":1,"57":3,"59":1,"63":1,"64":9,"65":2,"66":5,"71":1,"74":2,"75":1,"76":6,"84":1,"85":5,"90":2,"91":3,"96":2,"110":1,"116":9,"121":1,"122":9,"133":1,"134":6,"135":11,"136":6,"137":14,"138":15,"139":15,"140":7,"141":4,"142":4,"148":1,"197":1,"198":4,"199":2}}],["will",{"2":{"1":16,"4":14,"5":2,"6":45,"11":1,"18":3,"49":2,"50":1,"53":4,"56":3,"59":2,"63":1,"64":5,"66":1,"69":1,"70":4,"71":4,"73":4,"74":4,"75":4,"76":4,"82":1,"84":2,"85":4,"88":1,"105":1,"145":1,"146":2,"150":6,"151":1,"152":2,"153":4,"155":3,"157":2,"161":1,"165":2,"167":1,"169":2,"170":3,"172":3,"174":2,"176":3,"180":2,"182":1,"184":1,"185":2,"188":1,"192":1,"195":1,"197":2,"199":1,"200":1}}],["wip",{"2":{"0":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/dev/assets/chunks/@localSearchIndexroot.DHmD6Z0B.js b/dev/assets/chunks/@localSearchIndexroot.DHmD6Z0B.js deleted file mode 100644 index 557f60d9a..000000000 --- a/dev/assets/chunks/@localSearchIndexroot.DHmD6Z0B.js +++ /dev/null @@ -1 +0,0 @@ -const e='{"documentCount":201,"nextId":201,"documentIds":{"0":"/GeometryOps.jl/dev/call_notes#20th-April,-2024","1":"/GeometryOps.jl/dev/call_notes#29th-Feb,-2024","2":"/GeometryOps.jl/dev/call_notes#To-do","3":"/GeometryOps.jl/dev/call_notes#done","4":"/GeometryOps.jl/dev/api#Full-GeometryOps-API-documentation","5":"/GeometryOps.jl/dev/api#apply-and-associated-functions","6":"/GeometryOps.jl/dev/api#General-geometry-methods","7":"/GeometryOps.jl/dev/api#OGC-methods","8":"/GeometryOps.jl/dev/api#Other-general-methods","9":"/GeometryOps.jl/dev/api#Barycentric-coordinates","10":"/GeometryOps.jl/dev/api#Other-methods","11":"/GeometryOps.jl/dev/experiments/accurate_accumulators#Accurate-accumulation","12":"/GeometryOps.jl/dev/experiments/predicates#predicates","13":"/GeometryOps.jl/dev/experiments/predicates#orient","14":"/GeometryOps.jl/dev/experiments/predicates#dashboard","15":"/GeometryOps.jl/dev/experiments/predicates#Testing-robust-vs-regular-predicates","16":"/GeometryOps.jl/dev/experiments/predicates#incircle","17":"/GeometryOps.jl/dev/explanations/paradigms#paradigms","18":"/GeometryOps.jl/dev/explanations/paradigms#apply","19":"/GeometryOps.jl/dev/explanations/paradigms#applyreduce","20":"/GeometryOps.jl/dev/explanations/paradigms#fix-and-prepare","21":"/GeometryOps.jl/dev/explanations/peculiarities#peculiarities","22":"/GeometryOps.jl/dev/explanations/peculiarities#What-does-apply-return-and-why?","23":"/GeometryOps.jl/dev/explanations/peculiarities#Why-do-you-want-me-to-provide-a-target-in-set-operations?","24":"/GeometryOps.jl/dev/explanations/peculiarities#_True-and-_False-(or-BoolsAsTypes)","25":"/GeometryOps.jl/dev/#what-is-geometryops-jl","26":"/GeometryOps.jl/dev/#how-to-navigate-the-docs","27":"/GeometryOps.jl/dev/introduction#introduction","28":"/GeometryOps.jl/dev/introduction#Main-concepts","29":"/GeometryOps.jl/dev/introduction#The-apply-paradigm","30":"/GeometryOps.jl/dev/introduction#What\'s-this-GeoInterface.Wrapper-thing?","31":"/GeometryOps.jl/dev/source/GeometryOps#geometryops-jl","32":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/segmentize#segmentize","33":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#Simple-overrides","34":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#Polygon-set-operations","35":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#difference","36":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#union","37":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#intersection","38":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#Symmetric-difference","39":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#DE-9IM-boolean-methods","40":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#equals","41":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#disjoint","42":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#touches","43":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#crosses","44":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#within","45":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#contains","46":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#overlaps","47":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#covers","48":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#coveredby","49":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#intersects","50":"/GeometryOps.jl/dev/source/GeometryOpsLibGEOSExt/simple_overrides#Convex-hull","51":"/GeometryOps.jl/dev/source/methods/area#Area-and-signed-area","52":"/GeometryOps.jl/dev/source/methods/area#What-is-area?-What-is-signed-area?","53":"/GeometryOps.jl/dev/source/methods/area#implementation","54":"/GeometryOps.jl/dev/source/methods/angles#angles","55":"/GeometryOps.jl/dev/source/methods/angles#What-is-angles?","56":"/GeometryOps.jl/dev/source/methods/angles#implementation","57":"/GeometryOps.jl/dev/source/methods/barycentric#Barycentric-coordinates","58":"/GeometryOps.jl/dev/source/methods/barycentric#example","59":"/GeometryOps.jl/dev/source/methods/barycentric#Barycentric-coordinate-API","60":"/GeometryOps.jl/dev/source/methods/buffer#buffer","61":"/GeometryOps.jl/dev/source/methods/centroid#centroid","62":"/GeometryOps.jl/dev/source/methods/centroid#What-is-the-centroid?","63":"/GeometryOps.jl/dev/source/methods/centroid#implementation","64":"/GeometryOps.jl/dev/source/methods/clipping/clipping_processor#Polygon-clipping-helpers","65":"/GeometryOps.jl/dev/source/methods/clipping/coverage#What-is-coverage?","66":"/GeometryOps.jl/dev/source/methods/clipping/coverage#implementation","67":"/GeometryOps.jl/dev/source/methods/clipping/cut#Polygon-cutting","68":"/GeometryOps.jl/dev/source/methods/clipping/cut#What-is-cut?","69":"/GeometryOps.jl/dev/source/methods/clipping/cut#implementation","70":"/GeometryOps.jl/dev/source/methods/clipping/difference#Difference-Polygon-Clipping","71":"/GeometryOps.jl/dev/source/methods/clipping/difference#Helper-functions-for-Differences-with-Greiner-and-Hormann-Polygon-Clipping","72":"/GeometryOps.jl/dev/source/methods/clipping/predicates#If-we-want-to-inject-adaptivity,-we-would-do-something-like:","73":"/GeometryOps.jl/dev/source/methods/clipping/intersection#Geometry-Intersection","74":"/GeometryOps.jl/dev/source/methods/clipping/intersection#Helper-functions-for-Intersections-with-Greiner-and-Hormann-Polygon-Clipping","75":"/GeometryOps.jl/dev/source/methods/clipping/union#Union-Polygon-Clipping","76":"/GeometryOps.jl/dev/source/methods/clipping/union#Helper-functions-for-Unions-with-Greiner-and-Hormann-Polygon-Clipping","77":"/GeometryOps.jl/dev/source/methods/convex_hull#Convex-hull","78":"/GeometryOps.jl/dev/source/methods/convex_hull#example","79":"/GeometryOps.jl/dev/source/methods/convex_hull#Simple-hull","80":"/GeometryOps.jl/dev/source/methods/convex_hull#Convex-hull-of-the-USA","81":"/GeometryOps.jl/dev/source/methods/convex_hull#Investigating-the-winding-order","82":"/GeometryOps.jl/dev/source/methods/convex_hull#implementation","83":"/GeometryOps.jl/dev/source/methods/distance#Distance-and-signed-distance","84":"/GeometryOps.jl/dev/source/methods/distance#What-is-distance?-What-is-signed-distance?","85":"/GeometryOps.jl/dev/source/methods/distance#implementation","86":"/GeometryOps.jl/dev/source/methods/equals#equals","87":"/GeometryOps.jl/dev/source/methods/equals#What-is-equals?","88":"/GeometryOps.jl/dev/source/methods/equals#implementation","89":"/GeometryOps.jl/dev/source/methods/geom_relations/contains#contains","90":"/GeometryOps.jl/dev/source/methods/geom_relations/contains#What-is-contains?","91":"/GeometryOps.jl/dev/source/methods/geom_relations/contains#implementation","92":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#coveredby","93":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#What-is-coveredby?","94":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#implementation","95":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#Convert-features-to-geometries","96":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#Points-coveredby-geometries","97":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#Lines-coveredby-geometries","98":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#Rings-covered-by-geometries","99":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#Polygons-covered-by-geometries","100":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#Geometries-coveredby-multi-geometry/geometry-collections","101":"/GeometryOps.jl/dev/source/methods/geom_relations/coveredby#Multi-geometry/geometry-collections-coveredby-geometries","102":"/GeometryOps.jl/dev/source/methods/geom_relations/covers#covers","103":"/GeometryOps.jl/dev/source/methods/geom_relations/covers#What-is-covers?","104":"/GeometryOps.jl/dev/source/methods/geom_relations/covers#implementation","105":"/GeometryOps.jl/dev/source/methods/geom_relations/crosses#Crossing-checks","106":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#disjoint","107":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#What-is-disjoint?","108":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#implementation","109":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#Convert-features-to-geometries","110":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#Point-disjoint-geometries","111":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#Lines-disjoint-geometries","112":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#Rings-disjoint-geometries","113":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#Polygon-disjoint-geometries","114":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#Geometries-disjoint-multi-geometry/geometry-collections","115":"/GeometryOps.jl/dev/source/methods/geom_relations/disjoint#Multi-geometry/geometry-collections-coveredby-geometries","116":"/GeometryOps.jl/dev/source/methods/geom_relations/intersects#Intersection-checks","117":"/GeometryOps.jl/dev/source/methods/geom_relations/intersects#What-is-intersects?","118":"/GeometryOps.jl/dev/source/methods/geom_relations/intersects#implementation","119":"/GeometryOps.jl/dev/source/methods/geom_relations/overlaps#overlaps","120":"/GeometryOps.jl/dev/source/methods/geom_relations/overlaps#What-is-overlaps?","121":"/GeometryOps.jl/dev/source/methods/geom_relations/overlaps#implementation","122":"/GeometryOps.jl/dev/source/methods/geom_relations/geom_geom_processors#Line-curve-interaction","123":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#touches","124":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#What-is-touches?","125":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#implementation","126":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#Convert-features-to-geometries","127":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#Point-touches-geometries","128":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#Lines-touching-geometries","129":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#Rings-touch-geometries","130":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#Polygons-touch-geometries","131":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#Geometries-touch-multi-geometry/geometry-collections","132":"/GeometryOps.jl/dev/source/methods/geom_relations/touches#Multi-geometry/geometry-collections-cross-geometries","133":"/GeometryOps.jl/dev/source/methods/geom_relations/within#within","134":"/GeometryOps.jl/dev/source/methods/geom_relations/within#What-is-within?","135":"/GeometryOps.jl/dev/source/methods/geom_relations/within#implementation","136":"/GeometryOps.jl/dev/source/methods/geom_relations/within#Convert-features-to-geometries","137":"/GeometryOps.jl/dev/source/methods/geom_relations/within#Points-within-geometries","138":"/GeometryOps.jl/dev/source/methods/geom_relations/within#Lines-within-geometries","139":"/GeometryOps.jl/dev/source/methods/geom_relations/within#Rings-covered-by-geometries","140":"/GeometryOps.jl/dev/source/methods/geom_relations/within#Polygons-within-geometries","141":"/GeometryOps.jl/dev/source/methods/geom_relations/within#Geometries-within-multi-geometry/geometry-collections","142":"/GeometryOps.jl/dev/source/methods/geom_relations/within#Multi-geometry/geometry-collections-within-geometries","143":"/GeometryOps.jl/dev/source/methods/orientation#orientation","144":"/GeometryOps.jl/dev/source/methods/orientation#isclockwise","145":"/GeometryOps.jl/dev/source/methods/orientation#isconcave","146":"/GeometryOps.jl/dev/source/methods/polygonize#Polygonizing-raster-data","147":"/GeometryOps.jl/dev/source/not_implemented_yet#Not-implemented-yet","148":"/GeometryOps.jl/dev/source/src/apply#apply","149":"/GeometryOps.jl/dev/source/src/apply#docstrings","150":"/GeometryOps.jl/dev/source/src/apply#functions","151":"/GeometryOps.jl/dev/source/src/apply#What-is-apply?","152":"/GeometryOps.jl/dev/source/src/apply#embedding","153":"/GeometryOps.jl/dev/source/src/apply#threading","154":"/GeometryOps.jl/dev/source/src/applyreduce#applyreduce","155":"/GeometryOps.jl/dev/source/src/keyword_docs#Keyword-docs","156":"/GeometryOps.jl/dev/source/src/other_primitives#Other-primitives-(unwrap,-flatten,-etc)","157":"/GeometryOps.jl/dev/source/src/types#types","158":"/GeometryOps.jl/dev/source/src/types#Manifold","159":"/GeometryOps.jl/dev/source/src/types#TraitTarget","160":"/GeometryOps.jl/dev/source/src/types#BoolsAsTypes","161":"/GeometryOps.jl/dev/source/transformations/correction/closed_ring#Closed-Rings","162":"/GeometryOps.jl/dev/source/transformations/correction/closed_ring#example","163":"/GeometryOps.jl/dev/source/transformations/correction/closed_ring#implementation","164":"/GeometryOps.jl/dev/source/transformations/correction/geometry_correction#Geometry-Corrections","165":"/GeometryOps.jl/dev/source/transformations/correction/geometry_correction#interface","166":"/GeometryOps.jl/dev/source/transformations/correction/geometry_correction#Available-corrections","167":"/GeometryOps.jl/dev/source/transformations/extent#Extent-embedding","168":"/GeometryOps.jl/dev/source/transformations/correction/intersecting_polygons#Intersecting-Polygons","169":"/GeometryOps.jl/dev/source/transformations/correction/intersecting_polygons#example","170":"/GeometryOps.jl/dev/source/transformations/correction/intersecting_polygons#implementation","171":"/GeometryOps.jl/dev/source/transformations/flip#Coordinate-flipping","172":"/GeometryOps.jl/dev/source/transformations/reproject#Geometry-reprojection","173":"/GeometryOps.jl/dev/source/transformations/reproject#Method-error-handling","174":"/GeometryOps.jl/dev/source/transformations/segmentize#segmentize","175":"/GeometryOps.jl/dev/source/transformations/segmentize#examples","176":"/GeometryOps.jl/dev/source/transformations/segmentize#benchmark","177":"/GeometryOps.jl/dev/source/transformations/segmentize#implementation","178":"/GeometryOps.jl/dev/source/transformations/simplify#Geometry-simplification","179":"/GeometryOps.jl/dev/source/transformations/simplify#examples","180":"/GeometryOps.jl/dev/source/transformations/simplify#benchmark","181":"/GeometryOps.jl/dev/source/transformations/simplify#Simplify-with-RadialDistance-Algorithm","182":"/GeometryOps.jl/dev/source/transformations/simplify#Simplify-with-DouglasPeucker-Algorithm","183":"/GeometryOps.jl/dev/source/transformations/simplify#Simplify-with-VisvalingamWhyatt-Algorithm","184":"/GeometryOps.jl/dev/source/transformations/simplify#Shared-utils","185":"/GeometryOps.jl/dev/source/transformations/transform#Pointwise-transformation","186":"/GeometryOps.jl/dev/source/transformations/tuples#Tuple-conversion","187":"/GeometryOps.jl/dev/source/types#types","188":"/GeometryOps.jl/dev/source/types#GEOS","189":"/GeometryOps.jl/dev/source/utils#Utility-functions","190":"/GeometryOps.jl/dev/tutorials/creating_geometry#Creating-Geometry","191":"/GeometryOps.jl/dev/tutorials/creating_geometry#creating-geometry","192":"/GeometryOps.jl/dev/tutorials/creating_geometry#plot-geometry","193":"/GeometryOps.jl/dev/tutorials/creating_geometry#geom-crs","194":"/GeometryOps.jl/dev/tutorials/creating_geometry#attributes","195":"/GeometryOps.jl/dev/tutorials/creating_geometry#save-geometry","196":"/GeometryOps.jl/dev/tutorials/geodesic_paths#Geodesic-paths","197":"/GeometryOps.jl/dev/tutorials/spatial_joins#Spatial-joins","198":"/GeometryOps.jl/dev/tutorials/spatial_joins#Simple-example","199":"/GeometryOps.jl/dev/tutorials/spatial_joins#Real-world-example","200":"/GeometryOps.jl/dev/tutorials/spatial_joins#Enabling-custom-predicates"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[3,1,55],"1":[3,1,1],"2":[2,3,107],"3":[1,3,17],"4":[4,1,100],"5":[4,4,246],"6":[3,4,1],"7":[2,7,205],"8":[3,7,255],"9":[2,4,81],"10":[2,4,1142],"11":[2,1,74],"12":[1,1,5],"13":[1,1,128],"14":[1,2,116],"15":[5,2,72],"16":[1,1,1],"17":[1,1,53],"18":[1,1,109],"19":[1,2,35],"20":[3,1,79],"21":[1,1,1],"22":[7,1,71],"23":[13,1,101],"24":[6,1,66],"25":[5,1,72],"26":[5,1,61],"27":[1,1,72],"28":[2,1,1],"29":[3,3,50],"30":[8,3,18],"31":[2,1,138],"32":[1,1,106],"33":[2,1,23],"34":[3,2,1],"35":[1,5,20],"36":[1,5,20],"37":[1,5,20],"38":[2,5,22],"39":[4,2,1],"40":[1,6,13],"41":[1,6,13],"42":[1,6,13],"43":[1,6,13],"44":[1,6,13],"45":[1,6,13],"46":[1,6,13],"47":[1,6,13],"48":[1,6,13],"49":[1,6,13],"50":[2,2,34],"51":[4,1,4],"52":[5,4,100],"53":[1,4,246],"54":[1,1,3],"55":[4,1,57],"56":[1,1,268],"57":[2,1,65],"58":[1,2,211],"59":[3,2,414],"60":[1,1,110],"61":[1,1,6],"62":[5,1,91],"63":[1,1,199],"64":[3,1,610],"65":[4,1,70],"66":[1,1,327],"67":[2,1,3],"68":[4,2,57],"69":[1,2,200],"70":[3,1,214],"71":[10,1,190],"72":[11,1,25],"73":[2,1,250],"74":[10,1,480],"75":[3,1,236],"76":[10,1,284],"77":[2,1,56],"78":[1,2,1],"79":[2,3,32],"80":[5,2,40],"81":[4,2,100],"82":[1,2,166],"83":[4,1,4],"84":[5,4,128],"85":[1,4,260],"86":[1,1,3],"87":[4,1,68],"88":[1,1,265],"89":[1,1,3],"90":[4,1,79],"91":[1,1,79],"92":[1,1,3],"93":[4,1,81],"94":[1,1,128],"95":[4,1,11],"96":[3,1,56],"97":[3,1,46],"98":[4,1,48],"99":[4,1,40],"100":[5,1,40],"101":[5,1,44],"102":[1,1,3],"103":[4,1,67],"104":[1,1,78],"105":[2,1,149],"106":[1,1,3],"107":[4,1,68],"108":[1,1,110],"109":[4,1,10],"110":[3,1,57],"111":[3,1,58],"112":[3,1,47],"113":[3,1,33],"114":[5,1,39],"115":[5,1,44],"116":[2,1,3],"117":[4,2,80],"118":[1,2,76],"119":[1,1,3],"120":[4,1,82],"121":[1,1,244],"122":[3,1,432],"123":[1,1,3],"124":[4,1,70],"125":[1,1,125],"126":[4,1,11],"127":[3,1,69],"128":[3,1,52],"129":[3,1,61],"130":[3,1,40],"131":[5,1,39],"132":[5,1,42],"133":[1,1,3],"134":[4,1,72],"135":[1,1,129],"136":[4,1,11],"137":[3,1,63],"138":[3,1,53],"139":[4,1,53],"140":[3,1,38],"141":[5,1,39],"142":[5,1,42],"143":[1,1,4],"144":[1,1,21],"145":[1,1,206],"146":[3,1,511],"147":[3,1,47],"148":[1,1,114],"149":[1,1,1],"150":[1,2,152],"151":[4,1,114],"152":[2,1,36],"153":[1,1,490],"154":[1,1,291],"155":[2,1,51],"156":[6,1,218],"157":[1,1,17],"158":[1,1,203],"159":[1,1,74],"160":[1,1,98],"161":[2,1,54],"162":[1,2,87],"163":[1,2,83],"164":[2,1,41],"165":[1,2,109],"166":[2,2,106],"167":[2,1,71],"168":[2,1,77],"169":[1,2,70],"170":[1,2,135],"171":[2,1,56],"172":[2,1,132],"173":[3,2,77],"174":[1,1,76],"175":[1,1,147],"176":[1,1,268],"177":[1,1,188],"178":[2,1,44],"179":[1,2,67],"180":[1,2,391],"181":[4,1,75],"182":[4,1,186],"183":[4,1,85],"184":[2,1,149],"185":[2,1,111],"186":[2,1,58],"187":[1,1,37],"188":[1,1,147],"189":[2,1,136],"190":[2,1,60],"191":[4,2,287],"192":[13,2,280],"193":[9,2,199],"194":[7,2,63],"195":[4,2,140],"196":[2,1,52],"197":[2,1,141],"198":[2,2,137],"199":[3,2,117],"200":[3,2,68]},"averageFieldLength":[2.7213930348258706,1.7263681592039801,102.32338308457715],"storedFields":{"0":{"title":"20th April, 2024","titles":[]},"1":{"title":"29th Feb, 2024","titles":[]},"2":{"title":"To do","titles":["29th Feb, 2024"]},"3":{"title":"Done","titles":["29th Feb, 2024"]},"4":{"title":"Full GeometryOps API documentation","titles":[]},"5":{"title":"apply and associated functions","titles":["Full GeometryOps API documentation"]},"6":{"title":"General geometry methods","titles":["Full GeometryOps API documentation"]},"7":{"title":"OGC methods","titles":["Full GeometryOps API documentation","General geometry methods"]},"8":{"title":"Other general methods","titles":["Full GeometryOps API documentation","General geometry methods"]},"9":{"title":"Barycentric coordinates","titles":["Full GeometryOps API documentation"]},"10":{"title":"Other methods","titles":["Full GeometryOps API documentation"]},"11":{"title":"Accurate accumulation","titles":[]},"12":{"title":"Predicates","titles":[]},"13":{"title":"Orient","titles":["Predicates"]},"14":{"title":"Dashboard","titles":["Predicates","Orient"]},"15":{"title":"Testing robust vs regular predicates","titles":["Predicates","Orient"]},"16":{"title":"Incircle","titles":["Predicates"]},"17":{"title":"Paradigms","titles":[]},"18":{"title":"apply","titles":["Paradigms"]},"19":{"title":"applyreduce","titles":["Paradigms","apply"]},"20":{"title":"fix and prepare","titles":["Paradigms"]},"21":{"title":"Peculiarities","titles":[]},"22":{"title":"What does apply return and why?","titles":["Peculiarities"]},"23":{"title":"Why do you want me to provide a target in set operations?","titles":["Peculiarities"]},"24":{"title":"_True and _False (or BoolsAsTypes)","titles":["Peculiarities"]},"25":{"title":"What is GeometryOps.jl?","titles":[]},"26":{"title":"How to navigate the docs","titles":[]},"27":{"title":"Introduction","titles":[]},"28":{"title":"Main concepts","titles":["Introduction"]},"29":{"title":"The apply paradigm","titles":["Introduction","Main concepts"]},"30":{"title":"What's this GeoInterface.Wrapper thing?","titles":["Introduction","Main concepts"]},"31":{"title":"GeometryOps.jl","titles":[]},"32":{"title":"Segmentize","titles":[]},"33":{"title":"Simple overrides","titles":[]},"34":{"title":"Polygon set operations","titles":["Simple overrides"]},"35":{"title":"Difference","titles":["Simple overrides","Polygon set operations"]},"36":{"title":"Union","titles":["Simple overrides","Polygon set operations"]},"37":{"title":"Intersection","titles":["Simple overrides","Polygon set operations"]},"38":{"title":"Symmetric difference","titles":["Simple overrides","Polygon set operations"]},"39":{"title":"DE-9IM boolean methods","titles":["Simple overrides"]},"40":{"title":"Equals","titles":["Simple overrides","DE-9IM boolean methods"]},"41":{"title":"Disjoint","titles":["Simple overrides","DE-9IM boolean methods"]},"42":{"title":"Touches","titles":["Simple overrides","DE-9IM boolean methods"]},"43":{"title":"Crosses","titles":["Simple overrides","DE-9IM boolean methods"]},"44":{"title":"Within","titles":["Simple overrides","DE-9IM boolean methods"]},"45":{"title":"Contains","titles":["Simple overrides","DE-9IM boolean methods"]},"46":{"title":"Overlaps","titles":["Simple overrides","DE-9IM boolean methods"]},"47":{"title":"Covers","titles":["Simple overrides","DE-9IM boolean methods"]},"48":{"title":"CoveredBy","titles":["Simple overrides","DE-9IM boolean methods"]},"49":{"title":"Intersects","titles":["Simple overrides","DE-9IM boolean methods"]},"50":{"title":"Convex hull","titles":["Simple overrides"]},"51":{"title":"Area and signed area","titles":[]},"52":{"title":"What is area? What is signed area?","titles":["Area and signed area"]},"53":{"title":"Implementation","titles":["Area and signed area"]},"54":{"title":"Angles","titles":[]},"55":{"title":"What is angles?","titles":["Angles"]},"56":{"title":"Implementation","titles":["Angles"]},"57":{"title":"Barycentric coordinates","titles":[]},"58":{"title":"Example","titles":["Barycentric coordinates"]},"59":{"title":"Barycentric-coordinate API","titles":["Barycentric coordinates"]},"60":{"title":"Buffer","titles":[]},"61":{"title":"Centroid","titles":[]},"62":{"title":"What is the centroid?","titles":["Centroid"]},"63":{"title":"Implementation","titles":["Centroid"]},"64":{"title":"Polygon clipping helpers","titles":[]},"65":{"title":"What is coverage?","titles":[]},"66":{"title":"Implementation","titles":[]},"67":{"title":"Polygon cutting","titles":[]},"68":{"title":"What is cut?","titles":["Polygon cutting"]},"69":{"title":"Implementation","titles":["Polygon cutting"]},"70":{"title":"Difference Polygon Clipping","titles":[]},"71":{"title":"Helper functions for Differences with Greiner and Hormann Polygon Clipping","titles":[]},"72":{"title":"If we want to inject adaptivity, we would do something like:","titles":[]},"73":{"title":"Geometry Intersection","titles":[]},"74":{"title":"Helper functions for Intersections with Greiner and Hormann Polygon Clipping","titles":[]},"75":{"title":"Union Polygon Clipping","titles":[]},"76":{"title":"Helper functions for Unions with Greiner and Hormann Polygon Clipping","titles":[]},"77":{"title":"Convex hull","titles":[]},"78":{"title":"Example","titles":["Convex hull"]},"79":{"title":"Simple hull","titles":["Convex hull","Example"]},"80":{"title":"Convex hull of the USA","titles":["Convex hull"]},"81":{"title":"Investigating the winding order","titles":["Convex hull"]},"82":{"title":"Implementation","titles":["Convex hull"]},"83":{"title":"Distance and signed distance","titles":[]},"84":{"title":"What is distance? What is signed distance?","titles":["Distance and signed distance"]},"85":{"title":"Implementation","titles":["Distance and signed distance"]},"86":{"title":"Equals","titles":[]},"87":{"title":"What is equals?","titles":["Equals"]},"88":{"title":"Implementation","titles":["Equals"]},"89":{"title":"Contains","titles":[]},"90":{"title":"What is contains?","titles":["Contains"]},"91":{"title":"Implementation","titles":["Contains"]},"92":{"title":"CoveredBy","titles":[]},"93":{"title":"What is coveredby?","titles":["CoveredBy"]},"94":{"title":"Implementation","titles":["CoveredBy"]},"95":{"title":"Convert features to geometries","titles":[]},"96":{"title":"Points coveredby geometries","titles":[]},"97":{"title":"Lines coveredby geometries","titles":[]},"98":{"title":"Rings covered by geometries","titles":[]},"99":{"title":"Polygons covered by geometries","titles":[]},"100":{"title":"Geometries coveredby multi-geometry/geometry collections","titles":[]},"101":{"title":"Multi-geometry/geometry collections coveredby geometries","titles":[]},"102":{"title":"Covers","titles":[]},"103":{"title":"What is covers?","titles":["Covers"]},"104":{"title":"Implementation","titles":["Covers"]},"105":{"title":"Crossing checks","titles":[]},"106":{"title":"Disjoint","titles":[]},"107":{"title":"What is disjoint?","titles":["Disjoint"]},"108":{"title":"Implementation","titles":["Disjoint"]},"109":{"title":"Convert features to geometries","titles":[]},"110":{"title":"Point disjoint geometries","titles":[]},"111":{"title":"Lines disjoint geometries","titles":[]},"112":{"title":"Rings disjoint geometries","titles":[]},"113":{"title":"Polygon disjoint geometries","titles":[]},"114":{"title":"Geometries disjoint multi-geometry/geometry collections","titles":[]},"115":{"title":"Multi-geometry/geometry collections coveredby geometries","titles":[]},"116":{"title":"Intersection checks","titles":[]},"117":{"title":"What is intersects?","titles":["Intersection checks"]},"118":{"title":"Implementation","titles":["Intersection checks"]},"119":{"title":"Overlaps","titles":[]},"120":{"title":"What is overlaps?","titles":["Overlaps"]},"121":{"title":"Implementation","titles":["Overlaps"]},"122":{"title":"Line-curve interaction","titles":[]},"123":{"title":"Touches","titles":[]},"124":{"title":"What is touches?","titles":["Touches"]},"125":{"title":"Implementation","titles":["Touches"]},"126":{"title":"Convert features to geometries","titles":[]},"127":{"title":"Point touches geometries","titles":[]},"128":{"title":"Lines touching geometries","titles":[]},"129":{"title":"Rings touch geometries","titles":[]},"130":{"title":"Polygons touch geometries","titles":[]},"131":{"title":"Geometries touch multi-geometry/geometry collections","titles":[]},"132":{"title":"Multi-geometry/geometry collections cross geometries","titles":[]},"133":{"title":"Within","titles":[]},"134":{"title":"What is within?","titles":["Within"]},"135":{"title":"Implementation","titles":["Within"]},"136":{"title":"Convert features to geometries","titles":[]},"137":{"title":"Points within geometries","titles":[]},"138":{"title":"Lines within geometries","titles":[]},"139":{"title":"Rings covered by geometries","titles":[]},"140":{"title":"Polygons within geometries","titles":[]},"141":{"title":"Geometries within multi-geometry/geometry collections","titles":[]},"142":{"title":"Multi-geometry/geometry collections within geometries","titles":[]},"143":{"title":"Orientation","titles":[]},"144":{"title":"isclockwise","titles":["Orientation"]},"145":{"title":"isconcave","titles":["Orientation"]},"146":{"title":"Polygonizing raster data","titles":[]},"147":{"title":"Not implemented yet","titles":[]},"148":{"title":"apply","titles":[]},"149":{"title":"Docstrings","titles":["apply"]},"150":{"title":"Functions","titles":["apply","Docstrings"]},"151":{"title":"What is apply?","titles":["apply"]},"152":{"title":"Embedding:","titles":["apply"]},"153":{"title":"Threading","titles":["apply"]},"154":{"title":"applyreduce","titles":[]},"155":{"title":"Keyword docs","titles":[]},"156":{"title":"Other primitives (unwrap, flatten, etc)","titles":[]},"157":{"title":"Types","titles":[]},"158":{"title":"Manifold","titles":["Types"]},"159":{"title":"TraitTarget","titles":["Types"]},"160":{"title":"BoolsAsTypes","titles":["Types"]},"161":{"title":"Closed Rings","titles":[]},"162":{"title":"Example","titles":["Closed Rings"]},"163":{"title":"Implementation","titles":["Closed Rings"]},"164":{"title":"Geometry Corrections","titles":[]},"165":{"title":"Interface","titles":["Geometry Corrections"]},"166":{"title":"Available corrections","titles":["Geometry Corrections"]},"167":{"title":"Extent embedding","titles":[]},"168":{"title":"Intersecting Polygons","titles":[]},"169":{"title":"Example","titles":["Intersecting Polygons"]},"170":{"title":"Implementation","titles":["Intersecting Polygons"]},"171":{"title":"Coordinate flipping","titles":[]},"172":{"title":"Geometry reprojection","titles":[]},"173":{"title":"Method error handling","titles":["Geometry reprojection"]},"174":{"title":"Segmentize","titles":[]},"175":{"title":"Examples","titles":["Segmentize"]},"176":{"title":"Benchmark","titles":["Segmentize"]},"177":{"title":"Implementation","titles":["Segmentize"]},"178":{"title":"Geometry simplification","titles":[]},"179":{"title":"Examples","titles":["Geometry simplification"]},"180":{"title":"Benchmark","titles":["Geometry simplification"]},"181":{"title":"Simplify with RadialDistance Algorithm","titles":[]},"182":{"title":"Simplify with DouglasPeucker Algorithm","titles":[]},"183":{"title":"Simplify with VisvalingamWhyatt Algorithm","titles":[]},"184":{"title":"Shared utils","titles":[]},"185":{"title":"Pointwise transformation","titles":[]},"186":{"title":"Tuple conversion","titles":[]},"187":{"title":"Types","titles":[]},"188":{"title":"GEOS","titles":["Types"]},"189":{"title":"Utility functions","titles":[]},"190":{"title":"Creating Geometry","titles":[]},"191":{"title":"Creating and plotting geometries","titles":["Creating Geometry"]},"192":{"title":"Plot geometries on a map using GeoMakie and coordinate reference system (CRS)","titles":["Creating Geometry"]},"193":{"title":"Create geospatial geometries with embedded coordinate reference system information","titles":["Creating Geometry"]},"194":{"title":"Creating a table with attributes and geometry","titles":["Creating Geometry"]},"195":{"title":"Saving your geospatial data","titles":["Creating Geometry"]},"196":{"title":"Geodesic paths","titles":[]},"197":{"title":"Spatial joins","titles":[]},"198":{"title":"Simple example","titles":["Spatial joins"]},"199":{"title":"Real-world example","titles":["Spatial joins"]},"200":{"title":"Enabling custom predicates","titles":["Spatial joins"]}},"dirtCount":0,"index":[["⋮",{"2":{"192":1}}],["☁",{"2":{"191":1}}],["✈",{"2":{"191":1}}],["÷",{"2":{"153":1,"154":1}}],["ϵ",{"2":{"74":5}}],["∘",{"2":{"74":1,"121":2,"146":2,"165":1,"180":2,"200":2}}],["⊻",{"2":{"64":1,"71":2}}],["≥",{"2":{"64":1,"122":2,"170":1,"182":1}}],["α≈1",{"2":{"74":1}}],["α≈0",{"2":{"74":1}}],["α2",{"2":{"64":4,"74":2}}],["α",{"2":{"64":3,"74":28,"122":7}}],["α1",{"2":{"64":4,"74":2}}],["β2",{"2":{"64":4,"74":2}}],["β",{"2":{"64":4,"74":28,"122":7}}],["β1",{"2":{"64":4,"74":2}}],["≤",{"2":{"64":5,"66":14,"122":6,"182":1,"184":1,"189":4}}],["^",{"2":{"192":1}}],["^3",{"2":{"192":1}}],["^n",{"2":{"145":1}}],["^2",{"2":{"63":2,"85":2}}],["^hormannpresentation",{"2":{"59":2}}],["∑λ",{"2":{"59":2}}],["∑i=2n",{"2":{"10":1}}],["λ₁",{"2":{"59":2}}],["λn",{"2":{"57":1}}],["λ3",{"2":{"57":1}}],["λ2",{"2":{"57":2}}],["λ1",{"2":{"57":2}}],["λs",{"2":{"9":6,"10":4,"59":27}}],["π",{"2":{"56":1,"180":1}}],["δbay",{"2":{"74":3}}],["δbax",{"2":{"74":3}}],["δby",{"2":{"74":5}}],["δbx",{"2":{"74":5}}],["δb",{"2":{"74":2}}],["δay",{"2":{"74":5}}],["δax",{"2":{"74":5}}],["δa",{"2":{"74":2}}],["δintrs",{"2":{"64":2}}],["δy2",{"2":{"145":2}}],["δy1",{"2":{"145":2}}],["δyl",{"2":{"121":4}}],["δy",{"2":{"56":8,"66":3,"122":7}}],["δys",{"2":{"56":1}}],["δx2",{"2":{"145":2}}],["δx1",{"2":{"145":2}}],["δxl",{"2":{"121":4}}],["δx",{"2":{"56":9,"66":3,"122":7}}],["`$",{"2":{"188":1}}],["`equatorial",{"2":{"176":2}}],["`extents",{"2":{"167":1}}],["`prefilter",{"2":{"180":1}}],["`proj",{"2":{"172":1,"176":2}}],["`polgontrait`",{"2":{"153":1}}],["`polygontrait`",{"2":{"153":1,"165":1}}],["`polygonize`",{"2":{"146":2}}],["`polygon`",{"2":{"59":3}}],["`polys`",{"2":{"71":1}}],["`poly",{"2":{"71":3,"74":1,"76":1}}],["`pointrait`",{"2":{"180":1}}],["`pointtrait`",{"2":{"156":3,"165":1}}],["`point",{"2":{"122":3}}],["`point`",{"2":{"59":4,"85":1}}],["`point2f`",{"2":{"58":1}}],["`inf`",{"2":{"172":1}}],["`inv",{"2":{"158":1}}],["`intersects`",{"2":{"118":1}}],["`intersectingpolygons`",{"2":{"70":1,"73":1,"75":1}}],["`90`",{"2":{"158":1}}],["`libgeos",{"2":{"188":1}}],["`linestring`",{"2":{"177":1}}],["`linestringtrait`",{"2":{"165":1}}],["`linearring`",{"2":{"177":1}}],["`linearsegments`",{"2":{"177":1}}],["`linear`",{"2":{"158":1}}],["`line2`",{"2":{"145":1}}],["`line1`",{"2":{"145":1}}],["`line",{"2":{"73":4}}],["`lat`",{"2":{"158":1}}],["`lon`",{"2":{"158":1}}],["`z`",{"2":{"158":1}}],["``1",{"2":{"158":1}}],["``a``",{"2":{"158":1}}],["``r",{"2":{"158":1}}],["```jldoctest",{"2":{"69":1,"70":1,"73":1,"74":1,"75":1,"88":1,"91":1,"94":1,"104":1,"108":1,"118":1,"121":1,"125":1,"135":1,"145":1,"180":1}}],["```julia",{"2":{"10":2,"59":1,"105":1,"145":1,"153":1,"159":1,"185":2}}],["```math",{"2":{"59":1,"145":1}}],["```",{"2":{"11":1,"59":3,"69":1,"70":1,"73":1,"75":1,"88":1,"91":1,"94":1,"104":1,"108":1,"118":1,"121":1,"125":1,"135":1,"145":3,"146":11,"153":1,"180":1,"185":2,"189":1}}],["`obj`",{"2":{"156":1,"185":1,"186":1}}],["`op`",{"2":{"154":2}}],["`calc",{"2":{"155":1}}],["`crs`",{"2":{"155":1}}],["`components`",{"2":{"156":1}}],["`collect`",{"2":{"154":1}}],["`covers`",{"2":{"94":1,"104":1}}],["`coveredby`",{"2":{"94":1,"104":1}}],["`contains`",{"2":{"91":1,"135":1}}],["`convex",{"2":{"82":2}}],["`+`",{"2":{"154":1}}],["`alg",{"2":{"188":1}}],["`alg`",{"2":{"184":1}}],["`always",{"2":{"172":1}}],["`application",{"2":{"165":1}}],["`apply`",{"2":{"153":1,"159":1}}],["`abstractgeometrytrait`",{"2":{"156":1}}],["`abstractarray`",{"2":{"156":1}}],["`abstractmatrix`",{"2":{"146":1}}],["`ys`",{"2":{"146":1}}],["`flattening`",{"2":{"176":1}}],["`flattening",{"2":{"176":1}}],["`flatten`",{"2":{"156":1}}],["`f",{"2":{"153":1}}],["`featurecollectiontrait`",{"2":{"153":1,"156":1}}],["`featurecollection`",{"2":{"146":2}}],["`featuretrait`",{"2":{"153":2,"156":1}}],["`feature`s",{"2":{"146":1}}],["`f`",{"2":{"146":5,"153":3,"154":1,"156":2,"185":2,"188":1}}],["`false`",{"2":{"145":1,"146":1,"155":4,"160":1,"172":1}}],["`fix",{"2":{"70":2,"71":2,"73":2,"74":2,"75":2,"76":2}}],["`douglaspeucker`",{"2":{"180":1}}],["`d`",{"2":{"172":1}}],["`difference`",{"2":{"170":1}}],["`disjoint`",{"2":{"118":1}}],["`delaunaytriangulation",{"2":{"82":1}}],["`within`",{"2":{"91":1,"135":1}}],["`weight`",{"2":{"59":1}}],["`geos`",{"2":{"188":3}}],["`geodesicsegments`",{"2":{"175":1,"176":1,"177":1}}],["`geodesic`",{"2":{"158":1,"176":1}}],["`geointerface`",{"2":{"165":1}}],["`geointerface",{"2":{"153":1,"156":2,"172":2}}],["`geom`",{"2":{"85":3,"156":1,"177":1}}],["`geometrycorrection`",{"2":{"163":1,"165":1,"170":2}}],["`geometry`",{"2":{"153":1,"172":2}}],["`geometrybasics",{"2":{"59":3}}],["`geometries`",{"2":{"82":1}}],["`g1`",{"2":{"85":1}}],["`gi",{"2":{"82":1,"146":1}}],["`tuple",{"2":{"189":1}}],["`tuple`s",{"2":{"186":1}}],["`tuple`",{"2":{"146":1,"186":1}}],["`time`",{"2":{"172":1}}],["`transform`",{"2":{"172":1}}],["`true`",{"2":{"94":1,"105":1,"108":2,"125":1,"135":1,"145":2,"146":1,"155":2,"160":1,"172":1}}],["`threaded`",{"2":{"155":1}}],["`threaded==true`",{"2":{"154":1}}],["`tol`",{"2":{"180":2,"181":3,"182":2,"183":3,"184":4}}],["`to",{"2":{"74":1}}],["`target",{"2":{"172":3}}],["`target`",{"2":{"73":1,"153":2,"154":1,"156":1,"159":1}}],["`tables",{"2":{"153":1}}],["`taget`",{"2":{"70":1,"75":1}}],["`method",{"2":{"177":1}}],["`method`",{"2":{"59":3,"177":1}}],["`max",{"2":{"176":4,"177":2,"188":1}}],["`map`",{"2":{"153":1}}],["`makie",{"2":{"146":1}}],["`multipointtrait`",{"2":{"153":1,"180":1}}],["`multipolygontrait`",{"2":{"153":1}}],["`multipolygon`",{"2":{"146":3}}],["`multipolygon",{"2":{"71":3,"74":3,"76":2}}],["`multipoly",{"2":{"71":7,"74":3,"76":3}}],["`minpoints`",{"2":{"146":2}}],["`union",{"2":{"146":2}}],["`unionintersectingpolygons`",{"2":{"170":1}}],["`unionintersectingpolygons",{"2":{"70":1,"71":2,"73":1,"74":2,"75":1,"76":2}}],["`using",{"2":{"31":1}}],["`number`",{"2":{"180":2,"184":3}}],["`namedtuple`",{"2":{"153":1}}],["`nothing`",{"2":{"64":1,"155":1}}],["`next",{"2":{"64":1}}],["`boolsastypes`",{"2":{"160":1}}],["`bool`",{"2":{"146":2}}],["`buffer`",{"2":{"60":1}}],["`barycentric",{"2":{"59":3}}],["`radialdistance`",{"2":{"180":1}}],["`ratio`",{"2":{"180":2,"184":3}}],["`reproject`",{"2":{"173":1}}],["`rebuild`",{"2":{"156":1}}],["`r`",{"2":{"59":1}}],["`rᵢ`",{"2":{"59":1}}],["`segmentize`",{"2":{"188":1}}],["`semimajor",{"2":{"158":1}}],["`svector`",{"2":{"185":3}}],["`simplifyalg`",{"2":{"180":2}}],["`simplify",{"2":{"180":1}}],["`simplify`",{"2":{"180":2}}],["`source",{"2":{"172":3}}],["`spherical`",{"2":{"158":1}}],["`s`",{"2":{"59":1}}],["`sᵢ`",{"2":{"59":2}}],["`s2`",{"2":{"59":1}}],["`s1`",{"2":{"59":1}}],["`hcat`",{"2":{"59":1}}],["`x`",{"2":{"153":1,"160":1}}],["`xs`",{"2":{"146":1}}],["`x1",{"2":{"59":1}}],["`x1`",{"2":{"59":2}}],["`x2`",{"2":{"59":1}}],["`visvalingamwhyatt`",{"2":{"180":1}}],["`vector",{"2":{"172":1}}],["`vector`",{"2":{"146":1,"153":1}}],["`vᵢ`",{"2":{"59":1}}],["`v`",{"2":{"59":1}}],["`values`",{"2":{"59":1,"146":1}}],["`λs`",{"2":{"59":2}}],["`",{"2":{"59":2,"70":1,"71":2,"73":1,"74":3,"75":1,"76":2,"146":3,"153":2,"154":1,"158":1,"165":2,"172":2,"177":1,"180":3,"188":2,"189":1}}],["∈",{"2":{"14":1}}],["~",{"2":{"14":3}}],["$ratio",{"2":{"184":1}}],["$rectangle",{"2":{"176":2}}],["$number",{"2":{"184":1}}],["$name",{"2":{"31":4}}],["$min",{"2":{"184":1}}],["$douglas",{"2":{"180":1,"182":1}}],["$simplify",{"2":{"180":1,"181":1,"183":1}}],["$lg",{"2":{"176":1}}],["$lin",{"2":{"176":2}}],["$geom",{"2":{"180":8}}],["$geo",{"2":{"176":1}}],["$calc",{"2":{"155":1}}],["$crs",{"2":{"155":1,"167":1}}],["$apply",{"2":{"153":1,"171":1,"172":1,"180":1}}],["$tol",{"2":{"184":1}}],["$threaded",{"2":{"155":1}}],["$t",{"2":{"88":1,"153":2,"154":2}}],["$target",{"2":{"71":1,"74":1,"76":1,"156":3}}],["$trait",{"2":{"69":1,"71":2,"74":2,"76":2}}],["$",{"2":{"13":4,"14":1,"59":4,"64":2,"146":3,"165":4,"177":1,"180":12,"188":1}}],["|=",{"2":{"121":1,"122":4}}],["||",{"2":{"56":2,"64":13,"66":8,"69":1,"73":1,"74":5,"75":1,"88":18,"105":2,"121":1,"122":8,"127":1,"146":7,"182":1,"184":3}}],["|",{"2":{"11":4,"122":1}}],["|>",{"2":{"11":8,"13":2,"156":3,"175":1,"176":1,"180":3,"199":2}}],["↩︎",{"2":{"10":1}}],["ᵢᵢᵢ₊₁ᵢᵢ₊₁ᵢᵢ₊₁tᵢ=det",{"2":{"10":1}}],["⋅",{"2":{"10":1,"59":1}}],["qy",{"2":{"13":2,"14":2}}],["qx",{"2":{"13":2,"14":2}}],["q",{"2":{"13":13,"14":12,"64":4}}],["qhull",{"2":{"10":1,"82":1}}],["queue",{"2":{"182":41}}],["questions",{"2":{"74":1}}],["quite",{"2":{"162":1,"199":1}}],["quickhull",{"2":{"10":1,"77":1,"82":2}}],["quick",{"2":{"8":2,"10":1,"59":1,"167":1,"179":1}}],["quality",{"2":{"10":1,"180":1}}],["quantity",{"2":{"10":1,"176":1}}],["quot",{"2":{"5":8,"10":10,"20":2,"64":8,"84":2,"85":2,"88":2,"103":4,"122":10,"150":8,"151":2,"153":2,"154":2,"156":4,"174":6,"191":2,"198":2}}],["ϕ",{"2":{"10":1}}],["θ",{"2":{"10":1,"191":7,"192":3,"193":5}}],["zone",{"2":{"192":1}}],["zoom",{"2":{"14":1}}],["zs",{"2":{"146":5}}],["zip",{"2":{"13":1,"14":1,"191":4,"192":1,"193":1}}],["zeros",{"2":{"59":1,"66":1}}],["zero",{"2":{"8":12,"10":8,"53":11,"63":3,"64":4,"66":11,"74":22,"84":1,"85":3,"145":1,"153":1,"182":4}}],["z",{"2":{"8":2,"9":2,"10":3,"59":3,"88":3,"146":3,"171":1,"185":1,"186":1}}],["0e6",{"2":{"192":6}}],["0example",{"2":{"10":1}}],["097075198097933",{"2":{"193":1}}],["09707519809793252",{"2":{"193":2}}],["091887951911644",{"2":{"193":3}}],["0999933334666654",{"2":{"191":1}}],["09801605542096",{"2":{"191":1}}],["098016055420953",{"2":{"191":3}}],["09297443860091348",{"2":{"191":4}}],["09",{"2":{"58":1}}],["08506974233813636",{"2":{"193":2}}],["08",{"2":{"58":1}}],["062749678615475",{"2":{"193":1}}],["06274967861547665",{"2":{"193":2}}],["06592462566760626",{"2":{"191":1}}],["0650624499034016",{"2":{"191":4}}],["06",{"2":{"58":1}}],["02017324484778",{"2":{"193":1}}],["020173244847778715",{"2":{"193":2}}],["027886421973952302",{"2":{"191":4}}],["02",{"2":{"58":3}}],["04500741774392",{"2":{"193":1}}],["045007417743918",{"2":{"193":2}}],["049999166670833324",{"2":{"191":1}}],["0438052480035",{"2":{"191":1}}],["043805248003498",{"2":{"191":3}}],["04",{"2":{"58":6}}],["07518688541961",{"2":{"193":1}}],["075186885419612",{"2":{"193":2}}],["071",{"2":{"175":2,"176":2}}],["07",{"2":{"58":6,"175":6,"176":6}}],["009176636029576",{"2":{"193":1}}],["0091766360295773",{"2":{"193":2}}],["003135308800957",{"2":{"193":1}}],["0031353088009582475",{"2":{"193":2}}],["0035114210915891397",{"2":{"191":4}}],["006784125578492062",{"2":{"193":2}}],["0020133807972559925",{"2":{"193":2}}],["00839489109211",{"2":{"193":3}}],["008696",{"2":{"7":2,"10":3,"73":1,"74":1,"117":1,"118":1}}],["005465967083412071",{"2":{"191":4}}],["00111595449914",{"2":{"191":1}}],["001115954499138",{"2":{"191":3}}],["0010075412835199304",{"2":{"191":4}}],["001",{"2":{"180":1}}],["00085222666982",{"2":{"193":3}}],["000577332369005",{"2":{"193":1}}],["0005773323690041465",{"2":{"193":2}}],["000510363870095e6",{"2":{"192":2}}],["00025191811248184703",{"2":{"193":2}}],["000215611503127e6",{"2":{"192":2}}],["0007260527263e6",{"2":{"192":2}}],["000342160541625e6",{"2":{"192":2}}],["000124843834609e6",{"2":{"192":2}}],["000063948817746e6",{"2":{"192":2}}],["000026987852369e6",{"2":{"192":2}}],["000008144045314",{"2":{"193":1}}],["000007998400139e6",{"2":{"192":2}}],["000000999950001e6",{"2":{"192":2}}],["00001e6",{"2":{"192":1}}],["0004397316773170068",{"2":{"191":4}}],["000",{"2":{"180":1,"196":1}}],["00",{"2":{"58":2}}],["053798628882221644",{"2":{"193":2}}],["05877989361332",{"2":{"191":1}}],["058779893613323",{"2":{"191":3}}],["05416726609360478",{"2":{"191":4}}],["05",{"2":{"58":1}}],["052704767595",{"2":{"15":1}}],["037564867762832",{"2":{"193":1}}],["03756486776283019",{"2":{"193":2}}],["031245035570328428",{"2":{"193":2}}],["033518309870985",{"2":{"193":3}}],["03503632062070827",{"2":{"191":4}}],["03",{"2":{"58":4}}],["01458815628695",{"2":{"193":3}}],["016044338630866517",{"2":{"193":2}}],["01592650896568995",{"2":{"191":1}}],["01597247419241532",{"2":{"191":4}}],["01908693278165",{"2":{"191":1}}],["019086932781654",{"2":{"191":3}}],["01098781325325",{"2":{"191":1}}],["010987813253244",{"2":{"191":3}}],["011814947665167774",{"2":{"191":4}}],["01362848005",{"2":{"15":1}}],["01",{"2":{"14":1,"58":1,"175":1,"176":1,"191":1,"192":1,"193":1}}],["0^",{"2":{"13":2,"14":2}}],["0+2",{"2":{"13":2,"14":2}}],["0",{"2":{"7":70,"8":24,"10":190,"11":1,"13":5,"14":8,"15":32,"52":9,"53":4,"55":20,"56":3,"58":155,"59":2,"62":6,"63":6,"64":49,"65":13,"66":5,"68":22,"69":49,"70":42,"73":2,"74":21,"75":46,"76":2,"80":1,"84":20,"85":2,"87":13,"88":18,"90":16,"93":6,"94":6,"103":6,"104":12,"105":9,"107":15,"120":13,"121":9,"122":37,"124":12,"125":11,"134":16,"145":21,"146":7,"158":1,"162":24,"169":64,"170":4,"175":16,"176":13,"177":1,"180":11,"182":7,"184":4,"189":2,"191":129,"192":2,"193":46,"198":13}}],[">=",{"2":{"59":6,"105":4,"121":1,"184":1}}],[">geometryops",{"2":{"10":2}}],[">",{"2":{"5":2,"10":6,"11":2,"13":1,"15":2,"50":1,"56":1,"59":1,"64":17,"66":3,"69":5,"70":1,"71":1,"74":2,"75":1,"76":3,"84":1,"88":1,"105":8,"121":2,"122":10,"145":4,"146":12,"156":6,"165":1,"170":3,"177":2,"180":1,"182":12,"184":3,"185":1,"189":1,"199":1}}],["914930257661865",{"2":{"193":1}}],["96875496442967",{"2":{"193":1}}],["961329",{"2":{"7":2,"10":3,"73":1,"74":1,"117":1,"118":1}}],["983955661369134",{"2":{"193":1}}],["9833",{"2":{"15":1}}],["9877550012664",{"2":{"191":1}}],["9840085315131",{"2":{"191":1}}],["98271048511609",{"2":{"191":1}}],["98661575256801",{"2":{"191":1}}],["99321587442151",{"2":{"193":1}}],["99375130197483",{"2":{"191":1}}],["997986619202745",{"2":{"193":1}}],["997750168744936",{"2":{"191":1}}],["997247091122496",{"2":{"191":1}}],["99600053330489",{"2":{"191":1}}],["991002699676024",{"2":{"191":1}}],["990022362600165",{"2":{"191":1}}],["99292997455441",{"2":{"191":1}}],["99533829767195",{"2":{"191":1}}],["99865616402829",{"2":{"191":1}}],["999999967681458e6",{"2":{"192":2}}],["999997707902938e6",{"2":{"192":2}}],["999987539891298e6",{"2":{"192":2}}],["999963474314044e6",{"2":{"192":2}}],["999919535736425e6",{"2":{"192":2}}],["999974634566875",{"2":{"191":1}}],["999849768598615e6",{"2":{"192":2}}],["999748081887518",{"2":{"193":1}}],["999748243174828e6",{"2":{"192":2}}],["999750002083324",{"2":{"191":1}}],["999609061508909e6",{"2":{"192":2}}],["999426363321033e6",{"2":{"192":2}}],["999194331880103e6",{"2":{"192":2}}],["99900003333289",{"2":{"191":1}}],["999565375483215",{"2":{"191":1}}],["97976366505997",{"2":{"191":1}}],["9783069507679",{"2":{"191":1}}],["97",{"2":{"58":1}}],["946201371117777",{"2":{"193":1}}],["94",{"2":{"58":1}}],["92",{"2":{"58":1}}],["9im",{"0":{"39":1},"1":{"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1},"2":{"122":2,"197":1}}],["95770326033",{"2":{"15":1}}],["95",{"2":{"13":1,"14":1,"196":1}}],["900",{"2":{"176":1}}],["90063612163",{"2":{"11":2}}],["90`",{"2":{"158":1}}],["909318372607",{"2":{"11":3}}],["90",{"2":{"10":2,"55":9,"58":1}}],["9",{"2":{"5":2,"10":1,"122":2,"145":12,"175":1,"185":1}}],["897070",{"2":{"196":1}}],["873633668827033",{"2":{"193":1}}],["8135804051007",{"2":{"191":1}}],["813580405100698",{"2":{"191":3}}],["88",{"2":{"58":1}}],["86641841658641",{"2":{"191":1}}],["866418416586406",{"2":{"191":3}}],["86",{"2":{"58":1}}],["868447876892",{"2":{"15":2}}],["84",{"2":{"58":1}}],["821068835162155",{"2":{"193":1}}],["82",{"2":{"58":1}}],["800",{"2":{"58":1}}],["80000",{"2":{"15":5}}],["80",{"2":{"58":1}}],["80869813739",{"2":{"15":2}}],["856614689791036e",{"2":{"15":2}}],["83572303404496",{"2":{"10":2,"73":1,"74":1}}],["8",{"2":{"5":6,"10":9,"13":1,"14":1,"70":2,"75":4,"122":1,"146":3,"158":1,"175":1,"185":3,"193":2}}],["+5000000",{"2":{"192":1}}],["+proj=natearth2",{"2":{"192":2}}],["+=",{"2":{"53":2,"59":11,"63":6,"64":17,"66":10,"69":1,"88":1,"105":1,"122":5,"145":1,"170":2,"182":4,"189":3}}],["+",{"2":{"5":2,"10":2,"13":1,"14":1,"53":1,"56":4,"59":20,"63":10,"64":15,"66":7,"69":1,"74":10,"85":3,"88":2,"105":2,"122":6,"145":6,"146":2,"150":2,"170":3,"177":2,"182":3,"183":2,"184":2,"191":6,"192":1,"193":4}}],["yticklabelsvisible",{"2":{"192":1}}],["yzfbc",{"2":{"192":1}}],["york",{"2":{"199":1}}],["yoffset",{"2":{"191":7,"193":2}}],["your",{"0":{"195":1},"2":{"18":1,"60":1,"146":1,"148":1,"173":1,"176":1,"194":1,"195":1,"200":2}}],["you",{"0":{"23":1},"2":{"2":1,"5":2,"8":2,"9":4,"10":11,"11":1,"17":1,"18":5,"23":1,"29":2,"53":1,"56":1,"59":8,"60":1,"63":1,"70":1,"73":1,"75":1,"81":1,"82":1,"148":1,"153":1,"154":1,"159":1,"162":1,"169":1,"173":1,"175":1,"176":1,"177":1,"185":1,"192":1,"194":2,"195":3,"198":2,"199":3,"200":4}}],["y=y",{"2":{"189":1}}],["yvec",{"2":{"146":4}}],["ybounds",{"2":{"146":4}}],["yhalf",{"2":{"146":2}}],["ylast",{"2":{"85":3}}],["yfirst",{"2":{"85":5}}],["y0",{"2":{"85":5}}],["yw",{"2":{"66":4}}],["ye",{"2":{"66":4}}],["yet",{"0":{"147":1},"2":{"31":1,"59":1,"69":1,"71":1,"74":1,"76":1,"88":1,"146":1,"147":1,"165":2,"199":1}}],["y2",{"2":{"63":2,"66":18,"85":7,"105":10,"121":4,"122":5,"146":5,"177":6,"189":2}}],["y1",{"2":{"63":2,"66":22,"85":7,"105":11,"121":5,"122":6,"146":5,"177":7,"189":2}}],["yind+1",{"2":{"146":1}}],["yind",{"2":{"146":2}}],["yinterior",{"2":{"63":2}}],["yield",{"2":{"74":1,"176":1}}],["yi+yi−1",{"2":{"10":1}}],["ycentroid",{"2":{"63":13}}],["yrange",{"2":{"58":3,"84":3}}],["yautolimits",{"2":{"58":2}}],["yp2",{"2":{"56":4}}],["ys",{"2":{"10":3,"146":30}}],["ymax",{"2":{"10":1,"65":2,"66":48}}],["ymin",{"2":{"10":1,"65":2,"66":49}}],["y",{"2":{"5":4,"8":2,"10":4,"13":9,"14":10,"53":2,"56":8,"58":8,"62":1,"63":10,"64":6,"65":1,"66":8,"71":6,"74":8,"84":2,"85":7,"88":3,"105":21,"121":7,"122":16,"145":10,"148":2,"150":2,"153":1,"171":4,"172":1,"177":2,"184":1,"185":2,"186":2,"189":7,"191":8,"192":2,"193":2,"197":1}}],["75",{"2":{"84":2,"90":1,"107":1,"134":1}}],["78",{"2":{"58":1}}],["749907",{"2":{"196":1}}],["74",{"2":{"58":1}}],["72",{"2":{"58":1}}],["726711609794",{"2":{"15":1}}],["76",{"2":{"58":1}}],["76085",{"2":{"15":1}}],["768946",{"2":{"7":2,"10":3,"73":1,"74":1,"117":1,"118":1}}],["70440582002419",{"2":{"191":1}}],["704405820024185",{"2":{"191":3}}],["704377648755",{"2":{"15":2}}],["700",{"2":{"14":1}}],["700454",{"2":{"10":1,"179":1,"180":1}}],["701141",{"2":{"10":1,"179":1,"180":1}}],["70",{"2":{"10":20,"58":1,"179":20,"180":20,"191":20}}],["738281",{"2":{"7":2,"10":3,"73":1,"74":1,"117":1,"118":1}}],["7",{"2":{"5":10,"10":5,"122":1,"150":2,"153":1,"175":4,"176":4,"185":4,"193":1}}],["65533525026046",{"2":{"191":1}}],["655335250260467",{"2":{"191":3}}],["659942",{"2":{"10":1,"179":1,"180":1}}],["6378137",{"2":{"158":1}}],["6371008",{"2":{"158":1}}],["639343",{"2":{"10":1,"179":1,"180":1}}],["6area",{"2":{"63":2}}],["66",{"2":{"58":1}}],["668869",{"2":{"10":1,"179":1,"180":1}}],["64744840486518",{"2":{"193":3}}],["64",{"2":{"58":1,"175":2,"176":2}}],["646209",{"2":{"10":1,"179":1,"180":1}}],["629",{"2":{"192":1}}],["62",{"2":{"58":1}}],["624923",{"2":{"10":1,"179":1,"180":1}}],["61366192682",{"2":{"15":1}}],["614624",{"2":{"10":1,"179":1,"180":1}}],["605000000000004",{"2":{"175":2}}],["60",{"2":{"58":1,"175":2}}],["60000",{"2":{"15":3}}],["609817",{"2":{"10":1,"179":1,"180":1}}],["603637",{"2":{"10":2,"179":2,"180":2}}],["68",{"2":{"58":1}}],["682601",{"2":{"10":1,"179":1,"180":1}}],["683975",{"2":{"10":1,"179":1,"180":1}}],["69159119078359",{"2":{"193":3}}],["694274",{"2":{"10":1,"179":1,"180":1}}],["697021",{"2":{"10":1,"179":1,"180":1}}],["6",{"2":{"5":24,"7":8,"10":23,"70":3,"75":3,"121":4,"122":1,"150":6,"153":3,"180":1,"185":9,"193":2}}],["51695367760999",{"2":{"193":1}}],["516953677609987",{"2":{"193":2}}],["51030066635026",{"2":{"191":4}}],["5e6",{"2":{"192":2}}],["55715336218991",{"2":{"193":1}}],["557153362189904",{"2":{"193":2}}],["55",{"2":{"191":3}}],["55494217175954",{"2":{"191":4}}],["57",{"2":{"175":4,"176":4}}],["57725",{"2":{"15":2}}],["5x",{"2":{"153":1}}],["563198",{"2":{"74":1}}],["56",{"2":{"58":1}}],["54",{"2":{"58":1,"191":19}}],["50",{"2":{"58":1,"175":4,"176":4,"191":3}}],["500000",{"2":{"192":1}}],["50000",{"2":{"15":1}}],["500",{"2":{"14":1,"192":1}}],["5d",{"2":{"25":1,"27":1}}],["52",{"2":{"58":1,"196":1}}],["52521",{"2":{"15":1}}],["52709",{"2":{"15":2}}],["594711",{"2":{"10":1,"179":1,"180":1}}],["590591",{"2":{"10":1,"179":1,"180":1}}],["595397",{"2":{"10":1,"179":1,"180":1}}],["535",{"2":{"175":4}}],["5355",{"2":{"175":2}}],["53333",{"2":{"15":4}}],["53",{"2":{"10":10,"175":2,"189":10}}],["58",{"2":{"58":1}}],["58059",{"2":{"15":2}}],["587158",{"2":{"10":2,"179":2,"180":2}}],["58375366067548",{"2":{"10":2,"73":1,"74":1}}],["584961",{"2":{"7":2,"10":3,"73":1,"74":1,"117":1,"118":1}}],["5",{"2":{"5":58,"7":8,"8":16,"10":84,"13":1,"58":1,"68":5,"69":8,"70":16,"75":18,"84":8,"88":8,"121":4,"122":1,"146":1,"150":4,"153":2,"175":1,"176":1,"185":27,"191":32,"192":25,"200":1}}],["358421",{"2":{"196":1}}],["3585",{"2":{"175":1}}],["35",{"2":{"58":3}}],["354492",{"2":{"7":2,"10":3,"73":1,"74":1,"117":1,"118":1}}],["38042741557976",{"2":{"191":1}}],["380427415579764",{"2":{"191":3}}],["38",{"2":{"58":3}}],["3655999675063154",{"2":{"191":1}}],["36",{"2":{"58":2}}],["360",{"2":{"56":1}}],["36022",{"2":{"15":1}}],["327284472232776",{"2":{"193":3}}],["32610",{"2":{"192":3}}],["32",{"2":{"58":3}}],["377956",{"2":{"196":1}}],["37",{"2":{"58":5}}],["3497142366876638",{"2":{"191":1}}],["34",{"2":{"58":3}}],["31571636123306385",{"2":{"191":1}}],["31",{"2":{"58":2}}],["30151010318639",{"2":{"191":4}}],["30527612515520186",{"2":{"191":4}}],["300",{"2":{"84":1}}],["30",{"2":{"14":2,"58":3,"191":2}}],["3376428491230612",{"2":{"191":4}}],["3390",{"2":{"122":1}}],["33333333333",{"2":{"15":1}}],["333333333336",{"2":{"15":3}}],["33",{"2":{"10":20,"179":20,"180":20}}],["3d",{"2":{"8":2,"10":1,"59":2,"88":1,"156":1,"174":1}}],["3",{"2":{"5":26,"7":8,"9":2,"10":31,"14":2,"59":13,"62":6,"64":1,"70":6,"75":5,"87":1,"91":1,"104":1,"108":1,"120":1,"122":2,"135":1,"146":7,"150":6,"153":3,"158":2,"169":16,"175":4,"180":3,"182":2,"184":1,"185":11,"192":1,"193":1,"198":1}}],["39945867303846",{"2":{"193":3}}],["3995734698458635",{"2":{"191":1}}],["399918",{"2":{"10":2,"179":2,"180":2}}],["394759",{"2":{"10":1,"179":1,"180":1}}],["392466",{"2":{"10":1,"179":1,"180":1}}],["395332",{"2":{"10":1,"179":1,"180":1}}],["39",{"0":{"30":1},"2":{"0":1,"2":2,"4":1,"7":2,"8":10,"10":22,"17":2,"18":1,"19":1,"23":1,"29":1,"32":1,"52":1,"53":1,"56":1,"57":1,"58":3,"59":2,"62":6,"63":3,"64":28,"66":1,"68":1,"69":1,"71":1,"73":4,"74":1,"76":2,"81":2,"85":4,"88":7,"93":1,"103":2,"110":2,"121":1,"122":19,"124":2,"127":2,"146":3,"148":2,"153":5,"154":4,"156":4,"159":2,"160":3,"166":6,"168":1,"175":6,"176":1,"178":1,"180":2,"188":6,"190":1,"191":6,"192":6,"193":4,"194":4,"195":5,"197":1,"199":1,"200":2}}],["1st",{"2":{"74":6}}],["198232937815632",{"2":{"193":1}}],["19823293781563178",{"2":{"193":2}}],["1999466709331708",{"2":{"191":1}}],["1998",{"2":{"70":1,"73":1,"75":1}}],["19",{"2":{"58":2,"122":2}}],["11591614996189725",{"2":{"191":1}}],["11966707868197",{"2":{"191":1}}],["119667078681967",{"2":{"191":3}}],["110m",{"2":{"192":2}}],["110",{"2":{"80":1,"192":1}}],["11",{"2":{"15":2,"58":2,"122":1}}],["1145",{"2":{"70":1,"73":1,"75":1}}],["114",{"2":{"0":1}}],["16589608273778408",{"2":{"191":1}}],["165644",{"2":{"145":2}}],["16692537029320365",{"2":{"191":4}}],["166644",{"2":{"145":2}}],["163434",{"2":{"145":2}}],["169356",{"2":{"145":2}}],["164434",{"2":{"145":2}}],["16111",{"2":{"15":1}}],["16",{"2":{"13":1,"14":1,"58":2,"122":2}}],["18593721105",{"2":{"15":1}}],["18",{"2":{"13":1,"14":1,"58":3,"122":2}}],["180",{"2":{"10":2,"56":1,"145":1,"158":2}}],["13309630561615",{"2":{"193":3}}],["13401805979",{"2":{"15":2}}],["13",{"2":{"10":3,"58":1,"70":1,"75":2,"122":1}}],["10n",{"2":{"192":1}}],["10832215707812454",{"2":{"191":4}}],["10^9",{"2":{"13":1}}],["1000000",{"2":{"192":1}}],["1000",{"2":{"13":2,"175":2,"192":1,"198":2}}],["100",{"2":{"10":2,"14":3,"79":1,"81":1,"146":2,"196":1}}],["10",{"2":{"10":12,"11":1,"52":1,"58":5,"68":4,"69":10,"70":2,"73":1,"75":2,"87":2,"120":2,"122":3,"176":1,"180":4,"191":1}}],["14182952335953",{"2":{"193":1}}],["14182952335952814",{"2":{"193":2}}],["14404531208901e",{"2":{"193":2}}],["1499775010124783",{"2":{"191":1}}],["1464721641710074",{"2":{"191":4}}],["14",{"2":{"7":2,"10":5,"58":2,"73":2,"74":2,"117":1,"118":1,"122":1,"175":2,"176":2}}],["15488729606723",{"2":{"193":3}}],["15",{"2":{"7":2,"10":4,"58":1,"68":1,"69":1,"73":1,"74":1,"117":1,"118":1,"122":1}}],["17893116483784577",{"2":{"193":2}}],["17289902010158",{"2":{"191":1}}],["172899020101585",{"2":{"191":3}}],["170356",{"2":{"145":2}}],["17",{"2":{"7":2,"10":3,"58":3,"73":1,"74":1,"117":1,"118":1,"122":2}}],["125",{"2":{"10":2,"73":1,"74":1}}],["127",{"2":{"7":2,"10":3,"73":1,"74":1,"117":1,"118":1,"192":1}}],["123",{"2":{"7":2,"10":3,"73":1,"74":1,"117":1,"118":1}}],["12636633117296836",{"2":{"193":2}}],["126",{"2":{"7":2,"10":3,"73":1,"74":1,"117":1,"118":1}}],["12",{"2":{"7":2,"10":5,"58":2,"73":1,"74":1,"117":1,"118":1,"122":1,"199":1}}],["124",{"2":{"7":2,"10":3,"73":1,"74":1,"117":1,"118":1}}],["1",{"2":{"5":16,"7":76,"10":64,"13":1,"14":4,"15":1,"52":7,"55":4,"56":15,"57":2,"58":11,"59":16,"62":4,"63":7,"64":72,"65":9,"66":15,"68":1,"69":10,"71":3,"74":9,"75":4,"76":11,"81":6,"84":7,"85":6,"88":16,"90":2,"91":6,"93":2,"94":2,"103":2,"104":8,"105":12,"107":2,"108":5,"121":6,"122":38,"124":4,"125":5,"127":1,"134":2,"135":6,"145":16,"146":27,"150":4,"153":6,"154":3,"156":1,"162":12,"163":2,"170":9,"176":1,"177":4,"180":8,"182":15,"183":3,"184":15,"185":6,"189":9,"191":8,"192":44,"193":12,"194":1,"198":8,"199":3}}],["=>",{"2":{"153":2}}],["=float64",{"2":{"63":3,"73":1,"75":1}}],["=false",{"2":{"56":1}}],["=",{"2":{"5":10,"7":34,"8":14,"9":4,"10":62,"11":1,"13":19,"14":33,"15":18,"31":5,"32":7,"35":2,"36":2,"37":2,"38":2,"50":3,"52":6,"53":25,"55":4,"56":56,"58":35,"59":110,"60":3,"62":6,"63":36,"64":324,"65":6,"66":96,"68":7,"69":29,"70":21,"71":30,"73":18,"74":143,"75":21,"76":78,"79":6,"80":4,"81":14,"82":4,"84":15,"85":52,"87":7,"88":40,"90":7,"91":3,"93":4,"94":23,"95":3,"96":7,"97":14,"98":14,"99":4,"100":2,"101":2,"103":5,"104":3,"105":57,"107":7,"108":18,"109":3,"110":11,"111":17,"112":9,"113":3,"114":2,"115":2,"117":3,"118":3,"120":7,"121":40,"122":189,"124":3,"125":22,"126":3,"127":9,"128":14,"129":10,"130":6,"131":2,"132":2,"134":7,"135":22,"136":3,"137":11,"138":14,"139":14,"140":4,"141":2,"142":2,"145":32,"146":110,"148":1,"150":6,"153":40,"154":20,"155":4,"156":39,"158":3,"159":6,"160":2,"162":2,"163":4,"165":9,"167":1,"169":3,"170":30,"173":2,"175":16,"176":21,"177":18,"178":2,"179":5,"180":60,"181":11,"182":49,"183":7,"184":43,"185":2,"186":1,"188":3,"189":42,"191":45,"192":19,"193":13,"194":3,"195":4,"196":7,"198":12,"199":6,"200":2}}],["===",{"2":{"105":8,"145":4}}],["==",{"2":{"2":1,"19":1,"32":1,"53":2,"56":4,"59":9,"60":2,"63":1,"64":34,"66":30,"71":1,"74":20,"75":2,"76":1,"80":1,"84":1,"88":16,"121":2,"122":44,"145":3,"146":18,"153":2,"163":1,"165":1,"170":1,"173":1,"176":2,"180":1,"184":3}}],["utm",{"2":{"192":1}}],["utility",{"0":{"189":1},"2":{"59":1,"153":1,"154":1}}],["utils",{"0":{"184":1},"2":{"31":1}}],["u2",{"2":{"122":4}}],["u1",{"2":{"122":4}}],["update",{"2":{"64":6,"146":10}}],["updated",{"2":{"64":6,"156":3}}],["updates",{"2":{"59":1}}],["up",{"2":{"64":2,"74":1,"122":1,"129":1,"151":1,"169":1,"182":2,"191":2}}],["upper",{"2":{"10":1,"146":1,"198":1}}],["uv",{"2":{"59":1}}],["usage",{"2":{"199":1}}],["usable",{"2":{"157":1}}],["usa",{"0":{"80":1},"2":{"80":4,"180":15,"199":3}}],["us",{"2":{"53":1,"82":1,"192":1,"199":1}}],["usually",{"2":{"10":2,"26":2,"77":1,"153":1,"156":1,"158":1,"195":1}}],["usual",{"2":{"10":1,"163":1,"166":1}}],["usecases",{"2":{"25":1,"27":1}}],["uses",{"2":{"10":3,"77":1,"82":1,"122":1,"157":1,"158":1,"172":1,"176":1,"180":1,"195":1}}],["users",{"2":{"31":1,"148":1,"168":1}}],["user",{"2":{"10":12,"23":1,"63":1,"70":3,"73":3,"75":3,"153":1,"181":1,"182":1,"183":1,"197":1}}],["useful",{"2":{"10":10,"59":1,"146":1,"174":1,"177":1,"180":2,"188":1}}],["used",{"2":{"5":2,"9":2,"10":8,"53":1,"56":1,"57":1,"59":1,"63":2,"64":7,"66":1,"69":1,"74":1,"84":1,"85":1,"88":1,"121":1,"146":2,"150":2,"153":1,"154":1,"156":1,"159":1,"161":1,"177":1,"180":1,"182":2,"187":2,"192":1,"195":1,"197":2,"198":1}}],["use",{"2":{"5":4,"8":2,"9":2,"10":12,"11":1,"20":1,"23":1,"26":1,"59":1,"64":1,"76":1,"82":2,"105":2,"121":1,"146":1,"147":1,"150":2,"153":4,"154":3,"155":1,"158":2,"163":1,"171":1,"175":1,"177":1,"180":1,"182":2,"188":3,"191":1,"195":1,"197":2,"200":2}}],["using",{"0":{"192":1},"2":{"5":8,"8":2,"9":6,"10":12,"11":4,"13":4,"14":1,"15":1,"31":6,"32":1,"50":1,"52":2,"53":2,"55":1,"56":1,"58":4,"59":7,"60":3,"62":2,"63":1,"64":5,"65":2,"66":1,"68":2,"69":1,"71":3,"72":1,"74":4,"76":3,"79":1,"80":2,"81":1,"82":2,"84":2,"85":2,"87":2,"88":1,"90":2,"91":1,"93":2,"94":1,"101":1,"103":2,"104":1,"105":1,"107":2,"108":1,"115":1,"117":2,"118":1,"120":2,"121":1,"122":1,"124":2,"125":1,"132":1,"134":2,"135":1,"142":1,"145":1,"146":5,"147":1,"148":2,"150":2,"151":1,"153":4,"154":2,"155":1,"156":1,"160":1,"163":1,"166":1,"167":2,"170":1,"171":1,"172":1,"173":3,"175":1,"176":5,"177":1,"180":3,"182":1,"184":1,"185":4,"186":2,"188":2,"189":1,"190":4,"191":1,"193":1,"194":2,"196":1,"197":1,"198":4,"199":2}}],["until",{"2":{"146":3,"151":1,"182":1,"188":1}}],["unprocessed",{"2":{"64":1}}],["unknown",{"2":{"64":4,"66":15}}],["unknown=3",{"2":{"64":1}}],["unmatched",{"2":{"64":9,"66":26}}],["undef",{"2":{"56":2,"64":1,"181":1,"182":1,"184":2,"189":2}}],["understand",{"2":{"187":1}}],["under",{"2":{"53":2,"195":1}}],["undergrad",{"2":{"2":1}}],["unless",{"2":{"22":1,"64":1,"71":2,"74":2,"76":2,"153":1}}],["unlike",{"2":{"18":1,"187":1}}],["unstable",{"2":{"13":1,"153":1,"160":1}}],["unneeded",{"2":{"10":3,"64":1,"70":2,"73":2,"75":2}}],["unnecessary",{"2":{"10":3,"146":1,"181":1,"182":1,"183":1}}],["universal",{"2":{"192":1}}],["united",{"2":{"180":1}}],["unit",{"2":{"158":1}}],["unify",{"2":{"25":1,"27":1}}],["unique",{"2":{"10":2,"74":3,"166":2,"170":2}}],["unioning",{"2":{"76":1}}],["unionintersectingpolygons",{"2":{"4":1,"10":8,"70":1,"71":2,"73":1,"74":2,"75":1,"76":2,"166":2,"168":2,"169":1,"170":4}}],["unions",{"0":{"76":1},"2":{"18":1,"159":1}}],["union",{"0":{"36":1,"75":1},"2":{"4":1,"5":4,"7":4,"8":8,"10":22,"11":3,"23":2,"31":1,"32":1,"36":2,"53":1,"56":2,"59":1,"63":4,"64":7,"66":1,"73":2,"75":18,"76":30,"85":1,"88":8,"96":2,"97":4,"98":1,"100":2,"101":1,"110":2,"111":6,"114":2,"115":1,"121":4,"127":2,"128":4,"129":1,"131":2,"132":1,"137":2,"138":4,"139":1,"141":2,"142":1,"145":1,"146":5,"148":1,"150":4,"151":3,"153":3,"154":3,"159":4,"166":1,"168":1,"170":9,"177":4,"180":2,"181":3,"182":3,"183":3,"189":1}}],["unchanged",{"2":{"5":2,"10":2,"150":2,"153":1,"180":1}}],["unwrap",{"0":{"156":1},"2":{"4":1,"10":3,"156":17}}],["karnataka",{"2":{"199":1}}],["kbn",{"2":{"11":2}}],["k",{"2":{"10":1,"14":6,"59":1,"64":5,"122":5,"191":5,"193":5}}],["kernel",{"2":{"177":4}}],["keepat",{"2":{"75":1,"170":2}}],["keep",{"2":{"64":3,"146":1,"170":14,"175":1,"198":1}}],["keeping",{"2":{"10":1,"153":1,"171":1}}],["keys",{"2":{"146":4,"153":1}}],["key",{"2":{"10":1,"146":4,"153":2,"188":5}}],["keyword",{"0":{"155":1},"2":{"10":8,"23":1,"70":1,"73":1,"75":1,"153":1,"155":7,"167":2,"176":2,"188":4,"192":1,"193":1}}],["keywords",{"2":{"5":4,"8":2,"10":10,"122":2,"146":1,"153":1,"155":1,"167":1,"171":2,"172":3,"180":8,"181":1,"182":1,"183":1,"184":1,"186":2}}],["known",{"2":{"66":2}}],["know",{"2":{"10":3,"56":2,"64":1,"66":1,"70":1,"73":1,"74":2,"75":1,"76":1,"153":1,"198":1}}],["kwargs",{"2":{"32":2,"60":3,"66":1,"69":1,"70":3,"71":3,"73":4,"74":5,"75":3,"76":5,"165":2,"173":1,"176":1}}],["kwdef",{"2":{"31":1,"64":1,"158":2,"176":1,"181":1,"182":1,"183":1}}],["kw",{"2":{"5":2,"10":11,"122":10,"146":20,"150":2,"153":18,"154":3,"156":2,"171":3,"180":15,"183":1,"185":3,"186":3,"188":6}}],["kinds",{"2":{"23":1}}],["kind",{"2":{"2":1,"146":1,"197":1}}],["json",{"2":{"195":3}}],["jstep",{"2":{"88":3}}],["jstart",{"2":{"88":7}}],["joined",{"2":{"198":4}}],["joins",{"0":{"197":1},"1":{"198":1,"199":1,"200":1},"2":{"197":3}}],["joinpath",{"2":{"180":2}}],["join",{"2":{"153":1,"154":1,"197":4,"198":5,"200":1}}],["joining",{"2":{"10":2,"180":1,"197":1}}],["jpn",{"2":{"199":2}}],["jp",{"2":{"88":2}}],["jhole",{"2":{"88":2}}],["jh",{"2":{"76":5}}],["j+1",{"2":{"64":1,"146":1,"184":1}}],["j",{"2":{"64":24,"88":8,"105":9,"122":12,"145":2,"146":8,"184":2}}],["jet",{"2":{"58":1}}],["just",{"2":{"8":2,"10":1,"32":1,"63":1,"64":2,"74":4,"76":1,"81":1,"85":2,"146":1,"151":1,"153":2,"154":1,"157":1,"176":1,"197":1}}],["julialand",{"2":{"192":2}}],["julialines",{"2":{"52":1}}],["julialinearsegments",{"2":{"10":1}}],["julialinear",{"2":{"10":1}}],["juliahole",{"2":{"191":1}}],["juliaplot",{"2":{"192":2}}],["juliap1",{"2":{"191":1}}],["juliapoly",{"2":{"192":1}}],["juliapolygon3",{"2":{"192":1}}],["juliapolygon1",{"2":{"191":1}}],["juliapolygonize",{"2":{"10":1}}],["juliapolygon",{"2":{"10":1}}],["juliapoints",{"2":{"198":1}}],["juliapoint",{"2":{"191":1}}],["juliaxoffset",{"2":{"191":3,"193":1}}],["juliax",{"2":{"191":2}}],["juliaxrange",{"2":{"84":1}}],["julia$apply",{"2":{"186":1}}],["julia$threaded",{"2":{"167":1}}],["julia6",{"2":{"180":1}}],["julia```jldoctest",{"2":{"189":1}}],["julia```julia",{"2":{"146":1}}],["julia```",{"2":{"105":1,"159":1}}],["julia1",{"2":{"70":1,"73":1,"74":1,"75":1}}],["julia2",{"2":{"69":1}}],["juliabase",{"2":{"59":1,"85":4,"153":1,"188":1}}],["juliabarycentric",{"2":{"9":6,"10":3}}],["juliafig",{"2":{"191":1,"192":1}}],["juliafalse",{"2":{"145":1}}],["juliafunction",{"2":{"32":1,"35":1,"36":1,"37":1,"38":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"56":2,"59":3,"60":2,"63":1,"64":11,"66":2,"69":1,"71":1,"74":2,"76":1,"82":1,"85":8,"121":2,"122":6,"127":1,"147":1,"154":2,"156":4,"173":1,"176":1,"184":2}}],["juliafor",{"2":{"31":1,"153":1,"154":1}}],["juliaflexijoins",{"2":{"200":1}}],["juliaflipped",{"2":{"148":1}}],["juliaflip",{"2":{"10":1}}],["juliaflatten",{"2":{"10":1}}],["juliagi",{"2":{"11":2}}],["juliago",{"2":{"11":1,"52":1,"55":1,"65":1,"87":1,"90":1,"93":1,"103":1,"107":1,"117":1,"120":1,"124":1,"134":1,"197":1}}],["juliageopoly1",{"2":{"193":1}}],["juliageointerface",{"2":{"189":1}}],["juliageometry",{"2":{"82":1}}],["juliageo",{"2":{"10":2,"158":1}}],["juliageodesic",{"2":{"10":1}}],["juliageodesicsegments",{"2":{"10":1}}],["juliageos",{"2":{"10":1}}],["juliaweighted",{"2":{"10":1}}],["juliawithin",{"2":{"7":2,"10":1}}],["juliausing",{"2":{"10":1,"13":1,"14":1,"58":1,"175":2,"176":1,"179":1,"180":1,"194":1,"197":1}}],["juliaunion",{"2":{"10":1}}],["juliaunionintersectingpolygons",{"2":{"10":1,"166":1}}],["juliaunwrap",{"2":{"10":1,"156":6}}],["juliavisvalingamwhyatt",{"2":{"10":1}}],["juliaring3",{"2":{"192":1}}],["juliaring1",{"2":{"191":1}}],["juliar",{"2":{"191":2,"192":1,"193":1}}],["juliareconstruct",{"2":{"10":1}}],["juliarebuild",{"2":{"10":1}}],["juliareproject",{"2":{"5":2}}],["juliaradialdistance",{"2":{"10":1}}],["juliamy",{"2":{"200":1}}],["juliamultipoly",{"2":{"180":1}}],["juliamodule",{"2":{"31":1}}],["juliamonotonechainmethod",{"2":{"10":1}}],["juliameanvalue",{"2":{"10":1}}],["juliascatter",{"2":{"198":1}}],["juliasource",{"2":{"192":2}}],["juliasimplify",{"2":{"10":1,"180":3}}],["juliasigned",{"2":{"8":4,"10":2}}],["juliasegmentize",{"2":{"10":1}}],["julias1",{"2":{"10":1}}],["juliastruct",{"2":{"10":2}}],["juliaspherical",{"2":{"10":1}}],["juliadf",{"2":{"194":1}}],["juliadestination",{"2":{"192":1}}],["juliadouglaspeucker",{"2":{"10":1}}],["juliadifference",{"2":{"10":1}}],["juliadiffintersectingpolygons",{"2":{"10":1,"166":1}}],["juliadistance",{"2":{"8":2,"10":1}}],["juliadisjoint",{"2":{"7":2,"10":1}}],["juliaexport",{"2":{"51":1,"54":1,"57":1,"61":1,"67":1,"70":1,"73":1,"75":1,"83":1,"86":1,"89":1,"92":1,"102":1,"106":1,"116":1,"119":1,"123":1,"133":1,"143":1,"146":1,"148":1,"154":1,"158":1,"161":1,"164":1,"168":1,"172":1,"174":1,"180":1,"187":1}}],["juliaend",{"2":{"85":1}}],["juliaenforce",{"2":{"10":1}}],["juliaenum",{"2":{"10":2}}],["juliaembed",{"2":{"8":2,"10":1}}],["juliaequals",{"2":{"8":30,"10":15,"64":1}}],["juliaaccuratearithmetic",{"2":{"11":2}}],["juliaabstract",{"2":{"10":5,"165":2,"166":1,"176":1}}],["juliaangles",{"2":{"8":2,"10":1}}],["juliaarea",{"2":{"8":2,"10":1}}],["juliaapplyreduce",{"2":{"5":2,"10":1,"150":2}}],["juliaapply",{"2":{"5":2,"10":1,"18":1,"150":2}}],["juliacent",{"2":{"62":1}}],["juliacentroid",{"2":{"8":2,"10":3}}],["juliacut",{"2":{"10":1}}],["juliaclosedring",{"2":{"10":1,"166":1}}],["juliaconst",{"2":{"53":1,"56":1,"59":1,"64":1,"66":2,"85":1,"94":1,"108":1,"125":1,"135":1,"155":1}}],["juliaconvex",{"2":{"10":1,"82":1}}],["juliacontains",{"2":{"7":2,"10":1}}],["juliacoverage",{"2":{"10":1}}],["juliacovers",{"2":{"7":2,"10":1}}],["juliacoveredby",{"2":{"7":2,"10":1}}],["juliatrue",{"2":{"88":1,"91":1,"94":1,"104":1,"108":1,"118":1,"121":1,"125":1,"135":1,"145":1}}],["juliatraittarget",{"2":{"10":2,"159":1}}],["juliatransform",{"2":{"5":2,"10":1}}],["juliatuples",{"2":{"10":1}}],["juliat",{"2":{"10":1}}],["juliatouches",{"2":{"7":2,"10":1}}],["juliaoverlaps",{"2":{"7":18,"10":9}}],["juliainnerjoin",{"2":{"199":1}}],["juliaintersection",{"2":{"10":2}}],["juliaintersects",{"2":{"7":2}}],["juliaisconcave",{"2":{"10":1}}],["juliaisclockwise",{"2":{"10":1}}],["juliaimport",{"2":{"5":2,"7":18,"8":2,"10":18,"11":1,"32":1,"52":1,"55":1,"62":1,"65":1,"68":1,"79":1,"80":1,"81":1,"84":1,"87":1,"90":1,"93":1,"103":1,"107":1,"117":1,"120":1,"124":1,"134":1,"150":2,"162":2,"169":2,"175":1,"195":4,"196":1,"198":1,"199":1}}],["julia>",{"2":{"5":10,"10":7,"145":3,"185":7}}],["juliajulia>",{"2":{"5":4,"10":3}}],["julia",{"2":{"2":1,"7":2,"10":6,"15":1,"25":1,"27":1,"31":3,"32":2,"53":10,"56":4,"59":8,"63":19,"64":60,"66":18,"69":10,"70":6,"71":1,"73":5,"74":29,"75":6,"76":4,"77":1,"82":5,"84":1,"85":4,"88":15,"91":1,"95":1,"96":5,"97":1,"98":1,"99":2,"100":1,"101":1,"104":1,"105":3,"109":1,"110":3,"111":1,"112":1,"113":1,"114":1,"115":1,"118":1,"121":7,"122":50,"126":1,"127":3,"128":1,"129":1,"130":1,"131":1,"132":1,"136":1,"137":3,"138":1,"139":1,"140":2,"141":1,"142":1,"145":9,"146":40,"147":2,"153":44,"154":18,"156":11,"159":1,"160":1,"163":5,"165":1,"167":1,"170":3,"171":1,"172":1,"176":1,"177":2,"180":1,"181":2,"182":15,"183":3,"185":1,"186":1,"187":1,"188":4,"189":1,"190":2,"192":2,"195":2,"198":1}}],["jl`",{"2":{"82":1,"172":1,"188":1}}],["jlmethod",{"2":{"10":2}}],["jlobjecttype",{"2":{"10":2}}],["jlbinding",{"2":{"10":2}}],["jldocstring",{"2":{"10":2}}],["jldoctest",{"2":{"10":1}}],["jl",{"0":{"25":1,"31":1},"2":{"3":2,"5":20,"8":2,"10":16,"11":1,"22":2,"25":2,"27":2,"31":43,"32":1,"50":1,"53":1,"56":1,"59":1,"60":3,"63":1,"64":1,"66":1,"69":1,"71":1,"72":1,"74":1,"76":1,"77":3,"82":6,"85":1,"88":1,"91":1,"101":1,"104":1,"105":1,"115":1,"118":1,"121":1,"122":1,"132":1,"142":1,"145":2,"146":1,"147":1,"153":2,"154":1,"155":1,"156":2,"158":1,"160":2,"163":1,"166":1,"167":2,"170":1,"171":1,"172":4,"173":3,"174":1,"176":3,"177":2,"180":2,"184":1,"185":6,"186":2,"188":2,"189":1,"192":1,"197":1}}],["nselected",{"2":{"184":3}}],["nmax",{"2":{"184":2}}],["nice",{"2":{"182":1}}],["n+1",{"2":{"162":1}}],["nfeature",{"2":{"153":1,"154":1}}],["nkeys",{"2":{"146":8}}],["nc",{"2":{"122":13}}],["ncoord",{"2":{"88":2}}],["nl",{"2":{"122":11}}],["nhole",{"2":{"64":2,"70":2,"73":2,"75":2,"76":1,"88":2}}],["nbpts",{"2":{"64":2}}],["ngeom",{"2":{"63":1,"153":2,"154":1,"189":1}}],["nt",{"2":{"188":2}}],["ntasks",{"2":{"153":3,"154":3}}],["nthreads",{"2":{"153":2,"154":2}}],["nthe",{"2":{"60":1,"173":1,"176":1}}],["ntuple",{"2":{"59":3,"177":1}}],["n2",{"2":{"59":8,"88":10}}],["n1",{"2":{"59":8,"88":9}}],["np2",{"2":{"105":4}}],["npolygon",{"2":{"71":1,"88":3,"170":2}}],["npoints",{"2":{"56":6,"64":5,"122":3,"176":6,"182":7}}],["npoint",{"2":{"10":1,"52":1,"53":1,"56":2,"66":2,"81":2,"85":1,"88":6,"105":6,"122":6,"127":1,"145":2,"163":1,"176":3,"177":1,"180":14,"184":1,"189":13}}],["npts",{"2":{"64":6,"182":3}}],["np",{"2":{"53":2,"85":5}}],["null",{"2":{"32":1,"176":1}}],["numeric",{"2":{"11":1}}],["number=6",{"2":{"10":1,"179":1,"180":1}}],["number",{"2":{"10":11,"59":1,"64":2,"69":1,"77":1,"81":1,"84":1,"88":2,"122":2,"174":1,"175":1,"177":1,"180":2,"181":4,"182":7,"183":4,"184":12}}],["numbers",{"2":{"0":1,"10":1,"57":2,"59":1,"176":1}}],["naive",{"2":{"72":1}}],["napts",{"2":{"64":3}}],["navigate",{"0":{"26":1}}],["natearth2",{"2":{"192":1}}],["natural",{"2":{"180":1,"192":2,"197":1}}],["naturalearth",{"2":{"11":2,"80":2,"180":3,"192":1}}],["nature",{"2":{"146":1}}],["native",{"2":{"10":1,"147":1,"188":4,"195":1}}],["named",{"2":{"153":1}}],["namedtuple",{"2":{"22":2,"153":2,"188":2}}],["name",{"2":{"10":1,"31":4,"180":1,"188":1,"194":1,"195":2,"199":1}}],["namespaced",{"2":{"153":1}}],["names",{"2":{"10":1,"31":4,"153":3,"154":3,"188":1}}],["nan",{"2":{"2":1}}],["nodestatus",{"2":{"146":6}}],["nodes",{"2":{"64":1,"146":4}}],["node",{"2":{"64":26,"146":17}}],["nor",{"2":{"60":1,"173":1,"176":1}}],["normalized",{"2":{"59":1}}],["normalize",{"2":{"59":1}}],["norm",{"2":{"10":1,"59":22}}],["north",{"2":{"10":1,"66":12,"158":1}}],["now",{"2":{"10":1,"13":1,"25":1,"27":1,"52":1,"58":2,"59":4,"60":1,"64":1,"69":1,"76":1,"77":1,"85":1,"145":1,"146":2,"169":1,"174":1,"175":3,"176":1,"180":1,"191":5,"192":6,"193":2,"194":1,"195":3,"198":2}}],["no",{"2":{"10":6,"56":1,"59":2,"64":4,"70":1,"71":1,"73":1,"74":14,"75":1,"88":2,"94":3,"108":3,"122":2,"125":2,"127":1,"129":1,"130":2,"135":2,"137":1,"138":3,"139":3,"140":1,"146":2,"147":1,"148":1,"153":3,"174":1,"176":2,"177":1,"180":1,"188":1,"195":1}}],["nonzero",{"2":{"177":1}}],["none",{"2":{"10":4,"64":1,"69":1,"70":1,"73":1,"75":1,"76":1,"105":4,"107":1}}],["nondimensional",{"2":{"10":1,"176":1}}],["nonintersecting",{"2":{"10":1,"23":1,"166":1,"170":1}}],["non",{"2":{"7":4,"10":2,"22":1,"57":2,"64":15,"70":2,"71":1,"73":1,"74":4,"75":1,"76":2,"84":1,"121":2,"129":1,"151":1,"160":1}}],["note",{"2":{"8":8,"10":12,"19":1,"29":1,"53":2,"56":1,"59":1,"62":2,"63":2,"64":3,"66":1,"69":2,"71":3,"74":5,"76":3,"82":1,"85":1,"88":5,"120":1,"121":1,"122":1,"158":1,"160":1,"172":1,"177":1,"181":1,"182":2,"183":1,"192":2,"193":1}}],["not",{"0":{"147":1},"2":{"5":4,"7":16,"8":2,"10":18,"18":1,"19":1,"22":1,"24":1,"31":1,"53":1,"56":4,"59":4,"60":1,"62":1,"64":18,"69":1,"73":1,"74":7,"76":3,"81":1,"87":2,"88":4,"90":2,"91":1,"93":2,"94":2,"103":1,"104":2,"108":3,"110":5,"111":3,"112":2,"113":2,"120":1,"121":2,"122":5,"125":1,"134":2,"135":2,"137":1,"145":4,"146":2,"147":1,"150":2,"151":1,"152":1,"153":7,"154":4,"156":3,"158":1,"159":1,"160":1,"162":2,"165":2,"169":3,"171":1,"172":1,"173":1,"174":1,"176":2,"177":1,"187":1,"188":2,"192":1,"193":1,"197":1}}],["nothing`",{"2":{"71":2,"74":2,"76":2}}],["nothing",{"2":{"5":68,"8":2,"10":42,"15":3,"64":4,"69":1,"71":2,"73":1,"74":2,"76":2,"88":1,"122":1,"145":9,"146":3,"150":2,"153":3,"154":2,"156":3,"162":24,"165":1,"169":60,"173":1,"177":1,"180":2,"181":6,"182":6,"183":6,"184":1,"185":32,"189":7,"191":252,"192":16,"193":20}}],["ne",{"2":{"192":2}}],["net",{"2":{"165":2}}],["ness",{"2":{"156":1}}],["nesting",{"2":{"151":2}}],["nestedloopfast",{"2":{"200":1}}],["nested",{"2":{"5":4,"8":2,"10":5,"18":1,"56":1,"150":4,"151":2,"153":2,"154":2,"180":1,"186":1}}],["never",{"2":{"151":1,"181":1}}],["neumann",{"2":{"146":1}}],["neither",{"2":{"76":1}}],["neighborhood",{"2":{"146":2}}],["neighbor",{"2":{"64":27}}],["neighboring",{"2":{"10":6,"64":1,"180":1,"181":1,"182":1,"183":2}}],["nearly",{"2":{"195":1}}],["nearest",{"2":{"64":1,"74":2}}],["neatly",{"2":{"17":1}}],["nedge",{"2":{"64":2,"189":13}}],["nextnode",{"2":{"146":27}}],["nextnodes",{"2":{"146":6}}],["next",{"2":{"63":1,"64":81,"66":3,"69":4,"122":14,"146":3,"170":13,"182":5}}],["necessarily",{"2":{"10":1,"145":1,"171":1}}],["necessary",{"2":{"10":1,"151":1,"180":1}}],["newfeature",{"2":{"156":2}}],["newnodes",{"2":{"146":2}}],["new",{"2":{"10":1,"60":1,"64":58,"66":9,"70":3,"71":1,"76":16,"122":2,"146":4,"152":1,"153":21,"154":1,"165":3,"166":1,"168":1,"170":19,"177":8,"181":1,"182":2,"183":1,"193":1,"194":1,"199":1}}],["negative",{"2":{"8":6,"10":3,"52":2,"53":1,"57":2,"84":2,"85":3}}],["needs",{"2":{"63":1}}],["needing",{"2":{"8":2,"10":1,"17":1,"167":1}}],["need",{"2":{"5":2,"7":2,"8":4,"9":2,"10":5,"32":1,"59":2,"62":1,"64":2,"71":1,"81":1,"88":4,"103":1,"104":1,"122":1,"146":2,"148":1,"153":3,"154":1,"167":1,"184":1,"185":1,"192":1,"193":2,"200":2}}],["needed",{"2":{"5":4,"10":4,"56":1,"59":1,"64":4,"66":1,"70":1,"73":1,"75":1,"85":2,"122":5,"146":1,"153":1,"154":1,"165":1,"172":3,"193":1}}],["n",{"2":{"2":1,"10":1,"57":2,"59":36,"60":2,"64":51,"69":10,"75":4,"76":4,"122":11,"127":2,"145":6,"146":5,"162":1,"170":25,"173":2,"176":2,"177":3,"180":2,"184":7,"189":32}}],["4983491639274692e6",{"2":{"192":2}}],["4986507085647392e6",{"2":{"192":2}}],["497205585568957e6",{"2":{"192":2}}],["4976022389592e6",{"2":{"192":2}}],["4957639801366436e6",{"2":{"192":2}}],["4940253560034204e6",{"2":{"192":2}}],["4946113281484335e6",{"2":{"192":2}}],["491990928929295e6",{"2":{"192":2}}],["4904357734399722e6",{"2":{"192":2}}],["4926709788709967e6",{"2":{"192":2}}],["4962554647802354e6",{"2":{"192":2}}],["499984780817334e6",{"2":{"192":2}}],["4997392479570867e6",{"2":{"192":2}}],["4991939151049731e6",{"2":{"192":2}}],["4994001399837343e6",{"2":{"192":2}}],["4998500087497458e6",{"2":{"192":2}}],["49",{"2":{"146":1}}],["43541888381864",{"2":{"193":3}}],["4326",{"2":{"192":2,"193":3}}],["43787",{"2":{"15":1}}],["439295815226",{"2":{"15":1}}],["434306",{"2":{"10":1,"179":1,"180":1}}],["4896621210021754e6",{"2":{"192":2}}],["489271",{"2":{"10":4,"189":4}}],["4870405593989636e6",{"2":{"192":2}}],["4879072738504685e6",{"2":{"192":2}}],["484003",{"2":{"145":4}}],["482551",{"2":{"145":4}}],["48268",{"2":{"15":1}}],["48",{"2":{"58":1}}],["48001",{"2":{"15":1}}],["45",{"2":{"58":2,"145":12,"191":2}}],["450",{"2":{"13":1}}],["458369",{"2":{"10":2,"179":2,"180":2}}],["42004014766201",{"2":{"191":1}}],["420040147662014",{"2":{"191":3}}],["4219350464667047e",{"2":{"191":4}}],["42",{"2":{"13":1,"14":1,"58":3}}],["426283",{"2":{"10":1,"179":1,"180":1}}],["400",{"2":{"58":3}}],["40000",{"2":{"15":1}}],["40",{"2":{"14":1,"58":3}}],["406224",{"2":{"10":1,"179":1,"180":1}}],["404504",{"2":{"10":1,"179":1,"180":1}}],["41544701408748197",{"2":{"191":1}}],["41",{"2":{"58":1,"193":20}}],["41878",{"2":{"15":1}}],["414248",{"2":{"10":1,"179":1,"180":1}}],["419406",{"2":{"10":1,"179":1,"180":1}}],["4493927459900552",{"2":{"191":1}}],["44121252392",{"2":{"15":1}}],["44",{"2":{"14":1,"58":2}}],["442901",{"2":{"10":1,"179":1,"180":1}}],["446339",{"2":{"10":1,"179":1,"180":1}}],["477985",{"2":{"145":4}}],["47",{"2":{"58":3}}],["473835",{"2":{"10":1,"179":1,"180":1}}],["472117",{"2":{"10":2,"179":2,"180":2}}],["46525251631344455",{"2":{"191":1}}],["465816",{"2":{"10":1,"179":1,"180":1}}],["46",{"2":{"58":3}}],["468107",{"2":{"10":1,"179":1,"180":1}}],["464547",{"2":{"10":6,"189":6}}],["4",{"2":{"2":2,"5":22,"7":8,"10":15,"13":2,"14":1,"55":1,"66":1,"91":1,"104":1,"108":1,"122":2,"135":1,"145":1,"150":6,"153":3,"175":1,"182":1,"185":8,"192":20,"195":2,"196":1}}],["gdal",{"2":{"195":1}}],["gml",{"2":{"195":1}}],["gpkg",{"2":{"195":3}}],["gadm",{"2":{"199":4}}],["ga",{"2":{"192":3,"196":2}}],["gaps",{"2":{"146":1}}],["global",{"2":{"192":1}}],["globally",{"2":{"154":1,"158":1}}],["gft",{"2":{"190":1,"192":2}}],["gc",{"2":{"165":6}}],["g",{"2":{"53":3,"56":3,"60":1,"63":3,"66":3,"85":6,"151":1,"153":2,"156":4,"180":2,"189":2,"195":1}}],["gb",{"2":{"31":1}}],["guarantee",{"2":{"19":1,"30":1}}],["guaranteed",{"2":{"5":2,"10":1,"56":1,"150":2,"154":1}}],["grand",{"2":{"199":1}}],["grained",{"2":{"175":1}}],["grahamscanmethod",{"2":{"82":1}}],["graphics",{"2":{"10":1,"59":1}}],["great",{"2":{"191":1,"193":1,"195":1}}],["greater",{"2":{"10":1,"145":1,"177":1}}],["greiner",{"0":{"71":1,"74":1,"76":1},"2":{"64":3,"69":2,"70":1,"73":1,"75":1}}],["green",{"2":{"14":1,"192":1}}],["grid",{"2":{"10":1,"58":1,"66":4}}],["grouped",{"2":{"191":1}}],["groups",{"2":{"10":1,"146":1}}],["grouping",{"2":{"5":2,"10":1,"150":2,"154":3}}],["grows",{"2":{"10":1,"158":1}}],["g2",{"2":{"7":10,"10":5,"91":4,"94":12,"95":6,"96":9,"97":6,"98":6,"99":3,"100":4,"101":2,"104":3,"105":21,"108":10,"109":6,"110":10,"111":8,"112":4,"113":2,"114":4,"115":2,"125":10,"126":6,"127":10,"128":6,"129":5,"130":4,"131":4,"132":2,"135":10,"136":6,"137":9,"138":6,"139":6,"140":3,"141":4,"142":2}}],["g1",{"2":{"7":10,"8":2,"10":6,"91":4,"94":12,"95":6,"96":9,"97":6,"98":6,"99":3,"100":2,"101":4,"104":3,"105":21,"108":9,"109":6,"110":10,"111":8,"112":4,"113":2,"114":2,"115":4,"125":10,"126":6,"127":9,"128":6,"129":5,"130":4,"131":2,"132":4,"135":10,"136":6,"137":9,"138":6,"139":6,"140":3,"141":2,"142":4}}],["got",{"2":{"184":3}}],["goes",{"2":{"10":2,"145":2}}],["good",{"2":{"10":1,"59":1,"188":2,"193":1}}],["going",{"2":{"8":8,"10":5,"66":2,"81":1,"88":5,"145":1,"146":1,"190":1}}],["go",{"2":{"5":10,"7":34,"8":4,"10":43,"11":9,"13":1,"14":1,"15":6,"18":1,"31":2,"32":5,"35":1,"36":1,"37":1,"38":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":2,"52":1,"55":1,"59":1,"62":2,"65":1,"68":2,"69":2,"70":2,"73":2,"74":2,"75":2,"79":3,"80":2,"81":8,"82":2,"84":6,"87":1,"88":2,"90":2,"91":2,"93":1,"94":2,"103":2,"104":2,"105":1,"107":1,"108":2,"117":1,"118":2,"120":1,"121":2,"124":1,"125":2,"134":2,"135":2,"145":6,"146":2,"148":1,"150":4,"153":2,"156":1,"162":3,"169":3,"175":7,"176":8,"179":2,"180":49,"185":3,"188":1,"189":2,"190":1,"191":3,"193":1,"195":1,"196":3,"197":9,"198":2,"199":5,"200":1}}],["gif",{"2":{"182":1}}],["gives",{"2":{"199":1}}],["give",{"2":{"122":1,"195":1}}],["given",{"2":{"8":14,"10":21,"18":2,"29":1,"53":2,"55":1,"56":1,"63":3,"64":8,"66":3,"69":5,"70":1,"71":2,"73":1,"74":2,"75":1,"76":2,"85":8,"88":4,"90":1,"91":1,"94":1,"103":1,"104":1,"108":1,"117":1,"118":1,"122":7,"125":1,"127":1,"135":1,"148":1,"154":1,"165":5,"166":1,"169":1,"174":2,"176":2,"177":2,"183":1}}],["github",{"2":{"10":2,"82":1,"158":1}}],["gis",{"2":{"9":2,"10":1,"25":1,"27":1,"59":1}}],["gi",{"2":{"5":26,"7":84,"8":62,"10":125,"11":8,"13":15,"14":15,"15":8,"18":2,"31":1,"32":12,"35":3,"36":3,"37":3,"38":3,"40":2,"41":2,"42":2,"43":2,"44":2,"45":2,"46":2,"47":2,"48":2,"49":2,"50":3,"52":5,"53":21,"55":3,"56":30,"58":1,"62":5,"63":38,"64":34,"65":5,"66":17,"68":6,"69":13,"70":19,"71":16,"73":25,"74":24,"75":17,"76":36,"79":1,"80":1,"81":3,"82":4,"84":8,"85":42,"87":7,"88":99,"90":7,"91":3,"93":3,"94":4,"95":6,"96":12,"97":10,"98":7,"99":4,"100":8,"101":6,"103":3,"104":3,"105":21,"107":7,"108":2,"109":3,"110":12,"111":14,"112":4,"113":2,"114":8,"115":6,"117":5,"118":3,"120":7,"121":51,"122":59,"124":5,"125":3,"126":6,"127":15,"128":10,"129":7,"130":4,"131":8,"132":6,"134":7,"135":2,"136":6,"137":12,"138":10,"139":7,"140":4,"141":8,"142":6,"145":32,"146":15,"148":4,"150":18,"153":42,"154":25,"156":52,"159":9,"162":2,"163":10,"165":9,"167":1,"169":3,"170":8,"171":5,"175":6,"176":6,"177":12,"179":2,"180":34,"184":4,"185":9,"186":5,"189":55,"190":1,"191":21,"192":2,"193":2,"196":2,"198":5,"199":2}}],["gtrait",{"2":{"85":2}}],["gt",{"2":{"2":2,"3":1,"5":2,"10":2,"11":5,"64":3,"145":3,"150":2}}],["generic",{"2":{"22":1}}],["generation",{"2":{"180":2}}],["generated",{"2":{"31":1,"32":1,"50":1,"53":1,"56":1,"59":1,"60":1,"63":1,"64":1,"66":1,"69":1,"71":1,"72":1,"74":1,"76":1,"82":1,"85":1,"88":1,"91":1,"101":1,"104":1,"105":1,"115":1,"118":1,"121":1,"122":1,"132":1,"142":1,"145":1,"146":1,"147":1,"153":1,"154":1,"155":1,"156":1,"160":1,"163":1,"166":1,"167":1,"170":1,"171":1,"173":1,"177":1,"180":1,"184":1,"185":1,"186":1,"188":1,"189":1,"198":1}}],["generate",{"2":{"0":1,"13":2,"180":1,"198":2}}],["generalization",{"2":{"57":1}}],["generalized",{"2":{"10":1,"57":3,"59":1}}],["generalise",{"2":{"10":4,"180":1}}],["generally",{"2":{"10":2,"158":2,"188":3}}],["general",{"0":{"6":1,"8":1},"1":{"7":1,"8":1},"2":{"18":1,"20":1,"25":1,"27":1,"148":1,"154":1,"173":1}}],["getfeature",{"2":{"153":1,"154":1,"156":3,"189":5}}],["getcolumn",{"2":{"153":2,"154":2,"156":1}}],["getgeom",{"2":{"100":1,"101":1,"114":1,"115":1,"121":2,"131":1,"132":1,"141":1,"142":1,"153":3,"154":2,"156":3,"180":3,"189":6}}],["getring",{"2":{"64":1}}],["getindex",{"2":{"59":2}}],["gethole",{"2":{"53":1,"56":1,"63":1,"64":4,"66":1,"69":1,"70":2,"73":2,"76":6,"85":1,"88":2,"122":5,"163":1,"191":1}}],["getexterior",{"2":{"53":1,"56":1,"59":1,"63":1,"64":3,"66":1,"69":1,"70":2,"73":2,"75":3,"76":6,"85":1,"88":2,"122":5,"145":1,"146":1,"163":1,"191":1}}],["getpolygon",{"2":{"71":3,"74":2,"76":2,"88":3}}],["getpoint",{"2":{"52":2,"53":1,"55":1,"56":5,"59":1,"62":1,"63":6,"64":3,"65":2,"66":3,"68":3,"84":1,"85":6,"87":4,"88":13,"90":4,"93":1,"103":1,"105":7,"107":4,"117":2,"120":4,"121":2,"122":28,"124":2,"127":2,"134":4,"145":5,"163":3,"175":4,"177":2,"184":1,"189":3,"191":2}}],["getproperty",{"2":{"13":2,"14":1}}],["get",{"2":{"10":1,"13":1,"32":1,"52":1,"60":1,"64":9,"70":1,"71":1,"73":1,"74":2,"75":2,"82":2,"146":4,"153":3,"154":1,"173":1,"176":3,"180":1,"181":1,"183":1,"184":2,"188":5,"189":1,"191":2,"199":2}}],["geoparquet",{"2":{"195":4}}],["geopoly1",{"2":{"193":1,"194":1}}],["geopoly2",{"2":{"193":1,"194":1}}],["geoaxis",{"2":{"192":4,"196":1}}],["geointeface",{"2":{"151":1}}],["geointerace",{"2":{"22":1}}],["geointerfacemakie",{"2":{"179":1,"198":1,"199":1}}],["geointerface",{"0":{"30":1},"2":{"5":40,"7":18,"8":4,"10":41,"11":1,"13":1,"14":1,"15":1,"22":3,"25":1,"27":1,"30":1,"31":7,"52":1,"53":1,"55":1,"56":1,"59":23,"62":1,"63":1,"64":1,"65":1,"66":1,"68":1,"69":1,"70":1,"73":1,"74":1,"75":1,"79":1,"80":1,"81":1,"84":1,"85":11,"87":1,"88":2,"90":1,"91":2,"93":1,"94":2,"103":1,"104":2,"105":1,"107":1,"108":3,"117":1,"118":2,"120":1,"121":2,"124":1,"125":2,"134":1,"135":2,"145":5,"146":1,"150":6,"151":3,"153":11,"156":2,"162":9,"165":2,"166":1,"167":1,"169":23,"172":2,"175":1,"176":1,"179":1,"180":2,"185":13,"186":1,"189":1,"190":1,"191":122,"192":5,"193":9,"196":1,"198":1,"199":1}}],["geo",{"2":{"146":1,"176":4,"192":2}}],["geotable",{"2":{"29":1}}],["geojson",{"2":{"11":1,"180":2,"190":1,"192":4,"195":3}}],["geographic",{"2":{"10":1,"158":1,"192":1,"195":1}}],["geographiclib",{"2":{"10":1,"176":1}}],["geodataframes",{"2":{"195":3}}],["geodesy",{"2":{"158":1}}],["geodesic`",{"2":{"176":2}}],["geodesic",{"0":{"196":1},"2":{"4":1,"10":8,"31":1,"158":6,"175":6,"176":8,"177":1,"196":1}}],["geodesicsegments",{"2":{"4":1,"10":2,"174":1,"175":3,"176":6,"177":2,"196":1}}],["geod",{"2":{"10":2,"176":3}}],["geoformattypes",{"2":{"5":4,"172":2,"190":1,"192":2,"193":8}}],["geomakie",{"0":{"192":1},"2":{"190":2,"192":5,"196":2}}],["geomtype",{"2":{"153":2,"156":1}}],["geomfromgeos",{"2":{"32":1,"176":1}}],["geoms",{"2":{"10":1,"50":3,"82":1,"122":1,"153":12,"156":8}}],["geom2",{"2":{"7":16,"8":2,"10":9,"85":6,"88":1,"105":6,"108":1,"118":3,"121":6,"125":1,"135":2}}],["geom1",{"2":{"7":16,"8":2,"10":9,"85":6,"88":1,"105":4,"108":1,"118":3,"121":6,"125":1,"135":2}}],["geometrical",{"2":{"197":1}}],["geometric",{"2":{"25":2,"27":2,"62":1,"158":1}}],["geometries",{"0":{"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"191":1,"192":1,"193":1},"2":{"5":12,"7":16,"8":28,"10":63,"18":3,"20":1,"22":3,"25":2,"27":2,"29":4,"53":4,"55":1,"56":3,"63":1,"66":2,"69":1,"70":5,"73":5,"74":4,"75":5,"82":6,"84":1,"85":4,"87":1,"88":7,"91":1,"93":1,"94":1,"105":2,"108":2,"117":1,"118":1,"120":2,"121":3,"122":1,"124":2,"125":2,"135":2,"137":1,"148":1,"150":6,"152":2,"153":6,"154":3,"155":1,"156":5,"167":1,"172":2,"174":3,"175":1,"176":4,"177":1,"178":1,"181":1,"182":1,"183":1,"186":1,"189":1,"190":5,"192":1,"193":2,"194":2,"195":1,"197":5,"198":1,"200":1}}],["geometry=",{"2":{"194":1}}],["geometrybasics",{"2":{"31":3,"58":2,"59":10,"82":1,"84":1,"94":1,"125":1,"135":1}}],["geometrycolumns",{"2":{"153":5,"154":2,"156":1}}],["geometrycollections",{"2":{"197":1}}],["geometrycollection",{"2":{"23":1,"199":1}}],["geometrycollectiontrait",{"2":{"23":1,"32":1,"100":1,"101":1,"114":1,"115":1,"131":1,"132":1,"141":1,"142":1}}],["geometrycorrections",{"2":{"165":1}}],["geometrycorrection",{"2":{"4":1,"10":11,"163":2,"164":2,"165":17,"166":11,"170":4}}],["geometry",{"0":{"6":1,"73":1,"100":2,"101":2,"114":2,"115":2,"131":2,"132":2,"141":2,"142":2,"164":1,"172":1,"178":1,"190":1,"194":1},"1":{"7":1,"8":1,"165":1,"166":1,"173":1,"179":1,"180":1,"191":1,"192":1,"193":1,"194":1,"195":1},"2":{"2":1,"5":20,"7":48,"8":24,"10":74,"11":2,"18":4,"20":1,"23":3,"29":1,"31":1,"53":4,"56":7,"60":4,"63":3,"65":1,"66":4,"69":4,"80":1,"84":4,"85":6,"88":8,"90":5,"91":2,"93":4,"94":5,"95":4,"96":1,"100":3,"101":4,"103":4,"104":4,"105":3,"107":2,"108":5,"109":4,"110":2,"111":2,"114":3,"115":4,"117":2,"121":3,"122":2,"124":3,"125":4,"126":4,"127":2,"131":3,"132":4,"134":4,"135":5,"136":4,"141":3,"142":4,"144":1,"148":4,"150":6,"151":2,"153":28,"154":12,"156":8,"158":4,"162":1,"163":1,"164":2,"165":28,"166":6,"167":1,"171":1,"172":6,"174":3,"175":1,"176":5,"177":8,"180":6,"189":6,"191":1,"192":1,"193":4,"194":2,"195":2,"197":1,"198":7,"199":4,"200":2}}],["geometryopsprojext",{"2":{"172":1,"173":1,"176":1,"177":1}}],["geometryopslibgeosext",{"2":{"60":1}}],["geometryopscore`",{"2":{"31":1}}],["geometryopscore",{"2":{"4":17,"5":2,"10":15,"31":7,"150":2}}],["geometryops",{"0":{"4":1,"25":1,"31":1},"1":{"5":1,"6":1,"7":1,"8":1,"9":1,"10":1},"2":{"0":2,"4":122,"5":8,"7":27,"8":10,"9":3,"10":122,"11":1,"13":1,"14":1,"15":1,"17":2,"25":1,"26":4,"27":1,"31":1,"32":2,"52":1,"55":1,"58":5,"60":1,"62":1,"65":1,"68":1,"69":1,"70":1,"73":1,"74":1,"75":1,"77":1,"79":1,"80":1,"81":3,"84":1,"87":1,"88":1,"90":1,"91":2,"93":1,"94":2,"103":1,"104":2,"105":2,"107":1,"108":2,"117":1,"118":1,"120":1,"121":1,"124":1,"125":2,"134":1,"135":2,"145":3,"146":2,"150":4,"153":1,"157":2,"158":1,"162":1,"165":1,"166":4,"169":1,"173":1,"175":1,"176":2,"179":1,"180":2,"185":1,"187":1,"188":2,"189":1,"190":1,"191":3,"196":1,"197":1,"198":2,"199":2}}],["geom",{"2":{"5":14,"8":42,"10":48,"18":3,"31":12,"32":10,"35":5,"36":5,"37":5,"38":5,"40":4,"41":4,"42":4,"43":4,"44":4,"45":4,"46":4,"47":4,"48":4,"49":4,"53":17,"56":25,"63":28,"64":16,"66":6,"69":15,"70":8,"71":2,"73":12,"74":10,"75":9,"76":9,"85":28,"88":45,"94":4,"105":1,"108":4,"121":1,"122":3,"125":4,"135":4,"145":3,"146":1,"148":2,"150":8,"153":34,"154":13,"156":49,"170":11,"171":4,"177":13,"180":36,"184":3,"185":7,"186":4,"189":13,"199":6}}],["geospatial",{"0":{"193":1,"195":1},"2":{"190":5,"192":1,"193":3,"195":5}}],["geoscontext",{"2":{"176":1}}],["geosdensify",{"2":{"32":2,"176":3}}],["geos",{"0":{"188":1},"2":{"4":1,"10":6,"32":8,"33":1,"35":1,"36":1,"37":1,"38":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"60":4,"77":1,"81":4,"82":1,"178":5,"180":2,"187":1,"188":12}}],["human",{"2":{"195":1}}],["hull`",{"2":{"82":2}}],["hulls",{"2":{"10":1,"77":1,"82":1}}],["hull",{"0":{"50":1,"77":1,"79":1,"80":1},"1":{"78":1,"79":1,"80":1,"81":1,"82":1},"2":{"4":1,"10":8,"31":2,"50":1,"77":2,"79":4,"80":1,"81":10,"82":15}}],["hypot",{"2":{"177":1}}],["h2",{"2":{"122":6}}],["h1",{"2":{"122":11}}],["hm",{"2":{"58":2}}],["h",{"2":{"56":2,"64":2,"76":8}}],["href=",{"2":{"10":2}}],["https",{"2":{"10":2,"70":1,"73":1,"74":1,"75":1,"82":1,"122":2,"158":1,"182":1}}],["high",{"2":{"195":1}}],["highest",{"2":{"193":1}}],["higher",{"2":{"10":1,"82":1}}],["hit",{"2":{"64":1,"153":1,"154":1,"156":3}}],["hits",{"2":{"18":1}}],["hidedecorations",{"2":{"58":2}}],["hinter",{"2":{"31":3,"60":1,"173":1,"176":1}}],["hint",{"2":{"31":3,"60":1,"176":1}}],["hinge=2",{"2":{"73":1}}],["hinge`",{"2":{"73":1}}],["hinge",{"2":{"10":1,"64":1,"74":13,"122":15}}],["hist",{"2":{"13":1}}],["histogram",{"2":{"13":1}}],["hcat",{"2":{"10":1}}],["halign",{"2":{"180":1}}],["half",{"2":{"65":2}}],["hail",{"2":{"163":1}}],["handling",{"0":{"173":1},"2":{"148":1}}],["handler",{"2":{"60":1,"173":1}}],["handle",{"2":{"31":1,"145":1,"151":2,"153":1,"192":1}}],["handled",{"2":{"18":1}}],["hao",{"2":{"122":1}}],["had",{"2":{"70":1,"73":1,"88":1,"160":1,"175":1}}],["happens",{"2":{"64":1}}],["happen",{"2":{"24":1,"153":1}}],["have",{"2":{"7":6,"8":18,"10":18,"19":1,"23":1,"33":1,"53":3,"56":2,"59":6,"60":1,"64":4,"74":1,"82":2,"84":1,"85":2,"88":10,"120":1,"121":3,"122":5,"124":1,"125":1,"146":1,"147":1,"148":2,"152":1,"153":1,"154":2,"156":2,"158":2,"160":1,"180":1,"182":1,"188":1,"191":1,"192":1,"197":1,"198":1,"199":3}}],["haskey",{"2":{"153":1,"188":1}}],["hash",{"2":{"146":1}}],["hasn",{"2":{"146":1}}],["hassle",{"2":{"5":2,"10":1,"185":1}}],["has",{"2":{"5":8,"10":4,"52":2,"55":1,"59":2,"64":2,"71":2,"74":1,"76":1,"84":1,"85":1,"88":11,"127":1,"145":1,"150":8,"153":6,"161":1,"175":2,"184":1,"192":1}}],["hours",{"2":{"199":1}}],["hood",{"2":{"195":1}}],["hook",{"2":{"10":1,"180":1}}],["home",{"2":{"192":1}}],["horizontal",{"2":{"66":1,"74":1,"146":1,"180":1}}],["hormann",{"0":{"71":1,"74":1,"76":1},"2":{"10":2,"59":2,"64":3,"69":2,"70":1,"73":1,"75":1}}],["how",{"0":{"26":1},"2":{"10":2,"26":2,"52":1,"59":1,"64":1,"74":1,"88":1,"146":2,"156":1,"171":1,"180":1,"192":1,"195":1,"197":2,"198":2,"199":1,"200":1}}],["however",{"2":{"7":2,"10":2,"56":1,"59":1,"63":1,"64":1,"74":1,"81":1,"84":1,"88":1,"90":1,"104":1,"168":1}}],["hole",{"2":{"53":3,"56":1,"58":2,"59":9,"63":4,"64":60,"66":3,"70":6,"73":2,"76":15,"85":3,"97":1,"98":1,"99":1,"122":33,"146":5,"163":2,"191":1}}],["holes=",{"2":{"64":1}}],["holes",{"2":{"2":2,"8":6,"9":2,"10":4,"52":1,"56":2,"59":2,"63":1,"64":19,"69":4,"70":2,"73":2,"75":6,"76":29,"85":3,"88":3,"113":1,"122":11,"137":1,"146":17,"163":2,"191":4}}],["holding",{"2":{"10":1,"146":1,"153":2}}],["hold",{"2":{"10":1,"146":1,"160":1,"180":1,"195":1}}],["holds",{"2":{"10":1,"64":1,"159":2,"178":1}}],["heavily",{"2":{"153":1}}],["heatmap",{"2":{"13":5,"14":6,"58":2,"84":2,"146":1}}],["helpers",{"0":{"64":1},"2":{"105":1,"121":1}}],["helper",{"0":{"71":1,"74":1,"76":1},"2":{"63":1,"64":1,"69":1}}],["helps",{"2":{"30":1}}],["help",{"2":{"10":1,"158":1,"160":1}}],["held",{"2":{"5":2,"10":1,"150":2,"153":1}}],["here",{"2":{"2":1,"10":3,"13":1,"14":1,"20":1,"59":1,"74":1,"82":2,"105":1,"146":2,"153":2,"156":4,"158":1,"162":1,"176":1,"192":2,"197":5,"198":3}}],["vw",{"2":{"180":3}}],["von",{"2":{"146":1}}],["v2",{"2":{"122":9}}],["v1",{"2":{"122":9}}],["v`",{"2":{"59":2}}],["vcat",{"2":{"56":1,"59":1,"153":1}}],["vararg",{"2":{"59":1}}],["varying",{"2":{"158":1}}],["vary",{"2":{"56":1}}],["var",{"2":{"31":2}}],["variables",{"2":{"24":1,"59":8,"91":1,"104":1,"118":1}}],["variable",{"2":{"24":1,"71":2}}],["vals",{"2":{"182":9}}],["valign",{"2":{"180":1}}],["valid",{"2":{"5":2,"10":8,"63":1,"70":2,"73":2,"74":3,"75":2,"146":1,"161":3,"162":1,"168":1,"169":1,"184":1,"185":1}}],["validated",{"2":{"71":2,"74":2,"76":2}}],["validate",{"2":{"2":1}}],["val",{"2":{"56":2,"64":2,"74":8,"121":4,"122":30}}],["values=",{"2":{"146":2}}],["values=sort",{"2":{"146":1}}],["values",{"2":{"5":2,"9":6,"10":16,"56":2,"58":3,"59":40,"63":2,"64":5,"66":5,"74":1,"85":2,"122":4,"146":19,"150":2,"153":2,"160":1,"182":2,"184":1}}],["value",{"2":{"4":1,"8":14,"9":4,"10":15,"14":1,"24":1,"32":2,"52":2,"53":4,"56":1,"59":45,"64":5,"66":2,"74":7,"84":1,"85":3,"146":6,"153":2,"182":11,"188":2,"197":1}}],["vs",{"0":{"15":1},"2":{"12":1,"74":2}}],["vᵢ",{"2":{"10":1}}],["v0",{"2":{"10":2}}],["v",{"2":{"9":4,"10":6,"14":4,"59":23,"85":8}}],["visvalingam",{"2":{"178":1}}],["visvalingamwhyatt",{"0":{"183":1},"2":{"4":1,"10":3,"180":4,"183":5}}],["visualized",{"2":{"162":1}}],["visualize",{"2":{"117":1,"192":1}}],["visa",{"2":{"64":1}}],["visited",{"2":{"64":4}}],["view",{"2":{"64":2,"82":1,"146":1,"170":1,"182":3,"199":1}}],["viewport",{"2":{"14":1}}],["views",{"2":{"5":2,"64":1,"75":1,"172":1}}],["via",{"2":{"10":1,"60":1,"77":1,"147":1,"173":1,"176":1,"188":2}}],["vec",{"2":{"82":2}}],["vect",{"2":{"156":2}}],["vectypes",{"2":{"59":5}}],["vector",{"2":{"5":24,"8":12,"9":2,"10":46,"18":1,"23":1,"29":1,"55":1,"56":10,"59":14,"64":7,"69":6,"70":4,"71":1,"73":2,"74":3,"75":4,"121":2,"122":1,"145":3,"146":4,"148":1,"150":2,"153":4,"154":3,"162":8,"163":1,"169":22,"174":1,"175":1,"177":1,"181":1,"182":4,"183":1,"184":2,"185":10,"189":15,"191":18,"192":6,"193":9}}],["vectors",{"2":{"5":2,"8":4,"10":5,"22":1,"56":4,"59":3,"64":1,"82":1,"85":1,"144":1,"146":1,"150":2,"153":1,"156":1,"180":1}}],["ve",{"2":{"17":1,"177":1}}],["version",{"2":{"188":1}}],["versa",{"2":{"64":1}}],["vert",{"2":{"184":21}}],["verts",{"2":{"180":2}}],["vertical",{"2":{"58":1,"66":1,"74":1,"146":1}}],["vertices",{"2":{"2":1,"10":7,"57":4,"59":5,"64":1,"69":2,"82":1,"96":1,"98":5,"107":1,"110":3,"113":1,"122":1,"137":1,"162":1,"174":2,"175":1,"176":3,"177":3,"180":1,"183":1}}],["vertex",{"2":{"9":2,"10":2,"56":1,"57":2,"59":2,"64":19,"74":12,"81":1,"96":2,"111":2,"112":1,"122":1,"137":3}}],["very",{"2":{"4":1,"175":1,"199":2}}],["vein",{"2":{"0":1}}],["phi``",{"2":{"158":1}}],["physics",{"2":{"10":1,"158":1}}],["psa",{"2":{"153":1,"154":1}}],["pb",{"2":{"105":2}}],["p0",{"2":{"85":9}}],["p3",{"2":{"64":8,"183":4}}],["ptm",{"2":{"145":3}}],["ptj",{"2":{"145":5}}],["pti",{"2":{"145":3}}],["ptrait",{"2":{"85":2}}],["pts",{"2":{"64":22,"69":7}}],["pt",{"2":{"64":114,"69":2,"74":26,"122":8,"182":4}}],["pt2",{"2":{"64":14,"74":2}}],["pt1",{"2":{"64":18,"74":2}}],["pn",{"2":{"127":3}}],["pn2",{"2":{"64":4}}],["pn1",{"2":{"64":4}}],["pfirst",{"2":{"53":3}}],["pu",{"2":{"198":2}}],["purpose",{"2":{"153":1}}],["pure",{"2":{"10":1,"82":1,"146":1}}],["purely",{"2":{"10":1,"18":1,"176":1}}],["push",{"2":{"64":15,"69":5,"70":2,"73":2,"74":2,"75":4,"76":5,"146":3,"163":1,"177":3,"182":3}}],["pulling",{"2":{"82":1}}],["pull",{"2":{"25":1,"27":1}}],["public",{"2":{"24":1}}],["pick",{"2":{"192":2}}],["piece",{"2":{"64":6,"170":6}}],["pieces",{"2":{"64":12,"69":1,"71":2,"75":4,"122":1,"170":9}}],["pi",{"2":{"13":2}}],["pixels",{"2":{"146":1}}],["pixel",{"2":{"10":2,"146":7}}],["pythagorean",{"2":{"85":1}}],["py",{"2":{"13":2,"14":2}}],["px",{"2":{"13":2,"14":2}}],["pl",{"2":{"198":2}}],["plt",{"2":{"191":1}}],["please",{"2":{"64":1}}],["place",{"2":{"74":1,"197":1}}],["placement",{"2":{"64":1}}],["plan",{"2":{"174":1}}],["plane",{"2":{"59":1,"158":2,"196":1}}],["planar",{"2":{"10":1,"158":1}}],["plottable",{"2":{"146":1}}],["plotted",{"2":{"62":1}}],["plotting",{"0":{"191":1},"2":{"10":1,"146":1,"174":1,"177":1,"190":1,"191":4,"192":1}}],["plots",{"2":{"58":2}}],["plot",{"0":{"192":1},"2":{"13":1,"58":3,"79":2,"80":1,"81":1,"87":1,"120":1,"146":1,"176":2,"180":4,"190":2,"191":9,"192":5,"193":1,"195":1,"198":1}}],["plus",{"2":{"9":2,"10":1,"59":1}}],["peucker",{"2":{"178":2,"180":3,"182":2}}],["peaks",{"2":{"146":2}}],["peculiarities",{"0":{"21":1},"1":{"22":1,"23":1,"24":1}}],["persist",{"2":{"153":1}}],["performs",{"2":{"59":1,"154":1,"177":1}}],["perform",{"2":{"26":1,"58":1,"59":2,"64":1,"148":1,"154":1,"197":3,"198":2,"200":1}}],["performing",{"2":{"10":3,"23":1,"59":1,"70":1,"73":1,"75":1,"198":1}}],["performed",{"2":{"10":1,"158":1,"198":1}}],["performance",{"2":{"8":2,"10":2,"22":1,"146":1,"167":1,"168":1,"180":1,"195":1}}],["per",{"2":{"9":4,"10":2,"58":1,"59":2,"64":5,"146":1,"153":2,"154":2,"177":1}}],["people",{"2":{"2":1}}],["p2y",{"2":{"189":3}}],["p2x",{"2":{"189":3}}],["p2box",{"2":{"58":1}}],["p2",{"2":{"7":4,"8":4,"10":6,"15":12,"53":9,"56":12,"64":18,"66":19,"75":2,"81":1,"85":15,"88":11,"94":2,"103":2,"121":2,"122":12,"145":3,"175":1,"183":4,"189":3,"191":2}}],["p1y",{"2":{"189":3}}],["p1x",{"2":{"189":3}}],["p1",{"2":{"7":6,"8":4,"10":7,"15":12,"53":8,"56":21,"58":4,"64":9,"66":25,"68":1,"75":2,"81":2,"85":15,"88":14,"93":5,"94":3,"103":5,"121":2,"122":4,"127":3,"145":3,"183":4,"189":3,"191":1}}],["pay",{"2":{"154":1}}],["paper",{"2":{"122":2}}],["pa",{"2":{"105":2}}],["pathof",{"2":{"180":2}}],["paths",{"0":{"196":1},"2":{"160":1,"196":2}}],["path",{"2":{"52":3,"192":2}}],["parquet",{"2":{"195":3}}],["parent",{"2":{"160":1}}],["parse",{"2":{"121":1,"122":1}}],["part",{"2":{"66":2,"76":2,"122":3,"152":1}}],["partition",{"2":{"153":2,"154":2}}],["partialsort",{"2":{"184":1}}],["partial",{"2":{"66":4}}],["partially",{"2":{"64":2,"76":2}}],["particularly",{"2":{"59":1}}],["particular",{"2":{"30":1,"56":1,"146":1,"192":2}}],["parallel",{"2":{"122":1,"145":1}}],["paradigm",{"0":{"29":1}}],["paradigms",{"0":{"17":1},"1":{"18":1,"19":1,"20":1},"2":{"17":2,"20":1}}],["parametrized",{"2":{"158":1}}],["parameters",{"2":{"10":1,"156":1,"159":2}}],["parameter",{"2":{"10":2,"159":3}}],["parameterized",{"2":{"10":1,"158":1}}],["params",{"2":{"10":2,"188":10}}],["parlance",{"2":{"9":2,"10":2,"59":1,"158":1}}],["passes",{"2":{"66":2,"122":1}}],["passed",{"2":{"5":4,"10":7,"82":1,"146":1,"156":2,"172":1,"176":2,"185":1,"188":2,"200":1}}],["passable",{"2":{"59":18}}],["passing",{"2":{"18":1,"153":1,"178":1}}],["pass",{"2":{"9":2,"10":4,"18":1,"59":1,"91":1,"104":1,"118":1,"122":2,"153":1,"160":1,"176":1,"177":1,"180":1}}],["pairs",{"2":{"74":1,"191":1}}],["pair",{"2":{"7":4,"10":2,"66":1,"121":2,"153":2,"154":1}}],["packages",{"2":{"10":1,"25":1,"27":1,"77":1,"156":1,"161":1,"187":1,"190":3,"192":1,"195":1}}],["package",{"2":{"5":4,"10":1,"22":1,"25":2,"27":2,"60":1,"77":2,"82":1,"146":1,"172":3,"173":1,"176":1,"192":1,"195":2}}],["page",{"2":{"2":1,"4":1,"26":1,"29":1,"31":1,"32":1,"50":1,"53":1,"56":1,"58":1,"59":1,"60":1,"63":1,"64":1,"66":1,"69":1,"71":1,"72":1,"74":1,"76":1,"82":1,"85":1,"88":1,"91":1,"101":1,"104":1,"105":1,"115":1,"118":1,"121":1,"122":1,"132":1,"142":1,"145":1,"146":1,"147":1,"153":1,"154":1,"155":1,"156":1,"160":1,"163":1,"166":1,"167":1,"170":1,"171":1,"173":1,"177":1,"184":1,"185":1,"186":1,"188":1,"189":1}}],["p",{"2":{"5":10,"10":5,"13":13,"14":12,"15":2,"52":1,"55":1,"62":1,"64":5,"65":1,"66":5,"71":2,"75":2,"79":1,"80":1,"84":3,"87":1,"90":1,"93":1,"103":1,"105":4,"107":1,"117":1,"120":1,"122":20,"124":1,"134":1,"145":4,"146":3,"148":3,"150":6,"153":5,"171":7,"175":1,"179":1,"180":1,"184":3,"185":9,"186":7,"189":11,"197":1,"198":1}}],["poylgon",{"2":{"122":1}}],["potential",{"2":{"66":1}}],["potentially",{"2":{"10":2,"64":1,"166":2,"170":2}}],["post",{"2":{"182":2}}],["possibly",{"2":{"153":1}}],["possiblenodes",{"2":{"146":2}}],["possible",{"2":{"10":3,"70":1,"73":1,"75":1,"146":1,"153":1,"154":1}}],["possibility",{"2":{"151":1}}],["possibilities",{"2":{"74":1}}],["position=",{"2":{"180":1}}],["position",{"2":{"10":1,"145":1,"175":1}}],["positive",{"2":{"8":8,"10":4,"52":3,"53":1,"84":3,"85":3,"177":1,"184":1}}],["polgons",{"2":{"146":1}}],["polgontrait",{"2":{"5":2,"10":1,"150":2}}],["pole",{"2":{"10":2,"158":2}}],["poles",{"2":{"10":1,"158":1}}],["polar",{"2":{"10":1,"176":1}}],["polynodes",{"2":{"64":7,"70":1,"73":1,"75":1}}],["polynode",{"2":{"64":36}}],["polypoints",{"2":{"59":46}}],["polys",{"2":{"10":2,"64":39,"68":3,"69":10,"70":14,"71":14,"73":9,"74":6,"75":14,"76":28,"170":26}}],["polys1",{"2":{"7":4,"10":2,"121":6}}],["polys2",{"2":{"7":4,"10":2,"121":6}}],["poly",{"2":{"7":4,"10":16,"15":2,"52":1,"53":6,"55":1,"58":2,"59":3,"62":1,"64":107,"65":2,"66":4,"68":4,"69":20,"70":22,"71":12,"73":15,"74":10,"75":19,"76":79,"79":2,"84":1,"85":3,"88":4,"105":10,"121":8,"122":21,"145":5,"146":5,"170":18,"175":2,"179":2,"180":8,"189":8,"191":2,"198":5}}],["poly2",{"2":{"7":6,"8":4,"10":7,"70":2,"88":2,"121":7,"122":19}}],["poly1",{"2":{"7":6,"8":4,"10":7,"70":2,"88":2,"121":7,"122":14}}],["polygon3",{"2":{"191":2,"192":1}}],["polygon2",{"2":{"191":6}}],["polygon1",{"2":{"191":4}}],["polygonization",{"2":{"146":1}}],["polygonizing",{"0":{"146":1}}],["polygonized",{"2":{"146":1}}],["polygonize",{"2":{"2":1,"4":1,"10":6,"31":1,"146":31}}],["polygon`",{"2":{"59":3,"82":1}}],["polygontrait",{"2":{"5":2,"7":8,"8":12,"10":14,"15":3,"23":1,"32":1,"53":3,"56":2,"59":3,"63":2,"64":2,"66":2,"69":1,"70":5,"71":5,"73":3,"74":5,"75":4,"76":8,"85":2,"88":10,"96":2,"97":1,"98":1,"99":3,"100":1,"105":4,"110":2,"111":2,"112":1,"113":2,"114":1,"121":8,"127":2,"128":1,"129":1,"130":3,"131":1,"137":2,"138":1,"139":1,"140":3,"141":1,"148":1,"150":2,"151":2,"153":2,"154":1,"163":2,"165":3,"166":1,"170":2,"180":2,"189":1}}],["polygon",{"0":{"34":1,"64":1,"67":1,"70":1,"71":1,"74":1,"75":1,"76":1,"113":1},"1":{"35":1,"36":1,"37":1,"38":1,"68":1,"69":1},"2":{"2":2,"4":1,"5":8,"7":8,"8":42,"9":18,"10":65,"11":3,"15":4,"20":1,"23":1,"52":2,"53":5,"55":1,"56":5,"57":5,"58":16,"59":57,"62":2,"63":4,"64":39,"65":3,"66":4,"68":3,"69":10,"70":5,"71":7,"73":5,"74":6,"75":6,"76":34,"77":1,"81":1,"82":3,"84":3,"85":14,"88":12,"94":1,"96":3,"97":3,"98":4,"99":8,"105":1,"110":3,"111":4,"112":4,"113":4,"121":4,"122":66,"125":1,"127":3,"128":4,"129":5,"130":7,"135":1,"137":3,"138":4,"139":4,"140":8,"145":5,"146":4,"150":2,"153":1,"161":4,"162":8,"163":5,"164":1,"166":4,"168":3,"169":12,"170":7,"175":1,"176":4,"179":1,"180":9,"185":3,"189":6,"191":12,"192":5,"193":7,"194":2,"198":6}}],["polygons",{"0":{"99":1,"130":1,"140":1,"168":1},"1":{"169":1,"170":1},"2":{"2":1,"7":8,"8":6,"9":2,"10":18,"23":5,"31":1,"53":5,"57":1,"59":2,"62":1,"63":1,"64":14,"66":1,"69":2,"70":9,"71":5,"73":3,"74":8,"75":6,"76":19,"84":1,"85":1,"88":5,"99":1,"121":5,"140":1,"145":1,"146":19,"151":1,"162":2,"166":3,"168":2,"169":2,"170":10,"178":1,"180":1,"191":3,"192":1,"198":5,"199":3}}],["pointwise",{"0":{"185":1},"2":{"172":1}}],["point1",{"2":{"85":4}}],["point`",{"2":{"74":1}}],["pointedgeside",{"2":{"64":1}}],["point₂",{"2":{"63":13}}],["point₁",{"2":{"63":13}}],["point3s",{"2":{"59":10}}],["point3f",{"2":{"58":1}}],["pointrait",{"2":{"10":1}}],["point2f",{"2":{"58":4,"59":2,"79":1,"84":1}}],["point2d",{"2":{"58":1}}],["point2",{"2":{"10":2,"59":5,"81":1,"85":4}}],["pointtrait",{"2":{"5":2,"8":8,"10":9,"18":1,"32":1,"50":1,"53":1,"56":2,"59":3,"66":1,"73":2,"82":1,"85":17,"88":8,"96":6,"100":1,"110":6,"114":1,"127":6,"131":1,"137":6,"141":1,"148":2,"150":2,"151":1,"153":7,"154":4,"156":12,"159":2,"165":3,"166":1,"167":1,"171":2,"180":2,"185":2,"186":2,"189":1}}],["pointorientation",{"2":{"4":1,"10":2,"122":2}}],["points2",{"2":{"7":2,"10":1,"121":3}}],["points1",{"2":{"7":2,"10":1,"121":3}}],["points",{"0":{"96":1,"137":1},"2":{"2":3,"4":1,"5":6,"7":2,"8":22,"9":2,"10":53,"13":1,"52":3,"53":3,"56":2,"58":8,"59":32,"63":1,"64":55,"66":5,"69":3,"70":5,"71":1,"73":8,"74":28,"75":4,"76":1,"77":3,"79":4,"81":4,"82":6,"84":2,"85":8,"87":2,"88":13,"90":1,"94":6,"96":3,"97":4,"108":6,"110":1,"111":7,"112":3,"121":5,"122":10,"125":5,"127":1,"128":2,"129":4,"130":3,"134":1,"135":5,"137":3,"138":3,"139":3,"140":1,"144":1,"146":3,"153":2,"154":1,"167":2,"172":1,"175":2,"176":2,"180":11,"181":11,"182":26,"183":10,"184":33,"185":2,"186":2,"189":25,"191":8,"192":1,"197":1,"198":11}}],["point",{"0":{"110":1,"127":1},"2":{"2":2,"5":8,"7":20,"8":74,"9":14,"10":83,"20":1,"50":1,"53":3,"56":12,"57":3,"58":1,"59":126,"63":6,"64":97,"66":50,"69":13,"71":9,"73":1,"74":71,"76":9,"82":3,"84":17,"85":73,"88":27,"91":3,"93":1,"94":2,"96":8,"105":21,"108":2,"110":10,"117":1,"120":2,"121":21,"122":138,"124":1,"125":3,"127":10,"128":1,"130":1,"135":4,"137":11,"145":1,"146":3,"150":2,"153":1,"161":1,"162":2,"166":2,"168":1,"170":2,"172":1,"174":1,"180":2,"181":3,"182":9,"183":1,"185":2,"189":4,"191":111,"192":7,"193":8,"198":2}}],["practice",{"2":{"193":1}}],["pred",{"2":{"197":5,"198":1,"199":2,"200":1}}],["predicate",{"2":{"0":1,"105":1,"197":6,"198":1,"200":5}}],["predicates",{"0":{"12":1,"15":1,"200":1},"1":{"13":1,"14":1,"15":1,"16":1},"2":{"0":4,"12":1,"31":1,"64":5,"72":3,"74":4,"122":1,"197":1,"199":1}}],["pretty",{"2":{"172":1}}],["prettytime",{"2":{"13":2}}],["prevent",{"2":{"71":2,"74":2,"76":2}}],["prev^2",{"2":{"56":2}}],["prev",{"2":{"56":14,"64":69,"145":4}}],["previously",{"2":{"175":1}}],["previous",{"2":{"19":1,"56":1,"153":1,"181":3}}],["preparations",{"2":{"20":1}}],["prepared",{"2":{"20":1,"146":2}}],["prepare",{"0":{"20":1},"2":{"17":1,"20":1}}],["precision",{"2":{"11":1}}],["preserve",{"2":{"180":4,"182":3}}],["preserved",{"2":{"153":2}}],["preserving",{"2":{"178":1}}],["presentation",{"2":{"10":1,"59":1}}],["present",{"2":{"10":1,"153":1,"188":1}}],["presence",{"2":{"10":1,"32":1,"188":1}}],["prescribes",{"2":{"20":1}}],["press",{"2":{"10":1,"59":1}}],["pre",{"2":{"10":1,"75":1,"180":1,"182":2}}],["prefilter",{"2":{"10":1,"180":7}}],["prints",{"2":{"173":1}}],["printstyled",{"2":{"60":1,"173":1,"176":1}}],["println",{"2":{"60":1,"173":1,"176":1,"180":2}}],["print",{"2":{"60":2,"173":2,"176":2}}],["primitives",{"0":{"156":1},"2":{"31":1,"156":1}}],["primitive",{"2":{"29":1}}],["primarily",{"2":{"10":1,"25":2,"27":2,"159":1}}],["primary",{"2":{"7":4,"10":3,"94":1,"135":1,"180":1}}],["priority",{"2":{"5":2,"172":1}}],["protters",{"2":{"153":1,"154":1}}],["progressively",{"2":{"151":1}}],["program",{"2":{"17":1}}],["programming",{"2":{"17":1,"26":1}}],["promote",{"2":{"59":5}}],["property",{"2":{"154":2}}],["properties=gi",{"2":{"156":1}}],["properties=namedtuple",{"2":{"154":1}}],["properties=",{"2":{"146":1}}],["properties",{"2":{"10":1,"153":8,"156":1,"180":1,"184":1}}],["propagated",{"2":{"153":1}}],["propagate",{"2":{"59":16,"85":4}}],["prod",{"2":{"56":4}}],["product",{"2":{"56":1}}],["probably",{"2":{"53":1,"153":1}}],["process",{"2":{"96":3,"97":3,"98":3,"99":1,"105":1,"110":3,"111":3,"112":2,"113":1,"122":11,"127":1,"128":3,"129":1,"130":1,"137":3,"138":3,"139":3,"140":1,"153":1,"154":1,"182":1}}],["processed",{"2":{"64":6}}],["processors",{"2":{"31":1,"94":2,"108":2,"125":2,"135":2}}],["processor",{"2":{"31":1}}],["processing",{"2":{"23":1}}],["providers",{"2":{"162":1,"169":1}}],["provide",{"0":{"23":1},"2":{"10":6,"52":1,"55":1,"57":1,"62":1,"65":1,"68":1,"70":2,"73":2,"75":2,"84":1,"87":1,"90":1,"93":1,"103":1,"107":1,"117":1,"120":1,"122":2,"124":1,"134":1,"146":1,"184":1}}],["provides",{"2":{"10":1,"77":1,"82":1,"192":1}}],["provided",{"2":{"8":2,"10":3,"11":1,"64":1,"85":1,"88":1,"169":1,"176":2,"188":1}}],["proj",{"2":{"5":4,"10":3,"172":2,"173":4,"175":1,"176":6,"190":1}}],["projecting",{"2":{"192":1}}],["projections",{"2":{"158":1}}],["projection",{"2":{"85":2,"190":1,"192":1}}],["project",{"2":{"2":1}}],["projects",{"2":{"2":1}}],["profile",{"2":{"2":1}}],["iah",{"2":{"196":2}}],["image",{"2":{"146":1}}],["impossible",{"2":{"69":1,"120":1}}],["important",{"2":{"175":1}}],["import",{"2":{"5":6,"10":5,"13":2,"14":2,"15":1,"31":10,"52":1,"55":1,"60":1,"62":1,"65":1,"69":1,"70":1,"73":1,"74":1,"75":1,"84":1,"87":1,"88":1,"90":1,"91":1,"93":1,"94":1,"103":1,"104":1,"105":1,"107":1,"108":1,"117":1,"118":1,"120":1,"121":1,"124":1,"125":1,"134":1,"135":1,"145":3,"150":2,"153":2,"154":1,"173":1,"176":2,"179":2,"180":3,"185":2,"189":1,"190":5}}],["implements",{"2":{"32":1,"188":1}}],["implementing",{"2":{"10":1,"180":1}}],["implement",{"2":{"10":1,"17":1,"23":1,"53":1,"56":1,"59":1,"63":1,"66":1,"82":1,"85":1,"88":1,"94":1,"108":1,"121":1,"125":1,"135":1,"148":1,"164":1,"165":4,"166":1}}],["implementation",{"0":{"53":1,"56":1,"63":1,"66":1,"69":1,"82":1,"85":1,"88":1,"91":1,"94":1,"104":1,"108":1,"118":1,"121":1,"125":1,"135":1,"163":1,"170":1,"177":1},"2":{"10":1,"53":3,"56":3,"59":1,"63":3,"66":3,"75":1,"85":3,"88":3,"91":1,"94":2,"104":1,"108":2,"118":1,"121":3,"125":2,"135":2,"146":2,"147":1,"153":1,"154":1,"172":1,"180":1,"188":1}}],["implementations",{"2":{"10":1,"94":1,"108":1,"125":1,"135":1,"147":1,"178":1,"188":3}}],["implemented",{"0":{"147":1},"2":{"5":2,"10":2,"31":1,"53":1,"59":3,"69":2,"71":2,"74":2,"76":2,"82":1,"85":2,"147":1,"148":2,"154":1,"165":2,"172":1,"178":1}}],["improve",{"2":{"8":2,"10":1,"167":1}}],["improvements",{"2":{"2":2,"3":1}}],["i=2",{"2":{"145":1}}],["ipoints",{"2":{"122":4}}],["ip",{"2":{"88":2}}],["ipt",{"2":{"64":8}}],["ihole",{"2":{"88":2}}],["ih",{"2":{"76":22}}],["i2",{"2":{"66":2}}],["i1",{"2":{"66":2}}],["ii",{"2":{"64":8}}],["io",{"2":{"60":5,"173":5,"176":5}}],["i+1",{"2":{"59":8,"146":1,"182":2,"184":1}}],["id",{"2":{"194":1}}],["identical",{"2":{"153":1,"169":1}}],["identity",{"2":{"146":4,"156":2,"167":1}}],["ideal",{"2":{"146":1}}],["idea",{"2":{"10":1,"20":1,"25":1,"27":1,"59":1,"148":1,"154":1}}],["idx`",{"2":{"64":1}}],["idx",{"2":{"56":6,"64":167,"66":9,"69":23,"70":5,"73":5,"75":2,"170":34,"182":51}}],["id=",{"2":{"10":2}}],["ignored",{"2":{"10":1,"146":1}}],["ignore",{"2":{"10":1,"146":2}}],["iff",{"2":{"153":1}}],["if",{"0":{"72":1},"2":{"5":10,"7":34,"8":38,"9":2,"10":74,"18":1,"22":2,"31":1,"32":1,"52":1,"53":6,"55":1,"56":15,"59":5,"60":3,"63":1,"64":95,"66":36,"69":8,"70":13,"71":12,"73":9,"74":44,"75":10,"76":22,"82":3,"84":2,"85":8,"87":2,"88":35,"90":1,"91":1,"93":1,"94":2,"96":4,"97":3,"98":3,"99":2,"100":1,"101":1,"103":1,"104":1,"105":9,"107":1,"108":3,"110":5,"111":4,"112":2,"113":2,"114":1,"115":1,"117":1,"118":1,"120":4,"121":16,"122":132,"124":1,"125":2,"127":4,"128":3,"129":2,"130":2,"131":1,"132":1,"134":1,"135":2,"137":5,"138":3,"139":3,"140":1,"141":1,"142":1,"145":5,"146":35,"150":6,"151":1,"153":19,"154":6,"156":7,"160":1,"163":1,"165":1,"166":2,"167":1,"168":1,"170":12,"171":1,"172":3,"173":2,"176":6,"177":2,"180":1,"182":12,"184":12,"185":1,"186":1,"188":2,"192":1,"195":1,"198":2,"199":1}}],["i",{"2":{"2":1,"13":4,"22":1,"53":1,"56":14,"59":16,"64":28,"66":4,"71":2,"75":2,"76":4,"85":2,"88":8,"105":7,"122":28,"145":14,"146":17,"153":8,"154":8,"177":2,"181":3,"182":12,"184":28,"189":2,"191":2,"192":1,"199":3}}],["itererable",{"2":{"189":1}}],["iter",{"2":{"156":31}}],["iterate",{"2":{"59":2,"151":1,"153":1,"156":4}}],["iteration",{"2":{"53":1}}],["iterators",{"2":{"13":1,"59":1,"64":5,"66":3,"73":1,"76":2,"146":1,"153":2,"154":3,"156":8,"170":6,"177":1}}],["iterator",{"2":{"10":2,"64":4,"73":2,"156":2}}],["iterabletype",{"2":{"153":5,"154":6}}],["iterable",{"2":{"8":2,"10":3,"18":1,"53":1,"66":1,"82":1,"153":17,"154":15,"156":10,"191":1}}],["iterables",{"2":{"5":4,"10":2,"22":1,"150":4,"153":1,"154":2,"156":3}}],["ith",{"2":{"64":3,"76":7}}],["itself",{"2":{"66":1,"145":1,"151":1}}],["its",{"2":{"9":2,"10":10,"18":1,"52":1,"59":1,"64":2,"66":4,"76":1,"97":1,"156":1,"164":1,"180":1,"181":1,"182":1,"183":3,"197":1}}],["it",{"2":{"2":1,"5":8,"8":2,"10":21,"18":11,"19":2,"20":1,"22":1,"29":3,"30":1,"52":2,"53":3,"55":1,"56":1,"58":1,"60":1,"63":2,"64":2,"65":1,"66":2,"70":1,"71":1,"73":1,"74":4,"75":1,"76":3,"81":2,"82":2,"85":3,"88":1,"93":2,"96":3,"110":3,"120":1,"121":1,"122":14,"127":2,"137":3,"144":1,"145":2,"146":4,"148":3,"150":2,"151":3,"152":1,"153":8,"154":5,"156":4,"158":1,"159":2,"160":2,"162":1,"163":1,"164":1,"166":1,"168":1,"172":5,"175":2,"176":1,"180":1,"182":1,"187":1,"188":7,"192":3,"193":3,"195":3,"199":2,"200":2}}],["isolate",{"2":{"180":1}}],["isodd",{"2":{"69":1}}],["istable",{"2":{"153":1,"154":1,"156":1}}],["isparallel",{"2":{"122":1,"145":8}}],["is3d",{"2":{"88":1,"156":1,"171":1,"185":1,"186":1,"189":10}}],["issue",{"2":{"64":1}}],["issues",{"2":{"25":1,"27":1}}],["isequal",{"2":{"146":1}}],["iseven",{"2":{"122":1}}],["isempty",{"2":{"53":1,"59":4,"66":1,"70":1,"71":2,"73":1,"146":1,"165":1,"182":1}}],["isexported",{"2":{"31":1}}],["isa",{"2":{"18":1,"59":9,"153":3,"154":1,"189":1}}],["isnothing",{"2":{"60":1,"64":9,"69":1,"71":2,"74":2,"76":2,"88":1,"146":1,"173":1,"176":1,"180":1,"181":1,"182":5,"183":1,"184":6}}],["isn",{"2":{"10":1,"53":1,"64":4,"66":1,"69":1,"71":1,"74":3,"76":2,"85":3,"88":1,"93":1,"121":1,"122":9,"180":1,"188":1}}],["isconcave",{"0":{"145":1},"2":{"4":1,"10":2,"81":1,"143":1,"145":3}}],["isclockwise",{"0":{"144":1},"2":{"4":1,"10":2,"66":1,"143":1,"145":5,"146":2}}],["is",{"0":{"25":1,"52":2,"55":1,"62":1,"65":1,"68":1,"84":2,"87":1,"90":1,"93":1,"103":1,"107":1,"117":1,"120":1,"124":1,"134":1,"151":1},"2":{"2":3,"4":1,"5":20,"7":16,"8":86,"9":2,"10":116,"11":1,"13":1,"14":1,"18":3,"19":1,"20":1,"22":3,"23":2,"25":2,"27":2,"52":7,"53":19,"55":1,"56":19,"57":2,"58":2,"59":15,"60":3,"62":2,"63":5,"64":82,"65":3,"66":22,"68":1,"69":2,"70":4,"71":13,"73":4,"74":40,"75":7,"76":20,"77":1,"81":5,"82":4,"84":8,"85":23,"88":13,"90":2,"91":3,"93":4,"94":4,"96":7,"97":3,"98":3,"99":1,"100":1,"101":1,"104":3,"105":3,"107":1,"108":5,"110":9,"111":4,"112":2,"113":1,"114":1,"115":1,"118":2,"120":3,"121":12,"122":91,"125":4,"127":2,"134":4,"135":5,"137":8,"138":3,"139":3,"140":1,"141":2,"142":1,"144":2,"145":7,"146":11,"147":1,"148":3,"150":6,"151":3,"152":1,"153":18,"154":4,"156":5,"158":10,"159":1,"160":1,"161":7,"162":2,"163":1,"164":3,"165":3,"166":1,"168":4,"169":1,"170":2,"171":1,"172":7,"173":2,"174":3,"175":3,"176":9,"177":6,"179":1,"180":4,"181":1,"182":2,"183":1,"185":2,"187":1,"188":3,"191":4,"192":5,"193":3,"194":1,"195":3,"197":2,"198":5,"199":2}}],["innerjoin",{"2":{"197":1,"198":1,"199":1}}],["inner",{"2":{"122":6,"153":5}}],["in=1",{"2":{"122":1}}],["in`",{"2":{"122":1}}],["inaccuracies",{"2":{"74":1}}],["inject",{"0":{"72":1},"2":{"173":1}}],["ind",{"2":{"199":2}}],["individual",{"2":{"193":1}}],["indicate",{"2":{"156":1}}],["indicates",{"2":{"20":1}}],["indices",{"2":{"64":4,"153":2,"154":2,"184":16}}],["indeed",{"2":{"162":1}}],["index",{"2":{"59":8,"64":11,"122":1,"153":1,"182":1}}],["inds",{"2":{"146":3}}],["inplace",{"2":{"59":1}}],["inputs",{"2":{"10":1,"64":1,"88":1,"91":1,"104":1,"118":1,"184":1}}],["input",{"2":{"10":12,"56":1,"69":1,"70":1,"73":1,"74":1,"75":1,"146":1,"148":1,"154":1,"176":3,"177":2,"181":1,"182":1,"183":1,"192":1}}],["inbounds",{"2":{"59":16,"85":5,"122":1}}],["inspiration",{"2":{"69":1}}],["inspired",{"2":{"68":1,"69":2}}],["inside",{"2":{"56":3,"62":1,"64":3,"66":1,"70":1,"71":1,"73":1,"74":1,"75":1,"76":2,"84":3,"85":1,"96":1,"122":1,"134":1,"137":1,"146":2}}],["insertion",{"2":{"64":1}}],["insert",{"2":{"56":1,"182":1}}],["instability",{"2":{"24":2}}],["instantiating",{"2":{"20":1}}],["instead",{"2":{"18":1,"24":1,"154":1}}],["instructs",{"2":{"10":1,"188":2}}],["inline",{"2":{"32":1,"122":4,"145":1,"153":12,"154":10,"160":2}}],["init=nothing",{"2":{"154":1}}],["init=typemax",{"2":{"85":2}}],["init=zero",{"2":{"53":1,"66":1}}],["initial",{"2":{"74":2,"176":1}}],["initially",{"2":{"64":1}}],["initialize",{"2":{"59":3,"63":2,"64":1,"74":1}}],["init",{"2":{"19":1,"31":1,"56":1,"63":2,"154":30,"176":4}}],["incorrect",{"2":{"161":1,"162":1}}],["increase",{"2":{"64":1,"122":1}}],["increasing",{"2":{"10":1,"180":1}}],["increment",{"2":{"59":5}}],["including",{"2":{"56":1,"64":2,"74":1,"85":1,"96":1,"97":1,"98":1,"99":1,"122":2}}],["include",{"2":{"31":44,"56":1,"64":1,"77":1,"85":2,"160":1,"180":2,"193":2,"194":1}}],["included",{"2":{"10":2,"76":2,"166":2,"170":2,"193":1}}],["includes",{"2":{"8":4,"10":2,"76":1,"85":2,"88":1,"122":1}}],["incircle",{"0":{"16":1}}],["investigate",{"2":{"146":1}}],["investigating",{"0":{"81":1}}],["inverted",{"2":{"10":1,"82":1}}],["invalid",{"2":{"20":1,"71":2,"162":1,"168":1,"169":1}}],["invoke",{"2":{"20":1}}],["involved",{"2":{"148":1}}],["involve",{"2":{"20":1}}],["involving",{"2":{"10":3,"70":1,"73":1,"75":1}}],["invocation",{"2":{"18":1}}],["inv",{"2":{"10":2,"158":3}}],["ing",{"2":{"5":2,"10":2,"59":1,"185":1}}],["intr",{"2":{"64":28,"66":9,"69":16,"74":8}}],["intr2",{"2":{"64":2,"74":14}}],["intr1",{"2":{"64":3,"74":21,"122":2}}],["intrs",{"2":{"64":10,"74":5}}],["introduction",{"0":{"27":1},"1":{"28":1,"29":1,"30":1}}],["introducing",{"2":{"24":1}}],["introduces",{"2":{"24":1}}],["int",{"2":{"64":6,"76":7,"105":7,"177":1,"180":1,"182":5,"183":1,"184":1}}],["integrate",{"2":{"53":1}}],["integrating",{"2":{"53":1}}],["integrals",{"2":{"52":1}}],["integral",{"2":{"52":1}}],["intended",{"2":{"10":1,"165":3,"166":1}}],["intermediate",{"2":{"66":1}}],["inter2",{"2":{"66":15}}],["inter1",{"2":{"66":23}}],["interpreted",{"2":{"59":1}}],["interpolation",{"2":{"9":2,"10":1,"58":1,"59":2,"174":1}}],["interpolated",{"2":{"9":6,"10":3,"59":17,"174":1}}],["interpolate",{"2":{"4":2,"9":3,"10":4,"57":1,"58":2,"59":25}}],["interest",{"2":{"59":1,"85":1}}],["internal",{"2":{"58":1}}],["internals",{"2":{"24":1}}],["inter",{"2":{"10":3,"64":21,"69":1,"70":1,"73":5,"74":4}}],["interface",{"0":{"165":1},"2":{"10":3,"20":1,"77":1,"82":1,"153":1,"164":1,"165":5,"166":1,"180":1,"192":1}}],["interacted",{"2":{"122":1}}],["interaction",{"0":{"122":1},"2":{"122":2}}],["interactions",{"2":{"64":1,"76":3,"122":15}}],["interactive",{"2":{"13":1,"14":1}}],["interacting",{"2":{"10":1,"73":1,"122":2}}],["interacts",{"2":{"7":2,"10":1,"122":3,"124":1,"125":1,"128":3,"129":1,"130":1}}],["interact",{"2":{"7":4,"10":2,"75":1,"76":1,"107":1,"118":1,"122":5,"124":1,"125":1,"127":1,"128":2,"129":2,"130":1}}],["interior",{"2":{"7":12,"10":7,"52":1,"56":9,"59":7,"63":5,"64":1,"76":18,"90":1,"91":1,"93":1,"94":3,"97":5,"98":1,"99":2,"103":2,"104":1,"105":1,"108":2,"110":2,"111":6,"112":3,"122":15,"124":1,"125":3,"128":1,"129":2,"130":2,"134":1,"135":3,"140":2,"145":2,"163":1,"166":1}}],["interiors",{"2":{"7":12,"10":7,"59":20,"90":1,"91":1,"93":1,"103":1,"104":1,"107":1,"108":1,"113":1,"117":1,"118":1,"122":5,"124":1,"125":1,"127":1,"128":2,"129":1,"134":1,"135":1,"138":3,"139":3}}],["intersectingpolygons",{"2":{"10":3}}],["intersecting",{"0":{"168":1},"1":{"169":1,"170":1},"2":{"10":4,"31":1,"64":2,"76":2,"166":4,"168":1,"170":4}}],["intersections",{"0":{"74":1},"2":{"64":2,"66":2,"71":1,"73":2,"74":1,"76":1,"122":2}}],["intersection",{"0":{"37":1,"73":1,"116":1},"1":{"117":1,"118":1},"2":{"2":1,"4":2,"7":6,"10":19,"15":4,"23":1,"31":1,"37":2,"64":38,"66":6,"69":3,"70":4,"71":4,"73":15,"74":73,"75":2,"76":2,"105":2,"117":1,"121":5,"122":6}}],["intersect",{"2":{"7":16,"10":11,"64":4,"66":3,"70":2,"73":1,"74":1,"75":1,"76":5,"90":1,"91":2,"93":1,"94":1,"104":1,"108":1,"111":1,"113":1,"117":2,"121":1,"122":4,"134":1,"135":2,"138":3,"139":3,"169":1,"170":4}}],["intersects",{"0":{"49":1,"117":1},"2":{"4":2,"7":5,"10":6,"31":1,"49":2,"64":1,"74":2,"76":2,"105":2,"116":1,"117":4,"118":4,"121":5,"140":1,"170":2,"197":1}}],["into",{"2":{"9":2,"10":7,"17":1,"26":1,"53":1,"56":1,"59":1,"63":4,"64":2,"69":1,"70":1,"73":1,"122":1,"146":4,"153":3,"154":2,"155":1,"156":1,"159":1,"170":1,"180":1,"189":2,"191":2,"197":1}}],["int64",{"2":{"5":12,"10":6,"162":6,"181":1,"182":1,"184":1,"185":6,"191":14}}],["infinity",{"2":{"121":1,"122":1}}],["info",{"2":{"10":2,"174":1}}],["information",{"0":{"193":1},"2":{"10":1,"29":1,"59":1,"64":2,"65":1,"74":1,"82":1,"122":1,"190":1,"193":3,"195":2}}],["inf",{"2":{"2":1,"5":2,"69":2,"181":1,"184":3}}],["in",{"0":{"23":1},"2":{"0":1,"2":2,"5":12,"7":6,"8":2,"9":8,"10":54,"13":6,"14":2,"17":2,"18":4,"20":1,"23":3,"24":2,"25":1,"26":3,"27":1,"29":1,"30":1,"31":3,"32":1,"33":1,"52":1,"53":3,"56":7,"57":2,"59":22,"60":1,"62":2,"63":5,"64":72,"66":31,"69":6,"70":9,"71":3,"73":5,"74":29,"75":11,"76":28,"81":1,"82":3,"84":6,"85":6,"87":1,"88":17,"90":2,"91":1,"94":10,"97":1,"98":1,"99":1,"100":1,"101":1,"104":1,"105":7,"108":9,"110":1,"111":1,"112":1,"114":1,"115":1,"117":2,"118":1,"120":1,"121":11,"122":135,"124":1,"125":11,"129":1,"131":1,"132":1,"134":1,"135":10,"138":3,"139":3,"141":1,"142":1,"145":4,"146":10,"147":3,"148":1,"150":4,"151":2,"152":1,"153":8,"154":4,"156":4,"157":1,"158":5,"159":1,"160":1,"164":1,"165":1,"166":2,"167":1,"168":1,"170":7,"171":2,"172":3,"173":1,"174":2,"175":2,"176":14,"177":7,"178":1,"180":5,"181":2,"182":4,"183":1,"184":5,"185":2,"186":1,"187":4,"188":4,"189":8,"190":1,"191":2,"192":6,"195":2,"197":4,"198":3,"199":1,"200":1}}],["rd",{"2":{"180":3}}],["rdbu",{"2":{"84":1}}],["rhumb",{"2":{"145":2}}],["runner",{"2":{"192":1}}],["running",{"2":{"153":1,"156":2}}],["run",{"2":{"153":5,"154":3,"199":1}}],["runs",{"2":{"74":2,"144":1}}],["rule",{"2":{"64":1}}],["rules",{"2":{"64":1}}],["rightjoin",{"2":{"197":1}}],["right=2",{"2":{"64":1}}],["right",{"2":{"59":1,"64":4,"69":1,"85":1,"145":1,"182":19,"184":5,"191":1}}],["ring4",{"2":{"193":2}}],["ring3",{"2":{"192":1}}],["ring2",{"2":{"191":2}}],["ring1",{"2":{"191":2}}],["ring",{"2":{"2":1,"8":14,"10":13,"31":1,"53":2,"56":3,"59":1,"62":1,"63":4,"64":12,"66":13,"76":3,"85":5,"88":4,"96":1,"97":2,"98":5,"110":1,"112":1,"122":2,"127":1,"128":1,"129":3,"137":1,"138":2,"139":4,"145":3,"146":11,"161":2,"162":1,"163":14,"164":1,"191":1}}],["rings",{"0":{"98":1,"112":1,"129":1,"139":1,"161":1},"1":{"162":1,"163":1},"2":{"2":2,"8":8,"10":6,"53":1,"63":1,"64":3,"74":1,"88":7,"144":1,"146":5,"163":1,"166":1,"180":1}}],["rtrees",{"2":{"20":1}}],["r+y",{"2":{"13":2,"14":1}}],["r+x",{"2":{"13":2,"14":1}}],["ry",{"2":{"13":3,"14":3}}],["rx",{"2":{"13":3,"14":3}}],["round",{"2":{"180":1,"182":1,"184":1}}],["routines",{"2":{"11":1}}],["row",{"2":{"154":3}}],["rows",{"2":{"154":2}}],["robust",{"0":{"15":1},"2":{"81":1}}],["rotate",{"2":{"66":1}}],["rotation",{"2":{"5":2,"10":1,"185":1}}],["rotations",{"2":{"5":6,"10":3,"185":3}}],["rotmatrix2d",{"2":{"180":1}}],["rotmatrix",{"2":{"5":2,"10":1,"185":1}}],["rᵢ₋₁",{"2":{"59":20}}],["rᵢ∗rᵢ₊₁+sᵢ⋅sᵢ₊₁",{"2":{"10":1}}],["rᵢ₊₁",{"2":{"10":1,"59":29}}],["rᵢ",{"2":{"10":2,"59":49}}],["ramer",{"2":{"182":1}}],["raster",{"0":{"146":1},"2":{"146":4}}],["ray",{"2":{"122":4}}],["raw",{"2":{"18":1}}],["range",{"2":{"13":8,"14":4,"146":3,"153":2,"154":2}}],["ranges",{"2":{"10":1,"146":2}}],["randomly",{"2":{"198":2}}],["random",{"2":{"180":2}}],["randn",{"2":{"79":1}}],["rand",{"2":{"10":1,"81":1,"146":1,"198":2}}],["rather",{"2":{"10":1,"146":1,"169":1}}],["ratio",{"2":{"10":7,"74":1,"176":1,"180":1,"181":4,"182":6,"183":4,"184":11}}],["radii",{"2":{"10":1,"176":1}}],["radius`",{"2":{"176":1}}],["radius",{"2":{"10":6,"59":13,"158":3,"176":4}}],["radialdistance",{"0":{"181":1},"2":{"4":1,"10":2,"178":1,"180":4,"181":4}}],["rrayscore",{"2":{"5":2,"10":1,"185":1}}],["rring",{"2":{"5":2,"10":1,"185":1}}],["rewrap",{"2":{"153":2,"156":1}}],["req",{"2":{"122":44}}],["requirement",{"2":{"161":1,"168":1}}],["requirements",{"2":{"122":5}}],["required",{"2":{"82":1,"94":3,"108":3,"125":3,"135":3,"175":1,"190":1}}],["requires",{"2":{"60":1,"88":1,"90":1,"94":2,"97":3,"98":3,"99":1,"108":1,"111":3,"112":2,"113":1,"125":1,"128":3,"129":1,"130":1,"134":1,"135":1,"138":3,"139":3,"140":1,"173":1,"176":1,"188":1}}],["require",{"2":{"33":1,"82":1,"93":2,"94":6,"108":3,"122":32,"125":3,"135":3}}],["requests",{"2":{"25":1,"27":1}}],["reflected",{"2":{"180":3}}],["ref",{"2":{"84":1}}],["referring",{"2":{"122":1}}],["refer",{"2":{"10":1,"146":1}}],["references",{"2":{"10":1,"59":1}}],["reference",{"0":{"192":1,"193":1},"2":{"4":1,"5":4,"172":2,"190":2,"192":1}}],["reveal",{"2":{"76":1}}],["reveals",{"2":{"76":1}}],["reverse",{"2":{"52":1,"58":1,"59":1,"64":2,"191":2}}],["rev",{"2":{"75":1}}],["render",{"2":{"58":1}}],["rendering",{"2":{"58":3,"59":1}}],["rename",{"2":{"3":1}}],["regardless",{"2":{"74":1,"122":1}}],["regions",{"2":{"71":3,"74":5,"75":1,"76":3,"122":2,"199":1}}],["region",{"2":{"60":2,"74":3,"76":2,"199":1}}],["register",{"2":{"31":3,"59":3}}],["regular",{"0":{"15":1}}],["readable",{"2":{"195":1}}],["readability",{"2":{"64":1}}],["read",{"2":{"153":1,"192":2}}],["reading",{"2":{"153":1}}],["reads",{"2":{"153":1}}],["reached",{"2":{"153":1,"156":3}}],["reaches",{"2":{"151":1}}],["reach",{"2":{"151":1}}],["reasons",{"2":{"188":1}}],["reason",{"2":{"24":1,"160":1,"161":1,"168":1}}],["real`",{"2":{"176":1,"177":1}}],["reality",{"2":{"81":1}}],["really",{"2":{"53":1,"122":1,"146":1,"160":1}}],["real=1",{"2":{"10":2,"176":2}}],["real=6378137`",{"2":{"176":1}}],["real=6378137",{"2":{"10":2,"176":1}}],["real",{"0":{"199":1},"2":{"9":2,"10":13,"56":1,"59":45,"63":2,"74":1,"176":3,"177":1,"184":5,"197":1}}],["relation",{"2":{"64":2}}],["relations",{"2":{"31":10,"105":1,"121":1}}],["relationship",{"2":{"23":1,"197":2}}],["relative",{"2":{"59":3}}],["relevant",{"2":{"3":1,"10":3,"82":1,"158":2}}],["reducing",{"2":{"154":2}}],["reduced",{"2":{"181":1,"182":1,"183":1}}],["reduces",{"2":{"19":1,"76":1,"154":1}}],["reduce",{"2":{"5":2,"10":1,"146":1,"150":2,"154":2,"165":1}}],["redundant",{"2":{"64":1}}],["red",{"2":{"14":1,"62":2,"84":1,"93":1,"103":1,"117":1,"191":1,"192":1,"198":2}}],["removal",{"2":{"64":1}}],["removes",{"2":{"64":1,"148":1}}],["removed",{"2":{"64":3,"71":5,"146":1}}],["remove",{"2":{"53":1,"64":33,"66":1,"69":2,"70":5,"73":5,"75":2,"170":2,"181":1,"182":3,"184":4}}],["removing",{"2":{"10":3,"64":1,"71":1,"181":1,"182":1,"183":1}}],["remainingnode",{"2":{"146":3}}],["remaining",{"2":{"64":1,"88":1,"122":2,"182":1}}],["remain",{"2":{"5":2,"10":9,"150":2,"153":1,"180":2}}],["resolution",{"2":{"192":1}}],["resolved",{"2":{"146":1}}],["reset",{"2":{"64":1,"153":1}}],["resembles",{"2":{"10":1,"158":2}}],["resize",{"2":{"13":1,"14":1,"64":2}}],["resampled",{"2":{"10":1,"177":1}}],["respectively",{"2":{"64":1,"121":1,"156":1,"191":1}}],["respect",{"2":{"10":2,"73":1,"74":1,"82":1,"122":6}}],["rest",{"2":{"10":1,"59":2,"75":1}}],["resulting",{"2":{"69":1,"76":1,"146":1,"198":1}}],["results",{"2":{"7":4,"10":2,"74":1,"105":1,"121":1,"153":1,"154":1,"162":1,"182":25,"191":3}}],["result",{"2":{"5":4,"7":10,"8":10,"10":13,"19":1,"32":3,"53":2,"56":1,"66":1,"74":15,"82":1,"85":2,"91":1,"94":1,"104":1,"118":1,"135":1,"150":4,"153":9,"154":2,"176":3,"184":6}}],["receives",{"2":{"153":1,"154":1}}],["recent",{"2":{"64":1,"71":1,"74":1,"76":1}}],["recalculate",{"2":{"152":1}}],["recursive",{"2":{"151":1}}],["recursively",{"2":{"8":2,"10":1,"151":1,"167":1}}],["rect",{"2":{"52":5,"55":3,"65":3,"84":7}}],["rectangle",{"2":{"52":2,"55":2,"58":2,"65":2,"66":1,"84":2,"175":5,"176":8,"198":2}}],["rectangletrait",{"2":{"32":1}}],["recommended",{"2":{"22":1}}],["reconstructing",{"2":{"180":1}}],["reconstructed",{"2":{"18":1}}],["reconstruct",{"2":{"4":1,"5":2,"10":3,"18":1,"150":2,"153":2,"154":1,"156":27}}],["re",{"2":{"5":2,"10":1,"17":1,"31":1,"82":1,"185":1,"190":1,"192":1}}],["retrievable",{"2":{"5":2,"172":1}}],["returnval",{"2":{"122":9}}],["returntype",{"2":{"19":1}}],["returning",{"2":{"18":1,"60":1,"71":2}}],["return",{"0":{"22":1},"2":{"5":2,"7":36,"8":4,"10":37,"13":3,"14":3,"23":2,"30":1,"32":3,"35":1,"36":1,"37":1,"38":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"53":5,"56":5,"59":20,"60":1,"63":4,"64":36,"66":12,"69":12,"70":5,"71":4,"73":4,"74":18,"75":6,"76":9,"82":2,"85":8,"88":30,"91":1,"94":1,"100":2,"101":2,"104":1,"105":18,"108":2,"114":2,"115":2,"117":1,"118":1,"121":28,"122":71,"125":1,"127":2,"131":2,"132":2,"135":1,"141":2,"142":2,"145":10,"146":12,"153":17,"154":3,"156":7,"161":1,"163":4,"165":8,"166":2,"170":2,"171":2,"172":1,"177":4,"180":3,"181":1,"182":5,"183":3,"184":7,"185":2,"186":2,"188":3,"189":8}}],["returned",{"2":{"5":2,"10":11,"22":2,"23":1,"64":3,"69":1,"70":2,"73":2,"74":2,"75":2,"81":1,"82":1,"146":1,"153":1,"156":1,"160":1,"172":1,"180":1}}],["returns",{"2":{"5":2,"7":10,"8":8,"9":6,"10":25,"18":1,"22":2,"53":2,"56":1,"59":6,"63":3,"64":4,"66":6,"69":1,"70":1,"74":1,"75":1,"82":1,"85":8,"87":1,"90":2,"91":1,"94":1,"103":2,"104":1,"107":1,"118":1,"121":2,"122":4,"135":1,"146":2,"150":2,"153":2,"160":1,"177":1,"186":1,"197":1}}],["rebuilt",{"2":{"5":2,"10":2,"148":1,"150":2,"153":1,"156":1}}],["rebuilding",{"2":{"153":1,"154":1}}],["rebuild",{"2":{"4":1,"10":4,"151":1,"153":3,"156":8,"177":1,"180":2}}],["repl",{"2":{"60":1,"173":1,"176":1}}],["replace",{"2":{"31":1,"64":1,"146":2,"182":1}}],["replaced",{"2":{"22":1}}],["repeat",{"2":{"63":1,"64":3,"88":6}}],["repeating",{"2":{"53":1,"76":1}}],["repeated",{"2":{"2":1,"8":6,"10":3,"56":2,"59":1,"64":2,"76":2,"85":2,"88":4,"122":1}}],["represent",{"2":{"17":1,"59":1,"64":4,"88":1,"158":1}}],["representing",{"2":{"10":2,"71":1,"74":1,"76":1,"82":1,"84":1,"88":1,"158":1,"199":1}}],["represented",{"2":{"10":1,"158":1,"198":1}}],["represents",{"2":{"10":1,"165":3,"166":1}}],["reprojects",{"2":{"172":1}}],["reprojection",{"0":{"172":1},"1":{"173":1}}],["reproject",{"2":{"4":1,"5":7,"31":2,"148":1,"172":6,"173":2}}],["r",{"2":{"2":1,"10":2,"13":11,"14":12,"32":1,"176":1,"184":2,"191":6,"192":2,"193":4}}],["o",{"2":{"154":24}}],["odd",{"2":{"122":1}}],["own",{"2":{"76":1,"148":2}}],["occur",{"2":{"74":1}}],["occurs",{"2":{"74":1}}],["occupied",{"2":{"52":1}}],["old",{"2":{"64":8,"153":3}}],["ourselves",{"2":{"176":1}}],["our",{"2":{"24":1,"176":1,"191":4,"192":3,"198":1}}],["out=3",{"2":{"122":1}}],["out=4",{"2":{"73":1}}],["out`",{"2":{"73":1,"122":1}}],["out",{"2":{"10":3,"64":12,"66":23,"74":6,"76":4,"82":1,"84":5,"94":4,"105":1,"108":3,"121":2,"122":102,"125":4,"135":4,"145":1,"153":1,"177":1,"188":2}}],["outside",{"2":{"7":4,"8":2,"10":3,"64":3,"66":1,"71":2,"74":4,"76":3,"84":2,"85":1,"93":1,"104":1,"107":1,"121":3,"122":12,"140":1}}],["outputs",{"2":{"64":1}}],["output",{"2":{"7":16,"8":2,"10":18,"18":1,"23":1,"69":2,"70":1,"73":1,"74":1,"75":1,"76":2,"88":1,"91":1,"94":1,"104":1,"108":1,"118":1,"121":1,"125":1,"135":1,"145":2,"180":1,"184":1,"189":1}}],["outerjoin",{"2":{"197":1}}],["outermost",{"2":{"153":1}}],["outer",{"2":{"5":2,"10":1,"150":2,"151":1,"153":2,"198":1}}],["omit",{"2":{"10":1,"176":1}}],["obtain",{"2":{"153":1}}],["obtained",{"2":{"23":1}}],["observable",{"2":{"14":2}}],["obs",{"2":{"14":10}}],["obviously",{"2":{"8":2,"10":1,"167":1}}],["objects",{"2":{"5":8,"8":2,"10":17,"150":8,"151":5,"153":4,"154":1,"156":3,"167":1,"174":1,"180":2,"186":1}}],["object",{"2":{"5":8,"8":2,"9":2,"10":8,"20":1,"59":1,"84":1,"122":4,"150":2,"151":5,"153":1,"156":2,"167":1,"172":3,"176":1,"180":1,"186":1}}],["obj",{"2":{"5":8,"8":2,"10":17,"150":4,"153":1,"154":1,"156":8,"167":1,"171":2,"176":3,"180":3,"185":1,"186":1}}],["others",{"2":{"60":1,"170":1}}],["otherwise",{"2":{"8":4,"10":3,"60":1,"64":1,"71":1,"74":1,"85":2,"146":1,"171":1,"173":1,"176":1,"189":1}}],["other",{"0":{"8":1,"10":1,"156":1},"2":{"7":8,"10":12,"56":1,"64":5,"70":1,"73":1,"74":1,"75":2,"76":3,"77":2,"85":2,"88":2,"90":1,"96":1,"117":1,"120":1,"121":4,"122":8,"124":2,"125":2,"128":1,"137":1,"146":1,"151":1,"153":1,"156":1,"159":1,"166":2,"168":1,"170":2,"180":2,"182":2,"187":1,"188":1,"192":1,"197":4,"200":1}}],["ogc",{"0":{"7":1}}],["over=3",{"2":{"73":1}}],["over`",{"2":{"73":1}}],["overflow",{"2":{"69":1}}],["overhead",{"2":{"22":1,"153":1,"154":1}}],["overrides",{"0":{"33":1},"1":{"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1},"2":{"33":1}}],["override",{"2":{"10":1,"59":1}}],["over",{"2":{"5":2,"10":3,"52":2,"53":1,"63":3,"64":5,"66":1,"73":1,"74":11,"76":1,"81":1,"94":1,"105":1,"108":1,"121":2,"122":15,"125":1,"135":1,"150":2,"153":9,"154":11,"156":3,"191":3}}],["overlapping",{"2":{"64":11,"74":4,"76":6}}],["overlaps",{"0":{"46":1,"119":1,"120":1},"1":{"120":1,"121":1},"2":{"4":10,"7":9,"10":13,"31":1,"46":2,"74":1,"119":1,"120":3,"121":30,"146":1,"197":1}}],["overlap",{"2":{"2":1,"7":8,"10":4,"64":2,"74":8,"76":2,"94":1,"103":1,"120":5,"121":6,"122":2,"135":1,"168":1}}],["opposed",{"2":{"196":1}}],["opposite",{"2":{"7":10,"10":5,"64":2,"71":1,"74":2,"76":1,"91":2,"94":1,"104":2,"118":2,"135":1}}],["ops",{"2":{"154":1}}],["operable",{"2":{"158":1}}],["operates",{"2":{"153":1,"154":1,"161":1,"168":1}}],["operate",{"2":{"18":1,"29":1,"154":1}}],["operations",{"0":{"23":1,"34":1},"1":{"35":1,"36":1,"37":1,"38":1},"2":{"23":1,"26":1,"74":1,"76":1,"148":1}}],["operation",{"2":{"10":4,"64":1,"148":1,"154":1,"158":1,"166":2,"170":2,"188":2,"197":1}}],["open",{"2":{"64":1,"162":1,"192":1}}],["open>",{"2":{"10":2}}],["optimisation",{"2":{"122":1}}],["optimise",{"2":{"105":1}}],["optimal",{"2":{"10":1,"82":1}}],["options",{"2":{"14":1,"64":1}}],["optional",{"2":{"8":10,"10":6,"53":2,"56":1,"66":1,"85":2}}],["op",{"2":{"5":6,"10":3,"19":2,"63":1,"150":6,"154":35}}],["org",{"2":{"70":1,"73":1,"75":1,"122":2,"182":1}}],["organise",{"2":{"3":1}}],["orange",{"2":{"68":1,"84":1,"87":2,"90":2,"107":2,"120":2,"134":2}}],["oro",{"2":{"11":2}}],["originate",{"2":{"76":1}}],["originals",{"2":{"22":1}}],["original",{"2":{"10":4,"18":1,"22":1,"64":10,"69":5,"70":1,"73":1,"76":4,"151":1,"153":7,"165":1,"171":2,"177":1,"179":4,"180":1}}],["orient",{"0":{"13":1},"1":{"14":1,"15":1},"2":{"13":7,"14":12,"64":15,"74":53}}],["orientation",{"0":{"143":1},"1":{"144":1,"145":1},"2":{"3":1,"10":2,"31":1,"53":1,"64":10,"66":2,"70":1,"73":2,"74":2,"75":1,"122":16,"144":1,"180":1}}],["ordered",{"2":{"52":1}}],["order",{"0":{"81":1},"2":{"5":8,"7":2,"8":4,"10":7,"52":1,"53":2,"56":1,"59":1,"64":4,"74":1,"76":1,"81":4,"82":1,"85":2,"88":3,"91":1,"94":1,"104":1,"118":1,"150":4,"153":1,"154":1,"172":2,"180":1,"197":1}}],["or",{"0":{"24":1},"2":{"5":22,"7":6,"8":20,"10":57,"18":1,"20":1,"22":1,"23":1,"25":1,"27":1,"29":2,"31":1,"32":1,"53":1,"56":4,"59":1,"60":1,"62":2,"63":4,"64":24,"65":1,"69":1,"70":1,"71":3,"73":2,"74":9,"75":1,"76":2,"77":1,"82":1,"84":2,"85":4,"88":3,"90":1,"94":1,"96":2,"97":1,"98":1,"99":1,"100":1,"101":1,"107":2,"110":2,"111":3,"112":2,"113":1,"114":1,"115":1,"117":2,"118":1,"120":1,"121":2,"122":26,"124":1,"125":1,"131":1,"132":1,"135":1,"137":2,"141":1,"142":1,"144":2,"145":3,"146":7,"148":4,"150":14,"152":1,"153":8,"154":3,"155":2,"156":1,"158":2,"159":3,"160":1,"161":1,"163":1,"165":7,"166":2,"172":2,"173":1,"174":2,"176":2,"177":2,"178":1,"180":3,"182":2,"184":2,"186":1,"189":2,"197":1,"199":2}}],["on=2",{"2":{"122":1}}],["on`",{"2":{"122":1}}],["once",{"2":{"105":1,"121":1,"146":1}}],["onto",{"2":{"85":1}}],["ones",{"2":{"169":1}}],["oneunit",{"2":{"59":1}}],["one",{"2":{"5":2,"7":18,"10":15,"23":1,"53":2,"56":4,"58":1,"59":1,"63":1,"64":5,"66":3,"70":1,"71":1,"73":1,"74":32,"75":2,"76":2,"77":1,"84":2,"93":1,"100":1,"105":1,"107":1,"120":1,"121":18,"122":18,"124":2,"125":2,"128":3,"129":2,"130":2,"131":1,"132":1,"134":1,"135":1,"141":1,"145":1,"146":5,"153":1,"158":2,"169":1,"172":1,"176":1,"184":1,"185":1,"192":1,"197":1}}],["only",{"2":{"4":1,"9":2,"10":12,"23":1,"33":2,"53":2,"58":2,"59":1,"60":1,"63":2,"64":4,"66":3,"69":1,"70":1,"73":1,"74":1,"75":1,"82":3,"85":2,"88":3,"120":3,"121":1,"124":1,"146":2,"153":1,"154":2,"158":2,"169":1,"174":1,"175":1,"177":2,"187":1,"188":2,"193":1,"199":1,"200":1}}],["on",{"0":{"192":1},"2":{"2":1,"5":4,"8":6,"10":13,"18":1,"20":1,"23":2,"25":3,"27":3,"29":2,"32":1,"53":3,"56":5,"58":1,"59":2,"63":3,"64":28,"66":8,"69":1,"70":1,"71":5,"73":1,"74":4,"75":1,"76":2,"82":1,"84":1,"85":3,"88":2,"93":1,"94":7,"96":2,"97":3,"98":3,"99":1,"105":4,"108":6,"110":4,"111":1,"112":1,"121":9,"122":125,"125":7,"127":2,"135":7,"137":2,"138":1,"139":1,"146":3,"148":1,"150":4,"153":12,"154":4,"156":1,"158":3,"160":2,"161":1,"163":1,"166":1,"168":1,"174":1,"176":1,"182":1,"190":1,"192":3,"193":1,"195":1,"196":1,"197":4,"198":1,"199":2,"200":2}}],["often",{"2":{"192":1}}],["offers",{"2":{"191":1}}],["offer",{"2":{"176":1}}],["offset",{"2":{"56":8,"88":1}}],["off",{"2":{"8":2,"10":1,"64":4,"88":1,"122":6,"154":1}}],["of",{"0":{"80":1},"2":{"0":2,"2":4,"5":14,"7":58,"8":132,"9":10,"10":196,"17":3,"18":5,"19":1,"20":2,"22":1,"23":2,"24":2,"25":1,"26":1,"27":1,"29":3,"32":2,"52":5,"53":28,"55":1,"56":38,"57":9,"58":1,"59":13,"60":1,"62":3,"63":12,"64":84,"65":5,"66":31,"69":5,"70":12,"71":13,"73":10,"74":48,"75":9,"76":20,"77":5,"81":3,"82":3,"84":6,"85":18,"87":2,"88":19,"90":4,"91":5,"93":6,"94":18,"96":1,"97":5,"98":5,"99":1,"100":2,"101":1,"104":5,"105":1,"107":3,"108":14,"110":1,"111":1,"112":1,"114":2,"115":1,"117":1,"118":3,"120":1,"121":13,"122":85,"124":2,"125":15,"127":3,"128":7,"129":5,"130":1,"131":2,"132":1,"134":4,"135":18,"137":3,"138":6,"139":6,"140":4,"141":1,"142":1,"144":2,"145":3,"146":19,"147":2,"148":3,"150":12,"151":5,"152":2,"153":21,"154":7,"156":1,"158":4,"159":2,"161":1,"162":1,"166":2,"168":4,"170":4,"171":3,"172":1,"174":2,"175":2,"176":5,"177":2,"180":8,"182":4,"183":2,"184":1,"186":1,"188":4,"189":2,"191":6,"192":4,"193":2,"194":1,"195":4,"197":4,"198":4,"199":2}}],["2pi",{"2":{"191":1,"192":1,"193":1}}],["2nd",{"2":{"74":6}}],["2335447787454",{"2":{"193":1}}],["233544778745394",{"2":{"193":2}}],["23",{"2":{"58":3,"122":1}}],["23699059147",{"2":{"15":1}}],["28",{"2":{"58":2}}],["28083",{"2":{"15":2}}],["2658011835867806",{"2":{"191":1}}],["26745668457025",{"2":{"191":1}}],["267456684570245",{"2":{"191":3}}],["26",{"2":{"58":5,"122":2}}],["24989584635339165",{"2":{"191":1}}],["24279488312757858",{"2":{"191":4}}],["24",{"2":{"58":7,"122":1,"193":9}}],["274364",{"2":{"70":1,"73":1,"75":1}}],["274363",{"2":{"70":1,"73":1,"75":1}}],["27",{"2":{"58":2}}],["275543",{"2":{"10":6,"189":6}}],["2d",{"2":{"25":1,"27":1,"158":2,"174":1}}],["2^",{"2":{"14":1}}],["2158594260436434",{"2":{"191":1}}],["215118",{"2":{"10":4,"189":4}}],["21664550952386064",{"2":{"191":4}}],["21",{"2":{"58":4,"122":2,"193":40}}],["21427",{"2":{"11":5}}],["25",{"2":{"58":3,"90":1,"122":1,"134":1,"193":12}}],["258",{"2":{"11":1}}],["257223563`",{"2":{"176":1}}],["257223563",{"2":{"10":2,"158":1,"176":1}}],["295828190107045",{"2":{"193":1}}],["29582819010705",{"2":{"193":2}}],["299820032397223",{"2":{"191":1}}],["29",{"2":{"58":3,"196":1}}],["298",{"2":{"10":2,"158":1,"176":2}}],["29th",{"0":{"1":1},"1":{"2":1,"3":1}}],["22",{"2":{"58":3,"122":1}}],["22168",{"2":{"7":2,"10":3,"73":1,"74":1,"117":1,"118":1}}],["224758",{"2":{"7":2,"10":3,"73":1,"74":1,"117":1,"118":1}}],["2",{"2":{"5":38,"7":18,"9":2,"10":51,"13":1,"14":1,"15":3,"25":2,"27":2,"32":1,"53":1,"56":3,"58":6,"59":32,"62":2,"63":4,"64":10,"65":6,"66":7,"68":1,"69":2,"74":2,"75":1,"79":1,"80":1,"81":3,"82":1,"84":1,"85":3,"88":4,"91":2,"104":2,"105":2,"107":2,"108":3,"122":11,"135":2,"145":2,"146":23,"150":4,"153":4,"154":1,"158":1,"170":1,"177":1,"180":5,"182":7,"183":7,"184":5,"185":18,"189":11,"191":7,"192":6,"193":10,"194":1,"196":1}}],["20340",{"2":{"195":1}}],["20682326747054",{"2":{"193":1}}],["206823267470536",{"2":{"193":2}}],["20093817218219",{"2":{"191":1}}],["200938172182195",{"2":{"191":3}}],["2018",{"2":{"122":1}}],["2017",{"2":{"10":1,"59":1}}],["20",{"2":{"58":3,"122":2,"191":60,"193":1}}],["2024",{"0":{"0":1,"1":1},"1":{"2":1,"3":1}}],["20th",{"0":{"0":1}}],["xticklabelsvisible",{"2":{"192":1}}],["xticklabelrotation",{"2":{"13":2}}],["xoffset",{"2":{"191":4,"193":1}}],["x=x",{"2":{"189":1}}],["x`",{"2":{"153":1}}],["xvec",{"2":{"146":4}}],["xbounds",{"2":{"146":4}}],["xhalf",{"2":{"146":2}}],["xlast",{"2":{"85":3}}],["xfirst",{"2":{"85":5}}],["x0",{"2":{"85":5}}],["xn",{"2":{"66":4}}],["xind+1",{"2":{"146":1}}],["xind",{"2":{"146":2}}],["xinterior",{"2":{"63":2}}],["xi−xi−1",{"2":{"10":1}}],["xcentroid",{"2":{"63":13}}],["xrange",{"2":{"58":3,"84":2}}],["xautolimits",{"2":{"58":2}}],["xp2",{"2":{"56":5}}],["x26",{"2":{"53":6,"56":2,"59":1,"60":4,"64":58,"66":36,"70":4,"71":4,"74":24,"76":2,"85":3,"88":14,"100":2,"101":2,"105":48,"114":2,"115":2,"121":22,"122":170,"127":2,"131":2,"132":2,"141":2,"142":2,"145":4,"146":12,"153":2,"165":2,"170":6,"173":2,"176":2,"182":10,"183":2,"189":4,"197":4}}],["x2",{"2":{"10":3,"59":4,"63":2,"66":18,"85":8,"105":10,"121":4,"122":5,"146":5,"177":6,"189":2}}],["x1",{"2":{"10":4,"59":3,"63":2,"66":22,"85":8,"105":11,"121":5,"122":6,"146":5,"177":7,"189":2}}],["xs",{"2":{"10":3,"66":4,"146":30,"189":4}}],["xmax",{"2":{"10":1,"65":2,"66":48}}],["xmin",{"2":{"10":1,"65":2,"66":49}}],["x3c",{"2":{"9":2,"10":34,"31":1,"53":2,"56":4,"59":66,"64":17,"66":11,"69":3,"70":1,"73":1,"74":6,"75":1,"84":1,"85":13,"88":2,"105":33,"121":10,"122":13,"145":1,"146":4,"153":3,"154":2,"156":15,"158":3,"159":4,"160":4,"163":2,"166":3,"170":5,"176":2,"181":2,"182":6,"183":3,"184":9,"200":1}}],["xy`",{"2":{"172":1}}],["xy",{"2":{"5":8,"59":1,"172":3}}],["x",{"2":{"0":1,"2":5,"5":8,"8":2,"10":8,"11":6,"13":11,"14":10,"15":4,"50":2,"53":2,"56":9,"58":8,"62":1,"63":10,"64":21,"65":1,"66":8,"69":6,"71":9,"74":18,"76":9,"84":2,"85":7,"88":3,"105":21,"121":7,"122":16,"145":11,"146":2,"148":2,"150":6,"153":5,"154":4,"156":10,"160":5,"165":2,"167":2,"171":4,"172":1,"177":2,"180":2,"182":2,"184":1,"185":2,"186":2,"189":33,"191":6,"192":2,"193":2,"197":1,"199":2}}],["ty",{"2":{"146":3}}],["typing",{"2":{"60":1,"173":1,"176":1}}],["typically",{"2":{"57":1,"194":1}}],["typemax",{"2":{"85":1,"146":9}}],["typeof",{"2":{"19":1,"59":3,"153":2,"156":1,"159":1,"200":1}}],["type=",{"2":{"10":2}}],["type2",{"2":{"10":2,"88":4}}],["type1",{"2":{"10":2,"88":5}}],["types",{"0":{"157":1,"187":1},"1":{"158":1,"159":1,"160":1,"188":1},"2":{"10":4,"23":1,"24":1,"31":1,"59":3,"66":1,"69":1,"122":3,"157":1,"160":1,"180":1,"187":3,"197":1}}],["type",{"2":{"8":22,"9":2,"10":47,"11":1,"22":2,"23":1,"24":2,"30":2,"53":11,"56":9,"58":1,"59":8,"63":8,"64":21,"66":8,"69":6,"70":7,"71":6,"73":8,"74":19,"75":7,"76":5,"85":28,"88":2,"153":5,"156":38,"158":2,"159":3,"160":6,"164":1,"165":7,"166":2,"171":1,"176":1,"177":1,"180":3,"186":1,"188":1,"189":3,"196":1}}],["tx",{"2":{"146":3}}],["tᵢ",{"2":{"59":1}}],["tutorial",{"2":{"190":1,"197":1}}],["tutorials",{"2":{"26":2}}],["tups",{"2":{"163":4}}],["tuplepoint",{"2":{"31":3,"189":1}}],["tuple",{"0":{"186":1},"2":{"8":2,"10":19,"31":2,"59":2,"63":3,"64":5,"66":3,"69":1,"74":31,"122":17,"145":2,"146":5,"153":2,"162":6,"169":13,"175":1,"180":2,"182":1,"184":2,"189":6,"191":99,"198":2}}],["tuples",{"2":{"4":1,"10":2,"31":1,"60":1,"63":1,"64":1,"69":1,"70":3,"71":1,"73":2,"74":1,"75":4,"76":5,"82":2,"163":2,"170":2,"180":2,"186":2,"199":2}}],["turf",{"2":{"145":1}}],["turned",{"2":{"146":1,"153":1}}],["turning",{"2":{"146":8}}],["turn",{"2":{"10":1,"146":1}}],["temporary",{"2":{"64":1}}],["term",{"2":{"53":1}}],["terms",{"2":{"10":1,"59":1}}],["teach",{"2":{"26":1}}],["technically",{"2":{"23":1,"161":1}}],["technique",{"2":{"11":1}}],["tell",{"2":{"18":1,"122":1,"160":1,"200":1}}],["test",{"2":{"64":1,"180":2,"188":1}}],["testing",{"0":{"15":1}}],["tests",{"2":{"2":2}}],["text=",{"2":{"10":2}}],["t2",{"2":{"10":5,"59":47,"95":1,"105":2,"126":1,"136":1}}],["t1",{"2":{"10":6,"59":51,"105":2}}],["t=float64",{"2":{"8":2,"10":3,"63":3}}],["two",{"2":{"7":10,"8":20,"10":23,"23":2,"52":1,"56":2,"59":1,"63":1,"64":6,"66":3,"70":2,"73":1,"74":14,"75":4,"76":3,"85":5,"87":3,"88":12,"90":2,"91":1,"93":1,"103":1,"104":1,"105":1,"107":1,"117":2,"118":2,"120":4,"121":5,"122":2,"124":3,"125":1,"134":2,"146":3,"165":3,"166":1,"169":2,"170":2,"175":1,"188":1,"191":1,"197":3,"198":3}}],["task",{"2":{"153":3,"154":3}}],["tasks",{"2":{"153":5,"154":5}}],["taskrange",{"2":{"153":5,"154":5}}],["tags",{"2":{"64":4}}],["taget",{"2":{"10":2}}],["taylor",{"2":{"10":1,"59":1}}],["table2",{"2":{"197":4}}],["table1",{"2":{"197":12}}],["tables",{"2":{"22":4,"31":1,"153":6,"154":5,"156":2}}],["table",{"0":{"194":1},"2":{"10":1,"18":1,"29":2,"153":13,"154":4,"180":1,"194":1,"195":1,"197":2}}],["taking",{"2":{"10":3,"63":1,"70":1,"71":1,"73":1,"74":1,"75":1,"76":1,"168":1}}],["takes",{"2":{"64":3,"197":1}}],["taken",{"2":{"20":1,"58":1}}],["take",{"2":{"5":2,"10":2,"29":1,"64":3,"70":1,"71":1,"73":1,"74":1,"76":1,"145":2,"146":2,"148":1,"154":1,"172":1}}],["target=gi",{"2":{"64":1}}],["target=nothing",{"2":{"35":1,"36":1,"37":1,"38":1,"70":1,"73":1,"75":1}}],["targets",{"2":{"23":1,"53":3,"56":2,"66":3,"85":3}}],["target",{"0":{"23":1},"2":{"5":28,"10":28,"15":3,"22":2,"23":2,"32":1,"59":1,"63":2,"64":1,"70":5,"71":11,"73":6,"74":10,"75":4,"76":13,"146":1,"148":1,"150":16,"151":5,"152":1,"153":34,"154":33,"156":79,"159":3,"170":2,"172":3,"180":2}}],["tilted",{"2":{"66":1}}],["tie",{"2":{"56":1}}],["timings",{"2":{"13":5}}],["timing",{"2":{"13":2}}],["times",{"2":{"8":2,"10":1,"167":1}}],["time",{"2":{"5":10,"13":3,"24":1,"58":1,"146":1,"158":1,"172":4,"188":1,"191":1,"192":1,"193":2,"198":1,"199":1}}],["title",{"2":{"13":2,"58":2,"81":2,"146":1,"176":1,"180":2}}],["tip",{"2":{"5":2,"9":2,"10":1,"59":1,"172":1,"197":1}}],["tree",{"2":{"197":1}}],["treating",{"2":{"180":1}}],["treated",{"2":{"122":5,"191":1}}],["treats",{"2":{"53":1,"85":1}}],["trials",{"2":{"176":2,"180":2}}],["triangles",{"2":{"57":1}}],["triangle",{"2":{"10":1,"57":4,"183":4,"198":1}}],["triangulation",{"2":{"10":1,"31":1,"82":1}}],["trivially",{"2":{"148":1}}],["try",{"2":{"72":3,"146":1,"151":1,"153":3,"154":3,"156":3,"199":1}}],["tr",{"2":{"53":3}}],["traverse",{"2":{"64":1}}],["traced",{"2":{"64":1}}],["traces",{"2":{"64":1}}],["trace",{"2":{"64":2,"70":1,"73":1,"75":1}}],["track",{"2":{"64":3,"170":2}}],["tracing",{"2":{"10":1,"64":4,"66":1,"71":5,"74":2,"76":2}}],["traditional",{"2":{"10":1,"146":1,"158":1}}],["transverse",{"2":{"192":1}}],["translate",{"2":{"58":2}}],["translation",{"2":{"5":4,"10":2,"180":2,"185":2,"191":3,"193":1}}],["transformations",{"2":{"31":10}}],["transformation",{"0":{"185":1},"2":{"10":1,"146":1,"153":1,"164":1,"172":1,"190":1}}],["transform",{"2":{"4":2,"5":11,"10":3,"15":2,"31":1,"148":1,"172":2,"180":1,"185":4,"191":4,"193":1}}],["trait`",{"2":{"156":1}}],["trait2",{"2":{"85":10,"88":2,"110":2,"111":2,"121":2,"127":2,"129":2,"130":2}}],["trait1",{"2":{"85":12,"88":2,"110":2,"111":2,"121":2,"127":2,"129":2,"130":2}}],["traits",{"2":{"10":2,"18":1,"121":1,"151":2,"159":3,"165":2,"180":2}}],["trait",{"2":{"5":10,"7":4,"8":4,"10":17,"18":7,"20":1,"22":1,"31":1,"32":1,"53":5,"56":2,"59":6,"63":7,"66":2,"69":3,"70":2,"71":2,"73":6,"74":4,"75":2,"76":2,"85":7,"88":11,"94":3,"105":2,"108":3,"121":10,"122":4,"125":3,"135":3,"145":1,"148":1,"150":10,"151":3,"153":19,"154":9,"156":24,"159":8,"165":10,"166":1,"177":1,"180":2,"189":7,"191":1}}],["traittarget",{"0":{"159":1},"2":{"4":1,"5":4,"10":8,"32":1,"53":1,"56":1,"63":1,"66":1,"70":2,"71":4,"73":3,"74":4,"75":2,"76":4,"85":1,"148":1,"150":4,"153":6,"154":6,"158":1,"159":20,"177":1,"180":1}}],["trues",{"2":{"170":3}}],["true",{"0":{"24":1},"2":{"4":1,"5":10,"7":50,"8":6,"10":45,"31":1,"53":1,"56":7,"58":2,"60":1,"64":30,"66":6,"69":1,"70":1,"71":2,"73":1,"74":1,"75":2,"76":3,"85":4,"88":21,"90":1,"91":1,"93":2,"94":6,"96":1,"97":1,"98":4,"100":1,"101":1,"103":2,"104":1,"105":9,"107":2,"108":2,"110":1,"111":1,"112":3,"114":1,"115":1,"117":3,"118":1,"120":2,"121":18,"122":78,"124":2,"125":6,"128":1,"129":1,"131":1,"132":1,"134":2,"135":7,"137":1,"138":1,"139":4,"141":1,"142":1,"145":4,"146":5,"150":4,"153":6,"154":2,"156":1,"158":1,"160":3,"170":1,"173":1,"176":1,"180":1,"197":1,"200":1}}],["t",{"2":{"2":1,"4":1,"8":56,"10":56,"23":1,"31":8,"32":1,"53":41,"56":32,"59":26,"63":38,"64":74,"66":44,"69":18,"70":12,"71":12,"73":12,"74":156,"75":10,"76":20,"85":87,"88":17,"93":1,"111":1,"121":1,"122":24,"124":1,"128":2,"129":1,"146":14,"153":5,"154":4,"156":3,"158":5,"159":14,"160":2,"166":2,"170":2,"176":3,"177":5,"180":1,"186":7,"188":3,"189":10,"191":4,"199":1}}],["tokyo",{"2":{"199":1}}],["toy",{"2":{"197":1}}],["together",{"2":{"74":1,"76":1,"191":1,"198":1}}],["touching",{"0":{"128":1},"2":{"74":1,"76":1}}],["touch",{"0":{"129":1,"130":1,"131":1},"2":{"64":1,"124":1,"127":2,"129":1,"131":1}}],["touches",{"0":{"42":1,"123":1,"124":1,"127":1},"1":{"124":1,"125":1},"2":{"4":2,"7":5,"10":3,"31":1,"42":2,"123":1,"124":3,"125":11,"126":6,"127":11,"128":15,"129":9,"130":8,"131":3,"132":4,"197":1}}],["totally",{"2":{"75":1}}],["total",{"2":{"53":1,"59":2,"64":2,"66":1}}],["towards",{"2":{"25":1,"27":1}}],["topright",{"2":{"180":1}}],["topologypreserve",{"2":{"178":1}}],["topology",{"2":{"178":1}}],["topological",{"2":{"10":1,"158":2}}],["top",{"2":{"20":1,"26":1,"64":1,"146":1}}],["took",{"2":{"199":1}}],["tools",{"2":{"17":1}}],["too",{"2":{"10":1,"74":1,"174":1,"177":1}}],["tol^2",{"2":{"181":1,"182":1}}],["tolerances",{"2":{"183":1,"184":29}}],["tolerance",{"2":{"181":1,"182":1,"183":1,"184":17}}],["tol",{"2":{"10":12,"176":2,"180":18,"181":7,"182":15,"183":8,"184":18}}],["todo",{"2":{"7":4,"10":2,"31":1,"32":1,"64":1,"74":1,"82":2,"105":4,"121":1,"146":1,"153":1,"160":1,"163":1,"180":1}}],["to",{"0":{"2":1,"23":1,"26":1,"72":1,"95":1,"109":1,"126":1,"136":1},"2":{"0":2,"2":3,"3":2,"4":2,"5":44,"7":2,"8":66,"9":8,"10":144,"11":2,"13":1,"17":2,"18":9,"19":1,"20":2,"22":3,"23":4,"24":2,"25":3,"26":2,"27":3,"29":4,"30":1,"52":1,"53":4,"55":1,"56":8,"57":4,"58":1,"59":26,"60":2,"62":2,"63":5,"64":32,"65":1,"66":12,"68":1,"69":3,"70":8,"71":4,"73":8,"74":27,"75":7,"76":11,"77":1,"79":1,"80":1,"81":4,"82":6,"84":6,"85":32,"87":2,"88":17,"90":1,"91":1,"93":2,"94":7,"103":3,"104":1,"105":2,"107":1,"108":7,"117":2,"118":1,"120":3,"121":7,"122":21,"124":1,"125":7,"127":1,"134":1,"135":7,"145":4,"146":16,"148":4,"150":18,"151":6,"152":1,"153":33,"154":11,"155":7,"156":16,"158":6,"159":2,"160":6,"161":2,"162":3,"164":4,"165":11,"166":5,"167":3,"168":3,"169":1,"170":4,"171":1,"172":4,"173":1,"174":3,"175":3,"176":9,"177":7,"178":1,"180":4,"181":1,"182":15,"183":1,"184":2,"185":4,"186":1,"187":2,"188":9,"189":28,"190":4,"191":6,"192":10,"193":6,"194":7,"195":5,"196":1,"197":7,"198":5,"199":2,"200":8}}],["thus",{"2":{"53":1,"56":1,"64":3,"71":1,"74":1,"76":1}}],["those",{"2":{"33":1,"56":1,"64":1,"74":1,"96":1,"137":1,"158":1}}],["though",{"2":{"20":1,"162":1}}],["three",{"2":{"26":1,"57":1,"74":1,"158":1}}],["thread",{"2":{"153":3,"154":3}}],["threading",{"0":{"153":1},"2":{"153":5,"154":2,"160":1}}],["threads",{"2":{"5":2,"10":1,"150":2,"153":5,"154":7}}],["threaded=",{"2":{"153":4,"154":5}}],["threaded=true",{"2":{"153":1}}],["threaded=false",{"2":{"53":1,"63":4,"66":2,"85":8,"153":1,"154":1,"167":1,"180":1}}],["threaded==true",{"2":{"5":2,"10":1,"150":2,"153":1}}],["threaded",{"2":{"5":6,"8":2,"10":7,"24":1,"32":2,"53":1,"56":2,"63":3,"66":3,"85":5,"150":4,"153":25,"154":27,"155":1,"160":2,"167":1,"177":6,"180":1}}],["through",{"2":{"10":4,"56":1,"59":1,"64":3,"66":1,"68":1,"69":2,"82":1,"94":1,"122":5,"135":1,"146":1,"151":1,"153":1,"166":2,"170":2,"182":1,"188":1,"191":1}}],["thrown",{"2":{"151":1}}],["throws",{"2":{"10":1,"188":1}}],["throw",{"2":{"8":2,"10":1,"76":1,"88":1,"146":1,"153":1,"154":1,"156":3}}],["than",{"2":{"5":2,"7":2,"10":11,"11":1,"64":2,"96":1,"105":1,"121":1,"137":1,"145":1,"146":2,"150":2,"152":1,"153":1,"157":1,"166":2,"168":1,"169":1,"170":2,"174":1,"176":2,"177":1,"181":1,"188":2}}],["that",{"2":{"2":1,"5":2,"7":6,"8":16,"10":52,"17":1,"18":4,"19":3,"20":1,"22":3,"25":1,"26":1,"27":1,"52":2,"53":4,"56":4,"59":4,"60":2,"62":2,"63":3,"64":17,"65":3,"66":5,"70":4,"71":5,"73":4,"74":14,"75":3,"76":5,"77":1,"81":3,"82":4,"85":2,"87":1,"88":11,"90":4,"91":1,"93":2,"94":1,"104":1,"107":1,"108":1,"117":1,"118":1,"120":2,"121":10,"122":3,"124":2,"125":2,"127":2,"134":3,"135":1,"137":3,"145":1,"146":4,"148":1,"150":2,"153":5,"154":1,"155":1,"156":2,"157":2,"158":7,"159":1,"160":3,"161":3,"162":2,"163":1,"164":3,"165":3,"166":4,"168":2,"169":3,"170":4,"172":1,"174":2,"175":2,"176":3,"177":2,"180":2,"182":1,"184":1,"188":1,"192":4,"193":1,"194":2,"195":3,"197":1,"198":2}}],["thing",{"0":{"30":1}}],["things",{"2":{"2":1}}],["this",{"0":{"30":1},"2":{"0":1,"4":1,"5":2,"7":2,"8":12,"9":2,"10":31,"18":1,"23":3,"24":2,"25":2,"27":2,"29":1,"31":2,"32":3,"33":1,"50":1,"52":2,"53":9,"55":2,"56":6,"58":3,"59":11,"60":2,"62":1,"63":4,"64":26,"65":1,"66":4,"68":1,"69":5,"71":1,"72":1,"74":5,"75":1,"76":2,"82":5,"84":4,"85":6,"88":4,"90":1,"91":2,"93":3,"94":3,"101":1,"103":1,"104":2,"105":1,"108":3,"115":1,"118":2,"120":1,"121":4,"122":3,"125":3,"132":1,"134":1,"135":3,"142":1,"144":1,"145":3,"146":8,"147":2,"148":2,"151":2,"153":15,"154":7,"155":2,"156":2,"157":1,"158":3,"159":2,"160":4,"161":3,"163":3,"164":1,"165":9,"166":7,"167":2,"168":4,"170":3,"171":2,"172":4,"173":3,"174":3,"175":5,"176":5,"177":4,"178":2,"180":3,"184":9,"185":1,"186":1,"187":3,"188":2,"189":1,"190":1,"191":2,"192":4,"193":3,"194":3,"195":1,"197":3,"198":3,"199":3,"200":1}}],["theta",{"2":{"158":1}}],["theorem",{"2":{"85":1}}],["themselves",{"2":{"59":1}}],["them",{"2":{"10":1,"25":1,"27":1,"64":1,"146":2,"147":2,"153":3,"156":1,"162":2,"168":1,"169":1,"180":1,"191":1,"193":1,"195":3}}],["then",{"2":{"10":5,"18":1,"22":1,"29":1,"56":3,"59":2,"64":6,"66":1,"70":1,"72":2,"73":2,"74":6,"75":2,"76":2,"82":1,"122":1,"146":2,"148":1,"151":1,"153":2,"154":3,"168":1,"176":2,"180":1,"192":1,"197":1,"198":1}}],["thereof",{"2":{"148":1,"154":1}}],["therefore",{"2":{"84":1,"161":1}}],["there",{"2":{"10":3,"22":1,"56":1,"59":2,"60":1,"64":3,"66":1,"69":2,"71":1,"72":1,"74":6,"76":1,"121":2,"122":1,"146":3,"147":1,"148":1,"153":4,"158":1,"159":1,"162":1,"175":1,"184":1,"188":1,"192":2,"195":3}}],["their",{"2":{"7":2,"8":2,"10":2,"59":1,"62":2,"76":1,"85":2,"113":1,"121":1,"124":1,"128":1,"129":1,"138":3,"139":3,"148":1,"154":1,"162":1,"167":1,"169":1}}],["they",{"2":{"7":6,"8":22,"10":25,"20":2,"22":1,"23":1,"24":1,"57":1,"63":2,"64":8,"66":2,"70":2,"73":1,"74":6,"75":2,"76":3,"81":1,"87":3,"88":16,"94":1,"107":1,"111":2,"112":1,"113":1,"117":1,"120":2,"121":4,"122":2,"127":1,"129":1,"130":1,"138":1,"139":1,"146":6,"153":2,"156":1,"161":1,"166":2,"170":2,"175":1,"184":1,"187":1,"198":1}}],["these",{"2":{"5":4,"10":5,"24":1,"56":1,"59":5,"64":3,"76":1,"87":1,"88":1,"90":1,"94":1,"103":1,"105":2,"107":1,"108":1,"117":1,"120":1,"121":1,"124":2,"125":1,"134":1,"135":1,"145":1,"146":3,"150":2,"151":1,"153":2,"172":1,"176":1,"180":2,"188":1,"195":1,"197":1}}],["the",{"0":{"26":1,"29":1,"62":1,"80":1,"81":1},"2":{"0":5,"2":3,"3":1,"5":56,"7":128,"8":224,"9":24,"10":414,"11":3,"17":5,"18":10,"19":2,"20":4,"22":4,"23":5,"24":3,"25":3,"26":4,"27":3,"29":3,"32":3,"52":12,"53":43,"55":1,"56":63,"57":15,"58":12,"59":71,"60":6,"62":6,"63":25,"64":116,"65":7,"66":47,"68":2,"69":7,"70":27,"71":23,"72":1,"73":27,"74":82,"75":29,"76":70,"77":6,"81":11,"82":16,"84":11,"85":81,"87":5,"88":47,"90":9,"91":11,"93":8,"94":25,"97":8,"98":9,"99":3,"100":3,"101":2,"103":4,"104":11,"105":5,"107":2,"108":21,"110":8,"111":6,"112":4,"114":3,"115":2,"117":5,"118":6,"120":5,"121":26,"122":123,"124":5,"125":21,"127":6,"128":10,"129":7,"130":3,"131":3,"132":2,"134":7,"135":24,"137":2,"138":9,"139":9,"140":6,"141":2,"142":2,"144":1,"145":8,"146":47,"147":1,"148":9,"150":28,"151":11,"153":69,"154":23,"155":2,"156":12,"157":1,"158":20,"160":5,"161":5,"162":5,"163":4,"164":2,"165":17,"166":10,"167":1,"168":4,"169":8,"170":6,"171":5,"172":14,"173":2,"174":3,"175":5,"176":26,"177":17,"178":3,"180":18,"181":3,"182":6,"183":3,"184":2,"185":3,"186":1,"187":2,"188":21,"191":10,"192":11,"193":10,"194":2,"195":4,"197":10,"198":17,"199":3}}],["ecosystem",{"2":{"157":1}}],["effects",{"2":{"153":2,"154":1}}],["efficiently",{"2":{"20":1}}],["efficient",{"2":{"10":1,"59":1,"70":2,"73":2,"75":2,"82":1,"163":1}}],["e2",{"2":{"122":4}}],["e1",{"2":{"122":8}}],["euclid",{"2":{"66":2,"85":11,"122":1,"181":1}}],["euclidean",{"2":{"8":2,"10":3,"59":13,"85":6,"158":6,"177":1}}],["epsg",{"2":{"192":5,"193":8}}],["eps",{"2":{"56":2,"74":14}}],["eponymous",{"2":{"10":1,"176":1}}],["everything",{"2":{"180":1}}],["everywhere",{"2":{"158":1}}],["every",{"2":{"64":1,"88":2,"151":1,"188":1}}],["evenly",{"2":{"198":1}}],["eventually",{"2":{"64":1}}],["even",{"2":{"53":2,"66":1,"74":1,"85":1,"88":1,"148":1,"162":1,"168":1}}],["evaluated",{"2":{"197":1}}],["eval",{"2":{"31":6,"153":1,"154":1}}],["est",{"2":{"199":1}}],["essentially",{"2":{"33":1,"159":1}}],["especially",{"2":{"10":1,"18":1,"23":1,"146":1}}],["eg",{"2":{"32":1}}],["etc",{"0":{"156":1},"2":{"10":1,"20":2,"52":1,"82":1,"159":1,"195":1}}],["eltype",{"2":{"146":4}}],["elements",{"2":{"100":1,"101":1,"114":1,"115":1,"121":1,"131":1,"132":1,"141":1,"142":1}}],["element",{"2":{"10":6,"55":1,"64":4,"69":2,"70":1,"73":1,"74":1,"75":3,"175":1,"192":1}}],["ellipsoid",{"2":{"10":1,"158":2,"196":1}}],["elsewhere",{"2":{"69":1}}],["elseif",{"2":{"64":5,"66":7,"70":1,"73":1,"74":14,"75":2,"76":1,"105":3,"122":10,"145":1,"146":2,"170":1,"182":2,"184":2}}],["else",{"2":{"7":12,"10":6,"56":1,"59":2,"64":19,"66":9,"69":1,"71":2,"74":9,"75":1,"76":9,"105":2,"121":8,"122":17,"146":20,"153":6,"154":2,"156":2,"163":1,"171":1,"173":1,"180":2,"182":4,"184":2,"185":1,"186":1,"188":1}}],["empty",{"2":{"8":4,"10":6,"56":2,"64":2,"70":1,"73":1,"74":2,"75":1,"146":2}}],["embedding",{"0":{"152":1,"167":1}}],["embedded",{"0":{"193":1},"2":{"146":1,"152":3,"190":1,"193":1}}],["embed",{"2":{"4":2,"8":1,"10":1,"152":1,"167":2}}],["edgekeys",{"2":{"146":3}}],["edge",{"2":{"7":2,"8":6,"10":4,"20":1,"31":1,"53":1,"62":1,"64":25,"66":13,"70":1,"73":1,"74":6,"75":1,"85":4,"88":1,"96":2,"111":2,"112":1,"121":21,"122":7,"137":2,"138":1,"139":1,"146":7,"189":2}}],["edges`",{"2":{"74":1}}],["edges",{"2":{"4":1,"8":4,"10":9,"64":12,"66":8,"71":3,"74":10,"76":3,"85":3,"87":2,"88":1,"90":1,"96":1,"97":3,"98":7,"99":3,"107":1,"110":3,"113":1,"121":20,"122":3,"134":1,"137":1,"146":22,"189":29}}],["equator",{"2":{"10":1,"158":1}}],["equatorial",{"2":{"10":6,"176":4}}],["equality",{"2":{"64":1,"74":1,"197":1}}],["equal",{"2":{"7":4,"8":32,"10":19,"56":6,"74":1,"84":1,"85":4,"87":3,"88":22,"96":1,"110":1,"120":1,"121":2,"122":15,"127":2,"137":1,"162":1}}],["equals",{"0":{"40":1,"86":1,"87":1},"1":{"87":1,"88":1},"2":{"4":17,"8":5,"10":19,"31":1,"40":2,"56":2,"64":4,"69":2,"74":8,"85":1,"86":1,"87":2,"88":50,"96":1,"110":1,"121":2,"122":10,"127":3,"137":1,"197":1}}],["equivalent",{"2":{"7":2,"8":8,"10":6,"53":1,"64":1,"74":1,"76":1,"88":5,"94":1,"122":1}}],["earlier",{"2":{"191":3}}],["earth",{"2":{"10":2,"25":1,"27":1,"158":2,"176":2,"180":1,"192":2,"197":1}}],["easiest",{"2":{"194":1}}],["easier",{"2":{"160":1,"187":1}}],["easily",{"2":{"148":1}}],["east",{"2":{"66":9}}],["easy",{"2":{"5":2,"10":1,"168":1,"185":1}}],["eachindex",{"2":{"56":1,"145":1,"146":3,"153":1,"154":1,"181":1,"184":1}}],["each",{"2":{"2":1,"7":4,"8":6,"10":6,"18":2,"20":1,"53":2,"56":4,"57":4,"59":1,"64":5,"66":1,"74":3,"85":1,"88":2,"94":1,"108":1,"120":1,"121":3,"122":6,"125":1,"135":1,"145":1,"146":1,"153":1,"168":2,"180":1,"194":1,"195":1,"198":2,"199":2,"200":1}}],["either",{"2":{"5":4,"7":2,"10":4,"22":1,"25":1,"27":1,"64":9,"70":1,"73":1,"74":2,"75":1,"76":1,"84":1,"94":1,"117":1,"122":5,"124":1,"125":1,"135":1,"146":1,"150":4,"153":3,"165":1,"197":1}}],["enable",{"2":{"200":1}}],["enabled",{"2":{"197":1}}],["enabling",{"0":{"200":1}}],["enclosed",{"2":{"122":1}}],["encode",{"2":{"24":1}}],["encompasses",{"2":{"18":1,"122":1}}],["encounters",{"2":{"18":1}}],["en",{"2":{"122":1,"182":1}}],["envelope",{"2":{"74":2}}],["envelopes",{"2":{"74":2}}],["enough",{"2":{"64":1}}],["entirely",{"2":{"122":1}}],["entire",{"2":{"66":1,"122":4}}],["entry",{"2":{"64":11,"71":3,"74":4,"76":3,"146":1}}],["ent",{"2":{"64":19,"69":2}}],["enter",{"2":{"64":4}}],["ensuring",{"2":{"10":1,"174":1,"177":1}}],["ensure",{"2":{"10":3,"59":1,"70":1,"73":1,"75":1,"153":2,"161":2,"164":1}}],["ensures",{"2":{"10":3,"163":1,"166":3,"170":2}}],["enumerate",{"2":{"13":2,"56":1,"64":10,"66":1,"69":1,"71":1,"76":2,"122":1,"146":2,"170":2,"184":1}}],["enum",{"2":{"10":2,"64":3,"73":3,"122":3}}],["enforce",{"2":{"4":1,"10":2,"32":3,"188":3}}],["endpt",{"2":{"182":3}}],["endpoints",{"2":{"64":3,"66":1,"71":1,"74":6,"76":1,"85":2,"121":2,"122":11,"124":1}}],["endpoint=3",{"2":{"64":1}}],["endpointtype",{"2":{"64":2}}],["endpoint",{"2":{"7":2,"10":2,"64":27,"73":1,"74":16,"85":2,"93":1,"121":2,"122":3,"180":4,"182":4,"191":1}}],["ending",{"2":{"64":1,"66":1}}],["end",{"2":{"2":1,"5":2,"10":1,"13":4,"14":3,"31":6,"32":4,"35":1,"36":1,"37":1,"38":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"53":8,"56":18,"59":35,"60":3,"63":10,"64":130,"66":43,"69":9,"70":8,"71":12,"72":1,"73":5,"74":31,"75":6,"76":24,"82":3,"85":19,"88":20,"100":2,"101":2,"105":20,"114":2,"115":2,"121":21,"122":104,"127":1,"131":2,"132":2,"137":1,"141":2,"142":2,"145":9,"146":44,"147":4,"148":1,"150":2,"153":27,"154":17,"156":15,"158":4,"159":1,"160":4,"161":1,"163":5,"165":3,"170":18,"171":4,"172":1,"173":2,"176":8,"177":8,"180":7,"181":6,"182":30,"183":3,"184":27,"185":4,"186":4,"188":4,"189":19}}],["e",{"2":{"2":1,"22":1,"60":1,"146":1,"151":1,"153":2,"191":2,"192":1,"195":1}}],["exits",{"2":{"64":1}}],["exit",{"2":{"64":32,"69":2,"71":3,"74":3,"76":2}}],["existingnodes",{"2":{"146":3}}],["existing",{"2":{"64":3,"75":1,"146":1,"192":2,"194":1}}],["exists",{"2":{"64":1,"66":1,"74":1}}],["exist",{"2":{"10":1,"64":1,"74":3,"188":1}}],["excluding",{"2":{"113":1,"122":1,"137":2}}],["exclude",{"2":{"105":9}}],["exclusively",{"2":{"129":1}}],["exclusive",{"2":{"66":1,"74":2}}],["exc",{"2":{"60":2,"173":2,"176":2}}],["excellent",{"2":{"23":1}}],["except",{"2":{"18":1,"19":1}}],["excess",{"2":{"9":2,"10":1,"59":1}}],["ext2",{"2":{"122":3}}],["ext1",{"2":{"122":3}}],["ext",{"2":{"58":15,"64":10,"66":2,"69":3,"70":8,"73":8,"74":18,"75":8,"76":14,"105":7,"122":7}}],["extrema",{"2":{"146":1,"189":1}}],["extreem",{"2":{"56":10}}],["extracts",{"2":{"82":1}}],["extract",{"2":{"82":1,"146":1,"153":1,"154":2,"180":1}}],["extra",{"2":{"10":3,"64":1,"75":1,"174":1,"176":2,"177":1}}],["external",{"2":{"53":1,"122":2}}],["exterior",{"2":{"7":8,"8":4,"10":10,"52":1,"53":1,"56":1,"58":1,"59":36,"63":2,"64":4,"70":2,"75":3,"76":14,"85":1,"88":2,"90":1,"91":1,"94":3,"104":1,"108":2,"122":9,"125":2,"134":1,"135":3,"138":3,"139":3,"145":6,"146":6,"163":3,"164":1,"166":1,"167":1,"191":2}}],["exteriors",{"2":{"2":1,"73":2,"75":2,"146":1}}],["extending",{"2":{"121":1}}],["extended",{"2":{"10":1,"85":1,"158":2}}],["extensions",{"2":{"77":1,"195":1}}],["extension",{"2":{"5":2,"10":1,"59":1,"60":1,"82":1,"93":1,"147":1,"172":3,"173":2,"176":1,"177":1,"178":1,"195":1}}],["extent`",{"2":{"155":1,"167":1}}],["extent=true",{"2":{"167":1}}],["extent=nothing",{"2":{"156":1}}],["extent=",{"2":{"153":4}}],["extent=false",{"2":{"153":1,"180":1}}],["extent=gi",{"2":{"146":3}}],["extents",{"2":{"8":6,"10":3,"31":5,"66":1,"74":3,"121":1,"122":5,"146":3,"153":2,"167":2,"189":2}}],["extent",{"0":{"167":1},"2":{"4":2,"5":8,"8":5,"10":11,"24":1,"31":2,"32":1,"35":2,"36":2,"37":2,"38":2,"50":1,"58":1,"65":1,"66":1,"74":10,"121":2,"122":4,"146":12,"150":4,"152":4,"153":29,"155":3,"156":2,"160":1,"167":2,"180":1,"189":7}}],["exp10",{"2":{"176":1,"180":2}}],["expressed",{"2":{"57":2}}],["express",{"2":{"57":1}}],["experimental",{"2":{"31":3}}],["expect",{"2":{"5":2,"117":1,"172":1}}],["explain",{"2":{"26":1}}],["explanations",{"2":{"26":3}}],["explicitly",{"2":{"10":1,"18":1,"24":1,"53":1,"56":2,"59":1,"60":1,"85":2,"88":1,"173":1,"176":1,"177":1}}],["expose",{"2":{"77":1}}],["exposes",{"2":{"17":1}}],["exported",{"2":{"31":1}}],["export",{"2":{"31":2,"57":1,"158":2,"174":1,"193":1,"195":1}}],["exponential",{"2":{"2":1}}],["examples",{"0":{"175":1,"179":1},"2":{"7":16,"8":2,"10":11,"26":2,"88":1,"91":1,"94":1,"104":1,"105":1,"108":1,"121":1,"125":1,"135":1,"145":2,"189":1}}],["example",{"0":{"58":1,"78":1,"162":1,"169":1,"198":1,"199":1},"1":{"79":1},"2":{"5":6,"7":4,"10":13,"11":1,"20":1,"23":2,"52":1,"55":1,"58":1,"62":1,"63":1,"65":1,"68":1,"69":1,"70":1,"73":1,"74":1,"75":1,"84":1,"87":1,"88":1,"90":1,"93":1,"103":1,"105":1,"107":1,"117":1,"118":1,"120":1,"122":1,"124":1,"134":1,"145":1,"146":8,"148":1,"150":4,"153":2,"162":1,"164":1,"168":1,"169":1,"171":1,"179":1,"180":2,"185":1,"188":1,"198":1,"200":1}}],["exactly",{"2":{"184":1}}],["exactpredicates",{"2":{"0":1,"13":2,"14":2,"31":1}}],["exact",{"2":{"0":2,"7":10,"10":5,"12":1,"13":1,"64":36,"66":6,"69":7,"70":5,"72":1,"73":5,"74":7,"75":5,"76":7,"91":2,"94":3,"96":1,"97":3,"98":3,"99":1,"104":2,"105":1,"108":2,"110":1,"111":3,"112":2,"113":1,"118":2,"121":3,"122":24,"125":2,"127":1,"128":3,"129":1,"130":1,"135":3,"137":1,"138":3,"139":3,"140":1,"146":1,"169":1}}],["errors",{"2":{"31":1,"74":1,"177":1}}],["error",{"0":{"173":1},"2":{"0":1,"8":2,"10":4,"18":1,"31":6,"32":2,"59":1,"60":4,"64":2,"72":1,"74":2,"88":2,"146":1,"151":1,"165":2,"173":3,"176":5,"184":4,"188":3,"189":1}}],["df",{"2":{"194":3,"195":4,"198":10,"199":12}}],["dp",{"2":{"180":3}}],["dy",{"2":{"145":2,"177":3}}],["dy2",{"2":{"145":2}}],["dy1",{"2":{"105":10,"145":2}}],["dyc",{"2":{"105":2}}],["dx",{"2":{"145":2,"177":3}}],["dx2",{"2":{"145":2}}],["dx1",{"2":{"105":10,"145":2}}],["dxc",{"2":{"105":2}}],["drop",{"2":{"76":1,"170":1,"177":1}}],["driven",{"2":{"25":1,"27":1}}],["driving",{"2":{"25":1,"27":1}}],["duplicated",{"2":{"74":2}}],["during",{"2":{"64":1}}],["due",{"2":{"63":1,"64":1,"74":3}}],["date",{"2":{"81":1}}],["datas",{"2":{"200":1}}],["datasets",{"2":{"192":1,"197":1,"198":1}}],["dataset",{"2":{"192":1,"197":1}}],["datainterpolations",{"2":{"174":1}}],["dataapi",{"2":{"31":1,"153":7}}],["dataaspect",{"2":{"13":1,"14":1,"52":1,"55":1,"58":2,"62":1,"65":1,"84":2,"146":2,"175":1,"180":1}}],["dataframes",{"2":{"194":3,"198":2,"199":1}}],["dataframe",{"2":{"29":1,"194":1,"197":1,"198":5,"199":2}}],["data",{"0":{"146":1,"195":1},"2":{"23":1,"25":1,"27":1,"80":1,"146":2,"153":1,"180":10,"190":1,"192":2,"193":2,"194":2,"195":6,"198":1}}],["dashboard",{"0":{"14":1},"2":{"13":1,"14":1}}],["d",{"2":{"5":4,"9":2,"10":2,"59":1,"158":1,"172":1,"182":3}}],["dirname",{"2":{"180":4}}],["dirty",{"2":{"179":1}}],["directive",{"2":{"153":1}}],["direction",{"2":{"10":1,"64":1,"88":5,"146":3}}],["direct",{"2":{"33":1}}],["directly",{"2":{"10":1,"82":3,"146":1,"176":1}}],["dig",{"2":{"153":1}}],["dict",{"2":{"146":5}}],["didn",{"2":{"76":1,"122":1,"160":1}}],["division",{"2":{"58":1}}],["divided",{"2":{"26":1}}],["ditance",{"2":{"8":2,"10":1,"85":1}}],["dimensional",{"2":{"9":2,"10":4,"52":1,"59":1,"82":2,"158":1}}],["dimensions",{"2":{"7":2,"10":1,"121":2}}],["dimension",{"2":{"5":2,"7":8,"10":4,"105":2,"120":1,"121":4,"172":1}}],["discouraged",{"2":{"193":1}}],["discussion",{"2":{"25":1,"27":1,"69":1}}],["distributed",{"2":{"198":2}}],["distinct",{"2":{"74":1,"146":1}}],["dist",{"2":{"74":40,"85":19,"122":2,"176":8,"182":40}}],["distance`",{"2":{"176":3,"177":1,"188":1}}],["distances",{"2":{"74":1,"84":1,"176":1,"181":5}}],["distance",{"0":{"83":2,"84":2},"1":{"84":2,"85":2},"2":{"4":4,"8":50,"10":47,"31":1,"32":9,"59":13,"60":3,"66":3,"74":32,"83":2,"84":17,"85":92,"122":1,"148":1,"154":1,"174":1,"175":5,"176":13,"177":14,"180":1,"181":3,"182":6,"183":1,"196":1,"200":2}}],["disagree",{"2":{"53":1}}],["disparate",{"2":{"25":1,"27":1}}],["dispatches",{"2":{"10":1,"53":1,"56":1,"59":1,"63":1,"66":1,"85":1,"88":1,"94":1,"108":1,"121":1,"125":1,"135":1}}],["dispatch",{"2":{"8":2,"10":5,"24":1,"59":1,"88":1,"156":2,"159":1,"188":1}}],["displaying",{"2":{"192":1}}],["display",{"2":{"13":1,"58":1,"192":1}}],["displacement",{"2":{"10":1,"158":1}}],["disjoint",{"0":{"41":1,"106":1,"107":1,"110":1,"111":1,"112":1,"113":1,"114":1},"1":{"107":1,"108":1},"2":{"4":2,"7":9,"10":7,"23":1,"31":1,"41":2,"76":2,"106":1,"107":3,"108":11,"109":6,"110":15,"111":18,"112":10,"113":5,"114":4,"115":2,"118":3,"122":16,"166":2,"168":2,"170":7,"197":1}}],["diffs",{"2":{"56":4}}],["diff",{"2":{"10":2,"56":17,"70":5,"71":3,"121":3,"170":8}}],["differs",{"2":{"192":1}}],["differ",{"2":{"8":2,"10":1,"85":1}}],["differently",{"2":{"8":6,"10":4,"53":2,"56":1,"66":1}}],["different",{"2":{"7":2,"8":8,"10":6,"20":1,"23":1,"53":4,"56":1,"64":3,"66":1,"74":2,"81":1,"121":3,"146":1,"151":1,"153":1,"168":2,"192":2,"195":1}}],["differences",{"0":{"71":1},"2":{"74":1,"182":1}}],["difference",{"0":{"35":1,"38":1,"70":1},"2":{"4":1,"10":7,"11":1,"23":1,"31":1,"35":2,"38":1,"64":3,"70":12,"71":14,"74":1,"75":1,"76":3,"166":1,"170":1,"176":1}}],["diffintersectingpolygons",{"2":{"4":1,"10":1,"166":1,"170":4}}],["deu",{"2":{"199":2}}],["demonstrates",{"2":{"198":1}}],["densify",{"2":{"176":3}}],["densifying",{"2":{"176":1}}],["densifies",{"2":{"174":1}}],["denoted",{"2":{"122":1}}],["denotes",{"2":{"64":1}}],["debug",{"2":{"165":1}}],["debugging",{"2":{"59":1,"64":1}}],["derivation",{"2":{"74":1}}],["dealing",{"2":{"66":1}}],["delete",{"2":{"105":1,"121":1,"146":1,"182":1}}],["deleteat",{"2":{"64":6,"182":1,"184":2}}],["deltri",{"2":{"82":1}}],["delayed",{"2":{"64":10,"71":2,"74":2,"76":2}}],["delay",{"2":{"64":14,"70":2,"71":2,"73":2,"74":2,"75":2,"76":2}}],["delaunay",{"2":{"10":1,"82":1}}],["delaunaytriangulation",{"2":{"10":1,"31":1,"77":1,"82":6}}],["depend",{"2":{"64":2}}],["depends",{"2":{"64":1,"69":1}}],["depending",{"2":{"5":2,"10":1,"23":1,"74":1,"150":2,"153":1}}],["depth",{"2":{"59":2}}],["desktop",{"2":{"195":1}}],["dest",{"2":{"192":2}}],["destination",{"2":{"192":5}}],["desired",{"2":{"75":1,"195":1}}],["despite",{"2":{"56":1}}],["describe",{"2":{"17":1}}],["described",{"2":{"10":1,"59":1,"63":1,"64":1}}],["de",{"0":{"39":1},"1":{"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1},"2":{"122":2,"197":1}}],["deconstruct",{"2":{"148":1,"154":1}}],["decomposition",{"2":{"18":1,"148":1}}],["decomposing",{"2":{"18":1}}],["decompose",{"2":{"18":2,"29":1,"59":4,"154":1,"161":1}}],["decrementing",{"2":{"146":1}}],["decrease",{"2":{"63":1}}],["decreasing",{"2":{"10":1,"180":1}}],["decide",{"2":{"81":1,"146":1}}],["decision",{"2":{"24":1}}],["degenerate",{"2":{"10":1,"59":1,"69":2}}],["degeneracies",{"2":{"2":1}}],["degrees",{"2":{"10":1,"55":1,"145":1,"158":1,"176":1}}],["defines",{"2":{"64":1,"148":1,"154":1,"155":1,"156":1,"157":1,"164":1,"187":1}}],["define",{"2":{"10":1,"58":1,"74":2,"87":1,"146":2,"148":1,"151":1,"153":1,"158":1,"187":1,"200":2}}],["defined",{"2":{"0":1,"8":2,"9":2,"10":4,"22":1,"56":2,"59":1,"65":1,"66":4,"74":4,"85":2,"144":1,"153":1,"158":2,"177":1,"187":1}}],["definitions",{"2":{"188":1}}],["definition",{"2":{"8":8,"10":9,"88":8,"93":1,"158":3,"177":1}}],["default",{"2":{"5":4,"8":10,"10":14,"32":1,"53":2,"56":1,"66":1,"70":1,"71":2,"73":1,"74":5,"75":1,"76":2,"82":1,"85":2,"146":5,"153":5,"156":1,"172":2,"180":2}}],["defaults",{"2":{"5":12,"8":4,"10":14,"150":6,"153":1,"155":3}}],["deeper",{"2":{"5":2,"10":1,"150":2,"152":1,"153":2}}],["detrimental",{"2":{"168":1}}],["detector",{"2":{"81":1}}],["detection",{"2":{"81":1,"146":1}}],["determined",{"2":{"64":1,"66":1}}],["determine",{"2":{"64":10,"66":3,"70":2,"73":2,"74":9,"75":2,"94":1,"108":1,"121":1,"122":9,"125":1,"135":1,"182":3,"197":1}}],["determines",{"2":{"53":1,"64":3,"74":1,"122":10}}],["determinant",{"2":{"10":1,"59":1}}],["detail",{"2":{"26":1}}],["details",{"2":{"10":2,"156":4,"175":2}}],["details>",{"2":{"10":2}}],["det",{"2":{"4":1,"10":2,"59":4}}],["doi",{"2":{"70":2,"73":2,"75":2,"122":1}}],["doing",{"2":{"17":1,"22":1,"153":1,"193":1}}],["dot",{"2":{"56":2,"59":1}}],["download",{"2":{"192":1}}],["down",{"2":{"10":1,"18":1,"29":1,"59":1,"156":1}}],["doublets",{"2":{"199":2}}],["double",{"2":{"183":4}}],["doubled",{"2":{"10":1,"183":1}}],["douglas",{"2":{"178":2,"180":2,"182":1}}],["douglaspeucker",{"0":{"182":1},"2":{"4":1,"10":5,"178":1,"180":5,"182":6}}],["don",{"2":{"8":4,"10":3,"64":4,"70":1,"76":1,"88":6,"111":1,"122":1,"124":1,"128":1,"146":2,"153":3,"154":2,"177":1,"188":1}}],["done",{"0":{"3":1},"2":{"13":1,"14":1,"122":2,"146":1,"148":1,"168":1,"191":1,"197":1}}],["documenter",{"2":{"156":4,"175":2}}],["documentation",{"0":{"4":1},"1":{"5":1,"6":1,"7":1,"8":1,"9":1,"10":1},"2":{"4":1,"26":1,"58":1,"155":1}}],["docstring",{"2":{"156":8,"175":4}}],["docstrings",{"0":{"149":1},"1":{"150":1},"2":{"0":1,"155":1}}],["docs",{"0":{"26":1,"155":1},"2":{"26":1,"146":1}}],["doc",{"2":{"2":1,"3":1}}],["doable",{"2":{"2":1}}],["do",{"0":{"2":1,"23":1,"72":1},"2":{"5":2,"10":2,"14":1,"23":1,"31":1,"53":2,"56":1,"59":2,"60":1,"63":1,"66":1,"69":1,"76":3,"85":2,"87":1,"88":1,"103":1,"111":2,"112":1,"113":2,"122":1,"146":4,"148":1,"150":2,"153":5,"154":2,"156":4,"162":1,"163":1,"169":1,"171":2,"173":1,"176":1,"180":1,"185":2,"186":2,"192":2,"193":2,"194":3,"198":1,"199":1}}],["doesn",{"2":{"8":2,"10":2,"32":1,"53":1,"69":1,"88":1,"176":1,"188":1,"199":1}}],["does",{"0":{"22":1},"2":{"0":1,"19":1,"62":1,"74":2,"90":1,"93":3,"122":1}}],["cpu",{"2":{"199":1}}],["cp",{"2":{"196":1}}],["circumstances",{"2":{"158":2}}],["cy",{"2":{"145":2}}],["cyan",{"2":{"60":1,"173":1,"176":1}}],["cx",{"2":{"145":2}}],["cdot",{"2":{"145":1}}],["cs",{"2":{"122":9}}],["cshape",{"2":{"62":3}}],["cw",{"2":{"66":2}}],["cb",{"2":{"58":1,"81":1,"146":1}}],["cgrad",{"2":{"58":1}}],["cgal",{"2":{"58":1}}],["c",{"2":{"32":1,"53":1,"62":1,"66":4,"69":5,"72":3,"122":24,"176":1}}],["ceil",{"2":{"177":1}}],["ce",{"2":{"122":11}}],["certainly",{"2":{"74":1}}],["certain",{"2":{"17":1,"18":1,"26":1,"29":1}}],["central",{"2":{"64":1}}],["centroids",{"2":{"62":1,"63":1}}],["centroid",{"0":{"61":1,"62":1},"1":{"62":1,"63":1},"2":{"4":4,"8":3,"10":6,"31":1,"61":3,"62":4,"63":38,"148":1,"154":1,"180":4}}],["cent",{"2":{"62":2}}],["centered",{"2":{"64":1}}],["center",{"2":{"10":1,"62":1,"146":1}}],["cells",{"2":{"146":1}}],["cell",{"2":{"10":4,"65":3,"66":28,"146":2}}],["c2",{"2":{"10":3,"15":2,"85":3,"88":14,"146":21}}],["c1",{"2":{"10":3,"15":2,"85":4,"88":13,"146":26}}],["chunks",{"2":{"153":4,"154":5}}],["chunk",{"2":{"153":6,"154":7}}],["chull",{"2":{"50":2}}],["chose",{"2":{"24":1,"146":1}}],["choose",{"2":{"10":1,"82":1,"146":2}}],["changes",{"2":{"64":1}}],["changed",{"2":{"64":1}}],["change",{"2":{"24":1,"64":1,"81":1}}],["chain=2",{"2":{"64":1}}],["chain=1",{"2":{"64":1}}],["chain",{"2":{"64":66,"71":3,"74":4,"76":4,"81":2}}],["chains",{"2":{"20":1,"64":1}}],["chairmarks",{"2":{"13":1,"176":1,"180":1}}],["children",{"2":{"180":1}}],["child",{"2":{"10":2,"156":7}}],["checkargs",{"2":{"181":1,"182":1,"183":1,"184":1}}],["checking",{"2":{"88":1,"182":1}}],["checks",{"0":{"105":1,"116":1},"1":{"117":1,"118":1},"2":{"60":1,"64":1,"74":1,"87":1,"90":1,"93":1,"103":1,"107":1,"117":1,"120":1,"121":1,"122":5,"124":1,"134":1,"198":1}}],["checked",{"2":{"8":2,"10":1,"64":1,"74":1,"81":1,"122":1,"167":1}}],["check",{"2":{"0":1,"8":2,"10":1,"63":1,"64":8,"66":3,"69":1,"70":1,"72":1,"74":4,"75":1,"88":8,"122":11,"146":5,"153":1,"156":4,"167":1,"169":1,"175":2,"182":1,"184":1}}],["ctor",{"2":{"5":2,"10":1,"185":1}}],["categorize",{"2":{"69":1}}],["categorical",{"2":{"58":1}}],["came",{"2":{"69":1}}],["case",{"2":{"56":1,"57":2,"63":1,"64":1,"70":1,"74":2,"76":1,"122":16,"154":1,"200":1}}],["cases",{"2":{"10":1,"59":1,"69":2,"122":3,"151":1,"153":1,"154":1,"156":3}}],["cause",{"2":{"18":1,"23":1,"182":1}}],["careful",{"2":{"59":1,"151":1}}],["care",{"2":{"17":1,"153":1,"158":1}}],["carried",{"2":{"10":1,"188":1}}],["cairomakie",{"2":{"13":1,"52":1,"55":1,"58":2,"62":1,"65":1,"68":1,"79":1,"80":1,"81":1,"84":1,"87":1,"90":1,"93":1,"103":1,"107":1,"117":1,"120":1,"124":1,"134":1,"175":1,"176":1,"180":1,"190":1,"196":1,"198":1,"199":1}}],["california",{"2":{"199":1}}],["callable",{"2":{"146":4,"165":1}}],["calls",{"2":{"64":1,"74":1,"76":1,"85":1,"94":1,"108":1,"125":1,"135":1,"151":1,"153":1,"177":1}}],["calling",{"2":{"33":1,"64":2,"153":1}}],["call",{"2":{"18":1,"24":1,"53":1,"63":1,"153":4,"178":1}}],["called",{"2":{"10":2,"63":3,"64":1,"153":1,"163":1,"165":1,"166":1,"188":1,"192":1}}],["calculation",{"2":{"74":1}}],["calculations",{"2":{"10":2,"25":2,"27":2,"74":1,"158":1,"176":1}}],["calculating",{"2":{"8":2,"10":1,"18":1,"64":1,"167":1}}],["calculated",{"2":{"10":1,"62":2,"66":1,"74":2,"85":1,"153":4}}],["calculates",{"2":{"8":4,"10":6,"53":1,"59":2,"66":1,"74":2,"75":1,"85":2,"176":1,"183":1}}],["calculate",{"2":{"5":4,"9":2,"10":6,"11":1,"56":3,"59":3,"63":1,"66":1,"74":1,"122":1,"146":1,"150":2,"153":3,"155":1}}],["calc",{"2":{"5":4,"10":4,"24":1,"32":1,"35":2,"36":2,"37":2,"38":2,"50":1,"56":4,"150":2,"152":1,"153":19,"155":1,"160":1,"167":1,"180":2}}],["cache",{"2":{"10":1,"59":1}}],["cant",{"2":{"88":1,"146":1,"189":1}}],["cannot",{"2":{"7":6,"8":4,"10":5,"53":1,"88":1,"96":1,"99":1,"121":2,"125":1,"127":2,"129":1,"140":1}}],["can",{"2":{"0":2,"2":1,"5":2,"8":4,"10":16,"13":1,"14":1,"24":1,"26":1,"31":1,"53":1,"56":1,"57":2,"58":1,"59":3,"60":1,"63":1,"64":3,"66":1,"70":3,"73":3,"74":1,"75":3,"76":1,"81":1,"82":2,"87":1,"88":3,"90":1,"93":1,"105":1,"107":1,"117":2,"120":2,"121":3,"122":23,"124":1,"128":1,"129":1,"134":1,"137":1,"138":1,"139":1,"146":1,"147":1,"148":1,"150":2,"152":1,"153":8,"155":1,"156":1,"158":1,"162":2,"163":1,"166":1,"167":1,"168":2,"169":1,"173":1,"175":1,"176":2,"180":2,"188":1,"191":6,"192":1,"193":3,"195":3,"197":3,"198":3}}],["customize",{"2":{"153":1,"154":1}}],["custom",{"0":{"200":1},"2":{"10":3,"59":1,"200":2}}],["curr^2",{"2":{"56":2}}],["curr",{"2":{"56":8,"64":116,"69":9,"76":3,"170":26}}],["currentnode",{"2":{"146":8}}],["current",{"2":{"56":1,"59":8,"64":3,"69":2,"71":1,"74":1,"76":6,"146":2,"170":3}}],["currently",{"2":{"9":2,"10":4,"23":1,"59":1,"64":1,"69":1,"71":2,"146":1,"153":1,"158":2}}],["curve",{"0":{"122":1},"2":{"7":2,"8":14,"10":18,"53":7,"56":6,"64":5,"66":3,"73":7,"84":1,"85":22,"88":6,"94":2,"96":4,"97":9,"98":9,"108":1,"110":4,"111":6,"112":3,"121":1,"122":152,"125":1,"128":6,"130":3,"135":1,"137":4,"138":6,"139":6}}],["curves",{"2":{"4":1,"7":2,"10":5,"53":3,"66":3,"74":1,"84":1,"85":1,"88":13,"99":1,"121":1,"122":1,"140":1,"180":2}}],["cutpolygon",{"2":{"68":1}}],["cuts",{"2":{"68":1}}],["cutting",{"0":{"67":1},"1":{"68":1,"69":1},"2":{"64":1,"69":2}}],["cut",{"0":{"68":1},"2":{"4":1,"10":6,"31":1,"59":1,"67":1,"68":5,"69":22,"122":1}}],["cleaner",{"2":{"82":1}}],["cleanest",{"2":{"82":1}}],["clear",{"2":{"65":1}}],["clearly",{"2":{"52":1,"55":1,"84":1}}],["clamped",{"2":{"74":18}}],["clamp",{"2":{"56":1,"74":1}}],["classified",{"2":{"64":1}}],["classify",{"2":{"64":4}}],["class",{"2":{"10":1,"146":1}}],["class=",{"2":{"10":6}}],["closure",{"2":{"153":2}}],["closing",{"2":{"56":1}}],["close",{"2":{"56":5,"64":2,"66":1,"69":1,"74":1,"85":9,"146":1,"162":1,"163":4}}],["closer",{"2":{"10":1,"158":1}}],["closest",{"2":{"8":6,"10":3,"74":2,"84":1,"85":6,"158":1}}],["closed2",{"2":{"88":2}}],["closed1",{"2":{"88":2}}],["closedring",{"2":{"4":1,"10":1,"161":1,"162":1,"163":4,"164":1,"165":1,"166":1}}],["closed",{"0":{"161":1},"1":{"162":1,"163":1},"2":{"2":1,"8":8,"10":11,"31":1,"53":3,"56":6,"63":3,"64":1,"66":1,"74":1,"76":3,"88":21,"96":2,"97":5,"98":5,"110":2,"111":5,"112":3,"122":52,"128":5,"129":1,"137":3,"138":5,"139":5,"145":1,"146":1,"161":1,"162":1,"163":2,"164":1,"166":1,"191":1}}],["clockwise",{"2":{"2":1,"8":2,"10":4,"52":1,"53":1,"66":7,"81":1,"144":2,"145":3,"146":1}}],["clipping",{"0":{"64":1,"70":1,"71":1,"74":1,"75":1,"76":1},"2":{"2":1,"10":1,"31":8,"64":9,"69":3,"70":1,"73":1,"75":1,"168":1}}],["coastlines",{"2":{"196":1}}],["coarse",{"2":{"10":1,"174":1,"177":1}}],["cos",{"2":{"191":3,"192":1,"193":2}}],["copy",{"2":{"153":1,"165":1,"184":1}}],["coors1",{"2":{"145":2}}],["coors2",{"2":{"145":3}}],["coord",{"2":{"177":6}}],["coords",{"2":{"69":9,"177":8}}],["coordinatetransformations",{"2":{"5":4,"10":2,"180":1,"185":2,"190":1,"191":5,"193":2}}],["coordinate",{"0":{"59":1,"171":1,"192":1,"193":1},"2":{"5":8,"9":10,"10":7,"25":1,"27":1,"58":2,"59":10,"156":1,"172":4,"177":1,"190":3,"192":1}}],["coordinates",{"0":{"9":1,"57":1},"1":{"58":1,"59":1},"2":{"4":4,"5":2,"8":4,"9":12,"10":21,"53":2,"57":8,"59":25,"64":2,"65":1,"69":2,"70":1,"73":1,"75":1,"85":1,"88":2,"148":1,"158":1,"171":2,"172":1,"175":1,"176":3,"192":2}}],["co",{"2":{"122":2}}],["core",{"2":{"157":1}}],["corner",{"2":{"66":4,"146":1}}],["corners",{"2":{"66":1}}],["correspondent",{"2":{"145":1}}],["correspond",{"2":{"64":1}}],["corresponding",{"2":{"56":3,"71":2}}],["corrected",{"2":{"165":1}}],["correctness",{"2":{"161":1,"188":1}}],["correctly",{"2":{"153":1,"175":1}}],["correcting",{"2":{"20":1,"165":1}}],["corrections",{"0":{"164":1,"166":1},"1":{"165":1,"166":1},"2":{"162":1,"165":6,"169":1}}],["correction",{"2":{"10":10,"31":4,"70":1,"71":2,"73":1,"74":2,"75":1,"76":2,"161":1,"163":2,"164":2,"165":11,"166":7,"168":1,"170":2}}],["correct",{"2":{"10":3,"24":1,"53":1,"56":1,"63":1,"64":1,"66":1,"70":1,"73":1,"75":1,"85":1,"88":1,"94":1,"108":1,"121":1,"125":1,"135":1,"161":1,"162":2,"164":1}}],["cov",{"2":{"66":16}}],["cover",{"2":{"96":1,"100":1}}],["covering",{"2":{"10":2,"103":1,"166":2,"170":2}}],["covered",{"0":{"98":1,"99":1,"139":1},"2":{"7":2,"10":1,"71":1,"76":1,"93":1,"94":1,"98":2,"99":2,"100":1,"101":2,"103":1,"115":2,"122":3,"170":1}}],["coveredby",{"0":{"48":1,"92":1,"93":1,"96":1,"97":1,"100":1,"101":1,"115":1},"1":{"93":1,"94":1},"2":{"4":2,"7":7,"10":4,"31":1,"48":2,"64":1,"92":1,"93":3,"94":10,"95":6,"96":13,"97":15,"98":13,"99":5,"100":2,"101":2,"104":3,"197":1}}],["covers",{"0":{"47":1,"102":1,"103":1},"1":{"103":1,"104":1},"2":{"4":2,"7":9,"10":5,"31":1,"47":2,"102":1,"103":4,"104":5,"146":1,"197":1}}],["coverages",{"2":{"10":1,"66":1}}],["coverage",{"0":{"65":1},"2":{"4":1,"10":2,"31":1,"65":3,"66":16}}],["come",{"2":{"158":1}}],["commonly",{"2":{"195":1}}],["common",{"2":{"87":1,"155":1,"177":1,"190":1,"192":1,"193":1}}],["commented",{"2":{"145":1}}],["comments",{"2":{"122":1}}],["comment",{"2":{"30":1}}],["combos",{"2":{"71":1,"74":1,"76":1}}],["combines",{"2":{"63":1}}],["combine",{"2":{"63":2,"64":5,"170":1}}],["combined",{"2":{"10":1,"64":4,"76":1,"166":1,"170":2,"191":1}}],["combination",{"2":{"10":1,"64":1,"156":1}}],["coming",{"2":{"66":1}}],["com",{"2":{"10":2,"74":1,"82":1,"158":1}}],["compilation",{"2":{"160":1}}],["compiled",{"2":{"24":1}}],["compiler",{"2":{"24":1,"153":2,"160":2}}],["complex",{"2":{"148":1,"180":1,"197":1}}],["complexity",{"2":{"10":1,"148":1,"177":1}}],["complete",{"2":{"53":1}}],["completely",{"2":{"5":2,"7":8,"10":6,"64":2,"71":1,"76":1,"90":2,"91":1,"94":1,"103":1,"104":1,"122":1,"135":1,"150":2,"153":1,"158":2}}],["comprised",{"2":{"10":3,"70":1,"73":1,"75":1}}],["component",{"2":{"10":1,"53":3,"63":11,"66":8,"74":1,"153":2,"156":1}}],["components",{"2":{"10":2,"62":1,"63":2,"154":1,"156":23}}],["composed",{"2":{"8":8,"10":5,"88":5,"191":2}}],["computing",{"2":{"60":1,"77":1}}],["computational",{"2":{"10":1,"59":1}}],["computation",{"2":{"10":6,"59":1,"63":1,"70":1,"73":1,"75":1,"181":2,"182":2,"183":2}}],["computer",{"2":{"10":1,"59":1}}],["computes",{"2":{"10":1,"82":1}}],["compute",{"2":{"8":2,"10":3,"53":1,"59":1,"82":3,"177":1}}],["computed",{"2":{"8":8,"10":5,"53":3,"56":1,"59":3,"66":1,"196":1}}],["compact",{"2":{"199":3}}],["comparisons",{"2":{"197":1}}],["comparing",{"2":{"76":1,"88":1}}],["compares",{"2":{"146":1}}],["compared",{"2":{"88":1}}],["compare",{"2":{"7":2,"8":2,"10":2,"56":1,"76":1,"88":2,"121":1}}],["compatibility",{"2":{"53":1}}],["compatible",{"2":{"5":6,"10":1,"22":1,"25":1,"27":1,"53":1,"56":1,"59":2,"63":1,"66":1,"85":1,"88":1,"91":1,"94":1,"104":1,"108":1,"118":1,"121":1,"125":1,"135":1,"150":2,"151":1,"153":1,"172":2}}],["colname",{"2":{"153":3}}],["col",{"2":{"153":2,"154":1}}],["columns",{"2":{"153":2}}],["column",{"2":{"22":1,"153":9,"154":8,"156":2,"194":2,"197":8}}],["colored",{"2":{"198":1}}],["color=",{"2":{"192":2}}],["colors",{"2":{"79":1,"80":1,"196":1,"198":2}}],["colorrange",{"2":{"58":2,"84":1}}],["colorbar",{"2":{"58":1,"81":1,"84":1,"146":1}}],["colormap",{"2":{"14":1,"58":3,"84":1}}],["color",{"2":{"10":1,"52":1,"58":2,"59":1,"60":1,"62":1,"68":3,"79":1,"80":1,"81":2,"84":2,"87":4,"90":4,"93":1,"103":1,"107":4,"120":4,"134":4,"173":1,"176":1,"191":1,"192":1,"196":1,"198":5}}],["colatitude",{"2":{"10":1,"158":1}}],["collect",{"2":{"11":3,"13":1,"50":1,"52":2,"55":1,"59":1,"62":1,"65":2,"68":2,"82":2,"84":1,"146":3,"153":2,"154":1,"175":4,"189":2}}],["collections",{"0":{"100":1,"101":1,"114":1,"115":1,"131":1,"132":1,"141":1,"142":1},"2":{"5":4,"10":10,"22":1,"150":4,"152":1,"153":2,"154":2,"156":3,"180":2,"195":1}}],["collection",{"2":{"5":2,"8":14,"10":13,"18":2,"29":2,"53":3,"56":2,"66":2,"85":2,"100":2,"101":2,"114":2,"115":2,"131":2,"132":2,"141":2,"142":2,"148":1,"150":2,"153":3,"154":1,"180":1,"186":1,"189":1}}],["collinear",{"2":{"7":2,"10":2,"64":5,"70":2,"73":3,"74":12,"75":2,"120":1,"121":2}}],["couple",{"2":{"194":1}}],["course",{"2":{"152":1}}],["country",{"2":{"199":8}}],["countries",{"2":{"11":1,"80":1,"180":1}}],["counted",{"2":{"74":2}}],["counters",{"2":{"59":8}}],["counterparts",{"2":{"33":1}}],["counter",{"2":{"10":1,"64":7,"122":1,"144":1,"145":1}}],["counterclockwise",{"2":{"2":1,"8":2,"10":2,"52":2,"53":1,"81":1,"82":1}}],["count",{"2":{"64":16,"146":1,"184":1}}],["could",{"2":{"8":2,"10":1,"53":3,"74":4,"76":1,"77":1,"85":1,"122":2,"158":1,"172":1}}],["couldn",{"2":{"2":1,"160":1}}],["conditions",{"2":{"197":4}}],["connected",{"2":{"122":5}}],["connect",{"2":{"66":11}}],["connecting",{"2":{"56":1,"182":1,"191":2}}],["connections",{"2":{"10":2,"166":2,"170":2}}],["contents",{"2":{"153":1,"161":1}}],["context",{"2":{"32":4,"176":4,"192":2}}],["contours",{"2":{"146":1}}],["contour",{"2":{"146":4}}],["continue",{"2":{"53":1,"64":7,"66":1,"71":2,"74":1,"122":1,"153":1,"165":1,"170":3,"184":1,"199":1}}],["contributions",{"2":{"25":1,"27":1}}],["controlled",{"2":{"24":1}}],["control",{"2":{"23":1}}],["containing",{"2":{"65":1,"198":1}}],["contain",{"2":{"7":2,"10":1,"26":1,"76":1,"90":1,"121":1,"191":1}}],["contains",{"0":{"45":1,"89":1,"90":1},"1":{"90":1,"91":1},"2":{"4":2,"7":7,"10":4,"26":1,"31":1,"33":1,"45":2,"64":1,"76":1,"77":1,"89":1,"90":5,"91":4,"151":1,"169":1,"197":1,"198":1}}],["contained",{"2":{"2":1,"7":2,"10":1,"76":4,"91":1,"103":1,"120":1,"121":1,"153":1,"198":1}}],["consistent",{"2":{"64":1,"148":1}}],["consistency",{"2":{"22":1}}],["considered",{"2":{"56":1,"59":1}}],["consider",{"2":{"52":1,"55":1,"62":1,"65":1,"66":3,"68":1,"84":2,"87":1,"90":1,"93":1,"103":1,"107":1,"117":1,"120":1,"122":3,"124":1,"134":1}}],["constprop",{"2":{"105":1}}],["constants",{"2":{"64":1}}],["const",{"2":{"31":4,"64":1,"94":4,"108":3,"125":4,"135":4,"155":3,"180":4}}],["constrained",{"2":{"10":3,"70":1,"73":1,"75":1}}],["constructing",{"2":{"193":1}}],["construct",{"2":{"159":1}}],["constructors",{"2":{"10":2,"159":2}}],["constructed",{"2":{"5":2,"20":1,"172":1}}],["concepts",{"0":{"28":1},"1":{"29":1,"30":1},"2":{"26":1}}],["concavehull",{"2":{"147":1}}],["concave",{"2":{"10":1,"56":2,"62":2,"145":2}}],["concieve",{"2":{"2":1}}],["convention",{"2":{"62":1}}],["convenience",{"2":{"59":1,"188":1}}],["conversely",{"2":{"64":1}}],["conversion",{"0":{"186":1},"2":{"22":1,"33":1}}],["converted",{"2":{"22":1,"59":3}}],["converts",{"2":{"10":1,"189":1}}],["convert",{"0":{"95":1,"109":1,"126":1,"136":1},"2":{"10":3,"32":1,"35":2,"36":2,"37":2,"38":2,"40":2,"41":2,"42":2,"43":2,"44":2,"45":2,"46":2,"47":2,"48":2,"49":2,"50":1,"59":6,"82":1,"84":1,"146":2,"176":1,"180":3,"186":1,"188":1,"189":1}}],["convexity",{"2":{"81":2}}],["convexhull",{"2":{"50":1,"147":1}}],["convex",{"0":{"50":1,"77":1,"80":1},"1":{"78":1,"79":1,"80":1,"81":1,"82":1},"2":{"4":1,"10":7,"31":2,"50":1,"56":3,"77":4,"79":2,"80":1,"81":4,"82":11,"145":1}}],["code",{"2":{"0":1,"3":1,"26":5,"59":1,"94":1,"108":1,"122":1,"125":1,"135":1,"145":1,"160":1,"187":1,"199":1}}],["creation",{"2":{"191":1,"193":1}}],["creating",{"0":{"190":1,"191":1,"194":1},"1":{"191":1,"192":1,"193":1,"194":1,"195":1},"2":{"122":1}}],["create",{"0":{"193":1},"2":{"10":2,"13":2,"14":1,"64":1,"69":1,"74":2,"82":1,"146":2,"153":1,"166":2,"168":3,"170":2,"190":2,"191":4,"192":5,"193":3,"194":1,"195":1,"198":1}}],["created",{"2":{"8":4,"10":2,"64":1,"85":3}}],["creates",{"2":{"0":1,"64":3}}],["criteria",{"2":{"94":2,"108":2,"125":2,"135":2,"182":3}}],["cropping",{"2":{"58":2}}],["cross=1",{"2":{"73":1}}],["cross`",{"2":{"73":1}}],["crossings",{"2":{"64":3,"122":1}}],["crossing",{"0":{"105":1},"2":{"10":2,"64":81,"70":1,"71":7,"73":3,"74":7,"75":1,"76":6,"94":1,"105":1,"122":1,"135":1}}],["crosses",{"0":{"43":1},"2":{"4":2,"7":3,"10":3,"31":1,"43":2,"64":1,"69":1,"105":26,"122":2,"197":1}}],["cross",{"0":{"132":1},"2":{"2":1,"10":1,"56":3,"64":13,"69":14,"70":2,"71":1,"72":4,"73":2,"74":10,"75":2,"76":1,"94":1,"105":2,"108":1,"121":2,"122":17,"125":1,"135":1,"145":3}}],["crc",{"2":{"10":1,"59":1}}],["crs2",{"2":{"192":2}}],["crs1",{"2":{"192":2,"193":1}}],["crs=nothing",{"2":{"153":1,"167":1,"180":1}}],["crs=gi",{"2":{"153":5,"156":3}}],["crs`",{"2":{"153":1,"172":6}}],["crs",{"0":{"192":1},"2":{"5":32,"8":4,"10":10,"32":2,"35":2,"36":2,"37":2,"38":2,"50":2,"82":1,"146":10,"150":4,"152":3,"153":36,"155":2,"156":5,"167":1,"172":7,"180":1,"190":1,"192":13,"193":7,"195":1}}],["fn",{"2":{"195":8}}],["f``",{"2":{"158":1}}],["fc",{"2":{"153":4,"154":5,"156":13,"180":3,"189":14}}],["fj",{"2":{"146":2}}],["f2",{"2":{"64":2}}],["f1",{"2":{"64":2}}],["f64",{"2":{"13":2,"14":2}}],["fra",{"2":{"199":2}}],["frame",{"2":{"194":1}}],["framework",{"2":{"148":4,"154":2}}],["fracs",{"2":{"64":20,"69":1}}],["frac",{"2":{"59":1,"64":2,"74":17,"180":2}}],["fractional",{"2":{"64":1,"74":3}}],["fractions",{"2":{"64":1,"74":4}}],["fraction",{"2":{"10":4,"74":2,"85":1,"180":1}}],["front",{"2":{"56":1}}],["from",{"2":{"0":1,"5":6,"7":8,"8":32,"10":31,"11":1,"20":1,"22":1,"26":1,"31":2,"53":2,"58":1,"59":4,"60":1,"63":1,"64":6,"66":11,"69":1,"70":1,"71":3,"73":1,"74":11,"75":1,"76":6,"82":1,"85":25,"108":2,"110":5,"111":4,"112":2,"113":1,"114":2,"121":2,"122":6,"145":2,"146":7,"153":1,"156":3,"158":1,"160":1,"170":1,"172":4,"174":1,"180":1,"181":1,"182":3,"183":1,"189":1,"190":1,"192":5,"195":1,"197":1,"198":1,"200":1}}],["footprint",{"2":{"193":1}}],["foldable",{"2":{"153":2,"154":1}}],["follows",{"2":{"64":2,"94":1,"108":1,"125":1,"135":1,"146":1}}],["followed",{"2":{"26":1}}],["following",{"2":{"10":1,"59":1,"68":1,"156":1,"162":1,"169":1,"180":1,"197":1}}],["focusing",{"2":{"25":1,"27":1}}],["foundational",{"2":{"17":1}}],["found",{"2":{"10":8,"26":1,"66":1,"69":1,"70":2,"73":2,"74":1,"75":2,"88":1,"146":5,"151":3,"153":2,"154":1,"156":4,"177":1}}],["forward",{"2":{"74":1}}],["forwards",{"2":{"64":1,"71":1,"76":1}}],["formats",{"2":{"190":1,"193":1,"195":3}}],["format",{"2":{"69":1,"195":3}}],["form",{"2":{"18":1,"64":3,"74":8,"76":3,"153":1}}],["formed",{"2":{"8":4,"10":3,"55":1,"56":4,"59":1,"64":8,"75":1,"76":1,"182":1}}],["formula",{"2":{"8":2,"10":1,"53":2,"66":1}}],["force",{"2":{"5":2,"153":3,"172":1,"180":1}}],["for",{"0":{"71":1,"74":1,"76":1},"2":{"0":4,"2":2,"4":2,"5":6,"7":2,"8":8,"9":6,"10":47,"13":5,"14":1,"18":1,"20":1,"22":1,"23":5,"25":3,"26":1,"27":3,"29":1,"31":3,"32":1,"33":1,"53":8,"56":5,"57":1,"58":1,"59":19,"60":3,"63":7,"64":35,"66":11,"69":5,"70":2,"71":3,"73":1,"74":7,"75":1,"76":9,"77":2,"80":1,"82":3,"84":2,"85":7,"88":13,"94":3,"100":1,"101":1,"103":1,"105":6,"108":2,"114":1,"115":1,"120":1,"121":11,"122":22,"125":2,"131":1,"132":1,"135":3,"141":1,"142":1,"144":1,"145":5,"146":13,"147":1,"148":3,"150":2,"153":7,"154":1,"156":9,"158":1,"159":1,"160":2,"161":3,"162":2,"164":1,"165":5,"167":1,"168":3,"169":1,"170":5,"172":3,"174":4,"175":7,"176":6,"177":8,"178":4,"180":12,"181":2,"182":2,"183":1,"184":6,"188":5,"189":7,"190":1,"192":4,"193":1,"195":3,"197":2,"199":2,"200":1}}],["fancy",{"2":{"191":1}}],["fancis",{"2":{"10":1,"59":1}}],["fair",{"2":{"175":1}}],["fail",{"2":{"5":2,"10":2,"150":2,"153":2,"154":1,"156":3,"176":1}}],["fallback",{"2":{"153":1}}],["falses",{"2":{"64":2,"69":1,"70":1,"73":1}}],["false",{"0":{"24":1},"2":{"4":1,"5":58,"7":14,"8":6,"10":58,"32":2,"35":1,"36":1,"37":1,"38":1,"50":1,"53":1,"56":2,"58":5,"64":26,"66":5,"69":1,"70":1,"71":3,"74":1,"75":4,"85":2,"87":2,"88":27,"90":2,"94":8,"96":2,"97":4,"98":1,"99":1,"100":1,"101":1,"103":2,"105":11,"108":9,"110":1,"111":4,"114":1,"115":1,"121":22,"122":39,"125":8,"127":3,"128":4,"129":1,"131":1,"132":1,"134":1,"135":7,"137":2,"138":4,"139":1,"140":1,"141":1,"142":1,"145":10,"146":5,"150":8,"153":11,"154":7,"156":3,"158":1,"160":3,"162":16,"169":44,"170":4,"177":2,"180":1,"184":2,"185":20,"189":2,"191":242,"192":12,"193":18,"197":1}}],["fashion",{"2":{"52":1}}],["faster",{"2":{"59":1,"153":1}}],["fast",{"2":{"12":1}}],["few",{"2":{"162":1}}],["fetched",{"2":{"146":1}}],["fetch",{"2":{"32":2,"153":1,"154":1}}],["featurecollection",{"2":{"10":2,"11":1,"18":1,"146":4,"153":6,"156":1,"192":2}}],["featurecollectiontrait",{"2":{"5":2,"10":2,"150":2,"151":1,"153":3,"154":2,"156":9,"189":5}}],["features",{"0":{"95":1,"109":1,"126":1,"136":1},"2":{"5":2,"10":3,"11":1,"22":1,"82":1,"146":3,"150":2,"152":1,"153":11,"154":6,"156":2,"192":1}}],["featuretrait",{"2":{"5":4,"10":3,"95":4,"105":2,"109":4,"126":4,"136":4,"150":4,"151":3,"153":3,"154":3,"156":9,"189":5}}],["feature",{"2":{"5":12,"8":2,"10":10,"18":2,"22":1,"53":1,"66":1,"146":2,"148":1,"150":12,"152":1,"153":22,"154":6,"156":22,"180":2,"189":2,"195":1}}],["feb",{"0":{"1":1},"1":{"2":1,"3":1}}],["f",{"2":{"5":24,"10":26,"15":1,"18":3,"19":1,"22":2,"52":2,"55":1,"58":4,"60":1,"62":2,"64":19,"65":2,"68":2,"70":2,"71":2,"73":2,"74":2,"75":2,"76":2,"79":2,"80":2,"84":5,"87":2,"90":2,"93":2,"103":2,"107":2,"117":2,"120":2,"122":7,"124":2,"134":2,"146":30,"150":14,"151":2,"153":61,"154":64,"156":48,"173":1,"175":2,"176":1,"179":2,"180":1,"184":6,"185":6,"188":5,"189":16,"191":6,"193":2,"198":3}}],["flexijoins",{"2":{"197":2,"198":3,"199":1,"200":5}}],["flexible",{"2":{"153":1,"154":1}}],["flags",{"2":{"64":5}}],["flag",{"2":{"64":12,"69":1}}],["flat",{"2":{"10":1,"184":2,"189":1}}],["flattened",{"2":{"18":1}}],["flattening`",{"2":{"158":1}}],["flattening",{"2":{"10":6,"154":1,"158":3,"176":2}}],["flatten",{"0":{"156":1},"2":{"4":1,"10":4,"11":3,"13":1,"18":1,"50":1,"59":1,"64":2,"66":3,"73":1,"76":1,"82":2,"105":1,"156":30,"170":1}}],["floating",{"2":{"10":1,"64":1,"74":5,"146":2}}],["float",{"2":{"10":3,"70":1,"73":1,"75":1}}],["float64x2",{"2":{"13":6,"14":6,"15":2}}],["float64",{"2":{"5":12,"8":20,"10":30,"13":1,"53":6,"55":1,"56":3,"63":1,"66":4,"69":2,"70":2,"73":1,"74":3,"75":1,"81":1,"85":12,"121":2,"122":4,"145":4,"162":6,"169":26,"175":2,"176":2,"177":1,"181":4,"182":9,"183":2,"184":6,"185":6,"186":1,"189":8,"191":190,"192":7,"193":10}}],["flipping",{"0":{"171":1},"2":{"171":1}}],["flipped",{"2":{"5":4,"10":2,"150":4,"153":2}}],["flipaxis",{"2":{"58":1}}],["flip",{"2":{"4":1,"10":1,"31":1,"148":2,"153":1,"171":2}}],["fulfilled",{"2":{"182":1}}],["fully",{"2":{"10":1,"64":4,"69":1,"121":4}}],["full",{"0":{"4":1},"1":{"5":1,"6":1,"7":1,"8":1,"9":1,"10":1},"2":{"4":1,"66":5,"165":1,"199":4}}],["furthest",{"2":{"146":1}}],["further",{"2":{"62":1,"153":1}}],["furthermore",{"2":{"7":4,"10":5,"64":1,"70":1,"73":1,"75":1,"94":1,"135":1}}],["fun",{"2":{"191":1}}],["fundamental",{"2":{"26":1,"187":1}}],["func",{"2":{"13":5}}],["funcs",{"2":{"13":2,"14":3}}],["functionality",{"2":{"74":1,"171":1,"172":1,"177":1,"188":1}}],["functionalities",{"2":{"64":1}}],["functionally",{"2":{"5":2,"10":1,"18":1,"29":1,"150":2,"153":1}}],["functions",{"0":{"5":1,"71":1,"74":1,"76":1,"150":1,"189":1},"2":{"2":3,"10":1,"17":1,"26":1,"29":1,"33":1,"53":1,"59":1,"63":1,"64":2,"66":1,"68":1,"122":1,"147":1,"148":1,"151":1,"165":3,"166":1}}],["function",{"2":{"0":2,"2":1,"5":8,"8":2,"10":12,"13":3,"14":2,"18":2,"29":1,"31":1,"32":2,"53":3,"56":5,"59":13,"63":6,"64":18,"66":7,"68":2,"69":4,"70":3,"71":3,"72":1,"73":2,"74":7,"75":2,"76":4,"82":2,"85":6,"87":1,"88":8,"90":1,"93":1,"94":1,"100":1,"101":1,"103":1,"105":5,"107":1,"108":1,"114":1,"115":1,"117":1,"120":1,"121":7,"122":9,"124":1,"125":1,"131":1,"132":1,"134":1,"135":1,"141":1,"142":1,"145":4,"146":16,"147":3,"148":1,"150":4,"151":2,"153":15,"154":11,"156":5,"160":1,"163":2,"165":9,"166":2,"170":2,"171":2,"172":1,"174":2,"176":2,"177":7,"180":3,"181":2,"182":3,"183":2,"184":7,"185":3,"186":1,"188":6,"189":12,"191":1,"197":4,"200":4}}],["future",{"2":{"23":1,"77":1,"85":1,"174":2}}],["fi",{"2":{"146":2}}],["fine",{"2":{"175":1}}],["final",{"2":{"76":1,"165":4,"176":1}}],["finally",{"2":{"58":2,"74":1,"146":1,"153":3,"154":1,"195":1}}],["findmin",{"2":{"184":1}}],["findmax",{"2":{"180":1,"182":1}}],["findall",{"2":{"165":1}}],["finding",{"2":{"74":1}}],["findfirst",{"2":{"64":6,"69":2,"80":1,"180":1}}],["findnext",{"2":{"64":3}}],["findlast",{"2":{"64":2}}],["findprev",{"2":{"64":2}}],["finds",{"2":{"64":1,"66":1}}],["find",{"2":{"53":1,"56":6,"64":12,"66":3,"69":2,"70":4,"73":2,"74":8,"75":1,"85":3,"88":1,"122":7,"146":2,"182":5,"199":1}}],["finish",{"2":{"2":1}}],["fill",{"2":{"64":1,"146":1,"177":3}}],["filled",{"2":{"64":5,"66":3,"84":1,"85":2,"122":16}}],["files",{"2":{"187":1,"195":2}}],["file",{"2":{"26":1,"32":1,"33":1,"64":1,"94":3,"108":3,"125":3,"135":3,"146":1,"147":1,"148":1,"154":1,"155":1,"156":1,"164":1,"172":1,"177":1,"178":1,"187":2,"190":1,"195":2}}],["filters",{"2":{"64":1}}],["filtering",{"2":{"10":1,"180":1}}],["filter",{"2":{"8":2,"10":2,"64":2,"153":2,"154":1,"167":1,"170":2,"180":1}}],["fit",{"2":{"17":1}}],["field",{"2":{"13":2,"64":2}}],["figure",{"2":{"13":1,"14":1,"52":1,"58":2,"81":1,"192":3}}],["fig",{"2":{"13":6,"14":6,"81":5,"191":7,"192":4,"196":2}}],["firstisright",{"2":{"146":2}}],["firstisleft",{"2":{"146":4}}],["firstisstraight",{"2":{"146":4}}],["firstnode",{"2":{"146":9}}],["first",{"2":{"7":18,"10":10,"53":7,"56":14,"58":1,"59":9,"60":1,"63":1,"64":17,"66":2,"69":1,"70":2,"73":1,"74":5,"75":3,"85":8,"88":4,"90":2,"91":2,"93":1,"94":2,"97":1,"98":1,"99":1,"104":2,"108":3,"121":1,"122":22,"125":2,"127":1,"134":1,"135":2,"138":1,"139":1,"140":2,"145":1,"146":16,"153":3,"154":2,"156":2,"162":1,"177":3,"181":1,"182":2,"189":2,"190":1,"191":1,"192":1,"193":1,"197":1,"198":1}}],["fix1",{"2":{"153":1,"154":1,"177":1}}],["fixme",{"2":{"145":1}}],["fix2",{"2":{"32":1,"64":2}}],["fixed",{"2":{"10":3,"70":1,"73":1,"75":1}}],["fix",{"0":{"20":1},"2":{"2":3,"10":9,"15":3,"17":1,"20":1,"70":1,"71":11,"73":1,"74":11,"75":1,"76":10,"81":2,"162":1,"164":1,"165":1,"169":1}}],["bx",{"2":{"145":2}}],["b2y",{"2":{"74":4}}],["b2x",{"2":{"74":4}}],["b2",{"2":{"74":47,"85":3,"121":6}}],["b``",{"2":{"71":1}}],["b`",{"2":{"71":3,"74":4,"76":4}}],["bigger",{"2":{"64":1}}],["bit",{"2":{"25":1,"27":1,"184":8,"191":2}}],["b1y",{"2":{"74":7}}],["b1x",{"2":{"74":7}}],["b1",{"2":{"64":8,"74":63,"121":6}}],["breaks",{"2":{"170":1}}],["break",{"2":{"64":3,"66":1,"71":2,"88":4,"121":1,"122":11,"146":6,"170":2}}],["brevity",{"2":{"59":1}}],["broadcasting",{"2":{"10":1,"59":1}}],["broken",{"2":{"7":2,"10":1,"105":1}}],["building",{"2":{"191":1}}],["build",{"2":{"64":13,"69":1,"70":1,"73":1,"75":1,"156":4,"175":2,"183":1,"184":1}}],["built",{"2":{"17":1,"20":1}}],["buffers",{"2":{"146":1}}],["buffered",{"2":{"60":2}}],["buffering",{"2":{"59":1,"60":1}}],["buffer",{"0":{"60":1},"2":{"31":2,"60":5,"63":2,"64":1,"147":1}}],["but",{"2":{"5":4,"7":10,"8":6,"10":16,"18":1,"22":1,"25":1,"27":1,"32":1,"52":1,"53":1,"56":1,"66":1,"74":2,"76":2,"81":2,"82":2,"88":4,"93":2,"120":1,"121":5,"122":1,"124":1,"125":1,"128":2,"129":1,"134":1,"145":1,"146":1,"147":1,"150":4,"151":1,"153":10,"154":3,"156":4,"158":4,"159":1,"171":1,"172":1,"177":1,"180":1,"188":2,"192":2,"193":2,"195":1,"197":1,"198":1,"199":2}}],["black",{"2":{"68":1,"192":1}}],["blue",{"2":{"14":1,"68":1,"87":2,"90":2,"107":2,"120":2,"134":2,"198":2}}],["bloat",{"2":{"193":1}}],["block",{"2":{"10":2,"191":1}}],["blob",{"2":{"10":2,"180":1}}],["balancing",{"2":{"153":1,"154":1}}],["barrier",{"2":{"153":1}}],["barycentric",{"0":{"9":1,"57":1,"59":1},"1":{"58":1,"59":1},"2":{"2":1,"4":6,"9":17,"10":17,"31":1,"57":9,"58":4,"59":52}}],["basic",{"2":{"146":1}}],["base",{"2":{"31":5,"32":1,"59":15,"60":1,"64":2,"146":6,"153":3,"154":3,"158":2,"159":1,"173":1,"176":2,"177":1,"188":3}}],["based",{"2":{"8":4,"10":3,"19":1,"53":2,"56":2,"58":2,"63":1,"66":1,"85":2,"88":1,"94":1,"108":1,"121":1,"122":2,"125":1,"135":1,"159":1,"195":1,"197":1,"198":1}}],["badge",{"2":{"10":2}}],["backs",{"2":{"69":4}}],["backwards",{"2":{"64":1,"71":1,"74":1,"76":1}}],["backing",{"2":{"64":1}}],["backend",{"2":{"60":2,"188":1}}],["back",{"2":{"10":1,"18":1,"22":1,"23":1,"69":4,"188":1}}],["b",{"2":{"7":4,"8":14,"10":13,"35":2,"36":2,"37":2,"38":2,"40":2,"41":2,"42":2,"43":2,"44":2,"45":2,"46":2,"47":2,"48":2,"49":2,"64":206,"66":9,"70":26,"71":18,"72":3,"73":26,"74":77,"75":27,"76":39,"88":29,"121":22,"122":2,"194":1}}],["box",{"2":{"65":2,"66":3,"198":1}}],["bounce",{"2":{"64":8,"70":1,"71":1,"73":1,"74":1,"75":1,"76":1}}],["bouncings",{"2":{"64":1}}],["bouncing",{"2":{"64":13,"71":3,"74":4,"76":4}}],["bound",{"2":{"72":1}}],["bounding",{"2":{"64":1,"65":2,"66":3}}],["boundscheck",{"2":{"59":14}}],["bounds",{"2":{"10":1,"146":4}}],["boundaries",{"2":{"7":4,"10":2,"103":2,"107":1,"108":1,"117":1,"118":1,"122":2,"146":1}}],["boundary",{"2":{"7":14,"10":7,"84":1,"90":1,"91":1,"93":1,"94":3,"97":4,"104":2,"105":9,"108":2,"110":1,"111":6,"112":3,"122":18,"124":2,"125":4,"127":3,"128":5,"129":3,"130":3,"134":1,"135":3}}],["bold",{"2":{"60":1,"173":1,"176":1}}],["both",{"2":{"7":10,"10":6,"64":2,"74":4,"75":1,"76":1,"81":2,"84":1,"88":3,"91":1,"105":4,"108":1,"121":1,"122":2,"129":1,"135":1,"175":1,"177":1}}],["booleans",{"2":{"64":1,"122":2}}],["boolean",{"0":{"39":1},"1":{"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1},"2":{"10":1,"24":2,"64":1,"71":1,"74":1,"76":1,"156":1,"160":2,"197":1}}],["bool",{"2":{"7":34,"8":28,"10":40,"32":1,"64":3,"88":17,"91":1,"94":1,"104":2,"105":13,"108":1,"118":1,"121":10,"122":2,"125":2,"135":1,"145":7,"146":6,"160":2,"177":2,"189":5}}],["booltype",{"2":{"4":1,"10":2,"153":2,"154":1,"158":1,"160":5,"177":1}}],["boolsastypes",{"0":{"24":1,"160":1},"2":{"4":1,"10":6,"32":1,"158":1,"160":10,"177":2}}],["bools",{"2":{"3":1}}],["bypred",{"2":{"200":1}}],["by",{"0":{"98":1,"99":1,"139":1},"2":{"0":1,"5":6,"7":4,"8":16,"10":33,"17":1,"18":2,"19":1,"22":1,"24":1,"25":1,"26":1,"27":1,"52":1,"53":1,"55":1,"56":6,"59":4,"60":1,"62":5,"63":4,"64":14,"65":1,"66":6,"68":1,"69":6,"70":1,"73":1,"74":5,"75":4,"76":3,"82":2,"85":5,"88":8,"91":1,"93":1,"94":1,"98":2,"99":2,"100":1,"101":2,"103":1,"115":2,"122":10,"145":2,"146":4,"153":2,"156":5,"158":5,"166":2,"168":1,"170":3,"171":1,"172":2,"173":1,"174":1,"176":3,"177":1,"178":1,"180":1,"181":1,"182":3,"183":1,"185":1,"191":1,"192":1,"193":1,"195":1,"197":5,"198":1,"199":2,"200":1}}],["berlin",{"2":{"199":1}}],["bearing",{"2":{"145":4}}],["beauty",{"2":{"2":1}}],["better",{"2":{"105":1,"153":1,"154":1,"180":1}}],["between",{"2":{"8":8,"10":20,"23":1,"56":2,"59":13,"64":1,"66":18,"70":1,"71":4,"73":1,"74":11,"75":2,"76":4,"85":8,"88":1,"121":4,"122":4,"146":1,"158":2,"176":3,"177":1,"181":2,"182":2,"183":1,"192":1,"197":2,"198":1}}],["been",{"2":{"71":1,"146":1,"148":2,"154":1,"160":1}}],["because",{"2":{"64":1,"82":1,"148":1,"154":1,"187":1}}],["become",{"2":{"22":1}}],["becomes",{"2":{"10":1,"158":1}}],["being",{"2":{"56":1,"74":1,"121":1,"122":1,"168":1}}],["behind",{"2":{"25":1,"26":1,"27":1,"58":1,"148":1,"154":1}}],["behaviours",{"2":{"32":1}}],["behaviour",{"2":{"10":1,"18":1,"23":1,"180":1}}],["best",{"2":{"19":1,"153":2,"180":1}}],["beware",{"2":{"18":1}}],["benchmarking",{"2":{"176":1,"180":1}}],["benchmarkgroup",{"2":{"176":2,"180":3}}],["benchmark",{"0":{"176":1,"180":1},"2":{"176":1,"180":1}}],["benchmarktools",{"2":{"13":1,"176":1,"180":1}}],["benchmarks",{"2":{"2":2}}],["before",{"2":{"10":4,"33":1,"59":1,"70":1,"73":1,"74":1,"75":1,"180":1,"192":1}}],["below",{"2":{"10":2,"17":1,"60":1,"165":1,"182":1,"183":1,"184":1,"195":1}}],["beginning",{"2":{"66":1,"191":1}}],["begin+1",{"2":{"59":5}}],["begin",{"2":{"2":1,"59":7,"153":1,"154":1,"181":1,"195":1}}],["be",{"2":{"0":1,"2":1,"5":14,"7":6,"8":22,"9":8,"10":67,"13":2,"20":3,"23":2,"24":1,"25":3,"26":1,"27":3,"32":1,"53":7,"56":8,"57":2,"58":1,"59":10,"60":2,"62":1,"63":3,"64":14,"65":1,"66":2,"69":1,"70":7,"71":4,"73":7,"74":12,"75":6,"76":5,"82":6,"84":2,"85":4,"88":15,"94":6,"103":2,"104":1,"108":6,"121":2,"122":21,"125":6,"135":6,"137":1,"138":1,"139":1,"140":1,"145":2,"146":1,"150":8,"151":2,"152":2,"153":9,"154":1,"155":1,"156":3,"158":3,"160":1,"162":1,"163":1,"164":1,"165":4,"166":4,"167":1,"168":2,"170":2,"172":3,"173":1,"174":1,"176":8,"177":2,"180":10,"182":1,"184":3,"185":1,"188":2,"191":2,"193":1,"197":4}}],["wgs84",{"2":{"192":1}}],["wglmakie",{"2":{"14":1}}],["wₜₒₜ",{"2":{"59":8}}],["wᵢ",{"2":{"59":18}}],["wt",{"2":{"59":3}}],["w",{"2":{"13":13,"14":7,"85":4,"146":1}}],["walk",{"2":{"69":1}}],["wall2",{"2":{"66":7}}],["wall1",{"2":{"66":12}}],["walls",{"2":{"66":3}}],["wall",{"2":{"66":69}}],["wachspress",{"2":{"59":1}}],["wasincreasing",{"2":{"146":10}}],["wasn",{"2":{"64":1}}],["was",{"2":{"31":1,"32":1,"50":1,"53":1,"56":1,"58":1,"59":4,"60":1,"63":1,"64":1,"66":1,"69":1,"70":1,"71":3,"72":1,"73":1,"74":2,"75":1,"76":3,"82":1,"85":1,"88":1,"91":1,"101":1,"104":1,"105":1,"115":1,"118":1,"121":1,"122":1,"132":1,"142":1,"145":1,"146":1,"147":1,"151":1,"153":1,"154":1,"155":1,"156":1,"160":1,"163":1,"166":1,"167":1,"170":1,"171":1,"173":1,"175":1,"177":1,"184":1,"185":1,"186":1,"188":2,"189":1}}],["wanted",{"2":{"200":1}}],["wants",{"2":{"82":1,"154":1}}],["want",{"0":{"23":1,"72":1},"2":{"13":1,"18":1,"23":1,"59":1,"64":1,"145":1,"192":2,"194":1,"199":1,"200":1}}],["ways",{"2":{"168":1}}],["way",{"2":{"10":1,"17":1,"18":1,"24":1,"29":1,"57":1,"148":1,"159":1,"164":1,"177":1,"188":2,"194":1}}],["warn",{"2":{"146":2}}],["warned",{"2":{"10":1,"188":1}}],["warning",{"2":{"4":1,"9":2,"10":3,"24":1,"59":1,"82":1,"154":1,"176":1,"187":1,"199":1}}],["wong",{"2":{"79":1,"80":1,"196":1}}],["won",{"2":{"23":1,"64":1,"154":1}}],["wouldn",{"2":{"74":1}}],["would",{"0":{"72":1},"2":{"10":3,"23":1,"70":1,"73":1,"74":1,"75":1,"82":4,"146":1,"153":1,"160":2,"192":1,"199":1,"200":1}}],["wound",{"2":{"10":1,"82":1}}],["world",{"0":{"199":1},"2":{"197":1}}],["worrying",{"2":{"24":1}}],["words",{"2":{"7":2,"10":1,"90":1,"117":1,"124":1,"125":1}}],["workflow",{"2":{"105":1,"121":1}}],["workflows",{"2":{"23":1,"25":1,"27":1}}],["works",{"2":{"26":1,"172":1,"174":1}}],["working",{"2":{"7":2,"10":1,"105":1,"192":1}}],["work",{"2":{"2":1,"5":6,"10":3,"53":2,"56":1,"63":1,"66":2,"69":2,"77":1,"85":1,"88":1,"121":1,"122":1,"145":1,"150":2,"153":1,"154":1,"172":1,"185":1,"199":1}}],["wrong",{"2":{"168":1,"184":1}}],["writing",{"2":{"195":1}}],["written",{"2":{"88":1}}],["writes",{"2":{"153":1}}],["write",{"2":{"0":1,"30":1,"146":1,"153":1,"195":7}}],["wrap",{"2":{"8":2,"10":1,"32":3,"35":1,"36":1,"37":1,"38":1,"50":1,"167":1,"176":1}}],["wrapped",{"2":{"22":1,"146":2,"151":1,"153":1}}],["wrapper",{"0":{"30":1},"2":{"30":1,"53":1,"56":1,"63":1,"66":1,"85":1,"88":1,"94":1,"108":1,"121":1,"125":1,"135":1}}],["wrappers`",{"2":{"156":1}}],["wrappers",{"2":{"5":20,"10":12,"22":1,"145":2,"146":1,"162":8,"163":1,"169":22,"175":1,"176":1,"180":1,"185":10,"189":1,"191":121,"192":5,"193":9}}],["wrappergeometry`",{"2":{"172":1}}],["wrappergeometry",{"2":{"5":2}}],["wrapping",{"2":{"5":2,"10":1,"88":1,"172":1,"186":1}}],["widely",{"2":{"195":1}}],["widths",{"2":{"14":1}}],["wiki",{"2":{"122":1,"182":1}}],["wikipedia",{"2":{"122":1,"182":2}}],["wind",{"2":{"8":2,"10":2,"53":1,"88":1}}],["winding",{"0":{"81":1},"2":{"8":4,"10":3,"53":3,"64":7,"81":4,"82":1,"88":1,"146":1}}],["without",{"2":{"5":4,"10":1,"17":1,"24":1,"64":1,"107":1,"121":1,"153":1,"154":1,"156":2,"172":1,"185":1}}],["with",{"0":{"71":1,"74":1,"76":1,"181":1,"182":1,"183":1,"193":1,"194":1},"2":{"5":10,"7":10,"8":14,"10":27,"11":1,"20":1,"22":2,"23":1,"31":1,"53":7,"55":1,"56":2,"57":4,"58":1,"59":2,"63":1,"64":14,"66":6,"71":8,"73":5,"74":15,"75":1,"76":12,"84":1,"85":2,"94":1,"107":1,"111":1,"117":1,"120":2,"121":5,"122":28,"124":1,"125":1,"128":3,"129":2,"130":2,"140":1,"146":7,"148":1,"150":6,"151":1,"153":12,"154":3,"156":2,"158":1,"160":1,"162":1,"167":1,"168":1,"172":1,"174":1,"177":2,"180":2,"182":2,"183":1,"185":1,"188":1,"190":1,"191":4,"192":6,"193":2,"194":2,"195":2,"197":1,"198":1,"199":1}}],["within",{"0":{"44":1,"133":1,"134":1,"137":1,"138":1,"140":1,"141":1,"142":1},"1":{"134":1,"135":1},"2":{"0":1,"2":1,"4":2,"7":17,"8":6,"9":2,"10":13,"31":1,"44":2,"53":1,"56":2,"57":3,"59":1,"63":1,"64":9,"65":2,"66":5,"71":1,"74":2,"75":1,"76":6,"84":1,"85":5,"90":2,"91":3,"93":2,"110":1,"120":1,"121":9,"122":9,"133":1,"134":6,"135":11,"136":6,"137":14,"138":15,"139":15,"140":7,"141":4,"142":4,"148":1,"197":1,"198":4,"199":2}}],["will",{"2":{"5":16,"8":14,"9":2,"10":44,"11":1,"18":3,"23":2,"24":1,"53":3,"56":4,"59":2,"63":1,"64":5,"66":1,"69":1,"70":4,"71":4,"73":4,"74":4,"75":4,"76":4,"82":1,"84":2,"85":4,"88":1,"105":1,"145":1,"146":2,"150":6,"151":1,"152":2,"153":4,"154":3,"156":3,"158":1,"162":1,"166":2,"168":1,"170":2,"172":3,"174":2,"176":3,"180":2,"182":1,"184":1,"185":2,"188":1,"192":1,"195":1,"197":2,"199":1,"200":1}}],["wip",{"2":{"4":1}}],["whole",{"2":{"122":1}}],["whose",{"2":{"7":2,"10":1,"105":1}}],["white",{"2":{"58":1}}],["while",{"2":{"56":1,"62":1,"63":1,"64":5,"74":2,"81":2,"84":1,"88":1,"105":1,"122":1,"146":3,"170":1,"182":1,"184":2,"198":1}}],["whichever",{"2":{"10":1,"180":1}}],["which",{"2":{"0":1,"5":2,"8":4,"9":2,"10":9,"11":1,"13":1,"14":1,"17":1,"18":4,"20":1,"23":2,"33":1,"52":1,"53":1,"57":1,"58":2,"59":5,"60":1,"64":11,"66":2,"74":2,"77":1,"82":1,"88":2,"122":3,"146":3,"147":1,"148":1,"153":1,"158":1,"159":1,"161":2,"162":1,"165":1,"168":1,"169":1,"173":1,"174":1,"175":1,"176":3,"177":2,"180":1,"182":2,"185":1,"188":4,"195":3,"197":3,"198":6,"200":1}}],["what",{"0":{"22":1,"25":1,"30":1,"52":2,"55":1,"62":1,"65":1,"68":1,"84":2,"87":1,"90":1,"93":1,"103":1,"107":1,"117":1,"120":1,"124":1,"134":1,"151":1},"2":{"13":1,"14":1,"24":1,"62":1,"145":1,"146":1,"160":1,"175":1,"192":1,"199":1}}],["whatever",{"2":{"5":2,"10":1,"22":1,"150":2,"153":1}}],["wheel",{"2":{"17":1}}],["whether",{"2":{"5":8,"8":2,"10":11,"144":1,"145":1,"150":4,"155":2,"160":1,"161":1}}],["when",{"2":{"5":2,"8":4,"9":2,"10":5,"18":1,"20":1,"23":2,"24":1,"53":1,"59":3,"63":1,"64":2,"71":5,"74":6,"76":7,"122":1,"146":1,"150":2,"151":3,"153":1,"162":1,"165":1,"167":2,"180":1,"192":1,"193":2,"195":1,"200":1}}],["whereas",{"2":{"158":1}}],["wherever",{"2":{"10":1,"186":1}}],["where",{"2":{"5":4,"8":10,"10":12,"20":1,"31":2,"53":12,"56":8,"57":2,"59":24,"63":8,"64":14,"66":8,"69":5,"70":2,"71":5,"73":3,"74":18,"75":2,"76":9,"85":25,"88":1,"122":9,"146":3,"150":2,"153":18,"154":18,"156":17,"158":2,"159":5,"168":1,"172":1,"175":1,"186":1,"187":1,"189":3,"191":4}}],["whyatt",{"2":{"178":1}}],["why",{"0":{"22":1,"23":1},"2":{"2":1,"17":1,"30":1,"53":1}}],["web",{"2":{"195":1}}],["west",{"2":{"66":8}}],["were",{"2":{"64":1,"146":1,"198":1}}],["welcome",{"2":{"25":1,"27":1}}],["well",{"2":{"17":1,"64":1,"66":1,"82":1,"160":1,"174":1,"178":1}}],["weighting",{"2":{"62":2,"63":1}}],["weights",{"2":{"57":4}}],["weight",{"2":{"10":5,"59":14,"63":1}}],["weighted",{"2":{"4":1,"10":2,"57":3,"59":4,"63":4}}],["we",{"0":{"72":2},"2":{"0":1,"10":3,"11":1,"13":1,"17":3,"19":1,"23":3,"24":1,"25":2,"26":1,"27":2,"32":1,"52":2,"53":2,"56":1,"58":4,"59":8,"60":2,"63":1,"64":7,"66":4,"71":8,"73":2,"74":3,"76":1,"77":1,"81":3,"82":2,"85":1,"87":1,"88":5,"90":1,"91":1,"93":1,"94":1,"104":1,"107":1,"108":1,"117":3,"118":1,"120":1,"121":2,"122":2,"124":1,"125":1,"134":1,"135":1,"146":21,"147":1,"151":1,"153":19,"154":6,"156":3,"158":6,"160":4,"161":1,"173":1,"174":2,"175":2,"176":3,"177":1,"180":5,"184":2,"187":1,"188":1,"190":2,"191":4,"192":6,"193":4,"194":1,"195":3,"197":3,"198":7}}],["my",{"2":{"199":1,"200":2}}],["mdk",{"2":{"153":2}}],["mistakenly",{"2":{"168":1}}],["missing",{"2":{"156":8,"175":4}}],["missed",{"2":{"146":1}}],["mid",{"2":{"66":2,"122":3}}],["midpoint",{"2":{"64":2}}],["middle",{"2":{"64":2}}],["mining",{"2":{"199":1}}],["minimal",{"2":{"199":1}}],["minimize",{"2":{"74":1}}],["minimum",{"2":{"8":14,"10":12,"65":1,"66":2,"85":12,"180":1,"181":1,"183":1}}],["mind",{"2":{"175":1,"198":1}}],["minmax",{"2":{"74":4}}],["min",{"2":{"66":1,"74":16,"85":15,"180":1,"182":3,"183":1,"184":28}}],["minus",{"2":{"52":1}}],["minpoints=0",{"2":{"146":1}}],["minpoints",{"2":{"10":2}}],["might",{"2":{"10":3,"25":1,"27":1,"53":1,"70":1,"73":1,"74":1,"75":1,"164":1,"182":1}}],["mixed",{"2":{"10":4,"180":1}}],["m",{"2":{"9":2,"10":1,"15":10,"59":2,"66":6,"145":2,"192":1}}],["mp",{"2":{"105":2}}],["mp1",{"2":{"8":4,"10":2,"88":7}}],["mp2",{"2":{"8":4,"10":2,"88":8}}],["moore",{"2":{"146":1}}],["moved",{"2":{"64":1,"172":1}}],["move",{"2":{"63":1,"122":1}}],["mode",{"2":{"200":3}}],["model",{"2":{"197":1}}],["modify",{"2":{"191":1}}],["modified",{"2":{"153":1,"154":1}}],["module",{"2":{"172":1,"177":1}}],["modules",{"2":{"10":1,"59":1}}],["mod1",{"2":{"59":5}}],["mod",{"2":{"59":1,"64":1}}],["most",{"2":{"25":1,"27":1,"64":1,"71":1,"74":1,"76":1,"81":1,"122":1,"180":1,"195":2}}],["monotone",{"2":{"20":1,"81":2}}],["monotonechainmethod",{"2":{"4":1,"10":1,"77":1,"81":2,"82":4}}],["moment",{"2":{"10":1,"175":1,"177":1}}],["more",{"2":{"0":1,"2":1,"3":1,"10":4,"11":1,"23":1,"26":1,"29":1,"64":1,"70":1,"73":1,"75":1,"82":1,"121":1,"122":1,"153":2,"154":2,"157":1,"158":2,"163":1,"173":1,"175":1,"177":1,"191":2,"197":1}}],["mercator",{"2":{"192":1}}],["merge",{"2":{"153":1}}],["meets",{"2":{"121":1,"122":9,"182":1}}],["meet",{"2":{"74":3,"93":1,"94":1,"108":1,"122":7,"125":1,"135":1}}],["memory",{"2":{"59":1,"193":1}}],["mesh",{"2":{"58":1}}],["message",{"2":{"10":1,"188":1}}],["me",{"0":{"23":1}}],["mentioned",{"2":{"19":1}}],["mentions",{"2":{"10":1,"188":1}}],["menu",{"2":{"14":3}}],["median",{"2":{"13":4,"154":1}}],["mechanics",{"2":{"10":1,"59":1}}],["measure",{"2":{"156":1,"174":1}}],["measures",{"2":{"10":1,"158":1}}],["meant",{"2":{"26":1}}],["meaning",{"2":{"7":6,"8":2,"10":5,"24":1,"53":1,"60":1,"121":4,"145":1,"158":1}}],["means",{"2":{"7":2,"10":7,"52":1,"53":1,"60":1,"93":1,"120":1,"121":1,"122":3,"145":1,"151":1,"158":3,"160":2}}],["mean",{"2":{"4":1,"10":5,"17":1,"58":2,"59":5,"154":1}}],["meanvalue",{"2":{"4":1,"9":4,"10":3,"57":1,"58":2,"59":15}}],["metadatakeys",{"2":{"153":1}}],["metadatasupport",{"2":{"153":2}}],["metadata",{"2":{"153":11}}],["met",{"2":{"122":44}}],["meters",{"2":{"10":4,"175":1,"176":4,"192":1}}],["methoderror",{"2":{"31":3}}],["method",{"0":{"173":1},"2":{"5":2,"8":2,"9":20,"10":31,"24":1,"32":1,"53":1,"56":1,"59":37,"60":2,"63":1,"66":1,"74":1,"76":1,"81":3,"82":2,"85":4,"88":1,"94":2,"108":2,"121":1,"125":2,"135":2,"146":1,"153":1,"154":1,"156":3,"160":1,"172":1,"173":2,"175":2,"176":9,"177":14,"178":2,"188":3,"197":1,"200":1}}],["methods",{"0":{"6":1,"7":1,"8":1,"10":1,"39":1},"1":{"7":1,"8":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1},"2":{"2":1,"5":2,"10":9,"25":1,"27":1,"31":27,"59":3,"77":1,"94":1,"108":1,"125":1,"135":1,"146":1,"151":1,"153":1,"156":1,"159":1,"175":1,"180":2,"185":1,"191":1}}],["mutation",{"2":{"194":1}}],["mutlipolygon",{"2":{"8":2,"10":1,"63":1}}],["muladd",{"2":{"59":2}}],["multilinestringtrait",{"2":{"32":1,"165":1}}],["multilinestring",{"2":{"10":1,"189":2}}],["multi",{"0":{"100":1,"101":1,"114":1,"115":1,"131":1,"132":1,"141":1,"142":1},"2":{"8":4,"10":3,"53":1,"56":1,"66":1,"88":2,"100":1,"101":1,"114":1,"115":1,"131":1,"132":1,"141":1,"142":1}}],["multicurves",{"2":{"53":1,"66":1}}],["multicurve",{"2":{"8":2,"10":1,"53":1}}],["multigeometry",{"2":{"8":4,"10":2,"85":2}}],["multiplication",{"2":{"177":1}}],["multiplied",{"2":{"59":3,"158":1}}],["multiple",{"2":{"8":2,"10":1,"59":1,"122":1,"167":1,"184":1,"191":1,"195":1}}],["multiply",{"2":{"5":2,"10":1,"185":1}}],["multipolys",{"2":{"76":3}}],["multipoly`",{"2":{"70":2,"73":2,"75":2}}],["multipoly",{"2":{"10":9,"15":3,"70":1,"71":27,"73":1,"74":26,"75":1,"76":24,"170":21,"180":9}}],["multipolygon`",{"2":{"146":1}}],["multipolygons",{"2":{"7":2,"8":2,"10":11,"63":1,"70":3,"73":3,"74":3,"75":3,"84":1,"88":1,"121":2,"169":1,"191":1,"192":1}}],["multipolygon",{"2":{"7":4,"8":10,"10":16,"53":2,"62":1,"70":1,"71":7,"73":1,"74":5,"75":1,"76":6,"88":4,"121":2,"146":7,"166":2,"168":7,"169":8,"170":2,"180":3,"191":8,"192":1}}],["multipolygontrait",{"2":{"5":2,"7":8,"8":4,"10":7,"23":1,"32":1,"71":4,"74":4,"76":4,"88":6,"100":1,"101":1,"114":1,"115":1,"121":8,"131":1,"132":1,"141":1,"142":1,"150":2,"153":1,"165":1,"170":4}}],["multipoint",{"2":{"8":10,"10":5,"50":1,"53":1,"88":5,"105":6,"153":1,"154":2,"180":1,"191":5}}],["multipoints",{"2":{"7":4,"8":2,"10":3,"53":1,"66":1,"88":2,"121":2,"180":1,"191":1}}],["multipointtrait",{"2":{"5":2,"7":4,"8":8,"10":8,"32":1,"53":1,"56":2,"66":1,"88":8,"100":1,"101":1,"105":4,"114":1,"115":1,"121":4,"131":1,"132":1,"141":1,"142":1,"150":2,"151":1,"165":1,"180":2,"189":1}}],["multithreading",{"2":{"5":4,"8":2,"10":5,"150":2,"155":1}}],["multifloats",{"2":{"13":1,"14":1,"15":1}}],["multifloat",{"2":{"0":1}}],["much",{"2":{"4":1,"10":3,"70":1,"73":1,"75":1}}],["must",{"2":{"2":1,"5":2,"7":16,"8":4,"9":2,"10":23,"56":1,"59":5,"60":1,"64":2,"66":3,"69":1,"74":2,"88":5,"91":2,"94":1,"103":1,"104":1,"108":1,"121":1,"122":13,"124":1,"125":1,"135":2,"146":1,"153":1,"156":1,"164":1,"165":4,"166":1,"172":1,"176":1,"177":1,"180":1,"184":4,"188":1}}],["mason",{"2":{"153":1,"154":1}}],["markersize",{"2":{"191":2}}],["marker",{"2":{"191":2}}],["marked",{"2":{"64":6,"71":1,"74":1,"76":1}}],["marking",{"2":{"71":2,"74":2,"76":2}}],["mark",{"2":{"64":2}}],["marks",{"2":{"64":1}}],["mag",{"2":{"56":4}}],["making",{"2":{"64":1,"146":1,"151":1,"169":1,"191":1,"193":2}}],["makie",{"2":{"13":1,"14":1,"52":1,"55":1,"58":3,"62":1,"65":1,"68":4,"79":1,"80":1,"84":1,"87":1,"90":1,"93":1,"103":1,"107":1,"117":1,"120":1,"124":1,"134":1,"146":3,"179":1,"180":1,"196":1}}],["makevalid",{"2":{"180":2}}],["makes",{"2":{"53":1,"64":1,"85":1,"153":1,"162":1,"168":1,"169":1}}],["make",{"2":{"2":1,"25":1,"27":1,"56":1,"64":3,"74":1,"85":1,"121":1,"146":2,"151":1,"163":1,"175":1,"184":1,"187":1,"191":2,"193":1}}],["mapped",{"2":{"195":1}}],["maptasks`",{"2":{"153":1}}],["maptasks",{"2":{"153":7}}],["mapreducetasks`",{"2":{"154":1}}],["mapreducetasks",{"2":{"154":5}}],["mapreduce",{"2":{"71":1,"146":2,"153":3,"154":7}}],["map",{"0":{"192":1},"2":{"10":1,"13":1,"18":3,"19":1,"29":1,"59":1,"64":1,"74":1,"121":2,"146":17,"153":11,"154":5,"156":10,"158":1,"159":1,"163":1,"180":1,"190":1,"192":1,"193":1,"195":1}}],["maximal",{"2":{"74":1}}],["maximum",{"2":{"7":2,"10":4,"14":1,"65":1,"66":4,"105":1,"146":1,"176":1,"177":1,"182":4}}],["max",{"2":{"10":9,"32":9,"56":2,"66":1,"146":1,"153":1,"154":1,"175":5,"176":8,"177":7,"182":36,"184":1,"196":1}}],["made",{"2":{"10":2,"63":1,"64":1,"74":1,"129":1,"151":1,"166":1,"170":1,"183":1}}],["manner",{"2":{"197":1}}],["manipulate",{"2":{"195":1}}],["manifolds",{"2":{"10":1,"158":2}}],["manifold",{"0":{"158":1},"2":{"4":1,"10":7,"158":12}}],["manually",{"2":{"161":1}}],["many",{"2":{"8":2,"9":2,"10":2,"23":1,"26":1,"59":1,"64":1,"69":1,"71":1,"74":2,"76":1,"88":1,"162":1,"167":1}}],["matlab",{"2":{"68":1}}],["materializer`",{"2":{"153":1}}],["materializer",{"2":{"22":1,"153":1}}],["matrix",{"2":{"10":1,"14":2,"59":1}}],["matches",{"2":{"88":1,"146":1}}],["match",{"2":{"10":1,"88":12,"121":3,"146":1,"153":1,"156":1}}],["matching",{"2":{"7":2,"10":1,"22":1,"88":3,"121":1,"151":2}}],["mathrm",{"2":{"59":1}}],["mathematics",{"2":{"10":1,"158":1}}],["mathematically",{"2":{"10":2,"145":1,"158":2}}],["mathematical",{"2":{"10":1,"158":1}}],["math",{"2":{"0":1}}],["maybe",{"2":{"10":1,"32":1,"122":4,"153":2,"154":3,"156":1}}],["may",{"2":{"5":2,"10":5,"23":2,"24":1,"59":2,"64":1,"74":1,"81":1,"145":1,"147":1,"150":2,"151":1,"153":4,"159":1,"168":1,"169":1,"176":1}}],["mainly",{"2":{"59":1,"84":1,"148":1,"154":1}}],["maintain",{"2":{"53":1}}],["main",{"0":{"28":1},"1":{"29":1,"30":1},"2":{"0":1,"26":1,"64":1,"146":1,"153":1,"176":1}}],["snapped",{"2":{"146":1}}],["s3",{"2":{"64":3}}],["scratch",{"2":{"195":1}}],["sciences",{"2":{"192":1}}],["scalefactor",{"2":{"176":3}}],["scattered",{"2":{"198":1}}],["scatter",{"2":{"62":1,"84":2,"87":2,"90":2,"93":1,"103":1,"107":2,"120":2,"134":2,"198":1}}],["schema",{"2":{"153":5,"154":1}}],["scheme",{"2":{"63":1}}],["scenario",{"2":{"122":2}}],["scene",{"2":{"14":1}}],["square",{"2":{"85":1,"181":1,"182":1}}],["squared",{"2":{"10":2,"66":2,"85":12,"181":2,"182":7}}],["sqrt",{"2":{"56":2,"63":1,"85":3}}],["sgn",{"2":{"56":5}}],["smallest",{"2":{"56":2,"74":1,"77":1}}],["skipmissing",{"2":{"146":1}}],["skipped",{"2":{"146":1}}],["skip",{"2":{"53":1,"122":14,"146":1,"153":1,"184":4}}],["skygering",{"2":{"0":1}}],["sᵢ₋₁",{"2":{"59":25}}],["sᵢ₊₁",{"2":{"10":2,"59":41}}],["sᵢ",{"2":{"10":4,"59":46}}],["src",{"2":{"10":2,"31":1}}],["syntax",{"2":{"194":1}}],["sym10100477",{"2":{"122":1}}],["symdifference",{"2":{"38":1,"147":1}}],["symmetric",{"0":{"38":1},"2":{"38":1}}],["symbol=",{"2":{"105":1}}],["symbols",{"2":{"31":2}}],["symbol",{"2":{"10":1,"188":2}}],["system",{"0":{"192":1,"193":1},"2":{"5":4,"172":2,"190":2,"192":1}}],["switches",{"2":{"74":1,"76":1}}],["switch",{"2":{"64":1,"76":1,"160":1}}],["switching",{"2":{"10":1,"66":1}}],["swap",{"2":{"10":1,"76":1,"85":2,"171":1}}],["swapped",{"2":{"7":2,"10":1,"91":1,"94":1,"104":1,"105":1,"118":1,"121":1}}],["swapping",{"2":{"5":2,"10":1,"150":2,"153":1}}],["s2",{"2":{"10":4,"59":6,"64":3}}],["s1",{"2":{"10":3,"59":6,"64":3}}],["saving",{"0":{"195":1}}],["saved",{"2":{"88":1}}],["save",{"2":{"56":1,"190":1,"195":3}}],["samples",{"2":{"13":1}}],["sample",{"2":{"13":1}}],["same",{"2":{"7":4,"8":24,"10":23,"18":1,"53":1,"56":3,"64":15,"66":1,"69":1,"70":3,"73":1,"74":1,"75":1,"76":1,"81":1,"84":1,"87":2,"88":30,"120":1,"121":8,"122":2,"151":1,"153":5,"156":1,"161":1,"166":2,"169":1,"170":2,"175":1,"191":1,"192":1,"195":1}}],["says",{"2":{"81":1}}],["say",{"2":{"10":1,"59":1,"176":1}}],["slow",{"2":{"199":1}}],["slower",{"2":{"10":1,"188":2}}],["slope2",{"2":{"145":2}}],["slope1",{"2":{"145":2}}],["slidergrid",{"2":{"14":1}}],["sliders",{"2":{"14":3}}],["slightly",{"2":{"8":4,"10":2,"53":2}}],["spliced",{"2":{"155":1}}],["split",{"2":{"69":1}}],["sp",{"2":{"122":2}}],["specialized",{"2":{"25":1,"27":1,"82":1,"153":1}}],["specification",{"2":{"162":1,"165":1,"168":1,"169":1}}],["specifically",{"2":{"10":2,"59":3,"178":1,"197":1}}],["specific",{"2":{"64":1,"94":1,"108":1,"125":1,"135":1,"153":1,"154":1,"156":3,"158":1}}],["specified",{"2":{"7":2,"10":2,"64":1,"71":2,"74":2,"76":2,"121":1,"151":1,"180":1}}],["specify",{"2":{"10":1,"156":1,"192":1,"193":1,"197":1}}],["spatial",{"0":{"197":1},"1":{"198":1,"199":1,"200":1},"2":{"197":6,"198":3,"200":1}}],["spawn",{"2":{"153":3,"154":3}}],["span>",{"2":{"10":2}}],["span",{"2":{"10":2,"198":1}}],["space",{"2":{"10":6,"25":1,"27":1,"52":1,"56":1,"122":1,"158":6,"176":1,"177":1}}],["sphere",{"2":{"10":1,"158":3}}],["sphericalgeodesics",{"2":{"158":1}}],["spherical",{"2":{"4":1,"10":4,"158":7}}],["sve",{"2":{"5":2,"10":1,"185":1}}],["svector",{"2":{"5":28,"10":14,"64":5,"70":1,"74":2,"76":6,"122":1,"146":1,"185":13,"191":6,"193":4}}],["suite",{"2":{"176":5,"180":13}}],["suggestion",{"2":{"173":1}}],["success",{"2":{"158":1}}],["such",{"2":{"8":2,"10":1,"52":1,"68":1,"77":1,"151":1,"167":1}}],["sun",{"2":{"122":1}}],["surrounds",{"2":{"122":1}}],["sure",{"2":{"2":1,"56":1,"64":2,"85":1,"121":1,"184":1}}],["suppose",{"2":{"199":1,"200":1}}],["supports",{"2":{"58":1,"59":1,"77":1,"153":3,"195":1,"200":2}}],["support",{"2":{"32":1,"60":1,"174":1,"200":1}}],["supported",{"2":{"23":1,"195":1}}],["supertype",{"2":{"10":1,"59":1}}],["sukumar",{"2":{"10":1,"59":1}}],["suffices",{"2":{"10":1,"158":1}}],["sum=1",{"2":{"59":1}}],["summary>",{"2":{"10":4}}],["sum",{"2":{"8":4,"10":3,"11":6,"52":1,"53":2,"57":2,"59":8,"66":1,"85":2,"145":5,"184":1,"189":4}}],["sublevel",{"2":{"199":1}}],["subsequent",{"2":{"191":1}}],["substituted",{"2":{"5":2,"10":1,"150":2,"153":1}}],["subgeom1",{"2":{"156":2}}],["subgeom",{"2":{"156":3}}],["subject",{"2":{"64":1}}],["subtype",{"2":{"153":1}}],["subtypes",{"2":{"10":2,"59":2}}],["subtracted",{"2":{"145":1}}],["subtitle",{"2":{"13":1,"58":2,"176":1,"180":2}}],["sub",{"2":{"8":12,"10":7,"53":3,"56":1,"66":1,"71":6,"74":3,"76":4,"85":2,"100":2,"101":2,"114":2,"115":2,"131":2,"132":2,"141":2,"142":2,"153":3,"168":4,"169":2,"170":4}}],["sites",{"2":{"199":1}}],["sides",{"2":{"64":3,"162":1}}],["side",{"2":{"56":4,"64":26}}],["signals",{"2":{"152":1}}],["sign",{"2":{"13":2,"14":2,"53":2,"56":7,"145":3}}],["signed",{"0":{"51":1,"52":1,"83":1,"84":1},"1":{"52":1,"53":1,"84":1,"85":1},"2":{"4":4,"8":28,"10":18,"11":3,"51":1,"52":5,"53":23,"66":3,"83":1,"84":7,"85":19}}],["six",{"2":{"10":1,"180":1}}],["size=",{"2":{"192":1}}],["sizehint",{"2":{"64":2,"71":1,"177":1}}],["size",{"2":{"10":4,"13":2,"14":5,"58":1,"76":1,"146":2,"153":2,"154":2,"180":1}}],["sin",{"2":{"191":3,"192":1,"193":2}}],["singed",{"2":{"85":1}}],["singular",{"2":{"74":1}}],["singlepoly",{"2":{"180":6}}],["single",{"2":{"8":12,"10":10,"23":1,"53":1,"56":2,"66":1,"88":5,"120":2,"146":2,"154":1,"166":2,"168":1,"170":2,"191":3,"195":1}}],["since",{"2":{"5":2,"10":2,"26":1,"53":1,"56":1,"63":1,"66":2,"75":1,"85":1,"88":1,"121":2,"122":1,"129":1,"153":1,"160":1,"172":1,"188":2,"199":1}}],["simulation",{"2":{"23":1}}],["simultaneously",{"2":{"20":1}}],["similarly",{"2":{"148":1}}],["similar",{"2":{"5":2,"10":4,"18":1,"25":1,"27":1,"29":1,"60":1,"77":1,"82":1,"146":2,"150":2,"153":1,"176":2,"177":1,"186":1}}],["simpler",{"2":{"10":1,"146":1}}],["simple",{"0":{"33":1,"79":1,"198":1},"1":{"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1},"2":{"10":3,"33":1,"59":1,"82":1,"148":3,"158":1,"160":1,"171":1,"172":1,"179":2,"180":2}}],["simplifier",{"2":{"180":4}}],["simplified",{"2":{"23":1,"179":1}}],["simplifies",{"2":{"10":3,"181":1,"182":1,"183":1}}],["simplification",{"0":{"178":1},"1":{"179":1,"180":1},"2":{"10":2,"178":2,"180":3}}],["simplifying",{"2":{"178":1}}],["simplifyalgs",{"2":{"184":1}}],["simplifyalg",{"2":{"4":1,"10":8,"180":5,"181":2,"182":2,"183":2}}],["simplify",{"0":{"181":1,"182":1,"183":1},"2":{"2":1,"4":1,"10":15,"31":1,"64":1,"148":1,"179":1,"180":41,"181":1,"182":2,"183":1}}],["simply",{"2":{"0":1,"52":1,"60":1,"64":1,"74":1,"76":1,"91":1,"104":1,"118":1,"146":1,"164":1,"172":1,"173":1,"176":1,"191":1,"194":1}}],["styles",{"2":{"153":1}}],["style",{"2":{"153":7}}],["step",{"2":{"64":7,"70":1,"71":3,"73":1,"74":3,"75":1,"76":3,"146":6,"189":1}}],["storing",{"2":{"195":1}}],["stored",{"2":{"64":2,"198":1}}],["stores",{"2":{"64":1}}],["store",{"2":{"59":1,"195":1}}],["stopping",{"2":{"182":2}}],["stops",{"2":{"151":1}}],["stop",{"2":{"18":2,"105":3,"121":3,"122":4}}],["straightline",{"2":{"146":3}}],["straight",{"2":{"146":6,"154":1}}],["strait",{"2":{"146":1}}],["structs",{"2":{"20":1,"165":1}}],["structures",{"2":{"148":1}}],["structure",{"2":{"10":2,"148":1,"156":1,"171":1}}],["struct",{"2":{"10":5,"59":2,"64":2,"82":1,"158":3,"159":3,"160":6,"163":1,"170":2,"176":2,"181":1,"182":1,"183":1,"188":4}}],["strings",{"2":{"10":1,"63":1,"74":1}}],["string",{"2":{"5":4,"14":1,"62":1,"63":1,"172":2}}],["stay",{"2":{"76":1}}],["stackoverflow",{"2":{"74":1}}],["stack",{"2":{"69":1}}],["states",{"2":{"180":1}}],["state",{"2":{"75":1,"199":9}}],["status",{"2":{"64":31,"71":4,"74":5,"76":4,"146":1}}],["static",{"2":{"160":1}}],["staticarray",{"2":{"59":1}}],["staticarrays",{"2":{"31":1,"64":5,"70":1,"74":2,"76":6,"122":1,"146":1,"185":2}}],["staticarraysco",{"2":{"5":2,"10":1,"185":1}}],["staticarrayscore",{"2":{"5":20,"10":10,"59":1,"185":10,"191":6,"193":4}}],["statica",{"2":{"5":2,"10":1,"185":1}}],["statistics",{"2":{"13":2,"31":1}}],["stability",{"2":{"23":1,"30":1}}],["stable",{"2":{"13":1,"24":1,"177":1}}],["standardized",{"2":{"122":1}}],["standards",{"2":{"122":1}}],["standard",{"2":{"10":1,"82":1}}],["started",{"2":{"64":1}}],["starting",{"2":{"63":2,"64":1,"66":1,"74":1,"170":4}}],["startvalue",{"2":{"14":4}}],["start",{"2":{"10":1,"18":1,"56":7,"59":1,"64":76,"66":17,"71":4,"74":4,"76":5,"88":1,"105":4,"121":3,"122":44,"137":1,"146":2,"161":1,"182":16,"191":1}}],["stage",{"2":{"0":1}}],["still",{"2":{"4":1,"53":1,"63":1,"64":3,"93":1,"182":1}}],["solution",{"2":{"122":1}}],["sort",{"2":{"64":4,"69":2,"74":2,"75":2,"121":2,"122":1,"146":1,"182":1}}],["sorted",{"2":{"20":1,"64":1,"182":7,"197":1}}],["south",{"2":{"10":1,"66":7,"158":1}}],["source",{"2":{"5":20,"7":38,"8":44,"9":6,"10":99,"26":4,"105":2,"150":4,"165":2,"166":4,"172":3,"192":13,"193":1}}],["someone",{"2":{"82":1,"188":1}}],["something",{"0":{"72":1},"2":{"3":1}}],["some",{"2":{"2":1,"7":2,"10":3,"17":1,"59":4,"88":1,"121":1,"122":3,"146":1,"147":1,"148":1,"151":2,"153":2,"154":1,"164":1,"165":3,"166":1,"184":1,"187":2,"190":2,"197":1,"200":1}}],["so",{"2":{"2":1,"5":2,"8":8,"10":10,"17":1,"19":1,"25":1,"27":1,"31":1,"58":1,"59":1,"64":1,"65":1,"74":1,"75":2,"76":2,"84":1,"85":1,"87":1,"88":4,"90":1,"107":1,"117":1,"122":2,"134":1,"146":3,"153":8,"156":1,"174":1,"175":1,"176":3,"177":1,"184":1,"185":1,"188":2,"192":1,"193":1}}],["series",{"2":{"191":1}}],["serve",{"2":{"10":1,"59":1}}],["searchsortedfirst",{"2":{"182":1}}],["seg2",{"2":{"145":2}}],["seg1",{"2":{"145":3}}],["seg",{"2":{"121":9,"122":23}}],["segmentation",{"2":{"175":1}}],["segments",{"2":{"23":1,"31":1,"55":2,"56":1,"62":1,"63":2,"64":3,"66":1,"74":6,"122":18,"176":1,"177":3}}],["segmentization",{"2":{"10":1,"32":1,"158":1,"174":1}}],["segmentizing",{"2":{"10":3,"175":1,"176":2,"177":1}}],["segmentized",{"2":{"175":1}}],["segmentizes",{"2":{"174":1}}],["segmentizemethod",{"2":{"10":1,"176":3,"177":2}}],["segmentize",{"0":{"32":1,"174":1},"1":{"175":1,"176":1,"177":1},"2":{"4":1,"10":4,"31":1,"32":9,"60":1,"148":1,"158":1,"174":1,"175":5,"176":11,"177":13,"196":1}}],["segment",{"2":{"8":8,"10":7,"56":1,"63":5,"64":6,"66":3,"68":1,"74":17,"85":2,"105":3,"121":3,"122":43,"145":2,"174":1,"176":2,"177":1}}],["seperate",{"2":{"74":1}}],["separates",{"2":{"122":1}}],["separate",{"2":{"64":1,"146":1,"153":1,"160":1,"195":1,"198":1}}],["separately",{"2":{"59":1,"146":1}}],["sense",{"2":{"53":1,"85":1}}],["several",{"2":{"20":2,"53":1,"161":1,"170":1}}],["selected",{"2":{"146":1}}],["selectednode",{"2":{"146":3}}],["selection",{"2":{"14":1}}],["select",{"2":{"10":1,"159":1}}],["self",{"2":{"2":2}}],["semimajor",{"2":{"10":2,"158":3}}],["setup=",{"2":{"94":1,"108":1,"125":1,"135":1}}],["sets",{"2":{"64":1,"81":1}}],["setdiff",{"2":{"31":1}}],["setting",{"2":{"23":1}}],["set",{"0":{"23":1,"34":1},"1":{"35":1,"36":1,"37":1,"38":1},"2":{"7":4,"8":14,"10":19,"23":1,"56":1,"57":2,"59":8,"64":3,"70":2,"73":2,"74":7,"75":2,"77":2,"87":2,"88":10,"94":1,"105":1,"108":1,"121":1,"122":2,"125":1,"135":1,"145":1,"146":1,"153":5,"166":2,"170":2,"182":2,"191":1,"195":1,"198":3}}],["section",{"2":{"26":1,"120":1,"122":3}}],["sections",{"2":{"3":1,"26":1}}],["seconds=1",{"2":{"176":3,"180":8}}],["secondisleft",{"2":{"146":4}}],["secondisstraight",{"2":{"146":7}}],["secondary",{"2":{"7":6,"10":3,"91":1,"94":1,"135":1}}],["second",{"2":{"7":16,"10":9,"64":1,"74":4,"88":1,"90":2,"91":1,"93":1,"94":1,"97":1,"98":1,"99":1,"104":2,"108":2,"122":2,"125":1,"134":1,"135":1,"138":1,"139":1,"140":2,"182":1,"193":1,"197":1}}],["seem",{"2":{"25":1,"27":1}}],["see",{"2":{"0":1,"10":4,"29":1,"62":1,"82":1,"85":1,"87":1,"90":1,"93":1,"107":1,"117":1,"120":1,"122":5,"124":1,"134":1,"146":2,"162":1,"163":1,"165":1,"166":3,"169":1,"170":2,"175":2,"182":1,"198":2}}],["shp",{"2":{"195":1}}],["ships",{"2":{"192":1}}],["shifting",{"2":{"193":1}}],["shift",{"2":{"191":3}}],["sharing",{"2":{"107":1}}],["shares",{"2":{"74":1}}],["share",{"2":{"8":14,"10":8,"87":2,"88":8,"111":2,"112":1,"113":1,"121":1,"130":1}}],["shared",{"0":{"184":1},"2":{"7":2,"10":1,"64":2,"74":2,"121":3}}],["shapes",{"2":{"85":1,"195":7}}],["shape",{"2":{"62":1,"71":1,"74":1,"87":1,"158":1,"169":1,"191":1}}],["shaped",{"2":{"58":1}}],["shapefiles",{"2":{"195":1}}],["shapefile",{"2":{"29":1,"195":4}}],["shallower",{"2":{"5":2,"10":1,"150":2,"153":1}}],["short",{"2":{"153":1}}],["shorthand",{"2":{"82":1}}],["shoelace",{"2":{"8":2,"10":1,"53":2,"66":1}}],["shouldn",{"2":{"74":1}}],["should",{"2":{"5":2,"8":2,"10":15,"17":1,"18":1,"20":2,"25":1,"27":1,"32":1,"53":1,"56":3,"63":1,"64":3,"65":1,"88":1,"122":4,"146":2,"150":2,"153":2,"156":1,"158":1,"160":1,"162":1,"165":6,"166":2,"177":1,"180":2}}],["show",{"2":{"2":1,"11":1,"13":1,"14":1,"58":1,"192":1,"195":1,"197":2}}],["shewchuck",{"2":{"0":1}}],["s",{"0":{"30":1},"2":{"0":1,"2":1,"4":1,"7":2,"10":11,"18":1,"19":1,"29":1,"52":1,"53":4,"56":1,"57":1,"58":2,"59":5,"62":3,"63":3,"64":3,"66":1,"68":1,"71":1,"74":2,"76":3,"81":1,"85":1,"88":1,"103":2,"110":3,"111":4,"112":2,"121":1,"122":9,"124":1,"125":1,"130":1,"146":5,"148":2,"153":2,"154":1,"156":4,"159":2,"160":2,"163":1,"166":4,"168":1,"170":3,"175":4,"176":1,"178":1,"180":2,"184":4,"188":6,"191":6,"192":4,"193":4,"194":2,"195":5,"200":2}}],["aim",{"2":{"158":1}}],["ay",{"2":{"145":2}}],["azimuth",{"2":{"145":2}}],["automatically",{"2":{"121":1,"153":1,"192":1}}],["a3",{"2":{"80":1}}],["against",{"2":{"88":1,"122":2,"176":1,"180":1}}],["again",{"2":{"74":1,"153":1}}],["a``",{"2":{"71":2}}],["a`",{"2":{"71":7,"74":3,"76":2}}],["away",{"2":{"60":1,"105":1,"200":1}}],["a2y",{"2":{"74":4}}],["a2x",{"2":{"74":4}}],["a2",{"2":{"58":4,"74":54,"81":1,"121":6}}],["a1y",{"2":{"74":7}}],["a1x",{"2":{"74":7}}],["a1",{"2":{"58":2,"64":9,"74":66,"81":1,"121":6}}],["ams",{"2":{"196":2}}],["america",{"2":{"180":1}}],["am",{"2":{"122":1}}],["ambiguity",{"2":{"85":2,"153":1,"154":1,"156":3}}],["amounts",{"2":{"195":1}}],["amount",{"2":{"52":1,"65":1}}],["amp",{"2":{"2":1,"10":1}}],["axes",{"2":{"146":6}}],["ax",{"2":{"13":3,"14":3,"145":2,"191":5}}],["axs",{"2":{"13":2}}],["axis`",{"2":{"158":1}}],["axislegend",{"2":{"79":1,"175":1,"179":1}}],["axis",{"2":{"10":3,"13":2,"14":1,"52":1,"55":1,"58":4,"62":1,"65":1,"81":2,"84":1,"146":2,"158":4,"175":1,"180":1,"196":1}}],["a>",{"2":{"10":2}}],["average",{"2":{"57":3,"63":4,"74":1}}],["available",{"0":{"166":1},"2":{"10":3,"31":1,"63":1,"159":1,"165":3,"174":1,"175":1,"177":1,"180":1,"184":1}}],["avoid",{"2":{"9":2,"10":7,"59":1,"70":1,"73":1,"74":1,"75":1,"76":1,"146":2,"153":1,"154":1,"156":3,"177":1,"181":1,"182":1,"183":1,"191":3}}],["achieve",{"2":{"168":1}}],["across",{"2":{"151":1}}],["acos",{"2":{"56":1}}],["activate",{"2":{"175":1}}],["action",{"2":{"20":2}}],["actions",{"2":{"20":2}}],["actual",{"2":{"3":1,"59":1,"145":1,"163":1,"172":1,"176":1}}],["actually",{"2":{"2":1,"5":2,"10":1,"59":4,"74":1,"76":3,"122":1,"146":1,"185":1,"195":1}}],["access",{"2":{"192":1}}],["accessed",{"2":{"188":1}}],["acceptable",{"2":{"122":1}}],["accepts",{"2":{"82":1}}],["accept",{"2":{"10":1,"188":1}}],["according",{"2":{"162":1,"168":1,"169":1,"198":1}}],["accordingly",{"2":{"64":1}}],["account",{"2":{"70":1,"73":1}}],["accurary",{"2":{"74":1}}],["accuratearithmetic",{"2":{"11":2}}],["accurate",{"0":{"11":1},"2":{"11":3,"175":1}}],["accumulators",{"2":{"59":1}}],["accumulator",{"2":{"59":1}}],["accumulate",{"2":{"53":1,"63":3}}],["accumulation",{"0":{"11":1},"2":{"59":1}}],["after",{"2":{"10":8,"56":1,"64":3,"153":1,"154":1,"180":2}}],["ab",{"2":{"64":3,"70":1,"73":1,"74":5,"75":1}}],["able",{"2":{"20":1,"74":1}}],["ability",{"2":{"17":1}}],["about",{"2":{"10":1,"24":2,"30":1,"59":2,"122":1,"153":1,"158":1,"161":1}}],["above",{"2":{"8":2,"10":1,"56":1,"63":1,"64":1,"74":1,"76":1,"165":1}}],["abs",{"2":{"53":4,"56":1,"63":1,"66":2,"105":8,"121":2,"146":1,"183":1,"200":1}}],["absolutely",{"2":{"154":1}}],["absolute",{"2":{"8":2,"10":1,"52":1,"53":2}}],["abstractrange",{"2":{"146":6}}],["abstractmulticurvetrait",{"2":{"100":1,"101":1,"114":1,"115":1,"131":1,"132":1,"141":1,"142":1}}],["abstractmatrix",{"2":{"10":5,"146":13}}],["abstractpolygontrait",{"2":{"85":1}}],["abstractcurvetrait",{"2":{"53":1,"56":1,"66":1,"96":1,"99":1,"100":1,"105":1,"110":1,"114":1,"127":1,"130":1,"131":1,"137":1,"140":1,"141":1,"145":1,"180":2,"189":3}}],["abstractwkbgeomtrait",{"2":{"32":1}}],["abstractfloat",{"2":{"31":1,"53":2,"56":1,"64":1,"66":2,"69":1,"70":1,"73":1,"74":1,"75":1,"85":8}}],["abstractarrays",{"2":{"151":1}}],["abstractarray",{"2":{"10":1,"153":4,"154":2,"189":2}}],["abstract",{"2":{"10":3,"32":1,"59":3,"158":2,"160":3,"164":1,"165":5,"166":1,"180":3}}],["abstractvector",{"2":{"9":2,"10":1,"59":26,"146":8}}],["abstractgeometrytrait`",{"2":{"165":1}}],["abstractgeometrytrait",{"2":{"10":3,"32":1,"53":2,"66":1,"85":1,"101":1,"115":1,"132":1,"142":1,"151":1,"165":6,"166":2,"189":5}}],["abstractgeometry",{"2":{"7":8,"10":4,"32":1,"91":2,"104":2}}],["abstracttrait",{"2":{"5":4,"7":4,"10":8,"69":1,"71":2,"74":4,"76":2,"121":4,"148":1,"150":4,"153":1,"154":2,"156":7,"159":3}}],["abstractbarycentriccoordinatemethod",{"2":{"4":1,"9":2,"10":7,"59":18}}],["arbitrarily",{"2":{"151":1}}],["arbitrary",{"2":{"57":1,"148":1,"154":1,"191":1}}],["around",{"2":{"58":1,"59":2,"69":1,"84":1,"88":1,"146":1,"180":1,"198":1}}],["argmin",{"2":{"184":1}}],["argtypes",{"2":{"60":2,"173":1,"176":1}}],["args",{"2":{"13":2}}],["argumenterror",{"2":{"76":1,"146":1,"153":1,"154":1,"156":3}}],["argument",{"2":{"8":10,"10":10,"53":2,"56":1,"63":1,"66":1,"70":1,"73":1,"75":1,"85":2,"153":1,"156":1,"188":2,"192":1,"193":1}}],["arguments",{"2":{"5":2,"7":2,"10":5,"64":1,"94":2,"108":1,"125":1,"135":1,"172":1,"176":2,"177":1,"188":1}}],["arithmetic",{"2":{"11":1}}],["archgdal",{"2":{"23":1}}],["arc",{"2":{"10":1,"176":1}}],["array",{"2":{"8":2,"10":2,"53":1,"66":1,"146":5,"153":5,"154":2,"181":1,"184":1}}],["arrays",{"2":{"5":2,"10":2,"22":1,"146":1,"150":2,"154":2}}],["aren",{"2":{"8":6,"10":5,"69":1,"71":1,"74":2,"76":4,"88":3,"166":2,"170":2}}],["area2",{"2":{"63":4}}],["area1",{"2":{"63":4}}],["areas",{"2":{"8":4,"10":2,"53":3,"158":1,"183":2}}],["area",{"0":{"51":2,"52":2},"1":{"52":2,"53":2},"2":{"4":5,"8":28,"10":26,"11":6,"31":1,"51":2,"52":9,"53":61,"61":1,"62":3,"63":49,"65":2,"66":44,"75":2,"76":1,"121":1,"148":1,"154":1,"158":2,"166":2,"170":2,"180":2,"183":4,"192":1}}],["are",{"2":{"2":2,"5":2,"7":8,"8":36,"9":4,"10":50,"20":2,"22":3,"24":1,"25":1,"26":2,"27":1,"52":1,"53":2,"55":1,"56":8,"57":6,"59":11,"62":1,"63":3,"64":31,"66":6,"69":3,"70":3,"71":15,"73":2,"74":16,"75":5,"76":9,"81":3,"84":1,"85":1,"87":3,"88":26,"90":1,"94":7,"96":1,"97":3,"98":3,"99":1,"101":1,"107":1,"108":5,"110":1,"111":1,"112":1,"114":1,"115":1,"121":7,"122":12,"125":5,"127":1,"129":2,"134":1,"135":5,"137":1,"138":3,"139":3,"140":1,"142":1,"145":1,"146":14,"147":1,"150":2,"151":1,"153":6,"156":2,"157":1,"158":3,"159":1,"161":1,"162":1,"163":1,"165":1,"166":3,"167":1,"168":1,"169":1,"170":2,"175":1,"176":1,"177":1,"180":4,"182":1,"184":2,"186":1,"187":2,"188":1,"191":1,"194":2,"195":2,"196":1,"197":3,"198":6,"199":1,"200":1}}],["alone",{"2":{"153":1}}],["along",{"2":{"8":8,"10":5,"64":3,"66":2,"74":4,"88":4,"122":1}}],["although",{"2":{"138":1,"139":1}}],["alternate",{"2":{"64":1}}],["alternative",{"2":{"64":1}}],["already",{"2":{"88":1,"122":2,"153":1,"182":1}}],["almost",{"2":{"74":1}}],["alg=nothing",{"2":{"180":1}}],["alg`",{"2":{"180":1}}],["alg",{"2":{"10":4,"32":2,"180":21,"181":3,"182":8,"183":3,"184":7,"188":9}}],["algorithms",{"2":{"10":3,"77":1,"81":1,"162":1,"177":1,"178":1,"180":4,"182":1,"184":1}}],["algorithm",{"0":{"181":1,"182":1,"183":1},"2":{"10":12,"58":1,"64":2,"66":1,"69":3,"70":1,"73":1,"75":1,"77":1,"82":4,"122":1,"178":1,"180":8,"181":1,"182":3,"183":1,"188":4}}],["always",{"2":{"5":14,"8":12,"10":10,"25":1,"27":1,"52":1,"53":4,"66":2,"81":1,"84":1,"85":1,"88":1,"150":4,"153":3,"154":1,"172":4,"197":1}}],["also",{"2":{"5":4,"10":11,"23":1,"53":2,"56":1,"63":2,"64":3,"66":1,"70":1,"73":1,"74":2,"75":1,"77":1,"81":1,"82":1,"84":1,"85":2,"88":3,"121":1,"146":1,"150":2,"151":1,"153":1,"159":1,"163":1,"166":3,"170":2,"173":1,"174":1,"175":1,"176":1,"178":1,"185":1,"191":2,"194":1}}],["allocating",{"2":{"82":1}}],["allocations",{"2":{"9":2,"10":1,"59":1}}],["allocate",{"2":{"82":1}}],["allow=",{"2":{"122":1}}],["allows",{"2":{"11":1,"18":1,"23":1,"24":1,"29":1,"94":2,"96":3,"97":3,"98":3,"99":1,"108":2,"110":3,"111":3,"112":2,"113":1,"125":1,"128":1,"129":1,"130":1,"135":3,"137":3,"138":3,"139":3,"140":1,"148":1,"178":1,"192":1,"194":1,"197":1}}],["allowed",{"2":{"10":1,"94":3,"108":3,"122":6,"125":5,"127":1,"128":2,"135":3,"180":1}}],["allow",{"2":{"5":2,"10":1,"23":1,"74":1,"94":7,"105":3,"108":7,"122":73,"125":10,"135":10,"185":1}}],["all",{"2":{"2":1,"5":6,"7":4,"8":6,"10":14,"11":7,"22":1,"25":1,"27":1,"31":5,"53":3,"56":5,"59":1,"64":13,"66":3,"70":1,"71":3,"74":3,"76":5,"77":1,"80":3,"82":1,"84":1,"88":2,"90":1,"97":3,"98":3,"101":1,"114":1,"115":1,"121":4,"122":7,"134":1,"142":1,"145":1,"146":3,"147":1,"150":2,"151":2,"152":1,"153":7,"154":1,"156":1,"158":1,"163":1,"165":1,"167":1,"168":1,"171":1,"180":1,"185":2,"186":1,"187":1,"191":1,"193":1,"195":1,"197":1}}],["apart",{"2":{"170":1}}],["appears",{"2":{"162":1}}],["append",{"2":{"56":1,"64":5,"70":1,"71":2,"74":2,"75":1,"76":5,"170":2}}],["approximately",{"2":{"64":1,"175":1}}],["approach",{"2":{"19":1}}],["appropriately",{"2":{"198":1}}],["appropriate",{"2":{"10":1,"188":2}}],["applies",{"2":{"151":2}}],["applied",{"2":{"10":3,"20":1,"156":2,"164":2,"165":3,"166":1}}],["application",{"2":{"5":2,"10":3,"150":2,"154":1,"163":1,"165":4,"166":1,"170":2,"174":1,"177":1}}],["apply`",{"2":{"153":1}}],["applys",{"2":{"53":1,"66":1}}],["applyreduce",{"0":{"19":1,"154":1},"2":{"4":2,"5":1,"10":1,"17":1,"19":2,"29":1,"53":1,"56":1,"63":2,"66":1,"85":2,"148":1,"150":1,"154":42,"160":1}}],["apply",{"0":{"5":1,"18":1,"22":1,"29":1,"148":1,"151":1},"1":{"19":1,"149":1,"150":1,"151":1,"152":1,"153":1},"2":{"4":2,"5":7,"10":7,"17":1,"18":5,"20":1,"22":1,"24":1,"29":3,"32":2,"148":5,"150":5,"151":4,"152":1,"153":55,"154":5,"155":1,"156":3,"158":1,"160":1,"165":5,"166":1,"167":1,"171":3,"172":1,"176":1,"177":1,"180":2,"185":3,"186":2}}],["apis",{"2":{"17":1}}],["api",{"0":{"4":1,"59":1},"1":{"5":1,"6":1,"7":1,"8":1,"9":1,"10":1},"2":{"4":1,"10":3,"24":1,"59":1,"176":1,"180":1,"188":1}}],["april",{"0":{"0":1}}],["attribute",{"2":{"195":1}}],["attributed",{"2":{"194":1}}],["attributes",{"0":{"194":1},"2":{"190":1,"194":3}}],["attempt",{"2":{"158":1}}],["attempts",{"2":{"122":1}}],["attach",{"2":{"5":4,"8":2,"10":5,"150":2,"155":1}}],["at",{"2":{"2":1,"7":8,"9":2,"10":6,"18":1,"20":1,"24":1,"26":1,"52":1,"53":1,"56":2,"58":1,"59":2,"64":4,"66":2,"74":8,"76":2,"81":1,"121":6,"122":17,"124":1,"125":1,"128":3,"129":2,"130":2,"131":1,"132":1,"135":1,"141":1,"145":1,"151":1,"153":1,"175":1,"177":1,"182":1,"184":1,"192":1,"193":2}}],["atomic",{"2":{"0":1}}],["annotation",{"2":{"160":1}}],["annotated",{"2":{"26":1}}],["answers",{"2":{"168":1}}],["answer",{"2":{"10":3,"70":1,"73":1,"74":1,"75":1}}],["angels",{"2":{"56":1}}],["angle",{"2":{"56":35,"145":1}}],["angles",{"0":{"54":1,"55":1},"1":{"55":1,"56":1},"2":{"4":2,"8":19,"10":10,"31":1,"54":1,"55":4,"56":42}}],["angular",{"2":{"10":1,"158":1}}],["another",{"2":{"7":2,"10":1,"64":2,"74":1,"82":1,"84":1,"90":1,"93":1,"96":1,"98":1,"99":1,"103":1,"107":1,"110":1,"111":1,"112":1,"113":1,"117":1,"120":1,"121":1,"122":1,"124":1,"127":1,"128":1,"129":1,"130":1,"134":1,"137":1,"138":1,"139":1,"140":1,"146":1,"172":1}}],["anonymous",{"2":{"5":2,"10":1,"185":1}}],["anything",{"2":{"58":1,"122":1}}],["any",{"2":{"5":6,"7":2,"8":4,"10":19,"18":1,"24":1,"25":1,"27":1,"29":1,"57":2,"63":1,"64":7,"66":1,"69":1,"71":1,"74":4,"76":1,"85":2,"95":2,"96":1,"99":1,"107":1,"109":2,"110":1,"111":2,"112":1,"113":2,"121":2,"122":8,"126":2,"136":2,"140":1,"146":2,"148":2,"150":2,"153":2,"154":2,"156":1,"163":1,"164":1,"165":4,"166":4,"170":4,"172":2,"174":1,"176":1,"177":1,"182":1,"189":1,"197":3,"198":2}}],["an",{"2":{"2":1,"5":6,"8":22,"9":2,"10":30,"13":1,"14":1,"18":1,"20":1,"23":2,"32":1,"52":1,"53":2,"55":1,"56":4,"58":1,"59":3,"60":2,"62":1,"64":15,"65":2,"66":2,"68":1,"69":1,"70":2,"71":5,"73":2,"74":9,"75":2,"76":2,"82":3,"84":2,"85":5,"87":1,"88":1,"90":1,"93":2,"96":2,"103":1,"107":1,"117":1,"120":1,"121":1,"122":13,"124":1,"134":1,"137":2,"138":1,"139":1,"146":3,"147":1,"150":2,"151":1,"152":1,"153":5,"154":2,"156":1,"158":1,"163":1,"167":1,"172":1,"176":1,"185":2,"188":3,"189":1,"191":2,"192":2,"194":1,"196":1,"198":1}}],["and",{"0":{"5":1,"20":1,"22":1,"24":1,"51":1,"71":1,"74":1,"76":1,"83":1,"191":1,"192":1,"194":1},"1":{"52":1,"53":1,"84":1,"85":1},"2":{"0":1,"2":2,"4":2,"5":16,"7":22,"8":36,"10":94,"17":4,"18":4,"20":2,"22":1,"23":2,"24":3,"25":2,"26":5,"27":2,"29":2,"30":1,"31":2,"32":2,"33":1,"52":1,"53":7,"56":13,"57":2,"58":2,"59":20,"60":1,"61":2,"62":1,"63":29,"64":71,"65":2,"66":18,"68":1,"69":4,"70":4,"71":16,"73":4,"74":38,"75":6,"76":15,"81":1,"82":2,"84":2,"85":13,"87":2,"88":13,"90":3,"91":2,"93":2,"94":3,"97":3,"98":4,"99":1,"103":2,"104":2,"105":1,"108":3,"111":3,"112":1,"113":1,"117":1,"120":2,"121":3,"122":36,"125":2,"129":2,"130":2,"134":3,"135":4,"137":2,"138":3,"139":3,"140":1,"145":2,"146":16,"148":6,"150":10,"151":2,"152":3,"153":16,"154":10,"156":2,"157":1,"158":15,"159":1,"160":3,"161":1,"162":2,"163":1,"164":1,"165":5,"166":2,"167":2,"168":1,"171":2,"172":2,"175":1,"176":5,"177":4,"178":2,"179":1,"180":8,"182":8,"183":1,"184":1,"185":1,"188":4,"190":3,"191":9,"192":7,"193":2,"195":5,"197":2,"198":4,"199":2}}],["a",{"0":{"23":1,"192":1,"194":1},"2":{"0":3,"2":1,"5":26,"7":10,"8":158,"9":2,"10":209,"11":1,"15":2,"17":1,"18":6,"20":3,"22":3,"23":4,"24":2,"25":2,"27":2,"29":2,"30":2,"32":4,"35":3,"36":3,"37":3,"38":3,"40":2,"41":2,"42":2,"43":2,"44":2,"45":2,"46":2,"47":2,"48":2,"49":2,"52":11,"53":20,"55":3,"56":22,"57":13,"58":4,"59":11,"60":2,"62":5,"63":8,"64":281,"65":2,"66":17,"68":3,"69":4,"70":39,"71":30,"72":3,"73":38,"74":91,"75":36,"76":45,"77":3,"79":3,"80":2,"81":1,"82":4,"84":15,"85":27,"87":2,"88":54,"90":2,"93":1,"94":3,"96":5,"97":3,"98":2,"100":2,"101":2,"103":2,"105":1,"107":1,"108":3,"110":4,"111":3,"112":1,"114":2,"115":2,"117":2,"120":5,"121":27,"122":52,"124":2,"125":4,"127":4,"128":2,"129":2,"130":1,"131":2,"132":2,"134":1,"135":3,"137":5,"138":2,"139":2,"141":2,"142":2,"144":1,"145":4,"146":79,"148":4,"150":8,"151":4,"153":27,"154":6,"156":5,"158":11,"159":6,"160":6,"161":6,"162":2,"163":2,"164":5,"165":7,"166":9,"167":2,"168":8,"170":6,"171":3,"172":8,"173":3,"174":5,"175":4,"176":8,"177":10,"179":3,"180":5,"183":3,"184":1,"185":2,"186":1,"188":12,"189":2,"190":1,"191":21,"192":12,"193":5,"194":5,"195":11,"196":1,"197":5,"198":8,"199":3,"200":3}}],["asked",{"2":{"153":1}}],["ask",{"2":{"23":1}}],["aspect",{"2":{"13":1,"14":1,"52":1,"55":1,"58":2,"62":1,"65":1,"84":2,"146":2,"175":1,"180":1}}],["assign",{"2":{"190":1}}],["assigned",{"2":{"64":1,"146":7,"198":1}}],["assets",{"2":{"192":1}}],["assetpath",{"2":{"192":1}}],["assemble",{"2":{"163":1}}],["assert",{"2":{"59":23,"63":1,"64":1,"69":1,"71":1,"74":1,"177":1,"189":1}}],["assume",{"2":{"121":2,"153":3,"154":1,"162":1,"170":1}}],["assumed",{"2":{"53":1,"88":1,"122":1}}],["assumes",{"2":{"10":1,"64":1,"85":1,"176":1,"184":1}}],["associativity",{"2":{"19":1}}],["associated",{"0":{"5":1},"2":{"57":2}}],["as",{"2":{"0":1,"5":16,"7":36,"8":12,"9":2,"10":82,"11":2,"13":3,"14":3,"15":3,"17":2,"18":2,"20":1,"22":1,"23":2,"24":1,"25":1,"27":1,"52":2,"53":3,"55":2,"56":4,"57":4,"58":1,"59":4,"60":3,"62":2,"63":1,"64":15,"65":2,"66":5,"68":3,"69":5,"70":8,"71":2,"73":7,"74":8,"75":7,"76":5,"77":1,"79":2,"80":2,"81":3,"82":3,"84":3,"85":1,"87":2,"88":2,"90":2,"91":2,"93":3,"94":3,"103":2,"104":2,"105":2,"107":2,"108":3,"117":2,"118":2,"120":2,"121":2,"122":7,"124":2,"125":3,"127":1,"134":2,"135":3,"145":8,"146":3,"148":3,"150":4,"151":2,"152":2,"153":10,"154":4,"156":2,"158":3,"159":2,"160":2,"162":2,"163":2,"165":1,"166":1,"167":1,"169":2,"172":3,"174":2,"175":2,"176":3,"178":2,"179":2,"180":7,"182":2,"185":3,"188":2,"189":2,"190":3,"191":2,"192":1,"193":1,"195":3,"196":3,"197":2,"198":3,"199":2}}],["adjust",{"2":{"74":1}}],["adjacent",{"2":{"64":1,"71":1,"74":1,"76":1}}],["adaptivity",{"0":{"72":1}}],["adaptive",{"2":{"0":1,"13":3,"14":2,"72":1}}],["adapted",{"2":{"70":1,"73":1,"75":1,"145":1}}],["advance",{"2":{"63":2}}],["advised",{"2":{"10":1,"159":1}}],["administrative",{"2":{"199":1}}],["admin",{"2":{"11":1,"80":1,"180":2}}],["adm0",{"2":{"11":7,"80":4}}],["additional",{"2":{"195":1}}],["additionally",{"2":{"64":3,"88":1}}],["addition",{"2":{"58":1,"76":1}}],["adding",{"2":{"0":1,"8":2,"10":4,"76":2,"146":1,"167":1,"174":1,"176":2,"177":1}}],["added",{"2":{"10":1,"56":1,"64":6,"66":1,"76":2,"156":1,"170":2,"182":1}}],["add",{"2":{"0":2,"7":2,"10":1,"59":1,"60":1,"64":16,"66":1,"69":4,"70":3,"73":1,"74":2,"75":2,"76":9,"82":1,"105":1,"146":4,"156":1,"160":1,"174":1,"176":1,"182":10,"192":1,"194":2,"197":4}}],["lj",{"2":{"146":2}}],["lrs",{"2":{"180":2}}],["lr",{"2":{"146":3,"153":3}}],["lp",{"2":{"122":2}}],["lstart",{"2":{"122":2}}],["ls",{"2":{"122":12}}],["ll",{"2":{"17":1,"58":1,"175":2,"180":1,"192":1,"194":1}}],["l",{"2":{"14":4,"59":6,"105":2,"122":32}}],["lgeos",{"2":{"180":1}}],["lg",{"2":{"13":1,"14":1,"15":2,"32":5,"33":1,"35":3,"36":3,"37":3,"38":3,"40":3,"41":3,"42":3,"43":3,"44":3,"45":3,"46":3,"47":3,"48":3,"49":3,"50":3,"81":4,"176":9,"180":17}}],["l305",{"2":{"10":1}}],["laptop",{"2":{"199":1}}],["land",{"2":{"192":8}}],["layers",{"2":{"151":1}}],["label",{"2":{"14":4,"15":2,"79":2,"81":1,"84":1,"146":3,"175":2,"179":2,"180":2}}],["labels",{"2":{"13":2,"146":1}}],["lazily",{"2":{"10":1,"156":1}}],["later",{"2":{"53":1,"81":1,"146":1}}],["latitude",{"2":{"10":3,"158":3,"192":2}}],["lat",{"2":{"10":4,"175":1,"176":3}}],["larger",{"2":{"64":1,"75":1,"184":1}}],["large",{"2":{"10":8,"59":1,"180":2,"195":1,"199":1}}],["lastindex",{"2":{"184":1}}],["last",{"2":{"2":1,"8":6,"10":3,"53":2,"56":11,"58":2,"64":9,"66":4,"85":7,"88":5,"122":20,"127":1,"146":6,"162":1,"170":2,"182":1}}],["lt",{"2":{"10":6,"74":4,"175":1}}],["l289",{"2":{"10":1}}],["l2",{"2":{"7":8,"8":8,"10":8,"87":4,"88":12,"90":8,"104":2,"107":5,"120":4,"124":3,"125":2,"134":8}}],["l195",{"2":{"10":1}}],["l177",{"2":{"10":1}}],["l1",{"2":{"7":12,"8":8,"10":10,"87":4,"88":12,"90":8,"93":4,"94":2,"103":4,"104":2,"107":5,"120":4,"124":3,"125":2,"134":8}}],["log10",{"2":{"176":2,"180":4}}],["log",{"2":{"156":4,"175":2}}],["loudly",{"2":{"153":1}}],["location",{"2":{"64":1,"122":6}}],["local",{"2":{"53":1,"56":3,"64":4,"71":1,"76":1,"146":1}}],["locally",{"2":{"10":1,"158":2}}],["loose",{"2":{"161":1}}],["looping",{"2":{"146":1}}],["loop",{"2":{"56":1,"59":2,"63":3,"64":8,"66":1,"74":1,"76":1,"122":5,"146":3,"182":1}}],["lookup",{"2":{"146":1,"153":1}}],["looks",{"2":{"62":1}}],["look",{"2":{"52":2,"146":2,"162":1,"175":1}}],["lon",{"2":{"10":3,"175":1,"176":2}}],["longitude",{"2":{"10":3,"158":3,"192":2}}],["long",{"2":{"10":1,"74":1,"176":1,"199":1}}],["longer",{"2":{"10":3,"174":1,"176":2,"177":1}}],["lots",{"2":{"192":1}}],["lot",{"2":{"10":1,"23":1,"53":1,"56":1,"63":1,"66":1,"85":1,"88":1,"121":1,"148":1,"175":1,"188":2}}],["load",{"2":{"153":1,"154":1,"180":1,"190":2}}],["loading",{"2":{"60":1,"173":1,"176":1}}],["loads",{"2":{"9":2,"10":1,"59":1}}],["loaded",{"2":{"5":2,"60":3,"172":1,"173":2,"176":2}}],["lower",{"2":{"0":1,"10":1,"146":1,"198":1}}],["len",{"2":{"182":7}}],["length",{"2":{"2":1,"4":1,"9":2,"10":5,"18":1,"59":32,"61":1,"62":1,"63":22,"64":11,"66":1,"69":2,"70":2,"73":1,"74":1,"75":1,"76":1,"122":1,"146":16,"153":2,"154":1,"170":2,"175":1,"181":1,"182":1,"183":1,"184":7}}],["legend",{"2":{"180":4}}],["le",{"2":{"122":10}}],["leaving",{"2":{"162":1}}],["leaf",{"2":{"153":1,"156":3}}],["leading",{"2":{"191":1}}],["lead",{"2":{"74":1,"162":1}}],["least",{"2":{"7":8,"10":4,"64":1,"74":1,"76":2,"121":6,"122":14,"125":1,"128":3,"129":2,"130":2,"131":1,"132":1,"135":1,"141":1,"145":1}}],["leftjoin",{"2":{"197":1}}],["leftover",{"2":{"64":1}}],["left=1",{"2":{"64":1}}],["left",{"2":{"59":1,"64":5,"145":1,"146":2,"182":17,"184":5}}],["lets",{"2":{"53":1}}],["let",{"2":{"52":1,"62":1,"122":1,"146":3,"175":1,"191":6,"192":4,"193":3,"194":2,"195":2,"200":1}}],["less",{"2":{"7":2,"10":7,"53":1,"56":1,"59":1,"63":1,"66":1,"85":1,"88":1,"105":1,"121":1,"146":1,"180":1,"181":1}}],["levels",{"2":{"10":1,"146":1,"151":1,"159":1}}],["level",{"2":{"0":1,"2":1,"10":1,"18":2,"20":1,"29":1,"151":1,"153":2,"161":1,"163":1,"165":5,"166":1,"168":1,"170":2,"193":2}}],["li",{"2":{"146":2}}],["lie",{"2":{"74":1}}],["lies",{"2":{"10":1,"64":3,"158":1,"198":1}}],["limitations",{"2":{"74":1}}],["limits",{"2":{"58":1}}],["limited",{"2":{"10":1,"174":1,"177":1}}],["library",{"2":{"69":1,"195":1}}],["libraries",{"2":{"53":1,"168":1,"195":1}}],["libgeos",{"2":{"10":2,"13":1,"14":1,"15":1,"23":1,"32":2,"53":1,"60":5,"81":1,"147":1,"176":7,"180":4,"188":2}}],["little",{"2":{"26":1}}],["literate",{"2":{"26":1,"31":1,"32":1,"50":1,"53":1,"56":1,"59":1,"60":1,"63":1,"64":1,"66":1,"69":1,"71":1,"72":1,"74":1,"76":1,"82":1,"85":1,"88":1,"91":1,"101":1,"104":1,"105":1,"115":1,"118":1,"121":1,"122":1,"132":1,"142":1,"145":1,"146":1,"147":1,"153":1,"154":1,"155":1,"156":1,"160":1,"163":1,"166":1,"167":1,"170":1,"171":1,"173":1,"177":1,"184":1,"185":1,"186":1,"188":1,"189":1}}],["lift",{"2":{"14":2}}],["lin",{"2":{"176":5}}],["linked",{"2":{"77":1}}],["linrange",{"2":{"13":2,"14":5,"58":2,"84":1,"146":2,"176":1,"180":2}}],["linering",{"2":{"192":1}}],["linewidth",{"2":{"52":1,"191":1}}],["linesegment",{"2":{"145":2,"177":1}}],["lines",{"0":{"97":1,"111":1,"128":1,"138":1},"2":{"7":2,"8":8,"10":5,"64":3,"68":1,"74":9,"79":1,"80":2,"81":2,"84":1,"87":4,"88":4,"90":3,"93":1,"94":1,"103":2,"105":1,"107":3,"117":3,"120":4,"121":2,"122":2,"124":4,"134":3,"135":1,"146":3,"178":1,"191":4,"196":2}}],["linestringtrait",{"2":{"7":4,"8":8,"10":9,"11":3,"32":1,"56":1,"63":4,"73":2,"85":2,"88":8,"96":1,"97":4,"98":1,"105":6,"110":1,"111":5,"121":4,"127":1,"128":4,"129":1,"137":1,"138":4,"139":1,"151":1,"159":2,"165":3,"166":1,"177":2}}],["linestring",{"2":{"7":10,"8":12,"10":15,"18":1,"20":1,"56":2,"63":2,"85":4,"87":2,"88":2,"90":2,"91":1,"96":1,"97":3,"104":2,"107":2,"108":1,"110":1,"111":4,"120":2,"122":2,"127":1,"128":3,"129":1,"134":2,"135":1,"137":1,"138":4,"139":1,"145":7,"153":2,"154":2,"189":3,"191":5,"196":1}}],["linestrings",{"2":{"2":1,"8":4,"10":2,"88":2,"144":1,"161":1,"191":1}}],["linetrait",{"2":{"7":4,"8":8,"10":6,"56":1,"64":2,"69":2,"73":2,"85":2,"88":8,"96":1,"97":4,"98":1,"110":1,"111":5,"121":4,"127":1,"128":4,"129":1,"137":1,"138":4,"139":1}}],["line2",{"2":{"7":6,"10":7,"73":2,"74":2,"105":5,"117":3,"118":2,"121":3,"145":5}}],["line1",{"2":{"7":8,"10":8,"73":2,"74":2,"105":5,"117":3,"118":2,"121":5,"145":5}}],["linea",{"2":{"5":2,"10":1,"185":1}}],["linearmap",{"2":{"180":1}}],["linearalgebra",{"2":{"31":1}}],["linearr",{"2":{"5":2,"10":1,"185":1}}],["linearringtrait",{"2":{"8":8,"10":6,"11":3,"32":1,"53":2,"56":3,"63":4,"64":4,"73":2,"85":2,"88":8,"96":1,"97":1,"98":4,"110":1,"111":2,"112":3,"127":1,"128":1,"129":4,"137":1,"138":1,"139":4,"159":2,"165":1,"177":2,"180":1}}],["linearring",{"2":{"5":20,"7":4,"8":2,"10":15,"56":2,"63":2,"64":2,"75":2,"76":1,"82":1,"85":1,"96":1,"98":3,"110":1,"111":1,"112":2,"121":4,"122":2,"127":1,"128":1,"129":3,"137":1,"139":4,"145":1,"146":3,"150":4,"153":5,"154":2,"161":1,"162":6,"163":1,"169":13,"180":1,"185":8,"191":24,"192":6,"193":8,"198":2}}],["linearrings",{"2":{"2":1,"112":1,"146":6,"161":1,"191":1}}],["linearsegments",{"2":{"4":1,"10":4,"174":1,"175":1,"176":3,"177":5}}],["linear",{"2":{"2":1,"4":1,"8":14,"10":13,"53":2,"59":1,"62":1,"63":3,"66":1,"74":1,"85":5,"88":8,"98":1,"122":2,"128":1,"129":2,"138":1,"144":1,"153":1,"154":1,"158":6,"163":3,"175":5,"176":3,"177":4}}],["line",{"0":{"122":1},"2":{"4":1,"7":26,"8":18,"10":52,"23":1,"55":2,"56":7,"62":3,"63":10,"64":12,"66":8,"68":6,"69":18,"73":8,"74":67,"76":6,"85":11,"88":5,"91":2,"93":2,"94":1,"96":2,"97":11,"98":8,"103":1,"105":11,"108":2,"110":1,"111":9,"112":4,"117":2,"118":2,"120":3,"121":12,"122":141,"124":2,"125":2,"127":1,"128":10,"129":3,"135":2,"137":2,"138":10,"139":7,"145":6,"146":2,"177":1,"180":1,"181":1,"182":4,"183":1,"189":3,"191":3}}],["lineorientation",{"2":{"4":1,"10":2,"73":2}}],["likely",{"2":{"151":1}}],["like",{"0":{"72":1},"2":{"5":4,"10":9,"17":1,"18":2,"19":1,"20":1,"23":1,"24":1,"29":1,"53":1,"58":1,"59":1,"62":1,"66":1,"70":1,"73":1,"75":1,"82":1,"84":1,"85":1,"88":1,"148":2,"150":4,"153":1,"154":2,"159":2,"165":3,"166":1,"174":1,"175":1,"192":2}}],["lists",{"2":{"20":1,"64":3,"121":1}}],["listed",{"2":{"10":1,"56":1,"180":1}}],["list",{"2":{"2":1,"10":16,"56":20,"64":233,"69":20,"70":14,"71":8,"73":13,"74":5,"75":13,"76":1,"199":2}}]],"serializationVersion":2}';export{e as default}; diff --git a/dev/assets/chunks/VPLocalSearchBox.CY7JarLU.js b/dev/assets/chunks/VPLocalSearchBox.zWtjorLS.js similarity index 99% rename from dev/assets/chunks/VPLocalSearchBox.CY7JarLU.js rename to dev/assets/chunks/VPLocalSearchBox.zWtjorLS.js index c205bbf44..ef27c27f5 100644 --- a/dev/assets/chunks/VPLocalSearchBox.CY7JarLU.js +++ b/dev/assets/chunks/VPLocalSearchBox.zWtjorLS.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.O43fB7X6.js";import{u as ts,c as ss}from"./theme.D9kCPeTG.js";const ns={root:()=>Ot(()=>import("./@localSearchIndexroot.DHmD6Z0B.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.B_n_RGhH.js";import{u as ts,c as ss}from"./theme.D6URMT7s.js";const ns={root:()=>Ot(()=>import("./@localSearchIndexroot.BIJELIzt.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/framework.B_n_RGhH.js b/dev/assets/chunks/framework.B_n_RGhH.js new file mode 100644 index 000000000..4cba69dd9 --- /dev/null +++ b/dev/assets/chunks/framework.B_n_RGhH.js @@ -0,0 +1,18 @@ +/** +* @vue/shared v3.5.11 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Hs(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Z={},Tt=[],Ue=()=>{},zo=()=>!1,Zt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),$s=e=>e.startsWith("onUpdate:"),fe=Object.assign,Ds=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Jo=Object.prototype.hasOwnProperty,J=(e,t)=>Jo.call(e,t),K=Array.isArray,Ct=e=>Hn(e)==="[object Map]",fi=e=>Hn(e)==="[object Set]",q=e=>typeof e=="function",re=e=>typeof e=="string",st=e=>typeof e=="symbol",ne=e=>e!==null&&typeof e=="object",ui=e=>(ne(e)||q(e))&&q(e.then)&&q(e.catch),di=Object.prototype.toString,Hn=e=>di.call(e),Qo=e=>Hn(e).slice(8,-1),hi=e=>Hn(e)==="[object Object]",js=e=>re(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,At=Hs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),$n=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Zo=/-(\w)/g,Ie=$n(e=>e.replace(Zo,(t,n)=>n?n.toUpperCase():"")),el=/\B([A-Z])/g,rt=$n(e=>e.replace(el,"-$1").toLowerCase()),Dn=$n(e=>e.charAt(0).toUpperCase()+e.slice(1)),wn=$n(e=>e?`on${Dn(e)}`:""),tt=(e,t)=>!Object.is(e,t),Sn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Ss=e=>{const t=parseFloat(e);return isNaN(t)?e:t},tl=e=>{const t=re(e)?Number(e):NaN;return isNaN(t)?e:t};let dr;const gi=()=>dr||(dr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Vs(e){if(K(e)){const t={};for(let n=0;n{if(n){const s=n.split(sl);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Us(e){let t="";if(re(e))t=e;else if(K(e))for(let n=0;n!!(e&&e.__v_isRef===!0),cl=e=>re(e)?e:e==null?"":K(e)||ne(e)&&(e.toString===di||!q(e.toString))?yi(e)?cl(e.value):JSON.stringify(e,vi,2):String(e),vi=(e,t)=>yi(t)?vi(e,t.value):Ct(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[es(s,i)+" =>"]=r,n),{})}:fi(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>es(n))}:st(t)?es(t):ne(t)&&!K(t)&&!hi(t)?String(t):t,es=(e,t="")=>{var n;return st(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.11 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let _e;class al{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=_e,!t&&_e&&(this.index=(_e.scopes||(_e.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0)return;if(jt){let t=jt;for(jt=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Dt;){let t=Dt;for(Dt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Ei(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function xi(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Ws(s),ul(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Es(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ti(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ti(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Kt))return;e.globalVersion=Kt;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!Es(e)){e.flags&=-3;return}const n=te,s=Ne;te=e,Ne=!0;try{Ei(e);const r=e.fn(e._value);(t.version===0||tt(r,e._value))&&(e._value=r,t.version++)}catch(r){throw t.version++,r}finally{te=n,Ne=s,xi(e),e.flags&=-3}}function Ws(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s),!n.subs&&n.computed){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Ws(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function ul(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Ne=!0;const Ci=[];function it(){Ci.push(Ne),Ne=!1}function ot(){const e=Ci.pop();Ne=e===void 0?!0:e}function hr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=te;te=void 0;try{t()}finally{te=n}}}let Kt=0;class dl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class jn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(t){if(!te||!Ne||te===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==te)n=this.activeLink=new dl(te,this),te.deps?(n.prevDep=te.depsTail,te.depsTail.nextDep=n,te.depsTail=n):te.deps=te.depsTail=n,Ai(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=te.depsTail,n.nextDep=void 0,te.depsTail.nextDep=n,te.depsTail=n,te.deps===n&&(te.deps=s)}return n}trigger(t){this.version++,Kt++,this.notify(t)}notify(t){Bs();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{ks()}}}function Ai(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Ai(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Rn=new WeakMap,ht=Symbol(""),xs=Symbol(""),qt=Symbol("");function ve(e,t,n){if(Ne&&te){let s=Rn.get(e);s||Rn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new jn),r.map=s,r.key=n),r.track()}}function Ge(e,t,n,s,r,i){const o=Rn.get(e);if(!o){Kt++;return}const l=c=>{c&&c.trigger()};if(Bs(),t==="clear")o.forEach(l);else{const c=K(e),f=c&&js(n);if(c&&n==="length"){const a=Number(s);o.forEach((h,g)=>{(g==="length"||g===qt||!st(g)&&g>=a)&&l(h)})}else switch(n!==void 0&&l(o.get(n)),f&&l(o.get(qt)),t){case"add":c?f&&l(o.get("length")):(l(o.get(ht)),Ct(e)&&l(o.get(xs)));break;case"delete":c||(l(o.get(ht)),Ct(e)&&l(o.get(xs)));break;case"set":Ct(e)&&l(o.get(ht));break}}ks()}function hl(e,t){const n=Rn.get(e);return n&&n.get(t)}function _t(e){const t=z(e);return t===e?t:(ve(t,"iterate",qt),Pe(e)?t:t.map(me))}function Vn(e){return ve(e=z(e),"iterate",qt),e}const pl={__proto__:null,[Symbol.iterator](){return ns(this,Symbol.iterator,me)},concat(...e){return _t(this).concat(...e.map(t=>K(t)?_t(t):t))},entries(){return ns(this,"entries",e=>(e[1]=me(e[1]),e))},every(e,t){return We(this,"every",e,t,void 0,arguments)},filter(e,t){return We(this,"filter",e,t,n=>n.map(me),arguments)},find(e,t){return We(this,"find",e,t,me,arguments)},findIndex(e,t){return We(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return We(this,"findLast",e,t,me,arguments)},findLastIndex(e,t){return We(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return We(this,"forEach",e,t,void 0,arguments)},includes(...e){return ss(this,"includes",e)},indexOf(...e){return ss(this,"indexOf",e)},join(e){return _t(this).join(e)},lastIndexOf(...e){return ss(this,"lastIndexOf",e)},map(e,t){return We(this,"map",e,t,void 0,arguments)},pop(){return Ft(this,"pop")},push(...e){return Ft(this,"push",e)},reduce(e,...t){return pr(this,"reduce",e,t)},reduceRight(e,...t){return pr(this,"reduceRight",e,t)},shift(){return Ft(this,"shift")},some(e,t){return We(this,"some",e,t,void 0,arguments)},splice(...e){return Ft(this,"splice",e)},toReversed(){return _t(this).toReversed()},toSorted(e){return _t(this).toSorted(e)},toSpliced(...e){return _t(this).toSpliced(...e)},unshift(...e){return Ft(this,"unshift",e)},values(){return ns(this,"values",me)}};function ns(e,t,n){const s=Vn(e),r=s[t]();return s!==e&&!Pe(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const gl=Array.prototype;function We(e,t,n,s,r,i){const o=Vn(e),l=o!==e&&!Pe(e),c=o[t];if(c!==gl[t]){const h=c.apply(e,i);return l?me(h):h}let f=n;o!==e&&(l?f=function(h,g){return n.call(this,me(h),g,e)}:n.length>2&&(f=function(h,g){return n.call(this,h,g,e)}));const a=c.call(o,f,s);return l&&r?r(a):a}function pr(e,t,n,s){const r=Vn(e);let i=n;return r!==e&&(Pe(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,me(l),c,e)}),r[t](i,...s)}function ss(e,t,n){const s=z(e);ve(s,"iterate",qt);const r=s[t](...n);return(r===-1||r===!1)&&Ys(n[0])?(n[0]=z(n[0]),s[t](...n)):r}function Ft(e,t,n=[]){it(),Bs();const s=z(e)[t].apply(e,n);return ks(),ot(),s}const ml=Hs("__proto__,__v_isRef,__isVue"),Ri=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(st));function yl(e){st(e)||(e=String(e));const t=z(this);return ve(t,"has",e),t.hasOwnProperty(e)}class Oi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Ml:Li:i?Ii:Pi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=K(t);if(!r){let c;if(o&&(c=pl[n]))return c;if(n==="hasOwnProperty")return yl}const l=Reflect.get(t,n,ae(t)?t:s);return(st(n)?Ri.has(n):ml(n))||(r||ve(t,"get",n),i)?l:ae(l)?o&&js(n)?l:l.value:ne(l)?r?kn(l):Bn(l):l}}class Mi extends Oi{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=vt(i);if(!Pe(s)&&!vt(s)&&(i=z(i),s=z(s)),!K(t)&&ae(i)&&!ae(s))return c?!1:(i.value=s,!0)}const o=K(t)&&js(n)?Number(n)e,Un=e=>Reflect.getPrototypeOf(e);function cn(e,t,n=!1,s=!1){e=e.__v_raw;const r=z(e),i=z(t);n||(tt(t,i)&&ve(r,"get",t),ve(r,"get",i));const{has:o}=Un(r),l=s?Ks:n?Xs:me;if(o.call(r,t))return l(e.get(t));if(o.call(r,i))return l(e.get(i));e!==r&&e.get(t)}function an(e,t=!1){const n=this.__v_raw,s=z(n),r=z(e);return t||(tt(e,r)&&ve(s,"has",e),ve(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function fn(e,t=!1){return e=e.__v_raw,!t&&ve(z(e),"iterate",ht),Reflect.get(e,"size",e)}function gr(e,t=!1){!t&&!Pe(e)&&!vt(e)&&(e=z(e));const n=z(this);return Un(n).has.call(n,e)||(n.add(e),Ge(n,"add",e,e)),this}function mr(e,t,n=!1){!n&&!Pe(t)&&!vt(t)&&(t=z(t));const s=z(this),{has:r,get:i}=Un(s);let o=r.call(s,e);o||(e=z(e),o=r.call(s,e));const l=i.call(s,e);return s.set(e,t),o?tt(t,l)&&Ge(s,"set",e,t):Ge(s,"add",e,t),this}function yr(e){const t=z(this),{has:n,get:s}=Un(t);let r=n.call(t,e);r||(e=z(e),r=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return r&&Ge(t,"delete",e,void 0),i}function vr(){const e=z(this),t=e.size!==0,n=e.clear();return t&&Ge(e,"clear",void 0,void 0),n}function un(e,t){return function(s,r){const i=this,o=i.__v_raw,l=z(o),c=t?Ks:e?Xs:me;return!e&&ve(l,"iterate",ht),o.forEach((f,a)=>s.call(r,c(f),c(a),i))}}function dn(e,t,n){return function(...s){const r=this.__v_raw,i=z(r),o=Ct(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,f=r[e](...s),a=n?Ks:t?Xs:me;return!t&&ve(i,"iterate",c?xs:ht),{next(){const{value:h,done:g}=f.next();return g?{value:h,done:g}:{value:l?[a(h[0]),a(h[1])]:a(h),done:g}},[Symbol.iterator](){return this}}}}function Xe(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Sl(){const e={get(i){return cn(this,i)},get size(){return fn(this)},has:an,add:gr,set:mr,delete:yr,clear:vr,forEach:un(!1,!1)},t={get(i){return cn(this,i,!1,!0)},get size(){return fn(this)},has:an,add(i){return gr.call(this,i,!0)},set(i,o){return mr.call(this,i,o,!0)},delete:yr,clear:vr,forEach:un(!1,!0)},n={get(i){return cn(this,i,!0)},get size(){return fn(this,!0)},has(i){return an.call(this,i,!0)},add:Xe("add"),set:Xe("set"),delete:Xe("delete"),clear:Xe("clear"),forEach:un(!0,!1)},s={get(i){return cn(this,i,!0,!0)},get size(){return fn(this,!0)},has(i){return an.call(this,i,!0)},add:Xe("add"),set:Xe("set"),delete:Xe("delete"),clear:Xe("clear"),forEach:un(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=dn(i,!1,!1),n[i]=dn(i,!0,!1),t[i]=dn(i,!1,!0),s[i]=dn(i,!0,!0)}),[e,n,t,s]}const[El,xl,Tl,Cl]=Sl();function qs(e,t){const n=t?e?Cl:Tl:e?xl:El;return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(J(n,r)&&r in s?n:s,r,i)}const Al={get:qs(!1,!1)},Rl={get:qs(!1,!0)},Ol={get:qs(!0,!1)};const Pi=new WeakMap,Ii=new WeakMap,Li=new WeakMap,Ml=new WeakMap;function Pl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Il(e){return e.__v_skip||!Object.isExtensible(e)?0:Pl(Qo(e))}function Bn(e){return vt(e)?e:Gs(e,!1,bl,Al,Pi)}function Ll(e){return Gs(e,!1,wl,Rl,Ii)}function kn(e){return Gs(e,!0,_l,Ol,Li)}function Gs(e,t,n,s,r){if(!ne(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=Il(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function pt(e){return vt(e)?pt(e.__v_raw):!!(e&&e.__v_isReactive)}function vt(e){return!!(e&&e.__v_isReadonly)}function Pe(e){return!!(e&&e.__v_isShallow)}function Ys(e){return e?!!e.__v_raw:!1}function z(e){const t=e&&e.__v_raw;return t?z(t):e}function En(e){return!J(e,"__v_skip")&&Object.isExtensible(e)&&pi(e,"__v_skip",!0),e}const me=e=>ne(e)?Bn(e):e,Xs=e=>ne(e)?kn(e):e;function ae(e){return e?e.__v_isRef===!0:!1}function oe(e){return Ni(e,!1)}function zs(e){return Ni(e,!0)}function Ni(e,t){return ae(e)?e:new Nl(e,t)}class Nl{constructor(t,n){this.dep=new jn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:z(t),this._value=n?t:me(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Pe(t)||vt(t);t=s?t:z(t),tt(t,n)&&(this._rawValue=t,this._value=s?t:me(t),this.dep.trigger())}}function Fi(e){return ae(e)?e.value:e}const Fl={get:(e,t,n)=>t==="__v_raw"?e:Fi(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ae(r)&&!ae(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Hi(e){return pt(e)?e:new Proxy(e,Fl)}class Hl{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new jn,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function $l(e){return new Hl(e)}class Dl{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return hl(z(this._object),this._key)}}class jl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Vl(e,t,n){return ae(e)?e:q(e)?new jl(e):ne(e)&&arguments.length>1?Ul(e,t,n):oe(e)}function Ul(e,t,n){const s=e[t];return ae(s)?s:new Dl(e,t,n)}class Bl{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new jn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Kt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&te!==this)return Si(this,!0),!0}get value(){const t=this.dep.track();return Ti(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function kl(e,t,n=!1){let s,r;return q(e)?s=e:(s=e.get,r=e.set),new Bl(s,r,n)}const hn={},On=new WeakMap;let ut;function Wl(e,t=!1,n=ut){if(n){let s=On.get(n);s||On.set(n,s=[]),s.push(e)}}function Kl(e,t,n=Z){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,f=m=>r?m:Pe(m)||r===!1||r===0?qe(m,1):qe(m);let a,h,g,v,_=!1,S=!1;if(ae(e)?(h=()=>e.value,_=Pe(e)):pt(e)?(h=()=>f(e),_=!0):K(e)?(S=!0,_=e.some(m=>pt(m)||Pe(m)),h=()=>e.map(m=>{if(ae(m))return m.value;if(pt(m))return f(m);if(q(m))return c?c(m,2):m()})):q(e)?t?h=c?()=>c(e,2):e:h=()=>{if(g){it();try{g()}finally{ot()}}const m=ut;ut=a;try{return c?c(e,3,[v]):e(v)}finally{ut=m}}:h=Ue,t&&r){const m=h,M=r===!0?1/0:r;h=()=>qe(m(),M)}const U=bi(),N=()=>{a.stop(),U&&Ds(U.effects,a)};if(i&&t){const m=t;t=(...M)=>{m(...M),N()}}let B=S?new Array(e.length).fill(hn):hn;const p=m=>{if(!(!(a.flags&1)||!a.dirty&&!m))if(t){const M=a.run();if(r||_||(S?M.some((F,$)=>tt(F,B[$])):tt(M,B))){g&&g();const F=ut;ut=a;try{const $=[M,B===hn?void 0:S&&B[0]===hn?[]:B,v];c?c(t,3,$):t(...$),B=M}finally{ut=F}}}else a.run()};return l&&l(p),a=new _i(h),a.scheduler=o?()=>o(p,!1):p,v=m=>Wl(m,!1,a),g=a.onStop=()=>{const m=On.get(a);if(m){if(c)c(m,4);else for(const M of m)M();On.delete(a)}},t?s?p(!0):B=a.run():o?o(p.bind(null,!0),!0):a.run(),N.pause=a.pause.bind(a),N.resume=a.resume.bind(a),N.stop=N,N}function qe(e,t=1/0,n){if(t<=0||!ne(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,ae(e))qe(e.value,t,n);else if(K(e))for(let s=0;s{qe(s,t,n)});else if(hi(e)){for(const s in e)qe(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&qe(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.11 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function en(e,t,n,s){try{return s?e(...s):e()}catch(r){tn(r,t,n)}}function Fe(e,t,n,s){if(q(e)){const r=en(e,t,n,s);return r&&ui(r)&&r.catch(i=>{tn(i,t,n)}),r}if(K(e)){const r=[];for(let i=0;i>>1,r=we[s],i=Gt(r);i=Gt(n)?we.push(e):we.splice(Gl(t),0,e),e.flags|=1,Di()}}function Di(){Mn||(Mn=$i.then(ji))}function Yl(e){K(e)?Rt.push(...e):Qe&&e.id===-1?Qe.splice(St+1,0,e):e.flags&1||(Rt.push(e),e.flags|=1),Di()}function br(e,t,n=je+1){for(;nGt(n)-Gt(s));if(Rt.length=0,Qe){Qe.push(...t);return}for(Qe=t,St=0;Ste.id==null?e.flags&2?-1:1/0:e.id;function ji(e){try{for(je=0;je{s._d&&Lr(-1);const i=In(t);let o;try{o=e(...r)}finally{In(i),s._d&&Lr(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Pf(e,t){if(de===null)return e;const n=zn(de),s=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport,Vt=e=>e&&(e.disabled||e.disabled===""),zl=e=>e&&(e.defer||e.defer===""),_r=e=>typeof SVGElement<"u"&&e instanceof SVGElement,wr=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Ts=(e,t)=>{const n=e&&e.to;return re(n)?t?t(n):null:n},Jl={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,i,o,l,c,f){const{mc:a,pc:h,pbc:g,o:{insert:v,querySelector:_,createText:S,createComment:U}}=f,N=Vt(t.props);let{shapeFlag:B,children:p,dynamicChildren:m}=t;if(e==null){const M=t.el=S(""),F=t.anchor=S("");v(M,n,s),v(F,n,s);const $=(R,b)=>{B&16&&(r&&r.isCE&&(r.ce._teleportTarget=R),a(p,R,b,r,i,o,l,c))},j=()=>{const R=t.target=Ts(t.props,_),b=ki(R,t,S,v);R&&(o!=="svg"&&_r(R)?o="svg":o!=="mathml"&&wr(R)&&(o="mathml"),N||($(R,b),xn(t)))};N&&($(n,F),xn(t)),zl(t.props)?Ee(j,i):j()}else{t.el=e.el,t.targetStart=e.targetStart;const M=t.anchor=e.anchor,F=t.target=e.target,$=t.targetAnchor=e.targetAnchor,j=Vt(e.props),R=j?n:F,b=j?M:$;if(o==="svg"||_r(F)?o="svg":(o==="mathml"||wr(F))&&(o="mathml"),m?(g(e.dynamicChildren,m,R,r,i,o,l),nr(e,t,!0)):c||h(e,t,R,b,r,i,o,l,!1),N)j?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):pn(t,n,M,f,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const L=t.target=Ts(t.props,_);L&&pn(t,L,null,f,0)}else j&&pn(t,F,$,f,1);xn(t)}},remove(e,t,n,{um:s,o:{remove:r}},i){const{shapeFlag:o,children:l,anchor:c,targetStart:f,targetAnchor:a,target:h,props:g}=e;if(h&&(r(f),r(a)),i&&r(c),o&16){const v=i||!Vt(g);for(let _=0;_{e.isMounted=!0}),zi(()=>{e.isUnmounting=!0}),e}const Re=[Function,Array],Wi={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Re,onEnter:Re,onAfterEnter:Re,onEnterCancelled:Re,onBeforeLeave:Re,onLeave:Re,onAfterLeave:Re,onLeaveCancelled:Re,onBeforeAppear:Re,onAppear:Re,onAfterAppear:Re,onAppearCancelled:Re},Ki=e=>{const t=e.subTree;return t.component?Ki(t.component):t},ec={name:"BaseTransition",props:Wi,setup(e,{slots:t}){const n=Xn(),s=Zl();return()=>{const r=t.default&&Yi(t.default(),!0);if(!r||!r.length)return;const i=qi(r),o=z(e),{mode:l}=o;if(s.isLeaving)return rs(i);const c=Sr(i);if(!c)return rs(i);let f=Cs(c,o,s,n,g=>f=g);c.type!==ye&&Yt(c,f);const a=n.subTree,h=a&&Sr(a);if(h&&h.type!==ye&&!dt(c,h)&&Ki(n).type!==ye){const g=Cs(h,o,s,n);if(Yt(h,g),l==="out-in"&&c.type!==ye)return s.isLeaving=!0,g.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete g.afterLeave},rs(i);l==="in-out"&&c.type!==ye&&(g.delayLeave=(v,_,S)=>{const U=Gi(s,h);U[String(h.key)]=h,v[Ze]=()=>{_(),v[Ze]=void 0,delete f.delayedLeave},f.delayedLeave=S})}return i}}};function qi(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==ye){t=n;break}}return t}const tc=ec;function Gi(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Cs(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:f,onAfterEnter:a,onEnterCancelled:h,onBeforeLeave:g,onLeave:v,onAfterLeave:_,onLeaveCancelled:S,onBeforeAppear:U,onAppear:N,onAfterAppear:B,onAppearCancelled:p}=t,m=String(e.key),M=Gi(n,e),F=(R,b)=>{R&&Fe(R,s,9,b)},$=(R,b)=>{const L=b[1];F(R,b),K(R)?R.every(x=>x.length<=1)&&L():R.length<=1&&L()},j={mode:o,persisted:l,beforeEnter(R){let b=c;if(!n.isMounted)if(i)b=U||c;else return;R[Ze]&&R[Ze](!0);const L=M[m];L&&dt(e,L)&&L.el[Ze]&&L.el[Ze](),F(b,[R])},enter(R){let b=f,L=a,x=h;if(!n.isMounted)if(i)b=N||f,L=B||a,x=p||h;else return;let W=!1;const se=R[gn]=ce=>{W||(W=!0,ce?F(x,[R]):F(L,[R]),j.delayedLeave&&j.delayedLeave(),R[gn]=void 0)};b?$(b,[R,se]):se()},leave(R,b){const L=String(e.key);if(R[gn]&&R[gn](!0),n.isUnmounting)return b();F(g,[R]);let x=!1;const W=R[Ze]=se=>{x||(x=!0,b(),se?F(S,[R]):F(_,[R]),R[Ze]=void 0,M[L]===e&&delete M[L])};M[L]=e,v?$(v,[R,W]):W()},clone(R){const b=Cs(R,t,n,s,r);return r&&r(b),b}};return j}function rs(e){if(nn(e))return e=nt(e),e.children=null,e}function Sr(e){if(!nn(e))return Bi(e.type)&&e.children?qi(e.children):e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&q(n.default))return n.default()}}function Yt(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Yt(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Yi(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;iLn(_,t&&(K(t)?t[S]:t),n,s,r));return}if(gt(s)&&!r)return;const i=s.shapeFlag&4?zn(s.component):s.el,o=r?null:i,{i:l,r:c}=e,f=t&&t.r,a=l.refs===Z?l.refs={}:l.refs,h=l.setupState,g=z(h),v=h===Z?()=>!1:_=>J(g,_);if(f!=null&&f!==c&&(re(f)?(a[f]=null,v(f)&&(h[f]=null)):ae(f)&&(f.value=null)),q(c))en(c,l,12,[o,a]);else{const _=re(c),S=ae(c);if(_||S){const U=()=>{if(e.f){const N=_?v(c)?h[c]:a[c]:c.value;r?K(N)&&Ds(N,i):K(N)?N.includes(i)||N.push(i):_?(a[c]=[i],v(c)&&(h[c]=a[c])):(c.value=[i],e.k&&(a[e.k]=c.value))}else _?(a[c]=o,v(c)&&(h[c]=o)):S&&(c.value=o,e.k&&(a[e.k]=o))};o?(U.id=-1,Ee(U,n)):U()}}}let Er=!1;const wt=()=>{Er||(console.error("Hydration completed but contains mismatches."),Er=!0)},nc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",sc=e=>e.namespaceURI.includes("MathML"),mn=e=>{if(e.nodeType===1){if(nc(e))return"svg";if(sc(e))return"mathml"}},xt=e=>e.nodeType===8;function rc(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:f}}=e,a=(p,m)=>{if(!m.hasChildNodes()){n(null,p,m),Pn(),m._vnode=p;return}h(m.firstChild,p,null,null,null),Pn(),m._vnode=p},h=(p,m,M,F,$,j=!1)=>{j=j||!!m.dynamicChildren;const R=xt(p)&&p.data==="[",b=()=>S(p,m,M,F,$,R),{type:L,ref:x,shapeFlag:W,patchFlag:se}=m;let ce=p.nodeType;m.el=p,se===-2&&(j=!1,m.dynamicChildren=null);let V=null;switch(L){case mt:ce!==3?m.children===""?(c(m.el=r(""),o(p),p),V=p):V=b():(p.data!==m.children&&(wt(),p.data=m.children),V=i(p));break;case ye:B(p)?(V=i(p),N(m.el=p.content.firstChild,p,M)):ce!==8||R?V=b():V=i(p);break;case Bt:if(R&&(p=i(p),ce=p.nodeType),ce===1||ce===3){V=p;const Y=!m.children.length;for(let D=0;D{j=j||!!m.dynamicChildren;const{type:R,props:b,patchFlag:L,shapeFlag:x,dirs:W,transition:se}=m,ce=R==="input"||R==="option";if(ce||L!==-1){W&&Ve(m,null,M,"created");let V=!1;if(B(p)){V=po(F,se)&&M&&M.vnode.props&&M.vnode.props.appear;const D=p.content.firstChild;V&&se.beforeEnter(D),N(D,p,M),m.el=p=D}if(x&16&&!(b&&(b.innerHTML||b.textContent))){let D=v(p.firstChild,m,p,M,F,$,j);for(;D;){yn(p,1)||wt();const he=D;D=D.nextSibling,l(he)}}else if(x&8){let D=m.children;D[0]===` +`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&(D=D.slice(1)),p.textContent!==D&&(yn(p,0)||wt(),p.textContent=m.children)}if(b){if(ce||!j||L&48){const D=p.tagName.includes("-");for(const he in b)(ce&&(he.endsWith("value")||he==="indeterminate")||Zt(he)&&!At(he)||he[0]==="."||D)&&s(p,he,null,b[he],void 0,M)}else if(b.onClick)s(p,"onClick",null,b.onClick,void 0,M);else if(L&4&&pt(b.style))for(const D in b.style)b.style[D]}let Y;(Y=b&&b.onVnodeBeforeMount)&&Oe(Y,M,m),W&&Ve(m,null,M,"beforeMount"),((Y=b&&b.onVnodeMounted)||W||V)&&bo(()=>{Y&&Oe(Y,M,m),V&&se.enter(p),W&&Ve(m,null,M,"mounted")},F)}return p.nextSibling},v=(p,m,M,F,$,j,R)=>{R=R||!!m.dynamicChildren;const b=m.children,L=b.length;for(let x=0;x{const{slotScopeIds:R}=m;R&&($=$?$.concat(R):R);const b=o(p),L=v(i(p),m,b,M,F,$,j);return L&&xt(L)&&L.data==="]"?i(m.anchor=L):(wt(),c(m.anchor=f("]"),b,L),L)},S=(p,m,M,F,$,j)=>{if(yn(p.parentElement,1)||wt(),m.el=null,j){const L=U(p);for(;;){const x=i(p);if(x&&x!==L)l(x);else break}}const R=i(p),b=o(p);return l(p),n(null,m,b,R,M,F,mn(b),$),R},U=(p,m="[",M="]")=>{let F=0;for(;p;)if(p=i(p),p&&xt(p)&&(p.data===m&&F++,p.data===M)){if(F===0)return i(p);F--}return p},N=(p,m,M)=>{const F=m.parentNode;F&&F.replaceChild(p,m);let $=M;for(;$;)$.vnode.el===m&&($.vnode.el=$.subTree.el=p),$=$.parent},B=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[a,h]}const xr="data-allow-mismatch",ic={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function yn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(xr);)e=e.parentElement;const n=e&&e.getAttribute(xr);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:n.split(",").includes(ic[t])}}function oc(e,t){if(xt(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(xt(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const gt=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Lf(e){q(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:i,timeout:o,suspensible:l=!0,onError:c}=e;let f=null,a,h=0;const g=()=>(h++,f=null,v()),v=()=>{let _;return f||(_=f=t().catch(S=>{if(S=S instanceof Error?S:new Error(String(S)),c)return new Promise((U,N)=>{c(S,()=>U(g()),()=>N(S),h+1)});throw S}).then(S=>_!==f&&f?f:(S&&(S.__esModule||S[Symbol.toStringTag]==="Module")&&(S=S.default),a=S,S)))};return Qs({name:"AsyncComponentWrapper",__asyncLoader:v,__asyncHydrate(_,S,U){const N=i?()=>{const B=i(U,p=>oc(_,p));B&&(S.bum||(S.bum=[])).push(B)}:U;a?N():v().then(()=>!S.isUnmounted&&N())},get __asyncResolved(){return a},setup(){const _=ue;if(Zs(_),a)return()=>is(a,_);const S=p=>{f=null,tn(p,_,13,!s)};if(l&&_.suspense||rn)return v().then(p=>()=>is(p,_)).catch(p=>(S(p),()=>s?le(s,{error:p}):null));const U=oe(!1),N=oe(),B=oe(!!r);return r&&setTimeout(()=>{B.value=!1},r),o!=null&&setTimeout(()=>{if(!U.value&&!N.value){const p=new Error(`Async component timed out after ${o}ms.`);S(p),N.value=p}},o),v().then(()=>{U.value=!0,_.parent&&nn(_.parent.vnode)&&_.parent.update()}).catch(p=>{S(p),N.value=p}),()=>{if(U.value&&a)return is(a,_);if(N.value&&s)return le(s,{error:N.value});if(n&&!B.value)return le(n)}}})}function is(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=le(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const nn=e=>e.type.__isKeepAlive;function lc(e,t){Xi(e,"a",t)}function cc(e,t){Xi(e,"da",t)}function Xi(e,t,n=ue){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Kn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)nn(r.parent.vnode)&&ac(s,t,n,r),r=r.parent}}function ac(e,t,n,s){const r=Kn(t,e,s,!0);qn(()=>{Ds(s[t],r)},n)}function Kn(e,t,n=ue,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{it();const l=sn(n),c=Fe(t,n,e,o);return l(),ot(),c});return s?r.unshift(i):r.push(i),i}}const Ye=e=>(t,n=ue)=>{(!rn||e==="sp")&&Kn(e,(...s)=>t(...s),n)},fc=Ye("bm"),It=Ye("m"),uc=Ye("bu"),dc=Ye("u"),zi=Ye("bum"),qn=Ye("um"),hc=Ye("sp"),pc=Ye("rtg"),gc=Ye("rtc");function mc(e,t=ue){Kn("ec",e,t)}const Ji="components";function Nf(e,t){return Zi(Ji,e,!0,t)||e}const Qi=Symbol.for("v-ndc");function Ff(e){return re(e)?Zi(Ji,e,!1)||e:e||Qi}function Zi(e,t,n=!0,s=!1){const r=de||ue;if(r){const i=r.type;{const l=ta(i,!1);if(l&&(l===t||l===Ie(t)||l===Dn(Ie(t))))return i}const o=Tr(r[e]||i[e],t)||Tr(r.appContext[e],t);return!o&&s?i:o}}function Tr(e,t){return e&&(e[t]||e[Ie(t)]||e[Dn(Ie(t))])}function Hf(e,t,n,s){let r;const i=n,o=K(e);if(o||re(e)){const l=o&&pt(e);let c=!1;l&&(c=!Pe(e),e=Vn(e)),r=new Array(e.length);for(let f=0,a=e.length;ft(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,f=l.length;czt(t)?!(t.type===ye||t.type===Se&&!eo(t.children)):!0)?e:null}function Df(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:wn(s)]=e[s];return n}const As=e=>e?xo(e)?zn(e):As(e.parent):null,Ut=fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>As(e.parent),$root:e=>As(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>er(e),$forceUpdate:e=>e.f||(e.f=()=>{Js(e.update)}),$nextTick:e=>e.n||(e.n=Wn.bind(e.proxy)),$watch:e=>Dc.bind(e)}),os=(e,t)=>e!==Z&&!e.__isScriptSetup&&J(e,t),yc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let f;if(t[0]!=="$"){const v=o[t];if(v!==void 0)switch(v){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(os(s,t))return o[t]=1,s[t];if(r!==Z&&J(r,t))return o[t]=2,r[t];if((f=e.propsOptions[0])&&J(f,t))return o[t]=3,i[t];if(n!==Z&&J(n,t))return o[t]=4,n[t];Rs&&(o[t]=0)}}const a=Ut[t];let h,g;if(a)return t==="$attrs"&&ve(e.attrs,"get",""),a(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==Z&&J(n,t))return o[t]=4,n[t];if(g=c.config.globalProperties,J(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return os(r,t)?(r[t]=n,!0):s!==Z&&J(s,t)?(s[t]=n,!0):J(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==Z&&J(e,o)||os(t,o)||(l=i[0])&&J(l,o)||J(s,o)||J(Ut,o)||J(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:J(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function jf(){return vc().slots}function vc(){const e=Xn();return e.setupContext||(e.setupContext=Co(e))}function Cr(e){return K(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Rs=!0;function bc(e){const t=er(e),n=e.proxy,s=e.ctx;Rs=!1,t.beforeCreate&&Ar(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:f,created:a,beforeMount:h,mounted:g,beforeUpdate:v,updated:_,activated:S,deactivated:U,beforeDestroy:N,beforeUnmount:B,destroyed:p,unmounted:m,render:M,renderTracked:F,renderTriggered:$,errorCaptured:j,serverPrefetch:R,expose:b,inheritAttrs:L,components:x,directives:W,filters:se}=t;if(f&&_c(f,s,null),o)for(const Y in o){const D=o[Y];q(D)&&(s[Y]=D.bind(n))}if(r){const Y=r.call(n,n);ne(Y)&&(e.data=Bn(Y))}if(Rs=!0,i)for(const Y in i){const D=i[Y],he=q(D)?D.bind(n,n):q(D.get)?D.get.bind(n,n):Ue,on=!q(D)&&q(D.set)?D.set.bind(n):Ue,lt=ie({get:he,set:on});Object.defineProperty(s,Y,{enumerable:!0,configurable:!0,get:()=>lt.value,set:$e=>lt.value=$e})}if(l)for(const Y in l)to(l[Y],s,n,Y);if(c){const Y=q(c)?c.call(n):c;Reflect.ownKeys(Y).forEach(D=>{Cc(D,Y[D])})}a&&Ar(a,e,"c");function V(Y,D){K(D)?D.forEach(he=>Y(he.bind(n))):D&&Y(D.bind(n))}if(V(fc,h),V(It,g),V(uc,v),V(dc,_),V(lc,S),V(cc,U),V(mc,j),V(gc,F),V(pc,$),V(zi,B),V(qn,m),V(hc,R),K(b))if(b.length){const Y=e.exposed||(e.exposed={});b.forEach(D=>{Object.defineProperty(Y,D,{get:()=>n[D],set:he=>n[D]=he})})}else e.exposed||(e.exposed={});M&&e.render===Ue&&(e.render=M),L!=null&&(e.inheritAttrs=L),x&&(e.components=x),W&&(e.directives=W),R&&Zs(e)}function _c(e,t,n=Ue){K(e)&&(e=Os(e));for(const s in e){const r=e[s];let i;ne(r)?"default"in r?i=Mt(r.from||s,r.default,!0):i=Mt(r.from||s):i=Mt(r),ae(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Ar(e,t,n){Fe(K(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function to(e,t,n,s){let r=s.includes(".")?mo(n,s):()=>n[s];if(re(e)){const i=t[e];q(i)&&Be(r,i)}else if(q(e))Be(r,e.bind(n));else if(ne(e))if(K(e))e.forEach(i=>to(i,t,n,s));else{const i=q(e.handler)?e.handler.bind(n):t[e.handler];q(i)&&Be(r,i,e)}}function er(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>Nn(c,f,o,!0)),Nn(c,t,o)),ne(t)&&i.set(t,c),c}function Nn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Nn(e,i,n,!0),r&&r.forEach(o=>Nn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=wc[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const wc={data:Rr,props:Or,emits:Or,methods:$t,computed:$t,beforeCreate:be,created:be,beforeMount:be,mounted:be,beforeUpdate:be,updated:be,beforeDestroy:be,beforeUnmount:be,destroyed:be,unmounted:be,activated:be,deactivated:be,errorCaptured:be,serverPrefetch:be,components:$t,directives:$t,watch:Ec,provide:Rr,inject:Sc};function Rr(e,t){return t?e?function(){return fe(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function Sc(e,t){return $t(Os(e),Os(t))}function Os(e){if(K(e)){const t={};for(let n=0;n1)return n&&q(t)?t.call(s&&s.proxy):t}}const so={},ro=()=>Object.create(so),io=e=>Object.getPrototypeOf(e)===so;function Ac(e,t,n,s=!1){const r={},i=ro();e.propsDefaults=Object.create(null),oo(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Ll(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Rc(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=z(r),[c]=e.propsOptions;let f=!1;if((s||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[g,v]=lo(h,t,!0);fe(o,g),v&&l.push(...v)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return ne(e)&&s.set(e,Tt),Tt;if(K(i))for(let a=0;ae[0]==="_"||e==="$stable",tr=e=>K(e)?e.map(Me):[Me(e)],Mc=(e,t,n)=>{if(t._n)return t;const s=Xl((...r)=>tr(t(...r)),n);return s._c=!1,s},ao=(e,t,n)=>{const s=e._ctx;for(const r in e){if(co(r))continue;const i=e[r];if(q(i))t[r]=Mc(r,i,s);else if(i!=null){const o=tr(i);t[r]=()=>o}}},fo=(e,t)=>{const n=tr(t);e.slots.default=()=>n},uo=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},Pc=(e,t,n)=>{const s=e.slots=ro();if(e.vnode.shapeFlag&32){const r=t._;r?(uo(s,t,n),n&&pi(s,"_",r,!0)):ao(t,s)}else t&&fo(e,t)},Ic=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=Z;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:uo(r,t,n):(i=!t.$stable,ao(t,r)),o=t}else t&&(fo(e,t),o={default:1});if(i)for(const l in r)!co(l)&&o[l]==null&&delete r[l]},Ee=bo;function Lc(e){return ho(e)}function Nc(e){return ho(e,rc)}function ho(e,t){const n=gi();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:a,parentNode:h,nextSibling:g,setScopeId:v=Ue,insertStaticContent:_}=e,S=(u,d,y,T=null,w=null,E=null,P=void 0,O=null,A=!!d.dynamicChildren)=>{if(u===d)return;u&&!dt(u,d)&&(T=ln(u),$e(u,w,E,!0),u=null),d.patchFlag===-2&&(A=!1,d.dynamicChildren=null);const{type:C,ref:k,shapeFlag:I}=d;switch(C){case mt:U(u,d,y,T);break;case ye:N(u,d,y,T);break;case Bt:u==null&&B(d,y,T,P);break;case Se:x(u,d,y,T,w,E,P,O,A);break;default:I&1?M(u,d,y,T,w,E,P,O,A):I&6?W(u,d,y,T,w,E,P,O,A):(I&64||I&128)&&C.process(u,d,y,T,w,E,P,O,A,bt)}k!=null&&w&&Ln(k,u&&u.ref,E,d||u,!d)},U=(u,d,y,T)=>{if(u==null)s(d.el=l(d.children),y,T);else{const w=d.el=u.el;d.children!==u.children&&f(w,d.children)}},N=(u,d,y,T)=>{u==null?s(d.el=c(d.children||""),y,T):d.el=u.el},B=(u,d,y,T)=>{[u.el,u.anchor]=_(u.children,d,y,T,u.el,u.anchor)},p=({el:u,anchor:d},y,T)=>{let w;for(;u&&u!==d;)w=g(u),s(u,y,T),u=w;s(d,y,T)},m=({el:u,anchor:d})=>{let y;for(;u&&u!==d;)y=g(u),r(u),u=y;r(d)},M=(u,d,y,T,w,E,P,O,A)=>{d.type==="svg"?P="svg":d.type==="math"&&(P="mathml"),u==null?F(d,y,T,w,E,P,O,A):R(u,d,w,E,P,O,A)},F=(u,d,y,T,w,E,P,O)=>{let A,C;const{props:k,shapeFlag:I,transition:H,dirs:G}=u;if(A=u.el=o(u.type,E,k&&k.is,k),I&8?a(A,u.children):I&16&&j(u.children,A,null,T,w,ls(u,E),P,O),G&&Ve(u,null,T,"created"),$(A,u,u.scopeId,P,T),k){for(const ee in k)ee!=="value"&&!At(ee)&&i(A,ee,null,k[ee],E,T);"value"in k&&i(A,"value",null,k.value,E),(C=k.onVnodeBeforeMount)&&Oe(C,T,u)}G&&Ve(u,null,T,"beforeMount");const X=po(w,H);X&&H.beforeEnter(A),s(A,d,y),((C=k&&k.onVnodeMounted)||X||G)&&Ee(()=>{C&&Oe(C,T,u),X&&H.enter(A),G&&Ve(u,null,T,"mounted")},w)},$=(u,d,y,T,w)=>{if(y&&v(u,y),T)for(let E=0;E{for(let C=A;C{const O=d.el=u.el;let{patchFlag:A,dynamicChildren:C,dirs:k}=d;A|=u.patchFlag&16;const I=u.props||Z,H=d.props||Z;let G;if(y&&ct(y,!1),(G=H.onVnodeBeforeUpdate)&&Oe(G,y,d,u),k&&Ve(d,u,y,"beforeUpdate"),y&&ct(y,!0),(I.innerHTML&&H.innerHTML==null||I.textContent&&H.textContent==null)&&a(O,""),C?b(u.dynamicChildren,C,O,y,T,ls(d,w),E):P||D(u,d,O,null,y,T,ls(d,w),E,!1),A>0){if(A&16)L(O,I,H,y,w);else if(A&2&&I.class!==H.class&&i(O,"class",null,H.class,w),A&4&&i(O,"style",I.style,H.style,w),A&8){const X=d.dynamicProps;for(let ee=0;ee{G&&Oe(G,y,d,u),k&&Ve(d,u,y,"updated")},T)},b=(u,d,y,T,w,E,P)=>{for(let O=0;O{if(d!==y){if(d!==Z)for(const E in d)!At(E)&&!(E in y)&&i(u,E,d[E],null,w,T);for(const E in y){if(At(E))continue;const P=y[E],O=d[E];P!==O&&E!=="value"&&i(u,E,O,P,w,T)}"value"in y&&i(u,"value",d.value,y.value,w)}},x=(u,d,y,T,w,E,P,O,A)=>{const C=d.el=u?u.el:l(""),k=d.anchor=u?u.anchor:l("");let{patchFlag:I,dynamicChildren:H,slotScopeIds:G}=d;G&&(O=O?O.concat(G):G),u==null?(s(C,y,T),s(k,y,T),j(d.children||[],y,k,w,E,P,O,A)):I>0&&I&64&&H&&u.dynamicChildren?(b(u.dynamicChildren,H,y,w,E,P,O),(d.key!=null||w&&d===w.subTree)&&nr(u,d,!0)):D(u,d,y,k,w,E,P,O,A)},W=(u,d,y,T,w,E,P,O,A)=>{d.slotScopeIds=O,u==null?d.shapeFlag&512?w.ctx.activate(d,y,T,P,A):se(d,y,T,w,E,P,A):ce(u,d,A)},se=(u,d,y,T,w,E,P)=>{const O=u.component=Jc(u,T,w);if(nn(u)&&(O.ctx.renderer=bt),Qc(O,!1,P),O.asyncDep){if(w&&w.registerDep(O,V,P),!u.el){const A=O.subTree=le(ye);N(null,A,d,y)}}else V(O,u,d,y,w,E,P)},ce=(u,d,y)=>{const T=d.component=u.component;if(kc(u,d,y))if(T.asyncDep&&!T.asyncResolved){Y(T,d,y);return}else T.next=d,T.update();else d.el=u.el,T.vnode=d},V=(u,d,y,T,w,E,P)=>{const O=()=>{if(u.isMounted){let{next:I,bu:H,u:G,parent:X,vnode:ee}=u;{const Te=go(u);if(Te){I&&(I.el=ee.el,Y(u,I,P)),Te.asyncDep.then(()=>{u.isUnmounted||O()});return}}let Q=I,xe;ct(u,!1),I?(I.el=ee.el,Y(u,I,P)):I=ee,H&&Sn(H),(xe=I.props&&I.props.onVnodeBeforeUpdate)&&Oe(xe,X,I,ee),ct(u,!0);const pe=cs(u),Le=u.subTree;u.subTree=pe,S(Le,pe,h(Le.el),ln(Le),u,w,E),I.el=pe.el,Q===null&&Wc(u,pe.el),G&&Ee(G,w),(xe=I.props&&I.props.onVnodeUpdated)&&Ee(()=>Oe(xe,X,I,ee),w)}else{let I;const{el:H,props:G}=d,{bm:X,m:ee,parent:Q,root:xe,type:pe}=u,Le=gt(d);if(ct(u,!1),X&&Sn(X),!Le&&(I=G&&G.onVnodeBeforeMount)&&Oe(I,Q,d),ct(u,!0),H&&Zn){const Te=()=>{u.subTree=cs(u),Zn(H,u.subTree,u,w,null)};Le&&pe.__asyncHydrate?pe.__asyncHydrate(H,u,Te):Te()}else{xe.ce&&xe.ce._injectChildStyle(pe);const Te=u.subTree=cs(u);S(null,Te,y,T,u,w,E),d.el=Te.el}if(ee&&Ee(ee,w),!Le&&(I=G&&G.onVnodeMounted)){const Te=d;Ee(()=>Oe(I,Q,Te),w)}(d.shapeFlag&256||Q&>(Q.vnode)&&Q.vnode.shapeFlag&256)&&u.a&&Ee(u.a,w),u.isMounted=!0,d=y=T=null}};u.scope.on();const A=u.effect=new _i(O);u.scope.off();const C=u.update=A.run.bind(A),k=u.job=A.runIfDirty.bind(A);k.i=u,k.id=u.uid,A.scheduler=()=>Js(k),ct(u,!0),C()},Y=(u,d,y)=>{d.component=u;const T=u.vnode.props;u.vnode=d,u.next=null,Rc(u,d.props,T,y),Ic(u,d.children,y),it(),br(u),ot()},D=(u,d,y,T,w,E,P,O,A=!1)=>{const C=u&&u.children,k=u?u.shapeFlag:0,I=d.children,{patchFlag:H,shapeFlag:G}=d;if(H>0){if(H&128){on(C,I,y,T,w,E,P,O,A);return}else if(H&256){he(C,I,y,T,w,E,P,O,A);return}}G&8?(k&16&&Lt(C,w,E),I!==C&&a(y,I)):k&16?G&16?on(C,I,y,T,w,E,P,O,A):Lt(C,w,E,!0):(k&8&&a(y,""),G&16&&j(I,y,T,w,E,P,O,A))},he=(u,d,y,T,w,E,P,O,A)=>{u=u||Tt,d=d||Tt;const C=u.length,k=d.length,I=Math.min(C,k);let H;for(H=0;Hk?Lt(u,w,E,!0,!1,I):j(d,y,T,w,E,P,O,A,I)},on=(u,d,y,T,w,E,P,O,A)=>{let C=0;const k=d.length;let I=u.length-1,H=k-1;for(;C<=I&&C<=H;){const G=u[C],X=d[C]=A?et(d[C]):Me(d[C]);if(dt(G,X))S(G,X,y,null,w,E,P,O,A);else break;C++}for(;C<=I&&C<=H;){const G=u[I],X=d[H]=A?et(d[H]):Me(d[H]);if(dt(G,X))S(G,X,y,null,w,E,P,O,A);else break;I--,H--}if(C>I){if(C<=H){const G=H+1,X=GH)for(;C<=I;)$e(u[C],w,E,!0),C++;else{const G=C,X=C,ee=new Map;for(C=X;C<=H;C++){const Ce=d[C]=A?et(d[C]):Me(d[C]);Ce.key!=null&&ee.set(Ce.key,C)}let Q,xe=0;const pe=H-X+1;let Le=!1,Te=0;const Nt=new Array(pe);for(C=0;C=pe){$e(Ce,w,E,!0);continue}let De;if(Ce.key!=null)De=ee.get(Ce.key);else for(Q=X;Q<=H;Q++)if(Nt[Q-X]===0&&dt(Ce,d[Q])){De=Q;break}De===void 0?$e(Ce,w,E,!0):(Nt[De-X]=C+1,De>=Te?Te=De:Le=!0,S(Ce,d[De],y,null,w,E,P,O,A),xe++)}const fr=Le?Fc(Nt):Tt;for(Q=fr.length-1,C=pe-1;C>=0;C--){const Ce=X+C,De=d[Ce],ur=Ce+1{const{el:E,type:P,transition:O,children:A,shapeFlag:C}=u;if(C&6){lt(u.component.subTree,d,y,T);return}if(C&128){u.suspense.move(d,y,T);return}if(C&64){P.move(u,d,y,bt);return}if(P===Se){s(E,d,y);for(let I=0;IO.enter(E),w);else{const{leave:I,delayLeave:H,afterLeave:G}=O,X=()=>s(E,d,y),ee=()=>{I(E,()=>{X(),G&&G()})};H?H(E,X,ee):ee()}else s(E,d,y)},$e=(u,d,y,T=!1,w=!1)=>{const{type:E,props:P,ref:O,children:A,dynamicChildren:C,shapeFlag:k,patchFlag:I,dirs:H,cacheIndex:G}=u;if(I===-2&&(w=!1),O!=null&&Ln(O,null,y,u,!0),G!=null&&(d.renderCache[G]=void 0),k&256){d.ctx.deactivate(u);return}const X=k&1&&H,ee=!gt(u);let Q;if(ee&&(Q=P&&P.onVnodeBeforeUnmount)&&Oe(Q,d,u),k&6)Xo(u.component,y,T);else{if(k&128){u.suspense.unmount(y,T);return}X&&Ve(u,null,d,"beforeUnmount"),k&64?u.type.remove(u,d,y,bt,T):C&&!C.hasOnce&&(E!==Se||I>0&&I&64)?Lt(C,d,y,!1,!0):(E===Se&&I&384||!w&&k&16)&&Lt(A,d,y),T&&cr(u)}(ee&&(Q=P&&P.onVnodeUnmounted)||X)&&Ee(()=>{Q&&Oe(Q,d,u),X&&Ve(u,null,d,"unmounted")},y)},cr=u=>{const{type:d,el:y,anchor:T,transition:w}=u;if(d===Se){Yo(y,T);return}if(d===Bt){m(u);return}const E=()=>{r(y),w&&!w.persisted&&w.afterLeave&&w.afterLeave()};if(u.shapeFlag&1&&w&&!w.persisted){const{leave:P,delayLeave:O}=w,A=()=>P(y,E);O?O(u.el,E,A):A()}else E()},Yo=(u,d)=>{let y;for(;u!==d;)y=g(u),r(u),u=y;r(d)},Xo=(u,d,y)=>{const{bum:T,scope:w,job:E,subTree:P,um:O,m:A,a:C}=u;Pr(A),Pr(C),T&&Sn(T),w.stop(),E&&(E.flags|=8,$e(P,u,d,y)),O&&Ee(O,d),Ee(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},Lt=(u,d,y,T=!1,w=!1,E=0)=>{for(let P=E;P{if(u.shapeFlag&6)return ln(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=g(u.anchor||u.el),y=d&&d[Ui];return y?g(y):d};let Jn=!1;const ar=(u,d,y)=>{u==null?d._vnode&&$e(d._vnode,null,null,!0):S(d._vnode||null,u,d,null,null,null,y),d._vnode=u,Jn||(Jn=!0,br(),Pn(),Jn=!1)},bt={p:S,um:$e,m:lt,r:cr,mt:se,mc:j,pc:D,pbc:b,n:ln,o:e};let Qn,Zn;return t&&([Qn,Zn]=t(bt)),{render:ar,hydrate:Qn,createApp:Tc(ar,Qn)}}function ls({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function ct({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function po(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function nr(e,t,n=!1){const s=e.children,r=t.children;if(K(s)&&K(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function go(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:go(t)}function Pr(e){if(e)for(let t=0;tMt(Hc);function sr(e,t){return Gn(e,null,t)}function Vf(e,t){return Gn(e,null,{flush:"post"})}function Be(e,t,n){return Gn(e,t,n)}function Gn(e,t,n=Z){const{immediate:s,deep:r,flush:i,once:o}=n,l=fe({},n);let c;if(rn)if(i==="sync"){const g=$c();c=g.__watcherHandles||(g.__watcherHandles=[])}else if(!t||s)l.once=!0;else{const g=()=>{};return g.stop=Ue,g.resume=Ue,g.pause=Ue,g}const f=ue;l.call=(g,v,_)=>Fe(g,f,v,_);let a=!1;i==="post"?l.scheduler=g=>{Ee(g,f&&f.suspense)}:i!=="sync"&&(a=!0,l.scheduler=(g,v)=>{v?g():Js(g)}),l.augmentJob=g=>{t&&(g.flags|=4),a&&(g.flags|=2,f&&(g.id=f.uid,g.i=f))};const h=Kl(e,t,l);return c&&c.push(h),h}function Dc(e,t,n){const s=this.proxy,r=re(e)?e.includes(".")?mo(s,e):()=>s[e]:e.bind(s,s);let i;q(t)?i=t:(i=t.handler,n=t);const o=sn(this),l=Gn(r,i.bind(s),n);return o(),l}function mo(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ie(t)}Modifiers`]||e[`${rt(t)}Modifiers`];function Vc(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Z;let r=n;const i=t.startsWith("update:"),o=i&&jc(s,t.slice(7));o&&(o.trim&&(r=n.map(a=>re(a)?a.trim():a)),o.number&&(r=n.map(Ss)));let l,c=s[l=wn(t)]||s[l=wn(Ie(t))];!c&&i&&(c=s[l=wn(rt(t))]),c&&Fe(c,e,6,r);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Fe(f,e,6,r)}}function yo(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!q(e)){const c=f=>{const a=yo(f,t,!0);a&&(l=!0,fe(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ne(e)&&s.set(e,null),null):(K(i)?i.forEach(c=>o[c]=null):fe(o,i),ne(e)&&s.set(e,o),o)}function Yn(e,t){return!e||!Zt(t)?!1:(t=t.slice(2).replace(/Once$/,""),J(e,t[0].toLowerCase()+t.slice(1))||J(e,rt(t))||J(e,t))}function cs(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:f,renderCache:a,props:h,data:g,setupState:v,ctx:_,inheritAttrs:S}=e,U=In(e);let N,B;try{if(n.shapeFlag&4){const m=r||s,M=m;N=Me(f.call(M,m,a,h,v,g,_)),B=l}else{const m=t;N=Me(m.length>1?m(h,{attrs:l,slots:o,emit:c}):m(h,null)),B=t.props?l:Uc(l)}}catch(m){kt.length=0,tn(m,e,1),N=le(ye)}let p=N;if(B&&S!==!1){const m=Object.keys(B),{shapeFlag:M}=p;m.length&&M&7&&(i&&m.some($s)&&(B=Bc(B,i)),p=nt(p,B,!1,!0))}return n.dirs&&(p=nt(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&Yt(p,n.transition),N=p,In(U),N}const Uc=e=>{let t;for(const n in e)(n==="class"||n==="style"||Zt(n))&&((t||(t={}))[n]=e[n]);return t},Bc=(e,t)=>{const n={};for(const s in e)(!$s(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function kc(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Ir(s,o,f):!!o;if(c&8){const a=t.dynamicProps;for(let h=0;he.__isSuspense;function bo(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):Yl(e)}const Se=Symbol.for("v-fgt"),mt=Symbol.for("v-txt"),ye=Symbol.for("v-cmt"),Bt=Symbol.for("v-stc"),kt=[];let Ae=null;function Ps(e=!1){kt.push(Ae=e?null:[])}function Kc(){kt.pop(),Ae=kt[kt.length-1]||null}let Xt=1;function Lr(e){Xt+=e,e<0&&Ae&&(Ae.hasOnce=!0)}function _o(e){return e.dynamicChildren=Xt>0?Ae||Tt:null,Kc(),Xt>0&&Ae&&Ae.push(e),e}function Uf(e,t,n,s,r,i){return _o(So(e,t,n,s,r,i,!0))}function Is(e,t,n,s,r){return _o(le(e,t,n,s,r,!0))}function zt(e){return e?e.__v_isVNode===!0:!1}function dt(e,t){return e.type===t.type&&e.key===t.key}const wo=({key:e})=>e??null,Tn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?re(e)||ae(e)||q(e)?{i:de,r:e,k:t,f:!!n}:e:null);function So(e,t=null,n=null,s=0,r=null,i=e===Se?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&wo(t),ref:t&&Tn(t),scopeId:Vi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:de};return l?(rr(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=re(n)?8:16),Xt>0&&!o&&Ae&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ae.push(c),c}const le=qc;function qc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Qi)&&(e=ye),zt(e)){const l=nt(e,t,!0);return n&&rr(l,n),Xt>0&&!i&&Ae&&(l.shapeFlag&6?Ae[Ae.indexOf(e)]=l:Ae.push(l)),l.patchFlag=-2,l}if(na(e)&&(e=e.__vccOpts),t){t=Gc(t);let{class:l,style:c}=t;l&&!re(l)&&(t.class=Us(l)),ne(c)&&(Ys(c)&&!K(c)&&(c=fe({},c)),t.style=Vs(c))}const o=re(e)?1:vo(e)?128:Bi(e)?64:ne(e)?4:q(e)?2:0;return So(e,t,n,s,r,o,i,!0)}function Gc(e){return e?Ys(e)||io(e)?fe({},e):e:null}function nt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,f=t?Yc(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&wo(f),ref:t&&t.ref?n&&i?K(i)?i.concat(Tn(t)):[i,Tn(t)]:Tn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Se?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&nt(e.ssContent),ssFallback:e.ssFallback&&nt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&Yt(a,c.clone(a)),a}function Eo(e=" ",t=0){return le(mt,null,e,t)}function Bf(e,t){const n=le(Bt,null,e);return n.staticCount=t,n}function kf(e="",t=!1){return t?(Ps(),Is(ye,null,e)):le(ye,null,e)}function Me(e){return e==null||typeof e=="boolean"?le(ye):K(e)?le(Se,null,e.slice()):zt(e)?et(e):le(mt,null,String(e))}function et(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:nt(e)}function rr(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),rr(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!io(t)?t._ctx=de:r===3&&de&&(de.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else q(t)?(t={default:t,_ctx:de},n=32):(t=String(t),s&64?(n=16,t=[Eo(t)]):n=8);e.children=t,e.shapeFlag|=n}function Yc(...e){const t={};for(let n=0;nue||de;let Fn,Ls;{const e=gi(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Fn=t("__VUE_INSTANCE_SETTERS__",n=>ue=n),Ls=t("__VUE_SSR_SETTERS__",n=>rn=n)}const sn=e=>{const t=ue;return Fn(e),e.scope.on(),()=>{e.scope.off(),Fn(t)}},Nr=()=>{ue&&ue.scope.off(),Fn(null)};function xo(e){return e.vnode.shapeFlag&4}let rn=!1;function Qc(e,t=!1,n=!1){t&&Ls(t);const{props:s,children:r}=e.vnode,i=xo(e);Ac(e,s,i,t),Pc(e,r,n);const o=i?Zc(e,t):void 0;return t&&Ls(!1),o}function Zc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,yc);const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?Co(e):null,i=sn(e);it();const o=en(s,e,0,[e.props,r]);if(ot(),i(),ui(o)){if(gt(e)||Zs(e),o.then(Nr,Nr),t)return o.then(l=>{Fr(e,l,t)}).catch(l=>{tn(l,e,0)});e.asyncDep=o}else Fr(e,o,t)}else To(e,t)}function Fr(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ne(t)&&(e.setupState=Hi(t)),To(e,n)}let Hr;function To(e,t,n){const s=e.type;if(!e.render){if(!t&&Hr&&!s.render){const r=s.template||er(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,f=fe(fe({isCustomElement:i,delimiters:l},o),c);s.render=Hr(r,f)}}e.render=s.render||Ue}{const r=sn(e);it();try{bc(e)}finally{ot(),r()}}}const ea={get(e,t){return ve(e,"get",""),e[t]}};function Co(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,ea),slots:e.slots,emit:e.emit,expose:t}}function zn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Hi(En(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Ut)return Ut[n](e)},has(t,n){return n in t||n in Ut}})):e.proxy}function ta(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function na(e){return q(e)&&"__vccOpts"in e}const ie=(e,t)=>kl(e,t,rn);function Ns(e,t,n){const s=arguments.length;return s===2?ne(t)&&!K(t)?zt(t)?le(e,null,[t]):le(e,t):le(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&zt(n)&&(n=[n]),le(e,t,n))}const sa="3.5.11";/** +* @vue/runtime-dom v3.5.11 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Fs;const $r=typeof window<"u"&&window.trustedTypes;if($r)try{Fs=$r.createPolicy("vue",{createHTML:e=>e})}catch{}const Ao=Fs?e=>Fs.createHTML(e):e=>e,ra="http://www.w3.org/2000/svg",ia="http://www.w3.org/1998/Math/MathML",Ke=typeof document<"u"?document:null,Dr=Ke&&Ke.createElement("template"),oa={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Ke.createElementNS(ra,e):t==="mathml"?Ke.createElementNS(ia,e):n?Ke.createElement(e,{is:n}):Ke.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Ke.createTextNode(e),createComment:e=>Ke.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ke.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Dr.innerHTML=Ao(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=Dr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ze="transition",Ht="animation",Jt=Symbol("_vtc"),Ro={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},la=fe({},Wi,Ro),ca=e=>(e.displayName="Transition",e.props=la,e),Wf=ca((e,{slots:t})=>Ns(tc,aa(e),t)),at=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},jr=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function aa(e){const t={};for(const x in e)x in Ro||(t[x]=e[x]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=o,appearToClass:a=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=e,_=fa(r),S=_&&_[0],U=_&&_[1],{onBeforeEnter:N,onEnter:B,onEnterCancelled:p,onLeave:m,onLeaveCancelled:M,onBeforeAppear:F=N,onAppear:$=B,onAppearCancelled:j=p}=t,R=(x,W,se)=>{ft(x,W?a:l),ft(x,W?f:o),se&&se()},b=(x,W)=>{x._isLeaving=!1,ft(x,h),ft(x,v),ft(x,g),W&&W()},L=x=>(W,se)=>{const ce=x?$:B,V=()=>R(W,x,se);at(ce,[W,V]),Vr(()=>{ft(W,x?c:i),Je(W,x?a:l),jr(ce)||Ur(W,s,S,V)})};return fe(t,{onBeforeEnter(x){at(N,[x]),Je(x,i),Je(x,o)},onBeforeAppear(x){at(F,[x]),Je(x,c),Je(x,f)},onEnter:L(!1),onAppear:L(!0),onLeave(x,W){x._isLeaving=!0;const se=()=>b(x,W);Je(x,h),Je(x,g),ha(),Vr(()=>{x._isLeaving&&(ft(x,h),Je(x,v),jr(m)||Ur(x,s,U,se))}),at(m,[x,se])},onEnterCancelled(x){R(x,!1),at(p,[x])},onAppearCancelled(x){R(x,!0),at(j,[x])},onLeaveCancelled(x){b(x),at(M,[x])}})}function fa(e){if(e==null)return null;if(ne(e))return[as(e.enter),as(e.leave)];{const t=as(e);return[t,t]}}function as(e){return tl(e)}function Je(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Jt]||(e[Jt]=new Set)).add(t)}function ft(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Jt];n&&(n.delete(t),n.size||(e[Jt]=void 0))}function Vr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let ua=0;function Ur(e,t,n,s){const r=e._endId=++ua,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=da(e,t);if(!o)return s();const f=o+"end";let a=0;const h=()=>{e.removeEventListener(f,g),i()},g=v=>{v.target===e&&++a>=c&&h()};setTimeout(()=>{a(n[_]||"").split(", "),r=s(`${ze}Delay`),i=s(`${ze}Duration`),o=Br(r,i),l=s(`${Ht}Delay`),c=s(`${Ht}Duration`),f=Br(l,c);let a=null,h=0,g=0;t===ze?o>0&&(a=ze,h=o,g=i.length):t===Ht?f>0&&(a=Ht,h=f,g=c.length):(h=Math.max(o,f),a=h>0?o>f?ze:Ht:null,g=a?a===ze?i.length:c.length:0);const v=a===ze&&/\b(transform|all)(,|$)/.test(s(`${ze}Property`).toString());return{type:a,timeout:h,propCount:g,hasTransform:v}}function Br(e,t){for(;e.lengthkr(n)+kr(e[s])))}function kr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function ha(){return document.body.offsetHeight}function pa(e,t,n){const s=e[Jt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Wr=Symbol("_vod"),ga=Symbol("_vsh"),ma=Symbol(""),ya=/(^|;)\s*display\s*:/;function va(e,t,n){const s=e.style,r=re(n);let i=!1;if(n&&!r){if(t)if(re(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Cn(s,l,"")}else for(const o in t)n[o]==null&&Cn(s,o,"");for(const o in n)o==="display"&&(i=!0),Cn(s,o,n[o])}else if(r){if(t!==n){const o=s[ma];o&&(n+=";"+o),s.cssText=n,i=ya.test(n)}}else t&&e.removeAttribute("style");Wr in e&&(e[Wr]=i?s.display:"",e[ga]&&(s.display="none"))}const Kr=/\s*!important$/;function Cn(e,t,n){if(K(n))n.forEach(s=>Cn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=ba(e,t);Kr.test(n)?e.setProperty(rt(s),n.replace(Kr,""),"important"):e[s]=n}}const qr=["Webkit","Moz","ms"],fs={};function ba(e,t){const n=fs[t];if(n)return n;let s=Ie(t);if(s!=="filter"&&s in e)return fs[t]=s;s=Dn(s);for(let r=0;rus||(Ea.then(()=>us=0),us=Date.now());function Ta(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Fe(Ca(s,n.value),t,5,[s])};return n.value=e,n.attached=xa(),n}function Ca(e,t){if(K(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Qr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Aa=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?pa(e,s,o):t==="style"?va(e,n,s):Zt(t)?$s(t)||wa(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Ra(e,t,s,o))?(Xr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Yr(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!re(s))?Xr(e,Ie(t),s):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Yr(e,t,s,o))};function Ra(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Qr(t)&&q(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Qr(t)&&re(n)?!1:t in e}const Zr=e=>{const t=e.props["onUpdate:modelValue"]||!1;return K(t)?n=>Sn(t,n):t};function Oa(e){e.target.composing=!0}function ei(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const ds=Symbol("_assign"),Kf={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[ds]=Zr(r);const i=s||r.props&&r.props.type==="number";Et(e,t?"change":"input",o=>{if(o.target.composing)return;let l=e.value;n&&(l=l.trim()),i&&(l=Ss(l)),e[ds](l)}),n&&Et(e,"change",()=>{e.value=e.value.trim()}),t||(Et(e,"compositionstart",Oa),Et(e,"compositionend",ei),Et(e,"change",ei))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[ds]=Zr(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?Ss(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c))}},Ma=["ctrl","shift","alt","meta"],Pa={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Ma.some(n=>e[`${n}Key`]&&!t.includes(n))},qf=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=rt(r.key);if(t.some(o=>o===i||Ia[o]===i))return e(r)})},Oo=fe({patchProp:Aa},oa);let Wt,ti=!1;function La(){return Wt||(Wt=Lc(Oo))}function Na(){return Wt=ti?Wt:Nc(Oo),ti=!0,Wt}const Yf=(...e)=>{const t=La().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Po(s);if(!r)return;const i=t._component;!q(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Mo(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t},Xf=(...e)=>{const t=Na().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Po(s);if(r)return n(r,!0,Mo(r))},t};function Mo(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Po(e){return re(e)?document.querySelector(e):e}const zf=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Fa=window.__VP_SITE_DATA__;function ir(e){return bi()?(fl(e),!0):!1}function ke(e){return typeof e=="function"?e():Fi(e)}const Io=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Jf=e=>e!=null,Ha=Object.prototype.toString,$a=e=>Ha.call(e)==="[object Object]",Qt=()=>{},ni=Da();function Da(){var e,t;return Io&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function ja(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const Lo=e=>e();function Va(e,t={}){let n,s,r=Qt;const i=l=>{clearTimeout(l),r(),r=Qt};return l=>{const c=ke(e),f=ke(t.maxWait);return n&&i(n),c<=0||f!==void 0&&f<=0?(s&&(i(s),s=null),Promise.resolve(l())):new Promise((a,h)=>{r=t.rejectOnCancel?h:a,f&&!s&&(s=setTimeout(()=>{n&&i(n),s=null,a(l())},f)),n=setTimeout(()=>{s&&i(s),s=null,a(l())},c)})}}function Ua(e=Lo){const t=oe(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...i)=>{t.value&&e(...i)};return{isActive:kn(t),pause:n,resume:s,eventFilter:r}}function Ba(e){return Xn()}function No(...e){if(e.length!==1)return Vl(...e);const t=e[0];return typeof t=="function"?kn($l(()=>({get:t,set:Qt}))):oe(t)}function Fo(e,t,n={}){const{eventFilter:s=Lo,...r}=n;return Be(e,ja(s,t),r)}function ka(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=Ua(s);return{stop:Fo(e,t,{...r,eventFilter:i}),pause:o,resume:l,isActive:c}}function or(e,t=!0,n){Ba()?It(e,n):t?e():Wn(e)}function Qf(e,t,n={}){const{debounce:s=0,maxWait:r=void 0,...i}=n;return Fo(e,t,{...i,eventFilter:Va(s,{maxWait:r})})}function Zf(e,t,n){let s;ae(n)?s={evaluating:n}:s={};const{lazy:r=!1,evaluating:i=void 0,shallow:o=!0,onError:l=Qt}=s,c=oe(!r),f=o?zs(t):oe(t);let a=0;return sr(async h=>{if(!c.value)return;a++;const g=a;let v=!1;i&&Promise.resolve().then(()=>{i.value=!0});try{const _=await e(S=>{h(()=>{i&&(i.value=!1),v||S()})});g===a&&(f.value=_)}catch(_){l(_)}finally{i&&g===a&&(i.value=!1),v=!0}}),r?ie(()=>(c.value=!0,f.value)):f}const He=Io?window:void 0;function Ho(e){var t;const n=ke(e);return(t=n==null?void 0:n.$el)!=null?t:n}function Pt(...e){let t,n,s,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,r]=e,t=He):[t,n,s,r]=e,!t)return Qt;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const i=[],o=()=>{i.forEach(a=>a()),i.length=0},l=(a,h,g,v)=>(a.addEventListener(h,g,v),()=>a.removeEventListener(h,g,v)),c=Be(()=>[Ho(t),ke(r)],([a,h])=>{if(o(),!a)return;const g=$a(h)?{...h}:h;i.push(...n.flatMap(v=>s.map(_=>l(a,v,_,g))))},{immediate:!0,flush:"post"}),f=()=>{c(),o()};return ir(f),f}function Wa(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function eu(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=He,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=Wa(t);return Pt(r,i,a=>{a.repeat&&ke(l)||c(a)&&n(a)},o)}function Ka(){const e=oe(!1),t=Xn();return t&&It(()=>{e.value=!0},t),e}function qa(e){const t=Ka();return ie(()=>(t.value,!!e()))}function $o(e,t={}){const{window:n=He}=t,s=qa(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const i=oe(!1),o=f=>{i.value=f.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",o):r.removeListener(o))},c=sr(()=>{s.value&&(l(),r=n.matchMedia(ke(e)),"addEventListener"in r?r.addEventListener("change",o):r.addListener(o),i.value=r.matches)});return ir(()=>{c(),l(),r=void 0}),i}const vn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},bn="__vueuse_ssr_handlers__",Ga=Ya();function Ya(){return bn in vn||(vn[bn]=vn[bn]||{}),vn[bn]}function Do(e,t){return Ga[e]||t}function jo(e){return $o("(prefers-color-scheme: dark)",e)}function Xa(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const za={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},si="vueuse-storage";function lr(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:a,window:h=He,eventFilter:g,onError:v=b=>{console.error(b)},initOnMounted:_}=s,S=(a?zs:oe)(typeof t=="function"?t():t);if(!n)try{n=Do("getDefaultStorage",()=>{var b;return(b=He)==null?void 0:b.localStorage})()}catch(b){v(b)}if(!n)return S;const U=ke(t),N=Xa(U),B=(r=s.serializer)!=null?r:za[N],{pause:p,resume:m}=ka(S,()=>F(S.value),{flush:i,deep:o,eventFilter:g});h&&l&&or(()=>{n instanceof Storage?Pt(h,"storage",j):Pt(h,si,R),_&&j()}),_||j();function M(b,L){if(h){const x={key:e,oldValue:b,newValue:L,storageArea:n};h.dispatchEvent(n instanceof Storage?new StorageEvent("storage",x):new CustomEvent(si,{detail:x}))}}function F(b){try{const L=n.getItem(e);if(b==null)M(L,null),n.removeItem(e);else{const x=B.write(b);L!==x&&(n.setItem(e,x),M(L,x))}}catch(L){v(L)}}function $(b){const L=b?b.newValue:n.getItem(e);if(L==null)return c&&U!=null&&n.setItem(e,B.write(U)),U;if(!b&&f){const x=B.read(L);return typeof f=="function"?f(x,U):N==="object"&&!Array.isArray(x)?{...U,...x}:x}else return typeof L!="string"?L:B.read(L)}function j(b){if(!(b&&b.storageArea!==n)){if(b&&b.key==null){S.value=U;return}if(!(b&&b.key!==e)){p();try{(b==null?void 0:b.newValue)!==B.write(S.value)&&(S.value=$(b))}catch(L){v(L)}finally{b?Wn(m):m()}}}}function R(b){j(b.detail)}return S}const Ja="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function Qa(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=He,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:f,disableTransition:a=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},g=jo({window:r}),v=ie(()=>g.value?"dark":"light"),_=c||(o==null?No(s):lr(o,s,i,{window:r,listenToStorageChanges:l})),S=ie(()=>_.value==="auto"?v.value:_.value),U=Do("updateHTMLAttrs",(m,M,F)=>{const $=typeof m=="string"?r==null?void 0:r.document.querySelector(m):Ho(m);if(!$)return;const j=new Set,R=new Set;let b=null;if(M==="class"){const x=F.split(/\s/g);Object.values(h).flatMap(W=>(W||"").split(/\s/g)).filter(Boolean).forEach(W=>{x.includes(W)?j.add(W):R.add(W)})}else b={key:M,value:F};if(j.size===0&&R.size===0&&b===null)return;let L;a&&(L=r.document.createElement("style"),L.appendChild(document.createTextNode(Ja)),r.document.head.appendChild(L));for(const x of j)$.classList.add(x);for(const x of R)$.classList.remove(x);b&&$.setAttribute(b.key,b.value),a&&(r.getComputedStyle(L).opacity,document.head.removeChild(L))});function N(m){var M;U(t,n,(M=h[m])!=null?M:m)}function B(m){e.onChanged?e.onChanged(m,N):N(m)}Be(S,B,{flush:"post",immediate:!0}),or(()=>B(S.value));const p=ie({get(){return f?_.value:S.value},set(m){_.value=m}});try{return Object.assign(p,{store:_,system:v,state:S})}catch{return p}}function Za(e={}){const{valueDark:t="dark",valueLight:n="",window:s=He}=e,r=Qa({...e,onChanged:(l,c)=>{var f;e.onChanged?(f=e.onChanged)==null||f.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=ie(()=>r.system?r.system.value:jo({window:s}).value?"dark":"light");return ie({get(){return r.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?r.value="auto":r.value=c}})}function hs(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function tu(e,t,n={}){const{window:s=He}=n;return lr(e,t,s==null?void 0:s.localStorage,n)}function Vo(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const ps=new WeakMap;function nu(e,t=!1){const n=oe(t);let s=null,r="";Be(No(e),l=>{const c=hs(ke(l));if(c){const f=c;if(ps.get(f)||ps.set(f,f.style.overflow),f.style.overflow!=="hidden"&&(r=f.style.overflow),f.style.overflow==="hidden")return n.value=!0;if(n.value)return f.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=hs(ke(e));!l||n.value||(ni&&(s=Pt(l,"touchmove",c=>{ef(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=hs(ke(e));!l||!n.value||(ni&&(s==null||s()),l.style.overflow=r,ps.delete(l),n.value=!1)};return ir(o),ie({get(){return n.value},set(l){l?i():o()}})}function su(e,t,n={}){const{window:s=He}=n;return lr(e,t,s==null?void 0:s.sessionStorage,n)}function ru(e={}){const{window:t=He,behavior:n="auto"}=e;if(!t)return{x:oe(0),y:oe(0)};const s=oe(t.scrollX),r=oe(t.scrollY),i=ie({get(){return s.value},set(l){scrollTo({left:l,behavior:n})}}),o=ie({get(){return r.value},set(l){scrollTo({top:l,behavior:n})}});return Pt(t,"scroll",()=>{s.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function iu(e={}){const{window:t=He,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=oe(n),c=oe(s),f=()=>{t&&(o==="outer"?(l.value=t.outerWidth,c.value=t.outerHeight):i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight))};if(f(),or(f),Pt("resize",f,{passive:!0}),r){const a=$o("(orientation: portrait)");Be(a,()=>f())}return{width:l,height:c}}const gs={BASE_URL:"/GeometryOps.jl/dev/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};var ms={};const Uo=/^(?:[a-z]+:|\/\/)/i,tf="vitepress-theme-appearance",nf=/#.*$/,sf=/[?#].*$/,rf=/(?:(^|\/)index)?\.(?:md|html)$/,ge=typeof document<"u",Bo={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function of(e,t,n=!1){if(t===void 0)return!1;if(e=ri(`/${e}`),n)return new RegExp(t).test(e);if(ri(t)!==e)return!1;const s=t.match(nf);return s?(ge?location.hash:"")===s[0]:!0}function ri(e){return decodeURI(e).replace(sf,"").replace(rf,"$1")}function lf(e){return Uo.test(e)}function cf(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!lf(n)&&of(t,`/${n}/`,!0))||"root"}function af(e,t){var s,r,i,o,l,c,f;const n=cf(e,t);return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Wo(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(f=e.locales[n])==null?void 0:f.themeConfig}})}function ko(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=ff(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function ff(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function uf(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function Wo(e,t){return[...e.filter(n=>!uf(t,n)),...t]}const df=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,hf=/^[a-z]:/i;function ii(e){const t=hf.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(df,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const ys=new Set;function pf(e){if(ys.size===0){const n=typeof process=="object"&&(ms==null?void 0:ms.VITE_EXTRA_EXTENSIONS)||(gs==null?void 0:gs.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>ys.add(s))}const t=e.split(".").pop();return t==null||!ys.has(t.toLowerCase())}function ou(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const gf=Symbol(),yt=zs(Fa);function lu(e){const t=ie(()=>af(yt.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?oe(!0):n?Za({storageKey:tf,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):oe(!1),r=oe(ge?location.hash:"");return ge&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Be(()=>e.data,()=>{r.value=ge?location.hash:""}),{site:t,theme:ie(()=>t.value.themeConfig),page:ie(()=>e.data),frontmatter:ie(()=>e.data.frontmatter),params:ie(()=>e.data.params),lang:ie(()=>t.value.lang),dir:ie(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ie(()=>t.value.localeIndex||"root"),title:ie(()=>ko(t.value,e.data)),description:ie(()=>e.data.description||t.value.description),isDark:s,hash:ie(()=>r.value)}}function mf(){const e=Mt(gf);if(!e)throw new Error("vitepress data not properly injected in app");return e}function yf(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function oi(e){return Uo.test(e)||!e.startsWith("/")?e:yf(yt.value.base,e)}function vf(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),ge){const n="/GeometryOps.jl/dev/";t=ii(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${ii(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let An=[];function cu(e){An.push(e),qn(()=>{An=An.filter(t=>t!==e)})}function bf(){let e=yt.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=li(e,n);else if(Array.isArray(e))for(const s of e){const r=li(s,n);if(r){t=r;break}}return t}function li(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const _f=Symbol(),Ko="http://a.com",wf=()=>({path:"/",component:null,data:Bo});function au(e,t){const n=Bn(wf()),s={route:n,go:r};async function r(l=ge?location.href:"/"){var c,f;l=vs(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(ge&&l!==vs(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((f=s.onAfterRouteChanged)==null?void 0:f.call(s,l)))}let i=null;async function o(l,c=0,f=!1){var g;if(await((g=s.onBeforePageLoad)==null?void 0:g.call(s,l))===!1)return;const a=new URL(l,Ko),h=i=a.pathname;try{let v=await e(h);if(!v)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:_,__pageData:S}=v;if(!_)throw new Error(`Invalid route component: ${_}`);n.path=ge?h:oi(h),n.component=En(_),n.data=En(S),ge&&Wn(()=>{let U=yt.value.base+S.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!yt.value.cleanUrls&&!U.endsWith("/")&&(U+=".html"),U!==a.pathname&&(a.pathname=U,l=U+a.search+a.hash,history.replaceState({},"",l)),a.hash&&!c){let N=null;try{N=document.getElementById(decodeURIComponent(a.hash).slice(1))}catch(B){console.warn(B)}if(N){ci(N,a.hash);return}}window.scrollTo(0,c)})}}catch(v){if(!/fetch|Page not found/.test(v.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(v),!f)try{const _=await fetch(yt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await _.json(),await o(l,c,!0);return}catch{}if(i===h){i=null,n.path=ge?h:oi(h),n.component=t?En(t):null;const _=ge?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...Bo,relativePath:_}}}}return ge&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const f=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(f==null)return;const{href:a,origin:h,pathname:g,hash:v,search:_}=new URL(f,c.baseURI),S=new URL(location.href);h===S.origin&&pf(g)&&(l.preventDefault(),g===S.pathname&&_===S.search?(v!==S.hash&&(history.pushState({},"",a),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:S.href,newURL:a}))),v?ci(c,v,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(a))},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await o(vs(location.href),l.state&&l.state.scrollPosition||0),(c=s.onAfterRouteChanged)==null||c.call(s,location.href))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Sf(){const e=Mt(_f);if(!e)throw new Error("useRouter() is called without provider.");return e}function qo(){return Sf().route}function ci(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-bf()+i;requestAnimationFrame(r)}}function vs(e){const t=new URL(e,Ko);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),yt.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const bs=()=>An.forEach(e=>e()),fu=Qs({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=qo(),{site:n}=mf();return()=>Ns(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?Ns(t.component,{onVnodeMounted:bs,onVnodeUpdated:bs,onVnodeUnmounted:bs}):"404 Page Not Found"])}}),Ef="modulepreload",xf=function(e){return"/GeometryOps.jl/dev/"+e},ai={},uu=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=xf(c),c in ai)return;ai[c]=!0;const f=c.endsWith(".css"),a=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${a}`))return;const h=document.createElement("link");if(h.rel=f?"stylesheet":Ef,f||(h.as="script"),h.crossOrigin="",h.href=c,l&&h.setAttribute("nonce",l),document.head.appendChild(h),f)return new Promise((g,v)=>{h.addEventListener("load",g),h.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},du=Qs({setup(e,{slots:t}){const n=oe(!1);return It(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function hu(){ge&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(f=>f.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function pu(){if(ge){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(a=>a.remove());let f=c.textContent||"";o&&(f=f.replace(/^ *(\$|>) /gm,"").trim()),Tf(f).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const a=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,a)})}})}}async function Tf(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function gu(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=_s(l);for(const f of document.head.children)if(f.isEqualNode(c)){s.push(f);return}});return}const o=i.map(_s);s.forEach((l,c)=>{const f=o.findIndex(a=>a==null?void 0:a.isEqualNode(l??null));f!==-1?delete o[f]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};sr(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],f=ko(o,i);f!==document.title&&(document.title=f);const a=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==a&&h.setAttribute("content",a):_s(["meta",{name:"description",content:a}]),r(Wo(o.head,Af(c)))})}function _s([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&!t.async&&(s.async=!1),s}function Cf(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Af(e){return e.filter(t=>!Cf(t))}const ws=new Set,Go=()=>document.createElement("link"),Rf=e=>{const t=Go();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Of=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let _n;const Mf=ge&&(_n=Go())&&_n.relList&&_n.relList.supports&&_n.relList.supports("prefetch")?Rf:Of;function mu(){if(!ge||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!ws.has(c)){ws.add(c);const f=vf(c);f&&Mf(f)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):ws.add(l))})})};It(s);const r=qo();Be(()=>r.path,s),qn(()=>{n&&n.disconnect()})}export{zi as $,bf as A,Nf as B,Hf as C,zs as D,cu as E,Se as F,le as G,Ff as H,Uo as I,qo as J,Yc as K,Mt as L,iu as M,Vs as N,eu as O,Wn as P,ru as Q,ge as R,kn as S,Wf as T,Lf as U,uu as V,nu as W,Cc as X,Gf as Y,Df as Z,zf as _,Eo as a,qf as a0,jf as a1,Bn as a2,Vl as a3,Ns as a4,Bf as a5,gu as a6,_f as a7,lu as a8,gf as a9,fu as aa,du as ab,yt as ac,Xf as ad,au as ae,vf as af,mu as ag,pu as ah,hu as ai,ke as aj,Ho as ak,Jf as al,ir as am,Zf as an,su as ao,tu as ap,Qf as aq,Sf as ar,Pt as as,Pf as at,Kf as au,ae as av,If as aw,En as ax,Yf as ay,ou as az,Is as b,Uf as c,Qs as d,kf as e,pf as f,oi as g,ie as h,lf as i,So as j,Fi as k,of as l,$o as m,Us as n,Ps as o,oe as p,Be as q,$f as r,sr as s,cl as t,mf as u,It as v,Xl as w,qn as x,Vf as y,dc as z}; diff --git a/dev/assets/chunks/framework.O43fB7X6.js b/dev/assets/chunks/framework.O43fB7X6.js deleted file mode 100644 index 47670083a..000000000 --- a/dev/assets/chunks/framework.O43fB7X6.js +++ /dev/null @@ -1,18 +0,0 @@ -/** -* @vue/shared v3.5.10 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function Hs(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Z={},Ct=[],Ue=()=>{},Jo=()=>!1,Zt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),$s=e=>e.startsWith("onUpdate:"),fe=Object.assign,Ds=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Qo=Object.prototype.hasOwnProperty,J=(e,t)=>Qo.call(e,t),K=Array.isArray,At=e=>Fn(e)==="[object Map]",ui=e=>Fn(e)==="[object Set]",q=e=>typeof e=="function",re=e=>typeof e=="string",st=e=>typeof e=="symbol",ne=e=>e!==null&&typeof e=="object",di=e=>(ne(e)||q(e))&&q(e.then)&&q(e.catch),hi=Object.prototype.toString,Fn=e=>hi.call(e),Zo=e=>Fn(e).slice(8,-1),pi=e=>Fn(e)==="[object Object]",js=e=>re(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Rt=Hs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Hn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},el=/-(\w)/g,Ie=Hn(e=>e.replace(el,(t,n)=>n?n.toUpperCase():"")),tl=/\B([A-Z])/g,rt=Hn(e=>e.replace(tl,"-$1").toLowerCase()),$n=Hn(e=>e.charAt(0).toUpperCase()+e.slice(1)),wn=Hn(e=>e?`on${$n(e)}`:""),tt=(e,t)=>!Object.is(e,t),Sn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},ws=e=>{const t=parseFloat(e);return isNaN(t)?e:t},nl=e=>{const t=re(e)?Number(e):NaN;return isNaN(t)?e:t};let hr;const mi=()=>hr||(hr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Vs(e){if(K(e)){const t={};for(let n=0;n{if(n){const s=n.split(rl);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Us(e){let t="";if(re(e))t=e;else if(K(e))for(let n=0;n!!(e&&e.__v_isRef===!0),al=e=>re(e)?e:e==null?"":K(e)||ne(e)&&(e.toString===hi||!q(e.toString))?vi(e)?al(e.value):JSON.stringify(e,bi,2):String(e),bi=(e,t)=>vi(t)?bi(e,t.value):At(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[Zn(s,i)+" =>"]=r,n),{})}:ui(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Zn(n))}:st(t)?Zn(t):ne(t)&&!K(t)&&!pi(t)?String(t):t,Zn=(e,t="")=>{var n;return st(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.5.10 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let _e;class fl{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=_e,!t&&_e&&(this.index=(_e.scopes||(_e.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0)return;let e;for(;xt;){let t=xt,n;for(;t;)t.flags&1||(t.flags&=-9),t=t.next;for(t=xt,xt=void 0;t;){if(n=t.next,t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function xi(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Ti(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Ws(s),dl(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Ss(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ci(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ci(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Wt))return;e.globalVersion=Wt;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!Ss(e)){e.flags&=-3;return}const n=te,s=Ne;te=e,Ne=!0;try{xi(e);const r=e.fn(e._value);(t.version===0||tt(r,e._value))&&(e._value=r,t.version++)}catch(r){throw t.version++,r}finally{te=n,Ne=s,Ti(e),e.flags&=-3}}function Ws(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s),!n.subs&&n.computed){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Ws(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function dl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Ne=!0;const Ai=[];function it(){Ai.push(Ne),Ne=!1}function ot(){const e=Ai.pop();Ne=e===void 0?!0:e}function pr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=te;te=void 0;try{t()}finally{te=n}}}let Wt=0;class hl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Dn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.target=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(t){if(!te||!Ne||te===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==te)n=this.activeLink=new hl(te,this),te.deps?(n.prevDep=te.depsTail,te.depsTail.nextDep=n,te.depsTail=n):te.deps=te.depsTail=n,Ri(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=te.depsTail,n.nextDep=void 0,te.depsTail.nextDep=n,te.depsTail=n,te.deps===n&&(te.deps=s)}return n}trigger(t){this.version++,Wt++,this.notify(t)}notify(t){Bs();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{ks()}}}function Ri(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Ri(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Rn=new WeakMap,ht=Symbol(""),Es=Symbol(""),Kt=Symbol("");function ve(e,t,n){if(Ne&&te){let s=Rn.get(e);s||Rn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Dn),r.target=e,r.map=s,r.key=n),r.track()}}function Ge(e,t,n,s,r,i){const o=Rn.get(e);if(!o){Wt++;return}const l=c=>{c&&c.trigger()};if(Bs(),t==="clear")o.forEach(l);else{const c=K(e),f=c&&js(n);if(c&&n==="length"){const a=Number(s);o.forEach((h,g)=>{(g==="length"||g===Kt||!st(g)&&g>=a)&&l(h)})}else switch(n!==void 0&&l(o.get(n)),f&&l(o.get(Kt)),t){case"add":c?f&&l(o.get("length")):(l(o.get(ht)),At(e)&&l(o.get(Es)));break;case"delete":c||(l(o.get(ht)),At(e)&&l(o.get(Es)));break;case"set":At(e)&&l(o.get(ht));break}}ks()}function pl(e,t){const n=Rn.get(e);return n&&n.get(t)}function _t(e){const t=z(e);return t===e?t:(ve(t,"iterate",Kt),Pe(e)?t:t.map(me))}function jn(e){return ve(e=z(e),"iterate",Kt),e}const gl={__proto__:null,[Symbol.iterator](){return ts(this,Symbol.iterator,me)},concat(...e){return _t(this).concat(...e.map(t=>K(t)?_t(t):t))},entries(){return ts(this,"entries",e=>(e[1]=me(e[1]),e))},every(e,t){return We(this,"every",e,t,void 0,arguments)},filter(e,t){return We(this,"filter",e,t,n=>n.map(me),arguments)},find(e,t){return We(this,"find",e,t,me,arguments)},findIndex(e,t){return We(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return We(this,"findLast",e,t,me,arguments)},findLastIndex(e,t){return We(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return We(this,"forEach",e,t,void 0,arguments)},includes(...e){return ns(this,"includes",e)},indexOf(...e){return ns(this,"indexOf",e)},join(e){return _t(this).join(e)},lastIndexOf(...e){return ns(this,"lastIndexOf",e)},map(e,t){return We(this,"map",e,t,void 0,arguments)},pop(){return Ht(this,"pop")},push(...e){return Ht(this,"push",e)},reduce(e,...t){return gr(this,"reduce",e,t)},reduceRight(e,...t){return gr(this,"reduceRight",e,t)},shift(){return Ht(this,"shift")},some(e,t){return We(this,"some",e,t,void 0,arguments)},splice(...e){return Ht(this,"splice",e)},toReversed(){return _t(this).toReversed()},toSorted(e){return _t(this).toSorted(e)},toSpliced(...e){return _t(this).toSpliced(...e)},unshift(...e){return Ht(this,"unshift",e)},values(){return ts(this,"values",me)}};function ts(e,t,n){const s=jn(e),r=s[t]();return s!==e&&!Pe(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const ml=Array.prototype;function We(e,t,n,s,r,i){const o=jn(e),l=o!==e&&!Pe(e),c=o[t];if(c!==ml[t]){const h=c.apply(e,i);return l?me(h):h}let f=n;o!==e&&(l?f=function(h,g){return n.call(this,me(h),g,e)}:n.length>2&&(f=function(h,g){return n.call(this,h,g,e)}));const a=c.call(o,f,s);return l&&r?r(a):a}function gr(e,t,n,s){const r=jn(e);let i=n;return r!==e&&(Pe(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,me(l),c,e)}),r[t](i,...s)}function ns(e,t,n){const s=z(e);ve(s,"iterate",Kt);const r=s[t](...n);return(r===-1||r===!1)&&Ys(n[0])?(n[0]=z(n[0]),s[t](...n)):r}function Ht(e,t,n=[]){it(),Bs();const s=z(e)[t].apply(e,n);return ks(),ot(),s}const yl=Hs("__proto__,__v_isRef,__isVue"),Oi=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(st));function vl(e){st(e)||(e=String(e));const t=z(this);return ve(t,"has",e),t.hasOwnProperty(e)}class Mi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Pl:Ni:i?Li:Ii).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=K(t);if(!r){let c;if(o&&(c=gl[n]))return c;if(n==="hasOwnProperty")return vl}const l=Reflect.get(t,n,ae(t)?t:s);return(st(n)?Oi.has(n):yl(n))||(r||ve(t,"get",n),i)?l:ae(l)?o&&js(n)?l:l.value:ne(l)?r?Bn(l):Un(l):l}}class Pi extends Mi{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=vt(i);if(!Pe(s)&&!vt(s)&&(i=z(i),s=z(s)),!K(t)&&ae(i)&&!ae(s))return c?!1:(i.value=s,!0)}const o=K(t)&&js(n)?Number(n)e,Vn=e=>Reflect.getPrototypeOf(e);function cn(e,t,n=!1,s=!1){e=e.__v_raw;const r=z(e),i=z(t);n||(tt(t,i)&&ve(r,"get",t),ve(r,"get",i));const{has:o}=Vn(r),l=s?Ks:n?Xs:me;if(o.call(r,t))return l(e.get(t));if(o.call(r,i))return l(e.get(i));e!==r&&e.get(t)}function an(e,t=!1){const n=this.__v_raw,s=z(n),r=z(e);return t||(tt(e,r)&&ve(s,"has",e),ve(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function fn(e,t=!1){return e=e.__v_raw,!t&&ve(z(e),"iterate",ht),Reflect.get(e,"size",e)}function mr(e,t=!1){!t&&!Pe(e)&&!vt(e)&&(e=z(e));const n=z(this);return Vn(n).has.call(n,e)||(n.add(e),Ge(n,"add",e,e)),this}function yr(e,t,n=!1){!n&&!Pe(t)&&!vt(t)&&(t=z(t));const s=z(this),{has:r,get:i}=Vn(s);let o=r.call(s,e);o||(e=z(e),o=r.call(s,e));const l=i.call(s,e);return s.set(e,t),o?tt(t,l)&&Ge(s,"set",e,t):Ge(s,"add",e,t),this}function vr(e){const t=z(this),{has:n,get:s}=Vn(t);let r=n.call(t,e);r||(e=z(e),r=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return r&&Ge(t,"delete",e,void 0),i}function br(){const e=z(this),t=e.size!==0,n=e.clear();return t&&Ge(e,"clear",void 0,void 0),n}function un(e,t){return function(s,r){const i=this,o=i.__v_raw,l=z(o),c=t?Ks:e?Xs:me;return!e&&ve(l,"iterate",ht),o.forEach((f,a)=>s.call(r,c(f),c(a),i))}}function dn(e,t,n){return function(...s){const r=this.__v_raw,i=z(r),o=At(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,f=r[e](...s),a=n?Ks:t?Xs:me;return!t&&ve(i,"iterate",c?Es:ht),{next(){const{value:h,done:g}=f.next();return g?{value:h,done:g}:{value:l?[a(h[0]),a(h[1])]:a(h),done:g}},[Symbol.iterator](){return this}}}}function Xe(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function El(){const e={get(i){return cn(this,i)},get size(){return fn(this)},has:an,add:mr,set:yr,delete:vr,clear:br,forEach:un(!1,!1)},t={get(i){return cn(this,i,!1,!0)},get size(){return fn(this)},has:an,add(i){return mr.call(this,i,!0)},set(i,o){return yr.call(this,i,o,!0)},delete:vr,clear:br,forEach:un(!1,!0)},n={get(i){return cn(this,i,!0)},get size(){return fn(this,!0)},has(i){return an.call(this,i,!0)},add:Xe("add"),set:Xe("set"),delete:Xe("delete"),clear:Xe("clear"),forEach:un(!0,!1)},s={get(i){return cn(this,i,!0,!0)},get size(){return fn(this,!0)},has(i){return an.call(this,i,!0)},add:Xe("add"),set:Xe("set"),delete:Xe("delete"),clear:Xe("clear"),forEach:un(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=dn(i,!1,!1),n[i]=dn(i,!0,!1),t[i]=dn(i,!1,!0),s[i]=dn(i,!0,!0)}),[e,n,t,s]}const[xl,Tl,Cl,Al]=El();function qs(e,t){const n=t?e?Al:Cl:e?Tl:xl;return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(J(n,r)&&r in s?n:s,r,i)}const Rl={get:qs(!1,!1)},Ol={get:qs(!1,!0)},Ml={get:qs(!0,!1)};const Ii=new WeakMap,Li=new WeakMap,Ni=new WeakMap,Pl=new WeakMap;function Il(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Ll(e){return e.__v_skip||!Object.isExtensible(e)?0:Il(Zo(e))}function Un(e){return vt(e)?e:Gs(e,!1,_l,Rl,Ii)}function Nl(e){return Gs(e,!1,Sl,Ol,Li)}function Bn(e){return Gs(e,!0,wl,Ml,Ni)}function Gs(e,t,n,s,r){if(!ne(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=Ll(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function pt(e){return vt(e)?pt(e.__v_raw):!!(e&&e.__v_isReactive)}function vt(e){return!!(e&&e.__v_isReadonly)}function Pe(e){return!!(e&&e.__v_isShallow)}function Ys(e){return e?!!e.__v_raw:!1}function z(e){const t=e&&e.__v_raw;return t?z(t):e}function En(e){return!J(e,"__v_skip")&&Object.isExtensible(e)&&gi(e,"__v_skip",!0),e}const me=e=>ne(e)?Un(e):e,Xs=e=>ne(e)?Bn(e):e;function ae(e){return e?e.__v_isRef===!0:!1}function oe(e){return Fi(e,!1)}function zs(e){return Fi(e,!0)}function Fi(e,t){return ae(e)?e:new Fl(e,t)}class Fl{constructor(t,n){this.dep=new Dn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:z(t),this._value=n?t:me(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Pe(t)||vt(t);t=s?t:z(t),tt(t,n)&&(this._rawValue=t,this._value=s?t:me(t),this.dep.trigger())}}function Hi(e){return ae(e)?e.value:e}const Hl={get:(e,t,n)=>t==="__v_raw"?e:Hi(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ae(r)&&!ae(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function $i(e){return pt(e)?e:new Proxy(e,Hl)}class $l{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Dn,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function Dl(e){return new $l(e)}class jl{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return pl(z(this._object),this._key)}}class Vl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Ul(e,t,n){return ae(e)?e:q(e)?new Vl(e):ne(e)&&arguments.length>1?Bl(e,t,n):oe(e)}function Bl(e,t,n){const s=e[t];return ae(s)?s:new jl(e,t,n)}class kl{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Dn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Wt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&te!==this)return Ei(this),!0}get value(){const t=this.dep.track();return Ci(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Wl(e,t,n=!1){let s,r;return q(e)?s=e:(s=e.get,r=e.set),new kl(s,r,n)}const hn={},On=new WeakMap;let ut;function Kl(e,t=!1,n=ut){if(n){let s=On.get(n);s||On.set(n,s=[]),s.push(e)}}function ql(e,t,n=Z){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,f=m=>r?m:Pe(m)||r===!1||r===0?qe(m,1):qe(m);let a,h,g,v,_=!1,S=!1;if(ae(e)?(h=()=>e.value,_=Pe(e)):pt(e)?(h=()=>f(e),_=!0):K(e)?(S=!0,_=e.some(m=>pt(m)||Pe(m)),h=()=>e.map(m=>{if(ae(m))return m.value;if(pt(m))return f(m);if(q(m))return c?c(m,2):m()})):q(e)?t?h=c?()=>c(e,2):e:h=()=>{if(g){it();try{g()}finally{ot()}}const m=ut;ut=a;try{return c?c(e,3,[v]):e(v)}finally{ut=m}}:h=Ue,t&&r){const m=h,M=r===!0?1/0:r;h=()=>qe(m(),M)}const U=_i(),N=()=>{a.stop(),U&&Ds(U.effects,a)};if(i&&t){const m=t;t=(...M)=>{m(...M),N()}}let B=S?new Array(e.length).fill(hn):hn;const p=m=>{if(!(!(a.flags&1)||!a.dirty&&!m))if(t){const M=a.run();if(r||_||(S?M.some((F,$)=>tt(F,B[$])):tt(M,B))){g&&g();const F=ut;ut=a;try{const $=[M,B===hn?void 0:S&&B[0]===hn?[]:B,v];c?c(t,3,$):t(...$),B=M}finally{ut=F}}}else a.run()};return l&&l(p),a=new wi(h),a.scheduler=o?()=>o(p,!1):p,v=m=>Kl(m,!1,a),g=a.onStop=()=>{const m=On.get(a);if(m){if(c)c(m,4);else for(const M of m)M();On.delete(a)}},t?s?p(!0):B=a.run():o?o(p.bind(null,!0),!0):a.run(),N.pause=a.pause.bind(a),N.resume=a.resume.bind(a),N.stop=N,N}function qe(e,t=1/0,n){if(t<=0||!ne(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,ae(e))qe(e.value,t,n);else if(K(e))for(let s=0;s{qe(s,t,n)});else if(pi(e)){for(const s in e)qe(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&qe(e[s],t,n)}return e}/** -* @vue/runtime-core v3.5.10 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function en(e,t,n,s){try{return s?e(...s):e()}catch(r){tn(r,t,n)}}function Fe(e,t,n,s){if(q(e)){const r=en(e,t,n,s);return r&&di(r)&&r.catch(i=>{tn(i,t,n)}),r}if(K(e)){const r=[];for(let i=0;i>>1,r=we[s],i=Gt(r);i=Gt(n)?we.push(e):we.splice(Yl(t),0,e),e.flags|=1,ji()}}function ji(){!qt&&!xs&&(xs=!0,Js=Di.then(Vi))}function Xl(e){K(e)?Ot.push(...e):Qe&&e.id===-1?Qe.splice(St+1,0,e):e.flags&1||(Ot.push(e),e.flags|=1),ji()}function _r(e,t,n=qt?je+1:0){for(;nGt(n)-Gt(s));if(Ot.length=0,Qe){Qe.push(...t);return}for(Qe=t,St=0;Ste.id==null?e.flags&2?-1:1/0:e.id;function Vi(e){xs=!1,qt=!0;try{for(je=0;je{s._d&&Nr(-1);const i=Pn(t);let o;try{o=e(...r)}finally{Pn(i),s._d&&Nr(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function If(e,t){if(de===null)return e;const n=Xn(de),s=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport,jt=e=>e&&(e.disabled||e.disabled===""),Jl=e=>e&&(e.defer||e.defer===""),wr=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Sr=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Ts=(e,t)=>{const n=e&&e.to;return re(n)?t?t(n):null:n},Ql={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,i,o,l,c,f){const{mc:a,pc:h,pbc:g,o:{insert:v,querySelector:_,createText:S,createComment:U}}=f,N=jt(t.props);let{shapeFlag:B,children:p,dynamicChildren:m}=t;if(e==null){const M=t.el=S(""),F=t.anchor=S("");v(M,n,s),v(F,n,s);const $=(R,b)=>{B&16&&(r&&r.isCE&&(r.ce._teleportTarget=R),a(p,R,b,r,i,o,l,c))},j=()=>{const R=t.target=Ts(t.props,_),b=Wi(R,t,S,v);R&&(o!=="svg"&&wr(R)?o="svg":o!=="mathml"&&Sr(R)&&(o="mathml"),N||($(R,b),xn(t)))};N&&($(n,F),xn(t)),Jl(t.props)?Ee(j,i):j()}else{t.el=e.el,t.targetStart=e.targetStart;const M=t.anchor=e.anchor,F=t.target=e.target,$=t.targetAnchor=e.targetAnchor,j=jt(e.props),R=j?n:F,b=j?M:$;if(o==="svg"||wr(F)?o="svg":(o==="mathml"||Sr(F))&&(o="mathml"),m?(g(e.dynamicChildren,m,R,r,i,o,l),sr(e,t,!0)):c||h(e,t,R,b,r,i,o,l,!1),N)j?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):pn(t,n,M,f,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const L=t.target=Ts(t.props,_);L&&pn(t,L,null,f,0)}else j&&pn(t,F,$,f,1);xn(t)}},remove(e,t,n,{um:s,o:{remove:r}},i){const{shapeFlag:o,children:l,anchor:c,targetStart:f,targetAnchor:a,target:h,props:g}=e;if(h&&(r(f),r(a)),i&&r(c),o&16){const v=i||!jt(g);for(let _=0;_{e.isMounted=!0}),Ji(()=>{e.isUnmounting=!0}),e}const Re=[Function,Array],Ki={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Re,onEnter:Re,onAfterEnter:Re,onEnterCancelled:Re,onBeforeLeave:Re,onLeave:Re,onAfterLeave:Re,onLeaveCancelled:Re,onBeforeAppear:Re,onAppear:Re,onAfterAppear:Re,onAppearCancelled:Re},qi=e=>{const t=e.subTree;return t.component?qi(t.component):t},tc={name:"BaseTransition",props:Ki,setup(e,{slots:t}){const n=Yn(),s=ec();return()=>{const r=t.default&&Xi(t.default(),!0);if(!r||!r.length)return;const i=Gi(r),o=z(e),{mode:l}=o;if(s.isLeaving)return ss(i);const c=Er(i);if(!c)return ss(i);let f=Cs(c,o,s,n,g=>f=g);c.type!==ye&&Yt(c,f);const a=n.subTree,h=a&&Er(a);if(h&&h.type!==ye&&!dt(c,h)&&qi(n).type!==ye){const g=Cs(h,o,s,n);if(Yt(h,g),l==="out-in"&&c.type!==ye)return s.isLeaving=!0,g.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete g.afterLeave},ss(i);l==="in-out"&&c.type!==ye&&(g.delayLeave=(v,_,S)=>{const U=Yi(s,h);U[String(h.key)]=h,v[Ze]=()=>{_(),v[Ze]=void 0,delete f.delayedLeave},f.delayedLeave=S})}return i}}};function Gi(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==ye){t=n;break}}return t}const nc=tc;function Yi(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Cs(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:f,onAfterEnter:a,onEnterCancelled:h,onBeforeLeave:g,onLeave:v,onAfterLeave:_,onLeaveCancelled:S,onBeforeAppear:U,onAppear:N,onAfterAppear:B,onAppearCancelled:p}=t,m=String(e.key),M=Yi(n,e),F=(R,b)=>{R&&Fe(R,s,9,b)},$=(R,b)=>{const L=b[1];F(R,b),K(R)?R.every(x=>x.length<=1)&&L():R.length<=1&&L()},j={mode:o,persisted:l,beforeEnter(R){let b=c;if(!n.isMounted)if(i)b=U||c;else return;R[Ze]&&R[Ze](!0);const L=M[m];L&&dt(e,L)&&L.el[Ze]&&L.el[Ze](),F(b,[R])},enter(R){let b=f,L=a,x=h;if(!n.isMounted)if(i)b=N||f,L=B||a,x=p||h;else return;let W=!1;const se=R[gn]=ce=>{W||(W=!0,ce?F(x,[R]):F(L,[R]),j.delayedLeave&&j.delayedLeave(),R[gn]=void 0)};b?$(b,[R,se]):se()},leave(R,b){const L=String(e.key);if(R[gn]&&R[gn](!0),n.isUnmounting)return b();F(g,[R]);let x=!1;const W=R[Ze]=se=>{x||(x=!0,b(),se?F(S,[R]):F(_,[R]),R[Ze]=void 0,M[L]===e&&delete M[L])};M[L]=e,v?$(v,[R,W]):W()},clone(R){const b=Cs(R,t,n,s,r);return r&&r(b),b}};return j}function ss(e){if(nn(e))return e=nt(e),e.children=null,e}function Er(e){if(!nn(e))return ki(e.type)&&e.children?Gi(e.children):e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&q(n.default))return n.default()}}function Yt(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Yt(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Xi(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;iIn(_,t&&(K(t)?t[S]:t),n,s,r));return}if(gt(s)&&!r)return;const i=s.shapeFlag&4?Xn(s.component):s.el,o=r?null:i,{i:l,r:c}=e,f=t&&t.r,a=l.refs===Z?l.refs={}:l.refs,h=l.setupState,g=z(h),v=h===Z?()=>!1:_=>J(g,_);if(f!=null&&f!==c&&(re(f)?(a[f]=null,v(f)&&(h[f]=null)):ae(f)&&(f.value=null)),q(c))en(c,l,12,[o,a]);else{const _=re(c),S=ae(c);if(_||S){const U=()=>{if(e.f){const N=_?v(c)?h[c]:a[c]:c.value;r?K(N)&&Ds(N,i):K(N)?N.includes(i)||N.push(i):_?(a[c]=[i],v(c)&&(h[c]=a[c])):(c.value=[i],e.k&&(a[e.k]=c.value))}else _?(a[c]=o,v(c)&&(h[c]=o)):S&&(c.value=o,e.k&&(a[e.k]=o))};o?(U.id=-1,Ee(U,n)):U()}}}let xr=!1;const wt=()=>{xr||(console.error("Hydration completed but contains mismatches."),xr=!0)},sc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",rc=e=>e.namespaceURI.includes("MathML"),mn=e=>{if(e.nodeType===1){if(sc(e))return"svg";if(rc(e))return"mathml"}},Tt=e=>e.nodeType===8;function ic(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:f}}=e,a=(p,m)=>{if(!m.hasChildNodes()){n(null,p,m),Mn(),m._vnode=p;return}h(m.firstChild,p,null,null,null),Mn(),m._vnode=p},h=(p,m,M,F,$,j=!1)=>{j=j||!!m.dynamicChildren;const R=Tt(p)&&p.data==="[",b=()=>S(p,m,M,F,$,R),{type:L,ref:x,shapeFlag:W,patchFlag:se}=m;let ce=p.nodeType;m.el=p,se===-2&&(j=!1,m.dynamicChildren=null);let V=null;switch(L){case mt:ce!==3?m.children===""?(c(m.el=r(""),o(p),p),V=p):V=b():(p.data!==m.children&&(wt(),p.data=m.children),V=i(p));break;case ye:B(p)?(V=i(p),N(m.el=p.content.firstChild,p,M)):ce!==8||R?V=b():V=i(p);break;case Ut:if(R&&(p=i(p),ce=p.nodeType),ce===1||ce===3){V=p;const Y=!m.children.length;for(let D=0;D{j=j||!!m.dynamicChildren;const{type:R,props:b,patchFlag:L,shapeFlag:x,dirs:W,transition:se}=m,ce=R==="input"||R==="option";if(ce||L!==-1){W&&Ve(m,null,M,"created");let V=!1;if(B(p)){V=go(F,se)&&M&&M.vnode.props&&M.vnode.props.appear;const D=p.content.firstChild;V&&se.beforeEnter(D),N(D,p,M),m.el=p=D}if(x&16&&!(b&&(b.innerHTML||b.textContent))){let D=v(p.firstChild,m,p,M,F,$,j);for(;D;){yn(p,1)||wt();const he=D;D=D.nextSibling,l(he)}}else if(x&8){let D=m.children;D[0]===` -`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&(D=D.slice(1)),p.textContent!==D&&(yn(p,0)||wt(),p.textContent=m.children)}if(b){if(ce||!j||L&48){const D=p.tagName.includes("-");for(const he in b)(ce&&(he.endsWith("value")||he==="indeterminate")||Zt(he)&&!Rt(he)||he[0]==="."||D)&&s(p,he,null,b[he],void 0,M)}else if(b.onClick)s(p,"onClick",null,b.onClick,void 0,M);else if(L&4&&pt(b.style))for(const D in b.style)b.style[D]}let Y;(Y=b&&b.onVnodeBeforeMount)&&Oe(Y,M,m),W&&Ve(m,null,M,"beforeMount"),((Y=b&&b.onVnodeMounted)||W||V)&&_o(()=>{Y&&Oe(Y,M,m),V&&se.enter(p),W&&Ve(m,null,M,"mounted")},F)}return p.nextSibling},v=(p,m,M,F,$,j,R)=>{R=R||!!m.dynamicChildren;const b=m.children,L=b.length;for(let x=0;x{const{slotScopeIds:R}=m;R&&($=$?$.concat(R):R);const b=o(p),L=v(i(p),m,b,M,F,$,j);return L&&Tt(L)&&L.data==="]"?i(m.anchor=L):(wt(),c(m.anchor=f("]"),b,L),L)},S=(p,m,M,F,$,j)=>{if(yn(p.parentElement,1)||wt(),m.el=null,j){const L=U(p);for(;;){const x=i(p);if(x&&x!==L)l(x);else break}}const R=i(p),b=o(p);return l(p),n(null,m,b,R,M,F,mn(b),$),R},U=(p,m="[",M="]")=>{let F=0;for(;p;)if(p=i(p),p&&Tt(p)&&(p.data===m&&F++,p.data===M)){if(F===0)return i(p);F--}return p},N=(p,m,M)=>{const F=m.parentNode;F&&F.replaceChild(p,m);let $=M;for(;$;)$.vnode.el===m&&($.vnode.el=$.subTree.el=p),$=$.parent},B=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[a,h]}const Tr="data-allow-mismatch",oc={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function yn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Tr);)e=e.parentElement;const n=e&&e.getAttribute(Tr);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:n.split(",").includes(oc[t])}}function lc(e,t){if(Tt(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(Tt(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const gt=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Nf(e){q(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:i,timeout:o,suspensible:l=!0,onError:c}=e;let f=null,a,h=0;const g=()=>(h++,f=null,v()),v=()=>{let _;return f||(_=f=t().catch(S=>{if(S=S instanceof Error?S:new Error(String(S)),c)return new Promise((U,N)=>{c(S,()=>U(g()),()=>N(S),h+1)});throw S}).then(S=>_!==f&&f?f:(S&&(S.__esModule||S[Symbol.toStringTag]==="Module")&&(S=S.default),a=S,S)))};return Zs({name:"AsyncComponentWrapper",__asyncLoader:v,__asyncHydrate(_,S,U){const N=i?()=>{const B=i(U,p=>lc(_,p));B&&(S.bum||(S.bum=[])).push(B)}:U;a?N():v().then(()=>!S.isUnmounted&&N())},get __asyncResolved(){return a},setup(){const _=ue;if(er(_),a)return()=>rs(a,_);const S=p=>{f=null,tn(p,_,13,!s)};if(l&&_.suspense||rn)return v().then(p=>()=>rs(p,_)).catch(p=>(S(p),()=>s?le(s,{error:p}):null));const U=oe(!1),N=oe(),B=oe(!!r);return r&&setTimeout(()=>{B.value=!1},r),o!=null&&setTimeout(()=>{if(!U.value&&!N.value){const p=new Error(`Async component timed out after ${o}ms.`);S(p),N.value=p}},o),v().then(()=>{U.value=!0,_.parent&&nn(_.parent.vnode)&&_.parent.update()}).catch(p=>{S(p),N.value=p}),()=>{if(U.value&&a)return rs(a,_);if(N.value&&s)return le(s,{error:N.value});if(n&&!B.value)return le(n)}}})}function rs(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=le(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const nn=e=>e.type.__isKeepAlive;function cc(e,t){zi(e,"a",t)}function ac(e,t){zi(e,"da",t)}function zi(e,t,n=ue){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Wn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)nn(r.parent.vnode)&&fc(s,t,n,r),r=r.parent}}function fc(e,t,n,s){const r=Wn(t,e,s,!0);Kn(()=>{Ds(s[t],r)},n)}function Wn(e,t,n=ue,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{it();const l=sn(n),c=Fe(t,n,e,o);return l(),ot(),c});return s?r.unshift(i):r.push(i),i}}const Ye=e=>(t,n=ue)=>{(!rn||e==="sp")&&Wn(e,(...s)=>t(...s),n)},uc=Ye("bm"),Lt=Ye("m"),dc=Ye("bu"),hc=Ye("u"),Ji=Ye("bum"),Kn=Ye("um"),pc=Ye("sp"),gc=Ye("rtg"),mc=Ye("rtc");function yc(e,t=ue){Wn("ec",e,t)}const Qi="components";function Ff(e,t){return eo(Qi,e,!0,t)||e}const Zi=Symbol.for("v-ndc");function Hf(e){return re(e)?eo(Qi,e,!1)||e:e||Zi}function eo(e,t,n=!0,s=!1){const r=de||ue;if(r){const i=r.type;{const l=na(i,!1);if(l&&(l===t||l===Ie(t)||l===$n(Ie(t))))return i}const o=Cr(r[e]||i[e],t)||Cr(r.appContext[e],t);return!o&&s?i:o}}function Cr(e,t){return e&&(e[t]||e[Ie(t)]||e[$n(Ie(t))])}function $f(e,t,n,s){let r;const i=n,o=K(e);if(o||re(e)){const l=o&&pt(e);let c=!1;l&&(c=!Pe(e),e=jn(e)),r=new Array(e.length);for(let f=0,a=e.length;ft(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,f=l.length;czt(t)?!(t.type===ye||t.type===Se&&!to(t.children)):!0)?e:null}function jf(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:wn(s)]=e[s];return n}const As=e=>e?To(e)?Xn(e):As(e.parent):null,Vt=fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>As(e.parent),$root:e=>As(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>tr(e),$forceUpdate:e=>e.f||(e.f=()=>{Qs(e.update)}),$nextTick:e=>e.n||(e.n=kn.bind(e.proxy)),$watch:e=>jc.bind(e)}),is=(e,t)=>e!==Z&&!e.__isScriptSetup&&J(e,t),vc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let f;if(t[0]!=="$"){const v=o[t];if(v!==void 0)switch(v){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(is(s,t))return o[t]=1,s[t];if(r!==Z&&J(r,t))return o[t]=2,r[t];if((f=e.propsOptions[0])&&J(f,t))return o[t]=3,i[t];if(n!==Z&&J(n,t))return o[t]=4,n[t];Rs&&(o[t]=0)}}const a=Vt[t];let h,g;if(a)return t==="$attrs"&&ve(e.attrs,"get",""),a(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==Z&&J(n,t))return o[t]=4,n[t];if(g=c.config.globalProperties,J(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return is(r,t)?(r[t]=n,!0):s!==Z&&J(s,t)?(s[t]=n,!0):J(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==Z&&J(e,o)||is(t,o)||(l=i[0])&&J(l,o)||J(s,o)||J(Vt,o)||J(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:J(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Vf(){return bc().slots}function bc(){const e=Yn();return e.setupContext||(e.setupContext=Ao(e))}function Ar(e){return K(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Rs=!0;function _c(e){const t=tr(e),n=e.proxy,s=e.ctx;Rs=!1,t.beforeCreate&&Rr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:f,created:a,beforeMount:h,mounted:g,beforeUpdate:v,updated:_,activated:S,deactivated:U,beforeDestroy:N,beforeUnmount:B,destroyed:p,unmounted:m,render:M,renderTracked:F,renderTriggered:$,errorCaptured:j,serverPrefetch:R,expose:b,inheritAttrs:L,components:x,directives:W,filters:se}=t;if(f&&wc(f,s,null),o)for(const Y in o){const D=o[Y];q(D)&&(s[Y]=D.bind(n))}if(r){const Y=r.call(n,n);ne(Y)&&(e.data=Un(Y))}if(Rs=!0,i)for(const Y in i){const D=i[Y],he=q(D)?D.bind(n,n):q(D.get)?D.get.bind(n,n):Ue,on=!q(D)&&q(D.set)?D.set.bind(n):Ue,lt=ie({get:he,set:on});Object.defineProperty(s,Y,{enumerable:!0,configurable:!0,get:()=>lt.value,set:$e=>lt.value=$e})}if(l)for(const Y in l)no(l[Y],s,n,Y);if(c){const Y=q(c)?c.call(n):c;Reflect.ownKeys(Y).forEach(D=>{Ac(D,Y[D])})}a&&Rr(a,e,"c");function V(Y,D){K(D)?D.forEach(he=>Y(he.bind(n))):D&&Y(D.bind(n))}if(V(uc,h),V(Lt,g),V(dc,v),V(hc,_),V(cc,S),V(ac,U),V(yc,j),V(mc,F),V(gc,$),V(Ji,B),V(Kn,m),V(pc,R),K(b))if(b.length){const Y=e.exposed||(e.exposed={});b.forEach(D=>{Object.defineProperty(Y,D,{get:()=>n[D],set:he=>n[D]=he})})}else e.exposed||(e.exposed={});M&&e.render===Ue&&(e.render=M),L!=null&&(e.inheritAttrs=L),x&&(e.components=x),W&&(e.directives=W),R&&er(e)}function wc(e,t,n=Ue){K(e)&&(e=Os(e));for(const s in e){const r=e[s];let i;ne(r)?"default"in r?i=Pt(r.from||s,r.default,!0):i=Pt(r.from||s):i=Pt(r),ae(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Rr(e,t,n){Fe(K(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function no(e,t,n,s){let r=s.includes(".")?yo(n,s):()=>n[s];if(re(e)){const i=t[e];q(i)&&Be(r,i)}else if(q(e))Be(r,e.bind(n));else if(ne(e))if(K(e))e.forEach(i=>no(i,t,n,s));else{const i=q(e.handler)?e.handler.bind(n):t[e.handler];q(i)&&Be(r,i,e)}}function tr(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>Ln(c,f,o,!0)),Ln(c,t,o)),ne(t)&&i.set(t,c),c}function Ln(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Ln(e,i,n,!0),r&&r.forEach(o=>Ln(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Sc[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Sc={data:Or,props:Mr,emits:Mr,methods:Dt,computed:Dt,beforeCreate:be,created:be,beforeMount:be,mounted:be,beforeUpdate:be,updated:be,beforeDestroy:be,beforeUnmount:be,destroyed:be,unmounted:be,activated:be,deactivated:be,errorCaptured:be,serverPrefetch:be,components:Dt,directives:Dt,watch:xc,provide:Or,inject:Ec};function Or(e,t){return t?e?function(){return fe(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function Ec(e,t){return Dt(Os(e),Os(t))}function Os(e){if(K(e)){const t={};for(let n=0;n1)return n&&q(t)?t.call(s&&s.proxy):t}}const ro={},io=()=>Object.create(ro),oo=e=>Object.getPrototypeOf(e)===ro;function Rc(e,t,n,s=!1){const r={},i=io();e.propsDefaults=Object.create(null),lo(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Nl(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Oc(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=z(r),[c]=e.propsOptions;let f=!1;if((s||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[g,v]=co(h,t,!0);fe(o,g),v&&l.push(...v)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return ne(e)&&s.set(e,Ct),Ct;if(K(i))for(let a=0;ae[0]==="_"||e==="$stable",nr=e=>K(e)?e.map(Me):[Me(e)],Pc=(e,t,n)=>{if(t._n)return t;const s=zl((...r)=>nr(t(...r)),n);return s._c=!1,s},fo=(e,t,n)=>{const s=e._ctx;for(const r in e){if(ao(r))continue;const i=e[r];if(q(i))t[r]=Pc(r,i,s);else if(i!=null){const o=nr(i);t[r]=()=>o}}},uo=(e,t)=>{const n=nr(t);e.slots.default=()=>n},ho=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},Ic=(e,t,n)=>{const s=e.slots=io();if(e.vnode.shapeFlag&32){const r=t._;r?(ho(s,t,n),n&&gi(s,"_",r,!0)):fo(t,s)}else t&&uo(e,t)},Lc=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=Z;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:ho(r,t,n):(i=!t.$stable,fo(t,r)),o=t}else t&&(uo(e,t),o={default:1});if(i)for(const l in r)!ao(l)&&o[l]==null&&delete r[l]},Ee=_o;function Nc(e){return po(e)}function Fc(e){return po(e,ic)}function po(e,t){const n=mi();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:a,parentNode:h,nextSibling:g,setScopeId:v=Ue,insertStaticContent:_}=e,S=(u,d,y,T=null,w=null,E=null,P=void 0,O=null,A=!!d.dynamicChildren)=>{if(u===d)return;u&&!dt(u,d)&&(T=ln(u),$e(u,w,E,!0),u=null),d.patchFlag===-2&&(A=!1,d.dynamicChildren=null);const{type:C,ref:k,shapeFlag:I}=d;switch(C){case mt:U(u,d,y,T);break;case ye:N(u,d,y,T);break;case Ut:u==null&&B(d,y,T,P);break;case Se:x(u,d,y,T,w,E,P,O,A);break;default:I&1?M(u,d,y,T,w,E,P,O,A):I&6?W(u,d,y,T,w,E,P,O,A):(I&64||I&128)&&C.process(u,d,y,T,w,E,P,O,A,bt)}k!=null&&w&&In(k,u&&u.ref,E,d||u,!d)},U=(u,d,y,T)=>{if(u==null)s(d.el=l(d.children),y,T);else{const w=d.el=u.el;d.children!==u.children&&f(w,d.children)}},N=(u,d,y,T)=>{u==null?s(d.el=c(d.children||""),y,T):d.el=u.el},B=(u,d,y,T)=>{[u.el,u.anchor]=_(u.children,d,y,T,u.el,u.anchor)},p=({el:u,anchor:d},y,T)=>{let w;for(;u&&u!==d;)w=g(u),s(u,y,T),u=w;s(d,y,T)},m=({el:u,anchor:d})=>{let y;for(;u&&u!==d;)y=g(u),r(u),u=y;r(d)},M=(u,d,y,T,w,E,P,O,A)=>{d.type==="svg"?P="svg":d.type==="math"&&(P="mathml"),u==null?F(d,y,T,w,E,P,O,A):R(u,d,w,E,P,O,A)},F=(u,d,y,T,w,E,P,O)=>{let A,C;const{props:k,shapeFlag:I,transition:H,dirs:G}=u;if(A=u.el=o(u.type,E,k&&k.is,k),I&8?a(A,u.children):I&16&&j(u.children,A,null,T,w,os(u,E),P,O),G&&Ve(u,null,T,"created"),$(A,u,u.scopeId,P,T),k){for(const ee in k)ee!=="value"&&!Rt(ee)&&i(A,ee,null,k[ee],E,T);"value"in k&&i(A,"value",null,k.value,E),(C=k.onVnodeBeforeMount)&&Oe(C,T,u)}G&&Ve(u,null,T,"beforeMount");const X=go(w,H);X&&H.beforeEnter(A),s(A,d,y),((C=k&&k.onVnodeMounted)||X||G)&&Ee(()=>{C&&Oe(C,T,u),X&&H.enter(A),G&&Ve(u,null,T,"mounted")},w)},$=(u,d,y,T,w)=>{if(y&&v(u,y),T)for(let E=0;E{for(let C=A;C{const O=d.el=u.el;let{patchFlag:A,dynamicChildren:C,dirs:k}=d;A|=u.patchFlag&16;const I=u.props||Z,H=d.props||Z;let G;if(y&&ct(y,!1),(G=H.onVnodeBeforeUpdate)&&Oe(G,y,d,u),k&&Ve(d,u,y,"beforeUpdate"),y&&ct(y,!0),(I.innerHTML&&H.innerHTML==null||I.textContent&&H.textContent==null)&&a(O,""),C?b(u.dynamicChildren,C,O,y,T,os(d,w),E):P||D(u,d,O,null,y,T,os(d,w),E,!1),A>0){if(A&16)L(O,I,H,y,w);else if(A&2&&I.class!==H.class&&i(O,"class",null,H.class,w),A&4&&i(O,"style",I.style,H.style,w),A&8){const X=d.dynamicProps;for(let ee=0;ee{G&&Oe(G,y,d,u),k&&Ve(d,u,y,"updated")},T)},b=(u,d,y,T,w,E,P)=>{for(let O=0;O{if(d!==y){if(d!==Z)for(const E in d)!Rt(E)&&!(E in y)&&i(u,E,d[E],null,w,T);for(const E in y){if(Rt(E))continue;const P=y[E],O=d[E];P!==O&&E!=="value"&&i(u,E,O,P,w,T)}"value"in y&&i(u,"value",d.value,y.value,w)}},x=(u,d,y,T,w,E,P,O,A)=>{const C=d.el=u?u.el:l(""),k=d.anchor=u?u.anchor:l("");let{patchFlag:I,dynamicChildren:H,slotScopeIds:G}=d;G&&(O=O?O.concat(G):G),u==null?(s(C,y,T),s(k,y,T),j(d.children||[],y,k,w,E,P,O,A)):I>0&&I&64&&H&&u.dynamicChildren?(b(u.dynamicChildren,H,y,w,E,P,O),(d.key!=null||w&&d===w.subTree)&&sr(u,d,!0)):D(u,d,y,k,w,E,P,O,A)},W=(u,d,y,T,w,E,P,O,A)=>{d.slotScopeIds=O,u==null?d.shapeFlag&512?w.ctx.activate(d,y,T,P,A):se(d,y,T,w,E,P,A):ce(u,d,A)},se=(u,d,y,T,w,E,P)=>{const O=u.component=Qc(u,T,w);if(nn(u)&&(O.ctx.renderer=bt),Zc(O,!1,P),O.asyncDep){if(w&&w.registerDep(O,V,P),!u.el){const A=O.subTree=le(ye);N(null,A,d,y)}}else V(O,u,d,y,w,E,P)},ce=(u,d,y)=>{const T=d.component=u.component;if(Wc(u,d,y))if(T.asyncDep&&!T.asyncResolved){Y(T,d,y);return}else T.next=d,T.update();else d.el=u.el,T.vnode=d},V=(u,d,y,T,w,E,P)=>{const O=()=>{if(u.isMounted){let{next:I,bu:H,u:G,parent:X,vnode:ee}=u;{const Te=mo(u);if(Te){I&&(I.el=ee.el,Y(u,I,P)),Te.asyncDep.then(()=>{u.isUnmounted||O()});return}}let Q=I,xe;ct(u,!1),I?(I.el=ee.el,Y(u,I,P)):I=ee,H&&Sn(H),(xe=I.props&&I.props.onVnodeBeforeUpdate)&&Oe(xe,X,I,ee),ct(u,!0);const pe=ls(u),Le=u.subTree;u.subTree=pe,S(Le,pe,h(Le.el),ln(Le),u,w,E),I.el=pe.el,Q===null&&Kc(u,pe.el),G&&Ee(G,w),(xe=I.props&&I.props.onVnodeUpdated)&&Ee(()=>Oe(xe,X,I,ee),w)}else{let I;const{el:H,props:G}=d,{bm:X,m:ee,parent:Q,root:xe,type:pe}=u,Le=gt(d);if(ct(u,!1),X&&Sn(X),!Le&&(I=G&&G.onVnodeBeforeMount)&&Oe(I,Q,d),ct(u,!0),H&&Qn){const Te=()=>{u.subTree=ls(u),Qn(H,u.subTree,u,w,null)};Le&&pe.__asyncHydrate?pe.__asyncHydrate(H,u,Te):Te()}else{xe.ce&&xe.ce._injectChildStyle(pe);const Te=u.subTree=ls(u);S(null,Te,y,T,u,w,E),d.el=Te.el}if(ee&&Ee(ee,w),!Le&&(I=G&&G.onVnodeMounted)){const Te=d;Ee(()=>Oe(I,Q,Te),w)}(d.shapeFlag&256||Q&>(Q.vnode)&&Q.vnode.shapeFlag&256)&&u.a&&Ee(u.a,w),u.isMounted=!0,d=y=T=null}};u.scope.on();const A=u.effect=new wi(O);u.scope.off();const C=u.update=A.run.bind(A),k=u.job=A.runIfDirty.bind(A);k.i=u,k.id=u.uid,A.scheduler=()=>Qs(k),ct(u,!0),C()},Y=(u,d,y)=>{d.component=u;const T=u.vnode.props;u.vnode=d,u.next=null,Oc(u,d.props,T,y),Lc(u,d.children,y),it(),_r(u),ot()},D=(u,d,y,T,w,E,P,O,A=!1)=>{const C=u&&u.children,k=u?u.shapeFlag:0,I=d.children,{patchFlag:H,shapeFlag:G}=d;if(H>0){if(H&128){on(C,I,y,T,w,E,P,O,A);return}else if(H&256){he(C,I,y,T,w,E,P,O,A);return}}G&8?(k&16&&Nt(C,w,E),I!==C&&a(y,I)):k&16?G&16?on(C,I,y,T,w,E,P,O,A):Nt(C,w,E,!0):(k&8&&a(y,""),G&16&&j(I,y,T,w,E,P,O,A))},he=(u,d,y,T,w,E,P,O,A)=>{u=u||Ct,d=d||Ct;const C=u.length,k=d.length,I=Math.min(C,k);let H;for(H=0;Hk?Nt(u,w,E,!0,!1,I):j(d,y,T,w,E,P,O,A,I)},on=(u,d,y,T,w,E,P,O,A)=>{let C=0;const k=d.length;let I=u.length-1,H=k-1;for(;C<=I&&C<=H;){const G=u[C],X=d[C]=A?et(d[C]):Me(d[C]);if(dt(G,X))S(G,X,y,null,w,E,P,O,A);else break;C++}for(;C<=I&&C<=H;){const G=u[I],X=d[H]=A?et(d[H]):Me(d[H]);if(dt(G,X))S(G,X,y,null,w,E,P,O,A);else break;I--,H--}if(C>I){if(C<=H){const G=H+1,X=GH)for(;C<=I;)$e(u[C],w,E,!0),C++;else{const G=C,X=C,ee=new Map;for(C=X;C<=H;C++){const Ce=d[C]=A?et(d[C]):Me(d[C]);Ce.key!=null&&ee.set(Ce.key,C)}let Q,xe=0;const pe=H-X+1;let Le=!1,Te=0;const Ft=new Array(pe);for(C=0;C=pe){$e(Ce,w,E,!0);continue}let De;if(Ce.key!=null)De=ee.get(Ce.key);else for(Q=X;Q<=H;Q++)if(Ft[Q-X]===0&&dt(Ce,d[Q])){De=Q;break}De===void 0?$e(Ce,w,E,!0):(Ft[De-X]=C+1,De>=Te?Te=De:Le=!0,S(Ce,d[De],y,null,w,E,P,O,A),xe++)}const ur=Le?Hc(Ft):Ct;for(Q=ur.length-1,C=pe-1;C>=0;C--){const Ce=X+C,De=d[Ce],dr=Ce+1{const{el:E,type:P,transition:O,children:A,shapeFlag:C}=u;if(C&6){lt(u.component.subTree,d,y,T);return}if(C&128){u.suspense.move(d,y,T);return}if(C&64){P.move(u,d,y,bt);return}if(P===Se){s(E,d,y);for(let I=0;IO.enter(E),w);else{const{leave:I,delayLeave:H,afterLeave:G}=O,X=()=>s(E,d,y),ee=()=>{I(E,()=>{X(),G&&G()})};H?H(E,X,ee):ee()}else s(E,d,y)},$e=(u,d,y,T=!1,w=!1)=>{const{type:E,props:P,ref:O,children:A,dynamicChildren:C,shapeFlag:k,patchFlag:I,dirs:H,cacheIndex:G}=u;if(I===-2&&(w=!1),O!=null&&In(O,null,y,u,!0),G!=null&&(d.renderCache[G]=void 0),k&256){d.ctx.deactivate(u);return}const X=k&1&&H,ee=!gt(u);let Q;if(ee&&(Q=P&&P.onVnodeBeforeUnmount)&&Oe(Q,d,u),k&6)zo(u.component,y,T);else{if(k&128){u.suspense.unmount(y,T);return}X&&Ve(u,null,d,"beforeUnmount"),k&64?u.type.remove(u,d,y,bt,T):C&&!C.hasOnce&&(E!==Se||I>0&&I&64)?Nt(C,d,y,!1,!0):(E===Se&&I&384||!w&&k&16)&&Nt(A,d,y),T&&ar(u)}(ee&&(Q=P&&P.onVnodeUnmounted)||X)&&Ee(()=>{Q&&Oe(Q,d,u),X&&Ve(u,null,d,"unmounted")},y)},ar=u=>{const{type:d,el:y,anchor:T,transition:w}=u;if(d===Se){Xo(y,T);return}if(d===Ut){m(u);return}const E=()=>{r(y),w&&!w.persisted&&w.afterLeave&&w.afterLeave()};if(u.shapeFlag&1&&w&&!w.persisted){const{leave:P,delayLeave:O}=w,A=()=>P(y,E);O?O(u.el,E,A):A()}else E()},Xo=(u,d)=>{let y;for(;u!==d;)y=g(u),r(u),u=y;r(d)},zo=(u,d,y)=>{const{bum:T,scope:w,job:E,subTree:P,um:O,m:A,a:C}=u;Ir(A),Ir(C),T&&Sn(T),w.stop(),E&&(E.flags|=8,$e(P,u,d,y)),O&&Ee(O,d),Ee(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},Nt=(u,d,y,T=!1,w=!1,E=0)=>{for(let P=E;P{if(u.shapeFlag&6)return ln(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=g(u.anchor||u.el),y=d&&d[Bi];return y?g(y):d};let zn=!1;const fr=(u,d,y)=>{u==null?d._vnode&&$e(d._vnode,null,null,!0):S(d._vnode||null,u,d,null,null,null,y),d._vnode=u,zn||(zn=!0,_r(),Mn(),zn=!1)},bt={p:S,um:$e,m:lt,r:ar,mt:se,mc:j,pc:D,pbc:b,n:ln,o:e};let Jn,Qn;return t&&([Jn,Qn]=t(bt)),{render:fr,hydrate:Jn,createApp:Cc(fr,Jn)}}function os({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function ct({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function go(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function sr(e,t,n=!1){const s=e.children,r=t.children;if(K(s)&&K(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function mo(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:mo(t)}function Ir(e){if(e)for(let t=0;tPt($c);function rr(e,t){return qn(e,null,t)}function Uf(e,t){return qn(e,null,{flush:"post"})}function Be(e,t,n){return qn(e,t,n)}function qn(e,t,n=Z){const{immediate:s,deep:r,flush:i,once:o}=n,l=fe({},n);let c;if(rn)if(i==="sync"){const g=Dc();c=g.__watcherHandles||(g.__watcherHandles=[])}else if(!t||s)l.once=!0;else{const g=()=>{};return g.stop=Ue,g.resume=Ue,g.pause=Ue,g}const f=ue;l.call=(g,v,_)=>Fe(g,f,v,_);let a=!1;i==="post"?l.scheduler=g=>{Ee(g,f&&f.suspense)}:i!=="sync"&&(a=!0,l.scheduler=(g,v)=>{v?g():Qs(g)}),l.augmentJob=g=>{t&&(g.flags|=4),a&&(g.flags|=2,f&&(g.id=f.uid,g.i=f))};const h=ql(e,t,l);return c&&c.push(h),h}function jc(e,t,n){const s=this.proxy,r=re(e)?e.includes(".")?yo(s,e):()=>s[e]:e.bind(s,s);let i;q(t)?i=t:(i=t.handler,n=t);const o=sn(this),l=qn(r,i.bind(s),n);return o(),l}function yo(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ie(t)}Modifiers`]||e[`${rt(t)}Modifiers`];function Uc(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Z;let r=n;const i=t.startsWith("update:"),o=i&&Vc(s,t.slice(7));o&&(o.trim&&(r=n.map(a=>re(a)?a.trim():a)),o.number&&(r=n.map(ws)));let l,c=s[l=wn(t)]||s[l=wn(Ie(t))];!c&&i&&(c=s[l=wn(rt(t))]),c&&Fe(c,e,6,r);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Fe(f,e,6,r)}}function vo(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!q(e)){const c=f=>{const a=vo(f,t,!0);a&&(l=!0,fe(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ne(e)&&s.set(e,null),null):(K(i)?i.forEach(c=>o[c]=null):fe(o,i),ne(e)&&s.set(e,o),o)}function Gn(e,t){return!e||!Zt(t)?!1:(t=t.slice(2).replace(/Once$/,""),J(e,t[0].toLowerCase()+t.slice(1))||J(e,rt(t))||J(e,t))}function ls(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:f,renderCache:a,props:h,data:g,setupState:v,ctx:_,inheritAttrs:S}=e,U=Pn(e);let N,B;try{if(n.shapeFlag&4){const m=r||s,M=m;N=Me(f.call(M,m,a,h,v,g,_)),B=l}else{const m=t;N=Me(m.length>1?m(h,{attrs:l,slots:o,emit:c}):m(h,null)),B=t.props?l:Bc(l)}}catch(m){Bt.length=0,tn(m,e,1),N=le(ye)}let p=N;if(B&&S!==!1){const m=Object.keys(B),{shapeFlag:M}=p;m.length&&M&7&&(i&&m.some($s)&&(B=kc(B,i)),p=nt(p,B,!1,!0))}return n.dirs&&(p=nt(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&Yt(p,n.transition),N=p,Pn(U),N}const Bc=e=>{let t;for(const n in e)(n==="class"||n==="style"||Zt(n))&&((t||(t={}))[n]=e[n]);return t},kc=(e,t)=>{const n={};for(const s in e)(!$s(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Wc(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Lr(s,o,f):!!o;if(c&8){const a=t.dynamicProps;for(let h=0;he.__isSuspense;function _o(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):Xl(e)}const Se=Symbol.for("v-fgt"),mt=Symbol.for("v-txt"),ye=Symbol.for("v-cmt"),Ut=Symbol.for("v-stc"),Bt=[];let Ae=null;function Ps(e=!1){Bt.push(Ae=e?null:[])}function qc(){Bt.pop(),Ae=Bt[Bt.length-1]||null}let Xt=1;function Nr(e){Xt+=e,e<0&&Ae&&(Ae.hasOnce=!0)}function wo(e){return e.dynamicChildren=Xt>0?Ae||Ct:null,qc(),Xt>0&&Ae&&Ae.push(e),e}function Bf(e,t,n,s,r,i){return wo(Eo(e,t,n,s,r,i,!0))}function Is(e,t,n,s,r){return wo(le(e,t,n,s,r,!0))}function zt(e){return e?e.__v_isVNode===!0:!1}function dt(e,t){return e.type===t.type&&e.key===t.key}const So=({key:e})=>e??null,Tn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?re(e)||ae(e)||q(e)?{i:de,r:e,k:t,f:!!n}:e:null);function Eo(e,t=null,n=null,s=0,r=null,i=e===Se?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&So(t),ref:t&&Tn(t),scopeId:Ui,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:de};return l?(ir(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=re(n)?8:16),Xt>0&&!o&&Ae&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ae.push(c),c}const le=Gc;function Gc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Zi)&&(e=ye),zt(e)){const l=nt(e,t,!0);return n&&ir(l,n),Xt>0&&!i&&Ae&&(l.shapeFlag&6?Ae[Ae.indexOf(e)]=l:Ae.push(l)),l.patchFlag=-2,l}if(sa(e)&&(e=e.__vccOpts),t){t=Yc(t);let{class:l,style:c}=t;l&&!re(l)&&(t.class=Us(l)),ne(c)&&(Ys(c)&&!K(c)&&(c=fe({},c)),t.style=Vs(c))}const o=re(e)?1:bo(e)?128:ki(e)?64:ne(e)?4:q(e)?2:0;return Eo(e,t,n,s,r,o,i,!0)}function Yc(e){return e?Ys(e)||oo(e)?fe({},e):e:null}function nt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,f=t?Xc(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&So(f),ref:t&&t.ref?n&&i?K(i)?i.concat(Tn(t)):[i,Tn(t)]:Tn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Se?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&nt(e.ssContent),ssFallback:e.ssFallback&&nt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&Yt(a,c.clone(a)),a}function xo(e=" ",t=0){return le(mt,null,e,t)}function kf(e,t){const n=le(Ut,null,e);return n.staticCount=t,n}function Wf(e="",t=!1){return t?(Ps(),Is(ye,null,e)):le(ye,null,e)}function Me(e){return e==null||typeof e=="boolean"?le(ye):K(e)?le(Se,null,e.slice()):zt(e)?et(e):le(mt,null,String(e))}function et(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:nt(e)}function ir(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),ir(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!oo(t)?t._ctx=de:r===3&&de&&(de.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else q(t)?(t={default:t,_ctx:de},n=32):(t=String(t),s&64?(n=16,t=[xo(t)]):n=8);e.children=t,e.shapeFlag|=n}function Xc(...e){const t={};for(let n=0;nue||de;let Nn,Ls;{const e=mi(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Nn=t("__VUE_INSTANCE_SETTERS__",n=>ue=n),Ls=t("__VUE_SSR_SETTERS__",n=>rn=n)}const sn=e=>{const t=ue;return Nn(e),e.scope.on(),()=>{e.scope.off(),Nn(t)}},Fr=()=>{ue&&ue.scope.off(),Nn(null)};function To(e){return e.vnode.shapeFlag&4}let rn=!1;function Zc(e,t=!1,n=!1){t&&Ls(t);const{props:s,children:r}=e.vnode,i=To(e);Rc(e,s,i,t),Ic(e,r,n);const o=i?ea(e,t):void 0;return t&&Ls(!1),o}function ea(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,vc);const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?Ao(e):null,i=sn(e);it();const o=en(s,e,0,[e.props,r]);if(ot(),i(),di(o)){if(gt(e)||er(e),o.then(Fr,Fr),t)return o.then(l=>{Hr(e,l,t)}).catch(l=>{tn(l,e,0)});e.asyncDep=o}else Hr(e,o,t)}else Co(e,t)}function Hr(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ne(t)&&(e.setupState=$i(t)),Co(e,n)}let $r;function Co(e,t,n){const s=e.type;if(!e.render){if(!t&&$r&&!s.render){const r=s.template||tr(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,f=fe(fe({isCustomElement:i,delimiters:l},o),c);s.render=$r(r,f)}}e.render=s.render||Ue}{const r=sn(e);it();try{_c(e)}finally{ot(),r()}}}const ta={get(e,t){return ve(e,"get",""),e[t]}};function Ao(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,ta),slots:e.slots,emit:e.emit,expose:t}}function Xn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy($i(En(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Vt)return Vt[n](e)},has(t,n){return n in t||n in Vt}})):e.proxy}function na(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function sa(e){return q(e)&&"__vccOpts"in e}const ie=(e,t)=>Wl(e,t,rn);function Ns(e,t,n){const s=arguments.length;return s===2?ne(t)&&!K(t)?zt(t)?le(e,null,[t]):le(e,t):le(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&zt(n)&&(n=[n]),le(e,t,n))}const ra="3.5.10";/** -* @vue/runtime-dom v3.5.10 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let Fs;const Dr=typeof window<"u"&&window.trustedTypes;if(Dr)try{Fs=Dr.createPolicy("vue",{createHTML:e=>e})}catch{}const Ro=Fs?e=>Fs.createHTML(e):e=>e,ia="http://www.w3.org/2000/svg",oa="http://www.w3.org/1998/Math/MathML",Ke=typeof document<"u"?document:null,jr=Ke&&Ke.createElement("template"),la={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Ke.createElementNS(ia,e):t==="mathml"?Ke.createElementNS(oa,e):n?Ke.createElement(e,{is:n}):Ke.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Ke.createTextNode(e),createComment:e=>Ke.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ke.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{jr.innerHTML=Ro(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=jr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ze="transition",$t="animation",Jt=Symbol("_vtc"),Oo={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},ca=fe({},Ki,Oo),aa=e=>(e.displayName="Transition",e.props=ca,e),Kf=aa((e,{slots:t})=>Ns(nc,fa(e),t)),at=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},Vr=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function fa(e){const t={};for(const x in e)x in Oo||(t[x]=e[x]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=o,appearToClass:a=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=e,_=ua(r),S=_&&_[0],U=_&&_[1],{onBeforeEnter:N,onEnter:B,onEnterCancelled:p,onLeave:m,onLeaveCancelled:M,onBeforeAppear:F=N,onAppear:$=B,onAppearCancelled:j=p}=t,R=(x,W,se)=>{ft(x,W?a:l),ft(x,W?f:o),se&&se()},b=(x,W)=>{x._isLeaving=!1,ft(x,h),ft(x,v),ft(x,g),W&&W()},L=x=>(W,se)=>{const ce=x?$:B,V=()=>R(W,x,se);at(ce,[W,V]),Ur(()=>{ft(W,x?c:i),Je(W,x?a:l),Vr(ce)||Br(W,s,S,V)})};return fe(t,{onBeforeEnter(x){at(N,[x]),Je(x,i),Je(x,o)},onBeforeAppear(x){at(F,[x]),Je(x,c),Je(x,f)},onEnter:L(!1),onAppear:L(!0),onLeave(x,W){x._isLeaving=!0;const se=()=>b(x,W);Je(x,h),Je(x,g),pa(),Ur(()=>{x._isLeaving&&(ft(x,h),Je(x,v),Vr(m)||Br(x,s,U,se))}),at(m,[x,se])},onEnterCancelled(x){R(x,!1),at(p,[x])},onAppearCancelled(x){R(x,!0),at(j,[x])},onLeaveCancelled(x){b(x),at(M,[x])}})}function ua(e){if(e==null)return null;if(ne(e))return[cs(e.enter),cs(e.leave)];{const t=cs(e);return[t,t]}}function cs(e){return nl(e)}function Je(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Jt]||(e[Jt]=new Set)).add(t)}function ft(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Jt];n&&(n.delete(t),n.size||(e[Jt]=void 0))}function Ur(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let da=0;function Br(e,t,n,s){const r=e._endId=++da,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=ha(e,t);if(!o)return s();const f=o+"end";let a=0;const h=()=>{e.removeEventListener(f,g),i()},g=v=>{v.target===e&&++a>=c&&h()};setTimeout(()=>{a(n[_]||"").split(", "),r=s(`${ze}Delay`),i=s(`${ze}Duration`),o=kr(r,i),l=s(`${$t}Delay`),c=s(`${$t}Duration`),f=kr(l,c);let a=null,h=0,g=0;t===ze?o>0&&(a=ze,h=o,g=i.length):t===$t?f>0&&(a=$t,h=f,g=c.length):(h=Math.max(o,f),a=h>0?o>f?ze:$t:null,g=a?a===ze?i.length:c.length:0);const v=a===ze&&/\b(transform|all)(,|$)/.test(s(`${ze}Property`).toString());return{type:a,timeout:h,propCount:g,hasTransform:v}}function kr(e,t){for(;e.lengthWr(n)+Wr(e[s])))}function Wr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function pa(){return document.body.offsetHeight}function ga(e,t,n){const s=e[Jt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Kr=Symbol("_vod"),ma=Symbol("_vsh"),ya=Symbol(""),va=/(^|;)\s*display\s*:/;function ba(e,t,n){const s=e.style,r=re(n);let i=!1;if(n&&!r){if(t)if(re(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Cn(s,l,"")}else for(const o in t)n[o]==null&&Cn(s,o,"");for(const o in n)o==="display"&&(i=!0),Cn(s,o,n[o])}else if(r){if(t!==n){const o=s[ya];o&&(n+=";"+o),s.cssText=n,i=va.test(n)}}else t&&e.removeAttribute("style");Kr in e&&(e[Kr]=i?s.display:"",e[ma]&&(s.display="none"))}const qr=/\s*!important$/;function Cn(e,t,n){if(K(n))n.forEach(s=>Cn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=_a(e,t);qr.test(n)?e.setProperty(rt(s),n.replace(qr,""),"important"):e[s]=n}}const Gr=["Webkit","Moz","ms"],as={};function _a(e,t){const n=as[t];if(n)return n;let s=Ie(t);if(s!=="filter"&&s in e)return as[t]=s;s=$n(s);for(let r=0;rfs||(xa.then(()=>fs=0),fs=Date.now());function Ca(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Fe(Aa(s,n.value),t,5,[s])};return n.value=e,n.attached=Ta(),n}function Aa(e,t){if(K(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Zr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ra=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?ga(e,s,o):t==="style"?ba(e,n,s):Zt(t)?$s(t)||Sa(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Oa(e,t,s,o))?(zr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Xr(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!re(s))?zr(e,Ie(t),s):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Xr(e,t,s,o))};function Oa(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Zr(t)&&q(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Zr(t)&&re(n)?!1:t in e}const ei=e=>{const t=e.props["onUpdate:modelValue"]||!1;return K(t)?n=>Sn(t,n):t};function Ma(e){e.target.composing=!0}function ti(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const us=Symbol("_assign"),qf={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[us]=ei(r);const i=s||r.props&&r.props.type==="number";Et(e,t?"change":"input",o=>{if(o.target.composing)return;let l=e.value;n&&(l=l.trim()),i&&(l=ws(l)),e[us](l)}),n&&Et(e,"change",()=>{e.value=e.value.trim()}),t||(Et(e,"compositionstart",Ma),Et(e,"compositionend",ti),Et(e,"change",ti))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[us]=ei(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?ws(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c))}},Pa=["ctrl","shift","alt","meta"],Ia={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Pa.some(n=>e[`${n}Key`]&&!t.includes(n))},Gf=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=rt(r.key);if(t.some(o=>o===i||La[o]===i))return e(r)})},Mo=fe({patchProp:Ra},la);let kt,ni=!1;function Na(){return kt||(kt=Nc(Mo))}function Fa(){return kt=ni?kt:Fc(Mo),ni=!0,kt}const Xf=(...e)=>{const t=Na().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Io(s);if(!r)return;const i=t._component;!q(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Po(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t},zf=(...e)=>{const t=Fa().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Io(s);if(r)return n(r,!0,Po(r))},t};function Po(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Io(e){return re(e)?document.querySelector(e):e}const Jf=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Ha=window.__VP_SITE_DATA__;function or(e){return _i()?(ul(e),!0):!1}function ke(e){return typeof e=="function"?e():Hi(e)}const Lo=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Qf=e=>e!=null,$a=Object.prototype.toString,Da=e=>$a.call(e)==="[object Object]",Qt=()=>{},si=ja();function ja(){var e,t;return Lo&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function Va(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const No=e=>e();function Ua(e,t={}){let n,s,r=Qt;const i=l=>{clearTimeout(l),r(),r=Qt};return l=>{const c=ke(e),f=ke(t.maxWait);return n&&i(n),c<=0||f!==void 0&&f<=0?(s&&(i(s),s=null),Promise.resolve(l())):new Promise((a,h)=>{r=t.rejectOnCancel?h:a,f&&!s&&(s=setTimeout(()=>{n&&i(n),s=null,a(l())},f)),n=setTimeout(()=>{s&&i(s),s=null,a(l())},c)})}}function Ba(e=No){const t=oe(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...i)=>{t.value&&e(...i)};return{isActive:Bn(t),pause:n,resume:s,eventFilter:r}}function ka(e){return Yn()}function Fo(...e){if(e.length!==1)return Ul(...e);const t=e[0];return typeof t=="function"?Bn(Dl(()=>({get:t,set:Qt}))):oe(t)}function Ho(e,t,n={}){const{eventFilter:s=No,...r}=n;return Be(e,Va(s,t),r)}function Wa(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=Ba(s);return{stop:Ho(e,t,{...r,eventFilter:i}),pause:o,resume:l,isActive:c}}function lr(e,t=!0,n){ka()?Lt(e,n):t?e():kn(e)}function Zf(e,t,n={}){const{debounce:s=0,maxWait:r=void 0,...i}=n;return Ho(e,t,{...i,eventFilter:Ua(s,{maxWait:r})})}function eu(e,t,n){let s;ae(n)?s={evaluating:n}:s={};const{lazy:r=!1,evaluating:i=void 0,shallow:o=!0,onError:l=Qt}=s,c=oe(!r),f=o?zs(t):oe(t);let a=0;return rr(async h=>{if(!c.value)return;a++;const g=a;let v=!1;i&&Promise.resolve().then(()=>{i.value=!0});try{const _=await e(S=>{h(()=>{i&&(i.value=!1),v||S()})});g===a&&(f.value=_)}catch(_){l(_)}finally{i&&g===a&&(i.value=!1),v=!0}}),r?ie(()=>(c.value=!0,f.value)):f}const He=Lo?window:void 0;function $o(e){var t;const n=ke(e);return(t=n==null?void 0:n.$el)!=null?t:n}function It(...e){let t,n,s,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,r]=e,t=He):[t,n,s,r]=e,!t)return Qt;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const i=[],o=()=>{i.forEach(a=>a()),i.length=0},l=(a,h,g,v)=>(a.addEventListener(h,g,v),()=>a.removeEventListener(h,g,v)),c=Be(()=>[$o(t),ke(r)],([a,h])=>{if(o(),!a)return;const g=Da(h)?{...h}:h;i.push(...n.flatMap(v=>s.map(_=>l(a,v,_,g))))},{immediate:!0,flush:"post"}),f=()=>{c(),o()};return or(f),f}function Ka(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function tu(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=He,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=Ka(t);return It(r,i,a=>{a.repeat&&ke(l)||c(a)&&n(a)},o)}function qa(){const e=oe(!1),t=Yn();return t&&Lt(()=>{e.value=!0},t),e}function Ga(e){const t=qa();return ie(()=>(t.value,!!e()))}function Do(e,t={}){const{window:n=He}=t,s=Ga(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const i=oe(!1),o=f=>{i.value=f.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",o):r.removeListener(o))},c=rr(()=>{s.value&&(l(),r=n.matchMedia(ke(e)),"addEventListener"in r?r.addEventListener("change",o):r.addListener(o),i.value=r.matches)});return or(()=>{c(),l(),r=void 0}),i}const vn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},bn="__vueuse_ssr_handlers__",Ya=Xa();function Xa(){return bn in vn||(vn[bn]=vn[bn]||{}),vn[bn]}function jo(e,t){return Ya[e]||t}function Vo(e){return Do("(prefers-color-scheme: dark)",e)}function za(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Ja={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},ri="vueuse-storage";function cr(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:a,window:h=He,eventFilter:g,onError:v=b=>{console.error(b)},initOnMounted:_}=s,S=(a?zs:oe)(typeof t=="function"?t():t);if(!n)try{n=jo("getDefaultStorage",()=>{var b;return(b=He)==null?void 0:b.localStorage})()}catch(b){v(b)}if(!n)return S;const U=ke(t),N=za(U),B=(r=s.serializer)!=null?r:Ja[N],{pause:p,resume:m}=Wa(S,()=>F(S.value),{flush:i,deep:o,eventFilter:g});h&&l&&lr(()=>{n instanceof Storage?It(h,"storage",j):It(h,ri,R),_&&j()}),_||j();function M(b,L){if(h){const x={key:e,oldValue:b,newValue:L,storageArea:n};h.dispatchEvent(n instanceof Storage?new StorageEvent("storage",x):new CustomEvent(ri,{detail:x}))}}function F(b){try{const L=n.getItem(e);if(b==null)M(L,null),n.removeItem(e);else{const x=B.write(b);L!==x&&(n.setItem(e,x),M(L,x))}}catch(L){v(L)}}function $(b){const L=b?b.newValue:n.getItem(e);if(L==null)return c&&U!=null&&n.setItem(e,B.write(U)),U;if(!b&&f){const x=B.read(L);return typeof f=="function"?f(x,U):N==="object"&&!Array.isArray(x)?{...U,...x}:x}else return typeof L!="string"?L:B.read(L)}function j(b){if(!(b&&b.storageArea!==n)){if(b&&b.key==null){S.value=U;return}if(!(b&&b.key!==e)){p();try{(b==null?void 0:b.newValue)!==B.write(S.value)&&(S.value=$(b))}catch(L){v(L)}finally{b?kn(m):m()}}}}function R(b){j(b.detail)}return S}const Qa="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function Za(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=He,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:f,disableTransition:a=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},g=Vo({window:r}),v=ie(()=>g.value?"dark":"light"),_=c||(o==null?Fo(s):cr(o,s,i,{window:r,listenToStorageChanges:l})),S=ie(()=>_.value==="auto"?v.value:_.value),U=jo("updateHTMLAttrs",(m,M,F)=>{const $=typeof m=="string"?r==null?void 0:r.document.querySelector(m):$o(m);if(!$)return;const j=new Set,R=new Set;let b=null;if(M==="class"){const x=F.split(/\s/g);Object.values(h).flatMap(W=>(W||"").split(/\s/g)).filter(Boolean).forEach(W=>{x.includes(W)?j.add(W):R.add(W)})}else b={key:M,value:F};if(j.size===0&&R.size===0&&b===null)return;let L;a&&(L=r.document.createElement("style"),L.appendChild(document.createTextNode(Qa)),r.document.head.appendChild(L));for(const x of j)$.classList.add(x);for(const x of R)$.classList.remove(x);b&&$.setAttribute(b.key,b.value),a&&(r.getComputedStyle(L).opacity,document.head.removeChild(L))});function N(m){var M;U(t,n,(M=h[m])!=null?M:m)}function B(m){e.onChanged?e.onChanged(m,N):N(m)}Be(S,B,{flush:"post",immediate:!0}),lr(()=>B(S.value));const p=ie({get(){return f?_.value:S.value},set(m){_.value=m}});try{return Object.assign(p,{store:_,system:v,state:S})}catch{return p}}function ef(e={}){const{valueDark:t="dark",valueLight:n="",window:s=He}=e,r=Za({...e,onChanged:(l,c)=>{var f;e.onChanged?(f=e.onChanged)==null||f.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=ie(()=>r.system?r.system.value:Vo({window:s}).value?"dark":"light");return ie({get(){return r.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?r.value="auto":r.value=c}})}function ds(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function nu(e,t,n={}){const{window:s=He}=n;return cr(e,t,s==null?void 0:s.localStorage,n)}function Uo(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const hs=new WeakMap;function su(e,t=!1){const n=oe(t);let s=null,r="";Be(Fo(e),l=>{const c=ds(ke(l));if(c){const f=c;if(hs.get(f)||hs.set(f,f.style.overflow),f.style.overflow!=="hidden"&&(r=f.style.overflow),f.style.overflow==="hidden")return n.value=!0;if(n.value)return f.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=ds(ke(e));!l||n.value||(si&&(s=It(l,"touchmove",c=>{tf(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=ds(ke(e));!l||!n.value||(si&&(s==null||s()),l.style.overflow=r,hs.delete(l),n.value=!1)};return or(o),ie({get(){return n.value},set(l){l?i():o()}})}function ru(e,t,n={}){const{window:s=He}=n;return cr(e,t,s==null?void 0:s.sessionStorage,n)}function iu(e={}){const{window:t=He,behavior:n="auto"}=e;if(!t)return{x:oe(0),y:oe(0)};const s=oe(t.scrollX),r=oe(t.scrollY),i=ie({get(){return s.value},set(l){scrollTo({left:l,behavior:n})}}),o=ie({get(){return r.value},set(l){scrollTo({top:l,behavior:n})}});return It(t,"scroll",()=>{s.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function ou(e={}){const{window:t=He,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=oe(n),c=oe(s),f=()=>{t&&(o==="outer"?(l.value=t.outerWidth,c.value=t.outerHeight):i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight))};if(f(),lr(f),It("resize",f,{passive:!0}),r){const a=Do("(orientation: portrait)");Be(a,()=>f())}return{width:l,height:c}}const ps={BASE_URL:"/GeometryOps.jl/dev/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};var gs={};const Bo=/^(?:[a-z]+:|\/\/)/i,nf="vitepress-theme-appearance",sf=/#.*$/,rf=/[?#].*$/,of=/(?:(^|\/)index)?\.(?:md|html)$/,ge=typeof document<"u",ko={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function lf(e,t,n=!1){if(t===void 0)return!1;if(e=ii(`/${e}`),n)return new RegExp(t).test(e);if(ii(t)!==e)return!1;const s=t.match(sf);return s?(ge?location.hash:"")===s[0]:!0}function ii(e){return decodeURI(e).replace(rf,"").replace(of,"$1")}function cf(e){return Bo.test(e)}function af(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!cf(n)&&lf(t,`/${n}/`,!0))||"root"}function ff(e,t){var s,r,i,o,l,c,f;const n=af(e,t);return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Ko(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(f=e.locales[n])==null?void 0:f.themeConfig}})}function Wo(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=uf(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function uf(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function df(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function Ko(e,t){return[...e.filter(n=>!df(t,n)),...t]}const hf=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,pf=/^[a-z]:/i;function oi(e){const t=pf.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(hf,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const ms=new Set;function gf(e){if(ms.size===0){const n=typeof process=="object"&&(gs==null?void 0:gs.VITE_EXTRA_EXTENSIONS)||(ps==null?void 0:ps.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>ms.add(s))}const t=e.split(".").pop();return t==null||!ms.has(t.toLowerCase())}function lu(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const mf=Symbol(),yt=zs(Ha);function cu(e){const t=ie(()=>ff(yt.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?oe(!0):n?ef({storageKey:nf,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):oe(!1),r=oe(ge?location.hash:"");return ge&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Be(()=>e.data,()=>{r.value=ge?location.hash:""}),{site:t,theme:ie(()=>t.value.themeConfig),page:ie(()=>e.data),frontmatter:ie(()=>e.data.frontmatter),params:ie(()=>e.data.params),lang:ie(()=>t.value.lang),dir:ie(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ie(()=>t.value.localeIndex||"root"),title:ie(()=>Wo(t.value,e.data)),description:ie(()=>e.data.description||t.value.description),isDark:s,hash:ie(()=>r.value)}}function yf(){const e=Pt(mf);if(!e)throw new Error("vitepress data not properly injected in app");return e}function vf(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function li(e){return Bo.test(e)||!e.startsWith("/")?e:vf(yt.value.base,e)}function bf(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),ge){const n="/GeometryOps.jl/dev/";t=oi(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${oi(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let An=[];function au(e){An.push(e),Kn(()=>{An=An.filter(t=>t!==e)})}function _f(){let e=yt.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=ci(e,n);else if(Array.isArray(e))for(const s of e){const r=ci(s,n);if(r){t=r;break}}return t}function ci(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const wf=Symbol(),qo="http://a.com",Sf=()=>({path:"/",component:null,data:ko});function fu(e,t){const n=Un(Sf()),s={route:n,go:r};async function r(l=ge?location.href:"/"){var c,f;l=ys(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(ge&&l!==ys(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((f=s.onAfterRouteChanged)==null?void 0:f.call(s,l)))}let i=null;async function o(l,c=0,f=!1){var g;if(await((g=s.onBeforePageLoad)==null?void 0:g.call(s,l))===!1)return;const a=new URL(l,qo),h=i=a.pathname;try{let v=await e(h);if(!v)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:_,__pageData:S}=v;if(!_)throw new Error(`Invalid route component: ${_}`);n.path=ge?h:li(h),n.component=En(_),n.data=En(S),ge&&kn(()=>{let U=yt.value.base+S.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!yt.value.cleanUrls&&!U.endsWith("/")&&(U+=".html"),U!==a.pathname&&(a.pathname=U,l=U+a.search+a.hash,history.replaceState({},"",l)),a.hash&&!c){let N=null;try{N=document.getElementById(decodeURIComponent(a.hash).slice(1))}catch(B){console.warn(B)}if(N){ai(N,a.hash);return}}window.scrollTo(0,c)})}}catch(v){if(!/fetch|Page not found/.test(v.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(v),!f)try{const _=await fetch(yt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await _.json(),await o(l,c,!0);return}catch{}if(i===h){i=null,n.path=ge?h:li(h),n.component=t?En(t):null;const _=ge?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...ko,relativePath:_}}}}return ge&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const f=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(f==null)return;const{href:a,origin:h,pathname:g,hash:v,search:_}=new URL(f,c.baseURI),S=new URL(location.href);h===S.origin&&gf(g)&&(l.preventDefault(),g===S.pathname&&_===S.search?(v!==S.hash&&(history.pushState({},"",a),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:S.href,newURL:a}))),v?ai(c,v,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(a))},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await o(ys(location.href),l.state&&l.state.scrollPosition||0),(c=s.onAfterRouteChanged)==null||c.call(s,location.href))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Ef(){const e=Pt(wf);if(!e)throw new Error("useRouter() is called without provider.");return e}function Go(){return Ef().route}function ai(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-_f()+i;requestAnimationFrame(r)}}function ys(e){const t=new URL(e,qo);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),yt.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const vs=()=>An.forEach(e=>e()),uu=Zs({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Go(),{site:n}=yf();return()=>Ns(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?Ns(t.component,{onVnodeMounted:vs,onVnodeUpdated:vs,onVnodeUnmounted:vs}):"404 Page Not Found"])}}),xf="modulepreload",Tf=function(e){return"/GeometryOps.jl/dev/"+e},fi={},du=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=Tf(c),c in fi)return;fi[c]=!0;const f=c.endsWith(".css"),a=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${a}`))return;const h=document.createElement("link");if(h.rel=f?"stylesheet":xf,f||(h.as="script"),h.crossOrigin="",h.href=c,l&&h.setAttribute("nonce",l),document.head.appendChild(h),f)return new Promise((g,v)=>{h.addEventListener("load",g),h.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},hu=Zs({setup(e,{slots:t}){const n=oe(!1);return Lt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function pu(){ge&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(f=>f.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function gu(){if(ge){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(a=>a.remove());let f=c.textContent||"";o&&(f=f.replace(/^ *(\$|>) /gm,"").trim()),Cf(f).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const a=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,a)})}})}}async function Cf(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function mu(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=bs(l);for(const f of document.head.children)if(f.isEqualNode(c)){s.push(f);return}});return}const o=i.map(bs);s.forEach((l,c)=>{const f=o.findIndex(a=>a==null?void 0:a.isEqualNode(l??null));f!==-1?delete o[f]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};rr(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],f=Wo(o,i);f!==document.title&&(document.title=f);const a=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==a&&h.setAttribute("content",a):bs(["meta",{name:"description",content:a}]),r(Ko(o.head,Rf(c)))})}function bs([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&!t.async&&(s.async=!1),s}function Af(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Rf(e){return e.filter(t=>!Af(t))}const _s=new Set,Yo=()=>document.createElement("link"),Of=e=>{const t=Yo();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Mf=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let _n;const Pf=ge&&(_n=Yo())&&_n.relList&&_n.relList.supports&&_n.relList.supports("prefetch")?Of:Mf;function yu(){if(!ge||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!_s.has(c)){_s.add(c);const f=bf(c);f&&Pf(f)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):_s.add(l))})})};Lt(s);const r=Go();Be(()=>r.path,s),Kn(()=>{n&&n.disconnect()})}export{Ji as $,_f as A,Ff as B,$f as C,zs as D,au as E,Se as F,le as G,Hf as H,Bo as I,Go as J,Xc as K,Pt as L,ou as M,Vs as N,tu as O,kn as P,iu as Q,ge as R,Bn as S,Kf as T,Nf as U,du as V,su as W,Ac as X,Yf as Y,jf as Z,Jf as _,xo as a,Gf as a0,Vf as a1,Un as a2,Ul as a3,Ns as a4,kf as a5,mu as a6,wf as a7,cu as a8,mf as a9,uu as aa,hu as ab,yt as ac,zf as ad,fu as ae,bf as af,yu as ag,gu as ah,pu as ai,ke as aj,$o as ak,Qf as al,or as am,eu as an,ru as ao,nu as ap,Zf as aq,Ef as ar,It as as,If as at,qf as au,ae as av,Lf as aw,En as ax,Xf as ay,lu as az,Is as b,Bf as c,Zs as d,Wf as e,gf as f,li as g,ie as h,cf as i,Eo as j,Hi as k,lf as l,Do as m,Us as n,Ps as o,oe as p,Be as q,Df as r,rr as s,al as t,yf as u,Lt as v,zl as w,Kn as x,Uf as y,hc as z}; diff --git a/dev/assets/chunks/theme.D9kCPeTG.js b/dev/assets/chunks/theme.D6URMT7s.js similarity index 99% rename from dev/assets/chunks/theme.D9kCPeTG.js rename to dev/assets/chunks/theme.D6URMT7s.js index cac90337a..e1990339f 100644 --- a/dev/assets/chunks/theme.D9kCPeTG.js +++ b/dev/assets/chunks/theme.D6URMT7s.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.CY7JarLU.js","assets/chunks/framework.O43fB7X6.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.O43fB7X6.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.CY7JarLU.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.zWtjorLS.js","assets/chunks/framework.B_n_RGhH.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.B_n_RGhH.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.zWtjorLS.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/assets/dnourzx.C6X_Wm6e.png b/dev/assets/dnourzx.C6X_Wm6e.png deleted file mode 100644 index b38355666..000000000 Binary files a/dev/assets/dnourzx.C6X_Wm6e.png and /dev/null differ diff --git a/dev/assets/drwzysr.DHnfiHhT.png b/dev/assets/drwzysr.DHnfiHhT.png new file mode 100644 index 000000000..cdf853556 Binary files /dev/null and b/dev/assets/drwzysr.DHnfiHhT.png differ diff --git a/dev/assets/iwkpryh.0OJvb21A.png b/dev/assets/dyradks.0OJvb21A.png similarity index 100% rename from dev/assets/iwkpryh.0OJvb21A.png rename to dev/assets/dyradks.0OJvb21A.png diff --git a/dev/assets/mvkdxvr._0R9BbFk.png b/dev/assets/emqcofm._0R9BbFk.png similarity index 100% rename from dev/assets/mvkdxvr._0R9BbFk.png rename to dev/assets/emqcofm._0R9BbFk.png diff --git a/dev/assets/experiments_accurate_accumulators.md.DuCPtDRZ.js b/dev/assets/experiments_accurate_accumulators.md.M4qZ7KkV.js similarity index 98% rename from dev/assets/experiments_accurate_accumulators.md.DuCPtDRZ.js rename to dev/assets/experiments_accurate_accumulators.md.M4qZ7KkV.js index 2e5eccaf9..3092c6786 100644 --- a/dev/assets/experiments_accurate_accumulators.md.DuCPtDRZ.js +++ b/dev/assets/experiments_accurate_accumulators.md.M4qZ7KkV.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,a5 as t,o as e}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Accurate accumulation","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/accurate_accumulators.md","filePath":"experiments/accurate_accumulators.md","lastUpdated":null}'),n={name:"experiments/accurate_accumulators.md"};function l(h,s,p,k,d,r){return e(),a("div",null,s[0]||(s[0]=[t(`

Accurate accumulation

Accurate arithmetic is a technique which allows you to calculate using more precision than the provided numeric type.

We will use the accurate sum routines from AccurateArithmetic.jl to show the difference!

julia
import GeometryOps as GO, GeoInterface as GI
+import{_ as i,c as a,a5 as t,o as e}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Accurate accumulation","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/accurate_accumulators.md","filePath":"experiments/accurate_accumulators.md","lastUpdated":null}'),n={name:"experiments/accurate_accumulators.md"};function l(h,s,p,k,d,r){return e(),a("div",null,s[0]||(s[0]=[t(`

Accurate accumulation

Accurate arithmetic is a technique which allows you to calculate using more precision than the provided numeric type.

We will use the accurate sum routines from AccurateArithmetic.jl to show the difference!

julia
import GeometryOps as GO, GeoInterface as GI
 using GeoJSON
 using AccurateArithmetic
 using NaturalEarth
diff --git a/dev/assets/experiments_accurate_accumulators.md.DuCPtDRZ.lean.js b/dev/assets/experiments_accurate_accumulators.md.M4qZ7KkV.lean.js
similarity index 98%
rename from dev/assets/experiments_accurate_accumulators.md.DuCPtDRZ.lean.js
rename to dev/assets/experiments_accurate_accumulators.md.M4qZ7KkV.lean.js
index 2e5eccaf9..3092c6786 100644
--- a/dev/assets/experiments_accurate_accumulators.md.DuCPtDRZ.lean.js
+++ b/dev/assets/experiments_accurate_accumulators.md.M4qZ7KkV.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as t,o as e}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Accurate accumulation","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/accurate_accumulators.md","filePath":"experiments/accurate_accumulators.md","lastUpdated":null}'),n={name:"experiments/accurate_accumulators.md"};function l(h,s,p,k,d,r){return e(),a("div",null,s[0]||(s[0]=[t(`

Accurate accumulation

Accurate arithmetic is a technique which allows you to calculate using more precision than the provided numeric type.

We will use the accurate sum routines from AccurateArithmetic.jl to show the difference!

julia
import GeometryOps as GO, GeoInterface as GI
+import{_ as i,c as a,a5 as t,o as e}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Accurate accumulation","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/accurate_accumulators.md","filePath":"experiments/accurate_accumulators.md","lastUpdated":null}'),n={name:"experiments/accurate_accumulators.md"};function l(h,s,p,k,d,r){return e(),a("div",null,s[0]||(s[0]=[t(`

Accurate accumulation

Accurate arithmetic is a technique which allows you to calculate using more precision than the provided numeric type.

We will use the accurate sum routines from AccurateArithmetic.jl to show the difference!

julia
import GeometryOps as GO, GeoInterface as GI
 using GeoJSON
 using AccurateArithmetic
 using NaturalEarth
diff --git a/dev/assets/experiments_predicates.md.KukwllNF.js b/dev/assets/experiments_predicates.md.C8AAp4W9.js
similarity index 99%
rename from dev/assets/experiments_predicates.md.KukwllNF.js
rename to dev/assets/experiments_predicates.md.C8AAp4W9.js
index 7af04154e..8c21abc22 100644
--- a/dev/assets/experiments_predicates.md.KukwllNF.js
+++ b/dev/assets/experiments_predicates.md.C8AAp4W9.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as h,o as k}from"./chunks/framework.O43fB7X6.js";const n="/GeometryOps.jl/dev/assets/dnourzx.C6X_Wm6e.png",y=JSON.parse('{"title":"Predicates","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/predicates.md","filePath":"experiments/predicates.md","lastUpdated":null}'),p={name:"experiments/predicates.md"};function l(t,s,E,e,r,d){return k(),a("div",null,s[0]||(s[0]=[h(`

Predicates

Exact vs fast predicates

Orient

julia
using CairoMakie
+import{_ as i,c as a,a5 as h,o as k}from"./chunks/framework.B_n_RGhH.js";const n="/GeometryOps.jl/dev/assets/yafbdbx.DgMj-nPU.png",y=JSON.parse('{"title":"Predicates","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/predicates.md","filePath":"experiments/predicates.md","lastUpdated":null}'),p={name:"experiments/predicates.md"};function l(t,s,E,e,r,d){return k(),a("div",null,s[0]||(s[0]=[h(`

Predicates

Exact vs fast predicates

Orient

julia
using CairoMakie
 import GeometryOps as GO, GeoInterface as GI, LibGEOS as LG
 import ExactPredicates
 using MultiFloats
diff --git a/dev/assets/experiments_predicates.md.KukwllNF.lean.js b/dev/assets/experiments_predicates.md.C8AAp4W9.lean.js
similarity index 99%
rename from dev/assets/experiments_predicates.md.KukwllNF.lean.js
rename to dev/assets/experiments_predicates.md.C8AAp4W9.lean.js
index 7af04154e..8c21abc22 100644
--- a/dev/assets/experiments_predicates.md.KukwllNF.lean.js
+++ b/dev/assets/experiments_predicates.md.C8AAp4W9.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as h,o as k}from"./chunks/framework.O43fB7X6.js";const n="/GeometryOps.jl/dev/assets/dnourzx.C6X_Wm6e.png",y=JSON.parse('{"title":"Predicates","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/predicates.md","filePath":"experiments/predicates.md","lastUpdated":null}'),p={name:"experiments/predicates.md"};function l(t,s,E,e,r,d){return k(),a("div",null,s[0]||(s[0]=[h(`

Predicates

Exact vs fast predicates

Orient

julia
using CairoMakie
+import{_ as i,c as a,a5 as h,o as k}from"./chunks/framework.B_n_RGhH.js";const n="/GeometryOps.jl/dev/assets/yafbdbx.DgMj-nPU.png",y=JSON.parse('{"title":"Predicates","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/predicates.md","filePath":"experiments/predicates.md","lastUpdated":null}'),p={name:"experiments/predicates.md"};function l(t,s,E,e,r,d){return k(),a("div",null,s[0]||(s[0]=[h(`

Predicates

Exact vs fast predicates

Orient

julia
using CairoMakie
 import GeometryOps as GO, GeoInterface as GI, LibGEOS as LG
 import ExactPredicates
 using MultiFloats
diff --git a/dev/assets/explanations_crs.md.C7m2R2Fj.js b/dev/assets/explanations_crs.md.hL3zygs6.js
similarity index 83%
rename from dev/assets/explanations_crs.md.C7m2R2Fj.js
rename to dev/assets/explanations_crs.md.hL3zygs6.js
index 258d2d070..92536b013 100644
--- a/dev/assets/explanations_crs.md.C7m2R2Fj.js
+++ b/dev/assets/explanations_crs.md.hL3zygs6.js
@@ -1 +1 @@
-import{_ as e,c as t,o as a}from"./chunks/framework.O43fB7X6.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/crs.md","filePath":"explanations/crs.md","lastUpdated":null}'),s={name:"explanations/crs.md"};function n(r,o,c,p,i,l){return a(),t("div")}const m=e(s,[["render",n]]);export{_ as __pageData,m as default};
+import{_ as e,c as t,o as a}from"./chunks/framework.B_n_RGhH.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/crs.md","filePath":"explanations/crs.md","lastUpdated":null}'),s={name:"explanations/crs.md"};function n(r,o,c,p,i,l){return a(),t("div")}const m=e(s,[["render",n]]);export{_ as __pageData,m as default};
diff --git a/dev/assets/explanations_crs.md.C7m2R2Fj.lean.js b/dev/assets/explanations_crs.md.hL3zygs6.lean.js
similarity index 83%
rename from dev/assets/explanations_crs.md.C7m2R2Fj.lean.js
rename to dev/assets/explanations_crs.md.hL3zygs6.lean.js
index 258d2d070..92536b013 100644
--- a/dev/assets/explanations_crs.md.C7m2R2Fj.lean.js
+++ b/dev/assets/explanations_crs.md.hL3zygs6.lean.js
@@ -1 +1 @@
-import{_ as e,c as t,o as a}from"./chunks/framework.O43fB7X6.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/crs.md","filePath":"explanations/crs.md","lastUpdated":null}'),s={name:"explanations/crs.md"};function n(r,o,c,p,i,l){return a(),t("div")}const m=e(s,[["render",n]]);export{_ as __pageData,m as default};
+import{_ as e,c as t,o as a}from"./chunks/framework.B_n_RGhH.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/crs.md","filePath":"explanations/crs.md","lastUpdated":null}'),s={name:"explanations/crs.md"};function n(r,o,c,p,i,l){return a(),t("div")}const m=e(s,[["render",n]]);export{_ as __pageData,m as default};
diff --git a/dev/assets/explanations_paradigms.md.xd5T5AbR.js b/dev/assets/explanations_paradigms.md.5swduggE.js
similarity index 97%
rename from dev/assets/explanations_paradigms.md.xd5T5AbR.js
rename to dev/assets/explanations_paradigms.md.5swduggE.js
index 4163ac122..8ab99d2f8 100644
--- a/dev/assets/explanations_paradigms.md.xd5T5AbR.js
+++ b/dev/assets/explanations_paradigms.md.5swduggE.js
@@ -1 +1 @@
-import{_ as a,c as t,a5 as o,o as i}from"./chunks/framework.O43fB7X6.js";const u=JSON.parse('{"title":"Paradigms","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/paradigms.md","filePath":"explanations/paradigms.md","lastUpdated":null}'),r={name:"explanations/paradigms.md"};function s(n,e,d,p,c,l){return i(),t("div",null,e[0]||(e[0]=[o('

Paradigms

GeometryOps exposes functions like apply and applyreduce, as well as the fix and prepare APIs, that represent paradigms of programming, by which we mean the ability to program in a certain way, and in so doing, fit neatly into the tools we've built without needing to re-implement the wheel.

Below, we'll describe some of the foundational paradigms of GeometryOps, and why you should care!

apply

The apply function allows you to decompose a given collection of geometries down to a certain level, operate on it, and reconstruct it back to the same nested form as the original. In general, its invocation is:

julia
apply(f, trait::Trait, geom)

Functionally, it's similar to map in the way you apply it to geometries - except that you tell it at which level it should stop, by passing a trait to it.

apply will start by decomposing the geometry, feature, featurecollection, iterable, or table that you pass to it, and stop when it encounters a geometry for which GI.trait(geom) isa Trait. This encompasses unions of traits especially, but beware that any geometry which is not explicitly handled, and hits GI.PointTrait, will cause an error.

apply is unlike map in that it returns reconstructed geometries, instead of the raw output of the function. If you want a purely map-like behaviour, like calculating the length of each linestring in your feature collection, then call GO.flatten(f, trait, geom), which will decompose each geometry to the given trait and apply f to it, returning the decomposition as a flattened vector.

applyreduce

applyreduce is like the previous map-based approach that we mentioned, except that it reduces the result of f by op. Note that applyreduce does not guarantee associativity, so it's best to have typeof(init) == returntype(op).

fix and prepare

The fix and prepare paradigms are different from apply, though they are built on top of it. They involve the use of structs as "actions", where a constructed object indicates an action that should be taken. A trait like interface prescribes the level (polygon, linestring, point, etc) at which each action should be applied.

In general, the idea here is to be able to invoke several actions efficiently and simultaneously, for example when correcting invalid geometries, or instantiating a Prepared geometry with several preparations (sorted edge lists, rtrees, monotone chains, etc.)

',14)]))}const m=a(r,[["render",s]]);export{u as __pageData,m as default}; +import{_ as a,c as t,a5 as o,o as i}from"./chunks/framework.B_n_RGhH.js";const u=JSON.parse('{"title":"Paradigms","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/paradigms.md","filePath":"explanations/paradigms.md","lastUpdated":null}'),r={name:"explanations/paradigms.md"};function s(n,e,d,p,c,l){return i(),t("div",null,e[0]||(e[0]=[o('

Paradigms

GeometryOps exposes functions like apply and applyreduce, as well as the fix and prepare APIs, that represent paradigms of programming, by which we mean the ability to program in a certain way, and in so doing, fit neatly into the tools we've built without needing to re-implement the wheel.

Below, we'll describe some of the foundational paradigms of GeometryOps, and why you should care!

apply

The apply function allows you to decompose a given collection of geometries down to a certain level, operate on it, and reconstruct it back to the same nested form as the original. In general, its invocation is:

julia
apply(f, trait::Trait, geom)

Functionally, it's similar to map in the way you apply it to geometries - except that you tell it at which level it should stop, by passing a trait to it.

apply will start by decomposing the geometry, feature, featurecollection, iterable, or table that you pass to it, and stop when it encounters a geometry for which GI.trait(geom) isa Trait. This encompasses unions of traits especially, but beware that any geometry which is not explicitly handled, and hits GI.PointTrait, will cause an error.

apply is unlike map in that it returns reconstructed geometries, instead of the raw output of the function. If you want a purely map-like behaviour, like calculating the length of each linestring in your feature collection, then call GO.flatten(f, trait, geom), which will decompose each geometry to the given trait and apply f to it, returning the decomposition as a flattened vector.

applyreduce

applyreduce is like the previous map-based approach that we mentioned, except that it reduces the result of f by op. Note that applyreduce does not guarantee associativity, so it's best to have typeof(init) == returntype(op).

fix and prepare

The fix and prepare paradigms are different from apply, though they are built on top of it. They involve the use of structs as "actions", where a constructed object indicates an action that should be taken. A trait like interface prescribes the level (polygon, linestring, point, etc) at which each action should be applied.

In general, the idea here is to be able to invoke several actions efficiently and simultaneously, for example when correcting invalid geometries, or instantiating a Prepared geometry with several preparations (sorted edge lists, rtrees, monotone chains, etc.)

',14)]))}const m=a(r,[["render",s]]);export{u as __pageData,m as default}; diff --git a/dev/assets/explanations_paradigms.md.xd5T5AbR.lean.js b/dev/assets/explanations_paradigms.md.5swduggE.lean.js similarity index 97% rename from dev/assets/explanations_paradigms.md.xd5T5AbR.lean.js rename to dev/assets/explanations_paradigms.md.5swduggE.lean.js index 4163ac122..8ab99d2f8 100644 --- a/dev/assets/explanations_paradigms.md.xd5T5AbR.lean.js +++ b/dev/assets/explanations_paradigms.md.5swduggE.lean.js @@ -1 +1 @@ -import{_ as a,c as t,a5 as o,o as i}from"./chunks/framework.O43fB7X6.js";const u=JSON.parse('{"title":"Paradigms","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/paradigms.md","filePath":"explanations/paradigms.md","lastUpdated":null}'),r={name:"explanations/paradigms.md"};function s(n,e,d,p,c,l){return i(),t("div",null,e[0]||(e[0]=[o('

Paradigms

GeometryOps exposes functions like apply and applyreduce, as well as the fix and prepare APIs, that represent paradigms of programming, by which we mean the ability to program in a certain way, and in so doing, fit neatly into the tools we've built without needing to re-implement the wheel.

Below, we'll describe some of the foundational paradigms of GeometryOps, and why you should care!

apply

The apply function allows you to decompose a given collection of geometries down to a certain level, operate on it, and reconstruct it back to the same nested form as the original. In general, its invocation is:

julia
apply(f, trait::Trait, geom)

Functionally, it's similar to map in the way you apply it to geometries - except that you tell it at which level it should stop, by passing a trait to it.

apply will start by decomposing the geometry, feature, featurecollection, iterable, or table that you pass to it, and stop when it encounters a geometry for which GI.trait(geom) isa Trait. This encompasses unions of traits especially, but beware that any geometry which is not explicitly handled, and hits GI.PointTrait, will cause an error.

apply is unlike map in that it returns reconstructed geometries, instead of the raw output of the function. If you want a purely map-like behaviour, like calculating the length of each linestring in your feature collection, then call GO.flatten(f, trait, geom), which will decompose each geometry to the given trait and apply f to it, returning the decomposition as a flattened vector.

applyreduce

applyreduce is like the previous map-based approach that we mentioned, except that it reduces the result of f by op. Note that applyreduce does not guarantee associativity, so it's best to have typeof(init) == returntype(op).

fix and prepare

The fix and prepare paradigms are different from apply, though they are built on top of it. They involve the use of structs as "actions", where a constructed object indicates an action that should be taken. A trait like interface prescribes the level (polygon, linestring, point, etc) at which each action should be applied.

In general, the idea here is to be able to invoke several actions efficiently and simultaneously, for example when correcting invalid geometries, or instantiating a Prepared geometry with several preparations (sorted edge lists, rtrees, monotone chains, etc.)

',14)]))}const m=a(r,[["render",s]]);export{u as __pageData,m as default}; +import{_ as a,c as t,a5 as o,o as i}from"./chunks/framework.B_n_RGhH.js";const u=JSON.parse('{"title":"Paradigms","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/paradigms.md","filePath":"explanations/paradigms.md","lastUpdated":null}'),r={name:"explanations/paradigms.md"};function s(n,e,d,p,c,l){return i(),t("div",null,e[0]||(e[0]=[o('

Paradigms

GeometryOps exposes functions like apply and applyreduce, as well as the fix and prepare APIs, that represent paradigms of programming, by which we mean the ability to program in a certain way, and in so doing, fit neatly into the tools we've built without needing to re-implement the wheel.

Below, we'll describe some of the foundational paradigms of GeometryOps, and why you should care!

apply

The apply function allows you to decompose a given collection of geometries down to a certain level, operate on it, and reconstruct it back to the same nested form as the original. In general, its invocation is:

julia
apply(f, trait::Trait, geom)

Functionally, it's similar to map in the way you apply it to geometries - except that you tell it at which level it should stop, by passing a trait to it.

apply will start by decomposing the geometry, feature, featurecollection, iterable, or table that you pass to it, and stop when it encounters a geometry for which GI.trait(geom) isa Trait. This encompasses unions of traits especially, but beware that any geometry which is not explicitly handled, and hits GI.PointTrait, will cause an error.

apply is unlike map in that it returns reconstructed geometries, instead of the raw output of the function. If you want a purely map-like behaviour, like calculating the length of each linestring in your feature collection, then call GO.flatten(f, trait, geom), which will decompose each geometry to the given trait and apply f to it, returning the decomposition as a flattened vector.

applyreduce

applyreduce is like the previous map-based approach that we mentioned, except that it reduces the result of f by op. Note that applyreduce does not guarantee associativity, so it's best to have typeof(init) == returntype(op).

fix and prepare

The fix and prepare paradigms are different from apply, though they are built on top of it. They involve the use of structs as "actions", where a constructed object indicates an action that should be taken. A trait like interface prescribes the level (polygon, linestring, point, etc) at which each action should be applied.

In general, the idea here is to be able to invoke several actions efficiently and simultaneously, for example when correcting invalid geometries, or instantiating a Prepared geometry with several preparations (sorted edge lists, rtrees, monotone chains, etc.)

',14)]))}const m=a(r,[["render",s]]);export{u as __pageData,m as default}; diff --git a/dev/assets/explanations_peculiarities.md.C5TjJTeI.js b/dev/assets/explanations_peculiarities.md.X2E97mNU.js similarity index 96% rename from dev/assets/explanations_peculiarities.md.C5TjJTeI.js rename to dev/assets/explanations_peculiarities.md.X2E97mNU.js index fc45be13d..448153f74 100644 --- a/dev/assets/explanations_peculiarities.md.C5TjJTeI.js +++ b/dev/assets/explanations_peculiarities.md.X2E97mNU.js @@ -1 +1 @@ -import{_ as o,c as t,a5 as a,o as r}from"./chunks/framework.O43fB7X6.js";const u=JSON.parse('{"title":"Peculiarities","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/peculiarities.md","filePath":"explanations/peculiarities.md","lastUpdated":null}'),n={name:"explanations/peculiarities.md"};function i(s,e,l,d,c,p){return r(),t("div",null,e[0]||(e[0]=[a('

Peculiarities

What does apply return and why?

apply returns the target geometries returned by f, whatever type/package they are from, but geometries, features or feature collections that wrapped the target are replaced with GeoInterace.jl wrappers with matching GeoInterface.trait to the originals. All non-geointerface iterables become Arrays. Tables.jl compatible tables are converted either back to the original type if a Tables.materializer is defined, and if not then returned as generic NamedTuple column tables (i.e., a NamedTuple of vectors).

It is recommended for consistency that f returns GeoInterface geometries unless there is a performance/conversion overhead to doing that.

Why do you want me to provide a target in set operations?

In polygon set operations like intersection, difference, and union, many different geometry types may be obtained - depending on the relationship between the polygons. For example, when performing an union on two nonintersecting polygons, one would technically have two disjoint polygons as an output.

We use the target keyword to allow the user to control which kinds of geometry they want back. For example, setting target to PolygonTrait will cause a vector of polygons to be returned (this is the only currently supported behaviour). In future, we may implement MultiPolygonTrait or GeometryCollectionTrait targets which will return a single geometry, as LibGEOS and ArchGDAL do.

This also allows for a lot more type stability - when you ask for polygons, we won't return a geometrycollection with line segments. Especially in simulation workflows, this is excellent for simplified data processing.

_True and _False (or BoolsAsTypes)

Warning

These are internals and explicitly not public API, meaning they may change at any time!

When dispatch can be controlled by the value of a boolean variable, this introduces type instability. Instead of introducing type instability, we chose to encode our boolean decision variables, like threaded and calc_extent in apply, as types. This allows the compiler to reason about what will happen, and call the correct compiled method, in a stable way without worrying about

',11)]))}const y=o(n,[["render",i]]);export{u as __pageData,y as default}; +import{_ as o,c as t,a5 as a,o as r}from"./chunks/framework.B_n_RGhH.js";const u=JSON.parse('{"title":"Peculiarities","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/peculiarities.md","filePath":"explanations/peculiarities.md","lastUpdated":null}'),n={name:"explanations/peculiarities.md"};function i(s,e,l,d,c,p){return r(),t("div",null,e[0]||(e[0]=[a('

Peculiarities

What does apply return and why?

apply returns the target geometries returned by f, whatever type/package they are from, but geometries, features or feature collections that wrapped the target are replaced with GeoInterace.jl wrappers with matching GeoInterface.trait to the originals. All non-geointerface iterables become Arrays. Tables.jl compatible tables are converted either back to the original type if a Tables.materializer is defined, and if not then returned as generic NamedTuple column tables (i.e., a NamedTuple of vectors).

It is recommended for consistency that f returns GeoInterface geometries unless there is a performance/conversion overhead to doing that.

Why do you want me to provide a target in set operations?

In polygon set operations like intersection, difference, and union, many different geometry types may be obtained - depending on the relationship between the polygons. For example, when performing an union on two nonintersecting polygons, one would technically have two disjoint polygons as an output.

We use the target keyword to allow the user to control which kinds of geometry they want back. For example, setting target to PolygonTrait will cause a vector of polygons to be returned (this is the only currently supported behaviour). In future, we may implement MultiPolygonTrait or GeometryCollectionTrait targets which will return a single geometry, as LibGEOS and ArchGDAL do.

This also allows for a lot more type stability - when you ask for polygons, we won't return a geometrycollection with line segments. Especially in simulation workflows, this is excellent for simplified data processing.

_True and _False (or BoolsAsTypes)

Warning

These are internals and explicitly not public API, meaning they may change at any time!

When dispatch can be controlled by the value of a boolean variable, this introduces type instability. Instead of introducing type instability, we chose to encode our boolean decision variables, like threaded and calc_extent in apply, as types. This allows the compiler to reason about what will happen, and call the correct compiled method, in a stable way without worrying about

',11)]))}const y=o(n,[["render",i]]);export{u as __pageData,y as default}; diff --git a/dev/assets/explanations_peculiarities.md.C5TjJTeI.lean.js b/dev/assets/explanations_peculiarities.md.X2E97mNU.lean.js similarity index 96% rename from dev/assets/explanations_peculiarities.md.C5TjJTeI.lean.js rename to dev/assets/explanations_peculiarities.md.X2E97mNU.lean.js index fc45be13d..448153f74 100644 --- a/dev/assets/explanations_peculiarities.md.C5TjJTeI.lean.js +++ b/dev/assets/explanations_peculiarities.md.X2E97mNU.lean.js @@ -1 +1 @@ -import{_ as o,c as t,a5 as a,o as r}from"./chunks/framework.O43fB7X6.js";const u=JSON.parse('{"title":"Peculiarities","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/peculiarities.md","filePath":"explanations/peculiarities.md","lastUpdated":null}'),n={name:"explanations/peculiarities.md"};function i(s,e,l,d,c,p){return r(),t("div",null,e[0]||(e[0]=[a('

Peculiarities

What does apply return and why?

apply returns the target geometries returned by f, whatever type/package they are from, but geometries, features or feature collections that wrapped the target are replaced with GeoInterace.jl wrappers with matching GeoInterface.trait to the originals. All non-geointerface iterables become Arrays. Tables.jl compatible tables are converted either back to the original type if a Tables.materializer is defined, and if not then returned as generic NamedTuple column tables (i.e., a NamedTuple of vectors).

It is recommended for consistency that f returns GeoInterface geometries unless there is a performance/conversion overhead to doing that.

Why do you want me to provide a target in set operations?

In polygon set operations like intersection, difference, and union, many different geometry types may be obtained - depending on the relationship between the polygons. For example, when performing an union on two nonintersecting polygons, one would technically have two disjoint polygons as an output.

We use the target keyword to allow the user to control which kinds of geometry they want back. For example, setting target to PolygonTrait will cause a vector of polygons to be returned (this is the only currently supported behaviour). In future, we may implement MultiPolygonTrait or GeometryCollectionTrait targets which will return a single geometry, as LibGEOS and ArchGDAL do.

This also allows for a lot more type stability - when you ask for polygons, we won't return a geometrycollection with line segments. Especially in simulation workflows, this is excellent for simplified data processing.

_True and _False (or BoolsAsTypes)

Warning

These are internals and explicitly not public API, meaning they may change at any time!

When dispatch can be controlled by the value of a boolean variable, this introduces type instability. Instead of introducing type instability, we chose to encode our boolean decision variables, like threaded and calc_extent in apply, as types. This allows the compiler to reason about what will happen, and call the correct compiled method, in a stable way without worrying about

',11)]))}const y=o(n,[["render",i]]);export{u as __pageData,y as default}; +import{_ as o,c as t,a5 as a,o as r}from"./chunks/framework.B_n_RGhH.js";const u=JSON.parse('{"title":"Peculiarities","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/peculiarities.md","filePath":"explanations/peculiarities.md","lastUpdated":null}'),n={name:"explanations/peculiarities.md"};function i(s,e,l,d,c,p){return r(),t("div",null,e[0]||(e[0]=[a('

Peculiarities

What does apply return and why?

apply returns the target geometries returned by f, whatever type/package they are from, but geometries, features or feature collections that wrapped the target are replaced with GeoInterace.jl wrappers with matching GeoInterface.trait to the originals. All non-geointerface iterables become Arrays. Tables.jl compatible tables are converted either back to the original type if a Tables.materializer is defined, and if not then returned as generic NamedTuple column tables (i.e., a NamedTuple of vectors).

It is recommended for consistency that f returns GeoInterface geometries unless there is a performance/conversion overhead to doing that.

Why do you want me to provide a target in set operations?

In polygon set operations like intersection, difference, and union, many different geometry types may be obtained - depending on the relationship between the polygons. For example, when performing an union on two nonintersecting polygons, one would technically have two disjoint polygons as an output.

We use the target keyword to allow the user to control which kinds of geometry they want back. For example, setting target to PolygonTrait will cause a vector of polygons to be returned (this is the only currently supported behaviour). In future, we may implement MultiPolygonTrait or GeometryCollectionTrait targets which will return a single geometry, as LibGEOS and ArchGDAL do.

This also allows for a lot more type stability - when you ask for polygons, we won't return a geometrycollection with line segments. Especially in simulation workflows, this is excellent for simplified data processing.

_True and _False (or BoolsAsTypes)

Warning

These are internals and explicitly not public API, meaning they may change at any time!

When dispatch can be controlled by the value of a boolean variable, this introduces type instability. Instead of introducing type instability, we chose to encode our boolean decision variables, like threaded and calc_extent in apply, as types. This allows the compiler to reason about what will happen, and call the correct compiled method, in a stable way without worrying about

',11)]))}const y=o(n,[["render",i]]);export{u as __pageData,y as default}; diff --git a/dev/assets/explanations_winding_order.md.CzxPIM1I.js b/dev/assets/explanations_winding_order.md.Dpaehb2f.js similarity index 84% rename from dev/assets/explanations_winding_order.md.CzxPIM1I.js rename to dev/assets/explanations_winding_order.md.Dpaehb2f.js index eeadcdf53..87c8c7a30 100644 --- a/dev/assets/explanations_winding_order.md.CzxPIM1I.js +++ b/dev/assets/explanations_winding_order.md.Dpaehb2f.js @@ -1 +1 @@ -import{_ as e,c as n,o as t}from"./chunks/framework.O43fB7X6.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/winding_order.md","filePath":"explanations/winding_order.md","lastUpdated":null}'),a={name:"explanations/winding_order.md"};function r(o,i,d,s,c,p){return t(),n("div")}const m=e(a,[["render",r]]);export{l as __pageData,m as default}; +import{_ as e,c as n,o as t}from"./chunks/framework.B_n_RGhH.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/winding_order.md","filePath":"explanations/winding_order.md","lastUpdated":null}'),a={name:"explanations/winding_order.md"};function r(o,i,d,s,c,p){return t(),n("div")}const m=e(a,[["render",r]]);export{l as __pageData,m as default}; diff --git a/dev/assets/explanations_winding_order.md.CzxPIM1I.lean.js b/dev/assets/explanations_winding_order.md.Dpaehb2f.lean.js similarity index 84% rename from dev/assets/explanations_winding_order.md.CzxPIM1I.lean.js rename to dev/assets/explanations_winding_order.md.Dpaehb2f.lean.js index eeadcdf53..87c8c7a30 100644 --- a/dev/assets/explanations_winding_order.md.CzxPIM1I.lean.js +++ b/dev/assets/explanations_winding_order.md.Dpaehb2f.lean.js @@ -1 +1 @@ -import{_ as e,c as n,o as t}from"./chunks/framework.O43fB7X6.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/winding_order.md","filePath":"explanations/winding_order.md","lastUpdated":null}'),a={name:"explanations/winding_order.md"};function r(o,i,d,s,c,p){return t(),n("div")}const m=e(a,[["render",r]]);export{l as __pageData,m as default}; +import{_ as e,c as n,o as t}from"./chunks/framework.B_n_RGhH.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/winding_order.md","filePath":"explanations/winding_order.md","lastUpdated":null}'),a={name:"explanations/winding_order.md"};function r(o,i,d,s,c,p){return t(),n("div")}const m=e(a,[["render",r]]);export{l as __pageData,m as default}; diff --git a/dev/assets/klmxpbf.DiwGEg2f.png b/dev/assets/glhbvoz.DiwGEg2f.png similarity index 100% rename from dev/assets/klmxpbf.DiwGEg2f.png rename to dev/assets/glhbvoz.DiwGEg2f.png diff --git a/dev/assets/bndakij.DaovVbE6.png b/dev/assets/gvlnqpi.DaovVbE6.png similarity index 100% rename from dev/assets/bndakij.DaovVbE6.png rename to dev/assets/gvlnqpi.DaovVbE6.png diff --git a/dev/assets/hatdqxw.DQxLQp_L.png b/dev/assets/hatdqxw.DQxLQp_L.png new file mode 100644 index 000000000..cc232659a Binary files /dev/null and b/dev/assets/hatdqxw.DQxLQp_L.png differ diff --git a/dev/assets/djuoqnk.4wfjCtJV.png b/dev/assets/hircove.4wfjCtJV.png similarity index 100% rename from dev/assets/djuoqnk.4wfjCtJV.png rename to dev/assets/hircove.4wfjCtJV.png diff --git a/dev/assets/tmfrkpo.CPClNl7F.png b/dev/assets/hzttamm.CPClNl7F.png similarity index 100% rename from dev/assets/tmfrkpo.CPClNl7F.png rename to dev/assets/hzttamm.CPClNl7F.png diff --git a/dev/assets/index.md.BFdtMPYM.js b/dev/assets/index.md.CUD5AAwV.js similarity index 96% rename from dev/assets/index.md.BFdtMPYM.js rename to dev/assets/index.md.CUD5AAwV.js index a7247beb6..b210d8262 100644 --- a/dev/assets/index.md.BFdtMPYM.js +++ b/dev/assets/index.md.CUD5AAwV.js @@ -1 +1 @@ -import{_ as t,c as a,a5 as o,o as i}from"./chunks/framework.O43fB7X6.js";const m=JSON.parse('{"title":"What is GeometryOps.jl?","description":"","frontmatter":{"layout":"home","hero":{"name":"GeometryOps.jl","text":"","tagline":"Blazing fast geometry operations in pure Julia","image":{"src":"/logo.png","alt":"GeometryOps"},"actions":[{"theme":"brand","text":"Introduction","link":"/introduction"},{"theme":"alt","text":"View on Github","link":"https://github.com/JuliaGeo/GeometryOps.jl"},{"theme":"alt","text":"API Reference","link":"/api"}]},"features":[{"icon":"\\"Julia","title":"Pure Julia code","details":"Fast, understandable, extensible functions","link":"/introduction"},{"icon":"","title":"Literate programming","details":"Documented source code with examples!","link":"/source/methods/clipping/cut"},{"icon":"","title":"Full integration with GeoInterface","details":"Use any GeoInterface.jl-compatible geometry","link":"https://juliageo.org/GeoInterface.jl/stable"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),n={name:"index.md"};function s(r,e,l,c,d,h){return i(),a("div",null,e[0]||(e[0]=[o('

What is GeometryOps.jl?

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

How to navigate the docs

GeometryOps' docs are divided into three main sections: tutorials, explanations and source code.
Documentation and examples for many functions can be found in the source code section, since we use literate programming in GeometryOps.

  • Tutorials are meant to teach the fundamental concepts behind GeometryOps, and how to perform certain operations.
  • Explanations usually contain little code, and explain in more detail how GeometryOps works.
  • Source code usually contains explanations and examples at the top of the page, followed by annotated source code from that file.
',2)]))}const u=t(n,[["render",s]]);export{m as __pageData,u as default}; +import{_ as t,c as a,a5 as o,o as i}from"./chunks/framework.B_n_RGhH.js";const m=JSON.parse('{"title":"What is GeometryOps.jl?","description":"","frontmatter":{"layout":"home","hero":{"name":"GeometryOps.jl","text":"","tagline":"Blazing fast geometry operations in pure Julia","image":{"src":"/logo.png","alt":"GeometryOps"},"actions":[{"theme":"brand","text":"Introduction","link":"/introduction"},{"theme":"alt","text":"View on Github","link":"https://github.com/JuliaGeo/GeometryOps.jl"},{"theme":"alt","text":"API Reference","link":"/api"}]},"features":[{"icon":"\\"Julia","title":"Pure Julia code","details":"Fast, understandable, extensible functions","link":"/introduction"},{"icon":"","title":"Literate programming","details":"Documented source code with examples!","link":"/source/methods/clipping/cut"},{"icon":"","title":"Full integration with GeoInterface","details":"Use any GeoInterface.jl-compatible geometry","link":"https://juliageo.org/GeoInterface.jl/stable"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),n={name:"index.md"};function s(r,e,l,c,d,h){return i(),a("div",null,e[0]||(e[0]=[o('

What is GeometryOps.jl?

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

How to navigate the docs

GeometryOps' docs are divided into three main sections: tutorials, explanations and source code.
Documentation and examples for many functions can be found in the source code section, since we use literate programming in GeometryOps.

  • Tutorials are meant to teach the fundamental concepts behind GeometryOps, and how to perform certain operations.
  • Explanations usually contain little code, and explain in more detail how GeometryOps works.
  • Source code usually contains explanations and examples at the top of the page, followed by annotated source code from that file.
',2)]))}const u=t(n,[["render",s]]);export{m as __pageData,u as default}; diff --git a/dev/assets/index.md.BFdtMPYM.lean.js b/dev/assets/index.md.CUD5AAwV.lean.js similarity index 96% rename from dev/assets/index.md.BFdtMPYM.lean.js rename to dev/assets/index.md.CUD5AAwV.lean.js index a7247beb6..b210d8262 100644 --- a/dev/assets/index.md.BFdtMPYM.lean.js +++ b/dev/assets/index.md.CUD5AAwV.lean.js @@ -1 +1 @@ -import{_ as t,c as a,a5 as o,o as i}from"./chunks/framework.O43fB7X6.js";const m=JSON.parse('{"title":"What is GeometryOps.jl?","description":"","frontmatter":{"layout":"home","hero":{"name":"GeometryOps.jl","text":"","tagline":"Blazing fast geometry operations in pure Julia","image":{"src":"/logo.png","alt":"GeometryOps"},"actions":[{"theme":"brand","text":"Introduction","link":"/introduction"},{"theme":"alt","text":"View on Github","link":"https://github.com/JuliaGeo/GeometryOps.jl"},{"theme":"alt","text":"API Reference","link":"/api"}]},"features":[{"icon":"\\"Julia","title":"Pure Julia code","details":"Fast, understandable, extensible functions","link":"/introduction"},{"icon":"","title":"Literate programming","details":"Documented source code with examples!","link":"/source/methods/clipping/cut"},{"icon":"","title":"Full integration with GeoInterface","details":"Use any GeoInterface.jl-compatible geometry","link":"https://juliageo.org/GeoInterface.jl/stable"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),n={name:"index.md"};function s(r,e,l,c,d,h){return i(),a("div",null,e[0]||(e[0]=[o('

What is GeometryOps.jl?

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

How to navigate the docs

GeometryOps' docs are divided into three main sections: tutorials, explanations and source code.
Documentation and examples for many functions can be found in the source code section, since we use literate programming in GeometryOps.

  • Tutorials are meant to teach the fundamental concepts behind GeometryOps, and how to perform certain operations.
  • Explanations usually contain little code, and explain in more detail how GeometryOps works.
  • Source code usually contains explanations and examples at the top of the page, followed by annotated source code from that file.
',2)]))}const u=t(n,[["render",s]]);export{m as __pageData,u as default}; +import{_ as t,c as a,a5 as o,o as i}from"./chunks/framework.B_n_RGhH.js";const m=JSON.parse('{"title":"What is GeometryOps.jl?","description":"","frontmatter":{"layout":"home","hero":{"name":"GeometryOps.jl","text":"","tagline":"Blazing fast geometry operations in pure Julia","image":{"src":"/logo.png","alt":"GeometryOps"},"actions":[{"theme":"brand","text":"Introduction","link":"/introduction"},{"theme":"alt","text":"View on Github","link":"https://github.com/JuliaGeo/GeometryOps.jl"},{"theme":"alt","text":"API Reference","link":"/api"}]},"features":[{"icon":"\\"Julia","title":"Pure Julia code","details":"Fast, understandable, extensible functions","link":"/introduction"},{"icon":"","title":"Literate programming","details":"Documented source code with examples!","link":"/source/methods/clipping/cut"},{"icon":"","title":"Full integration with GeoInterface","details":"Use any GeoInterface.jl-compatible geometry","link":"https://juliageo.org/GeoInterface.jl/stable"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),n={name:"index.md"};function s(r,e,l,c,d,h){return i(),a("div",null,e[0]||(e[0]=[o('

What is GeometryOps.jl?

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

How to navigate the docs

GeometryOps' docs are divided into three main sections: tutorials, explanations and source code.
Documentation and examples for many functions can be found in the source code section, since we use literate programming in GeometryOps.

  • Tutorials are meant to teach the fundamental concepts behind GeometryOps, and how to perform certain operations.
  • Explanations usually contain little code, and explain in more detail how GeometryOps works.
  • Source code usually contains explanations and examples at the top of the page, followed by annotated source code from that file.
',2)]))}const u=t(n,[["render",s]]);export{m as __pageData,u as default}; diff --git a/dev/assets/introduction.md.CwyrQfOw.js b/dev/assets/introduction.md.CvSgtF5Z.js similarity index 95% rename from dev/assets/introduction.md.CwyrQfOw.js rename to dev/assets/introduction.md.CvSgtF5Z.js index 9f3d8672f..0cb3cd9ba 100644 --- a/dev/assets/introduction.md.CwyrQfOw.js +++ b/dev/assets/introduction.md.CvSgtF5Z.js @@ -1 +1 @@ -import{_ as a,c as t,a5 as o,o as i}from"./chunks/framework.O43fB7X6.js";const m=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"introduction.md","filePath":"introduction.md","lastUpdated":null}'),r={name:"introduction.md"};function n(c,e,s,p,l,d){return i(),t("div",null,e[0]||(e[0]=[o('

Introduction

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

Main concepts

The apply paradigm

Note

See the Primitive Functions page for more information on this.

The apply function allows you to decompose a given collection of geometries down to a certain level, and then operate on it.

Functionally, it's similar to map in the way you apply it to geometries.

apply and applyreduce take any geometry, vector of geometries, collection of geometries, or table (like Shapefile.Table, DataFrame, or GeoTable)!

What's this GeoInterface.Wrapper thing?

Write a comment about GeoInterface.Wrapper and why it helps in type stability to guarantee a particular return type.

',13)]))}const u=a(r,[["render",n]]);export{m as __pageData,u as default}; +import{_ as a,c as t,a5 as o,o as i}from"./chunks/framework.B_n_RGhH.js";const m=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"introduction.md","filePath":"introduction.md","lastUpdated":null}'),r={name:"introduction.md"};function n(c,e,s,p,l,d){return i(),t("div",null,e[0]||(e[0]=[o('

Introduction

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

Main concepts

The apply paradigm

Note

See the Primitive Functions page for more information on this.

The apply function allows you to decompose a given collection of geometries down to a certain level, and then operate on it.

Functionally, it's similar to map in the way you apply it to geometries.

apply and applyreduce take any geometry, vector of geometries, collection of geometries, or table (like Shapefile.Table, DataFrame, or GeoTable)!

What's this GeoInterface.Wrapper thing?

Write a comment about GeoInterface.Wrapper and why it helps in type stability to guarantee a particular return type.

',13)]))}const u=a(r,[["render",n]]);export{m as __pageData,u as default}; diff --git a/dev/assets/introduction.md.CwyrQfOw.lean.js b/dev/assets/introduction.md.CvSgtF5Z.lean.js similarity index 95% rename from dev/assets/introduction.md.CwyrQfOw.lean.js rename to dev/assets/introduction.md.CvSgtF5Z.lean.js index 9f3d8672f..0cb3cd9ba 100644 --- a/dev/assets/introduction.md.CwyrQfOw.lean.js +++ b/dev/assets/introduction.md.CvSgtF5Z.lean.js @@ -1 +1 @@ -import{_ as a,c as t,a5 as o,o as i}from"./chunks/framework.O43fB7X6.js";const m=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"introduction.md","filePath":"introduction.md","lastUpdated":null}'),r={name:"introduction.md"};function n(c,e,s,p,l,d){return i(),t("div",null,e[0]||(e[0]=[o('

Introduction

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

Main concepts

The apply paradigm

Note

See the Primitive Functions page for more information on this.

The apply function allows you to decompose a given collection of geometries down to a certain level, and then operate on it.

Functionally, it's similar to map in the way you apply it to geometries.

apply and applyreduce take any geometry, vector of geometries, collection of geometries, or table (like Shapefile.Table, DataFrame, or GeoTable)!

What's this GeoInterface.Wrapper thing?

Write a comment about GeoInterface.Wrapper and why it helps in type stability to guarantee a particular return type.

',13)]))}const u=a(r,[["render",n]]);export{m as __pageData,u as default}; +import{_ as a,c as t,a5 as o,o as i}from"./chunks/framework.B_n_RGhH.js";const m=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"introduction.md","filePath":"introduction.md","lastUpdated":null}'),r={name:"introduction.md"};function n(c,e,s,p,l,d){return i(),t("div",null,e[0]||(e[0]=[o('

Introduction

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

Main concepts

The apply paradigm

Note

See the Primitive Functions page for more information on this.

The apply function allows you to decompose a given collection of geometries down to a certain level, and then operate on it.

Functionally, it's similar to map in the way you apply it to geometries.

apply and applyreduce take any geometry, vector of geometries, collection of geometries, or table (like Shapefile.Table, DataFrame, or GeoTable)!

What's this GeoInterface.Wrapper thing?

Write a comment about GeoInterface.Wrapper and why it helps in type stability to guarantee a particular return type.

',13)]))}const u=a(r,[["render",n]]);export{m as __pageData,u as default}; diff --git a/dev/assets/xpwigpz.Cx40vhB3.png b/dev/assets/ixoxtgg.Cx40vhB3.png similarity index 100% rename from dev/assets/xpwigpz.Cx40vhB3.png rename to dev/assets/ixoxtgg.Cx40vhB3.png diff --git a/dev/assets/lzjbven.Cb0_DiYE.png b/dev/assets/jgamrhg.Cb0_DiYE.png similarity index 100% rename from dev/assets/lzjbven.Cb0_DiYE.png rename to dev/assets/jgamrhg.Cb0_DiYE.png diff --git a/dev/assets/jqaedzp.CvMMo01P.png b/dev/assets/jqaedzp.CvMMo01P.png deleted file mode 100644 index 3f4ff5dc3..000000000 Binary files a/dev/assets/jqaedzp.CvMMo01P.png and /dev/null differ diff --git a/dev/assets/lacykyt.C1qDiDY9.png b/dev/assets/lacykyt.C1qDiDY9.png new file mode 100644 index 000000000..88eec98f7 Binary files /dev/null and b/dev/assets/lacykyt.C1qDiDY9.png differ diff --git a/dev/assets/whxwitd.3sfpQl2i.png b/dev/assets/lfblsgc.3sfpQl2i.png similarity index 100% rename from dev/assets/whxwitd.3sfpQl2i.png rename to dev/assets/lfblsgc.3sfpQl2i.png diff --git a/dev/assets/xgwfyhv.Dab1-ETk.png b/dev/assets/mpaazvt.Dab1-ETk.png similarity index 100% rename from dev/assets/xgwfyhv.Dab1-ETk.png rename to dev/assets/mpaazvt.Dab1-ETk.png diff --git a/dev/assets/aacdycg.C3SxJ3x-.png b/dev/assets/nbefvdd.C3SxJ3x-.png similarity index 100% rename from dev/assets/aacdycg.C3SxJ3x-.png rename to dev/assets/nbefvdd.C3SxJ3x-.png diff --git a/dev/assets/kztduvn.DHcwB147.png b/dev/assets/nmgrusc.DHcwB147.png similarity index 100% rename from dev/assets/kztduvn.DHcwB147.png rename to dev/assets/nmgrusc.DHcwB147.png diff --git a/dev/assets/kliugtk.DC3TvBOO.png b/dev/assets/odbnzej.DC3TvBOO.png similarity index 100% rename from dev/assets/kliugtk.DC3TvBOO.png rename to dev/assets/odbnzej.DC3TvBOO.png diff --git a/dev/assets/ooercci.COt3ymN-.png b/dev/assets/ooercci.COt3ymN-.png new file mode 100644 index 000000000..0af340b87 Binary files /dev/null and b/dev/assets/ooercci.COt3ymN-.png differ diff --git a/dev/assets/qhvcraa.D5-bot8v.png b/dev/assets/peiypkn.D5-bot8v.png similarity index 100% rename from dev/assets/qhvcraa.D5-bot8v.png rename to dev/assets/peiypkn.D5-bot8v.png diff --git a/dev/assets/njwfzgd.CgiryX2p.png b/dev/assets/pjwvvrm.CgiryX2p.png similarity index 100% rename from dev/assets/njwfzgd.CgiryX2p.png rename to dev/assets/pjwvvrm.CgiryX2p.png diff --git a/dev/assets/gcuugnc.DeeQUply.png b/dev/assets/pkcsydu.DeeQUply.png similarity index 100% rename from dev/assets/gcuugnc.DeeQUply.png rename to dev/assets/pkcsydu.DeeQUply.png diff --git a/dev/assets/ppmunub.BAI46Sfr.png b/dev/assets/ppmunub.BAI46Sfr.png deleted file mode 100644 index 8beece10d..000000000 Binary files a/dev/assets/ppmunub.BAI46Sfr.png and /dev/null differ diff --git a/dev/assets/tzkihiu.Dz86q2IX.png b/dev/assets/pqtqdtt.Dz86q2IX.png similarity index 100% rename from dev/assets/tzkihiu.Dz86q2IX.png rename to dev/assets/pqtqdtt.Dz86q2IX.png diff --git a/dev/assets/piizsjm.CZy9YIUA.png b/dev/assets/quvcwbg.CZy9YIUA.png similarity index 100% rename from dev/assets/piizsjm.CZy9YIUA.png rename to dev/assets/quvcwbg.CZy9YIUA.png diff --git a/dev/assets/qvxoffb.B4GCyiuv.png b/dev/assets/qvxoffb.B4GCyiuv.png deleted file mode 100644 index 094d57d74..000000000 Binary files a/dev/assets/qvxoffb.B4GCyiuv.png and /dev/null differ diff --git a/dev/assets/qwcxfje.B3lHbAIs.png b/dev/assets/qwcxfje.B3lHbAIs.png new file mode 100644 index 000000000..62c089d72 Binary files /dev/null and b/dev/assets/qwcxfje.B3lHbAIs.png differ diff --git a/dev/assets/source_GeometryOps.md.BWgA5IIo.js b/dev/assets/source_GeometryOps.md.c3RKO_GD.js similarity index 99% rename from dev/assets/source_GeometryOps.md.BWgA5IIo.js rename to dev/assets/source_GeometryOps.md.c3RKO_GD.js index c73695550..ba36ecafd 100644 --- a/dev/assets/source_GeometryOps.md.BWgA5IIo.js +++ b/dev/assets/source_GeometryOps.md.c3RKO_GD.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"GeometryOps.jl","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOps.md","filePath":"source/GeometryOps.md","lastUpdated":null}'),h={name:"source/GeometryOps.md"};function t(k,s,p,e,E,r){return l(),a("div",null,s[0]||(s[0]=[n(`

GeometryOps.jl

julia
module GeometryOps
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"GeometryOps.jl","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOps.md","filePath":"source/GeometryOps.md","lastUpdated":null}'),h={name:"source/GeometryOps.md"};function t(k,s,p,e,E,r){return l(),a("div",null,s[0]||(s[0]=[n(`

GeometryOps.jl

julia
module GeometryOps
 
 include("../GeometryOpsCore/src/GeometryOpsCore.jl") # TODO: replace this with \`using GeometryOpsCore\`
 import .GeometryOpsCore
diff --git a/dev/assets/source_GeometryOps.md.BWgA5IIo.lean.js b/dev/assets/source_GeometryOps.md.c3RKO_GD.lean.js
similarity index 99%
rename from dev/assets/source_GeometryOps.md.BWgA5IIo.lean.js
rename to dev/assets/source_GeometryOps.md.c3RKO_GD.lean.js
index c73695550..ba36ecafd 100644
--- a/dev/assets/source_GeometryOps.md.BWgA5IIo.lean.js
+++ b/dev/assets/source_GeometryOps.md.c3RKO_GD.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"GeometryOps.jl","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOps.md","filePath":"source/GeometryOps.md","lastUpdated":null}'),h={name:"source/GeometryOps.md"};function t(k,s,p,e,E,r){return l(),a("div",null,s[0]||(s[0]=[n(`

GeometryOps.jl

julia
module GeometryOps
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"GeometryOps.jl","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOps.md","filePath":"source/GeometryOps.md","lastUpdated":null}'),h={name:"source/GeometryOps.md"};function t(k,s,p,e,E,r){return l(),a("div",null,s[0]||(s[0]=[n(`

GeometryOps.jl

julia
module GeometryOps
 
 include("../GeometryOpsCore/src/GeometryOpsCore.jl") # TODO: replace this with \`using GeometryOpsCore\`
 import .GeometryOpsCore
diff --git a/dev/assets/source_GeometryOpsFlexiJoinsExt_GeometryOpsFlexiJoinsExt.md.D3ozcglS.js b/dev/assets/source_GeometryOpsFlexiJoinsExt_GeometryOpsFlexiJoinsExt.md.HBhep5dV.js
similarity index 99%
rename from dev/assets/source_GeometryOpsFlexiJoinsExt_GeometryOpsFlexiJoinsExt.md.D3ozcglS.js
rename to dev/assets/source_GeometryOpsFlexiJoinsExt_GeometryOpsFlexiJoinsExt.md.HBhep5dV.js
index c4a2df00b..d701799da 100644
--- a/dev/assets/source_GeometryOpsFlexiJoinsExt_GeometryOpsFlexiJoinsExt.md.D3ozcglS.js
+++ b/dev/assets/source_GeometryOpsFlexiJoinsExt_GeometryOpsFlexiJoinsExt.md.HBhep5dV.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as h,o as n}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsFlexiJoinsExt/GeometryOpsFlexiJoinsExt.md","filePath":"source/GeometryOpsFlexiJoinsExt/GeometryOpsFlexiJoinsExt.md","lastUpdated":null}'),t={name:"source/GeometryOpsFlexiJoinsExt/GeometryOpsFlexiJoinsExt.md"};function k(e,s,p,l,r,E){return n(),a("div",null,s[0]||(s[0]=[h(`
julia
module GeometryOpsFlexiJoinsExt
+import{_ as i,c as a,a5 as h,o as n}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsFlexiJoinsExt/GeometryOpsFlexiJoinsExt.md","filePath":"source/GeometryOpsFlexiJoinsExt/GeometryOpsFlexiJoinsExt.md","lastUpdated":null}'),t={name:"source/GeometryOpsFlexiJoinsExt/GeometryOpsFlexiJoinsExt.md"};function k(e,s,p,l,r,E){return n(),a("div",null,s[0]||(s[0]=[h(`
julia
module GeometryOpsFlexiJoinsExt
 
 using GeometryOps
 using FlexiJoins
diff --git a/dev/assets/source_GeometryOpsFlexiJoinsExt_GeometryOpsFlexiJoinsExt.md.D3ozcglS.lean.js b/dev/assets/source_GeometryOpsFlexiJoinsExt_GeometryOpsFlexiJoinsExt.md.HBhep5dV.lean.js
similarity index 99%
rename from dev/assets/source_GeometryOpsFlexiJoinsExt_GeometryOpsFlexiJoinsExt.md.D3ozcglS.lean.js
rename to dev/assets/source_GeometryOpsFlexiJoinsExt_GeometryOpsFlexiJoinsExt.md.HBhep5dV.lean.js
index c4a2df00b..d701799da 100644
--- a/dev/assets/source_GeometryOpsFlexiJoinsExt_GeometryOpsFlexiJoinsExt.md.D3ozcglS.lean.js
+++ b/dev/assets/source_GeometryOpsFlexiJoinsExt_GeometryOpsFlexiJoinsExt.md.HBhep5dV.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as h,o as n}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsFlexiJoinsExt/GeometryOpsFlexiJoinsExt.md","filePath":"source/GeometryOpsFlexiJoinsExt/GeometryOpsFlexiJoinsExt.md","lastUpdated":null}'),t={name:"source/GeometryOpsFlexiJoinsExt/GeometryOpsFlexiJoinsExt.md"};function k(e,s,p,l,r,E){return n(),a("div",null,s[0]||(s[0]=[h(`
julia
module GeometryOpsFlexiJoinsExt
+import{_ as i,c as a,a5 as h,o as n}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsFlexiJoinsExt/GeometryOpsFlexiJoinsExt.md","filePath":"source/GeometryOpsFlexiJoinsExt/GeometryOpsFlexiJoinsExt.md","lastUpdated":null}'),t={name:"source/GeometryOpsFlexiJoinsExt/GeometryOpsFlexiJoinsExt.md"};function k(e,s,p,l,r,E){return n(),a("div",null,s[0]||(s[0]=[h(`
julia
module GeometryOpsFlexiJoinsExt
 
 using GeometryOps
 using FlexiJoins
diff --git a/dev/assets/source_GeometryOpsLibGEOSExt_GeometryOpsLibGEOSExt.md.DPeG-P6A.js b/dev/assets/source_GeometryOpsLibGEOSExt_GeometryOpsLibGEOSExt.md.DXXByX-R.js
similarity index 98%
rename from dev/assets/source_GeometryOpsLibGEOSExt_GeometryOpsLibGEOSExt.md.DPeG-P6A.js
rename to dev/assets/source_GeometryOpsLibGEOSExt_GeometryOpsLibGEOSExt.md.DXXByX-R.js
index cbac8b837..32e8d76b3 100644
--- a/dev/assets/source_GeometryOpsLibGEOSExt_GeometryOpsLibGEOSExt.md.DPeG-P6A.js
+++ b/dev/assets/source_GeometryOpsLibGEOSExt_GeometryOpsLibGEOSExt.md.DXXByX-R.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/GeometryOpsLibGEOSExt.md","filePath":"source/GeometryOpsLibGEOSExt/GeometryOpsLibGEOSExt.md","lastUpdated":null}'),e={name:"source/GeometryOpsLibGEOSExt/GeometryOpsLibGEOSExt.md"};function h(l,s,p,k,r,E){return t(),a("div",null,s[0]||(s[0]=[n(`
julia
module GeometryOpsLibGEOSExt
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/GeometryOpsLibGEOSExt.md","filePath":"source/GeometryOpsLibGEOSExt/GeometryOpsLibGEOSExt.md","lastUpdated":null}'),e={name:"source/GeometryOpsLibGEOSExt/GeometryOpsLibGEOSExt.md"};function h(l,s,p,k,r,E){return t(),a("div",null,s[0]||(s[0]=[n(`
julia
module GeometryOpsLibGEOSExt
 
 import GeometryOps as GO, LibGEOS as LG
 import GeoInterface as GI
diff --git a/dev/assets/source_GeometryOpsLibGEOSExt_GeometryOpsLibGEOSExt.md.DPeG-P6A.lean.js b/dev/assets/source_GeometryOpsLibGEOSExt_GeometryOpsLibGEOSExt.md.DXXByX-R.lean.js
similarity index 98%
rename from dev/assets/source_GeometryOpsLibGEOSExt_GeometryOpsLibGEOSExt.md.DPeG-P6A.lean.js
rename to dev/assets/source_GeometryOpsLibGEOSExt_GeometryOpsLibGEOSExt.md.DXXByX-R.lean.js
index cbac8b837..32e8d76b3 100644
--- a/dev/assets/source_GeometryOpsLibGEOSExt_GeometryOpsLibGEOSExt.md.DPeG-P6A.lean.js
+++ b/dev/assets/source_GeometryOpsLibGEOSExt_GeometryOpsLibGEOSExt.md.DXXByX-R.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/GeometryOpsLibGEOSExt.md","filePath":"source/GeometryOpsLibGEOSExt/GeometryOpsLibGEOSExt.md","lastUpdated":null}'),e={name:"source/GeometryOpsLibGEOSExt/GeometryOpsLibGEOSExt.md"};function h(l,s,p,k,r,E){return t(),a("div",null,s[0]||(s[0]=[n(`
julia
module GeometryOpsLibGEOSExt
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/GeometryOpsLibGEOSExt.md","filePath":"source/GeometryOpsLibGEOSExt/GeometryOpsLibGEOSExt.md","lastUpdated":null}'),e={name:"source/GeometryOpsLibGEOSExt/GeometryOpsLibGEOSExt.md"};function h(l,s,p,k,r,E){return t(),a("div",null,s[0]||(s[0]=[n(`
julia
module GeometryOpsLibGEOSExt
 
 import GeometryOps as GO, LibGEOS as LG
 import GeoInterface as GI
diff --git a/dev/assets/source_GeometryOpsLibGEOSExt_buffer.md.CbY5NGvL.js b/dev/assets/source_GeometryOpsLibGEOSExt_buffer.md.Brzai-EG.js
similarity index 99%
rename from dev/assets/source_GeometryOpsLibGEOSExt_buffer.md.CbY5NGvL.js
rename to dev/assets/source_GeometryOpsLibGEOSExt_buffer.md.Brzai-EG.js
index ad60fcbb2..5e3c7a1ac 100644
--- a/dev/assets/source_GeometryOpsLibGEOSExt_buffer.md.CbY5NGvL.js
+++ b/dev/assets/source_GeometryOpsLibGEOSExt_buffer.md.Brzai-EG.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/buffer.md","filePath":"source/GeometryOpsLibGEOSExt/buffer.md","lastUpdated":null}'),k={name:"source/GeometryOpsLibGEOSExt/buffer.md"};function t(l,s,p,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n(`
julia
const _GEOS_CAPSTYLE_LOOKUP = Dict{Symbol, LG.GEOSBufCapStyles}(
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/buffer.md","filePath":"source/GeometryOpsLibGEOSExt/buffer.md","lastUpdated":null}'),k={name:"source/GeometryOpsLibGEOSExt/buffer.md"};function t(l,s,p,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n(`
julia
const _GEOS_CAPSTYLE_LOOKUP = Dict{Symbol, LG.GEOSBufCapStyles}(
     :round => LG.GEOSBUF_CAP_ROUND,
     :flat => LG.GEOSBUF_CAP_FLAT,
     :square => LG.GEOSBUF_CAP_SQUARE,
diff --git a/dev/assets/source_GeometryOpsLibGEOSExt_buffer.md.CbY5NGvL.lean.js b/dev/assets/source_GeometryOpsLibGEOSExt_buffer.md.Brzai-EG.lean.js
similarity index 99%
rename from dev/assets/source_GeometryOpsLibGEOSExt_buffer.md.CbY5NGvL.lean.js
rename to dev/assets/source_GeometryOpsLibGEOSExt_buffer.md.Brzai-EG.lean.js
index ad60fcbb2..5e3c7a1ac 100644
--- a/dev/assets/source_GeometryOpsLibGEOSExt_buffer.md.CbY5NGvL.lean.js
+++ b/dev/assets/source_GeometryOpsLibGEOSExt_buffer.md.Brzai-EG.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/buffer.md","filePath":"source/GeometryOpsLibGEOSExt/buffer.md","lastUpdated":null}'),k={name:"source/GeometryOpsLibGEOSExt/buffer.md"};function t(l,s,p,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n(`
julia
const _GEOS_CAPSTYLE_LOOKUP = Dict{Symbol, LG.GEOSBufCapStyles}(
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/buffer.md","filePath":"source/GeometryOpsLibGEOSExt/buffer.md","lastUpdated":null}'),k={name:"source/GeometryOpsLibGEOSExt/buffer.md"};function t(l,s,p,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n(`
julia
const _GEOS_CAPSTYLE_LOOKUP = Dict{Symbol, LG.GEOSBufCapStyles}(
     :round => LG.GEOSBUF_CAP_ROUND,
     :flat => LG.GEOSBUF_CAP_FLAT,
     :square => LG.GEOSBUF_CAP_SQUARE,
diff --git a/dev/assets/source_GeometryOpsLibGEOSExt_segmentize.md.Q_Gm5QTR.js b/dev/assets/source_GeometryOpsLibGEOSExt_segmentize.md.DaXDPzTK.js
similarity index 98%
rename from dev/assets/source_GeometryOpsLibGEOSExt_segmentize.md.Q_Gm5QTR.js
rename to dev/assets/source_GeometryOpsLibGEOSExt_segmentize.md.DaXDPzTK.js
index 4caa4f46e..79b4b18da 100644
--- a/dev/assets/source_GeometryOpsLibGEOSExt_segmentize.md.Q_Gm5QTR.js
+++ b/dev/assets/source_GeometryOpsLibGEOSExt_segmentize.md.DaXDPzTK.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Segmentize","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/segmentize.md","filePath":"source/GeometryOpsLibGEOSExt/segmentize.md","lastUpdated":null}'),e={name:"source/GeometryOpsLibGEOSExt/segmentize.md"};function h(k,s,l,p,r,E){return t(),a("div",null,s[0]||(s[0]=[n(`

Segmentize

julia
import GeometryOps: segmentize, apply

This file implements the LibGEOS segmentization method for GeometryOps.

julia
function _segmentize_geos(geom::LG.AbstractGeometry, max_distance)
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Segmentize","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/segmentize.md","filePath":"source/GeometryOpsLibGEOSExt/segmentize.md","lastUpdated":null}'),e={name:"source/GeometryOpsLibGEOSExt/segmentize.md"};function h(k,s,l,p,r,E){return t(),a("div",null,s[0]||(s[0]=[n(`

Segmentize

julia
import GeometryOps: segmentize, apply

This file implements the LibGEOS segmentization method for GeometryOps.

julia
function _segmentize_geos(geom::LG.AbstractGeometry, max_distance)
     context = LG.get_context(geom)
     result = LG.GEOSDensify_r(context, geom, max_distance)
     if result == C_NULL
diff --git a/dev/assets/source_GeometryOpsLibGEOSExt_segmentize.md.Q_Gm5QTR.lean.js b/dev/assets/source_GeometryOpsLibGEOSExt_segmentize.md.DaXDPzTK.lean.js
similarity index 98%
rename from dev/assets/source_GeometryOpsLibGEOSExt_segmentize.md.Q_Gm5QTR.lean.js
rename to dev/assets/source_GeometryOpsLibGEOSExt_segmentize.md.DaXDPzTK.lean.js
index 4caa4f46e..79b4b18da 100644
--- a/dev/assets/source_GeometryOpsLibGEOSExt_segmentize.md.Q_Gm5QTR.lean.js
+++ b/dev/assets/source_GeometryOpsLibGEOSExt_segmentize.md.DaXDPzTK.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Segmentize","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/segmentize.md","filePath":"source/GeometryOpsLibGEOSExt/segmentize.md","lastUpdated":null}'),e={name:"source/GeometryOpsLibGEOSExt/segmentize.md"};function h(k,s,l,p,r,E){return t(),a("div",null,s[0]||(s[0]=[n(`

Segmentize

julia
import GeometryOps: segmentize, apply

This file implements the LibGEOS segmentization method for GeometryOps.

julia
function _segmentize_geos(geom::LG.AbstractGeometry, max_distance)
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Segmentize","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/segmentize.md","filePath":"source/GeometryOpsLibGEOSExt/segmentize.md","lastUpdated":null}'),e={name:"source/GeometryOpsLibGEOSExt/segmentize.md"};function h(k,s,l,p,r,E){return t(),a("div",null,s[0]||(s[0]=[n(`

Segmentize

julia
import GeometryOps: segmentize, apply

This file implements the LibGEOS segmentization method for GeometryOps.

julia
function _segmentize_geos(geom::LG.AbstractGeometry, max_distance)
     context = LG.get_context(geom)
     result = LG.GEOSDensify_r(context, geom, max_distance)
     if result == C_NULL
diff --git a/dev/assets/source_GeometryOpsLibGEOSExt_simple_overrides.md.BM03vzNZ.js b/dev/assets/source_GeometryOpsLibGEOSExt_simple_overrides.md.MFwVo7KW.js
similarity index 99%
rename from dev/assets/source_GeometryOpsLibGEOSExt_simple_overrides.md.BM03vzNZ.js
rename to dev/assets/source_GeometryOpsLibGEOSExt_simple_overrides.md.MFwVo7KW.js
index 9b59e6345..b579d34a1 100644
--- a/dev/assets/source_GeometryOpsLibGEOSExt_simple_overrides.md.BM03vzNZ.js
+++ b/dev/assets/source_GeometryOpsLibGEOSExt_simple_overrides.md.MFwVo7KW.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as h,o as n}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Simple overrides","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/simple_overrides.md","filePath":"source/GeometryOpsLibGEOSExt/simple_overrides.md","lastUpdated":null}'),t={name:"source/GeometryOpsLibGEOSExt/simple_overrides.md"};function k(l,s,e,p,r,d){return n(),a("div",null,s[0]||(s[0]=[h(`

Simple overrides

This file contains simple overrides for GEOS, essentially only those functions which have direct counterparts in LG and only require conversion before calling.

Polygon set operations

Difference

julia
function GO.difference(::GEOS, geom_a, geom_b; target=nothing, calc_extent = false)
+import{_ as i,c as a,a5 as h,o as n}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Simple overrides","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/simple_overrides.md","filePath":"source/GeometryOpsLibGEOSExt/simple_overrides.md","lastUpdated":null}'),t={name:"source/GeometryOpsLibGEOSExt/simple_overrides.md"};function k(l,s,e,p,r,d){return n(),a("div",null,s[0]||(s[0]=[h(`

Simple overrides

This file contains simple overrides for GEOS, essentially only those functions which have direct counterparts in LG and only require conversion before calling.

Polygon set operations

Difference

julia
function GO.difference(::GEOS, geom_a, geom_b; target=nothing, calc_extent = false)
     return _wrap(LG.difference(GI.convert(LG, geom_a), GI.convert(LG, geom_b)); crs = GI.crs(geom_a), calc_extent)
 end

Union

julia
function GO.union(::GEOS, geom_a, geom_b; target=nothing, calc_extent = false)
     return _wrap(LG.union(GI.convert(LG, geom_a), GI.convert(LG, geom_b)); crs = GI.crs(geom_a), calc_extent)
diff --git a/dev/assets/source_GeometryOpsLibGEOSExt_simple_overrides.md.BM03vzNZ.lean.js b/dev/assets/source_GeometryOpsLibGEOSExt_simple_overrides.md.MFwVo7KW.lean.js
similarity index 99%
rename from dev/assets/source_GeometryOpsLibGEOSExt_simple_overrides.md.BM03vzNZ.lean.js
rename to dev/assets/source_GeometryOpsLibGEOSExt_simple_overrides.md.MFwVo7KW.lean.js
index 9b59e6345..b579d34a1 100644
--- a/dev/assets/source_GeometryOpsLibGEOSExt_simple_overrides.md.BM03vzNZ.lean.js
+++ b/dev/assets/source_GeometryOpsLibGEOSExt_simple_overrides.md.MFwVo7KW.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as h,o as n}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Simple overrides","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/simple_overrides.md","filePath":"source/GeometryOpsLibGEOSExt/simple_overrides.md","lastUpdated":null}'),t={name:"source/GeometryOpsLibGEOSExt/simple_overrides.md"};function k(l,s,e,p,r,d){return n(),a("div",null,s[0]||(s[0]=[h(`

Simple overrides

This file contains simple overrides for GEOS, essentially only those functions which have direct counterparts in LG and only require conversion before calling.

Polygon set operations

Difference

julia
function GO.difference(::GEOS, geom_a, geom_b; target=nothing, calc_extent = false)
+import{_ as i,c as a,a5 as h,o as n}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Simple overrides","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/simple_overrides.md","filePath":"source/GeometryOpsLibGEOSExt/simple_overrides.md","lastUpdated":null}'),t={name:"source/GeometryOpsLibGEOSExt/simple_overrides.md"};function k(l,s,e,p,r,d){return n(),a("div",null,s[0]||(s[0]=[h(`

Simple overrides

This file contains simple overrides for GEOS, essentially only those functions which have direct counterparts in LG and only require conversion before calling.

Polygon set operations

Difference

julia
function GO.difference(::GEOS, geom_a, geom_b; target=nothing, calc_extent = false)
     return _wrap(LG.difference(GI.convert(LG, geom_a), GI.convert(LG, geom_b)); crs = GI.crs(geom_a), calc_extent)
 end

Union

julia
function GO.union(::GEOS, geom_a, geom_b; target=nothing, calc_extent = false)
     return _wrap(LG.union(GI.convert(LG, geom_a), GI.convert(LG, geom_b)); crs = GI.crs(geom_a), calc_extent)
diff --git a/dev/assets/source_GeometryOpsLibGEOSExt_simplify.md.Dkpr7UA7.js b/dev/assets/source_GeometryOpsLibGEOSExt_simplify.md.BZkQX4Vm.js
similarity index 98%
rename from dev/assets/source_GeometryOpsLibGEOSExt_simplify.md.Dkpr7UA7.js
rename to dev/assets/source_GeometryOpsLibGEOSExt_simplify.md.BZkQX4Vm.js
index 42dedc26d..64eeca3c1 100644
--- a/dev/assets/source_GeometryOpsLibGEOSExt_simplify.md.Dkpr7UA7.js
+++ b/dev/assets/source_GeometryOpsLibGEOSExt_simplify.md.BZkQX4Vm.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/simplify.md","filePath":"source/GeometryOpsLibGEOSExt/simplify.md","lastUpdated":null}'),k={name:"source/GeometryOpsLibGEOSExt/simplify.md"};function l(t,s,p,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n(`

Address potential ambiguities

julia
GO._simplify(::GI.PointTrait, ::GO.GEOS, geom; kw...) = geom
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/simplify.md","filePath":"source/GeometryOpsLibGEOSExt/simplify.md","lastUpdated":null}'),k={name:"source/GeometryOpsLibGEOSExt/simplify.md"};function l(t,s,p,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n(`

Address potential ambiguities

julia
GO._simplify(::GI.PointTrait, ::GO.GEOS, geom; kw...) = geom
 GO._simplify(::GI.MultiPointTrait, ::GO.GEOS, geom; kw...) = geom
 
 function GO._simplify(::GI.AbstractGeometryTrait, alg::GO.GEOS, geom; kwargs...)
diff --git a/dev/assets/source_GeometryOpsLibGEOSExt_simplify.md.Dkpr7UA7.lean.js b/dev/assets/source_GeometryOpsLibGEOSExt_simplify.md.BZkQX4Vm.lean.js
similarity index 98%
rename from dev/assets/source_GeometryOpsLibGEOSExt_simplify.md.Dkpr7UA7.lean.js
rename to dev/assets/source_GeometryOpsLibGEOSExt_simplify.md.BZkQX4Vm.lean.js
index 42dedc26d..64eeca3c1 100644
--- a/dev/assets/source_GeometryOpsLibGEOSExt_simplify.md.Dkpr7UA7.lean.js
+++ b/dev/assets/source_GeometryOpsLibGEOSExt_simplify.md.BZkQX4Vm.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/simplify.md","filePath":"source/GeometryOpsLibGEOSExt/simplify.md","lastUpdated":null}'),k={name:"source/GeometryOpsLibGEOSExt/simplify.md"};function l(t,s,p,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n(`

Address potential ambiguities

julia
GO._simplify(::GI.PointTrait, ::GO.GEOS, geom; kw...) = geom
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsLibGEOSExt/simplify.md","filePath":"source/GeometryOpsLibGEOSExt/simplify.md","lastUpdated":null}'),k={name:"source/GeometryOpsLibGEOSExt/simplify.md"};function l(t,s,p,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n(`

Address potential ambiguities

julia
GO._simplify(::GI.PointTrait, ::GO.GEOS, geom; kw...) = geom
 GO._simplify(::GI.MultiPointTrait, ::GO.GEOS, geom; kw...) = geom
 
 function GO._simplify(::GI.AbstractGeometryTrait, alg::GO.GEOS, geom; kwargs...)
diff --git a/dev/assets/source_GeometryOpsProjExt_GeometryOpsProjExt.md.Bior9t6L.js b/dev/assets/source_GeometryOpsProjExt_GeometryOpsProjExt.md.Dj40qLug.js
similarity index 93%
rename from dev/assets/source_GeometryOpsProjExt_GeometryOpsProjExt.md.Bior9t6L.js
rename to dev/assets/source_GeometryOpsProjExt_GeometryOpsProjExt.md.Dj40qLug.js
index 102813b33..b801b6b47 100644
--- a/dev/assets/source_GeometryOpsProjExt_GeometryOpsProjExt.md.Bior9t6L.js
+++ b/dev/assets/source_GeometryOpsProjExt_GeometryOpsProjExt.md.Dj40qLug.js
@@ -1,4 +1,4 @@
-import{_ as e,c as a,a5 as i,o as t}from"./chunks/framework.O43fB7X6.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsProjExt/GeometryOpsProjExt.md","filePath":"source/GeometryOpsProjExt/GeometryOpsProjExt.md","lastUpdated":null}'),n={name:"source/GeometryOpsProjExt/GeometryOpsProjExt.md"};function p(l,s,r,o,h,k){return t(),a("div",null,s[0]||(s[0]=[i(`
julia
module GeometryOpsProjExt
+import{_ as e,c as a,a5 as i,o as t}from"./chunks/framework.B_n_RGhH.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsProjExt/GeometryOpsProjExt.md","filePath":"source/GeometryOpsProjExt/GeometryOpsProjExt.md","lastUpdated":null}'),n={name:"source/GeometryOpsProjExt/GeometryOpsProjExt.md"};function p(l,s,r,o,h,k){return t(),a("div",null,s[0]||(s[0]=[i(`
julia
module GeometryOpsProjExt
 
 using GeometryOps, Proj
 
diff --git a/dev/assets/source_GeometryOpsProjExt_GeometryOpsProjExt.md.Bior9t6L.lean.js b/dev/assets/source_GeometryOpsProjExt_GeometryOpsProjExt.md.Dj40qLug.lean.js
similarity index 93%
rename from dev/assets/source_GeometryOpsProjExt_GeometryOpsProjExt.md.Bior9t6L.lean.js
rename to dev/assets/source_GeometryOpsProjExt_GeometryOpsProjExt.md.Dj40qLug.lean.js
index 102813b33..b801b6b47 100644
--- a/dev/assets/source_GeometryOpsProjExt_GeometryOpsProjExt.md.Bior9t6L.lean.js
+++ b/dev/assets/source_GeometryOpsProjExt_GeometryOpsProjExt.md.Dj40qLug.lean.js
@@ -1,4 +1,4 @@
-import{_ as e,c as a,a5 as i,o as t}from"./chunks/framework.O43fB7X6.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsProjExt/GeometryOpsProjExt.md","filePath":"source/GeometryOpsProjExt/GeometryOpsProjExt.md","lastUpdated":null}'),n={name:"source/GeometryOpsProjExt/GeometryOpsProjExt.md"};function p(l,s,r,o,h,k){return t(),a("div",null,s[0]||(s[0]=[i(`
julia
module GeometryOpsProjExt
+import{_ as e,c as a,a5 as i,o as t}from"./chunks/framework.B_n_RGhH.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsProjExt/GeometryOpsProjExt.md","filePath":"source/GeometryOpsProjExt/GeometryOpsProjExt.md","lastUpdated":null}'),n={name:"source/GeometryOpsProjExt/GeometryOpsProjExt.md"};function p(l,s,r,o,h,k){return t(),a("div",null,s[0]||(s[0]=[i(`
julia
module GeometryOpsProjExt
 
 using GeometryOps, Proj
 
diff --git a/dev/assets/source_GeometryOpsProjExt_reproject.md.CiSVYFrY.js b/dev/assets/source_GeometryOpsProjExt_reproject.md.Bt073qSk.js
similarity index 99%
rename from dev/assets/source_GeometryOpsProjExt_reproject.md.CiSVYFrY.js
rename to dev/assets/source_GeometryOpsProjExt_reproject.md.Bt073qSk.js
index 0920125ef..454f4a0e5 100644
--- a/dev/assets/source_GeometryOpsProjExt_reproject.md.CiSVYFrY.js
+++ b/dev/assets/source_GeometryOpsProjExt_reproject.md.Bt073qSk.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsProjExt/reproject.md","filePath":"source/GeometryOpsProjExt/reproject.md","lastUpdated":null}'),k={name:"source/GeometryOpsProjExt/reproject.md"};function t(p,s,l,e,r,E){return h(),a("div",null,s[0]||(s[0]=[n(`
julia
import GeometryOps: GI, GeoInterface, reproject, apply, transform, _is3d, _True, _False
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsProjExt/reproject.md","filePath":"source/GeometryOpsProjExt/reproject.md","lastUpdated":null}'),k={name:"source/GeometryOpsProjExt/reproject.md"};function t(p,s,l,e,r,E){return h(),a("div",null,s[0]||(s[0]=[n(`
julia
import GeometryOps: GI, GeoInterface, reproject, apply, transform, _is3d, _True, _False
 import Proj
 
 function reproject(geom;
diff --git a/dev/assets/source_GeometryOpsProjExt_reproject.md.CiSVYFrY.lean.js b/dev/assets/source_GeometryOpsProjExt_reproject.md.Bt073qSk.lean.js
similarity index 99%
rename from dev/assets/source_GeometryOpsProjExt_reproject.md.CiSVYFrY.lean.js
rename to dev/assets/source_GeometryOpsProjExt_reproject.md.Bt073qSk.lean.js
index 0920125ef..454f4a0e5 100644
--- a/dev/assets/source_GeometryOpsProjExt_reproject.md.CiSVYFrY.lean.js
+++ b/dev/assets/source_GeometryOpsProjExt_reproject.md.Bt073qSk.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsProjExt/reproject.md","filePath":"source/GeometryOpsProjExt/reproject.md","lastUpdated":null}'),k={name:"source/GeometryOpsProjExt/reproject.md"};function t(p,s,l,e,r,E){return h(),a("div",null,s[0]||(s[0]=[n(`
julia
import GeometryOps: GI, GeoInterface, reproject, apply, transform, _is3d, _True, _False
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsProjExt/reproject.md","filePath":"source/GeometryOpsProjExt/reproject.md","lastUpdated":null}'),k={name:"source/GeometryOpsProjExt/reproject.md"};function t(p,s,l,e,r,E){return h(),a("div",null,s[0]||(s[0]=[n(`
julia
import GeometryOps: GI, GeoInterface, reproject, apply, transform, _is3d, _True, _False
 import Proj
 
 function reproject(geom;
diff --git a/dev/assets/source_GeometryOpsProjExt_segmentize.md.DGh0GBgT.js b/dev/assets/source_GeometryOpsProjExt_segmentize.md.CohFVrr_.js
similarity index 98%
rename from dev/assets/source_GeometryOpsProjExt_segmentize.md.DGh0GBgT.js
rename to dev/assets/source_GeometryOpsProjExt_segmentize.md.CohFVrr_.js
index 29b0d85b3..6fa3dcf4d 100644
--- a/dev/assets/source_GeometryOpsProjExt_segmentize.md.DGh0GBgT.js
+++ b/dev/assets/source_GeometryOpsProjExt_segmentize.md.CohFVrr_.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as e}from"./chunks/framework.O43fB7X6.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsProjExt/segmentize.md","filePath":"source/GeometryOpsProjExt/segmentize.md","lastUpdated":null}'),t={name:"source/GeometryOpsProjExt/segmentize.md"};function h(k,s,l,p,d,r){return e(),a("div",null,s[0]||(s[0]=[n(`

This holds the segmentize geodesic functionality.

julia
import GeometryOps: GeodesicSegments, _fill_linear_kernel!
+import{_ as i,c as a,a5 as n,o as e}from"./chunks/framework.B_n_RGhH.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsProjExt/segmentize.md","filePath":"source/GeometryOpsProjExt/segmentize.md","lastUpdated":null}'),t={name:"source/GeometryOpsProjExt/segmentize.md"};function h(k,s,l,p,d,r){return e(),a("div",null,s[0]||(s[0]=[n(`

This holds the segmentize geodesic functionality.

julia
import GeometryOps: GeodesicSegments, _fill_linear_kernel!
 import Proj
 
 function GeometryOps.GeodesicSegments(; max_distance, equatorial_radius::Real=6378137, flattening::Real=1/298.257223563, geodesic::Proj.geod_geodesic = Proj.geod_geodesic(equatorial_radius, flattening))
diff --git a/dev/assets/source_GeometryOpsProjExt_segmentize.md.DGh0GBgT.lean.js b/dev/assets/source_GeometryOpsProjExt_segmentize.md.CohFVrr_.lean.js
similarity index 98%
rename from dev/assets/source_GeometryOpsProjExt_segmentize.md.DGh0GBgT.lean.js
rename to dev/assets/source_GeometryOpsProjExt_segmentize.md.CohFVrr_.lean.js
index 29b0d85b3..6fa3dcf4d 100644
--- a/dev/assets/source_GeometryOpsProjExt_segmentize.md.DGh0GBgT.lean.js
+++ b/dev/assets/source_GeometryOpsProjExt_segmentize.md.CohFVrr_.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as e}from"./chunks/framework.O43fB7X6.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsProjExt/segmentize.md","filePath":"source/GeometryOpsProjExt/segmentize.md","lastUpdated":null}'),t={name:"source/GeometryOpsProjExt/segmentize.md"};function h(k,s,l,p,d,r){return e(),a("div",null,s[0]||(s[0]=[n(`

This holds the segmentize geodesic functionality.

julia
import GeometryOps: GeodesicSegments, _fill_linear_kernel!
+import{_ as i,c as a,a5 as n,o as e}from"./chunks/framework.B_n_RGhH.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOpsProjExt/segmentize.md","filePath":"source/GeometryOpsProjExt/segmentize.md","lastUpdated":null}'),t={name:"source/GeometryOpsProjExt/segmentize.md"};function h(k,s,l,p,d,r){return e(),a("div",null,s[0]||(s[0]=[n(`

This holds the segmentize geodesic functionality.

julia
import GeometryOps: GeodesicSegments, _fill_linear_kernel!
 import Proj
 
 function GeometryOps.GeodesicSegments(; max_distance, equatorial_radius::Real=6378137, flattening::Real=1/298.257223563, geodesic::Proj.geod_geodesic = Proj.geod_geodesic(equatorial_radius, flattening))
diff --git a/dev/assets/source_methods_angles.md.CHjiX-2k.js b/dev/assets/source_methods_angles.md.DsOXdPpI.js
similarity index 99%
rename from dev/assets/source_methods_angles.md.CHjiX-2k.js
rename to dev/assets/source_methods_angles.md.DsOXdPpI.js
index 8b06afd8a..b2f852165 100644
--- a/dev/assets/source_methods_angles.md.CHjiX-2k.js
+++ b/dev/assets/source_methods_angles.md.DsOXdPpI.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const l="/GeometryOps.jl/dev/assets/jqhztwg.Dig-DWOQ.png",y=JSON.parse('{"title":"Angles","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/angles.md","filePath":"source/methods/angles.md","lastUpdated":null}'),k={name:"source/methods/angles.md"};function t(p,s,e,r,E,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Angles

julia
export angles

What is angles?

Angles are the angles formed by a given geometries line segments, if it has line segments.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const l="/GeometryOps.jl/dev/assets/byztndv.Dig-DWOQ.png",y=JSON.parse('{"title":"Angles","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/angles.md","filePath":"source/methods/angles.md","lastUpdated":null}'),k={name:"source/methods/angles.md"};function t(p,s,e,r,E,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Angles

julia
export angles

What is angles?

Angles are the angles formed by a given geometries line segments, if it has line segments.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie, CairoMakie
 
diff --git a/dev/assets/source_methods_angles.md.CHjiX-2k.lean.js b/dev/assets/source_methods_angles.md.DsOXdPpI.lean.js
similarity index 99%
rename from dev/assets/source_methods_angles.md.CHjiX-2k.lean.js
rename to dev/assets/source_methods_angles.md.DsOXdPpI.lean.js
index 8b06afd8a..b2f852165 100644
--- a/dev/assets/source_methods_angles.md.CHjiX-2k.lean.js
+++ b/dev/assets/source_methods_angles.md.DsOXdPpI.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const l="/GeometryOps.jl/dev/assets/jqhztwg.Dig-DWOQ.png",y=JSON.parse('{"title":"Angles","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/angles.md","filePath":"source/methods/angles.md","lastUpdated":null}'),k={name:"source/methods/angles.md"};function t(p,s,e,r,E,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Angles

julia
export angles

What is angles?

Angles are the angles formed by a given geometries line segments, if it has line segments.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const l="/GeometryOps.jl/dev/assets/byztndv.Dig-DWOQ.png",y=JSON.parse('{"title":"Angles","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/angles.md","filePath":"source/methods/angles.md","lastUpdated":null}'),k={name:"source/methods/angles.md"};function t(p,s,e,r,E,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Angles

julia
export angles

What is angles?

Angles are the angles formed by a given geometries line segments, if it has line segments.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie, CairoMakie
 
diff --git a/dev/assets/source_methods_area.md.C5hcUKTw.js b/dev/assets/source_methods_area.md.BjXXoCxC.js
similarity index 99%
rename from dev/assets/source_methods_area.md.C5hcUKTw.js
rename to dev/assets/source_methods_area.md.BjXXoCxC.js
index 34ff5dc77..ca1d5f5c9 100644
--- a/dev/assets/source_methods_area.md.C5hcUKTw.js
+++ b/dev/assets/source_methods_area.md.BjXXoCxC.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/jqhztwg.Dig-DWOQ.png",e="/GeometryOps.jl/dev/assets/glloswm.CULn5saZ.png",y=JSON.parse('{"title":"Area and signed area","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/area.md","filePath":"source/methods/area.md","lastUpdated":null}'),l={name:"source/methods/area.md"};function p(k,s,r,d,g,E){return h(),a("div",null,s[0]||(s[0]=[n(`

Area and signed area

julia
export area, signed_area

What is area? What is signed area?

Area is the amount of space occupied by a two-dimensional figure. It is always a positive value. Signed area is simply the integral over the exterior path of a polygon, minus the sum of integrals over its interior holes. It is signed such that a clockwise path has a positive area, and a counterclockwise path has a negative area. The area is the absolute value of the signed area.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/byztndv.Dig-DWOQ.png",e="/GeometryOps.jl/dev/assets/xdzgijh.CULn5saZ.png",o=JSON.parse('{"title":"Area and signed area","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/area.md","filePath":"source/methods/area.md","lastUpdated":null}'),l={name:"source/methods/area.md"};function p(k,s,r,d,g,E){return h(),a("div",null,s[0]||(s[0]=[n(`

Area and signed area

julia
export area, signed_area

What is area? What is signed area?

Area is the amount of space occupied by a two-dimensional figure. It is always a positive value. Signed area is simply the integral over the exterior path of a polygon, minus the sum of integrals over its interior holes. It is signed such that a clockwise path has a positive area, and a counterclockwise path has a negative area. The area is the absolute value of the signed area.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -84,4 +84,4 @@ import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const t
     end

Complete the last edge. If the first and last where the same this will be zero

julia
    p2 = pfirst
     area += _area_component(p1, p2)
     return T(area / 2)
-end

This page was generated using Literate.jl.

`,40)]))}const F=i(l,[["render",p]]);export{y as __pageData,F as default}; +end

This page was generated using Literate.jl.

`,40)]))}const F=i(l,[["render",p]]);export{o as __pageData,F as default}; diff --git a/dev/assets/source_methods_area.md.C5hcUKTw.lean.js b/dev/assets/source_methods_area.md.BjXXoCxC.lean.js similarity index 99% rename from dev/assets/source_methods_area.md.C5hcUKTw.lean.js rename to dev/assets/source_methods_area.md.BjXXoCxC.lean.js index 34ff5dc77..ca1d5f5c9 100644 --- a/dev/assets/source_methods_area.md.C5hcUKTw.lean.js +++ b/dev/assets/source_methods_area.md.BjXXoCxC.lean.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/jqhztwg.Dig-DWOQ.png",e="/GeometryOps.jl/dev/assets/glloswm.CULn5saZ.png",y=JSON.parse('{"title":"Area and signed area","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/area.md","filePath":"source/methods/area.md","lastUpdated":null}'),l={name:"source/methods/area.md"};function p(k,s,r,d,g,E){return h(),a("div",null,s[0]||(s[0]=[n(`

Area and signed area

julia
export area, signed_area

What is area? What is signed area?

Area is the amount of space occupied by a two-dimensional figure. It is always a positive value. Signed area is simply the integral over the exterior path of a polygon, minus the sum of integrals over its interior holes. It is signed such that a clockwise path has a positive area, and a counterclockwise path has a negative area. The area is the absolute value of the signed area.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/byztndv.Dig-DWOQ.png",e="/GeometryOps.jl/dev/assets/xdzgijh.CULn5saZ.png",o=JSON.parse('{"title":"Area and signed area","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/area.md","filePath":"source/methods/area.md","lastUpdated":null}'),l={name:"source/methods/area.md"};function p(k,s,r,d,g,E){return h(),a("div",null,s[0]||(s[0]=[n(`

Area and signed area

julia
export area, signed_area

What is area? What is signed area?

Area is the amount of space occupied by a two-dimensional figure. It is always a positive value. Signed area is simply the integral over the exterior path of a polygon, minus the sum of integrals over its interior holes. It is signed such that a clockwise path has a positive area, and a counterclockwise path has a negative area. The area is the absolute value of the signed area.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -84,4 +84,4 @@ import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const t
     end

Complete the last edge. If the first and last where the same this will be zero

julia
    p2 = pfirst
     area += _area_component(p1, p2)
     return T(area / 2)
-end

This page was generated using Literate.jl.

`,40)]))}const F=i(l,[["render",p]]);export{y as __pageData,F as default}; +end

This page was generated using Literate.jl.

`,40)]))}const F=i(l,[["render",p]]);export{o as __pageData,F as default}; diff --git a/dev/assets/source_methods_barycentric.md.DWoHpdkh.lean.js b/dev/assets/source_methods_barycentric.md.BTrbxQPB.js similarity index 99% rename from dev/assets/source_methods_barycentric.md.DWoHpdkh.lean.js rename to dev/assets/source_methods_barycentric.md.BTrbxQPB.js index fc87c5569..81cd43c20 100644 --- a/dev/assets/source_methods_barycentric.md.DWoHpdkh.lean.js +++ b/dev/assets/source_methods_barycentric.md.BTrbxQPB.js @@ -1,4 +1,4 @@ -import{_ as k,c as n,a5 as t,j as s,a,o as h}from"./chunks/framework.O43fB7X6.js";const l="/GeometryOps.jl/dev/assets/piizsjm.CZy9YIUA.png",m=JSON.parse('{"title":"Barycentric coordinates","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/barycentric.md","filePath":"source/methods/barycentric.md","lastUpdated":null}'),p={name:"source/methods/barycentric.md"},e={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},E={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"10.692ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 4726 1000","aria-hidden":"true"},r={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},d={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},g={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},F={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},o={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"14.876ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 6575.4 1000","aria-hidden":"true"};function C(c,i,B,A,D,u){return h(),n("div",null,[i[14]||(i[14]=t(`

Barycentric coordinates

julia
export barycentric_coordinates, barycentric_coordinates!, barycentric_interpolate
+import{_ as k,c as n,a5 as t,j as s,a,o as h}from"./chunks/framework.B_n_RGhH.js";const l="/GeometryOps.jl/dev/assets/quvcwbg.CZy9YIUA.png",m=JSON.parse('{"title":"Barycentric coordinates","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/barycentric.md","filePath":"source/methods/barycentric.md","lastUpdated":null}'),p={name:"source/methods/barycentric.md"},e={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},E={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"10.692ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 4726 1000","aria-hidden":"true"},r={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},d={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},g={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},F={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},o={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"14.876ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 6575.4 1000","aria-hidden":"true"};function C(c,i,B,A,D,u){return h(),n("div",null,[i[14]||(i[14]=t(`

Barycentric coordinates

julia
export barycentric_coordinates, barycentric_coordinates!, barycentric_interpolate
 export MeanValue

Generalized barycentric coordinates are a generalization of barycentric coordinates, which are typically used in triangles, to arbitrary polygons.

They provide a way to express a point within a polygon as a weighted average of the polygon's vertices.

`,4)),s("p",null,[i[2]||(i[2]=a("In the case of a triangle, barycentric coordinates are a set of three numbers ")),s("mjx-container",e,[(h(),n("svg",E,i[0]||(i[0]=[t('',1)]))),i[1]||(i[1]=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"λ"),s("mn",null,"1")]),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mn",null,"2")]),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mn",null,"3")]),s("mo",{stretchy:"false"},")")])],-1))]),i[3]||(i[3]=a(", each associated with a vertex of the triangle. Any point within the triangle can be expressed as a weighted average of the vertices, where the weights are the barycentric coordinates. The weights sum to 1, and each is non-negative."))]),s("p",null,[i[10]||(i[10]=a("For a polygon with ")),s("mjx-container",r,[(h(),n("svg",d,i[4]||(i[4]=[s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D45B",d:"M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z",style:{"stroke-width":"3"}})])])],-1)]))),i[5]||(i[5]=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"n")])],-1))]),i[11]||(i[11]=a(" vertices, generalized barycentric coordinates are a set of ")),s("mjx-container",g,[(h(),n("svg",y,i[6]||(i[6]=[s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D45B",d:"M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z",style:{"stroke-width":"3"}})])])],-1)]))),i[7]||(i[7]=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"n")])],-1))]),i[12]||(i[12]=a(" numbers ")),s("mjx-container",F,[(h(),n("svg",o,i[8]||(i[8]=[t('',1)]))),i[9]||(i[9]=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"λ"),s("mn",null,"1")]),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mn",null,"2")]),s("mo",null,","),s("mo",null,"."),s("mo",null,"."),s("mo",null,"."),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mi",null,"n")]),s("mo",{stretchy:"false"},")")])],-1))]),i[13]||(i[13]=a(", each associated with a vertex of the polygon. Any point within the polygon can be expressed as a weighted average of the vertices, where the weights are the generalized barycentric coordinates."))]),i[15]||(i[15]=t(`

As with the triangle case, the weights sum to 1, and each is non-negative.

Example

This example was taken from this page of CGAL's documentation.

julia
using GeometryOps
 using GeometryOps.GeometryBasics
 using Makie
diff --git a/dev/assets/source_methods_barycentric.md.DWoHpdkh.js b/dev/assets/source_methods_barycentric.md.BTrbxQPB.lean.js
similarity index 99%
rename from dev/assets/source_methods_barycentric.md.DWoHpdkh.js
rename to dev/assets/source_methods_barycentric.md.BTrbxQPB.lean.js
index fc87c5569..81cd43c20 100644
--- a/dev/assets/source_methods_barycentric.md.DWoHpdkh.js
+++ b/dev/assets/source_methods_barycentric.md.BTrbxQPB.lean.js
@@ -1,4 +1,4 @@
-import{_ as k,c as n,a5 as t,j as s,a,o as h}from"./chunks/framework.O43fB7X6.js";const l="/GeometryOps.jl/dev/assets/piizsjm.CZy9YIUA.png",m=JSON.parse('{"title":"Barycentric coordinates","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/barycentric.md","filePath":"source/methods/barycentric.md","lastUpdated":null}'),p={name:"source/methods/barycentric.md"},e={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},E={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"10.692ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 4726 1000","aria-hidden":"true"},r={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},d={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},g={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},F={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},o={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"14.876ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 6575.4 1000","aria-hidden":"true"};function C(c,i,B,A,D,u){return h(),n("div",null,[i[14]||(i[14]=t(`

Barycentric coordinates

julia
export barycentric_coordinates, barycentric_coordinates!, barycentric_interpolate
+import{_ as k,c as n,a5 as t,j as s,a,o as h}from"./chunks/framework.B_n_RGhH.js";const l="/GeometryOps.jl/dev/assets/quvcwbg.CZy9YIUA.png",m=JSON.parse('{"title":"Barycentric coordinates","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/barycentric.md","filePath":"source/methods/barycentric.md","lastUpdated":null}'),p={name:"source/methods/barycentric.md"},e={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},E={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"10.692ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 4726 1000","aria-hidden":"true"},r={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},d={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},g={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},F={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},o={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"14.876ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 6575.4 1000","aria-hidden":"true"};function C(c,i,B,A,D,u){return h(),n("div",null,[i[14]||(i[14]=t(`

Barycentric coordinates

julia
export barycentric_coordinates, barycentric_coordinates!, barycentric_interpolate
 export MeanValue

Generalized barycentric coordinates are a generalization of barycentric coordinates, which are typically used in triangles, to arbitrary polygons.

They provide a way to express a point within a polygon as a weighted average of the polygon's vertices.

`,4)),s("p",null,[i[2]||(i[2]=a("In the case of a triangle, barycentric coordinates are a set of three numbers ")),s("mjx-container",e,[(h(),n("svg",E,i[0]||(i[0]=[t('',1)]))),i[1]||(i[1]=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"λ"),s("mn",null,"1")]),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mn",null,"2")]),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mn",null,"3")]),s("mo",{stretchy:"false"},")")])],-1))]),i[3]||(i[3]=a(", each associated with a vertex of the triangle. Any point within the triangle can be expressed as a weighted average of the vertices, where the weights are the barycentric coordinates. The weights sum to 1, and each is non-negative."))]),s("p",null,[i[10]||(i[10]=a("For a polygon with ")),s("mjx-container",r,[(h(),n("svg",d,i[4]||(i[4]=[s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D45B",d:"M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z",style:{"stroke-width":"3"}})])])],-1)]))),i[5]||(i[5]=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"n")])],-1))]),i[11]||(i[11]=a(" vertices, generalized barycentric coordinates are a set of ")),s("mjx-container",g,[(h(),n("svg",y,i[6]||(i[6]=[s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D45B",d:"M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z",style:{"stroke-width":"3"}})])])],-1)]))),i[7]||(i[7]=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"n")])],-1))]),i[12]||(i[12]=a(" numbers ")),s("mjx-container",F,[(h(),n("svg",o,i[8]||(i[8]=[t('',1)]))),i[9]||(i[9]=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"λ"),s("mn",null,"1")]),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mn",null,"2")]),s("mo",null,","),s("mo",null,"."),s("mo",null,"."),s("mo",null,"."),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mi",null,"n")]),s("mo",{stretchy:"false"},")")])],-1))]),i[13]||(i[13]=a(", each associated with a vertex of the polygon. Any point within the polygon can be expressed as a weighted average of the vertices, where the weights are the generalized barycentric coordinates."))]),i[15]||(i[15]=t(`

As with the triangle case, the weights sum to 1, and each is non-negative.

Example

This example was taken from this page of CGAL's documentation.

julia
using GeometryOps
 using GeometryOps.GeometryBasics
 using Makie
diff --git a/dev/assets/source_methods_buffer.md.BlEAImCj.js b/dev/assets/source_methods_buffer.md.CrtOsAlT.js
similarity index 98%
rename from dev/assets/source_methods_buffer.md.BlEAImCj.js
rename to dev/assets/source_methods_buffer.md.CrtOsAlT.js
index bab36ef49..285946d58 100644
--- a/dev/assets/source_methods_buffer.md.BlEAImCj.js
+++ b/dev/assets/source_methods_buffer.md.CrtOsAlT.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Buffer","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/buffer.md","filePath":"source/methods/buffer.md","lastUpdated":null}'),e={name:"source/methods/buffer.md"};function h(k,s,p,l,r,d){return t(),a("div",null,s[0]||(s[0]=[n(`

Buffer

Buffering a geometry means computing the region distance away from it, and returning that region as the new geometry.

As of now, we only support GEOS as the backend, meaning that LibGEOS must be loaded.

julia
function buffer(geometry, distance; kwargs...)
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Buffer","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/buffer.md","filePath":"source/methods/buffer.md","lastUpdated":null}'),e={name:"source/methods/buffer.md"};function h(k,s,p,l,r,d){return t(),a("div",null,s[0]||(s[0]=[n(`

Buffer

Buffering a geometry means computing the region distance away from it, and returning that region as the new geometry.

As of now, we only support GEOS as the backend, meaning that LibGEOS must be loaded.

julia
function buffer(geometry, distance; kwargs...)
     buffered = buffer(GEOS(; kwargs...), geometry, distance)
     return tuples(buffered)
 end

Below is an error handler similar to the others we have for e.g. segmentize, which checks if there is a method error for the geos backend.

Add an error hint for buffer if LibGEOS is not loaded!

julia
function _buffer_error_hinter(io, exc, argtypes, kwargs)
diff --git a/dev/assets/source_methods_buffer.md.BlEAImCj.lean.js b/dev/assets/source_methods_buffer.md.CrtOsAlT.lean.js
similarity index 98%
rename from dev/assets/source_methods_buffer.md.BlEAImCj.lean.js
rename to dev/assets/source_methods_buffer.md.CrtOsAlT.lean.js
index bab36ef49..285946d58 100644
--- a/dev/assets/source_methods_buffer.md.BlEAImCj.lean.js
+++ b/dev/assets/source_methods_buffer.md.CrtOsAlT.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Buffer","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/buffer.md","filePath":"source/methods/buffer.md","lastUpdated":null}'),e={name:"source/methods/buffer.md"};function h(k,s,p,l,r,d){return t(),a("div",null,s[0]||(s[0]=[n(`

Buffer

Buffering a geometry means computing the region distance away from it, and returning that region as the new geometry.

As of now, we only support GEOS as the backend, meaning that LibGEOS must be loaded.

julia
function buffer(geometry, distance; kwargs...)
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Buffer","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/buffer.md","filePath":"source/methods/buffer.md","lastUpdated":null}'),e={name:"source/methods/buffer.md"};function h(k,s,p,l,r,d){return t(),a("div",null,s[0]||(s[0]=[n(`

Buffer

Buffering a geometry means computing the region distance away from it, and returning that region as the new geometry.

As of now, we only support GEOS as the backend, meaning that LibGEOS must be loaded.

julia
function buffer(geometry, distance; kwargs...)
     buffered = buffer(GEOS(; kwargs...), geometry, distance)
     return tuples(buffered)
 end

Below is an error handler similar to the others we have for e.g. segmentize, which checks if there is a method error for the geos backend.

Add an error hint for buffer if LibGEOS is not loaded!

julia
function _buffer_error_hinter(io, exc, argtypes, kwargs)
diff --git a/dev/assets/source_methods_centroid.md.tRC5gC2-.js b/dev/assets/source_methods_centroid.md.BULl7_Qs.js
similarity index 99%
rename from dev/assets/source_methods_centroid.md.tRC5gC2-.js
rename to dev/assets/source_methods_centroid.md.BULl7_Qs.js
index f3ceb7a3f..67ea665fe 100644
--- a/dev/assets/source_methods_centroid.md.tRC5gC2-.js
+++ b/dev/assets/source_methods_centroid.md.BULl7_Qs.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/kycmsab.BD0hVfse.png",k="/GeometryOps.jl/dev/assets/kztduvn.DHcwB147.png",o=JSON.parse('{"title":"Centroid","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/centroid.md","filePath":"source/methods/centroid.md","lastUpdated":null}'),l={name:"source/methods/centroid.md"};function p(e,s,r,E,d,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Centroid

julia
export centroid, centroid_and_length, centroid_and_area

What is the centroid?

The centroid is the geometric center of a line string or area(s). Note that the centroid does not need to be inside of a concave area.

Further note that by convention a line, or linear ring, is calculated by weighting the line segments by their length, while polygons and multipolygon centroids are calculated by weighting edge's by their 'area components'.

To provide an example, consider this concave polygon in the shape of a 'C':

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/bsfjfzw.BD0hVfse.png",k="/GeometryOps.jl/dev/assets/nmgrusc.DHcwB147.png",o=JSON.parse('{"title":"Centroid","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/centroid.md","filePath":"source/methods/centroid.md","lastUpdated":null}'),l={name:"source/methods/centroid.md"};function p(e,s,r,E,d,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Centroid

julia
export centroid, centroid_and_length, centroid_and_area

What is the centroid?

The centroid is the geometric center of a line string or area(s). Note that the centroid does not need to be inside of a concave area.

Further note that by convention a line, or linear ring, is calculated by weighting the line segments by their length, while polygons and multipolygon centroids are calculated by weighting edge's by their 'area components'.

To provide an example, consider this concave polygon in the shape of a 'C':

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_centroid.md.tRC5gC2-.lean.js b/dev/assets/source_methods_centroid.md.BULl7_Qs.lean.js
similarity index 99%
rename from dev/assets/source_methods_centroid.md.tRC5gC2-.lean.js
rename to dev/assets/source_methods_centroid.md.BULl7_Qs.lean.js
index f3ceb7a3f..67ea665fe 100644
--- a/dev/assets/source_methods_centroid.md.tRC5gC2-.lean.js
+++ b/dev/assets/source_methods_centroid.md.BULl7_Qs.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/kycmsab.BD0hVfse.png",k="/GeometryOps.jl/dev/assets/kztduvn.DHcwB147.png",o=JSON.parse('{"title":"Centroid","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/centroid.md","filePath":"source/methods/centroid.md","lastUpdated":null}'),l={name:"source/methods/centroid.md"};function p(e,s,r,E,d,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Centroid

julia
export centroid, centroid_and_length, centroid_and_area

What is the centroid?

The centroid is the geometric center of a line string or area(s). Note that the centroid does not need to be inside of a concave area.

Further note that by convention a line, or linear ring, is calculated by weighting the line segments by their length, while polygons and multipolygon centroids are calculated by weighting edge's by their 'area components'.

To provide an example, consider this concave polygon in the shape of a 'C':

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/bsfjfzw.BD0hVfse.png",k="/GeometryOps.jl/dev/assets/nmgrusc.DHcwB147.png",o=JSON.parse('{"title":"Centroid","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/centroid.md","filePath":"source/methods/centroid.md","lastUpdated":null}'),l={name:"source/methods/centroid.md"};function p(e,s,r,E,d,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Centroid

julia
export centroid, centroid_and_length, centroid_and_area

What is the centroid?

The centroid is the geometric center of a line string or area(s). Note that the centroid does not need to be inside of a concave area.

Further note that by convention a line, or linear ring, is calculated by weighting the line segments by their length, while polygons and multipolygon centroids are calculated by weighting edge's by their 'area components'.

To provide an example, consider this concave polygon in the shape of a 'C':

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_clipping_clipping_processor.md.Ce9f2Uiw.lean.js b/dev/assets/source_methods_clipping_clipping_processor.md.D4hdTK_U.js
similarity index 99%
rename from dev/assets/source_methods_clipping_clipping_processor.md.Ce9f2Uiw.lean.js
rename to dev/assets/source_methods_clipping_clipping_processor.md.D4hdTK_U.js
index 0b43d9e25..c0f05e5cb 100644
--- a/dev/assets/source_methods_clipping_clipping_processor.md.Ce9f2Uiw.lean.js
+++ b/dev/assets/source_methods_clipping_clipping_processor.md.D4hdTK_U.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Polygon clipping helpers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/clipping_processor.md","filePath":"source/methods/clipping/clipping_processor.md","lastUpdated":null}'),t={name:"source/methods/clipping/clipping_processor.md"};function p(l,s,k,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n(`

Polygon clipping helpers

This file contains the shared helper functions for the polygon clipping functionalities.

This enum defines which side of an edge a point is on

julia
@enum PointEdgeSide left=1 right=2 unknown=3

Constants assigned for readability

julia
const enter, exit = true, false
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Polygon clipping helpers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/clipping_processor.md","filePath":"source/methods/clipping/clipping_processor.md","lastUpdated":null}'),t={name:"source/methods/clipping/clipping_processor.md"};function p(l,s,k,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n(`

Polygon clipping helpers

This file contains the shared helper functions for the polygon clipping functionalities.

This enum defines which side of an edge a point is on

julia
@enum PointEdgeSide left=1 right=2 unknown=3

Constants assigned for readability

julia
const enter, exit = true, false
 const crossing, bouncing = true, false
 
 #= A point can either be the start or end of an overlapping chain of points between two
diff --git a/dev/assets/source_methods_clipping_clipping_processor.md.Ce9f2Uiw.js b/dev/assets/source_methods_clipping_clipping_processor.md.D4hdTK_U.lean.js
similarity index 99%
rename from dev/assets/source_methods_clipping_clipping_processor.md.Ce9f2Uiw.js
rename to dev/assets/source_methods_clipping_clipping_processor.md.D4hdTK_U.lean.js
index 0b43d9e25..c0f05e5cb 100644
--- a/dev/assets/source_methods_clipping_clipping_processor.md.Ce9f2Uiw.js
+++ b/dev/assets/source_methods_clipping_clipping_processor.md.D4hdTK_U.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Polygon clipping helpers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/clipping_processor.md","filePath":"source/methods/clipping/clipping_processor.md","lastUpdated":null}'),t={name:"source/methods/clipping/clipping_processor.md"};function p(l,s,k,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n(`

Polygon clipping helpers

This file contains the shared helper functions for the polygon clipping functionalities.

This enum defines which side of an edge a point is on

julia
@enum PointEdgeSide left=1 right=2 unknown=3

Constants assigned for readability

julia
const enter, exit = true, false
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Polygon clipping helpers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/clipping_processor.md","filePath":"source/methods/clipping/clipping_processor.md","lastUpdated":null}'),t={name:"source/methods/clipping/clipping_processor.md"};function p(l,s,k,e,E,r){return h(),a("div",null,s[0]||(s[0]=[n(`

Polygon clipping helpers

This file contains the shared helper functions for the polygon clipping functionalities.

This enum defines which side of an edge a point is on

julia
@enum PointEdgeSide left=1 right=2 unknown=3

Constants assigned for readability

julia
const enter, exit = true, false
 const crossing, bouncing = true, false
 
 #= A point can either be the start or end of an overlapping chain of points between two
diff --git a/dev/assets/source_methods_clipping_coverage.md.DOZ0xpXd.js b/dev/assets/source_methods_clipping_coverage.md.C1wj_p67.js
similarity index 99%
rename from dev/assets/source_methods_clipping_coverage.md.DOZ0xpXd.js
rename to dev/assets/source_methods_clipping_coverage.md.C1wj_p67.js
index b2e6e9b61..c1e880d22 100644
--- a/dev/assets/source_methods_clipping_coverage.md.DOZ0xpXd.js
+++ b/dev/assets/source_methods_clipping_coverage.md.C1wj_p67.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const l="/GeometryOps.jl/dev/assets/lzjbven.Cb0_DiYE.png",y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/coverage.md","filePath":"source/methods/clipping/coverage.md","lastUpdated":null}'),k={name:"source/methods/clipping/coverage.md"};function p(t,s,e,E,r,d){return h(),a("div",null,s[0]||(s[0]=[n(`
julia
export coverage

What is coverage?

Coverage is the amount of geometry area within a bounding box defined by the minimum and maximum x and y-coordinates of that bounding box, or an Extent containing that information.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const l="/GeometryOps.jl/dev/assets/jgamrhg.Cb0_DiYE.png",y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/coverage.md","filePath":"source/methods/clipping/coverage.md","lastUpdated":null}'),k={name:"source/methods/clipping/coverage.md"};function p(t,s,e,E,r,d){return h(),a("div",null,s[0]||(s[0]=[n(`
julia
export coverage

What is coverage?

Coverage is the amount of geometry area within a bounding box defined by the minimum and maximum x and y-coordinates of that bounding box, or an Extent containing that information.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_clipping_coverage.md.DOZ0xpXd.lean.js b/dev/assets/source_methods_clipping_coverage.md.C1wj_p67.lean.js
similarity index 99%
rename from dev/assets/source_methods_clipping_coverage.md.DOZ0xpXd.lean.js
rename to dev/assets/source_methods_clipping_coverage.md.C1wj_p67.lean.js
index b2e6e9b61..c1e880d22 100644
--- a/dev/assets/source_methods_clipping_coverage.md.DOZ0xpXd.lean.js
+++ b/dev/assets/source_methods_clipping_coverage.md.C1wj_p67.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const l="/GeometryOps.jl/dev/assets/lzjbven.Cb0_DiYE.png",y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/coverage.md","filePath":"source/methods/clipping/coverage.md","lastUpdated":null}'),k={name:"source/methods/clipping/coverage.md"};function p(t,s,e,E,r,d){return h(),a("div",null,s[0]||(s[0]=[n(`
julia
export coverage

What is coverage?

Coverage is the amount of geometry area within a bounding box defined by the minimum and maximum x and y-coordinates of that bounding box, or an Extent containing that information.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const l="/GeometryOps.jl/dev/assets/jgamrhg.Cb0_DiYE.png",y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/coverage.md","filePath":"source/methods/clipping/coverage.md","lastUpdated":null}'),k={name:"source/methods/clipping/coverage.md"};function p(t,s,e,E,r,d){return h(),a("div",null,s[0]||(s[0]=[n(`
julia
export coverage

What is coverage?

Coverage is the amount of geometry area within a bounding box defined by the minimum and maximum x and y-coordinates of that bounding box, or an Extent containing that information.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_clipping_cut.md.mZmT7Z3Z.js b/dev/assets/source_methods_clipping_cut.md.bDSdCW_w.js
similarity index 99%
rename from dev/assets/source_methods_clipping_cut.md.mZmT7Z3Z.js
rename to dev/assets/source_methods_clipping_cut.md.bDSdCW_w.js
index 2f8a5cc1d..cfc5c6d6b 100644
--- a/dev/assets/source_methods_clipping_cut.md.mZmT7Z3Z.js
+++ b/dev/assets/source_methods_clipping_cut.md.bDSdCW_w.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/rvdgstm.-VpeHhXX.png",y=JSON.parse('{"title":"Polygon cutting","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/cut.md","filePath":"source/methods/clipping/cut.md","lastUpdated":null}'),l={name:"source/methods/clipping/cut.md"};function p(k,s,e,r,E,d){return h(),a("div",null,s[0]||(s[0]=[n(`

Polygon cutting

julia
export cut

What is cut?

The cut function cuts a polygon through a line segment. This is inspired by functions such as Matlab's cutpolygon function.

To provide an example, consider the following polygon and line:

julia
import GeoInterface as GI, GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/bhglzly.-VpeHhXX.png",y=JSON.parse('{"title":"Polygon cutting","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/cut.md","filePath":"source/methods/clipping/cut.md","lastUpdated":null}'),l={name:"source/methods/clipping/cut.md"};function p(k,s,e,r,E,d){return h(),a("div",null,s[0]||(s[0]=[n(`

Polygon cutting

julia
export cut

What is cut?

The cut function cuts a polygon through a line segment. This is inspired by functions such as Matlab's cutpolygon function.

To provide an example, consider the following polygon and line:

julia
import GeoInterface as GI, GeometryOps as GO
 using CairoMakie
 using Makie
 
diff --git a/dev/assets/source_methods_clipping_cut.md.mZmT7Z3Z.lean.js b/dev/assets/source_methods_clipping_cut.md.bDSdCW_w.lean.js
similarity index 99%
rename from dev/assets/source_methods_clipping_cut.md.mZmT7Z3Z.lean.js
rename to dev/assets/source_methods_clipping_cut.md.bDSdCW_w.lean.js
index 2f8a5cc1d..cfc5c6d6b 100644
--- a/dev/assets/source_methods_clipping_cut.md.mZmT7Z3Z.lean.js
+++ b/dev/assets/source_methods_clipping_cut.md.bDSdCW_w.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/rvdgstm.-VpeHhXX.png",y=JSON.parse('{"title":"Polygon cutting","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/cut.md","filePath":"source/methods/clipping/cut.md","lastUpdated":null}'),l={name:"source/methods/clipping/cut.md"};function p(k,s,e,r,E,d){return h(),a("div",null,s[0]||(s[0]=[n(`

Polygon cutting

julia
export cut

What is cut?

The cut function cuts a polygon through a line segment. This is inspired by functions such as Matlab's cutpolygon function.

To provide an example, consider the following polygon and line:

julia
import GeoInterface as GI, GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/bhglzly.-VpeHhXX.png",y=JSON.parse('{"title":"Polygon cutting","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/cut.md","filePath":"source/methods/clipping/cut.md","lastUpdated":null}'),l={name:"source/methods/clipping/cut.md"};function p(k,s,e,r,E,d){return h(),a("div",null,s[0]||(s[0]=[n(`

Polygon cutting

julia
export cut

What is cut?

The cut function cuts a polygon through a line segment. This is inspired by functions such as Matlab's cutpolygon function.

To provide an example, consider the following polygon and line:

julia
import GeoInterface as GI, GeometryOps as GO
 using CairoMakie
 using Makie
 
diff --git a/dev/assets/source_methods_clipping_difference.md.DH8fmajn.js b/dev/assets/source_methods_clipping_difference.md.BBSGhdHU.js
similarity index 99%
rename from dev/assets/source_methods_clipping_difference.md.DH8fmajn.js
rename to dev/assets/source_methods_clipping_difference.md.BBSGhdHU.js
index 8188535e3..26b8eb013 100644
--- a/dev/assets/source_methods_clipping_difference.md.DH8fmajn.js
+++ b/dev/assets/source_methods_clipping_difference.md.BBSGhdHU.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const y=JSON.parse('{"title":"Difference Polygon Clipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/difference.md","filePath":"source/methods/clipping/difference.md","lastUpdated":null}'),p={name:"source/methods/clipping/difference.md"};function t(h,s,e,k,r,d){return l(),a("div",null,s[0]||(s[0]=[n(`

Difference Polygon Clipping

julia
export difference
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const y=JSON.parse('{"title":"Difference Polygon Clipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/difference.md","filePath":"source/methods/clipping/difference.md","lastUpdated":null}'),p={name:"source/methods/clipping/difference.md"};function t(h,s,e,k,r,d){return l(),a("div",null,s[0]||(s[0]=[n(`

Difference Polygon Clipping

julia
export difference
 
 
 """
diff --git a/dev/assets/source_methods_clipping_difference.md.DH8fmajn.lean.js b/dev/assets/source_methods_clipping_difference.md.BBSGhdHU.lean.js
similarity index 99%
rename from dev/assets/source_methods_clipping_difference.md.DH8fmajn.lean.js
rename to dev/assets/source_methods_clipping_difference.md.BBSGhdHU.lean.js
index 8188535e3..26b8eb013 100644
--- a/dev/assets/source_methods_clipping_difference.md.DH8fmajn.lean.js
+++ b/dev/assets/source_methods_clipping_difference.md.BBSGhdHU.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const y=JSON.parse('{"title":"Difference Polygon Clipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/difference.md","filePath":"source/methods/clipping/difference.md","lastUpdated":null}'),p={name:"source/methods/clipping/difference.md"};function t(h,s,e,k,r,d){return l(),a("div",null,s[0]||(s[0]=[n(`

Difference Polygon Clipping

julia
export difference
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const y=JSON.parse('{"title":"Difference Polygon Clipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/difference.md","filePath":"source/methods/clipping/difference.md","lastUpdated":null}'),p={name:"source/methods/clipping/difference.md"};function t(h,s,e,k,r,d){return l(),a("div",null,s[0]||(s[0]=[n(`

Difference Polygon Clipping

julia
export difference
 
 
 """
diff --git a/dev/assets/source_methods_clipping_intersection.md.CTbTKq2Z.js b/dev/assets/source_methods_clipping_intersection.md.CTqsFPDc.js
similarity index 99%
rename from dev/assets/source_methods_clipping_intersection.md.CTbTKq2Z.js
rename to dev/assets/source_methods_clipping_intersection.md.CTqsFPDc.js
index 6f30917c7..cdca6a0f3 100644
--- a/dev/assets/source_methods_clipping_intersection.md.CTbTKq2Z.js
+++ b/dev/assets/source_methods_clipping_intersection.md.CTqsFPDc.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Geometry Intersection","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/intersection.md","filePath":"source/methods/clipping/intersection.md","lastUpdated":null}'),h={name:"source/methods/clipping/intersection.md"};function l(p,s,k,e,r,E){return t(),a("div",null,s[0]||(s[0]=[n(`

Geometry Intersection

julia
export intersection, intersection_points
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Geometry Intersection","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/intersection.md","filePath":"source/methods/clipping/intersection.md","lastUpdated":null}'),h={name:"source/methods/clipping/intersection.md"};function l(p,s,k,e,r,E){return t(),a("div",null,s[0]||(s[0]=[n(`

Geometry Intersection

julia
export intersection, intersection_points
 
 """
     Enum LineOrientation
diff --git a/dev/assets/source_methods_clipping_intersection.md.CTbTKq2Z.lean.js b/dev/assets/source_methods_clipping_intersection.md.CTqsFPDc.lean.js
similarity index 99%
rename from dev/assets/source_methods_clipping_intersection.md.CTbTKq2Z.lean.js
rename to dev/assets/source_methods_clipping_intersection.md.CTqsFPDc.lean.js
index 6f30917c7..cdca6a0f3 100644
--- a/dev/assets/source_methods_clipping_intersection.md.CTbTKq2Z.lean.js
+++ b/dev/assets/source_methods_clipping_intersection.md.CTqsFPDc.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Geometry Intersection","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/intersection.md","filePath":"source/methods/clipping/intersection.md","lastUpdated":null}'),h={name:"source/methods/clipping/intersection.md"};function l(p,s,k,e,r,E){return t(),a("div",null,s[0]||(s[0]=[n(`

Geometry Intersection

julia
export intersection, intersection_points
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Geometry Intersection","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/intersection.md","filePath":"source/methods/clipping/intersection.md","lastUpdated":null}'),h={name:"source/methods/clipping/intersection.md"};function l(p,s,k,e,r,E){return t(),a("div",null,s[0]||(s[0]=[n(`

Geometry Intersection

julia
export intersection, intersection_points
 
 """
     Enum LineOrientation
diff --git a/dev/assets/source_methods_clipping_predicates.md.DO1buU2r.js b/dev/assets/source_methods_clipping_predicates.md.BO8YbwMP.js
similarity index 99%
rename from dev/assets/source_methods_clipping_predicates.md.DO1buU2r.js
rename to dev/assets/source_methods_clipping_predicates.md.BO8YbwMP.js
index 7f716319d..d37656600 100644
--- a/dev/assets/source_methods_clipping_predicates.md.DO1buU2r.js
+++ b/dev/assets/source_methods_clipping_predicates.md.BO8YbwMP.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const c=JSON.parse('{"title":"If we want to inject adaptivity, we would do something like:","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/predicates.md","filePath":"source/methods/clipping/predicates.md","lastUpdated":null}'),h={name:"source/methods/clipping/predicates.md"};function e(p,s,l,k,r,d){return t(),a("div",null,s[0]||(s[0]=[n(`
julia
module Predicates
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const c=JSON.parse('{"title":"If we want to inject adaptivity, we would do something like:","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/predicates.md","filePath":"source/methods/clipping/predicates.md","lastUpdated":null}'),h={name:"source/methods/clipping/predicates.md"};function e(p,s,l,k,r,d){return t(),a("div",null,s[0]||(s[0]=[n(`
julia
module Predicates
     using ExactPredicates, ExactPredicates.Codegen
     import ExactPredicates: ext
     import ExactPredicates.Codegen: group!, @genpredicate
diff --git a/dev/assets/source_methods_clipping_predicates.md.DO1buU2r.lean.js b/dev/assets/source_methods_clipping_predicates.md.BO8YbwMP.lean.js
similarity index 99%
rename from dev/assets/source_methods_clipping_predicates.md.DO1buU2r.lean.js
rename to dev/assets/source_methods_clipping_predicates.md.BO8YbwMP.lean.js
index 7f716319d..d37656600 100644
--- a/dev/assets/source_methods_clipping_predicates.md.DO1buU2r.lean.js
+++ b/dev/assets/source_methods_clipping_predicates.md.BO8YbwMP.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const c=JSON.parse('{"title":"If we want to inject adaptivity, we would do something like:","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/predicates.md","filePath":"source/methods/clipping/predicates.md","lastUpdated":null}'),h={name:"source/methods/clipping/predicates.md"};function e(p,s,l,k,r,d){return t(),a("div",null,s[0]||(s[0]=[n(`
julia
module Predicates
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const c=JSON.parse('{"title":"If we want to inject adaptivity, we would do something like:","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/predicates.md","filePath":"source/methods/clipping/predicates.md","lastUpdated":null}'),h={name:"source/methods/clipping/predicates.md"};function e(p,s,l,k,r,d){return t(),a("div",null,s[0]||(s[0]=[n(`
julia
module Predicates
     using ExactPredicates, ExactPredicates.Codegen
     import ExactPredicates: ext
     import ExactPredicates.Codegen: group!, @genpredicate
diff --git a/dev/assets/source_methods_clipping_union.md.vI_3OIg3.js b/dev/assets/source_methods_clipping_union.md.C3409Ldy.js
similarity index 99%
rename from dev/assets/source_methods_clipping_union.md.vI_3OIg3.js
rename to dev/assets/source_methods_clipping_union.md.C3409Ldy.js
index 25deac5fe..32260df19 100644
--- a/dev/assets/source_methods_clipping_union.md.vI_3OIg3.js
+++ b/dev/assets/source_methods_clipping_union.md.C3409Ldy.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const y=JSON.parse('{"title":"Union Polygon Clipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/union.md","filePath":"source/methods/clipping/union.md","lastUpdated":null}'),h={name:"source/methods/clipping/union.md"};function p(t,s,k,e,r,E){return l(),a("div",null,s[0]||(s[0]=[n(`

Union Polygon Clipping

julia
export union
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const y=JSON.parse('{"title":"Union Polygon Clipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/union.md","filePath":"source/methods/clipping/union.md","lastUpdated":null}'),h={name:"source/methods/clipping/union.md"};function p(t,s,k,e,r,E){return l(),a("div",null,s[0]||(s[0]=[n(`

Union Polygon Clipping

julia
export union
 
 """
     union(geom_a, geom_b, [::Type{T}]; target::Type, fix_multipoly = UnionIntersectingPolygons())
diff --git a/dev/assets/source_methods_clipping_union.md.vI_3OIg3.lean.js b/dev/assets/source_methods_clipping_union.md.C3409Ldy.lean.js
similarity index 99%
rename from dev/assets/source_methods_clipping_union.md.vI_3OIg3.lean.js
rename to dev/assets/source_methods_clipping_union.md.C3409Ldy.lean.js
index 25deac5fe..32260df19 100644
--- a/dev/assets/source_methods_clipping_union.md.vI_3OIg3.lean.js
+++ b/dev/assets/source_methods_clipping_union.md.C3409Ldy.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const y=JSON.parse('{"title":"Union Polygon Clipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/union.md","filePath":"source/methods/clipping/union.md","lastUpdated":null}'),h={name:"source/methods/clipping/union.md"};function p(t,s,k,e,r,E){return l(),a("div",null,s[0]||(s[0]=[n(`

Union Polygon Clipping

julia
export union
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const y=JSON.parse('{"title":"Union Polygon Clipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/union.md","filePath":"source/methods/clipping/union.md","lastUpdated":null}'),h={name:"source/methods/clipping/union.md"};function p(t,s,k,e,r,E){return l(),a("div",null,s[0]||(s[0]=[n(`

Union Polygon Clipping

julia
export union
 
 """
     union(geom_a, geom_b, [::Type{T}]; target::Type, fix_multipoly = UnionIntersectingPolygons())
diff --git a/dev/assets/source_methods_convex_hull.md.CPYN7s27.js b/dev/assets/source_methods_convex_hull.md.rnPSMljy.js
similarity index 99%
rename from dev/assets/source_methods_convex_hull.md.CPYN7s27.js
rename to dev/assets/source_methods_convex_hull.md.rnPSMljy.js
index b0886f1d6..2e15d6e36 100644
--- a/dev/assets/source_methods_convex_hull.md.CPYN7s27.js
+++ b/dev/assets/source_methods_convex_hull.md.rnPSMljy.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const h="/GeometryOps.jl/dev/assets/uwwxcdv.CwTFuyyb.png",t="/GeometryOps.jl/dev/assets/cgxfzhy.mCtKcWOr.png",e="/GeometryOps.jl/dev/assets/jqaedzp.CvMMo01P.png",c=JSON.parse('{"title":"Convex hull","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/convex_hull.md","filePath":"source/methods/convex_hull.md","lastUpdated":null}'),p={name:"source/methods/convex_hull.md"};function k(r,s,o,d,E,g){return l(),a("div",null,s[0]||(s[0]=[n(`

Convex hull

The convex hull of a set of points is the smallest convex polygon that contains all the points.

GeometryOps.jl provides a number of methods for computing the convex hull of a set of points, usually linked to other Julia packages.

For now, we expose one algorithm, MonotoneChainMethod, which uses the DelaunayTriangulation.jl package. The GEOS() interface also supports convex hulls.

Future work could include other algorithms, such as Quickhull.jl, or similar, via package extensions.

Example

Simple hull

julia
import GeometryOps as GO, GeoInterface as GI
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/hatdqxw.DQxLQp_L.png",h="/GeometryOps.jl/dev/assets/zuhrnvv.mCtKcWOr.png",e="/GeometryOps.jl/dev/assets/xqugbnz.C1TEVbYt.png",c=JSON.parse('{"title":"Convex hull","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/convex_hull.md","filePath":"source/methods/convex_hull.md","lastUpdated":null}'),p={name:"source/methods/convex_hull.md"};function k(r,s,o,d,E,g){return l(),a("div",null,s[0]||(s[0]=[n(`

Convex hull

The convex hull of a set of points is the smallest convex polygon that contains all the points.

GeometryOps.jl provides a number of methods for computing the convex hull of a set of points, usually linked to other Julia packages.

For now, we expose one algorithm, MonotoneChainMethod, which uses the DelaunayTriangulation.jl package. The GEOS() interface also supports convex hulls.

Future work could include other algorithms, such as Quickhull.jl, or similar, via package extensions.

Example

Simple hull

julia
import GeometryOps as GO, GeoInterface as GI
 using CairoMakie # to plot
 
 points = randn(GO.Point2f, 100)
@@ -6,7 +6,7 @@ import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const h
 hull_poly = GO.convex_hull(points)
 lines!(a, hull_poly; label = "Convex hull", color = Makie.wong_colors()[2])
 axislegend(a)
-f

Convex hull of the USA

julia
import GeometryOps as GO, GeoInterface as GI
+f

Convex hull of the USA

julia
import GeometryOps as GO, GeoInterface as GI
 using CairoMakie # to plot
 using NaturalEarth # for data
 
@@ -14,7 +14,7 @@ import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const h
 usa = all_adm0.geometry[findfirst(==("USA"), all_adm0.ADM0_A3)]
 f, a, p = lines(usa)
 lines!(a, GO.convex_hull(usa); color = Makie.wong_colors()[2])
-f

Investigating the winding order

The winding order of the monotone chain method is counterclockwise, while the winding order of the GEOS method is clockwise.

GeometryOps' convexity detection says that the GEOS hull is convex, while the monotone chain method hull is not. However, they are both going over the same points (we checked), it's just that the winding order is different.

In reality, both sets are convex, but we need to fix the GeometryOps convexity detector (isconcave)!

We may also decide at a later date to change the returned winding order of the polygon, but most algorithms are robust to that, and you can always fix it...

julia
import GeoInterface as GI, GeometryOps as GO, LibGEOS as LG
+f

Investigating the winding order

The winding order of the monotone chain method is counterclockwise, while the winding order of the GEOS method is clockwise.

GeometryOps' convexity detection says that the GEOS hull is convex, while the monotone chain method hull is not. However, they are both going over the same points (we checked), it's just that the winding order is different.

In reality, both sets are convex, but we need to fix the GeometryOps convexity detector (isconcave)!

We may also decide at a later date to change the returned winding order of the polygon, but most algorithms are robust to that, and you can always fix it...

julia
import GeoInterface as GI, GeometryOps as GO, LibGEOS as LG
 using CairoMakie # to plot
 
 points = rand(Point2{Float64}, 100)
diff --git a/dev/assets/source_methods_convex_hull.md.CPYN7s27.lean.js b/dev/assets/source_methods_convex_hull.md.rnPSMljy.lean.js
similarity index 99%
rename from dev/assets/source_methods_convex_hull.md.CPYN7s27.lean.js
rename to dev/assets/source_methods_convex_hull.md.rnPSMljy.lean.js
index b0886f1d6..2e15d6e36 100644
--- a/dev/assets/source_methods_convex_hull.md.CPYN7s27.lean.js
+++ b/dev/assets/source_methods_convex_hull.md.rnPSMljy.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const h="/GeometryOps.jl/dev/assets/uwwxcdv.CwTFuyyb.png",t="/GeometryOps.jl/dev/assets/cgxfzhy.mCtKcWOr.png",e="/GeometryOps.jl/dev/assets/jqaedzp.CvMMo01P.png",c=JSON.parse('{"title":"Convex hull","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/convex_hull.md","filePath":"source/methods/convex_hull.md","lastUpdated":null}'),p={name:"source/methods/convex_hull.md"};function k(r,s,o,d,E,g){return l(),a("div",null,s[0]||(s[0]=[n(`

Convex hull

The convex hull of a set of points is the smallest convex polygon that contains all the points.

GeometryOps.jl provides a number of methods for computing the convex hull of a set of points, usually linked to other Julia packages.

For now, we expose one algorithm, MonotoneChainMethod, which uses the DelaunayTriangulation.jl package. The GEOS() interface also supports convex hulls.

Future work could include other algorithms, such as Quickhull.jl, or similar, via package extensions.

Example

Simple hull

julia
import GeometryOps as GO, GeoInterface as GI
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/hatdqxw.DQxLQp_L.png",h="/GeometryOps.jl/dev/assets/zuhrnvv.mCtKcWOr.png",e="/GeometryOps.jl/dev/assets/xqugbnz.C1TEVbYt.png",c=JSON.parse('{"title":"Convex hull","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/convex_hull.md","filePath":"source/methods/convex_hull.md","lastUpdated":null}'),p={name:"source/methods/convex_hull.md"};function k(r,s,o,d,E,g){return l(),a("div",null,s[0]||(s[0]=[n(`

Convex hull

The convex hull of a set of points is the smallest convex polygon that contains all the points.

GeometryOps.jl provides a number of methods for computing the convex hull of a set of points, usually linked to other Julia packages.

For now, we expose one algorithm, MonotoneChainMethod, which uses the DelaunayTriangulation.jl package. The GEOS() interface also supports convex hulls.

Future work could include other algorithms, such as Quickhull.jl, or similar, via package extensions.

Example

Simple hull

julia
import GeometryOps as GO, GeoInterface as GI
 using CairoMakie # to plot
 
 points = randn(GO.Point2f, 100)
@@ -6,7 +6,7 @@ import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const h
 hull_poly = GO.convex_hull(points)
 lines!(a, hull_poly; label = "Convex hull", color = Makie.wong_colors()[2])
 axislegend(a)
-f

Convex hull of the USA

julia
import GeometryOps as GO, GeoInterface as GI
+f

Convex hull of the USA

julia
import GeometryOps as GO, GeoInterface as GI
 using CairoMakie # to plot
 using NaturalEarth # for data
 
@@ -14,7 +14,7 @@ import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const h
 usa = all_adm0.geometry[findfirst(==("USA"), all_adm0.ADM0_A3)]
 f, a, p = lines(usa)
 lines!(a, GO.convex_hull(usa); color = Makie.wong_colors()[2])
-f

Investigating the winding order

The winding order of the monotone chain method is counterclockwise, while the winding order of the GEOS method is clockwise.

GeometryOps' convexity detection says that the GEOS hull is convex, while the monotone chain method hull is not. However, they are both going over the same points (we checked), it's just that the winding order is different.

In reality, both sets are convex, but we need to fix the GeometryOps convexity detector (isconcave)!

We may also decide at a later date to change the returned winding order of the polygon, but most algorithms are robust to that, and you can always fix it...

julia
import GeoInterface as GI, GeometryOps as GO, LibGEOS as LG
+f

Investigating the winding order

The winding order of the monotone chain method is counterclockwise, while the winding order of the GEOS method is clockwise.

GeometryOps' convexity detection says that the GEOS hull is convex, while the monotone chain method hull is not. However, they are both going over the same points (we checked), it's just that the winding order is different.

In reality, both sets are convex, but we need to fix the GeometryOps convexity detector (isconcave)!

We may also decide at a later date to change the returned winding order of the polygon, but most algorithms are robust to that, and you can always fix it...

julia
import GeoInterface as GI, GeometryOps as GO, LibGEOS as LG
 using CairoMakie # to plot
 
 points = rand(Point2{Float64}, 100)
diff --git a/dev/assets/source_methods_distance.md.Bc7lFF-i.js b/dev/assets/source_methods_distance.md.CT4mop5i.js
similarity index 99%
rename from dev/assets/source_methods_distance.md.Bc7lFF-i.js
rename to dev/assets/source_methods_distance.md.CT4mop5i.js
index 42cc87d0c..3dbbf54dc 100644
--- a/dev/assets/source_methods_distance.md.Bc7lFF-i.js
+++ b/dev/assets/source_methods_distance.md.CT4mop5i.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/klmxpbf.DiwGEg2f.png",k="/GeometryOps.jl/dev/assets/pthbixz.DuBHk1fh.png",F=JSON.parse('{"title":"Distance and signed distance","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/distance.md","filePath":"source/methods/distance.md","lastUpdated":null}'),p={name:"source/methods/distance.md"};function l(e,s,d,E,r,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Distance and signed distance

julia
export distance, signed_distance

What is distance? What is signed distance?

Distance is the distance of a point to another geometry. This is always a positive number. If a point is inside of geometry, so on a curve or inside of a polygon, the distance will be zero. Signed distance is mainly used for polygons and multipolygons. If a point is outside of a geometry, signed distance has the same value as distance. However, points within the geometry have a negative distance representing the distance of a point to the closest boundary. Therefore, for all "non-filled" geometries, like curves, the distance will either be positive or 0.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/glhbvoz.DiwGEg2f.png",k="/GeometryOps.jl/dev/assets/svktjgf.DuBHk1fh.png",F=JSON.parse('{"title":"Distance and signed distance","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/distance.md","filePath":"source/methods/distance.md","lastUpdated":null}'),p={name:"source/methods/distance.md"};function l(e,s,d,E,r,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Distance and signed distance

julia
export distance, signed_distance

What is distance? What is signed distance?

Distance is the distance of a point to another geometry. This is always a positive number. If a point is inside of geometry, so on a curve or inside of a polygon, the distance will be zero. Signed distance is mainly used for polygons and multipolygons. If a point is outside of a geometry, signed distance has the same value as distance. However, points within the geometry have a negative distance representing the distance of a point to the closest boundary. Therefore, for all "non-filled" geometries, like curves, the distance will either be positive or 0.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_distance.md.Bc7lFF-i.lean.js b/dev/assets/source_methods_distance.md.CT4mop5i.lean.js
similarity index 99%
rename from dev/assets/source_methods_distance.md.Bc7lFF-i.lean.js
rename to dev/assets/source_methods_distance.md.CT4mop5i.lean.js
index 42cc87d0c..3dbbf54dc 100644
--- a/dev/assets/source_methods_distance.md.Bc7lFF-i.lean.js
+++ b/dev/assets/source_methods_distance.md.CT4mop5i.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/klmxpbf.DiwGEg2f.png",k="/GeometryOps.jl/dev/assets/pthbixz.DuBHk1fh.png",F=JSON.parse('{"title":"Distance and signed distance","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/distance.md","filePath":"source/methods/distance.md","lastUpdated":null}'),p={name:"source/methods/distance.md"};function l(e,s,d,E,r,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Distance and signed distance

julia
export distance, signed_distance

What is distance? What is signed distance?

Distance is the distance of a point to another geometry. This is always a positive number. If a point is inside of geometry, so on a curve or inside of a polygon, the distance will be zero. Signed distance is mainly used for polygons and multipolygons. If a point is outside of a geometry, signed distance has the same value as distance. However, points within the geometry have a negative distance representing the distance of a point to the closest boundary. Therefore, for all "non-filled" geometries, like curves, the distance will either be positive or 0.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/glhbvoz.DiwGEg2f.png",k="/GeometryOps.jl/dev/assets/svktjgf.DuBHk1fh.png",F=JSON.parse('{"title":"Distance and signed distance","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/distance.md","filePath":"source/methods/distance.md","lastUpdated":null}'),p={name:"source/methods/distance.md"};function l(e,s,d,E,r,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Distance and signed distance

julia
export distance, signed_distance

What is distance? What is signed distance?

Distance is the distance of a point to another geometry. This is always a positive number. If a point is inside of geometry, so on a curve or inside of a polygon, the distance will be zero. Signed distance is mainly used for polygons and multipolygons. If a point is outside of a geometry, signed distance has the same value as distance. However, points within the geometry have a negative distance representing the distance of a point to the closest boundary. Therefore, for all "non-filled" geometries, like curves, the distance will either be positive or 0.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_equals.md.BJrQK7ih.js b/dev/assets/source_methods_equals.md.f5dhabGy.js
similarity index 99%
rename from dev/assets/source_methods_equals.md.BJrQK7ih.js
rename to dev/assets/source_methods_equals.md.f5dhabGy.js
index 2bed43d0c..f77529ed8 100644
--- a/dev/assets/source_methods_equals.md.BJrQK7ih.js
+++ b/dev/assets/source_methods_equals.md.f5dhabGy.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/njwfzgd.CgiryX2p.png",F=JSON.parse('{"title":"Equals","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/equals.md","filePath":"source/methods/equals.md","lastUpdated":null}'),p={name:"source/methods/equals.md"};function h(k,s,e,r,d,g){return l(),a("div",null,s[0]||(s[0]=[n(`

Equals

julia
export equals

What is equals?

The equals function checks if two geometries are equal. They are equal if they share the same set of points and edges to define the same shape.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/pjwvvrm.CgiryX2p.png",F=JSON.parse('{"title":"Equals","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/equals.md","filePath":"source/methods/equals.md","lastUpdated":null}'),p={name:"source/methods/equals.md"};function h(k,s,e,r,d,g){return l(),a("div",null,s[0]||(s[0]=[n(`

Equals

julia
export equals

What is equals?

The equals function checks if two geometries are equal. They are equal if they share the same set of points and edges to define the same shape.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_equals.md.BJrQK7ih.lean.js b/dev/assets/source_methods_equals.md.f5dhabGy.lean.js
similarity index 99%
rename from dev/assets/source_methods_equals.md.BJrQK7ih.lean.js
rename to dev/assets/source_methods_equals.md.f5dhabGy.lean.js
index 2bed43d0c..f77529ed8 100644
--- a/dev/assets/source_methods_equals.md.BJrQK7ih.lean.js
+++ b/dev/assets/source_methods_equals.md.f5dhabGy.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/njwfzgd.CgiryX2p.png",F=JSON.parse('{"title":"Equals","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/equals.md","filePath":"source/methods/equals.md","lastUpdated":null}'),p={name:"source/methods/equals.md"};function h(k,s,e,r,d,g){return l(),a("div",null,s[0]||(s[0]=[n(`

Equals

julia
export equals

What is equals?

The equals function checks if two geometries are equal. They are equal if they share the same set of points and edges to define the same shape.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/pjwvvrm.CgiryX2p.png",F=JSON.parse('{"title":"Equals","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/equals.md","filePath":"source/methods/equals.md","lastUpdated":null}'),p={name:"source/methods/equals.md"};function h(k,s,e,r,d,g){return l(),a("div",null,s[0]||(s[0]=[n(`

Equals

julia
export equals

What is equals?

The equals function checks if two geometries are equal. They are equal if they share the same set of points and edges to define the same shape.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_geom_relations_contains.md.CqN31Kcv.js b/dev/assets/source_methods_geom_relations_contains.md.C6IZusKv.js
similarity index 98%
rename from dev/assets/source_methods_geom_relations_contains.md.CqN31Kcv.js
rename to dev/assets/source_methods_geom_relations_contains.md.C6IZusKv.js
index ab3f238fd..ca3000a15 100644
--- a/dev/assets/source_methods_geom_relations_contains.md.CqN31Kcv.js
+++ b/dev/assets/source_methods_geom_relations_contains.md.C6IZusKv.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const e="/GeometryOps.jl/dev/assets/mvkdxvr._0R9BbFk.png",E=JSON.parse('{"title":"Contains","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/contains.md","filePath":"source/methods/geom_relations/contains.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/contains.md"};function l(p,s,k,r,o,d){return t(),a("div",null,s[0]||(s[0]=[n(`

Contains

julia
export contains

What is contains?

The contains function checks if a given geometry completely contains another geometry, or in other words, that the second geometry is completely within the first. This requires that the two interiors intersect and that the interior and boundary of the second geometry is not in the exterior of the first geometry.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const e="/GeometryOps.jl/dev/assets/emqcofm._0R9BbFk.png",E=JSON.parse('{"title":"Contains","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/contains.md","filePath":"source/methods/geom_relations/contains.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/contains.md"};function l(p,s,k,r,o,d){return t(),a("div",null,s[0]||(s[0]=[n(`

Contains

julia
export contains

What is contains?

The contains function checks if a given geometry completely contains another geometry, or in other words, that the second geometry is completely within the first. This requires that the two interiors intersect and that the interior and boundary of the second geometry is not in the exterior of the first geometry.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_geom_relations_contains.md.CqN31Kcv.lean.js b/dev/assets/source_methods_geom_relations_contains.md.C6IZusKv.lean.js
similarity index 98%
rename from dev/assets/source_methods_geom_relations_contains.md.CqN31Kcv.lean.js
rename to dev/assets/source_methods_geom_relations_contains.md.C6IZusKv.lean.js
index ab3f238fd..ca3000a15 100644
--- a/dev/assets/source_methods_geom_relations_contains.md.CqN31Kcv.lean.js
+++ b/dev/assets/source_methods_geom_relations_contains.md.C6IZusKv.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const e="/GeometryOps.jl/dev/assets/mvkdxvr._0R9BbFk.png",E=JSON.parse('{"title":"Contains","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/contains.md","filePath":"source/methods/geom_relations/contains.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/contains.md"};function l(p,s,k,r,o,d){return t(),a("div",null,s[0]||(s[0]=[n(`

Contains

julia
export contains

What is contains?

The contains function checks if a given geometry completely contains another geometry, or in other words, that the second geometry is completely within the first. This requires that the two interiors intersect and that the interior and boundary of the second geometry is not in the exterior of the first geometry.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const e="/GeometryOps.jl/dev/assets/emqcofm._0R9BbFk.png",E=JSON.parse('{"title":"Contains","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/contains.md","filePath":"source/methods/geom_relations/contains.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/contains.md"};function l(p,s,k,r,o,d){return t(),a("div",null,s[0]||(s[0]=[n(`

Contains

julia
export contains

What is contains?

The contains function checks if a given geometry completely contains another geometry, or in other words, that the second geometry is completely within the first. This requires that the two interiors intersect and that the interior and boundary of the second geometry is not in the exterior of the first geometry.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_geom_relations_coveredby.md.DAW-T1ry.js b/dev/assets/source_methods_geom_relations_coveredby.md.D1UaUGPE.js
similarity index 99%
rename from dev/assets/source_methods_geom_relations_coveredby.md.DAW-T1ry.js
rename to dev/assets/source_methods_geom_relations_coveredby.md.D1UaUGPE.js
index 744c0de83..a2bb0b7b4 100644
--- a/dev/assets/source_methods_geom_relations_coveredby.md.DAW-T1ry.js
+++ b/dev/assets/source_methods_geom_relations_coveredby.md.D1UaUGPE.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as e}from"./chunks/framework.O43fB7X6.js";const l="/GeometryOps.jl/dev/assets/kliugtk.DC3TvBOO.png",o=JSON.parse('{"title":"CoveredBy","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/coveredby.md","filePath":"source/methods/geom_relations/coveredby.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/coveredby.md"};function t(p,s,k,r,E,d){return e(),a("div",null,s[0]||(s[0]=[n(`

CoveredBy

julia
export coveredby

What is coveredby?

The coveredby function checks if one geometry is covered by another geometry. This is an extension of within that does not require the interiors of the two geometries to intersect, but still does require that the interior and boundary of the first geometry isn't outside of the second geometry.

To provide an example, consider this point and line:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as e}from"./chunks/framework.B_n_RGhH.js";const l="/GeometryOps.jl/dev/assets/odbnzej.DC3TvBOO.png",o=JSON.parse('{"title":"CoveredBy","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/coveredby.md","filePath":"source/methods/geom_relations/coveredby.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/coveredby.md"};function t(p,s,k,r,E,d){return e(),a("div",null,s[0]||(s[0]=[n(`

CoveredBy

julia
export coveredby

What is coveredby?

The coveredby function checks if one geometry is covered by another geometry. This is an extension of within that does not require the interiors of the two geometries to intersect, but still does require that the interior and boundary of the first geometry isn't outside of the second geometry.

To provide an example, consider this point and line:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_geom_relations_coveredby.md.DAW-T1ry.lean.js b/dev/assets/source_methods_geom_relations_coveredby.md.D1UaUGPE.lean.js
similarity index 99%
rename from dev/assets/source_methods_geom_relations_coveredby.md.DAW-T1ry.lean.js
rename to dev/assets/source_methods_geom_relations_coveredby.md.D1UaUGPE.lean.js
index 744c0de83..a2bb0b7b4 100644
--- a/dev/assets/source_methods_geom_relations_coveredby.md.DAW-T1ry.lean.js
+++ b/dev/assets/source_methods_geom_relations_coveredby.md.D1UaUGPE.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as e}from"./chunks/framework.O43fB7X6.js";const l="/GeometryOps.jl/dev/assets/kliugtk.DC3TvBOO.png",o=JSON.parse('{"title":"CoveredBy","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/coveredby.md","filePath":"source/methods/geom_relations/coveredby.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/coveredby.md"};function t(p,s,k,r,E,d){return e(),a("div",null,s[0]||(s[0]=[n(`

CoveredBy

julia
export coveredby

What is coveredby?

The coveredby function checks if one geometry is covered by another geometry. This is an extension of within that does not require the interiors of the two geometries to intersect, but still does require that the interior and boundary of the first geometry isn't outside of the second geometry.

To provide an example, consider this point and line:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as e}from"./chunks/framework.B_n_RGhH.js";const l="/GeometryOps.jl/dev/assets/odbnzej.DC3TvBOO.png",o=JSON.parse('{"title":"CoveredBy","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/coveredby.md","filePath":"source/methods/geom_relations/coveredby.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/coveredby.md"};function t(p,s,k,r,E,d){return e(),a("div",null,s[0]||(s[0]=[n(`

CoveredBy

julia
export coveredby

What is coveredby?

The coveredby function checks if one geometry is covered by another geometry. This is an extension of within that does not require the interiors of the two geometries to intersect, but still does require that the interior and boundary of the first geometry isn't outside of the second geometry.

To provide an example, consider this point and line:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_geom_relations_covers.md.ByYJUB6K.js b/dev/assets/source_methods_geom_relations_covers.md.CxXPAOw2.js
similarity index 98%
rename from dev/assets/source_methods_geom_relations_covers.md.ByYJUB6K.js
rename to dev/assets/source_methods_geom_relations_covers.md.CxXPAOw2.js
index 668e4b25a..6ebc21369 100644
--- a/dev/assets/source_methods_geom_relations_covers.md.ByYJUB6K.js
+++ b/dev/assets/source_methods_geom_relations_covers.md.CxXPAOw2.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as e,o as n}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/kliugtk.DC3TvBOO.png",g=JSON.parse('{"title":"Covers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/covers.md","filePath":"source/methods/geom_relations/covers.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/covers.md"};function l(h,s,k,r,o,d){return n(),a("div",null,s[0]||(s[0]=[e(`

Covers

julia
export covers

What is covers?

The covers function checks if a given geometry completely covers another geometry. For this to be true, the "contained" geometry's interior and boundaries must be covered by the "covering" geometry's interior and boundaries. The interiors do not need to overlap.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as e,o as n}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/odbnzej.DC3TvBOO.png",g=JSON.parse('{"title":"Covers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/covers.md","filePath":"source/methods/geom_relations/covers.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/covers.md"};function l(h,s,k,r,o,d){return n(),a("div",null,s[0]||(s[0]=[e(`

Covers

julia
export covers

What is covers?

The covers function checks if a given geometry completely covers another geometry. For this to be true, the "contained" geometry's interior and boundaries must be covered by the "covering" geometry's interior and boundaries. The interiors do not need to overlap.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_geom_relations_covers.md.ByYJUB6K.lean.js b/dev/assets/source_methods_geom_relations_covers.md.CxXPAOw2.lean.js
similarity index 98%
rename from dev/assets/source_methods_geom_relations_covers.md.ByYJUB6K.lean.js
rename to dev/assets/source_methods_geom_relations_covers.md.CxXPAOw2.lean.js
index 668e4b25a..6ebc21369 100644
--- a/dev/assets/source_methods_geom_relations_covers.md.ByYJUB6K.lean.js
+++ b/dev/assets/source_methods_geom_relations_covers.md.CxXPAOw2.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as e,o as n}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/kliugtk.DC3TvBOO.png",g=JSON.parse('{"title":"Covers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/covers.md","filePath":"source/methods/geom_relations/covers.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/covers.md"};function l(h,s,k,r,o,d){return n(),a("div",null,s[0]||(s[0]=[e(`

Covers

julia
export covers

What is covers?

The covers function checks if a given geometry completely covers another geometry. For this to be true, the "contained" geometry's interior and boundaries must be covered by the "covering" geometry's interior and boundaries. The interiors do not need to overlap.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as e,o as n}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/odbnzej.DC3TvBOO.png",g=JSON.parse('{"title":"Covers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/covers.md","filePath":"source/methods/geom_relations/covers.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/covers.md"};function l(h,s,k,r,o,d){return n(),a("div",null,s[0]||(s[0]=[e(`

Covers

julia
export covers

What is covers?

The covers function checks if a given geometry completely covers another geometry. For this to be true, the "contained" geometry's interior and boundaries must be covered by the "covering" geometry's interior and boundaries. The interiors do not need to overlap.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_geom_relations_crosses.md.BvkmeuqD.js b/dev/assets/source_methods_geom_relations_crosses.md.DGEGsJXB.js
similarity index 99%
rename from dev/assets/source_methods_geom_relations_crosses.md.BvkmeuqD.js
rename to dev/assets/source_methods_geom_relations_crosses.md.DGEGsJXB.js
index b006dab63..553b7550f 100644
--- a/dev/assets/source_methods_geom_relations_crosses.md.BvkmeuqD.js
+++ b/dev/assets/source_methods_geom_relations_crosses.md.DGEGsJXB.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const d=JSON.parse('{"title":"Crossing checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/crosses.md","filePath":"source/methods/geom_relations/crosses.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/crosses.md"};function h(t,s,k,e,r,E){return l(),a("div",null,s[0]||(s[0]=[n(`

Crossing checks

julia
"""
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const d=JSON.parse('{"title":"Crossing checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/crosses.md","filePath":"source/methods/geom_relations/crosses.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/crosses.md"};function h(t,s,k,e,r,E){return l(),a("div",null,s[0]||(s[0]=[n(`

Crossing checks

julia
"""
      crosses(geom1, geom2)::Bool
 
 Return \`true\` if the intersection results in a geometry whose dimension is one less than
diff --git a/dev/assets/source_methods_geom_relations_crosses.md.BvkmeuqD.lean.js b/dev/assets/source_methods_geom_relations_crosses.md.DGEGsJXB.lean.js
similarity index 99%
rename from dev/assets/source_methods_geom_relations_crosses.md.BvkmeuqD.lean.js
rename to dev/assets/source_methods_geom_relations_crosses.md.DGEGsJXB.lean.js
index b006dab63..553b7550f 100644
--- a/dev/assets/source_methods_geom_relations_crosses.md.BvkmeuqD.lean.js
+++ b/dev/assets/source_methods_geom_relations_crosses.md.DGEGsJXB.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const d=JSON.parse('{"title":"Crossing checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/crosses.md","filePath":"source/methods/geom_relations/crosses.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/crosses.md"};function h(t,s,k,e,r,E){return l(),a("div",null,s[0]||(s[0]=[n(`

Crossing checks

julia
"""
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const d=JSON.parse('{"title":"Crossing checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/crosses.md","filePath":"source/methods/geom_relations/crosses.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/crosses.md"};function h(t,s,k,e,r,E){return l(),a("div",null,s[0]||(s[0]=[n(`

Crossing checks

julia
"""
      crosses(geom1, geom2)::Bool
 
 Return \`true\` if the intersection results in a geometry whose dimension is one less than
diff --git a/dev/assets/source_methods_geom_relations_disjoint.md.urjKKiWI.js b/dev/assets/source_methods_geom_relations_disjoint.md.DSyNMkAr.js
similarity index 99%
rename from dev/assets/source_methods_geom_relations_disjoint.md.urjKKiWI.js
rename to dev/assets/source_methods_geom_relations_disjoint.md.DSyNMkAr.js
index bb959fe59..d0cd1a9cf 100644
--- a/dev/assets/source_methods_geom_relations_disjoint.md.urjKKiWI.js
+++ b/dev/assets/source_methods_geom_relations_disjoint.md.DSyNMkAr.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const h="/GeometryOps.jl/dev/assets/aacdycg.C3SxJ3x-.png",o=JSON.parse('{"title":"Disjoint","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/disjoint.md","filePath":"source/methods/geom_relations/disjoint.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/disjoint.md"};function p(k,s,e,r,E,g){return t(),a("div",null,s[0]||(s[0]=[n(`

Disjoint

julia
export disjoint

What is disjoint?

The disjoint function checks if one geometry is outside of another geometry, without sharing any boundaries or interiors.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const h="/GeometryOps.jl/dev/assets/nbefvdd.C3SxJ3x-.png",o=JSON.parse('{"title":"Disjoint","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/disjoint.md","filePath":"source/methods/geom_relations/disjoint.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/disjoint.md"};function p(k,s,e,r,E,g){return t(),a("div",null,s[0]||(s[0]=[n(`

Disjoint

julia
export disjoint

What is disjoint?

The disjoint function checks if one geometry is outside of another geometry, without sharing any boundaries or interiors.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_geom_relations_disjoint.md.urjKKiWI.lean.js b/dev/assets/source_methods_geom_relations_disjoint.md.DSyNMkAr.lean.js
similarity index 99%
rename from dev/assets/source_methods_geom_relations_disjoint.md.urjKKiWI.lean.js
rename to dev/assets/source_methods_geom_relations_disjoint.md.DSyNMkAr.lean.js
index bb959fe59..d0cd1a9cf 100644
--- a/dev/assets/source_methods_geom_relations_disjoint.md.urjKKiWI.lean.js
+++ b/dev/assets/source_methods_geom_relations_disjoint.md.DSyNMkAr.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const h="/GeometryOps.jl/dev/assets/aacdycg.C3SxJ3x-.png",o=JSON.parse('{"title":"Disjoint","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/disjoint.md","filePath":"source/methods/geom_relations/disjoint.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/disjoint.md"};function p(k,s,e,r,E,g){return t(),a("div",null,s[0]||(s[0]=[n(`

Disjoint

julia
export disjoint

What is disjoint?

The disjoint function checks if one geometry is outside of another geometry, without sharing any boundaries or interiors.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const h="/GeometryOps.jl/dev/assets/nbefvdd.C3SxJ3x-.png",o=JSON.parse('{"title":"Disjoint","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/disjoint.md","filePath":"source/methods/geom_relations/disjoint.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/disjoint.md"};function p(k,s,e,r,E,g){return t(),a("div",null,s[0]||(s[0]=[n(`

Disjoint

julia
export disjoint

What is disjoint?

The disjoint function checks if one geometry is outside of another geometry, without sharing any boundaries or interiors.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_geom_relations_geom_geom_processors.md.nbCs0NfI.js b/dev/assets/source_methods_geom_relations_geom_geom_processors.md.U9N4Zvs6.js
similarity index 99%
rename from dev/assets/source_methods_geom_relations_geom_geom_processors.md.nbCs0NfI.js
rename to dev/assets/source_methods_geom_relations_geom_geom_processors.md.U9N4Zvs6.js
index 656313ed4..cf23be1de 100644
--- a/dev/assets/source_methods_geom_relations_geom_geom_processors.md.nbCs0NfI.js
+++ b/dev/assets/source_methods_geom_relations_geom_geom_processors.md.U9N4Zvs6.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Line-curve interaction","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/geom_geom_processors.md","filePath":"source/methods/geom_relations/geom_geom_processors.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/geom_geom_processors.md"};function t(p,s,k,e,r,E){return h(),a("div",null,s[0]||(s[0]=[n(`

Line-curve interaction

julia
#= Code is based off of DE-9IM Standards (https://en.wikipedia.org/wiki/DE-9IM)
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Line-curve interaction","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/geom_geom_processors.md","filePath":"source/methods/geom_relations/geom_geom_processors.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/geom_geom_processors.md"};function t(p,s,k,e,r,E){return h(),a("div",null,s[0]||(s[0]=[n(`

Line-curve interaction

julia
#= Code is based off of DE-9IM Standards (https://en.wikipedia.org/wiki/DE-9IM)
 and attempts a standardized solution for most of the functions.
 =#
 
diff --git a/dev/assets/source_methods_geom_relations_geom_geom_processors.md.nbCs0NfI.lean.js b/dev/assets/source_methods_geom_relations_geom_geom_processors.md.U9N4Zvs6.lean.js
similarity index 99%
rename from dev/assets/source_methods_geom_relations_geom_geom_processors.md.nbCs0NfI.lean.js
rename to dev/assets/source_methods_geom_relations_geom_geom_processors.md.U9N4Zvs6.lean.js
index 656313ed4..cf23be1de 100644
--- a/dev/assets/source_methods_geom_relations_geom_geom_processors.md.nbCs0NfI.lean.js
+++ b/dev/assets/source_methods_geom_relations_geom_geom_processors.md.U9N4Zvs6.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Line-curve interaction","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/geom_geom_processors.md","filePath":"source/methods/geom_relations/geom_geom_processors.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/geom_geom_processors.md"};function t(p,s,k,e,r,E){return h(),a("div",null,s[0]||(s[0]=[n(`

Line-curve interaction

julia
#= Code is based off of DE-9IM Standards (https://en.wikipedia.org/wiki/DE-9IM)
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Line-curve interaction","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/geom_geom_processors.md","filePath":"source/methods/geom_relations/geom_geom_processors.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/geom_geom_processors.md"};function t(p,s,k,e,r,E){return h(),a("div",null,s[0]||(s[0]=[n(`

Line-curve interaction

julia
#= Code is based off of DE-9IM Standards (https://en.wikipedia.org/wiki/DE-9IM)
 and attempts a standardized solution for most of the functions.
 =#
 
diff --git a/dev/assets/source_methods_geom_relations_intersects.md.BnMqMLYY.js b/dev/assets/source_methods_geom_relations_intersects.md.Tj0d-LRw.js
similarity index 98%
rename from dev/assets/source_methods_geom_relations_intersects.md.BnMqMLYY.js
rename to dev/assets/source_methods_geom_relations_intersects.md.Tj0d-LRw.js
index 5495c4688..7823ac8c0 100644
--- a/dev/assets/source_methods_geom_relations_intersects.md.BnMqMLYY.js
+++ b/dev/assets/source_methods_geom_relations_intersects.md.Tj0d-LRw.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as e,o as n}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/gcuugnc.DeeQUply.png",g=JSON.parse('{"title":"Intersection checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/intersects.md","filePath":"source/methods/geom_relations/intersects.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/intersects.md"};function l(h,s,k,r,o,d){return n(),a("div",null,s[0]||(s[0]=[e(`

Intersection checks

julia
export intersects

What is intersects?

The intersects function checks if a given geometry intersects with another geometry, or in other words, the either the interiors or boundaries of the two geometries intersect.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as e,o as n}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/pkcsydu.DeeQUply.png",g=JSON.parse('{"title":"Intersection checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/intersects.md","filePath":"source/methods/geom_relations/intersects.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/intersects.md"};function l(h,s,k,r,d,o){return n(),a("div",null,s[0]||(s[0]=[e(`

Intersection checks

julia
export intersects

What is intersects?

The intersects function checks if a given geometry intersects with another geometry, or in other words, the either the interiors or boundaries of the two geometries intersect.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_geom_relations_intersects.md.BnMqMLYY.lean.js b/dev/assets/source_methods_geom_relations_intersects.md.Tj0d-LRw.lean.js
similarity index 98%
rename from dev/assets/source_methods_geom_relations_intersects.md.BnMqMLYY.lean.js
rename to dev/assets/source_methods_geom_relations_intersects.md.Tj0d-LRw.lean.js
index 5495c4688..7823ac8c0 100644
--- a/dev/assets/source_methods_geom_relations_intersects.md.BnMqMLYY.lean.js
+++ b/dev/assets/source_methods_geom_relations_intersects.md.Tj0d-LRw.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as e,o as n}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/gcuugnc.DeeQUply.png",g=JSON.parse('{"title":"Intersection checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/intersects.md","filePath":"source/methods/geom_relations/intersects.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/intersects.md"};function l(h,s,k,r,o,d){return n(),a("div",null,s[0]||(s[0]=[e(`

Intersection checks

julia
export intersects

What is intersects?

The intersects function checks if a given geometry intersects with another geometry, or in other words, the either the interiors or boundaries of the two geometries intersect.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as e,o as n}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/pkcsydu.DeeQUply.png",g=JSON.parse('{"title":"Intersection checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/intersects.md","filePath":"source/methods/geom_relations/intersects.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/intersects.md"};function l(h,s,k,r,d,o){return n(),a("div",null,s[0]||(s[0]=[e(`

Intersection checks

julia
export intersects

What is intersects?

The intersects function checks if a given geometry intersects with another geometry, or in other words, the either the interiors or boundaries of the two geometries intersect.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_geom_relations_overlaps.md.sexJjn0l.js b/dev/assets/source_methods_geom_relations_overlaps.md.Dsrv3zV8.js
similarity index 99%
rename from dev/assets/source_methods_geom_relations_overlaps.md.sexJjn0l.js
rename to dev/assets/source_methods_geom_relations_overlaps.md.Dsrv3zV8.js
index 114240c54..89026741b 100644
--- a/dev/assets/source_methods_geom_relations_overlaps.md.sexJjn0l.js
+++ b/dev/assets/source_methods_geom_relations_overlaps.md.Dsrv3zV8.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const p="/GeometryOps.jl/dev/assets/njwfzgd.CgiryX2p.png",o=JSON.parse('{"title":"Overlaps","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/overlaps.md","filePath":"source/methods/geom_relations/overlaps.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/overlaps.md"};function e(h,s,k,r,d,g){return l(),a("div",null,s[0]||(s[0]=[n(`

Overlaps

julia
export overlaps

What is overlaps?

The overlaps function checks if two geometries overlap. Two geometries can only overlap if they have the same dimension, and if they overlap, but one is not contained, within, or equal to the other.

Note that this means it is impossible for a single point to overlap with a single point and a line only overlaps with another line if only a section of each line is collinear.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const p="/GeometryOps.jl/dev/assets/pjwvvrm.CgiryX2p.png",o=JSON.parse('{"title":"Overlaps","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/overlaps.md","filePath":"source/methods/geom_relations/overlaps.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/overlaps.md"};function e(h,s,k,r,d,g){return l(),a("div",null,s[0]||(s[0]=[n(`

Overlaps

julia
export overlaps

What is overlaps?

The overlaps function checks if two geometries overlap. Two geometries can only overlap if they have the same dimension, and if they overlap, but one is not contained, within, or equal to the other.

Note that this means it is impossible for a single point to overlap with a single point and a line only overlaps with another line if only a section of each line is collinear.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_geom_relations_overlaps.md.sexJjn0l.lean.js b/dev/assets/source_methods_geom_relations_overlaps.md.Dsrv3zV8.lean.js
similarity index 99%
rename from dev/assets/source_methods_geom_relations_overlaps.md.sexJjn0l.lean.js
rename to dev/assets/source_methods_geom_relations_overlaps.md.Dsrv3zV8.lean.js
index 114240c54..89026741b 100644
--- a/dev/assets/source_methods_geom_relations_overlaps.md.sexJjn0l.lean.js
+++ b/dev/assets/source_methods_geom_relations_overlaps.md.Dsrv3zV8.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const p="/GeometryOps.jl/dev/assets/njwfzgd.CgiryX2p.png",o=JSON.parse('{"title":"Overlaps","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/overlaps.md","filePath":"source/methods/geom_relations/overlaps.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/overlaps.md"};function e(h,s,k,r,d,g){return l(),a("div",null,s[0]||(s[0]=[n(`

Overlaps

julia
export overlaps

What is overlaps?

The overlaps function checks if two geometries overlap. Two geometries can only overlap if they have the same dimension, and if they overlap, but one is not contained, within, or equal to the other.

Note that this means it is impossible for a single point to overlap with a single point and a line only overlaps with another line if only a section of each line is collinear.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const p="/GeometryOps.jl/dev/assets/pjwvvrm.CgiryX2p.png",o=JSON.parse('{"title":"Overlaps","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/overlaps.md","filePath":"source/methods/geom_relations/overlaps.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/overlaps.md"};function e(h,s,k,r,d,g){return l(),a("div",null,s[0]||(s[0]=[n(`

Overlaps

julia
export overlaps

What is overlaps?

The overlaps function checks if two geometries overlap. Two geometries can only overlap if they have the same dimension, and if they overlap, but one is not contained, within, or equal to the other.

Note that this means it is impossible for a single point to overlap with a single point and a line only overlaps with another line if only a section of each line is collinear.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_geom_relations_touches.md.BZdsIwcm.js b/dev/assets/source_methods_geom_relations_touches.md.DEzd_chO.js
similarity index 99%
rename from dev/assets/source_methods_geom_relations_touches.md.BZdsIwcm.js
rename to dev/assets/source_methods_geom_relations_touches.md.DEzd_chO.js
index e361c55bc..be4fe364a 100644
--- a/dev/assets/source_methods_geom_relations_touches.md.BZdsIwcm.js
+++ b/dev/assets/source_methods_geom_relations_touches.md.DEzd_chO.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const h="/GeometryOps.jl/dev/assets/iejgkmu.BEFUMtlf.png",o=JSON.parse('{"title":"Touches","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/touches.md","filePath":"source/methods/geom_relations/touches.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/touches.md"};function e(p,s,k,r,E,g){return t(),a("div",null,s[0]||(s[0]=[n(`

Touches

julia
export touches

What is touches?

The touches function checks if one geometry touches another geometry. In other words, the interiors of the two geometries don't interact, but one of the geometries must have a boundary point that interacts with either the other geometry's interior or boundary.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const h="/GeometryOps.jl/dev/assets/wpeykob.BEFUMtlf.png",o=JSON.parse('{"title":"Touches","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/touches.md","filePath":"source/methods/geom_relations/touches.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/touches.md"};function e(p,s,k,r,E,g){return t(),a("div",null,s[0]||(s[0]=[n(`

Touches

julia
export touches

What is touches?

The touches function checks if one geometry touches another geometry. In other words, the interiors of the two geometries don't interact, but one of the geometries must have a boundary point that interacts with either the other geometry's interior or boundary.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_geom_relations_touches.md.BZdsIwcm.lean.js b/dev/assets/source_methods_geom_relations_touches.md.DEzd_chO.lean.js
similarity index 99%
rename from dev/assets/source_methods_geom_relations_touches.md.BZdsIwcm.lean.js
rename to dev/assets/source_methods_geom_relations_touches.md.DEzd_chO.lean.js
index e361c55bc..be4fe364a 100644
--- a/dev/assets/source_methods_geom_relations_touches.md.BZdsIwcm.lean.js
+++ b/dev/assets/source_methods_geom_relations_touches.md.DEzd_chO.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const h="/GeometryOps.jl/dev/assets/iejgkmu.BEFUMtlf.png",o=JSON.parse('{"title":"Touches","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/touches.md","filePath":"source/methods/geom_relations/touches.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/touches.md"};function e(p,s,k,r,E,g){return t(),a("div",null,s[0]||(s[0]=[n(`

Touches

julia
export touches

What is touches?

The touches function checks if one geometry touches another geometry. In other words, the interiors of the two geometries don't interact, but one of the geometries must have a boundary point that interacts with either the other geometry's interior or boundary.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const h="/GeometryOps.jl/dev/assets/wpeykob.BEFUMtlf.png",o=JSON.parse('{"title":"Touches","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/touches.md","filePath":"source/methods/geom_relations/touches.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/touches.md"};function e(p,s,k,r,E,g){return t(),a("div",null,s[0]||(s[0]=[n(`

Touches

julia
export touches

What is touches?

The touches function checks if one geometry touches another geometry. In other words, the interiors of the two geometries don't interact, but one of the geometries must have a boundary point that interacts with either the other geometry's interior or boundary.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_geom_relations_within.md.djHz5LPE.js b/dev/assets/source_methods_geom_relations_within.md.DMC21lAv.js
similarity index 99%
rename from dev/assets/source_methods_geom_relations_within.md.djHz5LPE.js
rename to dev/assets/source_methods_geom_relations_within.md.DMC21lAv.js
index c6cb3a68c..c4d4cba95 100644
--- a/dev/assets/source_methods_geom_relations_within.md.djHz5LPE.js
+++ b/dev/assets/source_methods_geom_relations_within.md.DMC21lAv.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/mvkdxvr._0R9BbFk.png",o=JSON.parse('{"title":"Within","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/within.md","filePath":"source/methods/geom_relations/within.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/within.md"};function e(p,s,k,r,E,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Within

julia
export within

What is within?

The within function checks if one geometry is inside another geometry. This requires that the two interiors intersect and that the interior and boundary of the first geometry is not in the exterior of the second geometry.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/emqcofm._0R9BbFk.png",o=JSON.parse('{"title":"Within","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/within.md","filePath":"source/methods/geom_relations/within.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/within.md"};function e(p,s,k,r,E,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Within

julia
export within

What is within?

The within function checks if one geometry is inside another geometry. This requires that the two interiors intersect and that the interior and boundary of the first geometry is not in the exterior of the second geometry.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_geom_relations_within.md.djHz5LPE.lean.js b/dev/assets/source_methods_geom_relations_within.md.DMC21lAv.lean.js
similarity index 99%
rename from dev/assets/source_methods_geom_relations_within.md.djHz5LPE.lean.js
rename to dev/assets/source_methods_geom_relations_within.md.DMC21lAv.lean.js
index c6cb3a68c..c4d4cba95 100644
--- a/dev/assets/source_methods_geom_relations_within.md.djHz5LPE.lean.js
+++ b/dev/assets/source_methods_geom_relations_within.md.DMC21lAv.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/mvkdxvr._0R9BbFk.png",o=JSON.parse('{"title":"Within","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/within.md","filePath":"source/methods/geom_relations/within.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/within.md"};function e(p,s,k,r,E,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Within

julia
export within

What is within?

The within function checks if one geometry is inside another geometry. This requires that the two interiors intersect and that the interior and boundary of the first geometry is not in the exterior of the second geometry.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/emqcofm._0R9BbFk.png",o=JSON.parse('{"title":"Within","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/within.md","filePath":"source/methods/geom_relations/within.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/within.md"};function e(p,s,k,r,E,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Within

julia
export within

What is within?

The within function checks if one geometry is inside another geometry. This requires that the two interiors intersect and that the interior and boundary of the first geometry is not in the exterior of the second geometry.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/dev/assets/source_methods_orientation.md.Ph8Nq2JT.js b/dev/assets/source_methods_orientation.md.CJJPLosz.js
similarity index 99%
rename from dev/assets/source_methods_orientation.md.Ph8Nq2JT.js
rename to dev/assets/source_methods_orientation.md.CJJPLosz.js
index a2a322548..eb46840b2 100644
--- a/dev/assets/source_methods_orientation.md.Ph8Nq2JT.js
+++ b/dev/assets/source_methods_orientation.md.CJJPLosz.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const E=JSON.parse('{"title":"Orientation","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/orientation.md","filePath":"source/methods/orientation.md","lastUpdated":null}'),p={name:"source/methods/orientation.md"};function h(t,s,e,k,r,d){return l(),a("div",null,s[0]||(s[0]=[n(`

Orientation

julia
export isclockwise, isconcave

isclockwise

The orientation of a geometry is whether it runs clockwise or counter-clockwise.

This is defined for linestrings, linear rings, or vectors of points.

isconcave

A polygon is concave if it has at least one interior angle greater than 180 degrees, meaning that the interior of the polygon is not a convex set.

These are all adapted from Turf.jl.

The may not necessarily be what want in the end but work for now!

julia
"""
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const E=JSON.parse('{"title":"Orientation","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/orientation.md","filePath":"source/methods/orientation.md","lastUpdated":null}'),p={name:"source/methods/orientation.md"};function h(t,s,e,k,r,d){return l(),a("div",null,s[0]||(s[0]=[n(`

Orientation

julia
export isclockwise, isconcave

isclockwise

The orientation of a geometry is whether it runs clockwise or counter-clockwise.

This is defined for linestrings, linear rings, or vectors of points.

isconcave

A polygon is concave if it has at least one interior angle greater than 180 degrees, meaning that the interior of the polygon is not a convex set.

These are all adapted from Turf.jl.

The may not necessarily be what want in the end but work for now!

julia
"""
     isclockwise(line::Union{LineString, Vector{Position}})::Bool
 
 Take a ring and return \`true\` if the line goes clockwise, or \`false\` if the line goes
diff --git a/dev/assets/source_methods_orientation.md.Ph8Nq2JT.lean.js b/dev/assets/source_methods_orientation.md.CJJPLosz.lean.js
similarity index 99%
rename from dev/assets/source_methods_orientation.md.Ph8Nq2JT.lean.js
rename to dev/assets/source_methods_orientation.md.CJJPLosz.lean.js
index a2a322548..eb46840b2 100644
--- a/dev/assets/source_methods_orientation.md.Ph8Nq2JT.lean.js
+++ b/dev/assets/source_methods_orientation.md.CJJPLosz.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const E=JSON.parse('{"title":"Orientation","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/orientation.md","filePath":"source/methods/orientation.md","lastUpdated":null}'),p={name:"source/methods/orientation.md"};function h(t,s,e,k,r,d){return l(),a("div",null,s[0]||(s[0]=[n(`

Orientation

julia
export isclockwise, isconcave

isclockwise

The orientation of a geometry is whether it runs clockwise or counter-clockwise.

This is defined for linestrings, linear rings, or vectors of points.

isconcave

A polygon is concave if it has at least one interior angle greater than 180 degrees, meaning that the interior of the polygon is not a convex set.

These are all adapted from Turf.jl.

The may not necessarily be what want in the end but work for now!

julia
"""
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const E=JSON.parse('{"title":"Orientation","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/orientation.md","filePath":"source/methods/orientation.md","lastUpdated":null}'),p={name:"source/methods/orientation.md"};function h(t,s,e,k,r,d){return l(),a("div",null,s[0]||(s[0]=[n(`

Orientation

julia
export isclockwise, isconcave

isclockwise

The orientation of a geometry is whether it runs clockwise or counter-clockwise.

This is defined for linestrings, linear rings, or vectors of points.

isconcave

A polygon is concave if it has at least one interior angle greater than 180 degrees, meaning that the interior of the polygon is not a convex set.

These are all adapted from Turf.jl.

The may not necessarily be what want in the end but work for now!

julia
"""
     isclockwise(line::Union{LineString, Vector{Position}})::Bool
 
 Take a ring and return \`true\` if the line goes clockwise, or \`false\` if the line goes
diff --git a/dev/assets/source_methods_polygonize.md.82gzC_fG.js b/dev/assets/source_methods_polygonize.md.CVeeXkcB.js
similarity index 99%
rename from dev/assets/source_methods_polygonize.md.82gzC_fG.js
rename to dev/assets/source_methods_polygonize.md.CVeeXkcB.js
index 05f1e3bb1..113e2122f 100644
--- a/dev/assets/source_methods_polygonize.md.82gzC_fG.js
+++ b/dev/assets/source_methods_polygonize.md.CVeeXkcB.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Polygonizing raster data","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/polygonize.md","filePath":"source/methods/polygonize.md","lastUpdated":null}'),l={name:"source/methods/polygonize.md"};function p(t,s,k,e,d,E){return h(),a("div",null,s[0]||(s[0]=[n(`

Polygonizing raster data

julia
export polygonize
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Polygonizing raster data","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/polygonize.md","filePath":"source/methods/polygonize.md","lastUpdated":null}'),l={name:"source/methods/polygonize.md"};function p(t,s,k,e,d,E){return h(),a("div",null,s[0]||(s[0]=[n(`

Polygonizing raster data

julia
export polygonize
 
 #=
 The methods in this file convert a raster image into a set of polygons,
diff --git a/dev/assets/source_methods_polygonize.md.82gzC_fG.lean.js b/dev/assets/source_methods_polygonize.md.CVeeXkcB.lean.js
similarity index 99%
rename from dev/assets/source_methods_polygonize.md.82gzC_fG.lean.js
rename to dev/assets/source_methods_polygonize.md.CVeeXkcB.lean.js
index 05f1e3bb1..113e2122f 100644
--- a/dev/assets/source_methods_polygonize.md.82gzC_fG.lean.js
+++ b/dev/assets/source_methods_polygonize.md.CVeeXkcB.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Polygonizing raster data","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/polygonize.md","filePath":"source/methods/polygonize.md","lastUpdated":null}'),l={name:"source/methods/polygonize.md"};function p(t,s,k,e,d,E){return h(),a("div",null,s[0]||(s[0]=[n(`

Polygonizing raster data

julia
export polygonize
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Polygonizing raster data","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/polygonize.md","filePath":"source/methods/polygonize.md","lastUpdated":null}'),l={name:"source/methods/polygonize.md"};function p(t,s,k,e,d,E){return h(),a("div",null,s[0]||(s[0]=[n(`

Polygonizing raster data

julia
export polygonize
 
 #=
 The methods in this file convert a raster image into a set of polygons,
diff --git a/dev/assets/source_not_implemented_yet.md.ChYg0QGr.js b/dev/assets/source_not_implemented_yet.md.DW1FcB6-.js
similarity index 94%
rename from dev/assets/source_not_implemented_yet.md.ChYg0QGr.js
rename to dev/assets/source_not_implemented_yet.md.DW1FcB6-.js
index 27dba3804..2cf2e102c 100644
--- a/dev/assets/source_not_implemented_yet.md.ChYg0QGr.js
+++ b/dev/assets/source_not_implemented_yet.md.DW1FcB6-.js
@@ -1,4 +1,4 @@
-import{_ as i,c as t,a5 as s,o as a}from"./chunks/framework.O43fB7X6.js";const k=JSON.parse('{"title":"Not implemented yet","description":"","frontmatter":{},"headers":[],"relativePath":"source/not_implemented_yet.md","filePath":"source/not_implemented_yet.md","lastUpdated":null}'),n={name:"source/not_implemented_yet.md"};function l(p,e,h,o,r,d){return a(),t("div",null,e[0]||(e[0]=[s(`

Not implemented yet

All of the functions in this file are not implemented in Julia yet. Some of them may have implementations in LibGEOS which we can use via an extension, but there is no native-Julia implementation for them.

julia
function symdifference end
+import{_ as i,c as t,a5 as s,o as a}from"./chunks/framework.B_n_RGhH.js";const k=JSON.parse('{"title":"Not implemented yet","description":"","frontmatter":{},"headers":[],"relativePath":"source/not_implemented_yet.md","filePath":"source/not_implemented_yet.md","lastUpdated":null}'),n={name:"source/not_implemented_yet.md"};function l(p,e,h,o,r,d){return a(),t("div",null,e[0]||(e[0]=[s(`

Not implemented yet

All of the functions in this file are not implemented in Julia yet. Some of them may have implementations in LibGEOS which we can use via an extension, but there is no native-Julia implementation for them.

julia
function symdifference end
 function buffer end
 function convexhull end
 function concavehull end

This page was generated using Literate.jl.

`,5)]))}const c=i(n,[["render",l]]);export{k as __pageData,c as default}; diff --git a/dev/assets/source_not_implemented_yet.md.ChYg0QGr.lean.js b/dev/assets/source_not_implemented_yet.md.DW1FcB6-.lean.js similarity index 94% rename from dev/assets/source_not_implemented_yet.md.ChYg0QGr.lean.js rename to dev/assets/source_not_implemented_yet.md.DW1FcB6-.lean.js index 27dba3804..2cf2e102c 100644 --- a/dev/assets/source_not_implemented_yet.md.ChYg0QGr.lean.js +++ b/dev/assets/source_not_implemented_yet.md.DW1FcB6-.lean.js @@ -1,4 +1,4 @@ -import{_ as i,c as t,a5 as s,o as a}from"./chunks/framework.O43fB7X6.js";const k=JSON.parse('{"title":"Not implemented yet","description":"","frontmatter":{},"headers":[],"relativePath":"source/not_implemented_yet.md","filePath":"source/not_implemented_yet.md","lastUpdated":null}'),n={name:"source/not_implemented_yet.md"};function l(p,e,h,o,r,d){return a(),t("div",null,e[0]||(e[0]=[s(`

Not implemented yet

All of the functions in this file are not implemented in Julia yet. Some of them may have implementations in LibGEOS which we can use via an extension, but there is no native-Julia implementation for them.

julia
function symdifference end
+import{_ as i,c as t,a5 as s,o as a}from"./chunks/framework.B_n_RGhH.js";const k=JSON.parse('{"title":"Not implemented yet","description":"","frontmatter":{},"headers":[],"relativePath":"source/not_implemented_yet.md","filePath":"source/not_implemented_yet.md","lastUpdated":null}'),n={name:"source/not_implemented_yet.md"};function l(p,e,h,o,r,d){return a(),t("div",null,e[0]||(e[0]=[s(`

Not implemented yet

All of the functions in this file are not implemented in Julia yet. Some of them may have implementations in LibGEOS which we can use via an extension, but there is no native-Julia implementation for them.

julia
function symdifference end
 function buffer end
 function convexhull end
 function concavehull end

This page was generated using Literate.jl.

`,5)]))}const c=i(n,[["render",l]]);export{k as __pageData,c as default}; diff --git a/dev/assets/source_primitives.md.CphxEvTN.js b/dev/assets/source_primitives.md.Y-Ywjmd3.js similarity index 89% rename from dev/assets/source_primitives.md.CphxEvTN.js rename to dev/assets/source_primitives.md.Y-Ywjmd3.js index 180130fe1..f8b777e17 100644 --- a/dev/assets/source_primitives.md.CphxEvTN.js +++ b/dev/assets/source_primitives.md.Y-Ywjmd3.js @@ -1 +1 @@ -import{_ as a,c as s,j as e,a as r,o as i}from"./chunks/framework.O43fB7X6.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/primitives.md","filePath":"source/primitives.md","lastUpdated":null}'),n={name:"source/primitives.md"};function l(o,t,p,c,d,m){return i(),s("div",null,t[0]||(t[0]=[e("hr",null,null,-1),e("p",null,[e("em",null,[r("This page was generated using "),e("a",{href:"https://github.com/fredrikekre/Literate.jl",target:"_blank",rel:"noreferrer"},"Literate.jl"),r(".")])],-1)]))}const _=a(n,[["render",l]]);export{f as __pageData,_ as default}; +import{_ as a,c as s,j as e,a as r,o as i}from"./chunks/framework.B_n_RGhH.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/primitives.md","filePath":"source/primitives.md","lastUpdated":null}'),n={name:"source/primitives.md"};function l(o,t,p,c,d,m){return i(),s("div",null,t[0]||(t[0]=[e("hr",null,null,-1),e("p",null,[e("em",null,[r("This page was generated using "),e("a",{href:"https://github.com/fredrikekre/Literate.jl",target:"_blank",rel:"noreferrer"},"Literate.jl"),r(".")])],-1)]))}const _=a(n,[["render",l]]);export{f as __pageData,_ as default}; diff --git a/dev/assets/source_primitives.md.CphxEvTN.lean.js b/dev/assets/source_primitives.md.Y-Ywjmd3.lean.js similarity index 89% rename from dev/assets/source_primitives.md.CphxEvTN.lean.js rename to dev/assets/source_primitives.md.Y-Ywjmd3.lean.js index 180130fe1..f8b777e17 100644 --- a/dev/assets/source_primitives.md.CphxEvTN.lean.js +++ b/dev/assets/source_primitives.md.Y-Ywjmd3.lean.js @@ -1 +1 @@ -import{_ as a,c as s,j as e,a as r,o as i}from"./chunks/framework.O43fB7X6.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/primitives.md","filePath":"source/primitives.md","lastUpdated":null}'),n={name:"source/primitives.md"};function l(o,t,p,c,d,m){return i(),s("div",null,t[0]||(t[0]=[e("hr",null,null,-1),e("p",null,[e("em",null,[r("This page was generated using "),e("a",{href:"https://github.com/fredrikekre/Literate.jl",target:"_blank",rel:"noreferrer"},"Literate.jl"),r(".")])],-1)]))}const _=a(n,[["render",l]]);export{f as __pageData,_ as default}; +import{_ as a,c as s,j as e,a as r,o as i}from"./chunks/framework.B_n_RGhH.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/primitives.md","filePath":"source/primitives.md","lastUpdated":null}'),n={name:"source/primitives.md"};function l(o,t,p,c,d,m){return i(),s("div",null,t[0]||(t[0]=[e("hr",null,null,-1),e("p",null,[e("em",null,[r("This page was generated using "),e("a",{href:"https://github.com/fredrikekre/Literate.jl",target:"_blank",rel:"noreferrer"},"Literate.jl"),r(".")])],-1)]))}const _=a(n,[["render",l]]);export{f as __pageData,_ as default}; diff --git a/dev/assets/source_src_GeometryOpsCore.md.BqzqjdCw.js b/dev/assets/source_src_GeometryOpsCore.md.4mMc6kXF.js similarity index 98% rename from dev/assets/source_src_GeometryOpsCore.md.BqzqjdCw.js rename to dev/assets/source_src_GeometryOpsCore.md.4mMc6kXF.js index a1467b277..b2c7cee90 100644 --- a/dev/assets/source_src_GeometryOpsCore.md.BqzqjdCw.js +++ b/dev/assets/source_src_GeometryOpsCore.md.4mMc6kXF.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/GeometryOpsCore.md","filePath":"source/src/GeometryOpsCore.md","lastUpdated":null}'),l={name:"source/src/GeometryOpsCore.md"};function e(p,s,h,k,r,E){return t(),a("div",null,s[0]||(s[0]=[n(`
julia
module GeometryOpsCore
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/GeometryOpsCore.md","filePath":"source/src/GeometryOpsCore.md","lastUpdated":null}'),l={name:"source/src/GeometryOpsCore.md"};function e(p,s,h,k,r,E){return t(),a("div",null,s[0]||(s[0]=[n(`
julia
module GeometryOpsCore
 
 using Base.Threads: nthreads, @threads, @spawn
 
diff --git a/dev/assets/source_src_GeometryOpsCore.md.BqzqjdCw.lean.js b/dev/assets/source_src_GeometryOpsCore.md.4mMc6kXF.lean.js
similarity index 98%
rename from dev/assets/source_src_GeometryOpsCore.md.BqzqjdCw.lean.js
rename to dev/assets/source_src_GeometryOpsCore.md.4mMc6kXF.lean.js
index a1467b277..b2c7cee90 100644
--- a/dev/assets/source_src_GeometryOpsCore.md.BqzqjdCw.lean.js
+++ b/dev/assets/source_src_GeometryOpsCore.md.4mMc6kXF.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/GeometryOpsCore.md","filePath":"source/src/GeometryOpsCore.md","lastUpdated":null}'),l={name:"source/src/GeometryOpsCore.md"};function e(p,s,h,k,r,E){return t(),a("div",null,s[0]||(s[0]=[n(`
julia
module GeometryOpsCore
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/GeometryOpsCore.md","filePath":"source/src/GeometryOpsCore.md","lastUpdated":null}'),l={name:"source/src/GeometryOpsCore.md"};function e(p,s,h,k,r,E){return t(),a("div",null,s[0]||(s[0]=[n(`
julia
module GeometryOpsCore
 
 using Base.Threads: nthreads, @threads, @spawn
 
diff --git a/dev/assets/source_src_apply.md.DOPh9oqf.js b/dev/assets/source_src_apply.md.Cv2-2CFT.js
similarity index 99%
rename from dev/assets/source_src_apply.md.DOPh9oqf.js
rename to dev/assets/source_src_apply.md.Cv2-2CFT.js
index a942ce225..e5105e5a2 100644
--- a/dev/assets/source_src_apply.md.DOPh9oqf.js
+++ b/dev/assets/source_src_apply.md.Cv2-2CFT.js
@@ -1,4 +1,4 @@
-import{_ as h,c as l,a5 as a,j as i,a as t,G as n,B as p,o as k}from"./chunks/framework.O43fB7X6.js";const b=JSON.parse('{"title":"apply","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/apply.md","filePath":"source/src/apply.md","lastUpdated":null}'),r={name:"source/src/apply.md"},d={class:"jldocstring custom-block",open:""},o={class:"jldocstring custom-block",open:""};function g(E,s,c,y,F,u){const e=p("Badge");return k(),l("div",null,[s[6]||(s[6]=a('

apply

julia
export apply

This file mainly defines the apply function.

In general, the idea behind the apply framework is to take as input any geometry, vector of geometries, or feature collection, deconstruct it to the given trait target (any arbitrary GI.AbstractTrait or TraitTarget union thereof, like PointTrait or PolygonTrait) and perform some operation on it. Then, the geometry or structure is rebuilt.

This allows for a simple and consistent framework within which users can define their own operations trivially easily, and removes a lot of the complexity involved with handling complex geometry structures.

For example, a simple way to flip the x and y coordinates of a geometry is:

julia
flipped_geom = GO.apply(GI.PointTrait(), geom) do p\n    (GI.y(p), GI.x(p))\nend

As simple as that. There's no need to implement your own decomposition because it's done for you.

Functions like flip, reproject, transform, even segmentize and simplify have been implemented using the apply framework. Similarly, centroid, area and distance have been implemented using the applyreduce framework.

Docstrings

Functions

',11)),i("details",d,[i("summary",null,[s[0]||(s[0]=i("a",{id:"GeometryOps.GeometryOpsCore.apply-source-src-apply",href:"#GeometryOps.GeometryOpsCore.apply-source-src-apply"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.apply")],-1)),s[1]||(s[1]=t()),n(e,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=a(`
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
+import{_ as h,c as l,a5 as a,j as i,a as t,G as n,B as p,o as k}from"./chunks/framework.B_n_RGhH.js";const b=JSON.parse('{"title":"apply","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/apply.md","filePath":"source/src/apply.md","lastUpdated":null}'),r={name:"source/src/apply.md"},d={class:"jldocstring custom-block",open:""},o={class:"jldocstring custom-block",open:""};function g(E,s,c,y,F,u){const e=p("Badge");return k(),l("div",null,[s[6]||(s[6]=a('

apply

julia
export apply

This file mainly defines the apply function.

In general, the idea behind the apply framework is to take as input any geometry, vector of geometries, or feature collection, deconstruct it to the given trait target (any arbitrary GI.AbstractTrait or TraitTarget union thereof, like PointTrait or PolygonTrait) and perform some operation on it. Then, the geometry or structure is rebuilt.

This allows for a simple and consistent framework within which users can define their own operations trivially easily, and removes a lot of the complexity involved with handling complex geometry structures.

For example, a simple way to flip the x and y coordinates of a geometry is:

julia
flipped_geom = GO.apply(GI.PointTrait(), geom) do p\n    (GI.y(p), GI.x(p))\nend

As simple as that. There's no need to implement your own decomposition because it's done for you.

Functions like flip, reproject, transform, even segmentize and simplify have been implemented using the apply framework. Similarly, centroid, area and distance have been implemented using the applyreduce framework.

Docstrings

Functions

',11)),i("details",d,[i("summary",null,[s[0]||(s[0]=i("a",{id:"GeometryOps.GeometryOpsCore.apply-source-src-apply",href:"#GeometryOps.GeometryOpsCore.apply-source-src-apply"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.apply")],-1)),s[1]||(s[1]=t()),n(e,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=a(`
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
 import GeometryOps as GO
 geom = GI.Polygon([GI.LinearRing([(1, 2), (3, 4), (5, 6), (1, 2)]),
                    GI.LinearRing([(3, 4), (5, 6), (6, 7), (3, 4)])])
diff --git a/dev/assets/source_src_apply.md.DOPh9oqf.lean.js b/dev/assets/source_src_apply.md.Cv2-2CFT.lean.js
similarity index 99%
rename from dev/assets/source_src_apply.md.DOPh9oqf.lean.js
rename to dev/assets/source_src_apply.md.Cv2-2CFT.lean.js
index a942ce225..e5105e5a2 100644
--- a/dev/assets/source_src_apply.md.DOPh9oqf.lean.js
+++ b/dev/assets/source_src_apply.md.Cv2-2CFT.lean.js
@@ -1,4 +1,4 @@
-import{_ as h,c as l,a5 as a,j as i,a as t,G as n,B as p,o as k}from"./chunks/framework.O43fB7X6.js";const b=JSON.parse('{"title":"apply","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/apply.md","filePath":"source/src/apply.md","lastUpdated":null}'),r={name:"source/src/apply.md"},d={class:"jldocstring custom-block",open:""},o={class:"jldocstring custom-block",open:""};function g(E,s,c,y,F,u){const e=p("Badge");return k(),l("div",null,[s[6]||(s[6]=a('

apply

julia
export apply

This file mainly defines the apply function.

In general, the idea behind the apply framework is to take as input any geometry, vector of geometries, or feature collection, deconstruct it to the given trait target (any arbitrary GI.AbstractTrait or TraitTarget union thereof, like PointTrait or PolygonTrait) and perform some operation on it. Then, the geometry or structure is rebuilt.

This allows for a simple and consistent framework within which users can define their own operations trivially easily, and removes a lot of the complexity involved with handling complex geometry structures.

For example, a simple way to flip the x and y coordinates of a geometry is:

julia
flipped_geom = GO.apply(GI.PointTrait(), geom) do p\n    (GI.y(p), GI.x(p))\nend

As simple as that. There's no need to implement your own decomposition because it's done for you.

Functions like flip, reproject, transform, even segmentize and simplify have been implemented using the apply framework. Similarly, centroid, area and distance have been implemented using the applyreduce framework.

Docstrings

Functions

',11)),i("details",d,[i("summary",null,[s[0]||(s[0]=i("a",{id:"GeometryOps.GeometryOpsCore.apply-source-src-apply",href:"#GeometryOps.GeometryOpsCore.apply-source-src-apply"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.apply")],-1)),s[1]||(s[1]=t()),n(e,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=a(`
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
+import{_ as h,c as l,a5 as a,j as i,a as t,G as n,B as p,o as k}from"./chunks/framework.B_n_RGhH.js";const b=JSON.parse('{"title":"apply","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/apply.md","filePath":"source/src/apply.md","lastUpdated":null}'),r={name:"source/src/apply.md"},d={class:"jldocstring custom-block",open:""},o={class:"jldocstring custom-block",open:""};function g(E,s,c,y,F,u){const e=p("Badge");return k(),l("div",null,[s[6]||(s[6]=a('

apply

julia
export apply

This file mainly defines the apply function.

In general, the idea behind the apply framework is to take as input any geometry, vector of geometries, or feature collection, deconstruct it to the given trait target (any arbitrary GI.AbstractTrait or TraitTarget union thereof, like PointTrait or PolygonTrait) and perform some operation on it. Then, the geometry or structure is rebuilt.

This allows for a simple and consistent framework within which users can define their own operations trivially easily, and removes a lot of the complexity involved with handling complex geometry structures.

For example, a simple way to flip the x and y coordinates of a geometry is:

julia
flipped_geom = GO.apply(GI.PointTrait(), geom) do p\n    (GI.y(p), GI.x(p))\nend

As simple as that. There's no need to implement your own decomposition because it's done for you.

Functions like flip, reproject, transform, even segmentize and simplify have been implemented using the apply framework. Similarly, centroid, area and distance have been implemented using the applyreduce framework.

Docstrings

Functions

',11)),i("details",d,[i("summary",null,[s[0]||(s[0]=i("a",{id:"GeometryOps.GeometryOpsCore.apply-source-src-apply",href:"#GeometryOps.GeometryOpsCore.apply-source-src-apply"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryOpsCore.apply")],-1)),s[1]||(s[1]=t()),n(e,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),s[2]||(s[2]=a(`
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
 import GeometryOps as GO
 geom = GI.Polygon([GI.LinearRing([(1, 2), (3, 4), (5, 6), (1, 2)]),
                    GI.LinearRing([(3, 4), (5, 6), (6, 7), (3, 4)])])
diff --git a/dev/assets/source_src_applyreduce.md.SuS0iM3N.js b/dev/assets/source_src_applyreduce.md.CQegM7Zd.js
similarity index 99%
rename from dev/assets/source_src_applyreduce.md.SuS0iM3N.js
rename to dev/assets/source_src_applyreduce.md.CQegM7Zd.js
index 6c7417bda..819ab0e61 100644
--- a/dev/assets/source_src_applyreduce.md.SuS0iM3N.js
+++ b/dev/assets/source_src_applyreduce.md.CQegM7Zd.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as t,o as n}from"./chunks/framework.O43fB7X6.js";const E=JSON.parse('{"title":"applyreduce","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/applyreduce.md","filePath":"source/src/applyreduce.md","lastUpdated":null}'),h={name:"source/src/applyreduce.md"};function e(p,s,l,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

applyreduce

julia
export applyreduce

This file mainly defines the applyreduce function.

This performs apply, but then reduces the result after flattening instead of rebuilding the geometry.

In general, the idea behind the apply framework is to take as input any geometry, vector of geometries, or feature collection, deconstruct it to the given trait target (any arbitrary GI.AbstractTrait or TraitTarget union thereof, like PointTrait or PolygonTrait) and perform some operation on it.

centroid, area and distance have been implemented using the applyreduce framework.

julia
"""
+import{_ as i,c as a,a5 as t,o as n}from"./chunks/framework.B_n_RGhH.js";const E=JSON.parse('{"title":"applyreduce","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/applyreduce.md","filePath":"source/src/applyreduce.md","lastUpdated":null}'),h={name:"source/src/applyreduce.md"};function e(p,s,l,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

applyreduce

julia
export applyreduce

This file mainly defines the applyreduce function.

This performs apply, but then reduces the result after flattening instead of rebuilding the geometry.

In general, the idea behind the apply framework is to take as input any geometry, vector of geometries, or feature collection, deconstruct it to the given trait target (any arbitrary GI.AbstractTrait or TraitTarget union thereof, like PointTrait or PolygonTrait) and perform some operation on it.

centroid, area and distance have been implemented using the applyreduce framework.

julia
"""
     applyreduce(f, op, target::Union{TraitTarget, GI.AbstractTrait}, obj; threaded)
 
 Apply function \`f\` to all objects with the \`target\` trait,
diff --git a/dev/assets/source_src_applyreduce.md.SuS0iM3N.lean.js b/dev/assets/source_src_applyreduce.md.CQegM7Zd.lean.js
similarity index 99%
rename from dev/assets/source_src_applyreduce.md.SuS0iM3N.lean.js
rename to dev/assets/source_src_applyreduce.md.CQegM7Zd.lean.js
index 6c7417bda..819ab0e61 100644
--- a/dev/assets/source_src_applyreduce.md.SuS0iM3N.lean.js
+++ b/dev/assets/source_src_applyreduce.md.CQegM7Zd.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as t,o as n}from"./chunks/framework.O43fB7X6.js";const E=JSON.parse('{"title":"applyreduce","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/applyreduce.md","filePath":"source/src/applyreduce.md","lastUpdated":null}'),h={name:"source/src/applyreduce.md"};function e(p,s,l,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

applyreduce

julia
export applyreduce

This file mainly defines the applyreduce function.

This performs apply, but then reduces the result after flattening instead of rebuilding the geometry.

In general, the idea behind the apply framework is to take as input any geometry, vector of geometries, or feature collection, deconstruct it to the given trait target (any arbitrary GI.AbstractTrait or TraitTarget union thereof, like PointTrait or PolygonTrait) and perform some operation on it.

centroid, area and distance have been implemented using the applyreduce framework.

julia
"""
+import{_ as i,c as a,a5 as t,o as n}from"./chunks/framework.B_n_RGhH.js";const E=JSON.parse('{"title":"applyreduce","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/applyreduce.md","filePath":"source/src/applyreduce.md","lastUpdated":null}'),h={name:"source/src/applyreduce.md"};function e(p,s,l,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

applyreduce

julia
export applyreduce

This file mainly defines the applyreduce function.

This performs apply, but then reduces the result after flattening instead of rebuilding the geometry.

In general, the idea behind the apply framework is to take as input any geometry, vector of geometries, or feature collection, deconstruct it to the given trait target (any arbitrary GI.AbstractTrait or TraitTarget union thereof, like PointTrait or PolygonTrait) and perform some operation on it.

centroid, area and distance have been implemented using the applyreduce framework.

julia
"""
     applyreduce(f, op, target::Union{TraitTarget, GI.AbstractTrait}, obj; threaded)
 
 Apply function \`f\` to all objects with the \`target\` trait,
diff --git a/dev/assets/source_src_geometry_utils.md.Btyz5R1v.js b/dev/assets/source_src_geometry_utils.md.BNP4rp8d.js
similarity index 95%
rename from dev/assets/source_src_geometry_utils.md.Btyz5R1v.js
rename to dev/assets/source_src_geometry_utils.md.BNP4rp8d.js
index ce595ac60..f7c941c80 100644
--- a/dev/assets/source_src_geometry_utils.md.Btyz5R1v.js
+++ b/dev/assets/source_src_geometry_utils.md.BNP4rp8d.js
@@ -1,2 +1,2 @@
-import{_ as i,c as a,a5 as t,o as e}from"./chunks/framework.O43fB7X6.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/geometry_utils.md","filePath":"source/src/geometry_utils.md","lastUpdated":null}'),n={name:"source/src/geometry_utils.md"};function h(l,s,k,p,r,g){return e(),a("div",null,s[0]||(s[0]=[t(`
julia
_linearring(geom::GI.LineString) = GI.LinearRing(parent(geom); extent=geom.extent, crs=geom.crs)
+import{_ as i,c as a,a5 as t,o as e}from"./chunks/framework.B_n_RGhH.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/geometry_utils.md","filePath":"source/src/geometry_utils.md","lastUpdated":null}'),n={name:"source/src/geometry_utils.md"};function h(l,s,k,p,r,g){return e(),a("div",null,s[0]||(s[0]=[t(`
julia
_linearring(geom::GI.LineString) = GI.LinearRing(parent(geom); extent=geom.extent, crs=geom.crs)
 _linearring(geom::GI.LinearRing) = geom

This page was generated using Literate.jl.

`,3)]))}const o=i(n,[["render",h]]);export{E as __pageData,o as default}; diff --git a/dev/assets/source_src_geometry_utils.md.Btyz5R1v.lean.js b/dev/assets/source_src_geometry_utils.md.BNP4rp8d.lean.js similarity index 95% rename from dev/assets/source_src_geometry_utils.md.Btyz5R1v.lean.js rename to dev/assets/source_src_geometry_utils.md.BNP4rp8d.lean.js index ce595ac60..f7c941c80 100644 --- a/dev/assets/source_src_geometry_utils.md.Btyz5R1v.lean.js +++ b/dev/assets/source_src_geometry_utils.md.BNP4rp8d.lean.js @@ -1,2 +1,2 @@ -import{_ as i,c as a,a5 as t,o as e}from"./chunks/framework.O43fB7X6.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/geometry_utils.md","filePath":"source/src/geometry_utils.md","lastUpdated":null}'),n={name:"source/src/geometry_utils.md"};function h(l,s,k,p,r,g){return e(),a("div",null,s[0]||(s[0]=[t(`
julia
_linearring(geom::GI.LineString) = GI.LinearRing(parent(geom); extent=geom.extent, crs=geom.crs)
+import{_ as i,c as a,a5 as t,o as e}from"./chunks/framework.B_n_RGhH.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/geometry_utils.md","filePath":"source/src/geometry_utils.md","lastUpdated":null}'),n={name:"source/src/geometry_utils.md"};function h(l,s,k,p,r,g){return e(),a("div",null,s[0]||(s[0]=[t(`
julia
_linearring(geom::GI.LineString) = GI.LinearRing(parent(geom); extent=geom.extent, crs=geom.crs)
 _linearring(geom::GI.LinearRing) = geom

This page was generated using Literate.jl.

`,3)]))}const o=i(n,[["render",h]]);export{E as __pageData,o as default}; diff --git a/dev/assets/source_src_keyword_docs.md.B6dN1uTp.js b/dev/assets/source_src_keyword_docs.md.eVWchhDH.js similarity index 95% rename from dev/assets/source_src_keyword_docs.md.B6dN1uTp.js rename to dev/assets/source_src_keyword_docs.md.eVWchhDH.js index 7cc452916..d328f8835 100644 --- a/dev/assets/source_src_keyword_docs.md.B6dN1uTp.js +++ b/dev/assets/source_src_keyword_docs.md.eVWchhDH.js @@ -1 +1 @@ -import{_ as a,c as i,a5 as t,o as e}from"./chunks/framework.O43fB7X6.js";const c=JSON.parse('{"title":"Keyword docs","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/keyword_docs.md","filePath":"source/src/keyword_docs.md","lastUpdated":null}'),n={name:"source/src/keyword_docs.md"};function l(h,s,o,r,p,d){return e(),i("div",null,s[0]||(s[0]=[t('

Keyword docs

This file defines common keyword documentation, that can be spliced into docstrings.

julia
const THREADED_KEYWORD = "- `threaded`: `true` or `false`. Whether to use multithreading. Defaults to `false`."\nconst CRS_KEYWORD = "- `crs`: The CRS to attach to geometries. Defaults to `nothing`."\nconst CALC_EXTENT_KEYWORD = "- `calc_extent`: `true` or `false`. Whether to calculate the extent. Defaults to `false`."\n\nconst APPLY_KEYWORDS = """\n$THREADED_KEYWORD\n$CRS_KEYWORD\n$CALC_EXTENT_KEYWORD\n"""

This page was generated using Literate.jl.

',5)]))}const u=a(n,[["render",l]]);export{c as __pageData,u as default}; +import{_ as a,c as i,a5 as t,o as e}from"./chunks/framework.B_n_RGhH.js";const c=JSON.parse('{"title":"Keyword docs","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/keyword_docs.md","filePath":"source/src/keyword_docs.md","lastUpdated":null}'),n={name:"source/src/keyword_docs.md"};function l(h,s,o,r,p,d){return e(),i("div",null,s[0]||(s[0]=[t('

Keyword docs

This file defines common keyword documentation, that can be spliced into docstrings.

julia
const THREADED_KEYWORD = "- `threaded`: `true` or `false`. Whether to use multithreading. Defaults to `false`."\nconst CRS_KEYWORD = "- `crs`: The CRS to attach to geometries. Defaults to `nothing`."\nconst CALC_EXTENT_KEYWORD = "- `calc_extent`: `true` or `false`. Whether to calculate the extent. Defaults to `false`."\n\nconst APPLY_KEYWORDS = """\n$THREADED_KEYWORD\n$CRS_KEYWORD\n$CALC_EXTENT_KEYWORD\n"""

This page was generated using Literate.jl.

',5)]))}const u=a(n,[["render",l]]);export{c as __pageData,u as default}; diff --git a/dev/assets/source_src_keyword_docs.md.B6dN1uTp.lean.js b/dev/assets/source_src_keyword_docs.md.eVWchhDH.lean.js similarity index 95% rename from dev/assets/source_src_keyword_docs.md.B6dN1uTp.lean.js rename to dev/assets/source_src_keyword_docs.md.eVWchhDH.lean.js index 7cc452916..d328f8835 100644 --- a/dev/assets/source_src_keyword_docs.md.B6dN1uTp.lean.js +++ b/dev/assets/source_src_keyword_docs.md.eVWchhDH.lean.js @@ -1 +1 @@ -import{_ as a,c as i,a5 as t,o as e}from"./chunks/framework.O43fB7X6.js";const c=JSON.parse('{"title":"Keyword docs","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/keyword_docs.md","filePath":"source/src/keyword_docs.md","lastUpdated":null}'),n={name:"source/src/keyword_docs.md"};function l(h,s,o,r,p,d){return e(),i("div",null,s[0]||(s[0]=[t('

Keyword docs

This file defines common keyword documentation, that can be spliced into docstrings.

julia
const THREADED_KEYWORD = "- `threaded`: `true` or `false`. Whether to use multithreading. Defaults to `false`."\nconst CRS_KEYWORD = "- `crs`: The CRS to attach to geometries. Defaults to `nothing`."\nconst CALC_EXTENT_KEYWORD = "- `calc_extent`: `true` or `false`. Whether to calculate the extent. Defaults to `false`."\n\nconst APPLY_KEYWORDS = """\n$THREADED_KEYWORD\n$CRS_KEYWORD\n$CALC_EXTENT_KEYWORD\n"""

This page was generated using Literate.jl.

',5)]))}const u=a(n,[["render",l]]);export{c as __pageData,u as default}; +import{_ as a,c as i,a5 as t,o as e}from"./chunks/framework.B_n_RGhH.js";const c=JSON.parse('{"title":"Keyword docs","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/keyword_docs.md","filePath":"source/src/keyword_docs.md","lastUpdated":null}'),n={name:"source/src/keyword_docs.md"};function l(h,s,o,r,p,d){return e(),i("div",null,s[0]||(s[0]=[t('

Keyword docs

This file defines common keyword documentation, that can be spliced into docstrings.

julia
const THREADED_KEYWORD = "- `threaded`: `true` or `false`. Whether to use multithreading. Defaults to `false`."\nconst CRS_KEYWORD = "- `crs`: The CRS to attach to geometries. Defaults to `nothing`."\nconst CALC_EXTENT_KEYWORD = "- `calc_extent`: `true` or `false`. Whether to calculate the extent. Defaults to `false`."\n\nconst APPLY_KEYWORDS = """\n$THREADED_KEYWORD\n$CRS_KEYWORD\n$CALC_EXTENT_KEYWORD\n"""

This page was generated using Literate.jl.

',5)]))}const u=a(n,[["render",l]]);export{c as __pageData,u as default}; diff --git a/dev/assets/source_src_other_primitives.md.w6TkOrmH.js b/dev/assets/source_src_other_primitives.md.CgdSSOvp.js similarity index 99% rename from dev/assets/source_src_other_primitives.md.w6TkOrmH.js rename to dev/assets/source_src_other_primitives.md.CgdSSOvp.js index 8761ad429..a65910b07 100644 --- a/dev/assets/source_src_other_primitives.md.w6TkOrmH.js +++ b/dev/assets/source_src_other_primitives.md.CgdSSOvp.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,a5 as t,o as n}from"./chunks/framework.O43fB7X6.js";const d=JSON.parse('{"title":"Other primitives (unwrap, flatten, etc)","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/other_primitives.md","filePath":"source/src/other_primitives.md","lastUpdated":null}'),h={name:"source/src/other_primitives.md"};function k(l,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

Other primitives (unwrap, flatten, etc)

This file defines the following primitives:

Missing docstring.

Missing docstring for unwrap. Check Documenter's build log for details.

Missing docstring.

Missing docstring for flatten. Check Documenter's build log for details.

Missing docstring.

Missing docstring for reconstruct. Check Documenter's build log for details.

Missing docstring.

Missing docstring for rebuild. Check Documenter's build log for details.

julia
"""
+import{_ as i,c as a,a5 as t,o as n}from"./chunks/framework.B_n_RGhH.js";const d=JSON.parse('{"title":"Other primitives (unwrap, flatten, etc)","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/other_primitives.md","filePath":"source/src/other_primitives.md","lastUpdated":null}'),h={name:"source/src/other_primitives.md"};function k(l,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

Other primitives (unwrap, flatten, etc)

This file defines the following primitives:

Missing docstring.

Missing docstring for unwrap. Check Documenter's build log for details.

Missing docstring.

Missing docstring for flatten. Check Documenter's build log for details.

Missing docstring.

Missing docstring for reconstruct. Check Documenter's build log for details.

Missing docstring.

Missing docstring for rebuild. Check Documenter's build log for details.

julia
"""
     unwrap(target::Type{<:AbstractTrait}, obj)
     unwrap(f, target::Type{<:AbstractTrait}, obj)
 
diff --git a/dev/assets/source_src_other_primitives.md.w6TkOrmH.lean.js b/dev/assets/source_src_other_primitives.md.CgdSSOvp.lean.js
similarity index 99%
rename from dev/assets/source_src_other_primitives.md.w6TkOrmH.lean.js
rename to dev/assets/source_src_other_primitives.md.CgdSSOvp.lean.js
index 8761ad429..a65910b07 100644
--- a/dev/assets/source_src_other_primitives.md.w6TkOrmH.lean.js
+++ b/dev/assets/source_src_other_primitives.md.CgdSSOvp.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as t,o as n}from"./chunks/framework.O43fB7X6.js";const d=JSON.parse('{"title":"Other primitives (unwrap, flatten, etc)","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/other_primitives.md","filePath":"source/src/other_primitives.md","lastUpdated":null}'),h={name:"source/src/other_primitives.md"};function k(l,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

Other primitives (unwrap, flatten, etc)

This file defines the following primitives:

Missing docstring.

Missing docstring for unwrap. Check Documenter's build log for details.

Missing docstring.

Missing docstring for flatten. Check Documenter's build log for details.

Missing docstring.

Missing docstring for reconstruct. Check Documenter's build log for details.

Missing docstring.

Missing docstring for rebuild. Check Documenter's build log for details.

julia
"""
+import{_ as i,c as a,a5 as t,o as n}from"./chunks/framework.B_n_RGhH.js";const d=JSON.parse('{"title":"Other primitives (unwrap, flatten, etc)","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/other_primitives.md","filePath":"source/src/other_primitives.md","lastUpdated":null}'),h={name:"source/src/other_primitives.md"};function k(l,s,p,e,r,E){return n(),a("div",null,s[0]||(s[0]=[t(`

Other primitives (unwrap, flatten, etc)

This file defines the following primitives:

Missing docstring.

Missing docstring for unwrap. Check Documenter's build log for details.

Missing docstring.

Missing docstring for flatten. Check Documenter's build log for details.

Missing docstring.

Missing docstring for reconstruct. Check Documenter's build log for details.

Missing docstring.

Missing docstring for rebuild. Check Documenter's build log for details.

julia
"""
     unwrap(target::Type{<:AbstractTrait}, obj)
     unwrap(f, target::Type{<:AbstractTrait}, obj)
 
diff --git a/dev/assets/source_src_types.md.BuVKG-gS.js b/dev/assets/source_src_types.md.BdEMpQc2.js
similarity index 96%
rename from dev/assets/source_src_types.md.BuVKG-gS.js
rename to dev/assets/source_src_types.md.BdEMpQc2.js
index f72789a51..ce21bf28e 100644
--- a/dev/assets/source_src_types.md.BuVKG-gS.js
+++ b/dev/assets/source_src_types.md.BdEMpQc2.js
@@ -1,4 +1,4 @@
-import{_ as a,c as i,a5 as n,o as e}from"./chunks/framework.O43fB7X6.js";const c=JSON.parse('{"title":"Types","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/types.md","filePath":"source/src/types.md","lastUpdated":null}'),t={name:"source/src/types.md"};function l(p,s,h,k,r,o){return e(),i("div",null,s[0]||(s[0]=[n(`

Types

This defines core types that the GeometryOps ecosystem uses, and that are usable in more than just GeometryOps.

Manifold

A manifold is mathematically defined as a topological space that resembles Euclidean space locally.

In GeometryOps (and geodesy more generally), there are three manifolds we care about:

  • Linear: the 2d plane, a completely Euclidean manifold

  • Spherical: the unit sphere, but one where areas are multiplied by the radius of the Earth. This is not Euclidean globally, but all map projections attempt to represent the sphere on the Euclidean 2D plane to varying degrees of success.

  • Geodesic: the ellipsoid, the closest we can come to representing the Earth by a simple geometric shape. Parametrized by semimajor_axis and inv_flattening.

Generally, we aim to have Linear and Spherical be operable everywhere, whereas Geodesic will only apply in specific circumstances. Currently, those circumstances are area and segmentize, but this could be extended with time and https://github.com/JuliaGeo/SphericalGeodesics.jl.

julia
export Linear, Spherical, Geodesic
+import{_ as a,c as i,a5 as n,o as e}from"./chunks/framework.B_n_RGhH.js";const c=JSON.parse('{"title":"Types","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/types.md","filePath":"source/src/types.md","lastUpdated":null}'),t={name:"source/src/types.md"};function l(p,s,h,k,r,o){return e(),i("div",null,s[0]||(s[0]=[n(`

Types

This defines core types that the GeometryOps ecosystem uses, and that are usable in more than just GeometryOps.

Manifold

A manifold is mathematically defined as a topological space that resembles Euclidean space locally.

In GeometryOps (and geodesy more generally), there are three manifolds we care about:

  • Planar: the 2d plane, a completely Euclidean manifold

  • Spherical: the unit sphere, but one where areas are multiplied by the radius of the Earth. This is not Euclidean globally, but all map projections attempt to represent the sphere on the Euclidean 2D plane to varying degrees of success.

  • Geodesic: the ellipsoid, the closest we can come to representing the Earth by a simple geometric shape. Parametrized by semimajor_axis and inv_flattening.

Generally, we aim to have Linear and Spherical be operable everywhere, whereas Geodesic will only apply in specific circumstances. Currently, those circumstances are area and segmentize, but this could be extended with time and https://github.com/JuliaGeo/SphericalGeodesics.jl.

julia
export Planar, Spherical, Geodesic
 export TraitTarget
 export BoolsAsTypes, _True, _False, _booltype
 
@@ -9,17 +9,19 @@ import{_ as a,c as i,a5 as n,o as e}from"./chunks/framework.O43fB7X6.js";const c
 
 We use the manifold definition to define the space in which an operation should be performed, or where a geometry lies.
 
-Currently we have \`Linear\`, \`Spherical\`, and \`Geodesic\` manifolds.
+Currently we have \`Planar\`, \`Spherical\`, and \`Geodesic\` manifolds.
 """
 abstract type Manifold end
 
 """
-    Linear()
+    Planar()
 
-A linear manifold means that the space is completely Euclidean,
-and planar geometry suffices.
+A planar manifold refers to the 2D Euclidean plane.
+
+Z coordinates may be accepted but will not influence geometry calculations, which
+are done purely on 2D geometry.  This is the standard "2.5D" model used by e.g. GEOS.
 """
-struct Linear <: Manifold
+struct Planar <: Manifold
 end
 
 """
diff --git a/dev/assets/source_src_types.md.BuVKG-gS.lean.js b/dev/assets/source_src_types.md.BdEMpQc2.lean.js
similarity index 96%
rename from dev/assets/source_src_types.md.BuVKG-gS.lean.js
rename to dev/assets/source_src_types.md.BdEMpQc2.lean.js
index f72789a51..ce21bf28e 100644
--- a/dev/assets/source_src_types.md.BuVKG-gS.lean.js
+++ b/dev/assets/source_src_types.md.BdEMpQc2.lean.js
@@ -1,4 +1,4 @@
-import{_ as a,c as i,a5 as n,o as e}from"./chunks/framework.O43fB7X6.js";const c=JSON.parse('{"title":"Types","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/types.md","filePath":"source/src/types.md","lastUpdated":null}'),t={name:"source/src/types.md"};function l(p,s,h,k,r,o){return e(),i("div",null,s[0]||(s[0]=[n(`

Types

This defines core types that the GeometryOps ecosystem uses, and that are usable in more than just GeometryOps.

Manifold

A manifold is mathematically defined as a topological space that resembles Euclidean space locally.

In GeometryOps (and geodesy more generally), there are three manifolds we care about:

  • Linear: the 2d plane, a completely Euclidean manifold

  • Spherical: the unit sphere, but one where areas are multiplied by the radius of the Earth. This is not Euclidean globally, but all map projections attempt to represent the sphere on the Euclidean 2D plane to varying degrees of success.

  • Geodesic: the ellipsoid, the closest we can come to representing the Earth by a simple geometric shape. Parametrized by semimajor_axis and inv_flattening.

Generally, we aim to have Linear and Spherical be operable everywhere, whereas Geodesic will only apply in specific circumstances. Currently, those circumstances are area and segmentize, but this could be extended with time and https://github.com/JuliaGeo/SphericalGeodesics.jl.

julia
export Linear, Spherical, Geodesic
+import{_ as a,c as i,a5 as n,o as e}from"./chunks/framework.B_n_RGhH.js";const c=JSON.parse('{"title":"Types","description":"","frontmatter":{},"headers":[],"relativePath":"source/src/types.md","filePath":"source/src/types.md","lastUpdated":null}'),t={name:"source/src/types.md"};function l(p,s,h,k,r,o){return e(),i("div",null,s[0]||(s[0]=[n(`

Types

This defines core types that the GeometryOps ecosystem uses, and that are usable in more than just GeometryOps.

Manifold

A manifold is mathematically defined as a topological space that resembles Euclidean space locally.

In GeometryOps (and geodesy more generally), there are three manifolds we care about:

  • Planar: the 2d plane, a completely Euclidean manifold

  • Spherical: the unit sphere, but one where areas are multiplied by the radius of the Earth. This is not Euclidean globally, but all map projections attempt to represent the sphere on the Euclidean 2D plane to varying degrees of success.

  • Geodesic: the ellipsoid, the closest we can come to representing the Earth by a simple geometric shape. Parametrized by semimajor_axis and inv_flattening.

Generally, we aim to have Linear and Spherical be operable everywhere, whereas Geodesic will only apply in specific circumstances. Currently, those circumstances are area and segmentize, but this could be extended with time and https://github.com/JuliaGeo/SphericalGeodesics.jl.

julia
export Planar, Spherical, Geodesic
 export TraitTarget
 export BoolsAsTypes, _True, _False, _booltype
 
@@ -9,17 +9,19 @@ import{_ as a,c as i,a5 as n,o as e}from"./chunks/framework.O43fB7X6.js";const c
 
 We use the manifold definition to define the space in which an operation should be performed, or where a geometry lies.
 
-Currently we have \`Linear\`, \`Spherical\`, and \`Geodesic\` manifolds.
+Currently we have \`Planar\`, \`Spherical\`, and \`Geodesic\` manifolds.
 """
 abstract type Manifold end
 
 """
-    Linear()
+    Planar()
 
-A linear manifold means that the space is completely Euclidean,
-and planar geometry suffices.
+A planar manifold refers to the 2D Euclidean plane.
+
+Z coordinates may be accepted but will not influence geometry calculations, which
+are done purely on 2D geometry.  This is the standard "2.5D" model used by e.g. GEOS.
 """
-struct Linear <: Manifold
+struct Planar <: Manifold
 end
 
 """
diff --git a/dev/assets/source_transformations_correction_closed_ring.md.DWFgEYUs.js b/dev/assets/source_transformations_correction_closed_ring.md.Dd17xmiZ.js
similarity index 99%
rename from dev/assets/source_transformations_correction_closed_ring.md.DWFgEYUs.js
rename to dev/assets/source_transformations_correction_closed_ring.md.Dd17xmiZ.js
index 0d950e81f..c66cca577 100644
--- a/dev/assets/source_transformations_correction_closed_ring.md.DWFgEYUs.js
+++ b/dev/assets/source_transformations_correction_closed_ring.md.Dd17xmiZ.js
@@ -1,4 +1,4 @@
-import{_ as l,c as a,a5 as n,j as i,a as t,o as e}from"./chunks/framework.O43fB7X6.js";const m=JSON.parse('{"title":"Closed Rings","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/closed_ring.md","filePath":"source/transformations/correction/closed_ring.md","lastUpdated":null}'),h={name:"source/transformations/correction/closed_ring.md"},p={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},k={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},r={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},o={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.254ex",height:"1.692ex",role:"img",focusable:"false",viewBox:"0 -666 2322.4 748","aria-hidden":"true"};function d(g,s,c,E,y,u){return e(),a("div",null,[s[7]||(s[7]=n(`

Closed Rings

julia
export ClosedRing

A closed ring is a ring that has the same start and end point. This is a requirement for a valid polygon (technically, for a valid LinearRing). This correction is used to ensure that the polygon is valid.

The reason this operates on the polygon level is that several packages are loose about whether they return LinearRings (which is correct) or LineStrings (which is incorrect) for the contents of a polygon. Therefore, we decompose manually to ensure correctness.

Example

Many polygon providers do not close their polygons, which makes them invalid according to the specification. Quite a few geometry algorithms assume that polygons are closed, and leaving them open can lead to incorrect results!

For example, the following polygon is not valid:

julia
import GeoInterface as GI
+import{_ as l,c as a,a5 as n,j as i,a as t,o as e}from"./chunks/framework.B_n_RGhH.js";const m=JSON.parse('{"title":"Closed Rings","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/closed_ring.md","filePath":"source/transformations/correction/closed_ring.md","lastUpdated":null}'),h={name:"source/transformations/correction/closed_ring.md"},p={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},k={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},r={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},o={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.254ex",height:"1.692ex",role:"img",focusable:"false",viewBox:"0 -666 2322.4 748","aria-hidden":"true"};function d(g,s,c,E,y,u){return e(),a("div",null,[s[7]||(s[7]=n(`

Closed Rings

julia
export ClosedRing

A closed ring is a ring that has the same start and end point. This is a requirement for a valid polygon (technically, for a valid LinearRing). This correction is used to ensure that the polygon is valid.

The reason this operates on the polygon level is that several packages are loose about whether they return LinearRings (which is correct) or LineStrings (which is incorrect) for the contents of a polygon. Therefore, we decompose manually to ensure correctness.

Example

Many polygon providers do not close their polygons, which makes them invalid according to the specification. Quite a few geometry algorithms assume that polygons are closed, and leaving them open can lead to incorrect results!

For example, the following polygon is not valid:

julia
import GeoInterface as GI
 polygon = GI.Polygon([[(0, 0), (1, 0), (1, 1), (0, 1)]])
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Int64, Int64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Int64, Int64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Int64, Int64}}, Nothing, Nothing}([(0, 0), (1, 0), (1, 1), (0, 1)], nothing, nothing)], nothing, nothing)

even though it will look correct when visualized, and indeed appears correct.

julia
import GeometryOps as GO
 GO.fix(polygon, corrections = [GO.ClosedRing()])
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 1.0), (0.0, 0.0)], nothing, nothing)], nothing, nothing)
`,12)),i("p",null,[s[4]||(s[4]=t("You can see that the last point of the ring here is equal to the first point. For a polygon with ")),i("mjx-container",p,[(e(),a("svg",k,s[0]||(s[0]=[i("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[i("g",{"data-mml-node":"math"},[i("g",{"data-mml-node":"mi"},[i("path",{"data-c":"1D45B",d:"M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z",style:{"stroke-width":"3"}})])])],-1)]))),s[1]||(s[1]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mi",null,"n")])],-1))]),s[5]||(s[5]=t(" sides, there should be ")),i("mjx-container",r,[(e(),a("svg",o,s[2]||(s[2]=[n('',1)]))),s[3]||(s[3]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mi",null,"n"),i("mo",null,"+"),i("mn",null,"1")])],-1))]),s[6]||(s[6]=t(" vertices."))]),s[8]||(s[8]=n(`

Implementation

julia
"""
     ClosedRing() <: GeometryCorrection
diff --git a/dev/assets/source_transformations_correction_closed_ring.md.DWFgEYUs.lean.js b/dev/assets/source_transformations_correction_closed_ring.md.Dd17xmiZ.lean.js
similarity index 99%
rename from dev/assets/source_transformations_correction_closed_ring.md.DWFgEYUs.lean.js
rename to dev/assets/source_transformations_correction_closed_ring.md.Dd17xmiZ.lean.js
index 0d950e81f..c66cca577 100644
--- a/dev/assets/source_transformations_correction_closed_ring.md.DWFgEYUs.lean.js
+++ b/dev/assets/source_transformations_correction_closed_ring.md.Dd17xmiZ.lean.js
@@ -1,4 +1,4 @@
-import{_ as l,c as a,a5 as n,j as i,a as t,o as e}from"./chunks/framework.O43fB7X6.js";const m=JSON.parse('{"title":"Closed Rings","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/closed_ring.md","filePath":"source/transformations/correction/closed_ring.md","lastUpdated":null}'),h={name:"source/transformations/correction/closed_ring.md"},p={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},k={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},r={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},o={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.254ex",height:"1.692ex",role:"img",focusable:"false",viewBox:"0 -666 2322.4 748","aria-hidden":"true"};function d(g,s,c,E,y,u){return e(),a("div",null,[s[7]||(s[7]=n(`

Closed Rings

julia
export ClosedRing

A closed ring is a ring that has the same start and end point. This is a requirement for a valid polygon (technically, for a valid LinearRing). This correction is used to ensure that the polygon is valid.

The reason this operates on the polygon level is that several packages are loose about whether they return LinearRings (which is correct) or LineStrings (which is incorrect) for the contents of a polygon. Therefore, we decompose manually to ensure correctness.

Example

Many polygon providers do not close their polygons, which makes them invalid according to the specification. Quite a few geometry algorithms assume that polygons are closed, and leaving them open can lead to incorrect results!

For example, the following polygon is not valid:

julia
import GeoInterface as GI
+import{_ as l,c as a,a5 as n,j as i,a as t,o as e}from"./chunks/framework.B_n_RGhH.js";const m=JSON.parse('{"title":"Closed Rings","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/closed_ring.md","filePath":"source/transformations/correction/closed_ring.md","lastUpdated":null}'),h={name:"source/transformations/correction/closed_ring.md"},p={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},k={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},r={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},o={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.254ex",height:"1.692ex",role:"img",focusable:"false",viewBox:"0 -666 2322.4 748","aria-hidden":"true"};function d(g,s,c,E,y,u){return e(),a("div",null,[s[7]||(s[7]=n(`

Closed Rings

julia
export ClosedRing

A closed ring is a ring that has the same start and end point. This is a requirement for a valid polygon (technically, for a valid LinearRing). This correction is used to ensure that the polygon is valid.

The reason this operates on the polygon level is that several packages are loose about whether they return LinearRings (which is correct) or LineStrings (which is incorrect) for the contents of a polygon. Therefore, we decompose manually to ensure correctness.

Example

Many polygon providers do not close their polygons, which makes them invalid according to the specification. Quite a few geometry algorithms assume that polygons are closed, and leaving them open can lead to incorrect results!

For example, the following polygon is not valid:

julia
import GeoInterface as GI
 polygon = GI.Polygon([[(0, 0), (1, 0), (1, 1), (0, 1)]])
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Int64, Int64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Int64, Int64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Int64, Int64}}, Nothing, Nothing}([(0, 0), (1, 0), (1, 1), (0, 1)], nothing, nothing)], nothing, nothing)

even though it will look correct when visualized, and indeed appears correct.

julia
import GeometryOps as GO
 GO.fix(polygon, corrections = [GO.ClosedRing()])
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 1.0), (0.0, 0.0)], nothing, nothing)], nothing, nothing)
`,12)),i("p",null,[s[4]||(s[4]=t("You can see that the last point of the ring here is equal to the first point. For a polygon with ")),i("mjx-container",p,[(e(),a("svg",k,s[0]||(s[0]=[i("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[i("g",{"data-mml-node":"math"},[i("g",{"data-mml-node":"mi"},[i("path",{"data-c":"1D45B",d:"M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z",style:{"stroke-width":"3"}})])])],-1)]))),s[1]||(s[1]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mi",null,"n")])],-1))]),s[5]||(s[5]=t(" sides, there should be ")),i("mjx-container",r,[(e(),a("svg",o,s[2]||(s[2]=[n('',1)]))),s[3]||(s[3]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mi",null,"n"),i("mo",null,"+"),i("mn",null,"1")])],-1))]),s[6]||(s[6]=t(" vertices."))]),s[8]||(s[8]=n(`

Implementation

julia
"""
     ClosedRing() <: GeometryCorrection
diff --git a/dev/assets/source_transformations_correction_geometry_correction.md.BXPDjswt.js b/dev/assets/source_transformations_correction_geometry_correction.md.DE69CO9L.js
similarity index 99%
rename from dev/assets/source_transformations_correction_geometry_correction.md.BXPDjswt.js
rename to dev/assets/source_transformations_correction_geometry_correction.md.DE69CO9L.js
index ade47ac62..09f7779bb 100644
--- a/dev/assets/source_transformations_correction_geometry_correction.md.BXPDjswt.js
+++ b/dev/assets/source_transformations_correction_geometry_correction.md.DE69CO9L.js
@@ -1,4 +1,4 @@
-import{_ as r,c as o,a5 as e,j as i,a as t,G as n,B as l,o as p}from"./chunks/framework.O43fB7X6.js";const G=JSON.parse('{"title":"Geometry Corrections","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/geometry_correction.md","filePath":"source/transformations/correction/geometry_correction.md","lastUpdated":null}'),h={name:"source/transformations/correction/geometry_correction.md"},c={class:"jldocstring custom-block",open:""},k={class:"jldocstring custom-block",open:""},d={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""};function m(E,s,u,F,C,b){const a=l("Badge");return p(),o("div",null,[s[15]||(s[15]=e('

Geometry Corrections

julia
export fix

This file simply defines the GeometryCorrection abstract type, and the interface that any GeometryCorrection must implement.

A geometry correction is a transformation that is applied to a geometry to correct it in some way.

For example, a ClosedRing correction might be applied to a Polygon to ensure that its exterior ring is closed.

Interface

All GeometryCorrections are callable structs which, when called, apply the correction to the given geometry, and return either a copy or the original geometry (if nothing needed to be corrected).

See below for the full interface specification.

',8)),i("details",c,[i("summary",null,[s[0]||(s[0]=i("a",{id:"GeometryOps.GeometryCorrection-source-transformations-correction-geometry_correction",href:"#GeometryOps.GeometryCorrection-source-transformations-correction-geometry_correction"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryCorrection")],-1)),s[1]||(s[1]=t()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[2]||(s[2]=e('
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source

julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source

',10))]),s[16]||(s[16]=e(`

Any geometry correction must implement the interface as given above.

julia
"""
+import{_ as r,c as o,a5 as e,j as i,a as t,G as n,B as l,o as p}from"./chunks/framework.B_n_RGhH.js";const G=JSON.parse('{"title":"Geometry Corrections","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/geometry_correction.md","filePath":"source/transformations/correction/geometry_correction.md","lastUpdated":null}'),h={name:"source/transformations/correction/geometry_correction.md"},c={class:"jldocstring custom-block",open:""},k={class:"jldocstring custom-block",open:""},d={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""};function m(E,s,u,F,C,b){const a=l("Badge");return p(),o("div",null,[s[15]||(s[15]=e('

Geometry Corrections

julia
export fix

This file simply defines the GeometryCorrection abstract type, and the interface that any GeometryCorrection must implement.

A geometry correction is a transformation that is applied to a geometry to correct it in some way.

For example, a ClosedRing correction might be applied to a Polygon to ensure that its exterior ring is closed.

Interface

All GeometryCorrections are callable structs which, when called, apply the correction to the given geometry, and return either a copy or the original geometry (if nothing needed to be corrected).

See below for the full interface specification.

',8)),i("details",c,[i("summary",null,[s[0]||(s[0]=i("a",{id:"GeometryOps.GeometryCorrection-source-transformations-correction-geometry_correction",href:"#GeometryOps.GeometryCorrection-source-transformations-correction-geometry_correction"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryCorrection")],-1)),s[1]||(s[1]=t()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[2]||(s[2]=e('
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source

julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source

',10))]),s[16]||(s[16]=e(`

Any geometry correction must implement the interface as given above.

julia
"""
     abstract type GeometryCorrection
 
 This abstract type represents a geometry correction.
diff --git a/dev/assets/source_transformations_correction_geometry_correction.md.BXPDjswt.lean.js b/dev/assets/source_transformations_correction_geometry_correction.md.DE69CO9L.lean.js
similarity index 99%
rename from dev/assets/source_transformations_correction_geometry_correction.md.BXPDjswt.lean.js
rename to dev/assets/source_transformations_correction_geometry_correction.md.DE69CO9L.lean.js
index ade47ac62..09f7779bb 100644
--- a/dev/assets/source_transformations_correction_geometry_correction.md.BXPDjswt.lean.js
+++ b/dev/assets/source_transformations_correction_geometry_correction.md.DE69CO9L.lean.js
@@ -1,4 +1,4 @@
-import{_ as r,c as o,a5 as e,j as i,a as t,G as n,B as l,o as p}from"./chunks/framework.O43fB7X6.js";const G=JSON.parse('{"title":"Geometry Corrections","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/geometry_correction.md","filePath":"source/transformations/correction/geometry_correction.md","lastUpdated":null}'),h={name:"source/transformations/correction/geometry_correction.md"},c={class:"jldocstring custom-block",open:""},k={class:"jldocstring custom-block",open:""},d={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""};function m(E,s,u,F,C,b){const a=l("Badge");return p(),o("div",null,[s[15]||(s[15]=e('

Geometry Corrections

julia
export fix

This file simply defines the GeometryCorrection abstract type, and the interface that any GeometryCorrection must implement.

A geometry correction is a transformation that is applied to a geometry to correct it in some way.

For example, a ClosedRing correction might be applied to a Polygon to ensure that its exterior ring is closed.

Interface

All GeometryCorrections are callable structs which, when called, apply the correction to the given geometry, and return either a copy or the original geometry (if nothing needed to be corrected).

See below for the full interface specification.

',8)),i("details",c,[i("summary",null,[s[0]||(s[0]=i("a",{id:"GeometryOps.GeometryCorrection-source-transformations-correction-geometry_correction",href:"#GeometryOps.GeometryCorrection-source-transformations-correction-geometry_correction"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryCorrection")],-1)),s[1]||(s[1]=t()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[2]||(s[2]=e('
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source

julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source

',10))]),s[16]||(s[16]=e(`

Any geometry correction must implement the interface as given above.

julia
"""
+import{_ as r,c as o,a5 as e,j as i,a as t,G as n,B as l,o as p}from"./chunks/framework.B_n_RGhH.js";const G=JSON.parse('{"title":"Geometry Corrections","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/geometry_correction.md","filePath":"source/transformations/correction/geometry_correction.md","lastUpdated":null}'),h={name:"source/transformations/correction/geometry_correction.md"},c={class:"jldocstring custom-block",open:""},k={class:"jldocstring custom-block",open:""},d={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""};function m(E,s,u,F,C,b){const a=l("Badge");return p(),o("div",null,[s[15]||(s[15]=e('

Geometry Corrections

julia
export fix

This file simply defines the GeometryCorrection abstract type, and the interface that any GeometryCorrection must implement.

A geometry correction is a transformation that is applied to a geometry to correct it in some way.

For example, a ClosedRing correction might be applied to a Polygon to ensure that its exterior ring is closed.

Interface

All GeometryCorrections are callable structs which, when called, apply the correction to the given geometry, and return either a copy or the original geometry (if nothing needed to be corrected).

See below for the full interface specification.

',8)),i("details",c,[i("summary",null,[s[0]||(s[0]=i("a",{id:"GeometryOps.GeometryCorrection-source-transformations-correction-geometry_correction",href:"#GeometryOps.GeometryCorrection-source-transformations-correction-geometry_correction"},[i("span",{class:"jlbinding"},"GeometryOps.GeometryCorrection")],-1)),s[1]||(s[1]=t()),n(a,{type:"info",class:"jlObjectType jlType",text:"Type"})]),s[2]||(s[2]=e('
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source

julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source

',10))]),s[16]||(s[16]=e(`

Any geometry correction must implement the interface as given above.

julia
"""
     abstract type GeometryCorrection
 
 This abstract type represents a geometry correction.
diff --git a/dev/assets/source_transformations_correction_intersecting_polygons.md.CQInphCg.js b/dev/assets/source_transformations_correction_intersecting_polygons.md.CFkNbc53.js
similarity index 99%
rename from dev/assets/source_transformations_correction_intersecting_polygons.md.CQInphCg.js
rename to dev/assets/source_transformations_correction_intersecting_polygons.md.CFkNbc53.js
index f426b99a3..e13ddaa54 100644
--- a/dev/assets/source_transformations_correction_intersecting_polygons.md.CQInphCg.js
+++ b/dev/assets/source_transformations_correction_intersecting_polygons.md.CFkNbc53.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const E=JSON.parse('{"title":"Intersecting Polygons","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/intersecting_polygons.md","filePath":"source/transformations/correction/intersecting_polygons.md","lastUpdated":null}'),t={name:"source/transformations/correction/intersecting_polygons.md"};function h(p,s,e,k,r,g){return l(),a("div",null,s[0]||(s[0]=[n(`

Intersecting Polygons

julia
export UnionIntersectingPolygons

If the sub-polygons of a multipolygon are intersecting, this makes them invalid according to specification. Each sub-polygon of a multipolygon being disjoint (other than by a single point) is a requirement for a valid multipolygon. However, different libraries may achieve this in different ways.

For example, taking the union of all sub-polygons of a multipolygon will create a new multipolygon where each sub-polygon is disjoint. This can be done with the UnionIntersectingPolygons correction.

The reason this operates on a multipolygon level is that it is easy for users to mistakenly create multipolygon's that overlap, which can then be detrimental to polygon clipping performance and even create wrong answers.

Example

Multipolygon providers may not check that the polygons making up their multipolygons do not intersect, which makes them invalid according to the specification.

For example, the following multipolygon is not valid:

julia
import GeoInterface as GI
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const E=JSON.parse('{"title":"Intersecting Polygons","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/intersecting_polygons.md","filePath":"source/transformations/correction/intersecting_polygons.md","lastUpdated":null}'),t={name:"source/transformations/correction/intersecting_polygons.md"};function h(p,s,e,k,r,g){return l(),a("div",null,s[0]||(s[0]=[n(`

Intersecting Polygons

julia
export UnionIntersectingPolygons

If the sub-polygons of a multipolygon are intersecting, this makes them invalid according to specification. Each sub-polygon of a multipolygon being disjoint (other than by a single point) is a requirement for a valid multipolygon. However, different libraries may achieve this in different ways.

For example, taking the union of all sub-polygons of a multipolygon will create a new multipolygon where each sub-polygon is disjoint. This can be done with the UnionIntersectingPolygons correction.

The reason this operates on a multipolygon level is that it is easy for users to mistakenly create multipolygon's that overlap, which can then be detrimental to polygon clipping performance and even create wrong answers.

Example

Multipolygon providers may not check that the polygons making up their multipolygons do not intersect, which makes them invalid according to the specification.

For example, the following multipolygon is not valid:

julia
import GeoInterface as GI
 polygon = GI.Polygon([[(0.0, 0.0), (3.0, 0.0), (3.0, 3.0), (0.0, 3.0), (0.0, 0.0)]])
 multipolygon = GI.MultiPolygon([polygon, polygon])
GeoInterface.Wrappers.MultiPolygon{false, false, Vector{GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}[GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(0.0, 0.0), (3.0, 0.0), (3.0, 3.0), (0.0, 3.0), (0.0, 0.0)], nothing, nothing)], nothing, nothing), GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(0.0, 0.0), (3.0, 0.0), (3.0, 3.0), (0.0, 3.0), (0.0, 0.0)], nothing, nothing)], nothing, nothing)], nothing, nothing)

given that the two sub-polygons are the exact same shape.

julia
import GeometryOps as GO
 GO.fix(multipolygon, corrections = [GO.UnionIntersectingPolygons()])
GeoInterface.Wrappers.MultiPolygon{false, false, Vector{GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}[GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(0.0, 0.0), (3.0, 0.0), (3.0, 3.0), (0.0, 3.0), (0.0, 0.0)], nothing, nothing)], nothing, nothing)], nothing, nothing)

You can see that the the multipolygon now only contains one sub-polygon, rather than the two identical ones provided.

Implementation

julia
"""
diff --git a/dev/assets/source_transformations_correction_intersecting_polygons.md.CQInphCg.lean.js b/dev/assets/source_transformations_correction_intersecting_polygons.md.CFkNbc53.lean.js
similarity index 99%
rename from dev/assets/source_transformations_correction_intersecting_polygons.md.CQInphCg.lean.js
rename to dev/assets/source_transformations_correction_intersecting_polygons.md.CFkNbc53.lean.js
index f426b99a3..e13ddaa54 100644
--- a/dev/assets/source_transformations_correction_intersecting_polygons.md.CQInphCg.lean.js
+++ b/dev/assets/source_transformations_correction_intersecting_polygons.md.CFkNbc53.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.O43fB7X6.js";const E=JSON.parse('{"title":"Intersecting Polygons","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/intersecting_polygons.md","filePath":"source/transformations/correction/intersecting_polygons.md","lastUpdated":null}'),t={name:"source/transformations/correction/intersecting_polygons.md"};function h(p,s,e,k,r,g){return l(),a("div",null,s[0]||(s[0]=[n(`

Intersecting Polygons

julia
export UnionIntersectingPolygons

If the sub-polygons of a multipolygon are intersecting, this makes them invalid according to specification. Each sub-polygon of a multipolygon being disjoint (other than by a single point) is a requirement for a valid multipolygon. However, different libraries may achieve this in different ways.

For example, taking the union of all sub-polygons of a multipolygon will create a new multipolygon where each sub-polygon is disjoint. This can be done with the UnionIntersectingPolygons correction.

The reason this operates on a multipolygon level is that it is easy for users to mistakenly create multipolygon's that overlap, which can then be detrimental to polygon clipping performance and even create wrong answers.

Example

Multipolygon providers may not check that the polygons making up their multipolygons do not intersect, which makes them invalid according to the specification.

For example, the following multipolygon is not valid:

julia
import GeoInterface as GI
+import{_ as i,c as a,a5 as n,o as l}from"./chunks/framework.B_n_RGhH.js";const E=JSON.parse('{"title":"Intersecting Polygons","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/intersecting_polygons.md","filePath":"source/transformations/correction/intersecting_polygons.md","lastUpdated":null}'),t={name:"source/transformations/correction/intersecting_polygons.md"};function h(p,s,e,k,r,g){return l(),a("div",null,s[0]||(s[0]=[n(`

Intersecting Polygons

julia
export UnionIntersectingPolygons

If the sub-polygons of a multipolygon are intersecting, this makes them invalid according to specification. Each sub-polygon of a multipolygon being disjoint (other than by a single point) is a requirement for a valid multipolygon. However, different libraries may achieve this in different ways.

For example, taking the union of all sub-polygons of a multipolygon will create a new multipolygon where each sub-polygon is disjoint. This can be done with the UnionIntersectingPolygons correction.

The reason this operates on a multipolygon level is that it is easy for users to mistakenly create multipolygon's that overlap, which can then be detrimental to polygon clipping performance and even create wrong answers.

Example

Multipolygon providers may not check that the polygons making up their multipolygons do not intersect, which makes them invalid according to the specification.

For example, the following multipolygon is not valid:

julia
import GeoInterface as GI
 polygon = GI.Polygon([[(0.0, 0.0), (3.0, 0.0), (3.0, 3.0), (0.0, 3.0), (0.0, 0.0)]])
 multipolygon = GI.MultiPolygon([polygon, polygon])
GeoInterface.Wrappers.MultiPolygon{false, false, Vector{GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}[GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(0.0, 0.0), (3.0, 0.0), (3.0, 3.0), (0.0, 3.0), (0.0, 0.0)], nothing, nothing)], nothing, nothing), GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(0.0, 0.0), (3.0, 0.0), (3.0, 3.0), (0.0, 3.0), (0.0, 0.0)], nothing, nothing)], nothing, nothing)], nothing, nothing)

given that the two sub-polygons are the exact same shape.

julia
import GeometryOps as GO
 GO.fix(multipolygon, corrections = [GO.UnionIntersectingPolygons()])
GeoInterface.Wrappers.MultiPolygon{false, false, Vector{GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}[GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(0.0, 0.0), (3.0, 0.0), (3.0, 3.0), (0.0, 3.0), (0.0, 0.0)], nothing, nothing)], nothing, nothing)], nothing, nothing)

You can see that the the multipolygon now only contains one sub-polygon, rather than the two identical ones provided.

Implementation

julia
"""
diff --git a/dev/assets/source_transformations_extent.md.DR8xvbQc.js b/dev/assets/source_transformations_extent.md.ThGs0SdP.js
similarity index 95%
rename from dev/assets/source_transformations_extent.md.DR8xvbQc.js
rename to dev/assets/source_transformations_extent.md.ThGs0SdP.js
index 3d247d93a..aecfeb391 100644
--- a/dev/assets/source_transformations_extent.md.DR8xvbQc.js
+++ b/dev/assets/source_transformations_extent.md.ThGs0SdP.js
@@ -1,4 +1,4 @@
-import{_ as e,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const k=JSON.parse('{"title":"Extent embedding","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/extent.md","filePath":"source/transformations/extent.md","lastUpdated":null}'),i={name:"source/transformations/extent.md"};function l(p,s,r,h,d,o){return t(),a("div",null,s[0]||(s[0]=[n(`

Extent embedding

julia
"""
+import{_ as e,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const k=JSON.parse('{"title":"Extent embedding","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/extent.md","filePath":"source/transformations/extent.md","lastUpdated":null}'),i={name:"source/transformations/extent.md"};function l(p,s,r,h,d,o){return t(),a("div",null,s[0]||(s[0]=[n(`

Extent embedding

julia
"""
     embed_extent(obj)
 
 Recursively wrap the object with a GeoInterface.jl geometry,
diff --git a/dev/assets/source_transformations_extent.md.DR8xvbQc.lean.js b/dev/assets/source_transformations_extent.md.ThGs0SdP.lean.js
similarity index 95%
rename from dev/assets/source_transformations_extent.md.DR8xvbQc.lean.js
rename to dev/assets/source_transformations_extent.md.ThGs0SdP.lean.js
index 3d247d93a..aecfeb391 100644
--- a/dev/assets/source_transformations_extent.md.DR8xvbQc.lean.js
+++ b/dev/assets/source_transformations_extent.md.ThGs0SdP.lean.js
@@ -1,4 +1,4 @@
-import{_ as e,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const k=JSON.parse('{"title":"Extent embedding","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/extent.md","filePath":"source/transformations/extent.md","lastUpdated":null}'),i={name:"source/transformations/extent.md"};function l(p,s,r,h,d,o){return t(),a("div",null,s[0]||(s[0]=[n(`

Extent embedding

julia
"""
+import{_ as e,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const k=JSON.parse('{"title":"Extent embedding","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/extent.md","filePath":"source/transformations/extent.md","lastUpdated":null}'),i={name:"source/transformations/extent.md"};function l(p,s,r,h,d,o){return t(),a("div",null,s[0]||(s[0]=[n(`

Extent embedding

julia
"""
     embed_extent(obj)
 
 Recursively wrap the object with a GeoInterface.jl geometry,
diff --git a/dev/assets/source_transformations_flip.md.CwXJrYBS.js b/dev/assets/source_transformations_flip.md.C7zLbbf9.js
similarity index 97%
rename from dev/assets/source_transformations_flip.md.CwXJrYBS.js
rename to dev/assets/source_transformations_flip.md.C7zLbbf9.js
index 3e6e6aa26..01dc4b532 100644
--- a/dev/assets/source_transformations_flip.md.CwXJrYBS.js
+++ b/dev/assets/source_transformations_flip.md.C7zLbbf9.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as p}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Coordinate flipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/flip.md","filePath":"source/transformations/flip.md","lastUpdated":null}'),t={name:"source/transformations/flip.md"};function l(h,s,e,k,r,d){return p(),a("div",null,s[0]||(s[0]=[n(`

Coordinate flipping

This is a simple example of how to use the apply functionality in a function, by flipping the x and y coordinates of a geometry.

julia
"""
+import{_ as i,c as a,a5 as n,o as p}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Coordinate flipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/flip.md","filePath":"source/transformations/flip.md","lastUpdated":null}'),t={name:"source/transformations/flip.md"};function l(h,s,e,k,r,d){return p(),a("div",null,s[0]||(s[0]=[n(`

Coordinate flipping

This is a simple example of how to use the apply functionality in a function, by flipping the x and y coordinates of a geometry.

julia
"""
     flip(obj)
 
 Swap all of the x and y coordinates in obj, otherwise
diff --git a/dev/assets/source_transformations_flip.md.CwXJrYBS.lean.js b/dev/assets/source_transformations_flip.md.C7zLbbf9.lean.js
similarity index 97%
rename from dev/assets/source_transformations_flip.md.CwXJrYBS.lean.js
rename to dev/assets/source_transformations_flip.md.C7zLbbf9.lean.js
index 3e6e6aa26..01dc4b532 100644
--- a/dev/assets/source_transformations_flip.md.CwXJrYBS.lean.js
+++ b/dev/assets/source_transformations_flip.md.C7zLbbf9.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as p}from"./chunks/framework.O43fB7X6.js";const g=JSON.parse('{"title":"Coordinate flipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/flip.md","filePath":"source/transformations/flip.md","lastUpdated":null}'),t={name:"source/transformations/flip.md"};function l(h,s,e,k,r,d){return p(),a("div",null,s[0]||(s[0]=[n(`

Coordinate flipping

This is a simple example of how to use the apply functionality in a function, by flipping the x and y coordinates of a geometry.

julia
"""
+import{_ as i,c as a,a5 as n,o as p}from"./chunks/framework.B_n_RGhH.js";const g=JSON.parse('{"title":"Coordinate flipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/flip.md","filePath":"source/transformations/flip.md","lastUpdated":null}'),t={name:"source/transformations/flip.md"};function l(h,s,e,k,r,d){return p(),a("div",null,s[0]||(s[0]=[n(`

Coordinate flipping

This is a simple example of how to use the apply functionality in a function, by flipping the x and y coordinates of a geometry.

julia
"""
     flip(obj)
 
 Swap all of the x and y coordinates in obj, otherwise
diff --git a/dev/assets/source_transformations_reproject.md.DDeoCapS.js b/dev/assets/source_transformations_reproject.md.BkVaiWF-.js
similarity index 98%
rename from dev/assets/source_transformations_reproject.md.DDeoCapS.js
rename to dev/assets/source_transformations_reproject.md.BkVaiWF-.js
index 2128f61bb..7b775a4af 100644
--- a/dev/assets/source_transformations_reproject.md.DDeoCapS.js
+++ b/dev/assets/source_transformations_reproject.md.BkVaiWF-.js
@@ -1 +1 @@
-import{_ as i,c as a,a5 as e,o as n}from"./chunks/framework.O43fB7X6.js";const c=JSON.parse('{"title":"Geometry reprojection","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/reproject.md","filePath":"source/transformations/reproject.md","lastUpdated":null}'),t={name:"source/transformations/reproject.md"};function p(l,s,r,h,k,o){return n(),a("div",null,s[0]||(s[0]=[e('

Geometry reprojection

julia
export reproject

This file is pretty simple - it simply reprojects a geometry pointwise from one CRS to another. It uses the Proj package for the transformation, but this could be moved to an extension if needed.

Note that the actual implementation is in the GeometryOpsProjExt extension module.

This works using the apply functionality.

julia
"""\n    reproject(geometry; source_crs, target_crs, transform, always_xy, time)\n    reproject(geometry, source_crs, target_crs; always_xy, time)\n    reproject(geometry, transform; always_xy, time)\n\nReproject any GeoInterface.jl compatible `geometry` from `source_crs` to `target_crs`.\n\nThe returned object will be constructed from `GeoInterface.WrapperGeometry`\ngeometries, wrapping views of a `Vector{Proj.Point{D}}`, where `D` is the dimension.\n\n!!! tip\n    The `Proj.jl` package must be loaded for this method to work,\n    since it is implemented in a package extension.\n\n# Arguments\n\n- `geometry`: Any GeoInterface.jl compatible geometries.\n- `source_crs`: the source coordinate reference system, as a GeoFormatTypes.jl object or a string.\n- `target_crs`: the target coordinate reference system, as a GeoFormatTypes.jl object or a string.\n\nIf these a passed as keywords, `transform` will take priority.\nWithout it `target_crs` is always needed, and `source_crs` is\nneeded if it is not retrievable from the geometry with `GeoInterface.crs(geometry)`.\n\n# Keywords\n\n- `always_xy`: force x, y coordinate order, `true` by default.\n    `false` will expect and return points in the crs coordinate order.\n- `time`: the time for the coordinates. `Inf` by default.\n$APPLY_KEYWORDS\n"""\nfunction reproject end

Method error handling

We also inject a method error handler, which prints a suggestion if the Proj extension is not loaded.

julia
function _reproject_error_hinter(io, exc, argtypes, kwargs)\n    if isnothing(Base.get_extension(GeometryOps, :GeometryOpsProjExt)) && exc.f == reproject\n        print(io, "\\n\\nThe `reproject` method requires the Proj.jl package to be explicitly loaded.\\n")\n        print(io, "You can do this by simply typing ")\n        printstyled(io, "using Proj"; color = :cyan, bold = true)\n        println(io, " in your REPL, \\nor otherwise loading Proj.jl via using or import.")\n    else # this is a more general error\n        nothing\n    end\nend

This page was generated using Literate.jl.

',11)]))}const g=i(t,[["render",p]]);export{c as __pageData,g as default}; +import{_ as i,c as a,a5 as e,o as n}from"./chunks/framework.B_n_RGhH.js";const c=JSON.parse('{"title":"Geometry reprojection","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/reproject.md","filePath":"source/transformations/reproject.md","lastUpdated":null}'),t={name:"source/transformations/reproject.md"};function p(l,s,r,h,k,o){return n(),a("div",null,s[0]||(s[0]=[e('

Geometry reprojection

julia
export reproject

This file is pretty simple - it simply reprojects a geometry pointwise from one CRS to another. It uses the Proj package for the transformation, but this could be moved to an extension if needed.

Note that the actual implementation is in the GeometryOpsProjExt extension module.

This works using the apply functionality.

julia
"""\n    reproject(geometry; source_crs, target_crs, transform, always_xy, time)\n    reproject(geometry, source_crs, target_crs; always_xy, time)\n    reproject(geometry, transform; always_xy, time)\n\nReproject any GeoInterface.jl compatible `geometry` from `source_crs` to `target_crs`.\n\nThe returned object will be constructed from `GeoInterface.WrapperGeometry`\ngeometries, wrapping views of a `Vector{Proj.Point{D}}`, where `D` is the dimension.\n\n!!! tip\n    The `Proj.jl` package must be loaded for this method to work,\n    since it is implemented in a package extension.\n\n# Arguments\n\n- `geometry`: Any GeoInterface.jl compatible geometries.\n- `source_crs`: the source coordinate reference system, as a GeoFormatTypes.jl object or a string.\n- `target_crs`: the target coordinate reference system, as a GeoFormatTypes.jl object or a string.\n\nIf these a passed as keywords, `transform` will take priority.\nWithout it `target_crs` is always needed, and `source_crs` is\nneeded if it is not retrievable from the geometry with `GeoInterface.crs(geometry)`.\n\n# Keywords\n\n- `always_xy`: force x, y coordinate order, `true` by default.\n    `false` will expect and return points in the crs coordinate order.\n- `time`: the time for the coordinates. `Inf` by default.\n$APPLY_KEYWORDS\n"""\nfunction reproject end

Method error handling

We also inject a method error handler, which prints a suggestion if the Proj extension is not loaded.

julia
function _reproject_error_hinter(io, exc, argtypes, kwargs)\n    if isnothing(Base.get_extension(GeometryOps, :GeometryOpsProjExt)) && exc.f == reproject\n        print(io, "\\n\\nThe `reproject` method requires the Proj.jl package to be explicitly loaded.\\n")\n        print(io, "You can do this by simply typing ")\n        printstyled(io, "using Proj"; color = :cyan, bold = true)\n        println(io, " in your REPL, \\nor otherwise loading Proj.jl via using or import.")\n    else # this is a more general error\n        nothing\n    end\nend

This page was generated using Literate.jl.

',11)]))}const g=i(t,[["render",p]]);export{c as __pageData,g as default}; diff --git a/dev/assets/source_transformations_reproject.md.DDeoCapS.lean.js b/dev/assets/source_transformations_reproject.md.BkVaiWF-.lean.js similarity index 98% rename from dev/assets/source_transformations_reproject.md.DDeoCapS.lean.js rename to dev/assets/source_transformations_reproject.md.BkVaiWF-.lean.js index 2128f61bb..7b775a4af 100644 --- a/dev/assets/source_transformations_reproject.md.DDeoCapS.lean.js +++ b/dev/assets/source_transformations_reproject.md.BkVaiWF-.lean.js @@ -1 +1 @@ -import{_ as i,c as a,a5 as e,o as n}from"./chunks/framework.O43fB7X6.js";const c=JSON.parse('{"title":"Geometry reprojection","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/reproject.md","filePath":"source/transformations/reproject.md","lastUpdated":null}'),t={name:"source/transformations/reproject.md"};function p(l,s,r,h,k,o){return n(),a("div",null,s[0]||(s[0]=[e('

Geometry reprojection

julia
export reproject

This file is pretty simple - it simply reprojects a geometry pointwise from one CRS to another. It uses the Proj package for the transformation, but this could be moved to an extension if needed.

Note that the actual implementation is in the GeometryOpsProjExt extension module.

This works using the apply functionality.

julia
"""\n    reproject(geometry; source_crs, target_crs, transform, always_xy, time)\n    reproject(geometry, source_crs, target_crs; always_xy, time)\n    reproject(geometry, transform; always_xy, time)\n\nReproject any GeoInterface.jl compatible `geometry` from `source_crs` to `target_crs`.\n\nThe returned object will be constructed from `GeoInterface.WrapperGeometry`\ngeometries, wrapping views of a `Vector{Proj.Point{D}}`, where `D` is the dimension.\n\n!!! tip\n    The `Proj.jl` package must be loaded for this method to work,\n    since it is implemented in a package extension.\n\n# Arguments\n\n- `geometry`: Any GeoInterface.jl compatible geometries.\n- `source_crs`: the source coordinate reference system, as a GeoFormatTypes.jl object or a string.\n- `target_crs`: the target coordinate reference system, as a GeoFormatTypes.jl object or a string.\n\nIf these a passed as keywords, `transform` will take priority.\nWithout it `target_crs` is always needed, and `source_crs` is\nneeded if it is not retrievable from the geometry with `GeoInterface.crs(geometry)`.\n\n# Keywords\n\n- `always_xy`: force x, y coordinate order, `true` by default.\n    `false` will expect and return points in the crs coordinate order.\n- `time`: the time for the coordinates. `Inf` by default.\n$APPLY_KEYWORDS\n"""\nfunction reproject end

Method error handling

We also inject a method error handler, which prints a suggestion if the Proj extension is not loaded.

julia
function _reproject_error_hinter(io, exc, argtypes, kwargs)\n    if isnothing(Base.get_extension(GeometryOps, :GeometryOpsProjExt)) && exc.f == reproject\n        print(io, "\\n\\nThe `reproject` method requires the Proj.jl package to be explicitly loaded.\\n")\n        print(io, "You can do this by simply typing ")\n        printstyled(io, "using Proj"; color = :cyan, bold = true)\n        println(io, " in your REPL, \\nor otherwise loading Proj.jl via using or import.")\n    else # this is a more general error\n        nothing\n    end\nend

This page was generated using Literate.jl.

',11)]))}const g=i(t,[["render",p]]);export{c as __pageData,g as default}; +import{_ as i,c as a,a5 as e,o as n}from"./chunks/framework.B_n_RGhH.js";const c=JSON.parse('{"title":"Geometry reprojection","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/reproject.md","filePath":"source/transformations/reproject.md","lastUpdated":null}'),t={name:"source/transformations/reproject.md"};function p(l,s,r,h,k,o){return n(),a("div",null,s[0]||(s[0]=[e('

Geometry reprojection

julia
export reproject

This file is pretty simple - it simply reprojects a geometry pointwise from one CRS to another. It uses the Proj package for the transformation, but this could be moved to an extension if needed.

Note that the actual implementation is in the GeometryOpsProjExt extension module.

This works using the apply functionality.

julia
"""\n    reproject(geometry; source_crs, target_crs, transform, always_xy, time)\n    reproject(geometry, source_crs, target_crs; always_xy, time)\n    reproject(geometry, transform; always_xy, time)\n\nReproject any GeoInterface.jl compatible `geometry` from `source_crs` to `target_crs`.\n\nThe returned object will be constructed from `GeoInterface.WrapperGeometry`\ngeometries, wrapping views of a `Vector{Proj.Point{D}}`, where `D` is the dimension.\n\n!!! tip\n    The `Proj.jl` package must be loaded for this method to work,\n    since it is implemented in a package extension.\n\n# Arguments\n\n- `geometry`: Any GeoInterface.jl compatible geometries.\n- `source_crs`: the source coordinate reference system, as a GeoFormatTypes.jl object or a string.\n- `target_crs`: the target coordinate reference system, as a GeoFormatTypes.jl object or a string.\n\nIf these a passed as keywords, `transform` will take priority.\nWithout it `target_crs` is always needed, and `source_crs` is\nneeded if it is not retrievable from the geometry with `GeoInterface.crs(geometry)`.\n\n# Keywords\n\n- `always_xy`: force x, y coordinate order, `true` by default.\n    `false` will expect and return points in the crs coordinate order.\n- `time`: the time for the coordinates. `Inf` by default.\n$APPLY_KEYWORDS\n"""\nfunction reproject end

Method error handling

We also inject a method error handler, which prints a suggestion if the Proj extension is not loaded.

julia
function _reproject_error_hinter(io, exc, argtypes, kwargs)\n    if isnothing(Base.get_extension(GeometryOps, :GeometryOpsProjExt)) && exc.f == reproject\n        print(io, "\\n\\nThe `reproject` method requires the Proj.jl package to be explicitly loaded.\\n")\n        print(io, "You can do this by simply typing ")\n        printstyled(io, "using Proj"; color = :cyan, bold = true)\n        println(io, " in your REPL, \\nor otherwise loading Proj.jl via using or import.")\n    else # this is a more general error\n        nothing\n    end\nend

This page was generated using Literate.jl.

',11)]))}const g=i(t,[["render",p]]);export{c as __pageData,g as default}; diff --git a/dev/assets/source_transformations_segmentize.md.CxlHC2Gx.js b/dev/assets/source_transformations_segmentize.md.wXWOTiiN.js similarity index 99% rename from dev/assets/source_transformations_segmentize.md.CxlHC2Gx.js rename to dev/assets/source_transformations_segmentize.md.wXWOTiiN.js index ccddd69b8..366dd63e8 100644 --- a/dev/assets/source_transformations_segmentize.md.CxlHC2Gx.js +++ b/dev/assets/source_transformations_segmentize.md.wXWOTiiN.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/qhvcraa.D5-bot8v.png",l="/GeometryOps.jl/dev/assets/qvxoffb.B4GCyiuv.png",o=JSON.parse('{"title":"Segmentize","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/segmentize.md","filePath":"source/transformations/segmentize.md","lastUpdated":null}'),e={name:"source/transformations/segmentize.md"};function k(p,s,r,E,d,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Segmentize

julia
export segmentize
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/peiypkn.D5-bot8v.png",l="/GeometryOps.jl/dev/assets/drwzysr.DHnfiHhT.png",o=JSON.parse('{"title":"Segmentize","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/segmentize.md","filePath":"source/transformations/segmentize.md","lastUpdated":null}'),e={name:"source/transformations/segmentize.md"};function k(p,s,r,E,d,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Segmentize

julia
export segmentize
 export LinearSegments, GeodesicSegments

This function "segmentizes" or "densifies" a geometry by adding extra vertices to the geometry so that no segment is longer than a given distance. This is useful for plotting geometries with a limited number of vertices, or for ensuring that a geometry is not too "coarse" for a given application.

Info

We plan to add interpolated segmentization from DataInterpolations.jl in the future, which will be available to any vector of point-like objects.

For now, this function only works on 2D geometries. We will also support 3D geometries, as well as measure interpolation, in the future.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 rectangle = GI.Wrappers.Polygon([[(0.0, 50.0), (7.071, 57.07), (0, 64.14), (-7.07, 57.07), (0.0, 50.0)]])
 linear = GO.segmentize(rectangle; max_distance = 5)
diff --git a/dev/assets/source_transformations_segmentize.md.CxlHC2Gx.lean.js b/dev/assets/source_transformations_segmentize.md.wXWOTiiN.lean.js
similarity index 99%
rename from dev/assets/source_transformations_segmentize.md.CxlHC2Gx.lean.js
rename to dev/assets/source_transformations_segmentize.md.wXWOTiiN.lean.js
index ccddd69b8..366dd63e8 100644
--- a/dev/assets/source_transformations_segmentize.md.CxlHC2Gx.lean.js
+++ b/dev/assets/source_transformations_segmentize.md.wXWOTiiN.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/qhvcraa.D5-bot8v.png",l="/GeometryOps.jl/dev/assets/qvxoffb.B4GCyiuv.png",o=JSON.parse('{"title":"Segmentize","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/segmentize.md","filePath":"source/transformations/segmentize.md","lastUpdated":null}'),e={name:"source/transformations/segmentize.md"};function k(p,s,r,E,d,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Segmentize

julia
export segmentize
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/peiypkn.D5-bot8v.png",l="/GeometryOps.jl/dev/assets/drwzysr.DHnfiHhT.png",o=JSON.parse('{"title":"Segmentize","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/segmentize.md","filePath":"source/transformations/segmentize.md","lastUpdated":null}'),e={name:"source/transformations/segmentize.md"};function k(p,s,r,E,d,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Segmentize

julia
export segmentize
 export LinearSegments, GeodesicSegments

This function "segmentizes" or "densifies" a geometry by adding extra vertices to the geometry so that no segment is longer than a given distance. This is useful for plotting geometries with a limited number of vertices, or for ensuring that a geometry is not too "coarse" for a given application.

Info

We plan to add interpolated segmentization from DataInterpolations.jl in the future, which will be available to any vector of point-like objects.

For now, this function only works on 2D geometries. We will also support 3D geometries, as well as measure interpolation, in the future.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 rectangle = GI.Wrappers.Polygon([[(0.0, 50.0), (7.071, 57.07), (0, 64.14), (-7.07, 57.07), (0.0, 50.0)]])
 linear = GO.segmentize(rectangle; max_distance = 5)
diff --git a/dev/assets/source_transformations_simplify.md.B-TTeZcj.js b/dev/assets/source_transformations_simplify.md.D_r3vfXj.js
similarity index 99%
rename from dev/assets/source_transformations_simplify.md.B-TTeZcj.js
rename to dev/assets/source_transformations_simplify.md.D_r3vfXj.js
index d7cfa7bd8..63c91894d 100644
--- a/dev/assets/source_transformations_simplify.md.B-TTeZcj.js
+++ b/dev/assets/source_transformations_simplify.md.D_r3vfXj.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const l="/GeometryOps.jl/dev/assets/pupvizg.Bglvb-jp.png",k="/GeometryOps.jl/dev/assets/vygiwkc.B94PsR1K.png",t="/GeometryOps.jl/dev/assets/zsadsyt.eBFFCdzW.png",p="/GeometryOps.jl/dev/assets/tqkcbnu.Sawrgm2c.png",c=JSON.parse('{"title":"Geometry simplification","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/simplify.md","filePath":"source/transformations/simplify.md","lastUpdated":null}'),e={name:"source/transformations/simplify.md"};function E(r,s,d,g,y,F){return h(),a("div",null,s[0]||(s[0]=[n(`

Geometry simplification

This file holds implementations for the RadialDistance, Douglas-Peucker, and Visvalingam-Whyatt algorithms for simplifying geometries (specifically for polygons and lines).

The GEOS extension also allows for GEOS's topology preserving simplification as well as Douglas-Peucker simplification implemented in GEOS. Call this by passing GEOS(; method = :TopologyPreserve) or GEOS(; method = :DouglasPeucker) to the algorithm.

Examples

A quick and dirty example is:

julia
using Makie, GeoInterfaceMakie
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const l="/GeometryOps.jl/dev/assets/aplmaug.Bglvb-jp.png",k="/GeometryOps.jl/dev/assets/bqfrspk.B94PsR1K.png",t="/GeometryOps.jl/dev/assets/xeckrgt.B387vho3.png",p="/GeometryOps.jl/dev/assets/qwcxfje.B3lHbAIs.png",c=JSON.parse('{"title":"Geometry simplification","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/simplify.md","filePath":"source/transformations/simplify.md","lastUpdated":null}'),e={name:"source/transformations/simplify.md"};function E(r,s,d,g,y,F){return h(),a("div",null,s[0]||(s[0]=[n(`

Geometry simplification

This file holds implementations for the RadialDistance, Douglas-Peucker, and Visvalingam-Whyatt algorithms for simplifying geometries (specifically for polygons and lines).

The GEOS extension also allows for GEOS's topology preserving simplification as well as Douglas-Peucker simplification implemented in GEOS. Call this by passing GEOS(; method = :TopologyPreserve) or GEOS(; method = :DouglasPeucker) to the algorithm.

Examples

A quick and dirty example is:

julia
using Makie, GeoInterfaceMakie
 import GeoInterface as GI
 import GeometryOps as GO
 
diff --git a/dev/assets/source_transformations_simplify.md.B-TTeZcj.lean.js b/dev/assets/source_transformations_simplify.md.D_r3vfXj.lean.js
similarity index 99%
rename from dev/assets/source_transformations_simplify.md.B-TTeZcj.lean.js
rename to dev/assets/source_transformations_simplify.md.D_r3vfXj.lean.js
index d7cfa7bd8..63c91894d 100644
--- a/dev/assets/source_transformations_simplify.md.B-TTeZcj.lean.js
+++ b/dev/assets/source_transformations_simplify.md.D_r3vfXj.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const l="/GeometryOps.jl/dev/assets/pupvizg.Bglvb-jp.png",k="/GeometryOps.jl/dev/assets/vygiwkc.B94PsR1K.png",t="/GeometryOps.jl/dev/assets/zsadsyt.eBFFCdzW.png",p="/GeometryOps.jl/dev/assets/tqkcbnu.Sawrgm2c.png",c=JSON.parse('{"title":"Geometry simplification","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/simplify.md","filePath":"source/transformations/simplify.md","lastUpdated":null}'),e={name:"source/transformations/simplify.md"};function E(r,s,d,g,y,F){return h(),a("div",null,s[0]||(s[0]=[n(`

Geometry simplification

This file holds implementations for the RadialDistance, Douglas-Peucker, and Visvalingam-Whyatt algorithms for simplifying geometries (specifically for polygons and lines).

The GEOS extension also allows for GEOS's topology preserving simplification as well as Douglas-Peucker simplification implemented in GEOS. Call this by passing GEOS(; method = :TopologyPreserve) or GEOS(; method = :DouglasPeucker) to the algorithm.

Examples

A quick and dirty example is:

julia
using Makie, GeoInterfaceMakie
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const l="/GeometryOps.jl/dev/assets/aplmaug.Bglvb-jp.png",k="/GeometryOps.jl/dev/assets/bqfrspk.B94PsR1K.png",t="/GeometryOps.jl/dev/assets/xeckrgt.B387vho3.png",p="/GeometryOps.jl/dev/assets/qwcxfje.B3lHbAIs.png",c=JSON.parse('{"title":"Geometry simplification","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/simplify.md","filePath":"source/transformations/simplify.md","lastUpdated":null}'),e={name:"source/transformations/simplify.md"};function E(r,s,d,g,y,F){return h(),a("div",null,s[0]||(s[0]=[n(`

Geometry simplification

This file holds implementations for the RadialDistance, Douglas-Peucker, and Visvalingam-Whyatt algorithms for simplifying geometries (specifically for polygons and lines).

The GEOS extension also allows for GEOS's topology preserving simplification as well as Douglas-Peucker simplification implemented in GEOS. Call this by passing GEOS(; method = :TopologyPreserve) or GEOS(; method = :DouglasPeucker) to the algorithm.

Examples

A quick and dirty example is:

julia
using Makie, GeoInterfaceMakie
 import GeoInterface as GI
 import GeometryOps as GO
 
diff --git a/dev/assets/source_transformations_transform.md.CM0vpoQb.js b/dev/assets/source_transformations_transform.md.BPmSBXwZ.js
similarity index 98%
rename from dev/assets/source_transformations_transform.md.CM0vpoQb.js
rename to dev/assets/source_transformations_transform.md.BPmSBXwZ.js
index 1ae2d9847..c91b793ea 100644
--- a/dev/assets/source_transformations_transform.md.CM0vpoQb.js
+++ b/dev/assets/source_transformations_transform.md.BPmSBXwZ.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const F=JSON.parse('{"title":"Pointwise transformation","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/transform.md","filePath":"source/transformations/transform.md","lastUpdated":null}'),l={name:"source/transformations/transform.md"};function e(p,s,h,r,k,o){return t(),a("div",null,s[0]||(s[0]=[n(`

Pointwise transformation

julia
"""
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const F=JSON.parse('{"title":"Pointwise transformation","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/transform.md","filePath":"source/transformations/transform.md","lastUpdated":null}'),l={name:"source/transformations/transform.md"};function e(p,s,h,r,k,o){return t(),a("div",null,s[0]||(s[0]=[n(`

Pointwise transformation

julia
"""
     transform(f, obj)
 
 Apply a function \`f\` to all the points in \`obj\`.
diff --git a/dev/assets/source_transformations_transform.md.CM0vpoQb.lean.js b/dev/assets/source_transformations_transform.md.BPmSBXwZ.lean.js
similarity index 98%
rename from dev/assets/source_transformations_transform.md.CM0vpoQb.lean.js
rename to dev/assets/source_transformations_transform.md.BPmSBXwZ.lean.js
index 1ae2d9847..c91b793ea 100644
--- a/dev/assets/source_transformations_transform.md.CM0vpoQb.lean.js
+++ b/dev/assets/source_transformations_transform.md.BPmSBXwZ.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const F=JSON.parse('{"title":"Pointwise transformation","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/transform.md","filePath":"source/transformations/transform.md","lastUpdated":null}'),l={name:"source/transformations/transform.md"};function e(p,s,h,r,k,o){return t(),a("div",null,s[0]||(s[0]=[n(`

Pointwise transformation

julia
"""
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const F=JSON.parse('{"title":"Pointwise transformation","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/transform.md","filePath":"source/transformations/transform.md","lastUpdated":null}'),l={name:"source/transformations/transform.md"};function e(p,s,h,r,k,o){return t(),a("div",null,s[0]||(s[0]=[n(`

Pointwise transformation

julia
"""
     transform(f, obj)
 
 Apply a function \`f\` to all the points in \`obj\`.
diff --git a/dev/assets/source_transformations_tuples.md.CMapxQhK.js b/dev/assets/source_transformations_tuples.md.CpU1coFs.js
similarity index 96%
rename from dev/assets/source_transformations_tuples.md.CMapxQhK.js
rename to dev/assets/source_transformations_tuples.md.CpU1coFs.js
index 11000cd47..cd86fadd0 100644
--- a/dev/assets/source_transformations_tuples.md.CMapxQhK.js
+++ b/dev/assets/source_transformations_tuples.md.CpU1coFs.js
@@ -1,4 +1,4 @@
-import{_ as a,c as n,a5 as i,o as e}from"./chunks/framework.O43fB7X6.js";const d=JSON.parse('{"title":"Tuple conversion","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/tuples.md","filePath":"source/transformations/tuples.md","lastUpdated":null}'),t={name:"source/transformations/tuples.md"};function p(l,s,r,o,h,k){return e(),n("div",null,s[0]||(s[0]=[i(`

Tuple conversion

julia
"""
+import{_ as a,c as n,a5 as i,o as e}from"./chunks/framework.B_n_RGhH.js";const d=JSON.parse('{"title":"Tuple conversion","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/tuples.md","filePath":"source/transformations/tuples.md","lastUpdated":null}'),t={name:"source/transformations/tuples.md"};function p(l,s,r,o,h,k){return e(),n("div",null,s[0]||(s[0]=[i(`

Tuple conversion

julia
"""
     tuples(obj)
 
 Convert all points in \`obj\` to \`Tuple\`s, wherever the are nested.
diff --git a/dev/assets/source_transformations_tuples.md.CMapxQhK.lean.js b/dev/assets/source_transformations_tuples.md.CpU1coFs.lean.js
similarity index 96%
rename from dev/assets/source_transformations_tuples.md.CMapxQhK.lean.js
rename to dev/assets/source_transformations_tuples.md.CpU1coFs.lean.js
index 11000cd47..cd86fadd0 100644
--- a/dev/assets/source_transformations_tuples.md.CMapxQhK.lean.js
+++ b/dev/assets/source_transformations_tuples.md.CpU1coFs.lean.js
@@ -1,4 +1,4 @@
-import{_ as a,c as n,a5 as i,o as e}from"./chunks/framework.O43fB7X6.js";const d=JSON.parse('{"title":"Tuple conversion","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/tuples.md","filePath":"source/transformations/tuples.md","lastUpdated":null}'),t={name:"source/transformations/tuples.md"};function p(l,s,r,o,h,k){return e(),n("div",null,s[0]||(s[0]=[i(`

Tuple conversion

julia
"""
+import{_ as a,c as n,a5 as i,o as e}from"./chunks/framework.B_n_RGhH.js";const d=JSON.parse('{"title":"Tuple conversion","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/tuples.md","filePath":"source/transformations/tuples.md","lastUpdated":null}'),t={name:"source/transformations/tuples.md"};function p(l,s,r,o,h,k){return e(),n("div",null,s[0]||(s[0]=[i(`

Tuple conversion

julia
"""
     tuples(obj)
 
 Convert all points in \`obj\` to \`Tuple\`s, wherever the are nested.
diff --git a/dev/assets/source_types.md.BYkUclBX.js b/dev/assets/source_types.md.CMxPFJNV.js
similarity index 98%
rename from dev/assets/source_types.md.BYkUclBX.js
rename to dev/assets/source_types.md.CMxPFJNV.js
index 0d0a72e4e..0355e08cf 100644
--- a/dev/assets/source_types.md.BYkUclBX.js
+++ b/dev/assets/source_types.md.CMxPFJNV.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as e}from"./chunks/framework.O43fB7X6.js";const E=JSON.parse('{"title":"Types","description":"","frontmatter":{},"headers":[],"relativePath":"source/types.md","filePath":"source/types.md","lastUpdated":null}'),t={name:"source/types.md"};function l(h,s,p,k,r,d){return e(),a("div",null,s[0]||(s[0]=[n(`

Types

This file defines some fundamental types used in GeometryOps.

Warning

Unlike in other Julia packages, only some types are defined in this file, not all. This is because we define types in the files where they are used, to make it easier to understand the code.

julia
export GEOS

GEOS

GEOS is a struct which instructs the method it's passed to as an algorithm to use the appropriate GEOS function via LibGEOS.jl for the operation.

It's generally a lot slower than the native Julia implementations, but it's useful for two reasons:

  1. Functionality which doesn't exist in GeometryOps can be accessed through the GeometryOps API, but use GEOS in the backend until someone implements a native Julia version.

  2. It's a good way to test the correctness of the native implementations.

julia
"""
+import{_ as i,c as a,a5 as n,o as e}from"./chunks/framework.B_n_RGhH.js";const E=JSON.parse('{"title":"Types","description":"","frontmatter":{},"headers":[],"relativePath":"source/types.md","filePath":"source/types.md","lastUpdated":null}'),t={name:"source/types.md"};function l(h,s,p,k,r,d){return e(),a("div",null,s[0]||(s[0]=[n(`

Types

This file defines some fundamental types used in GeometryOps.

Warning

Unlike in other Julia packages, only some types are defined in this file, not all. This is because we define types in the files where they are used, to make it easier to understand the code.

julia
export GEOS

GEOS

GEOS is a struct which instructs the method it's passed to as an algorithm to use the appropriate GEOS function via LibGEOS.jl for the operation.

It's generally a lot slower than the native Julia implementations, but it's useful for two reasons:

  1. Functionality which doesn't exist in GeometryOps can be accessed through the GeometryOps API, but use GEOS in the backend until someone implements a native Julia version.

  2. It's a good way to test the correctness of the native implementations.

julia
"""
     GEOS(; params...)
 
 A struct which instructs the method it's passed to as an algorithm
diff --git a/dev/assets/source_types.md.BYkUclBX.lean.js b/dev/assets/source_types.md.CMxPFJNV.lean.js
similarity index 98%
rename from dev/assets/source_types.md.BYkUclBX.lean.js
rename to dev/assets/source_types.md.CMxPFJNV.lean.js
index 0d0a72e4e..0355e08cf 100644
--- a/dev/assets/source_types.md.BYkUclBX.lean.js
+++ b/dev/assets/source_types.md.CMxPFJNV.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as e}from"./chunks/framework.O43fB7X6.js";const E=JSON.parse('{"title":"Types","description":"","frontmatter":{},"headers":[],"relativePath":"source/types.md","filePath":"source/types.md","lastUpdated":null}'),t={name:"source/types.md"};function l(h,s,p,k,r,d){return e(),a("div",null,s[0]||(s[0]=[n(`

Types

This file defines some fundamental types used in GeometryOps.

Warning

Unlike in other Julia packages, only some types are defined in this file, not all. This is because we define types in the files where they are used, to make it easier to understand the code.

julia
export GEOS

GEOS

GEOS is a struct which instructs the method it's passed to as an algorithm to use the appropriate GEOS function via LibGEOS.jl for the operation.

It's generally a lot slower than the native Julia implementations, but it's useful for two reasons:

  1. Functionality which doesn't exist in GeometryOps can be accessed through the GeometryOps API, but use GEOS in the backend until someone implements a native Julia version.

  2. It's a good way to test the correctness of the native implementations.

julia
"""
+import{_ as i,c as a,a5 as n,o as e}from"./chunks/framework.B_n_RGhH.js";const E=JSON.parse('{"title":"Types","description":"","frontmatter":{},"headers":[],"relativePath":"source/types.md","filePath":"source/types.md","lastUpdated":null}'),t={name:"source/types.md"};function l(h,s,p,k,r,d){return e(),a("div",null,s[0]||(s[0]=[n(`

Types

This file defines some fundamental types used in GeometryOps.

Warning

Unlike in other Julia packages, only some types are defined in this file, not all. This is because we define types in the files where they are used, to make it easier to understand the code.

julia
export GEOS

GEOS

GEOS is a struct which instructs the method it's passed to as an algorithm to use the appropriate GEOS function via LibGEOS.jl for the operation.

It's generally a lot slower than the native Julia implementations, but it's useful for two reasons:

  1. Functionality which doesn't exist in GeometryOps can be accessed through the GeometryOps API, but use GEOS in the backend until someone implements a native Julia version.

  2. It's a good way to test the correctness of the native implementations.

julia
"""
     GEOS(; params...)
 
 A struct which instructs the method it's passed to as an algorithm
diff --git a/dev/assets/source_utils.md.D9wEaJdW.js b/dev/assets/source_utils.md.DlH2iY7N.js
similarity index 99%
rename from dev/assets/source_utils.md.D9wEaJdW.js
rename to dev/assets/source_utils.md.DlH2iY7N.js
index af2f186e5..037dbab3a 100644
--- a/dev/assets/source_utils.md.D9wEaJdW.js
+++ b/dev/assets/source_utils.md.DlH2iY7N.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const d=JSON.parse('{"title":"Utility functions","description":"","frontmatter":{},"headers":[],"relativePath":"source/utils.md","filePath":"source/utils.md","lastUpdated":null}'),p={name:"source/utils.md"};function l(h,s,k,e,r,F){return t(),a("div",null,s[0]||(s[0]=[n(`

Utility functions

julia
_is3d(geom)::Bool = _is3d(GI.trait(geom), geom)
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const d=JSON.parse('{"title":"Utility functions","description":"","frontmatter":{},"headers":[],"relativePath":"source/utils.md","filePath":"source/utils.md","lastUpdated":null}'),p={name:"source/utils.md"};function l(h,s,k,e,r,F){return t(),a("div",null,s[0]||(s[0]=[n(`

Utility functions

julia
_is3d(geom)::Bool = _is3d(GI.trait(geom), geom)
 _is3d(::GI.AbstractGeometryTrait, geom)::Bool = GI.is3d(geom)
 _is3d(::GI.FeatureTrait, feature)::Bool = _is3d(GI.geometry(feature))
 _is3d(::GI.FeatureCollectionTrait, fc)::Bool = _is3d(GI.getfeature(fc, 1))
diff --git a/dev/assets/source_utils.md.D9wEaJdW.lean.js b/dev/assets/source_utils.md.DlH2iY7N.lean.js
similarity index 99%
rename from dev/assets/source_utils.md.D9wEaJdW.lean.js
rename to dev/assets/source_utils.md.DlH2iY7N.lean.js
index af2f186e5..037dbab3a 100644
--- a/dev/assets/source_utils.md.D9wEaJdW.lean.js
+++ b/dev/assets/source_utils.md.DlH2iY7N.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.O43fB7X6.js";const d=JSON.parse('{"title":"Utility functions","description":"","frontmatter":{},"headers":[],"relativePath":"source/utils.md","filePath":"source/utils.md","lastUpdated":null}'),p={name:"source/utils.md"};function l(h,s,k,e,r,F){return t(),a("div",null,s[0]||(s[0]=[n(`

Utility functions

julia
_is3d(geom)::Bool = _is3d(GI.trait(geom), geom)
+import{_ as i,c as a,a5 as n,o as t}from"./chunks/framework.B_n_RGhH.js";const d=JSON.parse('{"title":"Utility functions","description":"","frontmatter":{},"headers":[],"relativePath":"source/utils.md","filePath":"source/utils.md","lastUpdated":null}'),p={name:"source/utils.md"};function l(h,s,k,e,r,F){return t(),a("div",null,s[0]||(s[0]=[n(`

Utility functions

julia
_is3d(geom)::Bool = _is3d(GI.trait(geom), geom)
 _is3d(::GI.AbstractGeometryTrait, geom)::Bool = GI.is3d(geom)
 _is3d(::GI.FeatureTrait, feature)::Bool = _is3d(GI.geometry(feature))
 _is3d(::GI.FeatureCollectionTrait, fc)::Bool = _is3d(GI.getfeature(fc, 1))
diff --git a/dev/assets/pthbixz.DuBHk1fh.png b/dev/assets/svktjgf.DuBHk1fh.png
similarity index 100%
rename from dev/assets/pthbixz.DuBHk1fh.png
rename to dev/assets/svktjgf.DuBHk1fh.png
diff --git a/dev/assets/ubzuwfc.D9AE7i2o.png b/dev/assets/thxfble.D9AE7i2o.png
similarity index 100%
rename from dev/assets/ubzuwfc.D9AE7i2o.png
rename to dev/assets/thxfble.D9AE7i2o.png
diff --git a/dev/assets/tqkcbnu.Sawrgm2c.png b/dev/assets/tqkcbnu.Sawrgm2c.png
deleted file mode 100644
index bc6540a6f..000000000
Binary files a/dev/assets/tqkcbnu.Sawrgm2c.png and /dev/null differ
diff --git a/dev/assets/tutorials_creating_geometry.md.D4aO0Mq8.js b/dev/assets/tutorials_creating_geometry.md.BTBCrl8q.js
similarity index 99%
rename from dev/assets/tutorials_creating_geometry.md.D4aO0Mq8.js
rename to dev/assets/tutorials_creating_geometry.md.BTBCrl8q.js
index c4bf87a09..5516fcddc 100644
--- a/dev/assets/tutorials_creating_geometry.md.D4aO0Mq8.js
+++ b/dev/assets/tutorials_creating_geometry.md.BTBCrl8q.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as e,o as t}from"./chunks/framework.O43fB7X6.js";const n="/GeometryOps.jl/dev/assets/tzkihiu.Dz86q2IX.png",l="/GeometryOps.jl/dev/assets/xpwigpz.Cx40vhB3.png",p="/GeometryOps.jl/dev/assets/iwkpryh.0OJvb21A.png",h="/GeometryOps.jl/dev/assets/bndakij.DaovVbE6.png",o="/GeometryOps.jl/dev/assets/yjgrvbf.rOsRk89v.png",k="/GeometryOps.jl/dev/assets/djuoqnk.4wfjCtJV.png",r="/GeometryOps.jl/dev/assets/whxwitd.3sfpQl2i.png",g="/GeometryOps.jl/dev/assets/xgwfyhv.Dab1-ETk.png",d="/GeometryOps.jl/dev/assets/ubzuwfc.D9AE7i2o.png",E="/GeometryOps.jl/dev/assets/gtsdgxe.DTKLkKh_.png",c="/GeometryOps.jl/dev/assets/wjmyrsm.0f3Lq4Lw.png",G=JSON.parse('{"title":"Creating Geometry","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/creating_geometry.md","filePath":"tutorials/creating_geometry.md","lastUpdated":null}'),y={name:"tutorials/creating_geometry.md"};function F(u,s,f,C,m,b){return t(),a("div",null,s[0]||(s[0]=[e(`

Creating Geometry

In this tutorial, we're going to:

  1. Create and plot geometries

  2. Plot geometries on a map using GeoMakie and coordinate reference system (CRS)

  3. Create geospatial geometries with embedded coordinate reference system information

  4. Assign attributes to geospatial geometries

  5. Save geospatial geometries to common geospatial file formats

First, we load some required packages.

julia
# Geospatial packages from Julia
+import{_ as i,c as a,a5 as e,o as t}from"./chunks/framework.B_n_RGhH.js";const n="/GeometryOps.jl/dev/assets/pqtqdtt.Dz86q2IX.png",l="/GeometryOps.jl/dev/assets/ixoxtgg.Cx40vhB3.png",p="/GeometryOps.jl/dev/assets/dyradks.0OJvb21A.png",h="/GeometryOps.jl/dev/assets/gvlnqpi.DaovVbE6.png",o="/GeometryOps.jl/dev/assets/yarbqsp.rOsRk89v.png",k="/GeometryOps.jl/dev/assets/hircove.4wfjCtJV.png",r="/GeometryOps.jl/dev/assets/lfblsgc.3sfpQl2i.png",g="/GeometryOps.jl/dev/assets/mpaazvt.Dab1-ETk.png",d="/GeometryOps.jl/dev/assets/thxfble.D9AE7i2o.png",E="/GeometryOps.jl/dev/assets/wvvawyc.DTKLkKh_.png",c="/GeometryOps.jl/dev/assets/yghxjqa.0f3Lq4Lw.png",G=JSON.parse('{"title":"Creating Geometry","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/creating_geometry.md","filePath":"tutorials/creating_geometry.md","lastUpdated":null}'),y={name:"tutorials/creating_geometry.md"};function F(u,s,f,C,m,b){return t(),a("div",null,s[0]||(s[0]=[e(`

Creating Geometry

In this tutorial, we're going to:

  1. Create and plot geometries

  2. Plot geometries on a map using GeoMakie and coordinate reference system (CRS)

  3. Create geospatial geometries with embedded coordinate reference system information

  4. Assign attributes to geospatial geometries

  5. Save geospatial geometries to common geospatial file formats

First, we load some required packages.

julia
# Geospatial packages from Julia
 import GeoInterface as GI
 import GeometryOps as GO
 import GeoFormatTypes as GFT
diff --git a/dev/assets/tutorials_creating_geometry.md.D4aO0Mq8.lean.js b/dev/assets/tutorials_creating_geometry.md.BTBCrl8q.lean.js
similarity index 99%
rename from dev/assets/tutorials_creating_geometry.md.D4aO0Mq8.lean.js
rename to dev/assets/tutorials_creating_geometry.md.BTBCrl8q.lean.js
index c4bf87a09..5516fcddc 100644
--- a/dev/assets/tutorials_creating_geometry.md.D4aO0Mq8.lean.js
+++ b/dev/assets/tutorials_creating_geometry.md.BTBCrl8q.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as e,o as t}from"./chunks/framework.O43fB7X6.js";const n="/GeometryOps.jl/dev/assets/tzkihiu.Dz86q2IX.png",l="/GeometryOps.jl/dev/assets/xpwigpz.Cx40vhB3.png",p="/GeometryOps.jl/dev/assets/iwkpryh.0OJvb21A.png",h="/GeometryOps.jl/dev/assets/bndakij.DaovVbE6.png",o="/GeometryOps.jl/dev/assets/yjgrvbf.rOsRk89v.png",k="/GeometryOps.jl/dev/assets/djuoqnk.4wfjCtJV.png",r="/GeometryOps.jl/dev/assets/whxwitd.3sfpQl2i.png",g="/GeometryOps.jl/dev/assets/xgwfyhv.Dab1-ETk.png",d="/GeometryOps.jl/dev/assets/ubzuwfc.D9AE7i2o.png",E="/GeometryOps.jl/dev/assets/gtsdgxe.DTKLkKh_.png",c="/GeometryOps.jl/dev/assets/wjmyrsm.0f3Lq4Lw.png",G=JSON.parse('{"title":"Creating Geometry","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/creating_geometry.md","filePath":"tutorials/creating_geometry.md","lastUpdated":null}'),y={name:"tutorials/creating_geometry.md"};function F(u,s,f,C,m,b){return t(),a("div",null,s[0]||(s[0]=[e(`

Creating Geometry

In this tutorial, we're going to:

  1. Create and plot geometries

  2. Plot geometries on a map using GeoMakie and coordinate reference system (CRS)

  3. Create geospatial geometries with embedded coordinate reference system information

  4. Assign attributes to geospatial geometries

  5. Save geospatial geometries to common geospatial file formats

First, we load some required packages.

julia
# Geospatial packages from Julia
+import{_ as i,c as a,a5 as e,o as t}from"./chunks/framework.B_n_RGhH.js";const n="/GeometryOps.jl/dev/assets/pqtqdtt.Dz86q2IX.png",l="/GeometryOps.jl/dev/assets/ixoxtgg.Cx40vhB3.png",p="/GeometryOps.jl/dev/assets/dyradks.0OJvb21A.png",h="/GeometryOps.jl/dev/assets/gvlnqpi.DaovVbE6.png",o="/GeometryOps.jl/dev/assets/yarbqsp.rOsRk89v.png",k="/GeometryOps.jl/dev/assets/hircove.4wfjCtJV.png",r="/GeometryOps.jl/dev/assets/lfblsgc.3sfpQl2i.png",g="/GeometryOps.jl/dev/assets/mpaazvt.Dab1-ETk.png",d="/GeometryOps.jl/dev/assets/thxfble.D9AE7i2o.png",E="/GeometryOps.jl/dev/assets/wvvawyc.DTKLkKh_.png",c="/GeometryOps.jl/dev/assets/yghxjqa.0f3Lq4Lw.png",G=JSON.parse('{"title":"Creating Geometry","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/creating_geometry.md","filePath":"tutorials/creating_geometry.md","lastUpdated":null}'),y={name:"tutorials/creating_geometry.md"};function F(u,s,f,C,m,b){return t(),a("div",null,s[0]||(s[0]=[e(`

Creating Geometry

In this tutorial, we're going to:

  1. Create and plot geometries

  2. Plot geometries on a map using GeoMakie and coordinate reference system (CRS)

  3. Create geospatial geometries with embedded coordinate reference system information

  4. Assign attributes to geospatial geometries

  5. Save geospatial geometries to common geospatial file formats

First, we load some required packages.

julia
# Geospatial packages from Julia
 import GeoInterface as GI
 import GeometryOps as GO
 import GeoFormatTypes as GFT
diff --git a/dev/assets/tutorials_geodesic_paths.md.D6mnfCpA.js b/dev/assets/tutorials_geodesic_paths.md.DkbgDT9U.js
similarity index 97%
rename from dev/assets/tutorials_geodesic_paths.md.D6mnfCpA.js
rename to dev/assets/tutorials_geodesic_paths.md.DkbgDT9U.js
index 42b55be34..094f381fe 100644
--- a/dev/assets/tutorials_geodesic_paths.md.D6mnfCpA.js
+++ b/dev/assets/tutorials_geodesic_paths.md.DkbgDT9U.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/tmfrkpo.CPClNl7F.png",o=JSON.parse('{"title":"Geodesic paths","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/geodesic_paths.md","filePath":"tutorials/geodesic_paths.md","lastUpdated":null}'),p={name:"tutorials/geodesic_paths.md"};function k(l,s,e,E,d,r){return h(),a("div",null,s[0]||(s[0]=[n(`

Geodesic paths

Geodesic paths are paths computed on an ellipsoid, as opposed to a plane.

julia
import GeometryOps as GO, GeoInterface as GI
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/hzttamm.CPClNl7F.png",o=JSON.parse('{"title":"Geodesic paths","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/geodesic_paths.md","filePath":"tutorials/geodesic_paths.md","lastUpdated":null}'),p={name:"tutorials/geodesic_paths.md"};function k(l,s,e,E,d,r){return h(),a("div",null,s[0]||(s[0]=[n(`

Geodesic paths

Geodesic paths are paths computed on an ellipsoid, as opposed to a plane.

julia
import GeometryOps as GO, GeoInterface as GI
 using CairoMakie, GeoMakie
 
 
diff --git a/dev/assets/tutorials_geodesic_paths.md.D6mnfCpA.lean.js b/dev/assets/tutorials_geodesic_paths.md.DkbgDT9U.lean.js
similarity index 97%
rename from dev/assets/tutorials_geodesic_paths.md.D6mnfCpA.lean.js
rename to dev/assets/tutorials_geodesic_paths.md.DkbgDT9U.lean.js
index 42b55be34..094f381fe 100644
--- a/dev/assets/tutorials_geodesic_paths.md.D6mnfCpA.lean.js
+++ b/dev/assets/tutorials_geodesic_paths.md.DkbgDT9U.lean.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const t="/GeometryOps.jl/dev/assets/tmfrkpo.CPClNl7F.png",o=JSON.parse('{"title":"Geodesic paths","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/geodesic_paths.md","filePath":"tutorials/geodesic_paths.md","lastUpdated":null}'),p={name:"tutorials/geodesic_paths.md"};function k(l,s,e,E,d,r){return h(),a("div",null,s[0]||(s[0]=[n(`

Geodesic paths

Geodesic paths are paths computed on an ellipsoid, as opposed to a plane.

julia
import GeometryOps as GO, GeoInterface as GI
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const t="/GeometryOps.jl/dev/assets/hzttamm.CPClNl7F.png",o=JSON.parse('{"title":"Geodesic paths","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/geodesic_paths.md","filePath":"tutorials/geodesic_paths.md","lastUpdated":null}'),p={name:"tutorials/geodesic_paths.md"};function k(l,s,e,E,d,r){return h(),a("div",null,s[0]||(s[0]=[n(`

Geodesic paths

Geodesic paths are paths computed on an ellipsoid, as opposed to a plane.

julia
import GeometryOps as GO, GeoInterface as GI
 using CairoMakie, GeoMakie
 
 
diff --git a/dev/assets/tutorials_spatial_joins.md.Cn2Qsvbo.js b/dev/assets/tutorials_spatial_joins.md.BlaPD1R3.js
similarity index 99%
rename from dev/assets/tutorials_spatial_joins.md.Cn2Qsvbo.js
rename to dev/assets/tutorials_spatial_joins.md.BlaPD1R3.js
index f0c90c7e0..6083b4c7b 100644
--- a/dev/assets/tutorials_spatial_joins.md.Cn2Qsvbo.js
+++ b/dev/assets/tutorials_spatial_joins.md.BlaPD1R3.js
@@ -1,4 +1,4 @@
-import{_ as l,c as t,j as i,a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const e="/GeometryOps.jl/dev/assets/ytxcvam.3UVIT8DR.png",p="/GeometryOps.jl/dev/assets/ppmunub.BAI46Sfr.png",k="/GeometryOps.jl/dev/assets/vheuwry.DyKduGkc.png",C=JSON.parse('{"title":"Spatial joins","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/spatial_joins.md","filePath":"tutorials/spatial_joins.md","lastUpdated":null}'),r={name:"tutorials/spatial_joins.md"},E={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},d={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"6.307ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 2787.7 1000","aria-hidden":"true"};function o(g,s,y,F,c,u){return h(),t("div",null,[s[12]||(s[12]=i("h1",{id:"Spatial-joins",tabindex:"-1"},[a("Spatial joins "),i("a",{class:"header-anchor",href:"#Spatial-joins","aria-label":'Permalink to "Spatial joins {#Spatial-joins}"'},"​")],-1)),i("p",null,[s[2]||(s[2]=a("Spatial joins are ")),s[3]||(s[3]=i("a",{href:"https://www.geeksforgeeks.org/sql-join-set-1-inner-left-right-and-full-joins/",target:"_blank",rel:"noreferrer"},"table joins",-1)),s[4]||(s[4]=a(" which are based not on equality, but on some predicate ")),i("mjx-container",E,[(h(),t("svg",d,s[0]||(s[0]=[n('',1)]))),s[1]||(s[1]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mi",null,"p"),i("mo",{stretchy:"false"},"("),i("mi",null,"x"),i("mo",null,","),i("mi",null,"y"),i("mo",{stretchy:"false"},")")])],-1))]),s[5]||(s[5]=a(", which takes two geometries, and returns a value of either ")),s[6]||(s[6]=i("code",null,"true",-1)),s[7]||(s[7]=a(" or ")),s[8]||(s[8]=i("code",null,"false",-1)),s[9]||(s[9]=a(". For geometries, the ")),s[10]||(s[10]=i("a",{href:"https://en.wikipedia.org/wiki/DE-9IM",target:"_blank",rel:"noreferrer"},[i("code",null,"DE-9IM")],-1)),s[11]||(s[11]=a(" spatial relationship model is used to determine the spatial relationship between two geometries."))]),s[13]||(s[13]=n(`

Spatial joins can be done between any geometry types (from geometrycollections to points), just as geometrical predicates can be evaluated on any geometries.

In this tutorial, we will show how to perform a spatial join on first a toy dataset and then two Natural Earth datasets, to show how this can be used in the real world.

In order to perform the spatial join, we use FlexiJoins.jl to perform the join, specifically using its by_pred joining method. This allows the user to specify a predicate in the following manner, for any kind of table join operation:

julia
using FlexiJoins
+import{_ as l,c as t,j as i,a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const e="/GeometryOps.jl/dev/assets/zcyduij.3UVIT8DR.png",p="/GeometryOps.jl/dev/assets/lacykyt.C1qDiDY9.png",k="/GeometryOps.jl/dev/assets/ooercci.COt3ymN-.png",C=JSON.parse('{"title":"Spatial joins","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/spatial_joins.md","filePath":"tutorials/spatial_joins.md","lastUpdated":null}'),r={name:"tutorials/spatial_joins.md"},E={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},d={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"6.307ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 2787.7 1000","aria-hidden":"true"};function o(g,s,y,F,c,u){return h(),t("div",null,[s[12]||(s[12]=i("h1",{id:"Spatial-joins",tabindex:"-1"},[a("Spatial joins "),i("a",{class:"header-anchor",href:"#Spatial-joins","aria-label":'Permalink to "Spatial joins {#Spatial-joins}"'},"​")],-1)),i("p",null,[s[2]||(s[2]=a("Spatial joins are ")),s[3]||(s[3]=i("a",{href:"https://www.geeksforgeeks.org/sql-join-set-1-inner-left-right-and-full-joins/",target:"_blank",rel:"noreferrer"},"table joins",-1)),s[4]||(s[4]=a(" which are based not on equality, but on some predicate ")),i("mjx-container",E,[(h(),t("svg",d,s[0]||(s[0]=[n('',1)]))),s[1]||(s[1]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mi",null,"p"),i("mo",{stretchy:"false"},"("),i("mi",null,"x"),i("mo",null,","),i("mi",null,"y"),i("mo",{stretchy:"false"},")")])],-1))]),s[5]||(s[5]=a(", which takes two geometries, and returns a value of either ")),s[6]||(s[6]=i("code",null,"true",-1)),s[7]||(s[7]=a(" or ")),s[8]||(s[8]=i("code",null,"false",-1)),s[9]||(s[9]=a(". For geometries, the ")),s[10]||(s[10]=i("a",{href:"https://en.wikipedia.org/wiki/DE-9IM",target:"_blank",rel:"noreferrer"},[i("code",null,"DE-9IM")],-1)),s[11]||(s[11]=a(" spatial relationship model is used to determine the spatial relationship between two geometries."))]),s[13]||(s[13]=n(`

Spatial joins can be done between any geometry types (from geometrycollections to points), just as geometrical predicates can be evaluated on any geometries.

In this tutorial, we will show how to perform a spatial join on first a toy dataset and then two Natural Earth datasets, to show how this can be used in the real world.

In order to perform the spatial join, we use FlexiJoins.jl to perform the join, specifically using its by_pred joining method. This allows the user to specify a predicate in the following manner, for any kind of table join operation:

julia
using FlexiJoins
 innerjoin((table1, table1),
     by_pred(:table1_column, predicate_function, :table2_column) # & add other conditions here
 )
diff --git a/dev/assets/tutorials_spatial_joins.md.Cn2Qsvbo.lean.js b/dev/assets/tutorials_spatial_joins.md.BlaPD1R3.lean.js
similarity index 99%
rename from dev/assets/tutorials_spatial_joins.md.Cn2Qsvbo.lean.js
rename to dev/assets/tutorials_spatial_joins.md.BlaPD1R3.lean.js
index f0c90c7e0..6083b4c7b 100644
--- a/dev/assets/tutorials_spatial_joins.md.Cn2Qsvbo.lean.js
+++ b/dev/assets/tutorials_spatial_joins.md.BlaPD1R3.lean.js
@@ -1,4 +1,4 @@
-import{_ as l,c as t,j as i,a,a5 as n,o as h}from"./chunks/framework.O43fB7X6.js";const e="/GeometryOps.jl/dev/assets/ytxcvam.3UVIT8DR.png",p="/GeometryOps.jl/dev/assets/ppmunub.BAI46Sfr.png",k="/GeometryOps.jl/dev/assets/vheuwry.DyKduGkc.png",C=JSON.parse('{"title":"Spatial joins","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/spatial_joins.md","filePath":"tutorials/spatial_joins.md","lastUpdated":null}'),r={name:"tutorials/spatial_joins.md"},E={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},d={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"6.307ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 2787.7 1000","aria-hidden":"true"};function o(g,s,y,F,c,u){return h(),t("div",null,[s[12]||(s[12]=i("h1",{id:"Spatial-joins",tabindex:"-1"},[a("Spatial joins "),i("a",{class:"header-anchor",href:"#Spatial-joins","aria-label":'Permalink to "Spatial joins {#Spatial-joins}"'},"​")],-1)),i("p",null,[s[2]||(s[2]=a("Spatial joins are ")),s[3]||(s[3]=i("a",{href:"https://www.geeksforgeeks.org/sql-join-set-1-inner-left-right-and-full-joins/",target:"_blank",rel:"noreferrer"},"table joins",-1)),s[4]||(s[4]=a(" which are based not on equality, but on some predicate ")),i("mjx-container",E,[(h(),t("svg",d,s[0]||(s[0]=[n('',1)]))),s[1]||(s[1]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mi",null,"p"),i("mo",{stretchy:"false"},"("),i("mi",null,"x"),i("mo",null,","),i("mi",null,"y"),i("mo",{stretchy:"false"},")")])],-1))]),s[5]||(s[5]=a(", which takes two geometries, and returns a value of either ")),s[6]||(s[6]=i("code",null,"true",-1)),s[7]||(s[7]=a(" or ")),s[8]||(s[8]=i("code",null,"false",-1)),s[9]||(s[9]=a(". For geometries, the ")),s[10]||(s[10]=i("a",{href:"https://en.wikipedia.org/wiki/DE-9IM",target:"_blank",rel:"noreferrer"},[i("code",null,"DE-9IM")],-1)),s[11]||(s[11]=a(" spatial relationship model is used to determine the spatial relationship between two geometries."))]),s[13]||(s[13]=n(`

Spatial joins can be done between any geometry types (from geometrycollections to points), just as geometrical predicates can be evaluated on any geometries.

In this tutorial, we will show how to perform a spatial join on first a toy dataset and then two Natural Earth datasets, to show how this can be used in the real world.

In order to perform the spatial join, we use FlexiJoins.jl to perform the join, specifically using its by_pred joining method. This allows the user to specify a predicate in the following manner, for any kind of table join operation:

julia
using FlexiJoins
+import{_ as l,c as t,j as i,a,a5 as n,o as h}from"./chunks/framework.B_n_RGhH.js";const e="/GeometryOps.jl/dev/assets/zcyduij.3UVIT8DR.png",p="/GeometryOps.jl/dev/assets/lacykyt.C1qDiDY9.png",k="/GeometryOps.jl/dev/assets/ooercci.COt3ymN-.png",C=JSON.parse('{"title":"Spatial joins","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/spatial_joins.md","filePath":"tutorials/spatial_joins.md","lastUpdated":null}'),r={name:"tutorials/spatial_joins.md"},E={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},d={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"6.307ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 2787.7 1000","aria-hidden":"true"};function o(g,s,y,F,c,u){return h(),t("div",null,[s[12]||(s[12]=i("h1",{id:"Spatial-joins",tabindex:"-1"},[a("Spatial joins "),i("a",{class:"header-anchor",href:"#Spatial-joins","aria-label":'Permalink to "Spatial joins {#Spatial-joins}"'},"​")],-1)),i("p",null,[s[2]||(s[2]=a("Spatial joins are ")),s[3]||(s[3]=i("a",{href:"https://www.geeksforgeeks.org/sql-join-set-1-inner-left-right-and-full-joins/",target:"_blank",rel:"noreferrer"},"table joins",-1)),s[4]||(s[4]=a(" which are based not on equality, but on some predicate ")),i("mjx-container",E,[(h(),t("svg",d,s[0]||(s[0]=[n('',1)]))),s[1]||(s[1]=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mi",null,"p"),i("mo",{stretchy:"false"},"("),i("mi",null,"x"),i("mo",null,","),i("mi",null,"y"),i("mo",{stretchy:"false"},")")])],-1))]),s[5]||(s[5]=a(", which takes two geometries, and returns a value of either ")),s[6]||(s[6]=i("code",null,"true",-1)),s[7]||(s[7]=a(" or ")),s[8]||(s[8]=i("code",null,"false",-1)),s[9]||(s[9]=a(". For geometries, the ")),s[10]||(s[10]=i("a",{href:"https://en.wikipedia.org/wiki/DE-9IM",target:"_blank",rel:"noreferrer"},[i("code",null,"DE-9IM")],-1)),s[11]||(s[11]=a(" spatial relationship model is used to determine the spatial relationship between two geometries."))]),s[13]||(s[13]=n(`

Spatial joins can be done between any geometry types (from geometrycollections to points), just as geometrical predicates can be evaluated on any geometries.

In this tutorial, we will show how to perform a spatial join on first a toy dataset and then two Natural Earth datasets, to show how this can be used in the real world.

In order to perform the spatial join, we use FlexiJoins.jl to perform the join, specifically using its by_pred joining method. This allows the user to specify a predicate in the following manner, for any kind of table join operation:

julia
using FlexiJoins
 innerjoin((table1, table1),
     by_pred(:table1_column, predicate_function, :table2_column) # & add other conditions here
 )
diff --git a/dev/assets/uwwxcdv.CwTFuyyb.png b/dev/assets/uwwxcdv.CwTFuyyb.png
deleted file mode 100644
index b4aa32c82..000000000
Binary files a/dev/assets/uwwxcdv.CwTFuyyb.png and /dev/null differ
diff --git a/dev/assets/vheuwry.DyKduGkc.png b/dev/assets/vheuwry.DyKduGkc.png
deleted file mode 100644
index 52ef99199..000000000
Binary files a/dev/assets/vheuwry.DyKduGkc.png and /dev/null differ
diff --git a/dev/assets/iejgkmu.BEFUMtlf.png b/dev/assets/wpeykob.BEFUMtlf.png
similarity index 100%
rename from dev/assets/iejgkmu.BEFUMtlf.png
rename to dev/assets/wpeykob.BEFUMtlf.png
diff --git a/dev/assets/gtsdgxe.DTKLkKh_.png b/dev/assets/wvvawyc.DTKLkKh_.png
similarity index 100%
rename from dev/assets/gtsdgxe.DTKLkKh_.png
rename to dev/assets/wvvawyc.DTKLkKh_.png
diff --git a/dev/assets/glloswm.CULn5saZ.png b/dev/assets/xdzgijh.CULn5saZ.png
similarity index 100%
rename from dev/assets/glloswm.CULn5saZ.png
rename to dev/assets/xdzgijh.CULn5saZ.png
diff --git a/dev/assets/xeckrgt.B387vho3.png b/dev/assets/xeckrgt.B387vho3.png
new file mode 100644
index 000000000..e9daa89cf
Binary files /dev/null and b/dev/assets/xeckrgt.B387vho3.png differ
diff --git a/dev/assets/xqugbnz.C1TEVbYt.png b/dev/assets/xqugbnz.C1TEVbYt.png
new file mode 100644
index 000000000..c22363421
Binary files /dev/null and b/dev/assets/xqugbnz.C1TEVbYt.png differ
diff --git a/dev/assets/yafbdbx.DgMj-nPU.png b/dev/assets/yafbdbx.DgMj-nPU.png
new file mode 100644
index 000000000..330450415
Binary files /dev/null and b/dev/assets/yafbdbx.DgMj-nPU.png differ
diff --git a/dev/assets/yjgrvbf.rOsRk89v.png b/dev/assets/yarbqsp.rOsRk89v.png
similarity index 100%
rename from dev/assets/yjgrvbf.rOsRk89v.png
rename to dev/assets/yarbqsp.rOsRk89v.png
diff --git a/dev/assets/wjmyrsm.0f3Lq4Lw.png b/dev/assets/yghxjqa.0f3Lq4Lw.png
similarity index 100%
rename from dev/assets/wjmyrsm.0f3Lq4Lw.png
rename to dev/assets/yghxjqa.0f3Lq4Lw.png
diff --git a/dev/assets/ytxcvam.3UVIT8DR.png b/dev/assets/zcyduij.3UVIT8DR.png
similarity index 100%
rename from dev/assets/ytxcvam.3UVIT8DR.png
rename to dev/assets/zcyduij.3UVIT8DR.png
diff --git a/dev/assets/zsadsyt.eBFFCdzW.png b/dev/assets/zsadsyt.eBFFCdzW.png
deleted file mode 100644
index 1b3c9a65d..000000000
Binary files a/dev/assets/zsadsyt.eBFFCdzW.png and /dev/null differ
diff --git a/dev/assets/cgxfzhy.mCtKcWOr.png b/dev/assets/zuhrnvv.mCtKcWOr.png
similarity index 100%
rename from dev/assets/cgxfzhy.mCtKcWOr.png
rename to dev/assets/zuhrnvv.mCtKcWOr.png
diff --git a/dev/call_notes.html b/dev/call_notes.html
index 299ebecfa..669c3f6fb 100644
--- a/dev/call_notes.html
+++ b/dev/call_notes.html
@@ -8,17 +8,17 @@
     
     
     
-    
+    
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
Skip to content

20th April, 2024

See GeometryOps#114.

  • [ ] Exact predicates can be defined for lower-level, more atomic predicates within GeometryOps.

  • [ ] Add Shewchuck's adaptive math as a stage for exact predicates.

  • [x] @skygering to write docstrings for the predicates

29th Feb, 2024

To do

  • [ ] Finish clipping degeneracies

  • [ ] Fix cross & overlap functions

  • [x] Benchmarks to show why things you couldn't concieve of in R are doable in Julia

  • [x] profile functions for exponential improvements

  • [ ] A list of projects people can work on...the beauty here is that each function is kind of self-contained so it's an undergrad level project

  • [ ] Doc improvements

    • more

    • benchmarks page

  • Methods to validate and fix geometry

    • [ ] Polygons and LinearRings:

      • [ ] self-intersection

      • [ ] holes are actually within the polygon

      • [ ] Polygon exteriors must be counterclockwise, holes clockwise.

      • [ ] length of all rings > 4

      • [ ] repeated last point

    • [ ] LineStrings: NaN/Inf points

    • [x] Fix linear rings at some point to make sure the ring is closed, i.e., points[end] == points[begin]

  • Tests

    • [x] Simplify functions

    • [x] Polygonize

    • Barycentric tests for n_vertices > 4

Done

  • Rename bools.jl to something more relevant to the actual code -> orientation.jl

  • Doc improvements:

    • organise sections
- + \ No newline at end of file diff --git a/dev/experiments/accurate_accumulators.html b/dev/experiments/accurate_accumulators.html index 17325b691..56ca7e048 100644 --- a/dev/experiments/accurate_accumulators.html +++ b/dev/experiments/accurate_accumulators.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,7 +23,7 @@ using NaturalEarth all_adm0 = naturalearth("admin_0_countries", 10)
FeatureCollection with 258 Features
julia
GO.area(all_adm0)
21427.909318372607
julia
AccurateArithmetic.sum_oro(GO.area.(all_adm0.geometry))
21427.909318372607
julia
AccurateArithmetic.sum_kbn(GO.area.(all_adm0.geometry))
21427.909318372607
julia
GI.Polygon.(GO.flatten(Union{GI.LineStringTrait, GI.LinearRingTrait}, all_adm0) |> collect .|> x -> [x]) .|> GO.signed_area |> sum
-21427.90063612163
julia
GI.Polygon.(GO.flatten(Union{GI.LineStringTrait, GI.LinearRingTrait}, all_adm0) |> collect .|> x -> [x]) .|> GO.signed_area |> sum_oro
-21427.90063612163

@example accurate GI.Polygon.(GO.flatten(Union{GI.LineStringTrait, GI.LinearRingTrait}, all_adm0) |> collect .|> x -> [x]) .|> GO.signed_area |> sum_kbn ```

- + \ No newline at end of file diff --git a/dev/experiments/predicates.html b/dev/experiments/predicates.html index a1745173b..a2a4b4e07 100644 --- a/dev/experiments/predicates.html +++ b/dev/experiments/predicates.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -58,7 +58,7 @@ display(fig) end resize!(fig, 1000, 450) -fig

Dashboard

julia
using WGLMakie
+fig

Dashboard

julia
using WGLMakie
 import GeometryOps as GO, GeoInterface as GI, LibGEOS as LG
 import ExactPredicates
 using MultiFloats
@@ -115,7 +115,7 @@
 
 GO.intersection(p1_m, p2_m; target = GI.PolygonTrait(), fix_multipoly = nothing)
 LG.intersection(p1_m, p2_m)

Incircle

- + \ No newline at end of file diff --git a/dev/explanations/crs.html b/dev/explanations/crs.html index 1ef2bac04..78bab31c4 100644 --- a/dev/explanations/crs.html +++ b/dev/explanations/crs.html @@ -8,17 +8,17 @@ - + - - - + + +
Skip to content
- + \ No newline at end of file diff --git a/dev/explanations/paradigms.html b/dev/explanations/paradigms.html index 57d1e16f0..581e6746e 100644 --- a/dev/explanations/paradigms.html +++ b/dev/explanations/paradigms.html @@ -8,17 +8,17 @@ - + - - - + + +
Skip to content

Paradigms

GeometryOps exposes functions like apply and applyreduce, as well as the fix and prepare APIs, that represent paradigms of programming, by which we mean the ability to program in a certain way, and in so doing, fit neatly into the tools we've built without needing to re-implement the wheel.

Below, we'll describe some of the foundational paradigms of GeometryOps, and why you should care!

apply

The apply function allows you to decompose a given collection of geometries down to a certain level, operate on it, and reconstruct it back to the same nested form as the original. In general, its invocation is:

julia
apply(f, trait::Trait, geom)

Functionally, it's similar to map in the way you apply it to geometries - except that you tell it at which level it should stop, by passing a trait to it.

apply will start by decomposing the geometry, feature, featurecollection, iterable, or table that you pass to it, and stop when it encounters a geometry for which GI.trait(geom) isa Trait. This encompasses unions of traits especially, but beware that any geometry which is not explicitly handled, and hits GI.PointTrait, will cause an error.

apply is unlike map in that it returns reconstructed geometries, instead of the raw output of the function. If you want a purely map-like behaviour, like calculating the length of each linestring in your feature collection, then call GO.flatten(f, trait, geom), which will decompose each geometry to the given trait and apply f to it, returning the decomposition as a flattened vector.

applyreduce

applyreduce is like the previous map-based approach that we mentioned, except that it reduces the result of f by op. Note that applyreduce does not guarantee associativity, so it's best to have typeof(init) == returntype(op).

fix and prepare

The fix and prepare paradigms are different from apply, though they are built on top of it. They involve the use of structs as "actions", where a constructed object indicates an action that should be taken. A trait like interface prescribes the level (polygon, linestring, point, etc) at which each action should be applied.

In general, the idea here is to be able to invoke several actions efficiently and simultaneously, for example when correcting invalid geometries, or instantiating a Prepared geometry with several preparations (sorted edge lists, rtrees, monotone chains, etc.)

- + \ No newline at end of file diff --git a/dev/explanations/peculiarities.html b/dev/explanations/peculiarities.html index f61636856..b81da94bc 100644 --- a/dev/explanations/peculiarities.html +++ b/dev/explanations/peculiarities.html @@ -8,17 +8,17 @@ - + - - - + + +
Skip to content

Peculiarities

What does apply return and why?

apply returns the target geometries returned by f, whatever type/package they are from, but geometries, features or feature collections that wrapped the target are replaced with GeoInterace.jl wrappers with matching GeoInterface.trait to the originals. All non-geointerface iterables become Arrays. Tables.jl compatible tables are converted either back to the original type if a Tables.materializer is defined, and if not then returned as generic NamedTuple column tables (i.e., a NamedTuple of vectors).

It is recommended for consistency that f returns GeoInterface geometries unless there is a performance/conversion overhead to doing that.

Why do you want me to provide a target in set operations?

In polygon set operations like intersection, difference, and union, many different geometry types may be obtained - depending on the relationship between the polygons. For example, when performing an union on two nonintersecting polygons, one would technically have two disjoint polygons as an output.

We use the target keyword to allow the user to control which kinds of geometry they want back. For example, setting target to PolygonTrait will cause a vector of polygons to be returned (this is the only currently supported behaviour). In future, we may implement MultiPolygonTrait or GeometryCollectionTrait targets which will return a single geometry, as LibGEOS and ArchGDAL do.

This also allows for a lot more type stability - when you ask for polygons, we won't return a geometrycollection with line segments. Especially in simulation workflows, this is excellent for simplified data processing.

_True and _False (or BoolsAsTypes)

Warning

These are internals and explicitly not public API, meaning they may change at any time!

When dispatch can be controlled by the value of a boolean variable, this introduces type instability. Instead of introducing type instability, we chose to encode our boolean decision variables, like threaded and calc_extent in apply, as types. This allows the compiler to reason about what will happen, and call the correct compiled method, in a stable way without worrying about

- + \ No newline at end of file diff --git a/dev/explanations/winding_order.html b/dev/explanations/winding_order.html index 709b58dce..8c01ccd87 100644 --- a/dev/explanations/winding_order.html +++ b/dev/explanations/winding_order.html @@ -8,17 +8,17 @@ - + - - - + + +
Skip to content
- + \ No newline at end of file diff --git a/dev/hashmap.json b/dev/hashmap.json index 5f043b5f1..c3b6bc7df 100644 --- a/dev/hashmap.json +++ b/dev/hashmap.json @@ -1 +1 @@ -{"api.md":"Bk3hzA-P","call_notes.md":"CbnJ0VFx","experiments_accurate_accumulators.md":"DuCPtDRZ","experiments_predicates.md":"KukwllNF","explanations_crs.md":"C7m2R2Fj","explanations_paradigms.md":"xd5T5AbR","explanations_peculiarities.md":"C5TjJTeI","explanations_winding_order.md":"CzxPIM1I","index.md":"BFdtMPYM","introduction.md":"CwyrQfOw","source_geometryops.md":"BWgA5IIo","source_geometryopsflexijoinsext_geometryopsflexijoinsext.md":"D3ozcglS","source_geometryopslibgeosext_buffer.md":"CbY5NGvL","source_geometryopslibgeosext_geometryopslibgeosext.md":"DPeG-P6A","source_geometryopslibgeosext_segmentize.md":"Q_Gm5QTR","source_geometryopslibgeosext_simple_overrides.md":"BM03vzNZ","source_geometryopslibgeosext_simplify.md":"Dkpr7UA7","source_geometryopsprojext_geometryopsprojext.md":"Bior9t6L","source_geometryopsprojext_reproject.md":"CiSVYFrY","source_geometryopsprojext_segmentize.md":"DGh0GBgT","source_methods_angles.md":"CHjiX-2k","source_methods_area.md":"C5hcUKTw","source_methods_barycentric.md":"DWoHpdkh","source_methods_buffer.md":"BlEAImCj","source_methods_centroid.md":"tRC5gC2-","source_methods_clipping_clipping_processor.md":"Ce9f2Uiw","source_methods_clipping_coverage.md":"DOZ0xpXd","source_methods_clipping_cut.md":"mZmT7Z3Z","source_methods_clipping_difference.md":"DH8fmajn","source_methods_clipping_intersection.md":"CTbTKq2Z","source_methods_clipping_predicates.md":"DO1buU2r","source_methods_clipping_union.md":"vI_3OIg3","source_methods_convex_hull.md":"CPYN7s27","source_methods_distance.md":"Bc7lFF-i","source_methods_equals.md":"BJrQK7ih","source_methods_geom_relations_contains.md":"CqN31Kcv","source_methods_geom_relations_coveredby.md":"DAW-T1ry","source_methods_geom_relations_covers.md":"ByYJUB6K","source_methods_geom_relations_crosses.md":"BvkmeuqD","source_methods_geom_relations_disjoint.md":"urjKKiWI","source_methods_geom_relations_geom_geom_processors.md":"nbCs0NfI","source_methods_geom_relations_intersects.md":"BnMqMLYY","source_methods_geom_relations_overlaps.md":"sexJjn0l","source_methods_geom_relations_touches.md":"BZdsIwcm","source_methods_geom_relations_within.md":"djHz5LPE","source_methods_orientation.md":"Ph8Nq2JT","source_methods_polygonize.md":"82gzC_fG","source_not_implemented_yet.md":"ChYg0QGr","source_primitives.md":"CphxEvTN","source_src_apply.md":"DOPh9oqf","source_src_applyreduce.md":"SuS0iM3N","source_src_geometry_utils.md":"Btyz5R1v","source_src_geometryopscore.md":"BqzqjdCw","source_src_keyword_docs.md":"B6dN1uTp","source_src_other_primitives.md":"w6TkOrmH","source_src_types.md":"BuVKG-gS","source_transformations_correction_closed_ring.md":"DWFgEYUs","source_transformations_correction_geometry_correction.md":"BXPDjswt","source_transformations_correction_intersecting_polygons.md":"CQInphCg","source_transformations_extent.md":"DR8xvbQc","source_transformations_flip.md":"CwXJrYBS","source_transformations_reproject.md":"DDeoCapS","source_transformations_segmentize.md":"CxlHC2Gx","source_transformations_simplify.md":"B-TTeZcj","source_transformations_transform.md":"CM0vpoQb","source_transformations_tuples.md":"CMapxQhK","source_types.md":"BYkUclBX","source_utils.md":"D9wEaJdW","tutorials_creating_geometry.md":"D4aO0Mq8","tutorials_geodesic_paths.md":"D6mnfCpA","tutorials_spatial_joins.md":"Cn2Qsvbo"} +{"api.md":"rwOlNC64","call_notes.md":"4XfLIuCb","experiments_accurate_accumulators.md":"M4qZ7KkV","experiments_predicates.md":"C8AAp4W9","explanations_crs.md":"hL3zygs6","explanations_paradigms.md":"5swduggE","explanations_peculiarities.md":"X2E97mNU","explanations_winding_order.md":"Dpaehb2f","index.md":"CUD5AAwV","introduction.md":"CvSgtF5Z","source_geometryops.md":"c3RKO_GD","source_geometryopsflexijoinsext_geometryopsflexijoinsext.md":"HBhep5dV","source_geometryopslibgeosext_buffer.md":"Brzai-EG","source_geometryopslibgeosext_geometryopslibgeosext.md":"DXXByX-R","source_geometryopslibgeosext_segmentize.md":"DaXDPzTK","source_geometryopslibgeosext_simple_overrides.md":"MFwVo7KW","source_geometryopslibgeosext_simplify.md":"BZkQX4Vm","source_geometryopsprojext_geometryopsprojext.md":"Dj40qLug","source_geometryopsprojext_reproject.md":"Bt073qSk","source_geometryopsprojext_segmentize.md":"CohFVrr_","source_methods_angles.md":"DsOXdPpI","source_methods_area.md":"BjXXoCxC","source_methods_barycentric.md":"BTrbxQPB","source_methods_buffer.md":"CrtOsAlT","source_methods_centroid.md":"BULl7_Qs","source_methods_clipping_clipping_processor.md":"D4hdTK_U","source_methods_clipping_coverage.md":"C1wj_p67","source_methods_clipping_cut.md":"bDSdCW_w","source_methods_clipping_difference.md":"BBSGhdHU","source_methods_clipping_intersection.md":"CTqsFPDc","source_methods_clipping_predicates.md":"BO8YbwMP","source_methods_clipping_union.md":"C3409Ldy","source_methods_convex_hull.md":"rnPSMljy","source_methods_distance.md":"CT4mop5i","source_methods_equals.md":"f5dhabGy","source_methods_geom_relations_contains.md":"C6IZusKv","source_methods_geom_relations_coveredby.md":"D1UaUGPE","source_methods_geom_relations_covers.md":"CxXPAOw2","source_methods_geom_relations_crosses.md":"DGEGsJXB","source_methods_geom_relations_disjoint.md":"DSyNMkAr","source_methods_geom_relations_geom_geom_processors.md":"U9N4Zvs6","source_methods_geom_relations_intersects.md":"Tj0d-LRw","source_methods_geom_relations_overlaps.md":"Dsrv3zV8","source_methods_geom_relations_touches.md":"DEzd_chO","source_methods_geom_relations_within.md":"DMC21lAv","source_methods_orientation.md":"CJJPLosz","source_methods_polygonize.md":"CVeeXkcB","source_not_implemented_yet.md":"DW1FcB6-","source_primitives.md":"Y-Ywjmd3","source_src_apply.md":"Cv2-2CFT","source_src_applyreduce.md":"CQegM7Zd","source_src_geometry_utils.md":"BNP4rp8d","source_src_geometryopscore.md":"4mMc6kXF","source_src_keyword_docs.md":"eVWchhDH","source_src_other_primitives.md":"CgdSSOvp","source_src_types.md":"BdEMpQc2","source_transformations_correction_closed_ring.md":"Dd17xmiZ","source_transformations_correction_geometry_correction.md":"DE69CO9L","source_transformations_correction_intersecting_polygons.md":"CFkNbc53","source_transformations_extent.md":"ThGs0SdP","source_transformations_flip.md":"C7zLbbf9","source_transformations_reproject.md":"BkVaiWF-","source_transformations_segmentize.md":"wXWOTiiN","source_transformations_simplify.md":"D_r3vfXj","source_transformations_transform.md":"BPmSBXwZ","source_transformations_tuples.md":"CpU1coFs","source_types.md":"CMxPFJNV","source_utils.md":"DlH2iY7N","tutorials_creating_geometry.md":"BTBCrl8q","tutorials_geodesic_paths.md":"DkbgDT9U","tutorials_spatial_joins.md":"BlaPD1R3"} diff --git a/dev/index.html b/dev/index.html index ea3bba179..52501687d 100644 --- a/dev/index.html +++ b/dev/index.html @@ -8,17 +8,17 @@ - + - - - + + +
Skip to content

GeometryOps.jl

Blazing fast geometry operations in pure Julia

GeometryOps

What is GeometryOps.jl?

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

How to navigate the docs

GeometryOps' docs are divided into three main sections: tutorials, explanations and source code.
Documentation and examples for many functions can be found in the source code section, since we use literate programming in GeometryOps.

  • Tutorials are meant to teach the fundamental concepts behind GeometryOps, and how to perform certain operations.
  • Explanations usually contain little code, and explain in more detail how GeometryOps works.
  • Source code usually contains explanations and examples at the top of the page, followed by annotated source code from that file.
- + \ No newline at end of file diff --git a/dev/introduction.html b/dev/introduction.html index 0224ed693..07a7c701b 100644 --- a/dev/introduction.html +++ b/dev/introduction.html @@ -8,17 +8,17 @@ - + - - - + + +
Skip to content

Introduction

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

Main concepts

The apply paradigm

Note

See the Primitive Functions page for more information on this.

The apply function allows you to decompose a given collection of geometries down to a certain level, and then operate on it.

Functionally, it's similar to map in the way you apply it to geometries.

apply and applyreduce take any geometry, vector of geometries, collection of geometries, or table (like Shapefile.Table, DataFrame, or GeoTable)!

What's this GeoInterface.Wrapper thing?

Write a comment about GeoInterface.Wrapper and why it helps in type stability to guarantee a particular return type.

- + \ No newline at end of file diff --git a/dev/source/GeometryOps.html b/dev/source/GeometryOps.html index a239e55cc..9a570c4ab 100644 --- a/dev/source/GeometryOps.html +++ b/dev/source/GeometryOps.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -98,7 +98,7 @@ end end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/GeometryOpsFlexiJoinsExt/GeometryOpsFlexiJoinsExt.html b/dev/source/GeometryOpsFlexiJoinsExt/GeometryOpsFlexiJoinsExt.html index 9d28cffc0..a22cbe211 100644 --- a/dev/source/GeometryOpsFlexiJoinsExt/GeometryOpsFlexiJoinsExt.html +++ b/dev/source/GeometryOpsFlexiJoinsExt/GeometryOpsFlexiJoinsExt.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -34,7 +34,7 @@ FlexiJoins.swap_sides(::typeof(GO.within)) = GO.contains FlexiJoins.swap_sides(::typeof(GO.coveredby)) = GO.covers FlexiJoins.swap_sides(::typeof(GO.covers)) = GO.coveredby

That's a wrap, folks!

julia
end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/GeometryOpsLibGEOSExt/GeometryOpsLibGEOSExt.html b/dev/source/GeometryOpsLibGEOSExt/GeometryOpsLibGEOSExt.html index 6799dea01..f7f6db26f 100644 --- a/dev/source/GeometryOpsLibGEOSExt/GeometryOpsLibGEOSExt.html +++ b/dev/source/GeometryOpsLibGEOSExt/GeometryOpsLibGEOSExt.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -48,7 +48,7 @@ include("simple_overrides.jl") end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/GeometryOpsLibGEOSExt/buffer.html b/dev/source/GeometryOpsLibGEOSExt/buffer.html index d911b1d75..7913557ef 100644 --- a/dev/source/GeometryOpsLibGEOSExt/buffer.html +++ b/dev/source/GeometryOpsLibGEOSExt/buffer.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -48,7 +48,7 @@ return _wrap(newgeom; crs = GI.crs(geom), calc_extent) end end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/GeometryOpsLibGEOSExt/segmentize.html b/dev/source/GeometryOpsLibGEOSExt/segmentize.html index 71ed4b1e7..b8d177dee 100644 --- a/dev/source/GeometryOpsLibGEOSExt/segmentize.html +++ b/dev/source/GeometryOpsLibGEOSExt/segmentize.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -38,7 +38,7 @@ threaded ) end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/GeometryOpsLibGEOSExt/simple_overrides.html b/dev/source/GeometryOpsLibGEOSExt/simple_overrides.html index 35105cf80..143e8a367 100644 --- a/dev/source/GeometryOpsLibGEOSExt/simple_overrides.html +++ b/dev/source/GeometryOpsLibGEOSExt/simple_overrides.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -63,7 +63,7 @@ calc_extent = false ) end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/GeometryOpsLibGEOSExt/simplify.html b/dev/source/GeometryOpsLibGEOSExt/simplify.html index a81b7ece3..aee930132 100644 --- a/dev/source/GeometryOpsLibGEOSExt/simplify.html +++ b/dev/source/GeometryOpsLibGEOSExt/simplify.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -46,7 +46,7 @@ kw... ) end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/GeometryOpsProjExt/GeometryOpsProjExt.html b/dev/source/GeometryOpsProjExt/GeometryOpsProjExt.html index 56f662b3b..a6b1e3496 100644 --- a/dev/source/GeometryOpsProjExt/GeometryOpsProjExt.html +++ b/dev/source/GeometryOpsProjExt/GeometryOpsProjExt.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -25,7 +25,7 @@ include("segmentize.jl") end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/GeometryOpsProjExt/reproject.html b/dev/source/GeometryOpsProjExt/reproject.html index bab26f911..5e72fc4ca 100644 --- a/dev/source/GeometryOpsProjExt/reproject.html +++ b/dev/source/GeometryOpsProjExt/reproject.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -61,7 +61,7 @@ end end end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/GeometryOpsProjExt/segmentize.html b/dev/source/GeometryOpsProjExt/segmentize.html index 4f076e9aa..f82c24cef 100644 --- a/dev/source/GeometryOpsProjExt/segmentize.html +++ b/dev/source/GeometryOpsProjExt/segmentize.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -36,7 +36,7 @@ end

End the line with the original coordinate, to avoid any multiplication errors.

julia
    push!(new_coords, (x2, y2))
     return nothing
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/angles.html b/dev/source/methods/angles.html index 08cb26c18..d33a4e43b 100644 --- a/dev/source/methods/angles.html +++ b/dev/source/methods/angles.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -22,7 +22,7 @@ using Makie, CairoMakie rect = GI.Polygon([[(0.0, 0.0), (0.0, 1.0), (1.0, 1.0), (1.0, 0.0), (0.0, 0.0)]]) -f, a, p = poly(collect(GI.getpoint(rect)); axis = (; aspect = DataAspect()))

This is clearly a rectangle, with angles of 90 degrees.

julia
GO.angles(rect)  # [90, 90, 90, 90]
4-element Vector{Float64}:
+f, a, p = poly(collect(GI.getpoint(rect)); axis = (; aspect = DataAspect()))

This is clearly a rectangle, with angles of 90 degrees.

julia
GO.angles(rect)  # [90, 90, 90, 90]
4-element Vector{Float64}:
  90.0
  90.0
  90.0
@@ -141,7 +141,7 @@
     angle = real(acos(val) * 180 / π)
     return angle * (cross_prod < 0 ? -1 : 1)
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/area.html b/dev/source/methods/area.html index b7b1fcf06..7db02c6cd 100644 --- a/dev/source/methods/area.html +++ b/dev/source/methods/area.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,10 +23,10 @@ using CairoMakie rect = GI.Polygon([[(0,0), (0,1), (1,1), (1,0), (0, 0)]]) -f, a, p = poly(collect(GI.getpoint(rect)); axis = (; aspect = DataAspect()))

This is clearly a rectangle, etc. But now let's look at how the points look:

julia
lines!(
+f, a, p = poly(collect(GI.getpoint(rect)); axis = (; aspect = DataAspect()))

This is clearly a rectangle, etc. But now let's look at how the points look:

julia
lines!(
     collect(GI.getpoint(rect));
     color = 1:GI.npoint(rect), linewidth = 10.0)
-f

The points are ordered in a counterclockwise fashion, which means that the signed area is negative. If we reverse the order of the points, we get a positive area.

julia
GO.signed_area(rect)  # -1.0
-1.0

Implementation

This is the GeoInterface-compatible implementation. First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that area and signed area are zero for all points and curves, even if the curves are closed like with a linear ring. Also note that signed area really only makes sense for polygons, given with a multipolygon can have several polygons each with a different orientation and thus the absolute value of the signed area might not be the area. This is why signed area is only implemented for polygons.

Targets for applys functions

julia
const _AREA_TARGETS = TraitTarget{Union{GI.PolygonTrait,GI.AbstractCurveTrait,GI.MultiPointTrait,GI.PointTrait}}()
+f

The points are ordered in a counterclockwise fashion, which means that the signed area is negative. If we reverse the order of the points, we get a positive area.

julia
GO.signed_area(rect)  # -1.0
-1.0

Implementation

This is the GeoInterface-compatible implementation. First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that area and signed area are zero for all points and curves, even if the curves are closed like with a linear ring. Also note that signed area really only makes sense for polygons, given with a multipolygon can have several polygons each with a different orientation and thus the absolute value of the signed area might not be the area. This is why signed area is only implemented for polygons.

Targets for applys functions

julia
const _AREA_TARGETS = TraitTarget{Union{GI.PolygonTrait,GI.AbstractCurveTrait,GI.MultiPointTrait,GI.PointTrait}}()
 
 """
     area(geom, [T = Float64])::T
@@ -104,7 +104,7 @@
     area += _area_component(p1, p2)
     return T(area / 2)
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/barycentric.html b/dev/source/methods/barycentric.html index eb9d6330f..58f686563 100644 --- a/dev/source/methods/barycentric.html +++ b/dev/source/methods/barycentric.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -84,7 +84,7 @@ # and render! hm = heatmap!(a2, xrange, yrange, mean_values; colormap = p1.colormap, colorrange = p1.plots[1].colorrange[], xautolimits = false, yautolimits = false) translate!(hm, 0, 0, -1) # translate the heatmap behind the cropping polygon! -f # finally, display the figure

Barycentric-coordinate API

In some cases, we actually want barycentric interpolation, and have no interest in the coordinates themselves.

However, the coordinates can be useful for debugging, and when performing 3D rendering, multiple barycentric values (depth, uv) are needed for depth buffering.

julia
const _VecTypes = Union{Tuple{Vararg{T, N}}, GeometryBasics.StaticArraysCore.StaticArray{Tuple{N}, T, 1}} where {N, T}
+f # finally, display the figure

Barycentric-coordinate API

In some cases, we actually want barycentric interpolation, and have no interest in the coordinates themselves.

However, the coordinates can be useful for debugging, and when performing 3D rendering, multiple barycentric values (depth, uv) are needed for depth buffering.

julia
const _VecTypes = Union{Tuple{Vararg{T, N}}, GeometryBasics.StaticArraysCore.StaticArray{Tuple{N}, T, 1}} where {N, T}
 
 """
     abstract type AbstractBarycentricCoordinateMethod
@@ -432,7 +432,7 @@
 
 struct Wachspress <: AbstractBarycentricCoordinateMethod
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/buffer.html b/dev/source/methods/buffer.html index 20faa436e..82a5c4b9d 100644 --- a/dev/source/methods/buffer.html +++ b/dev/source/methods/buffer.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -28,7 +28,7 @@ println(io, " in your REPL, \nor otherwise loading LibGEOS.jl via using or import.") end end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/centroid.html b/dev/source/methods/centroid.html index 8a774459f..6aa0b540d 100644 --- a/dev/source/methods/centroid.html +++ b/dev/source/methods/centroid.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -23,9 +23,9 @@ using CairoMakie cshape = GI.Polygon([[(0,0), (0,3), (3,3), (3,2), (1,2), (1,1), (3,1), (3,0), (0,0)]]) -f, a, p = poly(collect(GI.getpoint(cshape)); axis = (; aspect = DataAspect()))

Let's see what the centroid looks like (plotted in red):

julia
cent = GO.centroid(cshape)
+f, a, p = poly(collect(GI.getpoint(cshape)); axis = (; aspect = DataAspect()))

Let's see what the centroid looks like (plotted in red):

julia
cent = GO.centroid(cshape)
 scatter!(GI.x(cent), GI.y(cent), color = :red)
-f

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that if you call centroid on a LineString or LinearRing, the centroid_and_length function will be called due to the weighting scheme described above, while centroid_and_area is called for polygons and multipolygons. However, centroid_and_area can still be called on a LineString or LinearRing when they are closed, for example as the interior hole of a polygon.

The helper functions centroid_and_length and centroid_and_area are made available just in case the user also needs the area or length to decrease repeat computation.

julia
"""
+f

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that if you call centroid on a LineString or LinearRing, the centroid_and_length function will be called due to the weighting scheme described above, while centroid_and_area is called for polygons and multipolygons. However, centroid_and_area can still be called on a LineString or LinearRing when they are closed, for example as the interior hole of a polygon.

The helper functions centroid_and_length and centroid_and_area are made available just in case the user also needs the area or length to decrease repeat computation.

julia
"""
     centroid(geom, [T=Float64])::Tuple{T, T}
 
 Returns the centroid of a given line segment, linear ring, polygon, or
@@ -110,7 +110,7 @@
     y = (y1 * area1 + y2 * area2) / area
     return (x, y), area
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/clipping/clipping_processor.html b/dev/source/methods/clipping/clipping_processor.html index 15b84a906..9637ace26 100644 --- a/dev/source/methods/clipping/clipping_processor.html +++ b/dev/source/methods/clipping/clipping_processor.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -525,7 +525,7 @@ end return end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/clipping/coverage.html b/dev/source/methods/clipping/coverage.html index a4d8ce8cb..e98c7df6f 100644 --- a/dev/source/methods/clipping/coverage.html +++ b/dev/source/methods/clipping/coverage.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -27,7 +27,7 @@ xmin, xmax, ymin, ymax = 0, 2, 0, 2 f, a, p = poly(collect(GI.getpoint(cell)); axis = (; aspect = DataAspect())) poly!(collect(GI.getpoint(rect))) -f

It is clear that half of the polygon is within the cell, so the coverage should be 1.0, half of the area of the rectangle.

julia
GO.coverage(rect, xmin, xmax, ymin, ymax)
1.0

Implementation

This is the GeoInterface-compatible implementation. First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that the coverage is zero for all points and curves, even if the curves are closed like with a linear ring.

Targets for applys functions

julia
const _COVERAGE_TARGETS = TraitTarget{Union{GI.PolygonTrait,GI.AbstractCurveTrait,GI.MultiPointTrait,GI.PointTrait}}()

Wall types for coverage

julia
const UNKNOWN, NORTH, EAST, SOUTH, WEST = 0:4
+f

It is clear that half of the polygon is within the cell, so the coverage should be 1.0, half of the area of the rectangle.

julia
GO.coverage(rect, xmin, xmax, ymin, ymax)
1.0

Implementation

This is the GeoInterface-compatible implementation. First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that the coverage is zero for all points and curves, even if the curves are closed like with a linear ring.

Targets for applys functions

julia
const _COVERAGE_TARGETS = TraitTarget{Union{GI.PolygonTrait,GI.AbstractCurveTrait,GI.MultiPointTrait,GI.PointTrait}}()

Wall types for coverage

julia
const UNKNOWN, NORTH, EAST, SOUTH, WEST = 0:4
 
 """
     coverage(geom, xmin, xmax, ymin, ymax, [T = Float64])::T
@@ -240,7 +240,7 @@
     y_wall = (wall == NORTH || wall == WEST) ? ymax : ymin
     return x1 * y_wall - x_wall * y1
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/clipping/cut.html b/dev/source/methods/clipping/cut.html index 1a235b252..51decd653 100644 --- a/dev/source/methods/clipping/cut.html +++ b/dev/source/methods/clipping/cut.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -28,7 +28,7 @@ f, a, p1 = Makie.poly(collect(GI.getpoint(cut_polys[1])); color = (:blue, 0.5)) Makie.poly!(collect(GI.getpoint(cut_polys[2])); color = (:orange, 0.5)) Makie.lines!(GI.getpoint(line); color = :black) -f

Implementation

This function depends on polygon clipping helper function and is inspired by the Greiner-Hormann clipping algorithm used elsewhere in this library. The inspiration came from this Stack Overflow discussion.

julia
"""
+f

Implementation

This function depends on polygon clipping helper function and is inspired by the Greiner-Hormann clipping algorithm used elsewhere in this library. The inspiration came from this Stack Overflow discussion.

julia
"""
     cut(geom, line, [T::Type])
 
 Return given geom cut by given line as a list of geometries of the same type as the input
@@ -104,7 +104,7 @@
     end
     return return_coords
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/clipping/difference.html b/dev/source/methods/clipping/difference.html index f782643be..3fae4be64 100644 --- a/dev/source/methods/clipping/difference.html +++ b/dev/source/methods/clipping/difference.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -183,7 +183,7 @@ ) return nothing end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/clipping/intersection.html b/dev/source/methods/clipping/intersection.html index 53b459e0e..af543d8c1 100644 --- a/dev/source/methods/clipping/intersection.html +++ b/dev/source/methods/clipping/intersection.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -400,7 +400,7 @@ α, β = _clamped_frac(distance(min_pt, a2, T), a_dist, eps(T)), one(T) - eps(T) end

Return point with smallest distance

julia
    return _tuple_point(min_pt, T), α, β
 end

Return value of x/y clamped between ϵ and 1 - ϵ

julia
_clamped_frac(x::T, y::T, ϵ = zero(T)) where T = clamp(x / y, ϵ, one(T) - ϵ)

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/clipping/predicates.html b/dev/source/methods/clipping/predicates.html index 7b3201818..6bc2b7099 100644 --- a/dev/source/methods/clipping/predicates.html +++ b/dev/source/methods/clipping/predicates.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -61,7 +61,7 @@ end import .Predicates

If we want to inject adaptivity, we would do something like:

function cross(a, b, c) # try Predicates._cross_naive(a, b, c) # check the error bound there # then try Predicates._cross_adaptive(a, b, c) # then try Predicates._cross_exact end


This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/clipping/union.html b/dev/source/methods/clipping/union.html index 0da0d9271..b4f27bca3 100644 --- a/dev/source/methods/clipping/union.html +++ b/dev/source/methods/clipping/union.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -268,7 +268,7 @@ throw(ArgumentError("Union between $trait_a and $trait_b with target $Target isn't implemented yet.")) return nothing end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/convex_hull.html b/dev/source/methods/convex_hull.html index 027967a39..3f92e4248 100644 --- a/dev/source/methods/convex_hull.html +++ b/dev/source/methods/convex_hull.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -25,7 +25,7 @@ hull_poly = GO.convex_hull(points) lines!(a, hull_poly; label = "Convex hull", color = Makie.wong_colors()[2]) axislegend(a) -f

Convex hull of the USA

julia
import GeometryOps as GO, GeoInterface as GI
+f

Convex hull of the USA

julia
import GeometryOps as GO, GeoInterface as GI
 using CairoMakie # to plot
 using NaturalEarth # for data
 
@@ -33,7 +33,7 @@
 usa = all_adm0.geometry[findfirst(==("USA"), all_adm0.ADM0_A3)]
 f, a, p = lines(usa)
 lines!(a, GO.convex_hull(usa); color = Makie.wong_colors()[2])
-f

Investigating the winding order

The winding order of the monotone chain method is counterclockwise, while the winding order of the GEOS method is clockwise.

GeometryOps' convexity detection says that the GEOS hull is convex, while the monotone chain method hull is not. However, they are both going over the same points (we checked), it's just that the winding order is different.

In reality, both sets are convex, but we need to fix the GeometryOps convexity detector (isconcave)!

We may also decide at a later date to change the returned winding order of the polygon, but most algorithms are robust to that, and you can always fix it...

julia
import GeoInterface as GI, GeometryOps as GO, LibGEOS as LG
+f

Investigating the winding order

The winding order of the monotone chain method is counterclockwise, while the winding order of the GEOS method is clockwise.

GeometryOps' convexity detection says that the GEOS hull is convex, while the monotone chain method hull is not. However, they are both going over the same points (we checked), it's just that the winding order is different.

In reality, both sets are convex, but we need to fix the GeometryOps convexity detector (isconcave)!

We may also decide at a later date to change the returned winding order of the polygon, but most algorithms are robust to that, and you can always fix it...

julia
import GeoInterface as GI, GeometryOps as GO, LibGEOS as LG
 using CairoMakie # to plot
 
 points = rand(Point2{Float64}, 100)
@@ -44,7 +44,7 @@
 a1, p1 = lines(fig[1, 1], go_hull; color = 1:GI.npoint(go_hull), axis = (; title = "MonotoneChainMethod()"))
 a2, p2 = lines(fig[2, 1], lg_hull; color = 1:GI.npoint(lg_hull), axis = (; title = "GEOS()"))
 cb = Colorbar(fig[1:2, 2], p1; label = "Vertex number")
-fig

Implementation

julia
"""
+fig

Implementation

julia
"""
     convex_hull([method], geometries)
 
 Compute the convex hull of the points in `geometries`.
@@ -74,7 +74,7 @@
 struct MonotoneChainMethod end

GrahamScanMethod, etc. can be implemented in GO as well, if someone wants to. If we add an extension on Quickhull.jl, then that would be another algorithm.

julia
convex_hull(geometries) = convex_hull(MonotoneChainMethod(), geometries)

TODO: have this respect the CRS by pulling it out of geometries.

julia
function convex_hull(::MonotoneChainMethod, geometries)

Extract all points as tuples. We have to collect and allocate here, because DelaunayTriangulation only accepts vectors of point-like geoms.

Cleanest would be to use the iterable from GO.flatten directly, but that would require us to implement the convex hull algorithm directly.

TODO: create a specialized method that extracts only the information required, GeometryBasics points can be passed through directly.

julia
    points = collect(flatten(tuples, GI.PointTrait, geometries))

Compute the convex hull using DelTri (shorthand for DelaunayTriangulation.jl).

julia
    hull = DelaunayTriangulation.convex_hull(points)

Convert the result to a GI.Polygon and return it. View would be more efficient here, but re-allocating is cleaner.

julia
    point_vec = DelaunayTriangulation.get_points(hull)[DelaunayTriangulation.get_vertices(hull)]
     return GI.Polygon([GI.LinearRing(point_vec)])
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/distance.html b/dev/source/methods/distance.html index f1db62704..080d9d313 100644 --- a/dev/source/methods/distance.html +++ b/dev/source/methods/distance.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -28,13 +28,13 @@ f, a, p = poly(collect(GI.getpoint(rect)); axis = (; aspect = DataAspect())) scatter!(GI.x(point_in), GI.y(point_in); color = :red) scatter!(GI.x(point_out), GI.y(point_out); color = :orange) -f

This is clearly a rectangle with one point inside and one point outside. The points are both an equal distance to the polygon. The distance to point_in is negative while the distance to point_out is positive.

julia
(
+f

This is clearly a rectangle with one point inside and one point outside. The points are both an equal distance to the polygon. The distance to point_in is negative while the distance to point_out is positive.

julia
(
 GO.distance(point_in, rect),  # == 0
 GO.signed_distance(point_in, rect),  # < 0
 GO.signed_distance(point_out, rect)  # > 0
 )
(0.0, -0.5, 0.5)

Consider also a heatmap of signed distances around this object:

julia
xrange = yrange = LinRange(-0.5, 1.5, 300)
 f, a, p = heatmap(xrange, yrange, GO.signed_distance.(Point2f.(xrange, yrange'), Ref(rect)); colormap = :RdBu, colorrange = (-0.75, 0.75))
-a.aspect = DataAspect(); Colorbar(f[1, 2], p, label = "Signed distance"); lines!(a, GI.convert(GO.GeometryBasics, rect)); f

Implementation

This is the GeoInterface-compatible implementation. First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Distance and signed distance are only implemented for points to other geometries right now. This could be extended to include distance from other geometries in the future.

The distance calculated is the Euclidean distance using the Pythagorean theorem. Also note that singed_distance only makes sense for "filled-in" shapes, like polygons, so it isn't implemented for curves.

julia
const _DISTANCE_TARGETS = TraitTarget{Union{GI.AbstractPolygonTrait,GI.LineStringTrait,GI.LinearRingTrait,GI.LineTrait,GI.PointTrait}}()
+a.aspect = DataAspect(); Colorbar(f[1, 2], p, label = "Signed distance"); lines!(a, GI.convert(GO.GeometryBasics, rect)); f

Implementation

This is the GeoInterface-compatible implementation. First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Distance and signed distance are only implemented for points to other geometries right now. This could be extended to include distance from other geometries in the future.

The distance calculated is the Euclidean distance using the Pythagorean theorem. Also note that singed_distance only makes sense for "filled-in" shapes, like polygons, so it isn't implemented for curves.

julia
const _DISTANCE_TARGETS = TraitTarget{Union{GI.AbstractPolygonTrait,GI.LineStringTrait,GI.LinearRingTrait,GI.LineTrait,GI.PointTrait}}()
 
 """
     distance(point, geom, ::Type{T} = Float64)::T
@@ -198,7 +198,7 @@
     end
     return min_dist
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/equals.html b/dev/source/methods/equals.html index b8eab0b91..59140b28d 100644 --- a/dev/source/methods/equals.html +++ b/dev/source/methods/equals.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -28,7 +28,7 @@ scatter!(GI.getpoint(l1), color = :blue) lines!(GI.getpoint(l2), color = :orange) scatter!(GI.getpoint(l2), color = :orange) -f

We can see that the two lines do not share a common set of points and edges in the plot, so they are not equal:

julia
GO.equals(l1, l2)  # returns false
false

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that while we need the same set of points and edges, they don't need to be provided in the same order for polygons. For for example, we need the same set points for two multipoints to be equal, but they don't have to be saved in the same order. The winding order also doesn't have to be the same to represent the same geometry. This requires checking every point against every other point in the two geometries we are comparing. Also, some geometries must be "closed" like polygons and linear rings. These will be assumed to be closed, even if they don't have a repeated last point explicitly written in the coordinates. Additionally, geometries and multi-geometries can be equal if the multi-geometry only includes that single geometry.

julia
"""
+f

We can see that the two lines do not share a common set of points and edges in the plot, so they are not equal:

julia
GO.equals(l1, l2)  # returns false
false

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that while we need the same set of points and edges, they don't need to be provided in the same order for polygons. For for example, we need the same set points for two multipoints to be equal, but they don't have to be saved in the same order. The winding order also doesn't have to be the same to represent the same geometry. This requires checking every point against every other point in the two geometries we are comparing. Also, some geometries must be "closed" like polygons and linear rings. These will be assumed to be closed, even if they don't have a repeated last point explicitly written in the coordinates. Additionally, geometries and multi-geometries can be equal if the multi-geometry only includes that single geometry.

julia
"""
     equals(geom1, geom2)::Bool
 
 Compare two Geometries return true if they are the same geometry.
@@ -282,7 +282,7 @@
     end
     return true
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/geom_relations/contains.html b/dev/source/methods/geom_relations/contains.html index 9e0fb92a8..892fc665d 100644 --- a/dev/source/methods/geom_relations/contains.html +++ b/dev/source/methods/geom_relations/contains.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -28,7 +28,7 @@ scatter!(GI.getpoint(l1), color = :blue) lines!(GI.getpoint(l2), color = :orange) scatter!(GI.getpoint(l2), color = :orange) -f

We can see that all of the points and edges of l2 are within l1, so l1 contains l2. However, l2 does not contain l1.

julia
GO.contains(l1, l2)  # returns true
+f

We can see that all of the points and edges of l2 are within l1, so l1 contains l2. However, l2 does not contain l1.

julia
GO.contains(l1, l2)  # returns true
 GO.contains(l2, l1)  # returns false
false

Implementation

This is the GeoInterface-compatible implementation.

Given that contains is the exact opposite of within, we simply pass the two inputs variables, swapped in order, to within.

julia
"""
     contains(g1::AbstractGeometry, g2::AbstractGeometry)::Bool
 
@@ -50,7 +50,7 @@
 ```
 """
 contains(g1, g2) = GeometryOps.within(g2, g1)

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/geom_relations/coveredby.html b/dev/source/methods/geom_relations/coveredby.html index 11e92e9a6..6102cef6f 100644 --- a/dev/source/methods/geom_relations/coveredby.html +++ b/dev/source/methods/geom_relations/coveredby.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -26,7 +26,7 @@ l1 = GI.Line([p1, (1.0, 1.0)]) f, a, p = lines(GI.getpoint(l1)) scatter!(p1, color = :red) -f

As we can see, p1 is on the endpoint of l1. This means it is not within, but it does meet the definition of coveredby.

julia
GO.coveredby(p1, l1)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait.

Each of these calls a method in the geom_geom_processors file. The methods in this file determine if the given geometries meet a set of criteria. For the coveredby function and arguments g1 and g2, this criteria is as follows: - points of g1 are allowed to be in the interior of g2 (either through overlap or crossing for lines) - points of g1 are allowed to be on the boundary of g2 - points of g1 are not allowed to be in the exterior of g2 - no points of g1 are required to be in the interior of g2 - no points of g1 are required to be on the boundary of g2 - no points of g1 are required to be in the exterior of g2

The code for the specific implementations is in the geom_geom_processors file.

julia
const COVEREDBY_ALLOWS = (in_allow = true, on_allow = true, out_allow = false)
+f

As we can see, p1 is on the endpoint of l1. This means it is not within, but it does meet the definition of coveredby.

julia
GO.coveredby(p1, l1)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait.

Each of these calls a method in the geom_geom_processors file. The methods in this file determine if the given geometries meet a set of criteria. For the coveredby function and arguments g1 and g2, this criteria is as follows: - points of g1 are allowed to be in the interior of g2 (either through overlap or crossing for lines) - points of g1 are allowed to be on the boundary of g2 - points of g1 are not allowed to be in the exterior of g2 - no points of g1 are required to be in the interior of g2 - no points of g1 are required to be on the boundary of g2 - no points of g1 are required to be in the exterior of g2

The code for the specific implementations is in the geom_geom_processors file.

julia
const COVEREDBY_ALLOWS = (in_allow = true, on_allow = true, out_allow = false)
 const COVEREDBY_CURVE_ALLOWS = (over_allow = true, cross_allow = true, on_allow = true, out_allow = false)
 const COVEREDBY_CURVE_REQUIRES = (in_require = false, on_require = false, out_require = false)
 const COVEREDBY_POLYGON_REQUIRES = (in_require = true, on_require = false, out_require = false,)
@@ -200,7 +200,7 @@
     end
     return true
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/geom_relations/covers.html b/dev/source/methods/geom_relations/covers.html index c74ec7999..656d9763f 100644 --- a/dev/source/methods/geom_relations/covers.html +++ b/dev/source/methods/geom_relations/covers.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -28,7 +28,7 @@ f, a, p = lines(GI.getpoint(l1)) scatter!(p1, color = :red) -f

julia
GO.covers(l1, p1)  # returns true
+f

julia
GO.covers(l1, p1)  # returns true
 GO.covers(p1, l1)  # returns false
false

Implementation

This is the GeoInterface-compatible implementation.

Given that covers is the exact opposite of coveredby, we simply pass the two inputs variables, swapped in order, to coveredby.

julia
"""
     covers(g1::AbstractGeometry, g2::AbstractGeometry)::Bool
 
@@ -50,7 +50,7 @@
 ```
 """
 covers(g1, g2)::Bool = GeometryOps.coveredby(g2, g1)

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/geom_relations/crosses.html b/dev/source/methods/geom_relations/crosses.html index 9be9c19d8..e96923bdb 100644 --- a/dev/source/methods/geom_relations/crosses.html +++ b/dev/source/methods/geom_relations/crosses.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -137,7 +137,7 @@ end return false end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/geom_relations/disjoint.html b/dev/source/methods/geom_relations/disjoint.html index f05f5ec97..1b0dd2902 100644 --- a/dev/source/methods/geom_relations/disjoint.html +++ b/dev/source/methods/geom_relations/disjoint.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -28,7 +28,7 @@ scatter!(GI.getpoint(l1), color = :blue) lines!(GI.getpoint(l2), color = :orange) scatter!(GI.getpoint(l2), color = :orange) -f

We can see that none of the edges or vertices of l1 interact with l2 so they are disjoint.

julia
GO.disjoint(l1, l2)  # returns true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait.

Each of these calls a method in the geom_geom_processors file. The methods in this file determine if the given geometries meet a set of criteria. For the disjoint function and arguments g1 and g2, this criteria is as follows: - points of g1 are not allowed to be in the interior of g2 - points of g1 are not allowed to be on the boundary of g2 - points of g1 are allowed to be in the exterior of g2 - no points required to be in the interior of g2 - no points of g1 are required to be on the boundary of g2 - no points of g1 are required to be in the exterior of g2

The code for the specific implementations is in the geom_geom_processors file.

julia
const DISJOINT_ALLOWS = (in_allow = false, on_allow = false, out_allow = true)
+f

We can see that none of the edges or vertices of l1 interact with l2 so they are disjoint.

julia
GO.disjoint(l1, l2)  # returns true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait.

Each of these calls a method in the geom_geom_processors file. The methods in this file determine if the given geometries meet a set of criteria. For the disjoint function and arguments g1 and g2, this criteria is as follows: - points of g1 are not allowed to be in the interior of g2 - points of g1 are not allowed to be on the boundary of g2 - points of g1 are allowed to be in the exterior of g2 - no points required to be in the interior of g2 - no points of g1 are required to be on the boundary of g2 - no points of g1 are required to be in the exterior of g2

The code for the specific implementations is in the geom_geom_processors file.

julia
const DISJOINT_ALLOWS = (in_allow = false, on_allow = false, out_allow = true)
 const DISJOINT_CURVE_ALLOWS = (over_allow = false, cross_allow = false, on_allow = false, out_allow = true)
 const DISJOINT_REQUIRES = (in_require = false, on_require = false, out_require = false)
 const DISJOINT_EXACT = (exact = _False(),)
@@ -195,7 +195,7 @@
     end
     return true
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/geom_relations/geom_geom_processors.html b/dev/source/methods/geom_relations/geom_geom_processors.html index 4852d4fb0..aed8eb23b 100644 --- a/dev/source/methods/geom_relations/geom_geom_processors.html +++ b/dev/source/methods/geom_relations/geom_geom_processors.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -454,7 +454,7 @@ end return skip, returnval end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/geom_relations/intersects.html b/dev/source/methods/geom_relations/intersects.html index 7693ff878..6d1da7c70 100644 --- a/dev/source/methods/geom_relations/intersects.html +++ b/dev/source/methods/geom_relations/intersects.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -26,7 +26,7 @@ line2 = GI.Line([(123.354492,-15.961329), (127.22168,-14.008696)]) f, a, p = lines(GI.getpoint(line1)) lines!(GI.getpoint(line2)) -f

We can see that they intersect, so we expect intersects to return true, and we can visualize the intersection point in red.

julia
GO.intersects(line1, line2)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

Given that intersects is the exact opposite of disjoint, we simply pass the two inputs variables, swapped in order, to disjoint.

julia
"""
+f

We can see that they intersect, so we expect intersects to return true, and we can visualize the intersection point in red.

julia
GO.intersects(line1, line2)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

Given that intersects is the exact opposite of disjoint, we simply pass the two inputs variables, swapped in order, to disjoint.

julia
"""
     intersects(geom1, geom2)::Bool
 
 Return true if the interiors or boundaries of the two geometries interact.
@@ -44,7 +44,7 @@
 ```
 """
 intersects(geom1, geom2) = !disjoint(geom1, geom2)

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/geom_relations/overlaps.html b/dev/source/methods/geom_relations/overlaps.html index 246a54be4..2c3516cd6 100644 --- a/dev/source/methods/geom_relations/overlaps.html +++ b/dev/source/methods/geom_relations/overlaps.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -28,7 +28,7 @@ scatter!(GI.getpoint(l1), color = :blue) lines!(GI.getpoint(l2), color = :orange) scatter!(GI.getpoint(l2), color = :orange) -f

We can see that the two lines overlap in the plot:

julia
GO.overlaps(l1, l2)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that that since only elements of the same dimension can overlap, any two geometries with traits that are of different dimensions automatically can return false.

For geometries with the same trait dimension, we must make sure that they share a point, an edge, or area for points, lines, and polygons/multipolygons respectively, without being contained.

julia
"""
+f

We can see that the two lines overlap in the plot:

julia
GO.overlaps(l1, l2)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that that since only elements of the same dimension can overlap, any two geometries with traits that are of different dimensions automatically can return false.

For geometries with the same trait dimension, we must make sure that they share a point, an edge, or area for points, lines, and polygons/multipolygons respectively, without being contained.

julia
"""
     overlaps(geom1, geom2)::Bool
 
 Compare two Geometries of the same dimension and return true if their
@@ -229,7 +229,7 @@
     seg_val, _, _ = _intersection_point(Float64, edge_a, edge_b; exact = _False())
     return seg_val != line_out
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/geom_relations/touches.html b/dev/source/methods/geom_relations/touches.html index ddeb43443..57c126fc8 100644 --- a/dev/source/methods/geom_relations/touches.html +++ b/dev/source/methods/geom_relations/touches.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -27,7 +27,7 @@ f, a, p = lines(GI.getpoint(l1)) lines!(GI.getpoint(l2)) -f

We can see that these two lines touch only at their endpoints.

julia
GO.touches(l1, l2)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait.

Each of these calls a method in the geom_geom_processors file. The methods in this file determine if the given geometries meet a set of criteria. For the touches function and arguments g1 and g2, this criteria is as follows: - points of g1 are not allowed to be in the interior of g2 - points of g1 are allowed to be on the boundary of g2 - points of g1 are allowed to be in the exterior of g2 - no points of g1 are required to be in the interior of g2 - at least one point of g1 is required to be on the boundary of g2 - no points of g1 are required to be in the exterior of g2

The code for the specific implementations is in the geom_geom_processors file.

julia
const TOUCHES_POINT_ALLOWED = (in_allow = false, on_allow = true, out_allow = false)
+f

We can see that these two lines touch only at their endpoints.

julia
GO.touches(l1, l2)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait.

Each of these calls a method in the geom_geom_processors file. The methods in this file determine if the given geometries meet a set of criteria. For the touches function and arguments g1 and g2, this criteria is as follows: - points of g1 are not allowed to be in the interior of g2 - points of g1 are allowed to be on the boundary of g2 - points of g1 are allowed to be in the exterior of g2 - no points of g1 are required to be in the interior of g2 - at least one point of g1 is required to be on the boundary of g2 - no points of g1 are required to be in the exterior of g2

The code for the specific implementations is in the geom_geom_processors file.

julia
const TOUCHES_POINT_ALLOWED = (in_allow = false, on_allow = true, out_allow = false)
 const TOUCHES_CURVE_ALLOWED = (over_allow = false, cross_allow = false, on_allow = true, out_allow = true)
 const TOUCHES_POLYGON_ALLOWS = (in_allow = false, on_allow = true, out_allow = true)
 const TOUCHES_REQUIRES = (in_require = false, on_require = true, out_require = false)
@@ -191,7 +191,7 @@
     end
     return true
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/geom_relations/within.html b/dev/source/methods/geom_relations/within.html index cba82b1de..ed196a7a7 100644 --- a/dev/source/methods/geom_relations/within.html +++ b/dev/source/methods/geom_relations/within.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -28,7 +28,7 @@ scatter!(GI.getpoint(l1), color = :blue) lines!(GI.getpoint(l2), color = :orange) scatter!(GI.getpoint(l2), color = :orange) -f

We can see that all of the points and edges of l2 are within l1, so l2 is within l1, but l1 is not within l2

julia
GO.within(l1, l2)  # false
+f

We can see that all of the points and edges of l2 are within l1, so l2 is within l1, but l1 is not within l2

julia
GO.within(l1, l2)  # false
 GO.within(l2, l1)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait.

Each of these calls a method in the geom_geom_processors file. The methods in this file determine if the given geometries meet a set of criteria. For the within function and arguments g1 and g2, this criteria is as follows: - points of g1 are allowed to be in the interior of g2 (either through overlap or crossing for lines) - points of g1 are allowed to be on the boundary of g2 - points of g1 are not allowed to be in the exterior of g2 - at least one point of g1 is required to be in the interior of g2 - no points of g1 are required to be on the boundary of g2 - no points of g1 are required to be in the exterior of g2

The code for the specific implementations is in the geom_geom_processors file.

julia
const WITHIN_POINT_ALLOWS = (in_allow = true, on_allow = false, out_allow = false)
 const WITHIN_CURVE_ALLOWS = (over_allow = true, cross_allow = true, on_allow = true, out_allow = false)
 const WITHIN_POLYGON_ALLOWS = (in_allow = true, on_allow = true, out_allow = false)
@@ -210,7 +210,7 @@
     end
     return true
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/orientation.html b/dev/source/methods/orientation.html index a591191fb..c41b2ac86 100644 --- a/dev/source/methods/orientation.html +++ b/dev/source/methods/orientation.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -117,7 +117,7 @@ _isparallel(bx - ax, by - ay, dx - cx, dy - cy) _isparallel(Δx1, Δy1, Δx2, Δy2) = (Δx1 * Δy2 == Δy1 * Δx2)

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/methods/polygonize.html b/dev/source/methods/polygonize.html index a7be8838e..c4407e353 100644 --- a/dev/source/methods/polygonize.html +++ b/dev/source/methods/polygonize.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -306,7 +306,7 @@ end return edges end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/not_implemented_yet.html b/dev/source/not_implemented_yet.html index 3c7ee535f..9191f7e65 100644 --- a/dev/source/not_implemented_yet.html +++ b/dev/source/not_implemented_yet.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -21,7 +21,7 @@ function buffer end function convexhull end function concavehull end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/primitives.html b/dev/source/primitives.html index 0cf4599fb..66c222e20 100644 --- a/dev/source/primitives.html +++ b/dev/source/primitives.html @@ -8,17 +8,17 @@ - + - - - + + +
Skip to content
- + \ No newline at end of file diff --git a/dev/source/src/GeometryOpsCore.html b/dev/source/src/GeometryOpsCore.html index 9eacfb146..5f82abeea 100644 --- a/dev/source/src/GeometryOpsCore.html +++ b/dev/source/src/GeometryOpsCore.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -42,7 +42,7 @@ include("geometry_utils.jl") end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/src/apply.html b/dev/source/src/apply.html index 634db846f..411cd9bef 100644 --- a/dev/source/src/apply.html +++ b/dev/source/src/apply.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -170,7 +170,7 @@ end

Here we use the compiler directive @assume_effects :foldable to force the compiler to lookup through the closure. This alone makes e.g. flip 2.5x faster!

julia
Base.@assume_effects :foldable @inline function _maptasks(f::F, taskrange, threaded::_False)::Vector where F
     map(f, taskrange)
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/src/applyreduce.html b/dev/source/src/applyreduce.html index 84f1410dd..2ee323bfd 100644 --- a/dev/source/src/applyreduce.html +++ b/dev/source/src/applyreduce.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -89,7 +89,7 @@ Base.@assume_effects :foldable function _mapreducetasks(f::F, op, taskrange, threaded::_False; init) where F mapreduce(f, op, taskrange; init) end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/src/geometry_utils.html b/dev/source/src/geometry_utils.html index 768f32949..ca6a6ee7b 100644 --- a/dev/source/src/geometry_utils.html +++ b/dev/source/src/geometry_utils.html @@ -8,18 +8,18 @@ - + - - - + + +
Skip to content
julia
_linearring(geom::GI.LineString) = GI.LinearRing(parent(geom); extent=geom.extent, crs=geom.crs)
 _linearring(geom::GI.LinearRing) = geom

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/src/keyword_docs.html b/dev/source/src/keyword_docs.html index 8d806c1cd..f94ce8820 100644 --- a/dev/source/src/keyword_docs.html +++ b/dev/source/src/keyword_docs.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -26,7 +26,7 @@ $CRS_KEYWORD $CALC_EXTENT_KEYWORD """

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/src/other_primitives.html b/dev/source/src/other_primitives.html index 99541d30a..7c7fb0109 100644 --- a/dev/source/src/other_primitives.html +++ b/dev/source/src/other_primitives.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -133,7 +133,7 @@ return T{false,false}(child_geoms; crs, extent) end end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/src/types.html b/dev/source/src/types.html index 174353fd5..9a1cab9f2 100644 --- a/dev/source/src/types.html +++ b/dev/source/src/types.html @@ -8,16 +8,16 @@ - + - - - + + + -
Skip to content

Types

This defines core types that the GeometryOps ecosystem uses, and that are usable in more than just GeometryOps.

Manifold

A manifold is mathematically defined as a topological space that resembles Euclidean space locally.

In GeometryOps (and geodesy more generally), there are three manifolds we care about:

  • Linear: the 2d plane, a completely Euclidean manifold

  • Spherical: the unit sphere, but one where areas are multiplied by the radius of the Earth. This is not Euclidean globally, but all map projections attempt to represent the sphere on the Euclidean 2D plane to varying degrees of success.

  • Geodesic: the ellipsoid, the closest we can come to representing the Earth by a simple geometric shape. Parametrized by semimajor_axis and inv_flattening.

Generally, we aim to have Linear and Spherical be operable everywhere, whereas Geodesic will only apply in specific circumstances. Currently, those circumstances are area and segmentize, but this could be extended with time and https://github.com/JuliaGeo/SphericalGeodesics.jl.

julia
export Linear, Spherical, Geodesic
+    
Skip to content

Types

This defines core types that the GeometryOps ecosystem uses, and that are usable in more than just GeometryOps.

Manifold

A manifold is mathematically defined as a topological space that resembles Euclidean space locally.

In GeometryOps (and geodesy more generally), there are three manifolds we care about:

  • Planar: the 2d plane, a completely Euclidean manifold

  • Spherical: the unit sphere, but one where areas are multiplied by the radius of the Earth. This is not Euclidean globally, but all map projections attempt to represent the sphere on the Euclidean 2D plane to varying degrees of success.

  • Geodesic: the ellipsoid, the closest we can come to representing the Earth by a simple geometric shape. Parametrized by semimajor_axis and inv_flattening.

Generally, we aim to have Linear and Spherical be operable everywhere, whereas Geodesic will only apply in specific circumstances. Currently, those circumstances are area and segmentize, but this could be extended with time and https://github.com/JuliaGeo/SphericalGeodesics.jl.

julia
export Planar, Spherical, Geodesic
 export TraitTarget
 export BoolsAsTypes, _True, _False, _booltype
 
@@ -28,17 +28,19 @@
 
 We use the manifold definition to define the space in which an operation should be performed, or where a geometry lies.
 
-Currently we have `Linear`, `Spherical`, and `Geodesic` manifolds.
+Currently we have `Planar`, `Spherical`, and `Geodesic` manifolds.
 """
 abstract type Manifold end
 
 """
-    Linear()
+    Planar()
 
-A linear manifold means that the space is completely Euclidean,
-and planar geometry suffices.
+A planar manifold refers to the 2D Euclidean plane.
+
+Z coordinates may be accepted but will not influence geometry calculations, which
+are done purely on 2D geometry.  This is the standard "2.5D" model used by e.g. GEOS.
 """
-struct Linear <: Manifold
+struct Planar <: Manifold
 end
 
 """
@@ -124,7 +126,7 @@
 
 @inline _booltype(x::Bool)::BoolsAsTypes = x ? _True() : _False()
 @inline _booltype(x::BoolsAsTypes)::BoolsAsTypes = x

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/transformations/correction/closed_ring.html b/dev/source/transformations/correction/closed_ring.html index c73698270..0bf82eb61 100644 --- a/dev/source/transformations/correction/closed_ring.html +++ b/dev/source/transformations/correction/closed_ring.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -47,7 +47,7 @@ else

Assemble the ring as a vector

julia
        tups = tuples.(GI.getpoint(ring))

Close the ring

julia
        push!(tups, tups[1])

Return an actual ring

julia
        return GI.LinearRing(tups)
     end
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/transformations/correction/geometry_correction.html b/dev/source/transformations/correction/geometry_correction.html index cf93c7cd9..55cb1447f 100644 --- a/dev/source/transformations/correction/geometry_correction.html +++ b/dev/source/transformations/correction/geometry_correction.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -48,7 +48,7 @@ end return final_geometry end

Available corrections

GeometryOps.ClosedRing Type
julia
ClosedRing() <: GeometryCorrection

This correction ensures that a polygon's exterior and interior rings are closed.

It can be called on any geometry correction as usual.

See also GeometryCorrection.

source

GeometryOps.DiffIntersectingPolygons Type
julia
DiffIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygons included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be made nonintersecting through the difference operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area. See also GeometryCorrection, UnionIntersectingPolygons.

source

GeometryOps.GeometryCorrection Type
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source

GeometryOps.UnionIntersectingPolygons Type
julia
UnionIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygon's included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be combined through the union operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area.

See also GeometryCorrection.

source


This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/transformations/correction/intersecting_polygons.html b/dev/source/transformations/correction/intersecting_polygons.html index 6d924a0d7..153653301 100644 --- a/dev/source/transformations/correction/intersecting_polygons.html +++ b/dev/source/transformations/correction/intersecting_polygons.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -114,7 +114,7 @@ end return diff_multipoly end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/transformations/extent.html b/dev/source/transformations/extent.html index de5ebe94a..d367a9ccf 100644 --- a/dev/source/transformations/extent.html +++ b/dev/source/transformations/extent.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -30,7 +30,7 @@ """ embed_extent(x; threaded=false, crs=nothing) = apply(identity, GI.PointTrait(), x; calc_extent=true, threaded, crs)

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/transformations/flip.html b/dev/source/transformations/flip.html index 457c8c67e..b87be29f9 100644 --- a/dev/source/transformations/flip.html +++ b/dev/source/transformations/flip.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -39,7 +39,7 @@ end end end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/transformations/reproject.html b/dev/source/transformations/reproject.html index 86a4c1baf..a70490b60 100644 --- a/dev/source/transformations/reproject.html +++ b/dev/source/transformations/reproject.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -58,7 +58,7 @@ nothing end end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/transformations/segmentize.html b/dev/source/transformations/segmentize.html index 2591ab226..9124db417 100644 --- a/dev/source/transformations/segmentize.html +++ b/dev/source/transformations/segmentize.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -38,7 +38,7 @@ f, a, p = poly(collect(GI.getpoint(linear)); label = "Linear", axis = (; aspect = DataAspect())) p2 = poly!(collect(GI.getpoint(geodesic)); label = "Geodesic") axislegend(a; position = :lt) -f

There are two methods available for segmentizing geometries at the moment:

Missing docstring.

Missing docstring for LinearSegments. Check Documenter's build log for details.

Missing docstring.

Missing docstring for GeodesicSegments. Check Documenter's build log for details.

Benchmark

We benchmark our method against LibGEOS's GEOSDensify method, which is a similar method for densifying geometries.

julia
using BenchmarkTools: BenchmarkGroup
+f

There are two methods available for segmentizing geometries at the moment:

Missing docstring.

Missing docstring for LinearSegments. Check Documenter's build log for details.

Missing docstring.

Missing docstring for GeodesicSegments. Check Documenter's build log for details.

Benchmark

We benchmark our method against LibGEOS's GEOSDensify method, which is a similar method for densifying geometries.

julia
using BenchmarkTools: BenchmarkGroup
 using Chairmarks: @be
 using Main: plot_trials
 using CairoMakie
@@ -76,7 +76,7 @@
 
 end
 
-plot_trials(segmentize_suite)

julia
abstract type SegmentizeMethod end
+plot_trials(segmentize_suite)

julia
abstract type SegmentizeMethod end
 """
     LinearSegments(; max_distance::Real)
 
@@ -171,7 +171,7 @@
     end

End the line with the original coordinate, to avoid any multiplication errors.

julia
    push!(new_coords, (x2, y2))
     return nothing
 end

Note

The _fill_linear_kernel definition for GeodesicSegments is in the GeometryOpsProjExt extension module, in the segmentize.jl file.


This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/transformations/simplify.html b/dev/source/transformations/simplify.html index d5e3f49fe..385b74419 100644 --- a/dev/source/transformations/simplify.html +++ b/dev/source/transformations/simplify.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -28,7 +28,7 @@ f, a, p = poly(original; label = "Original") poly!(simple; label = "Simplified") axislegend(a) -f

Benchmark

We benchmark these methods against LibGEOS's simplify implementation, which uses the Douglas-Peucker algorithm.

julia
using BenchmarkTools, Chairmarks, GeoJSON, CairoMakie
+f

Benchmark

We benchmark these methods against LibGEOS's simplify implementation, which uses the Douglas-Peucker algorithm.

julia
using BenchmarkTools, Chairmarks, GeoJSON, CairoMakie
 import GeometryOps as GO, LibGEOS as LG, GeoInterface as GI
 using CoordinateTransformations
 using NaturalEarth
@@ -41,7 +41,7 @@
 usa_poly = GI.getgeom(usa_multipoly, findmax(GO.area.(GI.getgeom(usa_multipoly)))[2]) # isolate the poly with the most area
 usa_centroid = GO.centroid(usa_poly)
 usa_reflected = GO.transform(Translation(usa_centroid...)  LinearMap(Makie.rotmatrix2d(π))  Translation((-).(usa_centroid)...), usa_poly)
-f, a, p = plot(usa_poly; label = "Original", axis = (; aspect = DataAspect()))#; plot!(usa_reflected; label = "Reflected")

This is the complex polygon we'll be benchmarking.

julia
simplify_suite = BenchmarkGroup(["Simplify"])
+f, a, p = plot(usa_poly; label = "Original", axis = (; aspect = DataAspect()))#; plot!(usa_reflected; label = "Reflected")

This is the complex polygon we'll be benchmarking.

julia
simplify_suite = BenchmarkGroup(["Simplify"])
 singlepoly_suite = BenchmarkGroup(["Polygon", "title:Polygon simplify", "subtitle:Random blob"])
 
 include(joinpath(dirname(dirname(pathof(GO))), "test", "data", "polygon_generation.jl"))
@@ -55,7 +55,7 @@
     singlepoly_suite["LibGEOS"][GI.npoint(geom)] = @be LG.simplify($geom_lg, 0.1) seconds=1
 end
 
-plot_trials(singlepoly_suite; legend_position=(1, 1, TopRight()), legend_valign = -2, legend_halign = 1.2, legend_orientation = :horizontal)

julia
multipoly_suite = BenchmarkGroup(["MultiPolygon", "title:Multipolygon simplify", "subtitle:USA multipolygon"])
+plot_trials(singlepoly_suite; legend_position=(1, 1, TopRight()), legend_valign = -2, legend_halign = 1.2, legend_orientation = :horizontal)

julia
multipoly_suite = BenchmarkGroup(["MultiPolygon", "title:Multipolygon simplify", "subtitle:USA multipolygon"])
 
 for frac in exp10.(LinRange(log10(0.3), log10(1), 6)) # TODO: this example isn't the best.  How can we get this better?
     geom = GO.simplify(usa_multipoly; ratio = frac)
@@ -74,7 +74,7 @@
     # GO-VW : $(GI.npoint( GO.simplify((GO.VisvalingamWhyatt(; tol = _tol)), geom_go)))
     println()
 end
-plot_trials(multipoly_suite)

julia
export simplify, VisvalingamWhyatt, DouglasPeucker, RadialDistance
+plot_trials(multipoly_suite)

julia
export simplify, VisvalingamWhyatt, DouglasPeucker, RadialDistance
 
 const _SIMPLIFY_TARGET = TraitTarget{Union{GI.PolygonTrait, GI.AbstractCurveTrait, GI.MultiPointTrait, GI.PointTrait}}()
 const MIN_POINTS = 3
@@ -507,7 +507,7 @@
     end
     return nothing
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/transformations/transform.html b/dev/source/transformations/transform.html index c238cf4ff..c87fcb678 100644 --- a/dev/source/transformations/transform.html +++ b/dev/source/transformations/transform.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -72,7 +72,7 @@ end end end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/transformations/tuples.html b/dev/source/transformations/tuples.html index c76ca15fd..882b074d2 100644 --- a/dev/source/transformations/tuples.html +++ b/dev/source/transformations/tuples.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -36,7 +36,7 @@ end end end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/types.html b/dev/source/types.html index 350caf1b8..11c3dda5e 100644 --- a/dev/source/types.html +++ b/dev/source/types.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -55,7 +55,7 @@ error("$(f) requires a `$(kw)` keyword argument to the `GEOS` algorithm, which was not provided.") end end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/source/utils.html b/dev/source/utils.html index 1c3891372..7909ff6b7 100644 --- a/dev/source/utils.html +++ b/dev/source/utils.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -137,7 +137,7 @@ (x1, x2), (y1, y2) = extent.X, extent.Y return x1 ≤ GI.x(p) ≤ x2 && y1 ≤ GI.y(p) ≤ y2 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/dev/tutorials/creating_geometry.html b/dev/tutorials/creating_geometry.html index 96667bf22..03a8446d0 100644 --- a/dev/tutorials/creating_geometry.html +++ b/dev/tutorials/creating_geometry.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -27,37 +27,37 @@ import Proj # Plotting using CairoMakie -using GeoMakie

Creating and plotting geometries

Let's start by making a single Point.

julia
point = GI.Point(0, 0)
GeoInterface.Wrappers.Point{false, false, Tuple{Int64, Int64}, Nothing}((0, 0), nothing)

Now, let's plot our point.

julia
fig, ax, plt = plot(point)

Let's create a set of points, and have a bit more fun with plotting.

julia
x = [-5, 0, 5, 0];
+using GeoMakie

Creating and plotting geometries

Let's start by making a single Point.

julia
point = GI.Point(0, 0)
GeoInterface.Wrappers.Point{false, false, Tuple{Int64, Int64}, Nothing}((0, 0), nothing)

Now, let's plot our point.

julia
fig, ax, plt = plot(point)

Let's create a set of points, and have a bit more fun with plotting.

julia
x = [-5, 0, 5, 0];
 y = [0, -5, 0, 5];
 points = GI.Point.(zip(x,y));
 plot!(ax, points; marker = '✈', markersize = 30)
-fig

Points can be combined into a single MultiPoint geometry.

julia
x = [-5, -5, 5, 5];
+fig

Points can be combined into a single MultiPoint geometry.

julia
x = [-5, -5, 5, 5];
 y = [-5, 5, 5, -5];
 multipoint = GI.MultiPoint(GI.Point.(zip(x, y)));
 plot!(ax, multipoint; marker = '☁', markersize = 30)
-fig

Let's create a LineString connecting two points.

julia
p1 = GI.Point.(-5, 0);
+fig

Let's create a LineString connecting two points.

julia
p1 = GI.Point.(-5, 0);
 p2 = GI.Point.(5, 0);
 line = GI.LineString([p1,p2])
 plot!(ax, line; color = :red)
-fig

Now, let's create a line connecting multiple points (i.e. a LineString). This time we get a bit more fancy with point creation.

julia
r = 2;
+fig

Now, let's create a line connecting multiple points (i.e. a LineString). This time we get a bit more fancy with point creation.

julia
r = 2;
 k = 10;
 ϴ = 0:0.01:2pi;
 x = r .* (k + 1) .* cos.(ϴ) .- r .* cos.((k + 1) .* ϴ);
 y = r .* (k + 1) .* sin.(ϴ) .- r .* sin.((k + 1) .* ϴ);
 lines = GI.LineString(GI.Point.(zip(x,y)));
 plot!(ax, lines; linewidth = 5)
-fig

We can also create a single LinearRing trait, the building block of a polygon. A LinearRing is simply a LineString with the same beginning and endpoint, i.e., an arbitrary closed shape composed of point pairs.

A LinearRing is composed of a series of points.

julia
ring1 = GI.LinearRing(GI.getpoint(lines));
GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}[GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.0, 0.0), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.010987813253244, 0.0004397316773170068), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.043805248003498, 0.0035114210915891397), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.098016055420953, 0.011814947665167774), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.172899020101585, 0.027886421973952302), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.267456684570245, 0.05416726609360478), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.380427415579764, 0.09297443860091348), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.51030066635026, 0.1464721641710074), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.655335250260467, 0.21664550952386064), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.813580405100698, 0.30527612515520186), nothing)  …  GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.866418416586406, -0.3376428491230612), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.704405820024185, -0.24279488312757858), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.55494217175954, -0.16692537029320365), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.420040147662014, -0.10832215707812454), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.30151010318639, -0.0650624499034016), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.200938172182195, -0.03503632062070827), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.119667078681967, -0.01597247419241532), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.058779893613323, -0.005465967083412071), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.019086932781654, -0.0010075412835199304), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.001115954499138, -1.4219350464667047e-5), nothing)], nothing, nothing)

Now, let's make the LinearRing into a Polygon.

julia
polygon1 = GI.Polygon([ring1]);
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}[GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.0, 0.0), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.010987813253244, 0.0004397316773170068), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.043805248003498, 0.0035114210915891397), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.098016055420953, 0.011814947665167774), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.172899020101585, 0.027886421973952302), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.267456684570245, 0.05416726609360478), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.380427415579764, 0.09297443860091348), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.51030066635026, 0.1464721641710074), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.655335250260467, 0.21664550952386064), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.813580405100698, 0.30527612515520186), nothing)  …  GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.866418416586406, -0.3376428491230612), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.704405820024185, -0.24279488312757858), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.55494217175954, -0.16692537029320365), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.420040147662014, -0.10832215707812454), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.30151010318639, -0.0650624499034016), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.200938172182195, -0.03503632062070827), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.119667078681967, -0.01597247419241532), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.058779893613323, -0.005465967083412071), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.019086932781654, -0.0010075412835199304), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.001115954499138, -1.4219350464667047e-5), nothing)], nothing, nothing)], nothing, nothing)

Now, we can use GeometryOps and CoordinateTransformations to shift polygon1 up, to avoid plotting over our earlier results. This is done through the GeometryOps.transform function.

julia
xoffset = 0.;
+fig

We can also create a single LinearRing trait, the building block of a polygon. A LinearRing is simply a LineString with the same beginning and endpoint, i.e., an arbitrary closed shape composed of point pairs.

A LinearRing is composed of a series of points.

julia
ring1 = GI.LinearRing(GI.getpoint(lines));
GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}[GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.0, 0.0), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.010987813253244, 0.0004397316773170068), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.043805248003498, 0.0035114210915891397), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.098016055420953, 0.011814947665167774), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.172899020101585, 0.027886421973952302), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.267456684570245, 0.05416726609360478), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.380427415579764, 0.09297443860091348), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.51030066635026, 0.1464721641710074), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.655335250260467, 0.21664550952386064), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.813580405100698, 0.30527612515520186), nothing)  …  GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.866418416586406, -0.3376428491230612), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.704405820024185, -0.24279488312757858), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.55494217175954, -0.16692537029320365), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.420040147662014, -0.10832215707812454), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.30151010318639, -0.0650624499034016), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.200938172182195, -0.03503632062070827), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.119667078681967, -0.01597247419241532), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.058779893613323, -0.005465967083412071), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.019086932781654, -0.0010075412835199304), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.001115954499138, -1.4219350464667047e-5), nothing)], nothing, nothing)

Now, let's make the LinearRing into a Polygon.

julia
polygon1 = GI.Polygon([ring1]);
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}[GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.0, 0.0), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.010987813253244, 0.0004397316773170068), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.043805248003498, 0.0035114210915891397), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.098016055420953, 0.011814947665167774), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.172899020101585, 0.027886421973952302), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.267456684570245, 0.05416726609360478), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.380427415579764, 0.09297443860091348), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.51030066635026, 0.1464721641710074), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.655335250260467, 0.21664550952386064), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.813580405100698, 0.30527612515520186), nothing)  …  GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.866418416586406, -0.3376428491230612), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.704405820024185, -0.24279488312757858), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.55494217175954, -0.16692537029320365), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.420040147662014, -0.10832215707812454), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.30151010318639, -0.0650624499034016), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.200938172182195, -0.03503632062070827), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.119667078681967, -0.01597247419241532), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.058779893613323, -0.005465967083412071), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.019086932781654, -0.0010075412835199304), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.001115954499138, -1.4219350464667047e-5), nothing)], nothing, nothing)], nothing, nothing)

Now, we can use GeometryOps and CoordinateTransformations to shift polygon1 up, to avoid plotting over our earlier results. This is done through the GeometryOps.transform function.

julia
xoffset = 0.;
 yoffset = 50.;
 f = CoordinateTransformations.Translation(xoffset, yoffset);
 polygon1 = GO.transform(f, polygon1);
 plot!(polygon1)
-fig

Polygons can contain "holes". The first LinearRing in a polygon is the exterior, and all subsequent LinearRings are treated as holes in the leading LinearRing.

GeoInterface offers the GI.getexterior(poly) and GI.gethole(poly) methods to get the exterior ring and an iterable of holes, respectively.

julia
hole = GI.LinearRing(GI.getpoint(multipoint))
+fig

Polygons can contain "holes". The first LinearRing in a polygon is the exterior, and all subsequent LinearRings are treated as holes in the leading LinearRing.

GeoInterface offers the GI.getexterior(poly) and GI.gethole(poly) methods to get the exterior ring and an iterable of holes, respectively.

julia
hole = GI.LinearRing(GI.getpoint(multipoint))
 polygon2 = GI.Polygon([ring1, hole])
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, T, Nothing, Nothing} where T}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, T, Nothing, Nothing} where T[GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}[GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.0, 0.0), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.010987813253244, 0.0004397316773170068), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.043805248003498, 0.0035114210915891397), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.098016055420953, 0.011814947665167774), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.172899020101585, 0.027886421973952302), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.267456684570245, 0.05416726609360478), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.380427415579764, 0.09297443860091348), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.51030066635026, 0.1464721641710074), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.655335250260467, 0.21664550952386064), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.813580405100698, 0.30527612515520186), nothing)  …  GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.866418416586406, -0.3376428491230612), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.704405820024185, -0.24279488312757858), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.55494217175954, -0.16692537029320365), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.420040147662014, -0.10832215707812454), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.30151010318639, -0.0650624499034016), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.200938172182195, -0.03503632062070827), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.119667078681967, -0.01597247419241532), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.058779893613323, -0.005465967083412071), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.019086932781654, -0.0010075412835199304), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.001115954499138, -1.4219350464667047e-5), nothing)], nothing, nothing), GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Int64, Int64}, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Point{false, false, Tuple{Int64, Int64}, Nothing}[GeoInterface.Wrappers.Point{false, false, Tuple{Int64, Int64}, Nothing}((-5, -5), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Int64, Int64}, Nothing}((-5, 5), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Int64, Int64}, Nothing}((5, 5), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Int64, Int64}, Nothing}((5, -5), nothing)], nothing, nothing)], nothing, nothing)

Shift polygon2 to the right, to avoid plotting over our earlier results.

julia
xoffset = 50.;
 yoffset = 0.;
 f = CoordinateTransformations.Translation(xoffset, yoffset);
 polygon2 = GO.transform(f, polygon2);
 plot!(polygon2)
-fig

Polygons can also be grouped together as a MultiPolygon.

julia
r = 5;
+fig

Polygons can also be grouped together as a MultiPolygon.

julia
r = 5;
 x = cos.(reverse(ϴ)) .* r .+ xoffset;
 y = sin.(reverse(ϴ)) .* r .+ yoffset;
 ring2 =  GI.LinearRing(GI.Point.(zip(x,y)));
@@ -67,7 +67,7 @@
 f = CoordinateTransformations.Translation(xoffset, yoffset);
 multipolygon = GO.transform(f, multipolygon);
 plot!(multipolygon)
-fig

Great, now we can make Points, MultiPoints, Lines, LineStrings, Polygons (with holes), and MultiPolygons and modify them using [CoordinateTransformations] and [GeometryOps].

Plot geometries on a map using GeoMakie and coordinate reference system (CRS)

In geospatial sciences we often have data in one Coordinate Reference System (CRS) (source) and would like to display it in different (destination) CRS. GeoMakie allows us to do this by automatically projecting from source to destination CRS.

Here, our source CRS is common geographic (i.e. coordinates of latitude and longitude), WGS84.

julia
source_crs1 = GFT.EPSG(4326)
GeoFormatTypes.EPSG{1}((4326,))

Now let's pick a destination CRS for displaying our map. Here we'll pick natearth2.

julia
destination_crs = "+proj=natearth2"
"+proj=natearth2"

Let's add land area for context. First, download and open the Natural Earth global land polygons at 110 m resolution.GeoMakie ships with this particular dataset, so we will access it from there.

julia
land_path = GeoMakie.assetpath("ne_110m_land.geojson")
"/home/runner/.julia/packages/GeoMakie/yzfbc/assets/ne_110m_land.geojson"

Note

Natural Earth has lots of other datasets, and there is a Julia package that provides an interface to it called NaturalEarth.jl.

Read the land MultiPolygons as a GeoJSON.FeatureCollection.

julia
land_geo = GeoJSON.read(land_path)
FeatureCollection with 127 Features

We then need to create a figure with a GeoAxis that can handle the projection between source and destination CRS. For GeoMakie, source is the CRS of the input and dest is the CRS you want to visualize in.

julia
fig = Figure(size=(1000, 500));
+fig

Great, now we can make Points, MultiPoints, Lines, LineStrings, Polygons (with holes), and MultiPolygons and modify them using [CoordinateTransformations] and [GeometryOps].

Plot geometries on a map using GeoMakie and coordinate reference system (CRS)

In geospatial sciences we often have data in one Coordinate Reference System (CRS) (source) and would like to display it in different (destination) CRS. GeoMakie allows us to do this by automatically projecting from source to destination CRS.

Here, our source CRS is common geographic (i.e. coordinates of latitude and longitude), WGS84.

julia
source_crs1 = GFT.EPSG(4326)
GeoFormatTypes.EPSG{1}((4326,))

Now let's pick a destination CRS for displaying our map. Here we'll pick natearth2.

julia
destination_crs = "+proj=natearth2"
"+proj=natearth2"

Let's add land area for context. First, download and open the Natural Earth global land polygons at 110 m resolution.GeoMakie ships with this particular dataset, so we will access it from there.

julia
land_path = GeoMakie.assetpath("ne_110m_land.geojson")
"/home/runner/.julia/packages/GeoMakie/yzfbc/assets/ne_110m_land.geojson"

Note

Natural Earth has lots of other datasets, and there is a Julia package that provides an interface to it called NaturalEarth.jl.

Read the land MultiPolygons as a GeoJSON.FeatureCollection.

julia
land_geo = GeoJSON.read(land_path)
FeatureCollection with 127 Features

We then need to create a figure with a GeoAxis that can handle the projection between source and destination CRS. For GeoMakie, source is the CRS of the input and dest is the CRS you want to visualize in.

julia
fig = Figure(size=(1000, 500));
 ga = GeoAxis(
     fig[1, 1];
     source = source_crs1,
@@ -75,8 +75,8 @@
     xticklabelsvisible = false,
     yticklabelsvisible = false,
 );

Plot land for context.

julia
poly!(ga, land_geo, color=:black)
-fig

Now let's plot a Polygon like before, but this time with a CRS that differs from our source data

julia
plot!(multipolygon; color = :green)
-fig

But what if we want to plot geometries with a different source CRS on the same figure?

To show how to do this let's create a geometry with coordinates in UTM (Universal Transverse Mercator) zone 10N EPSG:32610.

julia
source_crs2 = GFT.EPSG(32610)
GeoFormatTypes.EPSG{1}((32610,))

Create a polygon (we're working in meters now, not latitude and longitude)

julia
r = 1000000;
+fig

Now let's plot a Polygon like before, but this time with a CRS that differs from our source data

julia
plot!(multipolygon; color = :green)
+fig

But what if we want to plot geometries with a different source CRS on the same figure?

To show how to do this let's create a geometry with coordinates in UTM (Universal Transverse Mercator) zone 10N EPSG:32610.

julia
source_crs2 = GFT.EPSG(32610)
GeoFormatTypes.EPSG{1}((32610,))

Create a polygon (we're working in meters now, not latitude and longitude)

julia
r = 1000000;
 ϴ = 0:0.01:2pi;
 x = r .* cos.(ϴ).^3 .+ 500000;
 y = r .* sin.(ϴ) .^ 3 .+5000000;
629-element Vector{Float64}:
@@ -86,7 +86,7 @@
 
  5.0e6
  5.0e6

Now create a LinearRing from Points

julia
ring3 = GI.LinearRing(Point.(zip(x, y)))
GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}(Point{2, Float64}[[1.5e6, 5.0e6], [1.4998500087497458e6, 5.000000999950001e6], [1.4994001399837343e6, 5.000007998400139e6], [1.4986507085647392e6, 5.000026987852369e6], [1.4976022389592e6, 5.000063948817746e6], [1.4962554647802354e6, 5.000124843834609e6], [1.4946113281484335e6, 5.000215611503127e6], [1.4926709788709967e6, 5.000342160541625e6], [1.4904357734399722e6, 5.000510363870095e6], [1.4879072738504685e6, 5.0007260527263e6]  …  [1.4870405593989636e6, 4.999194331880103e6], [1.4896621210021754e6, 4.999426363321033e6], [1.491990928929295e6, 4.999609061508909e6], [1.4940253560034204e6, 4.999748243174828e6], [1.4957639801366436e6, 4.999849768598615e6], [1.497205585568957e6, 4.999919535736425e6], [1.4983491639274692e6, 4.999963474314044e6], [1.4991939151049731e6, 4.999987539891298e6], [1.4997392479570867e6, 4.999997707902938e6], [1.499984780817334e6, 4.999999967681458e6]], nothing, nothing)

Now create a Polygon from the LineRing

julia
polygon3 = GI.Polygon([ring3])
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}(Point{2, Float64}[[1.5e6, 5.0e6], [1.4998500087497458e6, 5.000000999950001e6], [1.4994001399837343e6, 5.000007998400139e6], [1.4986507085647392e6, 5.000026987852369e6], [1.4976022389592e6, 5.000063948817746e6], [1.4962554647802354e6, 5.000124843834609e6], [1.4946113281484335e6, 5.000215611503127e6], [1.4926709788709967e6, 5.000342160541625e6], [1.4904357734399722e6, 5.000510363870095e6], [1.4879072738504685e6, 5.0007260527263e6]  …  [1.4870405593989636e6, 4.999194331880103e6], [1.4896621210021754e6, 4.999426363321033e6], [1.491990928929295e6, 4.999609061508909e6], [1.4940253560034204e6, 4.999748243174828e6], [1.4957639801366436e6, 4.999849768598615e6], [1.497205585568957e6, 4.999919535736425e6], [1.4983491639274692e6, 4.999963474314044e6], [1.4991939151049731e6, 4.999987539891298e6], [1.4997392479570867e6, 4.999997707902938e6], [1.499984780817334e6, 4.999999967681458e6]], nothing, nothing)], nothing, nothing)

Now plot on the existing GeoAxis.

Note

The keyword argument source is used to specify the source CRS of that particular plot, when plotting on an existing GeoAxis.

julia
plot!(ga,polygon3; color=:red, source = source_crs2)
-fig

Create geospatial geometries with embedded coordinate reference system information

Great, we can make geometries and plot them on a map... now let's export the data to common geospatial data formats. To do this we now need to create geometries with embedded CRS information, making it a geospatial geometry. All that's needed is to include ; crs = crs as a keyword argument when constructing the geometry.

Let's do this for a new Polygon

julia
r = 3;
+fig

Create geospatial geometries with embedded coordinate reference system information

Great, we can make geometries and plot them on a map... now let's export the data to common geospatial data formats. To do this we now need to create geometries with embedded CRS information, making it a geospatial geometry. All that's needed is to include ; crs = crs as a keyword argument when constructing the geometry.

Let's do this for a new Polygon

julia
r = 3;
 k = 7;
 ϴ = 0:0.01:2pi;
 x = r .* (k + 1) .* cos.(ϴ) .- r .* cos.((k + 1) .* ϴ);
@@ -106,7 +106,7 @@
 GeoParquet.write(fn, df, (:geometry,))
"shapes.parquet"

Finally, if there's no Julia-native package that can write data to your desired format (e.g. .gpkg, .gml, etc), you can use GeoDataFrames. This package uses the GDAL library under the hood which supports writing to nearly all geospatial formats.

julia
import GeoDataFrames
 fn = "shapes.gpkg"
 GeoDataFrames.write(fn, df)
"shapes.gpkg"

And there we go, you can now create mapped geometries from scratch, manipulate them, plot them on a map, and save them in multiple geospatial data formats.

- + \ No newline at end of file diff --git a/dev/tutorials/geodesic_paths.html b/dev/tutorials/geodesic_paths.html index 113a0cd63..036d36209 100644 --- a/dev/tutorials/geodesic_paths.html +++ b/dev/tutorials/geodesic_paths.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -27,8 +27,8 @@ fig, ga, _cp = lines(GeoMakie.coastlines(); axis = (; type = GeoAxis)) lines!(ga, GO.segmentize(GO.GeodesicSegments(; max_distance = 100_000), GI.LineString([IAH, AMS])); color = Makie.wong_colors()[2]) -fig

- +fig

+ \ No newline at end of file diff --git a/dev/tutorials/spatial_joins.html b/dev/tutorials/spatial_joins.html index bd26e4fd2..f361ae69f 100644 --- a/dev/tutorials/spatial_joins.html +++ b/dev/tutorials/spatial_joins.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -37,14 +37,14 @@ pl = GI.Polygon([GI.LinearRing([(0, 0), (1, 0), (1, 1), (0, 0)])]) pu = GI.Polygon([GI.LinearRing([(0, 0), (0, 1), (1, 1), (0, 0)])]) poly_df = DataFrame(geometry = [pl, pu], color = [:red, :blue]) -f, a, p = poly(poly_df.geometry; color = tuple.(poly_df.color, 0.3))

Here, the upper polygon is blue, and the lower polygon is red. Keep this in mind!

Now, we generate the points.

julia
points = tuple.(rand(1000), rand(1000))
+f, a, p = poly(poly_df.geometry; color = tuple.(poly_df.color, 0.3))

Here, the upper polygon is blue, and the lower polygon is red. Keep this in mind!

Now, we generate the points.

julia
points = tuple.(rand(1000), rand(1000))
 points_df = DataFrame(geometry = points)
 scatter!(points_df.geometry)
-f

You can see that they are evenly distributed around the box. But how do we know which points are in which polygons?

We have to join the two dataframes based on which polygon (if any) each point lies within.

Now, we can perform the "spatial join" using FlexiJoins. We are performing an outer join here

julia
@time joined_df = FlexiJoins.innerjoin(
+f

You can see that they are evenly distributed around the box. But how do we know which points are in which polygons?

We have to join the two dataframes based on which polygon (if any) each point lies within.

Now, we can perform the "spatial join" using FlexiJoins. We are performing an outer join here

julia
@time joined_df = FlexiJoins.innerjoin(
     (points_df, poly_df),
     by_pred(:geometry, GO.within, :geometry)
 )
julia
scatter!(a, joined_df.geometry; color = joined_df.color)
-f

Here, you can see that the colors were assigned appropriately to the scattered points!

Real-world example

Suppose I have a list of polygons representing administrative regions (or mining sites, or what have you), and I have a list of polygons for each country. I want to find the country each region is in.

julia
import GeoInterface as GI, GeometryOps as GO
+f

Here, you can see that the colors were assigned appropriately to the scattered points!

Real-world example

Suppose I have a list of polygons representing administrative regions (or mining sites, or what have you), and I have a list of polygons for each country. I want to find the country each region is in.

julia
import GeoInterface as GI, GeometryOps as GO
 using FlexiJoins, DataFrames, GADM # GADM gives us country and sublevel geometry
 
 using CairoMakie, GeoInterfaceMakie
@@ -69,7 +69,7 @@
     ::FlexiJoins.ByPred{typeof(my_predicate_function)}, 
     datas
 ) = true

This will enable FlexiJoins to support your custom function, when it's passed to by_pred(:geometry, my_predicate_function, :geometry).

- + \ No newline at end of file