diff --git a/previews/PR132/404.html b/previews/PR132/404.html index 384caf563..a5f320e8a 100644 --- a/previews/PR132/404.html +++ b/previews/PR132/404.html @@ -8,15 +8,15 @@ - + -
Skip to content

404

PAGE NOT FOUND

But if you don't change your direction, and if you keep looking, you may end up where you are heading.
- +
Skip to content

404

PAGE NOT FOUND

But if you don't change your direction, and if you keep looking, you may end up where you are heading.
+ \ No newline at end of file diff --git a/previews/PR132/api.html b/previews/PR132/api.html index 7124ddf11..0572a04eb 100644 --- a/previews/PR132/api.html +++ b/previews/PR132/api.html @@ -8,26 +8,26 @@ - + - + - + -
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.applyFunction.
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. But "deeper" objects may remain unchanged - such as points and linear rings if the target is the same PolygonTrait.

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.applyFunction.
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. But "deeper" objects may remain unchanged - such as points and linear rings if the target is the same PolygonTrait.

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)])])
 
 flipped_geom = GO.apply(GI.PointTrait, geom) do p
     (GI.y(p), GI.x(p))
-end

source


# GeometryOps.applyreduceFunction.
julia
applyreduce(f, op, target::Union{TraitTarget, GI.AbstractTrait}, obj; threaded)

Apply function f to all objects with the target trait, and reduce the result with an op like +.

The order and grouping of application of op is not guaranteed.

If threaded==true threads will be used over arrays and iterables, feature collections and nested geometries.

source


# GeometryOps.reprojectFunction.
julia
reproject(geometry; source_crs, target_crs, transform, always_xy, time)
+end

source


# GeometryOps.applyreduceFunction.
julia
applyreduce(f, op, target::Union{TraitTarget, GI.AbstractTrait}, obj; threaded)

Apply function f to all objects with the target trait, and reduce the result with an op like +.

The order and grouping of application of op is not guaranteed.

If threaded==true threads will be used over arrays and iterables, feature collections and nested geometries.

source


# GeometryOps.reprojectFunction.
julia
reproject(geometry; source_crs, target_crs, transform, always_xy, time)
 reproject(geometry, source_crs, target_crs; always_xy, time)
-reproject(geometry, transform; always_xy, time)

Reproject any GeoInterface.jl compatible geometry from source_crs to target_crs.

The returned object will be constructed from GeoInterface.WrapperGeometry geometries, wrapping views of a Vector{Proj.Point{D}}, where D is the dimension.

Tip

The Proj.jl package must be loaded for this method to work, since it is implemented in a package extension.

Arguments

  • geometry: Any GeoInterface.jl compatible geometries.

  • source_crs: the source coordinate referece system, as a GeoFormatTypes.jl object or a string.

  • target_crs: the target coordinate referece system, as a GeoFormatTypes.jl object or a string.

If these a passed as keywords, transform will take priority. Without it target_crs is always needed, and source_crs is needed if it is not retreivable from the geometry with GeoInterface.crs(geometry).

Keywords

  • always_xy: force x, y coordinate order, true by default. false will expect and return points in the crs coordinate order.

  • time: the time for the coordinates. Inf by default.

  • 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.

source


# GeometryOps.transformFunction.
julia
transform(f, obj)

Apply a function f to all the points in obj.

Points will be passed to f as an SVector to allow using CoordinateTransformations.jl and Rotations.jl without hassle.

SVector is also a valid GeoInterface.jl point, so will work in all GeoInterface.jl methods.

Example

julia
julia> import GeoInterface as GI
+reproject(geometry, transform; always_xy, time)

Reproject any GeoInterface.jl compatible geometry from source_crs to target_crs.

The returned object will be constructed from GeoInterface.WrapperGeometry geometries, wrapping views of a Vector{Proj.Point{D}}, where D is the dimension.

Tip

The Proj.jl package must be loaded for this method to work, since it is implemented in a package extension.

Arguments

  • geometry: Any GeoInterface.jl compatible geometries.

  • source_crs: the source coordinate referece system, as a GeoFormatTypes.jl object or a string.

  • target_crs: the target coordinate referece system, as a GeoFormatTypes.jl object or a string.

If these a passed as keywords, transform will take priority. Without it target_crs is always needed, and source_crs is needed if it is not retreivable from the geometry with GeoInterface.crs(geometry).

Keywords

  • always_xy: force x, y coordinate order, true by default. false will expect and return points in the crs coordinate order.

  • time: the time for the coordinates. Inf by default.

  • 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.

source


# GeometryOps.transformFunction.
julia
transform(f, obj)

Apply a function f to all the points in obj.

Points will be passed to f as an SVector to allow using CoordinateTransformations.jl and Rotations.jl without hassle.

SVector is also a valid GeoInterface.jl point, so will work in all GeoInterface.jl methods.

Example

julia
julia> import GeoInterface as GI
 
 julia> import GeometryOps as GO
 
@@ -46,160 +46,160 @@
 GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearR
 ing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}(StaticArraysCore.SVe
 ctor{2, Int64}[[2, 1], [4, 3], [6, 5], [2, 1]], nothing, nothing), GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}(StaticArraysCore.SVector{2, Int64
-}[[4, 3], [6, 5], [7, 6], [4, 3]], nothing, nothing)], nothing, nothing)

source


General geometry methods

OGC methods

# GeometryOps.containsFunction.
julia
contains(g1::AbstractGeometry, g2::AbstractGeometry)::Bool

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

contains returns the exact opposite result of within.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+}[[4, 3], [6, 5], [7, 6], [4, 3]], nothing, nothing)], nothing, nothing)

source


General geometry methods

OGC methods

# GeometryOps.containsFunction.
julia
contains(g1::AbstractGeometry, g2::AbstractGeometry)::Bool

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

contains returns the exact opposite result of within.

Examples

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

source


# GeometryOps.coveredbyFunction.
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


# GeometryOps.coveredbyFunction.
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


# GeometryOps.coversFunction.
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


# GeometryOps.coversFunction.
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, 1), (1, 2), (1, 3), (1, 4)])
 l2 = GI.LineString([(1, 1), (1, 2)])
 
 GO.covers(l1, l2)
 # output
-true

source


# GeometryOps.crossesFunction.
julia
 crosses(geom1, geom2)::Bool

Return true if the intersection results in a geometry whose dimension is one less than the maximum dimension of the two source geometries and the intersection set is interior to both source geometries.

TODO: broken

Examples

julia
import GeoInterface as GI, GeometryOps as GO
-# TODO: Add working example

source


# GeometryOps.disjointFunction.
julia
disjoint(geom1, geom2)::Bool

Return true if the first geometry is disjoint from the second geometry.

Return true if the first geometry is disjoint from the second geometry. The interiors and boundaries of both geometries must not intersect.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+true

source


# GeometryOps.crossesFunction.
julia
 crosses(geom1, geom2)::Bool

Return true if the intersection results in a geometry whose dimension is one less than the maximum dimension of the two source geometries and the intersection set is interior to both source geometries.

TODO: broken

Examples

julia
import GeoInterface as GI, GeometryOps as GO
+# TODO: Add working example

source


# GeometryOps.disjointFunction.
julia
disjoint(geom1, geom2)::Bool

Return true if the first geometry is disjoint from the second geometry.

Return true if the first geometry is disjoint from the second geometry. The interiors and boundaries of both geometries must not intersect.

Examples

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

source


# GeometryOps.intersectsFunction.
julia
intersects(geom1, geom2)::Bool

Return true if the interiors or boundaries of the two geometries interact.

intersects returns the exact opposite result of disjoint.

Example

julia
import GeoInterface as GI, GeometryOps as GO
+true

source


# GeometryOps.intersectsFunction.
julia
intersects(geom1, geom2)::Bool

Return true if the interiors or boundaries of the two geometries interact.

intersects returns the exact opposite result of disjoint.

Example

julia
import GeoInterface as GI, GeometryOps as GO
 
 line1 = GI.Line([(124.584961,-12.768946), (126.738281,-17.224758)])
 line2 = GI.Line([(123.354492,-15.961329), (127.22168,-14.008696)])
 GO.intersects(line1, line2)
 
 # output
-true

source


# GeometryOps.overlapsFunction.
julia
overlaps(geom1, geom2)::Bool

Compare two Geometries of the same dimension and return true if their intersection set results in a geometry different from both but of the same dimension. This means one geometry cannot be within or contain the other and they cannot be equal

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+true

source


# GeometryOps.overlapsFunction.
julia
overlaps(geom1, geom2)::Bool

Compare two Geometries of the same dimension and return true if their intersection set results in a geometry different from both but of the same dimension. This means one geometry cannot be within or contain the other and they cannot be equal

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 poly1 = GI.Polygon([[(0,0), (0,5), (5,5), (5,0), (0,0)]])
 poly2 = GI.Polygon([[(1,1), (1,6), (6,6), (6,1), (1,1)]])
 
 GO.overlaps(poly1, poly2)
 # output
-true

source

julia
overlaps(::GI.AbstractTrait, geom1, ::GI.AbstractTrait, geom2)::Bool

For any non-specified pair, all have non-matching dimensions, return false.

source

julia
overlaps(
+true

source

julia
overlaps(::GI.AbstractTrait, geom1, ::GI.AbstractTrait, geom2)::Bool

For any non-specified pair, all have non-matching dimensions, return false.

source

julia
overlaps(
     ::GI.MultiPointTrait, points1,
     ::GI.MultiPointTrait, points2,
-)::Bool

If the multipoints overlap, meaning some, but not all, of the points within the multipoints are shared, return true.

source

julia
overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool

If the lines overlap, meaning that they are colinear but each have one endpoint outside of the other line, return true. Else false.

source

julia
overlaps(
+)::Bool

If the multipoints overlap, meaning some, but not all, of the points within the multipoints are shared, return true.

source

julia
overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool

If the lines overlap, meaning that they are colinear but each have one endpoint outside of the other line, return true. Else false.

source

julia
overlaps(
     ::Union{GI.LineStringTrait, GI.LinearRing}, line1,
     ::Union{GI.LineStringTrait, GI.LinearRing}, line2,
-)::Bool

If the curves overlap, meaning that at least one edge of each curve overlaps, return true. Else false.

source

julia
overlaps(
+)::Bool

If the curves overlap, meaning that at least one edge of each curve overlaps, return true. Else false.

source

julia
overlaps(
     trait_a::GI.PolygonTrait, poly_a,
     trait_b::GI.PolygonTrait, poly_b,
-)::Bool

If the two polygons intersect with one another, but are not equal, return true. Else false.

source

julia
overlaps(
+)::Bool

If the two polygons intersect with one another, but are not equal, return true. Else false.

source

julia
overlaps(
     ::GI.PolygonTrait, poly1,
     ::GI.MultiPolygonTrait, polys2,
-)::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source

julia
overlaps(
+)::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source

julia
overlaps(
     ::GI.MultiPolygonTrait, polys1,
     ::GI.PolygonTrait, poly2,
-)::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source

julia
overlaps(
+)::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source

julia
overlaps(
     ::GI.MultiPolygonTrait, polys1,
     ::GI.MultiPolygonTrait, polys2,
-)::Bool

Return true if at least one pair of polygons from multipolygons overlap. Else false.

source


# GeometryOps.touchesFunction.
julia
touches(geom1, geom2)::Bool

Return true if the first geometry touches the second geometry. In other words, the two interiors cannot interact, but one of the geometries must have a boundary point that interacts with either the other geometies interior or boundary.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+)::Bool

Return true if at least one pair of polygons from multipolygons overlap. Else false.

source


# GeometryOps.touchesFunction.
julia
touches(geom1, geom2)::Bool

Return true if the first geometry touches the second geometry. In other words, the two interiors cannot interact, but one of the geometries must have a boundary point that interacts with either the other geometies interior or boundary.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 
 l1 = GI.Line([(0.0, 0.0), (1.0, 0.0)])
 l2 = GI.Line([(1.0, 1.0), (1.0, -1.0)])
 
 GO.touches(l1, l2)
 # output
-true

source


# GeometryOps.withinFunction.
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
+true

source


# GeometryOps.withinFunction.
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


Other general methods

# GeometryOps.equalsFunction.
julia
equals(geom1, geom2)::Bool

Compare two Geometries return true if they are the same geometry.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+true

source


Other general methods

# GeometryOps.equalsFunction.
julia
equals(geom1, geom2)::Bool

Compare two Geometries return true if they are the same geometry.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 poly1 = GI.Polygon([[(0,0), (0,5), (5,5), (5,0), (0,0)]])
 poly2 = GI.Polygon([[(0,0), (0,5), (5,5), (5,0), (0,0)]])
 
 GO.equals(poly1, poly2)
 # output
-true

source

julia
equals(::T, geom_a, ::T, geom_b)::Bool

Two geometries of the same type, which don't have a equals function to dispatch off of should throw an error.

source

julia
equals(trait_a, geom_a, trait_b, geom_b)

Two geometries which are not of the same type cannot be equal so they always return false.

source

julia
equals(::GI.PointTrait, p1, ::GI.PointTrait, p2)::Bool

Two points are the same if they have the same x and y (and z if 3D) coordinates.

source

julia
equals(::GI.PointTrait, p1, ::GI.MultiPointTrait, mp2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source

julia
equals(::GI.MultiPointTrait, mp1, ::GI.PointTrait, p2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source

julia
equals(::GI.MultiPointTrait, mp1, ::GI.MultiPointTrait, mp2)::Bool

Two multipoints are equal if they share the same set of points.

source

julia
equals(
+true

source

julia
equals(::T, geom_a, ::T, geom_b)::Bool

Two geometries of the same type, which don't have a equals function to dispatch off of should throw an error.

source

julia
equals(trait_a, geom_a, trait_b, geom_b)

Two geometries which are not of the same type cannot be equal so they always return false.

source

julia
equals(::GI.PointTrait, p1, ::GI.PointTrait, p2)::Bool

Two points are the same if they have the same x and y (and z if 3D) coordinates.

source

julia
equals(::GI.PointTrait, p1, ::GI.MultiPointTrait, mp2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source

julia
equals(::GI.MultiPointTrait, mp1, ::GI.PointTrait, p2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source

julia
equals(::GI.MultiPointTrait, mp1, ::GI.MultiPointTrait, mp2)::Bool

Two multipoints are equal if they share the same set of points.

source

julia
equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, l2,
-)::Bool

Two lines/linestrings are equal if they share the same set of points going along the curve. Note that lines/linestrings aren't closed by defintion.

source

julia
equals(
+)::Bool

Two lines/linestrings are equal if they share the same set of points going along the curve. Note that lines/linestrings aren't closed by defintion.

source

julia
equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
     ::GI.LinearRingTrait, l2,
-)::Bool

A line/linestring and a linear ring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source

julia
equals(
+)::Bool

A line/linestring and a linear ring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source

julia
equals(
     ::GI.LinearRingTrait, l1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, l2,
-)::Bool

A linear ring and a line/linestring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source

julia
equals(
+)::Bool

A linear ring and a line/linestring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source

julia
equals(
     ::GI.LinearRingTrait, l1,
     ::GI.LinearRingTrait, l2,
-)::Bool

Two linear rings are equal if they share the same set of points going along the curve. Note that rings are closed by definition, so they can have, but don't need, a repeated last point to be equal.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two polygons are equal if they share the same exterior edge and holes.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.MultiPolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source

julia
equals(::GI.MultiPolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two multipolygons are equal if they share the same set of polygons.

source


# GeometryOps.centroidFunction.
julia
centroid(geom, [T=Float64])::Tuple{T, T}

Returns the centroid of a given line segment, linear ring, polygon, or mutlipolygon.

source


# GeometryOps.distanceFunction.
julia
distance(point, geom, ::Type{T} = Float64)::T

Calculates the ditance from the geometry g1 to the point. The distance will always be positive or zero.

The method will differ based on the type of the geometry provided: - The distance from a point to a point is just the Euclidean distance between the points. - The distance from a point to a line is the minimum distance from the point to the closest point on the given line. - The distance from a point to a linestring is the minimum distance from the point to the closest segment of the linestring. - The distance from a point to a linear ring is the minimum distance from the point to the closest segment of the linear ring. - The distance from a point to a polygon is zero if the point is within the polygon and otherwise is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The distance from a point to a multigeometry or a geometry collection is the minimum distance between the point and any of the sub-geometries.

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

source


# GeometryOps.signed_distanceFunction.
julia
signed_distance(point, geom, ::Type{T} = Float64)::T

Calculates the signed distance from the geometry geom to the given point. Points within geom have a negative signed distance, and points outside of geom have a positive signed distance. - The signed distance from a point to a point, line, linestring, or linear ring is equal to the distance between the two. - The signed distance from a point to a polygon is negative if the point is within the polygon and is positive otherwise. The value of the distance is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The signed distance from a point to a multigeometry or a geometry collection is the minimum signed distance between the point and any of the sub-geometries.

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

source


# GeometryOps.areaFunction.
julia
area(geom, [T = Float64])::T

Returns the area of a geometry or collection of geometries. This is computed slightly differently for different geometries:

- The area of a point/multipoint is always zero.
+)::Bool

Two linear rings are equal if they share the same set of points going along the curve. Note that rings are closed by definition, so they can have, but don't need, a repeated last point to be equal.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two polygons are equal if they share the same exterior edge and holes.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.MultiPolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source

julia
equals(::GI.MultiPolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two multipolygons are equal if they share the same set of polygons.

source


# GeometryOps.centroidFunction.
julia
centroid(geom, [T=Float64])::Tuple{T, T}

Returns the centroid of a given line segment, linear ring, polygon, or mutlipolygon.

source


# GeometryOps.distanceFunction.
julia
distance(point, geom, ::Type{T} = Float64)::T

Calculates the ditance from the geometry g1 to the point. The distance will always be positive or zero.

The method will differ based on the type of the geometry provided: - The distance from a point to a point is just the Euclidean distance between the points. - The distance from a point to a line is the minimum distance from the point to the closest point on the given line. - The distance from a point to a linestring is the minimum distance from the point to the closest segment of the linestring. - The distance from a point to a linear ring is the minimum distance from the point to the closest segment of the linear ring. - The distance from a point to a polygon is zero if the point is within the polygon and otherwise is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The distance from a point to a multigeometry or a geometry collection is the minimum distance between the point and any of the sub-geometries.

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

source


# GeometryOps.signed_distanceFunction.
julia
signed_distance(point, geom, ::Type{T} = Float64)::T

Calculates the signed distance from the geometry geom to the given point. Points within geom have a negative signed distance, and points outside of geom have a positive signed distance. - The signed distance from a point to a point, line, linestring, or linear ring is equal to the distance between the two. - The signed distance from a point to a polygon is negative if the point is within the polygon and is positive otherwise. The value of the distance is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The signed distance from a point to a multigeometry or a geometry collection is the minimum signed distance between the point and any of the sub-geometries.

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

source


# GeometryOps.areaFunction.
julia
area(geom, [T = Float64])::T

Returns the area of a geometry or collection of geometries. This is computed slightly differently for different geometries:

- The area of a point/multipoint is always zero.
 - The area of a curve/multicurve is always zero.
 - The area of a polygon is the absolute value of the signed area.
 - The area multi-polygon is the sum of the areas of all of the sub-polygons.
 - The area of a geometry collection, feature collection of array/iterable 
-    is the sum of the areas 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


# GeometryOps.signed_areaFunction.
julia
signed_area(geom, [T = Float64])::T

Returns the signed area of a single geometry, based on winding order. This is computed slighly differently for different geometries:

- The signed area of a point is always zero.
+    is the sum of the areas 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


# GeometryOps.signed_areaFunction.
julia
signed_area(geom, [T = Float64])::T

Returns the signed area of a single geometry, based on winding order. This is computed slighly 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 computed with the shoelace formula and is
 positive if the polygon coordinates wind clockwise and negative if
 counterclockwise.
 - You cannot compute the signed area of a multipolygon as it doesn't have a
-meaning as each sub-polygon could have a different winding order.

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

source


# GeometryOps.anglesFunction.
julia
angles(geom, ::Type{T} = Float64)

Returns the angles of a geometry or collection of geometries. This is computed differently for different geometries:

- The angles of a point is an empty vector.
+meaning as each sub-polygon could have a different winding order.

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

source


# GeometryOps.anglesFunction.
julia
angles(geom, ::Type{T} = Float64)

Returns the angles of a geometry or collection of geometries. This is computed differently for different geometries:

- The angles of a point is an empty vector.
 - The angles of a single line segment is an empty vector.
 - The angles of a linestring or linearring is a vector of angles formed by the curve.
 - The angles of a polygin 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


# GeometryOps.embed_extentFunction.
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_coordinatesFunction.
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


# GeometryOps.barycentric_interpolateFunction.
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.AbstractBarycentricCoordinateMethodType.
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.ClosedRingType.
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.DiffIntersectingPolygonsType.
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.DouglasPeuckerType.
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


# GeometryOps.embed_extentFunction.
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_coordinatesFunction.
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


# GeometryOps.barycentric_interpolateFunction.
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.AbstractBarycentricCoordinateMethodType.
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.ClosedRingType.
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.DiffIntersectingPolygonsType.
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.DouglasPeuckerType.
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 uneccesary computation in algorithm.

source


# GeometryOps.GeodesicSegmentsType.
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.GeometryCorrectionType.
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.LineOrientationType.
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 (colinear with the curve), or line_out (not interacting with the curve).

source


# GeometryOps.LinearSegmentsType.
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.MeanValueType.
julia
MeanValue() <: AbstractBarycentricCoordinateMethod

This method calculates barycentric coordinates using the mean value method.

References

source


# GeometryOps.PointOrientationType.
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.RadialDistanceType.
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 uneccesary computation in algorithm.

source


# GeometryOps.SimplifyAlgType.
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.TraitTargetType.
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 uneccesary computation in algorithm.

source


# GeometryOps.GeodesicSegmentsType.
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.GeometryCorrectionType.
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.LineOrientationType.
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 (colinear with the curve), or line_out (not interacting with the curve).

source


# GeometryOps.LinearSegmentsType.
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.MeanValueType.
julia
MeanValue() <: AbstractBarycentricCoordinateMethod

This method calculates barycentric coordinates using the mean value method.

References

source


# GeometryOps.PointOrientationType.
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.RadialDistanceType.
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 uneccesary computation in algorithm.

source


# GeometryOps.SimplifyAlgType.
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.TraitTargetType.
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.UnionIntersectingPolygonsType.
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.VisvalingamWhyattType.
julia
VisvalingamWhyatt <: SimplifyAlg
+# etc.

source


# GeometryOps.UnionIntersectingPolygonsType.
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.VisvalingamWhyattType.
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 uneccesary computation in algorithm.

source


# GeometryOps._detMethod.
julia
_det(s1::Point2{T1}, s2::Point2{T2}) where {T1 <: Real, T2 <: Real}

Returns the determinant of the matrix formed by hcat'ing two points s1 and s2.

Specifically, this is:

julia
s1[1] * s2[2] - s1[2] * s2[1]

source


# GeometryOps._equals_curvesMethod.
julia
_equals_curves(c1, c2, closed_type1, closed_type2)::Bool

Two curves are equal if they share the same set of point, representing the same geometry. Both curves must must be composed of the same set of points, however, they do not have to wind in the same direction, or start on the same point to be equivalent. Inputs: c1 first geometry c2 second geometry closed_type1::Bool true if c1 is closed by definition (polygon, linear ring) closed_type2::Bool true if c2 is closed by definition (polygon, linear ring)

source


# GeometryOps.anglesMethod.
julia
angles(geom, ::Type{T} = Float64)

Returns the angles of a geometry or collection of geometries. This is computed differently for different geometries:

- The angles of a point is an empty vector.
+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 uneccesary computation in algorithm.

source


# GeometryOps._detMethod.
julia
_det(s1::Point2{T1}, s2::Point2{T2}) where {T1 <: Real, T2 <: Real}

Returns the determinant of the matrix formed by hcat'ing two points s1 and s2.

Specifically, this is:

julia
s1[1] * s2[2] - s1[2] * s2[1]

source


# GeometryOps._equals_curvesMethod.
julia
_equals_curves(c1, c2, closed_type1, closed_type2)::Bool

Two curves are equal if they share the same set of point, representing the same geometry. Both curves must must be composed of the same set of points, however, they do not have to wind in the same direction, or start on the same point to be equivalent. Inputs: c1 first geometry c2 second geometry closed_type1::Bool true if c1 is closed by definition (polygon, linear ring) closed_type2::Bool true if c2 is closed by definition (polygon, linear ring)

source


# GeometryOps.anglesMethod.
julia
angles(geom, ::Type{T} = Float64)

Returns the angles of a geometry or collection of geometries. This is computed differently for different geometries:

- The angles of a point is an empty vector.
 - The angles of a single line segment is an empty vector.
 - The angles of a linestring or linearring is a vector of angles formed by the curve.
 - The angles of a polygin 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


# GeometryOps.applyMethod.
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. But "deeper" objects may remain unchanged - such as points and linear rings if the target is the same PolygonTrait.

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
+    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.applyMethod.
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. But "deeper" objects may remain unchanged - such as points and linear rings if the target is the same PolygonTrait.

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)])])
 
 flipped_geom = GO.apply(GI.PointTrait, geom) do p
     (GI.y(p), GI.x(p))
-end

source


# GeometryOps.applyreduceMethod.
julia
applyreduce(f, op, target::Union{TraitTarget, GI.AbstractTrait}, obj; threaded)

Apply function f to all objects with the target trait, and reduce the result with an op like +.

The order and grouping of application of op is not guaranteed.

If threaded==true threads will be used over arrays and iterables, feature collections and nested geometries.

source


# GeometryOps.areaMethod.
julia
area(geom, [T = Float64])::T

Returns the area of a geometry or collection of geometries. This is computed slightly differently for different geometries:

- The area of a point/multipoint is always zero.
+end

source


# GeometryOps.applyreduceMethod.
julia
applyreduce(f, op, target::Union{TraitTarget, GI.AbstractTrait}, obj; threaded)

Apply function f to all objects with the target trait, and reduce the result with an op like +.

The order and grouping of application of op is not guaranteed.

If threaded==true threads will be used over arrays and iterables, feature collections and nested geometries.

source


# GeometryOps.areaMethod.
julia
area(geom, [T = Float64])::T

Returns the area of a geometry or collection of geometries. This is computed slightly differently for different geometries:

- The area of a point/multipoint is always zero.
 - The area of a curve/multicurve is always zero.
 - The area of a polygon is the absolute value of the signed area.
 - The area multi-polygon is the sum of the areas of all of the sub-polygons.
 - The area of a geometry collection, feature collection of array/iterable 
-    is the sum of the areas 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


# GeometryOps.barycentric_coordinates!Method.
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_coordinatesMethod.
julia
barycentric_coordinates(method = MeanValue(), polygon, point)

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

source


# GeometryOps.barycentric_interpolateMethod.
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


# GeometryOps.centroidMethod.
julia
centroid(geom, [T=Float64])::Tuple{T, T}

Returns the centroid of a given line segment, linear ring, polygon, or mutlipolygon.

source


# GeometryOps.centroid_and_areaMethod.
julia
centroid_and_area(geom, [T=Float64])::(::Tuple{T, T}, ::Real)

Returns the centroid and area of a given geometry.

source


# GeometryOps.centroid_and_lengthMethod.
julia
centroid_and_length(geom, [T=Float64])::(::Tuple{T, T}, ::Real)

Returns the centroid and length of a given line/ring. Note this is only valid for line strings and linear rings.

source


# GeometryOps.containsMethod.
julia
contains(g1::AbstractGeometry, g2::AbstractGeometry)::Bool

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

contains returns the exact opposite result of within.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+    is the sum of the areas 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


# GeometryOps.barycentric_coordinates!Method.
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_coordinatesMethod.
julia
barycentric_coordinates(method = MeanValue(), polygon, point)

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

source


# GeometryOps.barycentric_interpolateMethod.
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


# GeometryOps.centroidMethod.
julia
centroid(geom, [T=Float64])::Tuple{T, T}

Returns the centroid of a given line segment, linear ring, polygon, or mutlipolygon.

source


# GeometryOps.centroid_and_areaMethod.
julia
centroid_and_area(geom, [T=Float64])::(::Tuple{T, T}, ::Real)

Returns the centroid and area of a given geometry.

source


# GeometryOps.centroid_and_lengthMethod.
julia
centroid_and_length(geom, [T=Float64])::(::Tuple{T, T}, ::Real)

Returns the centroid and length of a given line/ring. Note this is only valid for line strings and linear rings.

source


# GeometryOps.containsMethod.
julia
contains(g1::AbstractGeometry, g2::AbstractGeometry)::Bool

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

contains returns the exact opposite result of within.

Examples

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

source


# GeometryOps.coverageMethod.
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


# GeometryOps.coveredbyMethod.
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


# GeometryOps.coverageMethod.
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


# GeometryOps.coveredbyMethod.
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


# GeometryOps.coversMethod.
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


# GeometryOps.coversMethod.
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, 1), (1, 2), (1, 3), (1, 4)])
 l2 = GI.LineString([(1, 1), (1, 2)])
 
 GO.covers(l1, l2)
 # output
-true

source


# GeometryOps.crossesMethod.
julia
 crosses(geom1, geom2)::Bool

Return true if the intersection results in a geometry whose dimension is one less than the maximum dimension of the two source geometries and the intersection set is interior to both source geometries.

TODO: broken

Examples

julia
import GeoInterface as GI, GeometryOps as GO
-# TODO: Add working example

source


# GeometryOps.cutMethod.
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 geom. Return the original geometry as only list element if none are found. Line must cut fully through given geometry or the original geometry will be returned.

Note: This currently doesn't work for degenerate cases there line crosses through vertices.

Example

julia
import GeoInterface as GI, GeometryOps as GO
+true

source


# GeometryOps.crossesMethod.
julia
 crosses(geom1, geom2)::Bool

Return true if the intersection results in a geometry whose dimension is one less than the maximum dimension of the two source geometries and the intersection set is interior to both source geometries.

TODO: broken

Examples

julia
import GeoInterface as GI, GeometryOps as GO
+# TODO: Add working example

source


# GeometryOps.cutMethod.
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 geom. Return the original geometry as only list element if none are found. Line must cut fully through given geometry or the original geometry will be returned.

Note: This currently doesn't work for degenerate cases there line crosses through vertices.

Example

julia
import GeoInterface as GI, GeometryOps as GO
 
 poly = GI.Polygon([[(0.0, 0.0), (10.0, 0.0), (10.0, 10.0), (0.0, 10.0), (0.0, 0.0)]])
 line = GI.Line([(5.0, -5.0), (5.0, 15.0)])
@@ -209,7 +209,7 @@
 # output
 2-element Vector{Vector{Vector{Vector{Float64}}}}:
  [[[0.0, 0.0], [5.0, 0.0], [5.0, 10.0], [0.0, 10.0], [0.0, 0.0]]]
- [[[5.0, 0.0], [10.0, 0.0], [10.0, 10.0], [5.0, 10.0], [5.0, 0.0]]]

source


# GeometryOps.differenceMethod.
julia
difference(geom_a, geom_b, [T::Type]; target::Type, fix_multipoly = UnionIntersectingPolygons())

Return the difference between two geometries as a list of geometries. Return an empty list if none are found. The type of the list will be constrained as much as possible given the input geometries. Furthermore, the user can provide a taget type as a keyword argument and a list of target geometries found in the difference will be returned. The user can also provide a float type that they would like the points of returned geometries to be. If the user is taking a intersection involving one or more multipolygons, and the multipolygon might be comprised of polygons that intersect, if fix_multipoly is set to an IntersectingPolygons correction (the default is UnionIntersectingPolygons()), then the needed multipolygons will be fixed to be valid before performing the intersection to ensure a correct answer. Only set fix_multipoly to false if you know that the multipolygons are valid, as it will avoid unneeded computation.

Example

julia
import GeoInterface as GI, GeometryOps as GO
+ [[[5.0, 0.0], [10.0, 0.0], [10.0, 10.0], [5.0, 10.0], [5.0, 0.0]]]

source


# GeometryOps.differenceMethod.
julia
difference(geom_a, geom_b, [T::Type]; target::Type, fix_multipoly = UnionIntersectingPolygons())

Return the difference between two geometries as a list of geometries. Return an empty list if none are found. The type of the list will be constrained as much as possible given the input geometries. Furthermore, the user can provide a taget type as a keyword argument and a list of target geometries found in the difference will be returned. The user can also provide a float type that they would like the points of returned geometries to be. If the user is taking a intersection involving one or more multipolygons, and the multipolygon might be comprised of polygons that intersect, if fix_multipoly is set to an IntersectingPolygons correction (the default is UnionIntersectingPolygons()), then the needed multipolygons will be fixed to be valid before performing the intersection to ensure a correct answer. Only set fix_multipoly to false if you know that the multipolygons are valid, as it will avoid unneeded computation.

Example

julia
import GeoInterface as GI, GeometryOps as GO
 
 poly1 = GI.Polygon([[[0.0, 0.0], [5.0, 5.0], [10.0, 0.0], [5.0, -5.0], [0.0, 0.0]]])
 poly2 = GI.Polygon([[[3.0, 0.0], [8.0, 5.0], [13.0, 0.0], [8.0, -5.0], [3.0, 0.0]]])
@@ -218,33 +218,33 @@
 
 # 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], [3.0, 0.0], [6.5, 3.5]]]

source


# GeometryOps.disjointMethod.
julia
disjoint(geom1, geom2)::Bool

Return true if the first geometry is disjoint from the second geometry.

Return true if the first geometry is disjoint from the second geometry. The interiors and boundaries of both geometries must not intersect.

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], [3.0, 0.0], [6.5, 3.5]]]

source


# GeometryOps.disjointMethod.
julia
disjoint(geom1, geom2)::Bool

Return true if the first geometry is disjoint from the second geometry.

Return true if the first geometry is disjoint from the second geometry. The interiors and boundaries of both geometries must not intersect.

Examples

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

source


# GeometryOps.distanceMethod.
julia
distance(point, geom, ::Type{T} = Float64)::T

Calculates the ditance from the geometry g1 to the point. The distance will always be positive or zero.

The method will differ based on the type of the geometry provided: - The distance from a point to a point is just the Euclidean distance between the points. - The distance from a point to a line is the minimum distance from the point to the closest point on the given line. - The distance from a point to a linestring is the minimum distance from the point to the closest segment of the linestring. - The distance from a point to a linear ring is the minimum distance from the point to the closest segment of the linear ring. - The distance from a point to a polygon is zero if the point is within the polygon and otherwise is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The distance from a point to a multigeometry or a geometry collection is the minimum distance between the point and any of the sub-geometries.

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

source


# GeometryOps.embed_extentMethod.
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


# GeometryOps.equalsMethod.
julia
equals(trait_a, geom_a, trait_b, geom_b)

Two geometries which are not of the same type cannot be equal so they always return false.

source


# GeometryOps.equalsMethod.
julia
equals(geom1, geom2)::Bool

Compare two Geometries return true if they are the same geometry.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+true

source


# GeometryOps.distanceMethod.
julia
distance(point, geom, ::Type{T} = Float64)::T

Calculates the ditance from the geometry g1 to the point. The distance will always be positive or zero.

The method will differ based on the type of the geometry provided: - The distance from a point to a point is just the Euclidean distance between the points. - The distance from a point to a line is the minimum distance from the point to the closest point on the given line. - The distance from a point to a linestring is the minimum distance from the point to the closest segment of the linestring. - The distance from a point to a linear ring is the minimum distance from the point to the closest segment of the linear ring. - The distance from a point to a polygon is zero if the point is within the polygon and otherwise is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The distance from a point to a multigeometry or a geometry collection is the minimum distance between the point and any of the sub-geometries.

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

source


# GeometryOps.embed_extentMethod.
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


# GeometryOps.equalsMethod.
julia
equals(trait_a, geom_a, trait_b, geom_b)

Two geometries which are not of the same type cannot be equal so they always return false.

source


# GeometryOps.equalsMethod.
julia
equals(geom1, geom2)::Bool

Compare two Geometries return true if they are the same geometry.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 poly1 = GI.Polygon([[(0,0), (0,5), (5,5), (5,0), (0,0)]])
 poly2 = GI.Polygon([[(0,0), (0,5), (5,5), (5,0), (0,0)]])
 
 GO.equals(poly1, poly2)
 # output
-true

source


# GeometryOps.equalsMethod.
julia
equals(
+true

source


# GeometryOps.equalsMethod.
julia
equals(
     ::GI.LinearRingTrait, l1,
     ::GI.LinearRingTrait, l2,
-)::Bool

Two linear rings are equal if they share the same set of points going along the curve. Note that rings are closed by definition, so they can have, but don't need, a repeated last point to be equal.

source


# GeometryOps.equalsMethod.
julia
equals(
+)::Bool

Two linear rings are equal if they share the same set of points going along the curve. Note that rings are closed by definition, so they can have, but don't need, a repeated last point to be equal.

source


# GeometryOps.equalsMethod.
julia
equals(
     ::GI.LinearRingTrait, l1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, l2,
-)::Bool

A linear ring and a line/linestring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPointTrait, mp1, ::GI.MultiPointTrait, mp2)::Bool

Two multipoints are equal if they share the same set of points.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPointTrait, mp1, ::GI.PointTrait, p2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two multipolygons are equal if they share the same set of polygons.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PointTrait, p1, ::GI.MultiPointTrait, mp2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PointTrait, p1, ::GI.PointTrait, p2)::Bool

Two points are the same if they have the same x and y (and z if 3D) coordinates.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.MultiPolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two polygons are equal if they share the same exterior edge and holes.

source


# GeometryOps.equalsMethod.
julia
equals(
+)::Bool

A linear ring and a line/linestring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPointTrait, mp1, ::GI.MultiPointTrait, mp2)::Bool

Two multipoints are equal if they share the same set of points.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPointTrait, mp1, ::GI.PointTrait, p2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two multipolygons are equal if they share the same set of polygons.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PointTrait, p1, ::GI.MultiPointTrait, mp2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PointTrait, p1, ::GI.PointTrait, p2)::Bool

Two points are the same if they have the same x and y (and z if 3D) coordinates.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.MultiPolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two polygons are equal if they share the same exterior edge and holes.

source


# GeometryOps.equalsMethod.
julia
equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
     ::GI.LinearRingTrait, l2,
-)::Bool

A line/linestring and a linear ring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source


# GeometryOps.equalsMethod.
julia
equals(
+)::Bool

A line/linestring and a linear ring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source


# GeometryOps.equalsMethod.
julia
equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, l2,
-)::Bool

Two lines/linestrings are equal if they share the same set of points going along the curve. Note that lines/linestrings aren't closed by defintion.

source


# GeometryOps.equalsMethod.
julia
equals(::T, geom_a, ::T, geom_b)::Bool

Two geometries of the same type, which don't have a equals function to dispatch off of should throw an error.

source


# GeometryOps.flattenMethod.
julia
flatten(target::Type{<:GI.AbstractTrait}, obj)
-flatten(f, target::Type{<:GI.AbstractTrait}, obj)

Lazily flatten any AbstractArray, iterator, FeatureCollectionTrait, FeatureTrait or AbstractGeometryTrait object obj, so that objects with the target trait are returned by the iterator.

If f is passed in it will be applied to the target geometries.

source


# GeometryOps.flipMethod.
julia
flip(obj)

Swap all of the x and y coordinates in obj, otherwise keeping the original structure (but not necessarily the original type).

Keywords

  • 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.

source


# GeometryOps.get_contoursMethod.

get_contours(A::AbstractMatrix)

Returns contours as vectors of CartesianIndex.

source


# GeometryOps.intersectionMethod.
julia
intersection(geom_a, geom_b, [T::Type]; target::Type, fix_multipoly = UnionIntersectingPolygons())

Return the intersection between two geometries as a list of geometries. Return an empty list if none are found. The type of the list will be constrained as much as possible given the input geometries. Furthermore, the user can provide a target type as a keyword argument and a list of target geometries found in the intersection will be returned. The user can also provide a float type that they would like the points of returned geometries to be. If the user is taking a intersection involving one or more multipolygons, and the multipolygon might be comprised of polygons that intersect, if fix_multipoly is set to an IntersectingPolygons correction (the default is UnionIntersectingPolygons()), then the needed multipolygons will be fixed to be valid before performing the intersection to ensure a correct answer. Only set fix_multipoly to nothing if you know that the multipolygons are valid, as it will avoid unneeded computation.

Example

julia
import GeoInterface as GI, GeometryOps as GO
+)::Bool

Two lines/linestrings are equal if they share the same set of points going along the curve. Note that lines/linestrings aren't closed by defintion.

source


# GeometryOps.equalsMethod.
julia
equals(::T, geom_a, ::T, geom_b)::Bool

Two geometries of the same type, which don't have a equals function to dispatch off of should throw an error.

source


# GeometryOps.flattenMethod.
julia
flatten(target::Type{<:GI.AbstractTrait}, obj)
+flatten(f, target::Type{<:GI.AbstractTrait}, obj)

Lazily flatten any AbstractArray, iterator, FeatureCollectionTrait, FeatureTrait or AbstractGeometryTrait object obj, so that objects with the target trait are returned by the iterator.

If f is passed in it will be applied to the target geometries.

source


# GeometryOps.flipMethod.
julia
flip(obj)

Swap all of the x and y coordinates in obj, otherwise keeping the original structure (but not necessarily the original type).

Keywords

  • 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.

source


# GeometryOps.get_contoursMethod.

get_contours(A::AbstractMatrix)

Returns contours as vectors of CartesianIndex.

source


# GeometryOps.intersectionMethod.
julia
intersection(geom_a, geom_b, [T::Type]; target::Type, fix_multipoly = UnionIntersectingPolygons())

Return the intersection between two geometries as a list of geometries. Return an empty list if none are found. The type of the list will be constrained as much as possible given the input geometries. Furthermore, the user can provide a target type as a keyword argument and a list of target geometries found in the intersection will be returned. The user can also provide a float type that they would like the points of returned geometries to be. If the user is taking a intersection involving one or more multipolygons, and the multipolygon might be comprised of polygons that intersect, if fix_multipoly is set to an IntersectingPolygons correction (the default is UnionIntersectingPolygons()), then the needed multipolygons will be fixed to be valid before performing the intersection to ensure a correct answer. Only set fix_multipoly to nothing if you know that the multipolygons are valid, as it will avoid unneeded computation.

Example

julia
import GeoInterface as GI, GeometryOps as GO
 
 line1 = GI.Line([(124.584961,-12.768946), (126.738281,-17.224758)])
 line2 = GI.Line([(123.354492,-15.961329), (127.22168,-14.008696)])
@@ -253,68 +253,68 @@
 
 # output
 1-element Vector{Vector{Float64}}:
- [125.58375366067547, -14.83572303404496]

source


# GeometryOps.intersection_pointsMethod.
julia
intersection_points(
+ [125.58375366067547, -14.83572303404496]

source


# GeometryOps.intersection_pointsMethod.
julia
intersection_points(
     geom_a,
     geom_b,
 )::Union{
     ::Vector{::Tuple{::Real, ::Real}},
     ::Nothing,
-}

Return a list of intersection points between two geometries of type GI.Point. If no intersection point was possible given geometry extents, returns an empty list.

source


# GeometryOps.intersectsMethod.
julia
intersects(geom1, geom2)::Bool

Return true if the interiors or boundaries of the two geometries interact.

intersects returns the exact opposite result of disjoint.

Example

julia
import GeoInterface as GI, GeometryOps as GO
+}

Return a list of intersection points between two geometries of type GI.Point. If no intersection point was possible given geometry extents, returns an empty list.

source


# GeometryOps.intersectsMethod.
julia
intersects(geom1, geom2)::Bool

Return true if the interiors or boundaries of the two geometries interact.

intersects returns the exact opposite result of disjoint.

Example

julia
import GeoInterface as GI, GeometryOps as GO
 
 line1 = GI.Line([(124.584961,-12.768946), (126.738281,-17.224758)])
 line2 = GI.Line([(123.354492,-15.961329), (127.22168,-14.008696)])
 GO.intersects(line1, line2)
 
 # output
-true

source


# GeometryOps.isclockwiseMethod.
julia
isclockwise(line::Union{LineString, Vector{Position}})::Bool

Take a ring and return true or false whether or not the ring is clockwise or counter-clockwise.

Example

julia
import GeoInterface as GI, GeometryOps as GO
+true

source


# GeometryOps.isclockwiseMethod.
julia
isclockwise(line::Union{LineString, Vector{Position}})::Bool

Take a ring and return true or false whether or not the ring is clockwise or counter-clockwise.

Example

julia
import GeoInterface as GI, GeometryOps as GO
 
 ring = GI.LinearRing([(0, 0), (1, 1), (1, 0), (0, 0)])
 GO.isclockwise(ring)
 
 # output
-true

source


# GeometryOps.isconcaveMethod.
julia
isconcave(poly::Polygon)::Bool

Take a polygon and return true or false as to whether it is concave or not.

Examples

julia
import GeoInterface as GI, GeometryOps as GO
+true

source


# GeometryOps.isconcaveMethod.
julia
isconcave(poly::Polygon)::Bool

Take a polygon and return true or false as to whether it is concave or not.

Examples

julia
import GeoInterface as GI, GeometryOps as GO
 
 poly = GI.Polygon([[(0, 0), (0, 1), (1, 1), (1, 0), (0, 0)]])
 GO.isconcave(poly)
 
 # output
-false

source


# GeometryOps.overlapsMethod.
julia
overlaps(geom1, geom2)::Bool

Compare two Geometries of the same dimension and return true if their intersection set results in a geometry different from both but of the same dimension. This means one geometry cannot be within or contain the other and they cannot be equal

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+false

source


# GeometryOps.overlapsMethod.
julia
overlaps(geom1, geom2)::Bool

Compare two Geometries of the same dimension and return true if their intersection set results in a geometry different from both but of the same dimension. This means one geometry cannot be within or contain the other and they cannot be equal

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 poly1 = GI.Polygon([[(0,0), (0,5), (5,5), (5,0), (0,0)]])
 poly2 = GI.Polygon([[(1,1), (1,6), (6,6), (6,1), (1,1)]])
 
 GO.overlaps(poly1, poly2)
 # output
-true

source


# GeometryOps.overlapsMethod.
julia
overlaps(::GI.AbstractTrait, geom1, ::GI.AbstractTrait, geom2)::Bool

For any non-specified pair, all have non-matching dimensions, return false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool

If the lines overlap, meaning that they are colinear but each have one endpoint outside of the other line, return true. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
+true

source


# GeometryOps.overlapsMethod.
julia
overlaps(::GI.AbstractTrait, geom1, ::GI.AbstractTrait, geom2)::Bool

For any non-specified pair, all have non-matching dimensions, return false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool

If the lines overlap, meaning that they are colinear but each have one endpoint outside of the other line, return true. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
     ::GI.MultiPointTrait, points1,
     ::GI.MultiPointTrait, points2,
-)::Bool

If the multipoints overlap, meaning some, but not all, of the points within the multipoints are shared, return true.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
+)::Bool

If the multipoints overlap, meaning some, but not all, of the points within the multipoints are shared, return true.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
     ::GI.MultiPolygonTrait, polys1,
     ::GI.MultiPolygonTrait, polys2,
-)::Bool

Return true if at least one pair of polygons from multipolygons overlap. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
+)::Bool

Return true if at least one pair of polygons from multipolygons overlap. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
     ::GI.MultiPolygonTrait, polys1,
     ::GI.PolygonTrait, poly2,
-)::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
+)::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
     ::GI.PolygonTrait, poly1,
     ::GI.MultiPolygonTrait, polys2,
-)::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
+)::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
     trait_a::GI.PolygonTrait, poly_a,
     trait_b::GI.PolygonTrait, poly_b,
-)::Bool

If the two polygons intersect with one another, but are not equal, return true. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
+)::Bool

If the two polygons intersect with one another, but are not equal, return true. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
     ::Union{GI.LineStringTrait, GI.LinearRing}, line1,
     ::Union{GI.LineStringTrait, GI.LinearRing}, line2,
-)::Bool

If the curves overlap, meaning that at least one edge of each curve overlaps, return true. Else false.

source


# GeometryOps.polygon_to_lineMethod.
julia
polygon_to_line(poly::Polygon)

Converts a Polygon to LineString or MultiLineString

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+)::Bool

If the curves overlap, meaning that at least one edge of each curve overlaps, return true. Else false.

source


# GeometryOps.polygon_to_lineMethod.
julia
polygon_to_line(poly::Polygon)

Converts a Polygon to LineString or MultiLineString

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 
 poly = GI.Polygon([[(-2.275543, 53.464547), (-2.275543, 53.489271), (-2.215118, 53.489271), (-2.215118, 53.464547), (-2.275543, 53.464547)]])
 GO.polygon_to_line(poly)
 # output
-GeoInterface.Wrappers.LineString{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(-2.275543, 53.464547), (-2.275543, 53.489271), (-2.215118, 53.489271), (-2.215118, 53.464547), (-2.275543, 53.464547)], nothing, nothing)

source


# GeometryOps.polygonizeMethod.
julia
polygonize(A; minpoints=10)
-polygonize(xs, ys, A; minpoints=10)

Convert matrix A to polygons.

If xs and ys are passed in they are used as the pixel center points.

Keywords

  • minpoints: ignore polygons with less than minpoints points.

source


# GeometryOps.rebuildMethod.
julia
rebuild(geom, child_geoms)

Rebuild a geometry from child geometries.

By default geometries will be rebuilt as a GeoInterface.Wrappers geometry, but rebuild can have methods added to it to dispatch on geometries from other packages and specify how to rebuild them.

(Maybe it should go into GeoInterface.jl)

source


# GeometryOps.reconstructMethod.
julia
reconstruct(geom, components)

Reconstruct geom from an iterable of component objects that match its structure.

All objects in components must have the same GeoInterface.trait.

Ususally used in combination with flatten.

source


# GeometryOps.segmentizeMethod.
julia
segmentize([method = LinearSegments()], geom; max_distance::Real, threaded)

Segmentize 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.

Arguments

  • method::SegmentizeMethod = LinearSegments(): The method to use for segmentizing the geometry. At the moment, only LinearSegments and GeodesicSegments are available.

  • geom: The geometry to segmentize. Must be a LineString, LinearRing, or greater in complexity.

  • max_distance::Real: The maximum distance, in the input space, between vertices in the geometry. Only used if you don't explicitly pass a method.

Returns a geometry of similar type to the input geometry, but resampled.

source


# GeometryOps.signed_areaMethod.
julia
signed_area(geom, [T = Float64])::T

Returns the signed area of a single geometry, based on winding order. This is computed slighly differently for different geometries:

- The signed area of a point is always zero.
+GeoInterface.Wrappers.LineString{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(-2.275543, 53.464547), (-2.275543, 53.489271), (-2.215118, 53.489271), (-2.215118, 53.464547), (-2.275543, 53.464547)], nothing, nothing)

source


# GeometryOps.polygonizeMethod.
julia
polygonize(A; minpoints=10)
+polygonize(xs, ys, A; minpoints=10)

Convert matrix A to polygons.

If xs and ys are passed in they are used as the pixel center points.

Keywords

  • minpoints: ignore polygons with less than minpoints points.

source


# GeometryOps.rebuildMethod.
julia
rebuild(geom, child_geoms)

Rebuild a geometry from child geometries.

By default geometries will be rebuilt as a GeoInterface.Wrappers geometry, but rebuild can have methods added to it to dispatch on geometries from other packages and specify how to rebuild them.

(Maybe it should go into GeoInterface.jl)

source


# GeometryOps.reconstructMethod.
julia
reconstruct(geom, components)

Reconstruct geom from an iterable of component objects that match its structure.

All objects in components must have the same GeoInterface.trait.

Ususally used in combination with flatten.

source


# GeometryOps.segmentizeMethod.
julia
segmentize([method = LinearSegments()], geom; max_distance::Real, threaded)

Segmentize 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.

Arguments

  • method::SegmentizeMethod = LinearSegments(): The method to use for segmentizing the geometry. At the moment, only LinearSegments and GeodesicSegments are available.

  • geom: The geometry to segmentize. Must be a LineString, LinearRing, or greater in complexity.

  • max_distance::Real: The maximum distance, in the input space, between vertices in the geometry. Only used if you don't explicitly pass a method.

Returns a geometry of similar type to the input geometry, but resampled.

source


# GeometryOps.signed_areaMethod.
julia
signed_area(geom, [T = Float64])::T

Returns the signed area of a single geometry, based on winding order. This is computed slighly 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 computed with the shoelace formula and is
 positive if the polygon coordinates wind clockwise and negative if
 counterclockwise.
 - You cannot compute the signed area of a multipolygon as it doesn't have a
-meaning as each sub-polygon could have a different winding order.

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

source


# GeometryOps.signed_distanceMethod.
julia
signed_distance(point, geom, ::Type{T} = Float64)::T

Calculates the signed distance from the geometry geom to the given point. Points within geom have a negative signed distance, and points outside of geom have a positive signed distance. - The signed distance from a point to a point, line, linestring, or linear ring is equal to the distance between the two. - The signed distance from a point to a polygon is negative if the point is within the polygon and is positive otherwise. The value of the distance is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The signed distance from a point to a multigeometry or a geometry collection is the minimum signed distance between the point and any of the sub-geometries.

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

source


# GeometryOps.simplifyMethod.
julia
simplify(obj; kw...)
+meaning as each sub-polygon could have a different winding order.

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

source


# GeometryOps.signed_distanceMethod.
julia
signed_distance(point, geom, ::Type{T} = Float64)::T

Calculates the signed distance from the geometry geom to the given point. Points within geom have a negative signed distance, and points outside of geom have a positive signed distance. - The signed distance from a point to a point, line, linestring, or linear ring is equal to the distance between the two. - The signed distance from a point to a polygon is negative if the point is within the polygon and is positive otherwise. The value of the distance is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The signed distance from a point to a multigeometry or a geometry collection is the minimum signed distance between the point and any of the sub-geometries.

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

source


# GeometryOps.simplifyMethod.
julia
simplify(obj; kw...)
 simplify(::SimplifyAlg, obj; kw...)

Simplify a geometry, feature, feature collection, or nested vectors or a table of these.

RadialDistance, DouglasPeucker, or VisvalingamWhyatt algorithms are available, listed in order of increasing quality but decreaseing performance.

PoinTrait and MultiPointTrait are returned unchanged.

The default behaviour is simplify(DouglasPeucker(; kw...), obj). Pass in other SimplifyAlg to use other algorithms.

Keywords

  • prefilter_alg: SimplifyAlg algorithm used to pre-filter object before using primary filtering algorithm.

  • 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.

Keywords for DouglasPeucker are allowed when no algorithm is specified:

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.

Example

Simplify a polygon to have six points:

julia
import GeoInterface as GI
 import GeometryOps as GO
 
@@ -344,9 +344,9 @@
 GI.npoint(simple)
 
 # output
-6

source


# GeometryOps.t_valueMethod.
julia
t_value(sᵢ, sᵢ₊₁, rᵢ, rᵢ₊₁)

Returns the "T-value" as described in Hormann's presentation [1] on how to calculate the mean-value coordinate.

Here, sᵢ is the vector from vertex vᵢ to the point, and rᵢ is the norm (length) of sᵢ. s must be Point and r must be real numbers.

t=det(s,s)rr+ss

+6

source


# GeometryOps.t_valueMethod.
julia
t_value(sᵢ, sᵢ₊₁, rᵢ, rᵢ₊₁)

Returns the "T-value" as described in Hormann's presentation [1] on how to calculate the mean-value coordinate.

Here, sᵢ is the vector from vertex vᵢ to the point, and rᵢ is the norm (length) of sᵢ. s must be Point and r must be real numbers.

t=det(s,s)rr+ss

 
-[source](https://github.com/JuliaGeo/GeometryOps.jl/blob/e147c6f8b89dc51c8f7d284ffa0749282b17fb28/src/methods/barycentric.jl#L289-L305)
+[source](https://github.com/JuliaGeo/GeometryOps.jl/blob/9308dd329db3ac8fd436990a347bdc1fd502b820/src/methods/barycentric.jl#L289-L305)
 
 </div>
 <br>
@@ -357,14 +357,14 @@
 
 
 ```julia
-to_edges()

Convert any geometry or collection of geometries into a flat vector of Tuple{Tuple{Float64,Float64},Tuple{Float64,Float64}} edges.

source


# GeometryOps.touchesMethod.
julia
touches(geom1, geom2)::Bool

Return true if the first geometry touches the second geometry. In other words, the two interiors cannot interact, but one of the geometries must have a boundary point that interacts with either the other geometies interior or boundary.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+to_edges()

Convert any geometry or collection of geometries into a flat vector of Tuple{Tuple{Float64,Float64},Tuple{Float64,Float64}} edges.

source


# GeometryOps.touchesMethod.
julia
touches(geom1, geom2)::Bool

Return true if the first geometry touches the second geometry. In other words, the two interiors cannot interact, but one of the geometries must have a boundary point that interacts with either the other geometies interior or boundary.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 
 l1 = GI.Line([(0.0, 0.0), (1.0, 0.0)])
 l2 = GI.Line([(1.0, 1.0), (1.0, -1.0)])
 
 GO.touches(l1, l2)
 # output
-true

source


# GeometryOps.transformMethod.
julia
transform(f, obj)

Apply a function f to all the points in obj.

Points will be passed to f as an SVector to allow using CoordinateTransformations.jl and Rotations.jl without hassle.

SVector is also a valid GeoInterface.jl point, so will work in all GeoInterface.jl methods.

Example

julia
julia> import GeoInterface as GI
+true

source


# GeometryOps.transformMethod.
julia
transform(f, obj)

Apply a function f to all the points in obj.

Points will be passed to f as an SVector to allow using CoordinateTransformations.jl and Rotations.jl without hassle.

SVector is also a valid GeoInterface.jl point, so will work in all GeoInterface.jl methods.

Example

julia
julia> import GeoInterface as GI
 
 julia> import GeometryOps as GO
 
@@ -383,7 +383,7 @@
 GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearR
 ing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}(StaticArraysCore.SVe
 ctor{2, Int64}[[2, 1], [4, 3], [6, 5], [2, 1]], nothing, nothing), GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}(StaticArraysCore.SVector{2, Int64
-}[[4, 3], [6, 5], [7, 6], [4, 3]], nothing, nothing)], nothing, nothing)

source


# GeometryOps.tuplesMethod.
julia
tuples(obj)

Convert all points in obj to Tuples, wherever the are nested.

Returns a similar object or collection of objects using GeoInterface.jl geometries wrapping Tuple points.

Keywords

  • 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.

source


# GeometryOps.unionMethod.
julia
union(geom_a, geom_b, [::Type{T}]; target::Type, fix_multipoly = UnionIntersectingPolygons())

Return the union between two geometries as a list of geometries. Return an empty list if none are found. The type of the list will be constrained as much as possible given the input geometries. Furthermore, the user can provide a taget type as a keyword argument and a list of target geometries found in the difference will be returned. The user can also provide a float type 'T' that they would like the points of returned geometries to be. If the user is taking a intersection involving one or more multipolygons, and the multipolygon might be comprised of polygons that intersect, if fix_multipoly is set to an IntersectingPolygons correction (the default is UnionIntersectingPolygons()), then the needed multipolygons will be fixed to be valid before performing the intersection to ensure a correct answer. Only set fix_multipoly to false if you know that the multipolygons are valid, as it will avoid unneeded computation.

Calculates the union between two polygons.

Example

julia
import GeoInterface as GI, GeometryOps as GO
+}[[4, 3], [6, 5], [7, 6], [4, 3]], nothing, nothing)], nothing, nothing)

source


# GeometryOps.tuplesMethod.
julia
tuples(obj)

Convert all points in obj to Tuples, wherever the are nested.

Returns a similar object or collection of objects using GeoInterface.jl geometries wrapping Tuple points.

Keywords

  • 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.

source


# GeometryOps.unionMethod.
julia
union(geom_a, geom_b, [::Type{T}]; target::Type, fix_multipoly = UnionIntersectingPolygons())

Return the union between two geometries as a list of geometries. Return an empty list if none are found. The type of the list will be constrained as much as possible given the input geometries. Furthermore, the user can provide a taget type as a keyword argument and a list of target geometries found in the difference will be returned. The user can also provide a float type 'T' that they would like the points of returned geometries to be. If the user is taking a intersection involving one or more multipolygons, and the multipolygon might be comprised of polygons that intersect, if fix_multipoly is set to an IntersectingPolygons correction (the default is UnionIntersectingPolygons()), then the needed multipolygons will be fixed to be valid before performing the intersection to ensure a correct answer. Only set fix_multipoly to false if you know that the multipolygons are valid, as it will avoid unneeded computation.

Calculates the union between two polygons.

Example

julia
import GeoInterface as GI, GeometryOps as GO
 
 p1 = GI.Polygon([[(0.0, 0.0), (5.0, 5.0), (10.0, 0.0), (5.0, -5.0), (0.0, 0.0)]])
 p2 = GI.Polygon([[(3.0, 0.0), (8.0, 5.0), (13.0, 0.0), (8.0, -5.0), (3.0, 0.0)]])
@@ -392,16 +392,16 @@
 
 # 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


# GeometryOps.unwrapFunction.
julia
unwrap(target::Type{<:AbstractTrait}, obj)
-unwrap(f, target::Type{<:AbstractTrait}, obj)

Unwrap the object to vectors, down to the target trait.

If f is passed in it will be applied to the target geometries as they are found.

source


# GeometryOps.weighted_meanMethod.
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


# GeometryOps.withinMethod.
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


# GeometryOps.unwrapFunction.
julia
unwrap(target::Type{<:AbstractTrait}, obj)
+unwrap(f, target::Type{<:AbstractTrait}, obj)

Unwrap the object to vectors, down to the target trait.

If f is passed in it will be applied to the target geometries as they are found.

source


# GeometryOps.weighted_meanMethod.
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


# GeometryOps.withinMethod.
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



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

- +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/previews/PR132/assets/ykdthcb.DRZWKM0o.png b/previews/PR132/assets/afjsydj.DRZWKM0o.png similarity index 100% rename from previews/PR132/assets/ykdthcb.DRZWKM0o.png rename to previews/PR132/assets/afjsydj.DRZWKM0o.png diff --git a/previews/PR132/assets/api.md.BQfhnVqd.js b/previews/PR132/assets/api.md.DJJ0t0ks.js similarity index 96% rename from previews/PR132/assets/api.md.BQfhnVqd.js rename to previews/PR132/assets/api.md.DJJ0t0ks.js index 8eac35224..6fcbf47d3 100644 --- a/previews/PR132/assets/api.md.BQfhnVqd.js +++ b/previews/PR132/assets/api.md.DJJ0t0ks.js @@ -1,13 +1,13 @@ -import{_ as n,c as e,l as s,a,a6 as i,o as t}from"./chunks/framework.DwyrAfcZ.js";const O=JSON.parse('{"title":"Full GeometryOps API documentation","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),l={name:"api.md"},h=i(`

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.applyFunction.
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. But "deeper" objects may remain unchanged - such as points and linear rings if the target is the same PolygonTrait.

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

Example

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

julia
import GeoInterface as GI
+import{_ as n,c as e,l as s,a,a6 as i,o as t}from"./chunks/framework.DwyrAfcZ.js";const O=JSON.parse('{"title":"Full GeometryOps API documentation","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),l={name:"api.md"},h=i(`

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.applyFunction.
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. But "deeper" objects may remain unchanged - such as points and linear rings if the target is the same PolygonTrait.

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)])])
 
 flipped_geom = GO.apply(GI.PointTrait, geom) do p
     (GI.y(p), GI.x(p))
-end

source


# GeometryOps.applyreduceFunction.
julia
applyreduce(f, op, target::Union{TraitTarget, GI.AbstractTrait}, obj; threaded)

Apply function f to all objects with the target trait, and reduce the result with an op like +.

The order and grouping of application of op is not guaranteed.

If threaded==true threads will be used over arrays and iterables, feature collections and nested geometries.

source


# GeometryOps.reprojectFunction.
julia
reproject(geometry; source_crs, target_crs, transform, always_xy, time)
+end

source


# GeometryOps.applyreduceFunction.
julia
applyreduce(f, op, target::Union{TraitTarget, GI.AbstractTrait}, obj; threaded)

Apply function f to all objects with the target trait, and reduce the result with an op like +.

The order and grouping of application of op is not guaranteed.

If threaded==true threads will be used over arrays and iterables, feature collections and nested geometries.

source


# GeometryOps.reprojectFunction.
julia
reproject(geometry; source_crs, target_crs, transform, always_xy, time)
 reproject(geometry, source_crs, target_crs; always_xy, time)
-reproject(geometry, transform; always_xy, time)

Reproject any GeoInterface.jl compatible geometry from source_crs to target_crs.

The returned object will be constructed from GeoInterface.WrapperGeometry geometries, wrapping views of a Vector{Proj.Point{D}}, where D is the dimension.

Tip

The Proj.jl package must be loaded for this method to work, since it is implemented in a package extension.

Arguments

  • geometry: Any GeoInterface.jl compatible geometries.

  • source_crs: the source coordinate referece system, as a GeoFormatTypes.jl object or a string.

  • target_crs: the target coordinate referece system, as a GeoFormatTypes.jl object or a string.

If these a passed as keywords, transform will take priority. Without it target_crs is always needed, and source_crs is needed if it is not retreivable from the geometry with GeoInterface.crs(geometry).

Keywords

  • always_xy: force x, y coordinate order, true by default. false will expect and return points in the crs coordinate order.

  • time: the time for the coordinates. Inf by default.

  • 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.

source


# GeometryOps.transformFunction.
julia
transform(f, obj)

Apply a function f to all the points in obj.

Points will be passed to f as an SVector to allow using CoordinateTransformations.jl and Rotations.jl without hassle.

SVector is also a valid GeoInterface.jl point, so will work in all GeoInterface.jl methods.

Example

julia
julia> import GeoInterface as GI
+reproject(geometry, transform; always_xy, time)

Reproject any GeoInterface.jl compatible geometry from source_crs to target_crs.

The returned object will be constructed from GeoInterface.WrapperGeometry geometries, wrapping views of a Vector{Proj.Point{D}}, where D is the dimension.

Tip

The Proj.jl package must be loaded for this method to work, since it is implemented in a package extension.

Arguments

  • geometry: Any GeoInterface.jl compatible geometries.

  • source_crs: the source coordinate referece system, as a GeoFormatTypes.jl object or a string.

  • target_crs: the target coordinate referece system, as a GeoFormatTypes.jl object or a string.

If these a passed as keywords, transform will take priority. Without it target_crs is always needed, and source_crs is needed if it is not retreivable from the geometry with GeoInterface.crs(geometry).

Keywords

  • always_xy: force x, y coordinate order, true by default. false will expect and return points in the crs coordinate order.

  • time: the time for the coordinates. Inf by default.

  • 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.

source


# GeometryOps.transformFunction.
julia
transform(f, obj)

Apply a function f to all the points in obj.

Points will be passed to f as an SVector to allow using CoordinateTransformations.jl and Rotations.jl without hassle.

SVector is also a valid GeoInterface.jl point, so will work in all GeoInterface.jl methods.

Example

julia
julia> import GeoInterface as GI
 
 julia> import GeometryOps as GO
 
@@ -26,160 +26,160 @@ import{_ as n,c as e,l as s,a,a6 as i,o as t}from"./chunks/framework.DwyrAfcZ.js
 GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearR
 ing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}(StaticArraysCore.SVe
 ctor{2, Int64}[[2, 1], [4, 3], [6, 5], [2, 1]], nothing, nothing), GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}(StaticArraysCore.SVector{2, Int64
-}[[4, 3], [6, 5], [7, 6], [4, 3]], nothing, nothing)], nothing, nothing)

source


General geometry methods

OGC methods

# GeometryOps.containsFunction.
julia
contains(g1::AbstractGeometry, g2::AbstractGeometry)::Bool

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

contains returns the exact opposite result of within.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+}[[4, 3], [6, 5], [7, 6], [4, 3]], nothing, nothing)], nothing, nothing)

source


General geometry methods

OGC methods

# GeometryOps.containsFunction.
julia
contains(g1::AbstractGeometry, g2::AbstractGeometry)::Bool

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

contains returns the exact opposite result of within.

Examples

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

source


# GeometryOps.coveredbyFunction.
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


# GeometryOps.coveredbyFunction.
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


# GeometryOps.coversFunction.
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


# GeometryOps.coversFunction.
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, 1), (1, 2), (1, 3), (1, 4)])
 l2 = GI.LineString([(1, 1), (1, 2)])
 
 GO.covers(l1, l2)
 # output
-true

source


# GeometryOps.crossesFunction.
julia
 crosses(geom1, geom2)::Bool

Return true if the intersection results in a geometry whose dimension is one less than the maximum dimension of the two source geometries and the intersection set is interior to both source geometries.

TODO: broken

Examples

julia
import GeoInterface as GI, GeometryOps as GO
-# TODO: Add working example

source


# GeometryOps.disjointFunction.
julia
disjoint(geom1, geom2)::Bool

Return true if the first geometry is disjoint from the second geometry.

Return true if the first geometry is disjoint from the second geometry. The interiors and boundaries of both geometries must not intersect.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+true

source


# GeometryOps.crossesFunction.
julia
 crosses(geom1, geom2)::Bool

Return true if the intersection results in a geometry whose dimension is one less than the maximum dimension of the two source geometries and the intersection set is interior to both source geometries.

TODO: broken

Examples

julia
import GeoInterface as GI, GeometryOps as GO
+# TODO: Add working example

source


# GeometryOps.disjointFunction.
julia
disjoint(geom1, geom2)::Bool

Return true if the first geometry is disjoint from the second geometry.

Return true if the first geometry is disjoint from the second geometry. The interiors and boundaries of both geometries must not intersect.

Examples

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

source


# GeometryOps.intersectsFunction.
julia
intersects(geom1, geom2)::Bool

Return true if the interiors or boundaries of the two geometries interact.

intersects returns the exact opposite result of disjoint.

Example

julia
import GeoInterface as GI, GeometryOps as GO
+true

source


# GeometryOps.intersectsFunction.
julia
intersects(geom1, geom2)::Bool

Return true if the interiors or boundaries of the two geometries interact.

intersects returns the exact opposite result of disjoint.

Example

julia
import GeoInterface as GI, GeometryOps as GO
 
 line1 = GI.Line([(124.584961,-12.768946), (126.738281,-17.224758)])
 line2 = GI.Line([(123.354492,-15.961329), (127.22168,-14.008696)])
 GO.intersects(line1, line2)
 
 # output
-true

source


# GeometryOps.overlapsFunction.
julia
overlaps(geom1, geom2)::Bool

Compare two Geometries of the same dimension and return true if their intersection set results in a geometry different from both but of the same dimension. This means one geometry cannot be within or contain the other and they cannot be equal

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+true

source


# GeometryOps.overlapsFunction.
julia
overlaps(geom1, geom2)::Bool

Compare two Geometries of the same dimension and return true if their intersection set results in a geometry different from both but of the same dimension. This means one geometry cannot be within or contain the other and they cannot be equal

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 poly1 = GI.Polygon([[(0,0), (0,5), (5,5), (5,0), (0,0)]])
 poly2 = GI.Polygon([[(1,1), (1,6), (6,6), (6,1), (1,1)]])
 
 GO.overlaps(poly1, poly2)
 # output
-true

source

julia
overlaps(::GI.AbstractTrait, geom1, ::GI.AbstractTrait, geom2)::Bool

For any non-specified pair, all have non-matching dimensions, return false.

source

julia
overlaps(
+true

source

julia
overlaps(::GI.AbstractTrait, geom1, ::GI.AbstractTrait, geom2)::Bool

For any non-specified pair, all have non-matching dimensions, return false.

source

julia
overlaps(
     ::GI.MultiPointTrait, points1,
     ::GI.MultiPointTrait, points2,
-)::Bool

If the multipoints overlap, meaning some, but not all, of the points within the multipoints are shared, return true.

source

julia
overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool

If the lines overlap, meaning that they are colinear but each have one endpoint outside of the other line, return true. Else false.

source

julia
overlaps(
+)::Bool

If the multipoints overlap, meaning some, but not all, of the points within the multipoints are shared, return true.

source

julia
overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool

If the lines overlap, meaning that they are colinear but each have one endpoint outside of the other line, return true. Else false.

source

julia
overlaps(
     ::Union{GI.LineStringTrait, GI.LinearRing}, line1,
     ::Union{GI.LineStringTrait, GI.LinearRing}, line2,
-)::Bool

If the curves overlap, meaning that at least one edge of each curve overlaps, return true. Else false.

source

julia
overlaps(
+)::Bool

If the curves overlap, meaning that at least one edge of each curve overlaps, return true. Else false.

source

julia
overlaps(
     trait_a::GI.PolygonTrait, poly_a,
     trait_b::GI.PolygonTrait, poly_b,
-)::Bool

If the two polygons intersect with one another, but are not equal, return true. Else false.

source

julia
overlaps(
+)::Bool

If the two polygons intersect with one another, but are not equal, return true. Else false.

source

julia
overlaps(
     ::GI.PolygonTrait, poly1,
     ::GI.MultiPolygonTrait, polys2,
-)::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source

julia
overlaps(
+)::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source

julia
overlaps(
     ::GI.MultiPolygonTrait, polys1,
     ::GI.PolygonTrait, poly2,
-)::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source

julia
overlaps(
+)::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source

julia
overlaps(
     ::GI.MultiPolygonTrait, polys1,
     ::GI.MultiPolygonTrait, polys2,
-)::Bool

Return true if at least one pair of polygons from multipolygons overlap. Else false.

source


# GeometryOps.touchesFunction.
julia
touches(geom1, geom2)::Bool

Return true if the first geometry touches the second geometry. In other words, the two interiors cannot interact, but one of the geometries must have a boundary point that interacts with either the other geometies interior or boundary.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+)::Bool

Return true if at least one pair of polygons from multipolygons overlap. Else false.

source


# GeometryOps.touchesFunction.
julia
touches(geom1, geom2)::Bool

Return true if the first geometry touches the second geometry. In other words, the two interiors cannot interact, but one of the geometries must have a boundary point that interacts with either the other geometies interior or boundary.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 
 l1 = GI.Line([(0.0, 0.0), (1.0, 0.0)])
 l2 = GI.Line([(1.0, 1.0), (1.0, -1.0)])
 
 GO.touches(l1, l2)
 # output
-true

source


# GeometryOps.withinFunction.
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
+true

source


# GeometryOps.withinFunction.
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


Other general methods

# GeometryOps.equalsFunction.
julia
equals(geom1, geom2)::Bool

Compare two Geometries return true if they are the same geometry.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+true

source


Other general methods

# GeometryOps.equalsFunction.
julia
equals(geom1, geom2)::Bool

Compare two Geometries return true if they are the same geometry.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 poly1 = GI.Polygon([[(0,0), (0,5), (5,5), (5,0), (0,0)]])
 poly2 = GI.Polygon([[(0,0), (0,5), (5,5), (5,0), (0,0)]])
 
 GO.equals(poly1, poly2)
 # output
-true

source

julia
equals(::T, geom_a, ::T, geom_b)::Bool

Two geometries of the same type, which don't have a equals function to dispatch off of should throw an error.

source

julia
equals(trait_a, geom_a, trait_b, geom_b)

Two geometries which are not of the same type cannot be equal so they always return false.

source

julia
equals(::GI.PointTrait, p1, ::GI.PointTrait, p2)::Bool

Two points are the same if they have the same x and y (and z if 3D) coordinates.

source

julia
equals(::GI.PointTrait, p1, ::GI.MultiPointTrait, mp2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source

julia
equals(::GI.MultiPointTrait, mp1, ::GI.PointTrait, p2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source

julia
equals(::GI.MultiPointTrait, mp1, ::GI.MultiPointTrait, mp2)::Bool

Two multipoints are equal if they share the same set of points.

source

julia
equals(
+true

source

julia
equals(::T, geom_a, ::T, geom_b)::Bool

Two geometries of the same type, which don't have a equals function to dispatch off of should throw an error.

source

julia
equals(trait_a, geom_a, trait_b, geom_b)

Two geometries which are not of the same type cannot be equal so they always return false.

source

julia
equals(::GI.PointTrait, p1, ::GI.PointTrait, p2)::Bool

Two points are the same if they have the same x and y (and z if 3D) coordinates.

source

julia
equals(::GI.PointTrait, p1, ::GI.MultiPointTrait, mp2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source

julia
equals(::GI.MultiPointTrait, mp1, ::GI.PointTrait, p2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source

julia
equals(::GI.MultiPointTrait, mp1, ::GI.MultiPointTrait, mp2)::Bool

Two multipoints are equal if they share the same set of points.

source

julia
equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, l2,
-)::Bool

Two lines/linestrings are equal if they share the same set of points going along the curve. Note that lines/linestrings aren't closed by defintion.

source

julia
equals(
+)::Bool

Two lines/linestrings are equal if they share the same set of points going along the curve. Note that lines/linestrings aren't closed by defintion.

source

julia
equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
     ::GI.LinearRingTrait, l2,
-)::Bool

A line/linestring and a linear ring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source

julia
equals(
+)::Bool

A line/linestring and a linear ring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source

julia
equals(
     ::GI.LinearRingTrait, l1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, l2,
-)::Bool

A linear ring and a line/linestring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source

julia
equals(
+)::Bool

A linear ring and a line/linestring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source

julia
equals(
     ::GI.LinearRingTrait, l1,
     ::GI.LinearRingTrait, l2,
-)::Bool

Two linear rings are equal if they share the same set of points going along the curve. Note that rings are closed by definition, so they can have, but don't need, a repeated last point to be equal.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two polygons are equal if they share the same exterior edge and holes.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.MultiPolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source

julia
equals(::GI.MultiPolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two multipolygons are equal if they share the same set of polygons.

source


# GeometryOps.centroidFunction.
julia
centroid(geom, [T=Float64])::Tuple{T, T}

Returns the centroid of a given line segment, linear ring, polygon, or mutlipolygon.

source


# GeometryOps.distanceFunction.
julia
distance(point, geom, ::Type{T} = Float64)::T

Calculates the ditance from the geometry g1 to the point. The distance will always be positive or zero.

The method will differ based on the type of the geometry provided: - The distance from a point to a point is just the Euclidean distance between the points. - The distance from a point to a line is the minimum distance from the point to the closest point on the given line. - The distance from a point to a linestring is the minimum distance from the point to the closest segment of the linestring. - The distance from a point to a linear ring is the minimum distance from the point to the closest segment of the linear ring. - The distance from a point to a polygon is zero if the point is within the polygon and otherwise is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The distance from a point to a multigeometry or a geometry collection is the minimum distance between the point and any of the sub-geometries.

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

source


# GeometryOps.signed_distanceFunction.
julia
signed_distance(point, geom, ::Type{T} = Float64)::T

Calculates the signed distance from the geometry geom to the given point. Points within geom have a negative signed distance, and points outside of geom have a positive signed distance. - The signed distance from a point to a point, line, linestring, or linear ring is equal to the distance between the two. - The signed distance from a point to a polygon is negative if the point is within the polygon and is positive otherwise. The value of the distance is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The signed distance from a point to a multigeometry or a geometry collection is the minimum signed distance between the point and any of the sub-geometries.

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

source


# GeometryOps.areaFunction.
julia
area(geom, [T = Float64])::T

Returns the area of a geometry or collection of geometries. This is computed slightly differently for different geometries:

- The area of a point/multipoint is always zero.
+)::Bool

Two linear rings are equal if they share the same set of points going along the curve. Note that rings are closed by definition, so they can have, but don't need, a repeated last point to be equal.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two polygons are equal if they share the same exterior edge and holes.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.MultiPolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source

julia
equals(::GI.MultiPolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two multipolygons are equal if they share the same set of polygons.

source


# GeometryOps.centroidFunction.
julia
centroid(geom, [T=Float64])::Tuple{T, T}

Returns the centroid of a given line segment, linear ring, polygon, or mutlipolygon.

source


# GeometryOps.distanceFunction.
julia
distance(point, geom, ::Type{T} = Float64)::T

Calculates the ditance from the geometry g1 to the point. The distance will always be positive or zero.

The method will differ based on the type of the geometry provided: - The distance from a point to a point is just the Euclidean distance between the points. - The distance from a point to a line is the minimum distance from the point to the closest point on the given line. - The distance from a point to a linestring is the minimum distance from the point to the closest segment of the linestring. - The distance from a point to a linear ring is the minimum distance from the point to the closest segment of the linear ring. - The distance from a point to a polygon is zero if the point is within the polygon and otherwise is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The distance from a point to a multigeometry or a geometry collection is the minimum distance between the point and any of the sub-geometries.

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

source


# GeometryOps.signed_distanceFunction.
julia
signed_distance(point, geom, ::Type{T} = Float64)::T

Calculates the signed distance from the geometry geom to the given point. Points within geom have a negative signed distance, and points outside of geom have a positive signed distance. - The signed distance from a point to a point, line, linestring, or linear ring is equal to the distance between the two. - The signed distance from a point to a polygon is negative if the point is within the polygon and is positive otherwise. The value of the distance is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The signed distance from a point to a multigeometry or a geometry collection is the minimum signed distance between the point and any of the sub-geometries.

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

source


# GeometryOps.areaFunction.
julia
area(geom, [T = Float64])::T

Returns the area of a geometry or collection of geometries. This is computed slightly differently for different geometries:

- The area of a point/multipoint is always zero.
 - The area of a curve/multicurve is always zero.
 - The area of a polygon is the absolute value of the signed area.
 - The area multi-polygon is the sum of the areas of all of the sub-polygons.
 - The area of a geometry collection, feature collection of array/iterable 
-    is the sum of the areas 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


# GeometryOps.signed_areaFunction.
julia
signed_area(geom, [T = Float64])::T

Returns the signed area of a single geometry, based on winding order. This is computed slighly differently for different geometries:

- The signed area of a point is always zero.
+    is the sum of the areas 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


# GeometryOps.signed_areaFunction.
julia
signed_area(geom, [T = Float64])::T

Returns the signed area of a single geometry, based on winding order. This is computed slighly 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 computed with the shoelace formula and is
 positive if the polygon coordinates wind clockwise and negative if
 counterclockwise.
 - You cannot compute the signed area of a multipolygon as it doesn't have a
-meaning as each sub-polygon could have a different winding order.

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

source


# GeometryOps.anglesFunction.
julia
angles(geom, ::Type{T} = Float64)

Returns the angles of a geometry or collection of geometries. This is computed differently for different geometries:

- The angles of a point is an empty vector.
+meaning as each sub-polygon could have a different winding order.

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

source


# GeometryOps.anglesFunction.
julia
angles(geom, ::Type{T} = Float64)

Returns the angles of a geometry or collection of geometries. This is computed differently for different geometries:

- The angles of a point is an empty vector.
 - The angles of a single line segment is an empty vector.
 - The angles of a linestring or linearring is a vector of angles formed by the curve.
 - The angles of a polygin 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


# GeometryOps.embed_extentFunction.
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_coordinatesFunction.
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


# GeometryOps.barycentric_interpolateFunction.
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.AbstractBarycentricCoordinateMethodType.
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.ClosedRingType.
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.DiffIntersectingPolygonsType.
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.DouglasPeuckerType.
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


# GeometryOps.embed_extentFunction.
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_coordinatesFunction.
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


# GeometryOps.barycentric_interpolateFunction.
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.AbstractBarycentricCoordinateMethodType.
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.ClosedRingType.
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.DiffIntersectingPolygonsType.
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.DouglasPeuckerType.
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 uneccesary computation in algorithm.

source


# GeometryOps.GeodesicSegmentsType.
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.GeometryCorrectionType.
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.LineOrientationType.
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 (colinear with the curve), or line_out (not interacting with the curve).

source


# GeometryOps.LinearSegmentsType.
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.MeanValueType.
julia
MeanValue() <: AbstractBarycentricCoordinateMethod

This method calculates barycentric coordinates using the mean value method.

References

source


# GeometryOps.PointOrientationType.
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.RadialDistanceType.
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 uneccesary computation in algorithm.

source


# GeometryOps.SimplifyAlgType.
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.TraitTargetType.
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 uneccesary computation in algorithm.

source


# GeometryOps.GeodesicSegmentsType.
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.GeometryCorrectionType.
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.LineOrientationType.
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 (colinear with the curve), or line_out (not interacting with the curve).

source


# GeometryOps.LinearSegmentsType.
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.MeanValueType.
julia
MeanValue() <: AbstractBarycentricCoordinateMethod

This method calculates barycentric coordinates using the mean value method.

References

source


# GeometryOps.PointOrientationType.
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.RadialDistanceType.
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 uneccesary computation in algorithm.

source


# GeometryOps.SimplifyAlgType.
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.TraitTargetType.
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.UnionIntersectingPolygonsType.
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.VisvalingamWhyattType.
julia
VisvalingamWhyatt <: SimplifyAlg
+# etc.

source


# GeometryOps.UnionIntersectingPolygonsType.
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.VisvalingamWhyattType.
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 uneccesary computation in algorithm.

source


# GeometryOps._detMethod.
julia
_det(s1::Point2{T1}, s2::Point2{T2}) where {T1 <: Real, T2 <: Real}

Returns the determinant of the matrix formed by hcat'ing two points s1 and s2.

Specifically, this is:

julia
s1[1] * s2[2] - s1[2] * s2[1]

source


# GeometryOps._equals_curvesMethod.
julia
_equals_curves(c1, c2, closed_type1, closed_type2)::Bool

Two curves are equal if they share the same set of point, representing the same geometry. Both curves must must be composed of the same set of points, however, they do not have to wind in the same direction, or start on the same point to be equivalent. Inputs: c1 first geometry c2 second geometry closed_type1::Bool true if c1 is closed by definition (polygon, linear ring) closed_type2::Bool true if c2 is closed by definition (polygon, linear ring)

source


# GeometryOps.anglesMethod.
julia
angles(geom, ::Type{T} = Float64)

Returns the angles of a geometry or collection of geometries. This is computed differently for different geometries:

- The angles of a point is an empty vector.
+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 uneccesary computation in algorithm.

source


# GeometryOps._detMethod.
julia
_det(s1::Point2{T1}, s2::Point2{T2}) where {T1 <: Real, T2 <: Real}

Returns the determinant of the matrix formed by hcat'ing two points s1 and s2.

Specifically, this is:

julia
s1[1] * s2[2] - s1[2] * s2[1]

source


# GeometryOps._equals_curvesMethod.
julia
_equals_curves(c1, c2, closed_type1, closed_type2)::Bool

Two curves are equal if they share the same set of point, representing the same geometry. Both curves must must be composed of the same set of points, however, they do not have to wind in the same direction, or start on the same point to be equivalent. Inputs: c1 first geometry c2 second geometry closed_type1::Bool true if c1 is closed by definition (polygon, linear ring) closed_type2::Bool true if c2 is closed by definition (polygon, linear ring)

source


# GeometryOps.anglesMethod.
julia
angles(geom, ::Type{T} = Float64)

Returns the angles of a geometry or collection of geometries. This is computed differently for different geometries:

- The angles of a point is an empty vector.
 - The angles of a single line segment is an empty vector.
 - The angles of a linestring or linearring is a vector of angles formed by the curve.
 - The angles of a polygin 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


# GeometryOps.applyMethod.
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. But "deeper" objects may remain unchanged - such as points and linear rings if the target is the same PolygonTrait.

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
+    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.applyMethod.
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. But "deeper" objects may remain unchanged - such as points and linear rings if the target is the same PolygonTrait.

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)])])
 
 flipped_geom = GO.apply(GI.PointTrait, geom) do p
     (GI.y(p), GI.x(p))
-end

source


# GeometryOps.applyreduceMethod.
julia
applyreduce(f, op, target::Union{TraitTarget, GI.AbstractTrait}, obj; threaded)

Apply function f to all objects with the target trait, and reduce the result with an op like +.

The order and grouping of application of op is not guaranteed.

If threaded==true threads will be used over arrays and iterables, feature collections and nested geometries.

source


# GeometryOps.areaMethod.
julia
area(geom, [T = Float64])::T

Returns the area of a geometry or collection of geometries. This is computed slightly differently for different geometries:

- The area of a point/multipoint is always zero.
+end

source


# GeometryOps.applyreduceMethod.
julia
applyreduce(f, op, target::Union{TraitTarget, GI.AbstractTrait}, obj; threaded)

Apply function f to all objects with the target trait, and reduce the result with an op like +.

The order and grouping of application of op is not guaranteed.

If threaded==true threads will be used over arrays and iterables, feature collections and nested geometries.

source


# GeometryOps.areaMethod.
julia
area(geom, [T = Float64])::T

Returns the area of a geometry or collection of geometries. This is computed slightly differently for different geometries:

- The area of a point/multipoint is always zero.
 - The area of a curve/multicurve is always zero.
 - The area of a polygon is the absolute value of the signed area.
 - The area multi-polygon is the sum of the areas of all of the sub-polygons.
 - The area of a geometry collection, feature collection of array/iterable 
-    is the sum of the areas 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


# GeometryOps.barycentric_coordinates!Method.
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_coordinatesMethod.
julia
barycentric_coordinates(method = MeanValue(), polygon, point)

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

source


# GeometryOps.barycentric_interpolateMethod.
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


# GeometryOps.centroidMethod.
julia
centroid(geom, [T=Float64])::Tuple{T, T}

Returns the centroid of a given line segment, linear ring, polygon, or mutlipolygon.

source


# GeometryOps.centroid_and_areaMethod.
julia
centroid_and_area(geom, [T=Float64])::(::Tuple{T, T}, ::Real)

Returns the centroid and area of a given geometry.

source


# GeometryOps.centroid_and_lengthMethod.
julia
centroid_and_length(geom, [T=Float64])::(::Tuple{T, T}, ::Real)

Returns the centroid and length of a given line/ring. Note this is only valid for line strings and linear rings.

source


# GeometryOps.containsMethod.
julia
contains(g1::AbstractGeometry, g2::AbstractGeometry)::Bool

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

contains returns the exact opposite result of within.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+    is the sum of the areas 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


# GeometryOps.barycentric_coordinates!Method.
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_coordinatesMethod.
julia
barycentric_coordinates(method = MeanValue(), polygon, point)

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

source


# GeometryOps.barycentric_interpolateMethod.
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


# GeometryOps.centroidMethod.
julia
centroid(geom, [T=Float64])::Tuple{T, T}

Returns the centroid of a given line segment, linear ring, polygon, or mutlipolygon.

source


# GeometryOps.centroid_and_areaMethod.
julia
centroid_and_area(geom, [T=Float64])::(::Tuple{T, T}, ::Real)

Returns the centroid and area of a given geometry.

source


# GeometryOps.centroid_and_lengthMethod.
julia
centroid_and_length(geom, [T=Float64])::(::Tuple{T, T}, ::Real)

Returns the centroid and length of a given line/ring. Note this is only valid for line strings and linear rings.

source


# GeometryOps.containsMethod.
julia
contains(g1::AbstractGeometry, g2::AbstractGeometry)::Bool

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

contains returns the exact opposite result of within.

Examples

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

source


# GeometryOps.coverageMethod.
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


# GeometryOps.coveredbyMethod.
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


# GeometryOps.coverageMethod.
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


# GeometryOps.coveredbyMethod.
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


# GeometryOps.coversMethod.
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


# GeometryOps.coversMethod.
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, 1), (1, 2), (1, 3), (1, 4)])
 l2 = GI.LineString([(1, 1), (1, 2)])
 
 GO.covers(l1, l2)
 # output
-true

source


# GeometryOps.crossesMethod.
julia
 crosses(geom1, geom2)::Bool

Return true if the intersection results in a geometry whose dimension is one less than the maximum dimension of the two source geometries and the intersection set is interior to both source geometries.

TODO: broken

Examples

julia
import GeoInterface as GI, GeometryOps as GO
-# TODO: Add working example

source


# GeometryOps.cutMethod.
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 geom. Return the original geometry as only list element if none are found. Line must cut fully through given geometry or the original geometry will be returned.

Note: This currently doesn't work for degenerate cases there line crosses through vertices.

Example

julia
import GeoInterface as GI, GeometryOps as GO
+true

source


# GeometryOps.crossesMethod.
julia
 crosses(geom1, geom2)::Bool

Return true if the intersection results in a geometry whose dimension is one less than the maximum dimension of the two source geometries and the intersection set is interior to both source geometries.

TODO: broken

Examples

julia
import GeoInterface as GI, GeometryOps as GO
+# TODO: Add working example

source


# GeometryOps.cutMethod.
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 geom. Return the original geometry as only list element if none are found. Line must cut fully through given geometry or the original geometry will be returned.

Note: This currently doesn't work for degenerate cases there line crosses through vertices.

Example

julia
import GeoInterface as GI, GeometryOps as GO
 
 poly = GI.Polygon([[(0.0, 0.0), (10.0, 0.0), (10.0, 10.0), (0.0, 10.0), (0.0, 0.0)]])
 line = GI.Line([(5.0, -5.0), (5.0, 15.0)])
@@ -189,7 +189,7 @@ import{_ as n,c as e,l as s,a,a6 as i,o as t}from"./chunks/framework.DwyrAfcZ.js
 # output
 2-element Vector{Vector{Vector{Vector{Float64}}}}:
  [[[0.0, 0.0], [5.0, 0.0], [5.0, 10.0], [0.0, 10.0], [0.0, 0.0]]]
- [[[5.0, 0.0], [10.0, 0.0], [10.0, 10.0], [5.0, 10.0], [5.0, 0.0]]]

source


# GeometryOps.differenceMethod.
julia
difference(geom_a, geom_b, [T::Type]; target::Type, fix_multipoly = UnionIntersectingPolygons())

Return the difference between two geometries as a list of geometries. Return an empty list if none are found. The type of the list will be constrained as much as possible given the input geometries. Furthermore, the user can provide a taget type as a keyword argument and a list of target geometries found in the difference will be returned. The user can also provide a float type that they would like the points of returned geometries to be. If the user is taking a intersection involving one or more multipolygons, and the multipolygon might be comprised of polygons that intersect, if fix_multipoly is set to an IntersectingPolygons correction (the default is UnionIntersectingPolygons()), then the needed multipolygons will be fixed to be valid before performing the intersection to ensure a correct answer. Only set fix_multipoly to false if you know that the multipolygons are valid, as it will avoid unneeded computation.

Example

julia
import GeoInterface as GI, GeometryOps as GO
+ [[[5.0, 0.0], [10.0, 0.0], [10.0, 10.0], [5.0, 10.0], [5.0, 0.0]]]

source


# GeometryOps.differenceMethod.
julia
difference(geom_a, geom_b, [T::Type]; target::Type, fix_multipoly = UnionIntersectingPolygons())

Return the difference between two geometries as a list of geometries. Return an empty list if none are found. The type of the list will be constrained as much as possible given the input geometries. Furthermore, the user can provide a taget type as a keyword argument and a list of target geometries found in the difference will be returned. The user can also provide a float type that they would like the points of returned geometries to be. If the user is taking a intersection involving one or more multipolygons, and the multipolygon might be comprised of polygons that intersect, if fix_multipoly is set to an IntersectingPolygons correction (the default is UnionIntersectingPolygons()), then the needed multipolygons will be fixed to be valid before performing the intersection to ensure a correct answer. Only set fix_multipoly to false if you know that the multipolygons are valid, as it will avoid unneeded computation.

Example

julia
import GeoInterface as GI, GeometryOps as GO
 
 poly1 = GI.Polygon([[[0.0, 0.0], [5.0, 5.0], [10.0, 0.0], [5.0, -5.0], [0.0, 0.0]]])
 poly2 = GI.Polygon([[[3.0, 0.0], [8.0, 5.0], [13.0, 0.0], [8.0, -5.0], [3.0, 0.0]]])
@@ -198,33 +198,33 @@ import{_ as n,c as e,l as s,a,a6 as i,o as t}from"./chunks/framework.DwyrAfcZ.js
 
 # 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], [3.0, 0.0], [6.5, 3.5]]]

source


# GeometryOps.disjointMethod.
julia
disjoint(geom1, geom2)::Bool

Return true if the first geometry is disjoint from the second geometry.

Return true if the first geometry is disjoint from the second geometry. The interiors and boundaries of both geometries must not intersect.

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], [3.0, 0.0], [6.5, 3.5]]]

source


# GeometryOps.disjointMethod.
julia
disjoint(geom1, geom2)::Bool

Return true if the first geometry is disjoint from the second geometry.

Return true if the first geometry is disjoint from the second geometry. The interiors and boundaries of both geometries must not intersect.

Examples

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

source


# GeometryOps.distanceMethod.
julia
distance(point, geom, ::Type{T} = Float64)::T

Calculates the ditance from the geometry g1 to the point. The distance will always be positive or zero.

The method will differ based on the type of the geometry provided: - The distance from a point to a point is just the Euclidean distance between the points. - The distance from a point to a line is the minimum distance from the point to the closest point on the given line. - The distance from a point to a linestring is the minimum distance from the point to the closest segment of the linestring. - The distance from a point to a linear ring is the minimum distance from the point to the closest segment of the linear ring. - The distance from a point to a polygon is zero if the point is within the polygon and otherwise is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The distance from a point to a multigeometry or a geometry collection is the minimum distance between the point and any of the sub-geometries.

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

source


# GeometryOps.embed_extentMethod.
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


# GeometryOps.equalsMethod.
julia
equals(trait_a, geom_a, trait_b, geom_b)

Two geometries which are not of the same type cannot be equal so they always return false.

source


# GeometryOps.equalsMethod.
julia
equals(geom1, geom2)::Bool

Compare two Geometries return true if they are the same geometry.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+true

source


# GeometryOps.distanceMethod.
julia
distance(point, geom, ::Type{T} = Float64)::T

Calculates the ditance from the geometry g1 to the point. The distance will always be positive or zero.

The method will differ based on the type of the geometry provided: - The distance from a point to a point is just the Euclidean distance between the points. - The distance from a point to a line is the minimum distance from the point to the closest point on the given line. - The distance from a point to a linestring is the minimum distance from the point to the closest segment of the linestring. - The distance from a point to a linear ring is the minimum distance from the point to the closest segment of the linear ring. - The distance from a point to a polygon is zero if the point is within the polygon and otherwise is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The distance from a point to a multigeometry or a geometry collection is the minimum distance between the point and any of the sub-geometries.

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

source


# GeometryOps.embed_extentMethod.
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


# GeometryOps.equalsMethod.
julia
equals(trait_a, geom_a, trait_b, geom_b)

Two geometries which are not of the same type cannot be equal so they always return false.

source


# GeometryOps.equalsMethod.
julia
equals(geom1, geom2)::Bool

Compare two Geometries return true if they are the same geometry.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 poly1 = GI.Polygon([[(0,0), (0,5), (5,5), (5,0), (0,0)]])
 poly2 = GI.Polygon([[(0,0), (0,5), (5,5), (5,0), (0,0)]])
 
 GO.equals(poly1, poly2)
 # output
-true

source


# GeometryOps.equalsMethod.
julia
equals(
+true

source


# GeometryOps.equalsMethod.
julia
equals(
     ::GI.LinearRingTrait, l1,
     ::GI.LinearRingTrait, l2,
-)::Bool

Two linear rings are equal if they share the same set of points going along the curve. Note that rings are closed by definition, so they can have, but don't need, a repeated last point to be equal.

source


# GeometryOps.equalsMethod.
julia
equals(
+)::Bool

Two linear rings are equal if they share the same set of points going along the curve. Note that rings are closed by definition, so they can have, but don't need, a repeated last point to be equal.

source


# GeometryOps.equalsMethod.
julia
equals(
     ::GI.LinearRingTrait, l1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, l2,
-)::Bool

A linear ring and a line/linestring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPointTrait, mp1, ::GI.MultiPointTrait, mp2)::Bool

Two multipoints are equal if they share the same set of points.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPointTrait, mp1, ::GI.PointTrait, p2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two multipolygons are equal if they share the same set of polygons.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PointTrait, p1, ::GI.MultiPointTrait, mp2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PointTrait, p1, ::GI.PointTrait, p2)::Bool

Two points are the same if they have the same x and y (and z if 3D) coordinates.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.MultiPolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two polygons are equal if they share the same exterior edge and holes.

source


# GeometryOps.equalsMethod.
julia
equals(
+)::Bool

A linear ring and a line/linestring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPointTrait, mp1, ::GI.MultiPointTrait, mp2)::Bool

Two multipoints are equal if they share the same set of points.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPointTrait, mp1, ::GI.PointTrait, p2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two multipolygons are equal if they share the same set of polygons.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PointTrait, p1, ::GI.MultiPointTrait, mp2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PointTrait, p1, ::GI.PointTrait, p2)::Bool

Two points are the same if they have the same x and y (and z if 3D) coordinates.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.MultiPolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two polygons are equal if they share the same exterior edge and holes.

source


# GeometryOps.equalsMethod.
julia
equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
     ::GI.LinearRingTrait, l2,
-)::Bool

A line/linestring and a linear ring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source


# GeometryOps.equalsMethod.
julia
equals(
+)::Bool

A line/linestring and a linear ring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source


# GeometryOps.equalsMethod.
julia
equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, l2,
-)::Bool

Two lines/linestrings are equal if they share the same set of points going along the curve. Note that lines/linestrings aren't closed by defintion.

source


# GeometryOps.equalsMethod.
julia
equals(::T, geom_a, ::T, geom_b)::Bool

Two geometries of the same type, which don't have a equals function to dispatch off of should throw an error.

source


# GeometryOps.flattenMethod.
julia
flatten(target::Type{<:GI.AbstractTrait}, obj)
-flatten(f, target::Type{<:GI.AbstractTrait}, obj)

Lazily flatten any AbstractArray, iterator, FeatureCollectionTrait, FeatureTrait or AbstractGeometryTrait object obj, so that objects with the target trait are returned by the iterator.

If f is passed in it will be applied to the target geometries.

source


# GeometryOps.flipMethod.
julia
flip(obj)

Swap all of the x and y coordinates in obj, otherwise keeping the original structure (but not necessarily the original type).

Keywords

  • 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.

source


# GeometryOps.get_contoursMethod.

get_contours(A::AbstractMatrix)

Returns contours as vectors of CartesianIndex.

source


# GeometryOps.intersectionMethod.
julia
intersection(geom_a, geom_b, [T::Type]; target::Type, fix_multipoly = UnionIntersectingPolygons())

Return the intersection between two geometries as a list of geometries. Return an empty list if none are found. The type of the list will be constrained as much as possible given the input geometries. Furthermore, the user can provide a target type as a keyword argument and a list of target geometries found in the intersection will be returned. The user can also provide a float type that they would like the points of returned geometries to be. If the user is taking a intersection involving one or more multipolygons, and the multipolygon might be comprised of polygons that intersect, if fix_multipoly is set to an IntersectingPolygons correction (the default is UnionIntersectingPolygons()), then the needed multipolygons will be fixed to be valid before performing the intersection to ensure a correct answer. Only set fix_multipoly to nothing if you know that the multipolygons are valid, as it will avoid unneeded computation.

Example

julia
import GeoInterface as GI, GeometryOps as GO
+)::Bool

Two lines/linestrings are equal if they share the same set of points going along the curve. Note that lines/linestrings aren't closed by defintion.

source


# GeometryOps.equalsMethod.
julia
equals(::T, geom_a, ::T, geom_b)::Bool

Two geometries of the same type, which don't have a equals function to dispatch off of should throw an error.

source


# GeometryOps.flattenMethod.
julia
flatten(target::Type{<:GI.AbstractTrait}, obj)
+flatten(f, target::Type{<:GI.AbstractTrait}, obj)

Lazily flatten any AbstractArray, iterator, FeatureCollectionTrait, FeatureTrait or AbstractGeometryTrait object obj, so that objects with the target trait are returned by the iterator.

If f is passed in it will be applied to the target geometries.

source


# GeometryOps.flipMethod.
julia
flip(obj)

Swap all of the x and y coordinates in obj, otherwise keeping the original structure (but not necessarily the original type).

Keywords

  • 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.

source


# GeometryOps.get_contoursMethod.

get_contours(A::AbstractMatrix)

Returns contours as vectors of CartesianIndex.

source


# GeometryOps.intersectionMethod.
julia
intersection(geom_a, geom_b, [T::Type]; target::Type, fix_multipoly = UnionIntersectingPolygons())

Return the intersection between two geometries as a list of geometries. Return an empty list if none are found. The type of the list will be constrained as much as possible given the input geometries. Furthermore, the user can provide a target type as a keyword argument and a list of target geometries found in the intersection will be returned. The user can also provide a float type that they would like the points of returned geometries to be. If the user is taking a intersection involving one or more multipolygons, and the multipolygon might be comprised of polygons that intersect, if fix_multipoly is set to an IntersectingPolygons correction (the default is UnionIntersectingPolygons()), then the needed multipolygons will be fixed to be valid before performing the intersection to ensure a correct answer. Only set fix_multipoly to nothing if you know that the multipolygons are valid, as it will avoid unneeded computation.

Example

julia
import GeoInterface as GI, GeometryOps as GO
 
 line1 = GI.Line([(124.584961,-12.768946), (126.738281,-17.224758)])
 line2 = GI.Line([(123.354492,-15.961329), (127.22168,-14.008696)])
@@ -233,68 +233,68 @@ import{_ as n,c as e,l as s,a,a6 as i,o as t}from"./chunks/framework.DwyrAfcZ.js
 
 # output
 1-element Vector{Vector{Float64}}:
- [125.58375366067547, -14.83572303404496]

source


# GeometryOps.intersection_pointsMethod.
julia
intersection_points(
+ [125.58375366067547, -14.83572303404496]

source


# GeometryOps.intersection_pointsMethod.
julia
intersection_points(
     geom_a,
     geom_b,
 )::Union{
     ::Vector{::Tuple{::Real, ::Real}},
     ::Nothing,
-}

Return a list of intersection points between two geometries of type GI.Point. If no intersection point was possible given geometry extents, returns an empty list.

source


# GeometryOps.intersectsMethod.
julia
intersects(geom1, geom2)::Bool

Return true if the interiors or boundaries of the two geometries interact.

intersects returns the exact opposite result of disjoint.

Example

julia
import GeoInterface as GI, GeometryOps as GO
+}

Return a list of intersection points between two geometries of type GI.Point. If no intersection point was possible given geometry extents, returns an empty list.

source


# GeometryOps.intersectsMethod.
julia
intersects(geom1, geom2)::Bool

Return true if the interiors or boundaries of the two geometries interact.

intersects returns the exact opposite result of disjoint.

Example

julia
import GeoInterface as GI, GeometryOps as GO
 
 line1 = GI.Line([(124.584961,-12.768946), (126.738281,-17.224758)])
 line2 = GI.Line([(123.354492,-15.961329), (127.22168,-14.008696)])
 GO.intersects(line1, line2)
 
 # output
-true

source


# GeometryOps.isclockwiseMethod.
julia
isclockwise(line::Union{LineString, Vector{Position}})::Bool

Take a ring and return true or false whether or not the ring is clockwise or counter-clockwise.

Example

julia
import GeoInterface as GI, GeometryOps as GO
+true

source


# GeometryOps.isclockwiseMethod.
julia
isclockwise(line::Union{LineString, Vector{Position}})::Bool

Take a ring and return true or false whether or not the ring is clockwise or counter-clockwise.

Example

julia
import GeoInterface as GI, GeometryOps as GO
 
 ring = GI.LinearRing([(0, 0), (1, 1), (1, 0), (0, 0)])
 GO.isclockwise(ring)
 
 # output
-true

source


# GeometryOps.isconcaveMethod.
julia
isconcave(poly::Polygon)::Bool

Take a polygon and return true or false as to whether it is concave or not.

Examples

julia
import GeoInterface as GI, GeometryOps as GO
+true

source


# GeometryOps.isconcaveMethod.
julia
isconcave(poly::Polygon)::Bool

Take a polygon and return true or false as to whether it is concave or not.

Examples

julia
import GeoInterface as GI, GeometryOps as GO
 
 poly = GI.Polygon([[(0, 0), (0, 1), (1, 1), (1, 0), (0, 0)]])
 GO.isconcave(poly)
 
 # output
-false

source


# GeometryOps.overlapsMethod.
julia
overlaps(geom1, geom2)::Bool

Compare two Geometries of the same dimension and return true if their intersection set results in a geometry different from both but of the same dimension. This means one geometry cannot be within or contain the other and they cannot be equal

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+false

source


# GeometryOps.overlapsMethod.
julia
overlaps(geom1, geom2)::Bool

Compare two Geometries of the same dimension and return true if their intersection set results in a geometry different from both but of the same dimension. This means one geometry cannot be within or contain the other and they cannot be equal

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 poly1 = GI.Polygon([[(0,0), (0,5), (5,5), (5,0), (0,0)]])
 poly2 = GI.Polygon([[(1,1), (1,6), (6,6), (6,1), (1,1)]])
 
 GO.overlaps(poly1, poly2)
 # output
-true

source


# GeometryOps.overlapsMethod.
julia
overlaps(::GI.AbstractTrait, geom1, ::GI.AbstractTrait, geom2)::Bool

For any non-specified pair, all have non-matching dimensions, return false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool

If the lines overlap, meaning that they are colinear but each have one endpoint outside of the other line, return true. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
+true

source


# GeometryOps.overlapsMethod.
julia
overlaps(::GI.AbstractTrait, geom1, ::GI.AbstractTrait, geom2)::Bool

For any non-specified pair, all have non-matching dimensions, return false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool

If the lines overlap, meaning that they are colinear but each have one endpoint outside of the other line, return true. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
     ::GI.MultiPointTrait, points1,
     ::GI.MultiPointTrait, points2,
-)::Bool

If the multipoints overlap, meaning some, but not all, of the points within the multipoints are shared, return true.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
+)::Bool

If the multipoints overlap, meaning some, but not all, of the points within the multipoints are shared, return true.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
     ::GI.MultiPolygonTrait, polys1,
     ::GI.MultiPolygonTrait, polys2,
-)::Bool

Return true if at least one pair of polygons from multipolygons overlap. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
+)::Bool

Return true if at least one pair of polygons from multipolygons overlap. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
     ::GI.MultiPolygonTrait, polys1,
     ::GI.PolygonTrait, poly2,
-)::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
+)::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
     ::GI.PolygonTrait, poly1,
     ::GI.MultiPolygonTrait, polys2,
-)::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
+)::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
     trait_a::GI.PolygonTrait, poly_a,
     trait_b::GI.PolygonTrait, poly_b,
-)::Bool

If the two polygons intersect with one another, but are not equal, return true. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
+)::Bool

If the two polygons intersect with one another, but are not equal, return true. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
     ::Union{GI.LineStringTrait, GI.LinearRing}, line1,
     ::Union{GI.LineStringTrait, GI.LinearRing}, line2,
-)::Bool

If the curves overlap, meaning that at least one edge of each curve overlaps, return true. Else false.

source


# GeometryOps.polygon_to_lineMethod.
julia
polygon_to_line(poly::Polygon)

Converts a Polygon to LineString or MultiLineString

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+)::Bool

If the curves overlap, meaning that at least one edge of each curve overlaps, return true. Else false.

source


# GeometryOps.polygon_to_lineMethod.
julia
polygon_to_line(poly::Polygon)

Converts a Polygon to LineString or MultiLineString

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 
 poly = GI.Polygon([[(-2.275543, 53.464547), (-2.275543, 53.489271), (-2.215118, 53.489271), (-2.215118, 53.464547), (-2.275543, 53.464547)]])
 GO.polygon_to_line(poly)
 # output
-GeoInterface.Wrappers.LineString{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(-2.275543, 53.464547), (-2.275543, 53.489271), (-2.215118, 53.489271), (-2.215118, 53.464547), (-2.275543, 53.464547)], nothing, nothing)

source


# GeometryOps.polygonizeMethod.
julia
polygonize(A; minpoints=10)
-polygonize(xs, ys, A; minpoints=10)

Convert matrix A to polygons.

If xs and ys are passed in they are used as the pixel center points.

Keywords

  • minpoints: ignore polygons with less than minpoints points.

source


# GeometryOps.rebuildMethod.
julia
rebuild(geom, child_geoms)

Rebuild a geometry from child geometries.

By default geometries will be rebuilt as a GeoInterface.Wrappers geometry, but rebuild can have methods added to it to dispatch on geometries from other packages and specify how to rebuild them.

(Maybe it should go into GeoInterface.jl)

source


# GeometryOps.reconstructMethod.
julia
reconstruct(geom, components)

Reconstruct geom from an iterable of component objects that match its structure.

All objects in components must have the same GeoInterface.trait.

Ususally used in combination with flatten.

source


# GeometryOps.segmentizeMethod.
julia
segmentize([method = LinearSegments()], geom; max_distance::Real, threaded)

Segmentize 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.

Arguments

  • method::SegmentizeMethod = LinearSegments(): The method to use for segmentizing the geometry. At the moment, only LinearSegments and GeodesicSegments are available.

  • geom: The geometry to segmentize. Must be a LineString, LinearRing, or greater in complexity.

  • max_distance::Real: The maximum distance, in the input space, between vertices in the geometry. Only used if you don't explicitly pass a method.

Returns a geometry of similar type to the input geometry, but resampled.

source


# GeometryOps.signed_areaMethod.
julia
signed_area(geom, [T = Float64])::T

Returns the signed area of a single geometry, based on winding order. This is computed slighly differently for different geometries:

- The signed area of a point is always zero.
+GeoInterface.Wrappers.LineString{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(-2.275543, 53.464547), (-2.275543, 53.489271), (-2.215118, 53.489271), (-2.215118, 53.464547), (-2.275543, 53.464547)], nothing, nothing)

source


# GeometryOps.polygonizeMethod.
julia
polygonize(A; minpoints=10)
+polygonize(xs, ys, A; minpoints=10)

Convert matrix A to polygons.

If xs and ys are passed in they are used as the pixel center points.

Keywords

  • minpoints: ignore polygons with less than minpoints points.

source


# GeometryOps.rebuildMethod.
julia
rebuild(geom, child_geoms)

Rebuild a geometry from child geometries.

By default geometries will be rebuilt as a GeoInterface.Wrappers geometry, but rebuild can have methods added to it to dispatch on geometries from other packages and specify how to rebuild them.

(Maybe it should go into GeoInterface.jl)

source


# GeometryOps.reconstructMethod.
julia
reconstruct(geom, components)

Reconstruct geom from an iterable of component objects that match its structure.

All objects in components must have the same GeoInterface.trait.

Ususally used in combination with flatten.

source


# GeometryOps.segmentizeMethod.
julia
segmentize([method = LinearSegments()], geom; max_distance::Real, threaded)

Segmentize 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.

Arguments

  • method::SegmentizeMethod = LinearSegments(): The method to use for segmentizing the geometry. At the moment, only LinearSegments and GeodesicSegments are available.

  • geom: The geometry to segmentize. Must be a LineString, LinearRing, or greater in complexity.

  • max_distance::Real: The maximum distance, in the input space, between vertices in the geometry. Only used if you don't explicitly pass a method.

Returns a geometry of similar type to the input geometry, but resampled.

source


# GeometryOps.signed_areaMethod.
julia
signed_area(geom, [T = Float64])::T

Returns the signed area of a single geometry, based on winding order. This is computed slighly 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 computed with the shoelace formula and is
 positive if the polygon coordinates wind clockwise and negative if
 counterclockwise.
 - You cannot compute the signed area of a multipolygon as it doesn't have a
-meaning as each sub-polygon could have a different winding order.

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

source


# GeometryOps.signed_distanceMethod.
julia
signed_distance(point, geom, ::Type{T} = Float64)::T

Calculates the signed distance from the geometry geom to the given point. Points within geom have a negative signed distance, and points outside of geom have a positive signed distance. - The signed distance from a point to a point, line, linestring, or linear ring is equal to the distance between the two. - The signed distance from a point to a polygon is negative if the point is within the polygon and is positive otherwise. The value of the distance is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The signed distance from a point to a multigeometry or a geometry collection is the minimum signed distance between the point and any of the sub-geometries.

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

source


# GeometryOps.simplifyMethod.
julia
simplify(obj; kw...)
+meaning as each sub-polygon could have a different winding order.

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

source


# GeometryOps.signed_distanceMethod.
julia
signed_distance(point, geom, ::Type{T} = Float64)::T

Calculates the signed distance from the geometry geom to the given point. Points within geom have a negative signed distance, and points outside of geom have a positive signed distance. - The signed distance from a point to a point, line, linestring, or linear ring is equal to the distance between the two. - The signed distance from a point to a polygon is negative if the point is within the polygon and is positive otherwise. The value of the distance is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The signed distance from a point to a multigeometry or a geometry collection is the minimum signed distance between the point and any of the sub-geometries.

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

source


# GeometryOps.simplifyMethod.
julia
simplify(obj; kw...)
 simplify(::SimplifyAlg, obj; kw...)

Simplify a geometry, feature, feature collection, or nested vectors or a table of these.

RadialDistance, DouglasPeucker, or VisvalingamWhyatt algorithms are available, listed in order of increasing quality but decreaseing performance.

PoinTrait and MultiPointTrait are returned unchanged.

The default behaviour is simplify(DouglasPeucker(; kw...), obj). Pass in other SimplifyAlg to use other algorithms.

Keywords

  • prefilter_alg: SimplifyAlg algorithm used to pre-filter object before using primary filtering algorithm.

  • 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.

Keywords for DouglasPeucker are allowed when no algorithm is specified:

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.

Example

Simplify a polygon to have six points:

julia
import GeoInterface as GI
 import GeometryOps as GO
 
@@ -324,9 +324,9 @@ import{_ as n,c as e,l as s,a,a6 as i,o as t}from"./chunks/framework.DwyrAfcZ.js
 GI.npoint(simple)
 
 # output
-6

source


`,212),p={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},r=s("a",{id:"GeometryOps.t_value-Union{Tuple{T2}, Tuple{T1}, Tuple{N}, Tuple{Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, T2, T2}} where {N, T1<:Real, T2<:Real}",href:"#GeometryOps.t_value-Union{Tuple{T2}, Tuple{T1}, Tuple{N}, Tuple{Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, T2, T2}} where {N, T1<:Real, T2<:Real}"},"#",-1),k=s("b",null,[s("u",null,"GeometryOps.t_value")],-1),o=s("i",null,"Method",-1),d=i('
julia
t_value(sᵢ, sᵢ₊₁, rᵢ, rᵢ₊₁)

Returns the "T-value" as described in Hormann's presentation [1] on how to calculate the mean-value coordinate.

Here, sᵢ is the vector from vertex vᵢ to the point, and rᵢ is the norm (length) of sᵢ. s must be Point and r must be real numbers.

',3),g={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},y={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"},c=i('',1),E=[c],u=s("mjx-assistive-mml",{unselectable:"on",display:"block",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",overflow:"hidden",width:"100%"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[s("mi",null,"t"),s("mi",null,"ᵢ"),s("mo",null,"="),s("mfrac",null,[s("mrow",null,[s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",{"data-mjx-auto-op":"false"},"det")]),s("mrow",{"data-mjx-texclass":"INNER"},[s("mo",{"data-mjx-texclass":"OPEN"},"("),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mo",null,","),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")]),s("mo",{"data-mjx-texclass":"CLOSE"},")")])]),s("mrow",null,[s("mi",null,"r"),s("mi",null,"ᵢ"),s("mo",null,"∗"),s("mi",null,"r"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")]),s("mo",null,"+"),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mo",null,"⋅"),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")])])])])],-1),b=i(`

+6

source


`,212),p={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},r=s("a",{id:"GeometryOps.t_value-Union{Tuple{T2}, Tuple{T1}, Tuple{N}, Tuple{Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, T2, T2}} where {N, T1<:Real, T2<:Real}",href:"#GeometryOps.t_value-Union{Tuple{T2}, Tuple{T1}, Tuple{N}, Tuple{Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, T2, T2}} where {N, T1<:Real, T2<:Real}"},"#",-1),k=s("b",null,[s("u",null,"GeometryOps.t_value")],-1),o=s("i",null,"Method",-1),d=i('
julia
t_value(sᵢ, sᵢ₊₁, rᵢ, rᵢ₊₁)

Returns the "T-value" as described in Hormann's presentation [1] on how to calculate the mean-value coordinate.

Here, sᵢ is the vector from vertex vᵢ to the point, and rᵢ is the norm (length) of sᵢ. s must be Point and r must be real numbers.

',3),g={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},y={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"},E=i('',1),c=[E],u=s("mjx-assistive-mml",{unselectable:"on",display:"block",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",overflow:"hidden",width:"100%"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[s("mi",null,"t"),s("mi",null,"ᵢ"),s("mo",null,"="),s("mfrac",null,[s("mrow",null,[s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",{"data-mjx-auto-op":"false"},"det")]),s("mrow",{"data-mjx-texclass":"INNER"},[s("mo",{"data-mjx-texclass":"OPEN"},"("),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mo",null,","),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")]),s("mo",{"data-mjx-texclass":"CLOSE"},")")])]),s("mrow",null,[s("mi",null,"r"),s("mi",null,"ᵢ"),s("mo",null,"∗"),s("mi",null,"r"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")]),s("mo",null,"+"),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mo",null,"⋅"),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")])])])])],-1),b=i(`

 
-[source](https://github.com/JuliaGeo/GeometryOps.jl/blob/e147c6f8b89dc51c8f7d284ffa0749282b17fb28/src/methods/barycentric.jl#L289-L305)
+[source](https://github.com/JuliaGeo/GeometryOps.jl/blob/9308dd329db3ac8fd436990a347bdc1fd502b820/src/methods/barycentric.jl#L289-L305)
 
 </div>
 <br>
@@ -337,14 +337,14 @@ import{_ as n,c as e,l as s,a,a6 as i,o as t}from"./chunks/framework.DwyrAfcZ.js
 
 
 \`\`\`julia
-to_edges()

Convert any geometry or collection of geometries into a flat vector of Tuple{Tuple{Float64,Float64},Tuple{Float64,Float64}} edges.

source

`,3),F=i(`
# GeometryOps.touchesMethod.
julia
touches(geom1, geom2)::Bool

Return true if the first geometry touches the second geometry. In other words, the two interiors cannot interact, but one of the geometries must have a boundary point that interacts with either the other geometies interior or boundary.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+to_edges()

Convert any geometry or collection of geometries into a flat vector of Tuple{Tuple{Float64,Float64},Tuple{Float64,Float64}} edges.

source

`,3),F=i(`
# GeometryOps.touchesMethod.
julia
touches(geom1, geom2)::Bool

Return true if the first geometry touches the second geometry. In other words, the two interiors cannot interact, but one of the geometries must have a boundary point that interacts with either the other geometies interior or boundary.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 
 l1 = GI.Line([(0.0, 0.0), (1.0, 0.0)])
 l2 = GI.Line([(1.0, 1.0), (1.0, -1.0)])
 
 GO.touches(l1, l2)
 # output
-true

source


# GeometryOps.transformMethod.
julia
transform(f, obj)

Apply a function f to all the points in obj.

Points will be passed to f as an SVector to allow using CoordinateTransformations.jl and Rotations.jl without hassle.

SVector is also a valid GeoInterface.jl point, so will work in all GeoInterface.jl methods.

Example

julia
julia> import GeoInterface as GI
+true

source


# GeometryOps.transformMethod.
julia
transform(f, obj)

Apply a function f to all the points in obj.

Points will be passed to f as an SVector to allow using CoordinateTransformations.jl and Rotations.jl without hassle.

SVector is also a valid GeoInterface.jl point, so will work in all GeoInterface.jl methods.

Example

julia
julia> import GeoInterface as GI
 
 julia> import GeometryOps as GO
 
@@ -363,7 +363,7 @@ import{_ as n,c as e,l as s,a,a6 as i,o as t}from"./chunks/framework.DwyrAfcZ.js
 GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearR
 ing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}(StaticArraysCore.SVe
 ctor{2, Int64}[[2, 1], [4, 3], [6, 5], [2, 1]], nothing, nothing), GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}(StaticArraysCore.SVector{2, Int64
-}[[4, 3], [6, 5], [7, 6], [4, 3]], nothing, nothing)], nothing, nothing)

source


# GeometryOps.tuplesMethod.
julia
tuples(obj)

Convert all points in obj to Tuples, wherever the are nested.

Returns a similar object or collection of objects using GeoInterface.jl geometries wrapping Tuple points.

Keywords

  • 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.

source


# GeometryOps.unionMethod.
julia
union(geom_a, geom_b, [::Type{T}]; target::Type, fix_multipoly = UnionIntersectingPolygons())

Return the union between two geometries as a list of geometries. Return an empty list if none are found. The type of the list will be constrained as much as possible given the input geometries. Furthermore, the user can provide a taget type as a keyword argument and a list of target geometries found in the difference will be returned. The user can also provide a float type 'T' that they would like the points of returned geometries to be. If the user is taking a intersection involving one or more multipolygons, and the multipolygon might be comprised of polygons that intersect, if fix_multipoly is set to an IntersectingPolygons correction (the default is UnionIntersectingPolygons()), then the needed multipolygons will be fixed to be valid before performing the intersection to ensure a correct answer. Only set fix_multipoly to false if you know that the multipolygons are valid, as it will avoid unneeded computation.

Calculates the union between two polygons.

Example

julia
import GeoInterface as GI, GeometryOps as GO
+}[[4, 3], [6, 5], [7, 6], [4, 3]], nothing, nothing)], nothing, nothing)

source


# GeometryOps.tuplesMethod.
julia
tuples(obj)

Convert all points in obj to Tuples, wherever the are nested.

Returns a similar object or collection of objects using GeoInterface.jl geometries wrapping Tuple points.

Keywords

  • 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.

source


# GeometryOps.unionMethod.
julia
union(geom_a, geom_b, [::Type{T}]; target::Type, fix_multipoly = UnionIntersectingPolygons())

Return the union between two geometries as a list of geometries. Return an empty list if none are found. The type of the list will be constrained as much as possible given the input geometries. Furthermore, the user can provide a taget type as a keyword argument and a list of target geometries found in the difference will be returned. The user can also provide a float type 'T' that they would like the points of returned geometries to be. If the user is taking a intersection involving one or more multipolygons, and the multipolygon might be comprised of polygons that intersect, if fix_multipoly is set to an IntersectingPolygons correction (the default is UnionIntersectingPolygons()), then the needed multipolygons will be fixed to be valid before performing the intersection to ensure a correct answer. Only set fix_multipoly to false if you know that the multipolygons are valid, as it will avoid unneeded computation.

Calculates the union between two polygons.

Example

julia
import GeoInterface as GI, GeometryOps as GO
 
 p1 = GI.Polygon([[(0.0, 0.0), (5.0, 5.0), (10.0, 0.0), (5.0, -5.0), (0.0, 0.0)]])
 p2 = GI.Polygon([[(3.0, 0.0), (8.0, 5.0), (13.0, 0.0), (8.0, -5.0), (3.0, 0.0)]])
@@ -372,12 +372,12 @@ import{_ as n,c as e,l as s,a,a6 as i,o as t}from"./chunks/framework.DwyrAfcZ.js
 
 # 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


# GeometryOps.unwrapFunction.
julia
unwrap(target::Type{<:AbstractTrait}, obj)
-unwrap(f, target::Type{<:AbstractTrait}, obj)

Unwrap the object to vectors, down to the target trait.

If f is passed in it will be applied to the target geometries as they are found.

source


# GeometryOps.weighted_meanMethod.
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


# GeometryOps.withinMethod.
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


# GeometryOps.unwrapFunction.
julia
unwrap(target::Type{<:AbstractTrait}, obj)
+unwrap(f, target::Type{<:AbstractTrait}, obj)

Unwrap the object to vectors, down to the target trait.

If f is passed in it will be applied to the target geometries as they are found.

source


# GeometryOps.weighted_meanMethod.
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


# GeometryOps.withinMethod.
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



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

`,17);function m(C,f,v,T,G,A){return t(),e("div",null,[h,s("div",p,[r,a(" "),k,a(" — "),o,a(". "),d,s("mjx-container",g,[(t(),e("svg",y,E)),u]),b]),F])}const D=n(l,[["render",m]]);export{O as __pageData,D as default}; +true

source



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

`,17);function m(C,f,v,T,G,A){return t(),e("div",null,[h,s("div",p,[r,a(" "),k,a(" — "),o,a(". "),d,s("mjx-container",g,[(t(),e("svg",y,c)),u]),b]),F])}const D=n(l,[["render",m]]);export{O as __pageData,D as default}; diff --git a/previews/PR132/assets/api.md.BQfhnVqd.lean.js b/previews/PR132/assets/api.md.DJJ0t0ks.lean.js similarity index 96% rename from previews/PR132/assets/api.md.BQfhnVqd.lean.js rename to previews/PR132/assets/api.md.DJJ0t0ks.lean.js index 39d7163ab..7226d522e 100644 --- a/previews/PR132/assets/api.md.BQfhnVqd.lean.js +++ b/previews/PR132/assets/api.md.DJJ0t0ks.lean.js @@ -1 +1 @@ -import{_ as n,c as e,l as s,a,a6 as i,o as t}from"./chunks/framework.DwyrAfcZ.js";const O=JSON.parse('{"title":"Full GeometryOps API documentation","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),l={name:"api.md"},h=i("",212),p={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},r=s("a",{id:"GeometryOps.t_value-Union{Tuple{T2}, Tuple{T1}, Tuple{N}, Tuple{Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, T2, T2}} where {N, T1<:Real, T2<:Real}",href:"#GeometryOps.t_value-Union{Tuple{T2}, Tuple{T1}, Tuple{N}, Tuple{Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, T2, T2}} where {N, T1<:Real, T2<:Real}"},"#",-1),k=s("b",null,[s("u",null,"GeometryOps.t_value")],-1),o=s("i",null,"Method",-1),d=i("",3),g={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},y={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"},c=i("",1),E=[c],u=s("mjx-assistive-mml",{unselectable:"on",display:"block",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",overflow:"hidden",width:"100%"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[s("mi",null,"t"),s("mi",null,"ᵢ"),s("mo",null,"="),s("mfrac",null,[s("mrow",null,[s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",{"data-mjx-auto-op":"false"},"det")]),s("mrow",{"data-mjx-texclass":"INNER"},[s("mo",{"data-mjx-texclass":"OPEN"},"("),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mo",null,","),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")]),s("mo",{"data-mjx-texclass":"CLOSE"},")")])]),s("mrow",null,[s("mi",null,"r"),s("mi",null,"ᵢ"),s("mo",null,"∗"),s("mi",null,"r"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")]),s("mo",null,"+"),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mo",null,"⋅"),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")])])])])],-1),b=i("",3),F=i("",17);function m(C,f,v,T,G,A){return t(),e("div",null,[h,s("div",p,[r,a(" "),k,a(" — "),o,a(". "),d,s("mjx-container",g,[(t(),e("svg",y,E)),u]),b]),F])}const D=n(l,[["render",m]]);export{O as __pageData,D as default}; +import{_ as n,c as e,l as s,a,a6 as i,o as t}from"./chunks/framework.DwyrAfcZ.js";const O=JSON.parse('{"title":"Full GeometryOps API documentation","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),l={name:"api.md"},h=i("",212),p={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},r=s("a",{id:"GeometryOps.t_value-Union{Tuple{T2}, Tuple{T1}, Tuple{N}, Tuple{Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, T2, T2}} where {N, T1<:Real, T2<:Real}",href:"#GeometryOps.t_value-Union{Tuple{T2}, Tuple{T1}, Tuple{N}, Tuple{Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, T2, T2}} where {N, T1<:Real, T2<:Real}"},"#",-1),k=s("b",null,[s("u",null,"GeometryOps.t_value")],-1),o=s("i",null,"Method",-1),d=i("",3),g={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},y={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"},E=i("",1),c=[E],u=s("mjx-assistive-mml",{unselectable:"on",display:"block",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",overflow:"hidden",width:"100%"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[s("mi",null,"t"),s("mi",null,"ᵢ"),s("mo",null,"="),s("mfrac",null,[s("mrow",null,[s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",{"data-mjx-auto-op":"false"},"det")]),s("mrow",{"data-mjx-texclass":"INNER"},[s("mo",{"data-mjx-texclass":"OPEN"},"("),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mo",null,","),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")]),s("mo",{"data-mjx-texclass":"CLOSE"},")")])]),s("mrow",null,[s("mi",null,"r"),s("mi",null,"ᵢ"),s("mo",null,"∗"),s("mi",null,"r"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")]),s("mo",null,"+"),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mo",null,"⋅"),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")])])])])],-1),b=i("",3),F=i("",17);function m(C,f,v,T,G,A){return t(),e("div",null,[h,s("div",p,[r,a(" "),k,a(" — "),o,a(". "),d,s("mjx-container",g,[(t(),e("svg",y,c)),u]),b]),F])}const D=n(l,[["render",m]]);export{O as __pageData,D as default}; diff --git a/previews/PR132/assets/app.B2P6J57r.js b/previews/PR132/assets/app.CJMJonaL.js similarity index 95% rename from previews/PR132/assets/app.B2P6J57r.js rename to previews/PR132/assets/app.CJMJonaL.js index 1d9c92de7..33c1e99bf 100644 --- a/previews/PR132/assets/app.B2P6J57r.js +++ b/previews/PR132/assets/app.CJMJonaL.js @@ -1 +1 @@ -import{R as p}from"./chunks/theme.CoUy1FRt.js";import{U as o,a7 as u,a8 as c,a9 as l,aa as f,ab as d,ac as m,ad as h,ae as g,af as A,ag as y,d as P,u as v,k as w,y as C,ah as R,ai as b,aj as E,a5 as S}from"./chunks/framework.DwyrAfcZ.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}=v();return w(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&R(),b(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function j(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();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 D(){return g(T)}function _(){let e=o,a;return A(t=>{let n=y(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&&j().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{j as createApp}; +import{R as p}from"./chunks/theme.SQGMrLbr.js";import{U as o,a7 as u,a8 as c,a9 as l,aa as f,ab as d,ac as m,ad as h,ae as g,af as A,ag as y,d as P,u as v,k as w,y as C,ah as R,ai as b,aj as E,a5 as S}from"./chunks/framework.DwyrAfcZ.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}=v();return w(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&R(),b(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function j(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();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 D(){return g(T)}function _(){let e=o,a;return A(t=>{let n=y(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&&j().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{j as createApp}; diff --git a/previews/PR132/assets/hqyfuhc.DD_DdvRe.png b/previews/PR132/assets/awrfbpj.DD_DdvRe.png similarity index 100% rename from previews/PR132/assets/hqyfuhc.DD_DdvRe.png rename to previews/PR132/assets/awrfbpj.DD_DdvRe.png diff --git a/previews/PR132/assets/chunks/@localSearchIndexroot.CkrQch1A.js b/previews/PR132/assets/chunks/@localSearchIndexroot.CI8yFp8j.js similarity index 73% rename from previews/PR132/assets/chunks/@localSearchIndexroot.CkrQch1A.js rename to previews/PR132/assets/chunks/@localSearchIndexroot.CI8yFp8j.js index 920148391..bd8e4301e 100644 --- a/previews/PR132/assets/chunks/@localSearchIndexroot.CkrQch1A.js +++ b/previews/PR132/assets/chunks/@localSearchIndexroot.CI8yFp8j.js @@ -1 +1 @@ -const e='{"documentCount":161,"nextId":161,"documentIds":{"0":"/GeometryOps.jl/previews/PR132/api#Full-GeometryOps-API-documentation","1":"/GeometryOps.jl/previews/PR132/api#apply-and-associated-functions","2":"/GeometryOps.jl/previews/PR132/api#General-geometry-methods","3":"/GeometryOps.jl/previews/PR132/api#OGC-methods","4":"/GeometryOps.jl/previews/PR132/api#Other-general-methods","5":"/GeometryOps.jl/previews/PR132/api#Barycentric-coordinates","6":"/GeometryOps.jl/previews/PR132/api#Other-methods","7":"/GeometryOps.jl/previews/PR132/call_notes#20th-April,-2024","8":"/GeometryOps.jl/previews/PR132/call_notes#29th-Feb,-2024","9":"/GeometryOps.jl/previews/PR132/call_notes#To-do","10":"/GeometryOps.jl/previews/PR132/call_notes#Done","11":"/GeometryOps.jl/previews/PR132/experiments/accurate_accumulators#Accurate-accumulation","12":"/GeometryOps.jl/previews/PR132/experiments/predicates#Predicates","13":"/GeometryOps.jl/previews/PR132/experiments/predicates#Orient","14":"/GeometryOps.jl/previews/PR132/experiments/predicates#Dashboard","15":"/GeometryOps.jl/previews/PR132/experiments/predicates#Testing-robust-vs-regular-predicates","16":"/GeometryOps.jl/previews/PR132/experiments/predicates#Incircle","17":"/GeometryOps.jl/previews/PR132/introduction#Introduction","18":"/GeometryOps.jl/previews/PR132/introduction#Main-concepts","19":"/GeometryOps.jl/previews/PR132/introduction#The-apply-paradigm","20":"/GeometryOps.jl/previews/PR132/introduction#What\'s-this-GeoInterface.Wrapper-thing?","21":"/GeometryOps.jl/previews/PR132/paper#Paper","22":"/GeometryOps.jl/previews/PR132/paper#Statement-of-need","23":"/GeometryOps.jl/previews/PR132/paper#Ongoing-research-projects","24":"/GeometryOps.jl/previews/PR132/paper#Citations","25":"/GeometryOps.jl/previews/PR132/paradigms#Paradigms","26":"/GeometryOps.jl/previews/PR132/paradigms#apply","27":"/GeometryOps.jl/previews/PR132/paradigms#applyreduce","28":"/GeometryOps.jl/previews/PR132/paradigms#fix-and-prepare","29":"/GeometryOps.jl/previews/PR132/peculiarities#Peculiarities","30":"/GeometryOps.jl/previews/PR132/peculiarities#What-does-apply-return-and-why?","31":"/GeometryOps.jl/previews/PR132/peculiarities#Why-do-you-want-me-to-provide-a-target-in-set-operations?","32":"/GeometryOps.jl/previews/PR132/peculiarities#_True-and-_False-(or-BoolsAsTypes)","33":"/GeometryOps.jl/previews/PR132/source/GeometryOps#GeometryOps.jl","34":"/GeometryOps.jl/previews/PR132/source/methods/angles#Angles","35":"/GeometryOps.jl/previews/PR132/source/methods/angles#What-is-angles?","36":"/GeometryOps.jl/previews/PR132/source/methods/angles#Implementation","37":"/GeometryOps.jl/previews/PR132/source/methods/area#Area-and-signed-area","38":"/GeometryOps.jl/previews/PR132/source/methods/area#What-is-area?-What-is-signed-area?","39":"/GeometryOps.jl/previews/PR132/source/methods/area#Implementation","40":"/GeometryOps.jl/previews/PR132/source/methods/barycentric#Barycentric-coordinates","41":"/GeometryOps.jl/previews/PR132/source/methods/barycentric#Example","42":"/GeometryOps.jl/previews/PR132/source/methods/barycentric#Barycentric-coordinate-API","43":"/GeometryOps.jl/previews/PR132/source/methods/centroid#Centroid","44":"/GeometryOps.jl/previews/PR132/source/methods/centroid#What-is-the-centroid?","45":"/GeometryOps.jl/previews/PR132/source/methods/centroid#Implementation","46":"/GeometryOps.jl/previews/PR132/source/methods/clipping/clipping_processor#Polygon-clipping-helpers","47":"/GeometryOps.jl/previews/PR132/source/methods/clipping/coverage#What-is-coverage?","48":"/GeometryOps.jl/previews/PR132/source/methods/clipping/coverage#Implementation","49":"/GeometryOps.jl/previews/PR132/source/methods/clipping/cut#Polygon-cutting","50":"/GeometryOps.jl/previews/PR132/source/methods/clipping/cut#What-is-cut?","51":"/GeometryOps.jl/previews/PR132/source/methods/clipping/cut#Implementation","52":"/GeometryOps.jl/previews/PR132/source/methods/clipping/difference#Difference-Polygon-Clipping","53":"/GeometryOps.jl/previews/PR132/source/methods/clipping/difference#Helper-functions-for-Differences-with-Greiner-and-Hormann-Polygon-Clipping","54":"/GeometryOps.jl/previews/PR132/source/methods/clipping/intersection#Geometry-Intersection","55":"/GeometryOps.jl/previews/PR132/source/methods/clipping/intersection#Helper-functions-for-Intersections-with-Greiner-and-Hormann-Polygon-Clipping","56":"/GeometryOps.jl/previews/PR132/source/methods/clipping/union#Union-Polygon-Clipping","57":"/GeometryOps.jl/previews/PR132/source/methods/clipping/union#Helper-functions-for-Unions-with-Greiner-and-Hormann-Polygon-Clipping","58":"/GeometryOps.jl/previews/PR132/source/methods/distance#Distance-and-signed-distance","59":"/GeometryOps.jl/previews/PR132/source/methods/distance#What-is-distance?-What-is-signed-distance?","60":"/GeometryOps.jl/previews/PR132/source/methods/distance#Implementation","61":"/GeometryOps.jl/previews/PR132/source/methods/equals#Equals","62":"/GeometryOps.jl/previews/PR132/source/methods/equals#What-is-equals?","63":"/GeometryOps.jl/previews/PR132/source/methods/equals#Implementation","64":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/contains#Contains","65":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/contains#What-is-contains?","66":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/contains#Implementation","67":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#CoveredBy","68":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#What-is-coveredby?","69":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#Implementation","70":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#Convert-features-to-geometries","71":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#Points-coveredby-geometries","72":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#Lines-coveredby-geometries","73":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#Rings-covered-by-geometries","74":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#Polygons-covered-by-geometries","75":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#Geometries-coveredby-multi-geometry/geometry-collections","76":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#Multi-geometry/geometry-collections-coveredby-geometries","77":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/covers#Covers","78":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/covers#What-is-covers?","79":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/covers#Implementation","80":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/crosses#Crossing-checks","81":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Disjoint","82":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#What-is-disjoint?","83":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Implementation","84":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Convert-features-to-geometries","85":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Point-disjoint-geometries","86":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Lines-disjoint-geometries","87":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Rings-disjoint-geometries","88":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Polygon-disjoint-geometries","89":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Geometries-disjoint-multi-geometry/geometry-collections","90":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Multi-geometry/geometry-collections-coveredby-geometries","91":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/geom_geom_processors#Line-curve-interaction","92":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/intersects#Intersection-checks","93":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/intersects#What-is-intersects?","94":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/intersects#Implementation","95":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/overlaps#Overlaps","96":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/overlaps#What-is-overlaps?","97":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/overlaps#Implementation","98":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Touches","99":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#What-is-touches?","100":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Implementation","101":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Convert-features-to-geometries","102":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Point-touches-geometries","103":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Lines-touching-geometries","104":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Rings-touch-geometries","105":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Polygons-touch-geometries","106":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Geometries-touch-multi-geometry/geometry-collections","107":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Multi-geometry/geometry-collections-cross-geometries","108":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Within","109":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#What-is-within?","110":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Implementation","111":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Convert-features-to-geometries","112":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Points-within-geometries","113":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Lines-within-geometries","114":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Rings-covered-by-geometries","115":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Polygons-within-geometries","116":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Geometries-within-multi-geometry/geometry-collections","117":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Multi-geometry/geometry-collections-within-geometries","118":"/GeometryOps.jl/previews/PR132/source/methods/orientation#Orientation","119":"/GeometryOps.jl/previews/PR132/source/methods/orientation#isclockwise","120":"/GeometryOps.jl/previews/PR132/source/methods/orientation#isconcave","121":"/GeometryOps.jl/previews/PR132/source/methods/polygonize#Polygonizing-raster-data","122":"/GeometryOps.jl/previews/PR132/source/primitives#Primitive-functions","123":"/GeometryOps.jl/previews/PR132/source/primitives#Docstrings","124":"/GeometryOps.jl/previews/PR132/source/primitives#Functions","125":"/GeometryOps.jl/previews/PR132/source/primitives#Types","126":"/GeometryOps.jl/previews/PR132/source/primitives#Implementation","127":"/GeometryOps.jl/previews/PR132/source/primitives#What-is-apply?","128":"/GeometryOps.jl/previews/PR132/source/primitives#Embedding:","129":"/GeometryOps.jl/previews/PR132/source/primitives#Threading","130":"/GeometryOps.jl/previews/PR132/source/transformations/correction/closed_ring#Closed-Rings","131":"/GeometryOps.jl/previews/PR132/source/transformations/correction/closed_ring#Example","132":"/GeometryOps.jl/previews/PR132/source/transformations/correction/closed_ring#Implementation","133":"/GeometryOps.jl/previews/PR132/source/transformations/correction/geometry_correction#Geometry-Corrections","134":"/GeometryOps.jl/previews/PR132/source/transformations/correction/geometry_correction#Interface","135":"/GeometryOps.jl/previews/PR132/source/transformations/correction/geometry_correction#Available-corrections","136":"/GeometryOps.jl/previews/PR132/source/transformations/correction/intersecting_polygons#Intersecting-Polygons","137":"/GeometryOps.jl/previews/PR132/source/transformations/correction/intersecting_polygons#Example","138":"/GeometryOps.jl/previews/PR132/source/transformations/correction/intersecting_polygons#Implementation","139":"/GeometryOps.jl/previews/PR132/source/transformations/flip#Coordinate-flipping","140":"/GeometryOps.jl/previews/PR132/source/transformations/extent#Extent-embedding","141":"/GeometryOps.jl/previews/PR132/source/transformations/reproject#Geometry-reprojection","142":"/GeometryOps.jl/previews/PR132/source/transformations/reproject#Method-error-handling","143":"/GeometryOps.jl/previews/PR132/source/transformations/segmentize#Segmentize","144":"/GeometryOps.jl/previews/PR132/source/transformations/segmentize#Examples","145":"/GeometryOps.jl/previews/PR132/source/transformations/segmentize#Benchmark","146":"/GeometryOps.jl/previews/PR132/source/transformations/segmentize#Implementation","147":"/GeometryOps.jl/previews/PR132/source/transformations/simplify#Geometry-simplification","148":"/GeometryOps.jl/previews/PR132/source/transformations/simplify#Examples","149":"/GeometryOps.jl/previews/PR132/source/transformations/simplify#Benchmark","150":"/GeometryOps.jl/previews/PR132/source/transformations/simplify#Simplify-with-RadialDistance-Algorithm","151":"/GeometryOps.jl/previews/PR132/source/transformations/simplify#Simplify-with-DouglasPeucker-Algorithm","152":"/GeometryOps.jl/previews/PR132/source/transformations/simplify#Simplify-with-VisvalingamWhyatt-Algorithm","153":"/GeometryOps.jl/previews/PR132/source/transformations/simplify#Shared-utils","154":"/GeometryOps.jl/previews/PR132/source/transformations/transform#Pointwise-transformation","155":"/GeometryOps.jl/previews/PR132/source/transformations/tuples#Tuple-conversion","156":"/GeometryOps.jl/previews/PR132/source/utils#Utility-functions","157":"/GeometryOps.jl/previews/PR132/tutorials/spatial_joins#Spatial-joins","158":"/GeometryOps.jl/previews/PR132/tutorials/spatial_joins#Simple-example","159":"/GeometryOps.jl/previews/PR132/tutorials/spatial_joins#Real-world-example","160":"/GeometryOps.jl/previews/PR132/tutorials/spatial_joins#Enabling-custom-predicates"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[4,1,88],"1":[4,4,249],"2":[3,4,1],"3":[2,7,207],"4":[3,7,261],"5":[2,4,84],"6":[2,4,994],"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,72],"18":[2,1,1],"19":[3,3,50],"20":[8,3,18],"21":[1,1,24],"22":[3,1,174],"23":[3,1,11],"24":[1,1,20],"25":[1,1,53],"26":[1,1,109],"27":[1,2,35],"28":[3,1,79],"29":[1,1,1],"30":[7,1,71],"31":[13,1,101],"32":[6,1,66],"33":[2,1,109],"34":[1,1,3],"35":[4,1,57],"36":[1,1,270],"37":[4,1,4],"38":[5,4,101],"39":[1,4,247],"40":[2,1,65],"41":[1,2,210],"42":[3,2,414],"43":[1,1,6],"44":[5,1,91],"45":[1,1,199],"46":[3,1,562],"47":[4,1,70],"48":[1,1,324],"49":[2,1,3],"50":[4,2,57],"51":[1,2,197],"52":[3,1,214],"53":[10,1,172],"54":[2,1,251],"55":[10,1,339],"56":[3,1,234],"57":[10,1,283],"58":[4,1,4],"59":[5,4,129],"60":[1,4,260],"61":[1,1,3],"62":[4,1,68],"63":[1,1,266],"64":[1,1,3],"65":[4,1,79],"66":[1,1,79],"67":[1,1,3],"68":[4,1,81],"69":[1,1,126],"70":[4,1,11],"71":[3,1,55],"72":[3,1,45],"73":[4,1,47],"74":[4,1,39],"75":[5,1,40],"76":[5,1,44],"77":[1,1,3],"78":[4,1,67],"79":[1,1,77],"80":[2,1,147],"81":[1,1,3],"82":[4,1,68],"83":[1,1,107],"84":[4,1,10],"85":[3,1,56],"86":[3,1,57],"87":[3,1,46],"88":[3,1,32],"89":[5,1,39],"90":[5,1,44],"91":[3,1,419],"92":[2,1,3],"93":[4,2,80],"94":[1,2,108],"95":[1,1,3],"96":[4,1,82],"97":[1,1,235],"98":[1,1,3],"99":[4,1,70],"100":[1,1,122],"101":[4,1,11],"102":[3,1,68],"103":[3,1,52],"104":[3,1,61],"105":[3,1,40],"106":[5,1,39],"107":[5,1,42],"108":[1,1,3],"109":[4,1,72],"110":[1,1,127],"111":[4,1,11],"112":[3,1,62],"113":[3,1,52],"114":[4,1,52],"115":[3,1,37],"116":[5,1,39],"117":[5,1,42],"118":[1,1,4],"119":[1,1,21],"120":[1,1,193],"121":[3,1,253],"122":[2,1,113],"123":[1,2,1],"124":[1,3,106],"125":[1,2,12],"126":[1,2,148],"127":[4,2,114],"128":[2,2,36],"129":[1,2,546],"130":[2,1,54],"131":[1,2,87],"132":[1,2,83],"133":[2,1,41],"134":[1,2,112],"135":[2,2,109],"136":[2,1,77],"137":[1,2,70],"138":[1,2,135],"139":[2,1,56],"140":[2,1,71],"141":[2,1,132],"142":[3,2,77],"143":[1,1,76],"144":[1,1,147],"145":[1,1,268],"146":[1,1,187],"147":[2,1,19],"148":[1,2,67],"149":[1,2,404],"150":[4,1,75],"151":[4,1,174],"152":[4,1,85],"153":[2,1,149],"154":[2,1,111],"155":[2,1,58],"156":[2,1,137],"157":[2,1,138],"158":[2,2,137],"159":[3,2,117],"160":[3,2,68]},"averageFieldLength":[2.701863354037267,1.453416149068323,105.3913043478261],"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":"Introduction","titles":[]},"18":{"title":"Main concepts","titles":["Introduction"]},"19":{"title":"The apply paradigm","titles":["Introduction","Main concepts"]},"20":{"title":"What's this GeoInterface.Wrapper thing?","titles":["Introduction","Main concepts"]},"21":{"title":"Paper","titles":[]},"22":{"title":"Statement of need","titles":["Paper"]},"23":{"title":"Ongoing research projects","titles":["Paper"]},"24":{"title":"Citations","titles":["Paper"]},"25":{"title":"Paradigms","titles":[]},"26":{"title":"apply","titles":["Paradigms"]},"27":{"title":"applyreduce","titles":["Paradigms","apply"]},"28":{"title":"fix and prepare","titles":["Paradigms"]},"29":{"title":"Peculiarities","titles":[]},"30":{"title":"What does apply return and why?","titles":["Peculiarities"]},"31":{"title":"Why do you want me to provide a target in set operations?","titles":["Peculiarities"]},"32":{"title":"_True and _False (or BoolsAsTypes)","titles":["Peculiarities"]},"33":{"title":"GeometryOps.jl","titles":[]},"34":{"title":"Angles","titles":[]},"35":{"title":"What is angles?","titles":["Angles"]},"36":{"title":"Implementation","titles":["Angles"]},"37":{"title":"Area and signed area","titles":[]},"38":{"title":"What is area? What is signed area?","titles":["Area and signed area"]},"39":{"title":"Implementation","titles":["Area and signed area"]},"40":{"title":"Barycentric coordinates","titles":[]},"41":{"title":"Example","titles":["Barycentric coordinates"]},"42":{"title":"Barycentric-coordinate API","titles":["Barycentric coordinates"]},"43":{"title":"Centroid","titles":[]},"44":{"title":"What is the centroid?","titles":["Centroid"]},"45":{"title":"Implementation","titles":["Centroid"]},"46":{"title":"Polygon clipping helpers","titles":[]},"47":{"title":"What is coverage?","titles":[]},"48":{"title":"Implementation","titles":[]},"49":{"title":"Polygon cutting","titles":[]},"50":{"title":"What is cut?","titles":["Polygon cutting"]},"51":{"title":"Implementation","titles":["Polygon cutting"]},"52":{"title":"Difference Polygon Clipping","titles":[]},"53":{"title":"Helper functions for Differences with Greiner and Hormann Polygon Clipping","titles":[]},"54":{"title":"Geometry Intersection","titles":[]},"55":{"title":"Helper functions for Intersections with Greiner and Hormann Polygon Clipping","titles":[]},"56":{"title":"Union Polygon Clipping","titles":[]},"57":{"title":"Helper functions for Unions with Greiner and Hormann Polygon Clipping","titles":[]},"58":{"title":"Distance and signed distance","titles":[]},"59":{"title":"What is distance? What is signed distance?","titles":["Distance and signed distance"]},"60":{"title":"Implementation","titles":["Distance and signed distance"]},"61":{"title":"Equals","titles":[]},"62":{"title":"What is equals?","titles":["Equals"]},"63":{"title":"Implementation","titles":["Equals"]},"64":{"title":"Contains","titles":[]},"65":{"title":"What is contains?","titles":["Contains"]},"66":{"title":"Implementation","titles":["Contains"]},"67":{"title":"CoveredBy","titles":[]},"68":{"title":"What is coveredby?","titles":["CoveredBy"]},"69":{"title":"Implementation","titles":["CoveredBy"]},"70":{"title":"Convert features to geometries","titles":[]},"71":{"title":"Points coveredby geometries","titles":[]},"72":{"title":"Lines coveredby geometries","titles":[]},"73":{"title":"Rings covered by geometries","titles":[]},"74":{"title":"Polygons covered by geometries","titles":[]},"75":{"title":"Geometries coveredby multi-geometry/geometry collections","titles":[]},"76":{"title":"Multi-geometry/geometry collections coveredby geometries","titles":[]},"77":{"title":"Covers","titles":[]},"78":{"title":"What is covers?","titles":["Covers"]},"79":{"title":"Implementation","titles":["Covers"]},"80":{"title":"Crossing checks","titles":[]},"81":{"title":"Disjoint","titles":[]},"82":{"title":"What is disjoint?","titles":["Disjoint"]},"83":{"title":"Implementation","titles":["Disjoint"]},"84":{"title":"Convert features to geometries","titles":[]},"85":{"title":"Point disjoint geometries","titles":[]},"86":{"title":"Lines disjoint geometries","titles":[]},"87":{"title":"Rings disjoint geometries","titles":[]},"88":{"title":"Polygon disjoint geometries","titles":[]},"89":{"title":"Geometries disjoint multi-geometry/geometry collections","titles":[]},"90":{"title":"Multi-geometry/geometry collections coveredby geometries","titles":[]},"91":{"title":"Line-curve interaction","titles":[]},"92":{"title":"Intersection checks","titles":[]},"93":{"title":"What is intersects?","titles":["Intersection checks"]},"94":{"title":"Implementation","titles":["Intersection checks"]},"95":{"title":"Overlaps","titles":[]},"96":{"title":"What is overlaps?","titles":["Overlaps"]},"97":{"title":"Implementation","titles":["Overlaps"]},"98":{"title":"Touches","titles":[]},"99":{"title":"What is touches?","titles":["Touches"]},"100":{"title":"Implementation","titles":["Touches"]},"101":{"title":"Convert features to geometries","titles":[]},"102":{"title":"Point touches geometries","titles":[]},"103":{"title":"Lines touching geometries","titles":[]},"104":{"title":"Rings touch geometries","titles":[]},"105":{"title":"Polygons touch geometries","titles":[]},"106":{"title":"Geometries touch multi-geometry/geometry collections","titles":[]},"107":{"title":"Multi-geometry/geometry collections cross geometries","titles":[]},"108":{"title":"Within","titles":[]},"109":{"title":"What is within?","titles":["Within"]},"110":{"title":"Implementation","titles":["Within"]},"111":{"title":"Convert features to geometries","titles":[]},"112":{"title":"Points within geometries","titles":[]},"113":{"title":"Lines within geometries","titles":[]},"114":{"title":"Rings covered by geometries","titles":[]},"115":{"title":"Polygons within geometries","titles":[]},"116":{"title":"Geometries within multi-geometry/geometry collections","titles":[]},"117":{"title":"Multi-geometry/geometry collections within geometries","titles":[]},"118":{"title":"Orientation","titles":[]},"119":{"title":"isclockwise","titles":["Orientation"]},"120":{"title":"isconcave","titles":["Orientation"]},"121":{"title":"Polygonizing raster data","titles":[]},"122":{"title":"Primitive functions","titles":[]},"123":{"title":"Docstrings","titles":["Primitive functions"]},"124":{"title":"Functions","titles":["Primitive functions","Docstrings"]},"125":{"title":"Types","titles":["Primitive functions"]},"126":{"title":"Implementation","titles":["Primitive functions"]},"127":{"title":"What is apply?","titles":["Primitive functions"]},"128":{"title":"Embedding:","titles":["Primitive functions"]},"129":{"title":"Threading","titles":["Primitive functions"]},"130":{"title":"Closed Rings","titles":[]},"131":{"title":"Example","titles":["Closed Rings"]},"132":{"title":"Implementation","titles":["Closed Rings"]},"133":{"title":"Geometry Corrections","titles":[]},"134":{"title":"Interface","titles":["Geometry Corrections"]},"135":{"title":"Available corrections","titles":["Geometry Corrections"]},"136":{"title":"Intersecting Polygons","titles":[]},"137":{"title":"Example","titles":["Intersecting Polygons"]},"138":{"title":"Implementation","titles":["Intersecting Polygons"]},"139":{"title":"Coordinate flipping","titles":[]},"140":{"title":"Extent embedding","titles":[]},"141":{"title":"Geometry reprojection","titles":[]},"142":{"title":"Method error handling","titles":["Geometry reprojection"]},"143":{"title":"Segmentize","titles":[]},"144":{"title":"Examples","titles":["Segmentize"]},"145":{"title":"Benchmark","titles":["Segmentize"]},"146":{"title":"Implementation","titles":["Segmentize"]},"147":{"title":"Geometry simplification","titles":[]},"148":{"title":"Examples","titles":["Geometry simplification"]},"149":{"title":"Benchmark","titles":["Geometry simplification"]},"150":{"title":"Simplify with RadialDistance Algorithm","titles":[]},"151":{"title":"Simplify with DouglasPeucker Algorithm","titles":[]},"152":{"title":"Simplify with VisvalingamWhyatt Algorithm","titles":[]},"153":{"title":"Shared utils","titles":[]},"154":{"title":"Pointwise transformation","titles":[]},"155":{"title":"Tuple conversion","titles":[]},"156":{"title":"Utility functions","titles":[]},"157":{"title":"Spatial joins","titles":[]},"158":{"title":"Simple example","titles":["Spatial joins"]},"159":{"title":"Real-world example","titles":["Spatial joins"]},"160":{"title":"Enabling custom predicates","titles":["Spatial joins"]}},"dirtCount":0,"index":[["÷",{"2":{"129":2}}],["≈",{"2":{"55":4,"91":4}}],["∘",{"2":{"55":1,"97":2,"134":1,"149":2,"160":2}}],["⊻",{"2":{"46":1,"53":2}}],["≥",{"2":{"46":1,"91":2,"138":1,"151":1}}],["αr",{"2":{"55":1}}],["α2",{"2":{"46":4}}],["α",{"2":{"46":3,"55":36,"91":7}}],["α1",{"2":{"46":4}}],["βs",{"2":{"55":1}}],["β2",{"2":{"46":4}}],["β",{"2":{"46":4,"55":33,"91":7}}],["β1",{"2":{"46":4}}],["≤",{"2":{"46":4,"48":14,"55":10,"91":10,"151":1,"153":1}}],["^2",{"2":{"45":2,"60":2}}],["^hormannpresentation",{"2":{"42":2}}],["∑λ",{"2":{"42":2}}],["⋅",{"2":{"42":1}}],["`equatorial",{"2":{"145":2}}],["`extents",{"2":{"140":1}}],["`inf`",{"2":{"141":1}}],["`intersects`",{"2":{"94":1}}],["`intersectingpolygons`",{"2":{"52":1,"54":1,"56":1}}],["`prefilter",{"2":{"149":1}}],["`proj",{"2":{"141":1,"145":2}}],["`polgontrait`",{"2":{"129":1}}],["`polygontrait`",{"2":{"129":2,"134":1}}],["`polygonize`",{"2":{"121":2}}],["`polygon`",{"2":{"42":3}}],["`poly",{"2":{"53":3,"55":1,"57":1}}],["`pointrait`",{"2":{"149":1}}],["`pointtrait`",{"2":{"129":3,"134":1}}],["`point",{"2":{"91":3}}],["`point`",{"2":{"42":4,"60":1}}],["`point2f`",{"2":{"41":1}}],["`douglaspeucker`",{"2":{"149":1}}],["`d`",{"2":{"141":1}}],["`difference`",{"2":{"138":1}}],["`disjoint`",{"2":{"94":1}}],["`obj`",{"2":{"129":1,"154":1,"155":1}}],["`op`",{"2":{"129":2}}],["`+`",{"2":{"129":1}}],["`number`",{"2":{"149":2,"153":3}}],["`namedtuple`",{"2":{"129":1}}],["`nothing`",{"2":{"126":1}}],["`flattening`",{"2":{"145":1}}],["`flattening",{"2":{"145":1}}],["`flatten`",{"2":{"129":1}}],["`featurecollectiontrait`",{"2":{"129":2}}],["`featuretrait`",{"2":{"129":3}}],["`f",{"2":{"129":1}}],["`f`",{"2":{"129":5,"154":2}}],["`false`",{"2":{"126":4,"141":1}}],["`fix",{"2":{"52":2,"53":2,"54":2,"55":2,"56":2,"57":2}}],["`alg`",{"2":{"153":1}}],["`always",{"2":{"141":1}}],["`application",{"2":{"134":1}}],["`apply`",{"2":{"126":1,"129":1}}],["`abstractgeometrytrait`",{"2":{"129":1}}],["`abstractarray`",{"2":{"129":1}}],["`a`",{"2":{"121":1}}],["`calc",{"2":{"126":1}}],["`cartesianindex`",{"2":{"121":1}}],["`crs`",{"2":{"126":1}}],["`components`",{"2":{"129":1}}],["`collect`",{"2":{"129":1}}],["`covers`",{"2":{"69":1,"79":1}}],["`coveredby`",{"2":{"69":1,"79":1}}],["`contains`",{"2":{"66":1,"110":1}}],["`ys`",{"2":{"121":1}}],["`tuple",{"2":{"156":1}}],["`tuple`",{"2":{"155":1}}],["`tuple`s",{"2":{"155":1}}],["`tol`",{"2":{"149":2,"150":3,"151":2,"152":3,"153":4}}],["`time`",{"2":{"141":1}}],["`transform`",{"2":{"141":1}}],["`true`",{"2":{"69":1,"80":1,"83":2,"100":1,"110":1,"120":1,"126":2,"141":1}}],["`threaded==true`",{"2":{"129":1}}],["`threaded`",{"2":{"126":1}}],["`target",{"2":{"141":3}}],["`target`",{"2":{"54":1,"126":1,"129":4}}],["`tables",{"2":{"129":1}}],["`taget`",{"2":{"52":1,"56":1}}],["`within`",{"2":{"66":1,"110":1}}],["`weight`",{"2":{"42":1}}],["`geodesic`",{"2":{"145":1}}],["`geodesicsegments`",{"2":{"144":1,"145":1,"146":1}}],["`geointerface`",{"2":{"134":1}}],["`geointerface",{"2":{"129":2,"141":2}}],["`geometrycorrection`",{"2":{"132":1,"134":1,"138":2}}],["`geometry`",{"2":{"129":1,"141":2}}],["`geometrybasics",{"2":{"42":3,"121":2}}],["`geom`",{"2":{"60":3,"129":1,"146":1}}],["`g1`",{"2":{"60":1}}],["`linearring`",{"2":{"146":1}}],["`linearsegments`",{"2":{"146":1}}],["`linestring`",{"2":{"146":1}}],["`linestringtrait`",{"2":{"134":1}}],["`line2`",{"2":{"120":1}}],["`line1`",{"2":{"120":1}}],["`line",{"2":{"54":4}}],["`method",{"2":{"146":1}}],["`method`",{"2":{"42":3,"146":1}}],["`max",{"2":{"145":4,"146":2}}],["`makie",{"2":{"121":1}}],["`multipointtrait`",{"2":{"129":1,"149":1}}],["`multipolygontrait`",{"2":{"129":1}}],["`multipolygon",{"2":{"53":2,"55":3,"57":2}}],["`multipoly",{"2":{"53":5,"55":3,"57":3}}],["`minpoints`",{"2":{"121":2}}],["`unionintersectingpolygons`",{"2":{"138":1}}],["`unionintersectingpolygons",{"2":{"52":1,"53":2,"54":1,"55":2,"56":1,"57":2}}],["`radialdistance`",{"2":{"149":1}}],["`ratio`",{"2":{"149":2,"153":3}}],["`reproject`",{"2":{"142":1}}],["`rebuild`",{"2":{"129":1}}],["`r`",{"2":{"42":1}}],["`rᵢ`",{"2":{"42":1}}],["`svector`",{"2":{"154":3}}],["`simplifyalg`",{"2":{"149":2}}],["`simplify",{"2":{"149":1}}],["`simplify`",{"2":{"149":2}}],["`source",{"2":{"141":3}}],["`s`",{"2":{"42":1}}],["`sᵢ`",{"2":{"42":2}}],["`s2`",{"2":{"42":1}}],["`s1`",{"2":{"42":1}}],["`hcat`",{"2":{"42":1}}],["`x`",{"2":{"129":1}}],["`xs`",{"2":{"121":1}}],["`x1",{"2":{"42":1}}],["`x1`",{"2":{"42":2}}],["`x2`",{"2":{"42":1}}],["`visvalingamwhyatt`",{"2":{"149":1}}],["`vector",{"2":{"141":1}}],["`vector`",{"2":{"129":1}}],["`vᵢ`",{"2":{"42":1}}],["`v`",{"2":{"42":1}}],["`values`",{"2":{"42":1}}],["`λs`",{"2":{"42":2}}],["`",{"2":{"42":2,"52":1,"53":2,"54":1,"55":2,"56":1,"57":2,"121":1,"129":1,"134":2,"141":2,"146":1,"149":3,"156":1}}],["`barycentric",{"2":{"42":3}}],["```jldoctest",{"2":{"51":1,"52":1,"54":1,"56":1,"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"120":2,"149":1}}],["```julia",{"2":{"6":1,"42":1,"80":1,"126":1,"129":1,"154":2}}],["```math",{"2":{"42":1}}],["```",{"2":{"11":1,"42":3,"51":1,"52":1,"54":1,"56":1,"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"120":2,"121":10,"129":1,"149":1,"154":2,"156":1}}],["λ₁",{"2":{"42":2}}],["λn",{"2":{"40":1}}],["λ3",{"2":{"40":1}}],["λ2",{"2":{"40":2}}],["λ1",{"2":{"40":2}}],["λs",{"2":{"5":3,"6":4,"42":27}}],["π",{"2":{"36":1,"149":1}}],["δqp",{"2":{"55":16}}],["δintrs",{"2":{"46":2}}],["δy2",{"2":{"120":2}}],["δy1",{"2":{"120":2}}],["δyl",{"2":{"97":4}}],["δy",{"2":{"36":8,"48":3,"91":7}}],["δys",{"2":{"36":1}}],["δx2",{"2":{"120":2}}],["δx1",{"2":{"120":2}}],["δxl",{"2":{"97":4}}],["δx",{"2":{"36":9,"48":3,"91":7}}],["∈",{"2":{"14":1}}],["~",{"2":{"14":3}}],["$ratio",{"2":{"153":1}}],["$rectangle",{"2":{"145":2}}],["$number",{"2":{"153":1}}],["$name",{"2":{"33":2}}],["$min",{"2":{"153":1}}],["$douglas",{"2":{"149":1,"151":1}}],["$simplify",{"2":{"149":1,"150":1,"152":1}}],["$lg",{"2":{"145":1}}],["$lin",{"2":{"145":2}}],["$geom",{"2":{"149":8}}],["$geo",{"2":{"145":1}}],["$apply",{"2":{"129":1,"139":1,"141":1,"149":1}}],["$calc",{"2":{"126":1}}],["$crs",{"2":{"126":1,"140":1}}],["$tol",{"2":{"153":1}}],["$threaded",{"2":{"126":1}}],["$t",{"2":{"63":1,"129":4}}],["$target",{"2":{"53":1,"55":1,"57":1,"129":3}}],["$trait",{"2":{"51":1,"53":2,"55":2,"57":2}}],["$",{"2":{"13":4,"14":1,"42":4,"134":4,"146":1,"149":12}}],["qy",{"2":{"13":2,"14":2,"55":3}}],["qx",{"2":{"13":2,"14":2,"55":3}}],["q",{"2":{"13":13,"14":12,"46":8,"55":3}}],["queue",{"2":{"151":41}}],["questions",{"2":{"55":1}}],["quite",{"2":{"131":1,"159":1}}],["quick",{"2":{"4":1,"6":1,"42":1,"140":1,"148":1}}],["quality",{"2":{"6":1,"149":1}}],["quantity",{"2":{"6":1,"145":1}}],["quot",{"2":{"1":4,"6":8,"28":2,"46":8,"59":2,"60":2,"63":2,"78":4,"91":10,"127":2,"129":4,"143":6,"158":2}}],["|=",{"2":{"91":4,"97":1}}],["||",{"2":{"36":2,"46":10,"48":8,"51":1,"54":1,"55":7,"56":1,"63":18,"80":2,"91":7,"94":1,"102":1,"121":4,"151":1,"153":3}}],["|",{"2":{"11":4}}],["|>",{"2":{"11":8,"13":2,"129":1,"144":1,"145":1,"149":3,"159":2}}],["↩︎",{"2":{"6":1}}],["ᵢᵢᵢ₊₁ᵢᵢ₊₁ᵢᵢ₊₁tᵢ=det",{"2":{"6":1}}],["zs",{"2":{"121":5}}],["zoom",{"2":{"14":1}}],["zip",{"2":{"13":1,"14":1}}],["zeros",{"2":{"42":1,"48":1}}],["zero",{"2":{"4":6,"6":8,"39":11,"45":3,"46":4,"48":11,"55":8,"59":1,"60":3,"120":1,"129":1,"151":4}}],["z",{"2":{"4":1,"5":1,"6":2,"42":3,"63":3,"121":3,"139":1,"154":1,"155":1}}],["09",{"2":{"41":1}}],["08",{"2":{"41":1}}],["06",{"2":{"41":1}}],["02",{"2":{"41":3}}],["04",{"2":{"41":6}}],["071",{"2":{"144":2,"145":2}}],["07",{"2":{"41":6,"144":6,"145":6}}],["001",{"2":{"149":1}}],["000",{"2":{"149":1}}],["00",{"2":{"41":2}}],["008696",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["05",{"2":{"41":1}}],["052704767595",{"2":{"15":1}}],["03",{"2":{"41":4}}],["01362848005",{"2":{"15":1}}],["01",{"2":{"14":1,"41":1,"144":1,"145":1}}],["0^",{"2":{"13":2,"14":2}}],["0+2",{"2":{"13":2,"14":2}}],["0",{"2":{"3":23,"4":12,"6":177,"11":1,"13":5,"14":8,"15":32,"35":20,"36":3,"38":9,"39":4,"41":155,"42":2,"44":6,"45":6,"46":45,"47":13,"48":5,"50":22,"51":49,"52":42,"54":2,"55":22,"56":46,"57":2,"59":20,"60":2,"62":13,"63":18,"65":16,"68":6,"69":6,"78":6,"80":9,"82":15,"91":33,"96":13,"97":9,"99":12,"100":11,"109":16,"120":20,"121":25,"131":24,"137":64,"138":4,"144":16,"145":13,"146":1,"149":11,"151":7,"153":4,"156":2,"158":13}}],[">=",{"2":{"42":6,"80":4,"97":1,"121":1,"153":1,"156":2}}],[">",{"2":{"1":1,"6":3,"11":2,"13":1,"15":2,"36":1,"42":1,"46":17,"48":3,"51":5,"52":1,"53":1,"55":4,"56":1,"57":3,"59":1,"63":1,"80":8,"91":10,"97":2,"120":3,"121":4,"129":5,"134":1,"138":3,"146":2,"149":1,"151":12,"153":3,"154":1,"156":1,"159":1}}],["9im",{"2":{"91":2,"157":1}}],["97",{"2":{"41":1}}],["94",{"2":{"41":1}}],["92",{"2":{"41":1}}],["9833",{"2":{"15":1}}],["95770326033",{"2":{"15":1}}],["95",{"2":{"13":1,"14":1}}],["900",{"2":{"145":1}}],["90063612163",{"2":{"11":2}}],["90",{"2":{"35":9,"41":1}}],["909318372607",{"2":{"11":3}}],["961329",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["9",{"2":{"1":1,"6":1,"91":2,"120":12,"144":1,"154":1}}],["88",{"2":{"41":1}}],["86",{"2":{"41":1}}],["868447876892",{"2":{"15":2}}],["84",{"2":{"41":1}}],["82",{"2":{"41":1}}],["800",{"2":{"41":1}}],["80000",{"2":{"15":5}}],["80",{"2":{"41":1}}],["80869813739",{"2":{"15":2}}],["856614689791036e",{"2":{"15":2}}],["83572303404496",{"2":{"6":1,"54":1}}],["8",{"2":{"1":3,"6":9,"13":1,"14":1,"52":2,"56":4,"91":1,"121":5,"144":1,"154":3}}],["karnataka",{"2":{"159":1}}],["karney",{"2":{"22":1}}],["kbn",{"2":{"11":2}}],["kinds",{"2":{"31":1}}],["kind",{"2":{"9":1}}],["k",{"2":{"6":1,"14":6,"42":1,"46":5,"91":5}}],["kernel",{"2":{"146":4}}],["keepat",{"2":{"56":1,"138":2}}],["keep",{"2":{"46":3,"138":14,"144":1,"158":1}}],["keeping",{"2":{"6":1,"129":1,"139":1}}],["keyword",{"2":{"6":5,"31":1,"52":1,"54":1,"56":1,"126":6,"129":1,"140":2,"145":2}}],["keywords",{"2":{"1":2,"4":1,"6":10,"91":2,"121":1,"126":1,"129":1,"139":2,"140":1,"141":3,"149":8,"150":1,"151":1,"152":1,"153":1,"155":2}}],["knowledge",{"2":{"22":1}}],["known",{"2":{"22":1,"48":2}}],["know",{"2":{"6":3,"36":2,"48":1,"52":1,"54":1,"56":1,"57":1,"129":1,"158":1}}],["kwargs",{"2":{"52":3,"53":3,"54":4,"55":5,"56":3,"57":5,"134":2,"142":1,"145":1}}],["kwdef",{"2":{"33":1,"46":1,"145":1,"150":1,"151":1,"152":1}}],["kw",{"2":{"1":1,"6":5,"121":2,"129":21,"139":3,"149":13,"152":1,"154":3,"155":3}}],["jpn",{"2":{"159":2}}],["jp",{"2":{"63":2}}],["jstep",{"2":{"63":3}}],["jstart",{"2":{"63":7}}],["jhole",{"2":{"63":2}}],["jh",{"2":{"57":5}}],["j+1",{"2":{"46":1,"121":1,"153":1}}],["j",{"2":{"46":17,"55":3,"63":8,"80":9,"91":12,"120":2,"121":9,"153":2}}],["jet",{"2":{"41":1}}],["jts",{"2":{"22":1}}],["joined",{"2":{"158":4}}],["joins",{"0":{"157":1},"1":{"158":1,"159":1,"160":1},"2":{"157":3}}],["joinpath",{"2":{"149":2}}],["join",{"2":{"129":2,"157":4,"158":5,"160":1}}],["joining",{"2":{"6":2,"149":1,"157":1}}],["joss",{"2":{"21":1}}],["just",{"2":{"4":1,"6":1,"21":1,"45":1,"46":2,"57":1,"60":2,"127":1,"129":3,"145":1,"157":1}}],["juliapoints",{"2":{"158":1}}],["juliapolygonize",{"2":{"6":1}}],["juliapolygon",{"2":{"6":1}}],["julia$apply",{"2":{"155":1}}],["julia$threaded",{"2":{"140":1}}],["julia6",{"2":{"149":1}}],["julia```jldoctest",{"2":{"156":1}}],["julia```",{"2":{"80":1,"126":1}}],["juliaxrange",{"2":{"59":1}}],["julia1",{"2":{"52":1,"54":1,"56":1}}],["julia2",{"2":{"51":1}}],["juliabase",{"2":{"42":1,"60":4,"129":1}}],["juliabarycentric",{"2":{"5":3,"6":3}}],["julialines",{"2":{"38":1}}],["julialinearsegments",{"2":{"6":1}}],["juliafalse",{"2":{"120":1}}],["juliafunction",{"2":{"36":2,"42":3,"45":1,"46":12,"48":2,"51":1,"53":1,"55":1,"57":1,"60":8,"91":9,"94":1,"97":1,"102":1,"129":6,"142":1,"145":1,"153":2}}],["juliafor",{"2":{"33":1,"129":2}}],["juliaflexijoins",{"2":{"160":1}}],["juliaflipped",{"2":{"122":1}}],["juliaflip",{"2":{"6":1}}],["juliaflatten",{"2":{"6":1,"124":1}}],["juliamy",{"2":{"160":1}}],["juliamultipoly",{"2":{"149":1}}],["juliamodule",{"2":{"33":1}}],["juliameanvalue",{"2":{"6":1}}],["juliausing",{"2":{"13":1,"14":1,"41":1,"144":2,"145":1,"148":1,"149":1}}],["juliaunwrap",{"2":{"6":1,"129":6}}],["juliaunion",{"2":{"6":1}}],["juliaunionintersectingpolygons",{"2":{"6":1,"135":1}}],["juliagi",{"2":{"11":2}}],["juliago",{"2":{"11":1,"35":1,"38":1,"47":1,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"157":1}}],["juliageointerface",{"2":{"156":1}}],["juliageo",{"2":{"6":1}}],["juliageodesicsegments",{"2":{"6":1}}],["juliaweighted",{"2":{"6":1}}],["juliawithin",{"2":{"3":1,"6":1}}],["juliascatter",{"2":{"158":1}}],["juliasimplify",{"2":{"6":1,"149":3}}],["juliasigned",{"2":{"4":2,"6":2}}],["juliasegmentize",{"2":{"6":1}}],["julias1",{"2":{"6":1}}],["juliavisvalingamwhyatt",{"2":{"6":1}}],["juliareconstruct",{"2":{"6":1,"124":1}}],["juliarebuild",{"2":{"6":1,"124":1}}],["juliareproject",{"2":{"1":1}}],["juliaradialdistance",{"2":{"6":1}}],["juliadouglaspeucker",{"2":{"6":1}}],["juliadifference",{"2":{"6":1}}],["juliadiffintersectingpolygons",{"2":{"6":1,"135":1}}],["juliadistance",{"2":{"4":1,"6":1}}],["juliadisjoint",{"2":{"3":1,"6":1}}],["juliaend",{"2":{"60":1}}],["juliaenum",{"2":{"6":2}}],["juliaexport",{"2":{"34":1,"37":1,"40":1,"43":1,"49":1,"52":1,"54":1,"56":1,"58":1,"61":1,"64":1,"67":1,"77":1,"81":1,"92":1,"95":1,"98":1,"108":1,"118":1,"121":1,"122":1,"130":1,"133":1,"136":1,"141":1,"143":1,"149":1}}],["juliaembed",{"2":{"4":1,"6":1}}],["juliaequals",{"2":{"4":15,"6":15}}],["juliaaccuratearithmetic",{"2":{"11":2}}],["juliaabstract",{"2":{"6":3,"126":1,"134":1,"135":1,"145":1}}],["juliaangles",{"2":{"4":1,"6":1}}],["juliaarea",{"2":{"4":1,"6":1}}],["juliaapplyreduce",{"2":{"1":1,"6":1}}],["juliaapply",{"2":{"1":1,"6":1,"26":1}}],["juliacent",{"2":{"44":1}}],["juliacentroid",{"2":{"4":1,"6":3}}],["juliacut",{"2":{"6":1}}],["juliaclosedring",{"2":{"6":1,"135":1}}],["juliaconst",{"2":{"36":1,"39":1,"42":1,"46":1,"48":2,"60":1,"69":1,"83":1,"100":1,"110":1}}],["juliacontains",{"2":{"3":1,"6":1}}],["juliacoverage",{"2":{"6":1}}],["juliacovers",{"2":{"3":1,"6":1}}],["juliacoveredby",{"2":{"3":1,"6":1}}],["juliatrue",{"2":{"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"120":1}}],["juliatraittarget",{"2":{"6":2,"126":1}}],["juliatransform",{"2":{"1":1,"6":1}}],["juliatuples",{"2":{"6":1}}],["juliat",{"2":{"6":1}}],["juliatouches",{"2":{"3":1,"6":1}}],["juliaoverlaps",{"2":{"3":9,"6":9}}],["juliainnerjoin",{"2":{"159":1}}],["juliaintersection",{"2":{"6":2}}],["juliaintersects",{"2":{"3":1,"6":1}}],["juliaisconcave",{"2":{"6":1}}],["juliaisclockwise",{"2":{"6":1}}],["juliaimport",{"2":{"1":1,"3":9,"4":1,"6":19,"11":1,"35":1,"38":1,"44":1,"47":1,"50":1,"59":1,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"131":2,"137":2,"144":1,"158":1,"159":1}}],["julia",{"2":{"3":1,"6":3,"9":1,"15":1,"17":1,"22":2,"24":3,"33":1,"36":4,"39":10,"42":8,"45":19,"46":58,"48":18,"51":10,"52":6,"53":1,"54":5,"55":13,"56":6,"57":4,"59":1,"60":4,"63":15,"66":1,"70":1,"71":5,"72":1,"73":1,"74":2,"75":1,"76":1,"79":1,"80":3,"84":1,"85":3,"86":1,"87":1,"88":1,"89":1,"90":1,"91":44,"94":2,"97":6,"101":1,"102":3,"103":1,"104":1,"105":1,"106":1,"107":1,"111":1,"112":3,"113":1,"114":1,"115":2,"116":1,"117":1,"120":9,"121":1,"129":63,"132":5,"134":1,"138":3,"139":1,"140":1,"141":1,"145":1,"146":2,"149":1,"150":2,"151":12,"152":3,"154":1,"155":1,"156":1,"157":1,"158":1}}],["julia>",{"2":{"1":5,"6":5,"154":7}}],["juliajulia>",{"2":{"1":2,"6":2}}],["jl`",{"2":{"141":1}}],["jl",{"0":{"33":1},"2":{"1":10,"4":1,"6":10,"10":2,"11":1,"17":2,"24":1,"30":2,"33":37,"36":1,"39":1,"42":1,"45":1,"46":1,"48":1,"51":1,"53":1,"55":1,"57":1,"60":1,"63":1,"66":1,"76":1,"79":1,"80":1,"90":1,"91":1,"94":1,"97":1,"107":1,"117":1,"120":2,"121":1,"124":1,"129":3,"132":1,"135":1,"138":1,"139":1,"140":2,"141":4,"142":3,"143":1,"145":3,"146":2,"149":2,"153":1,"154":6,"155":2,"156":1,"157":1}}],["+=",{"2":{"39":2,"42":11,"45":6,"46":15,"48":10,"51":1,"55":4,"63":1,"80":1,"91":5,"120":1,"121":3,"138":2,"151":4,"156":3}}],["+",{"2":{"1":1,"6":2,"13":1,"14":1,"36":4,"39":1,"42":20,"45":10,"46":12,"48":7,"51":1,"55":14,"60":3,"63":2,"80":2,"91":6,"120":5,"121":4,"138":3,"146":2,"151":3,"152":2,"153":2}}],["york",{"2":{"159":1}}],["your",{"2":{"26":1,"122":1,"142":1,"145":1,"160":2}}],["you",{"0":{"31":1},"2":{"1":1,"4":1,"5":2,"6":10,"9":1,"11":1,"19":2,"25":1,"26":5,"31":1,"36":1,"39":1,"42":8,"45":1,"52":1,"54":1,"56":1,"122":1,"126":1,"131":1,"137":1,"142":1,"144":1,"145":1,"146":1,"154":1,"158":2,"159":3,"160":4}}],["y=y",{"2":{"156":1}}],["yield",{"2":{"145":1}}],["yinterior",{"2":{"45":2}}],["ylast",{"2":{"60":3}}],["yfirst",{"2":{"60":5}}],["y0",{"2":{"60":5}}],["yw",{"2":{"48":4}}],["ye",{"2":{"48":4}}],["yet",{"2":{"22":1,"42":1,"51":1,"53":1,"55":1,"57":1,"63":1,"134":2,"159":1}}],["y2",{"2":{"45":2,"48":18,"60":7,"80":10,"91":7,"97":4,"146":6,"156":1}}],["y1",{"2":{"45":2,"48":22,"60":7,"80":11,"91":8,"97":5,"146":7,"156":3}}],["ycentroid",{"2":{"45":13}}],["yrange",{"2":{"41":3,"59":3}}],["yautolimits",{"2":{"41":2}}],["yp2",{"2":{"36":4}}],["ys",{"2":{"6":2,"121":7}}],["ymax",{"2":{"6":1,"47":2,"48":48}}],["ymin",{"2":{"6":1,"47":2,"48":49}}],["y",{"2":{"1":2,"4":1,"6":4,"13":9,"14":10,"36":8,"39":2,"41":8,"44":1,"45":10,"46":10,"47":1,"48":8,"53":6,"55":15,"59":2,"60":7,"63":3,"80":21,"91":18,"97":7,"120":8,"121":2,"122":2,"129":1,"139":4,"141":1,"146":2,"153":1,"154":2,"155":2,"156":8,"157":1}}],["75",{"2":{"59":2,"65":1,"82":1,"109":1}}],["78",{"2":{"41":1}}],["74",{"2":{"41":1}}],["72",{"2":{"41":1}}],["726711609794",{"2":{"15":1}}],["76",{"2":{"41":1}}],["76085",{"2":{"15":1}}],["768946",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["704377648755",{"2":{"15":2}}],["700",{"2":{"14":1}}],["700454",{"2":{"6":1,"148":1,"149":1}}],["701141",{"2":{"6":1,"148":1,"149":1}}],["70",{"2":{"6":20,"41":1,"148":20,"149":20}}],["738281",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["7",{"2":{"1":5,"6":5,"91":1,"129":1,"144":4,"145":4,"154":4}}],["6area",{"2":{"45":2}}],["66",{"2":{"41":1}}],["668869",{"2":{"6":1,"148":1,"149":1}}],["64",{"2":{"41":1,"144":2,"145":2}}],["646209",{"2":{"6":1,"148":1,"149":1}}],["62",{"2":{"41":1}}],["624923",{"2":{"6":1,"148":1,"149":1}}],["61366192682",{"2":{"15":1}}],["614624",{"2":{"6":1,"148":1,"149":1}}],["605000000000004",{"2":{"144":2}}],["60",{"2":{"41":1,"144":2}}],["60000",{"2":{"15":3}}],["609817",{"2":{"6":1,"148":1,"149":1}}],["603637",{"2":{"6":2,"148":2,"149":2}}],["68",{"2":{"41":1}}],["682601",{"2":{"6":1,"148":1,"149":1}}],["683975",{"2":{"6":1,"148":1,"149":1}}],["694274",{"2":{"6":1,"148":1,"149":1}}],["697021",{"2":{"6":1,"148":1,"149":1}}],["659942",{"2":{"6":1,"148":1,"149":1}}],["639343",{"2":{"6":1,"148":1,"149":1}}],["6",{"2":{"1":12,"3":4,"6":23,"52":3,"56":3,"91":1,"97":4,"121":1,"129":3,"149":1,"154":9}}],["57",{"2":{"144":4,"145":4}}],["57725",{"2":{"15":2}}],["5x",{"2":{"129":1}}],["563198",{"2":{"55":1}}],["56",{"2":{"41":1}}],["54",{"2":{"41":1}}],["50",{"2":{"41":1,"144":4,"145":4}}],["50000",{"2":{"15":1}}],["500",{"2":{"14":1}}],["5d",{"2":{"17":1}}],["52",{"2":{"41":1}}],["52521",{"2":{"15":1}}],["52709",{"2":{"15":2}}],["594711",{"2":{"6":1,"148":1,"149":1}}],["590591",{"2":{"6":1,"148":1,"149":1}}],["595397",{"2":{"6":1,"148":1,"149":1}}],["535",{"2":{"144":4}}],["5355",{"2":{"144":2}}],["53333",{"2":{"15":4}}],["53",{"2":{"6":10,"144":2,"156":10}}],["58",{"2":{"41":1}}],["58059",{"2":{"15":2}}],["587158",{"2":{"6":2,"148":2,"149":2}}],["58375366067547",{"2":{"6":1,"54":1}}],["584961",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["5",{"2":{"1":29,"3":4,"4":8,"6":83,"13":1,"41":1,"50":5,"51":8,"52":16,"56":18,"59":8,"63":8,"91":1,"97":4,"121":1,"129":2,"144":1,"145":1,"154":27,"160":1}}],["49",{"2":{"121":1}}],["43787",{"2":{"15":1}}],["439295815226",{"2":{"15":1}}],["434306",{"2":{"6":1,"148":1,"149":1}}],["484003",{"2":{"120":4}}],["482551",{"2":{"120":4}}],["48268",{"2":{"15":1}}],["48",{"2":{"41":1}}],["48001",{"2":{"15":1}}],["489271",{"2":{"6":4,"156":4}}],["45",{"2":{"41":2,"120":12}}],["450",{"2":{"13":1}}],["458369",{"2":{"6":2,"148":2,"149":2}}],["42",{"2":{"13":1,"14":1,"41":3}}],["426283",{"2":{"6":1,"148":1,"149":1}}],["400",{"2":{"41":3}}],["40000",{"2":{"15":1}}],["40",{"2":{"14":1,"41":3}}],["406224",{"2":{"6":1,"148":1,"149":1}}],["404504",{"2":{"6":1,"148":1,"149":1}}],["41",{"2":{"41":1}}],["41878",{"2":{"15":1}}],["414248",{"2":{"6":1,"148":1,"149":1}}],["419406",{"2":{"6":1,"148":1,"149":1}}],["44121252392",{"2":{"15":1}}],["44",{"2":{"14":1,"41":2}}],["442901",{"2":{"6":1,"148":1,"149":1}}],["446339",{"2":{"6":1,"148":1,"149":1}}],["477985",{"2":{"120":4}}],["47",{"2":{"41":3}}],["473835",{"2":{"6":1,"148":1,"149":1}}],["472117",{"2":{"6":2,"148":2,"149":2}}],["46",{"2":{"41":3}}],["468107",{"2":{"6":1,"148":1,"149":1}}],["465816",{"2":{"6":1,"148":1,"149":1}}],["464547",{"2":{"6":6,"156":6}}],["4",{"2":{"1":11,"3":4,"6":15,"9":2,"13":2,"14":1,"35":1,"48":1,"66":1,"79":1,"83":1,"91":2,"110":1,"120":1,"121":1,"129":3,"144":1,"151":1,"154":8}}],["3585",{"2":{"144":1}}],["35",{"2":{"41":3}}],["354492",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["38",{"2":{"41":3}}],["36",{"2":{"41":2}}],["360",{"2":{"36":1}}],["36022",{"2":{"15":1}}],["32",{"2":{"41":3}}],["37",{"2":{"41":5}}],["34",{"2":{"41":3}}],["31",{"2":{"41":2}}],["300",{"2":{"59":1}}],["30",{"2":{"14":2,"41":3}}],["3390",{"2":{"91":1}}],["33333333333",{"2":{"15":1}}],["333333333336",{"2":{"15":3}}],["33",{"2":{"6":20,"148":20,"149":20}}],["3d",{"2":{"4":1,"6":1,"42":2,"63":1,"129":1,"143":1}}],["3",{"2":{"1":13,"3":4,"5":1,"6":29,"14":2,"42":13,"44":6,"52":6,"56":5,"62":1,"66":1,"79":1,"83":1,"91":2,"96":1,"110":1,"121":16,"129":3,"137":16,"144":4,"149":3,"151":2,"153":1,"154":11,"158":1}}],["394759",{"2":{"6":1,"148":1,"149":1}}],["392466",{"2":{"6":1,"148":1,"149":1}}],["395332",{"2":{"6":1,"148":1,"149":1}}],["399918",{"2":{"6":2,"148":2,"149":2}}],["39",{"0":{"20":1},"2":{"0":1,"4":5,"6":17,"7":1,"9":2,"19":1,"21":1,"22":5,"23":1,"25":2,"26":1,"27":1,"31":1,"36":1,"38":1,"39":1,"40":1,"41":3,"42":2,"44":6,"45":3,"46":28,"48":1,"50":1,"51":1,"53":1,"54":4,"55":2,"57":2,"60":4,"63":7,"68":1,"78":2,"85":2,"91":18,"97":1,"99":1,"102":2,"122":2,"124":3,"125":1,"126":4,"129":5,"135":6,"136":1,"144":6,"145":1,"149":2,"157":1,"159":1,"160":2}}],["23",{"2":{"41":3,"91":1}}],["23699059147",{"2":{"15":1}}],["28",{"2":{"41":2}}],["28083",{"2":{"15":2}}],["26",{"2":{"41":5,"91":2}}],["24",{"2":{"41":7,"91":1}}],["274364",{"2":{"52":1,"54":1,"56":1}}],["274363",{"2":{"52":1,"54":1,"56":1}}],["27",{"2":{"41":2}}],["275543",{"2":{"6":6,"156":6}}],["2d",{"2":{"17":1,"143":1}}],["2^",{"2":{"14":1}}],["21",{"2":{"41":4,"91":2}}],["21427",{"2":{"11":5}}],["215118",{"2":{"6":4,"156":4}}],["29",{"2":{"41":3}}],["29th",{"0":{"8":1},"1":{"9":1,"10":1}}],["298",{"2":{"6":2,"145":2}}],["20",{"2":{"41":3,"91":2}}],["2018",{"2":{"91":1}}],["2019",{"2":{"24":1}}],["2017",{"2":{"6":1,"42":1}}],["2024",{"0":{"7":1,"8":1},"1":{"9":1,"10":1}}],["20th",{"0":{"7":1}}],["25",{"2":{"41":3,"65":1,"91":1,"109":1}}],["258",{"2":{"11":1}}],["25px",{"2":{"6":1}}],["257223563`",{"2":{"145":1}}],["257223563",{"2":{"6":2,"145":1}}],["22",{"2":{"41":3,"91":1}}],["22168",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["224758",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["2",{"2":{"1":19,"3":9,"5":1,"6":49,"13":1,"14":1,"15":3,"17":2,"36":3,"39":1,"41":6,"42":32,"44":2,"45":4,"46":6,"47":6,"48":7,"50":1,"51":2,"55":5,"56":1,"59":1,"60":3,"63":4,"66":2,"79":2,"80":2,"82":2,"83":3,"91":11,"110":2,"120":2,"121":8,"129":6,"138":1,"146":1,"149":5,"151":7,"152":7,"153":5,"154":18,"156":11}}],["1998",{"2":{"52":1,"54":1,"56":1}}],["19",{"2":{"41":2,"91":2}}],["11",{"2":{"15":2,"41":2,"91":1}}],["1145",{"2":{"52":1,"54":1,"56":1}}],["114",{"2":{"7":1}}],["165644",{"2":{"120":2}}],["163434",{"2":{"120":2}}],["169356",{"2":{"120":2}}],["166644",{"2":{"120":2}}],["164434",{"2":{"120":2}}],["16111",{"2":{"15":1}}],["16",{"2":{"13":1,"14":1,"41":2,"91":2}}],["180",{"2":{"36":1,"120":1}}],["18593721105",{"2":{"15":1}}],["18",{"2":{"13":1,"14":1,"41":3,"91":2}}],["1em",{"2":{"6":1}}],["1px",{"2":{"6":1}}],["13401805979",{"2":{"15":2}}],["13",{"2":{"6":3,"41":1,"52":1,"56":2,"91":1}}],["10m",{"2":{"149":1}}],["100",{"2":{"14":3}}],["1000",{"2":{"13":2,"144":2,"158":2}}],["10^9",{"2":{"13":1}}],["10",{"2":{"6":12,"11":1,"38":1,"41":5,"50":4,"51":10,"52":2,"54":1,"56":2,"62":2,"91":3,"96":2,"145":1,"149":3}}],["14",{"2":{"3":1,"6":3,"41":2,"54":2,"91":1,"93":1,"94":1,"144":2,"145":2}}],["15",{"2":{"3":1,"6":3,"41":1,"50":1,"51":1,"54":1,"91":1,"93":1,"94":1}}],["170356",{"2":{"120":2}}],["17",{"2":{"3":1,"6":2,"41":3,"54":1,"91":2,"93":1,"94":1}}],["125",{"2":{"6":1,"54":1}}],["127",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["123",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["126",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["12",{"2":{"3":1,"6":2,"41":2,"54":1,"91":1,"93":1,"94":1,"159":1}}],["124",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["1",{"2":{"1":8,"3":38,"6":60,"13":1,"14":4,"15":1,"35":4,"36":15,"38":7,"40":2,"41":11,"42":16,"44":4,"45":7,"46":60,"47":9,"48":15,"50":1,"51":10,"53":3,"55":36,"56":4,"57":11,"59":7,"60":6,"63":16,"65":2,"66":6,"68":2,"69":2,"78":2,"79":8,"80":12,"82":2,"83":5,"91":38,"97":6,"99":4,"100":5,"102":1,"109":2,"110":6,"120":14,"121":40,"129":10,"131":12,"132":2,"138":9,"145":1,"146":4,"149":8,"151":15,"152":3,"153":15,"154":6,"156":9,"158":8,"159":3}}],["hypot",{"2":{"146":1}}],["h2",{"2":{"91":6}}],["h1",{"2":{"91":11}}],["hm",{"2":{"41":2}}],["h",{"2":{"36":2,"46":2,"57":8}}],["hit",{"2":{"129":5}}],["hits",{"2":{"26":1}}],["hidedecorations",{"2":{"41":2}}],["hinter",{"2":{"33":2,"142":1,"145":1}}],["hint",{"2":{"33":2,"145":1}}],["hinge=2",{"2":{"54":1}}],["hinge`",{"2":{"54":1}}],["hinge",{"2":{"6":1,"55":5,"91":15}}],["high",{"2":{"22":1}}],["hist",{"2":{"13":1}}],["histogram",{"2":{"13":1}}],["href=",{"2":{"6":1}}],["https",{"2":{"6":1,"52":1,"54":1,"55":1,"56":1,"91":2,"149":1,"151":1}}],["hcat",{"2":{"6":1}}],["heavily",{"2":{"129":1}}],["heatmap",{"2":{"13":5,"14":6,"41":2,"59":2,"121":1}}],["height",{"2":{"121":4}}],["help",{"2":{"126":1}}],["helpers",{"0":{"46":1},"2":{"80":1,"97":1}}],["helper",{"0":{"53":1,"55":1,"57":1},"2":{"45":1,"46":1,"51":1}}],["helps",{"2":{"20":1}}],["held",{"2":{"1":1,"6":1,"129":1}}],["here",{"2":{"6":2,"9":1,"13":1,"14":1,"28":1,"42":1,"55":1,"80":1,"121":1,"129":5,"131":1,"145":1,"157":2,"158":3}}],["hours",{"2":{"159":1}}],["horizontal",{"2":{"48":1,"149":1}}],["hormann",{"0":{"53":1,"55":1,"57":1},"2":{"6":2,"42":2,"46":3,"51":2,"52":1,"54":1,"56":1}}],["how",{"2":{"6":2,"38":1,"42":1,"46":1,"55":1,"63":1,"121":2,"124":1,"129":1,"139":1,"149":1,"157":2,"158":2,"159":1,"160":1}}],["however",{"2":{"3":1,"6":2,"36":1,"42":1,"45":1,"46":1,"59":1,"63":1,"65":1,"79":1,"136":1}}],["hook",{"2":{"6":1,"22":1,"149":1}}],["hole",{"2":{"36":1,"39":3,"41":2,"42":9,"45":4,"46":58,"48":3,"52":6,"54":2,"57":15,"60":3,"72":1,"73":1,"74":1,"91":33,"121":2,"132":2}}],["holes=",{"2":{"46":1}}],["holes",{"2":{"4":3,"5":1,"6":4,"9":2,"36":2,"38":1,"42":2,"45":1,"46":19,"51":4,"52":2,"54":2,"56":6,"57":29,"60":3,"63":3,"88":1,"91":11,"112":1,"121":1,"132":2}}],["holding",{"2":{"129":2}}],["holds",{"2":{"6":1,"46":1,"126":1,"147":1}}],["hold",{"2":{"6":1,"126":1,"149":1}}],["halign",{"2":{"149":1}}],["half",{"2":{"47":2}}],["hail",{"2":{"132":1}}],["hair",{"2":{"121":1}}],["handling",{"0":{"142":1},"2":{"122":1}}],["handler",{"2":{"142":1}}],["handle",{"2":{"33":1,"120":1,"127":2,"129":1}}],["handled",{"2":{"22":2,"26":1}}],["had",{"2":{"52":1,"54":1,"63":1,"126":1,"144":1}}],["happens",{"2":{"46":1}}],["happen",{"2":{"32":1}}],["hao",{"2":{"24":1,"91":1}}],["have",{"2":{"3":3,"4":9,"6":17,"22":1,"27":1,"31":1,"36":2,"39":3,"42":6,"46":4,"59":1,"60":2,"63":10,"91":5,"96":1,"97":3,"99":1,"100":1,"122":2,"124":2,"126":1,"128":1,"129":4,"149":1,"151":1,"157":1,"158":1,"159":3}}],["hassle",{"2":{"1":1,"6":1,"154":1}}],["has",{"2":{"1":4,"6":4,"35":1,"38":2,"42":2,"46":2,"53":1,"55":1,"57":1,"59":1,"60":1,"63":11,"102":1,"120":1,"129":4,"130":1,"144":2,"153":1}}],["bx",{"2":{"120":2}}],["b2",{"2":{"55":8,"60":3,"97":6}}],["b`",{"2":{"53":3,"55":4,"57":4}}],["bigger",{"2":{"46":1}}],["bit",{"2":{"17":1,"153":8}}],["b1",{"2":{"46":8,"55":9,"97":6}}],["build",{"2":{"46":13,"51":1,"52":1,"54":1,"56":1,"124":3,"125":1,"144":2,"152":1,"153":1}}],["built",{"2":{"25":1,"28":1}}],["buffer",{"2":{"45":2,"46":1}}],["buffering",{"2":{"42":1}}],["bunch",{"2":{"22":1}}],["but",{"2":{"1":2,"3":5,"4":3,"6":15,"17":1,"21":1,"26":1,"30":1,"36":1,"38":1,"39":1,"48":1,"57":2,"63":4,"68":2,"96":1,"97":5,"99":1,"100":1,"103":2,"104":1,"109":1,"120":1,"124":1,"126":1,"127":1,"129":16,"139":1,"141":1,"146":1,"149":1,"157":1,"158":1,"159":2}}],["b>",{"2":{"6":2}}],["blue",{"2":{"14":1,"50":1,"62":2,"65":2,"82":2,"96":2,"109":2,"158":2}}],["black",{"2":{"6":1,"50":1}}],["blob",{"2":{"6":1,"149":1}}],["breaks",{"2":{"138":1}}],["break",{"2":{"46":2,"48":1,"53":1,"63":4,"91":11,"97":1,"121":3,"138":2}}],["brevity",{"2":{"42":1}}],["br>",{"2":{"6":1}}],["broadcasting",{"2":{"6":1,"42":1}}],["broken",{"2":{"3":1,"6":1,"80":1}}],["balancing",{"2":{"129":2}}],["backs",{"2":{"51":4}}],["backwards",{"2":{"46":1,"53":1,"55":1,"57":1}}],["back",{"2":{"26":1,"30":1,"31":1,"51":4}}],["barrier",{"2":{"22":1,"129":1}}],["barycentric",{"0":{"5":1,"40":1,"42":1},"1":{"41":1,"42":1},"2":{"0":6,"5":10,"6":17,"9":1,"33":1,"40":9,"41":4,"42":52}}],["basicsgeoms",{"2":{"129":2}}],["basic",{"2":{"121":1}}],["basically",{"2":{"22":1}}],["base",{"2":{"33":3,"42":15,"46":2,"129":5,"142":1,"145":2,"146":1}}],["based",{"2":{"4":2,"6":3,"27":1,"36":2,"39":2,"41":2,"45":1,"48":1,"60":2,"63":1,"69":1,"83":1,"91":1,"97":1,"100":1,"110":1,"126":1,"157":1,"158":1}}],["b",{"2":{"3":2,"4":7,"6":13,"46":173,"48":9,"52":24,"53":17,"54":24,"55":37,"56":25,"57":39,"63":29,"94":7,"97":15}}],["bold",{"2":{"142":1,"145":1}}],["box",{"2":{"47":2,"48":3,"158":1}}],["bounaries",{"2":{"91":1}}],["bounce",{"2":{"46":7,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1}}],["bouncings",{"2":{"46":1}}],["bouncing",{"2":{"46":13,"53":3,"55":4,"57":4}}],["bounday",{"2":{"91":2,"103":2,"104":2,"105":2}}],["boundaries",{"2":{"3":2,"6":2,"78":2,"82":1,"83":1,"91":1,"93":1,"94":1}}],["boundary",{"2":{"3":7,"6":7,"59":1,"65":1,"66":1,"68":1,"69":3,"72":4,"79":2,"80":9,"83":2,"85":1,"86":6,"87":3,"91":16,"99":2,"100":4,"102":3,"103":3,"104":1,"105":1,"109":1,"110":3}}],["bounding",{"2":{"46":1,"47":2,"48":3}}],["boundscheck",{"2":{"42":14}}],["border",{"2":{"6":4,"121":7}}],["both",{"2":{"3":5,"6":6,"46":2,"55":3,"56":1,"57":1,"59":1,"63":3,"66":1,"80":4,"83":1,"91":2,"97":1,"104":1,"110":1,"144":1,"146":1}}],["booltype",{"2":{"126":3,"129":3,"146":1}}],["booleans",{"2":{"46":1,"91":2}}],["boolean",{"2":{"32":2,"46":1,"53":1,"55":1,"57":1,"126":1,"129":1,"157":1}}],["boolsastypes",{"0":{"32":1},"2":{"126":6,"146":2}}],["bools",{"2":{"10":1}}],["bool",{"2":{"3":17,"4":14,"6":36,"46":3,"63":17,"66":1,"69":1,"79":2,"80":13,"83":1,"94":1,"97":10,"100":2,"110":1,"120":7,"126":2,"146":2,"156":5}}],["bypred",{"2":{"160":1}}],["by",{"0":{"73":1,"74":1,"114":1},"2":{"1":3,"3":2,"4":8,"6":28,"7":1,"17":1,"22":1,"25":1,"26":2,"27":1,"30":1,"32":1,"35":1,"36":6,"38":1,"39":1,"42":4,"44":5,"45":4,"46":10,"47":1,"48":6,"50":1,"51":6,"52":1,"54":1,"56":4,"57":3,"60":5,"63":8,"66":1,"68":1,"69":1,"73":2,"74":2,"75":1,"76":2,"78":1,"90":2,"91":10,"120":2,"121":1,"124":2,"129":7,"135":2,"136":1,"138":3,"139":1,"141":2,"142":1,"143":1,"145":3,"146":1,"149":1,"150":1,"151":3,"152":1,"154":1,"157":2,"158":1,"159":2,"160":1}}],["berlin",{"2":{"159":1}}],["been",{"2":{"122":2,"126":1}}],["bearing",{"2":{"120":4}}],["beauty",{"2":{"9":1}}],["better",{"2":{"80":1,"129":2,"149":1}}],["between",{"2":{"4":4,"6":18,"31":1,"36":2,"42":13,"46":2,"48":18,"52":1,"53":4,"54":1,"55":7,"56":2,"57":4,"60":8,"63":1,"91":4,"94":2,"97":2,"121":2,"145":3,"146":1,"150":2,"151":2,"152":1,"157":2,"158":1}}],["become",{"2":{"30":1}}],["because",{"2":{"22":1,"46":1,"122":1}}],["best",{"2":{"27":1,"129":2,"149":1}}],["beware",{"2":{"26":1}}],["being",{"2":{"22":2,"36":1,"91":1,"97":1,"136":1}}],["behind",{"2":{"17":1,"41":1,"122":1}}],["behaviour",{"2":{"6":1,"26":1,"31":1,"149":1}}],["benchmarking",{"2":{"145":1,"149":1}}],["benchmarkgroup",{"2":{"145":2,"149":3}}],["benchmark",{"0":{"145":1,"149":1},"2":{"145":1,"149":1}}],["benchmarktools",{"2":{"13":1,"145":1,"149":1}}],["benchmarks",{"2":{"9":2}}],["beginning",{"2":{"48":1}}],["begin+1",{"2":{"42":5}}],["begin",{"2":{"9":1,"42":7,"129":2,"150":1}}],["before",{"2":{"6":4,"42":1,"52":1,"54":1,"56":1,"149":1}}],["below",{"2":{"6":2,"25":1,"46":1,"134":1,"151":1,"152":1,"153":1}}],["be",{"2":{"1":5,"3":3,"4":11,"5":4,"6":62,"7":1,"9":1,"13":2,"17":3,"22":1,"28":3,"31":2,"32":1,"36":8,"39":7,"40":2,"41":1,"42":10,"44":1,"45":3,"46":11,"47":1,"48":2,"51":1,"52":7,"53":4,"54":7,"55":5,"56":6,"57":5,"59":2,"60":4,"63":15,"69":6,"78":2,"79":1,"83":6,"91":21,"97":2,"100":6,"110":6,"112":1,"113":1,"114":1,"115":1,"120":2,"121":1,"124":2,"126":1,"127":2,"128":2,"129":10,"131":1,"132":1,"133":1,"134":3,"135":4,"136":2,"138":2,"140":1,"141":3,"142":1,"143":1,"145":8,"146":2,"149":10,"151":1,"153":3,"154":1,"157":4}}],["x=x",{"2":{"156":1}}],["x`",{"2":{"129":1}}],["xlast",{"2":{"60":3}}],["xfirst",{"2":{"60":5}}],["x0",{"2":{"60":5}}],["xn",{"2":{"48":4}}],["xinterior",{"2":{"45":2}}],["xcentroid",{"2":{"45":13}}],["xrange",{"2":{"41":3,"59":2}}],["xautolimits",{"2":{"41":2}}],["xp2",{"2":{"36":5}}],["xticklabelrotation",{"2":{"13":2}}],["x2",{"2":{"6":3,"42":4,"45":2,"48":18,"60":8,"80":10,"91":7,"97":4,"146":6,"156":2}}],["x26",{"2":{"6":2,"36":2,"39":6,"42":1,"46":52,"48":36,"52":4,"53":2,"55":30,"57":2,"60":3,"63":14,"75":2,"76":2,"80":48,"89":2,"90":2,"91":162,"94":2,"97":20,"102":2,"106":2,"107":2,"116":2,"117":2,"120":4,"121":10,"134":2,"138":6,"142":2,"145":2,"151":10,"152":2,"156":8,"157":1}}],["x1",{"2":{"6":4,"42":3,"45":2,"48":22,"60":8,"80":11,"91":8,"97":5,"146":7,"156":2}}],["xs",{"2":{"6":2,"48":4,"121":7,"156":4}}],["xmax",{"2":{"6":1,"47":2,"48":48}}],["xmin",{"2":{"6":1,"47":2,"48":49}}],["x3c",{"2":{"5":1,"6":25,"33":1,"36":4,"39":2,"42":66,"46":16,"48":11,"51":3,"52":1,"54":1,"55":13,"56":1,"59":1,"60":13,"63":2,"80":33,"91":13,"94":2,"97":8,"120":1,"121":7,"124":2,"126":4,"129":19,"132":2,"135":3,"138":5,"145":2,"150":2,"151":6,"152":3,"153":9,"156":2,"160":1}}],["xy`",{"2":{"141":1}}],["xy",{"2":{"1":4,"42":1,"121":2,"141":3}}],["x",{"2":{"1":4,"4":1,"6":6,"7":1,"9":5,"11":6,"13":11,"14":10,"15":4,"36":9,"39":2,"41":8,"44":1,"45":10,"46":25,"47":1,"48":8,"51":6,"53":9,"55":25,"57":9,"59":2,"60":7,"63":3,"80":21,"91":18,"97":7,"120":9,"121":4,"122":2,"126":4,"129":17,"134":2,"139":4,"140":2,"141":1,"146":2,"149":2,"151":2,"153":1,"154":2,"155":2,"156":34,"157":1,"159":2}}],["=>",{"2":{"129":2}}],["=float64",{"2":{"45":3,"54":1,"56":1}}],["=false",{"2":{"36":1}}],["===",{"2":{"80":8,"120":4}}],["==",{"2":{"9":1,"27":1,"36":4,"39":2,"42":9,"45":1,"46":29,"48":30,"53":1,"55":19,"56":2,"57":1,"59":1,"63":16,"91":40,"97":2,"120":3,"121":11,"129":1,"132":1,"134":1,"138":1,"142":1,"145":2,"149":1,"153":3}}],["=",{"2":{"1":5,"3":17,"4":7,"5":2,"6":57,"11":1,"13":19,"14":33,"15":18,"33":4,"35":4,"36":56,"38":6,"39":25,"41":35,"42":110,"44":6,"45":36,"46":295,"47":6,"48":95,"50":7,"51":28,"52":20,"53":26,"54":17,"55":103,"56":20,"57":77,"59":15,"60":52,"62":7,"63":40,"65":7,"66":3,"68":4,"69":21,"70":3,"71":7,"72":14,"73":14,"74":4,"75":2,"76":2,"78":5,"79":3,"80":56,"82":7,"83":16,"84":3,"85":11,"86":17,"87":9,"88":3,"89":2,"90":2,"91":188,"93":3,"94":7,"96":7,"97":34,"99":3,"100":20,"101":3,"102":9,"103":14,"104":10,"105":6,"106":2,"107":2,"109":7,"110":20,"111":3,"112":11,"113":14,"114":14,"115":4,"116":2,"117":2,"120":32,"121":78,"122":1,"126":11,"129":90,"131":2,"132":4,"134":9,"137":3,"138":30,"140":1,"142":2,"144":16,"145":21,"146":18,"148":5,"149":60,"150":11,"151":48,"152":7,"153":43,"154":2,"155":1,"156":44,"158":12,"159":6,"160":2}}],["u2",{"2":{"91":4}}],["u1",{"2":{"91":4}}],["upper",{"2":{"158":1}}],["update",{"2":{"46":6}}],["updated",{"2":{"46":6,"129":3}}],["updates",{"2":{"42":1}}],["up",{"2":{"46":2,"91":1,"104":1,"127":1,"137":1,"151":2}}],["uv",{"2":{"42":1}}],["utility",{"0":{"156":1},"2":{"42":1,"129":2}}],["utilizes",{"2":{"22":1}}],["utils",{"0":{"153":1},"2":{"33":1}}],["u>",{"2":{"6":1}}],["u>geometryops",{"2":{"6":1}}],["usage",{"2":{"159":1}}],["usa",{"2":{"149":15,"159":3}}],["us",{"2":{"39":1,"159":1}}],["ususally",{"2":{"6":1,"124":1,"129":1}}],["usual",{"2":{"6":1,"132":1,"135":1}}],["usecases",{"2":{"17":1}}],["uses",{"2":{"6":1,"91":1,"121":1,"141":1,"145":1,"149":1}}],["users",{"2":{"22":3,"33":1,"122":1,"136":1}}],["user",{"2":{"6":12,"31":1,"45":1,"52":3,"54":3,"56":3,"150":1,"151":1,"152":1,"157":1}}],["useful",{"2":{"6":9,"42":1,"143":1,"146":1,"149":2}}],["used",{"2":{"1":1,"5":1,"6":7,"36":1,"39":1,"40":1,"42":1,"45":2,"46":6,"48":1,"51":1,"55":1,"59":1,"60":1,"63":1,"97":1,"121":1,"124":1,"126":1,"129":3,"130":1,"146":1,"149":1,"151":2,"157":2,"158":1}}],["use",{"2":{"1":2,"4":1,"5":1,"6":8,"11":1,"21":1,"22":1,"28":1,"31":1,"42":1,"55":2,"57":1,"80":2,"97":1,"121":1,"126":1,"129":7,"132":1,"139":1,"144":1,"146":1,"149":1,"151":2,"157":2,"160":2}}],["using",{"2":{"1":4,"4":1,"5":3,"6":11,"11":4,"13":4,"14":1,"15":1,"33":7,"35":1,"36":1,"38":2,"39":2,"41":4,"42":7,"44":2,"45":1,"46":5,"47":2,"48":1,"50":2,"51":1,"53":3,"55":4,"57":3,"59":2,"60":2,"62":2,"63":1,"65":2,"66":1,"68":2,"69":1,"76":1,"78":2,"79":1,"80":1,"82":2,"83":1,"90":1,"91":1,"93":2,"94":1,"96":2,"97":1,"99":2,"100":1,"107":1,"109":2,"110":1,"117":1,"120":1,"121":4,"122":2,"127":1,"129":4,"132":1,"135":1,"138":1,"139":1,"140":2,"141":1,"142":3,"144":1,"145":5,"146":1,"149":2,"151":1,"153":1,"154":4,"155":2,"156":1,"157":1,"158":4,"159":2}}],["until",{"2":{"127":1,"151":1}}],["uneeded",{"2":{"52":1,"54":1,"56":1}}],["uneccesary",{"2":{"6":3,"150":1,"151":1,"152":1}}],["unprocessed",{"2":{"46":1}}],["unknown",{"2":{"46":4,"48":15}}],["unknown=3",{"2":{"46":1}}],["unmatched",{"2":{"46":9,"48":26}}],["under",{"2":{"39":2}}],["undergrad",{"2":{"9":1}}],["undef",{"2":{"36":2,"46":1,"150":1,"151":1,"153":2,"156":2}}],["unless",{"2":{"30":1,"46":1,"53":2,"55":2,"57":2}}],["unlike",{"2":{"26":1}}],["unstable",{"2":{"13":1,"126":1,"129":1}}],["unneeded",{"2":{"6":3,"46":1,"52":1,"54":1,"56":1}}],["united",{"2":{"149":1}}],["unify",{"2":{"17":1}}],["unique",{"2":{"6":2,"135":2,"138":2}}],["unioning",{"2":{"57":1}}],["unionintersectingpolygons",{"2":{"0":1,"6":8,"52":1,"53":2,"54":1,"55":2,"56":1,"57":2,"135":2,"136":2,"137":1,"138":4}}],["unions",{"0":{"57":1},"2":{"26":1}}],["union",{"0":{"56":1},"2":{"0":1,"1":2,"3":2,"4":4,"6":21,"11":3,"31":2,"33":1,"36":2,"39":1,"42":1,"45":4,"46":7,"48":1,"54":2,"55":1,"56":18,"57":30,"60":1,"63":8,"71":2,"72":4,"73":1,"75":2,"76":1,"85":2,"86":6,"89":2,"90":1,"97":4,"102":2,"103":4,"104":1,"106":2,"107":1,"112":2,"113":4,"114":1,"116":2,"117":1,"120":1,"122":1,"126":3,"127":3,"129":7,"135":1,"136":1,"138":9,"146":5,"149":1,"150":3,"151":3,"152":3,"156":1}}],["unchanged",{"2":{"1":1,"6":2,"129":1,"149":1}}],["unwrap",{"2":{"0":1,"6":3,"124":1,"129":16}}],["nselected",{"2":{"153":3}}],["nmax",{"2":{"153":2}}],["nice",{"2":{"151":1}}],["nvkelso",{"2":{"149":1}}],["null",{"2":{"145":1}}],["numerator",{"2":{"55":1}}],["numeric",{"2":{"11":1}}],["num",{"2":{"55":18}}],["numbers",{"2":{"6":1,"7":1,"40":2,"42":1,"145":1}}],["number=6",{"2":{"6":1,"148":1,"149":1}}],["number",{"2":{"6":11,"42":1,"46":2,"51":1,"59":1,"63":2,"91":2,"143":1,"144":1,"146":1,"149":2,"150":4,"151":7,"152":4,"153":12}}],["n+1",{"2":{"131":1}}],["nthe",{"2":{"142":1,"145":1}}],["nthreads",{"2":{"129":3}}],["ntasks",{"2":{"129":6}}],["ntuple",{"2":{"42":3,"146":1}}],["nfeature",{"2":{"129":2}}],["nc",{"2":{"91":13}}],["ncoord",{"2":{"63":2}}],["nl",{"2":{"91":11}}],["nhole",{"2":{"46":2,"52":2,"54":2,"56":2,"57":1,"63":2}}],["nbd",{"2":{"121":8}}],["nbpts",{"2":{"46":2}}],["nbsp",{"2":{"1":4,"3":9,"4":8,"5":3,"6":86,"124":3,"134":1,"135":4}}],["ngeom",{"2":{"45":1,"129":2,"156":1}}],["n2",{"2":{"42":8,"63":10}}],["n1",{"2":{"42":8,"63":9}}],["np2",{"2":{"80":4}}],["npolygon",{"2":{"53":1,"63":3,"138":2}}],["npoints",{"2":{"36":6,"46":5,"55":8,"91":3,"145":6,"151":7}}],["npoint",{"2":{"6":1,"36":2,"38":1,"39":1,"48":2,"60":1,"63":6,"80":6,"91":6,"102":1,"120":2,"132":1,"145":3,"146":1,"149":14,"153":1,"156":13}}],["npts",{"2":{"46":4,"151":3}}],["np",{"2":{"39":2,"60":5}}],["natural",{"2":{"149":2,"157":1}}],["naturalearth",{"2":{"11":2}}],["nature",{"2":{"121":1}}],["napts",{"2":{"46":3}}],["named",{"2":{"129":1}}],["namedtuple",{"2":{"30":2,"129":2}}],["name",{"2":{"33":2,"149":1,"159":1}}],["names",{"2":{"33":3,"129":6}}],["nan",{"2":{"9":1}}],["n",{"2":{"6":1,"9":1,"40":2,"42":36,"46":49,"51":10,"55":13,"56":4,"57":4,"91":11,"102":2,"120":6,"121":4,"131":1,"138":25,"142":2,"145":2,"146":3,"149":2,"153":7,"156":32}}],["nor",{"2":{"142":1,"145":1}}],["north",{"2":{"48":12}}],["normalized",{"2":{"42":1}}],["normalize",{"2":{"42":1}}],["norm",{"2":{"6":1,"42":22}}],["nodes",{"2":{"46":1}}],["node",{"2":{"46":25}}],["now",{"2":{"6":1,"13":1,"17":1,"38":1,"41":2,"42":4,"46":1,"51":1,"57":1,"60":1,"120":1,"121":1,"137":1,"143":1,"144":3,"145":1,"149":1,"158":2}}],["no",{"2":{"6":5,"22":1,"36":1,"42":2,"46":4,"52":1,"54":1,"55":3,"56":1,"63":2,"69":3,"83":3,"91":2,"100":2,"102":1,"104":1,"105":2,"110":2,"112":1,"113":3,"114":3,"115":1,"122":1,"129":3,"143":1,"145":2,"146":1,"149":1}}],["nonzero",{"2":{"146":1}}],["none",{"2":{"6":4,"51":1,"52":1,"54":1,"55":1,"56":1,"57":1,"80":4,"82":1}}],["nondimensional",{"2":{"6":1,"145":1}}],["nonintersecting",{"2":{"6":1,"31":1,"135":1,"138":1}}],["non",{"2":{"3":2,"6":2,"30":1,"40":2,"46":12,"52":2,"53":1,"54":1,"55":1,"56":1,"57":2,"59":1,"97":2,"104":1,"126":1,"127":1}}],["note",{"2":{"4":4,"6":10,"19":1,"22":1,"27":1,"36":1,"39":2,"42":1,"44":2,"45":2,"46":2,"48":1,"51":2,"53":3,"55":4,"57":3,"60":1,"63":5,"91":1,"96":1,"97":1,"126":1,"141":1,"146":1,"150":1,"151":2,"152":1}}],["not",{"2":{"1":2,"3":8,"4":1,"6":18,"22":4,"26":1,"27":1,"30":1,"32":1,"36":4,"39":1,"42":4,"44":1,"46":16,"51":1,"54":1,"57":3,"62":2,"63":4,"65":2,"66":1,"68":2,"69":2,"78":1,"79":2,"83":3,"85":5,"86":3,"87":2,"88":2,"91":4,"96":1,"97":2,"100":1,"109":2,"110":2,"112":1,"120":5,"121":1,"126":2,"127":1,"128":1,"129":10,"131":2,"134":2,"137":3,"139":1,"141":1,"142":1,"143":1,"145":2,"146":1,"157":1}}],["nothing`",{"2":{"53":2,"55":2,"57":2}}],["nothing",{"2":{"1":34,"4":1,"6":43,"15":3,"46":4,"51":1,"53":2,"54":1,"55":4,"57":2,"63":1,"91":1,"120":9,"129":8,"131":24,"134":1,"137":60,"142":1,"146":1,"149":2,"150":6,"151":6,"152":6,"153":1,"154":32,"156":7}}],["ne",{"2":{"149":1}}],["net",{"2":{"134":2}}],["ness",{"2":{"129":1}}],["nesting",{"2":{"127":2}}],["nestedloopfast",{"2":{"160":1}}],["nested",{"2":{"1":2,"4":1,"6":5,"26":1,"36":1,"127":2,"129":4,"149":1,"155":1}}],["never",{"2":{"127":1,"150":1}}],["neither",{"2":{"57":1}}],["neightbor",{"2":{"46":1}}],["neighborhood",{"2":{"121":2}}],["neighbor",{"2":{"46":26}}],["neighboring",{"2":{"6":6,"46":1,"149":1,"150":1,"151":1,"152":2}}],["nedge",{"2":{"46":2,"156":13}}],["next",{"2":{"45":1,"46":46,"48":3,"51":4,"91":14,"121":1,"138":13,"151":5}}],["neatly",{"2":{"25":1}}],["necessarily",{"2":{"6":1,"120":1,"139":1}}],["necessary",{"2":{"6":1,"127":1,"149":1}}],["newfeature",{"2":{"129":2}}],["newp",{"2":{"121":8}}],["new",{"2":{"6":1,"22":1,"46":57,"48":9,"52":3,"55":9,"57":16,"91":2,"128":1,"129":18,"134":2,"135":1,"136":1,"138":19,"146":8,"150":1,"151":2,"152":1,"159":1}}],["negative",{"2":{"4":3,"6":3,"38":2,"39":1,"40":2,"59":2,"60":3}}],["needs",{"2":{"22":1,"45":1}}],["needing",{"2":{"4":1,"6":1,"25":1,"140":1}}],["need",{"0":{"22":1},"2":{"1":1,"3":1,"4":2,"5":1,"6":5,"42":2,"44":1,"46":2,"63":4,"78":1,"79":1,"91":1,"122":1,"140":1,"153":1,"154":1,"160":2}}],["needed",{"2":{"1":2,"6":4,"36":1,"42":1,"46":4,"48":1,"52":1,"54":1,"56":1,"60":2,"91":5,"129":2,"134":1,"141":3}}],["gadm",{"2":{"159":4}}],["gardner",{"2":{"23":1}}],["gc",{"2":{"134":6}}],["g",{"2":{"36":3,"39":3,"45":3,"48":3,"60":6,"127":1,"129":6,"149":5,"156":2}}],["gb",{"2":{"33":1,"129":16}}],["global",{"2":{"22":1}}],["guiding",{"2":{"22":1}}],["guarantee",{"2":{"20":1,"27":1}}],["guaranteed",{"2":{"1":1,"6":1,"36":1,"129":1}}],["gdal",{"2":{"22":1}}],["grand",{"2":{"159":1}}],["grained",{"2":{"144":1}}],["graphics",{"2":{"6":1,"42":1}}],["greiner",{"0":{"53":1,"55":1,"57":1},"2":{"46":3,"51":2,"52":1,"54":1,"56":1}}],["green",{"2":{"14":1}}],["greater",{"2":{"6":1,"120":1,"146":1}}],["grid",{"2":{"6":1,"41":1,"48":4}}],["grouping",{"2":{"1":1,"6":1,"129":2}}],["g2",{"2":{"3":5,"6":5,"66":4,"69":12,"70":6,"71":9,"72":6,"73":6,"74":3,"75":4,"76":2,"79":3,"80":21,"83":10,"84":6,"85":10,"86":8,"87":4,"88":2,"89":4,"90":2,"100":10,"101":6,"102":10,"103":6,"104":5,"105":4,"106":4,"107":2,"110":10,"111":6,"112":9,"113":6,"114":6,"115":3,"116":4,"117":2}}],["g1",{"2":{"3":5,"4":1,"6":6,"66":4,"69":12,"70":6,"71":9,"72":6,"73":6,"74":3,"75":2,"76":4,"79":3,"80":21,"83":9,"84":6,"85":10,"86":8,"87":4,"88":2,"89":2,"90":4,"100":10,"101":6,"102":9,"103":6,"104":5,"105":4,"106":2,"107":4,"110":10,"111":6,"112":9,"113":6,"114":6,"115":3,"116":2,"117":4}}],["got",{"2":{"153":3}}],["good",{"2":{"22":1,"42":1}}],["going",{"2":{"4":4,"6":4,"48":2,"63":5}}],["go",{"2":{"1":5,"3":17,"4":2,"6":41,"11":9,"13":1,"14":1,"15":6,"26":1,"33":2,"35":1,"38":1,"42":1,"44":2,"47":1,"50":2,"51":2,"52":2,"54":2,"56":2,"59":6,"62":1,"63":2,"65":2,"66":2,"68":1,"69":2,"78":2,"79":2,"80":1,"82":1,"83":2,"93":1,"94":2,"96":1,"97":2,"99":1,"100":2,"109":2,"110":2,"120":6,"122":1,"124":1,"129":3,"131":3,"137":3,"144":7,"145":8,"148":2,"149":49,"154":3,"156":2,"157":9,"158":2,"159":5,"160":1}}],["gtrait",{"2":{"60":2}}],["gt",{"2":{"1":1,"6":1,"9":2,"10":1,"11":5,"46":3,"120":3}}],["gif",{"2":{"151":1}}],["githack",{"2":{"149":1}}],["github",{"2":{"6":1}}],["gives",{"2":{"159":1}}],["give",{"2":{"91":1}}],["given",{"2":{"4":7,"6":22,"19":1,"26":2,"35":1,"36":1,"39":2,"45":3,"46":4,"48":3,"51":5,"52":1,"53":2,"54":1,"55":4,"56":1,"57":2,"60":8,"63":4,"65":1,"66":1,"69":1,"78":1,"79":1,"83":1,"91":7,"93":1,"94":1,"100":1,"102":1,"110":1,"121":2,"122":1,"134":4,"135":1,"137":1,"143":2,"145":2,"146":2,"152":1}}],["gis",{"2":{"5":1,"6":1,"17":1,"42":1}}],["gi",{"2":{"1":13,"3":42,"4":31,"6":123,"11":8,"13":15,"14":15,"15":8,"26":2,"33":1,"35":3,"36":30,"38":5,"39":21,"41":1,"44":5,"45":38,"46":40,"47":5,"48":17,"50":6,"51":13,"52":19,"53":16,"54":25,"55":31,"56":17,"57":36,"59":8,"60":42,"62":7,"63":99,"65":7,"66":3,"68":3,"69":4,"70":6,"71":12,"72":10,"73":7,"74":4,"75":8,"76":6,"78":3,"79":3,"80":21,"82":7,"83":2,"84":3,"85":12,"86":14,"87":4,"88":2,"89":8,"90":6,"91":59,"93":5,"94":3,"96":7,"97":51,"99":5,"100":3,"101":6,"102":15,"103":10,"104":7,"105":4,"106":8,"107":6,"109":7,"110":2,"111":6,"112":12,"113":10,"114":7,"115":4,"116":8,"117":6,"120":32,"122":4,"124":2,"126":8,"129":115,"131":2,"132":10,"134":9,"137":3,"138":8,"139":5,"140":1,"144":6,"145":6,"146":12,"148":2,"149":34,"153":4,"154":9,"155":5,"156":57,"158":5,"159":2}}],["generic",{"2":{"30":1}}],["generation",{"2":{"149":2}}],["generated",{"2":{"33":1,"36":1,"39":1,"42":1,"45":1,"46":1,"48":1,"51":1,"53":1,"55":1,"57":1,"60":1,"63":1,"66":1,"76":1,"79":1,"80":1,"90":1,"91":1,"94":1,"97":1,"107":1,"117":1,"120":1,"121":1,"129":1,"132":1,"135":1,"138":1,"139":1,"140":1,"142":1,"146":1,"149":1,"153":1,"154":1,"155":1,"156":1,"158":1}}],["generate",{"2":{"7":1,"13":2,"149":1,"158":2}}],["generalization",{"2":{"40":1}}],["generalized",{"2":{"6":1,"40":3,"42":1}}],["generalise",{"2":{"6":4,"149":1}}],["general",{"0":{"2":1,"4":1},"1":{"3":1,"4":1},"2":{"17":1,"26":1,"28":1,"122":1,"142":1}}],["getfeature",{"2":{"129":5,"156":5}}],["getcolumn",{"2":{"129":4}}],["getgeom",{"2":{"75":1,"76":1,"89":1,"90":1,"97":2,"106":1,"107":1,"116":1,"117":1,"129":6,"149":3,"156":6}}],["getring",{"2":{"46":1}}],["getindex",{"2":{"42":2}}],["gethole",{"2":{"36":1,"39":1,"45":1,"46":4,"48":1,"51":1,"52":2,"54":2,"57":6,"60":1,"63":2,"91":5,"132":1}}],["getexterior",{"2":{"36":1,"39":1,"42":1,"45":1,"46":3,"48":1,"51":1,"52":2,"54":2,"56":3,"57":6,"60":1,"63":2,"91":5,"120":1,"132":1}}],["getpolygon",{"2":{"53":3,"55":2,"57":2,"63":3}}],["getpoint",{"2":{"35":1,"36":5,"38":2,"39":1,"42":1,"44":1,"45":6,"46":3,"47":2,"48":3,"50":3,"59":1,"60":6,"62":4,"63":13,"65":4,"68":1,"78":1,"80":7,"82":4,"91":28,"93":2,"96":4,"97":2,"99":2,"102":2,"109":4,"120":5,"132":3,"144":4,"146":2,"153":1,"156":3}}],["getproperty",{"2":{"13":2,"14":1}}],["getting",{"2":{"21":1}}],["get",{"2":{"0":1,"6":2,"13":1,"38":1,"46":7,"52":1,"53":1,"54":1,"55":2,"56":2,"121":4,"129":4,"142":1,"145":3,"149":1,"150":1,"152":1,"153":2,"156":1,"159":2}}],["geo",{"2":{"145":4}}],["geointeface",{"2":{"127":1}}],["geointerace",{"2":{"30":1}}],["geointerfacemakie",{"2":{"148":1,"158":1,"159":1}}],["geointerface",{"0":{"20":1},"2":{"1":18,"3":9,"4":2,"6":39,"11":1,"13":1,"14":1,"15":1,"17":1,"20":1,"24":1,"30":3,"33":7,"35":1,"36":1,"38":1,"39":1,"42":23,"44":1,"45":1,"46":1,"47":1,"48":1,"50":1,"51":1,"52":1,"54":1,"56":1,"59":1,"60":11,"62":1,"63":2,"65":1,"66":2,"68":1,"69":2,"78":1,"79":2,"80":1,"82":1,"83":3,"93":1,"94":2,"96":1,"97":2,"99":1,"100":2,"109":1,"110":2,"120":5,"124":3,"127":3,"129":6,"131":9,"134":1,"135":1,"137":23,"140":1,"141":2,"144":1,"145":1,"148":1,"149":2,"154":13,"155":1,"156":1,"158":1,"159":1}}],["geoscontext",{"2":{"145":1}}],["geosdensify",{"2":{"145":3}}],["geos",{"2":{"22":2}}],["geospatial",{"2":{"22":1}}],["geotable",{"2":{"19":1}}],["geojson",{"2":{"11":1,"149":5}}],["geographiclib",{"2":{"6":1,"22":1,"145":1}}],["geodetic",{"2":{"22":1}}],["geodesic`",{"2":{"145":2}}],["geodesic",{"2":{"6":5,"33":1,"144":6,"145":8,"146":1}}],["geodesicsegments",{"2":{"0":1,"6":2,"143":1,"144":3,"145":6,"146":2}}],["geod",{"2":{"6":2,"145":3}}],["geoformattypes",{"2":{"1":2,"141":2}}],["geomfromgeos",{"2":{"145":1}}],["geomtype",{"2":{"129":4}}],["geoms",{"2":{"6":1,"124":1,"129":26}}],["geometies",{"2":{"3":1,"6":1,"99":1,"100":1}}],["geometrie",{"2":{"86":1}}],["geometries",{"0":{"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1},"2":{"1":5,"3":8,"4":14,"6":60,"17":2,"19":4,"26":3,"28":1,"30":3,"35":1,"36":3,"39":4,"45":1,"48":2,"51":1,"52":5,"54":5,"55":4,"56":5,"59":1,"60":4,"62":1,"63":7,"66":1,"68":1,"69":1,"80":2,"83":2,"91":1,"93":1,"94":1,"96":2,"97":3,"99":2,"100":2,"110":2,"112":1,"122":1,"124":4,"126":1,"128":2,"129":12,"140":1,"141":2,"143":3,"144":1,"145":4,"146":1,"147":1,"150":1,"151":1,"152":1,"155":1,"156":1,"157":5,"158":1,"160":1}}],["geometrical",{"2":{"157":1}}],["geometrically",{"2":{"22":1}}],["geometric",{"2":{"17":2,"44":1}}],["geometryof",{"2":{"129":1}}],["geometryopsprojext",{"2":{"141":1,"142":1,"145":1,"146":1}}],["geometryops",{"0":{"0":1,"33":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"0":114,"1":6,"3":18,"4":9,"5":3,"6":108,"7":2,"11":1,"13":1,"14":1,"15":1,"17":1,"22":3,"25":2,"33":1,"35":1,"38":1,"41":5,"44":1,"47":1,"50":1,"51":1,"52":1,"54":1,"56":1,"59":1,"62":1,"63":1,"65":1,"66":2,"68":1,"69":2,"78":1,"79":2,"80":2,"82":1,"83":2,"93":1,"94":1,"96":1,"97":1,"99":1,"100":2,"109":1,"110":2,"120":3,"121":1,"124":4,"129":1,"131":1,"134":1,"135":4,"137":1,"142":1,"144":1,"145":2,"148":1,"149":2,"154":1,"156":1,"157":1,"158":2,"159":2}}],["geometrybasics",{"2":{"33":3,"41":2,"42":10,"59":1,"69":1,"100":1,"110":1,"129":1}}],["geometrycolumns",{"2":{"129":3}}],["geometrycollections",{"2":{"157":1}}],["geometrycollection",{"2":{"31":1,"159":1}}],["geometrycollectiontrait",{"2":{"31":1,"75":1,"76":1,"89":1,"90":1,"106":1,"107":1,"116":1,"117":1}}],["geometrycorrections",{"2":{"134":1}}],["geometrycorrection",{"2":{"0":1,"6":11,"132":2,"133":2,"134":13,"135":11,"138":4}}],["geometry",{"0":{"2":1,"54":1,"75":2,"76":2,"89":2,"90":2,"106":2,"107":2,"116":2,"117":2,"133":1,"141":1,"147":1},"1":{"3":1,"4":1,"134":1,"135":1,"142":1,"148":1,"149":1},"2":{"1":10,"3":23,"4":12,"6":70,"9":1,"11":2,"19":1,"22":1,"26":4,"28":1,"31":3,"33":1,"36":7,"39":4,"45":3,"47":1,"48":4,"51":4,"55":3,"59":4,"60":6,"63":8,"65":5,"66":2,"68":4,"69":5,"70":4,"71":1,"75":3,"76":4,"78":4,"79":4,"80":3,"82":2,"83":5,"84":4,"85":2,"86":1,"89":3,"90":4,"91":2,"93":2,"97":3,"99":2,"100":3,"101":4,"102":2,"106":3,"107":4,"109":4,"110":5,"111":4,"116":3,"117":4,"119":1,"122":3,"124":2,"127":2,"129":42,"131":1,"132":1,"133":2,"134":23,"135":6,"139":1,"140":1,"141":6,"143":3,"144":1,"145":5,"146":8,"149":6,"156":6,"157":1,"158":7,"159":4,"160":2}}],["geom2",{"2":{"3":8,"4":1,"6":9,"60":6,"63":1,"80":6,"83":1,"94":3,"97":6,"100":1,"110":2}}],["geom1",{"2":{"3":8,"4":1,"6":9,"60":6,"63":1,"80":4,"83":1,"94":3,"97":6,"100":1,"110":2}}],["geom",{"2":{"1":7,"4":21,"6":48,"26":3,"33":12,"36":25,"39":17,"45":28,"46":14,"48":6,"51":15,"52":8,"53":2,"54":12,"55":10,"56":9,"57":9,"60":28,"63":45,"69":4,"80":1,"83":4,"91":2,"97":1,"100":4,"110":4,"120":3,"122":2,"124":3,"129":94,"138":11,"139":4,"146":13,"149":36,"153":3,"154":7,"155":4,"156":13,"159":6}}],["o",{"2":{"129":24}}],["odd",{"2":{"91":1}}],["old",{"2":{"46":8,"129":3}}],["occupied",{"2":{"38":1}}],["ourselves",{"2":{"145":1}}],["our",{"2":{"32":1,"145":1,"158":1}}],["out=3",{"2":{"91":1}}],["out=4",{"2":{"54":1}}],["out`",{"2":{"54":1,"91":1}}],["out",{"2":{"6":2,"22":1,"46":9,"48":23,"55":3,"57":4,"59":5,"69":4,"80":1,"83":3,"91":98,"94":1,"97":1,"100":4,"110":4,"120":1,"129":1,"146":1}}],["outside",{"2":{"3":2,"4":1,"6":3,"46":4,"48":1,"53":2,"55":2,"57":3,"59":2,"60":1,"68":1,"79":1,"82":1,"91":12,"97":3,"115":1}}],["outputs",{"2":{"46":1}}],["output",{"2":{"3":8,"4":1,"6":17,"26":1,"31":1,"51":2,"52":1,"54":1,"56":1,"57":2,"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"120":2,"149":1,"153":1,"156":1}}],["outermost",{"2":{"129":1}}],["outer",{"2":{"1":1,"6":1,"121":3,"127":1,"129":2,"157":1,"158":1}}],["own",{"2":{"22":1,"57":1,"122":2}}],["omit",{"2":{"6":1,"145":1}}],["obtained",{"2":{"31":1}}],["obtain",{"2":{"22":1,"129":1}}],["observable",{"2":{"14":2}}],["obs",{"2":{"14":10}}],["obviously",{"2":{"4":1,"6":1,"140":1}}],["objects",{"2":{"1":3,"4":1,"6":16,"124":3,"127":5,"129":7,"140":1,"143":1,"149":2,"155":1}}],["object",{"2":{"1":4,"4":1,"5":1,"6":8,"28":1,"42":1,"59":1,"91":4,"124":1,"127":5,"129":3,"140":1,"141":3,"145":1,"149":1,"155":1}}],["obj",{"2":{"1":4,"4":1,"6":17,"124":3,"129":10,"139":2,"140":1,"145":3,"149":3,"154":1,"155":1}}],["others",{"2":{"22":1,"138":1}}],["otherwise",{"2":{"4":2,"6":3,"46":1,"53":1,"60":2,"139":1,"142":1,"145":1,"156":1}}],["other",{"0":{"4":1,"6":1},"2":{"3":4,"6":10,"22":2,"36":1,"46":3,"52":1,"54":1,"56":2,"57":3,"60":2,"63":2,"65":1,"71":1,"91":8,"93":1,"96":1,"97":4,"99":2,"100":2,"103":1,"112":1,"124":1,"126":1,"127":1,"129":1,"135":2,"136":1,"138":2,"149":2,"151":1,"157":1,"160":1}}],["ogc",{"0":{"3":1}}],["over=3",{"2":{"54":1}}],["over`",{"2":{"54":1}}],["overflow",{"2":{"51":1}}],["overhead",{"2":{"30":1,"129":2}}],["override",{"2":{"6":1,"42":1}}],["overlapping",{"2":{"46":10,"55":2,"57":6}}],["overlap",{"2":{"3":4,"6":4,"9":1,"46":2,"55":2,"57":2,"69":1,"78":1,"91":2,"96":5,"97":6,"110":1,"136":1}}],["overlaps",{"0":{"95":1,"96":1},"1":{"96":1,"97":1},"2":{"0":10,"3":5,"6":13,"33":1,"95":1,"96":3,"97":30,"157":1}}],["over",{"2":{"1":1,"6":3,"38":2,"39":1,"45":3,"46":5,"48":1,"54":1,"55":5,"57":1,"69":1,"80":1,"83":1,"91":12,"97":2,"100":1,"110":1,"129":22}}],["ops",{"2":{"129":1}}],["optimise",{"2":{"80":1}}],["options",{"2":{"14":1,"46":1}}],["optional",{"2":{"4":5,"6":6,"36":1,"39":2,"48":1,"60":2}}],["open",{"2":{"55":1,"131":1}}],["operates",{"2":{"129":1,"130":1,"136":1}}],["operate",{"2":{"19":1,"26":1,"129":1}}],["operations",{"0":{"31":1},"2":{"31":1,"55":1,"57":1,"122":1}}],["operation",{"2":{"6":2,"46":1,"122":1,"135":2,"138":2}}],["opposite",{"2":{"3":5,"6":5,"46":1,"53":1,"55":1,"57":1,"66":2,"69":1,"79":2,"94":2,"110":1}}],["op",{"2":{"1":3,"6":3,"27":2,"45":1,"129":35}}],["on=2",{"2":{"91":1}}],["on`",{"2":{"91":1}}],["once",{"2":{"80":1,"97":1}}],["onto",{"2":{"60":1}}],["ongoing",{"0":{"23":1}}],["ones",{"2":{"137":1}}],["oneunit",{"2":{"42":1}}],["one",{"2":{"1":1,"3":9,"6":14,"22":1,"31":1,"36":4,"39":2,"41":1,"42":1,"45":1,"46":4,"48":3,"52":1,"54":1,"55":5,"56":2,"57":2,"59":2,"68":1,"75":1,"80":1,"82":1,"91":18,"94":2,"96":1,"97":16,"99":2,"100":2,"103":3,"104":2,"105":2,"106":1,"107":1,"109":1,"110":1,"116":1,"120":1,"129":1,"137":1,"141":1,"145":1,"153":1,"154":1,"157":1}}],["on",{"2":{"1":2,"4":3,"6":11,"9":1,"17":3,"19":2,"26":1,"28":1,"31":2,"36":5,"39":3,"41":1,"42":2,"45":3,"46":26,"48":8,"51":1,"52":1,"53":5,"54":1,"55":5,"56":1,"57":2,"59":1,"60":3,"63":2,"68":1,"69":7,"71":2,"72":3,"73":3,"74":1,"80":4,"83":6,"85":4,"86":1,"87":1,"91":121,"97":9,"100":7,"102":2,"110":7,"112":2,"113":1,"114":1,"121":1,"122":1,"124":1,"126":2,"129":15,"130":1,"132":1,"135":1,"136":1,"143":1,"145":1,"151":1,"157":4,"158":1,"159":2,"160":2}}],["only",{"2":{"0":1,"5":1,"6":8,"31":1,"39":2,"41":2,"42":1,"45":2,"46":2,"48":3,"51":1,"52":1,"54":1,"55":1,"56":1,"60":2,"63":3,"96":3,"97":1,"99":1,"129":2,"137":1,"143":1,"144":1,"146":2,"159":1,"160":1}}],["offer",{"2":{"145":1}}],["offers",{"2":{"22":1}}],["offset",{"2":{"36":8,"63":1}}],["off",{"2":{"4":1,"6":1,"46":2,"63":1,"91":6,"121":1,"129":1}}],["of",{"0":{"22":1},"2":{"1":7,"3":29,"4":66,"5":5,"6":185,"7":2,"9":4,"17":1,"19":3,"22":7,"25":3,"26":5,"27":1,"28":2,"30":1,"31":2,"32":2,"35":1,"36":38,"38":5,"39":28,"40":9,"41":1,"42":13,"44":3,"45":12,"46":65,"47":5,"48":31,"51":5,"52":12,"53":10,"54":10,"55":23,"56":9,"57":20,"59":6,"60":18,"62":2,"63":19,"65":4,"66":5,"68":6,"69":18,"71":1,"72":5,"73":5,"74":1,"75":2,"76":1,"79":5,"80":1,"82":3,"83":14,"85":1,"86":1,"87":1,"89":2,"90":1,"91":87,"93":1,"94":4,"96":1,"97":12,"99":2,"100":15,"102":3,"103":7,"104":5,"105":1,"106":2,"107":1,"109":4,"110":18,"112":3,"113":6,"114":6,"115":4,"116":1,"117":1,"119":2,"120":3,"121":5,"122":3,"124":1,"126":1,"127":5,"128":2,"129":26,"130":1,"131":1,"135":2,"136":4,"138":4,"139":3,"141":1,"143":2,"144":2,"145":5,"146":2,"149":8,"151":4,"152":2,"153":1,"155":1,"156":2,"157":3,"158":4,"159":2}}],["org",{"2":{"52":1,"54":1,"56":1,"91":2,"151":1}}],["organise",{"2":{"10":1}}],["orange",{"2":{"50":1,"59":1,"62":2,"65":2,"82":2,"96":2,"109":2}}],["oroginal",{"2":{"129":2}}],["oro",{"2":{"11":2}}],["originate",{"2":{"57":1}}],["originals",{"2":{"30":1}}],["original",{"2":{"6":4,"26":1,"30":1,"46":2,"51":5,"52":1,"54":1,"57":4,"127":1,"129":1,"134":1,"139":2,"146":1,"148":4,"149":1}}],["orignal",{"2":{"46":1}}],["orient",{"0":{"13":1},"1":{"14":1,"15":1},"2":{"13":7,"14":12,"46":10,"55":8}}],["orientation",{"0":{"118":1},"1":{"119":1,"120":1},"2":{"6":2,"10":1,"33":1,"39":1,"46":7,"48":2,"52":1,"54":2,"55":1,"56":1,"91":16,"119":1,"149":1}}],["ordered",{"2":{"38":1}}],["order",{"2":{"1":4,"3":1,"4":2,"6":6,"36":1,"38":1,"39":2,"42":1,"46":4,"55":1,"57":1,"60":2,"63":3,"66":1,"69":1,"79":1,"94":1,"129":2,"141":2,"149":1,"157":1}}],["or",{"0":{"32":1},"2":{"1":10,"3":3,"4":10,"6":52,"17":1,"19":2,"22":3,"26":1,"28":1,"30":1,"31":1,"33":1,"36":4,"39":1,"42":1,"44":2,"45":4,"46":19,"47":1,"51":1,"52":1,"53":3,"54":2,"55":4,"56":1,"57":2,"59":2,"60":4,"63":3,"65":1,"69":1,"71":2,"72":1,"73":1,"74":1,"75":1,"76":1,"82":2,"85":2,"86":3,"87":2,"88":1,"89":1,"90":1,"91":26,"93":2,"94":1,"96":1,"97":2,"99":1,"100":1,"106":1,"107":1,"110":1,"112":2,"116":1,"117":1,"119":2,"120":5,"121":1,"122":3,"124":1,"126":4,"128":1,"129":8,"130":1,"132":1,"134":5,"135":2,"141":2,"142":1,"143":2,"145":2,"146":2,"149":3,"151":2,"153":2,"155":1,"156":2,"157":1,"159":2}}],["est",{"2":{"159":1}}],["especially",{"2":{"26":1,"31":1}}],["e2",{"2":{"91":4}}],["e1",{"2":{"91":8}}],["e147c6f8b89dc51c8f7d284ffa0749282b17fb28",{"2":{"6":1}}],["euclid",{"2":{"48":2,"60":11,"91":1,"150":1}}],["euclidean",{"2":{"4":1,"6":1,"42":13,"60":6,"146":1}}],["eps",{"2":{"36":2}}],["eponymous",{"2":{"6":1,"145":1}}],["everything",{"2":{"149":1}}],["every",{"2":{"63":2,"127":1}}],["evenly",{"2":{"158":1}}],["even",{"2":{"22":2,"39":2,"48":1,"55":1,"60":1,"63":1,"122":1,"131":1,"136":1}}],["evaluated",{"2":{"157":1}}],["eval",{"2":{"33":2,"129":2}}],["effects",{"2":{"129":3}}],["efforts",{"2":{"24":1}}],["efficiently",{"2":{"28":1}}],["efficient",{"2":{"6":1,"42":1,"52":2,"54":2,"56":2,"121":1,"132":1}}],["e",{"2":{"9":1,"30":1,"127":1,"129":2}}],["elements",{"2":{"75":1,"76":1,"89":1,"90":1,"97":1,"106":1,"107":1,"116":1,"117":1}}],["element",{"2":{"6":5,"35":1,"46":1,"51":2,"52":1,"54":1,"56":3,"91":2,"144":1}}],["elsewhere",{"2":{"51":1}}],["elseif",{"2":{"46":5,"48":7,"52":1,"54":1,"55":4,"56":2,"57":1,"80":3,"91":9,"120":1,"121":1,"138":1,"151":2,"153":2}}],["else",{"2":{"3":6,"6":6,"23":1,"36":1,"42":2,"46":13,"48":9,"51":1,"53":1,"55":3,"56":1,"57":9,"80":2,"91":15,"97":8,"121":2,"129":8,"132":1,"139":1,"142":1,"149":2,"151":4,"153":2,"154":1,"155":1}}],["etc",{"2":{"6":1,"28":2,"38":1,"126":1}}],["enable",{"2":{"160":1}}],["enabled",{"2":{"157":1}}],["enabling",{"0":{"160":1}}],["enclosed",{"2":{"91":1}}],["encode",{"2":{"32":1}}],["encompasses",{"2":{"26":1,"91":1}}],["encounters",{"2":{"26":1}}],["en",{"2":{"91":1,"151":1}}],["entirely",{"2":{"91":1}}],["entire",{"2":{"48":1,"91":4}}],["ent",{"2":{"46":19,"51":2}}],["enter",{"2":{"46":3}}],["entry",{"2":{"22":1,"46":11,"53":3,"55":4,"57":3,"121":1}}],["ensuring",{"2":{"6":1,"143":1,"146":1}}],["ensure",{"2":{"6":3,"42":1,"52":1,"54":1,"56":1,"130":2,"133":1}}],["ensures",{"2":{"6":3,"132":1,"135":3,"138":2}}],["enumerate",{"2":{"13":2,"36":1,"46":8,"48":1,"51":1,"53":1,"57":2,"91":1,"138":2,"153":1}}],["enum",{"2":{"6":2,"46":3,"54":3,"91":3}}],["endpt",{"2":{"151":3}}],["endpoints",{"2":{"46":3,"48":1,"53":1,"55":4,"57":1,"60":2,"91":11,"97":2,"99":1}}],["endpoint=3",{"2":{"46":1}}],["endpointtype",{"2":{"46":2}}],["endpoint",{"2":{"3":1,"6":2,"46":28,"54":1,"60":2,"68":1,"91":3,"97":2,"149":4,"151":3}}],["ending",{"2":{"46":1,"48":1}}],["end",{"2":{"1":1,"6":1,"9":1,"13":4,"14":3,"33":4,"36":18,"39":8,"42":35,"45":10,"46":117,"48":43,"51":9,"52":9,"53":11,"54":6,"55":28,"56":7,"57":24,"60":19,"63":20,"75":2,"76":2,"80":20,"89":2,"90":2,"91":99,"94":4,"97":17,"102":1,"106":2,"107":2,"112":1,"116":2,"117":2,"120":9,"121":26,"122":1,"126":4,"129":53,"130":1,"132":5,"134":3,"138":18,"139":4,"141":1,"142":2,"145":8,"146":8,"149":7,"150":6,"151":30,"152":3,"153":27,"154":4,"155":4,"156":19}}],["empty",{"2":{"4":2,"6":6,"36":2,"46":2,"52":1,"54":1,"55":3,"56":1}}],["embedded",{"2":{"128":3}}],["embedding",{"0":{"128":1,"140":1}}],["embed",{"2":{"0":2,"4":1,"6":1,"128":1,"140":2}}],["errors",{"2":{"33":1,"146":1}}],["error",{"0":{"142":1},"2":{"4":1,"6":2,"7":1,"22":2,"26":1,"33":4,"42":1,"63":2,"127":1,"134":2,"142":3,"145":5,"153":4,"156":1}}],["edge",{"2":{"3":1,"4":3,"6":4,"28":1,"33":1,"39":1,"44":1,"46":23,"48":13,"52":1,"54":1,"55":9,"56":1,"60":4,"63":1,"71":2,"86":2,"87":1,"91":7,"94":12,"97":9,"112":2,"113":1,"114":1,"156":2}}],["edges",{"2":{"0":1,"4":2,"6":9,"46":12,"48":8,"53":3,"55":18,"57":3,"60":3,"62":2,"63":1,"65":1,"71":1,"72":3,"73":7,"74":3,"82":1,"85":3,"88":1,"91":3,"94":9,"97":11,"109":1,"112":1,"156":29}}],["easier",{"2":{"126":1}}],["easily",{"2":{"122":1}}],["east",{"2":{"48":9}}],["easy",{"2":{"1":1,"6":1,"136":1,"154":1}}],["earth",{"2":{"6":2,"17":1,"145":2,"149":2,"157":1}}],["eachindex",{"2":{"36":1,"55":2,"120":1,"129":2,"150":1,"153":1}}],["each",{"2":{"3":2,"4":3,"6":5,"9":1,"26":2,"28":1,"36":4,"39":2,"40":4,"42":1,"46":5,"48":1,"55":2,"60":1,"63":2,"69":1,"83":1,"91":6,"96":1,"97":3,"100":1,"110":1,"120":1,"129":1,"136":2,"149":1,"158":2,"159":2,"160":1}}],["equatorial",{"2":{"6":6,"145":4}}],["equality",{"2":{"157":1}}],["equal",{"2":{"3":2,"4":16,"6":19,"36":6,"59":1,"60":4,"62":3,"63":22,"71":1,"85":1,"91":15,"96":1,"97":2,"102":2,"112":1,"131":1}}],["equals",{"0":{"61":1,"62":1},"1":{"62":1,"63":1},"2":{"0":17,"4":3,"6":19,"33":1,"36":2,"46":1,"51":2,"60":1,"61":1,"62":2,"63":50,"71":1,"85":1,"91":10,"97":2,"102":3,"112":1,"157":1}}],["equivalent",{"2":{"3":1,"4":4,"6":6,"39":1,"46":1,"55":1,"57":1,"63":5,"69":1,"91":1}}],["exc",{"2":{"142":2,"145":2}}],["excluding",{"2":{"88":1,"91":1,"112":2}}],["exclude",{"2":{"80":9}}],["excluded",{"2":{"55":1}}],["exclusively",{"2":{"104":1}}],["exclusive",{"2":{"48":1}}],["excellent",{"2":{"31":1}}],["except",{"2":{"26":1,"27":1,"55":1}}],["excess",{"2":{"5":1,"6":1,"42":1}}],["exits",{"2":{"46":1}}],["exit",{"2":{"46":31,"51":2,"53":3,"55":3,"57":2}}],["existing",{"2":{"46":2,"56":1}}],["exists",{"2":{"46":1,"48":1,"55":1}}],["exist",{"2":{"22":1,"55":1}}],["exp10",{"2":{"145":1,"149":2}}],["explicity",{"2":{"63":1}}],["explicitly",{"2":{"6":1,"26":1,"32":1,"36":2,"39":1,"42":1,"60":2,"142":1,"145":1,"146":1}}],["expressed",{"2":{"40":2}}],["express",{"2":{"40":1}}],["experimental",{"2":{"33":2}}],["expect",{"2":{"1":1,"93":1,"141":1}}],["export",{"2":{"40":1,"143":1}}],["exposes",{"2":{"25":1}}],["exponential",{"2":{"9":1}}],["ext2",{"2":{"91":3}}],["ext1",{"2":{"91":3}}],["ext",{"2":{"41":15,"46":10,"48":2,"51":3,"52":8,"54":8,"56":8,"57":14,"80":7,"91":3}}],["extrema",{"2":{"121":1,"156":1}}],["extreem",{"2":{"36":10}}],["extract",{"2":{"129":3,"149":1}}],["extra",{"2":{"6":3,"46":1,"56":1,"143":1,"145":2,"146":1}}],["external",{"2":{"39":1,"91":2}}],["exteriors",{"2":{"9":1,"54":2,"56":2}}],["exterior",{"2":{"3":4,"4":2,"6":10,"36":1,"38":1,"39":1,"41":1,"42":36,"45":2,"46":4,"52":2,"56":3,"57":14,"60":1,"63":2,"65":1,"66":1,"69":3,"79":1,"83":2,"91":8,"100":2,"109":1,"110":3,"113":3,"114":3,"120":6,"132":3,"133":1,"135":1,"140":1}}],["extending",{"2":{"97":1}}],["extended",{"2":{"60":1}}],["extension",{"2":{"1":1,"6":1,"42":1,"68":1,"141":3,"142":2,"145":1,"146":1}}],["extent=true",{"2":{"140":1}}],["extent=nothing",{"2":{"129":1}}],["extent=",{"2":{"129":3}}],["extent=false",{"2":{"129":1,"149":1}}],["extent`",{"2":{"126":1,"140":1}}],["extents",{"2":{"4":3,"6":4,"33":5,"48":1,"55":4,"91":1,"94":1,"129":2,"140":2,"156":2}}],["extent",{"0":{"140":1},"2":{"0":2,"1":4,"4":3,"6":11,"32":1,"33":2,"41":1,"47":1,"48":1,"55":2,"91":5,"94":2,"126":4,"128":4,"129":28,"140":2,"149":1,"156":7}}],["exactly",{"2":{"22":1,"153":1}}],["exactpredicates",{"2":{"7":1,"13":2,"14":2,"24":1}}],["exact",{"2":{"3":5,"6":5,"7":2,"12":1,"13":1,"22":1,"66":2,"69":1,"79":2,"94":2,"110":1,"121":1,"137":1}}],["examples",{"0":{"144":1,"148":1},"2":{"3":8,"4":1,"6":11,"63":1,"66":1,"69":1,"79":1,"80":1,"83":1,"97":1,"100":1,"110":1,"120":2,"156":1}}],["example",{"0":{"41":1,"131":1,"137":1,"158":1,"159":1},"2":{"1":3,"3":2,"6":11,"11":1,"22":2,"28":1,"31":2,"35":1,"38":1,"41":1,"44":1,"45":1,"47":1,"50":1,"51":1,"52":1,"54":1,"56":1,"59":1,"62":1,"63":1,"65":1,"68":1,"78":1,"80":1,"82":1,"91":1,"93":1,"94":1,"96":1,"99":1,"109":1,"120":1,"121":7,"122":1,"129":2,"131":1,"133":1,"136":1,"137":1,"139":1,"148":1,"149":2,"154":1,"158":1,"160":1}}],["either",{"2":{"1":2,"3":1,"6":3,"17":1,"30":1,"46":6,"52":1,"54":1,"56":1,"57":1,"59":1,"69":1,"91":5,"93":1,"99":1,"100":1,"110":1,"129":3,"134":1,"157":1}}],["lrs",{"2":{"149":2}}],["lnbd",{"2":{"121":4}}],["lp",{"2":{"91":2}}],["lstart",{"2":{"91":2}}],["ls",{"2":{"91":12}}],["ll",{"2":{"25":1,"41":1,"144":2,"149":1}}],["l",{"2":{"14":4,"42":6,"80":2,"91":32}}],["lgeos",{"2":{"149":1}}],["lg",{"2":{"13":1,"14":1,"15":2,"145":9,"149":17}}],["l305",{"2":{"6":1}}],["loudly",{"2":{"129":1}}],["log10",{"2":{"145":2,"149":4}}],["log",{"2":{"124":3,"125":1,"144":2}}],["location",{"2":{"46":1,"91":6}}],["local",{"2":{"36":3,"39":1,"46":4,"53":1,"57":1}}],["loose",{"2":{"130":1}}],["lookup",{"2":{"129":1}}],["looks",{"2":{"44":1}}],["look",{"2":{"38":2,"121":1,"131":1,"144":1}}],["loop",{"2":{"36":1,"42":2,"45":3,"46":8,"48":1,"55":1,"57":1,"91":5,"151":1}}],["lot",{"2":{"31":1,"36":1,"39":1,"45":1,"48":1,"60":1,"63":1,"97":1,"122":1,"144":1}}],["lowers",{"2":{"22":1}}],["lower",{"2":{"7":1,"158":1}}],["lon",{"2":{"6":2,"144":1,"145":2}}],["long",{"2":{"6":1,"145":1,"159":1}}],["longer",{"2":{"6":3,"143":1,"145":2,"146":1}}],["loading",{"2":{"142":1,"145":1}}],["load",{"2":{"129":2,"149":1}}],["loads",{"2":{"5":1,"6":1,"42":1}}],["loaded",{"2":{"1":1,"141":1,"142":2,"145":2}}],["laptop",{"2":{"159":1}}],["layers",{"2":{"127":1}}],["lazy",{"2":{"121":1}}],["lazily",{"2":{"6":1,"124":1,"129":1}}],["lack",{"2":{"22":1}}],["language",{"2":{"22":1}}],["label",{"2":{"14":4,"15":2,"59":1,"121":3,"144":2,"148":2,"149":2}}],["labels",{"2":{"13":2,"121":1}}],["later",{"2":{"21":1,"39":1}}],["lat",{"2":{"6":3,"144":1,"145":3}}],["larger",{"2":{"46":1,"56":1,"153":1}}],["large",{"2":{"6":8,"42":1,"149":2,"159":1}}],["lastindex",{"2":{"153":1}}],["last",{"2":{"4":3,"6":3,"9":1,"36":11,"39":2,"41":2,"46":8,"48":4,"55":1,"60":7,"63":5,"91":20,"102":1,"131":1,"138":2,"151":1}}],["lt",{"2":{"6":6,"55":2,"144":1}}],["len",{"2":{"151":7}}],["length",{"2":{"0":1,"5":1,"6":5,"9":1,"26":1,"42":32,"43":1,"44":1,"45":22,"46":10,"48":1,"51":2,"52":2,"54":1,"55":2,"56":1,"57":1,"91":1,"121":2,"129":3,"138":2,"144":1,"150":1,"151":1,"152":1,"153":7}}],["legend",{"2":{"149":4}}],["lead",{"2":{"131":1}}],["leaving",{"2":{"131":1}}],["leaf",{"2":{"129":4}}],["least",{"2":{"3":4,"6":4,"46":1,"57":2,"91":14,"94":2,"97":4,"100":1,"103":3,"104":2,"105":2,"106":1,"107":1,"110":1,"116":1,"120":1}}],["le",{"2":{"91":10}}],["leftover",{"2":{"46":1}}],["left=1",{"2":{"46":1}}],["left",{"2":{"42":1,"46":3,"151":17,"153":5,"157":1}}],["lets",{"2":{"39":1}}],["let",{"2":{"38":1,"44":1,"91":1,"121":3,"144":1,"160":1}}],["levels",{"2":{"6":1,"121":1,"126":1,"127":1}}],["level",{"2":{"6":1,"7":1,"9":1,"19":1,"22":2,"26":2,"28":1,"127":1,"129":2,"130":1,"132":1,"134":4,"135":1,"136":1,"138":2}}],["less",{"2":{"3":1,"6":7,"36":1,"39":1,"42":1,"45":1,"48":1,"60":1,"63":1,"80":1,"97":1,"121":1,"149":1,"150":1}}],["l289",{"2":{"6":1}}],["l2",{"2":{"3":4,"4":4,"6":8,"62":4,"63":12,"65":8,"79":2,"82":5,"96":4,"99":3,"100":2,"109":8}}],["l1",{"2":{"3":6,"4":4,"6":10,"62":4,"63":12,"65":8,"68":4,"69":2,"78":4,"79":2,"82":5,"96":4,"99":3,"100":2,"109":8}}],["lies",{"2":{"46":3,"158":1}}],["limits",{"2":{"41":1}}],["limited",{"2":{"6":1,"143":1,"146":1}}],["literate",{"2":{"33":1,"36":1,"39":1,"42":1,"45":1,"46":1,"48":1,"51":1,"53":1,"55":1,"57":1,"60":1,"63":1,"66":1,"76":1,"79":1,"80":1,"90":1,"91":1,"94":1,"97":1,"107":1,"117":1,"120":1,"121":1,"129":1,"132":1,"135":1,"138":1,"139":1,"140":1,"142":1,"146":1,"153":1,"154":1,"155":1,"156":1}}],["library",{"2":{"22":2,"51":1}}],["libraries",{"2":{"22":3,"39":1,"136":1}}],["libgeos",{"2":{"13":1,"14":1,"15":1,"31":1,"39":1,"145":7,"149":4}}],["lift",{"2":{"14":2}}],["lin",{"2":{"145":5}}],["linrange",{"2":{"13":2,"14":5,"41":2,"59":1,"121":2,"145":1,"149":2}}],["linewidth",{"2":{"38":1}}],["linesegment",{"2":{"120":2,"146":1}}],["lines",{"0":{"72":1,"86":1,"103":1,"113":1},"2":{"3":1,"4":4,"6":5,"22":1,"46":3,"50":1,"55":6,"59":1,"62":4,"63":4,"65":3,"68":1,"69":1,"78":2,"80":1,"82":3,"91":2,"93":3,"96":4,"97":2,"99":4,"109":3,"110":1,"121":2,"147":1}}],["linestrings",{"2":{"4":2,"6":2,"9":1,"63":2,"119":1,"130":1}}],["linestringtrait",{"2":{"3":2,"4":4,"6":9,"11":3,"36":1,"45":4,"54":2,"60":2,"63":8,"71":1,"72":4,"73":1,"80":6,"85":1,"86":5,"97":4,"102":1,"103":4,"104":1,"112":1,"113":4,"114":1,"126":2,"127":1,"134":2,"135":1,"146":2}}],["linestring",{"2":{"3":5,"4":6,"6":15,"26":1,"28":1,"36":2,"45":2,"60":4,"62":2,"63":2,"65":2,"66":1,"71":1,"72":3,"79":2,"82":2,"83":1,"85":1,"86":4,"91":2,"96":2,"102":1,"103":3,"104":1,"109":2,"110":1,"112":1,"113":4,"114":1,"120":7,"129":5,"156":3}}],["linetrait",{"2":{"3":2,"4":4,"6":6,"36":1,"46":2,"51":2,"54":2,"60":2,"63":8,"71":1,"72":4,"73":1,"85":1,"86":5,"97":4,"102":1,"103":4,"104":1,"112":1,"113":4,"114":1}}],["line2",{"2":{"3":3,"6":5,"54":2,"80":5,"93":3,"94":2,"97":3,"120":5}}],["line1",{"2":{"3":4,"6":6,"54":2,"80":5,"93":3,"94":2,"97":5,"120":5}}],["linea",{"2":{"1":1,"6":1,"154":1}}],["linearmap",{"2":{"149":1}}],["linearalgebra",{"2":{"33":1}}],["linearr",{"2":{"1":1,"6":1,"154":1}}],["linearrings",{"2":{"9":1,"87":1,"130":1}}],["linearringtrait",{"2":{"4":4,"6":6,"11":3,"36":3,"39":2,"45":4,"46":4,"54":2,"60":2,"63":8,"71":1,"72":1,"73":4,"85":1,"86":2,"87":3,"102":1,"103":1,"104":4,"112":1,"113":1,"114":4,"126":2,"134":1,"146":2,"149":1}}],["linearring",{"2":{"1":10,"3":2,"4":1,"6":15,"36":2,"45":2,"46":1,"60":1,"71":1,"73":3,"85":1,"86":1,"87":2,"91":2,"97":4,"102":1,"103":1,"104":3,"112":1,"114":4,"120":1,"129":5,"130":1,"131":6,"132":1,"137":13,"149":1,"154":8,"158":2}}],["linear",{"2":{"1":1,"4":7,"6":11,"9":1,"22":1,"39":2,"42":1,"44":1,"45":3,"48":1,"55":1,"60":5,"63":8,"73":1,"91":2,"103":1,"104":2,"113":1,"119":1,"129":3,"132":3,"144":5,"145":3,"146":4}}],["linearsegments",{"2":{"0":1,"6":4,"143":1,"144":1,"145":3,"146":5}}],["line",{"0":{"91":1},"2":{"0":1,"3":13,"4":9,"6":48,"31":1,"35":2,"36":7,"44":3,"45":10,"46":13,"48":8,"50":6,"51":18,"54":8,"55":30,"57":6,"60":11,"63":5,"66":2,"68":2,"69":1,"71":2,"72":11,"73":8,"78":1,"80":11,"83":2,"85":1,"86":9,"87":4,"91":131,"93":2,"94":6,"96":3,"97":8,"99":2,"100":2,"102":1,"103":10,"104":3,"110":2,"112":2,"113":10,"114":7,"120":4,"146":1,"149":1,"150":1,"151":4,"152":1,"156":3}}],["lineorientation",{"2":{"0":1,"6":2,"54":2}}],["lists",{"2":{"28":1,"46":3,"94":1}}],["listed",{"2":{"6":1,"36":1,"149":1}}],["list",{"2":{"6":16,"9":1,"36":20,"46":212,"51":20,"52":14,"53":8,"54":13,"55":6,"56":13,"57":1,"121":4,"159":2}}],["likely",{"2":{"127":1}}],["like",{"2":{"1":2,"6":9,"19":1,"22":3,"25":1,"26":2,"27":1,"28":1,"31":1,"32":1,"39":1,"41":1,"42":1,"44":1,"48":1,"52":1,"54":1,"56":1,"59":1,"60":1,"63":1,"122":2,"126":2,"129":2,"134":2,"135":1,"143":1,"144":1}}],["io",{"2":{"142":5,"145":5}}],["immediately",{"2":{"121":1}}],["image",{"2":{"121":22}}],["impossible",{"2":{"22":1,"51":1,"96":1}}],["important",{"2":{"144":1}}],["import",{"2":{"1":3,"6":4,"13":2,"14":2,"15":1,"33":4,"35":1,"38":1,"44":1,"47":1,"51":1,"52":1,"54":1,"56":1,"59":1,"62":1,"63":1,"65":1,"66":1,"68":1,"69":1,"78":1,"79":1,"80":1,"82":1,"83":1,"93":1,"94":1,"96":1,"97":1,"99":1,"100":1,"109":1,"110":1,"120":3,"129":2,"142":1,"145":2,"148":2,"149":3,"154":2,"156":1}}],["implementations",{"2":{"69":1,"83":1,"100":1,"110":1,"147":1}}],["implementation",{"0":{"36":1,"39":1,"45":1,"48":1,"51":1,"60":1,"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"126":1,"132":1,"138":1,"146":1},"2":{"36":3,"39":3,"42":1,"45":3,"48":3,"56":1,"60":3,"63":3,"66":1,"69":2,"79":1,"83":2,"94":1,"97":3,"100":2,"110":2,"121":2,"141":1,"149":1}}],["implementing",{"2":{"6":1,"149":1}}],["implement",{"2":{"6":1,"25":1,"31":1,"36":1,"39":1,"42":1,"45":1,"48":1,"60":1,"63":1,"69":1,"83":1,"97":1,"100":1,"110":1,"122":1,"133":1,"134":3,"135":1}}],["implemented",{"2":{"1":1,"6":2,"39":1,"42":3,"51":2,"53":2,"55":2,"57":2,"60":2,"122":2,"134":2,"141":1}}],["improvement",{"2":{"22":1}}],["improvements",{"2":{"9":2,"10":1}}],["improve",{"2":{"4":1,"6":1,"140":1}}],["ipoints",{"2":{"91":4}}],["ip",{"2":{"63":2}}],["ipt",{"2":{"46":8}}],["ihole",{"2":{"63":2}}],["ih",{"2":{"57":20}}],["i2",{"2":{"48":2}}],["i1",{"2":{"48":2}}],["ii",{"2":{"46":8}}],["i+1",{"2":{"42":8,"151":2,"153":1}}],["ice",{"2":{"23":1}}],["i",{"2":{"9":1,"13":4,"21":1,"30":1,"36":14,"39":1,"42":16,"46":22,"48":4,"53":2,"55":3,"56":2,"57":4,"60":2,"63":8,"80":7,"91":28,"120":10,"121":8,"129":14,"146":2,"150":3,"151":12,"153":28,"156":2,"159":3}}],["identity",{"2":{"129":2,"140":1}}],["identical",{"2":{"129":1,"137":1}}],["ideas",{"2":{"21":1,"22":1}}],["idea",{"2":{"6":1,"17":1,"28":1,"42":1,"122":1}}],["idx",{"2":{"36":6,"46":138,"48":9,"51":23,"52":5,"54":5,"56":2,"138":34,"151":51}}],["id=",{"2":{"6":1}}],["i>",{"2":{"6":1}}],["i>method",{"2":{"6":1}}],["ignore",{"2":{"6":1,"121":1}}],["inject",{"2":{"142":1}}],["innerjoin",{"2":{"158":1,"159":1}}],["inner",{"2":{"129":3,"157":1}}],["inline",{"2":{"120":1,"126":2,"129":21}}],["inlcuding",{"2":{"55":1,"72":1,"73":1}}],["in=1",{"2":{"91":1}}],["in`",{"2":{"91":1}}],["inexact",{"2":{"55":2}}],["ind",{"2":{"159":2}}],["indeed",{"2":{"131":1}}],["index",{"2":{"42":8,"46":10,"91":1,"129":1,"151":1}}],["indicies",{"2":{"46":2}}],["indices",{"2":{"46":2,"129":4,"153":16}}],["indicate",{"2":{"129":1}}],["indicates",{"2":{"28":1}}],["indicating",{"2":{"22":1}}],["inplace",{"2":{"42":1}}],["inputs",{"2":{"6":1,"63":1,"66":1,"79":1,"94":1,"153":1}}],["input",{"2":{"6":12,"36":1,"51":1,"52":1,"54":1,"55":1,"56":1,"122":1,"145":3,"146":2,"150":1,"151":1,"152":1}}],["inbounds",{"2":{"42":16,"60":5,"91":1}}],["inspiration",{"2":{"51":1}}],["inspired",{"2":{"50":1,"51":2}}],["inside",{"2":{"36":3,"44":1,"46":4,"48":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":2,"59":3,"60":1,"71":1,"91":1,"109":1,"112":1}}],["insertion",{"2":{"46":1}}],["insert",{"2":{"36":1,"151":1}}],["instability",{"2":{"32":2}}],["instantiating",{"2":{"28":1}}],["instead",{"2":{"22":1,"26":1,"32":1}}],["investigate",{"2":{"121":1}}],["invalid",{"2":{"28":1,"53":2,"131":1,"136":1,"137":1}}],["invoke",{"2":{"28":1}}],["involved",{"2":{"122":1}}],["involve",{"2":{"28":1}}],["involving",{"2":{"6":3,"52":1,"54":1,"56":1}}],["invocation",{"2":{"26":1}}],["init=nothing",{"2":{"129":1}}],["init=typemax",{"2":{"60":2}}],["init=zero",{"2":{"39":1,"48":1}}],["initial",{"2":{"55":2,"145":1}}],["initialize",{"2":{"42":3,"45":2,"46":1,"55":1}}],["init",{"2":{"27":1,"33":1,"36":1,"45":2,"129":30,"145":4}}],["incorrect",{"2":{"130":1,"131":1}}],["increase",{"2":{"46":1,"91":1}}],["increasing",{"2":{"6":1,"149":1}}],["increment",{"2":{"42":5}}],["including",{"2":{"36":1,"46":2,"60":1,"71":1,"74":1,"91":2}}],["include",{"2":{"33":36,"36":1,"46":1,"60":2,"126":1,"149":2}}],["included",{"2":{"6":2,"57":2,"135":2,"138":2}}],["includes",{"2":{"4":2,"6":2,"57":1,"60":2,"63":1,"91":1}}],["incircle",{"0":{"16":1}}],["ing",{"2":{"1":1,"6":2,"42":1,"154":1}}],["intr",{"2":{"46":23,"48":9,"51":16,"55":9}}],["intr2",{"2":{"46":2,"55":5}}],["intr1",{"2":{"46":3,"55":10,"91":2}}],["intrs",{"2":{"46":10,"55":13}}],["introducing",{"2":{"32":1}}],["introduces",{"2":{"32":1}}],["introduction",{"0":{"17":1},"1":{"18":1,"19":1,"20":1}}],["int",{"2":{"46":6,"57":7,"80":7,"146":1,"149":1,"151":5,"152":1,"153":1}}],["integrating",{"2":{"39":1}}],["integrate",{"2":{"22":1,"39":1}}],["integrals",{"2":{"38":1}}],["integral",{"2":{"38":1}}],["intended",{"2":{"6":1,"134":2,"135":1}}],["intermediate",{"2":{"48":1}}],["inter2",{"2":{"48":15}}],["inter1",{"2":{"48":23}}],["interpreted",{"2":{"42":1}}],["interpolation",{"2":{"5":1,"6":1,"41":1,"42":2,"143":1}}],["interpolated",{"2":{"5":3,"6":3,"42":17,"143":1}}],["interpolate",{"2":{"0":2,"5":2,"6":4,"22":1,"40":1,"41":2,"42":25}}],["interest",{"2":{"42":1,"60":1}}],["internal",{"2":{"41":1}}],["internals",{"2":{"32":1}}],["inter",{"2":{"6":2,"46":18,"51":1,"52":1,"54":5,"55":3}}],["interface",{"0":{"134":1},"2":{"6":2,"22":1,"28":1,"129":1,"133":1,"134":4,"135":1,"149":1}}],["interacted",{"2":{"91":1}}],["interaction",{"0":{"91":1},"2":{"91":2}}],["interactions",{"2":{"46":1,"57":3,"91":15}}],["interactive",{"2":{"13":1,"14":1}}],["interacting",{"2":{"6":1,"54":1,"91":2}}],["interacts",{"2":{"3":1,"6":1,"91":3,"99":1,"100":1,"103":3,"104":1,"105":1}}],["interact",{"2":{"3":2,"6":2,"56":1,"57":1,"82":1,"91":5,"94":1,"99":1,"100":1,"102":1,"103":2,"104":2,"105":1}}],["interior",{"2":{"3":6,"6":7,"36":9,"38":1,"42":7,"45":5,"46":1,"57":18,"65":1,"66":1,"68":1,"69":3,"72":5,"73":1,"74":2,"78":2,"79":1,"80":1,"83":2,"85":2,"86":6,"87":3,"91":15,"99":1,"100":3,"103":1,"104":2,"105":2,"109":1,"110":3,"115":2,"120":2,"132":1,"135":1}}],["interiors",{"2":{"3":6,"6":7,"42":20,"65":1,"66":1,"68":1,"78":1,"79":1,"82":1,"83":1,"88":1,"91":5,"93":1,"94":1,"99":1,"100":1,"102":1,"103":2,"104":1,"109":1,"110":1,"113":3,"114":3}}],["intersectingpolygons",{"2":{"6":3}}],["intersecting",{"0":{"136":1},"1":{"137":1,"138":1},"2":{"6":4,"33":1,"46":2,"57":2,"135":4,"136":1,"138":4}}],["intersections",{"0":{"55":1},"2":{"46":2,"48":2,"54":2,"55":2,"57":1,"91":2}}],["intersection",{"0":{"54":1,"92":1},"1":{"93":1,"94":1},"2":{"0":2,"3":3,"6":17,"9":1,"15":4,"31":1,"33":1,"46":29,"48":6,"51":3,"52":4,"53":4,"54":15,"55":45,"56":2,"57":2,"80":2,"91":5,"93":1,"94":3,"97":2}}],["intersect",{"2":{"3":8,"6":11,"46":4,"48":3,"52":2,"54":1,"56":1,"57":5,"65":1,"66":2,"68":1,"69":1,"79":1,"83":1,"86":1,"88":1,"91":4,"93":2,"97":1,"109":1,"110":2,"113":3,"114":3,"137":1,"138":4}}],["intersects",{"0":{"93":1},"2":{"0":2,"3":3,"6":3,"33":1,"46":1,"55":1,"57":2,"80":2,"92":1,"93":4,"94":8,"97":1,"115":1,"138":2,"157":1}}],["into",{"2":{"5":1,"6":5,"22":1,"25":1,"36":1,"39":1,"42":1,"45":4,"46":2,"51":1,"52":1,"54":1,"91":1,"121":2,"124":1,"126":1,"129":6,"138":1,"149":1,"156":2,"157":1}}],["int64",{"2":{"1":6,"6":6,"131":6,"150":1,"151":1,"153":1,"154":6}}],["info",{"2":{"143":1}}],["information",{"2":{"6":1,"19":1,"42":1,"46":2,"47":1,"91":1}}],["infinity",{"2":{"91":1,"97":1}}],["inf",{"2":{"1":1,"9":1,"51":2,"150":1,"153":3}}],["in",{"0":{"31":1},"2":{"1":6,"3":3,"4":1,"5":4,"6":48,"7":1,"9":2,"13":6,"14":2,"17":1,"19":1,"20":1,"22":3,"24":2,"25":2,"26":4,"28":1,"31":3,"32":2,"33":2,"36":7,"38":1,"39":3,"40":2,"42":22,"44":2,"45":5,"46":66,"48":31,"51":6,"52":10,"53":3,"54":6,"55":5,"56":12,"57":28,"59":6,"60":6,"62":1,"63":17,"65":2,"66":1,"69":10,"72":1,"73":1,"74":1,"75":1,"76":1,"79":1,"80":7,"83":9,"85":1,"86":1,"87":1,"89":1,"90":1,"91":131,"93":2,"94":3,"96":1,"97":9,"99":1,"100":11,"104":1,"106":1,"107":1,"109":1,"110":10,"113":3,"114":3,"116":1,"117":1,"120":4,"121":4,"122":1,"124":3,"127":2,"128":1,"129":12,"133":1,"134":1,"135":2,"136":1,"138":7,"139":2,"140":1,"141":3,"142":1,"143":2,"144":2,"145":14,"146":7,"149":5,"150":2,"151":4,"152":1,"153":5,"154":2,"155":1,"156":8,"157":4,"158":3,"159":1,"160":1}}],["itererable",{"2":{"156":1}}],["iter",{"2":{"129":31}}],["iterating",{"2":{"46":1}}],["iteration",{"2":{"39":1}}],["iterate",{"2":{"42":2,"127":1,"129":5}}],["iterators",{"2":{"13":1,"42":1,"46":3,"48":3,"54":1,"57":2,"121":2,"129":11,"138":6,"146":1}}],["iterator",{"2":{"6":2,"46":4,"54":2,"124":2,"129":2}}],["iterabletype",{"2":{"129":10}}],["iterable",{"2":{"4":1,"6":3,"26":1,"39":1,"48":1,"124":1,"129":37}}],["iterables",{"2":{"1":2,"6":2,"30":1,"129":6}}],["ith",{"2":{"46":3,"57":7}}],["itself",{"2":{"48":1,"120":1,"127":1}}],["its",{"2":{"5":1,"6":10,"22":1,"26":1,"38":1,"42":1,"46":2,"48":4,"57":1,"72":1,"124":1,"129":1,"133":1,"149":1,"150":1,"151":1,"152":3,"157":1}}],["it",{"2":{"1":4,"4":1,"6":16,"9":1,"19":3,"20":1,"22":1,"26":11,"27":2,"28":1,"30":1,"35":1,"36":1,"38":2,"39":3,"41":1,"45":2,"46":2,"47":1,"48":2,"52":1,"53":1,"54":1,"56":1,"57":3,"60":3,"63":1,"68":2,"71":3,"85":3,"91":14,"96":1,"97":1,"102":2,"112":3,"119":1,"120":2,"121":1,"122":3,"124":3,"126":2,"127":3,"128":1,"129":15,"131":1,"132":1,"133":1,"135":1,"136":1,"141":5,"144":2,"145":1,"149":1,"159":2,"160":2}}],["iff",{"2":{"129":1}}],["if",{"2":{"1":6,"3":17,"4":19,"5":1,"6":68,"21":1,"26":1,"30":2,"35":1,"36":15,"38":1,"39":6,"42":5,"45":1,"46":81,"48":36,"51":8,"52":13,"53":11,"54":9,"55":30,"56":10,"57":22,"59":2,"60":8,"62":2,"63":35,"65":1,"66":1,"68":1,"69":2,"71":4,"72":3,"73":3,"74":2,"75":1,"76":1,"78":1,"79":1,"80":9,"82":1,"83":3,"85":5,"86":4,"87":2,"88":2,"89":1,"90":1,"91":130,"93":1,"94":3,"96":4,"97":14,"99":1,"100":2,"102":4,"103":3,"104":2,"105":2,"106":1,"107":1,"109":1,"110":2,"112":5,"113":3,"114":3,"115":1,"116":1,"117":1,"120":3,"121":15,"124":1,"126":1,"127":1,"129":22,"132":1,"134":1,"135":2,"136":1,"138":12,"139":1,"140":1,"141":3,"142":2,"145":6,"146":2,"149":1,"151":11,"153":12,"154":1,"155":1,"158":2,"159":1}}],["isolate",{"2":{"149":1}}],["isodd",{"2":{"51":1}}],["istable",{"2":{"129":2}}],["iseven",{"2":{"91":1}}],["isempty",{"2":{"39":1,"42":4,"48":1,"52":1,"53":1,"54":1,"121":1,"134":1,"151":1}}],["isparallel",{"2":{"91":1,"120":8}}],["is3d",{"2":{"63":1,"129":1,"139":1,"154":1,"155":1,"156":10}}],["isnothing",{"2":{"46":3,"51":1,"53":2,"55":2,"57":2,"63":1,"142":1,"145":1,"149":1,"150":1,"151":5,"152":1,"153":6}}],["isn",{"2":{"39":1,"46":2,"48":1,"51":1,"53":1,"55":2,"57":2,"60":3,"63":1,"68":1,"91":9,"97":1,"149":1}}],["isa",{"2":{"26":1,"42":9,"129":4,"156":1}}],["issues",{"2":{"17":1}}],["isconcave",{"0":{"120":1},"2":{"0":1,"6":2,"118":1,"120":3}}],["isclockwise",{"0":{"119":1},"2":{"0":1,"6":2,"48":1,"118":1,"120":5}}],["is",{"0":{"35":1,"38":2,"44":1,"47":1,"50":1,"59":2,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"127":1},"2":{"0":1,"1":11,"3":8,"4":43,"5":1,"6":102,"9":3,"11":1,"13":1,"14":1,"17":2,"22":6,"26":3,"27":1,"28":1,"30":3,"31":2,"35":1,"36":19,"38":7,"39":19,"40":2,"41":2,"42":15,"44":2,"45":5,"46":55,"47":3,"48":22,"50":1,"51":2,"52":4,"53":12,"54":4,"55":22,"56":7,"57":20,"59":8,"60":23,"63":13,"65":2,"66":3,"68":4,"69":4,"71":7,"72":3,"73":3,"74":1,"75":1,"76":1,"79":3,"80":3,"82":1,"83":5,"85":9,"86":4,"87":2,"88":1,"89":1,"90":1,"91":91,"94":4,"96":3,"97":10,"100":4,"102":2,"109":4,"110":5,"112":8,"113":3,"114":3,"115":1,"116":2,"117":1,"119":2,"120":8,"121":6,"122":2,"124":1,"126":2,"127":3,"128":1,"129":25,"130":7,"131":2,"132":1,"133":3,"134":2,"135":1,"136":4,"137":1,"138":2,"139":1,"141":7,"142":2,"143":3,"144":3,"145":9,"146":6,"148":1,"149":4,"150":1,"151":2,"152":1,"154":2,"157":2,"158":5,"159":2}}],["cpu",{"2":{"159":1}}],["cyan",{"2":{"142":1,"145":1}}],["cy",{"2":{"120":2}}],["cx",{"2":{"120":2}}],["cs",{"2":{"91":9}}],["cshape",{"2":{"44":3}}],["cw",{"2":{"48":2}}],["cb",{"2":{"41":1,"121":1}}],["cgrad",{"2":{"41":1}}],["cgal",{"2":{"41":1}}],["c",{"2":{"39":1,"44":1,"48":4,"51":5,"91":24,"145":1}}],["citations",{"0":{"24":1}}],["clear",{"2":{"47":1}}],["clearly",{"2":{"35":1,"38":1,"59":1}}],["classify",{"2":{"46":4}}],["clamp",{"2":{"36":1}}],["clima",{"2":{"23":1}}],["clipping",{"0":{"46":1,"52":1,"53":1,"55":1,"56":1,"57":1},"2":{"9":1,"24":1,"33":7,"46":7,"51":3,"52":1,"54":1,"56":1,"136":1}}],["closure",{"2":{"129":2}}],["closing",{"2":{"36":1}}],["close",{"2":{"36":5,"46":2,"48":1,"51":1,"60":9,"131":1,"132":4}}],["closest",{"2":{"4":3,"6":3,"59":1,"60":6}}],["closed2",{"2":{"63":2}}],["closed1",{"2":{"63":2}}],["closed",{"0":{"130":1},"1":{"131":1,"132":1},"2":{"4":4,"6":11,"9":1,"33":1,"36":6,"39":3,"45":3,"46":1,"48":1,"55":4,"57":3,"63":21,"71":2,"72":5,"73":5,"85":2,"86":5,"87":3,"91":52,"103":5,"104":1,"112":3,"113":5,"114":5,"120":1,"130":1,"131":1,"132":2,"133":1,"135":1}}],["closedring",{"2":{"0":1,"6":1,"130":1,"131":1,"132":4,"133":1,"134":1,"135":1}}],["clockwise",{"2":{"4":1,"6":3,"9":1,"38":1,"39":1,"48":7,"119":2,"120":2,"121":6}}],["chunks",{"2":{"129":8}}],["chunk",{"2":{"129":12}}],["changes",{"2":{"46":1}}],["changed",{"2":{"46":1}}],["change",{"2":{"32":1}}],["chain=2",{"2":{"46":1}}],["chain=1",{"2":{"46":1}}],["chain",{"2":{"46":63,"53":3,"55":4,"57":4}}],["chains",{"2":{"28":1,"46":1}}],["chairmarks",{"2":{"13":1,"145":1,"149":1}}],["chose",{"2":{"32":1,"121":1}}],["choose",{"2":{"22":2}}],["choice",{"2":{"22":1}}],["children",{"2":{"149":1}}],["child",{"2":{"6":2,"124":2,"129":14}}],["checkargs",{"2":{"150":1,"151":1,"152":1,"153":1}}],["checking",{"2":{"63":1,"151":1}}],["checks",{"0":{"80":1,"92":1},"1":{"93":1,"94":1},"2":{"62":1,"65":1,"68":1,"78":1,"82":1,"91":5,"93":1,"96":1,"97":1,"99":1,"109":1,"158":1}}],["check",{"2":{"4":1,"6":1,"7":1,"45":1,"46":2,"48":3,"51":1,"52":1,"55":1,"56":1,"63":8,"91":11,"124":3,"125":1,"137":1,"140":1,"144":2,"153":1}}],["checked",{"2":{"4":1,"6":1,"46":1,"91":1,"140":1}}],["ceil",{"2":{"146":1}}],["ce",{"2":{"91":11}}],["certain",{"2":{"19":1,"22":1,"25":1,"26":1}}],["central",{"2":{"46":1}}],["centroids",{"2":{"44":1,"45":1}}],["centroid",{"0":{"43":1,"44":1},"1":{"44":1,"45":1},"2":{"0":4,"4":2,"6":6,"33":1,"43":3,"44":4,"45":38,"122":1,"149":4}}],["cent",{"2":{"44":2}}],["centered",{"2":{"46":1}}],["center",{"2":{"6":1,"44":1,"121":1}}],["cell",{"2":{"6":2,"47":3,"48":28}}],["c2",{"2":{"6":3,"15":2,"60":3,"63":14,"91":6}}],["c1",{"2":{"6":3,"15":2,"60":4,"63":13,"91":6}}],["ctor",{"2":{"1":1,"6":1,"154":1}}],["ca96624a56bd078437bca8184e78163e5039ad19",{"2":{"149":1}}],["caculated",{"2":{"129":1}}],["cache",{"2":{"6":1,"42":1}}],["catagorize",{"2":{"51":1}}],["categorical",{"2":{"41":1}}],["came",{"2":{"51":1}}],["case",{"2":{"36":1,"40":2,"45":1,"46":1,"52":1,"57":1,"91":15,"129":1,"160":1}}],["cases",{"2":{"6":1,"42":1,"51":2,"91":3,"127":1,"129":5}}],["cause",{"2":{"26":1,"31":1,"151":1}}],["careful",{"2":{"42":1,"127":1}}],["care",{"2":{"25":1}}],["cartesianindex",{"2":{"6":1,"121":18}}],["cairomakie",{"2":{"13":1,"35":1,"38":1,"41":2,"44":1,"47":1,"50":1,"59":1,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"144":1,"145":1,"149":1,"158":1,"159":1}}],["california",{"2":{"159":1}}],["callable",{"2":{"134":1}}],["calling",{"2":{"46":2,"129":1}}],["calls",{"2":{"46":1,"55":1,"57":1,"60":1,"69":1,"83":1,"100":1,"110":1,"127":1,"129":1,"146":1}}],["call",{"2":{"26":1,"32":1,"39":1,"45":1,"129":4}}],["called",{"2":{"6":1,"45":3,"129":1,"132":1,"134":1,"135":1}}],["calcualted",{"2":{"129":1}}],["calculation",{"2":{"55":1}}],["calculations",{"2":{"6":1,"17":2,"55":2,"145":1}}],["calculating",{"2":{"4":1,"6":1,"26":1,"140":1}}],["calculated",{"2":{"6":1,"44":2,"48":1,"60":1,"129":2}}],["calculates",{"2":{"4":2,"6":6,"39":1,"42":2,"48":1,"55":2,"56":1,"60":2,"145":1,"152":1}}],["calculate",{"2":{"1":2,"5":1,"6":6,"11":1,"36":3,"42":3,"45":1,"48":1,"55":3,"91":1,"126":1,"129":3}}],["calc",{"2":{"1":2,"6":4,"32":1,"36":4,"126":2,"128":1,"129":15,"140":1,"149":2}}],["cant",{"2":{"63":1,"156":1}}],["cannot",{"2":{"3":3,"4":2,"6":5,"39":1,"63":1,"71":1,"74":1,"97":2,"100":1,"102":2,"104":1,"115":1}}],["can",{"2":{"1":1,"4":2,"6":16,"7":2,"9":1,"13":1,"14":1,"21":1,"22":5,"32":1,"33":1,"36":1,"39":1,"40":2,"41":1,"42":3,"45":1,"46":2,"48":1,"52":3,"54":3,"55":1,"56":3,"57":1,"62":1,"63":3,"65":1,"68":1,"80":1,"82":1,"91":22,"93":2,"96":2,"97":3,"99":1,"103":1,"104":1,"109":1,"112":1,"113":1,"114":1,"121":2,"122":1,"124":1,"128":1,"129":7,"131":2,"132":1,"135":1,"136":2,"137":1,"140":1,"142":1,"144":1,"145":2,"149":2,"157":3,"158":3}}],["critetia",{"2":{"151":1}}],["criteria",{"2":{"69":2,"83":2,"100":2,"110":2,"151":1}}],["creating",{"2":{"91":1}}],["creates",{"2":{"7":1,"46":3}}],["create",{"2":{"6":2,"13":2,"14":1,"22":1,"46":1,"51":1,"55":1,"129":1,"135":2,"136":3,"138":2,"158":1}}],["created",{"2":{"4":2,"6":2,"46":1,"60":3}}],["cropping",{"2":{"41":2}}],["cross=1",{"2":{"54":1}}],["cross`",{"2":{"54":1}}],["crossings",{"2":{"46":3,"91":1}}],["crossing",{"0":{"80":1},"2":{"6":2,"46":78,"52":1,"53":7,"54":3,"55":6,"56":1,"57":6,"69":1,"80":1,"91":1,"110":1}}],["cross",{"0":{"107":1},"2":{"6":1,"9":1,"36":3,"46":12,"51":14,"52":2,"53":1,"54":2,"55":13,"56":2,"57":1,"69":1,"80":2,"83":1,"91":15,"97":2,"100":1,"110":1,"120":3}}],["crosses",{"2":{"0":2,"3":2,"6":3,"33":1,"46":1,"51":1,"80":26,"91":2,"157":1}}],["crc",{"2":{"6":1,"42":1}}],["crs`",{"2":{"141":6}}],["crs=nothing",{"2":{"129":4,"140":1,"149":1}}],["crs=gi",{"2":{"129":7}}],["crs",{"2":{"1":16,"4":2,"6":10,"126":2,"128":3,"129":27,"140":1,"141":7,"149":1}}],["customize",{"2":{"129":2}}],["customized",{"2":{"22":1}}],["custom",{"0":{"160":1},"2":{"6":1,"42":1,"160":2}}],["curr^2",{"2":{"36":2}}],["curr",{"2":{"36":8,"46":104,"51":9,"57":3,"138":26}}],["current",{"2":{"36":1,"42":8,"46":3,"51":2,"53":1,"55":1,"57":6,"121":1,"138":3}}],["currently",{"2":{"5":1,"6":2,"31":1,"42":1,"46":1,"51":1,"53":2,"129":1}}],["curve",{"0":{"91":1},"2":{"3":1,"4":7,"6":18,"36":6,"39":7,"46":5,"48":3,"54":7,"59":1,"60":22,"63":6,"69":2,"71":4,"72":9,"73":9,"83":1,"85":4,"86":6,"87":3,"91":147,"97":1,"100":1,"103":6,"105":3,"110":1,"112":4,"113":6,"114":6}}],["curves",{"2":{"0":1,"3":1,"6":5,"39":3,"48":3,"59":1,"60":1,"63":13,"74":1,"91":1,"97":1,"115":1,"149":2}}],["cutpolygon",{"2":{"50":1}}],["cuts",{"2":{"50":1}}],["cutting",{"0":{"49":1},"1":{"50":1,"51":1},"2":{"46":1,"51":2}}],["cut",{"0":{"50":1},"2":{"0":1,"6":6,"33":1,"42":1,"49":1,"50":5,"51":22,"91":1}}],["copy",{"2":{"134":1,"153":1}}],["coors1",{"2":{"120":2}}],["coors2",{"2":{"120":3}}],["coord",{"2":{"146":6}}],["coords",{"2":{"51":9,"146":8}}],["coordiantes",{"2":{"47":1}}],["coordinatetransformations",{"2":{"1":2,"6":2,"149":1,"154":2}}],["coordinate",{"0":{"42":1,"139":1},"2":{"1":4,"5":5,"6":7,"17":1,"41":2,"42":10,"129":1,"141":4,"146":1}}],["coordinates",{"0":{"5":1,"40":1},"1":{"41":1,"42":1},"2":{"0":4,"1":1,"4":2,"5":7,"6":20,"39":2,"40":8,"42":25,"51":2,"52":1,"54":1,"56":1,"60":1,"63":2,"122":1,"139":2,"141":1,"144":1,"145":3}}],["co",{"2":{"91":2}}],["cov",{"2":{"48":16}}],["cover",{"2":{"71":1,"75":1}}],["covering",{"2":{"6":2,"78":1,"135":2,"138":2}}],["covered",{"0":{"73":1,"74":1,"114":1},"2":{"3":1,"6":1,"57":1,"68":1,"69":1,"73":2,"74":2,"75":1,"76":2,"78":1,"90":2,"91":3,"138":1}}],["coveredby",{"0":{"67":1,"68":1,"71":1,"72":1,"75":1,"76":1,"90":1},"1":{"68":1,"69":1},"2":{"0":2,"3":4,"6":4,"33":1,"46":1,"67":1,"68":3,"69":9,"70":6,"71":12,"72":12,"73":10,"74":4,"75":2,"76":2,"79":3,"157":1}}],["covers",{"0":{"77":1,"78":1},"1":{"78":1,"79":1},"2":{"0":2,"3":5,"6":5,"33":1,"77":1,"78":4,"79":5,"157":1}}],["coverages",{"2":{"6":1,"48":1}}],["coverage",{"0":{"47":1},"2":{"0":1,"6":2,"33":1,"47":3,"48":16}}],["corner",{"2":{"48":4}}],["corners",{"2":{"48":1}}],["correspondent",{"2":{"120":1}}],["correspond",{"2":{"46":1}}],["corresponding",{"2":{"36":3,"53":2}}],["correctly",{"2":{"144":1}}],["corrected",{"2":{"134":1}}],["correctness",{"2":{"130":1}}],["correcting",{"2":{"28":1,"134":1}}],["corrections",{"0":{"133":1,"135":1},"1":{"134":1,"135":1},"2":{"131":1,"134":6,"137":1}}],["correction",{"2":{"6":10,"33":4,"52":1,"53":2,"54":1,"55":2,"56":1,"57":2,"130":1,"132":2,"133":2,"134":8,"135":7,"136":1,"138":2}}],["correct",{"2":{"6":3,"22":1,"32":1,"36":1,"39":1,"45":1,"46":1,"48":1,"52":1,"54":1,"56":1,"60":1,"63":1,"69":1,"83":1,"97":1,"100":1,"110":1,"130":1,"131":2,"133":1}}],["core",{"2":{"24":1}}],["code",{"2":{"7":1,"10":1,"42":1,"69":1,"83":1,"91":1,"100":1,"110":1,"120":1,"126":1,"159":1}}],["coarse",{"2":{"6":1,"143":1,"146":1}}],["common",{"2":{"146":1}}],["commen",{"2":{"62":1}}],["commented",{"2":{"120":1}}],["comments",{"2":{"91":1}}],["comment",{"2":{"20":1}}],["combos",{"2":{"53":1,"55":1,"57":1}}],["combines",{"2":{"45":1}}],["combine",{"2":{"45":2,"46":5,"138":1}}],["combined",{"2":{"6":1,"46":4,"57":1,"135":1,"138":2}}],["combination",{"2":{"6":1,"46":1,"124":1,"129":1}}],["coming",{"2":{"48":1}}],["com",{"2":{"6":1,"55":1,"149":1}}],["compilation",{"2":{"126":1}}],["compiled",{"2":{"32":1}}],["compiler",{"2":{"32":1,"126":2,"129":2}}],["complex",{"2":{"122":1,"149":1,"157":1}}],["complexity",{"2":{"6":1,"122":1,"146":1}}],["completly",{"2":{"46":2,"57":1,"65":2,"78":1,"91":1}}],["complete",{"2":{"39":1}}],["completely",{"2":{"1":1,"3":4,"6":5,"66":1,"69":1,"79":1,"110":1,"129":1}}],["component",{"2":{"6":1,"39":3,"45":11,"48":8,"55":1,"124":1,"129":3}}],["components",{"2":{"6":2,"44":1,"45":2,"124":2,"129":24}}],["composed",{"2":{"4":4,"6":5,"63":5}}],["comprised",{"2":{"6":3,"52":1,"54":1,"56":1}}],["computational",{"2":{"6":1,"42":1}}],["computation",{"2":{"6":6,"42":1,"45":1,"52":1,"54":1,"56":1,"150":2,"151":2,"152":2}}],["computer",{"2":{"6":1,"42":1}}],["compute",{"2":{"4":1,"6":1,"39":1,"42":1,"146":1}}],["computed",{"2":{"4":4,"6":5,"36":1,"39":3,"42":3,"48":1}}],["compact",{"2":{"159":3}}],["comparing",{"2":{"57":1,"63":1}}],["comparisons",{"2":{"55":2,"157":1}}],["compared",{"2":{"63":1}}],["compare",{"2":{"3":1,"4":1,"6":2,"36":1,"57":1,"63":2,"97":1}}],["compatibility",{"2":{"39":1}}],["compatible",{"2":{"1":2,"17":1,"30":1,"36":1,"39":1,"42":2,"45":1,"48":1,"60":1,"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"127":1,"141":2}}],["course",{"2":{"128":1}}],["country",{"2":{"159":8}}],["countries",{"2":{"11":1,"149":1}}],["counted",{"2":{"55":2}}],["counters",{"2":{"42":8}}],["counter",{"2":{"6":1,"46":8,"91":1,"119":1,"120":1}}],["counterclockwise",{"2":{"4":1,"6":1,"9":1,"38":2,"39":1,"121":4}}],["count",{"2":{"46":16,"153":1}}],["couldn",{"2":{"9":1,"126":1}}],["could",{"2":{"4":1,"6":1,"39":3,"57":1,"60":1,"91":2,"141":1}}],["colname",{"2":{"129":3}}],["col",{"2":{"129":3}}],["collinear",{"2":{"46":4,"52":2,"54":2,"55":1,"56":2}}],["collect",{"2":{"11":3,"13":1,"35":1,"38":2,"42":1,"44":1,"47":2,"50":2,"59":1,"129":3,"144":4,"156":2}}],["collections",{"0":{"75":1,"76":1,"89":1,"90":1,"106":1,"107":1,"116":1,"117":1},"2":{"1":1,"6":9,"30":1,"128":1,"129":6,"149":2}}],["collection",{"2":{"1":1,"4":7,"6":13,"19":2,"26":2,"36":2,"39":3,"48":2,"60":2,"75":2,"76":2,"89":2,"90":2,"106":2,"107":2,"116":2,"117":2,"122":1,"129":3,"149":1,"155":1,"156":1}}],["column",{"2":{"30":1,"129":16,"157":2}}],["colored",{"2":{"158":1}}],["colors",{"2":{"158":2}}],["colorrange",{"2":{"41":2,"59":1}}],["colorbar",{"2":{"41":1,"59":1,"121":1}}],["colormap",{"2":{"14":1,"41":3,"59":1}}],["color",{"2":{"6":2,"38":1,"41":2,"42":1,"44":1,"50":3,"59":2,"62":4,"65":4,"68":1,"78":1,"82":4,"96":4,"109":4,"142":1,"145":1,"158":5}}],["colinear",{"2":{"3":1,"6":2,"54":1,"96":1,"97":2}}],["conditions",{"2":{"157":1}}],["conencting",{"2":{"151":1}}],["connected",{"2":{"91":5}}],["connect",{"2":{"48":11}}],["connecting",{"2":{"36":1}}],["connections",{"2":{"6":2,"135":2,"138":2}}],["convention",{"2":{"44":1}}],["convenience",{"2":{"42":1}}],["convex",{"2":{"36":3,"120":1}}],["conversely",{"2":{"46":1}}],["conversion",{"0":{"155":1},"2":{"30":1}}],["converted",{"2":{"30":1,"42":3}}],["convert",{"0":{"70":1,"84":1,"101":1,"111":1},"2":{"6":3,"42":6,"59":1,"121":4,"129":1,"145":1,"149":3,"155":1,"156":1}}],["converts",{"2":{"6":1,"156":1}}],["constprop",{"2":{"80":1}}],["constants",{"2":{"46":1}}],["const",{"2":{"33":4,"46":1,"69":3,"83":2,"100":3,"110":3,"126":4,"129":1,"149":4}}],["constraints",{"2":{"22":1}}],["constrained",{"2":{"6":3,"52":1,"54":1,"56":1}}],["constructors",{"2":{"6":2,"126":2}}],["constructed",{"2":{"1":1,"28":1,"141":1}}],["consistent",{"2":{"46":1,"122":1}}],["consistency",{"2":{"30":1}}],["considered",{"2":{"36":1,"42":1}}],["consider",{"2":{"22":1,"35":1,"38":1,"44":1,"47":1,"48":3,"50":1,"59":2,"62":1,"65":1,"68":1,"78":1,"82":1,"91":3,"93":1,"96":1,"99":1,"109":1}}],["concepts",{"0":{"18":1},"1":{"19":1,"20":1}}],["concieve",{"2":{"9":1}}],["concave",{"2":{"6":1,"36":2,"44":2,"120":2}}],["context",{"2":{"145":4}}],["contents",{"2":{"129":1,"130":1}}],["contour",{"2":{"121":11}}],["contours",{"2":{"0":1,"6":3,"121":11}}],["continue",{"2":{"39":1,"46":6,"48":1,"91":1,"134":1,"138":3,"153":1,"159":1}}],["controlled",{"2":{"32":1}}],["control",{"2":{"31":1}}],["contributors",{"2":{"22":1}}],["contributions",{"2":{"17":1}}],["containing",{"2":{"47":1,"158":1}}],["contain",{"2":{"3":1,"6":1,"57":1,"65":1,"97":1}}],["contained",{"2":{"3":1,"6":1,"9":1,"57":4,"66":1,"78":1,"96":1,"97":1,"129":1,"158":1}}],["contains",{"0":{"64":1,"65":1},"1":{"65":1,"66":1},"2":{"0":2,"3":4,"6":4,"33":1,"46":1,"57":1,"64":1,"65":5,"66":4,"127":1,"137":1,"157":1,"158":1}}],["vw",{"2":{"149":3}}],["v2",{"2":{"91":9}}],["v1",{"2":{"91":9}}],["v`",{"2":{"42":2}}],["vcat",{"2":{"36":1,"42":1,"129":1}}],["vararg",{"2":{"42":1}}],["vary",{"2":{"36":1}}],["variables",{"2":{"32":1,"42":8,"66":1,"79":1,"94":1}}],["variable",{"2":{"32":1,"53":2}}],["vals",{"2":{"151":9}}],["valign",{"2":{"149":1}}],["validated",{"2":{"53":2,"55":2,"57":2}}],["validate",{"2":{"9":1}}],["valid",{"2":{"1":1,"6":8,"45":1,"52":2,"54":2,"55":4,"56":2,"130":3,"131":1,"136":1,"137":1,"153":1,"154":1}}],["val",{"2":{"36":2,"46":4,"91":30,"94":2,"97":2}}],["values",{"2":{"1":1,"5":3,"6":7,"36":2,"41":3,"42":40,"45":2,"46":5,"48":5,"60":2,"91":4,"121":1,"126":1,"129":2,"151":2,"153":1}}],["value",{"2":{"0":1,"4":7,"5":2,"6":15,"14":1,"32":1,"36":1,"38":2,"39":4,"42":45,"46":3,"48":2,"59":1,"60":3,"121":2,"151":11,"157":1}}],["vs",{"0":{"15":1},"2":{"12":1,"22":1}}],["vᵢ",{"2":{"6":1}}],["v",{"2":{"5":2,"6":6,"14":4,"42":23,"60":8}}],["via",{"2":{"142":1,"145":1}}],["visvalingam",{"2":{"147":1}}],["visvalingamwhyatt",{"0":{"152":1},"2":{"0":1,"6":3,"149":4,"152":5}}],["visualized",{"2":{"131":1}}],["visualize",{"2":{"93":1}}],["visa",{"2":{"46":1}}],["view",{"2":{"46":2,"138":1,"151":3,"159":1}}],["viewport",{"2":{"14":1}}],["views",{"2":{"1":1,"46":1,"56":1,"141":1}}],["vect",{"2":{"129":2}}],["vectypes",{"2":{"42":5}}],["vector",{"2":{"1":12,"4":6,"5":1,"6":45,"19":1,"26":1,"31":1,"35":1,"36":10,"42":14,"46":7,"51":6,"52":4,"53":1,"54":2,"55":3,"56":4,"91":1,"94":2,"120":3,"121":1,"122":1,"129":6,"131":8,"132":1,"137":22,"143":1,"144":1,"146":1,"149":1,"150":1,"151":4,"152":1,"153":2,"154":10,"156":15}}],["vectors",{"2":{"1":1,"4":2,"6":6,"30":1,"36":4,"42":3,"46":1,"60":1,"119":1,"121":1,"129":2,"149":1}}],["ve",{"2":{"25":1,"146":1}}],["vein",{"2":{"7":1}}],["versa",{"2":{"46":1}}],["vert",{"2":{"153":21}}],["verts",{"2":{"149":2}}],["vertical",{"2":{"41":1,"48":1}}],["vertices",{"2":{"6":7,"9":1,"40":4,"42":5,"46":1,"51":2,"71":1,"73":5,"82":1,"85":3,"88":1,"91":1,"112":1,"131":1,"143":2,"144":1,"145":3,"146":3,"149":1,"152":1}}],["vertex",{"2":{"5":1,"6":2,"36":1,"40":2,"42":2,"46":3,"71":2,"86":2,"87":1,"91":1,"112":3}}],["very",{"2":{"0":1,"144":1,"159":2}}],["tnew",{"2":{"129":1}}],["tutorial",{"2":{"157":1}}],["tups",{"2":{"132":4}}],["tuplepoint",{"2":{"33":3,"156":1}}],["tuple",{"0":{"155":1},"2":{"4":1,"6":15,"33":2,"42":2,"45":3,"46":5,"48":3,"51":1,"55":2,"91":16,"120":2,"121":1,"129":2,"131":6,"137":13,"144":1,"149":2,"151":1,"153":2,"156":6,"158":2}}],["tuples",{"2":{"0":1,"6":2,"33":1,"45":1,"46":1,"51":1,"52":3,"53":1,"54":2,"55":1,"56":4,"57":5,"132":2,"138":2,"149":2,"155":2,"159":2}}],["turned",{"2":{"129":1}}],["turf",{"2":{"120":1}}],["tᵢ",{"2":{"42":1}}],["typing",{"2":{"142":1,"145":1}}],["typically",{"2":{"40":1}}],["typemax",{"2":{"60":1}}],["typeof",{"2":{"27":1,"42":3,"121":1,"126":1,"129":2,"160":1}}],["type2",{"2":{"6":2,"63":4}}],["type1",{"2":{"6":2,"63":5}}],["types",{"0":{"125":1},"2":{"6":4,"22":1,"31":1,"32":1,"42":3,"48":1,"51":1,"91":3,"126":1,"149":1,"157":1}}],["type",{"2":{"4":11,"5":1,"6":60,"11":1,"20":2,"30":2,"31":1,"32":2,"36":9,"39":11,"41":1,"42":8,"45":8,"46":18,"48":8,"51":5,"52":7,"53":6,"54":8,"55":13,"56":7,"57":5,"60":28,"63":2,"124":2,"126":8,"129":42,"133":1,"134":6,"135":6,"139":1,"145":1,"146":1,"149":3,"155":1,"156":3}}],["term",{"2":{"39":1}}],["terms",{"2":{"6":1,"42":1,"55":1}}],["technically",{"2":{"31":1,"130":1}}],["technique",{"2":{"11":1}}],["tell",{"2":{"26":1,"126":1,"160":1}}],["template",{"2":{"21":1}}],["test",{"2":{"149":2}}],["testing",{"0":{"15":1}}],["tests",{"2":{"9":2}}],["t2",{"2":{"6":5,"42":47,"55":6,"70":1,"80":2,"101":1,"111":1}}],["t1",{"2":{"6":6,"42":51,"55":6,"80":2}}],["t=float64",{"2":{"4":1,"6":3,"45":3}}],["two",{"2":{"3":5,"4":10,"6":23,"31":2,"36":2,"38":1,"42":1,"45":1,"46":5,"48":3,"52":2,"54":1,"55":8,"56":4,"57":3,"60":5,"62":3,"63":12,"65":2,"66":1,"68":1,"78":1,"79":1,"80":1,"82":1,"91":2,"93":2,"94":4,"96":4,"97":3,"99":3,"100":1,"109":2,"121":2,"134":2,"135":1,"137":2,"138":2,"144":1,"157":3,"158":3}}],["task",{"2":{"129":6}}],["tasks",{"2":{"129":10}}],["taskrange",{"2":{"129":10}}],["tags",{"2":{"46":4}}],["taget",{"2":{"6":2}}],["taylor",{"2":{"6":1,"42":1}}],["table2",{"2":{"157":1}}],["table1",{"2":{"157":3}}],["tables",{"2":{"30":4,"33":1,"129":11}}],["table",{"2":{"6":1,"19":2,"26":1,"129":12,"149":1,"157":1}}],["taking",{"2":{"6":3,"45":1,"52":1,"54":1,"55":1,"56":1,"57":1,"136":1}}],["takes",{"2":{"46":3,"157":1}}],["taken",{"2":{"28":1,"41":1}}],["take",{"2":{"1":1,"6":2,"19":1,"46":2,"52":1,"54":1,"57":1,"120":2,"122":1,"141":1}}],["target=nothing",{"2":{"52":1,"54":1,"56":1}}],["target=gi",{"2":{"46":1}}],["targets",{"2":{"31":1,"36":2,"39":3,"48":3,"60":3}}],["target",{"0":{"31":1},"2":{"1":15,"6":29,"15":3,"30":2,"31":2,"42":1,"45":2,"46":1,"52":5,"53":10,"54":6,"55":10,"56":4,"57":13,"122":1,"124":4,"127":5,"128":1,"129":143,"138":2,"141":3,"149":2}}],["tilted",{"2":{"48":1}}],["tie",{"2":{"36":1}}],["timings",{"2":{"13":5}}],["timing",{"2":{"13":2}}],["times",{"2":{"4":1,"6":1,"140":1}}],["time",{"2":{"1":5,"13":3,"32":1,"41":1,"141":4,"158":1,"159":1}}],["title",{"2":{"13":2,"41":2,"121":1,"145":1,"149":2}}],["tip",{"2":{"1":1,"5":1,"6":1,"42":1,"141":1,"157":1}}],["tree",{"2":{"157":1}}],["treating",{"2":{"149":1}}],["treated",{"2":{"91":5}}],["treats",{"2":{"39":1,"60":1}}],["try",{"2":{"127":1,"129":9,"159":1}}],["trials",{"2":{"145":2,"149":2}}],["triangles",{"2":{"40":1}}],["triangle",{"2":{"6":1,"40":4,"46":6,"152":4,"158":1}}],["trivially",{"2":{"122":1}}],["tr",{"2":{"39":3}}],["trues",{"2":{"138":3}}],["true",{"0":{"32":1},"2":{"1":5,"3":25,"4":3,"6":41,"36":7,"39":1,"41":2,"46":30,"48":6,"53":2,"56":1,"57":3,"60":4,"63":21,"65":1,"66":1,"68":2,"69":6,"71":1,"72":1,"73":4,"75":1,"76":1,"78":2,"79":1,"80":9,"82":2,"83":2,"85":1,"86":1,"87":3,"89":1,"90":1,"91":74,"93":3,"94":4,"96":2,"97":15,"99":2,"100":6,"103":1,"104":1,"106":1,"107":1,"109":2,"110":7,"112":1,"113":1,"114":4,"116":1,"117":1,"120":5,"121":4,"126":2,"129":8,"138":1,"142":1,"145":1,"149":1,"157":1,"160":1}}],["traverse",{"2":{"46":1}}],["traced",{"2":{"46":1}}],["traces",{"2":{"46":1}}],["trace",{"2":{"46":2,"52":1,"54":1,"56":1}}],["track",{"2":{"46":3,"138":2}}],["tracing",{"2":{"6":1,"46":3,"48":1,"53":5,"55":2,"57":2}}],["translate",{"2":{"41":2}}],["translation",{"2":{"1":2,"6":2,"149":2,"154":2}}],["transformation",{"0":{"154":1},"2":{"133":1,"141":1}}],["transformations",{"2":{"33":10}}],["transform",{"2":{"0":2,"1":6,"6":3,"15":2,"33":1,"122":1,"141":2,"149":1,"154":4}}],["trait`",{"2":{"129":1}}],["trait2",{"2":{"60":10,"63":2,"85":2,"86":2,"97":2,"102":2,"104":2,"105":2}}],["trait1",{"2":{"60":12,"63":2,"85":2,"86":2,"97":2,"102":2,"104":2,"105":2}}],["traits",{"2":{"6":2,"26":1,"97":1,"126":3,"127":2,"134":2,"149":2}}],["trait",{"2":{"1":5,"3":2,"4":2,"6":17,"26":7,"28":1,"30":1,"33":1,"36":2,"39":5,"42":6,"45":7,"48":2,"51":3,"52":2,"53":2,"54":6,"55":4,"56":2,"57":2,"60":7,"63":11,"69":3,"80":2,"83":3,"91":4,"97":10,"100":3,"110":3,"120":1,"122":1,"124":2,"126":3,"127":3,"129":54,"134":9,"135":1,"146":1,"149":2,"156":7}}],["traittarget",{"2":{"0":1,"1":2,"6":8,"36":1,"39":1,"45":1,"48":1,"52":2,"53":4,"54":3,"55":4,"56":2,"57":4,"60":1,"122":2,"125":1,"126":19,"129":10,"149":1}}],["thus",{"2":{"36":1,"39":1,"46":1,"55":1,"57":1}}],["though",{"2":{"28":1,"131":1}}],["those",{"2":{"22":1,"36":1,"46":1,"71":1,"112":1}}],["thing",{"0":{"20":1}}],["things",{"2":{"9":1}}],["this",{"0":{"20":1},"2":{"0":1,"1":1,"3":1,"4":6,"5":1,"6":26,"7":1,"17":2,"19":1,"21":1,"22":4,"26":1,"31":3,"32":2,"33":1,"35":2,"36":6,"38":2,"39":9,"41":3,"42":11,"44":1,"45":4,"46":22,"47":1,"48":4,"50":1,"51":5,"53":1,"55":1,"56":1,"57":2,"59":4,"60":6,"63":4,"65":1,"66":2,"68":3,"69":3,"76":1,"78":1,"79":2,"80":1,"83":3,"90":1,"91":2,"94":2,"96":1,"97":4,"100":3,"107":1,"109":1,"110":3,"117":1,"119":1,"120":3,"121":5,"122":2,"126":4,"127":2,"129":17,"130":3,"132":3,"133":1,"134":6,"135":7,"136":4,"138":3,"139":2,"140":2,"141":4,"142":3,"143":3,"144":5,"145":5,"146":4,"147":1,"149":3,"153":9,"154":1,"155":1,"156":1,"157":3,"158":3,"159":3,"160":1}}],["three",{"2":{"40":1}}],["thread",{"2":{"129":6}}],["threading",{"0":{"129":1},"2":{"126":1,"129":7}}],["threads",{"2":{"1":1,"6":1,"129":10}}],["threaded=",{"2":{"129":8}}],["threaded=true",{"2":{"129":1}}],["threaded=false",{"2":{"39":1,"45":4,"48":2,"60":8,"129":2,"140":1,"149":1}}],["threaded==true",{"2":{"1":1,"6":1,"129":1}}],["threaded",{"2":{"1":3,"4":1,"6":7,"32":1,"36":2,"39":1,"45":3,"48":3,"60":5,"126":3,"129":47,"140":1,"146":6,"149":1}}],["through",{"2":{"6":4,"36":1,"42":1,"46":3,"48":1,"50":1,"51":2,"69":1,"91":5,"110":1,"127":1,"129":1,"135":2,"138":2,"151":1}}],["thrown",{"2":{"127":1}}],["throw",{"2":{"4":1,"6":1,"57":1,"63":1,"129":5}}],["than",{"2":{"1":1,"3":1,"6":9,"11":1,"46":2,"71":1,"80":1,"97":1,"112":1,"120":1,"121":1,"128":1,"129":1,"135":2,"136":1,"137":1,"138":2,"143":1,"145":2,"146":1,"150":1}}],["that",{"2":{"1":1,"3":3,"4":8,"6":42,"9":1,"17":1,"21":1,"22":2,"25":1,"26":4,"27":3,"28":1,"30":3,"36":4,"38":2,"39":4,"42":4,"44":2,"45":3,"46":11,"47":3,"48":5,"52":4,"53":5,"54":4,"55":6,"56":3,"57":5,"60":2,"62":1,"63":11,"65":4,"66":1,"68":2,"69":1,"79":1,"82":1,"83":1,"91":3,"93":1,"94":1,"96":2,"97":10,"99":2,"100":2,"102":2,"109":3,"110":1,"112":3,"120":1,"122":1,"124":2,"126":2,"129":5,"130":3,"131":2,"132":1,"133":3,"134":2,"135":4,"136":2,"137":3,"138":4,"141":1,"143":2,"144":2,"145":3,"146":2,"149":2,"151":1,"153":1,"157":1,"158":2}}],["theorem",{"2":{"60":1}}],["themselves",{"2":{"42":1,"129":1}}],["them",{"2":{"6":1,"17":1,"22":1,"46":1,"124":1,"129":1,"131":2,"136":1,"137":1,"149":1}}],["thereof",{"2":{"122":1}}],["therefore",{"2":{"59":1,"130":1}}],["there",{"2":{"6":2,"30":1,"36":1,"42":2,"46":3,"48":1,"51":2,"55":2,"57":1,"91":1,"94":2,"122":1,"126":1,"129":4,"131":1,"144":1,"153":1}}],["then",{"2":{"6":5,"19":1,"26":1,"30":1,"36":3,"42":2,"46":4,"48":1,"52":1,"54":2,"55":4,"56":2,"57":2,"91":1,"121":1,"127":1,"129":3,"136":1,"145":2,"149":1,"157":1,"158":1}}],["their",{"2":{"3":1,"4":1,"6":2,"22":2,"42":1,"44":2,"57":1,"60":2,"88":1,"97":1,"99":1,"103":1,"104":1,"113":3,"114":3,"122":1,"129":1,"131":1,"137":1,"140":1}}],["they",{"2":{"3":3,"4":11,"6":23,"28":2,"30":1,"31":1,"32":1,"40":1,"45":2,"46":8,"48":2,"52":2,"54":1,"55":2,"56":2,"57":3,"62":3,"63":16,"69":1,"82":1,"86":2,"87":1,"88":1,"91":2,"93":1,"96":2,"97":4,"102":1,"104":1,"105":1,"113":1,"114":1,"121":1,"129":1,"130":1,"135":2,"138":2,"144":1,"153":1,"158":1}}],["these",{"2":{"1":1,"6":2,"22":1,"32":1,"36":1,"42":5,"46":1,"57":1,"62":1,"63":1,"65":1,"69":1,"78":1,"80":2,"82":1,"83":1,"93":1,"96":1,"97":1,"99":2,"100":1,"109":1,"110":1,"120":1,"121":1,"127":1,"129":1,"141":1,"145":1,"149":2,"157":1}}],["the",{"0":{"19":1,"44":1},"2":{"1":30,"3":64,"4":112,"5":12,"6":379,"7":5,"9":3,"10":1,"11":3,"17":3,"19":3,"21":1,"22":7,"25":5,"26":10,"27":2,"28":4,"30":4,"31":5,"32":3,"35":1,"36":63,"38":12,"39":43,"40":15,"41":12,"42":71,"44":6,"45":25,"46":99,"47":7,"48":47,"50":2,"51":7,"52":27,"53":22,"54":27,"55":57,"56":29,"57":70,"59":11,"60":81,"62":5,"63":47,"65":9,"66":11,"68":8,"69":25,"72":8,"73":9,"74":3,"75":3,"76":2,"78":4,"79":11,"80":5,"82":2,"83":21,"85":8,"86":6,"87":4,"89":3,"90":2,"91":123,"93":5,"94":7,"96":5,"97":25,"99":5,"100":21,"102":6,"103":10,"104":7,"105":3,"106":3,"107":2,"109":7,"110":24,"112":2,"113":9,"114":9,"115":6,"116":2,"117":2,"119":1,"120":7,"121":13,"122":8,"124":4,"126":7,"127":11,"129":86,"130":5,"131":5,"132":4,"133":2,"134":13,"135":10,"136":4,"137":8,"138":6,"139":5,"140":1,"141":14,"142":2,"143":3,"144":5,"145":26,"146":17,"147":1,"149":18,"150":3,"151":6,"152":3,"153":2,"154":3,"155":1,"157":10,"158":17,"159":3}}],["t",{"2":{"0":1,"4":28,"6":54,"9":1,"31":1,"33":8,"36":32,"39":41,"42":26,"45":38,"46":62,"48":44,"51":16,"52":12,"53":12,"54":12,"55":49,"56":10,"57":20,"60":87,"63":17,"68":1,"86":1,"91":23,"97":1,"99":1,"103":2,"104":1,"126":16,"129":10,"135":2,"138":2,"145":3,"146":5,"149":1,"155":7,"156":10,"159":1}}],["tokyo",{"2":{"159":1}}],["toy",{"2":{"157":1}}],["together",{"2":{"57":1,"158":1}}],["toggle",{"2":{"22":1}}],["touching",{"0":{"103":1},"2":{"57":1}}],["touch",{"0":{"104":1,"105":1,"106":1},"2":{"46":1,"99":1,"102":2,"104":1,"106":1}}],["touches",{"0":{"98":1,"99":1,"102":1},"1":{"99":1,"100":1},"2":{"0":2,"3":3,"6":3,"33":1,"98":1,"99":3,"100":10,"101":6,"102":10,"103":12,"104":8,"105":7,"106":3,"107":4,"157":1}}],["totally",{"2":{"56":1}}],["total",{"2":{"39":1,"42":2,"48":1}}],["topright",{"2":{"149":1}}],["top",{"2":{"28":1,"46":1,"121":1}}],["towards",{"2":{"17":1}}],["took",{"2":{"159":1}}],["tools",{"2":{"25":1}}],["too",{"2":{"6":1,"143":1,"146":1}}],["tol^2",{"2":{"150":1,"151":1}}],["tolerances",{"2":{"152":1,"153":29}}],["tolerance",{"2":{"150":1,"151":1,"152":1,"153":17}}],["tol",{"2":{"6":12,"145":2,"149":18,"150":7,"151":15,"152":8,"153":18}}],["todo",{"2":{"3":2,"6":2,"46":1,"55":1,"80":4,"97":1,"121":1,"129":1,"132":1,"149":1}}],["to",{"0":{"9":1,"31":1,"70":1,"84":1,"101":1,"111":1},"2":{"0":2,"1":22,"3":1,"4":33,"5":4,"6":135,"7":2,"9":3,"10":2,"11":2,"13":1,"17":3,"19":4,"20":1,"22":9,"25":2,"26":9,"27":1,"28":2,"30":3,"31":4,"32":2,"35":1,"36":8,"38":1,"39":4,"40":4,"41":1,"42":26,"44":2,"45":5,"46":28,"47":1,"48":12,"50":1,"51":3,"52":8,"53":2,"54":8,"55":10,"56":7,"57":11,"59":6,"60":32,"62":2,"63":17,"65":1,"66":1,"68":2,"69":7,"78":3,"79":1,"80":2,"82":1,"83":7,"91":21,"93":2,"94":3,"96":3,"97":5,"99":1,"100":7,"102":1,"109":1,"110":7,"120":4,"121":12,"122":4,"124":4,"126":13,"127":6,"128":1,"129":51,"130":2,"131":3,"133":4,"134":8,"135":5,"136":3,"137":1,"138":4,"139":1,"140":3,"141":4,"142":1,"143":3,"144":3,"145":9,"146":7,"149":4,"150":1,"151":13,"152":1,"153":2,"154":4,"155":1,"156":28,"157":7,"158":5,"159":2,"160":8}}],["rd",{"2":{"149":3}}],["rdbu",{"2":{"59":1}}],["rhumb",{"2":{"120":2}}],["running",{"2":{"129":3}}],["run",{"2":{"129":8,"159":1}}],["runs",{"2":{"55":2,"119":1}}],["rule",{"2":{"46":1}}],["rules",{"2":{"46":1}}],["right=2",{"2":{"46":1}}],["right",{"2":{"42":1,"46":3,"51":1,"60":1,"151":19,"153":5,"157":1}}],["ring",{"2":{"4":7,"6":14,"9":1,"33":1,"36":3,"39":2,"42":1,"44":1,"45":4,"46":11,"48":13,"57":3,"60":5,"63":4,"71":1,"72":2,"73":5,"85":1,"87":1,"91":2,"102":1,"103":1,"104":3,"112":1,"113":2,"114":4,"120":4,"130":2,"131":1,"132":14,"133":1}}],["rings",{"0":{"73":1,"87":1,"104":1,"114":1,"130":1},"1":{"131":1,"132":1},"2":{"1":1,"4":4,"6":7,"9":2,"39":1,"45":1,"46":3,"55":1,"63":7,"119":1,"129":1,"132":1,"135":1,"149":1}}],["rtrees",{"2":{"28":1}}],["r+y",{"2":{"13":2,"14":1}}],["r+x",{"2":{"13":2,"14":1}}],["ry^2",{"2":{"55":1}}],["ry",{"2":{"13":3,"14":3,"55":7}}],["rx^2",{"2":{"55":1}}],["rx",{"2":{"13":3,"14":3,"55":7}}],["round",{"2":{"149":1,"151":1,"153":1}}],["routines",{"2":{"11":1}}],["row",{"2":{"129":3}}],["rows",{"2":{"129":2}}],["robust",{"0":{"15":1}}],["rot",{"2":{"121":6}}],["rotate",{"2":{"48":1,"121":2}}],["rotation",{"2":{"1":1,"6":1,"154":1}}],["rotations",{"2":{"1":3,"6":3,"154":3}}],["rotmatrix2d",{"2":{"149":1}}],["rotmatrix",{"2":{"1":1,"6":1,"154":1}}],["r",{"2":{"6":1,"9":1,"13":11,"14":12,"22":1,"46":4,"55":18,"145":1,"153":2}}],["rᵢ₋₁",{"2":{"42":20}}],["rᵢ∗rᵢ₊₁+sᵢ⋅sᵢ₊₁",{"2":{"6":1}}],["rᵢ₊₁",{"2":{"6":1,"42":29}}],["rᵢ",{"2":{"6":2,"42":49}}],["ramer",{"2":{"151":1}}],["rand",{"2":{"158":2}}],["randomly",{"2":{"158":2}}],["random",{"2":{"149":2}}],["range",{"2":{"13":8,"14":4,"121":1,"129":4}}],["rather",{"2":{"137":1}}],["ratio",{"2":{"6":7,"55":1,"145":1,"149":1,"150":4,"151":6,"152":4,"153":11}}],["raster",{"0":{"121":1},"2":{"121":2}}],["ray",{"2":{"91":4}}],["rawcdn",{"2":{"149":1}}],["raw",{"2":{"26":1}}],["radii",{"2":{"6":1,"145":1}}],["radius`",{"2":{"145":1}}],["radius",{"2":{"6":6,"42":13,"145":4}}],["radialdistance",{"0":{"150":1},"2":{"0":1,"6":2,"147":1,"149":4,"150":4}}],["rrayscore",{"2":{"1":1,"6":1,"154":1}}],["rring",{"2":{"1":1,"6":1,"154":1}}],["rewrap",{"2":{"129":3}}],["req",{"2":{"91":44}}],["requirment",{"2":{"136":1}}],["requirments",{"2":{"91":5}}],["requirement",{"2":{"130":1}}],["require",{"2":{"68":2,"69":6,"83":3,"91":27,"100":3,"110":3}}],["requires",{"2":{"63":1,"65":1,"69":2,"72":3,"73":3,"74":1,"83":1,"86":3,"87":2,"88":1,"100":1,"103":3,"104":1,"105":1,"109":1,"110":1,"113":3,"114":3,"115":1,"142":1,"145":1}}],["required",{"2":{"21":1,"69":3,"83":3,"100":3,"110":3,"144":1}}],["requests",{"2":{"17":1}}],["reflected",{"2":{"149":3}}],["referring",{"2":{"91":1}}],["referece",{"2":{"1":2,"141":2}}],["references",{"2":{"6":1,"42":1}}],["reference",{"2":{"0":1}}],["ref",{"2":{"59":1}}],["reveal",{"2":{"57":1}}],["reveals",{"2":{"57":1}}],["reverse",{"2":{"38":1,"41":1,"42":1}}],["rev",{"2":{"56":1}}],["render",{"2":{"41":1}}],["rendering",{"2":{"41":3,"42":1}}],["rename",{"2":{"10":1}}],["regardless",{"2":{"91":1}}],["region",{"2":{"55":2,"57":2,"159":1}}],["regions",{"2":{"53":3,"55":4,"56":1,"57":3,"91":2,"159":1}}],["register",{"2":{"33":2,"42":3}}],["regular",{"0":{"15":1}}],["read",{"2":{"149":2}}],["readability",{"2":{"46":1}}],["reached",{"2":{"129":4}}],["reaches",{"2":{"127":1}}],["reach",{"2":{"127":1}}],["reason",{"2":{"32":1,"126":1,"130":1,"136":1}}],["real`",{"2":{"145":1,"146":1}}],["really",{"2":{"39":1,"91":1,"126":1}}],["real=1",{"2":{"6":2,"145":2}}],["real=6378137`",{"2":{"145":1}}],["real=6378137",{"2":{"6":2,"145":1}}],["real",{"0":{"159":1},"2":{"5":1,"6":15,"36":1,"42":45,"45":2,"55":2,"145":3,"146":1,"153":5,"157":1}}],["related",{"2":{"122":1}}],["relation",{"2":{"46":2}}],["relations",{"2":{"33":10,"80":1,"97":1}}],["relationship",{"2":{"31":1,"157":2}}],["relative",{"2":{"22":1,"42":3}}],["relevant",{"2":{"10":1}}],["reducing",{"2":{"129":1}}],["reduced",{"2":{"150":1,"151":1,"152":1}}],["reduces",{"2":{"27":1,"57":1}}],["reduce",{"2":{"1":1,"6":1,"129":2,"134":1}}],["redundant",{"2":{"46":1}}],["red",{"2":{"14":1,"44":2,"59":1,"68":1,"78":1,"93":1,"158":2}}],["removal",{"2":{"46":1}}],["removed",{"2":{"46":2,"53":3}}],["removes",{"2":{"46":1,"122":1}}],["remove",{"2":{"39":1,"46":31,"48":1,"51":2,"52":5,"54":5,"56":2,"138":2,"150":1,"151":1,"153":4}}],["removing",{"2":{"6":3,"46":1,"150":1,"151":1,"152":1}}],["remaining",{"2":{"46":1,"63":1,"91":2}}],["remain",{"2":{"1":1,"6":9,"129":1,"149":2}}],["reset",{"2":{"46":2}}],["research",{"0":{"23":1}}],["resize",{"2":{"13":1,"14":1,"46":2}}],["resampled",{"2":{"6":1,"146":1}}],["respectivly",{"2":{"97":1}}],["respectively",{"2":{"46":1,"129":1}}],["respect",{"2":{"6":2,"54":1,"91":6}}],["rest",{"2":{"6":1,"42":2,"56":1}}],["resulting",{"2":{"51":1,"57":1,"158":1}}],["results",{"2":{"3":2,"6":2,"55":1,"80":1,"97":1,"129":2,"131":1,"151":23}}],["result",{"2":{"1":2,"3":5,"4":5,"6":13,"27":1,"36":1,"39":2,"48":1,"55":4,"60":2,"66":1,"69":1,"79":1,"94":1,"110":1,"129":2,"145":3,"153":6}}],["recieves",{"2":{"129":2}}],["recucing",{"2":{"129":1}}],["recursive",{"2":{"127":1}}],["recursively",{"2":{"4":1,"6":1,"127":1,"140":1}}],["recalculate",{"2":{"128":1}}],["recent",{"2":{"46":1,"53":1,"55":1,"57":1}}],["rect",{"2":{"35":3,"38":5,"47":3,"59":7}}],["rectangle",{"2":{"35":2,"38":2,"41":2,"47":2,"48":1,"59":2,"144":5,"145":8,"158":2}}],["recommended",{"2":{"30":1}}],["reconstructing",{"2":{"149":1}}],["reconstructed",{"2":{"26":1}}],["reconstruct",{"2":{"0":2,"1":1,"6":3,"26":1,"124":2,"129":29}}],["repl",{"2":{"142":1,"145":1}}],["replace",{"2":{"46":1}}],["replaced",{"2":{"30":1}}],["repeat",{"2":{"45":1,"46":3,"63":6}}],["repeating",{"2":{"39":1,"57":1}}],["repeated",{"2":{"4":3,"6":3,"9":1,"36":2,"42":1,"46":2,"57":2,"60":2,"63":4,"91":1}}],["represented",{"2":{"158":1}}],["represent",{"2":{"25":1,"42":1,"46":4,"63":1}}],["representing",{"2":{"6":1,"53":1,"55":1,"57":1,"59":1,"63":1,"159":1}}],["represents",{"2":{"6":1,"134":2,"135":1}}],["reprojects",{"2":{"141":1}}],["reprojection",{"0":{"141":1},"1":{"142":1}}],["reproject",{"2":{"0":1,"1":4,"33":2,"122":1,"141":6,"142":2}}],["re",{"2":{"1":1,"6":1,"25":1,"154":1}}],["returntype",{"2":{"27":1}}],["returning",{"2":{"26":1,"53":2}}],["returns",{"2":{"3":5,"4":4,"5":3,"6":22,"26":1,"30":2,"36":1,"39":2,"42":6,"45":3,"46":5,"48":6,"51":1,"52":1,"55":1,"56":1,"60":8,"62":1,"65":2,"66":1,"69":1,"78":2,"79":1,"82":1,"91":3,"94":3,"110":1,"121":2,"129":1,"146":1,"155":1,"157":1}}],["return",{"0":{"30":1},"2":{"1":1,"3":18,"4":2,"6":33,"13":3,"14":3,"20":1,"22":1,"31":2,"36":5,"39":5,"42":20,"45":4,"46":32,"48":12,"51":12,"52":5,"53":4,"54":4,"55":10,"56":5,"57":9,"60":8,"63":30,"66":1,"69":1,"75":2,"76":2,"79":1,"80":18,"83":2,"89":2,"90":2,"91":65,"93":1,"94":5,"97":24,"100":1,"102":2,"106":2,"107":2,"110":1,"116":2,"117":2,"120":10,"121":7,"129":26,"130":1,"132":4,"134":6,"135":2,"138":2,"139":2,"141":1,"146":4,"149":3,"150":1,"151":5,"152":3,"153":7,"154":2,"155":2,"156":8}}],["returned",{"2":{"1":1,"6":9,"30":2,"31":1,"46":3,"51":1,"52":2,"54":2,"56":2,"124":1,"126":1,"129":2,"141":1,"149":1}}],["retreivable",{"2":{"1":1,"141":1}}],["rebuilt",{"2":{"1":1,"6":2,"124":1,"129":2}}],["rebuilder",{"2":{"149":2}}],["rebuild",{"2":{"0":2,"6":4,"124":4,"127":1,"129":14,"146":1,"149":3}}],["psa",{"2":{"129":2}}],["p4",{"2":{"121":5}}],["pn",{"2":{"102":3}}],["pb",{"2":{"80":2}}],["p0",{"2":{"60":9,"121":9}}],["p3",{"2":{"46":8,"121":11,"152":4}}],["ptm",{"2":{"120":3}}],["ptj",{"2":{"120":5}}],["pti",{"2":{"120":3}}],["ptrait",{"2":{"60":2}}],["pts",{"2":{"46":14,"51":7}}],["pt",{"2":{"46":78,"51":2,"91":8}}],["pt2",{"2":{"46":14}}],["pt1",{"2":{"46":18}}],["pfirst",{"2":{"39":3}}],["philosophy",{"2":{"22":2}}],["pu",{"2":{"158":2}}],["purpose",{"2":{"129":1}}],["purely",{"2":{"6":1,"26":1,"145":1}}],["push",{"2":{"46":15,"51":5,"52":2,"54":2,"55":1,"56":4,"57":5,"121":3,"132":1,"146":3,"151":3}}],["public",{"2":{"32":1}}],["pull",{"2":{"17":1}}],["piece",{"2":{"46":6,"138":6}}],["pieces",{"2":{"46":12,"51":1,"56":4,"91":1,"138":9}}],["pi",{"2":{"13":2}}],["pixels",{"2":{"121":1}}],["pixel",{"2":{"6":1,"121":4}}],["pythagorean",{"2":{"60":1}}],["python",{"2":{"22":1}}],["py",{"2":{"13":2,"14":2,"55":4}}],["px",{"2":{"13":2,"14":2,"55":4}}],["peucker",{"2":{"147":1,"149":3,"151":2}}],["peaks",{"2":{"121":2}}],["peculiarities",{"0":{"29":1},"1":{"30":1,"31":1,"32":1}}],["people",{"2":{"9":1}}],["performed",{"2":{"158":1}}],["performs",{"2":{"42":1,"146":1}}],["perform",{"2":{"41":1,"42":2,"122":1,"157":3,"158":2,"160":1}}],["performing",{"2":{"6":3,"31":1,"42":1,"52":1,"54":1,"56":1,"158":1}}],["performance",{"2":{"4":1,"6":2,"22":1,"30":1,"136":1,"140":1,"149":1}}],["per",{"2":{"5":2,"6":2,"41":1,"42":2,"46":5,"129":4,"146":1}}],["pl",{"2":{"158":2}}],["place",{"2":{"157":1}}],["placement",{"2":{"46":1}}],["plan",{"2":{"143":1}}],["plane",{"2":{"42":1}}],["plotted",{"2":{"44":1,"121":1}}],["plotting",{"2":{"6":1,"143":1,"146":1}}],["plots",{"2":{"22":1,"41":2}}],["plot",{"2":{"13":1,"41":3,"62":1,"96":1,"121":1,"145":2,"149":4,"158":1}}],["plus",{"2":{"5":1,"6":1,"42":1}}],["p2y",{"2":{"156":3}}],["p2x",{"2":{"156":3}}],["p2box",{"2":{"41":1}}],["p2",{"2":{"3":2,"4":2,"6":6,"15":12,"36":12,"39":9,"46":18,"48":19,"56":2,"60":15,"63":11,"69":2,"78":2,"91":12,"97":2,"120":3,"121":5,"144":1,"152":4,"156":3}}],["p1y",{"2":{"156":3}}],["p1x",{"2":{"156":3}}],["p1",{"2":{"3":3,"4":2,"6":7,"15":12,"36":21,"39":8,"41":4,"46":9,"48":25,"50":1,"56":2,"60":15,"63":14,"68":5,"69":3,"78":5,"91":4,"97":2,"102":3,"120":3,"121":5,"152":4,"156":3}}],["pretty",{"2":{"141":1}}],["prettytime",{"2":{"13":2}}],["prevent",{"2":{"53":2,"55":2,"57":2}}],["prev^2",{"2":{"36":2}}],["prev",{"2":{"36":14,"46":43,"120":4}}],["previously",{"2":{"144":1}}],["previous",{"2":{"24":1,"27":1,"36":1,"129":1,"150":3}}],["preparations",{"2":{"28":1}}],["prepared",{"2":{"28":1}}],["prepare",{"0":{"28":1},"2":{"25":1,"28":1}}],["pred",{"2":{"157":2,"158":1,"159":2,"160":1}}],["predecessor",{"2":{"22":1}}],["predicate",{"2":{"7":1,"80":1,"157":3,"158":1,"160":5}}],["predicates",{"0":{"12":1,"15":1,"160":1},"1":{"13":1,"14":1,"15":1,"16":1},"2":{"7":4,"12":1,"22":1,"157":1,"159":1}}],["precision",{"2":{"11":1}}],["preserve",{"2":{"149":4,"151":3}}],["presence",{"2":{"129":1}}],["presentation",{"2":{"6":1,"42":1}}],["prescribes",{"2":{"28":1}}],["press",{"2":{"6":1,"42":1}}],["pre",{"2":{"6":1,"56":1,"149":1}}],["prefilter",{"2":{"6":1,"149":7}}],["protters",{"2":{"129":2}}],["progressively",{"2":{"127":1}}],["program",{"2":{"25":1}}],["programming",{"2":{"25":1}}],["promote",{"2":{"42":5}}],["property",{"2":{"129":2}}],["properties=gi",{"2":{"129":1}}],["properties=namedtuple",{"2":{"129":1}}],["properties",{"2":{"6":1,"129":9,"149":1,"153":1}}],["propagate",{"2":{"42":16,"60":4}}],["probably",{"2":{"39":1,"129":1}}],["prod",{"2":{"36":4}}],["product",{"2":{"36":1,"91":2}}],["process",{"2":{"71":3,"72":3,"73":3,"74":1,"80":1,"85":3,"86":3,"87":2,"88":1,"91":5,"102":1,"103":3,"104":1,"105":1,"112":3,"113":3,"114":3,"115":1,"129":2,"151":1}}],["processed",{"2":{"46":6}}],["processors",{"2":{"33":1,"69":2,"83":2,"100":2,"110":2}}],["processor",{"2":{"33":1}}],["processing",{"2":{"31":1}}],["profile",{"2":{"9":1}}],["providers",{"2":{"131":1,"137":1}}],["provide",{"0":{"31":1},"2":{"6":6,"22":1,"35":1,"38":1,"40":1,"44":1,"47":1,"50":1,"52":2,"54":2,"56":2,"59":1,"62":1,"65":1,"68":1,"78":1,"82":1,"91":2,"93":1,"96":1,"99":1,"109":1,"121":1,"153":1}}],["provided",{"2":{"4":1,"6":3,"11":1,"46":1,"60":1,"63":1,"137":1,"145":2}}],["projection",{"2":{"60":2}}],["project",{"2":{"9":1}}],["projects",{"0":{"23":1},"2":{"9":1}}],["proj",{"2":{"1":2,"6":3,"141":2,"142":4,"144":1,"145":6}}],["println",{"2":{"142":1,"145":1,"149":2}}],["print",{"2":{"142":2,"145":2}}],["printstyled",{"2":{"142":1,"145":1}}],["prints",{"2":{"142":1}}],["primitives",{"2":{"33":1}}],["primitive",{"0":{"122":1},"1":{"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1},"2":{"19":1}}],["primarily",{"2":{"6":1,"17":2,"126":1}}],["primary",{"2":{"3":2,"6":3,"69":1,"110":1,"149":1}}],["priority",{"2":{"1":1,"141":1}}],["pay",{"2":{"129":1}}],["pa",{"2":{"80":2}}],["pathof",{"2":{"149":2}}],["paths",{"2":{"126":1}}],["path",{"2":{"38":3}}],["paper",{"0":{"21":1},"1":{"22":1,"23":1,"24":1},"2":{"24":2,"91":2}}],["padding",{"2":{"6":1}}],["parent",{"2":{"126":1}}],["parse",{"2":{"91":1,"97":1}}],["part",{"2":{"48":2,"57":2,"91":3,"128":1}}],["partition",{"2":{"129":4}}],["partialsort",{"2":{"153":1}}],["partial",{"2":{"48":4}}],["partially",{"2":{"46":2,"57":2}}],["particularly",{"2":{"42":1}}],["particular",{"2":{"20":1,"36":1,"121":1}}],["parallel",{"2":{"55":2,"91":1,"120":1}}],["paradigms",{"0":{"25":1},"1":{"26":1,"27":1,"28":1},"2":{"25":2,"28":1}}],["paradigm",{"0":{"19":1}}],["parameters",{"2":{"6":1,"126":1,"129":1}}],["parameter",{"2":{"6":2,"126":2}}],["parlance",{"2":{"5":1,"6":1,"42":1}}],["passes",{"2":{"48":2,"91":1}}],["passed",{"2":{"1":2,"6":6,"121":1,"124":1,"129":2,"141":1,"145":2,"154":1,"160":1}}],["passable",{"2":{"42":18}}],["passing",{"2":{"26":1,"129":1}}],["pass",{"2":{"5":1,"6":4,"26":1,"42":1,"66":1,"79":1,"91":2,"94":1,"126":1,"145":1,"146":1,"149":1}}],["pairs",{"2":{"55":1}}],["pair",{"2":{"3":2,"6":2,"48":1,"97":2,"129":3}}],["packages",{"2":{"6":1,"17":1,"24":1,"124":1,"129":1,"130":1}}],["package",{"2":{"1":2,"17":2,"30":1,"141":3,"142":1,"145":1}}],["page",{"2":{"0":1,"9":1,"19":1,"21":1,"33":1,"36":1,"39":1,"41":1,"42":1,"45":1,"46":1,"48":1,"51":1,"53":1,"55":1,"57":1,"60":1,"63":1,"66":1,"76":1,"79":1,"80":1,"90":1,"91":1,"94":1,"97":1,"107":1,"117":1,"120":1,"121":1,"129":1,"132":1,"135":1,"138":1,"139":1,"140":1,"142":1,"146":1,"153":1,"154":1,"155":1,"156":1}}],["p",{"2":{"1":5,"6":5,"13":13,"14":12,"15":2,"35":1,"38":1,"44":1,"46":11,"47":1,"48":5,"52":2,"53":2,"54":2,"55":3,"56":4,"59":3,"62":1,"65":1,"68":1,"78":1,"80":4,"82":1,"91":23,"93":1,"96":1,"99":1,"109":1,"120":4,"121":3,"122":3,"129":3,"139":7,"144":1,"148":1,"149":1,"153":3,"154":9,"155":7,"156":13,"157":1,"158":1}}],["poylgon",{"2":{"55":1,"57":1,"91":1}}],["potential",{"2":{"48":1}}],["potentially",{"2":{"6":2,"22":1,"46":1,"135":2,"138":2}}],["possibly",{"2":{"129":1}}],["possible",{"2":{"6":4,"22":1,"52":1,"54":1,"55":2,"56":1,"129":2}}],["possibility",{"2":{"127":1}}],["postitive",{"2":{"59":1}}],["postive",{"2":{"38":1}}],["position=",{"2":{"149":1}}],["position",{"2":{"6":1,"120":1,"144":1}}],["positive",{"2":{"4":4,"6":4,"38":2,"39":1,"59":2,"60":3,"146":1,"153":1}}],["polar",{"2":{"6":1,"145":1}}],["polynodes",{"2":{"46":5,"52":1,"54":1,"56":1}}],["polynode",{"2":{"46":31}}],["polypoints",{"2":{"42":46}}],["polyogns",{"2":{"121":1}}],["polyogn",{"2":{"36":1}}],["polygns",{"2":{"46":1}}],["polygin",{"2":{"4":1,"6":1,"36":1}}],["polygonization",{"2":{"121":1}}],["polygonizing",{"0":{"121":1}}],["polygonized",{"2":{"121":1}}],["polygonize",{"2":{"0":1,"6":2,"9":1,"33":1,"121":12}}],["polygon`",{"2":{"42":3,"121":1}}],["polygonops",{"2":{"24":1}}],["polygons",{"0":{"74":1,"105":1,"115":1,"136":1},"1":{"137":1,"138":1},"2":{"3":4,"4":3,"5":1,"6":17,"9":1,"31":5,"33":1,"39":5,"40":1,"42":2,"44":1,"45":1,"46":13,"48":1,"51":2,"52":9,"53":5,"54":3,"55":7,"56":6,"57":19,"59":1,"60":1,"63":5,"74":1,"97":5,"115":1,"120":1,"121":8,"127":1,"131":2,"135":3,"136":2,"137":2,"138":10,"147":1,"149":1,"158":5,"159":3}}],["polygontrait",{"2":{"1":2,"3":4,"4":6,"6":15,"15":3,"31":1,"36":2,"39":3,"42":3,"45":2,"46":2,"48":2,"51":1,"52":5,"53":5,"54":3,"55":5,"56":4,"57":8,"60":2,"63":10,"71":2,"72":1,"73":1,"74":3,"75":1,"80":4,"85":2,"86":2,"87":1,"88":2,"89":1,"97":8,"102":2,"103":1,"104":1,"105":3,"106":1,"112":2,"113":1,"114":1,"115":3,"116":1,"122":1,"127":2,"129":2,"132":2,"134":2,"135":1,"138":2,"149":2,"156":1}}],["polygon",{"0":{"46":1,"49":1,"52":1,"53":1,"55":1,"56":1,"57":1,"88":1},"1":{"50":1,"51":1},"2":{"0":1,"1":4,"3":4,"4":20,"5":9,"6":62,"9":2,"11":3,"15":4,"24":2,"28":1,"31":1,"35":1,"36":3,"38":2,"39":5,"40":5,"41":16,"42":57,"44":2,"45":4,"46":35,"47":3,"48":4,"50":3,"51":10,"52":5,"53":7,"54":5,"55":5,"56":6,"57":33,"59":3,"60":14,"63":12,"69":1,"71":3,"72":3,"73":4,"74":8,"80":1,"85":3,"86":4,"87":4,"88":4,"91":57,"97":4,"100":1,"102":3,"103":4,"104":5,"105":7,"110":1,"112":3,"113":4,"114":4,"115":8,"120":5,"121":2,"129":3,"130":4,"131":8,"132":5,"133":1,"135":4,"136":3,"137":12,"138":7,"144":1,"145":4,"148":1,"149":9,"154":3,"156":6,"158":6}}],["polys",{"2":{"6":2,"46":36,"50":3,"51":10,"52":14,"53":13,"54":9,"55":6,"56":14,"57":28,"138":26}}],["polys1",{"2":{"3":2,"6":2,"97":6}}],["polys2",{"2":{"3":2,"6":2,"97":6}}],["poly",{"2":{"3":2,"6":16,"15":2,"35":1,"38":1,"39":6,"41":2,"42":3,"44":1,"46":93,"47":2,"48":4,"50":4,"51":20,"52":18,"53":11,"54":11,"55":10,"56":15,"57":79,"59":1,"60":3,"63":4,"80":10,"91":21,"97":8,"120":5,"121":2,"138":18,"144":2,"148":2,"149":8,"156":8,"158":5}}],["poly2",{"2":{"3":3,"4":2,"6":7,"52":2,"63":2,"91":16,"97":7}}],["poly1",{"2":{"3":3,"4":2,"6":7,"52":2,"63":2,"91":11,"97":7}}],["polgontrait",{"2":{"1":1,"6":1}}],["pointwise",{"0":{"154":1},"2":{"141":1}}],["point1",{"2":{"60":4}}],["pointedgeside",{"2":{"46":1}}],["point₂",{"2":{"45":13}}],["point₁",{"2":{"45":13}}],["point3s",{"2":{"42":10}}],["point3f",{"2":{"41":1}}],["pointrait",{"2":{"6":1}}],["point2f",{"2":{"41":4,"42":2,"59":1,"121":1}}],["point2",{"2":{"6":2,"42":5,"60":4}}],["pointtrait",{"2":{"1":1,"4":4,"6":9,"26":1,"36":2,"39":1,"42":3,"48":1,"54":2,"60":17,"63":8,"71":6,"75":1,"85":6,"89":1,"102":6,"106":1,"112":6,"116":1,"122":2,"126":2,"127":1,"129":21,"134":2,"135":1,"139":2,"140":1,"149":2,"154":2,"155":2,"156":1}}],["point",{"0":{"85":1,"102":1},"2":{"1":4,"3":10,"4":37,"5":7,"6":84,"9":2,"24":1,"28":1,"36":12,"39":3,"40":3,"41":1,"42":126,"45":6,"46":83,"48":50,"51":13,"53":9,"54":1,"55":23,"57":9,"59":17,"60":73,"63":27,"66":3,"68":1,"69":2,"71":8,"80":21,"83":2,"85":10,"91":139,"93":1,"94":1,"96":2,"97":20,"99":1,"100":3,"102":10,"103":1,"105":1,"110":4,"112":11,"120":1,"121":1,"129":2,"130":1,"131":2,"135":2,"136":1,"138":2,"141":1,"143":1,"149":2,"150":3,"151":5,"152":1,"154":2,"156":4,"158":2}}],["points2",{"2":{"3":1,"6":1,"97":3}}],["points1",{"2":{"3":1,"6":1,"97":3}}],["points",{"0":{"71":1,"112":1},"2":{"0":1,"1":4,"3":1,"4":11,"5":1,"6":50,"9":3,"13":1,"36":2,"38":3,"39":3,"41":8,"42":32,"45":1,"46":46,"48":5,"51":3,"52":5,"53":1,"54":8,"55":18,"56":4,"57":1,"59":2,"60":8,"62":2,"63":13,"65":1,"69":6,"71":3,"72":4,"83":6,"85":1,"86":7,"87":3,"91":9,"97":5,"100":5,"102":1,"103":2,"104":4,"105":3,"109":1,"110":5,"112":3,"113":3,"114":3,"115":1,"119":1,"121":3,"129":2,"140":2,"141":1,"144":2,"145":2,"149":11,"150":11,"151":25,"152":10,"153":33,"154":2,"155":2,"156":25,"157":1,"158":11}}],["pointorientation",{"2":{"0":1,"6":2,"91":2}}],["my",{"2":{"22":1,"159":1,"160":2}}],["moore",{"2":{"121":2}}],["moved",{"2":{"46":1,"121":10,"141":1}}],["move",{"2":{"45":1,"91":1,"121":6}}],["mode",{"2":{"160":3}}],["model",{"2":{"157":1}}],["module",{"2":{"141":1,"146":1}}],["modules",{"2":{"6":1,"42":1}}],["modified",{"2":{"129":2}}],["mod1",{"2":{"42":5}}],["mod",{"2":{"42":1,"46":1}}],["monotone",{"2":{"28":1}}],["most",{"2":{"17":1,"22":1,"46":1,"53":1,"55":1,"57":1,"91":1,"149":1}}],["moment",{"2":{"6":1,"144":1,"146":1}}],["more",{"2":{"6":3,"7":1,"9":1,"10":1,"11":1,"19":1,"31":1,"46":1,"52":1,"54":1,"56":1,"91":1,"97":1,"121":1,"129":4,"132":1,"142":1,"144":1,"146":1,"157":1}}],["mistakenly",{"2":{"136":1}}],["missing",{"2":{"124":6,"125":2,"144":4}}],["missingpoints",{"2":{"121":1}}],["mid",{"2":{"48":2,"91":3}}],["midpoint",{"2":{"46":1}}],["middle",{"2":{"46":2}}],["minimal",{"2":{"159":1}}],["minimum",{"2":{"4":7,"6":12,"47":1,"48":2,"60":12,"121":1,"149":1,"150":1,"152":1}}],["mining",{"2":{"159":1}}],["mind",{"2":{"144":1,"158":1}}],["min",{"2":{"48":1,"60":15,"149":1,"151":3,"152":1,"153":28}}],["minus",{"2":{"38":1}}],["minpoints",{"2":{"6":2,"121":2}}],["minpoints=10",{"2":{"6":2,"121":3}}],["might",{"2":{"6":3,"17":1,"39":1,"52":1,"54":1,"56":1,"133":1,"151":1}}],["mixed",{"2":{"6":4,"149":1}}],["m",{"2":{"5":1,"6":1,"15":10,"21":1,"42":2,"48":6,"120":2}}],["mp",{"2":{"80":2}}],["mp1",{"2":{"4":2,"6":2,"63":7}}],["mp2",{"2":{"4":2,"6":2,"63":8}}],["manner",{"2":{"157":1}}],["manually",{"2":{"130":1}}],["many",{"2":{"4":1,"5":1,"6":2,"22":1,"31":1,"42":1,"46":1,"51":1,"53":1,"55":2,"57":1,"63":1,"131":1,"140":1}}],["mason",{"2":{"129":2}}],["marking",{"2":{"53":2,"55":2,"57":2}}],["mark",{"2":{"46":2}}],["marked",{"2":{"46":6,"53":1,"55":1,"57":1}}],["marks",{"2":{"46":1}}],["mag",{"2":{"36":4}}],["maptasks",{"2":{"129":6}}],["mapreducetasks",{"2":{"129":5}}],["mapreduce",{"2":{"53":1,"129":8}}],["map",{"2":{"13":1,"19":1,"26":3,"27":1,"42":1,"46":1,"55":1,"97":2,"121":5,"126":1,"129":24,"132":1,"149":1}}],["making",{"2":{"46":1,"127":1,"137":1}}],["makie",{"2":{"13":1,"14":1,"35":1,"38":1,"41":3,"44":1,"47":1,"50":4,"59":1,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"121":3,"148":1,"149":1}}],["makevalid",{"2":{"149":2}}],["makes",{"2":{"39":1,"46":1,"60":1,"129":1,"131":1,"136":1,"137":1}}],["make",{"2":{"9":1,"17":1,"22":1,"36":1,"46":3,"60":1,"97":1,"127":1,"132":1,"144":1,"153":1}}],["mainly",{"2":{"42":1,"59":1,"122":1}}],["maintain",{"2":{"39":1}}],["main",{"0":{"18":1},"1":{"19":1,"20":1},"2":{"7":1,"22":1,"46":1,"121":1,"129":1,"145":1}}],["matlab",{"2":{"50":1}}],["materializer`",{"2":{"129":1}}],["materializer",{"2":{"30":1,"129":1}}],["mathrm",{"2":{"42":1}}],["math",{"2":{"7":1}}],["matches",{"2":{"63":1}}],["match",{"2":{"6":1,"63":12,"97":3,"124":1,"129":2}}],["matching",{"2":{"3":1,"6":1,"30":1,"63":3,"97":1,"127":2}}],["matrix",{"2":{"6":2,"14":2,"42":1,"121":1}}],["max",{"2":{"6":8,"36":2,"48":1,"121":1,"129":2,"144":5,"145":8,"146":7,"151":36,"153":1}}],["maximum",{"2":{"3":1,"6":4,"14":1,"47":1,"48":4,"80":1,"121":1,"145":1,"146":1,"151":3}}],["made",{"2":{"6":2,"45":1,"46":1,"104":1,"127":1,"135":1,"138":1,"152":1}}],["maybe",{"2":{"6":1,"124":1,"129":6}}],["may",{"2":{"1":1,"6":5,"31":2,"32":1,"42":2,"46":1,"120":1,"126":1,"127":1,"129":4,"136":1,"137":1,"145":1}}],["measure",{"2":{"129":1,"143":1}}],["meaning",{"2":{"3":3,"4":1,"6":4,"32":1,"39":1,"97":4,"120":1}}],["means",{"2":{"3":1,"6":1,"38":1,"39":1,"68":1,"91":3,"96":1,"97":1,"127":1}}],["mean",{"2":{"0":1,"6":5,"25":1,"41":2,"42":5,"129":1}}],["meanvalue",{"2":{"0":1,"5":2,"6":3,"40":1,"41":2,"42":15}}],["merge",{"2":{"129":1}}],["merely",{"2":{"22":1}}],["meets",{"2":{"91":9,"97":1}}],["meet",{"2":{"55":1,"68":1,"69":1,"83":1,"91":7,"100":1,"110":1}}],["mesh",{"2":{"41":1,"129":1}}],["messages",{"2":{"22":1}}],["me",{"0":{"31":1}}],["mentioned",{"2":{"27":1}}],["menu",{"2":{"14":3}}],["memory",{"2":{"22":1,"42":1}}],["median",{"2":{"13":4,"129":1}}],["mechanics",{"2":{"6":1,"42":1}}],["met",{"2":{"91":44}}],["meters",{"2":{"6":4,"144":1,"145":4}}],["methoderror",{"2":{"33":2}}],["methods",{"0":{"2":1,"3":1,"4":1,"6":1},"1":{"3":1,"4":1},"2":{"1":1,"6":8,"9":1,"17":1,"33":24,"42":3,"69":1,"83":1,"100":1,"110":1,"121":1,"124":1,"126":1,"127":1,"129":2,"144":1,"149":2,"154":1}}],["method",{"0":{"142":1},"2":{"1":1,"4":1,"5":10,"6":95,"32":1,"36":1,"39":1,"42":37,"45":1,"48":1,"55":1,"57":1,"60":4,"63":1,"69":2,"83":2,"97":1,"100":2,"110":2,"121":1,"126":1,"129":5,"141":1,"142":2,"144":2,"145":9,"146":14,"157":1,"160":1}}],["muladd",{"2":{"42":2}}],["multifloats",{"2":{"13":1,"14":1,"15":1}}],["multifloat",{"2":{"7":1}}],["multilinestringtrait",{"2":{"134":1}}],["multilinestring",{"2":{"6":1,"129":1,"156":2}}],["multi",{"0":{"75":1,"76":1,"89":1,"90":1,"106":1,"107":1,"116":1,"117":1},"2":{"4":2,"6":3,"36":1,"39":1,"48":1,"63":2,"75":1,"76":1,"89":1,"90":1,"106":1,"107":1,"116":1,"117":1}}],["multicurves",{"2":{"39":1,"48":1}}],["multicurve",{"2":{"4":1,"6":1,"39":1}}],["multigeometry",{"2":{"4":2,"6":2,"60":2}}],["multiplication",{"2":{"146":1}}],["multiplied",{"2":{"42":3}}],["multiple",{"2":{"4":1,"6":1,"22":1,"42":1,"91":1,"140":1,"153":1}}],["multiply",{"2":{"1":1,"6":1,"154":1}}],["multipolys",{"2":{"57":3}}],["multipoly`",{"2":{"52":2,"54":2,"56":2}}],["multipoly",{"2":{"6":9,"15":3,"52":1,"53":25,"54":1,"55":26,"56":1,"57":24,"138":21,"149":9}}],["multipolygon`",{"2":{"121":1}}],["multipolygons",{"2":{"3":1,"4":1,"6":11,"45":1,"52":3,"54":3,"55":2,"56":3,"59":1,"63":1,"97":2,"137":1}}],["multipolygon",{"2":{"3":2,"4":5,"6":12,"39":2,"44":1,"52":1,"53":7,"54":1,"55":5,"56":1,"57":6,"63":4,"97":2,"129":1,"135":2,"136":7,"137":8,"138":2,"149":3}}],["multipolygontrait",{"2":{"1":1,"3":4,"4":2,"6":7,"31":1,"53":4,"55":4,"57":4,"63":6,"75":1,"76":1,"89":1,"90":1,"97":8,"106":1,"107":1,"116":1,"117":1,"129":1,"134":1,"138":4}}],["multipoint",{"2":{"4":5,"6":5,"39":1,"63":5,"80":6,"129":5,"149":1}}],["multipoints",{"2":{"3":2,"4":1,"6":3,"39":1,"48":1,"63":2,"97":2,"149":1}}],["multipointtrait",{"2":{"1":1,"3":2,"4":4,"6":8,"36":2,"39":1,"48":1,"63":8,"75":1,"76":1,"80":4,"89":1,"90":1,"97":4,"106":1,"107":1,"116":1,"117":1,"127":1,"134":1,"149":2,"156":1}}],["multithreading",{"2":{"1":2,"4":1,"6":5,"126":1}}],["mutlipolygon",{"2":{"4":1,"6":1,"45":1}}],["must",{"2":{"1":1,"3":8,"4":2,"5":1,"6":22,"9":1,"22":1,"36":1,"42":5,"46":1,"48":3,"51":1,"63":5,"66":2,"69":1,"78":1,"79":1,"83":1,"91":13,"97":1,"99":1,"100":1,"110":2,"124":1,"129":1,"133":1,"134":3,"135":1,"141":1,"145":1,"146":1,"149":1,"153":4}}],["much",{"2":{"0":1,"6":3,"52":1,"54":1,"56":1}}],["mdash",{"2":{"1":4,"3":9,"4":8,"5":3,"6":86,"124":3,"134":1,"135":4}}],["df",{"2":{"158":10,"159":12}}],["dp",{"2":{"149":3}}],["dy",{"2":{"120":2,"146":3}}],["dy2",{"2":{"120":2}}],["dy1",{"2":{"80":10,"120":2}}],["dyc",{"2":{"80":2}}],["dx",{"2":{"120":2,"146":3}}],["dx2",{"2":{"120":2}}],["dx1",{"2":{"80":10,"120":2}}],["dxc",{"2":{"80":2}}],["drop",{"2":{"57":1,"138":1,"146":1}}],["driven",{"2":{"17":1}}],["driving",{"2":{"17":1}}],["duplicated",{"2":{"55":2}}],["during",{"2":{"46":1}}],["due",{"2":{"45":1,"55":2}}],["datas",{"2":{"160":1}}],["datasets",{"2":{"157":1,"158":1}}],["dataset",{"2":{"157":1}}],["datainterpolations",{"2":{"143":1}}],["dataframes",{"2":{"158":2,"159":1}}],["dataframe",{"2":{"19":1,"157":1,"158":5,"159":2}}],["data",{"0":{"121":1},"2":{"17":1,"31":1,"121":1,"149":8,"158":1}}],["dataaspect",{"2":{"13":1,"14":1,"35":1,"38":1,"41":2,"44":1,"47":1,"59":2,"121":2,"144":1,"149":1}}],["dashboard",{"0":{"14":1},"2":{"13":1,"14":1}}],["d",{"2":{"1":2,"5":1,"6":1,"42":1,"141":1,"151":3}}],["deu",{"2":{"159":2}}],["demonstrates",{"2":{"158":1}}],["densify",{"2":{"145":3}}],["densifying",{"2":{"145":1}}],["densifies",{"2":{"143":1}}],["denoted",{"2":{"91":1}}],["denotes",{"2":{"46":1}}],["debug",{"2":{"134":1}}],["debugging",{"2":{"42":1}}],["de",{"2":{"91":2,"157":1}}],["derivation",{"2":{"55":1}}],["dealing",{"2":{"48":1}}],["delta",{"2":{"121":13}}],["delete",{"2":{"80":1,"97":1,"151":1}}],["deleteat",{"2":{"46":4,"151":1,"153":2}}],["delayed",{"2":{"46":10,"53":2,"55":2,"57":2}}],["delay",{"2":{"46":12,"52":2,"53":2,"54":2,"55":2,"56":2,"57":2}}],["depend",{"2":{"46":2}}],["depends",{"2":{"46":1,"51":1}}],["depending",{"2":{"1":1,"6":1,"31":1,"129":1}}],["depth",{"2":{"42":2}}],["desired",{"2":{"56":1}}],["despite",{"2":{"36":1}}],["describe",{"2":{"25":1}}],["described",{"2":{"6":1,"42":1,"45":1,"46":1}}],["deconstruct",{"2":{"122":1}}],["decomposition",{"2":{"26":1,"122":1}}],["decomposing",{"2":{"26":1}}],["decompose",{"2":{"19":1,"26":2,"42":4,"130":1}}],["decrease",{"2":{"45":1}}],["decreaseing",{"2":{"6":1,"149":1}}],["decision",{"2":{"32":1}}],["degeneracies",{"2":{"9":1}}],["degenerate",{"2":{"6":1,"42":1,"51":2,"55":1}}],["degrees",{"2":{"6":1,"35":1,"120":1,"145":1}}],["defauly",{"2":{"53":1}}],["default",{"2":{"1":2,"4":5,"6":11,"36":1,"39":2,"48":1,"52":1,"53":1,"54":1,"55":2,"56":1,"57":2,"60":2,"124":1,"129":2,"141":2,"149":2}}],["defaults",{"2":{"1":6,"4":2,"6":14,"126":3,"129":1}}],["defines",{"2":{"46":1,"122":1,"133":1}}],["define",{"2":{"41":1,"55":1,"62":1,"122":1,"127":1,"129":1,"160":2}}],["defined",{"2":{"4":1,"5":1,"6":3,"7":1,"30":1,"36":2,"42":1,"47":1,"48":4,"60":2,"119":1,"129":1,"146":1}}],["definition",{"2":{"4":1,"6":3,"63":5,"68":1,"146":1}}],["defintion",{"2":{"4":3,"6":3,"63":3}}],["deeper",{"2":{"1":1,"6":1,"128":1,"129":2}}],["detrimental",{"2":{"136":1}}],["details",{"2":{"124":3,"125":1,"144":2}}],["detect",{"2":{"121":2}}],["detection",{"2":{"121":1}}],["determined",{"2":{"46":1,"48":1}}],["determine",{"2":{"46":9,"48":3,"52":2,"54":2,"55":3,"56":2,"69":1,"83":1,"91":9,"97":1,"100":1,"110":1,"151":3,"157":1}}],["determines",{"2":{"39":1,"46":2,"55":1,"91":10}}],["determinant",{"2":{"6":1,"42":1}}],["det",{"2":{"0":1,"6":2,"42":4}}],["dig",{"2":{"129":1}}],["dirname",{"2":{"149":4}}],["dirty",{"2":{"148":1}}],["dir",{"2":{"121":22}}],["directive",{"2":{"129":1}}],["direction",{"2":{"6":1,"46":1,"63":5,"121":4}}],["directly",{"2":{"6":1,"22":1,"121":1,"145":1}}],["didn",{"2":{"57":1,"91":1,"126":1}}],["division",{"2":{"41":1}}],["div",{"2":{"6":1}}],["div>",{"2":{"6":1}}],["ditance",{"2":{"4":1,"6":1,"60":1}}],["dimensional",{"2":{"5":1,"6":1,"38":1,"42":1}}],["dimensions",{"2":{"3":1,"6":1,"97":2}}],["dimension",{"2":{"1":1,"3":4,"6":4,"80":2,"96":1,"97":4,"141":1}}],["distributed",{"2":{"158":2}}],["distinct",{"2":{"121":1}}],["dist",{"2":{"60":19,"91":2,"145":8,"151":40}}],["distance`",{"2":{"145":3,"146":1}}],["distances",{"2":{"59":1,"145":1,"150":5}}],["distance",{"0":{"58":2,"59":2},"1":{"59":2,"60":2},"2":{"0":4,"4":26,"6":46,"33":1,"42":13,"48":3,"58":2,"59":17,"60":92,"91":1,"122":1,"143":1,"144":5,"145":13,"146":14,"149":1,"150":3,"151":4,"152":1,"160":2}}],["disagree",{"2":{"39":1}}],["discussion",{"2":{"17":1,"51":1}}],["disparate",{"2":{"17":1}}],["dispatches",{"2":{"6":1,"36":1,"39":1,"42":1,"45":1,"48":1,"60":1,"63":1,"69":1,"83":1,"97":1,"100":1,"110":1}}],["dispatch",{"2":{"4":1,"6":4,"22":1,"32":1,"42":1,"63":1,"124":1,"126":1,"129":2}}],["display",{"2":{"13":1,"41":1}}],["disjoint",{"0":{"81":1,"82":1,"85":1,"86":1,"87":1,"88":1,"89":1},"1":{"82":1,"83":1},"2":{"0":2,"3":5,"6":7,"31":1,"33":1,"57":2,"81":1,"82":3,"83":10,"84":6,"85":14,"86":15,"87":8,"88":4,"89":4,"90":2,"91":5,"94":3,"135":2,"136":2,"138":7,"157":1}}],["diffs",{"2":{"36":4}}],["diff",{"2":{"6":2,"36":17,"52":5,"53":3,"97":3,"138":8}}],["differ",{"2":{"4":1,"6":1,"60":1}}],["differently",{"2":{"4":3,"6":4,"36":1,"39":2,"48":1}}],["different",{"2":{"3":1,"4":4,"6":6,"28":1,"31":1,"36":1,"39":4,"46":3,"48":1,"97":3,"127":1,"129":1,"136":2}}],["differences",{"0":{"53":1},"2":{"151":1}}],["difference",{"0":{"52":1},"2":{"0":1,"6":7,"11":1,"31":1,"33":1,"46":3,"52":12,"53":11,"56":1,"57":3,"135":1,"138":1,"145":1}}],["diffintersectingpolygons",{"2":{"0":1,"6":1,"135":1,"138":4}}],["doi",{"2":{"52":2,"54":2,"56":2,"91":1}}],["doing",{"2":{"25":1,"30":1,"129":1}}],["dot",{"2":{"36":2,"42":1,"55":9}}],["doable",{"2":{"9":1}}],["documenter",{"2":{"124":3,"125":1,"144":2}}],["documentation",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"0":1,"41":1}}],["docstring",{"2":{"124":6,"125":2,"144":4}}],["docstrings",{"0":{"123":1},"1":{"124":1},"2":{"7":1}}],["docs",{"2":{"121":1}}],["doc",{"2":{"9":1,"10":1}}],["does",{"0":{"30":1},"2":{"7":1,"22":1,"27":1,"44":1,"65":1,"68":3,"91":1}}],["doesn",{"2":{"4":1,"6":2,"39":1,"51":1,"63":1,"145":1,"159":1}}],["download",{"2":{"149":1}}],["down",{"2":{"6":1,"19":1,"21":1,"26":1,"42":1,"129":1}}],["doublets",{"2":{"159":2}}],["double",{"2":{"152":4}}],["doubled",{"2":{"6":1,"152":1}}],["douglas",{"2":{"147":1,"149":2,"151":1}}],["douglaspeucker",{"0":{"151":1},"2":{"0":1,"6":5,"149":5,"151":6}}],["done",{"0":{"10":1},"2":{"13":1,"14":1,"91":2,"121":7,"122":1,"136":1,"157":1}}],["don",{"2":{"4":2,"6":3,"46":4,"52":1,"55":1,"57":1,"63":6,"86":1,"91":1,"99":1,"103":1,"129":3,"146":1}}],["do",{"0":{"9":1,"31":1},"2":{"1":1,"6":2,"14":1,"31":1,"33":1,"36":1,"39":2,"42":2,"45":1,"48":1,"51":1,"57":3,"60":2,"62":1,"63":1,"78":1,"86":2,"87":1,"88":2,"91":1,"121":3,"122":1,"129":9,"131":1,"132":1,"137":1,"139":2,"142":1,"145":1,"149":1,"154":2,"155":2,"158":1,"159":1}}],["ay",{"2":{"120":2}}],["azimuth",{"2":{"120":2}}],["autmoatically",{"2":{"97":1}}],["away",{"2":{"80":1,"160":1}}],["against",{"2":{"63":1,"91":2,"145":1,"149":1}}],["again",{"2":{"55":1,"129":1}}],["a`",{"2":{"53":7,"55":3,"57":2}}],["a2",{"2":{"41":4,"55":8,"97":6}}],["a1",{"2":{"41":2,"46":9,"55":9,"97":6}}],["america",{"2":{"149":1}}],["am",{"2":{"91":1}}],["ambiguity",{"2":{"60":2,"129":5}}],["amount",{"2":{"38":1,"47":1}}],["amp",{"2":{"6":1,"9":1}}],["aiming",{"2":{"22":1}}],["axes",{"2":{"121":1}}],["ax",{"2":{"13":3,"14":3,"120":2}}],["axislegend",{"2":{"144":1,"148":1}}],["axis",{"2":{"13":2,"14":1,"35":1,"38":1,"41":4,"44":1,"47":1,"59":1,"121":2,"144":1,"149":1}}],["axs",{"2":{"13":2}}],["achieve",{"2":{"136":1}}],["across",{"2":{"127":1}}],["acceptable",{"2":{"91":1}}],["according",{"2":{"131":1,"136":1,"137":1,"158":1}}],["accordingly",{"2":{"46":1}}],["account",{"2":{"52":1,"54":1}}],["accumulators",{"2":{"42":1}}],["accumulator",{"2":{"42":1}}],["accumulate",{"2":{"39":1,"45":3}}],["accumulation",{"0":{"11":1},"2":{"42":1}}],["accuratearithmetic",{"2":{"11":2}}],["accurate",{"0":{"11":1},"2":{"11":3,"144":1}}],["acos",{"2":{"36":1}}],["action",{"2":{"28":2}}],["actions",{"2":{"28":2}}],["activate",{"2":{"22":1,"144":1}}],["actual",{"2":{"10":1,"42":1,"120":1,"132":1,"141":1,"145":1}}],["actually",{"2":{"9":1,"42":4,"57":3,"91":1}}],["actuall",{"2":{"1":1,"6":1,"154":1}}],["a>",{"2":{"6":1}}],["adapted",{"2":{"52":1,"54":1,"56":1,"120":1}}],["adaptive",{"2":{"7":1,"13":3,"14":2}}],["adjacent",{"2":{"46":1,"53":1,"55":1,"57":1}}],["advance",{"2":{"45":2}}],["advised",{"2":{"6":1,"126":1}}],["administrative",{"2":{"159":1}}],["admin",{"2":{"11":1,"149":2}}],["adm0",{"2":{"11":7}}],["additionally",{"2":{"46":3,"63":1}}],["addition",{"2":{"41":1,"57":1}}],["adding",{"2":{"4":1,"6":4,"7":1,"57":2,"140":1,"143":1,"145":2,"146":1}}],["added",{"2":{"6":1,"36":1,"46":6,"48":1,"57":2,"124":1,"129":1,"138":2,"151":1}}],["add",{"2":{"3":1,"6":1,"7":2,"42":1,"46":16,"48":1,"51":4,"52":3,"54":1,"55":2,"56":2,"57":9,"80":1,"126":1,"129":1,"143":1,"145":1,"151":9,"157":1}}],["availible",{"2":{"45":1}}],["available",{"0":{"135":1},"2":{"6":3,"22":1,"33":1,"126":1,"134":3,"143":1,"144":1,"146":1,"149":1,"153":1}}],["average",{"2":{"40":3,"45":4}}],["avoid",{"2":{"5":1,"6":7,"42":1,"52":1,"54":1,"56":1,"57":1,"129":5,"146":1,"150":1,"151":1,"152":1}}],["after",{"2":{"6":8,"36":1,"46":3,"129":1,"149":2}}],["ab",{"2":{"46":3,"52":1,"54":1,"56":1}}],["ability",{"2":{"22":1,"25":1}}],["able",{"2":{"22":1,"28":1}}],["about",{"2":{"6":1,"20":1,"32":2,"42":2,"130":1}}],["above",{"2":{"4":1,"6":1,"36":1,"45":1,"46":1,"55":1,"57":1,"134":1}}],["abs",{"2":{"36":1,"39":4,"45":1,"48":2,"80":8,"97":2,"121":2,"152":1,"160":1}}],["absolute",{"2":{"4":1,"6":1,"38":1,"39":2}}],["abstractpolygon",{"2":{"129":1}}],["abstractpolygontrait",{"2":{"60":1}}],["abstractpoint",{"2":{"129":1}}],["abstractface",{"2":{"129":1}}],["abstractfloat",{"2":{"33":1,"36":1,"39":2,"46":1,"48":2,"51":1,"52":1,"54":1,"55":1,"56":1,"60":8}}],["abstractmesh",{"2":{"129":1}}],["abstractmulticurvetrait",{"2":{"75":1,"76":1,"89":1,"90":1,"106":1,"107":1,"116":1,"117":1}}],["abstractmatrix",{"2":{"6":1,"121":4}}],["abstractcurvetrait",{"2":{"36":1,"39":1,"48":1,"71":1,"74":1,"75":1,"80":1,"85":1,"89":1,"102":1,"105":1,"106":1,"112":1,"115":1,"116":1,"120":1,"149":2,"156":3}}],["abstractarrays",{"2":{"127":1}}],["abstractarray",{"2":{"6":1,"124":1,"129":6,"156":2}}],["abstract",{"2":{"6":3,"42":3,"126":1,"133":1,"134":4,"135":1,"149":3}}],["abstractvector",{"2":{"5":1,"6":1,"42":26}}],["abstractgeometrytrait`",{"2":{"134":1}}],["abstractgeometrytrait",{"2":{"6":3,"39":2,"48":1,"60":1,"76":1,"90":1,"107":1,"117":1,"124":1,"127":1,"134":4,"135":2,"156":5}}],["abstractgeometry",{"2":{"3":4,"6":4,"66":2,"79":2,"129":1}}],["abstracttrait",{"2":{"1":2,"3":2,"6":8,"51":1,"53":2,"55":4,"57":2,"97":4,"122":1,"124":2,"126":2,"129":11}}],["abstractbarycentriccoordinatemethod",{"2":{"0":1,"5":1,"6":7,"42":18}}],["attempts",{"2":{"91":1}}],["attach",{"2":{"1":2,"4":1,"6":5,"126":1}}],["atomic",{"2":{"7":1}}],["at",{"2":{"3":4,"5":1,"6":6,"9":1,"26":1,"28":1,"32":1,"36":2,"38":1,"39":1,"41":1,"42":2,"46":4,"48":2,"55":1,"57":2,"91":17,"94":2,"97":4,"99":1,"100":1,"103":3,"104":2,"105":2,"106":1,"107":1,"110":1,"116":1,"120":1,"127":1,"129":1,"144":1,"146":1,"151":1,"153":1}}],["arbitrarily",{"2":{"127":1}}],["arbitrary",{"2":{"22":1,"40":1,"122":1}}],["around",{"2":{"41":1,"42":2,"51":1,"59":1,"63":1,"149":1,"158":1}}],["argmin",{"2":{"153":1}}],["argtypes",{"2":{"142":1,"145":1}}],["args",{"2":{"13":2}}],["argumenterror",{"2":{"57":1,"129":5}}],["argument",{"2":{"4":5,"6":9,"36":1,"39":2,"45":1,"48":1,"52":1,"54":1,"56":1,"60":2,"129":2}}],["arguments",{"2":{"1":1,"3":1,"6":4,"46":1,"69":2,"83":1,"100":1,"110":1,"141":1,"145":2,"146":1}}],["arithmetic",{"2":{"11":1}}],["archgdal",{"2":{"31":1}}],["arc",{"2":{"6":1,"145":1}}],["array",{"2":{"4":1,"6":2,"39":1,"48":1,"129":7,"150":1,"153":1}}],["arrays",{"2":{"1":1,"6":1,"30":1,"129":2}}],["aren",{"2":{"4":3,"6":5,"51":1,"53":1,"55":3,"57":4,"63":3,"135":2,"138":2}}],["are",{"2":{"1":1,"3":4,"4":18,"5":2,"6":47,"9":2,"17":1,"22":2,"28":2,"30":3,"32":1,"35":1,"36":8,"38":1,"39":2,"40":6,"42":11,"44":1,"45":3,"46":27,"48":6,"51":3,"52":3,"53":14,"54":2,"55":13,"56":5,"57":9,"59":1,"60":1,"62":3,"63":26,"65":1,"69":7,"71":1,"72":3,"73":3,"74":1,"76":1,"82":1,"83":5,"85":1,"86":1,"87":1,"89":1,"90":1,"91":11,"97":7,"100":5,"102":1,"104":2,"109":1,"110":5,"112":1,"113":3,"114":3,"115":1,"117":1,"120":1,"121":2,"124":1,"126":1,"127":1,"129":4,"130":1,"131":1,"132":1,"134":1,"135":3,"136":1,"137":1,"138":2,"140":1,"144":1,"145":1,"146":1,"149":4,"151":1,"153":2,"155":1,"157":3,"158":6,"159":1,"160":1}}],["area2",{"2":{"45":4}}],["area1",{"2":{"45":4}}],["areas",{"2":{"4":2,"6":2,"39":3,"152":2}}],["area",{"0":{"37":2,"38":2},"1":{"38":2,"39":2},"2":{"0":5,"4":15,"6":25,"11":6,"33":1,"37":2,"38":9,"39":61,"43":1,"44":3,"45":49,"46":7,"47":2,"48":44,"56":2,"57":1,"97":1,"122":1,"135":2,"138":2,"149":2,"152":4}}],["ask",{"2":{"31":1}}],["aspect",{"2":{"13":1,"14":1,"35":1,"38":1,"41":2,"44":1,"47":1,"59":2,"121":2,"144":1,"149":1}}],["assemble",{"2":{"132":1}}],["assert",{"2":{"42":23,"45":1,"51":1,"53":1,"55":1,"146":1,"156":1}}],["assigned",{"2":{"46":1,"158":1}}],["assume",{"2":{"97":2,"129":3,"131":1,"138":1}}],["assumed",{"2":{"39":1,"63":1,"91":1}}],["assumes",{"2":{"6":1,"46":1,"60":1,"145":1,"153":1}}],["associativity",{"2":{"27":1}}],["associated",{"0":{"1":1},"2":{"40":2}}],["as",{"2":{"1":9,"3":18,"4":6,"5":1,"6":79,"7":1,"11":2,"13":3,"14":3,"15":3,"17":1,"25":2,"26":2,"28":1,"30":1,"31":2,"32":1,"35":2,"36":4,"38":2,"39":3,"40":4,"41":1,"42":4,"44":2,"45":1,"46":13,"47":2,"48":5,"50":3,"51":5,"52":8,"53":1,"54":7,"55":3,"56":7,"57":5,"59":3,"60":1,"62":2,"63":2,"65":2,"66":2,"68":3,"69":3,"78":2,"79":2,"80":2,"82":2,"83":3,"91":7,"93":2,"94":2,"96":2,"97":2,"99":2,"100":3,"102":1,"109":2,"110":3,"120":8,"121":2,"122":3,"124":1,"126":4,"127":2,"128":2,"129":17,"131":2,"132":2,"134":1,"135":1,"137":2,"140":1,"141":3,"143":2,"144":2,"145":3,"148":2,"149":7,"151":2,"154":3,"156":2,"157":2,"158":3,"159":2}}],["alone",{"2":{"129":1}}],["along",{"2":{"4":4,"6":5,"22":1,"46":2,"48":2,"55":3,"63":4,"91":1}}],["although",{"2":{"113":1,"114":1}}],["alternate",{"2":{"46":1}}],["alternative",{"2":{"46":1}}],["alex",{"2":{"23":1}}],["already",{"2":{"22":2,"63":1,"91":2,"151":1}}],["alg=nothing",{"2":{"149":1}}],["alg`",{"2":{"149":1}}],["alg",{"2":{"6":2,"149":19,"150":3,"151":8,"152":3,"153":7}}],["algorithms",{"2":{"6":3,"22":1,"131":1,"146":1,"147":1,"149":4,"151":1,"153":1}}],["algorithm",{"0":{"150":1,"151":1,"152":1},"2":{"6":8,"41":1,"46":2,"48":1,"51":3,"52":1,"54":1,"56":1,"91":1,"149":8,"150":1,"151":3,"152":1}}],["allocations",{"2":{"5":1,"6":1,"42":1}}],["allows",{"2":{"11":1,"19":1,"26":1,"31":1,"32":1,"69":2,"71":3,"72":3,"73":3,"74":1,"83":2,"85":3,"86":3,"87":2,"88":1,"100":1,"103":1,"104":1,"105":1,"110":3,"112":3,"113":3,"114":3,"115":1,"122":1,"157":1}}],["allowed",{"2":{"6":1,"69":3,"83":3,"91":5,"100":5,"102":1,"103":2,"110":3,"149":1}}],["allow",{"2":{"1":1,"6":1,"31":1,"69":7,"80":3,"83":7,"91":62,"100":10,"110":10,"154":1}}],["all",{"2":{"1":3,"3":2,"4":3,"6":13,"9":1,"11":7,"17":1,"22":1,"30":1,"33":2,"36":5,"39":3,"42":1,"46":12,"48":3,"52":1,"53":3,"55":3,"57":5,"59":1,"63":2,"65":1,"72":3,"73":3,"76":1,"89":1,"90":1,"91":7,"97":4,"109":1,"117":1,"120":1,"124":1,"127":2,"128":1,"129":8,"132":1,"134":1,"136":1,"139":1,"140":1,"149":1,"154":2,"155":1,"157":1}}],["always",{"2":{"1":6,"4":6,"6":9,"17":1,"38":1,"39":4,"48":2,"59":1,"60":1,"63":1,"129":1,"141":4,"157":1}}],["also",{"2":{"1":2,"6":10,"22":1,"31":1,"36":1,"39":2,"45":2,"46":3,"48":1,"52":1,"54":1,"55":1,"56":1,"59":1,"60":2,"63":3,"97":1,"126":1,"127":1,"129":1,"132":1,"135":3,"138":2,"142":1,"143":1,"144":1,"145":1,"154":1}}],["a",{"0":{"31":1},"2":{"1":13,"3":5,"4":79,"5":1,"6":176,"7":3,"9":1,"11":1,"15":2,"17":2,"19":2,"20":2,"22":5,"25":1,"26":6,"28":3,"30":3,"31":4,"32":2,"35":3,"36":22,"38":11,"39":20,"40":13,"41":4,"42":11,"44":5,"45":8,"46":239,"47":2,"48":17,"50":3,"51":4,"52":37,"53":29,"54":36,"55":43,"56":34,"57":45,"59":15,"60":27,"62":2,"63":54,"65":2,"68":1,"69":3,"71":5,"72":3,"73":2,"75":2,"76":2,"78":2,"80":1,"82":1,"83":3,"85":4,"86":3,"87":1,"89":2,"90":2,"91":50,"93":2,"94":7,"96":5,"97":20,"99":2,"100":4,"102":4,"103":2,"104":2,"105":1,"106":2,"107":2,"109":1,"110":3,"112":5,"113":2,"114":2,"116":2,"117":2,"119":1,"120":4,"121":21,"122":4,"124":2,"126":4,"127":4,"129":34,"130":6,"131":2,"132":2,"133":5,"134":5,"135":9,"136":8,"138":6,"139":3,"140":2,"141":8,"142":3,"143":5,"144":4,"145":8,"146":10,"148":3,"149":5,"152":3,"153":1,"154":2,"155":1,"156":2,"157":5,"158":8,"159":3,"160":3}}],["annotation",{"2":{"126":1}}],["angels",{"2":{"36":1}}],["angle",{"2":{"36":35,"120":1}}],["angles",{"0":{"34":1,"35":1},"1":{"35":1,"36":1},"2":{"0":2,"4":10,"6":10,"33":1,"34":1,"35":4,"36":42}}],["answers",{"2":{"22":1,"136":1}}],["answer",{"2":{"6":3,"52":1,"54":1,"56":1}}],["another",{"2":{"3":1,"6":1,"22":1,"46":2,"59":1,"65":1,"68":1,"71":1,"73":1,"74":1,"78":1,"82":1,"85":1,"86":1,"87":1,"88":1,"91":1,"93":1,"96":1,"97":1,"99":1,"102":1,"103":1,"104":1,"105":1,"109":1,"112":1,"113":1,"114":1,"115":1,"141":1}}],["anonymous",{"2":{"1":1,"6":1,"154":1}}],["an",{"2":{"1":3,"4":11,"5":1,"6":24,"9":1,"13":1,"14":1,"22":1,"26":1,"28":1,"31":2,"35":1,"36":4,"38":1,"39":2,"41":1,"42":3,"44":1,"46":10,"47":2,"48":2,"50":1,"51":1,"52":2,"53":5,"54":2,"55":6,"56":2,"57":2,"59":2,"60":5,"62":1,"63":1,"65":1,"68":2,"71":2,"78":1,"82":1,"91":13,"93":1,"96":1,"97":1,"99":1,"109":1,"112":2,"113":1,"114":1,"124":1,"127":1,"128":1,"129":8,"132":1,"140":1,"141":1,"145":1,"154":2,"156":1,"158":1}}],["anything",{"2":{"41":1}}],["anyone",{"2":{"23":1}}],["any",{"2":{"1":3,"3":1,"4":2,"6":15,"17":1,"19":1,"26":1,"32":1,"40":2,"45":1,"46":7,"48":1,"51":1,"53":1,"55":4,"57":1,"60":2,"70":2,"71":1,"74":1,"82":1,"84":2,"85":1,"86":2,"87":1,"88":2,"91":8,"97":2,"101":2,"111":2,"115":1,"122":2,"124":1,"129":2,"132":1,"133":1,"134":3,"135":4,"138":4,"141":2,"143":1,"145":1,"146":1,"151":1,"156":1,"157":2,"158":2}}],["and",{"0":{"1":1,"28":1,"30":1,"32":1,"37":1,"53":1,"55":1,"57":1,"58":1},"1":{"38":1,"39":1,"59":1,"60":1},"2":{"0":2,"1":9,"3":11,"4":18,"6":77,"7":1,"9":2,"17":2,"19":2,"20":1,"22":5,"25":4,"26":4,"28":2,"30":1,"31":2,"32":3,"33":1,"36":13,"38":1,"39":7,"40":2,"41":2,"42":20,"43":2,"44":1,"45":29,"46":58,"47":2,"48":18,"50":1,"51":4,"52":4,"53":15,"54":4,"55":20,"56":6,"57":15,"59":2,"60":13,"62":2,"63":13,"65":3,"66":2,"68":2,"69":3,"72":3,"73":4,"74":1,"78":2,"79":2,"80":1,"83":3,"86":3,"87":1,"88":1,"91":36,"93":1,"96":2,"97":3,"100":2,"104":2,"105":2,"109":3,"110":4,"112":2,"113":3,"114":3,"115":1,"120":2,"121":2,"122":8,"124":1,"126":3,"127":2,"128":3,"129":23,"130":1,"131":2,"132":1,"133":1,"134":4,"135":2,"136":1,"139":2,"140":2,"141":2,"144":1,"145":5,"146":4,"147":2,"148":1,"149":8,"151":6,"152":1,"153":1,"154":1,"157":2,"158":4,"159":2}}],["apart",{"2":{"138":1}}],["appears",{"2":{"131":1}}],["append",{"2":{"36":1,"46":5,"52":1,"53":2,"55":2,"56":1,"57":5,"138":2}}],["appropriately",{"2":{"158":1}}],["approximately",{"2":{"144":1}}],["approx",{"2":{"55":2}}],["approach",{"2":{"27":1}}],["applies",{"2":{"127":2}}],["applied",{"2":{"6":3,"28":1,"124":1,"129":2,"133":2,"134":2,"135":1}}],["application",{"2":{"1":1,"6":3,"129":1,"132":1,"134":3,"135":1,"138":2,"143":1,"146":1}}],["apply`",{"2":{"129":1}}],["applys",{"2":{"39":1,"48":1}}],["applyreduce",{"0":{"27":1},"2":{"0":2,"1":1,"6":1,"19":1,"25":1,"27":2,"36":1,"39":1,"45":2,"48":1,"60":2,"122":3,"124":1,"129":39}}],["apply",{"0":{"1":1,"19":1,"26":1,"30":1,"127":1},"1":{"27":1},"2":{"0":2,"1":4,"6":7,"19":3,"25":1,"26":5,"28":1,"30":1,"32":1,"122":5,"124":1,"126":1,"127":4,"128":1,"129":56,"134":4,"135":1,"139":3,"140":1,"141":1,"145":1,"146":1,"149":2,"154":3,"155":2}}],["april",{"0":{"7":1}}],["apis",{"2":{"25":1}}],["api",{"0":{"0":1,"42":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"0":1,"6":3,"32":1,"42":1,"145":1,"149":1}}],["slow",{"2":{"159":1}}],["slope2",{"2":{"120":2}}],["slope1",{"2":{"120":2}}],["slidergrid",{"2":{"14":1}}],["sliders",{"2":{"14":3}}],["slighly",{"2":{"4":1,"6":1,"39":1}}],["slightly",{"2":{"4":1,"6":1,"39":1}}],["sx^2",{"2":{"55":1}}],["sx",{"2":{"55":7}}],["s3",{"2":{"46":3}}],["scalefactor",{"2":{"145":3}}],["scattered",{"2":{"158":1}}],["scatter",{"2":{"44":1,"59":2,"62":2,"65":2,"68":1,"78":1,"82":2,"96":2,"109":2,"158":1}}],["schema",{"2":{"129":6}}],["scheme",{"2":{"45":1}}],["scenario",{"2":{"91":2}}],["scene",{"2":{"14":1}}],["skip",{"2":{"39":1,"153":4}}],["skygering",{"2":{"7":1}}],["square",{"2":{"60":1,"150":1,"151":1}}],["squared",{"2":{"6":2,"48":2,"60":12,"150":2,"151":7}}],["sqrt",{"2":{"36":2,"45":1,"60":3}}],["sgn",{"2":{"36":5}}],["smallest",{"2":{"36":2}}],["sym10100477",{"2":{"91":1}}],["symbol=",{"2":{"80":1}}],["sy^2",{"2":{"55":1}}],["sy",{"2":{"55":7}}],["syntax",{"2":{"22":1}}],["system",{"2":{"1":2,"141":2}}],["sf",{"2":{"22":2}}],["src",{"2":{"6":1}}],["sᵢ₋₁",{"2":{"42":25}}],["sᵢ₊₁",{"2":{"6":2,"42":41}}],["sᵢ",{"2":{"6":4,"42":46}}],["switches",{"2":{"55":1,"57":1}}],["switch",{"2":{"22":1,"46":1,"57":1}}],["switching",{"2":{"6":1,"48":1}}],["swap",{"2":{"6":1,"57":1,"60":2,"139":1}}],["swapped",{"2":{"3":1,"6":1,"66":1,"69":1,"79":1,"80":1,"94":1,"97":1}}],["swapping",{"2":{"1":1,"6":1,"129":1}}],["s2",{"2":{"6":4,"22":1,"42":6,"46":3}}],["s1",{"2":{"6":3,"42":6,"46":3}}],["saved",{"2":{"63":1}}],["save",{"2":{"36":1}}],["samples",{"2":{"13":1}}],["sample",{"2":{"13":1}}],["same",{"2":{"1":1,"3":2,"4":12,"6":24,"26":1,"36":3,"39":1,"46":15,"48":1,"51":1,"52":3,"54":1,"56":1,"57":1,"59":1,"62":2,"63":30,"91":2,"96":1,"97":8,"124":1,"127":1,"129":7,"130":1,"135":2,"137":1,"138":2,"144":1}}],["say",{"2":{"6":1,"42":1,"145":1}}],["span",{"2":{"158":1}}],["spatial",{"0":{"157":1},"1":{"158":1,"159":1,"160":1},"2":{"157":6,"158":3,"160":1}}],["spawn",{"2":{"129":5}}],["space",{"2":{"6":2,"17":1,"22":1,"36":1,"38":1,"91":1,"145":1,"146":1}}],["sp",{"2":{"91":2}}],["split",{"2":{"51":1}}],["speed",{"2":{"22":1}}],["specialized",{"2":{"17":1}}],["specify",{"2":{"6":1,"124":1,"129":1,"157":1}}],["specification",{"2":{"131":1,"134":1,"136":1,"137":1}}],["specifically",{"2":{"6":2,"42":3,"147":1,"157":1}}],["specific",{"2":{"46":1,"69":1,"83":1,"100":1,"110":1,"129":5}}],["specified",{"2":{"3":1,"6":2,"46":1,"53":2,"55":2,"57":2,"97":1,"127":1,"149":1}}],["searchsortedfirst",{"2":{"151":1}}],["seg2",{"2":{"120":2}}],["seg1",{"2":{"120":3}}],["seg",{"2":{"91":23,"94":2,"97":7}}],["segmentation",{"2":{"144":1}}],["segments",{"2":{"31":1,"33":1,"35":2,"36":1,"44":1,"45":2,"46":2,"48":1,"55":1,"91":18,"145":1,"146":3}}],["segmentization",{"2":{"143":1}}],["segmentizing",{"2":{"6":3,"144":1,"145":2,"146":1}}],["segmentized",{"2":{"144":1}}],["segmentizes",{"2":{"143":1}}],["segmentizemethod",{"2":{"6":1,"145":3,"146":2}}],["segmentize",{"0":{"143":1},"1":{"144":1,"145":1,"146":1},"2":{"0":1,"6":3,"22":1,"33":1,"122":1,"143":1,"144":5,"145":11,"146":13}}],["segment",{"2":{"4":4,"6":7,"36":1,"45":5,"48":3,"50":1,"60":2,"80":3,"91":43,"97":3,"120":2,"143":1,"145":2,"146":1}}],["separate",{"2":{"126":1,"129":1,"158":1}}],["separately",{"2":{"42":1}}],["seperates",{"2":{"91":1}}],["seperate",{"2":{"46":1}}],["sense",{"2":{"39":1,"60":1}}],["several",{"2":{"28":2,"39":1,"130":1,"138":1}}],["section",{"2":{"91":3,"96":1}}],["sections",{"2":{"10":1}}],["seconds=1",{"2":{"145":3,"149":8}}],["secondary",{"2":{"3":3,"6":3,"66":1,"69":1,"110":1}}],["second",{"2":{"3":8,"6":9,"46":1,"55":3,"63":1,"65":2,"66":1,"68":1,"69":1,"72":1,"73":1,"74":1,"79":2,"83":2,"91":3,"100":1,"109":1,"110":1,"113":1,"114":1,"115":2,"157":1}}],["self",{"2":{"9":2}}],["selection",{"2":{"14":1}}],["select",{"2":{"6":1,"126":1}}],["seem",{"2":{"17":1}}],["see",{"2":{"6":3,"7":1,"19":1,"44":1,"60":1,"62":1,"65":1,"68":1,"82":1,"91":5,"93":1,"96":1,"99":1,"109":1,"121":2,"131":1,"132":1,"134":1,"135":3,"137":1,"138":2,"144":2,"158":2}}],["serve",{"2":{"6":1,"42":1}}],["setup=",{"2":{"69":1,"83":1,"100":1,"110":1}}],["sets",{"2":{"46":1}}],["setting",{"2":{"31":1}}],["set",{"0":{"31":1},"2":{"3":2,"4":7,"6":19,"31":1,"36":1,"40":2,"42":8,"46":3,"52":2,"54":2,"56":2,"62":2,"63":10,"69":1,"80":1,"83":1,"91":2,"97":1,"100":1,"110":1,"120":1,"121":1,"135":2,"138":2,"151":2,"158":3}}],["sve",{"2":{"1":1,"6":1,"154":1}}],["svector",{"2":{"1":14,"6":14,"46":5,"52":1,"57":6,"154":13}}],["solution",{"2":{"91":1}}],["solid",{"2":{"6":1}}],["south",{"2":{"48":7}}],["sources",{"2":{"22":1}}],["source",{"2":{"1":10,"3":19,"4":22,"5":3,"6":88,"80":2,"124":3,"134":1,"135":4,"141":3}}],["sort",{"2":{"46":4,"51":2,"55":1,"56":2,"91":1,"97":2,"151":1}}],["sorted",{"2":{"28":1,"46":1,"151":5,"157":1}}],["something",{"2":{"10":1}}],["some",{"2":{"3":1,"6":3,"9":1,"21":1,"25":1,"42":4,"63":1,"91":3,"97":1,"122":2,"127":2,"129":2,"133":1,"134":2,"135":1,"153":1,"157":1,"160":1}}],["so",{"2":{"1":1,"4":4,"6":9,"9":1,"17":1,"25":1,"27":1,"33":1,"41":1,"42":1,"46":1,"47":1,"56":2,"57":2,"59":1,"60":1,"62":1,"63":4,"65":1,"82":1,"91":2,"93":1,"109":1,"124":1,"129":7,"143":1,"144":1,"145":3,"146":1,"153":1,"154":1}}],["step",{"2":{"46":7,"52":1,"53":3,"54":1,"55":3,"56":1,"57":3,"156":1}}],["stored",{"2":{"46":2,"158":1}}],["stores",{"2":{"46":1}}],["store",{"2":{"42":1}}],["stopping",{"2":{"151":2}}],["stops",{"2":{"127":1}}],["stop",{"2":{"26":2,"80":3,"91":4,"97":3}}],["stuff",{"2":{"23":1}}],["style",{"2":{"6":1}}],["style=",{"2":{"6":1}}],["standardized",{"2":{"91":1}}],["standards",{"2":{"91":1}}],["stay",{"2":{"57":1}}],["stackoverflow",{"2":{"55":1}}],["stack",{"2":{"51":1}}],["states",{"2":{"149":1}}],["state",{"2":{"56":1,"159":9}}],["statement",{"0":{"22":1}}],["status",{"2":{"46":25,"53":4,"55":5,"57":4}}],["statistics",{"2":{"13":2,"33":1}}],["staticarray",{"2":{"42":1}}],["staticarrays",{"2":{"33":1,"46":5,"52":1,"57":6,"154":2}}],["staticarraysco",{"2":{"1":1,"6":1,"154":1}}],["staticarrayscore",{"2":{"1":10,"6":10,"42":1,"154":10}}],["statica",{"2":{"1":1,"6":1,"154":1}}],["stability",{"2":{"20":1,"31":1}}],["stable",{"2":{"13":1,"32":1,"146":1}}],["stage",{"2":{"7":1}}],["started",{"2":{"46":1}}],["starting",{"2":{"45":2,"46":2,"48":1,"138":4}}],["startvalue",{"2":{"14":4}}],["start",{"2":{"6":1,"26":1,"36":7,"42":1,"46":67,"48":17,"53":4,"55":5,"57":5,"63":1,"80":4,"91":44,"97":3,"112":1,"130":1,"151":13}}],["structs",{"2":{"28":1,"134":1}}],["structures",{"2":{"122":1}}],["structure",{"2":{"6":2,"124":1,"129":1,"139":1}}],["struct",{"2":{"6":1,"42":2,"46":2,"126":4,"132":1,"138":2,"145":2,"150":1,"151":1,"152":1}}],["strings",{"2":{"6":1,"45":1,"55":1}}],["string",{"2":{"1":2,"14":1,"44":1,"45":1,"141":2}}],["still",{"2":{"0":1,"39":1,"45":1,"46":3,"68":1}}],["suite",{"2":{"145":5,"149":13}}],["suggestion",{"2":{"142":1}}],["surrounds",{"2":{"91":1}}],["sure",{"2":{"9":1,"36":1,"46":2,"60":1,"97":1,"153":1}}],["suppose",{"2":{"159":1,"160":1}}],["support",{"2":{"143":1,"160":1}}],["supports",{"2":{"41":1,"42":1,"160":2}}],["supported",{"2":{"31":1}}],["supertype",{"2":{"6":1,"42":1}}],["sun",{"2":{"24":1,"91":1}}],["sukumar",{"2":{"6":1,"42":1}}],["summation",{"2":{"91":2}}],["sum=1",{"2":{"42":1}}],["sum",{"2":{"4":2,"6":3,"11":6,"38":1,"39":2,"40":2,"42":8,"48":1,"60":2,"120":4,"153":1,"156":4}}],["sublevel",{"2":{"159":1}}],["subgeom1",{"2":{"129":2}}],["subgeom",{"2":{"129":3}}],["subject",{"2":{"46":1}}],["subtype",{"2":{"129":1}}],["subtypes",{"2":{"6":2,"42":2}}],["subtracted",{"2":{"120":1}}],["subtitle",{"2":{"13":1,"41":2,"145":1,"149":2}}],["sub",{"2":{"4":6,"6":7,"36":1,"39":3,"48":1,"53":6,"55":3,"57":4,"60":2,"75":2,"76":2,"89":2,"90":2,"106":2,"107":2,"116":2,"117":2,"129":3,"136":4,"137":2,"138":4}}],["substituted",{"2":{"1":1,"6":1,"129":1}}],["such",{"2":{"1":1,"4":1,"6":2,"38":1,"50":1,"127":1,"129":1,"140":1}}],["shewchuck",{"2":{"7":1}}],["short",{"2":{"129":1}}],["show",{"2":{"9":1,"11":1,"13":1,"14":1,"22":1,"41":1,"157":2}}],["shoelace",{"2":{"4":1,"6":1,"39":2,"48":1}}],["shouldn",{"2":{"55":1}}],["should",{"2":{"1":1,"4":1,"6":13,"17":1,"25":1,"26":1,"28":2,"36":3,"39":1,"45":1,"46":3,"47":1,"63":1,"91":4,"124":1,"129":2,"131":1,"134":4,"135":2,"146":1,"149":2}}],["sharing",{"2":{"82":1}}],["share",{"2":{"4":7,"6":8,"62":2,"63":8,"86":2,"87":1,"88":1,"97":1,"105":1}}],["shared",{"0":{"153":1},"2":{"3":1,"6":1,"46":3,"97":3}}],["shapes",{"2":{"60":1}}],["shape",{"2":{"44":1,"62":1,"137":1}}],["shaped",{"2":{"41":1}}],["shapely",{"2":{"22":1}}],["shapefile",{"2":{"19":1}}],["shallower",{"2":{"1":1,"6":1,"129":1}}],["sites",{"2":{"159":1}}],["sides",{"2":{"46":1,"131":1}}],["side",{"2":{"36":4,"46":20}}],["signals",{"2":{"128":1}}],["significantly",{"2":{"22":1}}],["sign",{"2":{"13":2,"14":2,"36":7,"39":2,"120":3}}],["signed",{"0":{"37":1,"38":1,"58":1,"59":1},"1":{"38":1,"39":1,"59":1,"60":1},"2":{"0":4,"4":15,"6":18,"11":3,"37":1,"38":5,"39":23,"46":7,"48":3,"58":1,"59":7,"60":19}}],["six",{"2":{"6":1,"149":1}}],["sizehint",{"2":{"46":2,"53":1,"146":1}}],["size",{"2":{"6":4,"13":2,"14":5,"41":1,"57":1,"121":3,"129":4,"149":1}}],["singed",{"2":{"60":1}}],["singlepoly",{"2":{"149":6}}],["single",{"2":{"4":6,"6":8,"31":1,"36":2,"39":1,"48":1,"63":5,"96":2,"135":2,"136":1,"138":2}}],["since",{"2":{"1":1,"36":1,"39":1,"45":1,"48":2,"56":1,"60":1,"63":1,"91":1,"97":2,"104":1,"126":1,"141":1,"159":1}}],["simulation",{"2":{"31":1}}],["simultaneously",{"2":{"28":1}}],["simplication",{"2":{"149":1}}],["simplifier",{"2":{"149":4}}],["simplified",{"2":{"31":1,"148":1}}],["simplifies",{"2":{"6":3,"150":1,"151":1,"152":1}}],["simplification",{"0":{"147":1},"1":{"148":1,"149":1},"2":{"6":2,"149":2}}],["simplifying",{"2":{"147":1}}],["simplify",{"0":{"150":1,"151":1,"152":1},"2":{"0":1,"6":15,"9":1,"33":1,"46":1,"122":1,"148":1,"149":39,"150":1,"151":2,"152":1}}],["simplifyalgs",{"2":{"153":1}}],["simplifyalg",{"2":{"0":1,"6":8,"149":5,"150":2,"151":2,"152":2}}],["simply",{"2":{"7":1,"38":1,"46":1,"55":1,"57":1,"66":1,"79":1,"94":1,"133":1,"141":1,"142":1,"145":1}}],["simple",{"0":{"158":1},"2":{"6":2,"42":1,"122":3,"126":1,"139":1,"141":1,"148":2,"149":2}}],["similarly",{"2":{"122":1}}],["similar",{"2":{"1":1,"6":3,"17":1,"19":1,"26":1,"129":1,"145":2,"146":1,"155":1}}],["s",{"0":{"20":1},"2":{"0":1,"6":7,"7":1,"9":1,"19":1,"22":5,"23":1,"26":1,"27":1,"36":1,"38":1,"39":4,"40":1,"41":2,"42":5,"44":3,"45":3,"46":3,"48":1,"50":1,"53":1,"55":19,"57":3,"60":1,"63":1,"78":2,"85":3,"86":4,"87":2,"91":9,"97":1,"105":1,"121":5,"122":2,"124":3,"125":1,"126":2,"129":1,"132":1,"135":4,"136":1,"138":3,"144":4,"145":1,"149":2,"153":4,"160":2}}],["fc",{"2":{"129":22,"149":3,"156":14}}],["fji",{"2":{"121":6}}],["f2",{"2":{"46":2}}],["f1",{"2":{"46":2}}],["f64",{"2":{"13":2,"14":2}}],["few",{"2":{"131":1}}],["fetch",{"2":{"129":2}}],["feb",{"0":{"8":1},"1":{"9":1,"10":1}}],["featured",{"2":{"22":1}}],["featurecollection",{"2":{"11":1,"26":1,"129":7}}],["featurecollectiontrait",{"2":{"1":1,"6":2,"124":1,"127":1,"129":14,"156":5}}],["features",{"0":{"70":1,"84":1,"101":1,"111":1},"2":{"1":1,"6":1,"11":1,"30":1,"128":1,"129":19}}],["featuretrait",{"2":{"1":2,"6":3,"70":4,"80":2,"84":4,"101":4,"111":4,"124":1,"127":3,"129":15,"156":5}}],["feature",{"2":{"1":4,"4":1,"6":8,"26":2,"30":1,"39":1,"48":1,"122":1,"128":1,"129":47,"149":2,"156":2}}],["fra",{"2":{"159":2}}],["framework",{"2":{"122":4}}],["fracs",{"2":{"46":13,"51":1}}],["frac",{"2":{"42":1,"46":2,"149":2}}],["fractional",{"2":{"55":1}}],["fractions",{"2":{"46":1,"55":2}}],["fraction",{"2":{"6":4,"55":2,"60":1,"149":1}}],["front",{"2":{"36":1}}],["from",{"2":{"1":3,"3":4,"4":16,"6":29,"7":1,"11":1,"22":1,"28":1,"30":1,"33":1,"39":2,"41":1,"42":4,"45":1,"46":5,"48":11,"51":1,"52":1,"53":3,"54":1,"55":4,"56":1,"57":6,"60":25,"83":2,"85":5,"86":4,"87":2,"88":1,"89":2,"91":6,"97":2,"120":2,"121":10,"124":3,"129":3,"138":1,"141":4,"143":1,"149":1,"150":1,"151":3,"152":1,"156":1,"157":1,"158":1,"160":1}}],["foldable",{"2":{"129":3}}],["follows",{"2":{"46":2,"69":1,"83":1,"100":1,"110":1,"121":1}}],["follow",{"2":{"21":1}}],["following",{"2":{"6":1,"42":1,"50":1,"131":1,"137":1,"149":1,"157":1}}],["foster",{"2":{"24":1}}],["focusing",{"2":{"17":1}}],["foundational",{"2":{"25":1}}],["found",{"2":{"6":8,"48":1,"51":1,"52":2,"54":2,"55":2,"56":2,"63":1,"127":3,"129":7,"146":1}}],["forward",{"2":{"55":1}}],["forwards",{"2":{"46":1,"53":1,"57":1}}],["format",{"2":{"51":1}}],["form",{"2":{"26":1,"46":2,"57":3,"129":1}}],["formed",{"2":{"4":2,"6":3,"35":1,"36":4,"42":1,"46":5,"56":1,"57":1,"151":1}}],["formula",{"2":{"4":1,"6":1,"39":2,"48":1}}],["force",{"2":{"1":1,"129":1,"141":1,"149":1}}],["for",{"0":{"53":1,"55":1,"57":1},"2":{"0":2,"1":3,"3":1,"4":4,"5":3,"6":39,"7":4,"9":2,"13":5,"14":1,"17":3,"19":1,"22":3,"26":1,"28":1,"30":1,"31":5,"33":1,"36":5,"39":8,"40":1,"41":1,"42":19,"45":7,"46":33,"48":11,"51":5,"52":3,"53":3,"54":2,"55":6,"56":2,"57":9,"59":2,"60":7,"63":13,"69":3,"75":1,"76":1,"78":1,"80":6,"83":2,"89":1,"90":1,"91":21,"94":2,"96":1,"97":9,"100":2,"106":1,"107":1,"110":3,"116":1,"117":1,"119":1,"120":5,"121":3,"122":3,"124":6,"125":2,"126":3,"129":6,"130":3,"131":2,"133":1,"134":5,"136":3,"137":1,"138":5,"140":1,"141":3,"143":4,"144":7,"145":6,"146":8,"147":3,"149":12,"150":2,"151":2,"152":1,"153":6,"156":7,"157":1,"159":2,"160":1}}],["fill",{"2":{"46":1,"146":3}}],["filled",{"2":{"46":5,"48":3,"59":1,"60":2,"91":16}}],["file",{"2":{"46":1,"69":3,"83":3,"100":3,"110":3,"121":1,"122":1,"133":1,"141":1,"146":1,"147":1}}],["filters",{"2":{"46":1}}],["filtering",{"2":{"6":1,"149":1}}],["filter",{"2":{"4":1,"6":2,"46":2,"121":2,"129":3,"138":2,"140":1,"149":1}}],["fine",{"2":{"144":1}}],["final",{"2":{"57":1,"134":4,"145":1}}],["finally",{"2":{"41":2,"55":1,"121":1,"129":3}}],["findmin",{"2":{"153":1}}],["findmax",{"2":{"149":1,"151":1}}],["findall",{"2":{"121":1,"134":1}}],["findnext",{"2":{"46":1}}],["findfirst",{"2":{"46":3,"51":2,"149":1}}],["finds",{"2":{"46":1,"48":1,"121":1}}],["find",{"2":{"36":6,"39":1,"46":5,"48":3,"51":2,"52":4,"54":2,"56":1,"60":3,"63":1,"91":7,"151":5,"159":1}}],["finish",{"2":{"9":1}}],["fit",{"2":{"25":1}}],["field",{"2":{"13":2,"46":2}}],["figure",{"2":{"13":1,"14":1,"38":1,"41":2}}],["fig",{"2":{"13":6,"14":6}}],["fix1",{"2":{"129":2,"146":1}}],["fixme",{"2":{"120":1}}],["fix2",{"2":{"46":2}}],["fixes",{"2":{"22":1}}],["fixed",{"2":{"6":3,"52":1,"54":1,"56":1}}],["fix",{"0":{"28":1},"2":{"6":9,"9":3,"15":3,"22":1,"25":1,"28":1,"52":1,"53":10,"54":1,"55":11,"56":1,"57":10,"131":1,"133":1,"134":1,"137":1}}],["first",{"2":{"3":9,"6":10,"36":14,"39":7,"41":1,"42":9,"45":1,"46":15,"48":2,"51":1,"52":2,"54":1,"55":4,"56":3,"60":8,"63":4,"65":2,"66":2,"68":1,"69":2,"72":1,"73":1,"74":1,"79":2,"83":3,"91":23,"97":1,"100":2,"102":1,"109":1,"110":2,"113":1,"114":1,"115":2,"120":1,"121":1,"129":6,"131":1,"146":3,"150":1,"151":2,"156":2,"157":1,"158":1}}],["fair",{"2":{"144":1}}],["fail",{"2":{"1":1,"6":2,"129":6,"145":1}}],["fallback",{"2":{"129":1}}],["falses",{"2":{"46":2,"51":1,"52":1,"54":1}}],["false",{"0":{"32":1},"2":{"1":29,"3":7,"4":3,"6":53,"36":2,"39":1,"41":5,"46":22,"48":4,"51":1,"52":1,"53":3,"55":1,"56":4,"60":2,"62":2,"63":27,"65":2,"69":7,"71":2,"72":4,"73":1,"74":1,"75":1,"76":1,"78":2,"80":10,"83":8,"85":1,"86":4,"89":1,"90":1,"91":35,"94":2,"97":18,"100":7,"102":3,"103":4,"104":1,"106":1,"107":1,"109":1,"110":6,"112":2,"113":4,"114":1,"115":1,"116":1,"117":1,"120":11,"121":10,"126":2,"129":18,"131":16,"137":44,"138":4,"146":2,"149":1,"153":2,"154":20,"156":2,"157":1}}],["fashion",{"2":{"38":1}}],["faster",{"2":{"42":1,"129":1}}],["fast",{"2":{"12":1}}],["fancis",{"2":{"6":1,"42":1}}],["f",{"2":{"1":11,"6":15,"15":1,"26":3,"27":1,"30":2,"35":1,"38":2,"41":4,"44":2,"46":17,"47":2,"50":2,"52":2,"53":2,"54":2,"55":2,"56":2,"57":2,"59":5,"62":2,"65":2,"68":2,"78":2,"82":2,"91":3,"93":2,"96":2,"99":2,"109":2,"121":5,"124":2,"127":2,"129":168,"142":1,"144":2,"145":1,"148":2,"149":1,"153":6,"154":6,"156":16,"158":3}}],["fulfilled",{"2":{"151":1}}],["fully",{"2":{"6":1,"46":4,"51":1,"97":4}}],["full",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"0":1,"22":1,"48":5,"134":1,"159":4}}],["further",{"2":{"44":1,"129":1}}],["furthermore",{"2":{"3":2,"6":5,"46":1,"52":1,"54":1,"56":1,"69":1,"110":1}}],["future",{"2":{"31":1,"60":1,"143":2}}],["func",{"2":{"13":5}}],["funcs",{"2":{"13":2,"14":3}}],["functionalities",{"2":{"46":1}}],["functionality",{"2":{"22":4,"122":1,"139":1,"141":1,"146":1}}],["functionally",{"2":{"1":1,"6":1,"19":1,"26":1,"129":1}}],["function",{"2":{"1":8,"3":9,"4":9,"5":3,"6":8,"7":2,"9":1,"13":3,"14":2,"19":1,"22":1,"26":2,"33":1,"36":5,"39":3,"42":13,"45":6,"46":16,"48":7,"50":2,"51":4,"52":3,"53":3,"54":2,"55":4,"56":2,"57":4,"60":6,"62":1,"63":8,"65":1,"68":1,"69":1,"75":1,"76":1,"78":1,"80":5,"82":1,"83":1,"89":1,"90":1,"91":3,"93":1,"94":1,"96":1,"97":6,"99":1,"100":1,"106":1,"107":1,"109":1,"110":1,"116":1,"117":1,"120":4,"121":11,"124":3,"127":2,"129":31,"132":2,"134":7,"135":2,"138":2,"139":2,"141":1,"143":2,"145":2,"146":7,"149":3,"150":2,"151":3,"152":2,"153":7,"154":3,"155":1,"156":12,"157":1,"160":4}}],["functions",{"0":{"1":1,"53":1,"55":1,"57":1,"122":1,"124":1,"156":1},"1":{"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1},"2":{"6":1,"9":3,"19":1,"25":1,"39":1,"42":1,"45":1,"46":2,"48":1,"50":1,"91":1,"122":2,"127":1,"134":2,"135":1}}],["flags",{"2":{"46":5}}],["flag",{"2":{"46":12,"51":1}}],["flat",{"2":{"6":1,"153":2,"156":1}}],["flattened",{"2":{"26":1}}],["flattening",{"2":{"6":4,"145":2}}],["flatten",{"2":{"0":2,"6":4,"11":3,"13":1,"26":1,"42":1,"46":2,"48":3,"54":1,"57":1,"80":1,"124":4,"129":27,"138":1}}],["floes",{"2":{"23":1}}],["float",{"2":{"6":3,"22":1,"52":1,"54":1,"56":1}}],["float64x2",{"2":{"13":6,"14":6,"15":2}}],["float64",{"2":{"1":6,"4":10,"6":28,"13":1,"35":1,"36":3,"39":6,"45":1,"48":4,"51":2,"52":2,"54":1,"55":1,"56":1,"60":12,"91":4,"94":1,"97":1,"120":4,"121":1,"131":6,"137":26,"144":2,"145":2,"146":1,"150":4,"151":9,"152":2,"153":6,"154":6,"155":1,"156":8}}],["flexijoins",{"2":{"157":1,"158":3,"159":1,"160":5}}],["flexibility",{"2":{"22":1}}],["fleshed",{"2":{"22":1}}],["flipping",{"0":{"139":1},"2":{"139":1}}],["flipped",{"2":{"1":2,"6":2,"129":2}}],["flipaxis",{"2":{"41":1}}],["flip",{"2":{"0":1,"6":1,"33":1,"122":2,"129":1,"139":2}}],["wₜₒₜ",{"2":{"42":8}}],["wᵢ",{"2":{"42":18}}],["wt",{"2":{"42":3}}],["wglmakie",{"2":{"14":1}}],["w",{"2":{"13":13,"14":7,"60":4}}],["wrong",{"2":{"136":1,"153":1}}],["written",{"2":{"22":1,"63":1}}],["write",{"2":{"7":1,"20":1}}],["wrap",{"2":{"4":1,"6":1,"140":1,"145":1}}],["wrapped",{"2":{"30":1,"121":1,"127":1,"129":1}}],["wrapper",{"0":{"20":1},"2":{"20":1,"36":1,"39":1,"45":1,"48":1,"60":1,"63":1,"69":1,"83":1,"97":1,"100":1,"110":1}}],["wrappers`",{"2":{"129":1}}],["wrappers",{"2":{"1":10,"6":12,"30":1,"120":2,"124":1,"131":8,"132":1,"137":22,"144":1,"145":1,"149":1,"154":10,"156":1}}],["wrappergeometry`",{"2":{"141":1}}],["wrappergeometry",{"2":{"1":1}}],["wrapping",{"2":{"1":1,"6":1,"63":1,"141":1,"155":1}}],["west",{"2":{"48":8}}],["were",{"2":{"46":1,"55":1,"158":1}}],["well",{"2":{"25":1,"48":1,"121":1,"126":1,"143":1}}],["welcome",{"2":{"17":1}}],["we",{"2":{"7":1,"11":1,"13":1,"17":2,"21":1,"22":2,"25":3,"27":1,"31":3,"32":1,"36":1,"38":2,"39":2,"41":4,"42":8,"45":1,"46":5,"48":4,"53":8,"54":2,"55":2,"57":1,"60":1,"62":1,"63":5,"65":1,"66":1,"68":1,"69":1,"79":1,"82":1,"83":1,"91":2,"93":3,"94":1,"96":1,"97":2,"99":1,"100":1,"109":1,"110":1,"121":3,"126":3,"127":1,"129":20,"130":1,"142":1,"143":2,"144":2,"145":3,"146":1,"149":5,"153":2,"157":3,"158":7}}],["weighting",{"2":{"44":2,"45":1}}],["weights",{"2":{"40":4}}],["weight",{"2":{"6":5,"42":14,"45":1}}],["weighted",{"2":{"0":1,"6":2,"40":3,"42":4,"45":4}}],["walk",{"2":{"51":1}}],["wall2",{"2":{"48":7}}],["wall1",{"2":{"48":12}}],["walls",{"2":{"48":3}}],["wall",{"2":{"48":69}}],["wachspress",{"2":{"42":1}}],["ways",{"2":{"136":1}}],["way",{"2":{"19":1,"25":1,"26":1,"32":1,"40":1,"122":1,"133":1,"146":1}}],["wanted",{"2":{"160":1}}],["wants",{"2":{"129":1}}],["want",{"0":{"31":1},"2":{"13":1,"26":1,"31":1,"42":1,"120":1,"159":1,"160":1}}],["was",{"2":{"6":1,"33":1,"36":1,"39":1,"41":1,"42":4,"45":1,"46":1,"48":1,"51":1,"52":1,"53":3,"54":1,"55":3,"56":1,"57":3,"60":1,"63":1,"66":1,"76":1,"79":1,"80":1,"90":1,"91":1,"94":1,"97":1,"107":1,"117":1,"120":1,"121":1,"127":1,"129":1,"132":1,"135":1,"138":1,"139":1,"140":1,"142":1,"144":1,"146":1,"153":1,"154":1,"155":1,"156":1}}],["warning",{"2":{"0":1,"5":1,"6":2,"32":1,"42":1,"129":1,"145":1,"159":1}}],["won",{"2":{"31":1,"129":1}}],["would",{"2":{"6":3,"31":1,"52":1,"54":1,"56":1,"121":1,"126":2,"159":1,"160":1}}],["world",{"0":{"159":1},"2":{"157":1}}],["worrying",{"2":{"32":1}}],["words",{"2":{"3":1,"6":1,"65":1,"93":1,"99":1,"100":1}}],["works",{"2":{"141":1,"143":1}}],["worked",{"2":{"121":1}}],["workflow",{"2":{"80":1,"97":1}}],["workflows",{"2":{"17":1,"22":1,"31":1}}],["working",{"2":{"3":1,"6":1,"80":1}}],["work",{"2":{"1":3,"6":3,"9":1,"36":1,"39":2,"45":1,"48":2,"51":2,"60":1,"63":1,"97":1,"120":1,"129":2,"141":1,"154":1,"159":1}}],["whole",{"2":{"91":1}}],["whose",{"2":{"3":1,"6":1,"80":1}}],["white",{"2":{"41":1}}],["while",{"2":{"36":1,"44":1,"45":1,"46":5,"55":2,"59":1,"63":1,"80":1,"91":1,"121":3,"138":1,"151":1,"153":2,"158":1}}],["whichever",{"2":{"6":1,"149":1}}],["which",{"2":{"1":1,"4":2,"5":1,"6":6,"7":1,"11":1,"13":1,"14":1,"22":2,"25":1,"26":4,"28":1,"31":2,"38":1,"39":1,"40":1,"41":2,"42":5,"46":10,"48":2,"55":1,"63":2,"91":3,"121":2,"122":1,"126":1,"129":1,"130":2,"131":1,"134":1,"136":1,"137":1,"142":1,"143":1,"144":1,"145":3,"146":2,"149":1,"151":2,"154":1,"157":3,"158":6,"160":1}}],["whatever",{"2":{"30":1}}],["what",{"0":{"20":1,"30":1,"35":1,"38":2,"44":1,"47":1,"50":1,"59":2,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"127":1},"2":{"13":1,"14":1,"32":1,"44":1,"120":1,"126":1,"144":1,"159":1}}],["whyatt",{"2":{"147":1}}],["why",{"0":{"30":1,"31":1},"2":{"9":1,"20":1,"25":1,"39":1}}],["wheel",{"2":{"25":1}}],["whether",{"2":{"1":4,"4":1,"6":11,"22":2,"119":1,"120":2,"126":2,"130":1}}],["when",{"2":{"1":1,"4":2,"5":1,"6":5,"26":1,"28":1,"31":2,"32":1,"39":1,"42":3,"45":1,"53":5,"55":6,"57":7,"91":1,"127":3,"129":1,"131":1,"134":1,"140":2,"149":1,"160":1}}],["wherever",{"2":{"6":1,"155":1}}],["where",{"2":{"1":2,"4":5,"6":11,"22":2,"28":1,"33":2,"36":8,"39":12,"40":2,"42":24,"45":8,"46":12,"48":8,"51":4,"52":2,"53":5,"54":3,"55":13,"56":2,"57":9,"60":25,"63":1,"91":9,"126":4,"129":52,"136":1,"141":1,"144":1,"155":1,"156":3}}],["wiki",{"2":{"91":1,"151":1}}],["wikipedia",{"2":{"91":1,"151":2}}],["widths",{"2":{"14":1}}],["width",{"2":{"6":1,"121":5}}],["wind",{"2":{"4":1,"6":2,"39":1,"63":1}}],["winding",{"2":{"4":2,"6":2,"39":3,"46":7,"63":1}}],["without",{"2":{"1":2,"6":1,"25":1,"32":1,"46":1,"82":1,"97":1,"129":3,"141":1,"154":1}}],["with",{"0":{"53":1,"55":1,"57":1,"150":1,"151":1,"152":1},"2":{"1":5,"3":5,"4":7,"6":26,"11":1,"22":1,"28":1,"30":2,"31":1,"35":1,"36":2,"39":7,"40":4,"41":1,"42":2,"45":1,"46":14,"48":6,"53":6,"54":5,"55":7,"56":1,"57":12,"59":1,"60":2,"69":1,"82":1,"86":1,"91":28,"93":1,"96":2,"97":5,"99":1,"100":1,"103":3,"104":2,"105":2,"115":1,"121":3,"122":1,"124":2,"126":1,"127":1,"129":17,"131":1,"136":1,"140":1,"141":1,"143":1,"146":2,"149":2,"152":1,"154":1,"157":1,"158":1,"159":1}}],["within",{"0":{"108":1,"109":1,"112":1,"113":1,"115":1,"116":1,"117":1},"1":{"109":1,"110":1},"2":{"0":2,"3":9,"4":3,"5":1,"6":13,"7":1,"9":1,"33":1,"36":2,"39":1,"40":3,"42":1,"45":1,"46":8,"47":2,"48":5,"53":1,"55":1,"56":1,"57":6,"59":1,"60":5,"65":2,"66":3,"68":2,"85":1,"91":9,"94":1,"96":1,"97":8,"108":1,"109":6,"110":10,"111":6,"112":13,"113":12,"114":12,"115":6,"116":4,"117":4,"122":1,"157":1,"158":4,"159":2}}],["will",{"2":{"1":7,"4":7,"5":1,"6":41,"11":1,"21":1,"26":3,"31":2,"32":1,"36":4,"39":3,"42":2,"45":1,"46":4,"48":1,"51":1,"52":4,"53":4,"54":4,"55":3,"56":4,"57":4,"59":2,"60":4,"63":1,"80":1,"120":1,"124":2,"127":1,"128":2,"129":7,"131":1,"135":2,"136":1,"138":2,"141":3,"143":2,"145":3,"149":2,"151":1,"153":1,"154":2,"157":2,"159":1,"160":1}}],["wip",{"2":{"0":1}}]],"serializationVersion":2}';export{e as default}; +const e='{"documentCount":161,"nextId":161,"documentIds":{"0":"/GeometryOps.jl/previews/PR132/api#Full-GeometryOps-API-documentation","1":"/GeometryOps.jl/previews/PR132/api#apply-and-associated-functions","2":"/GeometryOps.jl/previews/PR132/api#General-geometry-methods","3":"/GeometryOps.jl/previews/PR132/api#OGC-methods","4":"/GeometryOps.jl/previews/PR132/api#Other-general-methods","5":"/GeometryOps.jl/previews/PR132/api#Barycentric-coordinates","6":"/GeometryOps.jl/previews/PR132/api#Other-methods","7":"/GeometryOps.jl/previews/PR132/call_notes#20th-April,-2024","8":"/GeometryOps.jl/previews/PR132/call_notes#29th-Feb,-2024","9":"/GeometryOps.jl/previews/PR132/call_notes#To-do","10":"/GeometryOps.jl/previews/PR132/call_notes#Done","11":"/GeometryOps.jl/previews/PR132/experiments/accurate_accumulators#Accurate-accumulation","12":"/GeometryOps.jl/previews/PR132/experiments/predicates#Predicates","13":"/GeometryOps.jl/previews/PR132/experiments/predicates#Orient","14":"/GeometryOps.jl/previews/PR132/experiments/predicates#Dashboard","15":"/GeometryOps.jl/previews/PR132/experiments/predicates#Testing-robust-vs-regular-predicates","16":"/GeometryOps.jl/previews/PR132/experiments/predicates#Incircle","17":"/GeometryOps.jl/previews/PR132/introduction#Introduction","18":"/GeometryOps.jl/previews/PR132/introduction#Main-concepts","19":"/GeometryOps.jl/previews/PR132/introduction#The-apply-paradigm","20":"/GeometryOps.jl/previews/PR132/introduction#What\'s-this-GeoInterface.Wrapper-thing?","21":"/GeometryOps.jl/previews/PR132/paper#Paper","22":"/GeometryOps.jl/previews/PR132/paper#Statement-of-need","23":"/GeometryOps.jl/previews/PR132/paper#Ongoing-research-projects","24":"/GeometryOps.jl/previews/PR132/paper#Citations","25":"/GeometryOps.jl/previews/PR132/paradigms#Paradigms","26":"/GeometryOps.jl/previews/PR132/paradigms#apply","27":"/GeometryOps.jl/previews/PR132/paradigms#applyreduce","28":"/GeometryOps.jl/previews/PR132/paradigms#fix-and-prepare","29":"/GeometryOps.jl/previews/PR132/peculiarities#Peculiarities","30":"/GeometryOps.jl/previews/PR132/peculiarities#What-does-apply-return-and-why?","31":"/GeometryOps.jl/previews/PR132/peculiarities#Why-do-you-want-me-to-provide-a-target-in-set-operations?","32":"/GeometryOps.jl/previews/PR132/peculiarities#_True-and-_False-(or-BoolsAsTypes)","33":"/GeometryOps.jl/previews/PR132/source/GeometryOps#GeometryOps.jl","34":"/GeometryOps.jl/previews/PR132/source/methods/angles#Angles","35":"/GeometryOps.jl/previews/PR132/source/methods/angles#What-is-angles?","36":"/GeometryOps.jl/previews/PR132/source/methods/angles#Implementation","37":"/GeometryOps.jl/previews/PR132/source/methods/area#Area-and-signed-area","38":"/GeometryOps.jl/previews/PR132/source/methods/area#What-is-area?-What-is-signed-area?","39":"/GeometryOps.jl/previews/PR132/source/methods/area#Implementation","40":"/GeometryOps.jl/previews/PR132/source/methods/barycentric#Barycentric-coordinates","41":"/GeometryOps.jl/previews/PR132/source/methods/barycentric#Example","42":"/GeometryOps.jl/previews/PR132/source/methods/barycentric#Barycentric-coordinate-API","43":"/GeometryOps.jl/previews/PR132/source/methods/centroid#Centroid","44":"/GeometryOps.jl/previews/PR132/source/methods/centroid#What-is-the-centroid?","45":"/GeometryOps.jl/previews/PR132/source/methods/centroid#Implementation","46":"/GeometryOps.jl/previews/PR132/source/methods/clipping/clipping_processor#Polygon-clipping-helpers","47":"/GeometryOps.jl/previews/PR132/source/methods/clipping/coverage#What-is-coverage?","48":"/GeometryOps.jl/previews/PR132/source/methods/clipping/coverage#Implementation","49":"/GeometryOps.jl/previews/PR132/source/methods/clipping/cut#Polygon-cutting","50":"/GeometryOps.jl/previews/PR132/source/methods/clipping/cut#What-is-cut?","51":"/GeometryOps.jl/previews/PR132/source/methods/clipping/cut#Implementation","52":"/GeometryOps.jl/previews/PR132/source/methods/clipping/difference#Difference-Polygon-Clipping","53":"/GeometryOps.jl/previews/PR132/source/methods/clipping/difference#Helper-functions-for-Differences-with-Greiner-and-Hormann-Polygon-Clipping","54":"/GeometryOps.jl/previews/PR132/source/methods/clipping/intersection#Geometry-Intersection","55":"/GeometryOps.jl/previews/PR132/source/methods/clipping/intersection#Helper-functions-for-Intersections-with-Greiner-and-Hormann-Polygon-Clipping","56":"/GeometryOps.jl/previews/PR132/source/methods/clipping/union#Union-Polygon-Clipping","57":"/GeometryOps.jl/previews/PR132/source/methods/clipping/union#Helper-functions-for-Unions-with-Greiner-and-Hormann-Polygon-Clipping","58":"/GeometryOps.jl/previews/PR132/source/methods/distance#Distance-and-signed-distance","59":"/GeometryOps.jl/previews/PR132/source/methods/distance#What-is-distance?-What-is-signed-distance?","60":"/GeometryOps.jl/previews/PR132/source/methods/distance#Implementation","61":"/GeometryOps.jl/previews/PR132/source/methods/equals#Equals","62":"/GeometryOps.jl/previews/PR132/source/methods/equals#What-is-equals?","63":"/GeometryOps.jl/previews/PR132/source/methods/equals#Implementation","64":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/contains#Contains","65":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/contains#What-is-contains?","66":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/contains#Implementation","67":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#CoveredBy","68":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#What-is-coveredby?","69":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#Implementation","70":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#Convert-features-to-geometries","71":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#Points-coveredby-geometries","72":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#Lines-coveredby-geometries","73":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#Rings-covered-by-geometries","74":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#Polygons-covered-by-geometries","75":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#Geometries-coveredby-multi-geometry/geometry-collections","76":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/coveredby#Multi-geometry/geometry-collections-coveredby-geometries","77":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/covers#Covers","78":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/covers#What-is-covers?","79":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/covers#Implementation","80":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/crosses#Crossing-checks","81":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Disjoint","82":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#What-is-disjoint?","83":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Implementation","84":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Convert-features-to-geometries","85":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Point-disjoint-geometries","86":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Lines-disjoint-geometries","87":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Rings-disjoint-geometries","88":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Polygon-disjoint-geometries","89":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Geometries-disjoint-multi-geometry/geometry-collections","90":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/disjoint#Multi-geometry/geometry-collections-coveredby-geometries","91":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/geom_geom_processors#Line-curve-interaction","92":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/intersects#Intersection-checks","93":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/intersects#What-is-intersects?","94":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/intersects#Implementation","95":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/overlaps#Overlaps","96":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/overlaps#What-is-overlaps?","97":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/overlaps#Implementation","98":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Touches","99":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#What-is-touches?","100":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Implementation","101":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Convert-features-to-geometries","102":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Point-touches-geometries","103":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Lines-touching-geometries","104":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Rings-touch-geometries","105":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Polygons-touch-geometries","106":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Geometries-touch-multi-geometry/geometry-collections","107":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/touches#Multi-geometry/geometry-collections-cross-geometries","108":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Within","109":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#What-is-within?","110":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Implementation","111":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Convert-features-to-geometries","112":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Points-within-geometries","113":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Lines-within-geometries","114":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Rings-covered-by-geometries","115":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Polygons-within-geometries","116":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Geometries-within-multi-geometry/geometry-collections","117":"/GeometryOps.jl/previews/PR132/source/methods/geom_relations/within#Multi-geometry/geometry-collections-within-geometries","118":"/GeometryOps.jl/previews/PR132/source/methods/orientation#Orientation","119":"/GeometryOps.jl/previews/PR132/source/methods/orientation#isclockwise","120":"/GeometryOps.jl/previews/PR132/source/methods/orientation#isconcave","121":"/GeometryOps.jl/previews/PR132/source/methods/polygonize#Polygonizing-raster-data","122":"/GeometryOps.jl/previews/PR132/source/primitives#Primitive-functions","123":"/GeometryOps.jl/previews/PR132/source/primitives#Docstrings","124":"/GeometryOps.jl/previews/PR132/source/primitives#Functions","125":"/GeometryOps.jl/previews/PR132/source/primitives#Types","126":"/GeometryOps.jl/previews/PR132/source/primitives#Implementation","127":"/GeometryOps.jl/previews/PR132/source/primitives#What-is-apply?","128":"/GeometryOps.jl/previews/PR132/source/primitives#Embedding:","129":"/GeometryOps.jl/previews/PR132/source/primitives#Threading","130":"/GeometryOps.jl/previews/PR132/source/transformations/correction/closed_ring#Closed-Rings","131":"/GeometryOps.jl/previews/PR132/source/transformations/correction/closed_ring#Example","132":"/GeometryOps.jl/previews/PR132/source/transformations/correction/closed_ring#Implementation","133":"/GeometryOps.jl/previews/PR132/source/transformations/correction/geometry_correction#Geometry-Corrections","134":"/GeometryOps.jl/previews/PR132/source/transformations/correction/geometry_correction#Interface","135":"/GeometryOps.jl/previews/PR132/source/transformations/correction/geometry_correction#Available-corrections","136":"/GeometryOps.jl/previews/PR132/source/transformations/correction/intersecting_polygons#Intersecting-Polygons","137":"/GeometryOps.jl/previews/PR132/source/transformations/correction/intersecting_polygons#Example","138":"/GeometryOps.jl/previews/PR132/source/transformations/correction/intersecting_polygons#Implementation","139":"/GeometryOps.jl/previews/PR132/source/transformations/extent#Extent-embedding","140":"/GeometryOps.jl/previews/PR132/source/transformations/flip#Coordinate-flipping","141":"/GeometryOps.jl/previews/PR132/source/transformations/reproject#Geometry-reprojection","142":"/GeometryOps.jl/previews/PR132/source/transformations/reproject#Method-error-handling","143":"/GeometryOps.jl/previews/PR132/source/transformations/segmentize#Segmentize","144":"/GeometryOps.jl/previews/PR132/source/transformations/segmentize#Examples","145":"/GeometryOps.jl/previews/PR132/source/transformations/segmentize#Benchmark","146":"/GeometryOps.jl/previews/PR132/source/transformations/segmentize#Implementation","147":"/GeometryOps.jl/previews/PR132/source/transformations/simplify#Geometry-simplification","148":"/GeometryOps.jl/previews/PR132/source/transformations/simplify#Examples","149":"/GeometryOps.jl/previews/PR132/source/transformations/simplify#Benchmark","150":"/GeometryOps.jl/previews/PR132/source/transformations/simplify#Simplify-with-RadialDistance-Algorithm","151":"/GeometryOps.jl/previews/PR132/source/transformations/simplify#Simplify-with-DouglasPeucker-Algorithm","152":"/GeometryOps.jl/previews/PR132/source/transformations/simplify#Simplify-with-VisvalingamWhyatt-Algorithm","153":"/GeometryOps.jl/previews/PR132/source/transformations/simplify#Shared-utils","154":"/GeometryOps.jl/previews/PR132/source/transformations/transform#Pointwise-transformation","155":"/GeometryOps.jl/previews/PR132/source/transformations/tuples#Tuple-conversion","156":"/GeometryOps.jl/previews/PR132/source/utils#Utility-functions","157":"/GeometryOps.jl/previews/PR132/tutorials/spatial_joins#Spatial-joins","158":"/GeometryOps.jl/previews/PR132/tutorials/spatial_joins#Simple-example","159":"/GeometryOps.jl/previews/PR132/tutorials/spatial_joins#Real-world-example","160":"/GeometryOps.jl/previews/PR132/tutorials/spatial_joins#Enabling-custom-predicates"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[4,1,88],"1":[4,4,249],"2":[3,4,1],"3":[2,7,207],"4":[3,7,261],"5":[2,4,84],"6":[2,4,994],"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,72],"18":[2,1,1],"19":[3,3,50],"20":[8,3,18],"21":[1,1,24],"22":[3,1,174],"23":[3,1,11],"24":[1,1,20],"25":[1,1,53],"26":[1,1,109],"27":[1,2,35],"28":[3,1,79],"29":[1,1,1],"30":[7,1,71],"31":[13,1,101],"32":[6,1,66],"33":[2,1,109],"34":[1,1,3],"35":[4,1,57],"36":[1,1,270],"37":[4,1,4],"38":[5,4,101],"39":[1,4,247],"40":[2,1,65],"41":[1,2,210],"42":[3,2,414],"43":[1,1,6],"44":[5,1,91],"45":[1,1,199],"46":[3,1,562],"47":[4,1,70],"48":[1,1,324],"49":[2,1,3],"50":[4,2,57],"51":[1,2,197],"52":[3,1,214],"53":[10,1,172],"54":[2,1,251],"55":[10,1,339],"56":[3,1,234],"57":[10,1,283],"58":[4,1,4],"59":[5,4,129],"60":[1,4,260],"61":[1,1,3],"62":[4,1,68],"63":[1,1,266],"64":[1,1,3],"65":[4,1,79],"66":[1,1,79],"67":[1,1,3],"68":[4,1,81],"69":[1,1,126],"70":[4,1,11],"71":[3,1,55],"72":[3,1,45],"73":[4,1,47],"74":[4,1,39],"75":[5,1,40],"76":[5,1,44],"77":[1,1,3],"78":[4,1,67],"79":[1,1,77],"80":[2,1,147],"81":[1,1,3],"82":[4,1,68],"83":[1,1,107],"84":[4,1,10],"85":[3,1,56],"86":[3,1,57],"87":[3,1,46],"88":[3,1,32],"89":[5,1,39],"90":[5,1,44],"91":[3,1,419],"92":[2,1,3],"93":[4,2,80],"94":[1,2,108],"95":[1,1,3],"96":[4,1,82],"97":[1,1,235],"98":[1,1,3],"99":[4,1,70],"100":[1,1,122],"101":[4,1,11],"102":[3,1,68],"103":[3,1,52],"104":[3,1,61],"105":[3,1,40],"106":[5,1,39],"107":[5,1,42],"108":[1,1,3],"109":[4,1,72],"110":[1,1,127],"111":[4,1,11],"112":[3,1,62],"113":[3,1,52],"114":[4,1,52],"115":[3,1,37],"116":[5,1,39],"117":[5,1,42],"118":[1,1,4],"119":[1,1,21],"120":[1,1,193],"121":[3,1,253],"122":[2,1,113],"123":[1,2,1],"124":[1,3,106],"125":[1,2,12],"126":[1,2,148],"127":[4,2,114],"128":[2,2,36],"129":[1,2,546],"130":[2,1,54],"131":[1,2,87],"132":[1,2,83],"133":[2,1,41],"134":[1,2,112],"135":[2,2,109],"136":[2,1,77],"137":[1,2,70],"138":[1,2,135],"139":[2,1,71],"140":[2,1,56],"141":[2,1,132],"142":[3,2,77],"143":[1,1,76],"144":[1,1,147],"145":[1,1,268],"146":[1,1,187],"147":[2,1,19],"148":[1,2,67],"149":[1,2,404],"150":[4,1,75],"151":[4,1,174],"152":[4,1,85],"153":[2,1,149],"154":[2,1,111],"155":[2,1,58],"156":[2,1,137],"157":[2,1,138],"158":[2,2,137],"159":[3,2,117],"160":[3,2,68]},"averageFieldLength":[2.701863354037267,1.453416149068323,105.3913043478261],"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":"Introduction","titles":[]},"18":{"title":"Main concepts","titles":["Introduction"]},"19":{"title":"The apply paradigm","titles":["Introduction","Main concepts"]},"20":{"title":"What's this GeoInterface.Wrapper thing?","titles":["Introduction","Main concepts"]},"21":{"title":"Paper","titles":[]},"22":{"title":"Statement of need","titles":["Paper"]},"23":{"title":"Ongoing research projects","titles":["Paper"]},"24":{"title":"Citations","titles":["Paper"]},"25":{"title":"Paradigms","titles":[]},"26":{"title":"apply","titles":["Paradigms"]},"27":{"title":"applyreduce","titles":["Paradigms","apply"]},"28":{"title":"fix and prepare","titles":["Paradigms"]},"29":{"title":"Peculiarities","titles":[]},"30":{"title":"What does apply return and why?","titles":["Peculiarities"]},"31":{"title":"Why do you want me to provide a target in set operations?","titles":["Peculiarities"]},"32":{"title":"_True and _False (or BoolsAsTypes)","titles":["Peculiarities"]},"33":{"title":"GeometryOps.jl","titles":[]},"34":{"title":"Angles","titles":[]},"35":{"title":"What is angles?","titles":["Angles"]},"36":{"title":"Implementation","titles":["Angles"]},"37":{"title":"Area and signed area","titles":[]},"38":{"title":"What is area? What is signed area?","titles":["Area and signed area"]},"39":{"title":"Implementation","titles":["Area and signed area"]},"40":{"title":"Barycentric coordinates","titles":[]},"41":{"title":"Example","titles":["Barycentric coordinates"]},"42":{"title":"Barycentric-coordinate API","titles":["Barycentric coordinates"]},"43":{"title":"Centroid","titles":[]},"44":{"title":"What is the centroid?","titles":["Centroid"]},"45":{"title":"Implementation","titles":["Centroid"]},"46":{"title":"Polygon clipping helpers","titles":[]},"47":{"title":"What is coverage?","titles":[]},"48":{"title":"Implementation","titles":[]},"49":{"title":"Polygon cutting","titles":[]},"50":{"title":"What is cut?","titles":["Polygon cutting"]},"51":{"title":"Implementation","titles":["Polygon cutting"]},"52":{"title":"Difference Polygon Clipping","titles":[]},"53":{"title":"Helper functions for Differences with Greiner and Hormann Polygon Clipping","titles":[]},"54":{"title":"Geometry Intersection","titles":[]},"55":{"title":"Helper functions for Intersections with Greiner and Hormann Polygon Clipping","titles":[]},"56":{"title":"Union Polygon Clipping","titles":[]},"57":{"title":"Helper functions for Unions with Greiner and Hormann Polygon Clipping","titles":[]},"58":{"title":"Distance and signed distance","titles":[]},"59":{"title":"What is distance? What is signed distance?","titles":["Distance and signed distance"]},"60":{"title":"Implementation","titles":["Distance and signed distance"]},"61":{"title":"Equals","titles":[]},"62":{"title":"What is equals?","titles":["Equals"]},"63":{"title":"Implementation","titles":["Equals"]},"64":{"title":"Contains","titles":[]},"65":{"title":"What is contains?","titles":["Contains"]},"66":{"title":"Implementation","titles":["Contains"]},"67":{"title":"CoveredBy","titles":[]},"68":{"title":"What is coveredby?","titles":["CoveredBy"]},"69":{"title":"Implementation","titles":["CoveredBy"]},"70":{"title":"Convert features to geometries","titles":[]},"71":{"title":"Points coveredby geometries","titles":[]},"72":{"title":"Lines coveredby geometries","titles":[]},"73":{"title":"Rings covered by geometries","titles":[]},"74":{"title":"Polygons covered by geometries","titles":[]},"75":{"title":"Geometries coveredby multi-geometry/geometry collections","titles":[]},"76":{"title":"Multi-geometry/geometry collections coveredby geometries","titles":[]},"77":{"title":"Covers","titles":[]},"78":{"title":"What is covers?","titles":["Covers"]},"79":{"title":"Implementation","titles":["Covers"]},"80":{"title":"Crossing checks","titles":[]},"81":{"title":"Disjoint","titles":[]},"82":{"title":"What is disjoint?","titles":["Disjoint"]},"83":{"title":"Implementation","titles":["Disjoint"]},"84":{"title":"Convert features to geometries","titles":[]},"85":{"title":"Point disjoint geometries","titles":[]},"86":{"title":"Lines disjoint geometries","titles":[]},"87":{"title":"Rings disjoint geometries","titles":[]},"88":{"title":"Polygon disjoint geometries","titles":[]},"89":{"title":"Geometries disjoint multi-geometry/geometry collections","titles":[]},"90":{"title":"Multi-geometry/geometry collections coveredby geometries","titles":[]},"91":{"title":"Line-curve interaction","titles":[]},"92":{"title":"Intersection checks","titles":[]},"93":{"title":"What is intersects?","titles":["Intersection checks"]},"94":{"title":"Implementation","titles":["Intersection checks"]},"95":{"title":"Overlaps","titles":[]},"96":{"title":"What is overlaps?","titles":["Overlaps"]},"97":{"title":"Implementation","titles":["Overlaps"]},"98":{"title":"Touches","titles":[]},"99":{"title":"What is touches?","titles":["Touches"]},"100":{"title":"Implementation","titles":["Touches"]},"101":{"title":"Convert features to geometries","titles":[]},"102":{"title":"Point touches geometries","titles":[]},"103":{"title":"Lines touching geometries","titles":[]},"104":{"title":"Rings touch geometries","titles":[]},"105":{"title":"Polygons touch geometries","titles":[]},"106":{"title":"Geometries touch multi-geometry/geometry collections","titles":[]},"107":{"title":"Multi-geometry/geometry collections cross geometries","titles":[]},"108":{"title":"Within","titles":[]},"109":{"title":"What is within?","titles":["Within"]},"110":{"title":"Implementation","titles":["Within"]},"111":{"title":"Convert features to geometries","titles":[]},"112":{"title":"Points within geometries","titles":[]},"113":{"title":"Lines within geometries","titles":[]},"114":{"title":"Rings covered by geometries","titles":[]},"115":{"title":"Polygons within geometries","titles":[]},"116":{"title":"Geometries within multi-geometry/geometry collections","titles":[]},"117":{"title":"Multi-geometry/geometry collections within geometries","titles":[]},"118":{"title":"Orientation","titles":[]},"119":{"title":"isclockwise","titles":["Orientation"]},"120":{"title":"isconcave","titles":["Orientation"]},"121":{"title":"Polygonizing raster data","titles":[]},"122":{"title":"Primitive functions","titles":[]},"123":{"title":"Docstrings","titles":["Primitive functions"]},"124":{"title":"Functions","titles":["Primitive functions","Docstrings"]},"125":{"title":"Types","titles":["Primitive functions"]},"126":{"title":"Implementation","titles":["Primitive functions"]},"127":{"title":"What is apply?","titles":["Primitive functions"]},"128":{"title":"Embedding:","titles":["Primitive functions"]},"129":{"title":"Threading","titles":["Primitive functions"]},"130":{"title":"Closed Rings","titles":[]},"131":{"title":"Example","titles":["Closed Rings"]},"132":{"title":"Implementation","titles":["Closed Rings"]},"133":{"title":"Geometry Corrections","titles":[]},"134":{"title":"Interface","titles":["Geometry Corrections"]},"135":{"title":"Available corrections","titles":["Geometry Corrections"]},"136":{"title":"Intersecting Polygons","titles":[]},"137":{"title":"Example","titles":["Intersecting Polygons"]},"138":{"title":"Implementation","titles":["Intersecting Polygons"]},"139":{"title":"Extent embedding","titles":[]},"140":{"title":"Coordinate flipping","titles":[]},"141":{"title":"Geometry reprojection","titles":[]},"142":{"title":"Method error handling","titles":["Geometry reprojection"]},"143":{"title":"Segmentize","titles":[]},"144":{"title":"Examples","titles":["Segmentize"]},"145":{"title":"Benchmark","titles":["Segmentize"]},"146":{"title":"Implementation","titles":["Segmentize"]},"147":{"title":"Geometry simplification","titles":[]},"148":{"title":"Examples","titles":["Geometry simplification"]},"149":{"title":"Benchmark","titles":["Geometry simplification"]},"150":{"title":"Simplify with RadialDistance Algorithm","titles":[]},"151":{"title":"Simplify with DouglasPeucker Algorithm","titles":[]},"152":{"title":"Simplify with VisvalingamWhyatt Algorithm","titles":[]},"153":{"title":"Shared utils","titles":[]},"154":{"title":"Pointwise transformation","titles":[]},"155":{"title":"Tuple conversion","titles":[]},"156":{"title":"Utility functions","titles":[]},"157":{"title":"Spatial joins","titles":[]},"158":{"title":"Simple example","titles":["Spatial joins"]},"159":{"title":"Real-world example","titles":["Spatial joins"]},"160":{"title":"Enabling custom predicates","titles":["Spatial joins"]}},"dirtCount":0,"index":[["÷",{"2":{"129":2}}],["≈",{"2":{"55":4,"91":4}}],["∘",{"2":{"55":1,"97":2,"134":1,"149":2,"160":2}}],["⊻",{"2":{"46":1,"53":2}}],["≥",{"2":{"46":1,"91":2,"138":1,"151":1}}],["αr",{"2":{"55":1}}],["α2",{"2":{"46":4}}],["α",{"2":{"46":3,"55":36,"91":7}}],["α1",{"2":{"46":4}}],["βs",{"2":{"55":1}}],["β2",{"2":{"46":4}}],["β",{"2":{"46":4,"55":33,"91":7}}],["β1",{"2":{"46":4}}],["≤",{"2":{"46":4,"48":14,"55":10,"91":10,"151":1,"153":1}}],["^2",{"2":{"45":2,"60":2}}],["^hormannpresentation",{"2":{"42":2}}],["∑λ",{"2":{"42":2}}],["⋅",{"2":{"42":1}}],["`equatorial",{"2":{"145":2}}],["`extents",{"2":{"139":1}}],["`inf`",{"2":{"141":1}}],["`intersects`",{"2":{"94":1}}],["`intersectingpolygons`",{"2":{"52":1,"54":1,"56":1}}],["`prefilter",{"2":{"149":1}}],["`proj",{"2":{"141":1,"145":2}}],["`polgontrait`",{"2":{"129":1}}],["`polygontrait`",{"2":{"129":2,"134":1}}],["`polygonize`",{"2":{"121":2}}],["`polygon`",{"2":{"42":3}}],["`poly",{"2":{"53":3,"55":1,"57":1}}],["`pointrait`",{"2":{"149":1}}],["`pointtrait`",{"2":{"129":3,"134":1}}],["`point",{"2":{"91":3}}],["`point`",{"2":{"42":4,"60":1}}],["`point2f`",{"2":{"41":1}}],["`douglaspeucker`",{"2":{"149":1}}],["`d`",{"2":{"141":1}}],["`difference`",{"2":{"138":1}}],["`disjoint`",{"2":{"94":1}}],["`obj`",{"2":{"129":1,"154":1,"155":1}}],["`op`",{"2":{"129":2}}],["`+`",{"2":{"129":1}}],["`number`",{"2":{"149":2,"153":3}}],["`namedtuple`",{"2":{"129":1}}],["`nothing`",{"2":{"126":1}}],["`flattening`",{"2":{"145":1}}],["`flattening",{"2":{"145":1}}],["`flatten`",{"2":{"129":1}}],["`featurecollectiontrait`",{"2":{"129":2}}],["`featuretrait`",{"2":{"129":3}}],["`f",{"2":{"129":1}}],["`f`",{"2":{"129":5,"154":2}}],["`false`",{"2":{"126":4,"141":1}}],["`fix",{"2":{"52":2,"53":2,"54":2,"55":2,"56":2,"57":2}}],["`alg`",{"2":{"153":1}}],["`always",{"2":{"141":1}}],["`application",{"2":{"134":1}}],["`apply`",{"2":{"126":1,"129":1}}],["`abstractgeometrytrait`",{"2":{"129":1}}],["`abstractarray`",{"2":{"129":1}}],["`a`",{"2":{"121":1}}],["`calc",{"2":{"126":1}}],["`cartesianindex`",{"2":{"121":1}}],["`crs`",{"2":{"126":1}}],["`components`",{"2":{"129":1}}],["`collect`",{"2":{"129":1}}],["`covers`",{"2":{"69":1,"79":1}}],["`coveredby`",{"2":{"69":1,"79":1}}],["`contains`",{"2":{"66":1,"110":1}}],["`ys`",{"2":{"121":1}}],["`tuple",{"2":{"156":1}}],["`tuple`",{"2":{"155":1}}],["`tuple`s",{"2":{"155":1}}],["`tol`",{"2":{"149":2,"150":3,"151":2,"152":3,"153":4}}],["`time`",{"2":{"141":1}}],["`transform`",{"2":{"141":1}}],["`true`",{"2":{"69":1,"80":1,"83":2,"100":1,"110":1,"120":1,"126":2,"141":1}}],["`threaded==true`",{"2":{"129":1}}],["`threaded`",{"2":{"126":1}}],["`target",{"2":{"141":3}}],["`target`",{"2":{"54":1,"126":1,"129":4}}],["`tables",{"2":{"129":1}}],["`taget`",{"2":{"52":1,"56":1}}],["`within`",{"2":{"66":1,"110":1}}],["`weight`",{"2":{"42":1}}],["`geodesic`",{"2":{"145":1}}],["`geodesicsegments`",{"2":{"144":1,"145":1,"146":1}}],["`geointerface`",{"2":{"134":1}}],["`geointerface",{"2":{"129":2,"141":2}}],["`geometrycorrection`",{"2":{"132":1,"134":1,"138":2}}],["`geometry`",{"2":{"129":1,"141":2}}],["`geometrybasics",{"2":{"42":3,"121":2}}],["`geom`",{"2":{"60":3,"129":1,"146":1}}],["`g1`",{"2":{"60":1}}],["`linearring`",{"2":{"146":1}}],["`linearsegments`",{"2":{"146":1}}],["`linestring`",{"2":{"146":1}}],["`linestringtrait`",{"2":{"134":1}}],["`line2`",{"2":{"120":1}}],["`line1`",{"2":{"120":1}}],["`line",{"2":{"54":4}}],["`method",{"2":{"146":1}}],["`method`",{"2":{"42":3,"146":1}}],["`max",{"2":{"145":4,"146":2}}],["`makie",{"2":{"121":1}}],["`multipointtrait`",{"2":{"129":1,"149":1}}],["`multipolygontrait`",{"2":{"129":1}}],["`multipolygon",{"2":{"53":2,"55":3,"57":2}}],["`multipoly",{"2":{"53":5,"55":3,"57":3}}],["`minpoints`",{"2":{"121":2}}],["`unionintersectingpolygons`",{"2":{"138":1}}],["`unionintersectingpolygons",{"2":{"52":1,"53":2,"54":1,"55":2,"56":1,"57":2}}],["`radialdistance`",{"2":{"149":1}}],["`ratio`",{"2":{"149":2,"153":3}}],["`reproject`",{"2":{"142":1}}],["`rebuild`",{"2":{"129":1}}],["`r`",{"2":{"42":1}}],["`rᵢ`",{"2":{"42":1}}],["`svector`",{"2":{"154":3}}],["`simplifyalg`",{"2":{"149":2}}],["`simplify",{"2":{"149":1}}],["`simplify`",{"2":{"149":2}}],["`source",{"2":{"141":3}}],["`s`",{"2":{"42":1}}],["`sᵢ`",{"2":{"42":2}}],["`s2`",{"2":{"42":1}}],["`s1`",{"2":{"42":1}}],["`hcat`",{"2":{"42":1}}],["`x`",{"2":{"129":1}}],["`xs`",{"2":{"121":1}}],["`x1",{"2":{"42":1}}],["`x1`",{"2":{"42":2}}],["`x2`",{"2":{"42":1}}],["`visvalingamwhyatt`",{"2":{"149":1}}],["`vector",{"2":{"141":1}}],["`vector`",{"2":{"129":1}}],["`vᵢ`",{"2":{"42":1}}],["`v`",{"2":{"42":1}}],["`values`",{"2":{"42":1}}],["`λs`",{"2":{"42":2}}],["`",{"2":{"42":2,"52":1,"53":2,"54":1,"55":2,"56":1,"57":2,"121":1,"129":1,"134":2,"141":2,"146":1,"149":3,"156":1}}],["`barycentric",{"2":{"42":3}}],["```jldoctest",{"2":{"51":1,"52":1,"54":1,"56":1,"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"120":2,"149":1}}],["```julia",{"2":{"6":1,"42":1,"80":1,"126":1,"129":1,"154":2}}],["```math",{"2":{"42":1}}],["```",{"2":{"11":1,"42":3,"51":1,"52":1,"54":1,"56":1,"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"120":2,"121":10,"129":1,"149":1,"154":2,"156":1}}],["λ₁",{"2":{"42":2}}],["λn",{"2":{"40":1}}],["λ3",{"2":{"40":1}}],["λ2",{"2":{"40":2}}],["λ1",{"2":{"40":2}}],["λs",{"2":{"5":3,"6":4,"42":27}}],["π",{"2":{"36":1,"149":1}}],["δqp",{"2":{"55":16}}],["δintrs",{"2":{"46":2}}],["δy2",{"2":{"120":2}}],["δy1",{"2":{"120":2}}],["δyl",{"2":{"97":4}}],["δy",{"2":{"36":8,"48":3,"91":7}}],["δys",{"2":{"36":1}}],["δx2",{"2":{"120":2}}],["δx1",{"2":{"120":2}}],["δxl",{"2":{"97":4}}],["δx",{"2":{"36":9,"48":3,"91":7}}],["∈",{"2":{"14":1}}],["~",{"2":{"14":3}}],["$ratio",{"2":{"153":1}}],["$rectangle",{"2":{"145":2}}],["$number",{"2":{"153":1}}],["$name",{"2":{"33":2}}],["$min",{"2":{"153":1}}],["$douglas",{"2":{"149":1,"151":1}}],["$simplify",{"2":{"149":1,"150":1,"152":1}}],["$lg",{"2":{"145":1}}],["$lin",{"2":{"145":2}}],["$geom",{"2":{"149":8}}],["$geo",{"2":{"145":1}}],["$apply",{"2":{"129":1,"140":1,"141":1,"149":1}}],["$calc",{"2":{"126":1}}],["$crs",{"2":{"126":1,"139":1}}],["$tol",{"2":{"153":1}}],["$threaded",{"2":{"126":1}}],["$t",{"2":{"63":1,"129":4}}],["$target",{"2":{"53":1,"55":1,"57":1,"129":3}}],["$trait",{"2":{"51":1,"53":2,"55":2,"57":2}}],["$",{"2":{"13":4,"14":1,"42":4,"134":4,"146":1,"149":12}}],["qy",{"2":{"13":2,"14":2,"55":3}}],["qx",{"2":{"13":2,"14":2,"55":3}}],["q",{"2":{"13":13,"14":12,"46":8,"55":3}}],["queue",{"2":{"151":41}}],["questions",{"2":{"55":1}}],["quite",{"2":{"131":1,"159":1}}],["quick",{"2":{"4":1,"6":1,"42":1,"139":1,"148":1}}],["quality",{"2":{"6":1,"149":1}}],["quantity",{"2":{"6":1,"145":1}}],["quot",{"2":{"1":4,"6":8,"28":2,"46":8,"59":2,"60":2,"63":2,"78":4,"91":10,"127":2,"129":4,"143":6,"158":2}}],["|=",{"2":{"91":4,"97":1}}],["||",{"2":{"36":2,"46":10,"48":8,"51":1,"54":1,"55":7,"56":1,"63":18,"80":2,"91":7,"94":1,"102":1,"121":4,"151":1,"153":3}}],["|",{"2":{"11":4}}],["|>",{"2":{"11":8,"13":2,"129":1,"144":1,"145":1,"149":3,"159":2}}],["↩︎",{"2":{"6":1}}],["ᵢᵢᵢ₊₁ᵢᵢ₊₁ᵢᵢ₊₁tᵢ=det",{"2":{"6":1}}],["zs",{"2":{"121":5}}],["zoom",{"2":{"14":1}}],["zip",{"2":{"13":1,"14":1}}],["zeros",{"2":{"42":1,"48":1}}],["zero",{"2":{"4":6,"6":8,"39":11,"45":3,"46":4,"48":11,"55":8,"59":1,"60":3,"120":1,"129":1,"151":4}}],["z",{"2":{"4":1,"5":1,"6":2,"42":3,"63":3,"121":3,"140":1,"154":1,"155":1}}],["09",{"2":{"41":1}}],["08",{"2":{"41":1}}],["06",{"2":{"41":1}}],["02",{"2":{"41":3}}],["04",{"2":{"41":6}}],["071",{"2":{"144":2,"145":2}}],["07",{"2":{"41":6,"144":6,"145":6}}],["001",{"2":{"149":1}}],["000",{"2":{"149":1}}],["00",{"2":{"41":2}}],["008696",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["05",{"2":{"41":1}}],["052704767595",{"2":{"15":1}}],["03",{"2":{"41":4}}],["01362848005",{"2":{"15":1}}],["01",{"2":{"14":1,"41":1,"144":1,"145":1}}],["0^",{"2":{"13":2,"14":2}}],["0+2",{"2":{"13":2,"14":2}}],["0",{"2":{"3":23,"4":12,"6":177,"11":1,"13":5,"14":8,"15":32,"35":20,"36":3,"38":9,"39":4,"41":155,"42":2,"44":6,"45":6,"46":45,"47":13,"48":5,"50":22,"51":49,"52":42,"54":2,"55":22,"56":46,"57":2,"59":20,"60":2,"62":13,"63":18,"65":16,"68":6,"69":6,"78":6,"80":9,"82":15,"91":33,"96":13,"97":9,"99":12,"100":11,"109":16,"120":20,"121":25,"131":24,"137":64,"138":4,"144":16,"145":13,"146":1,"149":11,"151":7,"153":4,"156":2,"158":13}}],[">=",{"2":{"42":6,"80":4,"97":1,"121":1,"153":1,"156":2}}],[">",{"2":{"1":1,"6":3,"11":2,"13":1,"15":2,"36":1,"42":1,"46":17,"48":3,"51":5,"52":1,"53":1,"55":4,"56":1,"57":3,"59":1,"63":1,"80":8,"91":10,"97":2,"120":3,"121":4,"129":5,"134":1,"138":3,"146":2,"149":1,"151":12,"153":3,"154":1,"156":1,"159":1}}],["9im",{"2":{"91":2,"157":1}}],["97",{"2":{"41":1}}],["94",{"2":{"41":1}}],["92",{"2":{"41":1}}],["9833",{"2":{"15":1}}],["95770326033",{"2":{"15":1}}],["95",{"2":{"13":1,"14":1}}],["900",{"2":{"145":1}}],["90063612163",{"2":{"11":2}}],["90",{"2":{"35":9,"41":1}}],["909318372607",{"2":{"11":3}}],["9308dd329db3ac8fd436990a347bdc1fd502b820",{"2":{"6":1}}],["961329",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["9",{"2":{"1":1,"6":1,"91":2,"120":12,"144":1,"154":1}}],["88",{"2":{"41":1}}],["86",{"2":{"41":1}}],["868447876892",{"2":{"15":2}}],["84",{"2":{"41":1}}],["82",{"2":{"41":1}}],["800",{"2":{"41":1}}],["80000",{"2":{"15":5}}],["80",{"2":{"41":1}}],["80869813739",{"2":{"15":2}}],["856614689791036e",{"2":{"15":2}}],["83572303404496",{"2":{"6":1,"54":1}}],["8",{"2":{"1":3,"6":9,"13":1,"14":1,"52":2,"56":4,"91":1,"121":5,"144":1,"154":3}}],["karnataka",{"2":{"159":1}}],["karney",{"2":{"22":1}}],["kbn",{"2":{"11":2}}],["kinds",{"2":{"31":1}}],["kind",{"2":{"9":1}}],["k",{"2":{"6":1,"14":6,"42":1,"46":5,"91":5}}],["kernel",{"2":{"146":4}}],["keepat",{"2":{"56":1,"138":2}}],["keep",{"2":{"46":3,"138":14,"144":1,"158":1}}],["keeping",{"2":{"6":1,"129":1,"140":1}}],["keyword",{"2":{"6":5,"31":1,"52":1,"54":1,"56":1,"126":6,"129":1,"139":2,"145":2}}],["keywords",{"2":{"1":2,"4":1,"6":10,"91":2,"121":1,"126":1,"129":1,"139":1,"140":2,"141":3,"149":8,"150":1,"151":1,"152":1,"153":1,"155":2}}],["knowledge",{"2":{"22":1}}],["known",{"2":{"22":1,"48":2}}],["know",{"2":{"6":3,"36":2,"48":1,"52":1,"54":1,"56":1,"57":1,"129":1,"158":1}}],["kwargs",{"2":{"52":3,"53":3,"54":4,"55":5,"56":3,"57":5,"134":2,"142":1,"145":1}}],["kwdef",{"2":{"33":1,"46":1,"145":1,"150":1,"151":1,"152":1}}],["kw",{"2":{"1":1,"6":5,"121":2,"129":21,"140":3,"149":13,"152":1,"154":3,"155":3}}],["jpn",{"2":{"159":2}}],["jp",{"2":{"63":2}}],["jstep",{"2":{"63":3}}],["jstart",{"2":{"63":7}}],["jhole",{"2":{"63":2}}],["jh",{"2":{"57":5}}],["j+1",{"2":{"46":1,"121":1,"153":1}}],["j",{"2":{"46":17,"55":3,"63":8,"80":9,"91":12,"120":2,"121":9,"153":2}}],["jet",{"2":{"41":1}}],["jts",{"2":{"22":1}}],["joined",{"2":{"158":4}}],["joins",{"0":{"157":1},"1":{"158":1,"159":1,"160":1},"2":{"157":3}}],["joinpath",{"2":{"149":2}}],["join",{"2":{"129":2,"157":4,"158":5,"160":1}}],["joining",{"2":{"6":2,"149":1,"157":1}}],["joss",{"2":{"21":1}}],["just",{"2":{"4":1,"6":1,"21":1,"45":1,"46":2,"57":1,"60":2,"127":1,"129":3,"145":1,"157":1}}],["juliapoints",{"2":{"158":1}}],["juliapolygonize",{"2":{"6":1}}],["juliapolygon",{"2":{"6":1}}],["julia$apply",{"2":{"155":1}}],["julia$threaded",{"2":{"139":1}}],["julia6",{"2":{"149":1}}],["julia```jldoctest",{"2":{"156":1}}],["julia```",{"2":{"80":1,"126":1}}],["juliaxrange",{"2":{"59":1}}],["julia1",{"2":{"52":1,"54":1,"56":1}}],["julia2",{"2":{"51":1}}],["juliabase",{"2":{"42":1,"60":4,"129":1}}],["juliabarycentric",{"2":{"5":3,"6":3}}],["julialines",{"2":{"38":1}}],["julialinearsegments",{"2":{"6":1}}],["juliafalse",{"2":{"120":1}}],["juliafunction",{"2":{"36":2,"42":3,"45":1,"46":12,"48":2,"51":1,"53":1,"55":1,"57":1,"60":8,"91":9,"94":1,"97":1,"102":1,"129":6,"142":1,"145":1,"153":2}}],["juliafor",{"2":{"33":1,"129":2}}],["juliaflexijoins",{"2":{"160":1}}],["juliaflipped",{"2":{"122":1}}],["juliaflip",{"2":{"6":1}}],["juliaflatten",{"2":{"6":1,"124":1}}],["juliamy",{"2":{"160":1}}],["juliamultipoly",{"2":{"149":1}}],["juliamodule",{"2":{"33":1}}],["juliameanvalue",{"2":{"6":1}}],["juliausing",{"2":{"13":1,"14":1,"41":1,"144":2,"145":1,"148":1,"149":1}}],["juliaunwrap",{"2":{"6":1,"129":6}}],["juliaunion",{"2":{"6":1}}],["juliaunionintersectingpolygons",{"2":{"6":1,"135":1}}],["juliagi",{"2":{"11":2}}],["juliago",{"2":{"11":1,"35":1,"38":1,"47":1,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"157":1}}],["juliageointerface",{"2":{"156":1}}],["juliageo",{"2":{"6":1}}],["juliageodesicsegments",{"2":{"6":1}}],["juliaweighted",{"2":{"6":1}}],["juliawithin",{"2":{"3":1,"6":1}}],["juliascatter",{"2":{"158":1}}],["juliasimplify",{"2":{"6":1,"149":3}}],["juliasigned",{"2":{"4":2,"6":2}}],["juliasegmentize",{"2":{"6":1}}],["julias1",{"2":{"6":1}}],["juliavisvalingamwhyatt",{"2":{"6":1}}],["juliareconstruct",{"2":{"6":1,"124":1}}],["juliarebuild",{"2":{"6":1,"124":1}}],["juliareproject",{"2":{"1":1}}],["juliaradialdistance",{"2":{"6":1}}],["juliadouglaspeucker",{"2":{"6":1}}],["juliadifference",{"2":{"6":1}}],["juliadiffintersectingpolygons",{"2":{"6":1,"135":1}}],["juliadistance",{"2":{"4":1,"6":1}}],["juliadisjoint",{"2":{"3":1,"6":1}}],["juliaend",{"2":{"60":1}}],["juliaenum",{"2":{"6":2}}],["juliaexport",{"2":{"34":1,"37":1,"40":1,"43":1,"49":1,"52":1,"54":1,"56":1,"58":1,"61":1,"64":1,"67":1,"77":1,"81":1,"92":1,"95":1,"98":1,"108":1,"118":1,"121":1,"122":1,"130":1,"133":1,"136":1,"141":1,"143":1,"149":1}}],["juliaembed",{"2":{"4":1,"6":1}}],["juliaequals",{"2":{"4":15,"6":15}}],["juliaaccuratearithmetic",{"2":{"11":2}}],["juliaabstract",{"2":{"6":3,"126":1,"134":1,"135":1,"145":1}}],["juliaangles",{"2":{"4":1,"6":1}}],["juliaarea",{"2":{"4":1,"6":1}}],["juliaapplyreduce",{"2":{"1":1,"6":1}}],["juliaapply",{"2":{"1":1,"6":1,"26":1}}],["juliacent",{"2":{"44":1}}],["juliacentroid",{"2":{"4":1,"6":3}}],["juliacut",{"2":{"6":1}}],["juliaclosedring",{"2":{"6":1,"135":1}}],["juliaconst",{"2":{"36":1,"39":1,"42":1,"46":1,"48":2,"60":1,"69":1,"83":1,"100":1,"110":1}}],["juliacontains",{"2":{"3":1,"6":1}}],["juliacoverage",{"2":{"6":1}}],["juliacovers",{"2":{"3":1,"6":1}}],["juliacoveredby",{"2":{"3":1,"6":1}}],["juliatrue",{"2":{"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"120":1}}],["juliatraittarget",{"2":{"6":2,"126":1}}],["juliatransform",{"2":{"1":1,"6":1}}],["juliatuples",{"2":{"6":1}}],["juliat",{"2":{"6":1}}],["juliatouches",{"2":{"3":1,"6":1}}],["juliaoverlaps",{"2":{"3":9,"6":9}}],["juliainnerjoin",{"2":{"159":1}}],["juliaintersection",{"2":{"6":2}}],["juliaintersects",{"2":{"3":1,"6":1}}],["juliaisconcave",{"2":{"6":1}}],["juliaisclockwise",{"2":{"6":1}}],["juliaimport",{"2":{"1":1,"3":9,"4":1,"6":19,"11":1,"35":1,"38":1,"44":1,"47":1,"50":1,"59":1,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"131":2,"137":2,"144":1,"158":1,"159":1}}],["julia",{"2":{"3":1,"6":3,"9":1,"15":1,"17":1,"22":2,"24":3,"33":1,"36":4,"39":10,"42":8,"45":19,"46":58,"48":18,"51":10,"52":6,"53":1,"54":5,"55":13,"56":6,"57":4,"59":1,"60":4,"63":15,"66":1,"70":1,"71":5,"72":1,"73":1,"74":2,"75":1,"76":1,"79":1,"80":3,"84":1,"85":3,"86":1,"87":1,"88":1,"89":1,"90":1,"91":44,"94":2,"97":6,"101":1,"102":3,"103":1,"104":1,"105":1,"106":1,"107":1,"111":1,"112":3,"113":1,"114":1,"115":2,"116":1,"117":1,"120":9,"121":1,"129":63,"132":5,"134":1,"138":3,"139":1,"140":1,"141":1,"145":1,"146":2,"149":1,"150":2,"151":12,"152":3,"154":1,"155":1,"156":1,"157":1,"158":1}}],["julia>",{"2":{"1":5,"6":5,"154":7}}],["juliajulia>",{"2":{"1":2,"6":2}}],["jl`",{"2":{"141":1}}],["jl",{"0":{"33":1},"2":{"1":10,"4":1,"6":10,"10":2,"11":1,"17":2,"24":1,"30":2,"33":37,"36":1,"39":1,"42":1,"45":1,"46":1,"48":1,"51":1,"53":1,"55":1,"57":1,"60":1,"63":1,"66":1,"76":1,"79":1,"80":1,"90":1,"91":1,"94":1,"97":1,"107":1,"117":1,"120":2,"121":1,"124":1,"129":3,"132":1,"135":1,"138":1,"139":2,"140":1,"141":4,"142":3,"143":1,"145":3,"146":2,"149":2,"153":1,"154":6,"155":2,"156":1,"157":1}}],["+=",{"2":{"39":2,"42":11,"45":6,"46":15,"48":10,"51":1,"55":4,"63":1,"80":1,"91":5,"120":1,"121":3,"138":2,"151":4,"156":3}}],["+",{"2":{"1":1,"6":2,"13":1,"14":1,"36":4,"39":1,"42":20,"45":10,"46":12,"48":7,"51":1,"55":14,"60":3,"63":2,"80":2,"91":6,"120":5,"121":4,"138":3,"146":2,"151":3,"152":2,"153":2}}],["york",{"2":{"159":1}}],["your",{"2":{"26":1,"122":1,"142":1,"145":1,"160":2}}],["you",{"0":{"31":1},"2":{"1":1,"4":1,"5":2,"6":10,"9":1,"11":1,"19":2,"25":1,"26":5,"31":1,"36":1,"39":1,"42":8,"45":1,"52":1,"54":1,"56":1,"122":1,"126":1,"131":1,"137":1,"142":1,"144":1,"145":1,"146":1,"154":1,"158":2,"159":3,"160":4}}],["y=y",{"2":{"156":1}}],["yield",{"2":{"145":1}}],["yinterior",{"2":{"45":2}}],["ylast",{"2":{"60":3}}],["yfirst",{"2":{"60":5}}],["y0",{"2":{"60":5}}],["yw",{"2":{"48":4}}],["ye",{"2":{"48":4}}],["yet",{"2":{"22":1,"42":1,"51":1,"53":1,"55":1,"57":1,"63":1,"134":2,"159":1}}],["y2",{"2":{"45":2,"48":18,"60":7,"80":10,"91":7,"97":4,"146":6,"156":1}}],["y1",{"2":{"45":2,"48":22,"60":7,"80":11,"91":8,"97":5,"146":7,"156":3}}],["ycentroid",{"2":{"45":13}}],["yrange",{"2":{"41":3,"59":3}}],["yautolimits",{"2":{"41":2}}],["yp2",{"2":{"36":4}}],["ys",{"2":{"6":2,"121":7}}],["ymax",{"2":{"6":1,"47":2,"48":48}}],["ymin",{"2":{"6":1,"47":2,"48":49}}],["y",{"2":{"1":2,"4":1,"6":4,"13":9,"14":10,"36":8,"39":2,"41":8,"44":1,"45":10,"46":10,"47":1,"48":8,"53":6,"55":15,"59":2,"60":7,"63":3,"80":21,"91":18,"97":7,"120":8,"121":2,"122":2,"129":1,"140":4,"141":1,"146":2,"153":1,"154":2,"155":2,"156":8,"157":1}}],["75",{"2":{"59":2,"65":1,"82":1,"109":1}}],["78",{"2":{"41":1}}],["74",{"2":{"41":1}}],["72",{"2":{"41":1}}],["726711609794",{"2":{"15":1}}],["76",{"2":{"41":1}}],["76085",{"2":{"15":1}}],["768946",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["704377648755",{"2":{"15":2}}],["700",{"2":{"14":1}}],["700454",{"2":{"6":1,"148":1,"149":1}}],["701141",{"2":{"6":1,"148":1,"149":1}}],["70",{"2":{"6":20,"41":1,"148":20,"149":20}}],["738281",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["7",{"2":{"1":5,"6":5,"91":1,"129":1,"144":4,"145":4,"154":4}}],["6area",{"2":{"45":2}}],["66",{"2":{"41":1}}],["668869",{"2":{"6":1,"148":1,"149":1}}],["64",{"2":{"41":1,"144":2,"145":2}}],["646209",{"2":{"6":1,"148":1,"149":1}}],["62",{"2":{"41":1}}],["624923",{"2":{"6":1,"148":1,"149":1}}],["61366192682",{"2":{"15":1}}],["614624",{"2":{"6":1,"148":1,"149":1}}],["605000000000004",{"2":{"144":2}}],["60",{"2":{"41":1,"144":2}}],["60000",{"2":{"15":3}}],["609817",{"2":{"6":1,"148":1,"149":1}}],["603637",{"2":{"6":2,"148":2,"149":2}}],["68",{"2":{"41":1}}],["682601",{"2":{"6":1,"148":1,"149":1}}],["683975",{"2":{"6":1,"148":1,"149":1}}],["694274",{"2":{"6":1,"148":1,"149":1}}],["697021",{"2":{"6":1,"148":1,"149":1}}],["659942",{"2":{"6":1,"148":1,"149":1}}],["639343",{"2":{"6":1,"148":1,"149":1}}],["6",{"2":{"1":12,"3":4,"6":23,"52":3,"56":3,"91":1,"97":4,"121":1,"129":3,"149":1,"154":9}}],["57",{"2":{"144":4,"145":4}}],["57725",{"2":{"15":2}}],["5x",{"2":{"129":1}}],["563198",{"2":{"55":1}}],["56",{"2":{"41":1}}],["54",{"2":{"41":1}}],["50",{"2":{"41":1,"144":4,"145":4}}],["50000",{"2":{"15":1}}],["500",{"2":{"14":1}}],["5d",{"2":{"17":1}}],["52",{"2":{"41":1}}],["52521",{"2":{"15":1}}],["52709",{"2":{"15":2}}],["594711",{"2":{"6":1,"148":1,"149":1}}],["590591",{"2":{"6":1,"148":1,"149":1}}],["595397",{"2":{"6":1,"148":1,"149":1}}],["535",{"2":{"144":4}}],["5355",{"2":{"144":2}}],["53333",{"2":{"15":4}}],["53",{"2":{"6":10,"144":2,"156":10}}],["58",{"2":{"41":1}}],["58059",{"2":{"15":2}}],["587158",{"2":{"6":2,"148":2,"149":2}}],["58375366067547",{"2":{"6":1,"54":1}}],["584961",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["5",{"2":{"1":29,"3":4,"4":8,"6":83,"13":1,"41":1,"50":5,"51":8,"52":16,"56":18,"59":8,"63":8,"91":1,"97":4,"121":1,"129":2,"144":1,"145":1,"154":27,"160":1}}],["49",{"2":{"121":1}}],["43787",{"2":{"15":1}}],["439295815226",{"2":{"15":1}}],["434306",{"2":{"6":1,"148":1,"149":1}}],["484003",{"2":{"120":4}}],["482551",{"2":{"120":4}}],["48268",{"2":{"15":1}}],["48",{"2":{"41":1}}],["48001",{"2":{"15":1}}],["489271",{"2":{"6":4,"156":4}}],["45",{"2":{"41":2,"120":12}}],["450",{"2":{"13":1}}],["458369",{"2":{"6":2,"148":2,"149":2}}],["42",{"2":{"13":1,"14":1,"41":3}}],["426283",{"2":{"6":1,"148":1,"149":1}}],["400",{"2":{"41":3}}],["40000",{"2":{"15":1}}],["40",{"2":{"14":1,"41":3}}],["406224",{"2":{"6":1,"148":1,"149":1}}],["404504",{"2":{"6":1,"148":1,"149":1}}],["41",{"2":{"41":1}}],["41878",{"2":{"15":1}}],["414248",{"2":{"6":1,"148":1,"149":1}}],["419406",{"2":{"6":1,"148":1,"149":1}}],["44121252392",{"2":{"15":1}}],["44",{"2":{"14":1,"41":2}}],["442901",{"2":{"6":1,"148":1,"149":1}}],["446339",{"2":{"6":1,"148":1,"149":1}}],["477985",{"2":{"120":4}}],["47",{"2":{"41":3}}],["473835",{"2":{"6":1,"148":1,"149":1}}],["472117",{"2":{"6":2,"148":2,"149":2}}],["46",{"2":{"41":3}}],["468107",{"2":{"6":1,"148":1,"149":1}}],["465816",{"2":{"6":1,"148":1,"149":1}}],["464547",{"2":{"6":6,"156":6}}],["4",{"2":{"1":11,"3":4,"6":15,"9":2,"13":2,"14":1,"35":1,"48":1,"66":1,"79":1,"83":1,"91":2,"110":1,"120":1,"121":1,"129":3,"144":1,"151":1,"154":8}}],["3585",{"2":{"144":1}}],["35",{"2":{"41":3}}],["354492",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["38",{"2":{"41":3}}],["36",{"2":{"41":2}}],["360",{"2":{"36":1}}],["36022",{"2":{"15":1}}],["32",{"2":{"41":3}}],["37",{"2":{"41":5}}],["34",{"2":{"41":3}}],["31",{"2":{"41":2}}],["300",{"2":{"59":1}}],["30",{"2":{"14":2,"41":3}}],["3390",{"2":{"91":1}}],["33333333333",{"2":{"15":1}}],["333333333336",{"2":{"15":3}}],["33",{"2":{"6":20,"148":20,"149":20}}],["3d",{"2":{"4":1,"6":1,"42":2,"63":1,"129":1,"143":1}}],["3",{"2":{"1":13,"3":4,"5":1,"6":29,"14":2,"42":13,"44":6,"52":6,"56":5,"62":1,"66":1,"79":1,"83":1,"91":2,"96":1,"110":1,"121":16,"129":3,"137":16,"144":4,"149":3,"151":2,"153":1,"154":11,"158":1}}],["394759",{"2":{"6":1,"148":1,"149":1}}],["392466",{"2":{"6":1,"148":1,"149":1}}],["395332",{"2":{"6":1,"148":1,"149":1}}],["399918",{"2":{"6":2,"148":2,"149":2}}],["39",{"0":{"20":1},"2":{"0":1,"4":5,"6":17,"7":1,"9":2,"19":1,"21":1,"22":5,"23":1,"25":2,"26":1,"27":1,"31":1,"36":1,"38":1,"39":1,"40":1,"41":3,"42":2,"44":6,"45":3,"46":28,"48":1,"50":1,"51":1,"53":1,"54":4,"55":2,"57":2,"60":4,"63":7,"68":1,"78":2,"85":2,"91":18,"97":1,"99":1,"102":2,"122":2,"124":3,"125":1,"126":4,"129":5,"135":6,"136":1,"144":6,"145":1,"149":2,"157":1,"159":1,"160":2}}],["23",{"2":{"41":3,"91":1}}],["23699059147",{"2":{"15":1}}],["28",{"2":{"41":2}}],["28083",{"2":{"15":2}}],["26",{"2":{"41":5,"91":2}}],["24",{"2":{"41":7,"91":1}}],["274364",{"2":{"52":1,"54":1,"56":1}}],["274363",{"2":{"52":1,"54":1,"56":1}}],["27",{"2":{"41":2}}],["275543",{"2":{"6":6,"156":6}}],["2d",{"2":{"17":1,"143":1}}],["2^",{"2":{"14":1}}],["21",{"2":{"41":4,"91":2}}],["21427",{"2":{"11":5}}],["215118",{"2":{"6":4,"156":4}}],["29",{"2":{"41":3}}],["29th",{"0":{"8":1},"1":{"9":1,"10":1}}],["298",{"2":{"6":2,"145":2}}],["20",{"2":{"41":3,"91":2}}],["2018",{"2":{"91":1}}],["2019",{"2":{"24":1}}],["2017",{"2":{"6":1,"42":1}}],["2024",{"0":{"7":1,"8":1},"1":{"9":1,"10":1}}],["20th",{"0":{"7":1}}],["25",{"2":{"41":3,"65":1,"91":1,"109":1}}],["258",{"2":{"11":1}}],["25px",{"2":{"6":1}}],["257223563`",{"2":{"145":1}}],["257223563",{"2":{"6":2,"145":1}}],["22",{"2":{"41":3,"91":1}}],["22168",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["224758",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["2",{"2":{"1":19,"3":9,"5":1,"6":49,"13":1,"14":1,"15":3,"17":2,"36":3,"39":1,"41":6,"42":32,"44":2,"45":4,"46":6,"47":6,"48":7,"50":1,"51":2,"55":5,"56":1,"59":1,"60":3,"63":4,"66":2,"79":2,"80":2,"82":2,"83":3,"91":11,"110":2,"120":2,"121":8,"129":6,"138":1,"146":1,"149":5,"151":7,"152":7,"153":5,"154":18,"156":11}}],["1998",{"2":{"52":1,"54":1,"56":1}}],["19",{"2":{"41":2,"91":2}}],["11",{"2":{"15":2,"41":2,"91":1}}],["1145",{"2":{"52":1,"54":1,"56":1}}],["114",{"2":{"7":1}}],["165644",{"2":{"120":2}}],["163434",{"2":{"120":2}}],["169356",{"2":{"120":2}}],["166644",{"2":{"120":2}}],["164434",{"2":{"120":2}}],["16111",{"2":{"15":1}}],["16",{"2":{"13":1,"14":1,"41":2,"91":2}}],["180",{"2":{"36":1,"120":1}}],["18593721105",{"2":{"15":1}}],["18",{"2":{"13":1,"14":1,"41":3,"91":2}}],["1em",{"2":{"6":1}}],["1px",{"2":{"6":1}}],["13401805979",{"2":{"15":2}}],["13",{"2":{"6":3,"41":1,"52":1,"56":2,"91":1}}],["10m",{"2":{"149":1}}],["100",{"2":{"14":3}}],["1000",{"2":{"13":2,"144":2,"158":2}}],["10^9",{"2":{"13":1}}],["10",{"2":{"6":12,"11":1,"38":1,"41":5,"50":4,"51":10,"52":2,"54":1,"56":2,"62":2,"91":3,"96":2,"145":1,"149":3}}],["14",{"2":{"3":1,"6":3,"41":2,"54":2,"91":1,"93":1,"94":1,"144":2,"145":2}}],["15",{"2":{"3":1,"6":3,"41":1,"50":1,"51":1,"54":1,"91":1,"93":1,"94":1}}],["170356",{"2":{"120":2}}],["17",{"2":{"3":1,"6":2,"41":3,"54":1,"91":2,"93":1,"94":1}}],["125",{"2":{"6":1,"54":1}}],["127",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["123",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["126",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["12",{"2":{"3":1,"6":2,"41":2,"54":1,"91":1,"93":1,"94":1,"159":1}}],["124",{"2":{"3":1,"6":2,"54":1,"93":1,"94":1}}],["1",{"2":{"1":8,"3":38,"6":60,"13":1,"14":4,"15":1,"35":4,"36":15,"38":7,"40":2,"41":11,"42":16,"44":4,"45":7,"46":60,"47":9,"48":15,"50":1,"51":10,"53":3,"55":36,"56":4,"57":11,"59":7,"60":6,"63":16,"65":2,"66":6,"68":2,"69":2,"78":2,"79":8,"80":12,"82":2,"83":5,"91":38,"97":6,"99":4,"100":5,"102":1,"109":2,"110":6,"120":14,"121":40,"129":10,"131":12,"132":2,"138":9,"145":1,"146":4,"149":8,"151":15,"152":3,"153":15,"154":6,"156":9,"158":8,"159":3}}],["hypot",{"2":{"146":1}}],["h2",{"2":{"91":6}}],["h1",{"2":{"91":11}}],["hm",{"2":{"41":2}}],["h",{"2":{"36":2,"46":2,"57":8}}],["hit",{"2":{"129":5}}],["hits",{"2":{"26":1}}],["hidedecorations",{"2":{"41":2}}],["hinter",{"2":{"33":2,"142":1,"145":1}}],["hint",{"2":{"33":2,"145":1}}],["hinge=2",{"2":{"54":1}}],["hinge`",{"2":{"54":1}}],["hinge",{"2":{"6":1,"55":5,"91":15}}],["high",{"2":{"22":1}}],["hist",{"2":{"13":1}}],["histogram",{"2":{"13":1}}],["href=",{"2":{"6":1}}],["https",{"2":{"6":1,"52":1,"54":1,"55":1,"56":1,"91":2,"149":1,"151":1}}],["hcat",{"2":{"6":1}}],["heavily",{"2":{"129":1}}],["heatmap",{"2":{"13":5,"14":6,"41":2,"59":2,"121":1}}],["height",{"2":{"121":4}}],["help",{"2":{"126":1}}],["helpers",{"0":{"46":1},"2":{"80":1,"97":1}}],["helper",{"0":{"53":1,"55":1,"57":1},"2":{"45":1,"46":1,"51":1}}],["helps",{"2":{"20":1}}],["held",{"2":{"1":1,"6":1,"129":1}}],["here",{"2":{"6":2,"9":1,"13":1,"14":1,"28":1,"42":1,"55":1,"80":1,"121":1,"129":5,"131":1,"145":1,"157":2,"158":3}}],["hours",{"2":{"159":1}}],["horizontal",{"2":{"48":1,"149":1}}],["hormann",{"0":{"53":1,"55":1,"57":1},"2":{"6":2,"42":2,"46":3,"51":2,"52":1,"54":1,"56":1}}],["how",{"2":{"6":2,"38":1,"42":1,"46":1,"55":1,"63":1,"121":2,"124":1,"129":1,"140":1,"149":1,"157":2,"158":2,"159":1,"160":1}}],["however",{"2":{"3":1,"6":2,"36":1,"42":1,"45":1,"46":1,"59":1,"63":1,"65":1,"79":1,"136":1}}],["hook",{"2":{"6":1,"22":1,"149":1}}],["hole",{"2":{"36":1,"39":3,"41":2,"42":9,"45":4,"46":58,"48":3,"52":6,"54":2,"57":15,"60":3,"72":1,"73":1,"74":1,"91":33,"121":2,"132":2}}],["holes=",{"2":{"46":1}}],["holes",{"2":{"4":3,"5":1,"6":4,"9":2,"36":2,"38":1,"42":2,"45":1,"46":19,"51":4,"52":2,"54":2,"56":6,"57":29,"60":3,"63":3,"88":1,"91":11,"112":1,"121":1,"132":2}}],["holding",{"2":{"129":2}}],["holds",{"2":{"6":1,"46":1,"126":1,"147":1}}],["hold",{"2":{"6":1,"126":1,"149":1}}],["halign",{"2":{"149":1}}],["half",{"2":{"47":2}}],["hail",{"2":{"132":1}}],["hair",{"2":{"121":1}}],["handling",{"0":{"142":1},"2":{"122":1}}],["handler",{"2":{"142":1}}],["handle",{"2":{"33":1,"120":1,"127":2,"129":1}}],["handled",{"2":{"22":2,"26":1}}],["had",{"2":{"52":1,"54":1,"63":1,"126":1,"144":1}}],["happens",{"2":{"46":1}}],["happen",{"2":{"32":1}}],["hao",{"2":{"24":1,"91":1}}],["have",{"2":{"3":3,"4":9,"6":17,"22":1,"27":1,"31":1,"36":2,"39":3,"42":6,"46":4,"59":1,"60":2,"63":10,"91":5,"96":1,"97":3,"99":1,"100":1,"122":2,"124":2,"126":1,"128":1,"129":4,"149":1,"151":1,"157":1,"158":1,"159":3}}],["hassle",{"2":{"1":1,"6":1,"154":1}}],["has",{"2":{"1":4,"6":4,"35":1,"38":2,"42":2,"46":2,"53":1,"55":1,"57":1,"59":1,"60":1,"63":11,"102":1,"120":1,"129":4,"130":1,"144":2,"153":1}}],["bx",{"2":{"120":2}}],["b2",{"2":{"55":8,"60":3,"97":6}}],["b`",{"2":{"53":3,"55":4,"57":4}}],["bigger",{"2":{"46":1}}],["bit",{"2":{"17":1,"153":8}}],["b1",{"2":{"46":8,"55":9,"97":6}}],["build",{"2":{"46":13,"51":1,"52":1,"54":1,"56":1,"124":3,"125":1,"144":2,"152":1,"153":1}}],["built",{"2":{"25":1,"28":1}}],["buffer",{"2":{"45":2,"46":1}}],["buffering",{"2":{"42":1}}],["bunch",{"2":{"22":1}}],["but",{"2":{"1":2,"3":5,"4":3,"6":15,"17":1,"21":1,"26":1,"30":1,"36":1,"38":1,"39":1,"48":1,"57":2,"63":4,"68":2,"96":1,"97":5,"99":1,"100":1,"103":2,"104":1,"109":1,"120":1,"124":1,"126":1,"127":1,"129":16,"140":1,"141":1,"146":1,"149":1,"157":1,"158":1,"159":2}}],["b>",{"2":{"6":2}}],["blue",{"2":{"14":1,"50":1,"62":2,"65":2,"82":2,"96":2,"109":2,"158":2}}],["black",{"2":{"6":1,"50":1}}],["blob",{"2":{"6":1,"149":1}}],["breaks",{"2":{"138":1}}],["break",{"2":{"46":2,"48":1,"53":1,"63":4,"91":11,"97":1,"121":3,"138":2}}],["brevity",{"2":{"42":1}}],["br>",{"2":{"6":1}}],["broadcasting",{"2":{"6":1,"42":1}}],["broken",{"2":{"3":1,"6":1,"80":1}}],["balancing",{"2":{"129":2}}],["backs",{"2":{"51":4}}],["backwards",{"2":{"46":1,"53":1,"55":1,"57":1}}],["back",{"2":{"26":1,"30":1,"31":1,"51":4}}],["barrier",{"2":{"22":1,"129":1}}],["barycentric",{"0":{"5":1,"40":1,"42":1},"1":{"41":1,"42":1},"2":{"0":6,"5":10,"6":17,"9":1,"33":1,"40":9,"41":4,"42":52}}],["basicsgeoms",{"2":{"129":2}}],["basic",{"2":{"121":1}}],["basically",{"2":{"22":1}}],["base",{"2":{"33":3,"42":15,"46":2,"129":5,"142":1,"145":2,"146":1}}],["based",{"2":{"4":2,"6":3,"27":1,"36":2,"39":2,"41":2,"45":1,"48":1,"60":2,"63":1,"69":1,"83":1,"91":1,"97":1,"100":1,"110":1,"126":1,"157":1,"158":1}}],["b",{"2":{"3":2,"4":7,"6":13,"46":173,"48":9,"52":24,"53":17,"54":24,"55":37,"56":25,"57":39,"63":29,"94":7,"97":15}}],["bold",{"2":{"142":1,"145":1}}],["box",{"2":{"47":2,"48":3,"158":1}}],["bounaries",{"2":{"91":1}}],["bounce",{"2":{"46":7,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1}}],["bouncings",{"2":{"46":1}}],["bouncing",{"2":{"46":13,"53":3,"55":4,"57":4}}],["bounday",{"2":{"91":2,"103":2,"104":2,"105":2}}],["boundaries",{"2":{"3":2,"6":2,"78":2,"82":1,"83":1,"91":1,"93":1,"94":1}}],["boundary",{"2":{"3":7,"6":7,"59":1,"65":1,"66":1,"68":1,"69":3,"72":4,"79":2,"80":9,"83":2,"85":1,"86":6,"87":3,"91":16,"99":2,"100":4,"102":3,"103":3,"104":1,"105":1,"109":1,"110":3}}],["bounding",{"2":{"46":1,"47":2,"48":3}}],["boundscheck",{"2":{"42":14}}],["border",{"2":{"6":4,"121":7}}],["both",{"2":{"3":5,"6":6,"46":2,"55":3,"56":1,"57":1,"59":1,"63":3,"66":1,"80":4,"83":1,"91":2,"97":1,"104":1,"110":1,"144":1,"146":1}}],["booltype",{"2":{"126":3,"129":3,"146":1}}],["booleans",{"2":{"46":1,"91":2}}],["boolean",{"2":{"32":2,"46":1,"53":1,"55":1,"57":1,"126":1,"129":1,"157":1}}],["boolsastypes",{"0":{"32":1},"2":{"126":6,"146":2}}],["bools",{"2":{"10":1}}],["bool",{"2":{"3":17,"4":14,"6":36,"46":3,"63":17,"66":1,"69":1,"79":2,"80":13,"83":1,"94":1,"97":10,"100":2,"110":1,"120":7,"126":2,"146":2,"156":5}}],["bypred",{"2":{"160":1}}],["by",{"0":{"73":1,"74":1,"114":1},"2":{"1":3,"3":2,"4":8,"6":28,"7":1,"17":1,"22":1,"25":1,"26":2,"27":1,"30":1,"32":1,"35":1,"36":6,"38":1,"39":1,"42":4,"44":5,"45":4,"46":10,"47":1,"48":6,"50":1,"51":6,"52":1,"54":1,"56":4,"57":3,"60":5,"63":8,"66":1,"68":1,"69":1,"73":2,"74":2,"75":1,"76":2,"78":1,"90":2,"91":10,"120":2,"121":1,"124":2,"129":7,"135":2,"136":1,"138":3,"140":1,"141":2,"142":1,"143":1,"145":3,"146":1,"149":1,"150":1,"151":3,"152":1,"154":1,"157":2,"158":1,"159":2,"160":1}}],["berlin",{"2":{"159":1}}],["been",{"2":{"122":2,"126":1}}],["bearing",{"2":{"120":4}}],["beauty",{"2":{"9":1}}],["better",{"2":{"80":1,"129":2,"149":1}}],["between",{"2":{"4":4,"6":18,"31":1,"36":2,"42":13,"46":2,"48":18,"52":1,"53":4,"54":1,"55":7,"56":2,"57":4,"60":8,"63":1,"91":4,"94":2,"97":2,"121":2,"145":3,"146":1,"150":2,"151":2,"152":1,"157":2,"158":1}}],["become",{"2":{"30":1}}],["because",{"2":{"22":1,"46":1,"122":1}}],["best",{"2":{"27":1,"129":2,"149":1}}],["beware",{"2":{"26":1}}],["being",{"2":{"22":2,"36":1,"91":1,"97":1,"136":1}}],["behind",{"2":{"17":1,"41":1,"122":1}}],["behaviour",{"2":{"6":1,"26":1,"31":1,"149":1}}],["benchmarking",{"2":{"145":1,"149":1}}],["benchmarkgroup",{"2":{"145":2,"149":3}}],["benchmark",{"0":{"145":1,"149":1},"2":{"145":1,"149":1}}],["benchmarktools",{"2":{"13":1,"145":1,"149":1}}],["benchmarks",{"2":{"9":2}}],["beginning",{"2":{"48":1}}],["begin+1",{"2":{"42":5}}],["begin",{"2":{"9":1,"42":7,"129":2,"150":1}}],["before",{"2":{"6":4,"42":1,"52":1,"54":1,"56":1,"149":1}}],["below",{"2":{"6":2,"25":1,"46":1,"134":1,"151":1,"152":1,"153":1}}],["be",{"2":{"1":5,"3":3,"4":11,"5":4,"6":62,"7":1,"9":1,"13":2,"17":3,"22":1,"28":3,"31":2,"32":1,"36":8,"39":7,"40":2,"41":1,"42":10,"44":1,"45":3,"46":11,"47":1,"48":2,"51":1,"52":7,"53":4,"54":7,"55":5,"56":6,"57":5,"59":2,"60":4,"63":15,"69":6,"78":2,"79":1,"83":6,"91":21,"97":2,"100":6,"110":6,"112":1,"113":1,"114":1,"115":1,"120":2,"121":1,"124":2,"126":1,"127":2,"128":2,"129":10,"131":1,"132":1,"133":1,"134":3,"135":4,"136":2,"138":2,"139":1,"141":3,"142":1,"143":1,"145":8,"146":2,"149":10,"151":1,"153":3,"154":1,"157":4}}],["x=x",{"2":{"156":1}}],["x`",{"2":{"129":1}}],["xlast",{"2":{"60":3}}],["xfirst",{"2":{"60":5}}],["x0",{"2":{"60":5}}],["xn",{"2":{"48":4}}],["xinterior",{"2":{"45":2}}],["xcentroid",{"2":{"45":13}}],["xrange",{"2":{"41":3,"59":2}}],["xautolimits",{"2":{"41":2}}],["xp2",{"2":{"36":5}}],["xticklabelrotation",{"2":{"13":2}}],["x2",{"2":{"6":3,"42":4,"45":2,"48":18,"60":8,"80":10,"91":7,"97":4,"146":6,"156":2}}],["x26",{"2":{"6":2,"36":2,"39":6,"42":1,"46":52,"48":36,"52":4,"53":2,"55":30,"57":2,"60":3,"63":14,"75":2,"76":2,"80":48,"89":2,"90":2,"91":162,"94":2,"97":20,"102":2,"106":2,"107":2,"116":2,"117":2,"120":4,"121":10,"134":2,"138":6,"142":2,"145":2,"151":10,"152":2,"156":8,"157":1}}],["x1",{"2":{"6":4,"42":3,"45":2,"48":22,"60":8,"80":11,"91":8,"97":5,"146":7,"156":2}}],["xs",{"2":{"6":2,"48":4,"121":7,"156":4}}],["xmax",{"2":{"6":1,"47":2,"48":48}}],["xmin",{"2":{"6":1,"47":2,"48":49}}],["x3c",{"2":{"5":1,"6":25,"33":1,"36":4,"39":2,"42":66,"46":16,"48":11,"51":3,"52":1,"54":1,"55":13,"56":1,"59":1,"60":13,"63":2,"80":33,"91":13,"94":2,"97":8,"120":1,"121":7,"124":2,"126":4,"129":19,"132":2,"135":3,"138":5,"145":2,"150":2,"151":6,"152":3,"153":9,"156":2,"160":1}}],["xy`",{"2":{"141":1}}],["xy",{"2":{"1":4,"42":1,"121":2,"141":3}}],["x",{"2":{"1":4,"4":1,"6":6,"7":1,"9":5,"11":6,"13":11,"14":10,"15":4,"36":9,"39":2,"41":8,"44":1,"45":10,"46":25,"47":1,"48":8,"51":6,"53":9,"55":25,"57":9,"59":2,"60":7,"63":3,"80":21,"91":18,"97":7,"120":9,"121":4,"122":2,"126":4,"129":17,"134":2,"139":2,"140":4,"141":1,"146":2,"149":2,"151":2,"153":1,"154":2,"155":2,"156":34,"157":1,"159":2}}],["=>",{"2":{"129":2}}],["=float64",{"2":{"45":3,"54":1,"56":1}}],["=false",{"2":{"36":1}}],["===",{"2":{"80":8,"120":4}}],["==",{"2":{"9":1,"27":1,"36":4,"39":2,"42":9,"45":1,"46":29,"48":30,"53":1,"55":19,"56":2,"57":1,"59":1,"63":16,"91":40,"97":2,"120":3,"121":11,"129":1,"132":1,"134":1,"138":1,"142":1,"145":2,"149":1,"153":3}}],["=",{"2":{"1":5,"3":17,"4":7,"5":2,"6":57,"11":1,"13":19,"14":33,"15":18,"33":4,"35":4,"36":56,"38":6,"39":25,"41":35,"42":110,"44":6,"45":36,"46":295,"47":6,"48":95,"50":7,"51":28,"52":20,"53":26,"54":17,"55":103,"56":20,"57":77,"59":15,"60":52,"62":7,"63":40,"65":7,"66":3,"68":4,"69":21,"70":3,"71":7,"72":14,"73":14,"74":4,"75":2,"76":2,"78":5,"79":3,"80":56,"82":7,"83":16,"84":3,"85":11,"86":17,"87":9,"88":3,"89":2,"90":2,"91":188,"93":3,"94":7,"96":7,"97":34,"99":3,"100":20,"101":3,"102":9,"103":14,"104":10,"105":6,"106":2,"107":2,"109":7,"110":20,"111":3,"112":11,"113":14,"114":14,"115":4,"116":2,"117":2,"120":32,"121":78,"122":1,"126":11,"129":90,"131":2,"132":4,"134":9,"137":3,"138":30,"139":1,"142":2,"144":16,"145":21,"146":18,"148":5,"149":60,"150":11,"151":48,"152":7,"153":43,"154":2,"155":1,"156":44,"158":12,"159":6,"160":2}}],["u2",{"2":{"91":4}}],["u1",{"2":{"91":4}}],["upper",{"2":{"158":1}}],["update",{"2":{"46":6}}],["updated",{"2":{"46":6,"129":3}}],["updates",{"2":{"42":1}}],["up",{"2":{"46":2,"91":1,"104":1,"127":1,"137":1,"151":2}}],["uv",{"2":{"42":1}}],["utility",{"0":{"156":1},"2":{"42":1,"129":2}}],["utilizes",{"2":{"22":1}}],["utils",{"0":{"153":1},"2":{"33":1}}],["u>",{"2":{"6":1}}],["u>geometryops",{"2":{"6":1}}],["usage",{"2":{"159":1}}],["usa",{"2":{"149":15,"159":3}}],["us",{"2":{"39":1,"159":1}}],["ususally",{"2":{"6":1,"124":1,"129":1}}],["usual",{"2":{"6":1,"132":1,"135":1}}],["usecases",{"2":{"17":1}}],["uses",{"2":{"6":1,"91":1,"121":1,"141":1,"145":1,"149":1}}],["users",{"2":{"22":3,"33":1,"122":1,"136":1}}],["user",{"2":{"6":12,"31":1,"45":1,"52":3,"54":3,"56":3,"150":1,"151":1,"152":1,"157":1}}],["useful",{"2":{"6":9,"42":1,"143":1,"146":1,"149":2}}],["used",{"2":{"1":1,"5":1,"6":7,"36":1,"39":1,"40":1,"42":1,"45":2,"46":6,"48":1,"51":1,"55":1,"59":1,"60":1,"63":1,"97":1,"121":1,"124":1,"126":1,"129":3,"130":1,"146":1,"149":1,"151":2,"157":2,"158":1}}],["use",{"2":{"1":2,"4":1,"5":1,"6":8,"11":1,"21":1,"22":1,"28":1,"31":1,"42":1,"55":2,"57":1,"80":2,"97":1,"121":1,"126":1,"129":7,"132":1,"140":1,"144":1,"146":1,"149":1,"151":2,"157":2,"160":2}}],["using",{"2":{"1":4,"4":1,"5":3,"6":11,"11":4,"13":4,"14":1,"15":1,"33":7,"35":1,"36":1,"38":2,"39":2,"41":4,"42":7,"44":2,"45":1,"46":5,"47":2,"48":1,"50":2,"51":1,"53":3,"55":4,"57":3,"59":2,"60":2,"62":2,"63":1,"65":2,"66":1,"68":2,"69":1,"76":1,"78":2,"79":1,"80":1,"82":2,"83":1,"90":1,"91":1,"93":2,"94":1,"96":2,"97":1,"99":2,"100":1,"107":1,"109":2,"110":1,"117":1,"120":1,"121":4,"122":2,"127":1,"129":4,"132":1,"135":1,"138":1,"139":2,"140":1,"141":1,"142":3,"144":1,"145":5,"146":1,"149":2,"151":1,"153":1,"154":4,"155":2,"156":1,"157":1,"158":4,"159":2}}],["until",{"2":{"127":1,"151":1}}],["uneeded",{"2":{"52":1,"54":1,"56":1}}],["uneccesary",{"2":{"6":3,"150":1,"151":1,"152":1}}],["unprocessed",{"2":{"46":1}}],["unknown",{"2":{"46":4,"48":15}}],["unknown=3",{"2":{"46":1}}],["unmatched",{"2":{"46":9,"48":26}}],["under",{"2":{"39":2}}],["undergrad",{"2":{"9":1}}],["undef",{"2":{"36":2,"46":1,"150":1,"151":1,"153":2,"156":2}}],["unless",{"2":{"30":1,"46":1,"53":2,"55":2,"57":2}}],["unlike",{"2":{"26":1}}],["unstable",{"2":{"13":1,"126":1,"129":1}}],["unneeded",{"2":{"6":3,"46":1,"52":1,"54":1,"56":1}}],["united",{"2":{"149":1}}],["unify",{"2":{"17":1}}],["unique",{"2":{"6":2,"135":2,"138":2}}],["unioning",{"2":{"57":1}}],["unionintersectingpolygons",{"2":{"0":1,"6":8,"52":1,"53":2,"54":1,"55":2,"56":1,"57":2,"135":2,"136":2,"137":1,"138":4}}],["unions",{"0":{"57":1},"2":{"26":1}}],["union",{"0":{"56":1},"2":{"0":1,"1":2,"3":2,"4":4,"6":21,"11":3,"31":2,"33":1,"36":2,"39":1,"42":1,"45":4,"46":7,"48":1,"54":2,"55":1,"56":18,"57":30,"60":1,"63":8,"71":2,"72":4,"73":1,"75":2,"76":1,"85":2,"86":6,"89":2,"90":1,"97":4,"102":2,"103":4,"104":1,"106":2,"107":1,"112":2,"113":4,"114":1,"116":2,"117":1,"120":1,"122":1,"126":3,"127":3,"129":7,"135":1,"136":1,"138":9,"146":5,"149":1,"150":3,"151":3,"152":3,"156":1}}],["unchanged",{"2":{"1":1,"6":2,"129":1,"149":1}}],["unwrap",{"2":{"0":1,"6":3,"124":1,"129":16}}],["nselected",{"2":{"153":3}}],["nmax",{"2":{"153":2}}],["nice",{"2":{"151":1}}],["nvkelso",{"2":{"149":1}}],["null",{"2":{"145":1}}],["numerator",{"2":{"55":1}}],["numeric",{"2":{"11":1}}],["num",{"2":{"55":18}}],["numbers",{"2":{"6":1,"7":1,"40":2,"42":1,"145":1}}],["number=6",{"2":{"6":1,"148":1,"149":1}}],["number",{"2":{"6":11,"42":1,"46":2,"51":1,"59":1,"63":2,"91":2,"143":1,"144":1,"146":1,"149":2,"150":4,"151":7,"152":4,"153":12}}],["n+1",{"2":{"131":1}}],["nthe",{"2":{"142":1,"145":1}}],["nthreads",{"2":{"129":3}}],["ntasks",{"2":{"129":6}}],["ntuple",{"2":{"42":3,"146":1}}],["nfeature",{"2":{"129":2}}],["nc",{"2":{"91":13}}],["ncoord",{"2":{"63":2}}],["nl",{"2":{"91":11}}],["nhole",{"2":{"46":2,"52":2,"54":2,"56":2,"57":1,"63":2}}],["nbd",{"2":{"121":8}}],["nbpts",{"2":{"46":2}}],["nbsp",{"2":{"1":4,"3":9,"4":8,"5":3,"6":86,"124":3,"134":1,"135":4}}],["ngeom",{"2":{"45":1,"129":2,"156":1}}],["n2",{"2":{"42":8,"63":10}}],["n1",{"2":{"42":8,"63":9}}],["np2",{"2":{"80":4}}],["npolygon",{"2":{"53":1,"63":3,"138":2}}],["npoints",{"2":{"36":6,"46":5,"55":8,"91":3,"145":6,"151":7}}],["npoint",{"2":{"6":1,"36":2,"38":1,"39":1,"48":2,"60":1,"63":6,"80":6,"91":6,"102":1,"120":2,"132":1,"145":3,"146":1,"149":14,"153":1,"156":13}}],["npts",{"2":{"46":4,"151":3}}],["np",{"2":{"39":2,"60":5}}],["natural",{"2":{"149":2,"157":1}}],["naturalearth",{"2":{"11":2}}],["nature",{"2":{"121":1}}],["napts",{"2":{"46":3}}],["named",{"2":{"129":1}}],["namedtuple",{"2":{"30":2,"129":2}}],["name",{"2":{"33":2,"149":1,"159":1}}],["names",{"2":{"33":3,"129":6}}],["nan",{"2":{"9":1}}],["n",{"2":{"6":1,"9":1,"40":2,"42":36,"46":49,"51":10,"55":13,"56":4,"57":4,"91":11,"102":2,"120":6,"121":4,"131":1,"138":25,"142":2,"145":2,"146":3,"149":2,"153":7,"156":32}}],["nor",{"2":{"142":1,"145":1}}],["north",{"2":{"48":12}}],["normalized",{"2":{"42":1}}],["normalize",{"2":{"42":1}}],["norm",{"2":{"6":1,"42":22}}],["nodes",{"2":{"46":1}}],["node",{"2":{"46":25}}],["now",{"2":{"6":1,"13":1,"17":1,"38":1,"41":2,"42":4,"46":1,"51":1,"57":1,"60":1,"120":1,"121":1,"137":1,"143":1,"144":3,"145":1,"149":1,"158":2}}],["no",{"2":{"6":5,"22":1,"36":1,"42":2,"46":4,"52":1,"54":1,"55":3,"56":1,"63":2,"69":3,"83":3,"91":2,"100":2,"102":1,"104":1,"105":2,"110":2,"112":1,"113":3,"114":3,"115":1,"122":1,"129":3,"143":1,"145":2,"146":1,"149":1}}],["nonzero",{"2":{"146":1}}],["none",{"2":{"6":4,"51":1,"52":1,"54":1,"55":1,"56":1,"57":1,"80":4,"82":1}}],["nondimensional",{"2":{"6":1,"145":1}}],["nonintersecting",{"2":{"6":1,"31":1,"135":1,"138":1}}],["non",{"2":{"3":2,"6":2,"30":1,"40":2,"46":12,"52":2,"53":1,"54":1,"55":1,"56":1,"57":2,"59":1,"97":2,"104":1,"126":1,"127":1}}],["note",{"2":{"4":4,"6":10,"19":1,"22":1,"27":1,"36":1,"39":2,"42":1,"44":2,"45":2,"46":2,"48":1,"51":2,"53":3,"55":4,"57":3,"60":1,"63":5,"91":1,"96":1,"97":1,"126":1,"141":1,"146":1,"150":1,"151":2,"152":1}}],["not",{"2":{"1":2,"3":8,"4":1,"6":18,"22":4,"26":1,"27":1,"30":1,"32":1,"36":4,"39":1,"42":4,"44":1,"46":16,"51":1,"54":1,"57":3,"62":2,"63":4,"65":2,"66":1,"68":2,"69":2,"78":1,"79":2,"83":3,"85":5,"86":3,"87":2,"88":2,"91":4,"96":1,"97":2,"100":1,"109":2,"110":2,"112":1,"120":5,"121":1,"126":2,"127":1,"128":1,"129":10,"131":2,"134":2,"137":3,"140":1,"141":1,"142":1,"143":1,"145":2,"146":1,"157":1}}],["nothing`",{"2":{"53":2,"55":2,"57":2}}],["nothing",{"2":{"1":34,"4":1,"6":43,"15":3,"46":4,"51":1,"53":2,"54":1,"55":4,"57":2,"63":1,"91":1,"120":9,"129":8,"131":24,"134":1,"137":60,"142":1,"146":1,"149":2,"150":6,"151":6,"152":6,"153":1,"154":32,"156":7}}],["ne",{"2":{"149":1}}],["net",{"2":{"134":2}}],["ness",{"2":{"129":1}}],["nesting",{"2":{"127":2}}],["nestedloopfast",{"2":{"160":1}}],["nested",{"2":{"1":2,"4":1,"6":5,"26":1,"36":1,"127":2,"129":4,"149":1,"155":1}}],["never",{"2":{"127":1,"150":1}}],["neither",{"2":{"57":1}}],["neightbor",{"2":{"46":1}}],["neighborhood",{"2":{"121":2}}],["neighbor",{"2":{"46":26}}],["neighboring",{"2":{"6":6,"46":1,"149":1,"150":1,"151":1,"152":2}}],["nedge",{"2":{"46":2,"156":13}}],["next",{"2":{"45":1,"46":46,"48":3,"51":4,"91":14,"121":1,"138":13,"151":5}}],["neatly",{"2":{"25":1}}],["necessarily",{"2":{"6":1,"120":1,"140":1}}],["necessary",{"2":{"6":1,"127":1,"149":1}}],["newfeature",{"2":{"129":2}}],["newp",{"2":{"121":8}}],["new",{"2":{"6":1,"22":1,"46":57,"48":9,"52":3,"55":9,"57":16,"91":2,"128":1,"129":18,"134":2,"135":1,"136":1,"138":19,"146":8,"150":1,"151":2,"152":1,"159":1}}],["negative",{"2":{"4":3,"6":3,"38":2,"39":1,"40":2,"59":2,"60":3}}],["needs",{"2":{"22":1,"45":1}}],["needing",{"2":{"4":1,"6":1,"25":1,"139":1}}],["need",{"0":{"22":1},"2":{"1":1,"3":1,"4":2,"5":1,"6":5,"42":2,"44":1,"46":2,"63":4,"78":1,"79":1,"91":1,"122":1,"139":1,"153":1,"154":1,"160":2}}],["needed",{"2":{"1":2,"6":4,"36":1,"42":1,"46":4,"48":1,"52":1,"54":1,"56":1,"60":2,"91":5,"129":2,"134":1,"141":3}}],["gadm",{"2":{"159":4}}],["gardner",{"2":{"23":1}}],["gc",{"2":{"134":6}}],["g",{"2":{"36":3,"39":3,"45":3,"48":3,"60":6,"127":1,"129":6,"149":5,"156":2}}],["gb",{"2":{"33":1,"129":16}}],["global",{"2":{"22":1}}],["guiding",{"2":{"22":1}}],["guarantee",{"2":{"20":1,"27":1}}],["guaranteed",{"2":{"1":1,"6":1,"36":1,"129":1}}],["gdal",{"2":{"22":1}}],["grand",{"2":{"159":1}}],["grained",{"2":{"144":1}}],["graphics",{"2":{"6":1,"42":1}}],["greiner",{"0":{"53":1,"55":1,"57":1},"2":{"46":3,"51":2,"52":1,"54":1,"56":1}}],["green",{"2":{"14":1}}],["greater",{"2":{"6":1,"120":1,"146":1}}],["grid",{"2":{"6":1,"41":1,"48":4}}],["grouping",{"2":{"1":1,"6":1,"129":2}}],["g2",{"2":{"3":5,"6":5,"66":4,"69":12,"70":6,"71":9,"72":6,"73":6,"74":3,"75":4,"76":2,"79":3,"80":21,"83":10,"84":6,"85":10,"86":8,"87":4,"88":2,"89":4,"90":2,"100":10,"101":6,"102":10,"103":6,"104":5,"105":4,"106":4,"107":2,"110":10,"111":6,"112":9,"113":6,"114":6,"115":3,"116":4,"117":2}}],["g1",{"2":{"3":5,"4":1,"6":6,"66":4,"69":12,"70":6,"71":9,"72":6,"73":6,"74":3,"75":2,"76":4,"79":3,"80":21,"83":9,"84":6,"85":10,"86":8,"87":4,"88":2,"89":2,"90":4,"100":10,"101":6,"102":9,"103":6,"104":5,"105":4,"106":2,"107":4,"110":10,"111":6,"112":9,"113":6,"114":6,"115":3,"116":2,"117":4}}],["got",{"2":{"153":3}}],["good",{"2":{"22":1,"42":1}}],["going",{"2":{"4":4,"6":4,"48":2,"63":5}}],["go",{"2":{"1":5,"3":17,"4":2,"6":41,"11":9,"13":1,"14":1,"15":6,"26":1,"33":2,"35":1,"38":1,"42":1,"44":2,"47":1,"50":2,"51":2,"52":2,"54":2,"56":2,"59":6,"62":1,"63":2,"65":2,"66":2,"68":1,"69":2,"78":2,"79":2,"80":1,"82":1,"83":2,"93":1,"94":2,"96":1,"97":2,"99":1,"100":2,"109":2,"110":2,"120":6,"122":1,"124":1,"129":3,"131":3,"137":3,"144":7,"145":8,"148":2,"149":49,"154":3,"156":2,"157":9,"158":2,"159":5,"160":1}}],["gtrait",{"2":{"60":2}}],["gt",{"2":{"1":1,"6":1,"9":2,"10":1,"11":5,"46":3,"120":3}}],["gif",{"2":{"151":1}}],["githack",{"2":{"149":1}}],["github",{"2":{"6":1}}],["gives",{"2":{"159":1}}],["give",{"2":{"91":1}}],["given",{"2":{"4":7,"6":22,"19":1,"26":2,"35":1,"36":1,"39":2,"45":3,"46":4,"48":3,"51":5,"52":1,"53":2,"54":1,"55":4,"56":1,"57":2,"60":8,"63":4,"65":1,"66":1,"69":1,"78":1,"79":1,"83":1,"91":7,"93":1,"94":1,"100":1,"102":1,"110":1,"121":2,"122":1,"134":4,"135":1,"137":1,"143":2,"145":2,"146":2,"152":1}}],["gis",{"2":{"5":1,"6":1,"17":1,"42":1}}],["gi",{"2":{"1":13,"3":42,"4":31,"6":123,"11":8,"13":15,"14":15,"15":8,"26":2,"33":1,"35":3,"36":30,"38":5,"39":21,"41":1,"44":5,"45":38,"46":40,"47":5,"48":17,"50":6,"51":13,"52":19,"53":16,"54":25,"55":31,"56":17,"57":36,"59":8,"60":42,"62":7,"63":99,"65":7,"66":3,"68":3,"69":4,"70":6,"71":12,"72":10,"73":7,"74":4,"75":8,"76":6,"78":3,"79":3,"80":21,"82":7,"83":2,"84":3,"85":12,"86":14,"87":4,"88":2,"89":8,"90":6,"91":59,"93":5,"94":3,"96":7,"97":51,"99":5,"100":3,"101":6,"102":15,"103":10,"104":7,"105":4,"106":8,"107":6,"109":7,"110":2,"111":6,"112":12,"113":10,"114":7,"115":4,"116":8,"117":6,"120":32,"122":4,"124":2,"126":8,"129":115,"131":2,"132":10,"134":9,"137":3,"138":8,"139":1,"140":5,"144":6,"145":6,"146":12,"148":2,"149":34,"153":4,"154":9,"155":5,"156":57,"158":5,"159":2}}],["generic",{"2":{"30":1}}],["generation",{"2":{"149":2}}],["generated",{"2":{"33":1,"36":1,"39":1,"42":1,"45":1,"46":1,"48":1,"51":1,"53":1,"55":1,"57":1,"60":1,"63":1,"66":1,"76":1,"79":1,"80":1,"90":1,"91":1,"94":1,"97":1,"107":1,"117":1,"120":1,"121":1,"129":1,"132":1,"135":1,"138":1,"139":1,"140":1,"142":1,"146":1,"149":1,"153":1,"154":1,"155":1,"156":1,"158":1}}],["generate",{"2":{"7":1,"13":2,"149":1,"158":2}}],["generalization",{"2":{"40":1}}],["generalized",{"2":{"6":1,"40":3,"42":1}}],["generalise",{"2":{"6":4,"149":1}}],["general",{"0":{"2":1,"4":1},"1":{"3":1,"4":1},"2":{"17":1,"26":1,"28":1,"122":1,"142":1}}],["getfeature",{"2":{"129":5,"156":5}}],["getcolumn",{"2":{"129":4}}],["getgeom",{"2":{"75":1,"76":1,"89":1,"90":1,"97":2,"106":1,"107":1,"116":1,"117":1,"129":6,"149":3,"156":6}}],["getring",{"2":{"46":1}}],["getindex",{"2":{"42":2}}],["gethole",{"2":{"36":1,"39":1,"45":1,"46":4,"48":1,"51":1,"52":2,"54":2,"57":6,"60":1,"63":2,"91":5,"132":1}}],["getexterior",{"2":{"36":1,"39":1,"42":1,"45":1,"46":3,"48":1,"51":1,"52":2,"54":2,"56":3,"57":6,"60":1,"63":2,"91":5,"120":1,"132":1}}],["getpolygon",{"2":{"53":3,"55":2,"57":2,"63":3}}],["getpoint",{"2":{"35":1,"36":5,"38":2,"39":1,"42":1,"44":1,"45":6,"46":3,"47":2,"48":3,"50":3,"59":1,"60":6,"62":4,"63":13,"65":4,"68":1,"78":1,"80":7,"82":4,"91":28,"93":2,"96":4,"97":2,"99":2,"102":2,"109":4,"120":5,"132":3,"144":4,"146":2,"153":1,"156":3}}],["getproperty",{"2":{"13":2,"14":1}}],["getting",{"2":{"21":1}}],["get",{"2":{"0":1,"6":2,"13":1,"38":1,"46":7,"52":1,"53":1,"54":1,"55":2,"56":2,"121":4,"129":4,"142":1,"145":3,"149":1,"150":1,"152":1,"153":2,"156":1,"159":2}}],["geo",{"2":{"145":4}}],["geointeface",{"2":{"127":1}}],["geointerace",{"2":{"30":1}}],["geointerfacemakie",{"2":{"148":1,"158":1,"159":1}}],["geointerface",{"0":{"20":1},"2":{"1":18,"3":9,"4":2,"6":39,"11":1,"13":1,"14":1,"15":1,"17":1,"20":1,"24":1,"30":3,"33":7,"35":1,"36":1,"38":1,"39":1,"42":23,"44":1,"45":1,"46":1,"47":1,"48":1,"50":1,"51":1,"52":1,"54":1,"56":1,"59":1,"60":11,"62":1,"63":2,"65":1,"66":2,"68":1,"69":2,"78":1,"79":2,"80":1,"82":1,"83":3,"93":1,"94":2,"96":1,"97":2,"99":1,"100":2,"109":1,"110":2,"120":5,"124":3,"127":3,"129":6,"131":9,"134":1,"135":1,"137":23,"139":1,"141":2,"144":1,"145":1,"148":1,"149":2,"154":13,"155":1,"156":1,"158":1,"159":1}}],["geoscontext",{"2":{"145":1}}],["geosdensify",{"2":{"145":3}}],["geos",{"2":{"22":2}}],["geospatial",{"2":{"22":1}}],["geotable",{"2":{"19":1}}],["geojson",{"2":{"11":1,"149":5}}],["geographiclib",{"2":{"6":1,"22":1,"145":1}}],["geodetic",{"2":{"22":1}}],["geodesic`",{"2":{"145":2}}],["geodesic",{"2":{"6":5,"33":1,"144":6,"145":8,"146":1}}],["geodesicsegments",{"2":{"0":1,"6":2,"143":1,"144":3,"145":6,"146":2}}],["geod",{"2":{"6":2,"145":3}}],["geoformattypes",{"2":{"1":2,"141":2}}],["geomfromgeos",{"2":{"145":1}}],["geomtype",{"2":{"129":4}}],["geoms",{"2":{"6":1,"124":1,"129":26}}],["geometies",{"2":{"3":1,"6":1,"99":1,"100":1}}],["geometrie",{"2":{"86":1}}],["geometries",{"0":{"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1},"2":{"1":5,"3":8,"4":14,"6":60,"17":2,"19":4,"26":3,"28":1,"30":3,"35":1,"36":3,"39":4,"45":1,"48":2,"51":1,"52":5,"54":5,"55":4,"56":5,"59":1,"60":4,"62":1,"63":7,"66":1,"68":1,"69":1,"80":2,"83":2,"91":1,"93":1,"94":1,"96":2,"97":3,"99":2,"100":2,"110":2,"112":1,"122":1,"124":4,"126":1,"128":2,"129":12,"139":1,"141":2,"143":3,"144":1,"145":4,"146":1,"147":1,"150":1,"151":1,"152":1,"155":1,"156":1,"157":5,"158":1,"160":1}}],["geometrical",{"2":{"157":1}}],["geometrically",{"2":{"22":1}}],["geometric",{"2":{"17":2,"44":1}}],["geometryof",{"2":{"129":1}}],["geometryopsprojext",{"2":{"141":1,"142":1,"145":1,"146":1}}],["geometryops",{"0":{"0":1,"33":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"0":114,"1":6,"3":18,"4":9,"5":3,"6":108,"7":2,"11":1,"13":1,"14":1,"15":1,"17":1,"22":3,"25":2,"33":1,"35":1,"38":1,"41":5,"44":1,"47":1,"50":1,"51":1,"52":1,"54":1,"56":1,"59":1,"62":1,"63":1,"65":1,"66":2,"68":1,"69":2,"78":1,"79":2,"80":2,"82":1,"83":2,"93":1,"94":1,"96":1,"97":1,"99":1,"100":2,"109":1,"110":2,"120":3,"121":1,"124":4,"129":1,"131":1,"134":1,"135":4,"137":1,"142":1,"144":1,"145":2,"148":1,"149":2,"154":1,"156":1,"157":1,"158":2,"159":2}}],["geometrybasics",{"2":{"33":3,"41":2,"42":10,"59":1,"69":1,"100":1,"110":1,"129":1}}],["geometrycolumns",{"2":{"129":3}}],["geometrycollections",{"2":{"157":1}}],["geometrycollection",{"2":{"31":1,"159":1}}],["geometrycollectiontrait",{"2":{"31":1,"75":1,"76":1,"89":1,"90":1,"106":1,"107":1,"116":1,"117":1}}],["geometrycorrections",{"2":{"134":1}}],["geometrycorrection",{"2":{"0":1,"6":11,"132":2,"133":2,"134":13,"135":11,"138":4}}],["geometry",{"0":{"2":1,"54":1,"75":2,"76":2,"89":2,"90":2,"106":2,"107":2,"116":2,"117":2,"133":1,"141":1,"147":1},"1":{"3":1,"4":1,"134":1,"135":1,"142":1,"148":1,"149":1},"2":{"1":10,"3":23,"4":12,"6":70,"9":1,"11":2,"19":1,"22":1,"26":4,"28":1,"31":3,"33":1,"36":7,"39":4,"45":3,"47":1,"48":4,"51":4,"55":3,"59":4,"60":6,"63":8,"65":5,"66":2,"68":4,"69":5,"70":4,"71":1,"75":3,"76":4,"78":4,"79":4,"80":3,"82":2,"83":5,"84":4,"85":2,"86":1,"89":3,"90":4,"91":2,"93":2,"97":3,"99":2,"100":3,"101":4,"102":2,"106":3,"107":4,"109":4,"110":5,"111":4,"116":3,"117":4,"119":1,"122":3,"124":2,"127":2,"129":42,"131":1,"132":1,"133":2,"134":23,"135":6,"139":1,"140":1,"141":6,"143":3,"144":1,"145":5,"146":8,"149":6,"156":6,"157":1,"158":7,"159":4,"160":2}}],["geom2",{"2":{"3":8,"4":1,"6":9,"60":6,"63":1,"80":6,"83":1,"94":3,"97":6,"100":1,"110":2}}],["geom1",{"2":{"3":8,"4":1,"6":9,"60":6,"63":1,"80":4,"83":1,"94":3,"97":6,"100":1,"110":2}}],["geom",{"2":{"1":7,"4":21,"6":48,"26":3,"33":12,"36":25,"39":17,"45":28,"46":14,"48":6,"51":15,"52":8,"53":2,"54":12,"55":10,"56":9,"57":9,"60":28,"63":45,"69":4,"80":1,"83":4,"91":2,"97":1,"100":4,"110":4,"120":3,"122":2,"124":3,"129":94,"138":11,"140":4,"146":13,"149":36,"153":3,"154":7,"155":4,"156":13,"159":6}}],["o",{"2":{"129":24}}],["odd",{"2":{"91":1}}],["old",{"2":{"46":8,"129":3}}],["occupied",{"2":{"38":1}}],["ourselves",{"2":{"145":1}}],["our",{"2":{"32":1,"145":1,"158":1}}],["out=3",{"2":{"91":1}}],["out=4",{"2":{"54":1}}],["out`",{"2":{"54":1,"91":1}}],["out",{"2":{"6":2,"22":1,"46":9,"48":23,"55":3,"57":4,"59":5,"69":4,"80":1,"83":3,"91":98,"94":1,"97":1,"100":4,"110":4,"120":1,"129":1,"146":1}}],["outside",{"2":{"3":2,"4":1,"6":3,"46":4,"48":1,"53":2,"55":2,"57":3,"59":2,"60":1,"68":1,"79":1,"82":1,"91":12,"97":3,"115":1}}],["outputs",{"2":{"46":1}}],["output",{"2":{"3":8,"4":1,"6":17,"26":1,"31":1,"51":2,"52":1,"54":1,"56":1,"57":2,"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"120":2,"149":1,"153":1,"156":1}}],["outermost",{"2":{"129":1}}],["outer",{"2":{"1":1,"6":1,"121":3,"127":1,"129":2,"157":1,"158":1}}],["own",{"2":{"22":1,"57":1,"122":2}}],["omit",{"2":{"6":1,"145":1}}],["obtained",{"2":{"31":1}}],["obtain",{"2":{"22":1,"129":1}}],["observable",{"2":{"14":2}}],["obs",{"2":{"14":10}}],["obviously",{"2":{"4":1,"6":1,"139":1}}],["objects",{"2":{"1":3,"4":1,"6":16,"124":3,"127":5,"129":7,"139":1,"143":1,"149":2,"155":1}}],["object",{"2":{"1":4,"4":1,"5":1,"6":8,"28":1,"42":1,"59":1,"91":4,"124":1,"127":5,"129":3,"139":1,"141":3,"145":1,"149":1,"155":1}}],["obj",{"2":{"1":4,"4":1,"6":17,"124":3,"129":10,"139":1,"140":2,"145":3,"149":3,"154":1,"155":1}}],["others",{"2":{"22":1,"138":1}}],["otherwise",{"2":{"4":2,"6":3,"46":1,"53":1,"60":2,"140":1,"142":1,"145":1,"156":1}}],["other",{"0":{"4":1,"6":1},"2":{"3":4,"6":10,"22":2,"36":1,"46":3,"52":1,"54":1,"56":2,"57":3,"60":2,"63":2,"65":1,"71":1,"91":8,"93":1,"96":1,"97":4,"99":2,"100":2,"103":1,"112":1,"124":1,"126":1,"127":1,"129":1,"135":2,"136":1,"138":2,"149":2,"151":1,"157":1,"160":1}}],["ogc",{"0":{"3":1}}],["over=3",{"2":{"54":1}}],["over`",{"2":{"54":1}}],["overflow",{"2":{"51":1}}],["overhead",{"2":{"30":1,"129":2}}],["override",{"2":{"6":1,"42":1}}],["overlapping",{"2":{"46":10,"55":2,"57":6}}],["overlap",{"2":{"3":4,"6":4,"9":1,"46":2,"55":2,"57":2,"69":1,"78":1,"91":2,"96":5,"97":6,"110":1,"136":1}}],["overlaps",{"0":{"95":1,"96":1},"1":{"96":1,"97":1},"2":{"0":10,"3":5,"6":13,"33":1,"95":1,"96":3,"97":30,"157":1}}],["over",{"2":{"1":1,"6":3,"38":2,"39":1,"45":3,"46":5,"48":1,"54":1,"55":5,"57":1,"69":1,"80":1,"83":1,"91":12,"97":2,"100":1,"110":1,"129":22}}],["ops",{"2":{"129":1}}],["optimise",{"2":{"80":1}}],["options",{"2":{"14":1,"46":1}}],["optional",{"2":{"4":5,"6":6,"36":1,"39":2,"48":1,"60":2}}],["open",{"2":{"55":1,"131":1}}],["operates",{"2":{"129":1,"130":1,"136":1}}],["operate",{"2":{"19":1,"26":1,"129":1}}],["operations",{"0":{"31":1},"2":{"31":1,"55":1,"57":1,"122":1}}],["operation",{"2":{"6":2,"46":1,"122":1,"135":2,"138":2}}],["opposite",{"2":{"3":5,"6":5,"46":1,"53":1,"55":1,"57":1,"66":2,"69":1,"79":2,"94":2,"110":1}}],["op",{"2":{"1":3,"6":3,"27":2,"45":1,"129":35}}],["on=2",{"2":{"91":1}}],["on`",{"2":{"91":1}}],["once",{"2":{"80":1,"97":1}}],["onto",{"2":{"60":1}}],["ongoing",{"0":{"23":1}}],["ones",{"2":{"137":1}}],["oneunit",{"2":{"42":1}}],["one",{"2":{"1":1,"3":9,"6":14,"22":1,"31":1,"36":4,"39":2,"41":1,"42":1,"45":1,"46":4,"48":3,"52":1,"54":1,"55":5,"56":2,"57":2,"59":2,"68":1,"75":1,"80":1,"82":1,"91":18,"94":2,"96":1,"97":16,"99":2,"100":2,"103":3,"104":2,"105":2,"106":1,"107":1,"109":1,"110":1,"116":1,"120":1,"129":1,"137":1,"141":1,"145":1,"153":1,"154":1,"157":1}}],["on",{"2":{"1":2,"4":3,"6":11,"9":1,"17":3,"19":2,"26":1,"28":1,"31":2,"36":5,"39":3,"41":1,"42":2,"45":3,"46":26,"48":8,"51":1,"52":1,"53":5,"54":1,"55":5,"56":1,"57":2,"59":1,"60":3,"63":2,"68":1,"69":7,"71":2,"72":3,"73":3,"74":1,"80":4,"83":6,"85":4,"86":1,"87":1,"91":121,"97":9,"100":7,"102":2,"110":7,"112":2,"113":1,"114":1,"121":1,"122":1,"124":1,"126":2,"129":15,"130":1,"132":1,"135":1,"136":1,"143":1,"145":1,"151":1,"157":4,"158":1,"159":2,"160":2}}],["only",{"2":{"0":1,"5":1,"6":8,"31":1,"39":2,"41":2,"42":1,"45":2,"46":2,"48":3,"51":1,"52":1,"54":1,"55":1,"56":1,"60":2,"63":3,"96":3,"97":1,"99":1,"129":2,"137":1,"143":1,"144":1,"146":2,"159":1,"160":1}}],["offer",{"2":{"145":1}}],["offers",{"2":{"22":1}}],["offset",{"2":{"36":8,"63":1}}],["off",{"2":{"4":1,"6":1,"46":2,"63":1,"91":6,"121":1,"129":1}}],["of",{"0":{"22":1},"2":{"1":7,"3":29,"4":66,"5":5,"6":185,"7":2,"9":4,"17":1,"19":3,"22":7,"25":3,"26":5,"27":1,"28":2,"30":1,"31":2,"32":2,"35":1,"36":38,"38":5,"39":28,"40":9,"41":1,"42":13,"44":3,"45":12,"46":65,"47":5,"48":31,"51":5,"52":12,"53":10,"54":10,"55":23,"56":9,"57":20,"59":6,"60":18,"62":2,"63":19,"65":4,"66":5,"68":6,"69":18,"71":1,"72":5,"73":5,"74":1,"75":2,"76":1,"79":5,"80":1,"82":3,"83":14,"85":1,"86":1,"87":1,"89":2,"90":1,"91":87,"93":1,"94":4,"96":1,"97":12,"99":2,"100":15,"102":3,"103":7,"104":5,"105":1,"106":2,"107":1,"109":4,"110":18,"112":3,"113":6,"114":6,"115":4,"116":1,"117":1,"119":2,"120":3,"121":5,"122":3,"124":1,"126":1,"127":5,"128":2,"129":26,"130":1,"131":1,"135":2,"136":4,"138":4,"140":3,"141":1,"143":2,"144":2,"145":5,"146":2,"149":8,"151":4,"152":2,"153":1,"155":1,"156":2,"157":3,"158":4,"159":2}}],["org",{"2":{"52":1,"54":1,"56":1,"91":2,"151":1}}],["organise",{"2":{"10":1}}],["orange",{"2":{"50":1,"59":1,"62":2,"65":2,"82":2,"96":2,"109":2}}],["oroginal",{"2":{"129":2}}],["oro",{"2":{"11":2}}],["originate",{"2":{"57":1}}],["originals",{"2":{"30":1}}],["original",{"2":{"6":4,"26":1,"30":1,"46":2,"51":5,"52":1,"54":1,"57":4,"127":1,"129":1,"134":1,"140":2,"146":1,"148":4,"149":1}}],["orignal",{"2":{"46":1}}],["orient",{"0":{"13":1},"1":{"14":1,"15":1},"2":{"13":7,"14":12,"46":10,"55":8}}],["orientation",{"0":{"118":1},"1":{"119":1,"120":1},"2":{"6":2,"10":1,"33":1,"39":1,"46":7,"48":2,"52":1,"54":2,"55":1,"56":1,"91":16,"119":1,"149":1}}],["ordered",{"2":{"38":1}}],["order",{"2":{"1":4,"3":1,"4":2,"6":6,"36":1,"38":1,"39":2,"42":1,"46":4,"55":1,"57":1,"60":2,"63":3,"66":1,"69":1,"79":1,"94":1,"129":2,"141":2,"149":1,"157":1}}],["or",{"0":{"32":1},"2":{"1":10,"3":3,"4":10,"6":52,"17":1,"19":2,"22":3,"26":1,"28":1,"30":1,"31":1,"33":1,"36":4,"39":1,"42":1,"44":2,"45":4,"46":19,"47":1,"51":1,"52":1,"53":3,"54":2,"55":4,"56":1,"57":2,"59":2,"60":4,"63":3,"65":1,"69":1,"71":2,"72":1,"73":1,"74":1,"75":1,"76":1,"82":2,"85":2,"86":3,"87":2,"88":1,"89":1,"90":1,"91":26,"93":2,"94":1,"96":1,"97":2,"99":1,"100":1,"106":1,"107":1,"110":1,"112":2,"116":1,"117":1,"119":2,"120":5,"121":1,"122":3,"124":1,"126":4,"128":1,"129":8,"130":1,"132":1,"134":5,"135":2,"141":2,"142":1,"143":2,"145":2,"146":2,"149":3,"151":2,"153":2,"155":1,"156":2,"157":1,"159":2}}],["est",{"2":{"159":1}}],["especially",{"2":{"26":1,"31":1}}],["e2",{"2":{"91":4}}],["e1",{"2":{"91":8}}],["euclid",{"2":{"48":2,"60":11,"91":1,"150":1}}],["euclidean",{"2":{"4":1,"6":1,"42":13,"60":6,"146":1}}],["eps",{"2":{"36":2}}],["eponymous",{"2":{"6":1,"145":1}}],["everything",{"2":{"149":1}}],["every",{"2":{"63":2,"127":1}}],["evenly",{"2":{"158":1}}],["even",{"2":{"22":2,"39":2,"48":1,"55":1,"60":1,"63":1,"122":1,"131":1,"136":1}}],["evaluated",{"2":{"157":1}}],["eval",{"2":{"33":2,"129":2}}],["effects",{"2":{"129":3}}],["efforts",{"2":{"24":1}}],["efficiently",{"2":{"28":1}}],["efficient",{"2":{"6":1,"42":1,"52":2,"54":2,"56":2,"121":1,"132":1}}],["e",{"2":{"9":1,"30":1,"127":1,"129":2}}],["elements",{"2":{"75":1,"76":1,"89":1,"90":1,"97":1,"106":1,"107":1,"116":1,"117":1}}],["element",{"2":{"6":5,"35":1,"46":1,"51":2,"52":1,"54":1,"56":3,"91":2,"144":1}}],["elsewhere",{"2":{"51":1}}],["elseif",{"2":{"46":5,"48":7,"52":1,"54":1,"55":4,"56":2,"57":1,"80":3,"91":9,"120":1,"121":1,"138":1,"151":2,"153":2}}],["else",{"2":{"3":6,"6":6,"23":1,"36":1,"42":2,"46":13,"48":9,"51":1,"53":1,"55":3,"56":1,"57":9,"80":2,"91":15,"97":8,"121":2,"129":8,"132":1,"140":1,"142":1,"149":2,"151":4,"153":2,"154":1,"155":1}}],["etc",{"2":{"6":1,"28":2,"38":1,"126":1}}],["enable",{"2":{"160":1}}],["enabled",{"2":{"157":1}}],["enabling",{"0":{"160":1}}],["enclosed",{"2":{"91":1}}],["encode",{"2":{"32":1}}],["encompasses",{"2":{"26":1,"91":1}}],["encounters",{"2":{"26":1}}],["en",{"2":{"91":1,"151":1}}],["entirely",{"2":{"91":1}}],["entire",{"2":{"48":1,"91":4}}],["ent",{"2":{"46":19,"51":2}}],["enter",{"2":{"46":3}}],["entry",{"2":{"22":1,"46":11,"53":3,"55":4,"57":3,"121":1}}],["ensuring",{"2":{"6":1,"143":1,"146":1}}],["ensure",{"2":{"6":3,"42":1,"52":1,"54":1,"56":1,"130":2,"133":1}}],["ensures",{"2":{"6":3,"132":1,"135":3,"138":2}}],["enumerate",{"2":{"13":2,"36":1,"46":8,"48":1,"51":1,"53":1,"57":2,"91":1,"138":2,"153":1}}],["enum",{"2":{"6":2,"46":3,"54":3,"91":3}}],["endpt",{"2":{"151":3}}],["endpoints",{"2":{"46":3,"48":1,"53":1,"55":4,"57":1,"60":2,"91":11,"97":2,"99":1}}],["endpoint=3",{"2":{"46":1}}],["endpointtype",{"2":{"46":2}}],["endpoint",{"2":{"3":1,"6":2,"46":28,"54":1,"60":2,"68":1,"91":3,"97":2,"149":4,"151":3}}],["ending",{"2":{"46":1,"48":1}}],["end",{"2":{"1":1,"6":1,"9":1,"13":4,"14":3,"33":4,"36":18,"39":8,"42":35,"45":10,"46":117,"48":43,"51":9,"52":9,"53":11,"54":6,"55":28,"56":7,"57":24,"60":19,"63":20,"75":2,"76":2,"80":20,"89":2,"90":2,"91":99,"94":4,"97":17,"102":1,"106":2,"107":2,"112":1,"116":2,"117":2,"120":9,"121":26,"122":1,"126":4,"129":53,"130":1,"132":5,"134":3,"138":18,"140":4,"141":1,"142":2,"145":8,"146":8,"149":7,"150":6,"151":30,"152":3,"153":27,"154":4,"155":4,"156":19}}],["empty",{"2":{"4":2,"6":6,"36":2,"46":2,"52":1,"54":1,"55":3,"56":1}}],["embedded",{"2":{"128":3}}],["embedding",{"0":{"128":1,"139":1}}],["embed",{"2":{"0":2,"4":1,"6":1,"128":1,"139":2}}],["errors",{"2":{"33":1,"146":1}}],["error",{"0":{"142":1},"2":{"4":1,"6":2,"7":1,"22":2,"26":1,"33":4,"42":1,"63":2,"127":1,"134":2,"142":3,"145":5,"153":4,"156":1}}],["edge",{"2":{"3":1,"4":3,"6":4,"28":1,"33":1,"39":1,"44":1,"46":23,"48":13,"52":1,"54":1,"55":9,"56":1,"60":4,"63":1,"71":2,"86":2,"87":1,"91":7,"94":12,"97":9,"112":2,"113":1,"114":1,"156":2}}],["edges",{"2":{"0":1,"4":2,"6":9,"46":12,"48":8,"53":3,"55":18,"57":3,"60":3,"62":2,"63":1,"65":1,"71":1,"72":3,"73":7,"74":3,"82":1,"85":3,"88":1,"91":3,"94":9,"97":11,"109":1,"112":1,"156":29}}],["easier",{"2":{"126":1}}],["easily",{"2":{"122":1}}],["east",{"2":{"48":9}}],["easy",{"2":{"1":1,"6":1,"136":1,"154":1}}],["earth",{"2":{"6":2,"17":1,"145":2,"149":2,"157":1}}],["eachindex",{"2":{"36":1,"55":2,"120":1,"129":2,"150":1,"153":1}}],["each",{"2":{"3":2,"4":3,"6":5,"9":1,"26":2,"28":1,"36":4,"39":2,"40":4,"42":1,"46":5,"48":1,"55":2,"60":1,"63":2,"69":1,"83":1,"91":6,"96":1,"97":3,"100":1,"110":1,"120":1,"129":1,"136":2,"149":1,"158":2,"159":2,"160":1}}],["equatorial",{"2":{"6":6,"145":4}}],["equality",{"2":{"157":1}}],["equal",{"2":{"3":2,"4":16,"6":19,"36":6,"59":1,"60":4,"62":3,"63":22,"71":1,"85":1,"91":15,"96":1,"97":2,"102":2,"112":1,"131":1}}],["equals",{"0":{"61":1,"62":1},"1":{"62":1,"63":1},"2":{"0":17,"4":3,"6":19,"33":1,"36":2,"46":1,"51":2,"60":1,"61":1,"62":2,"63":50,"71":1,"85":1,"91":10,"97":2,"102":3,"112":1,"157":1}}],["equivalent",{"2":{"3":1,"4":4,"6":6,"39":1,"46":1,"55":1,"57":1,"63":5,"69":1,"91":1}}],["exc",{"2":{"142":2,"145":2}}],["excluding",{"2":{"88":1,"91":1,"112":2}}],["exclude",{"2":{"80":9}}],["excluded",{"2":{"55":1}}],["exclusively",{"2":{"104":1}}],["exclusive",{"2":{"48":1}}],["excellent",{"2":{"31":1}}],["except",{"2":{"26":1,"27":1,"55":1}}],["excess",{"2":{"5":1,"6":1,"42":1}}],["exits",{"2":{"46":1}}],["exit",{"2":{"46":31,"51":2,"53":3,"55":3,"57":2}}],["existing",{"2":{"46":2,"56":1}}],["exists",{"2":{"46":1,"48":1,"55":1}}],["exist",{"2":{"22":1,"55":1}}],["exp10",{"2":{"145":1,"149":2}}],["explicity",{"2":{"63":1}}],["explicitly",{"2":{"6":1,"26":1,"32":1,"36":2,"39":1,"42":1,"60":2,"142":1,"145":1,"146":1}}],["expressed",{"2":{"40":2}}],["express",{"2":{"40":1}}],["experimental",{"2":{"33":2}}],["expect",{"2":{"1":1,"93":1,"141":1}}],["export",{"2":{"40":1,"143":1}}],["exposes",{"2":{"25":1}}],["exponential",{"2":{"9":1}}],["ext2",{"2":{"91":3}}],["ext1",{"2":{"91":3}}],["ext",{"2":{"41":15,"46":10,"48":2,"51":3,"52":8,"54":8,"56":8,"57":14,"80":7,"91":3}}],["extrema",{"2":{"121":1,"156":1}}],["extreem",{"2":{"36":10}}],["extract",{"2":{"129":3,"149":1}}],["extra",{"2":{"6":3,"46":1,"56":1,"143":1,"145":2,"146":1}}],["external",{"2":{"39":1,"91":2}}],["exteriors",{"2":{"9":1,"54":2,"56":2}}],["exterior",{"2":{"3":4,"4":2,"6":10,"36":1,"38":1,"39":1,"41":1,"42":36,"45":2,"46":4,"52":2,"56":3,"57":14,"60":1,"63":2,"65":1,"66":1,"69":3,"79":1,"83":2,"91":8,"100":2,"109":1,"110":3,"113":3,"114":3,"120":6,"132":3,"133":1,"135":1,"139":1}}],["extending",{"2":{"97":1}}],["extended",{"2":{"60":1}}],["extension",{"2":{"1":1,"6":1,"42":1,"68":1,"141":3,"142":2,"145":1,"146":1}}],["extent=true",{"2":{"139":1}}],["extent=nothing",{"2":{"129":1}}],["extent=",{"2":{"129":3}}],["extent=false",{"2":{"129":1,"149":1}}],["extent`",{"2":{"126":1,"139":1}}],["extents",{"2":{"4":3,"6":4,"33":5,"48":1,"55":4,"91":1,"94":1,"129":2,"139":2,"156":2}}],["extent",{"0":{"139":1},"2":{"0":2,"1":4,"4":3,"6":11,"32":1,"33":2,"41":1,"47":1,"48":1,"55":2,"91":5,"94":2,"126":4,"128":4,"129":28,"139":2,"149":1,"156":7}}],["exactly",{"2":{"22":1,"153":1}}],["exactpredicates",{"2":{"7":1,"13":2,"14":2,"24":1}}],["exact",{"2":{"3":5,"6":5,"7":2,"12":1,"13":1,"22":1,"66":2,"69":1,"79":2,"94":2,"110":1,"121":1,"137":1}}],["examples",{"0":{"144":1,"148":1},"2":{"3":8,"4":1,"6":11,"63":1,"66":1,"69":1,"79":1,"80":1,"83":1,"97":1,"100":1,"110":1,"120":2,"156":1}}],["example",{"0":{"41":1,"131":1,"137":1,"158":1,"159":1},"2":{"1":3,"3":2,"6":11,"11":1,"22":2,"28":1,"31":2,"35":1,"38":1,"41":1,"44":1,"45":1,"47":1,"50":1,"51":1,"52":1,"54":1,"56":1,"59":1,"62":1,"63":1,"65":1,"68":1,"78":1,"80":1,"82":1,"91":1,"93":1,"94":1,"96":1,"99":1,"109":1,"120":1,"121":7,"122":1,"129":2,"131":1,"133":1,"136":1,"137":1,"140":1,"148":1,"149":2,"154":1,"158":1,"160":1}}],["either",{"2":{"1":2,"3":1,"6":3,"17":1,"30":1,"46":6,"52":1,"54":1,"56":1,"57":1,"59":1,"69":1,"91":5,"93":1,"99":1,"100":1,"110":1,"129":3,"134":1,"157":1}}],["lrs",{"2":{"149":2}}],["lnbd",{"2":{"121":4}}],["lp",{"2":{"91":2}}],["lstart",{"2":{"91":2}}],["ls",{"2":{"91":12}}],["ll",{"2":{"25":1,"41":1,"144":2,"149":1}}],["l",{"2":{"14":4,"42":6,"80":2,"91":32}}],["lgeos",{"2":{"149":1}}],["lg",{"2":{"13":1,"14":1,"15":2,"145":9,"149":17}}],["l305",{"2":{"6":1}}],["loudly",{"2":{"129":1}}],["log10",{"2":{"145":2,"149":4}}],["log",{"2":{"124":3,"125":1,"144":2}}],["location",{"2":{"46":1,"91":6}}],["local",{"2":{"36":3,"39":1,"46":4,"53":1,"57":1}}],["loose",{"2":{"130":1}}],["lookup",{"2":{"129":1}}],["looks",{"2":{"44":1}}],["look",{"2":{"38":2,"121":1,"131":1,"144":1}}],["loop",{"2":{"36":1,"42":2,"45":3,"46":8,"48":1,"55":1,"57":1,"91":5,"151":1}}],["lot",{"2":{"31":1,"36":1,"39":1,"45":1,"48":1,"60":1,"63":1,"97":1,"122":1,"144":1}}],["lowers",{"2":{"22":1}}],["lower",{"2":{"7":1,"158":1}}],["lon",{"2":{"6":2,"144":1,"145":2}}],["long",{"2":{"6":1,"145":1,"159":1}}],["longer",{"2":{"6":3,"143":1,"145":2,"146":1}}],["loading",{"2":{"142":1,"145":1}}],["load",{"2":{"129":2,"149":1}}],["loads",{"2":{"5":1,"6":1,"42":1}}],["loaded",{"2":{"1":1,"141":1,"142":2,"145":2}}],["laptop",{"2":{"159":1}}],["layers",{"2":{"127":1}}],["lazy",{"2":{"121":1}}],["lazily",{"2":{"6":1,"124":1,"129":1}}],["lack",{"2":{"22":1}}],["language",{"2":{"22":1}}],["label",{"2":{"14":4,"15":2,"59":1,"121":3,"144":2,"148":2,"149":2}}],["labels",{"2":{"13":2,"121":1}}],["later",{"2":{"21":1,"39":1}}],["lat",{"2":{"6":3,"144":1,"145":3}}],["larger",{"2":{"46":1,"56":1,"153":1}}],["large",{"2":{"6":8,"42":1,"149":2,"159":1}}],["lastindex",{"2":{"153":1}}],["last",{"2":{"4":3,"6":3,"9":1,"36":11,"39":2,"41":2,"46":8,"48":4,"55":1,"60":7,"63":5,"91":20,"102":1,"131":1,"138":2,"151":1}}],["lt",{"2":{"6":6,"55":2,"144":1}}],["len",{"2":{"151":7}}],["length",{"2":{"0":1,"5":1,"6":5,"9":1,"26":1,"42":32,"43":1,"44":1,"45":22,"46":10,"48":1,"51":2,"52":2,"54":1,"55":2,"56":1,"57":1,"91":1,"121":2,"129":3,"138":2,"144":1,"150":1,"151":1,"152":1,"153":7}}],["legend",{"2":{"149":4}}],["lead",{"2":{"131":1}}],["leaving",{"2":{"131":1}}],["leaf",{"2":{"129":4}}],["least",{"2":{"3":4,"6":4,"46":1,"57":2,"91":14,"94":2,"97":4,"100":1,"103":3,"104":2,"105":2,"106":1,"107":1,"110":1,"116":1,"120":1}}],["le",{"2":{"91":10}}],["leftover",{"2":{"46":1}}],["left=1",{"2":{"46":1}}],["left",{"2":{"42":1,"46":3,"151":17,"153":5,"157":1}}],["lets",{"2":{"39":1}}],["let",{"2":{"38":1,"44":1,"91":1,"121":3,"144":1,"160":1}}],["levels",{"2":{"6":1,"121":1,"126":1,"127":1}}],["level",{"2":{"6":1,"7":1,"9":1,"19":1,"22":2,"26":2,"28":1,"127":1,"129":2,"130":1,"132":1,"134":4,"135":1,"136":1,"138":2}}],["less",{"2":{"3":1,"6":7,"36":1,"39":1,"42":1,"45":1,"48":1,"60":1,"63":1,"80":1,"97":1,"121":1,"149":1,"150":1}}],["l289",{"2":{"6":1}}],["l2",{"2":{"3":4,"4":4,"6":8,"62":4,"63":12,"65":8,"79":2,"82":5,"96":4,"99":3,"100":2,"109":8}}],["l1",{"2":{"3":6,"4":4,"6":10,"62":4,"63":12,"65":8,"68":4,"69":2,"78":4,"79":2,"82":5,"96":4,"99":3,"100":2,"109":8}}],["lies",{"2":{"46":3,"158":1}}],["limits",{"2":{"41":1}}],["limited",{"2":{"6":1,"143":1,"146":1}}],["literate",{"2":{"33":1,"36":1,"39":1,"42":1,"45":1,"46":1,"48":1,"51":1,"53":1,"55":1,"57":1,"60":1,"63":1,"66":1,"76":1,"79":1,"80":1,"90":1,"91":1,"94":1,"97":1,"107":1,"117":1,"120":1,"121":1,"129":1,"132":1,"135":1,"138":1,"139":1,"140":1,"142":1,"146":1,"153":1,"154":1,"155":1,"156":1}}],["library",{"2":{"22":2,"51":1}}],["libraries",{"2":{"22":3,"39":1,"136":1}}],["libgeos",{"2":{"13":1,"14":1,"15":1,"31":1,"39":1,"145":7,"149":4}}],["lift",{"2":{"14":2}}],["lin",{"2":{"145":5}}],["linrange",{"2":{"13":2,"14":5,"41":2,"59":1,"121":2,"145":1,"149":2}}],["linewidth",{"2":{"38":1}}],["linesegment",{"2":{"120":2,"146":1}}],["lines",{"0":{"72":1,"86":1,"103":1,"113":1},"2":{"3":1,"4":4,"6":5,"22":1,"46":3,"50":1,"55":6,"59":1,"62":4,"63":4,"65":3,"68":1,"69":1,"78":2,"80":1,"82":3,"91":2,"93":3,"96":4,"97":2,"99":4,"109":3,"110":1,"121":2,"147":1}}],["linestrings",{"2":{"4":2,"6":2,"9":1,"63":2,"119":1,"130":1}}],["linestringtrait",{"2":{"3":2,"4":4,"6":9,"11":3,"36":1,"45":4,"54":2,"60":2,"63":8,"71":1,"72":4,"73":1,"80":6,"85":1,"86":5,"97":4,"102":1,"103":4,"104":1,"112":1,"113":4,"114":1,"126":2,"127":1,"134":2,"135":1,"146":2}}],["linestring",{"2":{"3":5,"4":6,"6":15,"26":1,"28":1,"36":2,"45":2,"60":4,"62":2,"63":2,"65":2,"66":1,"71":1,"72":3,"79":2,"82":2,"83":1,"85":1,"86":4,"91":2,"96":2,"102":1,"103":3,"104":1,"109":2,"110":1,"112":1,"113":4,"114":1,"120":7,"129":5,"156":3}}],["linetrait",{"2":{"3":2,"4":4,"6":6,"36":1,"46":2,"51":2,"54":2,"60":2,"63":8,"71":1,"72":4,"73":1,"85":1,"86":5,"97":4,"102":1,"103":4,"104":1,"112":1,"113":4,"114":1}}],["line2",{"2":{"3":3,"6":5,"54":2,"80":5,"93":3,"94":2,"97":3,"120":5}}],["line1",{"2":{"3":4,"6":6,"54":2,"80":5,"93":3,"94":2,"97":5,"120":5}}],["linea",{"2":{"1":1,"6":1,"154":1}}],["linearmap",{"2":{"149":1}}],["linearalgebra",{"2":{"33":1}}],["linearr",{"2":{"1":1,"6":1,"154":1}}],["linearrings",{"2":{"9":1,"87":1,"130":1}}],["linearringtrait",{"2":{"4":4,"6":6,"11":3,"36":3,"39":2,"45":4,"46":4,"54":2,"60":2,"63":8,"71":1,"72":1,"73":4,"85":1,"86":2,"87":3,"102":1,"103":1,"104":4,"112":1,"113":1,"114":4,"126":2,"134":1,"146":2,"149":1}}],["linearring",{"2":{"1":10,"3":2,"4":1,"6":15,"36":2,"45":2,"46":1,"60":1,"71":1,"73":3,"85":1,"86":1,"87":2,"91":2,"97":4,"102":1,"103":1,"104":3,"112":1,"114":4,"120":1,"129":5,"130":1,"131":6,"132":1,"137":13,"149":1,"154":8,"158":2}}],["linear",{"2":{"1":1,"4":7,"6":11,"9":1,"22":1,"39":2,"42":1,"44":1,"45":3,"48":1,"55":1,"60":5,"63":8,"73":1,"91":2,"103":1,"104":2,"113":1,"119":1,"129":3,"132":3,"144":5,"145":3,"146":4}}],["linearsegments",{"2":{"0":1,"6":4,"143":1,"144":1,"145":3,"146":5}}],["line",{"0":{"91":1},"2":{"0":1,"3":13,"4":9,"6":48,"31":1,"35":2,"36":7,"44":3,"45":10,"46":13,"48":8,"50":6,"51":18,"54":8,"55":30,"57":6,"60":11,"63":5,"66":2,"68":2,"69":1,"71":2,"72":11,"73":8,"78":1,"80":11,"83":2,"85":1,"86":9,"87":4,"91":131,"93":2,"94":6,"96":3,"97":8,"99":2,"100":2,"102":1,"103":10,"104":3,"110":2,"112":2,"113":10,"114":7,"120":4,"146":1,"149":1,"150":1,"151":4,"152":1,"156":3}}],["lineorientation",{"2":{"0":1,"6":2,"54":2}}],["lists",{"2":{"28":1,"46":3,"94":1}}],["listed",{"2":{"6":1,"36":1,"149":1}}],["list",{"2":{"6":16,"9":1,"36":20,"46":212,"51":20,"52":14,"53":8,"54":13,"55":6,"56":13,"57":1,"121":4,"159":2}}],["likely",{"2":{"127":1}}],["like",{"2":{"1":2,"6":9,"19":1,"22":3,"25":1,"26":2,"27":1,"28":1,"31":1,"32":1,"39":1,"41":1,"42":1,"44":1,"48":1,"52":1,"54":1,"56":1,"59":1,"60":1,"63":1,"122":2,"126":2,"129":2,"134":2,"135":1,"143":1,"144":1}}],["io",{"2":{"142":5,"145":5}}],["immediately",{"2":{"121":1}}],["image",{"2":{"121":22}}],["impossible",{"2":{"22":1,"51":1,"96":1}}],["important",{"2":{"144":1}}],["import",{"2":{"1":3,"6":4,"13":2,"14":2,"15":1,"33":4,"35":1,"38":1,"44":1,"47":1,"51":1,"52":1,"54":1,"56":1,"59":1,"62":1,"63":1,"65":1,"66":1,"68":1,"69":1,"78":1,"79":1,"80":1,"82":1,"83":1,"93":1,"94":1,"96":1,"97":1,"99":1,"100":1,"109":1,"110":1,"120":3,"129":2,"142":1,"145":2,"148":2,"149":3,"154":2,"156":1}}],["implementations",{"2":{"69":1,"83":1,"100":1,"110":1,"147":1}}],["implementation",{"0":{"36":1,"39":1,"45":1,"48":1,"51":1,"60":1,"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"126":1,"132":1,"138":1,"146":1},"2":{"36":3,"39":3,"42":1,"45":3,"48":3,"56":1,"60":3,"63":3,"66":1,"69":2,"79":1,"83":2,"94":1,"97":3,"100":2,"110":2,"121":2,"141":1,"149":1}}],["implementing",{"2":{"6":1,"149":1}}],["implement",{"2":{"6":1,"25":1,"31":1,"36":1,"39":1,"42":1,"45":1,"48":1,"60":1,"63":1,"69":1,"83":1,"97":1,"100":1,"110":1,"122":1,"133":1,"134":3,"135":1}}],["implemented",{"2":{"1":1,"6":2,"39":1,"42":3,"51":2,"53":2,"55":2,"57":2,"60":2,"122":2,"134":2,"141":1}}],["improvement",{"2":{"22":1}}],["improvements",{"2":{"9":2,"10":1}}],["improve",{"2":{"4":1,"6":1,"139":1}}],["ipoints",{"2":{"91":4}}],["ip",{"2":{"63":2}}],["ipt",{"2":{"46":8}}],["ihole",{"2":{"63":2}}],["ih",{"2":{"57":20}}],["i2",{"2":{"48":2}}],["i1",{"2":{"48":2}}],["ii",{"2":{"46":8}}],["i+1",{"2":{"42":8,"151":2,"153":1}}],["ice",{"2":{"23":1}}],["i",{"2":{"9":1,"13":4,"21":1,"30":1,"36":14,"39":1,"42":16,"46":22,"48":4,"53":2,"55":3,"56":2,"57":4,"60":2,"63":8,"80":7,"91":28,"120":10,"121":8,"129":14,"146":2,"150":3,"151":12,"153":28,"156":2,"159":3}}],["identity",{"2":{"129":2,"139":1}}],["identical",{"2":{"129":1,"137":1}}],["ideas",{"2":{"21":1,"22":1}}],["idea",{"2":{"6":1,"17":1,"28":1,"42":1,"122":1}}],["idx",{"2":{"36":6,"46":138,"48":9,"51":23,"52":5,"54":5,"56":2,"138":34,"151":51}}],["id=",{"2":{"6":1}}],["i>",{"2":{"6":1}}],["i>method",{"2":{"6":1}}],["ignore",{"2":{"6":1,"121":1}}],["inject",{"2":{"142":1}}],["innerjoin",{"2":{"158":1,"159":1}}],["inner",{"2":{"129":3,"157":1}}],["inline",{"2":{"120":1,"126":2,"129":21}}],["inlcuding",{"2":{"55":1,"72":1,"73":1}}],["in=1",{"2":{"91":1}}],["in`",{"2":{"91":1}}],["inexact",{"2":{"55":2}}],["ind",{"2":{"159":2}}],["indeed",{"2":{"131":1}}],["index",{"2":{"42":8,"46":10,"91":1,"129":1,"151":1}}],["indicies",{"2":{"46":2}}],["indices",{"2":{"46":2,"129":4,"153":16}}],["indicate",{"2":{"129":1}}],["indicates",{"2":{"28":1}}],["indicating",{"2":{"22":1}}],["inplace",{"2":{"42":1}}],["inputs",{"2":{"6":1,"63":1,"66":1,"79":1,"94":1,"153":1}}],["input",{"2":{"6":12,"36":1,"51":1,"52":1,"54":1,"55":1,"56":1,"122":1,"145":3,"146":2,"150":1,"151":1,"152":1}}],["inbounds",{"2":{"42":16,"60":5,"91":1}}],["inspiration",{"2":{"51":1}}],["inspired",{"2":{"50":1,"51":2}}],["inside",{"2":{"36":3,"44":1,"46":4,"48":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":2,"59":3,"60":1,"71":1,"91":1,"109":1,"112":1}}],["insertion",{"2":{"46":1}}],["insert",{"2":{"36":1,"151":1}}],["instability",{"2":{"32":2}}],["instantiating",{"2":{"28":1}}],["instead",{"2":{"22":1,"26":1,"32":1}}],["investigate",{"2":{"121":1}}],["invalid",{"2":{"28":1,"53":2,"131":1,"136":1,"137":1}}],["invoke",{"2":{"28":1}}],["involved",{"2":{"122":1}}],["involve",{"2":{"28":1}}],["involving",{"2":{"6":3,"52":1,"54":1,"56":1}}],["invocation",{"2":{"26":1}}],["init=nothing",{"2":{"129":1}}],["init=typemax",{"2":{"60":2}}],["init=zero",{"2":{"39":1,"48":1}}],["initial",{"2":{"55":2,"145":1}}],["initialize",{"2":{"42":3,"45":2,"46":1,"55":1}}],["init",{"2":{"27":1,"33":1,"36":1,"45":2,"129":30,"145":4}}],["incorrect",{"2":{"130":1,"131":1}}],["increase",{"2":{"46":1,"91":1}}],["increasing",{"2":{"6":1,"149":1}}],["increment",{"2":{"42":5}}],["including",{"2":{"36":1,"46":2,"60":1,"71":1,"74":1,"91":2}}],["include",{"2":{"33":36,"36":1,"46":1,"60":2,"126":1,"149":2}}],["included",{"2":{"6":2,"57":2,"135":2,"138":2}}],["includes",{"2":{"4":2,"6":2,"57":1,"60":2,"63":1,"91":1}}],["incircle",{"0":{"16":1}}],["ing",{"2":{"1":1,"6":2,"42":1,"154":1}}],["intr",{"2":{"46":23,"48":9,"51":16,"55":9}}],["intr2",{"2":{"46":2,"55":5}}],["intr1",{"2":{"46":3,"55":10,"91":2}}],["intrs",{"2":{"46":10,"55":13}}],["introducing",{"2":{"32":1}}],["introduces",{"2":{"32":1}}],["introduction",{"0":{"17":1},"1":{"18":1,"19":1,"20":1}}],["int",{"2":{"46":6,"57":7,"80":7,"146":1,"149":1,"151":5,"152":1,"153":1}}],["integrating",{"2":{"39":1}}],["integrate",{"2":{"22":1,"39":1}}],["integrals",{"2":{"38":1}}],["integral",{"2":{"38":1}}],["intended",{"2":{"6":1,"134":2,"135":1}}],["intermediate",{"2":{"48":1}}],["inter2",{"2":{"48":15}}],["inter1",{"2":{"48":23}}],["interpreted",{"2":{"42":1}}],["interpolation",{"2":{"5":1,"6":1,"41":1,"42":2,"143":1}}],["interpolated",{"2":{"5":3,"6":3,"42":17,"143":1}}],["interpolate",{"2":{"0":2,"5":2,"6":4,"22":1,"40":1,"41":2,"42":25}}],["interest",{"2":{"42":1,"60":1}}],["internal",{"2":{"41":1}}],["internals",{"2":{"32":1}}],["inter",{"2":{"6":2,"46":18,"51":1,"52":1,"54":5,"55":3}}],["interface",{"0":{"134":1},"2":{"6":2,"22":1,"28":1,"129":1,"133":1,"134":4,"135":1,"149":1}}],["interacted",{"2":{"91":1}}],["interaction",{"0":{"91":1},"2":{"91":2}}],["interactions",{"2":{"46":1,"57":3,"91":15}}],["interactive",{"2":{"13":1,"14":1}}],["interacting",{"2":{"6":1,"54":1,"91":2}}],["interacts",{"2":{"3":1,"6":1,"91":3,"99":1,"100":1,"103":3,"104":1,"105":1}}],["interact",{"2":{"3":2,"6":2,"56":1,"57":1,"82":1,"91":5,"94":1,"99":1,"100":1,"102":1,"103":2,"104":2,"105":1}}],["interior",{"2":{"3":6,"6":7,"36":9,"38":1,"42":7,"45":5,"46":1,"57":18,"65":1,"66":1,"68":1,"69":3,"72":5,"73":1,"74":2,"78":2,"79":1,"80":1,"83":2,"85":2,"86":6,"87":3,"91":15,"99":1,"100":3,"103":1,"104":2,"105":2,"109":1,"110":3,"115":2,"120":2,"132":1,"135":1}}],["interiors",{"2":{"3":6,"6":7,"42":20,"65":1,"66":1,"68":1,"78":1,"79":1,"82":1,"83":1,"88":1,"91":5,"93":1,"94":1,"99":1,"100":1,"102":1,"103":2,"104":1,"109":1,"110":1,"113":3,"114":3}}],["intersectingpolygons",{"2":{"6":3}}],["intersecting",{"0":{"136":1},"1":{"137":1,"138":1},"2":{"6":4,"33":1,"46":2,"57":2,"135":4,"136":1,"138":4}}],["intersections",{"0":{"55":1},"2":{"46":2,"48":2,"54":2,"55":2,"57":1,"91":2}}],["intersection",{"0":{"54":1,"92":1},"1":{"93":1,"94":1},"2":{"0":2,"3":3,"6":17,"9":1,"15":4,"31":1,"33":1,"46":29,"48":6,"51":3,"52":4,"53":4,"54":15,"55":45,"56":2,"57":2,"80":2,"91":5,"93":1,"94":3,"97":2}}],["intersect",{"2":{"3":8,"6":11,"46":4,"48":3,"52":2,"54":1,"56":1,"57":5,"65":1,"66":2,"68":1,"69":1,"79":1,"83":1,"86":1,"88":1,"91":4,"93":2,"97":1,"109":1,"110":2,"113":3,"114":3,"137":1,"138":4}}],["intersects",{"0":{"93":1},"2":{"0":2,"3":3,"6":3,"33":1,"46":1,"55":1,"57":2,"80":2,"92":1,"93":4,"94":8,"97":1,"115":1,"138":2,"157":1}}],["into",{"2":{"5":1,"6":5,"22":1,"25":1,"36":1,"39":1,"42":1,"45":4,"46":2,"51":1,"52":1,"54":1,"91":1,"121":2,"124":1,"126":1,"129":6,"138":1,"149":1,"156":2,"157":1}}],["int64",{"2":{"1":6,"6":6,"131":6,"150":1,"151":1,"153":1,"154":6}}],["info",{"2":{"143":1}}],["information",{"2":{"6":1,"19":1,"42":1,"46":2,"47":1,"91":1}}],["infinity",{"2":{"91":1,"97":1}}],["inf",{"2":{"1":1,"9":1,"51":2,"150":1,"153":3}}],["in",{"0":{"31":1},"2":{"1":6,"3":3,"4":1,"5":4,"6":48,"7":1,"9":2,"13":6,"14":2,"17":1,"19":1,"20":1,"22":3,"24":2,"25":2,"26":4,"28":1,"31":3,"32":2,"33":2,"36":7,"38":1,"39":3,"40":2,"42":22,"44":2,"45":5,"46":66,"48":31,"51":6,"52":10,"53":3,"54":6,"55":5,"56":12,"57":28,"59":6,"60":6,"62":1,"63":17,"65":2,"66":1,"69":10,"72":1,"73":1,"74":1,"75":1,"76":1,"79":1,"80":7,"83":9,"85":1,"86":1,"87":1,"89":1,"90":1,"91":131,"93":2,"94":3,"96":1,"97":9,"99":1,"100":11,"104":1,"106":1,"107":1,"109":1,"110":10,"113":3,"114":3,"116":1,"117":1,"120":4,"121":4,"122":1,"124":3,"127":2,"128":1,"129":12,"133":1,"134":1,"135":2,"136":1,"138":7,"139":1,"140":2,"141":3,"142":1,"143":2,"144":2,"145":14,"146":7,"149":5,"150":2,"151":4,"152":1,"153":5,"154":2,"155":1,"156":8,"157":4,"158":3,"159":1,"160":1}}],["itererable",{"2":{"156":1}}],["iter",{"2":{"129":31}}],["iterating",{"2":{"46":1}}],["iteration",{"2":{"39":1}}],["iterate",{"2":{"42":2,"127":1,"129":5}}],["iterators",{"2":{"13":1,"42":1,"46":3,"48":3,"54":1,"57":2,"121":2,"129":11,"138":6,"146":1}}],["iterator",{"2":{"6":2,"46":4,"54":2,"124":2,"129":2}}],["iterabletype",{"2":{"129":10}}],["iterable",{"2":{"4":1,"6":3,"26":1,"39":1,"48":1,"124":1,"129":37}}],["iterables",{"2":{"1":2,"6":2,"30":1,"129":6}}],["ith",{"2":{"46":3,"57":7}}],["itself",{"2":{"48":1,"120":1,"127":1}}],["its",{"2":{"5":1,"6":10,"22":1,"26":1,"38":1,"42":1,"46":2,"48":4,"57":1,"72":1,"124":1,"129":1,"133":1,"149":1,"150":1,"151":1,"152":3,"157":1}}],["it",{"2":{"1":4,"4":1,"6":16,"9":1,"19":3,"20":1,"22":1,"26":11,"27":2,"28":1,"30":1,"35":1,"36":1,"38":2,"39":3,"41":1,"45":2,"46":2,"47":1,"48":2,"52":1,"53":1,"54":1,"56":1,"57":3,"60":3,"63":1,"68":2,"71":3,"85":3,"91":14,"96":1,"97":1,"102":2,"112":3,"119":1,"120":2,"121":1,"122":3,"124":3,"126":2,"127":3,"128":1,"129":15,"131":1,"132":1,"133":1,"135":1,"136":1,"141":5,"144":2,"145":1,"149":1,"159":2,"160":2}}],["iff",{"2":{"129":1}}],["if",{"2":{"1":6,"3":17,"4":19,"5":1,"6":68,"21":1,"26":1,"30":2,"35":1,"36":15,"38":1,"39":6,"42":5,"45":1,"46":81,"48":36,"51":8,"52":13,"53":11,"54":9,"55":30,"56":10,"57":22,"59":2,"60":8,"62":2,"63":35,"65":1,"66":1,"68":1,"69":2,"71":4,"72":3,"73":3,"74":2,"75":1,"76":1,"78":1,"79":1,"80":9,"82":1,"83":3,"85":5,"86":4,"87":2,"88":2,"89":1,"90":1,"91":130,"93":1,"94":3,"96":4,"97":14,"99":1,"100":2,"102":4,"103":3,"104":2,"105":2,"106":1,"107":1,"109":1,"110":2,"112":5,"113":3,"114":3,"115":1,"116":1,"117":1,"120":3,"121":15,"124":1,"126":1,"127":1,"129":22,"132":1,"134":1,"135":2,"136":1,"138":12,"139":1,"140":1,"141":3,"142":2,"145":6,"146":2,"149":1,"151":11,"153":12,"154":1,"155":1,"158":2,"159":1}}],["isolate",{"2":{"149":1}}],["isodd",{"2":{"51":1}}],["istable",{"2":{"129":2}}],["iseven",{"2":{"91":1}}],["isempty",{"2":{"39":1,"42":4,"48":1,"52":1,"53":1,"54":1,"121":1,"134":1,"151":1}}],["isparallel",{"2":{"91":1,"120":8}}],["is3d",{"2":{"63":1,"129":1,"140":1,"154":1,"155":1,"156":10}}],["isnothing",{"2":{"46":3,"51":1,"53":2,"55":2,"57":2,"63":1,"142":1,"145":1,"149":1,"150":1,"151":5,"152":1,"153":6}}],["isn",{"2":{"39":1,"46":2,"48":1,"51":1,"53":1,"55":2,"57":2,"60":3,"63":1,"68":1,"91":9,"97":1,"149":1}}],["isa",{"2":{"26":1,"42":9,"129":4,"156":1}}],["issues",{"2":{"17":1}}],["isconcave",{"0":{"120":1},"2":{"0":1,"6":2,"118":1,"120":3}}],["isclockwise",{"0":{"119":1},"2":{"0":1,"6":2,"48":1,"118":1,"120":5}}],["is",{"0":{"35":1,"38":2,"44":1,"47":1,"50":1,"59":2,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"127":1},"2":{"0":1,"1":11,"3":8,"4":43,"5":1,"6":102,"9":3,"11":1,"13":1,"14":1,"17":2,"22":6,"26":3,"27":1,"28":1,"30":3,"31":2,"35":1,"36":19,"38":7,"39":19,"40":2,"41":2,"42":15,"44":2,"45":5,"46":55,"47":3,"48":22,"50":1,"51":2,"52":4,"53":12,"54":4,"55":22,"56":7,"57":20,"59":8,"60":23,"63":13,"65":2,"66":3,"68":4,"69":4,"71":7,"72":3,"73":3,"74":1,"75":1,"76":1,"79":3,"80":3,"82":1,"83":5,"85":9,"86":4,"87":2,"88":1,"89":1,"90":1,"91":91,"94":4,"96":3,"97":10,"100":4,"102":2,"109":4,"110":5,"112":8,"113":3,"114":3,"115":1,"116":2,"117":1,"119":2,"120":8,"121":6,"122":2,"124":1,"126":2,"127":3,"128":1,"129":25,"130":7,"131":2,"132":1,"133":3,"134":2,"135":1,"136":4,"137":1,"138":2,"140":1,"141":7,"142":2,"143":3,"144":3,"145":9,"146":6,"148":1,"149":4,"150":1,"151":2,"152":1,"154":2,"157":2,"158":5,"159":2}}],["cpu",{"2":{"159":1}}],["cyan",{"2":{"142":1,"145":1}}],["cy",{"2":{"120":2}}],["cx",{"2":{"120":2}}],["cs",{"2":{"91":9}}],["cshape",{"2":{"44":3}}],["cw",{"2":{"48":2}}],["cb",{"2":{"41":1,"121":1}}],["cgrad",{"2":{"41":1}}],["cgal",{"2":{"41":1}}],["c",{"2":{"39":1,"44":1,"48":4,"51":5,"91":24,"145":1}}],["citations",{"0":{"24":1}}],["clear",{"2":{"47":1}}],["clearly",{"2":{"35":1,"38":1,"59":1}}],["classify",{"2":{"46":4}}],["clamp",{"2":{"36":1}}],["clima",{"2":{"23":1}}],["clipping",{"0":{"46":1,"52":1,"53":1,"55":1,"56":1,"57":1},"2":{"9":1,"24":1,"33":7,"46":7,"51":3,"52":1,"54":1,"56":1,"136":1}}],["closure",{"2":{"129":2}}],["closing",{"2":{"36":1}}],["close",{"2":{"36":5,"46":2,"48":1,"51":1,"60":9,"131":1,"132":4}}],["closest",{"2":{"4":3,"6":3,"59":1,"60":6}}],["closed2",{"2":{"63":2}}],["closed1",{"2":{"63":2}}],["closed",{"0":{"130":1},"1":{"131":1,"132":1},"2":{"4":4,"6":11,"9":1,"33":1,"36":6,"39":3,"45":3,"46":1,"48":1,"55":4,"57":3,"63":21,"71":2,"72":5,"73":5,"85":2,"86":5,"87":3,"91":52,"103":5,"104":1,"112":3,"113":5,"114":5,"120":1,"130":1,"131":1,"132":2,"133":1,"135":1}}],["closedring",{"2":{"0":1,"6":1,"130":1,"131":1,"132":4,"133":1,"134":1,"135":1}}],["clockwise",{"2":{"4":1,"6":3,"9":1,"38":1,"39":1,"48":7,"119":2,"120":2,"121":6}}],["chunks",{"2":{"129":8}}],["chunk",{"2":{"129":12}}],["changes",{"2":{"46":1}}],["changed",{"2":{"46":1}}],["change",{"2":{"32":1}}],["chain=2",{"2":{"46":1}}],["chain=1",{"2":{"46":1}}],["chain",{"2":{"46":63,"53":3,"55":4,"57":4}}],["chains",{"2":{"28":1,"46":1}}],["chairmarks",{"2":{"13":1,"145":1,"149":1}}],["chose",{"2":{"32":1,"121":1}}],["choose",{"2":{"22":2}}],["choice",{"2":{"22":1}}],["children",{"2":{"149":1}}],["child",{"2":{"6":2,"124":2,"129":14}}],["checkargs",{"2":{"150":1,"151":1,"152":1,"153":1}}],["checking",{"2":{"63":1,"151":1}}],["checks",{"0":{"80":1,"92":1},"1":{"93":1,"94":1},"2":{"62":1,"65":1,"68":1,"78":1,"82":1,"91":5,"93":1,"96":1,"97":1,"99":1,"109":1,"158":1}}],["check",{"2":{"4":1,"6":1,"7":1,"45":1,"46":2,"48":3,"51":1,"52":1,"55":1,"56":1,"63":8,"91":11,"124":3,"125":1,"137":1,"139":1,"144":2,"153":1}}],["checked",{"2":{"4":1,"6":1,"46":1,"91":1,"139":1}}],["ceil",{"2":{"146":1}}],["ce",{"2":{"91":11}}],["certain",{"2":{"19":1,"22":1,"25":1,"26":1}}],["central",{"2":{"46":1}}],["centroids",{"2":{"44":1,"45":1}}],["centroid",{"0":{"43":1,"44":1},"1":{"44":1,"45":1},"2":{"0":4,"4":2,"6":6,"33":1,"43":3,"44":4,"45":38,"122":1,"149":4}}],["cent",{"2":{"44":2}}],["centered",{"2":{"46":1}}],["center",{"2":{"6":1,"44":1,"121":1}}],["cell",{"2":{"6":2,"47":3,"48":28}}],["c2",{"2":{"6":3,"15":2,"60":3,"63":14,"91":6}}],["c1",{"2":{"6":3,"15":2,"60":4,"63":13,"91":6}}],["ctor",{"2":{"1":1,"6":1,"154":1}}],["ca96624a56bd078437bca8184e78163e5039ad19",{"2":{"149":1}}],["caculated",{"2":{"129":1}}],["cache",{"2":{"6":1,"42":1}}],["catagorize",{"2":{"51":1}}],["categorical",{"2":{"41":1}}],["came",{"2":{"51":1}}],["case",{"2":{"36":1,"40":2,"45":1,"46":1,"52":1,"57":1,"91":15,"129":1,"160":1}}],["cases",{"2":{"6":1,"42":1,"51":2,"91":3,"127":1,"129":5}}],["cause",{"2":{"26":1,"31":1,"151":1}}],["careful",{"2":{"42":1,"127":1}}],["care",{"2":{"25":1}}],["cartesianindex",{"2":{"6":1,"121":18}}],["cairomakie",{"2":{"13":1,"35":1,"38":1,"41":2,"44":1,"47":1,"50":1,"59":1,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"144":1,"145":1,"149":1,"158":1,"159":1}}],["california",{"2":{"159":1}}],["callable",{"2":{"134":1}}],["calling",{"2":{"46":2,"129":1}}],["calls",{"2":{"46":1,"55":1,"57":1,"60":1,"69":1,"83":1,"100":1,"110":1,"127":1,"129":1,"146":1}}],["call",{"2":{"26":1,"32":1,"39":1,"45":1,"129":4}}],["called",{"2":{"6":1,"45":3,"129":1,"132":1,"134":1,"135":1}}],["calcualted",{"2":{"129":1}}],["calculation",{"2":{"55":1}}],["calculations",{"2":{"6":1,"17":2,"55":2,"145":1}}],["calculating",{"2":{"4":1,"6":1,"26":1,"139":1}}],["calculated",{"2":{"6":1,"44":2,"48":1,"60":1,"129":2}}],["calculates",{"2":{"4":2,"6":6,"39":1,"42":2,"48":1,"55":2,"56":1,"60":2,"145":1,"152":1}}],["calculate",{"2":{"1":2,"5":1,"6":6,"11":1,"36":3,"42":3,"45":1,"48":1,"55":3,"91":1,"126":1,"129":3}}],["calc",{"2":{"1":2,"6":4,"32":1,"36":4,"126":2,"128":1,"129":15,"139":1,"149":2}}],["cant",{"2":{"63":1,"156":1}}],["cannot",{"2":{"3":3,"4":2,"6":5,"39":1,"63":1,"71":1,"74":1,"97":2,"100":1,"102":2,"104":1,"115":1}}],["can",{"2":{"1":1,"4":2,"6":16,"7":2,"9":1,"13":1,"14":1,"21":1,"22":5,"32":1,"33":1,"36":1,"39":1,"40":2,"41":1,"42":3,"45":1,"46":2,"48":1,"52":3,"54":3,"55":1,"56":3,"57":1,"62":1,"63":3,"65":1,"68":1,"80":1,"82":1,"91":22,"93":2,"96":2,"97":3,"99":1,"103":1,"104":1,"109":1,"112":1,"113":1,"114":1,"121":2,"122":1,"124":1,"128":1,"129":7,"131":2,"132":1,"135":1,"136":2,"137":1,"139":1,"142":1,"144":1,"145":2,"149":2,"157":3,"158":3}}],["critetia",{"2":{"151":1}}],["criteria",{"2":{"69":2,"83":2,"100":2,"110":2,"151":1}}],["creating",{"2":{"91":1}}],["creates",{"2":{"7":1,"46":3}}],["create",{"2":{"6":2,"13":2,"14":1,"22":1,"46":1,"51":1,"55":1,"129":1,"135":2,"136":3,"138":2,"158":1}}],["created",{"2":{"4":2,"6":2,"46":1,"60":3}}],["cropping",{"2":{"41":2}}],["cross=1",{"2":{"54":1}}],["cross`",{"2":{"54":1}}],["crossings",{"2":{"46":3,"91":1}}],["crossing",{"0":{"80":1},"2":{"6":2,"46":78,"52":1,"53":7,"54":3,"55":6,"56":1,"57":6,"69":1,"80":1,"91":1,"110":1}}],["cross",{"0":{"107":1},"2":{"6":1,"9":1,"36":3,"46":12,"51":14,"52":2,"53":1,"54":2,"55":13,"56":2,"57":1,"69":1,"80":2,"83":1,"91":15,"97":2,"100":1,"110":1,"120":3}}],["crosses",{"2":{"0":2,"3":2,"6":3,"33":1,"46":1,"51":1,"80":26,"91":2,"157":1}}],["crc",{"2":{"6":1,"42":1}}],["crs`",{"2":{"141":6}}],["crs=nothing",{"2":{"129":4,"139":1,"149":1}}],["crs=gi",{"2":{"129":7}}],["crs",{"2":{"1":16,"4":2,"6":10,"126":2,"128":3,"129":27,"139":1,"141":7,"149":1}}],["customize",{"2":{"129":2}}],["customized",{"2":{"22":1}}],["custom",{"0":{"160":1},"2":{"6":1,"42":1,"160":2}}],["curr^2",{"2":{"36":2}}],["curr",{"2":{"36":8,"46":104,"51":9,"57":3,"138":26}}],["current",{"2":{"36":1,"42":8,"46":3,"51":2,"53":1,"55":1,"57":6,"121":1,"138":3}}],["currently",{"2":{"5":1,"6":2,"31":1,"42":1,"46":1,"51":1,"53":2,"129":1}}],["curve",{"0":{"91":1},"2":{"3":1,"4":7,"6":18,"36":6,"39":7,"46":5,"48":3,"54":7,"59":1,"60":22,"63":6,"69":2,"71":4,"72":9,"73":9,"83":1,"85":4,"86":6,"87":3,"91":147,"97":1,"100":1,"103":6,"105":3,"110":1,"112":4,"113":6,"114":6}}],["curves",{"2":{"0":1,"3":1,"6":5,"39":3,"48":3,"59":1,"60":1,"63":13,"74":1,"91":1,"97":1,"115":1,"149":2}}],["cutpolygon",{"2":{"50":1}}],["cuts",{"2":{"50":1}}],["cutting",{"0":{"49":1},"1":{"50":1,"51":1},"2":{"46":1,"51":2}}],["cut",{"0":{"50":1},"2":{"0":1,"6":6,"33":1,"42":1,"49":1,"50":5,"51":22,"91":1}}],["copy",{"2":{"134":1,"153":1}}],["coors1",{"2":{"120":2}}],["coors2",{"2":{"120":3}}],["coord",{"2":{"146":6}}],["coords",{"2":{"51":9,"146":8}}],["coordiantes",{"2":{"47":1}}],["coordinatetransformations",{"2":{"1":2,"6":2,"149":1,"154":2}}],["coordinate",{"0":{"42":1,"140":1},"2":{"1":4,"5":5,"6":7,"17":1,"41":2,"42":10,"129":1,"141":4,"146":1}}],["coordinates",{"0":{"5":1,"40":1},"1":{"41":1,"42":1},"2":{"0":4,"1":1,"4":2,"5":7,"6":20,"39":2,"40":8,"42":25,"51":2,"52":1,"54":1,"56":1,"60":1,"63":2,"122":1,"140":2,"141":1,"144":1,"145":3}}],["co",{"2":{"91":2}}],["cov",{"2":{"48":16}}],["cover",{"2":{"71":1,"75":1}}],["covering",{"2":{"6":2,"78":1,"135":2,"138":2}}],["covered",{"0":{"73":1,"74":1,"114":1},"2":{"3":1,"6":1,"57":1,"68":1,"69":1,"73":2,"74":2,"75":1,"76":2,"78":1,"90":2,"91":3,"138":1}}],["coveredby",{"0":{"67":1,"68":1,"71":1,"72":1,"75":1,"76":1,"90":1},"1":{"68":1,"69":1},"2":{"0":2,"3":4,"6":4,"33":1,"46":1,"67":1,"68":3,"69":9,"70":6,"71":12,"72":12,"73":10,"74":4,"75":2,"76":2,"79":3,"157":1}}],["covers",{"0":{"77":1,"78":1},"1":{"78":1,"79":1},"2":{"0":2,"3":5,"6":5,"33":1,"77":1,"78":4,"79":5,"157":1}}],["coverages",{"2":{"6":1,"48":1}}],["coverage",{"0":{"47":1},"2":{"0":1,"6":2,"33":1,"47":3,"48":16}}],["corner",{"2":{"48":4}}],["corners",{"2":{"48":1}}],["correspondent",{"2":{"120":1}}],["correspond",{"2":{"46":1}}],["corresponding",{"2":{"36":3,"53":2}}],["correctly",{"2":{"144":1}}],["corrected",{"2":{"134":1}}],["correctness",{"2":{"130":1}}],["correcting",{"2":{"28":1,"134":1}}],["corrections",{"0":{"133":1,"135":1},"1":{"134":1,"135":1},"2":{"131":1,"134":6,"137":1}}],["correction",{"2":{"6":10,"33":4,"52":1,"53":2,"54":1,"55":2,"56":1,"57":2,"130":1,"132":2,"133":2,"134":8,"135":7,"136":1,"138":2}}],["correct",{"2":{"6":3,"22":1,"32":1,"36":1,"39":1,"45":1,"46":1,"48":1,"52":1,"54":1,"56":1,"60":1,"63":1,"69":1,"83":1,"97":1,"100":1,"110":1,"130":1,"131":2,"133":1}}],["core",{"2":{"24":1}}],["code",{"2":{"7":1,"10":1,"42":1,"69":1,"83":1,"91":1,"100":1,"110":1,"120":1,"126":1,"159":1}}],["coarse",{"2":{"6":1,"143":1,"146":1}}],["common",{"2":{"146":1}}],["commen",{"2":{"62":1}}],["commented",{"2":{"120":1}}],["comments",{"2":{"91":1}}],["comment",{"2":{"20":1}}],["combos",{"2":{"53":1,"55":1,"57":1}}],["combines",{"2":{"45":1}}],["combine",{"2":{"45":2,"46":5,"138":1}}],["combined",{"2":{"6":1,"46":4,"57":1,"135":1,"138":2}}],["combination",{"2":{"6":1,"46":1,"124":1,"129":1}}],["coming",{"2":{"48":1}}],["com",{"2":{"6":1,"55":1,"149":1}}],["compilation",{"2":{"126":1}}],["compiled",{"2":{"32":1}}],["compiler",{"2":{"32":1,"126":2,"129":2}}],["complex",{"2":{"122":1,"149":1,"157":1}}],["complexity",{"2":{"6":1,"122":1,"146":1}}],["completly",{"2":{"46":2,"57":1,"65":2,"78":1,"91":1}}],["complete",{"2":{"39":1}}],["completely",{"2":{"1":1,"3":4,"6":5,"66":1,"69":1,"79":1,"110":1,"129":1}}],["component",{"2":{"6":1,"39":3,"45":11,"48":8,"55":1,"124":1,"129":3}}],["components",{"2":{"6":2,"44":1,"45":2,"124":2,"129":24}}],["composed",{"2":{"4":4,"6":5,"63":5}}],["comprised",{"2":{"6":3,"52":1,"54":1,"56":1}}],["computational",{"2":{"6":1,"42":1}}],["computation",{"2":{"6":6,"42":1,"45":1,"52":1,"54":1,"56":1,"150":2,"151":2,"152":2}}],["computer",{"2":{"6":1,"42":1}}],["compute",{"2":{"4":1,"6":1,"39":1,"42":1,"146":1}}],["computed",{"2":{"4":4,"6":5,"36":1,"39":3,"42":3,"48":1}}],["compact",{"2":{"159":3}}],["comparing",{"2":{"57":1,"63":1}}],["comparisons",{"2":{"55":2,"157":1}}],["compared",{"2":{"63":1}}],["compare",{"2":{"3":1,"4":1,"6":2,"36":1,"57":1,"63":2,"97":1}}],["compatibility",{"2":{"39":1}}],["compatible",{"2":{"1":2,"17":1,"30":1,"36":1,"39":1,"42":2,"45":1,"48":1,"60":1,"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"127":1,"141":2}}],["course",{"2":{"128":1}}],["country",{"2":{"159":8}}],["countries",{"2":{"11":1,"149":1}}],["counted",{"2":{"55":2}}],["counters",{"2":{"42":8}}],["counter",{"2":{"6":1,"46":8,"91":1,"119":1,"120":1}}],["counterclockwise",{"2":{"4":1,"6":1,"9":1,"38":2,"39":1,"121":4}}],["count",{"2":{"46":16,"153":1}}],["couldn",{"2":{"9":1,"126":1}}],["could",{"2":{"4":1,"6":1,"39":3,"57":1,"60":1,"91":2,"141":1}}],["colname",{"2":{"129":3}}],["col",{"2":{"129":3}}],["collinear",{"2":{"46":4,"52":2,"54":2,"55":1,"56":2}}],["collect",{"2":{"11":3,"13":1,"35":1,"38":2,"42":1,"44":1,"47":2,"50":2,"59":1,"129":3,"144":4,"156":2}}],["collections",{"0":{"75":1,"76":1,"89":1,"90":1,"106":1,"107":1,"116":1,"117":1},"2":{"1":1,"6":9,"30":1,"128":1,"129":6,"149":2}}],["collection",{"2":{"1":1,"4":7,"6":13,"19":2,"26":2,"36":2,"39":3,"48":2,"60":2,"75":2,"76":2,"89":2,"90":2,"106":2,"107":2,"116":2,"117":2,"122":1,"129":3,"149":1,"155":1,"156":1}}],["column",{"2":{"30":1,"129":16,"157":2}}],["colored",{"2":{"158":1}}],["colors",{"2":{"158":2}}],["colorrange",{"2":{"41":2,"59":1}}],["colorbar",{"2":{"41":1,"59":1,"121":1}}],["colormap",{"2":{"14":1,"41":3,"59":1}}],["color",{"2":{"6":2,"38":1,"41":2,"42":1,"44":1,"50":3,"59":2,"62":4,"65":4,"68":1,"78":1,"82":4,"96":4,"109":4,"142":1,"145":1,"158":5}}],["colinear",{"2":{"3":1,"6":2,"54":1,"96":1,"97":2}}],["conditions",{"2":{"157":1}}],["conencting",{"2":{"151":1}}],["connected",{"2":{"91":5}}],["connect",{"2":{"48":11}}],["connecting",{"2":{"36":1}}],["connections",{"2":{"6":2,"135":2,"138":2}}],["convention",{"2":{"44":1}}],["convenience",{"2":{"42":1}}],["convex",{"2":{"36":3,"120":1}}],["conversely",{"2":{"46":1}}],["conversion",{"0":{"155":1},"2":{"30":1}}],["converted",{"2":{"30":1,"42":3}}],["convert",{"0":{"70":1,"84":1,"101":1,"111":1},"2":{"6":3,"42":6,"59":1,"121":4,"129":1,"145":1,"149":3,"155":1,"156":1}}],["converts",{"2":{"6":1,"156":1}}],["constprop",{"2":{"80":1}}],["constants",{"2":{"46":1}}],["const",{"2":{"33":4,"46":1,"69":3,"83":2,"100":3,"110":3,"126":4,"129":1,"149":4}}],["constraints",{"2":{"22":1}}],["constrained",{"2":{"6":3,"52":1,"54":1,"56":1}}],["constructors",{"2":{"6":2,"126":2}}],["constructed",{"2":{"1":1,"28":1,"141":1}}],["consistent",{"2":{"46":1,"122":1}}],["consistency",{"2":{"30":1}}],["considered",{"2":{"36":1,"42":1}}],["consider",{"2":{"22":1,"35":1,"38":1,"44":1,"47":1,"48":3,"50":1,"59":2,"62":1,"65":1,"68":1,"78":1,"82":1,"91":3,"93":1,"96":1,"99":1,"109":1}}],["concepts",{"0":{"18":1},"1":{"19":1,"20":1}}],["concieve",{"2":{"9":1}}],["concave",{"2":{"6":1,"36":2,"44":2,"120":2}}],["context",{"2":{"145":4}}],["contents",{"2":{"129":1,"130":1}}],["contour",{"2":{"121":11}}],["contours",{"2":{"0":1,"6":3,"121":11}}],["continue",{"2":{"39":1,"46":6,"48":1,"91":1,"134":1,"138":3,"153":1,"159":1}}],["controlled",{"2":{"32":1}}],["control",{"2":{"31":1}}],["contributors",{"2":{"22":1}}],["contributions",{"2":{"17":1}}],["containing",{"2":{"47":1,"158":1}}],["contain",{"2":{"3":1,"6":1,"57":1,"65":1,"97":1}}],["contained",{"2":{"3":1,"6":1,"9":1,"57":4,"66":1,"78":1,"96":1,"97":1,"129":1,"158":1}}],["contains",{"0":{"64":1,"65":1},"1":{"65":1,"66":1},"2":{"0":2,"3":4,"6":4,"33":1,"46":1,"57":1,"64":1,"65":5,"66":4,"127":1,"137":1,"157":1,"158":1}}],["vw",{"2":{"149":3}}],["v2",{"2":{"91":9}}],["v1",{"2":{"91":9}}],["v`",{"2":{"42":2}}],["vcat",{"2":{"36":1,"42":1,"129":1}}],["vararg",{"2":{"42":1}}],["vary",{"2":{"36":1}}],["variables",{"2":{"32":1,"42":8,"66":1,"79":1,"94":1}}],["variable",{"2":{"32":1,"53":2}}],["vals",{"2":{"151":9}}],["valign",{"2":{"149":1}}],["validated",{"2":{"53":2,"55":2,"57":2}}],["validate",{"2":{"9":1}}],["valid",{"2":{"1":1,"6":8,"45":1,"52":2,"54":2,"55":4,"56":2,"130":3,"131":1,"136":1,"137":1,"153":1,"154":1}}],["val",{"2":{"36":2,"46":4,"91":30,"94":2,"97":2}}],["values",{"2":{"1":1,"5":3,"6":7,"36":2,"41":3,"42":40,"45":2,"46":5,"48":5,"60":2,"91":4,"121":1,"126":1,"129":2,"151":2,"153":1}}],["value",{"2":{"0":1,"4":7,"5":2,"6":15,"14":1,"32":1,"36":1,"38":2,"39":4,"42":45,"46":3,"48":2,"59":1,"60":3,"121":2,"151":11,"157":1}}],["vs",{"0":{"15":1},"2":{"12":1,"22":1}}],["vᵢ",{"2":{"6":1}}],["v",{"2":{"5":2,"6":6,"14":4,"42":23,"60":8}}],["via",{"2":{"142":1,"145":1}}],["visvalingam",{"2":{"147":1}}],["visvalingamwhyatt",{"0":{"152":1},"2":{"0":1,"6":3,"149":4,"152":5}}],["visualized",{"2":{"131":1}}],["visualize",{"2":{"93":1}}],["visa",{"2":{"46":1}}],["view",{"2":{"46":2,"138":1,"151":3,"159":1}}],["viewport",{"2":{"14":1}}],["views",{"2":{"1":1,"46":1,"56":1,"141":1}}],["vect",{"2":{"129":2}}],["vectypes",{"2":{"42":5}}],["vector",{"2":{"1":12,"4":6,"5":1,"6":45,"19":1,"26":1,"31":1,"35":1,"36":10,"42":14,"46":7,"51":6,"52":4,"53":1,"54":2,"55":3,"56":4,"91":1,"94":2,"120":3,"121":1,"122":1,"129":6,"131":8,"132":1,"137":22,"143":1,"144":1,"146":1,"149":1,"150":1,"151":4,"152":1,"153":2,"154":10,"156":15}}],["vectors",{"2":{"1":1,"4":2,"6":6,"30":1,"36":4,"42":3,"46":1,"60":1,"119":1,"121":1,"129":2,"149":1}}],["ve",{"2":{"25":1,"146":1}}],["vein",{"2":{"7":1}}],["versa",{"2":{"46":1}}],["vert",{"2":{"153":21}}],["verts",{"2":{"149":2}}],["vertical",{"2":{"41":1,"48":1}}],["vertices",{"2":{"6":7,"9":1,"40":4,"42":5,"46":1,"51":2,"71":1,"73":5,"82":1,"85":3,"88":1,"91":1,"112":1,"131":1,"143":2,"144":1,"145":3,"146":3,"149":1,"152":1}}],["vertex",{"2":{"5":1,"6":2,"36":1,"40":2,"42":2,"46":3,"71":2,"86":2,"87":1,"91":1,"112":3}}],["very",{"2":{"0":1,"144":1,"159":2}}],["tnew",{"2":{"129":1}}],["tutorial",{"2":{"157":1}}],["tups",{"2":{"132":4}}],["tuplepoint",{"2":{"33":3,"156":1}}],["tuple",{"0":{"155":1},"2":{"4":1,"6":15,"33":2,"42":2,"45":3,"46":5,"48":3,"51":1,"55":2,"91":16,"120":2,"121":1,"129":2,"131":6,"137":13,"144":1,"149":2,"151":1,"153":2,"156":6,"158":2}}],["tuples",{"2":{"0":1,"6":2,"33":1,"45":1,"46":1,"51":1,"52":3,"53":1,"54":2,"55":1,"56":4,"57":5,"132":2,"138":2,"149":2,"155":2,"159":2}}],["turned",{"2":{"129":1}}],["turf",{"2":{"120":1}}],["tᵢ",{"2":{"42":1}}],["typing",{"2":{"142":1,"145":1}}],["typically",{"2":{"40":1}}],["typemax",{"2":{"60":1}}],["typeof",{"2":{"27":1,"42":3,"121":1,"126":1,"129":2,"160":1}}],["type2",{"2":{"6":2,"63":4}}],["type1",{"2":{"6":2,"63":5}}],["types",{"0":{"125":1},"2":{"6":4,"22":1,"31":1,"32":1,"42":3,"48":1,"51":1,"91":3,"126":1,"149":1,"157":1}}],["type",{"2":{"4":11,"5":1,"6":60,"11":1,"20":2,"30":2,"31":1,"32":2,"36":9,"39":11,"41":1,"42":8,"45":8,"46":18,"48":8,"51":5,"52":7,"53":6,"54":8,"55":13,"56":7,"57":5,"60":28,"63":2,"124":2,"126":8,"129":42,"133":1,"134":6,"135":6,"140":1,"145":1,"146":1,"149":3,"155":1,"156":3}}],["term",{"2":{"39":1}}],["terms",{"2":{"6":1,"42":1,"55":1}}],["technically",{"2":{"31":1,"130":1}}],["technique",{"2":{"11":1}}],["tell",{"2":{"26":1,"126":1,"160":1}}],["template",{"2":{"21":1}}],["test",{"2":{"149":2}}],["testing",{"0":{"15":1}}],["tests",{"2":{"9":2}}],["t2",{"2":{"6":5,"42":47,"55":6,"70":1,"80":2,"101":1,"111":1}}],["t1",{"2":{"6":6,"42":51,"55":6,"80":2}}],["t=float64",{"2":{"4":1,"6":3,"45":3}}],["two",{"2":{"3":5,"4":10,"6":23,"31":2,"36":2,"38":1,"42":1,"45":1,"46":5,"48":3,"52":2,"54":1,"55":8,"56":4,"57":3,"60":5,"62":3,"63":12,"65":2,"66":1,"68":1,"78":1,"79":1,"80":1,"82":1,"91":2,"93":2,"94":4,"96":4,"97":3,"99":3,"100":1,"109":2,"121":2,"134":2,"135":1,"137":2,"138":2,"144":1,"157":3,"158":3}}],["task",{"2":{"129":6}}],["tasks",{"2":{"129":10}}],["taskrange",{"2":{"129":10}}],["tags",{"2":{"46":4}}],["taget",{"2":{"6":2}}],["taylor",{"2":{"6":1,"42":1}}],["table2",{"2":{"157":1}}],["table1",{"2":{"157":3}}],["tables",{"2":{"30":4,"33":1,"129":11}}],["table",{"2":{"6":1,"19":2,"26":1,"129":12,"149":1,"157":1}}],["taking",{"2":{"6":3,"45":1,"52":1,"54":1,"55":1,"56":1,"57":1,"136":1}}],["takes",{"2":{"46":3,"157":1}}],["taken",{"2":{"28":1,"41":1}}],["take",{"2":{"1":1,"6":2,"19":1,"46":2,"52":1,"54":1,"57":1,"120":2,"122":1,"141":1}}],["target=nothing",{"2":{"52":1,"54":1,"56":1}}],["target=gi",{"2":{"46":1}}],["targets",{"2":{"31":1,"36":2,"39":3,"48":3,"60":3}}],["target",{"0":{"31":1},"2":{"1":15,"6":29,"15":3,"30":2,"31":2,"42":1,"45":2,"46":1,"52":5,"53":10,"54":6,"55":10,"56":4,"57":13,"122":1,"124":4,"127":5,"128":1,"129":143,"138":2,"141":3,"149":2}}],["tilted",{"2":{"48":1}}],["tie",{"2":{"36":1}}],["timings",{"2":{"13":5}}],["timing",{"2":{"13":2}}],["times",{"2":{"4":1,"6":1,"139":1}}],["time",{"2":{"1":5,"13":3,"32":1,"41":1,"141":4,"158":1,"159":1}}],["title",{"2":{"13":2,"41":2,"121":1,"145":1,"149":2}}],["tip",{"2":{"1":1,"5":1,"6":1,"42":1,"141":1,"157":1}}],["tree",{"2":{"157":1}}],["treating",{"2":{"149":1}}],["treated",{"2":{"91":5}}],["treats",{"2":{"39":1,"60":1}}],["try",{"2":{"127":1,"129":9,"159":1}}],["trials",{"2":{"145":2,"149":2}}],["triangles",{"2":{"40":1}}],["triangle",{"2":{"6":1,"40":4,"46":6,"152":4,"158":1}}],["trivially",{"2":{"122":1}}],["tr",{"2":{"39":3}}],["trues",{"2":{"138":3}}],["true",{"0":{"32":1},"2":{"1":5,"3":25,"4":3,"6":41,"36":7,"39":1,"41":2,"46":30,"48":6,"53":2,"56":1,"57":3,"60":4,"63":21,"65":1,"66":1,"68":2,"69":6,"71":1,"72":1,"73":4,"75":1,"76":1,"78":2,"79":1,"80":9,"82":2,"83":2,"85":1,"86":1,"87":3,"89":1,"90":1,"91":74,"93":3,"94":4,"96":2,"97":15,"99":2,"100":6,"103":1,"104":1,"106":1,"107":1,"109":2,"110":7,"112":1,"113":1,"114":4,"116":1,"117":1,"120":5,"121":4,"126":2,"129":8,"138":1,"142":1,"145":1,"149":1,"157":1,"160":1}}],["traverse",{"2":{"46":1}}],["traced",{"2":{"46":1}}],["traces",{"2":{"46":1}}],["trace",{"2":{"46":2,"52":1,"54":1,"56":1}}],["track",{"2":{"46":3,"138":2}}],["tracing",{"2":{"6":1,"46":3,"48":1,"53":5,"55":2,"57":2}}],["translate",{"2":{"41":2}}],["translation",{"2":{"1":2,"6":2,"149":2,"154":2}}],["transformation",{"0":{"154":1},"2":{"133":1,"141":1}}],["transformations",{"2":{"33":10}}],["transform",{"2":{"0":2,"1":6,"6":3,"15":2,"33":1,"122":1,"141":2,"149":1,"154":4}}],["trait`",{"2":{"129":1}}],["trait2",{"2":{"60":10,"63":2,"85":2,"86":2,"97":2,"102":2,"104":2,"105":2}}],["trait1",{"2":{"60":12,"63":2,"85":2,"86":2,"97":2,"102":2,"104":2,"105":2}}],["traits",{"2":{"6":2,"26":1,"97":1,"126":3,"127":2,"134":2,"149":2}}],["trait",{"2":{"1":5,"3":2,"4":2,"6":17,"26":7,"28":1,"30":1,"33":1,"36":2,"39":5,"42":6,"45":7,"48":2,"51":3,"52":2,"53":2,"54":6,"55":4,"56":2,"57":2,"60":7,"63":11,"69":3,"80":2,"83":3,"91":4,"97":10,"100":3,"110":3,"120":1,"122":1,"124":2,"126":3,"127":3,"129":54,"134":9,"135":1,"146":1,"149":2,"156":7}}],["traittarget",{"2":{"0":1,"1":2,"6":8,"36":1,"39":1,"45":1,"48":1,"52":2,"53":4,"54":3,"55":4,"56":2,"57":4,"60":1,"122":2,"125":1,"126":19,"129":10,"149":1}}],["thus",{"2":{"36":1,"39":1,"46":1,"55":1,"57":1}}],["though",{"2":{"28":1,"131":1}}],["those",{"2":{"22":1,"36":1,"46":1,"71":1,"112":1}}],["thing",{"0":{"20":1}}],["things",{"2":{"9":1}}],["this",{"0":{"20":1},"2":{"0":1,"1":1,"3":1,"4":6,"5":1,"6":26,"7":1,"17":2,"19":1,"21":1,"22":4,"26":1,"31":3,"32":2,"33":1,"35":2,"36":6,"38":2,"39":9,"41":3,"42":11,"44":1,"45":4,"46":22,"47":1,"48":4,"50":1,"51":5,"53":1,"55":1,"56":1,"57":2,"59":4,"60":6,"63":4,"65":1,"66":2,"68":3,"69":3,"76":1,"78":1,"79":2,"80":1,"83":3,"90":1,"91":2,"94":2,"96":1,"97":4,"100":3,"107":1,"109":1,"110":3,"117":1,"119":1,"120":3,"121":5,"122":2,"126":4,"127":2,"129":17,"130":3,"132":3,"133":1,"134":6,"135":7,"136":4,"138":3,"139":2,"140":2,"141":4,"142":3,"143":3,"144":5,"145":5,"146":4,"147":1,"149":3,"153":9,"154":1,"155":1,"156":1,"157":3,"158":3,"159":3,"160":1}}],["three",{"2":{"40":1}}],["thread",{"2":{"129":6}}],["threading",{"0":{"129":1},"2":{"126":1,"129":7}}],["threads",{"2":{"1":1,"6":1,"129":10}}],["threaded=",{"2":{"129":8}}],["threaded=true",{"2":{"129":1}}],["threaded=false",{"2":{"39":1,"45":4,"48":2,"60":8,"129":2,"139":1,"149":1}}],["threaded==true",{"2":{"1":1,"6":1,"129":1}}],["threaded",{"2":{"1":3,"4":1,"6":7,"32":1,"36":2,"39":1,"45":3,"48":3,"60":5,"126":3,"129":47,"139":1,"146":6,"149":1}}],["through",{"2":{"6":4,"36":1,"42":1,"46":3,"48":1,"50":1,"51":2,"69":1,"91":5,"110":1,"127":1,"129":1,"135":2,"138":2,"151":1}}],["thrown",{"2":{"127":1}}],["throw",{"2":{"4":1,"6":1,"57":1,"63":1,"129":5}}],["than",{"2":{"1":1,"3":1,"6":9,"11":1,"46":2,"71":1,"80":1,"97":1,"112":1,"120":1,"121":1,"128":1,"129":1,"135":2,"136":1,"137":1,"138":2,"143":1,"145":2,"146":1,"150":1}}],["that",{"2":{"1":1,"3":3,"4":8,"6":42,"9":1,"17":1,"21":1,"22":2,"25":1,"26":4,"27":3,"28":1,"30":3,"36":4,"38":2,"39":4,"42":4,"44":2,"45":3,"46":11,"47":3,"48":5,"52":4,"53":5,"54":4,"55":6,"56":3,"57":5,"60":2,"62":1,"63":11,"65":4,"66":1,"68":2,"69":1,"79":1,"82":1,"83":1,"91":3,"93":1,"94":1,"96":2,"97":10,"99":2,"100":2,"102":2,"109":3,"110":1,"112":3,"120":1,"122":1,"124":2,"126":2,"129":5,"130":3,"131":2,"132":1,"133":3,"134":2,"135":4,"136":2,"137":3,"138":4,"141":1,"143":2,"144":2,"145":3,"146":2,"149":2,"151":1,"153":1,"157":1,"158":2}}],["theorem",{"2":{"60":1}}],["themselves",{"2":{"42":1,"129":1}}],["them",{"2":{"6":1,"17":1,"22":1,"46":1,"124":1,"129":1,"131":2,"136":1,"137":1,"149":1}}],["thereof",{"2":{"122":1}}],["therefore",{"2":{"59":1,"130":1}}],["there",{"2":{"6":2,"30":1,"36":1,"42":2,"46":3,"48":1,"51":2,"55":2,"57":1,"91":1,"94":2,"122":1,"126":1,"129":4,"131":1,"144":1,"153":1}}],["then",{"2":{"6":5,"19":1,"26":1,"30":1,"36":3,"42":2,"46":4,"48":1,"52":1,"54":2,"55":4,"56":2,"57":2,"91":1,"121":1,"127":1,"129":3,"136":1,"145":2,"149":1,"157":1,"158":1}}],["their",{"2":{"3":1,"4":1,"6":2,"22":2,"42":1,"44":2,"57":1,"60":2,"88":1,"97":1,"99":1,"103":1,"104":1,"113":3,"114":3,"122":1,"129":1,"131":1,"137":1,"139":1}}],["they",{"2":{"3":3,"4":11,"6":23,"28":2,"30":1,"31":1,"32":1,"40":1,"45":2,"46":8,"48":2,"52":2,"54":1,"55":2,"56":2,"57":3,"62":3,"63":16,"69":1,"82":1,"86":2,"87":1,"88":1,"91":2,"93":1,"96":2,"97":4,"102":1,"104":1,"105":1,"113":1,"114":1,"121":1,"129":1,"130":1,"135":2,"138":2,"144":1,"153":1,"158":1}}],["these",{"2":{"1":1,"6":2,"22":1,"32":1,"36":1,"42":5,"46":1,"57":1,"62":1,"63":1,"65":1,"69":1,"78":1,"80":2,"82":1,"83":1,"93":1,"96":1,"97":1,"99":2,"100":1,"109":1,"110":1,"120":1,"121":1,"127":1,"129":1,"141":1,"145":1,"149":2,"157":1}}],["the",{"0":{"19":1,"44":1},"2":{"1":30,"3":64,"4":112,"5":12,"6":379,"7":5,"9":3,"10":1,"11":3,"17":3,"19":3,"21":1,"22":7,"25":5,"26":10,"27":2,"28":4,"30":4,"31":5,"32":3,"35":1,"36":63,"38":12,"39":43,"40":15,"41":12,"42":71,"44":6,"45":25,"46":99,"47":7,"48":47,"50":2,"51":7,"52":27,"53":22,"54":27,"55":57,"56":29,"57":70,"59":11,"60":81,"62":5,"63":47,"65":9,"66":11,"68":8,"69":25,"72":8,"73":9,"74":3,"75":3,"76":2,"78":4,"79":11,"80":5,"82":2,"83":21,"85":8,"86":6,"87":4,"89":3,"90":2,"91":123,"93":5,"94":7,"96":5,"97":25,"99":5,"100":21,"102":6,"103":10,"104":7,"105":3,"106":3,"107":2,"109":7,"110":24,"112":2,"113":9,"114":9,"115":6,"116":2,"117":2,"119":1,"120":7,"121":13,"122":8,"124":4,"126":7,"127":11,"129":86,"130":5,"131":5,"132":4,"133":2,"134":13,"135":10,"136":4,"137":8,"138":6,"139":1,"140":5,"141":14,"142":2,"143":3,"144":5,"145":26,"146":17,"147":1,"149":18,"150":3,"151":6,"152":3,"153":2,"154":3,"155":1,"157":10,"158":17,"159":3}}],["t",{"2":{"0":1,"4":28,"6":54,"9":1,"31":1,"33":8,"36":32,"39":41,"42":26,"45":38,"46":62,"48":44,"51":16,"52":12,"53":12,"54":12,"55":49,"56":10,"57":20,"60":87,"63":17,"68":1,"86":1,"91":23,"97":1,"99":1,"103":2,"104":1,"126":16,"129":10,"135":2,"138":2,"145":3,"146":5,"149":1,"155":7,"156":10,"159":1}}],["tokyo",{"2":{"159":1}}],["toy",{"2":{"157":1}}],["together",{"2":{"57":1,"158":1}}],["toggle",{"2":{"22":1}}],["touching",{"0":{"103":1},"2":{"57":1}}],["touch",{"0":{"104":1,"105":1,"106":1},"2":{"46":1,"99":1,"102":2,"104":1,"106":1}}],["touches",{"0":{"98":1,"99":1,"102":1},"1":{"99":1,"100":1},"2":{"0":2,"3":3,"6":3,"33":1,"98":1,"99":3,"100":10,"101":6,"102":10,"103":12,"104":8,"105":7,"106":3,"107":4,"157":1}}],["totally",{"2":{"56":1}}],["total",{"2":{"39":1,"42":2,"48":1}}],["topright",{"2":{"149":1}}],["top",{"2":{"28":1,"46":1,"121":1}}],["towards",{"2":{"17":1}}],["took",{"2":{"159":1}}],["tools",{"2":{"25":1}}],["too",{"2":{"6":1,"143":1,"146":1}}],["tol^2",{"2":{"150":1,"151":1}}],["tolerances",{"2":{"152":1,"153":29}}],["tolerance",{"2":{"150":1,"151":1,"152":1,"153":17}}],["tol",{"2":{"6":12,"145":2,"149":18,"150":7,"151":15,"152":8,"153":18}}],["todo",{"2":{"3":2,"6":2,"46":1,"55":1,"80":4,"97":1,"121":1,"129":1,"132":1,"149":1}}],["to",{"0":{"9":1,"31":1,"70":1,"84":1,"101":1,"111":1},"2":{"0":2,"1":22,"3":1,"4":33,"5":4,"6":135,"7":2,"9":3,"10":2,"11":2,"13":1,"17":3,"19":4,"20":1,"22":9,"25":2,"26":9,"27":1,"28":2,"30":3,"31":4,"32":2,"35":1,"36":8,"38":1,"39":4,"40":4,"41":1,"42":26,"44":2,"45":5,"46":28,"47":1,"48":12,"50":1,"51":3,"52":8,"53":2,"54":8,"55":10,"56":7,"57":11,"59":6,"60":32,"62":2,"63":17,"65":1,"66":1,"68":2,"69":7,"78":3,"79":1,"80":2,"82":1,"83":7,"91":21,"93":2,"94":3,"96":3,"97":5,"99":1,"100":7,"102":1,"109":1,"110":7,"120":4,"121":12,"122":4,"124":4,"126":13,"127":6,"128":1,"129":51,"130":2,"131":3,"133":4,"134":8,"135":5,"136":3,"137":1,"138":4,"139":3,"140":1,"141":4,"142":1,"143":3,"144":3,"145":9,"146":7,"149":4,"150":1,"151":13,"152":1,"153":2,"154":4,"155":1,"156":28,"157":7,"158":5,"159":2,"160":8}}],["rd",{"2":{"149":3}}],["rdbu",{"2":{"59":1}}],["rhumb",{"2":{"120":2}}],["running",{"2":{"129":3}}],["run",{"2":{"129":8,"159":1}}],["runs",{"2":{"55":2,"119":1}}],["rule",{"2":{"46":1}}],["rules",{"2":{"46":1}}],["right=2",{"2":{"46":1}}],["right",{"2":{"42":1,"46":3,"51":1,"60":1,"151":19,"153":5,"157":1}}],["ring",{"2":{"4":7,"6":14,"9":1,"33":1,"36":3,"39":2,"42":1,"44":1,"45":4,"46":11,"48":13,"57":3,"60":5,"63":4,"71":1,"72":2,"73":5,"85":1,"87":1,"91":2,"102":1,"103":1,"104":3,"112":1,"113":2,"114":4,"120":4,"130":2,"131":1,"132":14,"133":1}}],["rings",{"0":{"73":1,"87":1,"104":1,"114":1,"130":1},"1":{"131":1,"132":1},"2":{"1":1,"4":4,"6":7,"9":2,"39":1,"45":1,"46":3,"55":1,"63":7,"119":1,"129":1,"132":1,"135":1,"149":1}}],["rtrees",{"2":{"28":1}}],["r+y",{"2":{"13":2,"14":1}}],["r+x",{"2":{"13":2,"14":1}}],["ry^2",{"2":{"55":1}}],["ry",{"2":{"13":3,"14":3,"55":7}}],["rx^2",{"2":{"55":1}}],["rx",{"2":{"13":3,"14":3,"55":7}}],["round",{"2":{"149":1,"151":1,"153":1}}],["routines",{"2":{"11":1}}],["row",{"2":{"129":3}}],["rows",{"2":{"129":2}}],["robust",{"0":{"15":1}}],["rot",{"2":{"121":6}}],["rotate",{"2":{"48":1,"121":2}}],["rotation",{"2":{"1":1,"6":1,"154":1}}],["rotations",{"2":{"1":3,"6":3,"154":3}}],["rotmatrix2d",{"2":{"149":1}}],["rotmatrix",{"2":{"1":1,"6":1,"154":1}}],["r",{"2":{"6":1,"9":1,"13":11,"14":12,"22":1,"46":4,"55":18,"145":1,"153":2}}],["rᵢ₋₁",{"2":{"42":20}}],["rᵢ∗rᵢ₊₁+sᵢ⋅sᵢ₊₁",{"2":{"6":1}}],["rᵢ₊₁",{"2":{"6":1,"42":29}}],["rᵢ",{"2":{"6":2,"42":49}}],["ramer",{"2":{"151":1}}],["rand",{"2":{"158":2}}],["randomly",{"2":{"158":2}}],["random",{"2":{"149":2}}],["range",{"2":{"13":8,"14":4,"121":1,"129":4}}],["rather",{"2":{"137":1}}],["ratio",{"2":{"6":7,"55":1,"145":1,"149":1,"150":4,"151":6,"152":4,"153":11}}],["raster",{"0":{"121":1},"2":{"121":2}}],["ray",{"2":{"91":4}}],["rawcdn",{"2":{"149":1}}],["raw",{"2":{"26":1}}],["radii",{"2":{"6":1,"145":1}}],["radius`",{"2":{"145":1}}],["radius",{"2":{"6":6,"42":13,"145":4}}],["radialdistance",{"0":{"150":1},"2":{"0":1,"6":2,"147":1,"149":4,"150":4}}],["rrayscore",{"2":{"1":1,"6":1,"154":1}}],["rring",{"2":{"1":1,"6":1,"154":1}}],["rewrap",{"2":{"129":3}}],["req",{"2":{"91":44}}],["requirment",{"2":{"136":1}}],["requirments",{"2":{"91":5}}],["requirement",{"2":{"130":1}}],["require",{"2":{"68":2,"69":6,"83":3,"91":27,"100":3,"110":3}}],["requires",{"2":{"63":1,"65":1,"69":2,"72":3,"73":3,"74":1,"83":1,"86":3,"87":2,"88":1,"100":1,"103":3,"104":1,"105":1,"109":1,"110":1,"113":3,"114":3,"115":1,"142":1,"145":1}}],["required",{"2":{"21":1,"69":3,"83":3,"100":3,"110":3,"144":1}}],["requests",{"2":{"17":1}}],["reflected",{"2":{"149":3}}],["referring",{"2":{"91":1}}],["referece",{"2":{"1":2,"141":2}}],["references",{"2":{"6":1,"42":1}}],["reference",{"2":{"0":1}}],["ref",{"2":{"59":1}}],["reveal",{"2":{"57":1}}],["reveals",{"2":{"57":1}}],["reverse",{"2":{"38":1,"41":1,"42":1}}],["rev",{"2":{"56":1}}],["render",{"2":{"41":1}}],["rendering",{"2":{"41":3,"42":1}}],["rename",{"2":{"10":1}}],["regardless",{"2":{"91":1}}],["region",{"2":{"55":2,"57":2,"159":1}}],["regions",{"2":{"53":3,"55":4,"56":1,"57":3,"91":2,"159":1}}],["register",{"2":{"33":2,"42":3}}],["regular",{"0":{"15":1}}],["read",{"2":{"149":2}}],["readability",{"2":{"46":1}}],["reached",{"2":{"129":4}}],["reaches",{"2":{"127":1}}],["reach",{"2":{"127":1}}],["reason",{"2":{"32":1,"126":1,"130":1,"136":1}}],["real`",{"2":{"145":1,"146":1}}],["really",{"2":{"39":1,"91":1,"126":1}}],["real=1",{"2":{"6":2,"145":2}}],["real=6378137`",{"2":{"145":1}}],["real=6378137",{"2":{"6":2,"145":1}}],["real",{"0":{"159":1},"2":{"5":1,"6":15,"36":1,"42":45,"45":2,"55":2,"145":3,"146":1,"153":5,"157":1}}],["related",{"2":{"122":1}}],["relation",{"2":{"46":2}}],["relations",{"2":{"33":10,"80":1,"97":1}}],["relationship",{"2":{"31":1,"157":2}}],["relative",{"2":{"22":1,"42":3}}],["relevant",{"2":{"10":1}}],["reducing",{"2":{"129":1}}],["reduced",{"2":{"150":1,"151":1,"152":1}}],["reduces",{"2":{"27":1,"57":1}}],["reduce",{"2":{"1":1,"6":1,"129":2,"134":1}}],["redundant",{"2":{"46":1}}],["red",{"2":{"14":1,"44":2,"59":1,"68":1,"78":1,"93":1,"158":2}}],["removal",{"2":{"46":1}}],["removed",{"2":{"46":2,"53":3}}],["removes",{"2":{"46":1,"122":1}}],["remove",{"2":{"39":1,"46":31,"48":1,"51":2,"52":5,"54":5,"56":2,"138":2,"150":1,"151":1,"153":4}}],["removing",{"2":{"6":3,"46":1,"150":1,"151":1,"152":1}}],["remaining",{"2":{"46":1,"63":1,"91":2}}],["remain",{"2":{"1":1,"6":9,"129":1,"149":2}}],["reset",{"2":{"46":2}}],["research",{"0":{"23":1}}],["resize",{"2":{"13":1,"14":1,"46":2}}],["resampled",{"2":{"6":1,"146":1}}],["respectivly",{"2":{"97":1}}],["respectively",{"2":{"46":1,"129":1}}],["respect",{"2":{"6":2,"54":1,"91":6}}],["rest",{"2":{"6":1,"42":2,"56":1}}],["resulting",{"2":{"51":1,"57":1,"158":1}}],["results",{"2":{"3":2,"6":2,"55":1,"80":1,"97":1,"129":2,"131":1,"151":23}}],["result",{"2":{"1":2,"3":5,"4":5,"6":13,"27":1,"36":1,"39":2,"48":1,"55":4,"60":2,"66":1,"69":1,"79":1,"94":1,"110":1,"129":2,"145":3,"153":6}}],["recieves",{"2":{"129":2}}],["recucing",{"2":{"129":1}}],["recursive",{"2":{"127":1}}],["recursively",{"2":{"4":1,"6":1,"127":1,"139":1}}],["recalculate",{"2":{"128":1}}],["recent",{"2":{"46":1,"53":1,"55":1,"57":1}}],["rect",{"2":{"35":3,"38":5,"47":3,"59":7}}],["rectangle",{"2":{"35":2,"38":2,"41":2,"47":2,"48":1,"59":2,"144":5,"145":8,"158":2}}],["recommended",{"2":{"30":1}}],["reconstructing",{"2":{"149":1}}],["reconstructed",{"2":{"26":1}}],["reconstruct",{"2":{"0":2,"1":1,"6":3,"26":1,"124":2,"129":29}}],["repl",{"2":{"142":1,"145":1}}],["replace",{"2":{"46":1}}],["replaced",{"2":{"30":1}}],["repeat",{"2":{"45":1,"46":3,"63":6}}],["repeating",{"2":{"39":1,"57":1}}],["repeated",{"2":{"4":3,"6":3,"9":1,"36":2,"42":1,"46":2,"57":2,"60":2,"63":4,"91":1}}],["represented",{"2":{"158":1}}],["represent",{"2":{"25":1,"42":1,"46":4,"63":1}}],["representing",{"2":{"6":1,"53":1,"55":1,"57":1,"59":1,"63":1,"159":1}}],["represents",{"2":{"6":1,"134":2,"135":1}}],["reprojects",{"2":{"141":1}}],["reprojection",{"0":{"141":1},"1":{"142":1}}],["reproject",{"2":{"0":1,"1":4,"33":2,"122":1,"141":6,"142":2}}],["re",{"2":{"1":1,"6":1,"25":1,"154":1}}],["returntype",{"2":{"27":1}}],["returning",{"2":{"26":1,"53":2}}],["returns",{"2":{"3":5,"4":4,"5":3,"6":22,"26":1,"30":2,"36":1,"39":2,"42":6,"45":3,"46":5,"48":6,"51":1,"52":1,"55":1,"56":1,"60":8,"62":1,"65":2,"66":1,"69":1,"78":2,"79":1,"82":1,"91":3,"94":3,"110":1,"121":2,"129":1,"146":1,"155":1,"157":1}}],["return",{"0":{"30":1},"2":{"1":1,"3":18,"4":2,"6":33,"13":3,"14":3,"20":1,"22":1,"31":2,"36":5,"39":5,"42":20,"45":4,"46":32,"48":12,"51":12,"52":5,"53":4,"54":4,"55":10,"56":5,"57":9,"60":8,"63":30,"66":1,"69":1,"75":2,"76":2,"79":1,"80":18,"83":2,"89":2,"90":2,"91":65,"93":1,"94":5,"97":24,"100":1,"102":2,"106":2,"107":2,"110":1,"116":2,"117":2,"120":10,"121":7,"129":26,"130":1,"132":4,"134":6,"135":2,"138":2,"140":2,"141":1,"146":4,"149":3,"150":1,"151":5,"152":3,"153":7,"154":2,"155":2,"156":8}}],["returned",{"2":{"1":1,"6":9,"30":2,"31":1,"46":3,"51":1,"52":2,"54":2,"56":2,"124":1,"126":1,"129":2,"141":1,"149":1}}],["retreivable",{"2":{"1":1,"141":1}}],["rebuilt",{"2":{"1":1,"6":2,"124":1,"129":2}}],["rebuilder",{"2":{"149":2}}],["rebuild",{"2":{"0":2,"6":4,"124":4,"127":1,"129":14,"146":1,"149":3}}],["psa",{"2":{"129":2}}],["p4",{"2":{"121":5}}],["pn",{"2":{"102":3}}],["pb",{"2":{"80":2}}],["p0",{"2":{"60":9,"121":9}}],["p3",{"2":{"46":8,"121":11,"152":4}}],["ptm",{"2":{"120":3}}],["ptj",{"2":{"120":5}}],["pti",{"2":{"120":3}}],["ptrait",{"2":{"60":2}}],["pts",{"2":{"46":14,"51":7}}],["pt",{"2":{"46":78,"51":2,"91":8}}],["pt2",{"2":{"46":14}}],["pt1",{"2":{"46":18}}],["pfirst",{"2":{"39":3}}],["philosophy",{"2":{"22":2}}],["pu",{"2":{"158":2}}],["purpose",{"2":{"129":1}}],["purely",{"2":{"6":1,"26":1,"145":1}}],["push",{"2":{"46":15,"51":5,"52":2,"54":2,"55":1,"56":4,"57":5,"121":3,"132":1,"146":3,"151":3}}],["public",{"2":{"32":1}}],["pull",{"2":{"17":1}}],["piece",{"2":{"46":6,"138":6}}],["pieces",{"2":{"46":12,"51":1,"56":4,"91":1,"138":9}}],["pi",{"2":{"13":2}}],["pixels",{"2":{"121":1}}],["pixel",{"2":{"6":1,"121":4}}],["pythagorean",{"2":{"60":1}}],["python",{"2":{"22":1}}],["py",{"2":{"13":2,"14":2,"55":4}}],["px",{"2":{"13":2,"14":2,"55":4}}],["peucker",{"2":{"147":1,"149":3,"151":2}}],["peaks",{"2":{"121":2}}],["peculiarities",{"0":{"29":1},"1":{"30":1,"31":1,"32":1}}],["people",{"2":{"9":1}}],["performed",{"2":{"158":1}}],["performs",{"2":{"42":1,"146":1}}],["perform",{"2":{"41":1,"42":2,"122":1,"157":3,"158":2,"160":1}}],["performing",{"2":{"6":3,"31":1,"42":1,"52":1,"54":1,"56":1,"158":1}}],["performance",{"2":{"4":1,"6":2,"22":1,"30":1,"136":1,"139":1,"149":1}}],["per",{"2":{"5":2,"6":2,"41":1,"42":2,"46":5,"129":4,"146":1}}],["pl",{"2":{"158":2}}],["place",{"2":{"157":1}}],["placement",{"2":{"46":1}}],["plan",{"2":{"143":1}}],["plane",{"2":{"42":1}}],["plotted",{"2":{"44":1,"121":1}}],["plotting",{"2":{"6":1,"143":1,"146":1}}],["plots",{"2":{"22":1,"41":2}}],["plot",{"2":{"13":1,"41":3,"62":1,"96":1,"121":1,"145":2,"149":4,"158":1}}],["plus",{"2":{"5":1,"6":1,"42":1}}],["p2y",{"2":{"156":3}}],["p2x",{"2":{"156":3}}],["p2box",{"2":{"41":1}}],["p2",{"2":{"3":2,"4":2,"6":6,"15":12,"36":12,"39":9,"46":18,"48":19,"56":2,"60":15,"63":11,"69":2,"78":2,"91":12,"97":2,"120":3,"121":5,"144":1,"152":4,"156":3}}],["p1y",{"2":{"156":3}}],["p1x",{"2":{"156":3}}],["p1",{"2":{"3":3,"4":2,"6":7,"15":12,"36":21,"39":8,"41":4,"46":9,"48":25,"50":1,"56":2,"60":15,"63":14,"68":5,"69":3,"78":5,"91":4,"97":2,"102":3,"120":3,"121":5,"152":4,"156":3}}],["pretty",{"2":{"141":1}}],["prettytime",{"2":{"13":2}}],["prevent",{"2":{"53":2,"55":2,"57":2}}],["prev^2",{"2":{"36":2}}],["prev",{"2":{"36":14,"46":43,"120":4}}],["previously",{"2":{"144":1}}],["previous",{"2":{"24":1,"27":1,"36":1,"129":1,"150":3}}],["preparations",{"2":{"28":1}}],["prepared",{"2":{"28":1}}],["prepare",{"0":{"28":1},"2":{"25":1,"28":1}}],["pred",{"2":{"157":2,"158":1,"159":2,"160":1}}],["predecessor",{"2":{"22":1}}],["predicate",{"2":{"7":1,"80":1,"157":3,"158":1,"160":5}}],["predicates",{"0":{"12":1,"15":1,"160":1},"1":{"13":1,"14":1,"15":1,"16":1},"2":{"7":4,"12":1,"22":1,"157":1,"159":1}}],["precision",{"2":{"11":1}}],["preserve",{"2":{"149":4,"151":3}}],["presence",{"2":{"129":1}}],["presentation",{"2":{"6":1,"42":1}}],["prescribes",{"2":{"28":1}}],["press",{"2":{"6":1,"42":1}}],["pre",{"2":{"6":1,"56":1,"149":1}}],["prefilter",{"2":{"6":1,"149":7}}],["protters",{"2":{"129":2}}],["progressively",{"2":{"127":1}}],["program",{"2":{"25":1}}],["programming",{"2":{"25":1}}],["promote",{"2":{"42":5}}],["property",{"2":{"129":2}}],["properties=gi",{"2":{"129":1}}],["properties=namedtuple",{"2":{"129":1}}],["properties",{"2":{"6":1,"129":9,"149":1,"153":1}}],["propagate",{"2":{"42":16,"60":4}}],["probably",{"2":{"39":1,"129":1}}],["prod",{"2":{"36":4}}],["product",{"2":{"36":1,"91":2}}],["process",{"2":{"71":3,"72":3,"73":3,"74":1,"80":1,"85":3,"86":3,"87":2,"88":1,"91":5,"102":1,"103":3,"104":1,"105":1,"112":3,"113":3,"114":3,"115":1,"129":2,"151":1}}],["processed",{"2":{"46":6}}],["processors",{"2":{"33":1,"69":2,"83":2,"100":2,"110":2}}],["processor",{"2":{"33":1}}],["processing",{"2":{"31":1}}],["profile",{"2":{"9":1}}],["providers",{"2":{"131":1,"137":1}}],["provide",{"0":{"31":1},"2":{"6":6,"22":1,"35":1,"38":1,"40":1,"44":1,"47":1,"50":1,"52":2,"54":2,"56":2,"59":1,"62":1,"65":1,"68":1,"78":1,"82":1,"91":2,"93":1,"96":1,"99":1,"109":1,"121":1,"153":1}}],["provided",{"2":{"4":1,"6":3,"11":1,"46":1,"60":1,"63":1,"137":1,"145":2}}],["projection",{"2":{"60":2}}],["project",{"2":{"9":1}}],["projects",{"0":{"23":1},"2":{"9":1}}],["proj",{"2":{"1":2,"6":3,"141":2,"142":4,"144":1,"145":6}}],["println",{"2":{"142":1,"145":1,"149":2}}],["print",{"2":{"142":2,"145":2}}],["printstyled",{"2":{"142":1,"145":1}}],["prints",{"2":{"142":1}}],["primitives",{"2":{"33":1}}],["primitive",{"0":{"122":1},"1":{"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1},"2":{"19":1}}],["primarily",{"2":{"6":1,"17":2,"126":1}}],["primary",{"2":{"3":2,"6":3,"69":1,"110":1,"149":1}}],["priority",{"2":{"1":1,"141":1}}],["pay",{"2":{"129":1}}],["pa",{"2":{"80":2}}],["pathof",{"2":{"149":2}}],["paths",{"2":{"126":1}}],["path",{"2":{"38":3}}],["paper",{"0":{"21":1},"1":{"22":1,"23":1,"24":1},"2":{"24":2,"91":2}}],["padding",{"2":{"6":1}}],["parent",{"2":{"126":1}}],["parse",{"2":{"91":1,"97":1}}],["part",{"2":{"48":2,"57":2,"91":3,"128":1}}],["partition",{"2":{"129":4}}],["partialsort",{"2":{"153":1}}],["partial",{"2":{"48":4}}],["partially",{"2":{"46":2,"57":2}}],["particularly",{"2":{"42":1}}],["particular",{"2":{"20":1,"36":1,"121":1}}],["parallel",{"2":{"55":2,"91":1,"120":1}}],["paradigms",{"0":{"25":1},"1":{"26":1,"27":1,"28":1},"2":{"25":2,"28":1}}],["paradigm",{"0":{"19":1}}],["parameters",{"2":{"6":1,"126":1,"129":1}}],["parameter",{"2":{"6":2,"126":2}}],["parlance",{"2":{"5":1,"6":1,"42":1}}],["passes",{"2":{"48":2,"91":1}}],["passed",{"2":{"1":2,"6":6,"121":1,"124":1,"129":2,"141":1,"145":2,"154":1,"160":1}}],["passable",{"2":{"42":18}}],["passing",{"2":{"26":1,"129":1}}],["pass",{"2":{"5":1,"6":4,"26":1,"42":1,"66":1,"79":1,"91":2,"94":1,"126":1,"145":1,"146":1,"149":1}}],["pairs",{"2":{"55":1}}],["pair",{"2":{"3":2,"6":2,"48":1,"97":2,"129":3}}],["packages",{"2":{"6":1,"17":1,"24":1,"124":1,"129":1,"130":1}}],["package",{"2":{"1":2,"17":2,"30":1,"141":3,"142":1,"145":1}}],["page",{"2":{"0":1,"9":1,"19":1,"21":1,"33":1,"36":1,"39":1,"41":1,"42":1,"45":1,"46":1,"48":1,"51":1,"53":1,"55":1,"57":1,"60":1,"63":1,"66":1,"76":1,"79":1,"80":1,"90":1,"91":1,"94":1,"97":1,"107":1,"117":1,"120":1,"121":1,"129":1,"132":1,"135":1,"138":1,"139":1,"140":1,"142":1,"146":1,"153":1,"154":1,"155":1,"156":1}}],["p",{"2":{"1":5,"6":5,"13":13,"14":12,"15":2,"35":1,"38":1,"44":1,"46":11,"47":1,"48":5,"52":2,"53":2,"54":2,"55":3,"56":4,"59":3,"62":1,"65":1,"68":1,"78":1,"80":4,"82":1,"91":23,"93":1,"96":1,"99":1,"109":1,"120":4,"121":3,"122":3,"129":3,"140":7,"144":1,"148":1,"149":1,"153":3,"154":9,"155":7,"156":13,"157":1,"158":1}}],["poylgon",{"2":{"55":1,"57":1,"91":1}}],["potential",{"2":{"48":1}}],["potentially",{"2":{"6":2,"22":1,"46":1,"135":2,"138":2}}],["possibly",{"2":{"129":1}}],["possible",{"2":{"6":4,"22":1,"52":1,"54":1,"55":2,"56":1,"129":2}}],["possibility",{"2":{"127":1}}],["postitive",{"2":{"59":1}}],["postive",{"2":{"38":1}}],["position=",{"2":{"149":1}}],["position",{"2":{"6":1,"120":1,"144":1}}],["positive",{"2":{"4":4,"6":4,"38":2,"39":1,"59":2,"60":3,"146":1,"153":1}}],["polar",{"2":{"6":1,"145":1}}],["polynodes",{"2":{"46":5,"52":1,"54":1,"56":1}}],["polynode",{"2":{"46":31}}],["polypoints",{"2":{"42":46}}],["polyogns",{"2":{"121":1}}],["polyogn",{"2":{"36":1}}],["polygns",{"2":{"46":1}}],["polygin",{"2":{"4":1,"6":1,"36":1}}],["polygonization",{"2":{"121":1}}],["polygonizing",{"0":{"121":1}}],["polygonized",{"2":{"121":1}}],["polygonize",{"2":{"0":1,"6":2,"9":1,"33":1,"121":12}}],["polygon`",{"2":{"42":3,"121":1}}],["polygonops",{"2":{"24":1}}],["polygons",{"0":{"74":1,"105":1,"115":1,"136":1},"1":{"137":1,"138":1},"2":{"3":4,"4":3,"5":1,"6":17,"9":1,"31":5,"33":1,"39":5,"40":1,"42":2,"44":1,"45":1,"46":13,"48":1,"51":2,"52":9,"53":5,"54":3,"55":7,"56":6,"57":19,"59":1,"60":1,"63":5,"74":1,"97":5,"115":1,"120":1,"121":8,"127":1,"131":2,"135":3,"136":2,"137":2,"138":10,"147":1,"149":1,"158":5,"159":3}}],["polygontrait",{"2":{"1":2,"3":4,"4":6,"6":15,"15":3,"31":1,"36":2,"39":3,"42":3,"45":2,"46":2,"48":2,"51":1,"52":5,"53":5,"54":3,"55":5,"56":4,"57":8,"60":2,"63":10,"71":2,"72":1,"73":1,"74":3,"75":1,"80":4,"85":2,"86":2,"87":1,"88":2,"89":1,"97":8,"102":2,"103":1,"104":1,"105":3,"106":1,"112":2,"113":1,"114":1,"115":3,"116":1,"122":1,"127":2,"129":2,"132":2,"134":2,"135":1,"138":2,"149":2,"156":1}}],["polygon",{"0":{"46":1,"49":1,"52":1,"53":1,"55":1,"56":1,"57":1,"88":1},"1":{"50":1,"51":1},"2":{"0":1,"1":4,"3":4,"4":20,"5":9,"6":62,"9":2,"11":3,"15":4,"24":2,"28":1,"31":1,"35":1,"36":3,"38":2,"39":5,"40":5,"41":16,"42":57,"44":2,"45":4,"46":35,"47":3,"48":4,"50":3,"51":10,"52":5,"53":7,"54":5,"55":5,"56":6,"57":33,"59":3,"60":14,"63":12,"69":1,"71":3,"72":3,"73":4,"74":8,"80":1,"85":3,"86":4,"87":4,"88":4,"91":57,"97":4,"100":1,"102":3,"103":4,"104":5,"105":7,"110":1,"112":3,"113":4,"114":4,"115":8,"120":5,"121":2,"129":3,"130":4,"131":8,"132":5,"133":1,"135":4,"136":3,"137":12,"138":7,"144":1,"145":4,"148":1,"149":9,"154":3,"156":6,"158":6}}],["polys",{"2":{"6":2,"46":36,"50":3,"51":10,"52":14,"53":13,"54":9,"55":6,"56":14,"57":28,"138":26}}],["polys1",{"2":{"3":2,"6":2,"97":6}}],["polys2",{"2":{"3":2,"6":2,"97":6}}],["poly",{"2":{"3":2,"6":16,"15":2,"35":1,"38":1,"39":6,"41":2,"42":3,"44":1,"46":93,"47":2,"48":4,"50":4,"51":20,"52":18,"53":11,"54":11,"55":10,"56":15,"57":79,"59":1,"60":3,"63":4,"80":10,"91":21,"97":8,"120":5,"121":2,"138":18,"144":2,"148":2,"149":8,"156":8,"158":5}}],["poly2",{"2":{"3":3,"4":2,"6":7,"52":2,"63":2,"91":16,"97":7}}],["poly1",{"2":{"3":3,"4":2,"6":7,"52":2,"63":2,"91":11,"97":7}}],["polgontrait",{"2":{"1":1,"6":1}}],["pointwise",{"0":{"154":1},"2":{"141":1}}],["point1",{"2":{"60":4}}],["pointedgeside",{"2":{"46":1}}],["point₂",{"2":{"45":13}}],["point₁",{"2":{"45":13}}],["point3s",{"2":{"42":10}}],["point3f",{"2":{"41":1}}],["pointrait",{"2":{"6":1}}],["point2f",{"2":{"41":4,"42":2,"59":1,"121":1}}],["point2",{"2":{"6":2,"42":5,"60":4}}],["pointtrait",{"2":{"1":1,"4":4,"6":9,"26":1,"36":2,"39":1,"42":3,"48":1,"54":2,"60":17,"63":8,"71":6,"75":1,"85":6,"89":1,"102":6,"106":1,"112":6,"116":1,"122":2,"126":2,"127":1,"129":21,"134":2,"135":1,"139":1,"140":2,"149":2,"154":2,"155":2,"156":1}}],["point",{"0":{"85":1,"102":1},"2":{"1":4,"3":10,"4":37,"5":7,"6":84,"9":2,"24":1,"28":1,"36":12,"39":3,"40":3,"41":1,"42":126,"45":6,"46":83,"48":50,"51":13,"53":9,"54":1,"55":23,"57":9,"59":17,"60":73,"63":27,"66":3,"68":1,"69":2,"71":8,"80":21,"83":2,"85":10,"91":139,"93":1,"94":1,"96":2,"97":20,"99":1,"100":3,"102":10,"103":1,"105":1,"110":4,"112":11,"120":1,"121":1,"129":2,"130":1,"131":2,"135":2,"136":1,"138":2,"141":1,"143":1,"149":2,"150":3,"151":5,"152":1,"154":2,"156":4,"158":2}}],["points2",{"2":{"3":1,"6":1,"97":3}}],["points1",{"2":{"3":1,"6":1,"97":3}}],["points",{"0":{"71":1,"112":1},"2":{"0":1,"1":4,"3":1,"4":11,"5":1,"6":50,"9":3,"13":1,"36":2,"38":3,"39":3,"41":8,"42":32,"45":1,"46":46,"48":5,"51":3,"52":5,"53":1,"54":8,"55":18,"56":4,"57":1,"59":2,"60":8,"62":2,"63":13,"65":1,"69":6,"71":3,"72":4,"83":6,"85":1,"86":7,"87":3,"91":9,"97":5,"100":5,"102":1,"103":2,"104":4,"105":3,"109":1,"110":5,"112":3,"113":3,"114":3,"115":1,"119":1,"121":3,"129":2,"139":2,"141":1,"144":2,"145":2,"149":11,"150":11,"151":25,"152":10,"153":33,"154":2,"155":2,"156":25,"157":1,"158":11}}],["pointorientation",{"2":{"0":1,"6":2,"91":2}}],["my",{"2":{"22":1,"159":1,"160":2}}],["moore",{"2":{"121":2}}],["moved",{"2":{"46":1,"121":10,"141":1}}],["move",{"2":{"45":1,"91":1,"121":6}}],["mode",{"2":{"160":3}}],["model",{"2":{"157":1}}],["module",{"2":{"141":1,"146":1}}],["modules",{"2":{"6":1,"42":1}}],["modified",{"2":{"129":2}}],["mod1",{"2":{"42":5}}],["mod",{"2":{"42":1,"46":1}}],["monotone",{"2":{"28":1}}],["most",{"2":{"17":1,"22":1,"46":1,"53":1,"55":1,"57":1,"91":1,"149":1}}],["moment",{"2":{"6":1,"144":1,"146":1}}],["more",{"2":{"6":3,"7":1,"9":1,"10":1,"11":1,"19":1,"31":1,"46":1,"52":1,"54":1,"56":1,"91":1,"97":1,"121":1,"129":4,"132":1,"142":1,"144":1,"146":1,"157":1}}],["mistakenly",{"2":{"136":1}}],["missing",{"2":{"124":6,"125":2,"144":4}}],["missingpoints",{"2":{"121":1}}],["mid",{"2":{"48":2,"91":3}}],["midpoint",{"2":{"46":1}}],["middle",{"2":{"46":2}}],["minimal",{"2":{"159":1}}],["minimum",{"2":{"4":7,"6":12,"47":1,"48":2,"60":12,"121":1,"149":1,"150":1,"152":1}}],["mining",{"2":{"159":1}}],["mind",{"2":{"144":1,"158":1}}],["min",{"2":{"48":1,"60":15,"149":1,"151":3,"152":1,"153":28}}],["minus",{"2":{"38":1}}],["minpoints",{"2":{"6":2,"121":2}}],["minpoints=10",{"2":{"6":2,"121":3}}],["might",{"2":{"6":3,"17":1,"39":1,"52":1,"54":1,"56":1,"133":1,"151":1}}],["mixed",{"2":{"6":4,"149":1}}],["m",{"2":{"5":1,"6":1,"15":10,"21":1,"42":2,"48":6,"120":2}}],["mp",{"2":{"80":2}}],["mp1",{"2":{"4":2,"6":2,"63":7}}],["mp2",{"2":{"4":2,"6":2,"63":8}}],["manner",{"2":{"157":1}}],["manually",{"2":{"130":1}}],["many",{"2":{"4":1,"5":1,"6":2,"22":1,"31":1,"42":1,"46":1,"51":1,"53":1,"55":2,"57":1,"63":1,"131":1,"139":1}}],["mason",{"2":{"129":2}}],["marking",{"2":{"53":2,"55":2,"57":2}}],["mark",{"2":{"46":2}}],["marked",{"2":{"46":6,"53":1,"55":1,"57":1}}],["marks",{"2":{"46":1}}],["mag",{"2":{"36":4}}],["maptasks",{"2":{"129":6}}],["mapreducetasks",{"2":{"129":5}}],["mapreduce",{"2":{"53":1,"129":8}}],["map",{"2":{"13":1,"19":1,"26":3,"27":1,"42":1,"46":1,"55":1,"97":2,"121":5,"126":1,"129":24,"132":1,"149":1}}],["making",{"2":{"46":1,"127":1,"137":1}}],["makie",{"2":{"13":1,"14":1,"35":1,"38":1,"41":3,"44":1,"47":1,"50":4,"59":1,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"121":3,"148":1,"149":1}}],["makevalid",{"2":{"149":2}}],["makes",{"2":{"39":1,"46":1,"60":1,"129":1,"131":1,"136":1,"137":1}}],["make",{"2":{"9":1,"17":1,"22":1,"36":1,"46":3,"60":1,"97":1,"127":1,"132":1,"144":1,"153":1}}],["mainly",{"2":{"42":1,"59":1,"122":1}}],["maintain",{"2":{"39":1}}],["main",{"0":{"18":1},"1":{"19":1,"20":1},"2":{"7":1,"22":1,"46":1,"121":1,"129":1,"145":1}}],["matlab",{"2":{"50":1}}],["materializer`",{"2":{"129":1}}],["materializer",{"2":{"30":1,"129":1}}],["mathrm",{"2":{"42":1}}],["math",{"2":{"7":1}}],["matches",{"2":{"63":1}}],["match",{"2":{"6":1,"63":12,"97":3,"124":1,"129":2}}],["matching",{"2":{"3":1,"6":1,"30":1,"63":3,"97":1,"127":2}}],["matrix",{"2":{"6":2,"14":2,"42":1,"121":1}}],["max",{"2":{"6":8,"36":2,"48":1,"121":1,"129":2,"144":5,"145":8,"146":7,"151":36,"153":1}}],["maximum",{"2":{"3":1,"6":4,"14":1,"47":1,"48":4,"80":1,"121":1,"145":1,"146":1,"151":3}}],["made",{"2":{"6":2,"45":1,"46":1,"104":1,"127":1,"135":1,"138":1,"152":1}}],["maybe",{"2":{"6":1,"124":1,"129":6}}],["may",{"2":{"1":1,"6":5,"31":2,"32":1,"42":2,"46":1,"120":1,"126":1,"127":1,"129":4,"136":1,"137":1,"145":1}}],["measure",{"2":{"129":1,"143":1}}],["meaning",{"2":{"3":3,"4":1,"6":4,"32":1,"39":1,"97":4,"120":1}}],["means",{"2":{"3":1,"6":1,"38":1,"39":1,"68":1,"91":3,"96":1,"97":1,"127":1}}],["mean",{"2":{"0":1,"6":5,"25":1,"41":2,"42":5,"129":1}}],["meanvalue",{"2":{"0":1,"5":2,"6":3,"40":1,"41":2,"42":15}}],["merge",{"2":{"129":1}}],["merely",{"2":{"22":1}}],["meets",{"2":{"91":9,"97":1}}],["meet",{"2":{"55":1,"68":1,"69":1,"83":1,"91":7,"100":1,"110":1}}],["mesh",{"2":{"41":1,"129":1}}],["messages",{"2":{"22":1}}],["me",{"0":{"31":1}}],["mentioned",{"2":{"27":1}}],["menu",{"2":{"14":3}}],["memory",{"2":{"22":1,"42":1}}],["median",{"2":{"13":4,"129":1}}],["mechanics",{"2":{"6":1,"42":1}}],["met",{"2":{"91":44}}],["meters",{"2":{"6":4,"144":1,"145":4}}],["methoderror",{"2":{"33":2}}],["methods",{"0":{"2":1,"3":1,"4":1,"6":1},"1":{"3":1,"4":1},"2":{"1":1,"6":8,"9":1,"17":1,"33":24,"42":3,"69":1,"83":1,"100":1,"110":1,"121":1,"124":1,"126":1,"127":1,"129":2,"144":1,"149":2,"154":1}}],["method",{"0":{"142":1},"2":{"1":1,"4":1,"5":10,"6":95,"32":1,"36":1,"39":1,"42":37,"45":1,"48":1,"55":1,"57":1,"60":4,"63":1,"69":2,"83":2,"97":1,"100":2,"110":2,"121":1,"126":1,"129":5,"141":1,"142":2,"144":2,"145":9,"146":14,"157":1,"160":1}}],["muladd",{"2":{"42":2}}],["multifloats",{"2":{"13":1,"14":1,"15":1}}],["multifloat",{"2":{"7":1}}],["multilinestringtrait",{"2":{"134":1}}],["multilinestring",{"2":{"6":1,"129":1,"156":2}}],["multi",{"0":{"75":1,"76":1,"89":1,"90":1,"106":1,"107":1,"116":1,"117":1},"2":{"4":2,"6":3,"36":1,"39":1,"48":1,"63":2,"75":1,"76":1,"89":1,"90":1,"106":1,"107":1,"116":1,"117":1}}],["multicurves",{"2":{"39":1,"48":1}}],["multicurve",{"2":{"4":1,"6":1,"39":1}}],["multigeometry",{"2":{"4":2,"6":2,"60":2}}],["multiplication",{"2":{"146":1}}],["multiplied",{"2":{"42":3}}],["multiple",{"2":{"4":1,"6":1,"22":1,"42":1,"91":1,"139":1,"153":1}}],["multiply",{"2":{"1":1,"6":1,"154":1}}],["multipolys",{"2":{"57":3}}],["multipoly`",{"2":{"52":2,"54":2,"56":2}}],["multipoly",{"2":{"6":9,"15":3,"52":1,"53":25,"54":1,"55":26,"56":1,"57":24,"138":21,"149":9}}],["multipolygon`",{"2":{"121":1}}],["multipolygons",{"2":{"3":1,"4":1,"6":11,"45":1,"52":3,"54":3,"55":2,"56":3,"59":1,"63":1,"97":2,"137":1}}],["multipolygon",{"2":{"3":2,"4":5,"6":12,"39":2,"44":1,"52":1,"53":7,"54":1,"55":5,"56":1,"57":6,"63":4,"97":2,"129":1,"135":2,"136":7,"137":8,"138":2,"149":3}}],["multipolygontrait",{"2":{"1":1,"3":4,"4":2,"6":7,"31":1,"53":4,"55":4,"57":4,"63":6,"75":1,"76":1,"89":1,"90":1,"97":8,"106":1,"107":1,"116":1,"117":1,"129":1,"134":1,"138":4}}],["multipoint",{"2":{"4":5,"6":5,"39":1,"63":5,"80":6,"129":5,"149":1}}],["multipoints",{"2":{"3":2,"4":1,"6":3,"39":1,"48":1,"63":2,"97":2,"149":1}}],["multipointtrait",{"2":{"1":1,"3":2,"4":4,"6":8,"36":2,"39":1,"48":1,"63":8,"75":1,"76":1,"80":4,"89":1,"90":1,"97":4,"106":1,"107":1,"116":1,"117":1,"127":1,"134":1,"149":2,"156":1}}],["multithreading",{"2":{"1":2,"4":1,"6":5,"126":1}}],["mutlipolygon",{"2":{"4":1,"6":1,"45":1}}],["must",{"2":{"1":1,"3":8,"4":2,"5":1,"6":22,"9":1,"22":1,"36":1,"42":5,"46":1,"48":3,"51":1,"63":5,"66":2,"69":1,"78":1,"79":1,"83":1,"91":13,"97":1,"99":1,"100":1,"110":2,"124":1,"129":1,"133":1,"134":3,"135":1,"141":1,"145":1,"146":1,"149":1,"153":4}}],["much",{"2":{"0":1,"6":3,"52":1,"54":1,"56":1}}],["mdash",{"2":{"1":4,"3":9,"4":8,"5":3,"6":86,"124":3,"134":1,"135":4}}],["df",{"2":{"158":10,"159":12}}],["dp",{"2":{"149":3}}],["dy",{"2":{"120":2,"146":3}}],["dy2",{"2":{"120":2}}],["dy1",{"2":{"80":10,"120":2}}],["dyc",{"2":{"80":2}}],["dx",{"2":{"120":2,"146":3}}],["dx2",{"2":{"120":2}}],["dx1",{"2":{"80":10,"120":2}}],["dxc",{"2":{"80":2}}],["drop",{"2":{"57":1,"138":1,"146":1}}],["driven",{"2":{"17":1}}],["driving",{"2":{"17":1}}],["duplicated",{"2":{"55":2}}],["during",{"2":{"46":1}}],["due",{"2":{"45":1,"55":2}}],["datas",{"2":{"160":1}}],["datasets",{"2":{"157":1,"158":1}}],["dataset",{"2":{"157":1}}],["datainterpolations",{"2":{"143":1}}],["dataframes",{"2":{"158":2,"159":1}}],["dataframe",{"2":{"19":1,"157":1,"158":5,"159":2}}],["data",{"0":{"121":1},"2":{"17":1,"31":1,"121":1,"149":8,"158":1}}],["dataaspect",{"2":{"13":1,"14":1,"35":1,"38":1,"41":2,"44":1,"47":1,"59":2,"121":2,"144":1,"149":1}}],["dashboard",{"0":{"14":1},"2":{"13":1,"14":1}}],["d",{"2":{"1":2,"5":1,"6":1,"42":1,"141":1,"151":3}}],["deu",{"2":{"159":2}}],["demonstrates",{"2":{"158":1}}],["densify",{"2":{"145":3}}],["densifying",{"2":{"145":1}}],["densifies",{"2":{"143":1}}],["denoted",{"2":{"91":1}}],["denotes",{"2":{"46":1}}],["debug",{"2":{"134":1}}],["debugging",{"2":{"42":1}}],["de",{"2":{"91":2,"157":1}}],["derivation",{"2":{"55":1}}],["dealing",{"2":{"48":1}}],["delta",{"2":{"121":13}}],["delete",{"2":{"80":1,"97":1,"151":1}}],["deleteat",{"2":{"46":4,"151":1,"153":2}}],["delayed",{"2":{"46":10,"53":2,"55":2,"57":2}}],["delay",{"2":{"46":12,"52":2,"53":2,"54":2,"55":2,"56":2,"57":2}}],["depend",{"2":{"46":2}}],["depends",{"2":{"46":1,"51":1}}],["depending",{"2":{"1":1,"6":1,"31":1,"129":1}}],["depth",{"2":{"42":2}}],["desired",{"2":{"56":1}}],["despite",{"2":{"36":1}}],["describe",{"2":{"25":1}}],["described",{"2":{"6":1,"42":1,"45":1,"46":1}}],["deconstruct",{"2":{"122":1}}],["decomposition",{"2":{"26":1,"122":1}}],["decomposing",{"2":{"26":1}}],["decompose",{"2":{"19":1,"26":2,"42":4,"130":1}}],["decrease",{"2":{"45":1}}],["decreaseing",{"2":{"6":1,"149":1}}],["decision",{"2":{"32":1}}],["degeneracies",{"2":{"9":1}}],["degenerate",{"2":{"6":1,"42":1,"51":2,"55":1}}],["degrees",{"2":{"6":1,"35":1,"120":1,"145":1}}],["defauly",{"2":{"53":1}}],["default",{"2":{"1":2,"4":5,"6":11,"36":1,"39":2,"48":1,"52":1,"53":1,"54":1,"55":2,"56":1,"57":2,"60":2,"124":1,"129":2,"141":2,"149":2}}],["defaults",{"2":{"1":6,"4":2,"6":14,"126":3,"129":1}}],["defines",{"2":{"46":1,"122":1,"133":1}}],["define",{"2":{"41":1,"55":1,"62":1,"122":1,"127":1,"129":1,"160":2}}],["defined",{"2":{"4":1,"5":1,"6":3,"7":1,"30":1,"36":2,"42":1,"47":1,"48":4,"60":2,"119":1,"129":1,"146":1}}],["definition",{"2":{"4":1,"6":3,"63":5,"68":1,"146":1}}],["defintion",{"2":{"4":3,"6":3,"63":3}}],["deeper",{"2":{"1":1,"6":1,"128":1,"129":2}}],["detrimental",{"2":{"136":1}}],["details",{"2":{"124":3,"125":1,"144":2}}],["detect",{"2":{"121":2}}],["detection",{"2":{"121":1}}],["determined",{"2":{"46":1,"48":1}}],["determine",{"2":{"46":9,"48":3,"52":2,"54":2,"55":3,"56":2,"69":1,"83":1,"91":9,"97":1,"100":1,"110":1,"151":3,"157":1}}],["determines",{"2":{"39":1,"46":2,"55":1,"91":10}}],["determinant",{"2":{"6":1,"42":1}}],["det",{"2":{"0":1,"6":2,"42":4}}],["dig",{"2":{"129":1}}],["dirname",{"2":{"149":4}}],["dirty",{"2":{"148":1}}],["dir",{"2":{"121":22}}],["directive",{"2":{"129":1}}],["direction",{"2":{"6":1,"46":1,"63":5,"121":4}}],["directly",{"2":{"6":1,"22":1,"121":1,"145":1}}],["didn",{"2":{"57":1,"91":1,"126":1}}],["division",{"2":{"41":1}}],["div",{"2":{"6":1}}],["div>",{"2":{"6":1}}],["ditance",{"2":{"4":1,"6":1,"60":1}}],["dimensional",{"2":{"5":1,"6":1,"38":1,"42":1}}],["dimensions",{"2":{"3":1,"6":1,"97":2}}],["dimension",{"2":{"1":1,"3":4,"6":4,"80":2,"96":1,"97":4,"141":1}}],["distributed",{"2":{"158":2}}],["distinct",{"2":{"121":1}}],["dist",{"2":{"60":19,"91":2,"145":8,"151":40}}],["distance`",{"2":{"145":3,"146":1}}],["distances",{"2":{"59":1,"145":1,"150":5}}],["distance",{"0":{"58":2,"59":2},"1":{"59":2,"60":2},"2":{"0":4,"4":26,"6":46,"33":1,"42":13,"48":3,"58":2,"59":17,"60":92,"91":1,"122":1,"143":1,"144":5,"145":13,"146":14,"149":1,"150":3,"151":4,"152":1,"160":2}}],["disagree",{"2":{"39":1}}],["discussion",{"2":{"17":1,"51":1}}],["disparate",{"2":{"17":1}}],["dispatches",{"2":{"6":1,"36":1,"39":1,"42":1,"45":1,"48":1,"60":1,"63":1,"69":1,"83":1,"97":1,"100":1,"110":1}}],["dispatch",{"2":{"4":1,"6":4,"22":1,"32":1,"42":1,"63":1,"124":1,"126":1,"129":2}}],["display",{"2":{"13":1,"41":1}}],["disjoint",{"0":{"81":1,"82":1,"85":1,"86":1,"87":1,"88":1,"89":1},"1":{"82":1,"83":1},"2":{"0":2,"3":5,"6":7,"31":1,"33":1,"57":2,"81":1,"82":3,"83":10,"84":6,"85":14,"86":15,"87":8,"88":4,"89":4,"90":2,"91":5,"94":3,"135":2,"136":2,"138":7,"157":1}}],["diffs",{"2":{"36":4}}],["diff",{"2":{"6":2,"36":17,"52":5,"53":3,"97":3,"138":8}}],["differ",{"2":{"4":1,"6":1,"60":1}}],["differently",{"2":{"4":3,"6":4,"36":1,"39":2,"48":1}}],["different",{"2":{"3":1,"4":4,"6":6,"28":1,"31":1,"36":1,"39":4,"46":3,"48":1,"97":3,"127":1,"129":1,"136":2}}],["differences",{"0":{"53":1},"2":{"151":1}}],["difference",{"0":{"52":1},"2":{"0":1,"6":7,"11":1,"31":1,"33":1,"46":3,"52":12,"53":11,"56":1,"57":3,"135":1,"138":1,"145":1}}],["diffintersectingpolygons",{"2":{"0":1,"6":1,"135":1,"138":4}}],["doi",{"2":{"52":2,"54":2,"56":2,"91":1}}],["doing",{"2":{"25":1,"30":1,"129":1}}],["dot",{"2":{"36":2,"42":1,"55":9}}],["doable",{"2":{"9":1}}],["documenter",{"2":{"124":3,"125":1,"144":2}}],["documentation",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"0":1,"41":1}}],["docstring",{"2":{"124":6,"125":2,"144":4}}],["docstrings",{"0":{"123":1},"1":{"124":1},"2":{"7":1}}],["docs",{"2":{"121":1}}],["doc",{"2":{"9":1,"10":1}}],["does",{"0":{"30":1},"2":{"7":1,"22":1,"27":1,"44":1,"65":1,"68":3,"91":1}}],["doesn",{"2":{"4":1,"6":2,"39":1,"51":1,"63":1,"145":1,"159":1}}],["download",{"2":{"149":1}}],["down",{"2":{"6":1,"19":1,"21":1,"26":1,"42":1,"129":1}}],["doublets",{"2":{"159":2}}],["double",{"2":{"152":4}}],["doubled",{"2":{"6":1,"152":1}}],["douglas",{"2":{"147":1,"149":2,"151":1}}],["douglaspeucker",{"0":{"151":1},"2":{"0":1,"6":5,"149":5,"151":6}}],["done",{"0":{"10":1},"2":{"13":1,"14":1,"91":2,"121":7,"122":1,"136":1,"157":1}}],["don",{"2":{"4":2,"6":3,"46":4,"52":1,"55":1,"57":1,"63":6,"86":1,"91":1,"99":1,"103":1,"129":3,"146":1}}],["do",{"0":{"9":1,"31":1},"2":{"1":1,"6":2,"14":1,"31":1,"33":1,"36":1,"39":2,"42":2,"45":1,"48":1,"51":1,"57":3,"60":2,"62":1,"63":1,"78":1,"86":2,"87":1,"88":2,"91":1,"121":3,"122":1,"129":9,"131":1,"132":1,"137":1,"140":2,"142":1,"145":1,"149":1,"154":2,"155":2,"158":1,"159":1}}],["ay",{"2":{"120":2}}],["azimuth",{"2":{"120":2}}],["autmoatically",{"2":{"97":1}}],["away",{"2":{"80":1,"160":1}}],["against",{"2":{"63":1,"91":2,"145":1,"149":1}}],["again",{"2":{"55":1,"129":1}}],["a`",{"2":{"53":7,"55":3,"57":2}}],["a2",{"2":{"41":4,"55":8,"97":6}}],["a1",{"2":{"41":2,"46":9,"55":9,"97":6}}],["america",{"2":{"149":1}}],["am",{"2":{"91":1}}],["ambiguity",{"2":{"60":2,"129":5}}],["amount",{"2":{"38":1,"47":1}}],["amp",{"2":{"6":1,"9":1}}],["aiming",{"2":{"22":1}}],["axes",{"2":{"121":1}}],["ax",{"2":{"13":3,"14":3,"120":2}}],["axislegend",{"2":{"144":1,"148":1}}],["axis",{"2":{"13":2,"14":1,"35":1,"38":1,"41":4,"44":1,"47":1,"59":1,"121":2,"144":1,"149":1}}],["axs",{"2":{"13":2}}],["achieve",{"2":{"136":1}}],["across",{"2":{"127":1}}],["acceptable",{"2":{"91":1}}],["according",{"2":{"131":1,"136":1,"137":1,"158":1}}],["accordingly",{"2":{"46":1}}],["account",{"2":{"52":1,"54":1}}],["accumulators",{"2":{"42":1}}],["accumulator",{"2":{"42":1}}],["accumulate",{"2":{"39":1,"45":3}}],["accumulation",{"0":{"11":1},"2":{"42":1}}],["accuratearithmetic",{"2":{"11":2}}],["accurate",{"0":{"11":1},"2":{"11":3,"144":1}}],["acos",{"2":{"36":1}}],["action",{"2":{"28":2}}],["actions",{"2":{"28":2}}],["activate",{"2":{"22":1,"144":1}}],["actual",{"2":{"10":1,"42":1,"120":1,"132":1,"141":1,"145":1}}],["actually",{"2":{"9":1,"42":4,"57":3,"91":1}}],["actuall",{"2":{"1":1,"6":1,"154":1}}],["a>",{"2":{"6":1}}],["adapted",{"2":{"52":1,"54":1,"56":1,"120":1}}],["adaptive",{"2":{"7":1,"13":3,"14":2}}],["adjacent",{"2":{"46":1,"53":1,"55":1,"57":1}}],["advance",{"2":{"45":2}}],["advised",{"2":{"6":1,"126":1}}],["administrative",{"2":{"159":1}}],["admin",{"2":{"11":1,"149":2}}],["adm0",{"2":{"11":7}}],["additionally",{"2":{"46":3,"63":1}}],["addition",{"2":{"41":1,"57":1}}],["adding",{"2":{"4":1,"6":4,"7":1,"57":2,"139":1,"143":1,"145":2,"146":1}}],["added",{"2":{"6":1,"36":1,"46":6,"48":1,"57":2,"124":1,"129":1,"138":2,"151":1}}],["add",{"2":{"3":1,"6":1,"7":2,"42":1,"46":16,"48":1,"51":4,"52":3,"54":1,"55":2,"56":2,"57":9,"80":1,"126":1,"129":1,"143":1,"145":1,"151":9,"157":1}}],["availible",{"2":{"45":1}}],["available",{"0":{"135":1},"2":{"6":3,"22":1,"33":1,"126":1,"134":3,"143":1,"144":1,"146":1,"149":1,"153":1}}],["average",{"2":{"40":3,"45":4}}],["avoid",{"2":{"5":1,"6":7,"42":1,"52":1,"54":1,"56":1,"57":1,"129":5,"146":1,"150":1,"151":1,"152":1}}],["after",{"2":{"6":8,"36":1,"46":3,"129":1,"149":2}}],["ab",{"2":{"46":3,"52":1,"54":1,"56":1}}],["ability",{"2":{"22":1,"25":1}}],["able",{"2":{"22":1,"28":1}}],["about",{"2":{"6":1,"20":1,"32":2,"42":2,"130":1}}],["above",{"2":{"4":1,"6":1,"36":1,"45":1,"46":1,"55":1,"57":1,"134":1}}],["abs",{"2":{"36":1,"39":4,"45":1,"48":2,"80":8,"97":2,"121":2,"152":1,"160":1}}],["absolute",{"2":{"4":1,"6":1,"38":1,"39":2}}],["abstractpolygon",{"2":{"129":1}}],["abstractpolygontrait",{"2":{"60":1}}],["abstractpoint",{"2":{"129":1}}],["abstractface",{"2":{"129":1}}],["abstractfloat",{"2":{"33":1,"36":1,"39":2,"46":1,"48":2,"51":1,"52":1,"54":1,"55":1,"56":1,"60":8}}],["abstractmesh",{"2":{"129":1}}],["abstractmulticurvetrait",{"2":{"75":1,"76":1,"89":1,"90":1,"106":1,"107":1,"116":1,"117":1}}],["abstractmatrix",{"2":{"6":1,"121":4}}],["abstractcurvetrait",{"2":{"36":1,"39":1,"48":1,"71":1,"74":1,"75":1,"80":1,"85":1,"89":1,"102":1,"105":1,"106":1,"112":1,"115":1,"116":1,"120":1,"149":2,"156":3}}],["abstractarrays",{"2":{"127":1}}],["abstractarray",{"2":{"6":1,"124":1,"129":6,"156":2}}],["abstract",{"2":{"6":3,"42":3,"126":1,"133":1,"134":4,"135":1,"149":3}}],["abstractvector",{"2":{"5":1,"6":1,"42":26}}],["abstractgeometrytrait`",{"2":{"134":1}}],["abstractgeometrytrait",{"2":{"6":3,"39":2,"48":1,"60":1,"76":1,"90":1,"107":1,"117":1,"124":1,"127":1,"134":4,"135":2,"156":5}}],["abstractgeometry",{"2":{"3":4,"6":4,"66":2,"79":2,"129":1}}],["abstracttrait",{"2":{"1":2,"3":2,"6":8,"51":1,"53":2,"55":4,"57":2,"97":4,"122":1,"124":2,"126":2,"129":11}}],["abstractbarycentriccoordinatemethod",{"2":{"0":1,"5":1,"6":7,"42":18}}],["attempts",{"2":{"91":1}}],["attach",{"2":{"1":2,"4":1,"6":5,"126":1}}],["atomic",{"2":{"7":1}}],["at",{"2":{"3":4,"5":1,"6":6,"9":1,"26":1,"28":1,"32":1,"36":2,"38":1,"39":1,"41":1,"42":2,"46":4,"48":2,"55":1,"57":2,"91":17,"94":2,"97":4,"99":1,"100":1,"103":3,"104":2,"105":2,"106":1,"107":1,"110":1,"116":1,"120":1,"127":1,"129":1,"144":1,"146":1,"151":1,"153":1}}],["arbitrarily",{"2":{"127":1}}],["arbitrary",{"2":{"22":1,"40":1,"122":1}}],["around",{"2":{"41":1,"42":2,"51":1,"59":1,"63":1,"149":1,"158":1}}],["argmin",{"2":{"153":1}}],["argtypes",{"2":{"142":1,"145":1}}],["args",{"2":{"13":2}}],["argumenterror",{"2":{"57":1,"129":5}}],["argument",{"2":{"4":5,"6":9,"36":1,"39":2,"45":1,"48":1,"52":1,"54":1,"56":1,"60":2,"129":2}}],["arguments",{"2":{"1":1,"3":1,"6":4,"46":1,"69":2,"83":1,"100":1,"110":1,"141":1,"145":2,"146":1}}],["arithmetic",{"2":{"11":1}}],["archgdal",{"2":{"31":1}}],["arc",{"2":{"6":1,"145":1}}],["array",{"2":{"4":1,"6":2,"39":1,"48":1,"129":7,"150":1,"153":1}}],["arrays",{"2":{"1":1,"6":1,"30":1,"129":2}}],["aren",{"2":{"4":3,"6":5,"51":1,"53":1,"55":3,"57":4,"63":3,"135":2,"138":2}}],["are",{"2":{"1":1,"3":4,"4":18,"5":2,"6":47,"9":2,"17":1,"22":2,"28":2,"30":3,"32":1,"35":1,"36":8,"38":1,"39":2,"40":6,"42":11,"44":1,"45":3,"46":27,"48":6,"51":3,"52":3,"53":14,"54":2,"55":13,"56":5,"57":9,"59":1,"60":1,"62":3,"63":26,"65":1,"69":7,"71":1,"72":3,"73":3,"74":1,"76":1,"82":1,"83":5,"85":1,"86":1,"87":1,"89":1,"90":1,"91":11,"97":7,"100":5,"102":1,"104":2,"109":1,"110":5,"112":1,"113":3,"114":3,"115":1,"117":1,"120":1,"121":2,"124":1,"126":1,"127":1,"129":4,"130":1,"131":1,"132":1,"134":1,"135":3,"136":1,"137":1,"138":2,"139":1,"144":1,"145":1,"146":1,"149":4,"151":1,"153":2,"155":1,"157":3,"158":6,"159":1,"160":1}}],["area2",{"2":{"45":4}}],["area1",{"2":{"45":4}}],["areas",{"2":{"4":2,"6":2,"39":3,"152":2}}],["area",{"0":{"37":2,"38":2},"1":{"38":2,"39":2},"2":{"0":5,"4":15,"6":25,"11":6,"33":1,"37":2,"38":9,"39":61,"43":1,"44":3,"45":49,"46":7,"47":2,"48":44,"56":2,"57":1,"97":1,"122":1,"135":2,"138":2,"149":2,"152":4}}],["ask",{"2":{"31":1}}],["aspect",{"2":{"13":1,"14":1,"35":1,"38":1,"41":2,"44":1,"47":1,"59":2,"121":2,"144":1,"149":1}}],["assemble",{"2":{"132":1}}],["assert",{"2":{"42":23,"45":1,"51":1,"53":1,"55":1,"146":1,"156":1}}],["assigned",{"2":{"46":1,"158":1}}],["assume",{"2":{"97":2,"129":3,"131":1,"138":1}}],["assumed",{"2":{"39":1,"63":1,"91":1}}],["assumes",{"2":{"6":1,"46":1,"60":1,"145":1,"153":1}}],["associativity",{"2":{"27":1}}],["associated",{"0":{"1":1},"2":{"40":2}}],["as",{"2":{"1":9,"3":18,"4":6,"5":1,"6":79,"7":1,"11":2,"13":3,"14":3,"15":3,"17":1,"25":2,"26":2,"28":1,"30":1,"31":2,"32":1,"35":2,"36":4,"38":2,"39":3,"40":4,"41":1,"42":4,"44":2,"45":1,"46":13,"47":2,"48":5,"50":3,"51":5,"52":8,"53":1,"54":7,"55":3,"56":7,"57":5,"59":3,"60":1,"62":2,"63":2,"65":2,"66":2,"68":3,"69":3,"78":2,"79":2,"80":2,"82":2,"83":3,"91":7,"93":2,"94":2,"96":2,"97":2,"99":2,"100":3,"102":1,"109":2,"110":3,"120":8,"121":2,"122":3,"124":1,"126":4,"127":2,"128":2,"129":17,"131":2,"132":2,"134":1,"135":1,"137":2,"139":1,"141":3,"143":2,"144":2,"145":3,"148":2,"149":7,"151":2,"154":3,"156":2,"157":2,"158":3,"159":2}}],["alone",{"2":{"129":1}}],["along",{"2":{"4":4,"6":5,"22":1,"46":2,"48":2,"55":3,"63":4,"91":1}}],["although",{"2":{"113":1,"114":1}}],["alternate",{"2":{"46":1}}],["alternative",{"2":{"46":1}}],["alex",{"2":{"23":1}}],["already",{"2":{"22":2,"63":1,"91":2,"151":1}}],["alg=nothing",{"2":{"149":1}}],["alg`",{"2":{"149":1}}],["alg",{"2":{"6":2,"149":19,"150":3,"151":8,"152":3,"153":7}}],["algorithms",{"2":{"6":3,"22":1,"131":1,"146":1,"147":1,"149":4,"151":1,"153":1}}],["algorithm",{"0":{"150":1,"151":1,"152":1},"2":{"6":8,"41":1,"46":2,"48":1,"51":3,"52":1,"54":1,"56":1,"91":1,"149":8,"150":1,"151":3,"152":1}}],["allocations",{"2":{"5":1,"6":1,"42":1}}],["allows",{"2":{"11":1,"19":1,"26":1,"31":1,"32":1,"69":2,"71":3,"72":3,"73":3,"74":1,"83":2,"85":3,"86":3,"87":2,"88":1,"100":1,"103":1,"104":1,"105":1,"110":3,"112":3,"113":3,"114":3,"115":1,"122":1,"157":1}}],["allowed",{"2":{"6":1,"69":3,"83":3,"91":5,"100":5,"102":1,"103":2,"110":3,"149":1}}],["allow",{"2":{"1":1,"6":1,"31":1,"69":7,"80":3,"83":7,"91":62,"100":10,"110":10,"154":1}}],["all",{"2":{"1":3,"3":2,"4":3,"6":13,"9":1,"11":7,"17":1,"22":1,"30":1,"33":2,"36":5,"39":3,"42":1,"46":12,"48":3,"52":1,"53":3,"55":3,"57":5,"59":1,"63":2,"65":1,"72":3,"73":3,"76":1,"89":1,"90":1,"91":7,"97":4,"109":1,"117":1,"120":1,"124":1,"127":2,"128":1,"129":8,"132":1,"134":1,"136":1,"139":1,"140":1,"149":1,"154":2,"155":1,"157":1}}],["always",{"2":{"1":6,"4":6,"6":9,"17":1,"38":1,"39":4,"48":2,"59":1,"60":1,"63":1,"129":1,"141":4,"157":1}}],["also",{"2":{"1":2,"6":10,"22":1,"31":1,"36":1,"39":2,"45":2,"46":3,"48":1,"52":1,"54":1,"55":1,"56":1,"59":1,"60":2,"63":3,"97":1,"126":1,"127":1,"129":1,"132":1,"135":3,"138":2,"142":1,"143":1,"144":1,"145":1,"154":1}}],["a",{"0":{"31":1},"2":{"1":13,"3":5,"4":79,"5":1,"6":176,"7":3,"9":1,"11":1,"15":2,"17":2,"19":2,"20":2,"22":5,"25":1,"26":6,"28":3,"30":3,"31":4,"32":2,"35":3,"36":22,"38":11,"39":20,"40":13,"41":4,"42":11,"44":5,"45":8,"46":239,"47":2,"48":17,"50":3,"51":4,"52":37,"53":29,"54":36,"55":43,"56":34,"57":45,"59":15,"60":27,"62":2,"63":54,"65":2,"68":1,"69":3,"71":5,"72":3,"73":2,"75":2,"76":2,"78":2,"80":1,"82":1,"83":3,"85":4,"86":3,"87":1,"89":2,"90":2,"91":50,"93":2,"94":7,"96":5,"97":20,"99":2,"100":4,"102":4,"103":2,"104":2,"105":1,"106":2,"107":2,"109":1,"110":3,"112":5,"113":2,"114":2,"116":2,"117":2,"119":1,"120":4,"121":21,"122":4,"124":2,"126":4,"127":4,"129":34,"130":6,"131":2,"132":2,"133":5,"134":5,"135":9,"136":8,"138":6,"139":2,"140":3,"141":8,"142":3,"143":5,"144":4,"145":8,"146":10,"148":3,"149":5,"152":3,"153":1,"154":2,"155":1,"156":2,"157":5,"158":8,"159":3,"160":3}}],["annotation",{"2":{"126":1}}],["angels",{"2":{"36":1}}],["angle",{"2":{"36":35,"120":1}}],["angles",{"0":{"34":1,"35":1},"1":{"35":1,"36":1},"2":{"0":2,"4":10,"6":10,"33":1,"34":1,"35":4,"36":42}}],["answers",{"2":{"22":1,"136":1}}],["answer",{"2":{"6":3,"52":1,"54":1,"56":1}}],["another",{"2":{"3":1,"6":1,"22":1,"46":2,"59":1,"65":1,"68":1,"71":1,"73":1,"74":1,"78":1,"82":1,"85":1,"86":1,"87":1,"88":1,"91":1,"93":1,"96":1,"97":1,"99":1,"102":1,"103":1,"104":1,"105":1,"109":1,"112":1,"113":1,"114":1,"115":1,"141":1}}],["anonymous",{"2":{"1":1,"6":1,"154":1}}],["an",{"2":{"1":3,"4":11,"5":1,"6":24,"9":1,"13":1,"14":1,"22":1,"26":1,"28":1,"31":2,"35":1,"36":4,"38":1,"39":2,"41":1,"42":3,"44":1,"46":10,"47":2,"48":2,"50":1,"51":1,"52":2,"53":5,"54":2,"55":6,"56":2,"57":2,"59":2,"60":5,"62":1,"63":1,"65":1,"68":2,"71":2,"78":1,"82":1,"91":13,"93":1,"96":1,"97":1,"99":1,"109":1,"112":2,"113":1,"114":1,"124":1,"127":1,"128":1,"129":8,"132":1,"139":1,"141":1,"145":1,"154":2,"156":1,"158":1}}],["anything",{"2":{"41":1}}],["anyone",{"2":{"23":1}}],["any",{"2":{"1":3,"3":1,"4":2,"6":15,"17":1,"19":1,"26":1,"32":1,"40":2,"45":1,"46":7,"48":1,"51":1,"53":1,"55":4,"57":1,"60":2,"70":2,"71":1,"74":1,"82":1,"84":2,"85":1,"86":2,"87":1,"88":2,"91":8,"97":2,"101":2,"111":2,"115":1,"122":2,"124":1,"129":2,"132":1,"133":1,"134":3,"135":4,"138":4,"141":2,"143":1,"145":1,"146":1,"151":1,"156":1,"157":2,"158":2}}],["and",{"0":{"1":1,"28":1,"30":1,"32":1,"37":1,"53":1,"55":1,"57":1,"58":1},"1":{"38":1,"39":1,"59":1,"60":1},"2":{"0":2,"1":9,"3":11,"4":18,"6":77,"7":1,"9":2,"17":2,"19":2,"20":1,"22":5,"25":4,"26":4,"28":2,"30":1,"31":2,"32":3,"33":1,"36":13,"38":1,"39":7,"40":2,"41":2,"42":20,"43":2,"44":1,"45":29,"46":58,"47":2,"48":18,"50":1,"51":4,"52":4,"53":15,"54":4,"55":20,"56":6,"57":15,"59":2,"60":13,"62":2,"63":13,"65":3,"66":2,"68":2,"69":3,"72":3,"73":4,"74":1,"78":2,"79":2,"80":1,"83":3,"86":3,"87":1,"88":1,"91":36,"93":1,"96":2,"97":3,"100":2,"104":2,"105":2,"109":3,"110":4,"112":2,"113":3,"114":3,"115":1,"120":2,"121":2,"122":8,"124":1,"126":3,"127":2,"128":3,"129":23,"130":1,"131":2,"132":1,"133":1,"134":4,"135":2,"136":1,"139":2,"140":2,"141":2,"144":1,"145":5,"146":4,"147":2,"148":1,"149":8,"151":6,"152":1,"153":1,"154":1,"157":2,"158":4,"159":2}}],["apart",{"2":{"138":1}}],["appears",{"2":{"131":1}}],["append",{"2":{"36":1,"46":5,"52":1,"53":2,"55":2,"56":1,"57":5,"138":2}}],["appropriately",{"2":{"158":1}}],["approximately",{"2":{"144":1}}],["approx",{"2":{"55":2}}],["approach",{"2":{"27":1}}],["applies",{"2":{"127":2}}],["applied",{"2":{"6":3,"28":1,"124":1,"129":2,"133":2,"134":2,"135":1}}],["application",{"2":{"1":1,"6":3,"129":1,"132":1,"134":3,"135":1,"138":2,"143":1,"146":1}}],["apply`",{"2":{"129":1}}],["applys",{"2":{"39":1,"48":1}}],["applyreduce",{"0":{"27":1},"2":{"0":2,"1":1,"6":1,"19":1,"25":1,"27":2,"36":1,"39":1,"45":2,"48":1,"60":2,"122":3,"124":1,"129":39}}],["apply",{"0":{"1":1,"19":1,"26":1,"30":1,"127":1},"1":{"27":1},"2":{"0":2,"1":4,"6":7,"19":3,"25":1,"26":5,"28":1,"30":1,"32":1,"122":5,"124":1,"126":1,"127":4,"128":1,"129":56,"134":4,"135":1,"139":1,"140":3,"141":1,"145":1,"146":1,"149":2,"154":3,"155":2}}],["april",{"0":{"7":1}}],["apis",{"2":{"25":1}}],["api",{"0":{"0":1,"42":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"0":1,"6":3,"32":1,"42":1,"145":1,"149":1}}],["slow",{"2":{"159":1}}],["slope2",{"2":{"120":2}}],["slope1",{"2":{"120":2}}],["slidergrid",{"2":{"14":1}}],["sliders",{"2":{"14":3}}],["slighly",{"2":{"4":1,"6":1,"39":1}}],["slightly",{"2":{"4":1,"6":1,"39":1}}],["sx^2",{"2":{"55":1}}],["sx",{"2":{"55":7}}],["s3",{"2":{"46":3}}],["scalefactor",{"2":{"145":3}}],["scattered",{"2":{"158":1}}],["scatter",{"2":{"44":1,"59":2,"62":2,"65":2,"68":1,"78":1,"82":2,"96":2,"109":2,"158":1}}],["schema",{"2":{"129":6}}],["scheme",{"2":{"45":1}}],["scenario",{"2":{"91":2}}],["scene",{"2":{"14":1}}],["skip",{"2":{"39":1,"153":4}}],["skygering",{"2":{"7":1}}],["square",{"2":{"60":1,"150":1,"151":1}}],["squared",{"2":{"6":2,"48":2,"60":12,"150":2,"151":7}}],["sqrt",{"2":{"36":2,"45":1,"60":3}}],["sgn",{"2":{"36":5}}],["smallest",{"2":{"36":2}}],["sym10100477",{"2":{"91":1}}],["symbol=",{"2":{"80":1}}],["sy^2",{"2":{"55":1}}],["sy",{"2":{"55":7}}],["syntax",{"2":{"22":1}}],["system",{"2":{"1":2,"141":2}}],["sf",{"2":{"22":2}}],["src",{"2":{"6":1}}],["sᵢ₋₁",{"2":{"42":25}}],["sᵢ₊₁",{"2":{"6":2,"42":41}}],["sᵢ",{"2":{"6":4,"42":46}}],["switches",{"2":{"55":1,"57":1}}],["switch",{"2":{"22":1,"46":1,"57":1}}],["switching",{"2":{"6":1,"48":1}}],["swap",{"2":{"6":1,"57":1,"60":2,"140":1}}],["swapped",{"2":{"3":1,"6":1,"66":1,"69":1,"79":1,"80":1,"94":1,"97":1}}],["swapping",{"2":{"1":1,"6":1,"129":1}}],["s2",{"2":{"6":4,"22":1,"42":6,"46":3}}],["s1",{"2":{"6":3,"42":6,"46":3}}],["saved",{"2":{"63":1}}],["save",{"2":{"36":1}}],["samples",{"2":{"13":1}}],["sample",{"2":{"13":1}}],["same",{"2":{"1":1,"3":2,"4":12,"6":24,"26":1,"36":3,"39":1,"46":15,"48":1,"51":1,"52":3,"54":1,"56":1,"57":1,"59":1,"62":2,"63":30,"91":2,"96":1,"97":8,"124":1,"127":1,"129":7,"130":1,"135":2,"137":1,"138":2,"144":1}}],["say",{"2":{"6":1,"42":1,"145":1}}],["span",{"2":{"158":1}}],["spatial",{"0":{"157":1},"1":{"158":1,"159":1,"160":1},"2":{"157":6,"158":3,"160":1}}],["spawn",{"2":{"129":5}}],["space",{"2":{"6":2,"17":1,"22":1,"36":1,"38":1,"91":1,"145":1,"146":1}}],["sp",{"2":{"91":2}}],["split",{"2":{"51":1}}],["speed",{"2":{"22":1}}],["specialized",{"2":{"17":1}}],["specify",{"2":{"6":1,"124":1,"129":1,"157":1}}],["specification",{"2":{"131":1,"134":1,"136":1,"137":1}}],["specifically",{"2":{"6":2,"42":3,"147":1,"157":1}}],["specific",{"2":{"46":1,"69":1,"83":1,"100":1,"110":1,"129":5}}],["specified",{"2":{"3":1,"6":2,"46":1,"53":2,"55":2,"57":2,"97":1,"127":1,"149":1}}],["searchsortedfirst",{"2":{"151":1}}],["seg2",{"2":{"120":2}}],["seg1",{"2":{"120":3}}],["seg",{"2":{"91":23,"94":2,"97":7}}],["segmentation",{"2":{"144":1}}],["segments",{"2":{"31":1,"33":1,"35":2,"36":1,"44":1,"45":2,"46":2,"48":1,"55":1,"91":18,"145":1,"146":3}}],["segmentization",{"2":{"143":1}}],["segmentizing",{"2":{"6":3,"144":1,"145":2,"146":1}}],["segmentized",{"2":{"144":1}}],["segmentizes",{"2":{"143":1}}],["segmentizemethod",{"2":{"6":1,"145":3,"146":2}}],["segmentize",{"0":{"143":1},"1":{"144":1,"145":1,"146":1},"2":{"0":1,"6":3,"22":1,"33":1,"122":1,"143":1,"144":5,"145":11,"146":13}}],["segment",{"2":{"4":4,"6":7,"36":1,"45":5,"48":3,"50":1,"60":2,"80":3,"91":43,"97":3,"120":2,"143":1,"145":2,"146":1}}],["separate",{"2":{"126":1,"129":1,"158":1}}],["separately",{"2":{"42":1}}],["seperates",{"2":{"91":1}}],["seperate",{"2":{"46":1}}],["sense",{"2":{"39":1,"60":1}}],["several",{"2":{"28":2,"39":1,"130":1,"138":1}}],["section",{"2":{"91":3,"96":1}}],["sections",{"2":{"10":1}}],["seconds=1",{"2":{"145":3,"149":8}}],["secondary",{"2":{"3":3,"6":3,"66":1,"69":1,"110":1}}],["second",{"2":{"3":8,"6":9,"46":1,"55":3,"63":1,"65":2,"66":1,"68":1,"69":1,"72":1,"73":1,"74":1,"79":2,"83":2,"91":3,"100":1,"109":1,"110":1,"113":1,"114":1,"115":2,"157":1}}],["self",{"2":{"9":2}}],["selection",{"2":{"14":1}}],["select",{"2":{"6":1,"126":1}}],["seem",{"2":{"17":1}}],["see",{"2":{"6":3,"7":1,"19":1,"44":1,"60":1,"62":1,"65":1,"68":1,"82":1,"91":5,"93":1,"96":1,"99":1,"109":1,"121":2,"131":1,"132":1,"134":1,"135":3,"137":1,"138":2,"144":2,"158":2}}],["serve",{"2":{"6":1,"42":1}}],["setup=",{"2":{"69":1,"83":1,"100":1,"110":1}}],["sets",{"2":{"46":1}}],["setting",{"2":{"31":1}}],["set",{"0":{"31":1},"2":{"3":2,"4":7,"6":19,"31":1,"36":1,"40":2,"42":8,"46":3,"52":2,"54":2,"56":2,"62":2,"63":10,"69":1,"80":1,"83":1,"91":2,"97":1,"100":1,"110":1,"120":1,"121":1,"135":2,"138":2,"151":2,"158":3}}],["sve",{"2":{"1":1,"6":1,"154":1}}],["svector",{"2":{"1":14,"6":14,"46":5,"52":1,"57":6,"154":13}}],["solution",{"2":{"91":1}}],["solid",{"2":{"6":1}}],["south",{"2":{"48":7}}],["sources",{"2":{"22":1}}],["source",{"2":{"1":10,"3":19,"4":22,"5":3,"6":88,"80":2,"124":3,"134":1,"135":4,"141":3}}],["sort",{"2":{"46":4,"51":2,"55":1,"56":2,"91":1,"97":2,"151":1}}],["sorted",{"2":{"28":1,"46":1,"151":5,"157":1}}],["something",{"2":{"10":1}}],["some",{"2":{"3":1,"6":3,"9":1,"21":1,"25":1,"42":4,"63":1,"91":3,"97":1,"122":2,"127":2,"129":2,"133":1,"134":2,"135":1,"153":1,"157":1,"160":1}}],["so",{"2":{"1":1,"4":4,"6":9,"9":1,"17":1,"25":1,"27":1,"33":1,"41":1,"42":1,"46":1,"47":1,"56":2,"57":2,"59":1,"60":1,"62":1,"63":4,"65":1,"82":1,"91":2,"93":1,"109":1,"124":1,"129":7,"143":1,"144":1,"145":3,"146":1,"153":1,"154":1}}],["step",{"2":{"46":7,"52":1,"53":3,"54":1,"55":3,"56":1,"57":3,"156":1}}],["stored",{"2":{"46":2,"158":1}}],["stores",{"2":{"46":1}}],["store",{"2":{"42":1}}],["stopping",{"2":{"151":2}}],["stops",{"2":{"127":1}}],["stop",{"2":{"26":2,"80":3,"91":4,"97":3}}],["stuff",{"2":{"23":1}}],["style",{"2":{"6":1}}],["style=",{"2":{"6":1}}],["standardized",{"2":{"91":1}}],["standards",{"2":{"91":1}}],["stay",{"2":{"57":1}}],["stackoverflow",{"2":{"55":1}}],["stack",{"2":{"51":1}}],["states",{"2":{"149":1}}],["state",{"2":{"56":1,"159":9}}],["statement",{"0":{"22":1}}],["status",{"2":{"46":25,"53":4,"55":5,"57":4}}],["statistics",{"2":{"13":2,"33":1}}],["staticarray",{"2":{"42":1}}],["staticarrays",{"2":{"33":1,"46":5,"52":1,"57":6,"154":2}}],["staticarraysco",{"2":{"1":1,"6":1,"154":1}}],["staticarrayscore",{"2":{"1":10,"6":10,"42":1,"154":10}}],["statica",{"2":{"1":1,"6":1,"154":1}}],["stability",{"2":{"20":1,"31":1}}],["stable",{"2":{"13":1,"32":1,"146":1}}],["stage",{"2":{"7":1}}],["started",{"2":{"46":1}}],["starting",{"2":{"45":2,"46":2,"48":1,"138":4}}],["startvalue",{"2":{"14":4}}],["start",{"2":{"6":1,"26":1,"36":7,"42":1,"46":67,"48":17,"53":4,"55":5,"57":5,"63":1,"80":4,"91":44,"97":3,"112":1,"130":1,"151":13}}],["structs",{"2":{"28":1,"134":1}}],["structures",{"2":{"122":1}}],["structure",{"2":{"6":2,"124":1,"129":1,"140":1}}],["struct",{"2":{"6":1,"42":2,"46":2,"126":4,"132":1,"138":2,"145":2,"150":1,"151":1,"152":1}}],["strings",{"2":{"6":1,"45":1,"55":1}}],["string",{"2":{"1":2,"14":1,"44":1,"45":1,"141":2}}],["still",{"2":{"0":1,"39":1,"45":1,"46":3,"68":1}}],["suite",{"2":{"145":5,"149":13}}],["suggestion",{"2":{"142":1}}],["surrounds",{"2":{"91":1}}],["sure",{"2":{"9":1,"36":1,"46":2,"60":1,"97":1,"153":1}}],["suppose",{"2":{"159":1,"160":1}}],["support",{"2":{"143":1,"160":1}}],["supports",{"2":{"41":1,"42":1,"160":2}}],["supported",{"2":{"31":1}}],["supertype",{"2":{"6":1,"42":1}}],["sun",{"2":{"24":1,"91":1}}],["sukumar",{"2":{"6":1,"42":1}}],["summation",{"2":{"91":2}}],["sum=1",{"2":{"42":1}}],["sum",{"2":{"4":2,"6":3,"11":6,"38":1,"39":2,"40":2,"42":8,"48":1,"60":2,"120":4,"153":1,"156":4}}],["sublevel",{"2":{"159":1}}],["subgeom1",{"2":{"129":2}}],["subgeom",{"2":{"129":3}}],["subject",{"2":{"46":1}}],["subtype",{"2":{"129":1}}],["subtypes",{"2":{"6":2,"42":2}}],["subtracted",{"2":{"120":1}}],["subtitle",{"2":{"13":1,"41":2,"145":1,"149":2}}],["sub",{"2":{"4":6,"6":7,"36":1,"39":3,"48":1,"53":6,"55":3,"57":4,"60":2,"75":2,"76":2,"89":2,"90":2,"106":2,"107":2,"116":2,"117":2,"129":3,"136":4,"137":2,"138":4}}],["substituted",{"2":{"1":1,"6":1,"129":1}}],["such",{"2":{"1":1,"4":1,"6":2,"38":1,"50":1,"127":1,"129":1,"139":1}}],["shewchuck",{"2":{"7":1}}],["short",{"2":{"129":1}}],["show",{"2":{"9":1,"11":1,"13":1,"14":1,"22":1,"41":1,"157":2}}],["shoelace",{"2":{"4":1,"6":1,"39":2,"48":1}}],["shouldn",{"2":{"55":1}}],["should",{"2":{"1":1,"4":1,"6":13,"17":1,"25":1,"26":1,"28":2,"36":3,"39":1,"45":1,"46":3,"47":1,"63":1,"91":4,"124":1,"129":2,"131":1,"134":4,"135":2,"146":1,"149":2}}],["sharing",{"2":{"82":1}}],["share",{"2":{"4":7,"6":8,"62":2,"63":8,"86":2,"87":1,"88":1,"97":1,"105":1}}],["shared",{"0":{"153":1},"2":{"3":1,"6":1,"46":3,"97":3}}],["shapes",{"2":{"60":1}}],["shape",{"2":{"44":1,"62":1,"137":1}}],["shaped",{"2":{"41":1}}],["shapely",{"2":{"22":1}}],["shapefile",{"2":{"19":1}}],["shallower",{"2":{"1":1,"6":1,"129":1}}],["sites",{"2":{"159":1}}],["sides",{"2":{"46":1,"131":1}}],["side",{"2":{"36":4,"46":20}}],["signals",{"2":{"128":1}}],["significantly",{"2":{"22":1}}],["sign",{"2":{"13":2,"14":2,"36":7,"39":2,"120":3}}],["signed",{"0":{"37":1,"38":1,"58":1,"59":1},"1":{"38":1,"39":1,"59":1,"60":1},"2":{"0":4,"4":15,"6":18,"11":3,"37":1,"38":5,"39":23,"46":7,"48":3,"58":1,"59":7,"60":19}}],["six",{"2":{"6":1,"149":1}}],["sizehint",{"2":{"46":2,"53":1,"146":1}}],["size",{"2":{"6":4,"13":2,"14":5,"41":1,"57":1,"121":3,"129":4,"149":1}}],["singed",{"2":{"60":1}}],["singlepoly",{"2":{"149":6}}],["single",{"2":{"4":6,"6":8,"31":1,"36":2,"39":1,"48":1,"63":5,"96":2,"135":2,"136":1,"138":2}}],["since",{"2":{"1":1,"36":1,"39":1,"45":1,"48":2,"56":1,"60":1,"63":1,"91":1,"97":2,"104":1,"126":1,"141":1,"159":1}}],["simulation",{"2":{"31":1}}],["simultaneously",{"2":{"28":1}}],["simplication",{"2":{"149":1}}],["simplifier",{"2":{"149":4}}],["simplified",{"2":{"31":1,"148":1}}],["simplifies",{"2":{"6":3,"150":1,"151":1,"152":1}}],["simplification",{"0":{"147":1},"1":{"148":1,"149":1},"2":{"6":2,"149":2}}],["simplifying",{"2":{"147":1}}],["simplify",{"0":{"150":1,"151":1,"152":1},"2":{"0":1,"6":15,"9":1,"33":1,"46":1,"122":1,"148":1,"149":39,"150":1,"151":2,"152":1}}],["simplifyalgs",{"2":{"153":1}}],["simplifyalg",{"2":{"0":1,"6":8,"149":5,"150":2,"151":2,"152":2}}],["simply",{"2":{"7":1,"38":1,"46":1,"55":1,"57":1,"66":1,"79":1,"94":1,"133":1,"141":1,"142":1,"145":1}}],["simple",{"0":{"158":1},"2":{"6":2,"42":1,"122":3,"126":1,"140":1,"141":1,"148":2,"149":2}}],["similarly",{"2":{"122":1}}],["similar",{"2":{"1":1,"6":3,"17":1,"19":1,"26":1,"129":1,"145":2,"146":1,"155":1}}],["s",{"0":{"20":1},"2":{"0":1,"6":7,"7":1,"9":1,"19":1,"22":5,"23":1,"26":1,"27":1,"36":1,"38":1,"39":4,"40":1,"41":2,"42":5,"44":3,"45":3,"46":3,"48":1,"50":1,"53":1,"55":19,"57":3,"60":1,"63":1,"78":2,"85":3,"86":4,"87":2,"91":9,"97":1,"105":1,"121":5,"122":2,"124":3,"125":1,"126":2,"129":1,"132":1,"135":4,"136":1,"138":3,"144":4,"145":1,"149":2,"153":4,"160":2}}],["fc",{"2":{"129":22,"149":3,"156":14}}],["fji",{"2":{"121":6}}],["f2",{"2":{"46":2}}],["f1",{"2":{"46":2}}],["f64",{"2":{"13":2,"14":2}}],["few",{"2":{"131":1}}],["fetch",{"2":{"129":2}}],["feb",{"0":{"8":1},"1":{"9":1,"10":1}}],["featured",{"2":{"22":1}}],["featurecollection",{"2":{"11":1,"26":1,"129":7}}],["featurecollectiontrait",{"2":{"1":1,"6":2,"124":1,"127":1,"129":14,"156":5}}],["features",{"0":{"70":1,"84":1,"101":1,"111":1},"2":{"1":1,"6":1,"11":1,"30":1,"128":1,"129":19}}],["featuretrait",{"2":{"1":2,"6":3,"70":4,"80":2,"84":4,"101":4,"111":4,"124":1,"127":3,"129":15,"156":5}}],["feature",{"2":{"1":4,"4":1,"6":8,"26":2,"30":1,"39":1,"48":1,"122":1,"128":1,"129":47,"149":2,"156":2}}],["fra",{"2":{"159":2}}],["framework",{"2":{"122":4}}],["fracs",{"2":{"46":13,"51":1}}],["frac",{"2":{"42":1,"46":2,"149":2}}],["fractional",{"2":{"55":1}}],["fractions",{"2":{"46":1,"55":2}}],["fraction",{"2":{"6":4,"55":2,"60":1,"149":1}}],["front",{"2":{"36":1}}],["from",{"2":{"1":3,"3":4,"4":16,"6":29,"7":1,"11":1,"22":1,"28":1,"30":1,"33":1,"39":2,"41":1,"42":4,"45":1,"46":5,"48":11,"51":1,"52":1,"53":3,"54":1,"55":4,"56":1,"57":6,"60":25,"83":2,"85":5,"86":4,"87":2,"88":1,"89":2,"91":6,"97":2,"120":2,"121":10,"124":3,"129":3,"138":1,"141":4,"143":1,"149":1,"150":1,"151":3,"152":1,"156":1,"157":1,"158":1,"160":1}}],["foldable",{"2":{"129":3}}],["follows",{"2":{"46":2,"69":1,"83":1,"100":1,"110":1,"121":1}}],["follow",{"2":{"21":1}}],["following",{"2":{"6":1,"42":1,"50":1,"131":1,"137":1,"149":1,"157":1}}],["foster",{"2":{"24":1}}],["focusing",{"2":{"17":1}}],["foundational",{"2":{"25":1}}],["found",{"2":{"6":8,"48":1,"51":1,"52":2,"54":2,"55":2,"56":2,"63":1,"127":3,"129":7,"146":1}}],["forward",{"2":{"55":1}}],["forwards",{"2":{"46":1,"53":1,"57":1}}],["format",{"2":{"51":1}}],["form",{"2":{"26":1,"46":2,"57":3,"129":1}}],["formed",{"2":{"4":2,"6":3,"35":1,"36":4,"42":1,"46":5,"56":1,"57":1,"151":1}}],["formula",{"2":{"4":1,"6":1,"39":2,"48":1}}],["force",{"2":{"1":1,"129":1,"141":1,"149":1}}],["for",{"0":{"53":1,"55":1,"57":1},"2":{"0":2,"1":3,"3":1,"4":4,"5":3,"6":39,"7":4,"9":2,"13":5,"14":1,"17":3,"19":1,"22":3,"26":1,"28":1,"30":1,"31":5,"33":1,"36":5,"39":8,"40":1,"41":1,"42":19,"45":7,"46":33,"48":11,"51":5,"52":3,"53":3,"54":2,"55":6,"56":2,"57":9,"59":2,"60":7,"63":13,"69":3,"75":1,"76":1,"78":1,"80":6,"83":2,"89":1,"90":1,"91":21,"94":2,"96":1,"97":9,"100":2,"106":1,"107":1,"110":3,"116":1,"117":1,"119":1,"120":5,"121":3,"122":3,"124":6,"125":2,"126":3,"129":6,"130":3,"131":2,"133":1,"134":5,"136":3,"137":1,"138":5,"139":1,"141":3,"143":4,"144":7,"145":6,"146":8,"147":3,"149":12,"150":2,"151":2,"152":1,"153":6,"156":7,"157":1,"159":2,"160":1}}],["fill",{"2":{"46":1,"146":3}}],["filled",{"2":{"46":5,"48":3,"59":1,"60":2,"91":16}}],["file",{"2":{"46":1,"69":3,"83":3,"100":3,"110":3,"121":1,"122":1,"133":1,"141":1,"146":1,"147":1}}],["filters",{"2":{"46":1}}],["filtering",{"2":{"6":1,"149":1}}],["filter",{"2":{"4":1,"6":2,"46":2,"121":2,"129":3,"138":2,"139":1,"149":1}}],["fine",{"2":{"144":1}}],["final",{"2":{"57":1,"134":4,"145":1}}],["finally",{"2":{"41":2,"55":1,"121":1,"129":3}}],["findmin",{"2":{"153":1}}],["findmax",{"2":{"149":1,"151":1}}],["findall",{"2":{"121":1,"134":1}}],["findnext",{"2":{"46":1}}],["findfirst",{"2":{"46":3,"51":2,"149":1}}],["finds",{"2":{"46":1,"48":1,"121":1}}],["find",{"2":{"36":6,"39":1,"46":5,"48":3,"51":2,"52":4,"54":2,"56":1,"60":3,"63":1,"91":7,"151":5,"159":1}}],["finish",{"2":{"9":1}}],["fit",{"2":{"25":1}}],["field",{"2":{"13":2,"46":2}}],["figure",{"2":{"13":1,"14":1,"38":1,"41":2}}],["fig",{"2":{"13":6,"14":6}}],["fix1",{"2":{"129":2,"146":1}}],["fixme",{"2":{"120":1}}],["fix2",{"2":{"46":2}}],["fixes",{"2":{"22":1}}],["fixed",{"2":{"6":3,"52":1,"54":1,"56":1}}],["fix",{"0":{"28":1},"2":{"6":9,"9":3,"15":3,"22":1,"25":1,"28":1,"52":1,"53":10,"54":1,"55":11,"56":1,"57":10,"131":1,"133":1,"134":1,"137":1}}],["first",{"2":{"3":9,"6":10,"36":14,"39":7,"41":1,"42":9,"45":1,"46":15,"48":2,"51":1,"52":2,"54":1,"55":4,"56":3,"60":8,"63":4,"65":2,"66":2,"68":1,"69":2,"72":1,"73":1,"74":1,"79":2,"83":3,"91":23,"97":1,"100":2,"102":1,"109":1,"110":2,"113":1,"114":1,"115":2,"120":1,"121":1,"129":6,"131":1,"146":3,"150":1,"151":2,"156":2,"157":1,"158":1}}],["fair",{"2":{"144":1}}],["fail",{"2":{"1":1,"6":2,"129":6,"145":1}}],["fallback",{"2":{"129":1}}],["falses",{"2":{"46":2,"51":1,"52":1,"54":1}}],["false",{"0":{"32":1},"2":{"1":29,"3":7,"4":3,"6":53,"36":2,"39":1,"41":5,"46":22,"48":4,"51":1,"52":1,"53":3,"55":1,"56":4,"60":2,"62":2,"63":27,"65":2,"69":7,"71":2,"72":4,"73":1,"74":1,"75":1,"76":1,"78":2,"80":10,"83":8,"85":1,"86":4,"89":1,"90":1,"91":35,"94":2,"97":18,"100":7,"102":3,"103":4,"104":1,"106":1,"107":1,"109":1,"110":6,"112":2,"113":4,"114":1,"115":1,"116":1,"117":1,"120":11,"121":10,"126":2,"129":18,"131":16,"137":44,"138":4,"146":2,"149":1,"153":2,"154":20,"156":2,"157":1}}],["fashion",{"2":{"38":1}}],["faster",{"2":{"42":1,"129":1}}],["fast",{"2":{"12":1}}],["fancis",{"2":{"6":1,"42":1}}],["f",{"2":{"1":11,"6":15,"15":1,"26":3,"27":1,"30":2,"35":1,"38":2,"41":4,"44":2,"46":17,"47":2,"50":2,"52":2,"53":2,"54":2,"55":2,"56":2,"57":2,"59":5,"62":2,"65":2,"68":2,"78":2,"82":2,"91":3,"93":2,"96":2,"99":2,"109":2,"121":5,"124":2,"127":2,"129":168,"142":1,"144":2,"145":1,"148":2,"149":1,"153":6,"154":6,"156":16,"158":3}}],["fulfilled",{"2":{"151":1}}],["fully",{"2":{"6":1,"46":4,"51":1,"97":4}}],["full",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"0":1,"22":1,"48":5,"134":1,"159":4}}],["further",{"2":{"44":1,"129":1}}],["furthermore",{"2":{"3":2,"6":5,"46":1,"52":1,"54":1,"56":1,"69":1,"110":1}}],["future",{"2":{"31":1,"60":1,"143":2}}],["func",{"2":{"13":5}}],["funcs",{"2":{"13":2,"14":3}}],["functionalities",{"2":{"46":1}}],["functionality",{"2":{"22":4,"122":1,"140":1,"141":1,"146":1}}],["functionally",{"2":{"1":1,"6":1,"19":1,"26":1,"129":1}}],["function",{"2":{"1":8,"3":9,"4":9,"5":3,"6":8,"7":2,"9":1,"13":3,"14":2,"19":1,"22":1,"26":2,"33":1,"36":5,"39":3,"42":13,"45":6,"46":16,"48":7,"50":2,"51":4,"52":3,"53":3,"54":2,"55":4,"56":2,"57":4,"60":6,"62":1,"63":8,"65":1,"68":1,"69":1,"75":1,"76":1,"78":1,"80":5,"82":1,"83":1,"89":1,"90":1,"91":3,"93":1,"94":1,"96":1,"97":6,"99":1,"100":1,"106":1,"107":1,"109":1,"110":1,"116":1,"117":1,"120":4,"121":11,"124":3,"127":2,"129":31,"132":2,"134":7,"135":2,"138":2,"140":2,"141":1,"143":2,"145":2,"146":7,"149":3,"150":2,"151":3,"152":2,"153":7,"154":3,"155":1,"156":12,"157":1,"160":4}}],["functions",{"0":{"1":1,"53":1,"55":1,"57":1,"122":1,"124":1,"156":1},"1":{"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1},"2":{"6":1,"9":3,"19":1,"25":1,"39":1,"42":1,"45":1,"46":2,"48":1,"50":1,"91":1,"122":2,"127":1,"134":2,"135":1}}],["flags",{"2":{"46":5}}],["flag",{"2":{"46":12,"51":1}}],["flat",{"2":{"6":1,"153":2,"156":1}}],["flattened",{"2":{"26":1}}],["flattening",{"2":{"6":4,"145":2}}],["flatten",{"2":{"0":2,"6":4,"11":3,"13":1,"26":1,"42":1,"46":2,"48":3,"54":1,"57":1,"80":1,"124":4,"129":27,"138":1}}],["floes",{"2":{"23":1}}],["float",{"2":{"6":3,"22":1,"52":1,"54":1,"56":1}}],["float64x2",{"2":{"13":6,"14":6,"15":2}}],["float64",{"2":{"1":6,"4":10,"6":28,"13":1,"35":1,"36":3,"39":6,"45":1,"48":4,"51":2,"52":2,"54":1,"55":1,"56":1,"60":12,"91":4,"94":1,"97":1,"120":4,"121":1,"131":6,"137":26,"144":2,"145":2,"146":1,"150":4,"151":9,"152":2,"153":6,"154":6,"155":1,"156":8}}],["flexijoins",{"2":{"157":1,"158":3,"159":1,"160":5}}],["flexibility",{"2":{"22":1}}],["fleshed",{"2":{"22":1}}],["flipping",{"0":{"140":1},"2":{"140":1}}],["flipped",{"2":{"1":2,"6":2,"129":2}}],["flipaxis",{"2":{"41":1}}],["flip",{"2":{"0":1,"6":1,"33":1,"122":2,"129":1,"140":2}}],["wₜₒₜ",{"2":{"42":8}}],["wᵢ",{"2":{"42":18}}],["wt",{"2":{"42":3}}],["wglmakie",{"2":{"14":1}}],["w",{"2":{"13":13,"14":7,"60":4}}],["wrong",{"2":{"136":1,"153":1}}],["written",{"2":{"22":1,"63":1}}],["write",{"2":{"7":1,"20":1}}],["wrap",{"2":{"4":1,"6":1,"139":1,"145":1}}],["wrapped",{"2":{"30":1,"121":1,"127":1,"129":1}}],["wrapper",{"0":{"20":1},"2":{"20":1,"36":1,"39":1,"45":1,"48":1,"60":1,"63":1,"69":1,"83":1,"97":1,"100":1,"110":1}}],["wrappers`",{"2":{"129":1}}],["wrappers",{"2":{"1":10,"6":12,"30":1,"120":2,"124":1,"131":8,"132":1,"137":22,"144":1,"145":1,"149":1,"154":10,"156":1}}],["wrappergeometry`",{"2":{"141":1}}],["wrappergeometry",{"2":{"1":1}}],["wrapping",{"2":{"1":1,"6":1,"63":1,"141":1,"155":1}}],["west",{"2":{"48":8}}],["were",{"2":{"46":1,"55":1,"158":1}}],["well",{"2":{"25":1,"48":1,"121":1,"126":1,"143":1}}],["welcome",{"2":{"17":1}}],["we",{"2":{"7":1,"11":1,"13":1,"17":2,"21":1,"22":2,"25":3,"27":1,"31":3,"32":1,"36":1,"38":2,"39":2,"41":4,"42":8,"45":1,"46":5,"48":4,"53":8,"54":2,"55":2,"57":1,"60":1,"62":1,"63":5,"65":1,"66":1,"68":1,"69":1,"79":1,"82":1,"83":1,"91":2,"93":3,"94":1,"96":1,"97":2,"99":1,"100":1,"109":1,"110":1,"121":3,"126":3,"127":1,"129":20,"130":1,"142":1,"143":2,"144":2,"145":3,"146":1,"149":5,"153":2,"157":3,"158":7}}],["weighting",{"2":{"44":2,"45":1}}],["weights",{"2":{"40":4}}],["weight",{"2":{"6":5,"42":14,"45":1}}],["weighted",{"2":{"0":1,"6":2,"40":3,"42":4,"45":4}}],["walk",{"2":{"51":1}}],["wall2",{"2":{"48":7}}],["wall1",{"2":{"48":12}}],["walls",{"2":{"48":3}}],["wall",{"2":{"48":69}}],["wachspress",{"2":{"42":1}}],["ways",{"2":{"136":1}}],["way",{"2":{"19":1,"25":1,"26":1,"32":1,"40":1,"122":1,"133":1,"146":1}}],["wanted",{"2":{"160":1}}],["wants",{"2":{"129":1}}],["want",{"0":{"31":1},"2":{"13":1,"26":1,"31":1,"42":1,"120":1,"159":1,"160":1}}],["was",{"2":{"6":1,"33":1,"36":1,"39":1,"41":1,"42":4,"45":1,"46":1,"48":1,"51":1,"52":1,"53":3,"54":1,"55":3,"56":1,"57":3,"60":1,"63":1,"66":1,"76":1,"79":1,"80":1,"90":1,"91":1,"94":1,"97":1,"107":1,"117":1,"120":1,"121":1,"127":1,"129":1,"132":1,"135":1,"138":1,"139":1,"140":1,"142":1,"144":1,"146":1,"153":1,"154":1,"155":1,"156":1}}],["warning",{"2":{"0":1,"5":1,"6":2,"32":1,"42":1,"129":1,"145":1,"159":1}}],["won",{"2":{"31":1,"129":1}}],["would",{"2":{"6":3,"31":1,"52":1,"54":1,"56":1,"121":1,"126":2,"159":1,"160":1}}],["world",{"0":{"159":1},"2":{"157":1}}],["worrying",{"2":{"32":1}}],["words",{"2":{"3":1,"6":1,"65":1,"93":1,"99":1,"100":1}}],["works",{"2":{"141":1,"143":1}}],["worked",{"2":{"121":1}}],["workflow",{"2":{"80":1,"97":1}}],["workflows",{"2":{"17":1,"22":1,"31":1}}],["working",{"2":{"3":1,"6":1,"80":1}}],["work",{"2":{"1":3,"6":3,"9":1,"36":1,"39":2,"45":1,"48":2,"51":2,"60":1,"63":1,"97":1,"120":1,"129":2,"141":1,"154":1,"159":1}}],["whole",{"2":{"91":1}}],["whose",{"2":{"3":1,"6":1,"80":1}}],["white",{"2":{"41":1}}],["while",{"2":{"36":1,"44":1,"45":1,"46":5,"55":2,"59":1,"63":1,"80":1,"91":1,"121":3,"138":1,"151":1,"153":2,"158":1}}],["whichever",{"2":{"6":1,"149":1}}],["which",{"2":{"1":1,"4":2,"5":1,"6":6,"7":1,"11":1,"13":1,"14":1,"22":2,"25":1,"26":4,"28":1,"31":2,"38":1,"39":1,"40":1,"41":2,"42":5,"46":10,"48":2,"55":1,"63":2,"91":3,"121":2,"122":1,"126":1,"129":1,"130":2,"131":1,"134":1,"136":1,"137":1,"142":1,"143":1,"144":1,"145":3,"146":2,"149":1,"151":2,"154":1,"157":3,"158":6,"160":1}}],["whatever",{"2":{"30":1}}],["what",{"0":{"20":1,"30":1,"35":1,"38":2,"44":1,"47":1,"50":1,"59":2,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"127":1},"2":{"13":1,"14":1,"32":1,"44":1,"120":1,"126":1,"144":1,"159":1}}],["whyatt",{"2":{"147":1}}],["why",{"0":{"30":1,"31":1},"2":{"9":1,"20":1,"25":1,"39":1}}],["wheel",{"2":{"25":1}}],["whether",{"2":{"1":4,"4":1,"6":11,"22":2,"119":1,"120":2,"126":2,"130":1}}],["when",{"2":{"1":1,"4":2,"5":1,"6":5,"26":1,"28":1,"31":2,"32":1,"39":1,"42":3,"45":1,"53":5,"55":6,"57":7,"91":1,"127":3,"129":1,"131":1,"134":1,"139":2,"149":1,"160":1}}],["wherever",{"2":{"6":1,"155":1}}],["where",{"2":{"1":2,"4":5,"6":11,"22":2,"28":1,"33":2,"36":8,"39":12,"40":2,"42":24,"45":8,"46":12,"48":8,"51":4,"52":2,"53":5,"54":3,"55":13,"56":2,"57":9,"60":25,"63":1,"91":9,"126":4,"129":52,"136":1,"141":1,"144":1,"155":1,"156":3}}],["wiki",{"2":{"91":1,"151":1}}],["wikipedia",{"2":{"91":1,"151":2}}],["widths",{"2":{"14":1}}],["width",{"2":{"6":1,"121":5}}],["wind",{"2":{"4":1,"6":2,"39":1,"63":1}}],["winding",{"2":{"4":2,"6":2,"39":3,"46":7,"63":1}}],["without",{"2":{"1":2,"6":1,"25":1,"32":1,"46":1,"82":1,"97":1,"129":3,"141":1,"154":1}}],["with",{"0":{"53":1,"55":1,"57":1,"150":1,"151":1,"152":1},"2":{"1":5,"3":5,"4":7,"6":26,"11":1,"22":1,"28":1,"30":2,"31":1,"35":1,"36":2,"39":7,"40":4,"41":1,"42":2,"45":1,"46":14,"48":6,"53":6,"54":5,"55":7,"56":1,"57":12,"59":1,"60":2,"69":1,"82":1,"86":1,"91":28,"93":1,"96":2,"97":5,"99":1,"100":1,"103":3,"104":2,"105":2,"115":1,"121":3,"122":1,"124":2,"126":1,"127":1,"129":17,"131":1,"136":1,"139":1,"141":1,"143":1,"146":2,"149":2,"152":1,"154":1,"157":1,"158":1,"159":1}}],["within",{"0":{"108":1,"109":1,"112":1,"113":1,"115":1,"116":1,"117":1},"1":{"109":1,"110":1},"2":{"0":2,"3":9,"4":3,"5":1,"6":13,"7":1,"9":1,"33":1,"36":2,"39":1,"40":3,"42":1,"45":1,"46":8,"47":2,"48":5,"53":1,"55":1,"56":1,"57":6,"59":1,"60":5,"65":2,"66":3,"68":2,"85":1,"91":9,"94":1,"96":1,"97":8,"108":1,"109":6,"110":10,"111":6,"112":13,"113":12,"114":12,"115":6,"116":4,"117":4,"122":1,"157":1,"158":4,"159":2}}],["will",{"2":{"1":7,"4":7,"5":1,"6":41,"11":1,"21":1,"26":3,"31":2,"32":1,"36":4,"39":3,"42":2,"45":1,"46":4,"48":1,"51":1,"52":4,"53":4,"54":4,"55":3,"56":4,"57":4,"59":2,"60":4,"63":1,"80":1,"120":1,"124":2,"127":1,"128":2,"129":7,"131":1,"135":2,"136":1,"138":2,"141":3,"143":2,"145":3,"149":2,"151":1,"153":1,"154":2,"157":2,"159":1,"160":1}}],["wip",{"2":{"0":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/previews/PR132/assets/chunks/VPLocalSearchBox.46pBDUiV.js b/previews/PR132/assets/chunks/VPLocalSearchBox.CMLVlh7q.js similarity index 99% rename from previews/PR132/assets/chunks/VPLocalSearchBox.46pBDUiV.js rename to previews/PR132/assets/chunks/VPLocalSearchBox.CMLVlh7q.js index 90ef7e6bd..dfd0de167 100644 --- a/previews/PR132/assets/chunks/VPLocalSearchBox.46pBDUiV.js +++ b/previews/PR132/assets/chunks/VPLocalSearchBox.CMLVlh7q.js @@ -1,4 +1,4 @@ -var Ct=Object.defineProperty;var It=(o,e,t)=>e in o?Ct(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var Oe=(o,e,t)=>(It(o,typeof e!="symbol"?e+"":e,t),t);import{X as Dt,j as oe,x as $e,ak as kt,al as Ot,d as Rt,G as xe,am as tt,h as Fe,an as _t,ao as Mt,y as Lt,ap as zt,k as Re,R as de,Q as Ee,aq as Pt,ar as Bt,Y as Vt,U as $t,as as Wt,o as ee,b as Kt,l as k,a1 as Jt,m as j,at as Ut,au as jt,av as Gt,c as re,n as rt,e as Se,E as at,F as nt,a as ve,t as pe,aw as qt,p as Qt,q as Ht,ax as it,ay as Yt,aa as Zt,ag as Xt,az as er,_ as tr}from"./framework.DwyrAfcZ.js";import{u as rr,c as ar}from"./theme.CoUy1FRt.js";const nr={root:()=>Dt(()=>import("./@localSearchIndexroot.CkrQch1A.js"),[])};/*! +var Ct=Object.defineProperty;var It=(o,e,t)=>e in o?Ct(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var Oe=(o,e,t)=>(It(o,typeof e!="symbol"?e+"":e,t),t);import{X as Dt,j as oe,x as $e,ak as kt,al as Ot,d as Rt,G as xe,am as tt,h as Fe,an as _t,ao as Mt,y as Lt,ap as zt,k as Re,R as de,Q as Ee,aq as Pt,ar as Bt,Y as Vt,U as $t,as as Wt,o as ee,b as Kt,l as k,a1 as Jt,m as j,at as Ut,au as jt,av as Gt,c as re,n as rt,e as Se,E as at,F as nt,a as ve,t as pe,aw as qt,p as Qt,q as Ht,ax as it,ay as Yt,aa as Zt,ag as Xt,az as er,_ as tr}from"./framework.DwyrAfcZ.js";import{u as rr,c as ar}from"./theme.SQGMrLbr.js";const nr={root:()=>Dt(()=>import("./@localSearchIndexroot.CI8yFp8j.js"),[])};/*! * tabbable 6.2.0 * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE */var yt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ne=yt.join(","),mt=typeof Element>"u",ue=mt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ce=!mt&&Element.prototype.getRootNode?function(o){var e;return o==null||(e=o.getRootNode)===null||e===void 0?void 0:e.call(o)}:function(o){return o==null?void 0:o.ownerDocument},Ie=function o(e,t){var r;t===void 0&&(t=!0);var n=e==null||(r=e.getAttribute)===null||r===void 0?void 0:r.call(e,"inert"),a=n===""||n==="true",i=a||t&&e&&o(e.parentNode);return i},ir=function(e){var t,r=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return r===""||r==="true"},gt=function(e,t,r){if(Ie(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ne));return t&&ue.call(e,Ne)&&n.unshift(e),n=n.filter(r),n},bt=function o(e,t,r){for(var n=[],a=Array.from(e);a.length;){var i=a.shift();if(!Ie(i,!1))if(i.tagName==="SLOT"){var s=i.assignedElements(),u=s.length?s:i.children,l=o(u,!0,r);r.flatten?n.push.apply(n,l):n.push({scopeParent:i,candidates:l})}else{var h=ue.call(i,Ne);h&&r.filter(i)&&(t||!e.includes(i))&&n.push(i);var d=i.shadowRoot||typeof r.getShadowRoot=="function"&&r.getShadowRoot(i),v=!Ie(d,!1)&&(!r.shadowRootFilter||r.shadowRootFilter(i));if(d&&v){var y=o(d===!0?i.children:d.children,!0,r);r.flatten?n.push.apply(n,y):n.push({scopeParent:i,candidates:y})}else a.unshift.apply(a,i.children)}}return n},wt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},se=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||ir(e))&&!wt(e)?0:e.tabIndex},or=function(e,t){var r=se(e);return r<0&&t&&!wt(e)?0:r},sr=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},xt=function(e){return e.tagName==="INPUT"},ur=function(e){return xt(e)&&e.type==="hidden"},lr=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(r){return r.tagName==="SUMMARY"});return t},cr=function(e,t){for(var r=0;rsummary:first-of-type"),i=a?e.parentElement:e;if(ue.call(i,"details:not([open]) *"))return!0;if(!r||r==="full"||r==="legacy-full"){if(typeof n=="function"){for(var s=e;e;){var u=e.parentElement,l=Ce(e);if(u&&!u.shadowRoot&&n(u)===!0)return ot(e);e.assignedSlot?e=e.assignedSlot:!u&&l!==e.ownerDocument?e=l.host:e=u}e=s}if(vr(e))return!e.getClientRects().length;if(r!=="legacy-full")return!0}else if(r==="non-zero-area")return ot(e);return!1},yr=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var r=0;r=0)},gr=function o(e){var t=[],r=[];return e.forEach(function(n,a){var i=!!n.scopeParent,s=i?n.scopeParent:n,u=or(s,i),l=i?o(n.candidates):s;u===0?i?t.push.apply(t,l):t.push(s):r.push({documentOrder:a,tabIndex:u,item:n,isScope:i,content:l})}),r.sort(sr).reduce(function(n,a){return a.isScope?n.push.apply(n,a.content):n.push(a.content),n},[]).concat(t)},br=function(e,t){t=t||{};var r;return t.getShadowRoot?r=bt([e],t.includeContainer,{filter:We.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:mr}):r=gt(e,t.includeContainer,We.bind(null,t)),gr(r)},wr=function(e,t){t=t||{};var r;return t.getShadowRoot?r=bt([e],t.includeContainer,{filter:De.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):r=gt(e,t.includeContainer,De.bind(null,t)),r},le=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,Ne)===!1?!1:We(t,e)},xr=yt.concat("iframe").join(","),_e=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,xr)===!1?!1:De(t,e)};/*! diff --git a/previews/PR132/assets/chunks/theme.CoUy1FRt.js b/previews/PR132/assets/chunks/theme.SQGMrLbr.js similarity index 99% rename from previews/PR132/assets/chunks/theme.CoUy1FRt.js rename to previews/PR132/assets/chunks/theme.SQGMrLbr.js index 7c75fe9ac..cbbd14de6 100644 --- a/previews/PR132/assets/chunks/theme.CoUy1FRt.js +++ b/previews/PR132/assets/chunks/theme.SQGMrLbr.js @@ -1,2 +1,2 @@ -const __vite__fileDeps=["assets/chunks/VPLocalSearchBox.46pBDUiV.js","assets/chunks/framework.DwyrAfcZ.js"],__vite__mapDeps=i=>i.map(i=>__vite__fileDeps[i]); -import{d as _,o as a,c as u,r as c,n as N,a as F,t as w,b as P,w as p,e as f,T as pe,_ as $,u as Je,i as Ye,f as Xe,g as he,h as g,j as I,k as z,l as v,m as i,p as B,q as H,s as K,v as le,x as O,y as ee,z as fe,A as Le,B as Qe,C as Ze,D as R,F as M,E,G as Te,H as te,I as b,J as W,K as we,L as se,M as Q,N as J,O as xe,P as Ie,Q as ce,R as Ne,S as Me,U as oe,V as et,W as tt,X as st,Y as Ae,Z as _e,$ as ot,a0 as nt,a1 as at,a2 as Ce,a3 as rt,a4 as it,a5 as lt}from"./framework.DwyrAfcZ.js";const ct=_({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(s){return(e,t)=>(a(),u("span",{class:N(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[F(w(e.text),1)])],2))}}),ut={key:0,class:"VPBackdrop"},dt=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(s){return(e,t)=>(a(),P(pe,{name:"fade"},{default:p(()=>[e.show?(a(),u("div",ut)):f("",!0)]),_:1}))}}),vt=$(dt,[["__scopeId","data-v-b06cdb19"]]),L=Je;function pt(s,e){let t,o=!1;return()=>{t&&clearTimeout(t),o?t=setTimeout(s,e):(s(),(o=!0)&&setTimeout(()=>o=!1,e))}}function ue(s){return/^\//.test(s)?s:`/${s}`}function me(s){const{pathname:e,search:t,hash:o,protocol:n}=new URL(s,"http://a.com");if(Ye(s)||s.startsWith("#")||!n.startsWith("http")||!Xe(e))return s;const{site:r}=L(),l=e.endsWith("/")||e.endsWith(".html")?s:s.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${o}`);return he(l)}function X({removeCurrent:s=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:o,page:n,theme:r,hash:l}=L(),d=g(()=>{var k,y;return{index:o.value,label:(k=t.value.locales[o.value])==null?void 0:k.label,link:((y=t.value.locales[o.value])==null?void 0:y.link)||(o.value==="root"?"/":`/${o.value}/`)}});return{localeLinks:g(()=>Object.entries(t.value.locales).flatMap(([k,y])=>s&&d.value.label===y.label?[]:{index:k,text:y.label,link:ht(y.link||(k==="root"?"/":`/${k}/`),r.value.i18nRouting!==!1&&e,n.value.relativePath.slice(d.value.link.length-1),!t.value.cleanUrls)+l.value})),currentLang:d}}function ht(s,e,t,o){return e?s.replace(/\/$/,"")+ue(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,o?".html":"")):s}const ft=s=>(B("data-v-ccbd20cd"),s=s(),H(),s),_t={class:"NotFound"},mt={class:"code"},bt={class:"title"},kt=ft(()=>v("div",{class:"divider"},null,-1)),$t={class:"quote"},gt={class:"action"},yt=["href","aria-label"],Pt=_({__name:"NotFound",setup(s){const{site:e}=L(),{localeLinks:t}=X({removeCurrent:!1}),o=I({link:"/",index:"root"});z(()=>{const r=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");t.value.length&&(o.value=t.value.find(({link:l})=>l.startsWith(r))||t.value[0])});const n=g(()=>{var r,l,d,h;return{code:404,title:"PAGE NOT FOUND",quote:"But if you don't change your direction, and if you keep looking, you may end up where you are heading.",linkLabel:"go to home",linkText:"Take me home",...o.value.index==="root"?(r=e.value.themeConfig)==null?void 0:r.notFound:(h=(d=(l=e.value.locales)==null?void 0:l[o.value.index])==null?void 0:d.themeConfig)==null?void 0:h.notFound}});return(r,l)=>(a(),u("div",_t,[v("p",mt,w(n.value.code),1),v("h1",bt,w(n.value.title),1),kt,v("blockquote",$t,w(n.value.quote),1),v("div",gt,[v("a",{class:"link",href:i(he)(o.value.link),"aria-label":n.value.linkLabel},w(n.value.linkText),9,yt)])]))}}),St=$(Pt,[["__scopeId","data-v-ccbd20cd"]]);function Be(s,e){if(Array.isArray(s))return Z(s);if(s==null)return[];e=ue(e);const t=Object.keys(s).sort((n,r)=>r.split("/").length-n.split("/").length).find(n=>e.startsWith(ue(n))),o=t?s[t]:[];return Array.isArray(o)?Z(o):Z(o.items,o.base)}function Vt(s){const e=[];let t=0;for(const o in s){const n=s[o];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function Lt(s){const e=[];function t(o){for(const n of o)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(s),e}function de(s,e){return Array.isArray(e)?e.some(t=>de(s,t)):K(s,e.link)?!0:e.items?de(s,e.items):!1}function Z(s,e){return[...s].map(t=>{const o={...t},n=o.base||e;return n&&o.link&&(o.link=n+o.link),o.items&&(o.items=Z(o.items,n)),o})}function U(){const{frontmatter:s,page:e,theme:t}=L(),o=le("(min-width: 960px)"),n=I(!1),r=g(()=>{const C=t.value.sidebar,T=e.value.relativePath;return C?Be(C,T):[]}),l=I(r.value);O(r,(C,T)=>{JSON.stringify(C)!==JSON.stringify(T)&&(l.value=r.value)});const d=g(()=>s.value.sidebar!==!1&&l.value.length>0&&s.value.layout!=="home"),h=g(()=>k?s.value.aside==null?t.value.aside==="left":s.value.aside==="left":!1),k=g(()=>s.value.layout==="home"?!1:s.value.aside!=null?!!s.value.aside:t.value.aside!==!1),y=g(()=>d.value&&o.value),m=g(()=>d.value?Vt(l.value):[]);function S(){n.value=!0}function V(){n.value=!1}function A(){n.value?V():S()}return{isOpen:n,sidebar:l,sidebarGroups:m,hasSidebar:d,hasAside:k,leftAside:h,isSidebarEnabled:y,open:S,close:V,toggle:A}}function Tt(s,e){let t;ee(()=>{t=s.value?document.activeElement:void 0}),z(()=>{window.addEventListener("keyup",o)}),fe(()=>{window.removeEventListener("keyup",o)});function o(n){n.key==="Escape"&&s.value&&(e(),t==null||t.focus())}}function wt(s){const{page:e,hash:t}=L(),o=I(!1),n=g(()=>s.value.collapsed!=null),r=g(()=>!!s.value.link),l=I(!1),d=()=>{l.value=K(e.value.relativePath,s.value.link)};O([e,s,t],d),z(d);const h=g(()=>l.value?!0:s.value.items?de(e.value.relativePath,s.value.items):!1),k=g(()=>!!(s.value.items&&s.value.items.length));ee(()=>{o.value=!!(n.value&&s.value.collapsed)}),Le(()=>{(l.value||h.value)&&(o.value=!1)});function y(){n.value&&(o.value=!o.value)}return{collapsed:o,collapsible:n,isLink:r,isActiveLink:l,hasActiveLink:h,hasChildren:k,toggle:y}}function It(){const{hasSidebar:s}=U(),e=le("(min-width: 960px)"),t=le("(min-width: 1280px)");return{isAsideEnabled:g(()=>!t.value&&!e.value?!1:s.value?t.value:e.value)}}const ve=[];function He(s){return typeof s.outline=="object"&&!Array.isArray(s.outline)&&s.outline.label||s.outlineTitle||"On this page"}function be(s){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const o=Number(t.tagName[1]);return{element:t,title:Nt(t),link:"#"+t.id,level:o}});return Mt(e,s)}function Nt(s){let e="";for(const t of s.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 Mt(s,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[o,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;s=s.filter(l=>l.level>=o&&l.level<=n),ve.length=0;for(const{element:l,link:d}of s)ve.push({element:l,link:d});const r=[];e:for(let l=0;l=0;h--){const k=s[h];if(k.level{requestAnimationFrame(r),window.addEventListener("scroll",o)}),Qe(()=>{l(location.hash)}),fe(()=>{window.removeEventListener("scroll",o)});function r(){if(!t.value)return;const d=window.scrollY,h=window.innerHeight,k=document.body.offsetHeight,y=Math.abs(d+h-k)<1,m=ve.map(({element:V,link:A})=>({link:A,top:Ct(V)})).filter(({top:V})=>!Number.isNaN(V)).sort((V,A)=>V.top-A.top);if(!m.length){l(null);return}if(d<1){l(null);return}if(y){l(m[m.length-1].link);return}let S=null;for(const{link:V,top:A}of m){if(A>d+Ze()+4)break;S=V}l(S)}function l(d){n&&n.classList.remove("active"),d==null?n=null:n=s.value.querySelector(`a[href="${decodeURIComponent(d)}"]`);const h=n;h?(h.classList.add("active"),e.value.style.top=h.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Ct(s){let e=0;for(;s!==document.body;){if(s===null)return NaN;e+=s.offsetTop,s=s.offsetParent}return e}const Bt=["href","title"],Ht=_({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(s){function e({target:t}){const o=t.href.split("#")[1],n=document.getElementById(decodeURIComponent(o));n==null||n.focus({preventScroll:!0})}return(t,o)=>{const n=R("VPDocOutlineItem",!0);return a(),u("ul",{class:N(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),u(M,null,E(t.headers,({children:r,link:l,title:d})=>(a(),u("li",null,[v("a",{class:"outline-link",href:l,onClick:e,title:d},w(d),9,Bt),r!=null&&r.length?(a(),P(n,{key:0,headers:r},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Ee=$(Ht,[["__scopeId","data-v-3f927ebe"]]),Et={class:"content"},Dt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Ft=_({__name:"VPDocAsideOutline",setup(s){const{frontmatter:e,theme:t}=L(),o=Te([]);te(()=>{o.value=be(e.value.outline??t.value.outline)});const n=I(),r=I();return At(n,r),(l,d)=>(a(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:N(["VPDocAsideOutline",{"has-outline":o.value.length>0}]),ref_key:"container",ref:n,role:"navigation"},[v("div",Et,[v("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),v("div",Dt,w(i(He)(i(t))),1),b(Ee,{headers:o.value,root:!0},null,8,["headers"])])],2))}}),Ot=$(Ft,[["__scopeId","data-v-b6ca177b"]]),Ut={class:"VPDocAsideCarbonAds"},jt=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(s){const e=()=>null;return(t,o)=>(a(),u("div",Ut,[b(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Gt=s=>(B("data-v-6d7b3c46"),s=s(),H(),s),zt={class:"VPDocAside"},Kt=Gt(()=>v("div",{class:"spacer"},null,-1)),Rt=_({__name:"VPDocAside",setup(s){const{theme:e}=L();return(t,o)=>(a(),u("div",zt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),b(Ot),c(t.$slots,"aside-outline-after",{},void 0,!0),Kt,c(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(a(),P(jt,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):f("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),qt=$(Rt,[["__scopeId","data-v-6d7b3c46"]]);function Wt(){const{theme:s,page:e}=L();return g(()=>{const{text:t="Edit this page",pattern:o=""}=s.value.editLink||{};let n;return typeof o=="function"?n=o(e.value):n=o.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Jt(){const{page:s,theme:e,frontmatter:t}=L();return g(()=>{var k,y,m,S,V,A,C,T;const o=Be(e.value.sidebar,s.value.relativePath),n=Lt(o),r=Yt(n,j=>j.link.replace(/[?#].*$/,"")),l=r.findIndex(j=>K(s.value.relativePath,j.link)),d=((k=e.value.docFooter)==null?void 0:k.prev)===!1&&!t.value.prev||t.value.prev===!1,h=((y=e.value.docFooter)==null?void 0:y.next)===!1&&!t.value.next||t.value.next===!1;return{prev:d?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((m=r[l-1])==null?void 0:m.docFooterText)??((S=r[l-1])==null?void 0:S.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((V=r[l-1])==null?void 0:V.link)},next:h?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=r[l+1])==null?void 0:A.docFooterText)??((C=r[l+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((T=r[l+1])==null?void 0:T.link)}}})}function Yt(s,e){const t=new Set;return s.filter(o=>{const n=e(o);return t.has(n)?!1:t.add(n)})}const D=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(s){const e=s,t=g(()=>e.tag??(e.href?"a":"span")),o=g(()=>e.href&&we.test(e.href));return(n,r)=>(a(),P(W(t.value),{class:N(["VPLink",{link:n.href,"vp-external-link-icon":o.value,"no-icon":n.noIcon}]),href:n.href?i(me)(n.href):void 0,target:n.target??(o.value?"_blank":void 0),rel:n.rel??(o.value?"noreferrer":void 0)},{default:p(()=>[c(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Xt={class:"VPLastUpdated"},Qt=["datetime"],Zt=_({__name:"VPDocFooterLastUpdated",setup(s){const{theme:e,page:t,frontmatter:o,lang:n}=L(),r=g(()=>new Date(o.value.lastUpdated??t.value.lastUpdated)),l=g(()=>r.value.toISOString()),d=I("");return z(()=>{ee(()=>{var h,k,y;d.value=new Intl.DateTimeFormat((k=(h=e.value.lastUpdated)==null?void 0:h.formatOptions)!=null&&k.forceLocale?n.value:void 0,((y=e.value.lastUpdated)==null?void 0:y.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(r.value)})}),(h,k)=>{var y;return a(),u("p",Xt,[F(w(((y=i(e).lastUpdated)==null?void 0:y.text)||i(e).lastUpdatedText||"Last updated")+": ",1),v("time",{datetime:l.value},w(d.value),9,Qt)])}}}),xt=$(Zt,[["__scopeId","data-v-9da12f1d"]]),De=s=>(B("data-v-b88cabfa"),s=s(),H(),s),es={key:0,class:"VPDocFooter"},ts={key:0,class:"edit-info"},ss={key:0,class:"edit-link"},os=De(()=>v("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),ns={key:1,class:"last-updated"},as={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},rs=De(()=>v("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),is={class:"pager"},ls=["innerHTML"],cs=["innerHTML"],us={class:"pager"},ds=["innerHTML"],vs=["innerHTML"],ps=_({__name:"VPDocFooter",setup(s){const{theme:e,page:t,frontmatter:o}=L(),n=Wt(),r=Jt(),l=g(()=>e.value.editLink&&o.value.editLink!==!1),d=g(()=>t.value.lastUpdated&&o.value.lastUpdated!==!1),h=g(()=>l.value||d.value||r.value.prev||r.value.next);return(k,y)=>{var m,S,V,A;return h.value?(a(),u("footer",es,[c(k.$slots,"doc-footer-before",{},void 0,!0),l.value||d.value?(a(),u("div",ts,[l.value?(a(),u("div",ss,[b(D,{class:"edit-link-button",href:i(n).url,"no-icon":!0},{default:p(()=>[os,F(" "+w(i(n).text),1)]),_:1},8,["href"])])):f("",!0),d.value?(a(),u("div",ns,[b(xt)])):f("",!0)])):f("",!0),(m=i(r).prev)!=null&&m.link||(S=i(r).next)!=null&&S.link?(a(),u("nav",as,[rs,v("div",is,[(V=i(r).prev)!=null&&V.link?(a(),P(D,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:p(()=>{var C;return[v("span",{class:"desc",innerHTML:((C=i(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,ls),v("span",{class:"title",innerHTML:i(r).prev.text},null,8,cs)]}),_:1},8,["href"])):f("",!0)]),v("div",us,[(A=i(r).next)!=null&&A.link?(a(),P(D,{key:0,class:"pager-link next",href:i(r).next.link},{default:p(()=>{var C;return[v("span",{class:"desc",innerHTML:((C=i(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,ds),v("span",{class:"title",innerHTML:i(r).next.text},null,8,vs)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),hs=$(ps,[["__scopeId","data-v-b88cabfa"]]),fs=s=>(B("data-v-83890dd9"),s=s(),H(),s),_s={class:"container"},ms=fs(()=>v("div",{class:"aside-curtain"},null,-1)),bs={class:"aside-container"},ks={class:"aside-content"},$s={class:"content"},gs={class:"content-container"},ys={class:"main"},Ps=_({__name:"VPDoc",setup(s){const{theme:e}=L(),t=se(),{hasSidebar:o,hasAside:n,leftAside:r}=U(),l=g(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(d,h)=>{const k=R("Content");return a(),u("div",{class:N(["VPDoc",{"has-sidebar":i(o),"has-aside":i(n)}])},[c(d.$slots,"doc-top",{},void 0,!0),v("div",_s,[i(n)?(a(),u("div",{key:0,class:N(["aside",{"left-aside":i(r)}])},[ms,v("div",bs,[v("div",ks,[b(qt,null,{"aside-top":p(()=>[c(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[c(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[c(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[c(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[c(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[c(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),v("div",$s,[v("div",gs,[c(d.$slots,"doc-before",{},void 0,!0),v("main",ys,[b(k,{class:N(["vp-doc",[l.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),b(hs,null,{"doc-footer-before":p(()=>[c(d.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(d.$slots,"doc-after",{},void 0,!0)])])]),c(d.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Ss=$(Ps,[["__scopeId","data-v-83890dd9"]]),Vs=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(s){const e=s,t=g(()=>e.href&&we.test(e.href)),o=g(()=>e.tag||e.href?"a":"button");return(n,r)=>(a(),P(W(o.value),{class:N(["VPButton",[n.size,n.theme]]),href:n.href?i(me)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:p(()=>[F(w(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),Ls=$(Vs,[["__scopeId","data-v-14206e74"]]),Ts=["src","alt"],ws=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(s){return(e,t)=>{const o=R("VPImage",!0);return e.image?(a(),u(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),u("img",Q({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(he)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Ts)):(a(),u(M,{key:1},[b(o,Q({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),b(o,Q({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),x=$(ws,[["__scopeId","data-v-35a7d0b8"]]),Is=s=>(B("data-v-955009fc"),s=s(),H(),s),Ns={class:"container"},Ms={class:"main"},As={key:0,class:"name"},Cs=["innerHTML"],Bs=["innerHTML"],Hs=["innerHTML"],Es={key:0,class:"actions"},Ds={key:0,class:"image"},Fs={class:"image-container"},Os=Is(()=>v("div",{class:"image-bg"},null,-1)),Us=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(s){const e=J("hero-image-slot-exists");return(t,o)=>(a(),u("div",{class:N(["VPHero",{"has-image":t.image||i(e)}])},[v("div",Ns,[v("div",Ms,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(a(),u("h1",As,[v("span",{innerHTML:t.name,class:"clip"},null,8,Cs)])):f("",!0),t.text?(a(),u("p",{key:1,innerHTML:t.text,class:"text"},null,8,Bs)):f("",!0),t.tagline?(a(),u("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Hs)):f("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",Es,[(a(!0),u(M,null,E(t.actions,n=>(a(),u("div",{key:n.link,class:"action"},[b(Ls,{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))])):f("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||i(e)?(a(),u("div",Ds,[v("div",Fs,[Os,c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),P(x,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),js=$(Us,[["__scopeId","data-v-955009fc"]]),Gs=_({__name:"VPHomeHero",setup(s){const{frontmatter:e}=L();return(t,o)=>i(e).hero?(a(),P(js,{key:0,class:"VPHomeHero",name:i(e).hero.name,text:i(e).hero.text,tagline:i(e).hero.tagline,image:i(e).hero.image,actions:i(e).hero.actions},{"home-hero-info-before":p(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":p(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":p(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":p(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":p(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),zs=s=>(B("data-v-f5e9645b"),s=s(),H(),s),Ks={class:"box"},Rs={key:0,class:"icon"},qs=["innerHTML"],Ws=["innerHTML"],Js=["innerHTML"],Ys={key:4,class:"link-text"},Xs={class:"link-text-value"},Qs=zs(()=>v("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),Zs=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(s){return(e,t)=>(a(),P(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:p(()=>[v("article",Ks,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",Rs,[b(x,{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(),P(x,{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,qs)):f("",!0),v("h2",{class:"title",innerHTML:e.title},null,8,Ws),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,Js)):f("",!0),e.linkText?(a(),u("div",Ys,[v("p",Xs,[F(w(e.linkText)+" ",1),Qs])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),xs=$(Zs,[["__scopeId","data-v-f5e9645b"]]),eo={key:0,class:"VPFeatures"},to={class:"container"},so={class:"items"},oo=_({__name:"VPFeatures",props:{features:{}},setup(s){const e=s,t=g(()=>{const o=e.features.length;if(o){if(o===2)return"grid-2";if(o===3)return"grid-3";if(o%3===0)return"grid-6";if(o>3)return"grid-4"}else return});return(o,n)=>o.features?(a(),u("div",eo,[v("div",to,[v("div",so,[(a(!0),u(M,null,E(o.features,r=>(a(),u("div",{key:r.title,class:N(["item",[t.value]])},[b(xs,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),no=$(oo,[["__scopeId","data-v-d0a190d7"]]),ao=_({__name:"VPHomeFeatures",setup(s){const{frontmatter:e}=L();return(t,o)=>i(e).features?(a(),P(no,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):f("",!0)}}),ro=_({__name:"VPHomeContent",setup(s){const{width:e}=xe({includeScrollbar:!1});return(t,o)=>(a(),u("div",{class:"vp-doc container",style:Ie(i(e)?{"--vp-offset":`calc(50% - ${i(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),io=$(ro,[["__scopeId","data-v-c43247eb"]]),lo={class:"VPHome"},co=_({__name:"VPHome",setup(s){const{frontmatter:e}=L();return(t,o)=>{const n=R("Content");return a(),u("div",lo,[c(t.$slots,"home-hero-before",{},void 0,!0),b(Gs,null,{"home-hero-info-before":p(()=>[c(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[c(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[c(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[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),b(ao),c(t.$slots,"home-features-after",{},void 0,!0),i(e).markdownStyles!==!1?(a(),P(io,{key:0},{default:p(()=>[b(n)]),_:1})):(a(),P(n,{key:1}))])}}}),uo=$(co,[["__scopeId","data-v-cbb6ec48"]]),vo={},po={class:"VPPage"};function ho(s,e){const t=R("Content");return a(),u("div",po,[c(s.$slots,"page-top"),b(t),c(s.$slots,"page-bottom")])}const fo=$(vo,[["render",ho]]),_o=_({__name:"VPContent",setup(s){const{page:e,frontmatter:t}=L(),{hasSidebar:o}=U();return(n,r)=>(a(),u("div",{class:N(["VPContent",{"has-sidebar":i(o),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?c(n.$slots,"not-found",{key:0},()=>[b(St)],!0):i(t).layout==="page"?(a(),P(fo,{key:1},{"page-top":p(()=>[c(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[c(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(a(),P(uo,{key:2},{"home-hero-before":p(()=>[c(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":p(()=>[c(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[c(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[c(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[c(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[c(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[c(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[c(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(a(),P(W(i(t).layout),{key:3})):(a(),P(Ss,{key:4},{"doc-top":p(()=>[c(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[c(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":p(()=>[c(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[c(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[c(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":p(()=>[c(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":p(()=>[c(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[c(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[c(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[c(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":p(()=>[c(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),mo=$(_o,[["__scopeId","data-v-91765379"]]),bo={class:"container"},ko=["innerHTML"],$o=["innerHTML"],go=_({__name:"VPFooter",setup(s){const{theme:e,frontmatter:t}=L(),{hasSidebar:o}=U();return(n,r)=>i(e).footer&&i(t).footer!==!1?(a(),u("footer",{key:0,class:N(["VPFooter",{"has-sidebar":i(o)}])},[v("div",bo,[i(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,ko)):f("",!0),i(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,$o)):f("",!0)])],2)):f("",!0)}}),yo=$(go,[["__scopeId","data-v-c970a860"]]);function Po(){const{theme:s,frontmatter:e}=L(),t=Te([]),o=g(()=>t.value.length>0);return te(()=>{t.value=be(e.value.outline??s.value.outline)}),{headers:t,hasLocalNav:o}}const So=s=>(B("data-v-bc9dc845"),s=s(),H(),s),Vo={class:"menu-text"},Lo=So(()=>v("span",{class:"vpi-chevron-right icon"},null,-1)),To={class:"header"},wo={class:"outline"},Io=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(s){const e=s,{theme:t}=L(),o=I(!1),n=I(0),r=I(),l=I();function d(m){var S;(S=r.value)!=null&&S.contains(m.target)||(o.value=!1)}O(o,m=>{if(m){document.addEventListener("click",d);return}document.removeEventListener("click",d)}),ce("Escape",()=>{o.value=!1}),te(()=>{o.value=!1});function h(){o.value=!o.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function k(m){m.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Ne(()=>{o.value=!1}))}function y(){o.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(m,S)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:Ie({"--vp-vh":n.value+"px"}),ref_key:"main",ref:r},[m.headers.length>0?(a(),u("button",{key:0,onClick:h,class:N({open:o.value})},[v("span",Vo,w(i(He)(i(t))),1),Lo],2)):(a(),u("button",{key:1,onClick:y},w(i(t).returnToTopLabel||"Return to top"),1)),b(pe,{name:"flyout"},{default:p(()=>[o.value?(a(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:k},[v("div",To,[v("a",{class:"top-link",href:"#",onClick:y},w(i(t).returnToTopLabel||"Return to top"),1)]),v("div",wo,[b(Ee,{headers:m.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),No=$(Io,[["__scopeId","data-v-bc9dc845"]]),Mo=s=>(B("data-v-070ab83d"),s=s(),H(),s),Ao={class:"container"},Co=["aria-expanded"],Bo=Mo(()=>v("span",{class:"vpi-align-left menu-icon"},null,-1)),Ho={class:"menu-text"},Eo=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(s){const{theme:e,frontmatter:t}=L(),{hasSidebar:o}=U(),{headers:n}=Po(),{y:r}=Me(),l=I(0);z(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),te(()=>{n.value=be(t.value.outline??e.value.outline)});const d=g(()=>n.value.length===0),h=g(()=>d.value&&!o.value),k=g(()=>({VPLocalNav:!0,"has-sidebar":o.value,empty:d.value,fixed:h.value}));return(y,m)=>i(t).layout!=="home"&&(!h.value||i(r)>=l.value)?(a(),u("div",{key:0,class:N(k.value)},[v("div",Ao,[i(o)?(a(),u("button",{key:0,class:"menu","aria-expanded":y.open,"aria-controls":"VPSidebarNav",onClick:m[0]||(m[0]=S=>y.$emit("open-menu"))},[Bo,v("span",Ho,w(i(e).sidebarMenuLabel||"Menu"),1)],8,Co)):f("",!0),b(No,{headers:i(n),navHeight:l.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),Do=$(Eo,[["__scopeId","data-v-070ab83d"]]);function Fo(){const s=I(!1);function e(){s.value=!0,window.addEventListener("resize",n)}function t(){s.value=!1,window.removeEventListener("resize",n)}function o(){s.value?t():e()}function n(){window.outerWidth>=768&&t()}const r=se();return O(()=>r.path,t),{isScreenOpen:s,openScreen:e,closeScreen:t,toggleScreen:o}}const Oo={},Uo={class:"VPSwitch",type:"button",role:"switch"},jo={class:"check"},Go={key:0,class:"icon"};function zo(s,e){return a(),u("button",Uo,[v("span",jo,[s.$slots.default?(a(),u("span",Go,[c(s.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Ko=$(Oo,[["render",zo],["__scopeId","data-v-4a1c76db"]]),Fe=s=>(B("data-v-b79b56d4"),s=s(),H(),s),Ro=Fe(()=>v("span",{class:"vpi-sun sun"},null,-1)),qo=Fe(()=>v("span",{class:"vpi-moon moon"},null,-1)),Wo=_({__name:"VPSwitchAppearance",setup(s){const{isDark:e,theme:t}=L(),o=J("toggle-appearance",()=>{e.value=!e.value}),n=g(()=>e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme");return(r,l)=>(a(),P(Ko,{title:n.value,class:"VPSwitchAppearance","aria-checked":i(e),onClick:i(o)},{default:p(()=>[Ro,qo]),_:1},8,["title","aria-checked","onClick"]))}}),ke=$(Wo,[["__scopeId","data-v-b79b56d4"]]),Jo={key:0,class:"VPNavBarAppearance"},Yo=_({__name:"VPNavBarAppearance",setup(s){const{site:e}=L();return(t,o)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),u("div",Jo,[b(ke)])):f("",!0)}}),Xo=$(Yo,[["__scopeId","data-v-ead91a81"]]),$e=I();let Oe=!1,ie=0;function Qo(s){const e=I(!1);if(oe){!Oe&&Zo(),ie++;const t=O($e,o=>{var n,r,l;o===s.el.value||(n=s.el.value)!=null&&n.contains(o)?(e.value=!0,(r=s.onFocus)==null||r.call(s)):(e.value=!1,(l=s.onBlur)==null||l.call(s))});fe(()=>{t(),ie--,ie||xo()})}return et(e)}function Zo(){document.addEventListener("focusin",Ue),Oe=!0,$e.value=document.activeElement}function xo(){document.removeEventListener("focusin",Ue)}function Ue(){$e.value=document.activeElement}const en={class:"VPMenuLink"},tn=_({__name:"VPMenuLink",props:{item:{}},setup(s){const{page:e}=L();return(t,o)=>(a(),u("div",en,[b(D,{class:N({active:i(K)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:p(()=>[F(w(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),ne=$(tn,[["__scopeId","data-v-8b74d055"]]),sn={class:"VPMenuGroup"},on={key:0,class:"title"},nn=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),u("div",sn,[e.text?(a(),u("p",on,w(e.text),1)):f("",!0),(a(!0),u(M,null,E(e.items,o=>(a(),u(M,null,["link"in o?(a(),P(ne,{key:0,item:o},null,8,["item"])):f("",!0)],64))),256))]))}}),an=$(nn,[["__scopeId","data-v-48c802d0"]]),rn={class:"VPMenu"},ln={key:0,class:"items"},cn=_({__name:"VPMenu",props:{items:{}},setup(s){return(e,t)=>(a(),u("div",rn,[e.items?(a(),u("div",ln,[(a(!0),u(M,null,E(e.items,o=>(a(),u(M,{key:o.text},["link"in o?(a(),P(ne,{key:0,item:o},null,8,["item"])):(a(),P(an,{key:1,text:o.text,items:o.items},null,8,["text","items"]))],64))),128))])):f("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),un=$(cn,[["__scopeId","data-v-97491713"]]),dn=s=>(B("data-v-e5380155"),s=s(),H(),s),vn=["aria-expanded","aria-label"],pn={key:0,class:"text"},hn=["innerHTML"],fn=dn(()=>v("span",{class:"vpi-chevron-down text-icon"},null,-1)),_n={key:1,class:"vpi-more-horizontal icon"},mn={class:"menu"},bn=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(s){const e=I(!1),t=I();Qo({el:t,onBlur:o});function o(){e.value=!1}return(n,r)=>(a(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=l=>e.value=!0),onMouseleave:r[2]||(r[2]=l=>e.value=!1)},[v("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:r[0]||(r[0]=l=>e.value=!e.value)},[n.button||n.icon?(a(),u("span",pn,[n.icon?(a(),u("span",{key:0,class:N([n.icon,"option-icon"])},null,2)):f("",!0),n.button?(a(),u("span",{key:1,innerHTML:n.button},null,8,hn)):f("",!0),fn])):(a(),u("span",_n))],8,vn),v("div",mn,[b(un,{items:n.items},{default:p(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ge=$(bn,[["__scopeId","data-v-e5380155"]]),kn=["href","aria-label","innerHTML"],$n=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(s){const e=s,t=g(()=>typeof e.icon=="object"?e.icon.svg:``);return(o,n)=>(a(),u("a",{class:"VPSocialLink no-icon",href:o.link,"aria-label":o.ariaLabel??(typeof o.icon=="string"?o.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,kn))}}),gn=$($n,[["__scopeId","data-v-717b8b75"]]),yn={class:"VPSocialLinks"},Pn=_({__name:"VPSocialLinks",props:{links:{}},setup(s){return(e,t)=>(a(),u("div",yn,[(a(!0),u(M,null,E(e.links,({link:o,icon:n,ariaLabel:r})=>(a(),P(gn,{key:o,icon:n,link:o,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),ye=$(Pn,[["__scopeId","data-v-ee7a9424"]]),Sn={key:0,class:"group translations"},Vn={class:"trans-title"},Ln={key:1,class:"group"},Tn={class:"item appearance"},wn={class:"label"},In={class:"appearance-action"},Nn={key:2,class:"group"},Mn={class:"item social-links"},An=_({__name:"VPNavBarExtra",setup(s){const{site:e,theme:t}=L(),{localeLinks:o,currentLang:n}=X({correspondingLink:!0}),r=g(()=>o.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(l,d)=>r.value?(a(),P(ge,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:p(()=>[i(o).length&&i(n).label?(a(),u("div",Sn,[v("p",Vn,w(i(n).label),1),(a(!0),u(M,null,E(i(o),h=>(a(),P(ne,{key:h.link,item:h},null,8,["item"]))),128))])):f("",!0),i(e).appearance&&i(e).appearance!=="force-dark"?(a(),u("div",Ln,[v("div",Tn,[v("p",wn,w(i(t).darkModeSwitchLabel||"Appearance"),1),v("div",In,[b(ke)])])])):f("",!0),i(t).socialLinks?(a(),u("div",Nn,[v("div",Mn,[b(ye,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),Cn=$(An,[["__scopeId","data-v-9b536d0b"]]),Bn=s=>(B("data-v-5dea55bf"),s=s(),H(),s),Hn=["aria-expanded"],En=Bn(()=>v("span",{class:"container"},[v("span",{class:"top"}),v("span",{class:"middle"}),v("span",{class:"bottom"})],-1)),Dn=[En],Fn=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(s){return(e,t)=>(a(),u("button",{type:"button",class:N(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=o=>e.$emit("click"))},Dn,10,Hn))}}),On=$(Fn,[["__scopeId","data-v-5dea55bf"]]),Un=["innerHTML"],jn=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(s){const{page:e}=L();return(t,o)=>(a(),P(D,{class:N({VPNavBarMenuLink:!0,active:i(K)(i(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:p(()=>[v("span",{innerHTML:t.item.text},null,8,Un)]),_:1},8,["class","href","noIcon","target","rel"]))}}),Gn=$(jn,[["__scopeId","data-v-ed5ac1f6"]]),zn=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(s){const e=s,{page:t}=L(),o=r=>"link"in r?K(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(o),n=g(()=>o(e.item));return(r,l)=>(a(),P(ge,{class:N({VPNavBarMenuGroup:!0,active:i(K)(i(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||n.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),Kn=s=>(B("data-v-492ea56d"),s=s(),H(),s),Rn={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},qn=Kn(()=>v("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Wn=_({__name:"VPNavBarMenu",setup(s){const{theme:e}=L();return(t,o)=>i(e).nav?(a(),u("nav",Rn,[qn,(a(!0),u(M,null,E(i(e).nav,n=>(a(),u(M,{key:n.text},["link"in n?(a(),P(Gn,{key:0,item:n},null,8,["item"])):(a(),P(zn,{key:1,item:n},null,8,["item"]))],64))),128))])):f("",!0)}}),Jn=$(Wn,[["__scopeId","data-v-492ea56d"]]);function Yn(s){const{localeIndex:e,theme:t}=L();function o(n){var A,C,T;const r=n.split("."),l=(A=t.value.search)==null?void 0:A.options,d=l&&typeof l=="object",h=d&&((T=(C=l.locales)==null?void 0:C[e.value])==null?void 0:T.translations)||null,k=d&&l.translations||null;let y=h,m=k,S=s;const V=r.pop();for(const j of r){let G=null;const q=S==null?void 0:S[j];q&&(G=S=q);const ae=m==null?void 0:m[j];ae&&(G=m=ae);const re=y==null?void 0:y[j];re&&(G=y=re),q||(S=G),ae||(m=G),re||(y=G)}return(y==null?void 0:y[V])??(m==null?void 0:m[V])??(S==null?void 0:S[V])??""}return o}const Xn=["aria-label"],Qn={class:"DocSearch-Button-Container"},Zn=v("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),xn={class:"DocSearch-Button-Placeholder"},ea=v("span",{class:"DocSearch-Button-Keys"},[v("kbd",{class:"DocSearch-Button-Key"}),v("kbd",{class:"DocSearch-Button-Key"},"K")],-1),Pe=_({__name:"VPNavBarSearchButton",setup(s){const t=Yn({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(o,n)=>(a(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(t)("button.buttonAriaLabel")},[v("span",Qn,[Zn,v("span",xn,w(i(t)("button.buttonText")),1)]),ea],8,Xn))}}),ta={class:"VPNavBarSearch"},sa={id:"local-search"},oa={key:1,id:"docsearch"},na=_({__name:"VPNavBarSearch",setup(s){const e=tt(()=>st(()=>import("./VPLocalSearchBox.46pBDUiV.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:o}=L(),n=I(!1),r=I(!1);z(()=>{});function l(){n.value||(n.value=!0,setTimeout(d,16))}function d(){const m=new Event("keydown");m.key="k",m.metaKey=!0,window.dispatchEvent(m),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||d()},16)}function h(m){const S=m.target,V=S.tagName;return S.isContentEditable||V==="INPUT"||V==="SELECT"||V==="TEXTAREA"}const k=I(!1);ce("k",m=>{(m.ctrlKey||m.metaKey)&&(m.preventDefault(),k.value=!0)}),ce("/",m=>{h(m)||(m.preventDefault(),k.value=!0)});const y="local";return(m,S)=>{var V;return a(),u("div",ta,[i(y)==="local"?(a(),u(M,{key:0},[k.value?(a(),P(i(e),{key:0,onClose:S[0]||(S[0]=A=>k.value=!1)})):f("",!0),v("div",sa,[b(Pe,{onClick:S[1]||(S[1]=A=>k.value=!0)})])],64)):i(y)==="algolia"?(a(),u(M,{key:1},[n.value?(a(),P(i(t),{key:0,algolia:((V=i(o).search)==null?void 0:V.options)??i(o).algolia,onVnodeBeforeMount:S[2]||(S[2]=A=>r.value=!0)},null,8,["algolia"])):f("",!0),r.value?f("",!0):(a(),u("div",oa,[b(Pe,{onClick:l})]))],64)):f("",!0)])}}}),aa=_({__name:"VPNavBarSocialLinks",setup(s){const{theme:e}=L();return(t,o)=>i(e).socialLinks?(a(),P(ye,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),ra=$(aa,[["__scopeId","data-v-164c457f"]]),ia=["href","rel","target"],la={key:1},ca={key:2},ua=_({__name:"VPNavBarTitle",setup(s){const{site:e,theme:t}=L(),{hasSidebar:o}=U(),{currentLang:n}=X(),r=g(()=>{var h;return typeof t.value.logoLink=="string"?t.value.logoLink:(h=t.value.logoLink)==null?void 0:h.link}),l=g(()=>{var h;return typeof t.value.logoLink=="string"||(h=t.value.logoLink)==null?void 0:h.rel}),d=g(()=>{var h;return typeof t.value.logoLink=="string"||(h=t.value.logoLink)==null?void 0:h.target});return(h,k)=>(a(),u("div",{class:N(["VPNavBarTitle",{"has-sidebar":i(o)}])},[v("a",{class:"title",href:r.value??i(me)(i(n).link),rel:l.value,target:d.value},[c(h.$slots,"nav-bar-title-before",{},void 0,!0),i(t).logo?(a(),P(x,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):f("",!0),i(t).siteTitle?(a(),u("span",la,w(i(t).siteTitle),1)):i(t).siteTitle===void 0?(a(),u("span",ca,w(i(e).title),1)):f("",!0),c(h.$slots,"nav-bar-title-after",{},void 0,!0)],8,ia)],2))}}),da=$(ua,[["__scopeId","data-v-28a961f9"]]),va={class:"items"},pa={class:"title"},ha=_({__name:"VPNavBarTranslations",setup(s){const{theme:e}=L(),{localeLinks:t,currentLang:o}=X({correspondingLink:!0});return(n,r)=>i(t).length&&i(o).label?(a(),P(ge,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(e).langMenuLabel||"Change language"},{default:p(()=>[v("div",va,[v("p",pa,w(i(o).label),1),(a(!0),u(M,null,E(i(t),l=>(a(),P(ne,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),fa=$(ha,[["__scopeId","data-v-c80d9ad0"]]),_a=s=>(B("data-v-40788ea0"),s=s(),H(),s),ma={class:"wrapper"},ba={class:"container"},ka={class:"title"},$a={class:"content"},ga={class:"content-body"},ya=_a(()=>v("div",{class:"divider"},[v("div",{class:"divider-line"})],-1)),Pa=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(s){const{y:e}=Me(),{hasSidebar:t}=U(),{frontmatter:o}=L(),n=I({});return Le(()=>{n.value={"has-sidebar":t.value,home:o.value.layout==="home",top:e.value===0}}),(r,l)=>(a(),u("div",{class:N(["VPNavBar",n.value])},[v("div",ma,[v("div",ba,[v("div",ka,[b(da,null,{"nav-bar-title-before":p(()=>[c(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[c(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),v("div",$a,[v("div",ga,[c(r.$slots,"nav-bar-content-before",{},void 0,!0),b(na,{class:"search"}),b(Jn,{class:"menu"}),b(fa,{class:"translations"}),b(Xo,{class:"appearance"}),b(ra,{class:"social-links"}),b(Cn,{class:"extra"}),c(r.$slots,"nav-bar-content-after",{},void 0,!0),b(On,{class:"hamburger",active:r.isScreenOpen,onClick:l[0]||(l[0]=d=>r.$emit("toggle-screen"))},null,8,["active"])])])])]),ya],2))}}),Sa=$(Pa,[["__scopeId","data-v-40788ea0"]]),Va={key:0,class:"VPNavScreenAppearance"},La={class:"text"},Ta=_({__name:"VPNavScreenAppearance",setup(s){const{site:e,theme:t}=L();return(o,n)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),u("div",Va,[v("p",La,w(i(t).darkModeSwitchLabel||"Appearance"),1),b(ke)])):f("",!0)}}),wa=$(Ta,[["__scopeId","data-v-2b89f08b"]]),Ia=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(s){const e=J("close-screen");return(t,o)=>(a(),P(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),Na=$(Ia,[["__scopeId","data-v-27d04aeb"]]),Ma=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(s){const e=J("close-screen");return(t,o)=>(a(),P(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:p(()=>[F(w(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),je=$(Ma,[["__scopeId","data-v-7179dbb7"]]),Aa={class:"VPNavScreenMenuGroupSection"},Ca={key:0,class:"title"},Ba=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),u("div",Aa,[e.text?(a(),u("p",Ca,w(e.text),1)):f("",!0),(a(!0),u(M,null,E(e.items,o=>(a(),P(je,{key:o.text,item:o},null,8,["item"]))),128))]))}}),Ha=$(Ba,[["__scopeId","data-v-4b8941ac"]]),Ea=s=>(B("data-v-c9df2649"),s=s(),H(),s),Da=["aria-controls","aria-expanded"],Fa=["innerHTML"],Oa=Ea(()=>v("span",{class:"vpi-plus button-icon"},null,-1)),Ua=["id"],ja={key:1,class:"group"},Ga=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(s){const e=s,t=I(!1),o=g(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(r,l)=>(a(),u("div",{class:N(["VPNavScreenMenuGroup",{open:t.value}])},[v("button",{class:"button","aria-controls":o.value,"aria-expanded":t.value,onClick:n},[v("span",{class:"button-text",innerHTML:r.text},null,8,Fa),Oa],8,Da),v("div",{id:o.value,class:"items"},[(a(!0),u(M,null,E(r.items,d=>(a(),u(M,{key:d.text},["link"in d?(a(),u("div",{key:d.text,class:"item"},[b(je,{item:d},null,8,["item"])])):(a(),u("div",ja,[b(Ha,{text:d.text,items:d.items},null,8,["text","items"])]))],64))),128))],8,Ua)],2))}}),za=$(Ga,[["__scopeId","data-v-c9df2649"]]),Ka={key:0,class:"VPNavScreenMenu"},Ra=_({__name:"VPNavScreenMenu",setup(s){const{theme:e}=L();return(t,o)=>i(e).nav?(a(),u("nav",Ka,[(a(!0),u(M,null,E(i(e).nav,n=>(a(),u(M,{key:n.text},["link"in n?(a(),P(Na,{key:0,item:n},null,8,["item"])):(a(),P(za,{key:1,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),qa=_({__name:"VPNavScreenSocialLinks",setup(s){const{theme:e}=L();return(t,o)=>i(e).socialLinks?(a(),P(ye,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),Ge=s=>(B("data-v-362991c2"),s=s(),H(),s),Wa=Ge(()=>v("span",{class:"vpi-languages icon lang"},null,-1)),Ja=Ge(()=>v("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Ya={class:"list"},Xa=_({__name:"VPNavScreenTranslations",setup(s){const{localeLinks:e,currentLang:t}=X({correspondingLink:!0}),o=I(!1);function n(){o.value=!o.value}return(r,l)=>i(e).length&&i(t).label?(a(),u("div",{key:0,class:N(["VPNavScreenTranslations",{open:o.value}])},[v("button",{class:"title",onClick:n},[Wa,F(" "+w(i(t).label)+" ",1),Ja]),v("ul",Ya,[(a(!0),u(M,null,E(i(e),d=>(a(),u("li",{key:d.link,class:"item"},[b(D,{class:"link",href:d.link},{default:p(()=>[F(w(d.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),Qa=$(Xa,[["__scopeId","data-v-362991c2"]]),Za={class:"container"},xa=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(s){const e=I(null),t=Ae(oe?document.body:null);return(o,n)=>(a(),P(pe,{name:"fade",onEnter:n[0]||(n[0]=r=>t.value=!0),onAfterLeave:n[1]||(n[1]=r=>t.value=!1)},{default:p(()=>[o.open?(a(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[v("div",Za,[c(o.$slots,"nav-screen-content-before",{},void 0,!0),b(Ra,{class:"menu"}),b(Qa,{class:"translations"}),b(wa,{class:"appearance"}),b(qa,{class:"social-links"}),c(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),er=$(xa,[["__scopeId","data-v-382f42e9"]]),tr={key:0,class:"VPNav"},sr=_({__name:"VPNav",setup(s){const{isScreenOpen:e,closeScreen:t,toggleScreen:o}=Fo(),{frontmatter:n}=L(),r=g(()=>n.value.navbar!==!1);return _e("close-screen",t),ee(()=>{oe&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(l,d)=>r.value?(a(),u("header",tr,[b(Sa,{"is-screen-open":i(e),onToggleScreen:i(o)},{"nav-bar-title-before":p(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),b(er,{open:i(e)},{"nav-screen-content-before":p(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),or=$(sr,[["__scopeId","data-v-f1e365da"]]),ze=s=>(B("data-v-2ea20db7"),s=s(),H(),s),nr=["role","tabindex"],ar=ze(()=>v("div",{class:"indicator"},null,-1)),rr=ze(()=>v("span",{class:"vpi-chevron-right caret-icon"},null,-1)),ir=[rr],lr={key:1,class:"items"},cr=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(s){const e=s,{collapsed:t,collapsible:o,isLink:n,isActiveLink:r,hasActiveLink:l,hasChildren:d,toggle:h}=wt(g(()=>e.item)),k=g(()=>d.value?"section":"div"),y=g(()=>n.value?"a":"div"),m=g(()=>d.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),S=g(()=>n.value?void 0:"button"),V=g(()=>[[`level-${e.depth}`],{collapsible:o.value},{collapsed:t.value},{"is-link":n.value},{"is-active":r.value},{"has-active":l.value}]);function A(T){"key"in T&&T.key!=="Enter"||!e.item.link&&h()}function C(){e.item.link&&h()}return(T,j)=>{const G=R("VPSidebarItem",!0);return a(),P(W(k.value),{class:N(["VPSidebarItem",V.value])},{default:p(()=>[T.item.text?(a(),u("div",Q({key:0,class:"item",role:S.value},nt(T.item.items?{click:A,keydown:A}:{},!0),{tabindex:T.item.items&&0}),[ar,T.item.link?(a(),P(D,{key:0,tag:y.value,class:"link",href:T.item.link,rel:T.item.rel,target:T.item.target},{default:p(()=>[(a(),P(W(m.value),{class:"text",innerHTML:T.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),P(W(m.value),{key:1,class:"text",innerHTML:T.item.text},null,8,["innerHTML"])),T.item.collapsed!=null&&T.item.items&&T.item.items.length?(a(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:ot(C,["enter"]),tabindex:"0"},ir,32)):f("",!0)],16,nr)):f("",!0),T.item.items&&T.item.items.length?(a(),u("div",lr,[T.depth<5?(a(!0),u(M,{key:0},E(T.item.items,q=>(a(),P(G,{key:q.text,item:q,depth:T.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),ur=$(cr,[["__scopeId","data-v-2ea20db7"]]),Ke=s=>(B("data-v-ec846e01"),s=s(),H(),s),dr=Ke(()=>v("div",{class:"curtain"},null,-1)),vr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},pr=Ke(()=>v("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),hr=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(s){const{sidebarGroups:e,hasSidebar:t}=U(),o=s,n=I(null),r=Ae(oe?document.body:null);return O([o,n],()=>{var l;o.open?(r.value=!0,(l=n.value)==null||l.focus()):r.value=!1},{immediate:!0,flush:"post"}),(l,d)=>i(t)?(a(),u("aside",{key:0,class:N(["VPSidebar",{open:l.open}]),ref_key:"navEl",ref:n,onClick:d[0]||(d[0]=at(()=>{},["stop"]))},[dr,v("nav",vr,[pr,c(l.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),u(M,null,E(i(e),h=>(a(),u("div",{key:h.text,class:"group"},[b(ur,{item:h,depth:0},null,8,["item"])]))),128)),c(l.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),fr=$(hr,[["__scopeId","data-v-ec846e01"]]),_r=_({__name:"VPSkipLink",setup(s){const e=se(),t=I();O(()=>e.path,()=>t.value.focus());function o({target:n}){const r=document.getElementById(decodeURIComponent(n.hash).slice(1));if(r){const l=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",l)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",l),r.focus(),window.scrollTo(0,0)}}return(n,r)=>(a(),u(M,null,[v("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),v("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o}," Skip to content ")],64))}}),mr=$(_r,[["__scopeId","data-v-c3508ec8"]]),br=_({__name:"Layout",setup(s){const{isOpen:e,open:t,close:o}=U(),n=se();O(()=>n.path,o),Tt(e,o);const{frontmatter:r}=L(),l=Ce(),d=g(()=>!!l["home-hero-image"]);return _e("hero-image-slot-exists",d),(h,k)=>{const y=R("Content");return i(r).layout!==!1?(a(),u("div",{key:0,class:N(["Layout",i(r).pageClass])},[c(h.$slots,"layout-top",{},void 0,!0),b(mr),b(vt,{class:"backdrop",show:i(e),onClick:i(o)},null,8,["show","onClick"]),b(or,null,{"nav-bar-title-before":p(()=>[c(h.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[c(h.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[c(h.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[c(h.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":p(()=>[c(h.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[c(h.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),b(Do,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),b(fr,{open:i(e)},{"sidebar-nav-before":p(()=>[c(h.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":p(()=>[c(h.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),b(mo,null,{"page-top":p(()=>[c(h.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[c(h.$slots,"page-bottom",{},void 0,!0)]),"not-found":p(()=>[c(h.$slots,"not-found",{},void 0,!0)]),"home-hero-before":p(()=>[c(h.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":p(()=>[c(h.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[c(h.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[c(h.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[c(h.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[c(h.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[c(h.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[c(h.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[c(h.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":p(()=>[c(h.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[c(h.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[c(h.$slots,"doc-after",{},void 0,!0)]),"doc-top":p(()=>[c(h.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[c(h.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":p(()=>[c(h.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[c(h.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[c(h.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[c(h.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[c(h.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[c(h.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),b(yo),c(h.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),P(y,{key:1}))}}}),kr=$(br,[["__scopeId","data-v-a9a9e638"]]),Se={Layout:kr,enhanceApp:({app:s})=>{s.component("Badge",ct)}},$r=s=>{if(typeof document>"u")return{stabilizeScrollPosition:n=>async(...r)=>n(...r)};const e=document.documentElement;return{stabilizeScrollPosition:o=>async(...n)=>{const r=o(...n),l=s.value;if(!l)return r;const d=l.offsetTop-e.scrollTop;return await Ne(),e.scrollTop=l.offsetTop-d,r}}},Re="vitepress:tabSharedState",Y=typeof localStorage<"u"?localStorage:null,qe="vitepress:tabsSharedState",gr=()=>{const s=Y==null?void 0:Y.getItem(qe);if(s)try{return JSON.parse(s)}catch{}return{}},yr=s=>{Y&&Y.setItem(qe,JSON.stringify(s))},Pr=s=>{const e=rt({});O(()=>e.content,(t,o)=>{t&&o&&yr(t)},{deep:!0}),s.provide(Re,e)},Sr=(s,e)=>{const t=J(Re);if(!t)throw new Error("[vitepress-plugin-tabs] TabsSharedState should be injected");z(()=>{t.content||(t.content=gr())});const o=I(),n=g({get(){var h;const l=e.value,d=s.value;if(l){const k=(h=t.content)==null?void 0:h[l];if(k&&d.includes(k))return k}else{const k=o.value;if(k)return k}return d[0]},set(l){const d=e.value;d?t.content&&(t.content[d]=l):o.value=l}});return{selected:n,select:l=>{n.value=l}}};let Ve=0;const Vr=()=>(Ve++,""+Ve);function Lr(){const s=Ce();return g(()=>{var o;const t=(o=s.default)==null?void 0:o.call(s);return t?t.filter(n=>typeof n.type=="object"&&"__name"in n.type&&n.type.__name==="PluginTabsTab"&&n.props).map(n=>{var r;return(r=n.props)==null?void 0:r.label}):[]})}const We="vitepress:tabSingleState",Tr=s=>{_e(We,s)},wr=()=>{const s=J(We);if(!s)throw new Error("[vitepress-plugin-tabs] TabsSingleState should be injected");return s},Ir={class:"plugin-tabs"},Nr=["id","aria-selected","aria-controls","tabindex","onClick"],Mr=_({__name:"PluginTabs",props:{sharedStateKey:{}},setup(s){const e=s,t=Lr(),{selected:o,select:n}=Sr(t,it(e,"sharedStateKey")),r=I(),{stabilizeScrollPosition:l}=$r(r),d=l(n),h=I([]),k=m=>{var A;const S=t.value.indexOf(o.value);let V;m.key==="ArrowLeft"?V=S>=1?S-1:t.value.length-1:m.key==="ArrowRight"&&(V=S(a(),u("div",Ir,[v("div",{ref_key:"tablist",ref:r,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:k},[(a(!0),u(M,null,E(i(t),V=>(a(),u("button",{id:`tab-${V}-${i(y)}`,ref_for:!0,ref_key:"buttonRefs",ref:h,key:V,role:"tab",class:"plugin-tabs--tab","aria-selected":V===i(o),"aria-controls":`panel-${V}-${i(y)}`,tabindex:V===i(o)?0:-1,onClick:()=>i(d)(V)},w(V),9,Nr))),128))],544),c(m.$slots,"default")]))}}),Ar=["id","aria-labelledby"],Cr=_({__name:"PluginTabsTab",props:{label:{}},setup(s){const{uid:e,selected:t}=wr();return(o,n)=>i(t)===o.label?(a(),u("div",{key:0,id:`panel-${o.label}-${i(e)}`,class:"plugin-tabs--content",role:"tabpanel",tabindex:"0","aria-labelledby":`tab-${o.label}-${i(e)}`},[c(o.$slots,"default",{},void 0,!0)],8,Ar)):f("",!0)}}),Br=$(Cr,[["__scopeId","data-v-9b0d03d2"]]),Hr=s=>{Pr(s),s.component("PluginTabs",Mr),s.component("PluginTabsTab",Br)},Dr={extends:Se,Layout(){return lt(Se.Layout,null,{})},enhanceApp({app:s,router:e,siteData:t}){Hr(s)}};export{Dr as R,Yn as c,L as u}; +const __vite__fileDeps=["assets/chunks/VPLocalSearchBox.CMLVlh7q.js","assets/chunks/framework.DwyrAfcZ.js"],__vite__mapDeps=i=>i.map(i=>__vite__fileDeps[i]); +import{d as _,o as a,c as u,r as c,n as N,a as F,t as w,b as P,w as p,e as f,T as pe,_ as $,u as Je,i as Ye,f as Xe,g as he,h as g,j as I,k as z,l as v,m as i,p as B,q as H,s as K,v as le,x as O,y as ee,z as fe,A as Le,B as Qe,C as Ze,D as R,F as M,E,G as Te,H as te,I as b,J as W,K as we,L as se,M as Q,N as J,O as xe,P as Ie,Q as ce,R as Ne,S as Me,U as oe,V as et,W as tt,X as st,Y as Ae,Z as _e,$ as ot,a0 as nt,a1 as at,a2 as Ce,a3 as rt,a4 as it,a5 as lt}from"./framework.DwyrAfcZ.js";const ct=_({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(s){return(e,t)=>(a(),u("span",{class:N(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[F(w(e.text),1)])],2))}}),ut={key:0,class:"VPBackdrop"},dt=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(s){return(e,t)=>(a(),P(pe,{name:"fade"},{default:p(()=>[e.show?(a(),u("div",ut)):f("",!0)]),_:1}))}}),vt=$(dt,[["__scopeId","data-v-b06cdb19"]]),L=Je;function pt(s,e){let t,o=!1;return()=>{t&&clearTimeout(t),o?t=setTimeout(s,e):(s(),(o=!0)&&setTimeout(()=>o=!1,e))}}function ue(s){return/^\//.test(s)?s:`/${s}`}function me(s){const{pathname:e,search:t,hash:o,protocol:n}=new URL(s,"http://a.com");if(Ye(s)||s.startsWith("#")||!n.startsWith("http")||!Xe(e))return s;const{site:r}=L(),l=e.endsWith("/")||e.endsWith(".html")?s:s.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${o}`);return he(l)}function X({removeCurrent:s=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:o,page:n,theme:r,hash:l}=L(),d=g(()=>{var k,y;return{index:o.value,label:(k=t.value.locales[o.value])==null?void 0:k.label,link:((y=t.value.locales[o.value])==null?void 0:y.link)||(o.value==="root"?"/":`/${o.value}/`)}});return{localeLinks:g(()=>Object.entries(t.value.locales).flatMap(([k,y])=>s&&d.value.label===y.label?[]:{index:k,text:y.label,link:ht(y.link||(k==="root"?"/":`/${k}/`),r.value.i18nRouting!==!1&&e,n.value.relativePath.slice(d.value.link.length-1),!t.value.cleanUrls)+l.value})),currentLang:d}}function ht(s,e,t,o){return e?s.replace(/\/$/,"")+ue(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,o?".html":"")):s}const ft=s=>(B("data-v-ccbd20cd"),s=s(),H(),s),_t={class:"NotFound"},mt={class:"code"},bt={class:"title"},kt=ft(()=>v("div",{class:"divider"},null,-1)),$t={class:"quote"},gt={class:"action"},yt=["href","aria-label"],Pt=_({__name:"NotFound",setup(s){const{site:e}=L(),{localeLinks:t}=X({removeCurrent:!1}),o=I({link:"/",index:"root"});z(()=>{const r=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");t.value.length&&(o.value=t.value.find(({link:l})=>l.startsWith(r))||t.value[0])});const n=g(()=>{var r,l,d,h;return{code:404,title:"PAGE NOT FOUND",quote:"But if you don't change your direction, and if you keep looking, you may end up where you are heading.",linkLabel:"go to home",linkText:"Take me home",...o.value.index==="root"?(r=e.value.themeConfig)==null?void 0:r.notFound:(h=(d=(l=e.value.locales)==null?void 0:l[o.value.index])==null?void 0:d.themeConfig)==null?void 0:h.notFound}});return(r,l)=>(a(),u("div",_t,[v("p",mt,w(n.value.code),1),v("h1",bt,w(n.value.title),1),kt,v("blockquote",$t,w(n.value.quote),1),v("div",gt,[v("a",{class:"link",href:i(he)(o.value.link),"aria-label":n.value.linkLabel},w(n.value.linkText),9,yt)])]))}}),St=$(Pt,[["__scopeId","data-v-ccbd20cd"]]);function Be(s,e){if(Array.isArray(s))return Z(s);if(s==null)return[];e=ue(e);const t=Object.keys(s).sort((n,r)=>r.split("/").length-n.split("/").length).find(n=>e.startsWith(ue(n))),o=t?s[t]:[];return Array.isArray(o)?Z(o):Z(o.items,o.base)}function Vt(s){const e=[];let t=0;for(const o in s){const n=s[o];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function Lt(s){const e=[];function t(o){for(const n of o)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(s),e}function de(s,e){return Array.isArray(e)?e.some(t=>de(s,t)):K(s,e.link)?!0:e.items?de(s,e.items):!1}function Z(s,e){return[...s].map(t=>{const o={...t},n=o.base||e;return n&&o.link&&(o.link=n+o.link),o.items&&(o.items=Z(o.items,n)),o})}function U(){const{frontmatter:s,page:e,theme:t}=L(),o=le("(min-width: 960px)"),n=I(!1),r=g(()=>{const C=t.value.sidebar,T=e.value.relativePath;return C?Be(C,T):[]}),l=I(r.value);O(r,(C,T)=>{JSON.stringify(C)!==JSON.stringify(T)&&(l.value=r.value)});const d=g(()=>s.value.sidebar!==!1&&l.value.length>0&&s.value.layout!=="home"),h=g(()=>k?s.value.aside==null?t.value.aside==="left":s.value.aside==="left":!1),k=g(()=>s.value.layout==="home"?!1:s.value.aside!=null?!!s.value.aside:t.value.aside!==!1),y=g(()=>d.value&&o.value),m=g(()=>d.value?Vt(l.value):[]);function S(){n.value=!0}function V(){n.value=!1}function A(){n.value?V():S()}return{isOpen:n,sidebar:l,sidebarGroups:m,hasSidebar:d,hasAside:k,leftAside:h,isSidebarEnabled:y,open:S,close:V,toggle:A}}function Tt(s,e){let t;ee(()=>{t=s.value?document.activeElement:void 0}),z(()=>{window.addEventListener("keyup",o)}),fe(()=>{window.removeEventListener("keyup",o)});function o(n){n.key==="Escape"&&s.value&&(e(),t==null||t.focus())}}function wt(s){const{page:e,hash:t}=L(),o=I(!1),n=g(()=>s.value.collapsed!=null),r=g(()=>!!s.value.link),l=I(!1),d=()=>{l.value=K(e.value.relativePath,s.value.link)};O([e,s,t],d),z(d);const h=g(()=>l.value?!0:s.value.items?de(e.value.relativePath,s.value.items):!1),k=g(()=>!!(s.value.items&&s.value.items.length));ee(()=>{o.value=!!(n.value&&s.value.collapsed)}),Le(()=>{(l.value||h.value)&&(o.value=!1)});function y(){n.value&&(o.value=!o.value)}return{collapsed:o,collapsible:n,isLink:r,isActiveLink:l,hasActiveLink:h,hasChildren:k,toggle:y}}function It(){const{hasSidebar:s}=U(),e=le("(min-width: 960px)"),t=le("(min-width: 1280px)");return{isAsideEnabled:g(()=>!t.value&&!e.value?!1:s.value?t.value:e.value)}}const ve=[];function He(s){return typeof s.outline=="object"&&!Array.isArray(s.outline)&&s.outline.label||s.outlineTitle||"On this page"}function be(s){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const o=Number(t.tagName[1]);return{element:t,title:Nt(t),link:"#"+t.id,level:o}});return Mt(e,s)}function Nt(s){let e="";for(const t of s.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 Mt(s,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[o,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;s=s.filter(l=>l.level>=o&&l.level<=n),ve.length=0;for(const{element:l,link:d}of s)ve.push({element:l,link:d});const r=[];e:for(let l=0;l=0;h--){const k=s[h];if(k.level{requestAnimationFrame(r),window.addEventListener("scroll",o)}),Qe(()=>{l(location.hash)}),fe(()=>{window.removeEventListener("scroll",o)});function r(){if(!t.value)return;const d=window.scrollY,h=window.innerHeight,k=document.body.offsetHeight,y=Math.abs(d+h-k)<1,m=ve.map(({element:V,link:A})=>({link:A,top:Ct(V)})).filter(({top:V})=>!Number.isNaN(V)).sort((V,A)=>V.top-A.top);if(!m.length){l(null);return}if(d<1){l(null);return}if(y){l(m[m.length-1].link);return}let S=null;for(const{link:V,top:A}of m){if(A>d+Ze()+4)break;S=V}l(S)}function l(d){n&&n.classList.remove("active"),d==null?n=null:n=s.value.querySelector(`a[href="${decodeURIComponent(d)}"]`);const h=n;h?(h.classList.add("active"),e.value.style.top=h.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Ct(s){let e=0;for(;s!==document.body;){if(s===null)return NaN;e+=s.offsetTop,s=s.offsetParent}return e}const Bt=["href","title"],Ht=_({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(s){function e({target:t}){const o=t.href.split("#")[1],n=document.getElementById(decodeURIComponent(o));n==null||n.focus({preventScroll:!0})}return(t,o)=>{const n=R("VPDocOutlineItem",!0);return a(),u("ul",{class:N(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),u(M,null,E(t.headers,({children:r,link:l,title:d})=>(a(),u("li",null,[v("a",{class:"outline-link",href:l,onClick:e,title:d},w(d),9,Bt),r!=null&&r.length?(a(),P(n,{key:0,headers:r},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Ee=$(Ht,[["__scopeId","data-v-3f927ebe"]]),Et={class:"content"},Dt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Ft=_({__name:"VPDocAsideOutline",setup(s){const{frontmatter:e,theme:t}=L(),o=Te([]);te(()=>{o.value=be(e.value.outline??t.value.outline)});const n=I(),r=I();return At(n,r),(l,d)=>(a(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:N(["VPDocAsideOutline",{"has-outline":o.value.length>0}]),ref_key:"container",ref:n,role:"navigation"},[v("div",Et,[v("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),v("div",Dt,w(i(He)(i(t))),1),b(Ee,{headers:o.value,root:!0},null,8,["headers"])])],2))}}),Ot=$(Ft,[["__scopeId","data-v-b6ca177b"]]),Ut={class:"VPDocAsideCarbonAds"},jt=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(s){const e=()=>null;return(t,o)=>(a(),u("div",Ut,[b(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Gt=s=>(B("data-v-6d7b3c46"),s=s(),H(),s),zt={class:"VPDocAside"},Kt=Gt(()=>v("div",{class:"spacer"},null,-1)),Rt=_({__name:"VPDocAside",setup(s){const{theme:e}=L();return(t,o)=>(a(),u("div",zt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),b(Ot),c(t.$slots,"aside-outline-after",{},void 0,!0),Kt,c(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(a(),P(jt,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):f("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),qt=$(Rt,[["__scopeId","data-v-6d7b3c46"]]);function Wt(){const{theme:s,page:e}=L();return g(()=>{const{text:t="Edit this page",pattern:o=""}=s.value.editLink||{};let n;return typeof o=="function"?n=o(e.value):n=o.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Jt(){const{page:s,theme:e,frontmatter:t}=L();return g(()=>{var k,y,m,S,V,A,C,T;const o=Be(e.value.sidebar,s.value.relativePath),n=Lt(o),r=Yt(n,j=>j.link.replace(/[?#].*$/,"")),l=r.findIndex(j=>K(s.value.relativePath,j.link)),d=((k=e.value.docFooter)==null?void 0:k.prev)===!1&&!t.value.prev||t.value.prev===!1,h=((y=e.value.docFooter)==null?void 0:y.next)===!1&&!t.value.next||t.value.next===!1;return{prev:d?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((m=r[l-1])==null?void 0:m.docFooterText)??((S=r[l-1])==null?void 0:S.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((V=r[l-1])==null?void 0:V.link)},next:h?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=r[l+1])==null?void 0:A.docFooterText)??((C=r[l+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((T=r[l+1])==null?void 0:T.link)}}})}function Yt(s,e){const t=new Set;return s.filter(o=>{const n=e(o);return t.has(n)?!1:t.add(n)})}const D=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(s){const e=s,t=g(()=>e.tag??(e.href?"a":"span")),o=g(()=>e.href&&we.test(e.href));return(n,r)=>(a(),P(W(t.value),{class:N(["VPLink",{link:n.href,"vp-external-link-icon":o.value,"no-icon":n.noIcon}]),href:n.href?i(me)(n.href):void 0,target:n.target??(o.value?"_blank":void 0),rel:n.rel??(o.value?"noreferrer":void 0)},{default:p(()=>[c(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Xt={class:"VPLastUpdated"},Qt=["datetime"],Zt=_({__name:"VPDocFooterLastUpdated",setup(s){const{theme:e,page:t,frontmatter:o,lang:n}=L(),r=g(()=>new Date(o.value.lastUpdated??t.value.lastUpdated)),l=g(()=>r.value.toISOString()),d=I("");return z(()=>{ee(()=>{var h,k,y;d.value=new Intl.DateTimeFormat((k=(h=e.value.lastUpdated)==null?void 0:h.formatOptions)!=null&&k.forceLocale?n.value:void 0,((y=e.value.lastUpdated)==null?void 0:y.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(r.value)})}),(h,k)=>{var y;return a(),u("p",Xt,[F(w(((y=i(e).lastUpdated)==null?void 0:y.text)||i(e).lastUpdatedText||"Last updated")+": ",1),v("time",{datetime:l.value},w(d.value),9,Qt)])}}}),xt=$(Zt,[["__scopeId","data-v-9da12f1d"]]),De=s=>(B("data-v-b88cabfa"),s=s(),H(),s),es={key:0,class:"VPDocFooter"},ts={key:0,class:"edit-info"},ss={key:0,class:"edit-link"},os=De(()=>v("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),ns={key:1,class:"last-updated"},as={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},rs=De(()=>v("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),is={class:"pager"},ls=["innerHTML"],cs=["innerHTML"],us={class:"pager"},ds=["innerHTML"],vs=["innerHTML"],ps=_({__name:"VPDocFooter",setup(s){const{theme:e,page:t,frontmatter:o}=L(),n=Wt(),r=Jt(),l=g(()=>e.value.editLink&&o.value.editLink!==!1),d=g(()=>t.value.lastUpdated&&o.value.lastUpdated!==!1),h=g(()=>l.value||d.value||r.value.prev||r.value.next);return(k,y)=>{var m,S,V,A;return h.value?(a(),u("footer",es,[c(k.$slots,"doc-footer-before",{},void 0,!0),l.value||d.value?(a(),u("div",ts,[l.value?(a(),u("div",ss,[b(D,{class:"edit-link-button",href:i(n).url,"no-icon":!0},{default:p(()=>[os,F(" "+w(i(n).text),1)]),_:1},8,["href"])])):f("",!0),d.value?(a(),u("div",ns,[b(xt)])):f("",!0)])):f("",!0),(m=i(r).prev)!=null&&m.link||(S=i(r).next)!=null&&S.link?(a(),u("nav",as,[rs,v("div",is,[(V=i(r).prev)!=null&&V.link?(a(),P(D,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:p(()=>{var C;return[v("span",{class:"desc",innerHTML:((C=i(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,ls),v("span",{class:"title",innerHTML:i(r).prev.text},null,8,cs)]}),_:1},8,["href"])):f("",!0)]),v("div",us,[(A=i(r).next)!=null&&A.link?(a(),P(D,{key:0,class:"pager-link next",href:i(r).next.link},{default:p(()=>{var C;return[v("span",{class:"desc",innerHTML:((C=i(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,ds),v("span",{class:"title",innerHTML:i(r).next.text},null,8,vs)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),hs=$(ps,[["__scopeId","data-v-b88cabfa"]]),fs=s=>(B("data-v-83890dd9"),s=s(),H(),s),_s={class:"container"},ms=fs(()=>v("div",{class:"aside-curtain"},null,-1)),bs={class:"aside-container"},ks={class:"aside-content"},$s={class:"content"},gs={class:"content-container"},ys={class:"main"},Ps=_({__name:"VPDoc",setup(s){const{theme:e}=L(),t=se(),{hasSidebar:o,hasAside:n,leftAside:r}=U(),l=g(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(d,h)=>{const k=R("Content");return a(),u("div",{class:N(["VPDoc",{"has-sidebar":i(o),"has-aside":i(n)}])},[c(d.$slots,"doc-top",{},void 0,!0),v("div",_s,[i(n)?(a(),u("div",{key:0,class:N(["aside",{"left-aside":i(r)}])},[ms,v("div",bs,[v("div",ks,[b(qt,null,{"aside-top":p(()=>[c(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[c(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[c(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[c(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[c(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[c(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),v("div",$s,[v("div",gs,[c(d.$slots,"doc-before",{},void 0,!0),v("main",ys,[b(k,{class:N(["vp-doc",[l.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),b(hs,null,{"doc-footer-before":p(()=>[c(d.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(d.$slots,"doc-after",{},void 0,!0)])])]),c(d.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Ss=$(Ps,[["__scopeId","data-v-83890dd9"]]),Vs=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(s){const e=s,t=g(()=>e.href&&we.test(e.href)),o=g(()=>e.tag||e.href?"a":"button");return(n,r)=>(a(),P(W(o.value),{class:N(["VPButton",[n.size,n.theme]]),href:n.href?i(me)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:p(()=>[F(w(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),Ls=$(Vs,[["__scopeId","data-v-14206e74"]]),Ts=["src","alt"],ws=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(s){return(e,t)=>{const o=R("VPImage",!0);return e.image?(a(),u(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),u("img",Q({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(he)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Ts)):(a(),u(M,{key:1},[b(o,Q({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),b(o,Q({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),x=$(ws,[["__scopeId","data-v-35a7d0b8"]]),Is=s=>(B("data-v-955009fc"),s=s(),H(),s),Ns={class:"container"},Ms={class:"main"},As={key:0,class:"name"},Cs=["innerHTML"],Bs=["innerHTML"],Hs=["innerHTML"],Es={key:0,class:"actions"},Ds={key:0,class:"image"},Fs={class:"image-container"},Os=Is(()=>v("div",{class:"image-bg"},null,-1)),Us=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(s){const e=J("hero-image-slot-exists");return(t,o)=>(a(),u("div",{class:N(["VPHero",{"has-image":t.image||i(e)}])},[v("div",Ns,[v("div",Ms,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(a(),u("h1",As,[v("span",{innerHTML:t.name,class:"clip"},null,8,Cs)])):f("",!0),t.text?(a(),u("p",{key:1,innerHTML:t.text,class:"text"},null,8,Bs)):f("",!0),t.tagline?(a(),u("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Hs)):f("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",Es,[(a(!0),u(M,null,E(t.actions,n=>(a(),u("div",{key:n.link,class:"action"},[b(Ls,{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))])):f("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||i(e)?(a(),u("div",Ds,[v("div",Fs,[Os,c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),P(x,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),js=$(Us,[["__scopeId","data-v-955009fc"]]),Gs=_({__name:"VPHomeHero",setup(s){const{frontmatter:e}=L();return(t,o)=>i(e).hero?(a(),P(js,{key:0,class:"VPHomeHero",name:i(e).hero.name,text:i(e).hero.text,tagline:i(e).hero.tagline,image:i(e).hero.image,actions:i(e).hero.actions},{"home-hero-info-before":p(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":p(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":p(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":p(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":p(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),zs=s=>(B("data-v-f5e9645b"),s=s(),H(),s),Ks={class:"box"},Rs={key:0,class:"icon"},qs=["innerHTML"],Ws=["innerHTML"],Js=["innerHTML"],Ys={key:4,class:"link-text"},Xs={class:"link-text-value"},Qs=zs(()=>v("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),Zs=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(s){return(e,t)=>(a(),P(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:p(()=>[v("article",Ks,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",Rs,[b(x,{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(),P(x,{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,qs)):f("",!0),v("h2",{class:"title",innerHTML:e.title},null,8,Ws),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,Js)):f("",!0),e.linkText?(a(),u("div",Ys,[v("p",Xs,[F(w(e.linkText)+" ",1),Qs])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),xs=$(Zs,[["__scopeId","data-v-f5e9645b"]]),eo={key:0,class:"VPFeatures"},to={class:"container"},so={class:"items"},oo=_({__name:"VPFeatures",props:{features:{}},setup(s){const e=s,t=g(()=>{const o=e.features.length;if(o){if(o===2)return"grid-2";if(o===3)return"grid-3";if(o%3===0)return"grid-6";if(o>3)return"grid-4"}else return});return(o,n)=>o.features?(a(),u("div",eo,[v("div",to,[v("div",so,[(a(!0),u(M,null,E(o.features,r=>(a(),u("div",{key:r.title,class:N(["item",[t.value]])},[b(xs,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),no=$(oo,[["__scopeId","data-v-d0a190d7"]]),ao=_({__name:"VPHomeFeatures",setup(s){const{frontmatter:e}=L();return(t,o)=>i(e).features?(a(),P(no,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):f("",!0)}}),ro=_({__name:"VPHomeContent",setup(s){const{width:e}=xe({includeScrollbar:!1});return(t,o)=>(a(),u("div",{class:"vp-doc container",style:Ie(i(e)?{"--vp-offset":`calc(50% - ${i(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),io=$(ro,[["__scopeId","data-v-c43247eb"]]),lo={class:"VPHome"},co=_({__name:"VPHome",setup(s){const{frontmatter:e}=L();return(t,o)=>{const n=R("Content");return a(),u("div",lo,[c(t.$slots,"home-hero-before",{},void 0,!0),b(Gs,null,{"home-hero-info-before":p(()=>[c(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[c(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[c(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[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),b(ao),c(t.$slots,"home-features-after",{},void 0,!0),i(e).markdownStyles!==!1?(a(),P(io,{key:0},{default:p(()=>[b(n)]),_:1})):(a(),P(n,{key:1}))])}}}),uo=$(co,[["__scopeId","data-v-cbb6ec48"]]),vo={},po={class:"VPPage"};function ho(s,e){const t=R("Content");return a(),u("div",po,[c(s.$slots,"page-top"),b(t),c(s.$slots,"page-bottom")])}const fo=$(vo,[["render",ho]]),_o=_({__name:"VPContent",setup(s){const{page:e,frontmatter:t}=L(),{hasSidebar:o}=U();return(n,r)=>(a(),u("div",{class:N(["VPContent",{"has-sidebar":i(o),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?c(n.$slots,"not-found",{key:0},()=>[b(St)],!0):i(t).layout==="page"?(a(),P(fo,{key:1},{"page-top":p(()=>[c(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[c(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(a(),P(uo,{key:2},{"home-hero-before":p(()=>[c(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":p(()=>[c(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[c(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[c(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[c(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[c(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[c(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[c(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(a(),P(W(i(t).layout),{key:3})):(a(),P(Ss,{key:4},{"doc-top":p(()=>[c(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[c(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":p(()=>[c(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[c(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[c(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":p(()=>[c(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":p(()=>[c(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[c(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[c(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[c(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":p(()=>[c(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),mo=$(_o,[["__scopeId","data-v-91765379"]]),bo={class:"container"},ko=["innerHTML"],$o=["innerHTML"],go=_({__name:"VPFooter",setup(s){const{theme:e,frontmatter:t}=L(),{hasSidebar:o}=U();return(n,r)=>i(e).footer&&i(t).footer!==!1?(a(),u("footer",{key:0,class:N(["VPFooter",{"has-sidebar":i(o)}])},[v("div",bo,[i(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,ko)):f("",!0),i(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,$o)):f("",!0)])],2)):f("",!0)}}),yo=$(go,[["__scopeId","data-v-c970a860"]]);function Po(){const{theme:s,frontmatter:e}=L(),t=Te([]),o=g(()=>t.value.length>0);return te(()=>{t.value=be(e.value.outline??s.value.outline)}),{headers:t,hasLocalNav:o}}const So=s=>(B("data-v-bc9dc845"),s=s(),H(),s),Vo={class:"menu-text"},Lo=So(()=>v("span",{class:"vpi-chevron-right icon"},null,-1)),To={class:"header"},wo={class:"outline"},Io=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(s){const e=s,{theme:t}=L(),o=I(!1),n=I(0),r=I(),l=I();function d(m){var S;(S=r.value)!=null&&S.contains(m.target)||(o.value=!1)}O(o,m=>{if(m){document.addEventListener("click",d);return}document.removeEventListener("click",d)}),ce("Escape",()=>{o.value=!1}),te(()=>{o.value=!1});function h(){o.value=!o.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function k(m){m.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Ne(()=>{o.value=!1}))}function y(){o.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(m,S)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:Ie({"--vp-vh":n.value+"px"}),ref_key:"main",ref:r},[m.headers.length>0?(a(),u("button",{key:0,onClick:h,class:N({open:o.value})},[v("span",Vo,w(i(He)(i(t))),1),Lo],2)):(a(),u("button",{key:1,onClick:y},w(i(t).returnToTopLabel||"Return to top"),1)),b(pe,{name:"flyout"},{default:p(()=>[o.value?(a(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:k},[v("div",To,[v("a",{class:"top-link",href:"#",onClick:y},w(i(t).returnToTopLabel||"Return to top"),1)]),v("div",wo,[b(Ee,{headers:m.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),No=$(Io,[["__scopeId","data-v-bc9dc845"]]),Mo=s=>(B("data-v-070ab83d"),s=s(),H(),s),Ao={class:"container"},Co=["aria-expanded"],Bo=Mo(()=>v("span",{class:"vpi-align-left menu-icon"},null,-1)),Ho={class:"menu-text"},Eo=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(s){const{theme:e,frontmatter:t}=L(),{hasSidebar:o}=U(),{headers:n}=Po(),{y:r}=Me(),l=I(0);z(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),te(()=>{n.value=be(t.value.outline??e.value.outline)});const d=g(()=>n.value.length===0),h=g(()=>d.value&&!o.value),k=g(()=>({VPLocalNav:!0,"has-sidebar":o.value,empty:d.value,fixed:h.value}));return(y,m)=>i(t).layout!=="home"&&(!h.value||i(r)>=l.value)?(a(),u("div",{key:0,class:N(k.value)},[v("div",Ao,[i(o)?(a(),u("button",{key:0,class:"menu","aria-expanded":y.open,"aria-controls":"VPSidebarNav",onClick:m[0]||(m[0]=S=>y.$emit("open-menu"))},[Bo,v("span",Ho,w(i(e).sidebarMenuLabel||"Menu"),1)],8,Co)):f("",!0),b(No,{headers:i(n),navHeight:l.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),Do=$(Eo,[["__scopeId","data-v-070ab83d"]]);function Fo(){const s=I(!1);function e(){s.value=!0,window.addEventListener("resize",n)}function t(){s.value=!1,window.removeEventListener("resize",n)}function o(){s.value?t():e()}function n(){window.outerWidth>=768&&t()}const r=se();return O(()=>r.path,t),{isScreenOpen:s,openScreen:e,closeScreen:t,toggleScreen:o}}const Oo={},Uo={class:"VPSwitch",type:"button",role:"switch"},jo={class:"check"},Go={key:0,class:"icon"};function zo(s,e){return a(),u("button",Uo,[v("span",jo,[s.$slots.default?(a(),u("span",Go,[c(s.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Ko=$(Oo,[["render",zo],["__scopeId","data-v-4a1c76db"]]),Fe=s=>(B("data-v-b79b56d4"),s=s(),H(),s),Ro=Fe(()=>v("span",{class:"vpi-sun sun"},null,-1)),qo=Fe(()=>v("span",{class:"vpi-moon moon"},null,-1)),Wo=_({__name:"VPSwitchAppearance",setup(s){const{isDark:e,theme:t}=L(),o=J("toggle-appearance",()=>{e.value=!e.value}),n=g(()=>e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme");return(r,l)=>(a(),P(Ko,{title:n.value,class:"VPSwitchAppearance","aria-checked":i(e),onClick:i(o)},{default:p(()=>[Ro,qo]),_:1},8,["title","aria-checked","onClick"]))}}),ke=$(Wo,[["__scopeId","data-v-b79b56d4"]]),Jo={key:0,class:"VPNavBarAppearance"},Yo=_({__name:"VPNavBarAppearance",setup(s){const{site:e}=L();return(t,o)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),u("div",Jo,[b(ke)])):f("",!0)}}),Xo=$(Yo,[["__scopeId","data-v-ead91a81"]]),$e=I();let Oe=!1,ie=0;function Qo(s){const e=I(!1);if(oe){!Oe&&Zo(),ie++;const t=O($e,o=>{var n,r,l;o===s.el.value||(n=s.el.value)!=null&&n.contains(o)?(e.value=!0,(r=s.onFocus)==null||r.call(s)):(e.value=!1,(l=s.onBlur)==null||l.call(s))});fe(()=>{t(),ie--,ie||xo()})}return et(e)}function Zo(){document.addEventListener("focusin",Ue),Oe=!0,$e.value=document.activeElement}function xo(){document.removeEventListener("focusin",Ue)}function Ue(){$e.value=document.activeElement}const en={class:"VPMenuLink"},tn=_({__name:"VPMenuLink",props:{item:{}},setup(s){const{page:e}=L();return(t,o)=>(a(),u("div",en,[b(D,{class:N({active:i(K)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:p(()=>[F(w(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),ne=$(tn,[["__scopeId","data-v-8b74d055"]]),sn={class:"VPMenuGroup"},on={key:0,class:"title"},nn=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),u("div",sn,[e.text?(a(),u("p",on,w(e.text),1)):f("",!0),(a(!0),u(M,null,E(e.items,o=>(a(),u(M,null,["link"in o?(a(),P(ne,{key:0,item:o},null,8,["item"])):f("",!0)],64))),256))]))}}),an=$(nn,[["__scopeId","data-v-48c802d0"]]),rn={class:"VPMenu"},ln={key:0,class:"items"},cn=_({__name:"VPMenu",props:{items:{}},setup(s){return(e,t)=>(a(),u("div",rn,[e.items?(a(),u("div",ln,[(a(!0),u(M,null,E(e.items,o=>(a(),u(M,{key:o.text},["link"in o?(a(),P(ne,{key:0,item:o},null,8,["item"])):(a(),P(an,{key:1,text:o.text,items:o.items},null,8,["text","items"]))],64))),128))])):f("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),un=$(cn,[["__scopeId","data-v-97491713"]]),dn=s=>(B("data-v-e5380155"),s=s(),H(),s),vn=["aria-expanded","aria-label"],pn={key:0,class:"text"},hn=["innerHTML"],fn=dn(()=>v("span",{class:"vpi-chevron-down text-icon"},null,-1)),_n={key:1,class:"vpi-more-horizontal icon"},mn={class:"menu"},bn=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(s){const e=I(!1),t=I();Qo({el:t,onBlur:o});function o(){e.value=!1}return(n,r)=>(a(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=l=>e.value=!0),onMouseleave:r[2]||(r[2]=l=>e.value=!1)},[v("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:r[0]||(r[0]=l=>e.value=!e.value)},[n.button||n.icon?(a(),u("span",pn,[n.icon?(a(),u("span",{key:0,class:N([n.icon,"option-icon"])},null,2)):f("",!0),n.button?(a(),u("span",{key:1,innerHTML:n.button},null,8,hn)):f("",!0),fn])):(a(),u("span",_n))],8,vn),v("div",mn,[b(un,{items:n.items},{default:p(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ge=$(bn,[["__scopeId","data-v-e5380155"]]),kn=["href","aria-label","innerHTML"],$n=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(s){const e=s,t=g(()=>typeof e.icon=="object"?e.icon.svg:``);return(o,n)=>(a(),u("a",{class:"VPSocialLink no-icon",href:o.link,"aria-label":o.ariaLabel??(typeof o.icon=="string"?o.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,kn))}}),gn=$($n,[["__scopeId","data-v-717b8b75"]]),yn={class:"VPSocialLinks"},Pn=_({__name:"VPSocialLinks",props:{links:{}},setup(s){return(e,t)=>(a(),u("div",yn,[(a(!0),u(M,null,E(e.links,({link:o,icon:n,ariaLabel:r})=>(a(),P(gn,{key:o,icon:n,link:o,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),ye=$(Pn,[["__scopeId","data-v-ee7a9424"]]),Sn={key:0,class:"group translations"},Vn={class:"trans-title"},Ln={key:1,class:"group"},Tn={class:"item appearance"},wn={class:"label"},In={class:"appearance-action"},Nn={key:2,class:"group"},Mn={class:"item social-links"},An=_({__name:"VPNavBarExtra",setup(s){const{site:e,theme:t}=L(),{localeLinks:o,currentLang:n}=X({correspondingLink:!0}),r=g(()=>o.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(l,d)=>r.value?(a(),P(ge,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:p(()=>[i(o).length&&i(n).label?(a(),u("div",Sn,[v("p",Vn,w(i(n).label),1),(a(!0),u(M,null,E(i(o),h=>(a(),P(ne,{key:h.link,item:h},null,8,["item"]))),128))])):f("",!0),i(e).appearance&&i(e).appearance!=="force-dark"?(a(),u("div",Ln,[v("div",Tn,[v("p",wn,w(i(t).darkModeSwitchLabel||"Appearance"),1),v("div",In,[b(ke)])])])):f("",!0),i(t).socialLinks?(a(),u("div",Nn,[v("div",Mn,[b(ye,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),Cn=$(An,[["__scopeId","data-v-9b536d0b"]]),Bn=s=>(B("data-v-5dea55bf"),s=s(),H(),s),Hn=["aria-expanded"],En=Bn(()=>v("span",{class:"container"},[v("span",{class:"top"}),v("span",{class:"middle"}),v("span",{class:"bottom"})],-1)),Dn=[En],Fn=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(s){return(e,t)=>(a(),u("button",{type:"button",class:N(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=o=>e.$emit("click"))},Dn,10,Hn))}}),On=$(Fn,[["__scopeId","data-v-5dea55bf"]]),Un=["innerHTML"],jn=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(s){const{page:e}=L();return(t,o)=>(a(),P(D,{class:N({VPNavBarMenuLink:!0,active:i(K)(i(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:p(()=>[v("span",{innerHTML:t.item.text},null,8,Un)]),_:1},8,["class","href","noIcon","target","rel"]))}}),Gn=$(jn,[["__scopeId","data-v-ed5ac1f6"]]),zn=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(s){const e=s,{page:t}=L(),o=r=>"link"in r?K(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(o),n=g(()=>o(e.item));return(r,l)=>(a(),P(ge,{class:N({VPNavBarMenuGroup:!0,active:i(K)(i(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||n.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),Kn=s=>(B("data-v-492ea56d"),s=s(),H(),s),Rn={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},qn=Kn(()=>v("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Wn=_({__name:"VPNavBarMenu",setup(s){const{theme:e}=L();return(t,o)=>i(e).nav?(a(),u("nav",Rn,[qn,(a(!0),u(M,null,E(i(e).nav,n=>(a(),u(M,{key:n.text},["link"in n?(a(),P(Gn,{key:0,item:n},null,8,["item"])):(a(),P(zn,{key:1,item:n},null,8,["item"]))],64))),128))])):f("",!0)}}),Jn=$(Wn,[["__scopeId","data-v-492ea56d"]]);function Yn(s){const{localeIndex:e,theme:t}=L();function o(n){var A,C,T;const r=n.split("."),l=(A=t.value.search)==null?void 0:A.options,d=l&&typeof l=="object",h=d&&((T=(C=l.locales)==null?void 0:C[e.value])==null?void 0:T.translations)||null,k=d&&l.translations||null;let y=h,m=k,S=s;const V=r.pop();for(const j of r){let G=null;const q=S==null?void 0:S[j];q&&(G=S=q);const ae=m==null?void 0:m[j];ae&&(G=m=ae);const re=y==null?void 0:y[j];re&&(G=y=re),q||(S=G),ae||(m=G),re||(y=G)}return(y==null?void 0:y[V])??(m==null?void 0:m[V])??(S==null?void 0:S[V])??""}return o}const Xn=["aria-label"],Qn={class:"DocSearch-Button-Container"},Zn=v("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),xn={class:"DocSearch-Button-Placeholder"},ea=v("span",{class:"DocSearch-Button-Keys"},[v("kbd",{class:"DocSearch-Button-Key"}),v("kbd",{class:"DocSearch-Button-Key"},"K")],-1),Pe=_({__name:"VPNavBarSearchButton",setup(s){const t=Yn({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(o,n)=>(a(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(t)("button.buttonAriaLabel")},[v("span",Qn,[Zn,v("span",xn,w(i(t)("button.buttonText")),1)]),ea],8,Xn))}}),ta={class:"VPNavBarSearch"},sa={id:"local-search"},oa={key:1,id:"docsearch"},na=_({__name:"VPNavBarSearch",setup(s){const e=tt(()=>st(()=>import("./VPLocalSearchBox.CMLVlh7q.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:o}=L(),n=I(!1),r=I(!1);z(()=>{});function l(){n.value||(n.value=!0,setTimeout(d,16))}function d(){const m=new Event("keydown");m.key="k",m.metaKey=!0,window.dispatchEvent(m),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||d()},16)}function h(m){const S=m.target,V=S.tagName;return S.isContentEditable||V==="INPUT"||V==="SELECT"||V==="TEXTAREA"}const k=I(!1);ce("k",m=>{(m.ctrlKey||m.metaKey)&&(m.preventDefault(),k.value=!0)}),ce("/",m=>{h(m)||(m.preventDefault(),k.value=!0)});const y="local";return(m,S)=>{var V;return a(),u("div",ta,[i(y)==="local"?(a(),u(M,{key:0},[k.value?(a(),P(i(e),{key:0,onClose:S[0]||(S[0]=A=>k.value=!1)})):f("",!0),v("div",sa,[b(Pe,{onClick:S[1]||(S[1]=A=>k.value=!0)})])],64)):i(y)==="algolia"?(a(),u(M,{key:1},[n.value?(a(),P(i(t),{key:0,algolia:((V=i(o).search)==null?void 0:V.options)??i(o).algolia,onVnodeBeforeMount:S[2]||(S[2]=A=>r.value=!0)},null,8,["algolia"])):f("",!0),r.value?f("",!0):(a(),u("div",oa,[b(Pe,{onClick:l})]))],64)):f("",!0)])}}}),aa=_({__name:"VPNavBarSocialLinks",setup(s){const{theme:e}=L();return(t,o)=>i(e).socialLinks?(a(),P(ye,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),ra=$(aa,[["__scopeId","data-v-164c457f"]]),ia=["href","rel","target"],la={key:1},ca={key:2},ua=_({__name:"VPNavBarTitle",setup(s){const{site:e,theme:t}=L(),{hasSidebar:o}=U(),{currentLang:n}=X(),r=g(()=>{var h;return typeof t.value.logoLink=="string"?t.value.logoLink:(h=t.value.logoLink)==null?void 0:h.link}),l=g(()=>{var h;return typeof t.value.logoLink=="string"||(h=t.value.logoLink)==null?void 0:h.rel}),d=g(()=>{var h;return typeof t.value.logoLink=="string"||(h=t.value.logoLink)==null?void 0:h.target});return(h,k)=>(a(),u("div",{class:N(["VPNavBarTitle",{"has-sidebar":i(o)}])},[v("a",{class:"title",href:r.value??i(me)(i(n).link),rel:l.value,target:d.value},[c(h.$slots,"nav-bar-title-before",{},void 0,!0),i(t).logo?(a(),P(x,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):f("",!0),i(t).siteTitle?(a(),u("span",la,w(i(t).siteTitle),1)):i(t).siteTitle===void 0?(a(),u("span",ca,w(i(e).title),1)):f("",!0),c(h.$slots,"nav-bar-title-after",{},void 0,!0)],8,ia)],2))}}),da=$(ua,[["__scopeId","data-v-28a961f9"]]),va={class:"items"},pa={class:"title"},ha=_({__name:"VPNavBarTranslations",setup(s){const{theme:e}=L(),{localeLinks:t,currentLang:o}=X({correspondingLink:!0});return(n,r)=>i(t).length&&i(o).label?(a(),P(ge,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(e).langMenuLabel||"Change language"},{default:p(()=>[v("div",va,[v("p",pa,w(i(o).label),1),(a(!0),u(M,null,E(i(t),l=>(a(),P(ne,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),fa=$(ha,[["__scopeId","data-v-c80d9ad0"]]),_a=s=>(B("data-v-40788ea0"),s=s(),H(),s),ma={class:"wrapper"},ba={class:"container"},ka={class:"title"},$a={class:"content"},ga={class:"content-body"},ya=_a(()=>v("div",{class:"divider"},[v("div",{class:"divider-line"})],-1)),Pa=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(s){const{y:e}=Me(),{hasSidebar:t}=U(),{frontmatter:o}=L(),n=I({});return Le(()=>{n.value={"has-sidebar":t.value,home:o.value.layout==="home",top:e.value===0}}),(r,l)=>(a(),u("div",{class:N(["VPNavBar",n.value])},[v("div",ma,[v("div",ba,[v("div",ka,[b(da,null,{"nav-bar-title-before":p(()=>[c(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[c(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),v("div",$a,[v("div",ga,[c(r.$slots,"nav-bar-content-before",{},void 0,!0),b(na,{class:"search"}),b(Jn,{class:"menu"}),b(fa,{class:"translations"}),b(Xo,{class:"appearance"}),b(ra,{class:"social-links"}),b(Cn,{class:"extra"}),c(r.$slots,"nav-bar-content-after",{},void 0,!0),b(On,{class:"hamburger",active:r.isScreenOpen,onClick:l[0]||(l[0]=d=>r.$emit("toggle-screen"))},null,8,["active"])])])])]),ya],2))}}),Sa=$(Pa,[["__scopeId","data-v-40788ea0"]]),Va={key:0,class:"VPNavScreenAppearance"},La={class:"text"},Ta=_({__name:"VPNavScreenAppearance",setup(s){const{site:e,theme:t}=L();return(o,n)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),u("div",Va,[v("p",La,w(i(t).darkModeSwitchLabel||"Appearance"),1),b(ke)])):f("",!0)}}),wa=$(Ta,[["__scopeId","data-v-2b89f08b"]]),Ia=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(s){const e=J("close-screen");return(t,o)=>(a(),P(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),Na=$(Ia,[["__scopeId","data-v-27d04aeb"]]),Ma=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(s){const e=J("close-screen");return(t,o)=>(a(),P(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:p(()=>[F(w(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),je=$(Ma,[["__scopeId","data-v-7179dbb7"]]),Aa={class:"VPNavScreenMenuGroupSection"},Ca={key:0,class:"title"},Ba=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),u("div",Aa,[e.text?(a(),u("p",Ca,w(e.text),1)):f("",!0),(a(!0),u(M,null,E(e.items,o=>(a(),P(je,{key:o.text,item:o},null,8,["item"]))),128))]))}}),Ha=$(Ba,[["__scopeId","data-v-4b8941ac"]]),Ea=s=>(B("data-v-c9df2649"),s=s(),H(),s),Da=["aria-controls","aria-expanded"],Fa=["innerHTML"],Oa=Ea(()=>v("span",{class:"vpi-plus button-icon"},null,-1)),Ua=["id"],ja={key:1,class:"group"},Ga=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(s){const e=s,t=I(!1),o=g(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(r,l)=>(a(),u("div",{class:N(["VPNavScreenMenuGroup",{open:t.value}])},[v("button",{class:"button","aria-controls":o.value,"aria-expanded":t.value,onClick:n},[v("span",{class:"button-text",innerHTML:r.text},null,8,Fa),Oa],8,Da),v("div",{id:o.value,class:"items"},[(a(!0),u(M,null,E(r.items,d=>(a(),u(M,{key:d.text},["link"in d?(a(),u("div",{key:d.text,class:"item"},[b(je,{item:d},null,8,["item"])])):(a(),u("div",ja,[b(Ha,{text:d.text,items:d.items},null,8,["text","items"])]))],64))),128))],8,Ua)],2))}}),za=$(Ga,[["__scopeId","data-v-c9df2649"]]),Ka={key:0,class:"VPNavScreenMenu"},Ra=_({__name:"VPNavScreenMenu",setup(s){const{theme:e}=L();return(t,o)=>i(e).nav?(a(),u("nav",Ka,[(a(!0),u(M,null,E(i(e).nav,n=>(a(),u(M,{key:n.text},["link"in n?(a(),P(Na,{key:0,item:n},null,8,["item"])):(a(),P(za,{key:1,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),qa=_({__name:"VPNavScreenSocialLinks",setup(s){const{theme:e}=L();return(t,o)=>i(e).socialLinks?(a(),P(ye,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),Ge=s=>(B("data-v-362991c2"),s=s(),H(),s),Wa=Ge(()=>v("span",{class:"vpi-languages icon lang"},null,-1)),Ja=Ge(()=>v("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Ya={class:"list"},Xa=_({__name:"VPNavScreenTranslations",setup(s){const{localeLinks:e,currentLang:t}=X({correspondingLink:!0}),o=I(!1);function n(){o.value=!o.value}return(r,l)=>i(e).length&&i(t).label?(a(),u("div",{key:0,class:N(["VPNavScreenTranslations",{open:o.value}])},[v("button",{class:"title",onClick:n},[Wa,F(" "+w(i(t).label)+" ",1),Ja]),v("ul",Ya,[(a(!0),u(M,null,E(i(e),d=>(a(),u("li",{key:d.link,class:"item"},[b(D,{class:"link",href:d.link},{default:p(()=>[F(w(d.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),Qa=$(Xa,[["__scopeId","data-v-362991c2"]]),Za={class:"container"},xa=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(s){const e=I(null),t=Ae(oe?document.body:null);return(o,n)=>(a(),P(pe,{name:"fade",onEnter:n[0]||(n[0]=r=>t.value=!0),onAfterLeave:n[1]||(n[1]=r=>t.value=!1)},{default:p(()=>[o.open?(a(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[v("div",Za,[c(o.$slots,"nav-screen-content-before",{},void 0,!0),b(Ra,{class:"menu"}),b(Qa,{class:"translations"}),b(wa,{class:"appearance"}),b(qa,{class:"social-links"}),c(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),er=$(xa,[["__scopeId","data-v-382f42e9"]]),tr={key:0,class:"VPNav"},sr=_({__name:"VPNav",setup(s){const{isScreenOpen:e,closeScreen:t,toggleScreen:o}=Fo(),{frontmatter:n}=L(),r=g(()=>n.value.navbar!==!1);return _e("close-screen",t),ee(()=>{oe&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(l,d)=>r.value?(a(),u("header",tr,[b(Sa,{"is-screen-open":i(e),onToggleScreen:i(o)},{"nav-bar-title-before":p(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),b(er,{open:i(e)},{"nav-screen-content-before":p(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),or=$(sr,[["__scopeId","data-v-f1e365da"]]),ze=s=>(B("data-v-2ea20db7"),s=s(),H(),s),nr=["role","tabindex"],ar=ze(()=>v("div",{class:"indicator"},null,-1)),rr=ze(()=>v("span",{class:"vpi-chevron-right caret-icon"},null,-1)),ir=[rr],lr={key:1,class:"items"},cr=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(s){const e=s,{collapsed:t,collapsible:o,isLink:n,isActiveLink:r,hasActiveLink:l,hasChildren:d,toggle:h}=wt(g(()=>e.item)),k=g(()=>d.value?"section":"div"),y=g(()=>n.value?"a":"div"),m=g(()=>d.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),S=g(()=>n.value?void 0:"button"),V=g(()=>[[`level-${e.depth}`],{collapsible:o.value},{collapsed:t.value},{"is-link":n.value},{"is-active":r.value},{"has-active":l.value}]);function A(T){"key"in T&&T.key!=="Enter"||!e.item.link&&h()}function C(){e.item.link&&h()}return(T,j)=>{const G=R("VPSidebarItem",!0);return a(),P(W(k.value),{class:N(["VPSidebarItem",V.value])},{default:p(()=>[T.item.text?(a(),u("div",Q({key:0,class:"item",role:S.value},nt(T.item.items?{click:A,keydown:A}:{},!0),{tabindex:T.item.items&&0}),[ar,T.item.link?(a(),P(D,{key:0,tag:y.value,class:"link",href:T.item.link,rel:T.item.rel,target:T.item.target},{default:p(()=>[(a(),P(W(m.value),{class:"text",innerHTML:T.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),P(W(m.value),{key:1,class:"text",innerHTML:T.item.text},null,8,["innerHTML"])),T.item.collapsed!=null&&T.item.items&&T.item.items.length?(a(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:ot(C,["enter"]),tabindex:"0"},ir,32)):f("",!0)],16,nr)):f("",!0),T.item.items&&T.item.items.length?(a(),u("div",lr,[T.depth<5?(a(!0),u(M,{key:0},E(T.item.items,q=>(a(),P(G,{key:q.text,item:q,depth:T.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),ur=$(cr,[["__scopeId","data-v-2ea20db7"]]),Ke=s=>(B("data-v-ec846e01"),s=s(),H(),s),dr=Ke(()=>v("div",{class:"curtain"},null,-1)),vr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},pr=Ke(()=>v("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),hr=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(s){const{sidebarGroups:e,hasSidebar:t}=U(),o=s,n=I(null),r=Ae(oe?document.body:null);return O([o,n],()=>{var l;o.open?(r.value=!0,(l=n.value)==null||l.focus()):r.value=!1},{immediate:!0,flush:"post"}),(l,d)=>i(t)?(a(),u("aside",{key:0,class:N(["VPSidebar",{open:l.open}]),ref_key:"navEl",ref:n,onClick:d[0]||(d[0]=at(()=>{},["stop"]))},[dr,v("nav",vr,[pr,c(l.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),u(M,null,E(i(e),h=>(a(),u("div",{key:h.text,class:"group"},[b(ur,{item:h,depth:0},null,8,["item"])]))),128)),c(l.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),fr=$(hr,[["__scopeId","data-v-ec846e01"]]),_r=_({__name:"VPSkipLink",setup(s){const e=se(),t=I();O(()=>e.path,()=>t.value.focus());function o({target:n}){const r=document.getElementById(decodeURIComponent(n.hash).slice(1));if(r){const l=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",l)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",l),r.focus(),window.scrollTo(0,0)}}return(n,r)=>(a(),u(M,null,[v("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),v("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o}," Skip to content ")],64))}}),mr=$(_r,[["__scopeId","data-v-c3508ec8"]]),br=_({__name:"Layout",setup(s){const{isOpen:e,open:t,close:o}=U(),n=se();O(()=>n.path,o),Tt(e,o);const{frontmatter:r}=L(),l=Ce(),d=g(()=>!!l["home-hero-image"]);return _e("hero-image-slot-exists",d),(h,k)=>{const y=R("Content");return i(r).layout!==!1?(a(),u("div",{key:0,class:N(["Layout",i(r).pageClass])},[c(h.$slots,"layout-top",{},void 0,!0),b(mr),b(vt,{class:"backdrop",show:i(e),onClick:i(o)},null,8,["show","onClick"]),b(or,null,{"nav-bar-title-before":p(()=>[c(h.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[c(h.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[c(h.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[c(h.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":p(()=>[c(h.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[c(h.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),b(Do,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),b(fr,{open:i(e)},{"sidebar-nav-before":p(()=>[c(h.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":p(()=>[c(h.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),b(mo,null,{"page-top":p(()=>[c(h.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[c(h.$slots,"page-bottom",{},void 0,!0)]),"not-found":p(()=>[c(h.$slots,"not-found",{},void 0,!0)]),"home-hero-before":p(()=>[c(h.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":p(()=>[c(h.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[c(h.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[c(h.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[c(h.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[c(h.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[c(h.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[c(h.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[c(h.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":p(()=>[c(h.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[c(h.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[c(h.$slots,"doc-after",{},void 0,!0)]),"doc-top":p(()=>[c(h.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[c(h.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":p(()=>[c(h.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[c(h.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[c(h.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[c(h.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[c(h.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[c(h.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),b(yo),c(h.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),P(y,{key:1}))}}}),kr=$(br,[["__scopeId","data-v-a9a9e638"]]),Se={Layout:kr,enhanceApp:({app:s})=>{s.component("Badge",ct)}},$r=s=>{if(typeof document>"u")return{stabilizeScrollPosition:n=>async(...r)=>n(...r)};const e=document.documentElement;return{stabilizeScrollPosition:o=>async(...n)=>{const r=o(...n),l=s.value;if(!l)return r;const d=l.offsetTop-e.scrollTop;return await Ne(),e.scrollTop=l.offsetTop-d,r}}},Re="vitepress:tabSharedState",Y=typeof localStorage<"u"?localStorage:null,qe="vitepress:tabsSharedState",gr=()=>{const s=Y==null?void 0:Y.getItem(qe);if(s)try{return JSON.parse(s)}catch{}return{}},yr=s=>{Y&&Y.setItem(qe,JSON.stringify(s))},Pr=s=>{const e=rt({});O(()=>e.content,(t,o)=>{t&&o&&yr(t)},{deep:!0}),s.provide(Re,e)},Sr=(s,e)=>{const t=J(Re);if(!t)throw new Error("[vitepress-plugin-tabs] TabsSharedState should be injected");z(()=>{t.content||(t.content=gr())});const o=I(),n=g({get(){var h;const l=e.value,d=s.value;if(l){const k=(h=t.content)==null?void 0:h[l];if(k&&d.includes(k))return k}else{const k=o.value;if(k)return k}return d[0]},set(l){const d=e.value;d?t.content&&(t.content[d]=l):o.value=l}});return{selected:n,select:l=>{n.value=l}}};let Ve=0;const Vr=()=>(Ve++,""+Ve);function Lr(){const s=Ce();return g(()=>{var o;const t=(o=s.default)==null?void 0:o.call(s);return t?t.filter(n=>typeof n.type=="object"&&"__name"in n.type&&n.type.__name==="PluginTabsTab"&&n.props).map(n=>{var r;return(r=n.props)==null?void 0:r.label}):[]})}const We="vitepress:tabSingleState",Tr=s=>{_e(We,s)},wr=()=>{const s=J(We);if(!s)throw new Error("[vitepress-plugin-tabs] TabsSingleState should be injected");return s},Ir={class:"plugin-tabs"},Nr=["id","aria-selected","aria-controls","tabindex","onClick"],Mr=_({__name:"PluginTabs",props:{sharedStateKey:{}},setup(s){const e=s,t=Lr(),{selected:o,select:n}=Sr(t,it(e,"sharedStateKey")),r=I(),{stabilizeScrollPosition:l}=$r(r),d=l(n),h=I([]),k=m=>{var A;const S=t.value.indexOf(o.value);let V;m.key==="ArrowLeft"?V=S>=1?S-1:t.value.length-1:m.key==="ArrowRight"&&(V=S(a(),u("div",Ir,[v("div",{ref_key:"tablist",ref:r,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:k},[(a(!0),u(M,null,E(i(t),V=>(a(),u("button",{id:`tab-${V}-${i(y)}`,ref_for:!0,ref_key:"buttonRefs",ref:h,key:V,role:"tab",class:"plugin-tabs--tab","aria-selected":V===i(o),"aria-controls":`panel-${V}-${i(y)}`,tabindex:V===i(o)?0:-1,onClick:()=>i(d)(V)},w(V),9,Nr))),128))],544),c(m.$slots,"default")]))}}),Ar=["id","aria-labelledby"],Cr=_({__name:"PluginTabsTab",props:{label:{}},setup(s){const{uid:e,selected:t}=wr();return(o,n)=>i(t)===o.label?(a(),u("div",{key:0,id:`panel-${o.label}-${i(e)}`,class:"plugin-tabs--content",role:"tabpanel",tabindex:"0","aria-labelledby":`tab-${o.label}-${i(e)}`},[c(o.$slots,"default",{},void 0,!0)],8,Ar)):f("",!0)}}),Br=$(Cr,[["__scopeId","data-v-9b0d03d2"]]),Hr=s=>{Pr(s),s.component("PluginTabs",Mr),s.component("PluginTabsTab",Br)},Dr={extends:Se,Layout(){return lt(Se.Layout,null,{})},enhanceApp({app:s,router:e,siteData:t}){Hr(s)}};export{Dr as R,Yn as c,L as u}; diff --git a/previews/PR132/assets/ciggpmu.aNgfNHzl.png b/previews/PR132/assets/ciggpmu.aNgfNHzl.png deleted file mode 100644 index 83f148d33..000000000 Binary files a/previews/PR132/assets/ciggpmu.aNgfNHzl.png and /dev/null differ diff --git a/previews/PR132/assets/txlsvit.BwVBXAhv.png b/previews/PR132/assets/cqezpue.BwVBXAhv.png similarity index 100% rename from previews/PR132/assets/txlsvit.BwVBXAhv.png rename to previews/PR132/assets/cqezpue.BwVBXAhv.png diff --git a/previews/PR132/assets/aurovnq.CNHhYFWU.png b/previews/PR132/assets/dpgyjwc.CNHhYFWU.png similarity index 100% rename from previews/PR132/assets/aurovnq.CNHhYFWU.png rename to previews/PR132/assets/dpgyjwc.CNHhYFWU.png diff --git a/previews/PR132/assets/mzcgfew.Cf1QgLcf.png b/previews/PR132/assets/eangekg.Cf1QgLcf.png similarity index 100% rename from previews/PR132/assets/mzcgfew.Cf1QgLcf.png rename to previews/PR132/assets/eangekg.Cf1QgLcf.png diff --git a/previews/PR132/assets/erxvjzp.BuPE59Tj.png b/previews/PR132/assets/erxvjzp.BuPE59Tj.png new file mode 100644 index 000000000..3402f812c Binary files /dev/null and b/previews/PR132/assets/erxvjzp.BuPE59Tj.png differ diff --git a/previews/PR132/assets/experiments_predicates.md.BK6umPfB.js b/previews/PR132/assets/experiments_predicates.md.BwuBYXCq.js similarity index 99% rename from previews/PR132/assets/experiments_predicates.md.BK6umPfB.js rename to previews/PR132/assets/experiments_predicates.md.BwuBYXCq.js index e187f6aa4..5ebebcd81 100644 --- a/previews/PR132/assets/experiments_predicates.md.BK6umPfB.js +++ b/previews/PR132/assets/experiments_predicates.md.BwuBYXCq.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a6 as h}from"./chunks/framework.DwyrAfcZ.js";const k="/GeometryOps.jl/previews/PR132/assets/wtuksgq.BW-TtaGG.png",C=JSON.parse('{"title":"Predicates","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/predicates.md","filePath":"experiments/predicates.md","lastUpdated":null}'),n={name:"experiments/predicates.md"},p=h(`

Predicates

Exact vs fast predicates

Orient

julia
using CairoMakie
+import{_ as s,c as i,o as a,a6 as h}from"./chunks/framework.DwyrAfcZ.js";const k="/GeometryOps.jl/previews/PR132/assets/erxvjzp.BuPE59Tj.png",C=JSON.parse('{"title":"Predicates","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/predicates.md","filePath":"experiments/predicates.md","lastUpdated":null}'),n={name:"experiments/predicates.md"},p=h(`

Predicates

Exact vs fast predicates

Orient

julia
using CairoMakie
 import GeometryOps as GO, GeoInterface as GI, LibGEOS as LG
 import ExactPredicates
 using MultiFloats
@@ -95,4 +95,4 @@ import{_ as s,c as i,o as a,a6 as h}from"./chunks/framework.DwyrAfcZ.js";const k
 p__2 = poly!(a, p2; label = "p2")
 
 GO.intersection(p1_m, p2_m; target = GI.PolygonTrait(), fix_multipoly = nothing)
-LG.intersection(p1_m, p2_m)

Incircle

`,10),l=[p];function t(E,e,r,g,d,y){return a(),i("div",null,l)}const D=s(n,[["render",t]]);export{C as __pageData,D as default}; +LG.intersection(p1_m, p2_m)

Incircle

`,10),l=[p];function t(E,e,r,d,g,y){return a(),i("div",null,l)}const D=s(n,[["render",t]]);export{C as __pageData,D as default}; diff --git a/previews/PR132/assets/experiments_predicates.md.BK6umPfB.lean.js b/previews/PR132/assets/experiments_predicates.md.BwuBYXCq.lean.js similarity index 61% rename from previews/PR132/assets/experiments_predicates.md.BK6umPfB.lean.js rename to previews/PR132/assets/experiments_predicates.md.BwuBYXCq.lean.js index c038671e2..be9dbbfac 100644 --- a/previews/PR132/assets/experiments_predicates.md.BK6umPfB.lean.js +++ b/previews/PR132/assets/experiments_predicates.md.BwuBYXCq.lean.js @@ -1 +1 @@ -import{_ as s,c as i,o as a,a6 as h}from"./chunks/framework.DwyrAfcZ.js";const k="/GeometryOps.jl/previews/PR132/assets/wtuksgq.BW-TtaGG.png",C=JSON.parse('{"title":"Predicates","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/predicates.md","filePath":"experiments/predicates.md","lastUpdated":null}'),n={name:"experiments/predicates.md"},p=h("",10),l=[p];function t(E,e,r,g,d,y){return a(),i("div",null,l)}const D=s(n,[["render",t]]);export{C as __pageData,D as default}; +import{_ as s,c as i,o as a,a6 as h}from"./chunks/framework.DwyrAfcZ.js";const k="/GeometryOps.jl/previews/PR132/assets/erxvjzp.BuPE59Tj.png",C=JSON.parse('{"title":"Predicates","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/predicates.md","filePath":"experiments/predicates.md","lastUpdated":null}'),n={name:"experiments/predicates.md"},p=h("",10),l=[p];function t(E,e,r,d,g,y){return a(),i("div",null,l)}const D=s(n,[["render",t]]);export{C as __pageData,D as default}; diff --git a/previews/PR132/assets/cbvzpok.Cnrt6Y81.png b/previews/PR132/assets/fpnqtbt.Cnrt6Y81.png similarity index 100% rename from previews/PR132/assets/cbvzpok.Cnrt6Y81.png rename to previews/PR132/assets/fpnqtbt.Cnrt6Y81.png diff --git a/previews/PR132/assets/bfbonrv.Ds2sYE96.png b/previews/PR132/assets/gadfxrr.Ds2sYE96.png similarity index 100% rename from previews/PR132/assets/bfbonrv.Ds2sYE96.png rename to previews/PR132/assets/gadfxrr.Ds2sYE96.png diff --git a/previews/PR132/assets/mxkpxyi.BAakL_Iw.png b/previews/PR132/assets/gddvonr.BAakL_Iw.png similarity index 100% rename from previews/PR132/assets/mxkpxyi.BAakL_Iw.png rename to previews/PR132/assets/gddvonr.BAakL_Iw.png diff --git a/previews/PR132/assets/cjoaahl.DeZ--Hl6.png b/previews/PR132/assets/giflqip.DeZ--Hl6.png similarity index 100% rename from previews/PR132/assets/cjoaahl.DeZ--Hl6.png rename to previews/PR132/assets/giflqip.DeZ--Hl6.png diff --git a/previews/PR132/assets/azmzmdu.By3mF0g6.png b/previews/PR132/assets/gsprcwx.By3mF0g6.png similarity index 100% rename from previews/PR132/assets/azmzmdu.By3mF0g6.png rename to previews/PR132/assets/gsprcwx.By3mF0g6.png diff --git a/previews/PR132/assets/diyxabj.DJCzswBC.png b/previews/PR132/assets/iddkawd.DJCzswBC.png similarity index 100% rename from previews/PR132/assets/diyxabj.DJCzswBC.png rename to previews/PR132/assets/iddkawd.DJCzswBC.png diff --git a/previews/PR132/assets/kdowwby.BoTBsej-.png b/previews/PR132/assets/kdowwby.BoTBsej-.png new file mode 100644 index 000000000..3759d8bd5 Binary files /dev/null and b/previews/PR132/assets/kdowwby.BoTBsej-.png differ diff --git a/previews/PR132/assets/xknlmpc.CNHrOPFR.png b/previews/PR132/assets/lraznvf.CNHrOPFR.png similarity index 100% rename from previews/PR132/assets/xknlmpc.CNHrOPFR.png rename to previews/PR132/assets/lraznvf.CNHrOPFR.png diff --git a/previews/PR132/assets/bbzeriu.CgxLt4AA.png b/previews/PR132/assets/netvpzo.CgxLt4AA.png similarity index 100% rename from previews/PR132/assets/bbzeriu.CgxLt4AA.png rename to previews/PR132/assets/netvpzo.CgxLt4AA.png diff --git a/previews/PR132/assets/nnfazis.CW3lUt64.png b/previews/PR132/assets/nnfazis.CW3lUt64.png new file mode 100644 index 000000000..dd14ae5ea Binary files /dev/null and b/previews/PR132/assets/nnfazis.CW3lUt64.png differ diff --git a/previews/PR132/assets/kykmypd.CaDm7AUC.png b/previews/PR132/assets/nrjnjvc.CaDm7AUC.png similarity index 100% rename from previews/PR132/assets/kykmypd.CaDm7AUC.png rename to previews/PR132/assets/nrjnjvc.CaDm7AUC.png diff --git a/previews/PR132/assets/kccjhhd.Dx-vM644.png b/previews/PR132/assets/nsxjbbg.Dx-vM644.png similarity index 100% rename from previews/PR132/assets/kccjhhd.Dx-vM644.png rename to previews/PR132/assets/nsxjbbg.Dx-vM644.png diff --git a/previews/PR132/assets/oknrzqz.CORbz751.png b/previews/PR132/assets/oknrzqz.CORbz751.png deleted file mode 100644 index 8f2a3bc0f..000000000 Binary files a/previews/PR132/assets/oknrzqz.CORbz751.png and /dev/null differ diff --git a/previews/PR132/assets/oqxvtpw.BWDs4AnB.png b/previews/PR132/assets/oqxvtpw.BWDs4AnB.png new file mode 100644 index 000000000..963ccefb0 Binary files /dev/null and b/previews/PR132/assets/oqxvtpw.BWDs4AnB.png differ diff --git a/previews/PR132/assets/ymlkyfz.CnWAk9aA.png b/previews/PR132/assets/paionkc.CnWAk9aA.png similarity index 100% rename from previews/PR132/assets/ymlkyfz.CnWAk9aA.png rename to previews/PR132/assets/paionkc.CnWAk9aA.png diff --git a/previews/PR132/assets/pwyklkx.BSDTl5gf.png b/previews/PR132/assets/pwyklkx.BSDTl5gf.png deleted file mode 100644 index c5fbc1d65..000000000 Binary files a/previews/PR132/assets/pwyklkx.BSDTl5gf.png and /dev/null differ diff --git a/previews/PR132/assets/pzgcheu.yrQahVCT.png b/previews/PR132/assets/pzgcheu.yrQahVCT.png new file mode 100644 index 000000000..1fadcdd81 Binary files /dev/null and b/previews/PR132/assets/pzgcheu.yrQahVCT.png differ diff --git a/previews/PR132/assets/qnwqftp.Cvf79f8w.png b/previews/PR132/assets/qnwqftp.Cvf79f8w.png new file mode 100644 index 000000000..0e9435d03 Binary files /dev/null and b/previews/PR132/assets/qnwqftp.Cvf79f8w.png differ diff --git a/previews/PR132/assets/source_methods_angles.md.Pp5RcZGM.js b/previews/PR132/assets/source_methods_angles.md.CHffdzPJ.js similarity index 99% rename from previews/PR132/assets/source_methods_angles.md.Pp5RcZGM.js rename to previews/PR132/assets/source_methods_angles.md.CHffdzPJ.js index 2cea0b820..bc5bae614 100644 --- a/previews/PR132/assets/source_methods_angles.md.Pp5RcZGM.js +++ b/previews/PR132/assets/source_methods_angles.md.CHffdzPJ.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/hqyfuhc.DD_DdvRe.png",o=JSON.parse('{"title":"Angles","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/angles.md","filePath":"source/methods/angles.md","lastUpdated":null}'),l={name:"source/methods/angles.md"},k=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 s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/awrfbpj.DD_DdvRe.png",o=JSON.parse('{"title":"Angles","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/angles.md","filePath":"source/methods/angles.md","lastUpdated":null}'),l={name:"source/methods/angles.md"},k=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/previews/PR132/assets/source_methods_angles.md.Pp5RcZGM.lean.js b/previews/PR132/assets/source_methods_angles.md.CHffdzPJ.lean.js
similarity index 87%
rename from previews/PR132/assets/source_methods_angles.md.Pp5RcZGM.lean.js
rename to previews/PR132/assets/source_methods_angles.md.CHffdzPJ.lean.js
index e7a0d1e77..be1edc9de 100644
--- a/previews/PR132/assets/source_methods_angles.md.Pp5RcZGM.lean.js
+++ b/previews/PR132/assets/source_methods_angles.md.CHffdzPJ.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/hqyfuhc.DD_DdvRe.png",o=JSON.parse('{"title":"Angles","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/angles.md","filePath":"source/methods/angles.md","lastUpdated":null}'),l={name:"source/methods/angles.md"},k=n("",27),t=[k];function p(e,r,E,g,d,y){return a(),i("div",null,t)}const c=s(l,[["render",p]]);export{o as __pageData,c as default};
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/awrfbpj.DD_DdvRe.png",o=JSON.parse('{"title":"Angles","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/angles.md","filePath":"source/methods/angles.md","lastUpdated":null}'),l={name:"source/methods/angles.md"},k=n("",27),t=[k];function p(e,r,E,g,d,y){return a(),i("div",null,t)}const c=s(l,[["render",p]]);export{o as __pageData,c as default};
diff --git a/previews/PR132/assets/source_methods_area.md.qRPYrLA9.js b/previews/PR132/assets/source_methods_area.md.DbYMCiWo.js
similarity index 99%
rename from previews/PR132/assets/source_methods_area.md.qRPYrLA9.js
rename to previews/PR132/assets/source_methods_area.md.DbYMCiWo.js
index 57e88b363..1f8aa8071 100644
--- a/previews/PR132/assets/source_methods_area.md.qRPYrLA9.js
+++ b/previews/PR132/assets/source_methods_area.md.DbYMCiWo.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/hqyfuhc.DD_DdvRe.png",t="/GeometryOps.jl/previews/PR132/assets/kccjhhd.Dx-vM644.png",c=JSON.parse('{"title":"Area and signed area","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/area.md","filePath":"source/methods/area.md","lastUpdated":null}'),e={name:"source/methods/area.md"},l=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 s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/awrfbpj.DD_DdvRe.png",t="/GeometryOps.jl/previews/PR132/assets/nsxjbbg.Dx-vM644.png",c=JSON.parse('{"title":"Area and signed area","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/area.md","filePath":"source/methods/area.md","lastUpdated":null}'),e={name:"source/methods/area.md"},l=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
diff --git a/previews/PR132/assets/source_methods_area.md.qRPYrLA9.lean.js b/previews/PR132/assets/source_methods_area.md.DbYMCiWo.lean.js
similarity index 77%
rename from previews/PR132/assets/source_methods_area.md.qRPYrLA9.lean.js
rename to previews/PR132/assets/source_methods_area.md.DbYMCiWo.lean.js
index 5f19d7b99..10897eb12 100644
--- a/previews/PR132/assets/source_methods_area.md.qRPYrLA9.lean.js
+++ b/previews/PR132/assets/source_methods_area.md.DbYMCiWo.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/hqyfuhc.DD_DdvRe.png",t="/GeometryOps.jl/previews/PR132/assets/kccjhhd.Dx-vM644.png",c=JSON.parse('{"title":"Area and signed area","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/area.md","filePath":"source/methods/area.md","lastUpdated":null}'),e={name:"source/methods/area.md"},l=n("",40),p=[l];function k(r,d,g,E,o,y){return a(),i("div",null,p)}const C=s(e,[["render",k]]);export{c as __pageData,C as default};
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/awrfbpj.DD_DdvRe.png",t="/GeometryOps.jl/previews/PR132/assets/nsxjbbg.Dx-vM644.png",c=JSON.parse('{"title":"Area and signed area","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/area.md","filePath":"source/methods/area.md","lastUpdated":null}'),e={name:"source/methods/area.md"},l=n("",40),p=[l];function k(r,d,g,E,o,y){return a(),i("div",null,p)}const C=s(e,[["render",k]]);export{c as __pageData,C as default};
diff --git a/previews/PR132/assets/source_methods_barycentric.md.Dz_liD_U.js b/previews/PR132/assets/source_methods_barycentric.md.BesaTCvc.js
similarity index 99%
rename from previews/PR132/assets/source_methods_barycentric.md.Dz_liD_U.js
rename to previews/PR132/assets/source_methods_barycentric.md.BesaTCvc.js
index b1e252f50..b66633d71 100644
--- a/previews/PR132/assets/source_methods_barycentric.md.Dz_liD_U.js
+++ b/previews/PR132/assets/source_methods_barycentric.md.BesaTCvc.js
@@ -1,4 +1,4 @@
-import{_ as t,c as a,l as s,a as i,a6 as h,o as n}from"./chunks/framework.DwyrAfcZ.js";const k="/GeometryOps.jl/previews/PR132/assets/aurovnq.CNHhYFWU.png",R=JSON.parse('{"title":"Barycentric coordinates","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/barycentric.md","filePath":"source/methods/barycentric.md","lastUpdated":null}'),l={name:"source/methods/barycentric.md"},p=h(`

Barycentric coordinates

julia
export barycentric_coordinates, barycentric_coordinates!, barycentric_interpolate
+import{_ as t,c as a,l as s,a as i,a6 as h,o as n}from"./chunks/framework.DwyrAfcZ.js";const k="/GeometryOps.jl/previews/PR132/assets/dpgyjwc.CNHhYFWU.png",R=JSON.parse('{"title":"Barycentric coordinates","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/barycentric.md","filePath":"source/methods/barycentric.md","lastUpdated":null}'),l={name:"source/methods/barycentric.md"},p=h(`

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),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=h('',1),d=[r],g=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),y={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},F={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"},o=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),c=[o],C=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),B={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},A={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"},D=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),u=[D],T=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),m={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b={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"},Q=h('',1),_=[Q],v=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),w=h(`

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/previews/PR132/assets/source_methods_barycentric.md.Dz_liD_U.lean.js b/previews/PR132/assets/source_methods_barycentric.md.BesaTCvc.lean.js
similarity index 99%
rename from previews/PR132/assets/source_methods_barycentric.md.Dz_liD_U.lean.js
rename to previews/PR132/assets/source_methods_barycentric.md.BesaTCvc.lean.js
index 83542f441..5b8745ca6 100644
--- a/previews/PR132/assets/source_methods_barycentric.md.Dz_liD_U.lean.js
+++ b/previews/PR132/assets/source_methods_barycentric.md.BesaTCvc.lean.js
@@ -1 +1 @@
-import{_ as t,c as a,l as s,a as i,a6 as h,o as n}from"./chunks/framework.DwyrAfcZ.js";const k="/GeometryOps.jl/previews/PR132/assets/aurovnq.CNHhYFWU.png",R=JSON.parse('{"title":"Barycentric coordinates","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/barycentric.md","filePath":"source/methods/barycentric.md","lastUpdated":null}'),l={name:"source/methods/barycentric.md"},p=h("",4),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=h("",1),d=[r],g=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),y={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},F={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"},o=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),c=[o],C=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),B={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},A={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"},D=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),u=[D],T=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),m={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b={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"},Q=h("",1),_=[Q],v=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),w=h("",35);function f(x,V,P,M,q,N){return n(),a("div",null,[p,s("p",null,[i("In the case of a triangle, barycentric coordinates are a set of three numbers "),s("mjx-container",e,[(n(),a("svg",E,d)),g]),i(", 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("For a polygon with "),s("mjx-container",y,[(n(),a("svg",F,c)),C]),i(" vertices, generalized barycentric coordinates are a set of "),s("mjx-container",B,[(n(),a("svg",A,u)),T]),i(" numbers "),s("mjx-container",m,[(n(),a("svg",b,_)),v]),i(", 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.")]),w])}const G=t(l,[["render",f]]);export{R as __pageData,G as default};
+import{_ as t,c as a,l as s,a as i,a6 as h,o as n}from"./chunks/framework.DwyrAfcZ.js";const k="/GeometryOps.jl/previews/PR132/assets/dpgyjwc.CNHhYFWU.png",R=JSON.parse('{"title":"Barycentric coordinates","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/barycentric.md","filePath":"source/methods/barycentric.md","lastUpdated":null}'),l={name:"source/methods/barycentric.md"},p=h("",4),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=h("",1),d=[r],g=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),y={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},F={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"},o=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),c=[o],C=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),B={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},A={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"},D=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),u=[D],T=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),m={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b={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"},Q=h("",1),_=[Q],v=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),w=h("",35);function f(x,V,P,M,q,N){return n(),a("div",null,[p,s("p",null,[i("In the case of a triangle, barycentric coordinates are a set of three numbers "),s("mjx-container",e,[(n(),a("svg",E,d)),g]),i(", 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("For a polygon with "),s("mjx-container",y,[(n(),a("svg",F,c)),C]),i(" vertices, generalized barycentric coordinates are a set of "),s("mjx-container",B,[(n(),a("svg",A,u)),T]),i(" numbers "),s("mjx-container",m,[(n(),a("svg",b,_)),v]),i(", 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.")]),w])}const G=t(l,[["render",f]]);export{R as __pageData,G as default};
diff --git a/previews/PR132/assets/source_methods_centroid.md.DOwcNbAs.js b/previews/PR132/assets/source_methods_centroid.md.CpaM4qPi.js
similarity index 99%
rename from previews/PR132/assets/source_methods_centroid.md.DOwcNbAs.js
rename to previews/PR132/assets/source_methods_centroid.md.CpaM4qPi.js
index 8ee8926a1..47088326f 100644
--- a/previews/PR132/assets/source_methods_centroid.md.DOwcNbAs.js
+++ b/previews/PR132/assets/source_methods_centroid.md.CpaM4qPi.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/bbzeriu.CgxLt4AA.png",t="/GeometryOps.jl/previews/PR132/assets/ykdthcb.DRZWKM0o.png",F=JSON.parse('{"title":"Centroid","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/centroid.md","filePath":"source/methods/centroid.md","lastUpdated":null}'),k={name:"source/methods/centroid.md"},p=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 s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/netvpzo.CgxLt4AA.png",t="/GeometryOps.jl/previews/PR132/assets/afjsydj.DRZWKM0o.png",F=JSON.parse('{"title":"Centroid","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/centroid.md","filePath":"source/methods/centroid.md","lastUpdated":null}'),p={name:"source/methods/centroid.md"},k=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
@@ -90,4 +90,4 @@ import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h
     x = (x1 * area1 + x2 * area2) / area
     y = (y1 * area1 + y2 * area2) / area
     return (x, y), area
-end

This page was generated using Literate.jl.

`,57),l=[p];function e(r,E,d,g,y,o){return a(),i("div",null,l)}const C=s(k,[["render",e]]);export{F as __pageData,C as default}; +end

This page was generated using Literate.jl.

`,57),l=[k];function e(r,E,d,g,y,o){return a(),i("div",null,l)}const C=s(p,[["render",e]]);export{F as __pageData,C as default}; diff --git a/previews/PR132/assets/source_methods_centroid.md.DOwcNbAs.lean.js b/previews/PR132/assets/source_methods_centroid.md.CpaM4qPi.lean.js similarity index 54% rename from previews/PR132/assets/source_methods_centroid.md.DOwcNbAs.lean.js rename to previews/PR132/assets/source_methods_centroid.md.CpaM4qPi.lean.js index 610da3ea0..ee5c77bbb 100644 --- a/previews/PR132/assets/source_methods_centroid.md.DOwcNbAs.lean.js +++ b/previews/PR132/assets/source_methods_centroid.md.CpaM4qPi.lean.js @@ -1 +1 @@ -import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/bbzeriu.CgxLt4AA.png",t="/GeometryOps.jl/previews/PR132/assets/ykdthcb.DRZWKM0o.png",F=JSON.parse('{"title":"Centroid","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/centroid.md","filePath":"source/methods/centroid.md","lastUpdated":null}'),k={name:"source/methods/centroid.md"},p=n("",57),l=[p];function e(r,E,d,g,y,o){return a(),i("div",null,l)}const C=s(k,[["render",e]]);export{F as __pageData,C as default}; +import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/netvpzo.CgxLt4AA.png",t="/GeometryOps.jl/previews/PR132/assets/afjsydj.DRZWKM0o.png",F=JSON.parse('{"title":"Centroid","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/centroid.md","filePath":"source/methods/centroid.md","lastUpdated":null}'),p={name:"source/methods/centroid.md"},k=n("",57),l=[k];function e(r,E,d,g,y,o){return a(),i("div",null,l)}const C=s(p,[["render",e]]);export{F as __pageData,C as default}; diff --git a/previews/PR132/assets/source_methods_clipping_coverage.md.BFn8JNJH.js b/previews/PR132/assets/source_methods_clipping_coverage.md.A6pT9-1x.js similarity index 99% rename from previews/PR132/assets/source_methods_clipping_coverage.md.BFn8JNJH.js rename to previews/PR132/assets/source_methods_clipping_coverage.md.A6pT9-1x.js index 35ccfab4a..8b48ca88d 100644 --- a/previews/PR132/assets/source_methods_clipping_coverage.md.BFn8JNJH.js +++ b/previews/PR132/assets/source_methods_clipping_coverage.md.A6pT9-1x.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/kykmypd.CaDm7AUC.png",c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/coverage.md","filePath":"source/methods/clipping/coverage.md","lastUpdated":null}'),l={name:"source/methods/clipping/coverage.md"},k=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-coordiantes of that bounding box, or an Extent containing that information.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/nrjnjvc.CaDm7AUC.png",c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/coverage.md","filePath":"source/methods/clipping/coverage.md","lastUpdated":null}'),l={name:"source/methods/clipping/coverage.md"},k=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-coordiantes 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/previews/PR132/assets/source_methods_clipping_coverage.md.BFn8JNJH.lean.js b/previews/PR132/assets/source_methods_clipping_coverage.md.A6pT9-1x.lean.js
similarity index 87%
rename from previews/PR132/assets/source_methods_clipping_coverage.md.BFn8JNJH.lean.js
rename to previews/PR132/assets/source_methods_clipping_coverage.md.A6pT9-1x.lean.js
index 07a4e80c7..3f63fb137 100644
--- a/previews/PR132/assets/source_methods_clipping_coverage.md.BFn8JNJH.lean.js
+++ b/previews/PR132/assets/source_methods_clipping_coverage.md.A6pT9-1x.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/kykmypd.CaDm7AUC.png",c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/coverage.md","filePath":"source/methods/clipping/coverage.md","lastUpdated":null}'),l={name:"source/methods/clipping/coverage.md"},k=n("",58),p=[k];function t(e,E,r,d,g,y){return a(),i("div",null,p)}const o=s(l,[["render",t]]);export{c as __pageData,o as default};
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/nrjnjvc.CaDm7AUC.png",c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/coverage.md","filePath":"source/methods/clipping/coverage.md","lastUpdated":null}'),l={name:"source/methods/clipping/coverage.md"},k=n("",58),p=[k];function t(e,E,r,d,g,y){return a(),i("div",null,p)}const o=s(l,[["render",t]]);export{c as __pageData,o as default};
diff --git a/previews/PR132/assets/source_methods_clipping_cut.md.66NKRs8v.js b/previews/PR132/assets/source_methods_clipping_cut.md.CcYYqZO_.js
similarity index 99%
rename from previews/PR132/assets/source_methods_clipping_cut.md.66NKRs8v.js
rename to previews/PR132/assets/source_methods_clipping_cut.md.CcYYqZO_.js
index 77d3d8949..59c4524cd 100644
--- a/previews/PR132/assets/source_methods_clipping_cut.md.66NKRs8v.js
+++ b/previews/PR132/assets/source_methods_clipping_cut.md.CcYYqZO_.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/ymlkyfz.CnWAk9aA.png",c=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"},t=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 s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/paionkc.CnWAk9aA.png",c=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"},t=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/previews/PR132/assets/source_methods_clipping_cut.md.66NKRs8v.lean.js b/previews/PR132/assets/source_methods_clipping_cut.md.CcYYqZO_.lean.js
similarity index 87%
rename from previews/PR132/assets/source_methods_clipping_cut.md.66NKRs8v.lean.js
rename to previews/PR132/assets/source_methods_clipping_cut.md.CcYYqZO_.lean.js
index c91e39e50..6977f14a9 100644
--- a/previews/PR132/assets/source_methods_clipping_cut.md.66NKRs8v.lean.js
+++ b/previews/PR132/assets/source_methods_clipping_cut.md.CcYYqZO_.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/ymlkyfz.CnWAk9aA.png",c=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"},t=n("",34),p=[t];function k(e,r,E,d,g,y){return a(),i("div",null,p)}const F=s(l,[["render",k]]);export{c as __pageData,F as default};
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/paionkc.CnWAk9aA.png",c=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"},t=n("",34),p=[t];function k(e,r,E,d,g,y){return a(),i("div",null,p)}const F=s(l,[["render",k]]);export{c as __pageData,F as default};
diff --git a/previews/PR132/assets/source_methods_distance.md.ZjYjoSx1.js b/previews/PR132/assets/source_methods_distance.md.I2oRuWOQ.js
similarity index 99%
rename from previews/PR132/assets/source_methods_distance.md.ZjYjoSx1.js
rename to previews/PR132/assets/source_methods_distance.md.I2oRuWOQ.js
index fb0690a64..e9af008f5 100644
--- a/previews/PR132/assets/source_methods_distance.md.ZjYjoSx1.js
+++ b/previews/PR132/assets/source_methods_distance.md.I2oRuWOQ.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/ghwthzl.CRkh0NvJ.png",t="/GeometryOps.jl/previews/PR132/assets/xknlmpc.CNHrOPFR.png",c=JSON.parse('{"title":"Distance and signed distance","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/distance.md","filePath":"source/methods/distance.md","lastUpdated":null}'),k={name:"source/methods/distance.md"},p=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 postitive or 0.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/xmljjhi.CRkh0NvJ.png",t="/GeometryOps.jl/previews/PR132/assets/lraznvf.CNHrOPFR.png",c=JSON.parse('{"title":"Distance and signed distance","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/distance.md","filePath":"source/methods/distance.md","lastUpdated":null}'),k={name:"source/methods/distance.md"},p=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 postitive 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/previews/PR132/assets/source_methods_distance.md.ZjYjoSx1.lean.js b/previews/PR132/assets/source_methods_distance.md.I2oRuWOQ.lean.js
similarity index 78%
rename from previews/PR132/assets/source_methods_distance.md.ZjYjoSx1.lean.js
rename to previews/PR132/assets/source_methods_distance.md.I2oRuWOQ.lean.js
index 97a9de522..7a381e601 100644
--- a/previews/PR132/assets/source_methods_distance.md.ZjYjoSx1.lean.js
+++ b/previews/PR132/assets/source_methods_distance.md.I2oRuWOQ.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/ghwthzl.CRkh0NvJ.png",t="/GeometryOps.jl/previews/PR132/assets/xknlmpc.CNHrOPFR.png",c=JSON.parse('{"title":"Distance and signed distance","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/distance.md","filePath":"source/methods/distance.md","lastUpdated":null}'),k={name:"source/methods/distance.md"},p=n("",54),l=[p];function e(d,E,r,g,y,F){return a(),i("div",null,l)}const C=s(k,[["render",e]]);export{c as __pageData,C as default};
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/xmljjhi.CRkh0NvJ.png",t="/GeometryOps.jl/previews/PR132/assets/lraznvf.CNHrOPFR.png",c=JSON.parse('{"title":"Distance and signed distance","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/distance.md","filePath":"source/methods/distance.md","lastUpdated":null}'),k={name:"source/methods/distance.md"},p=n("",54),l=[p];function e(d,E,r,g,y,F){return a(),i("div",null,l)}const C=s(k,[["render",e]]);export{c as __pageData,C as default};
diff --git a/previews/PR132/assets/source_methods_equals.md.PLfLLjm5.js b/previews/PR132/assets/source_methods_equals.md.DtcEHiAp.js
similarity index 99%
rename from previews/PR132/assets/source_methods_equals.md.PLfLLjm5.js
rename to previews/PR132/assets/source_methods_equals.md.DtcEHiAp.js
index 75f8e1bc0..802a0bb11 100644
--- a/previews/PR132/assets/source_methods_equals.md.PLfLLjm5.js
+++ b/previews/PR132/assets/source_methods_equals.md.DtcEHiAp.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const l="/GeometryOps.jl/previews/PR132/assets/cjoaahl.DeZ--Hl6.png",y=JSON.parse('{"title":"Equals","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/equals.md","filePath":"source/methods/equals.md","lastUpdated":null}'),h={name:"source/methods/equals.md"},p=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 s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const l="/GeometryOps.jl/previews/PR132/assets/giflqip.DeZ--Hl6.png",y=JSON.parse('{"title":"Equals","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/equals.md","filePath":"source/methods/equals.md","lastUpdated":null}'),h={name:"source/methods/equals.md"},p=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/previews/PR132/assets/source_methods_equals.md.PLfLLjm5.lean.js b/previews/PR132/assets/source_methods_equals.md.DtcEHiAp.lean.js
similarity index 87%
rename from previews/PR132/assets/source_methods_equals.md.PLfLLjm5.lean.js
rename to previews/PR132/assets/source_methods_equals.md.DtcEHiAp.lean.js
index 394721fad..562ebc87f 100644
--- a/previews/PR132/assets/source_methods_equals.md.PLfLLjm5.lean.js
+++ b/previews/PR132/assets/source_methods_equals.md.DtcEHiAp.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const l="/GeometryOps.jl/previews/PR132/assets/cjoaahl.DeZ--Hl6.png",y=JSON.parse('{"title":"Equals","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/equals.md","filePath":"source/methods/equals.md","lastUpdated":null}'),h={name:"source/methods/equals.md"},p=n("",47),t=[p];function k(e,r,g,d,E,F){return a(),i("div",null,t)}const c=s(h,[["render",k]]);export{y as __pageData,c as default};
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const l="/GeometryOps.jl/previews/PR132/assets/giflqip.DeZ--Hl6.png",y=JSON.parse('{"title":"Equals","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/equals.md","filePath":"source/methods/equals.md","lastUpdated":null}'),h={name:"source/methods/equals.md"},p=n("",47),t=[p];function k(e,r,g,d,E,F){return a(),i("div",null,t)}const c=s(h,[["render",k]]);export{y as __pageData,c as default};
diff --git a/previews/PR132/assets/source_methods_geom_relations_contains.md.DwBZ1q51.js b/previews/PR132/assets/source_methods_geom_relations_contains.md.Dq1RJQzA.js
similarity index 99%
rename from previews/PR132/assets/source_methods_geom_relations_contains.md.DwBZ1q51.js
rename to previews/PR132/assets/source_methods_geom_relations_contains.md.Dq1RJQzA.js
index b8d0d46c5..675085378 100644
--- a/previews/PR132/assets/source_methods_geom_relations_contains.md.DwBZ1q51.js
+++ b/previews/PR132/assets/source_methods_geom_relations_contains.md.Dq1RJQzA.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const t="/GeometryOps.jl/previews/PR132/assets/bfbonrv.Ds2sYE96.png",y=JSON.parse('{"title":"Contains","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/contains.md","filePath":"source/methods/geom_relations/contains.md","lastUpdated":null}'),e={name:"source/methods/geom_relations/contains.md"},h=n(`

Contains

julia
export contains

What is contains?

The contains function checks if a given geometry completly contains another geometry, or in other words, that the second geometry is completly 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 s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const t="/GeometryOps.jl/previews/PR132/assets/gadfxrr.Ds2sYE96.png",y=JSON.parse('{"title":"Contains","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/contains.md","filePath":"source/methods/geom_relations/contains.md","lastUpdated":null}'),e={name:"source/methods/geom_relations/contains.md"},h=n(`

Contains

julia
export contains

What is contains?

The contains function checks if a given geometry completly contains another geometry, or in other words, that the second geometry is completly 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/previews/PR132/assets/source_methods_geom_relations_contains.md.DwBZ1q51.lean.js b/previews/PR132/assets/source_methods_geom_relations_contains.md.Dq1RJQzA.lean.js
similarity index 88%
rename from previews/PR132/assets/source_methods_geom_relations_contains.md.DwBZ1q51.lean.js
rename to previews/PR132/assets/source_methods_geom_relations_contains.md.Dq1RJQzA.lean.js
index 0c1d9b727..7c9a61feb 100644
--- a/previews/PR132/assets/source_methods_geom_relations_contains.md.DwBZ1q51.lean.js
+++ b/previews/PR132/assets/source_methods_geom_relations_contains.md.Dq1RJQzA.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const t="/GeometryOps.jl/previews/PR132/assets/bfbonrv.Ds2sYE96.png",y=JSON.parse('{"title":"Contains","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/contains.md","filePath":"source/methods/geom_relations/contains.md","lastUpdated":null}'),e={name:"source/methods/geom_relations/contains.md"},h=n("",18),l=[h];function p(k,r,o,d,g,E){return a(),i("div",null,l)}const F=s(e,[["render",p]]);export{y as __pageData,F as default};
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const t="/GeometryOps.jl/previews/PR132/assets/gadfxrr.Ds2sYE96.png",y=JSON.parse('{"title":"Contains","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/contains.md","filePath":"source/methods/geom_relations/contains.md","lastUpdated":null}'),e={name:"source/methods/geom_relations/contains.md"},h=n("",18),l=[h];function p(k,r,o,d,g,E){return a(),i("div",null,l)}const F=s(e,[["render",p]]);export{y as __pageData,F as default};
diff --git a/previews/PR132/assets/source_methods_geom_relations_coveredby.md.DYU7w674.js b/previews/PR132/assets/source_methods_geom_relations_coveredby.md.C2ypfZTV.js
similarity index 99%
rename from previews/PR132/assets/source_methods_geom_relations_coveredby.md.DYU7w674.js
rename to previews/PR132/assets/source_methods_geom_relations_coveredby.md.C2ypfZTV.js
index a286e10bc..793fe281d 100644
--- a/previews/PR132/assets/source_methods_geom_relations_coveredby.md.DYU7w674.js
+++ b/previews/PR132/assets/source_methods_geom_relations_coveredby.md.C2ypfZTV.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const e="/GeometryOps.jl/previews/PR132/assets/cbvzpok.Cnrt6Y81.png",c=JSON.parse('{"title":"CoveredBy","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/coveredby.md","filePath":"source/methods/geom_relations/coveredby.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/coveredby.md"},h=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 s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const e="/GeometryOps.jl/previews/PR132/assets/fpnqtbt.Cnrt6Y81.png",c=JSON.parse('{"title":"CoveredBy","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/coveredby.md","filePath":"source/methods/geom_relations/coveredby.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/coveredby.md"},h=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/previews/PR132/assets/source_methods_geom_relations_coveredby.md.DYU7w674.lean.js b/previews/PR132/assets/source_methods_geom_relations_coveredby.md.C2ypfZTV.lean.js
similarity index 88%
rename from previews/PR132/assets/source_methods_geom_relations_coveredby.md.DYU7w674.lean.js
rename to previews/PR132/assets/source_methods_geom_relations_coveredby.md.C2ypfZTV.lean.js
index 137ec0888..675707916 100644
--- a/previews/PR132/assets/source_methods_geom_relations_coveredby.md.DYU7w674.lean.js
+++ b/previews/PR132/assets/source_methods_geom_relations_coveredby.md.C2ypfZTV.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const e="/GeometryOps.jl/previews/PR132/assets/cbvzpok.Cnrt6Y81.png",c=JSON.parse('{"title":"CoveredBy","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/coveredby.md","filePath":"source/methods/geom_relations/coveredby.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/coveredby.md"},h=n("",45),t=[h];function p(k,r,E,g,d,o){return a(),i("div",null,t)}const F=s(l,[["render",p]]);export{c as __pageData,F as default};
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const e="/GeometryOps.jl/previews/PR132/assets/fpnqtbt.Cnrt6Y81.png",c=JSON.parse('{"title":"CoveredBy","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/coveredby.md","filePath":"source/methods/geom_relations/coveredby.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/coveredby.md"},h=n("",45),t=[h];function p(k,r,E,g,d,o){return a(),i("div",null,t)}const F=s(l,[["render",p]]);export{c as __pageData,F as default};
diff --git a/previews/PR132/assets/source_methods_geom_relations_covers.md.DQmLsEEi.js b/previews/PR132/assets/source_methods_geom_relations_covers.md.BfjggEzE.js
similarity index 99%
rename from previews/PR132/assets/source_methods_geom_relations_covers.md.DQmLsEEi.js
rename to previews/PR132/assets/source_methods_geom_relations_covers.md.BfjggEzE.js
index 2b559a977..5c2e5976a 100644
--- a/previews/PR132/assets/source_methods_geom_relations_covers.md.DQmLsEEi.js
+++ b/previews/PR132/assets/source_methods_geom_relations_covers.md.BfjggEzE.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a6 as e}from"./chunks/framework.DwyrAfcZ.js";const n="/GeometryOps.jl/previews/PR132/assets/cbvzpok.Cnrt6Y81.png",y=JSON.parse('{"title":"Covers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/covers.md","filePath":"source/methods/geom_relations/covers.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/covers.md"},p=e(`

Covers

julia
export covers

What is covers?

The covers function checks if a given geometry completly 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 s,c as i,o as a,a6 as e}from"./chunks/framework.DwyrAfcZ.js";const n="/GeometryOps.jl/previews/PR132/assets/fpnqtbt.Cnrt6Y81.png",y=JSON.parse('{"title":"Covers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/covers.md","filePath":"source/methods/geom_relations/covers.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/covers.md"},p=e(`

Covers

julia
export covers

What is covers?

The covers function checks if a given geometry completly 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/previews/PR132/assets/source_methods_geom_relations_covers.md.DQmLsEEi.lean.js b/previews/PR132/assets/source_methods_geom_relations_covers.md.BfjggEzE.lean.js
similarity index 88%
rename from previews/PR132/assets/source_methods_geom_relations_covers.md.DQmLsEEi.lean.js
rename to previews/PR132/assets/source_methods_geom_relations_covers.md.BfjggEzE.lean.js
index cc7d4fe6c..6826e99c3 100644
--- a/previews/PR132/assets/source_methods_geom_relations_covers.md.DQmLsEEi.lean.js
+++ b/previews/PR132/assets/source_methods_geom_relations_covers.md.BfjggEzE.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as e}from"./chunks/framework.DwyrAfcZ.js";const n="/GeometryOps.jl/previews/PR132/assets/cbvzpok.Cnrt6Y81.png",y=JSON.parse('{"title":"Covers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/covers.md","filePath":"source/methods/geom_relations/covers.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/covers.md"},p=e("",17),l=[p];function h(k,r,o,d,c,g){return a(),i("div",null,l)}const u=s(t,[["render",h]]);export{y as __pageData,u as default};
+import{_ as s,c as i,o as a,a6 as e}from"./chunks/framework.DwyrAfcZ.js";const n="/GeometryOps.jl/previews/PR132/assets/fpnqtbt.Cnrt6Y81.png",y=JSON.parse('{"title":"Covers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/covers.md","filePath":"source/methods/geom_relations/covers.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/covers.md"},p=e("",17),l=[p];function h(k,r,o,d,c,g){return a(),i("div",null,l)}const u=s(t,[["render",h]]);export{y as __pageData,u as default};
diff --git a/previews/PR132/assets/source_methods_geom_relations_disjoint.md.CrfwOTky.js b/previews/PR132/assets/source_methods_geom_relations_disjoint.md.Caq4g8FD.js
similarity index 99%
rename from previews/PR132/assets/source_methods_geom_relations_disjoint.md.CrfwOTky.js
rename to previews/PR132/assets/source_methods_geom_relations_disjoint.md.Caq4g8FD.js
index f01f6ade3..02a533720 100644
--- a/previews/PR132/assets/source_methods_geom_relations_disjoint.md.CrfwOTky.js
+++ b/previews/PR132/assets/source_methods_geom_relations_disjoint.md.Caq4g8FD.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const t="/GeometryOps.jl/previews/PR132/assets/azmzmdu.By3mF0g6.png",c=JSON.parse('{"title":"Disjoint","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/disjoint.md","filePath":"source/methods/geom_relations/disjoint.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/disjoint.md"},l=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 s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const t="/GeometryOps.jl/previews/PR132/assets/gsprcwx.By3mF0g6.png",c=JSON.parse('{"title":"Disjoint","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/disjoint.md","filePath":"source/methods/geom_relations/disjoint.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/disjoint.md"},l=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/previews/PR132/assets/source_methods_geom_relations_disjoint.md.CrfwOTky.lean.js b/previews/PR132/assets/source_methods_geom_relations_disjoint.md.Caq4g8FD.lean.js
similarity index 88%
rename from previews/PR132/assets/source_methods_geom_relations_disjoint.md.CrfwOTky.lean.js
rename to previews/PR132/assets/source_methods_geom_relations_disjoint.md.Caq4g8FD.lean.js
index bf200477f..b6d6c9095 100644
--- a/previews/PR132/assets/source_methods_geom_relations_disjoint.md.CrfwOTky.lean.js
+++ b/previews/PR132/assets/source_methods_geom_relations_disjoint.md.Caq4g8FD.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const t="/GeometryOps.jl/previews/PR132/assets/azmzmdu.By3mF0g6.png",c=JSON.parse('{"title":"Disjoint","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/disjoint.md","filePath":"source/methods/geom_relations/disjoint.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/disjoint.md"},l=n("",39),p=[l];function e(k,r,E,g,d,o){return a(),i("div",null,p)}const F=s(h,[["render",e]]);export{c as __pageData,F as default};
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const t="/GeometryOps.jl/previews/PR132/assets/gsprcwx.By3mF0g6.png",c=JSON.parse('{"title":"Disjoint","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/disjoint.md","filePath":"source/methods/geom_relations/disjoint.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/disjoint.md"},l=n("",39),p=[l];function e(k,r,E,g,d,o){return a(),i("div",null,p)}const F=s(h,[["render",e]]);export{c as __pageData,F as default};
diff --git a/previews/PR132/assets/source_methods_geom_relations_intersects.md.CfcaliMp.js b/previews/PR132/assets/source_methods_geom_relations_intersects.md.Chrh7h5G.js
similarity index 99%
rename from previews/PR132/assets/source_methods_geom_relations_intersects.md.CfcaliMp.js
rename to previews/PR132/assets/source_methods_geom_relations_intersects.md.Chrh7h5G.js
index c56bc147c..bfdfad2ad 100644
--- a/previews/PR132/assets/source_methods_geom_relations_intersects.md.CfcaliMp.js
+++ b/previews/PR132/assets/source_methods_geom_relations_intersects.md.Chrh7h5G.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const e="/GeometryOps.jl/previews/PR132/assets/txlsvit.BwVBXAhv.png",y=JSON.parse('{"title":"Intersection checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/intersects.md","filePath":"source/methods/geom_relations/intersects.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/intersects.md"},l=n(`

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 s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const e="/GeometryOps.jl/previews/PR132/assets/cqezpue.BwVBXAhv.png",y=JSON.parse('{"title":"Intersection checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/intersects.md","filePath":"source/methods/geom_relations/intersects.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/intersects.md"},l=n(`

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/previews/PR132/assets/source_methods_geom_relations_intersects.md.CfcaliMp.lean.js b/previews/PR132/assets/source_methods_geom_relations_intersects.md.Chrh7h5G.lean.js
similarity index 88%
rename from previews/PR132/assets/source_methods_geom_relations_intersects.md.CfcaliMp.lean.js
rename to previews/PR132/assets/source_methods_geom_relations_intersects.md.Chrh7h5G.lean.js
index 0bb4c6d17..8ca6673a6 100644
--- a/previews/PR132/assets/source_methods_geom_relations_intersects.md.CfcaliMp.lean.js
+++ b/previews/PR132/assets/source_methods_geom_relations_intersects.md.Chrh7h5G.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const e="/GeometryOps.jl/previews/PR132/assets/txlsvit.BwVBXAhv.png",y=JSON.parse('{"title":"Intersection checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/intersects.md","filePath":"source/methods/geom_relations/intersects.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/intersects.md"},l=n("",22),p=[l];function h(k,r,d,g,o,c){return a(),i("div",null,p)}const F=s(t,[["render",h]]);export{y as __pageData,F as default};
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const e="/GeometryOps.jl/previews/PR132/assets/cqezpue.BwVBXAhv.png",y=JSON.parse('{"title":"Intersection checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/intersects.md","filePath":"source/methods/geom_relations/intersects.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/intersects.md"},l=n("",22),p=[l];function h(k,r,d,g,o,c){return a(),i("div",null,p)}const F=s(t,[["render",h]]);export{y as __pageData,F as default};
diff --git a/previews/PR132/assets/source_methods_geom_relations_overlaps.md.D6NPg5gM.js b/previews/PR132/assets/source_methods_geom_relations_overlaps.md.BhFrzhO0.js
similarity index 99%
rename from previews/PR132/assets/source_methods_geom_relations_overlaps.md.D6NPg5gM.js
rename to previews/PR132/assets/source_methods_geom_relations_overlaps.md.BhFrzhO0.js
index 7b5720691..8afa6515d 100644
--- a/previews/PR132/assets/source_methods_geom_relations_overlaps.md.D6NPg5gM.js
+++ b/previews/PR132/assets/source_methods_geom_relations_overlaps.md.BhFrzhO0.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const l="/GeometryOps.jl/previews/PR132/assets/cjoaahl.DeZ--Hl6.png",y=JSON.parse('{"title":"Overlaps","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/overlaps.md","filePath":"source/methods/geom_relations/overlaps.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/overlaps.md"},t=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 colinear.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const l="/GeometryOps.jl/previews/PR132/assets/giflqip.DeZ--Hl6.png",y=JSON.parse('{"title":"Overlaps","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/overlaps.md","filePath":"source/methods/geom_relations/overlaps.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/overlaps.md"},t=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 colinear.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/previews/PR132/assets/source_methods_geom_relations_overlaps.md.D6NPg5gM.lean.js b/previews/PR132/assets/source_methods_geom_relations_overlaps.md.BhFrzhO0.lean.js
similarity index 88%
rename from previews/PR132/assets/source_methods_geom_relations_overlaps.md.D6NPg5gM.lean.js
rename to previews/PR132/assets/source_methods_geom_relations_overlaps.md.BhFrzhO0.lean.js
index d55425441..e79b9c8bf 100644
--- a/previews/PR132/assets/source_methods_geom_relations_overlaps.md.D6NPg5gM.lean.js
+++ b/previews/PR132/assets/source_methods_geom_relations_overlaps.md.BhFrzhO0.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const l="/GeometryOps.jl/previews/PR132/assets/cjoaahl.DeZ--Hl6.png",y=JSON.parse('{"title":"Overlaps","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/overlaps.md","filePath":"source/methods/geom_relations/overlaps.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/overlaps.md"},t=n("",33),e=[t];function h(k,r,o,F,d,g){return a(),i("div",null,e)}const c=s(p,[["render",h]]);export{y as __pageData,c as default};
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const l="/GeometryOps.jl/previews/PR132/assets/giflqip.DeZ--Hl6.png",y=JSON.parse('{"title":"Overlaps","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/overlaps.md","filePath":"source/methods/geom_relations/overlaps.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/overlaps.md"},t=n("",33),e=[t];function h(k,r,o,F,d,g){return a(),i("div",null,e)}const c=s(p,[["render",h]]);export{y as __pageData,c as default};
diff --git a/previews/PR132/assets/source_methods_geom_relations_touches.md.BINgXAnb.js b/previews/PR132/assets/source_methods_geom_relations_touches.md.OrEvQveX.js
similarity index 99%
rename from previews/PR132/assets/source_methods_geom_relations_touches.md.BINgXAnb.js
rename to previews/PR132/assets/source_methods_geom_relations_touches.md.OrEvQveX.js
index bd12a762f..0b31f9f5c 100644
--- a/previews/PR132/assets/source_methods_geom_relations_touches.md.BINgXAnb.js
+++ b/previews/PR132/assets/source_methods_geom_relations_touches.md.OrEvQveX.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const t="/GeometryOps.jl/previews/PR132/assets/mxkpxyi.BAakL_Iw.png",c=JSON.parse('{"title":"Touches","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/touches.md","filePath":"source/methods/geom_relations/touches.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/touches.md"},l=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 geometies interior or boundary.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const t="/GeometryOps.jl/previews/PR132/assets/gddvonr.BAakL_Iw.png",c=JSON.parse('{"title":"Touches","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/touches.md","filePath":"source/methods/geom_relations/touches.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/touches.md"},l=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 geometies 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/previews/PR132/assets/source_methods_geom_relations_touches.md.BINgXAnb.lean.js b/previews/PR132/assets/source_methods_geom_relations_touches.md.OrEvQveX.lean.js
similarity index 88%
rename from previews/PR132/assets/source_methods_geom_relations_touches.md.BINgXAnb.lean.js
rename to previews/PR132/assets/source_methods_geom_relations_touches.md.OrEvQveX.lean.js
index 78b49832e..b4b4b9256 100644
--- a/previews/PR132/assets/source_methods_geom_relations_touches.md.BINgXAnb.lean.js
+++ b/previews/PR132/assets/source_methods_geom_relations_touches.md.OrEvQveX.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const t="/GeometryOps.jl/previews/PR132/assets/mxkpxyi.BAakL_Iw.png",c=JSON.parse('{"title":"Touches","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/touches.md","filePath":"source/methods/geom_relations/touches.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/touches.md"},l=n("",41),e=[l];function p(k,r,E,g,o,d){return a(),i("div",null,e)}const F=s(h,[["render",p]]);export{c as __pageData,F as default};
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const t="/GeometryOps.jl/previews/PR132/assets/gddvonr.BAakL_Iw.png",c=JSON.parse('{"title":"Touches","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/touches.md","filePath":"source/methods/geom_relations/touches.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/touches.md"},l=n("",41),e=[l];function p(k,r,E,g,o,d){return a(),i("div",null,e)}const F=s(h,[["render",p]]);export{c as __pageData,F as default};
diff --git a/previews/PR132/assets/source_methods_geom_relations_within.md.Cq_YW4qb.js b/previews/PR132/assets/source_methods_geom_relations_within.md.BfWzueAb.js
similarity index 99%
rename from previews/PR132/assets/source_methods_geom_relations_within.md.Cq_YW4qb.js
rename to previews/PR132/assets/source_methods_geom_relations_within.md.BfWzueAb.js
index 1fa716b64..72d913565 100644
--- a/previews/PR132/assets/source_methods_geom_relations_within.md.Cq_YW4qb.js
+++ b/previews/PR132/assets/source_methods_geom_relations_within.md.BfWzueAb.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/bfbonrv.Ds2sYE96.png",c=JSON.parse('{"title":"Within","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/within.md","filePath":"source/methods/geom_relations/within.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/within.md"},l=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 s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/gadfxrr.Ds2sYE96.png",c=JSON.parse('{"title":"Within","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/within.md","filePath":"source/methods/geom_relations/within.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/within.md"},l=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/previews/PR132/assets/source_methods_geom_relations_within.md.Cq_YW4qb.lean.js b/previews/PR132/assets/source_methods_geom_relations_within.md.BfWzueAb.lean.js
similarity index 88%
rename from previews/PR132/assets/source_methods_geom_relations_within.md.Cq_YW4qb.lean.js
rename to previews/PR132/assets/source_methods_geom_relations_within.md.BfWzueAb.lean.js
index c41036a39..92c917699 100644
--- a/previews/PR132/assets/source_methods_geom_relations_within.md.Cq_YW4qb.lean.js
+++ b/previews/PR132/assets/source_methods_geom_relations_within.md.BfWzueAb.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/bfbonrv.Ds2sYE96.png",c=JSON.parse('{"title":"Within","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/within.md","filePath":"source/methods/geom_relations/within.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/within.md"},l=n("",41),e=[l];function p(k,r,E,g,d,o){return a(),i("div",null,e)}const F=s(t,[["render",p]]);export{c as __pageData,F as default};
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/gadfxrr.Ds2sYE96.png",c=JSON.parse('{"title":"Within","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/within.md","filePath":"source/methods/geom_relations/within.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/within.md"},l=n("",41),e=[l];function p(k,r,E,g,d,o){return a(),i("div",null,e)}const F=s(t,[["render",p]]);export{c as __pageData,F as default};
diff --git a/previews/PR132/assets/source_primitives.md.CqLUF1dL.js b/previews/PR132/assets/source_primitives.md.DroAa0kU.js
similarity index 99%
rename from previews/PR132/assets/source_primitives.md.CqLUF1dL.js
rename to previews/PR132/assets/source_primitives.md.DroAa0kU.js
index 4fe00bfc9..56f65a5ec 100644
--- a/previews/PR132/assets/source_primitives.md.CqLUF1dL.js
+++ b/previews/PR132/assets/source_primitives.md.DroAa0kU.js
@@ -1,7 +1,7 @@
 import{_ as s,c as i,o as a,a6 as t}from"./chunks/framework.DwyrAfcZ.js";const o=JSON.parse('{"title":"Primitive functions","description":"","frontmatter":{},"headers":[],"relativePath":"source/primitives.md","filePath":"source/primitives.md","lastUpdated":null}'),n={name:"source/primitives.md"},h=t(`

Primitive functions

julia
export apply, applyreduce, TraitTarget

This file mainly defines the apply and applyreduce functions, and some related functionality.

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.

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
     (GI.y(p), GI.x(p))
 end

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

Missing docstring.

Missing docstring for apply. Check Documenter's build log for details.

Missing docstring.

Missing docstring for applyreduce. Check Documenter's build log for details.

Missing docstring.

Missing docstring for GeometryOps.unwrap. Check Documenter's build log for details.

# GeometryOps.flattenFunction.
julia
flatten(target::Type{<:GI.AbstractTrait}, obj)
-flatten(f, target::Type{<:GI.AbstractTrait}, obj)

Lazily flatten any AbstractArray, iterator, FeatureCollectionTrait, FeatureTrait or AbstractGeometryTrait object obj, so that objects with the target trait are returned by the iterator.

If f is passed in it will be applied to the target geometries.

source


# GeometryOps.reconstructFunction.
julia
reconstruct(geom, components)

Reconstruct geom from an iterable of component objects that match its structure.

All objects in components must have the same GeoInterface.trait.

Ususally used in combination with flatten.

source


# GeometryOps.rebuildFunction.
julia
rebuild(geom, child_geoms)

Rebuild a geometry from child geometries.

By default geometries will be rebuilt as a GeoInterface.Wrappers geometry, but rebuild can have methods added to it to dispatch on geometries from other packages and specify how to rebuild them.

(Maybe it should go into GeoInterface.jl)

source


Types

Missing docstring.

Missing docstring for TraitTarget. Check Documenter's build log for details.

Implementation

We pass threading and calc_extent as types, not simple boolean values.

This is to help compilation - with a type to hold on to, it's easier for the compiler to separate threaded and non-threaded code paths.

Note that if we didn't include the parent abstract type, this would have been really type unstable, since the compiler couldn't tell what would be returned!

We had to add the type annotation on the _booltype(::Bool) method for this reason as well.

julia
abstract type BoolsAsTypes end
+flatten(f, target::Type{<:GI.AbstractTrait}, obj)

Lazily flatten any AbstractArray, iterator, FeatureCollectionTrait, FeatureTrait or AbstractGeometryTrait object obj, so that objects with the target trait are returned by the iterator.

If f is passed in it will be applied to the target geometries.

source


# GeometryOps.reconstructFunction.
julia
reconstruct(geom, components)

Reconstruct geom from an iterable of component objects that match its structure.

All objects in components must have the same GeoInterface.trait.

Ususally used in combination with flatten.

source


# GeometryOps.rebuildFunction.
julia
rebuild(geom, child_geoms)

Rebuild a geometry from child geometries.

By default geometries will be rebuilt as a GeoInterface.Wrappers geometry, but rebuild can have methods added to it to dispatch on geometries from other packages and specify how to rebuild them.

(Maybe it should go into GeoInterface.jl)

source


Types

Missing docstring.

Missing docstring for TraitTarget. Check Documenter's build log for details.

Implementation

We pass threading and calc_extent as types, not simple boolean values.

This is to help compilation - with a type to hold on to, it's easier for the compiler to separate threaded and non-threaded code paths.

Note that if we didn't include the parent abstract type, this would have been really type unstable, since the compiler couldn't tell what would be returned!

We had to add the type annotation on the _booltype(::Bool) method for this reason as well.

julia
abstract type BoolsAsTypes end
 struct _True <: BoolsAsTypes end
 struct _False <: BoolsAsTypes end
 
diff --git a/previews/PR132/assets/source_primitives.md.CqLUF1dL.lean.js b/previews/PR132/assets/source_primitives.md.DroAa0kU.lean.js
similarity index 100%
rename from previews/PR132/assets/source_primitives.md.CqLUF1dL.lean.js
rename to previews/PR132/assets/source_primitives.md.DroAa0kU.lean.js
diff --git a/previews/PR132/assets/source_transformations_correction_geometry_correction.md.BmfA0zdi.js b/previews/PR132/assets/source_transformations_correction_geometry_correction.md.Du3higiW.js
similarity index 97%
rename from previews/PR132/assets/source_transformations_correction_geometry_correction.md.BmfA0zdi.js
rename to previews/PR132/assets/source_transformations_correction_geometry_correction.md.Du3higiW.js
index a3cf18d80..bf3a0acf9 100644
--- a/previews/PR132/assets/source_transformations_correction_geometry_correction.md.BmfA0zdi.js
+++ b/previews/PR132/assets/source_transformations_correction_geometry_correction.md.Du3higiW.js
@@ -1,4 +1,4 @@
-import{_ as i,c as s,o as e,a6 as t}from"./chunks/framework.DwyrAfcZ.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}'),a={name:"source/transformations/correction/geometry_correction.md"},n=t(`

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.

# GeometryOps.GeometryCorrectionType.
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


Any geometry correction must implement the interface as given above.

julia
"""
+import{_ as i,c as s,o as e,a6 as t}from"./chunks/framework.DwyrAfcZ.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}'),a={name:"source/transformations/correction/geometry_correction.md"},n=t(`

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.

# GeometryOps.GeometryCorrectionType.
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


Any geometry correction must implement the interface as given above.

julia
"""
     abstract type GeometryCorrection
 
 This abstract type represents a geometry correction.
@@ -28,4 +28,4 @@ import{_ as i,c as s,o as e,a6 as t}from"./chunks/framework.DwyrAfcZ.js";const g
         final_geometry = apply(net_function, Trait, final_geometry; kwargs...)
     end
     return final_geometry
-end

Available corrections

# GeometryOps.ClosedRingType.
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.DiffIntersectingPolygonsType.
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.GeometryCorrectionType.
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.UnionIntersectingPolygonsType.
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.

`,23),r=[n];function o(l,p,h,c,k,d){return e(),s("div",null,r)}const m=i(a,[["render",o]]);export{g as __pageData,m as default}; +end

Available corrections

# GeometryOps.ClosedRingType.
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.DiffIntersectingPolygonsType.
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.GeometryCorrectionType.
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.UnionIntersectingPolygonsType.
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.

`,23),r=[n];function o(l,p,h,c,k,d){return e(),s("div",null,r)}const m=i(a,[["render",o]]);export{g as __pageData,m as default}; diff --git a/previews/PR132/assets/source_transformations_correction_geometry_correction.md.BmfA0zdi.lean.js b/previews/PR132/assets/source_transformations_correction_geometry_correction.md.Du3higiW.lean.js similarity index 100% rename from previews/PR132/assets/source_transformations_correction_geometry_correction.md.BmfA0zdi.lean.js rename to previews/PR132/assets/source_transformations_correction_geometry_correction.md.Du3higiW.lean.js diff --git a/previews/PR132/assets/source_transformations_segmentize.md.CVzw3lzP.js b/previews/PR132/assets/source_transformations_segmentize.md.yaEXHyJl.js similarity index 99% rename from previews/PR132/assets/source_transformations_segmentize.md.CVzw3lzP.js rename to previews/PR132/assets/source_transformations_segmentize.md.yaEXHyJl.js index f6ef9e6d8..776aed006 100644 --- a/previews/PR132/assets/source_transformations_segmentize.md.CVzw3lzP.js +++ b/previews/PR132/assets/source_transformations_segmentize.md.yaEXHyJl.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/zrlfabc.CSJSpxcf.png",t="/GeometryOps.jl/previews/PR132/assets/ciggpmu.aNgfNHzl.png",c=JSON.parse('{"title":"Segmentize","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/segmentize.md","filePath":"source/transformations/segmentize.md","lastUpdated":null}'),l={name:"source/transformations/segmentize.md"},e=n(`

Segmentize

julia
export segmentize
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/wnihadm.CSJSpxcf.png",t="/GeometryOps.jl/previews/PR132/assets/nnfazis.CW3lUt64.png",c=JSON.parse('{"title":"Segmentize","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/segmentize.md","filePath":"source/transformations/segmentize.md","lastUpdated":null}'),l={name:"source/transformations/segmentize.md"},e=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/previews/PR132/assets/source_transformations_segmentize.md.CVzw3lzP.lean.js b/previews/PR132/assets/source_transformations_segmentize.md.yaEXHyJl.lean.js
similarity index 67%
rename from previews/PR132/assets/source_transformations_segmentize.md.CVzw3lzP.lean.js
rename to previews/PR132/assets/source_transformations_segmentize.md.yaEXHyJl.lean.js
index 05b70f421..e47dc6249 100644
--- a/previews/PR132/assets/source_transformations_segmentize.md.CVzw3lzP.lean.js
+++ b/previews/PR132/assets/source_transformations_segmentize.md.yaEXHyJl.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/zrlfabc.CSJSpxcf.png",t="/GeometryOps.jl/previews/PR132/assets/ciggpmu.aNgfNHzl.png",c=JSON.parse('{"title":"Segmentize","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/segmentize.md","filePath":"source/transformations/segmentize.md","lastUpdated":null}'),l={name:"source/transformations/segmentize.md"},e=n("",34),k=[e];function p(r,E,d,g,y,o){return a(),i("div",null,k)}const C=s(l,[["render",p]]);export{c as __pageData,C as default};
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/wnihadm.CSJSpxcf.png",t="/GeometryOps.jl/previews/PR132/assets/nnfazis.CW3lUt64.png",c=JSON.parse('{"title":"Segmentize","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/segmentize.md","filePath":"source/transformations/segmentize.md","lastUpdated":null}'),l={name:"source/transformations/segmentize.md"},e=n("",34),k=[e];function p(r,E,d,g,y,o){return a(),i("div",null,k)}const C=s(l,[["render",p]]);export{c as __pageData,C as default};
diff --git a/previews/PR132/assets/source_transformations_simplify.md.C34hGBUB.js b/previews/PR132/assets/source_transformations_simplify.md.gajA_VAb.js
similarity index 99%
rename from previews/PR132/assets/source_transformations_simplify.md.C34hGBUB.js
rename to previews/PR132/assets/source_transformations_simplify.md.gajA_VAb.js
index 7c3bafa4f..a7d08d82e 100644
--- a/previews/PR132/assets/source_transformations_simplify.md.C34hGBUB.js
+++ b/previews/PR132/assets/source_transformations_simplify.md.gajA_VAb.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/vdswyrd.D0KaCXTv.png",l="/GeometryOps.jl/previews/PR132/assets/diyxabj.DJCzswBC.png",k="/GeometryOps.jl/previews/PR132/assets/pwyklkx.BSDTl5gf.png",p="/GeometryOps.jl/previews/PR132/assets/oknrzqz.CORbz751.png",u=JSON.parse('{"title":"Geometry simplification","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/simplify.md","filePath":"source/transformations/simplify.md","lastUpdated":null}'),t={name:"source/transformations/simplify.md"},e=n(`

Geometry simplification

This file holds implementations for the RadialDistance, Douglas-Peucker, and Visvalingam-Whyatt algorithms for simplifying geometries (specifically for polygons and lines).

Examples

A quick and dirty example is:

julia
using Makie, GeoInterfaceMakie
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/udpdhrm.D0KaCXTv.png",l="/GeometryOps.jl/previews/PR132/assets/iddkawd.DJCzswBC.png",k="/GeometryOps.jl/previews/PR132/assets/pzgcheu.yrQahVCT.png",p="/GeometryOps.jl/previews/PR132/assets/oqxvtpw.BWDs4AnB.png",u=JSON.parse('{"title":"Geometry simplification","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/simplify.md","filePath":"source/transformations/simplify.md","lastUpdated":null}'),t={name:"source/transformations/simplify.md"},e=n(`

Geometry simplification

This file holds implementations for the RadialDistance, Douglas-Peucker, and Visvalingam-Whyatt algorithms for simplifying geometries (specifically for polygons and lines).

Examples

A quick and dirty example is:

julia
using Makie, GeoInterfaceMakie
 import GeoInterface as GI
 import GeometryOps as GO
 
diff --git a/previews/PR132/assets/source_transformations_simplify.md.C34hGBUB.lean.js b/previews/PR132/assets/source_transformations_simplify.md.gajA_VAb.lean.js
similarity index 56%
rename from previews/PR132/assets/source_transformations_simplify.md.C34hGBUB.lean.js
rename to previews/PR132/assets/source_transformations_simplify.md.gajA_VAb.lean.js
index 5968927ae..46524650b 100644
--- a/previews/PR132/assets/source_transformations_simplify.md.C34hGBUB.lean.js
+++ b/previews/PR132/assets/source_transformations_simplify.md.gajA_VAb.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/vdswyrd.D0KaCXTv.png",l="/GeometryOps.jl/previews/PR132/assets/diyxabj.DJCzswBC.png",k="/GeometryOps.jl/previews/PR132/assets/pwyklkx.BSDTl5gf.png",p="/GeometryOps.jl/previews/PR132/assets/oknrzqz.CORbz751.png",u=JSON.parse('{"title":"Geometry simplification","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/simplify.md","filePath":"source/transformations/simplify.md","lastUpdated":null}'),t={name:"source/transformations/simplify.md"},e=n("",64),E=[e];function r(d,g,y,F,o,c){return a(),i("div",null,E)}const D=s(t,[["render",r]]);export{u as __pageData,D as default};
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.DwyrAfcZ.js";const h="/GeometryOps.jl/previews/PR132/assets/udpdhrm.D0KaCXTv.png",l="/GeometryOps.jl/previews/PR132/assets/iddkawd.DJCzswBC.png",k="/GeometryOps.jl/previews/PR132/assets/pzgcheu.yrQahVCT.png",p="/GeometryOps.jl/previews/PR132/assets/oqxvtpw.BWDs4AnB.png",u=JSON.parse('{"title":"Geometry simplification","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/simplify.md","filePath":"source/transformations/simplify.md","lastUpdated":null}'),t={name:"source/transformations/simplify.md"},e=n("",64),E=[e];function r(d,g,y,F,o,c){return a(),i("div",null,E)}const D=s(t,[["render",r]]);export{u as __pageData,D as default};
diff --git a/previews/PR132/assets/tutorials_spatial_joins.md.CzO6kOA_.js b/previews/PR132/assets/tutorials_spatial_joins.md.BnCwn-5y.js
similarity index 99%
rename from previews/PR132/assets/tutorials_spatial_joins.md.CzO6kOA_.js
rename to previews/PR132/assets/tutorials_spatial_joins.md.BnCwn-5y.js
index 008ca4bfa..0a769378a 100644
--- a/previews/PR132/assets/tutorials_spatial_joins.md.CzO6kOA_.js
+++ b/previews/PR132/assets/tutorials_spatial_joins.md.BnCwn-5y.js
@@ -1,4 +1,4 @@
-import{_ as h,c as a,l as s,a as i,a6 as n,o as t}from"./chunks/framework.DwyrAfcZ.js";const e="/GeometryOps.jl/previews/PR132/assets/mzcgfew.Cf1QgLcf.png",l="/GeometryOps.jl/previews/PR132/assets/tygbclx.C-1YCsV2.png",p="/GeometryOps.jl/previews/PR132/assets/zehbvxd.jsDKMuZN.png",B=JSON.parse('{"title":"Spatial joins","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/spatial_joins.md","filePath":"tutorials/spatial_joins.md","lastUpdated":null}'),k={name:"tutorials/spatial_joins.md"},r=s("h1",{id:"Spatial-joins",tabindex:"-1"},[i("Spatial joins "),s("a",{class:"header-anchor",href:"#Spatial-joins","aria-label":'Permalink to "Spatial joins {#Spatial-joins}"'},"​")],-1),E=s("a",{href:"https://www.geeksforgeeks.org/sql-join-set-1-inner-left-right-and-full-joins/",target:"_blank",rel:"noreferrer"},"table joins",-1),d={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:"6.307ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 2787.7 1000","aria-hidden":"true"},g=n('',1),y=[g],c=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,"p"),s("mo",{stretchy:"false"},"("),s("mi",null,"x"),s("mo",null,","),s("mi",null,"y"),s("mo",{stretchy:"false"},")")])],-1),F=s("code",null,"true",-1),u=s("code",null,"false",-1),m=s("a",{href:"https://en.wikipedia.org/wiki/DE-9IM",target:"_blank",rel:"noreferrer"},[s("code",null,"DE-9IM")],-1),C=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:

julia
[inner/left/right/outer/...]join((table1, table1),
+import{_ as h,c as a,l as s,a as i,a6 as n,o as t}from"./chunks/framework.DwyrAfcZ.js";const e="/GeometryOps.jl/previews/PR132/assets/eangekg.Cf1QgLcf.png",l="/GeometryOps.jl/previews/PR132/assets/qnwqftp.Cvf79f8w.png",p="/GeometryOps.jl/previews/PR132/assets/kdowwby.BoTBsej-.png",B=JSON.parse('{"title":"Spatial joins","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/spatial_joins.md","filePath":"tutorials/spatial_joins.md","lastUpdated":null}'),k={name:"tutorials/spatial_joins.md"},r=s("h1",{id:"Spatial-joins",tabindex:"-1"},[i("Spatial joins "),s("a",{class:"header-anchor",href:"#Spatial-joins","aria-label":'Permalink to "Spatial joins {#Spatial-joins}"'},"​")],-1),E=s("a",{href:"https://www.geeksforgeeks.org/sql-join-set-1-inner-left-right-and-full-joins/",target:"_blank",rel:"noreferrer"},"table joins",-1),d={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:"6.307ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 2787.7 1000","aria-hidden":"true"},g=n('',1),y=[g],c=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,"p"),s("mo",{stretchy:"false"},"("),s("mi",null,"x"),s("mo",null,","),s("mi",null,"y"),s("mo",{stretchy:"false"},")")])],-1),F=s("code",null,"true",-1),u=s("code",null,"false",-1),m=s("a",{href:"https://en.wikipedia.org/wiki/DE-9IM",target:"_blank",rel:"noreferrer"},[s("code",null,"DE-9IM")],-1),C=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:

julia
[inner/left/right/outer/...]join((table1, table1),
     by_pred(:table1_column, predicate_function, :table2_column) # & add other conditions here
 )

We have enabled the use of all of GeometryOps' boolean comparisons here. These are:

julia
GO.contains, GO.within, GO.intersects, GO.touches, GO.crosses, GO.disjoint, GO.overlaps, GO.covers, GO.coveredby, GO.equals

Tip

Always place the dataframe with more complex geometries second, as that is the one which will be sorted into a tree.

Simple example

This example demonstrates how to perform a spatial join between two datasets: a set of polygons and a set of randomly generated points.

The polygons are represented as a DataFrame with geometries and colors, while the points are stored in a separate DataFrame.

The spatial join is performed using the contains predicate from GeometryOps, which checks if each point is contained within any of the polygons. The resulting joined DataFrame is then used to plot the points, colored according to the containing polygon.

First, we generate our data. We create two triangle polygons which, together, span the rectangle (0, 0, 1, 1), and a set of points which are randomly distributed within this rectangle.

julia
import GeoInterface as GI, GeometryOps as GO
 using FlexiJoins, DataFrames
@@ -39,4 +39,4 @@ import{_ as h,c as a,l as s,a as i,a6 as n,o as t}from"./chunks/framework.DwyrAf
     ::FlexiJoins.Mode.NestedLoopFast, 
     ::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).

`,37);function T(_,f,D,Q,b,w){return t(),a("div",null,[r,s("p",null,[i("Spatial joins are "),E,i(" which are based not on equality, but on some predicate "),s("mjx-container",d,[(t(),a("svg",o,y)),c]),i(", which takes two geometries, and returns a value of either "),F,i(" or "),u,i(". For geometries, the "),m,i(" spatial relationship model is used to determine the spatial relationship between two geometries.")]),C])}const v=h(k,[["render",T]]);export{B as __pageData,v as default}; +) = true

This will enable FlexiJoins to support your custom function, when it's passed to by_pred(:geometry, my_predicate_function, :geometry).

`,37);function T(_,f,w,Q,D,b){return t(),a("div",null,[r,s("p",null,[i("Spatial joins are "),E,i(" which are based not on equality, but on some predicate "),s("mjx-container",d,[(t(),a("svg",o,y)),c]),i(", which takes two geometries, and returns a value of either "),F,i(" or "),u,i(". For geometries, the "),m,i(" spatial relationship model is used to determine the spatial relationship between two geometries.")]),C])}const v=h(k,[["render",T]]);export{B as __pageData,v as default}; diff --git a/previews/PR132/assets/tutorials_spatial_joins.md.CzO6kOA_.lean.js b/previews/PR132/assets/tutorials_spatial_joins.md.BnCwn-5y.lean.js similarity index 89% rename from previews/PR132/assets/tutorials_spatial_joins.md.CzO6kOA_.lean.js rename to previews/PR132/assets/tutorials_spatial_joins.md.BnCwn-5y.lean.js index 098654a8a..4810f5141 100644 --- a/previews/PR132/assets/tutorials_spatial_joins.md.CzO6kOA_.lean.js +++ b/previews/PR132/assets/tutorials_spatial_joins.md.BnCwn-5y.lean.js @@ -1 +1 @@ -import{_ as h,c as a,l as s,a as i,a6 as n,o as t}from"./chunks/framework.DwyrAfcZ.js";const e="/GeometryOps.jl/previews/PR132/assets/mzcgfew.Cf1QgLcf.png",l="/GeometryOps.jl/previews/PR132/assets/tygbclx.C-1YCsV2.png",p="/GeometryOps.jl/previews/PR132/assets/zehbvxd.jsDKMuZN.png",B=JSON.parse('{"title":"Spatial joins","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/spatial_joins.md","filePath":"tutorials/spatial_joins.md","lastUpdated":null}'),k={name:"tutorials/spatial_joins.md"},r=s("h1",{id:"Spatial-joins",tabindex:"-1"},[i("Spatial joins "),s("a",{class:"header-anchor",href:"#Spatial-joins","aria-label":'Permalink to "Spatial joins {#Spatial-joins}"'},"​")],-1),E=s("a",{href:"https://www.geeksforgeeks.org/sql-join-set-1-inner-left-right-and-full-joins/",target:"_blank",rel:"noreferrer"},"table joins",-1),d={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:"6.307ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 2787.7 1000","aria-hidden":"true"},g=n("",1),y=[g],c=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,"p"),s("mo",{stretchy:"false"},"("),s("mi",null,"x"),s("mo",null,","),s("mi",null,"y"),s("mo",{stretchy:"false"},")")])],-1),F=s("code",null,"true",-1),u=s("code",null,"false",-1),m=s("a",{href:"https://en.wikipedia.org/wiki/DE-9IM",target:"_blank",rel:"noreferrer"},[s("code",null,"DE-9IM")],-1),C=n("",37);function T(_,f,D,Q,b,w){return t(),a("div",null,[r,s("p",null,[i("Spatial joins are "),E,i(" which are based not on equality, but on some predicate "),s("mjx-container",d,[(t(),a("svg",o,y)),c]),i(", which takes two geometries, and returns a value of either "),F,i(" or "),u,i(". For geometries, the "),m,i(" spatial relationship model is used to determine the spatial relationship between two geometries.")]),C])}const v=h(k,[["render",T]]);export{B as __pageData,v as default}; +import{_ as h,c as a,l as s,a as i,a6 as n,o as t}from"./chunks/framework.DwyrAfcZ.js";const e="/GeometryOps.jl/previews/PR132/assets/eangekg.Cf1QgLcf.png",l="/GeometryOps.jl/previews/PR132/assets/qnwqftp.Cvf79f8w.png",p="/GeometryOps.jl/previews/PR132/assets/kdowwby.BoTBsej-.png",B=JSON.parse('{"title":"Spatial joins","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/spatial_joins.md","filePath":"tutorials/spatial_joins.md","lastUpdated":null}'),k={name:"tutorials/spatial_joins.md"},r=s("h1",{id:"Spatial-joins",tabindex:"-1"},[i("Spatial joins "),s("a",{class:"header-anchor",href:"#Spatial-joins","aria-label":'Permalink to "Spatial joins {#Spatial-joins}"'},"​")],-1),E=s("a",{href:"https://www.geeksforgeeks.org/sql-join-set-1-inner-left-right-and-full-joins/",target:"_blank",rel:"noreferrer"},"table joins",-1),d={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:"6.307ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 2787.7 1000","aria-hidden":"true"},g=n("",1),y=[g],c=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,"p"),s("mo",{stretchy:"false"},"("),s("mi",null,"x"),s("mo",null,","),s("mi",null,"y"),s("mo",{stretchy:"false"},")")])],-1),F=s("code",null,"true",-1),u=s("code",null,"false",-1),m=s("a",{href:"https://en.wikipedia.org/wiki/DE-9IM",target:"_blank",rel:"noreferrer"},[s("code",null,"DE-9IM")],-1),C=n("",37);function T(_,f,w,Q,D,b){return t(),a("div",null,[r,s("p",null,[i("Spatial joins are "),E,i(" which are based not on equality, but on some predicate "),s("mjx-container",d,[(t(),a("svg",o,y)),c]),i(", which takes two geometries, and returns a value of either "),F,i(" or "),u,i(". For geometries, the "),m,i(" spatial relationship model is used to determine the spatial relationship between two geometries.")]),C])}const v=h(k,[["render",T]]);export{B as __pageData,v as default}; diff --git a/previews/PR132/assets/tygbclx.C-1YCsV2.png b/previews/PR132/assets/tygbclx.C-1YCsV2.png deleted file mode 100644 index 6d68b0dd9..000000000 Binary files a/previews/PR132/assets/tygbclx.C-1YCsV2.png and /dev/null differ diff --git a/previews/PR132/assets/vdswyrd.D0KaCXTv.png b/previews/PR132/assets/udpdhrm.D0KaCXTv.png similarity index 100% rename from previews/PR132/assets/vdswyrd.D0KaCXTv.png rename to previews/PR132/assets/udpdhrm.D0KaCXTv.png diff --git a/previews/PR132/assets/zrlfabc.CSJSpxcf.png b/previews/PR132/assets/wnihadm.CSJSpxcf.png similarity index 100% rename from previews/PR132/assets/zrlfabc.CSJSpxcf.png rename to previews/PR132/assets/wnihadm.CSJSpxcf.png diff --git a/previews/PR132/assets/wtuksgq.BW-TtaGG.png b/previews/PR132/assets/wtuksgq.BW-TtaGG.png deleted file mode 100644 index 1a87a5741..000000000 Binary files a/previews/PR132/assets/wtuksgq.BW-TtaGG.png and /dev/null differ diff --git a/previews/PR132/assets/ghwthzl.CRkh0NvJ.png b/previews/PR132/assets/xmljjhi.CRkh0NvJ.png similarity index 100% rename from previews/PR132/assets/ghwthzl.CRkh0NvJ.png rename to previews/PR132/assets/xmljjhi.CRkh0NvJ.png diff --git a/previews/PR132/assets/zehbvxd.jsDKMuZN.png b/previews/PR132/assets/zehbvxd.jsDKMuZN.png deleted file mode 100644 index 2586151f9..000000000 Binary files a/previews/PR132/assets/zehbvxd.jsDKMuZN.png and /dev/null differ diff --git a/previews/PR132/call_notes.html b/previews/PR132/call_notes.html index 0c91d444c..f7068484f 100644 --- a/previews/PR132/call_notes.html +++ b/previews/PR132/call_notes.html @@ -8,9 +8,9 @@ - + - + @@ -18,8 +18,8 @@ -
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
- +
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/previews/PR132/experiments/accurate_accumulators.html b/previews/PR132/experiments/accurate_accumulators.html index db4862b7a..faec5a5ac 100644 --- a/previews/PR132/experiments/accurate_accumulators.html +++ b/previews/PR132/experiments/accurate_accumulators.html @@ -8,9 +8,9 @@ - + - + @@ -18,13 +18,13 @@ -
Skip to content

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
+    
Skip to content

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
 
 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/previews/PR132/experiments/predicates.html b/previews/PR132/experiments/predicates.html index 430550f42..0155ef797 100644 --- a/previews/PR132/experiments/predicates.html +++ b/previews/PR132/experiments/predicates.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content

Predicates

Exact vs fast predicates

Orient

julia
using CairoMakie
+    
Skip to content

Predicates

Exact vs fast predicates

Orient

julia
using CairoMakie
 import GeometryOps as GO, GeoInterface as GI, LibGEOS as LG
 import ExactPredicates
 using MultiFloats
@@ -59,7 +59,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
@@ -116,7 +116,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/previews/PR132/hashmap.json b/previews/PR132/hashmap.json index c2a318d4d..402b37be3 100644 --- a/previews/PR132/hashmap.json +++ b/previews/PR132/hashmap.json @@ -1 +1 @@ -{"source_geometryops.md":"C-9QA5_J","peculiarities.md":"D5cXHxKr","paper.md":"XkFGF4fh","introduction.md":"BhVBv-aa","paradigms.md":"DPoTlOMI","source_methods_clipping_cut.md":"66NKRs8v","source_methods_geom_relations_disjoint.md":"CrfwOTky","source_methods_clipping_difference.md":"DDnj51qd","source_methods_clipping_intersection.md":"eTeRYo_m","source_methods_clipping_coverage.md":"BFn8JNJH","call_notes.md":"Bjcekf9p","source_methods_angles.md":"Pp5RcZGM","experiments_accurate_accumulators.md":"BdiIVgvj","source_methods_barycentric.md":"Dz_liD_U","source_methods_geom_relations_contains.md":"DwBZ1q51","source_methods_geom_relations_crosses.md":"CCgRrDwz","experiments_predicates.md":"BK6umPfB","source_methods_distance.md":"ZjYjoSx1","source_methods_geom_relations_coveredby.md":"DYU7w674","source_methods_geom_relations_covers.md":"DQmLsEEi","index.md":"DE1mzPOJ","source_methods_clipping_clipping_processor.md":"ggoVDF4-","source_methods_area.md":"qRPYrLA9","source_methods_equals.md":"PLfLLjm5","source_methods_centroid.md":"DOwcNbAs","api.md":"BQfhnVqd","source_methods_clipping_union.md":"1Itjjk-c","source_methods_geom_relations_overlaps.md":"D6NPg5gM","source_methods_geom_relations_geom_geom_processors.md":"BLUm0h0u","source_methods_orientation.md":"jfVVJm3T","source_methods_polygonize.md":"DCANhrAM","source_methods_geom_relations_touches.md":"BINgXAnb","source_methods_geom_relations_within.md":"Cq_YW4qb","source_methods_geom_relations_intersects.md":"CfcaliMp","source_transformations_tuples.md":"Fl7qCpM9","source_transformations_flip.md":"Ce3cv8Z-","source_transformations_extent.md":"BOGsxidO","source_transformations_reproject.md":"d0gh5wEB","source_transformations_correction_intersecting_polygons.md":"DR_3JzBY","source_transformations_correction_geometry_correction.md":"BmfA0zdi","source_transformations_transform.md":"CFLaCVx-","source_transformations_segmentize.md":"CVzw3lzP","source_transformations_correction_closed_ring.md":"CcRCO0nb","tutorials_spatial_joins.md":"CzO6kOA_","source_utils.md":"HXtGff9u","source_transformations_simplify.md":"C34hGBUB","source_primitives.md":"CqLUF1dL"} +{"source_methods_geom_relations_crosses.md":"CCgRrDwz","source_methods_centroid.md":"CpaM4qPi","index.md":"DE1mzPOJ","source_methods_geom_relations_covers.md":"BfjggEzE","paper.md":"XkFGF4fh","call_notes.md":"Bjcekf9p","introduction.md":"BhVBv-aa","source_geometryops.md":"C-9QA5_J","source_methods_angles.md":"CHffdzPJ","peculiarities.md":"D5cXHxKr","source_primitives.md":"DroAa0kU","source_methods_area.md":"DbYMCiWo","source_methods_geom_relations_within.md":"BfWzueAb","source_transformations_segmentize.md":"yaEXHyJl","experiments_predicates.md":"BwuBYXCq","paradigms.md":"DPoTlOMI","source_transformations_correction_intersecting_polygons.md":"DR_3JzBY","source_methods_clipping_coverage.md":"A6pT9-1x","source_transformations_flip.md":"Ce3cv8Z-","source_methods_geom_relations_coveredby.md":"C2ypfZTV","source_methods_distance.md":"I2oRuWOQ","source_methods_barycentric.md":"BesaTCvc","source_methods_equals.md":"DtcEHiAp","source_methods_polygonize.md":"DCANhrAM","source_methods_geom_relations_contains.md":"Dq1RJQzA","source_methods_orientation.md":"jfVVJm3T","source_methods_geom_relations_disjoint.md":"Caq4g8FD","source_methods_clipping_cut.md":"CcYYqZO_","source_transformations_transform.md":"CFLaCVx-","source_transformations_reproject.md":"d0gh5wEB","api.md":"DJJ0t0ks","source_utils.md":"HXtGff9u","experiments_accurate_accumulators.md":"BdiIVgvj","source_methods_geom_relations_touches.md":"OrEvQveX","source_methods_clipping_union.md":"1Itjjk-c","source_methods_clipping_clipping_processor.md":"ggoVDF4-","source_transformations_tuples.md":"Fl7qCpM9","source_transformations_correction_geometry_correction.md":"Du3higiW","tutorials_spatial_joins.md":"BnCwn-5y","source_transformations_extent.md":"BOGsxidO","source_transformations_correction_closed_ring.md":"CcRCO0nb","source_methods_clipping_difference.md":"DDnj51qd","source_methods_geom_relations_intersects.md":"Chrh7h5G","source_methods_geom_relations_geom_geom_processors.md":"BLUm0h0u","source_methods_geom_relations_overlaps.md":"BhFrzhO0","source_methods_clipping_intersection.md":"eTeRYo_m","source_transformations_simplify.md":"gajA_VAb"} diff --git a/previews/PR132/index.html b/previews/PR132/index.html index 33323aa24..2809a7484 100644 --- a/previews/PR132/index.html +++ b/previews/PR132/index.html @@ -8,9 +8,9 @@ - + - + @@ -18,8 +18,8 @@ -
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!

- +
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!

+ \ No newline at end of file diff --git a/previews/PR132/introduction.html b/previews/PR132/introduction.html index 0b98d3713..54625a34c 100644 --- a/previews/PR132/introduction.html +++ b/previews/PR132/introduction.html @@ -8,9 +8,9 @@ - + - + @@ -18,8 +18,8 @@ -
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.

- +
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/previews/PR132/paper.html b/previews/PR132/paper.html index 02f0214bd..d3a6d950f 100644 --- a/previews/PR132/paper.html +++ b/previews/PR132/paper.html @@ -8,9 +8,9 @@ - + - + @@ -18,8 +18,8 @@ -
Skip to content

Paper

This page will follow the JOSS template, but I'm just getting some ideas down that we can use later if required.

Statement of need

Note

These are basically a bunch of ideas/lines that we can use, it's not fleshed out yet!

Many full-featured geospatial libraries exist already - GEOS (and its predecessor JTS) being the main sources from which libraries like GDAL, R's sf, Python's shapely and others obtain functionality.

GeometryOps is able to integrate all of Julia's functionality like arbitrary float types and multiple dispatch. This, along with being written in a high-level language like Julia, significantly lowers the barrier to entry for new contributors. We are aiming to make impossible workflows (whether because of memory constraints, speed, or lack of good algorithms) possible, not merely for performance improvement!

A guiding philosophy of GeometryOps is the ability to provide choice. Consider the segmentize function - users can choose whether to interpolate in linear (handled directly) or geodetic (handled by Karney's GeographicLib) space. This is not a functionality that is available in most other libraries, where one must instead choose the library (for example, s2 vs sf) or activate a global switch to toggle certain functionality.

Another example of this philosophy is the fix interface. Users can create their own fixes, relative to their needs, and hook those into an already known syntax. Error messages can be customized and users can potentially even have them show plots indicating exactly where the error is. No other geometry library (to my knowledge) offers this level of flexibility.

GeometryOps also utilizes exact predicates to return geometrically correct answers, which even GEOS does not.

Ongoing research projects

  • CLiMA ice floes

  • Alex Gardner's stuff

  • Anyone else?

Citations

  • Core Julia packages: julia, ExactPredicates, GeoInterface

  • Foster 2019 paper (polygon clipping)

  • Hao-Sun paper (point-in-polygon)

  • Previous efforts in Julia: PolygonOps.jl, ...

- +
Skip to content

Paper

This page will follow the JOSS template, but I'm just getting some ideas down that we can use later if required.

Statement of need

Note

These are basically a bunch of ideas/lines that we can use, it's not fleshed out yet!

Many full-featured geospatial libraries exist already - GEOS (and its predecessor JTS) being the main sources from which libraries like GDAL, R's sf, Python's shapely and others obtain functionality.

GeometryOps is able to integrate all of Julia's functionality like arbitrary float types and multiple dispatch. This, along with being written in a high-level language like Julia, significantly lowers the barrier to entry for new contributors. We are aiming to make impossible workflows (whether because of memory constraints, speed, or lack of good algorithms) possible, not merely for performance improvement!

A guiding philosophy of GeometryOps is the ability to provide choice. Consider the segmentize function - users can choose whether to interpolate in linear (handled directly) or geodetic (handled by Karney's GeographicLib) space. This is not a functionality that is available in most other libraries, where one must instead choose the library (for example, s2 vs sf) or activate a global switch to toggle certain functionality.

Another example of this philosophy is the fix interface. Users can create their own fixes, relative to their needs, and hook those into an already known syntax. Error messages can be customized and users can potentially even have them show plots indicating exactly where the error is. No other geometry library (to my knowledge) offers this level of flexibility.

GeometryOps also utilizes exact predicates to return geometrically correct answers, which even GEOS does not.

Ongoing research projects

  • CLiMA ice floes

  • Alex Gardner's stuff

  • Anyone else?

Citations

  • Core Julia packages: julia, ExactPredicates, GeoInterface

  • Foster 2019 paper (polygon clipping)

  • Hao-Sun paper (point-in-polygon)

  • Previous efforts in Julia: PolygonOps.jl, ...

+ \ No newline at end of file diff --git a/previews/PR132/paradigms.html b/previews/PR132/paradigms.html index 7bd143760..76efca7c8 100644 --- a/previews/PR132/paradigms.html +++ b/previews/PR132/paradigms.html @@ -8,9 +8,9 @@ - + - + @@ -18,8 +18,8 @@ -
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.)

- +
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/previews/PR132/peculiarities.html b/previews/PR132/peculiarities.html index 2b262b4d5..92473e5b1 100644 --- a/previews/PR132/peculiarities.html +++ b/previews/PR132/peculiarities.html @@ -8,9 +8,9 @@ - + - + @@ -18,8 +18,8 @@ -
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

- +
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/previews/PR132/source/GeometryOps.html b/previews/PR132/source/GeometryOps.html index 41ae9b0e8..c9fc33b2a 100644 --- a/previews/PR132/source/GeometryOps.html +++ b/previews/PR132/source/GeometryOps.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@ -
Skip to content

GeometryOps.jl

julia
module GeometryOps
+    
Skip to content

GeometryOps.jl

julia
module GeometryOps
 
 using GeoInterface
 using GeometryBasics
@@ -84,7 +84,7 @@
 end
 
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/methods/angles.html b/previews/PR132/source/methods/angles.html index bb50ec43e..e7b8cebe7 100644 --- a/previews/PR132/source/methods/angles.html +++ b/previews/PR132/source/methods/angles.html @@ -8,22 +8,22 @@ - + - + - + -
Skip to content

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
+    
Skip to content

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
 
 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
@@ -142,7 +142,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/previews/PR132/source/methods/area.html b/previews/PR132/source/methods/area.html index ca8e444ea..997e0297f 100644 --- a/previews/PR132/source/methods/area.html +++ b/previews/PR132/source/methods/area.html @@ -8,26 +8,26 @@ - + - + - + -
Skip to content

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
+    
Skip to content

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
 
 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 postive 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 postive 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
@@ -105,7 +105,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/previews/PR132/source/methods/barycentric.html b/previews/PR132/source/methods/barycentric.html index 8452f03eb..f43eaa4fc 100644 --- a/previews/PR132/source/methods/barycentric.html +++ b/previews/PR132/source/methods/barycentric.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content

Barycentric coordinates

julia
export barycentric_coordinates, barycentric_coordinates!, barycentric_interpolate
+    
Skip to content

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.

In the case of a triangle, barycentric coordinates are a set of three numbers (λ1,λ2,λ3), 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.

For a polygon with n vertices, generalized barycentric coordinates are a set of n numbers (λ1,λ2,...,λn), 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.

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
@@ -85,7 +85,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
@@ -433,7 +433,7 @@
 
 struct Wachspress <: AbstractBarycentricCoordinateMethod
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/methods/centroid.html b/previews/PR132/source/methods/centroid.html index 75c17933d..d487893ff 100644 --- a/previews/PR132/source/methods/centroid.html +++ b/previews/PR132/source/methods/centroid.html @@ -8,25 +8,25 @@ - + - + - + -
Skip to content

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
+    
Skip to content

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
 
 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 availible 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 availible 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
@@ -111,7 +111,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/previews/PR132/source/methods/clipping/clipping_processor.html b/previews/PR132/source/methods/clipping/clipping_processor.html index 2b17dcc0e..1114b9e3c 100644 --- a/previews/PR132/source/methods/clipping/clipping_processor.html +++ b/previews/PR132/source/methods/clipping/clipping_processor.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@ -
Skip to content

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
+    
Skip to content

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
@@ -445,7 +445,7 @@
     end
     return
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/methods/clipping/coverage.html b/previews/PR132/source/methods/clipping/coverage.html index 58a6eec06..d4c4f96f8 100644 --- a/previews/PR132/source/methods/clipping/coverage.html +++ b/previews/PR132/source/methods/clipping/coverage.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content
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-coordiantes of that bounding box, or an Extent containing that information.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+    
Skip to content
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-coordiantes 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
@@ -28,7 +28,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
@@ -241,7 +241,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/previews/PR132/source/methods/clipping/cut.html b/previews/PR132/source/methods/clipping/cut.html index 9c1057b44..939ecd2b0 100644 --- a/previews/PR132/source/methods/clipping/cut.html +++ b/previews/PR132/source/methods/clipping/cut.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content

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
+    
Skip to content

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
 
@@ -29,7 +29,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
@@ -105,7 +105,7 @@
     end
     return return_coords
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/methods/clipping/difference.html b/previews/PR132/source/methods/clipping/difference.html index 5116b1dff..8f3748367 100644 --- a/previews/PR132/source/methods/clipping/difference.html +++ b/previews/PR132/source/methods/clipping/difference.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@ -
Skip to content

Difference Polygon Clipping

julia
export difference
+    
Skip to content

Difference Polygon Clipping

julia
export difference
 
 
 """
@@ -173,7 +173,7 @@
     )
     return nothing
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/methods/clipping/intersection.html b/previews/PR132/source/methods/clipping/intersection.html index 653345450..3b4795ff6 100644 --- a/previews/PR132/source/methods/clipping/intersection.html +++ b/previews/PR132/source/methods/clipping/intersection.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@ -
Skip to content

Geometry Intersection

julia
export intersection, intersection_points
+    
Skip to content

Geometry Intersection

julia
export intersection, intersection_points
 
 """
     Enum LineOrientation
@@ -306,7 +306,7 @@
     end
     return line_orient, intr1, intr2
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/methods/clipping/union.html b/previews/PR132/source/methods/clipping/union.html index 76478da23..b34c943d9 100644 --- a/previews/PR132/source/methods/clipping/union.html +++ b/previews/PR132/source/methods/clipping/union.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@ -
Skip to content

Union Polygon Clipping

julia
export union
+    
Skip to content

Union Polygon Clipping

julia
export union
 
 """
     union(geom_a, geom_b, [::Type{T}]; target::Type, fix_multipoly = UnionIntersectingPolygons())
@@ -267,7 +267,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/previews/PR132/source/methods/distance.html b/previews/PR132/source/methods/distance.html index b9ab8d51a..4f3405996 100644 --- a/previews/PR132/source/methods/distance.html +++ b/previews/PR132/source/methods/distance.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content

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 postitive or 0.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+    
Skip to content

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 postitive or 0.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -29,13 +29,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
@@ -199,7 +199,7 @@
     end
     return min_dist
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/methods/equals.html b/previews/PR132/source/methods/equals.html index dd038ade1..72a527ec7 100644 --- a/previews/PR132/source/methods/equals.html +++ b/previews/PR132/source/methods/equals.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content

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
+    
Skip to content

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
@@ -29,7 +29,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 commen 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 explicity 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 commen 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 explicity 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.
@@ -283,7 +283,7 @@
     end
     return true
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/methods/geom_relations/contains.html b/previews/PR132/source/methods/geom_relations/contains.html index 7149cc1ef..7772dd720 100644 --- a/previews/PR132/source/methods/geom_relations/contains.html +++ b/previews/PR132/source/methods/geom_relations/contains.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content

Contains

julia
export contains

What is contains?

The contains function checks if a given geometry completly contains another geometry, or in other words, that the second geometry is completly 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
+    
Skip to content

Contains

julia
export contains

What is contains?

The contains function checks if a given geometry completly contains another geometry, or in other words, that the second geometry is completly 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
@@ -29,7 +29,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
 
@@ -51,7 +51,7 @@
 ```
 """
 contains(g1, g2) = GeometryOps.within(g2, g1)

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/methods/geom_relations/coveredby.html b/previews/PR132/source/methods/geom_relations/coveredby.html index c0258db09..62451b52a 100644 --- a/previews/PR132/source/methods/geom_relations/coveredby.html +++ b/previews/PR132/source/methods/geom_relations/coveredby.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content

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
+    
Skip to content

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
@@ -27,7 +27,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,)
@@ -192,7 +192,7 @@
     end
     return true
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/methods/geom_relations/covers.html b/previews/PR132/source/methods/geom_relations/covers.html index 528f6d581..b2db36fcb 100644 --- a/previews/PR132/source/methods/geom_relations/covers.html +++ b/previews/PR132/source/methods/geom_relations/covers.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content

Covers

julia
export covers

What is covers?

The covers function checks if a given geometry completly 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
+    
Skip to content

Covers

julia
export covers

What is covers?

The covers function checks if a given geometry completly 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
@@ -29,7 +29,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
 
@@ -51,7 +51,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/previews/PR132/source/methods/geom_relations/crosses.html b/previews/PR132/source/methods/geom_relations/crosses.html index 907c001db..b97deb8b8 100644 --- a/previews/PR132/source/methods/geom_relations/crosses.html +++ b/previews/PR132/source/methods/geom_relations/crosses.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@ -
Skip to content

Crossing checks

julia
"""
+    
Skip to content

Crossing checks

julia
"""
      crosses(geom1, geom2)::Bool
 
 Return `true` if the intersection results in a geometry whose dimension is one less than
@@ -138,7 +138,7 @@
     end
     return false
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/methods/geom_relations/disjoint.html b/previews/PR132/source/methods/geom_relations/disjoint.html index 67bd1f811..6eb691064 100644 --- a/previews/PR132/source/methods/geom_relations/disjoint.html +++ b/previews/PR132/source/methods/geom_relations/disjoint.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content

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
+    
Skip to content

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
@@ -29,7 +29,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)
 """
@@ -187,7 +187,7 @@
     end
     return true
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/methods/geom_relations/geom_geom_processors.html b/previews/PR132/source/methods/geom_relations/geom_geom_processors.html index ab81f4e6c..f31c14b3d 100644 --- a/previews/PR132/source/methods/geom_relations/geom_geom_processors.html +++ b/previews/PR132/source/methods/geom_relations/geom_geom_processors.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@ -
Skip to content

Line-curve interaction

julia
#= Code is based off of DE-9IM Standards (https://en.wikipedia.org/wiki/DE-9IM)
+    
Skip to content

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.
 =#
 
@@ -430,7 +430,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/previews/PR132/source/methods/geom_relations/intersects.html b/previews/PR132/source/methods/geom_relations/intersects.html index 7f380f561..ea11bd654 100644 --- a/previews/PR132/source/methods/geom_relations/intersects.html +++ b/previews/PR132/source/methods/geom_relations/intersects.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content

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
+    
Skip to content

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
@@ -27,7 +27,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.
@@ -62,7 +62,7 @@
     seg_val, _, _ = _intersection_point(Float64, edge_a, edge_b)
     return seg_val != line_out
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/methods/geom_relations/overlaps.html b/previews/PR132/source/methods/geom_relations/overlaps.html index abd449700..f8a0e45b0 100644 --- a/previews/PR132/source/methods/geom_relations/overlaps.html +++ b/previews/PR132/source/methods/geom_relations/overlaps.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content

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 colinear.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+    
Skip to content

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 colinear.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -29,7 +29,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 autmoatically 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 respectivly, 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 autmoatically 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 respectivly, without being contained.

julia
"""
     overlaps(geom1, geom2)::Bool
 
 Compare two Geometries of the same dimension and return true if their
@@ -213,7 +213,7 @@
     end
     return false
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/methods/geom_relations/touches.html b/previews/PR132/source/methods/geom_relations/touches.html index cf4acec25..c5d6d60d1 100644 --- a/previews/PR132/source/methods/geom_relations/touches.html +++ b/previews/PR132/source/methods/geom_relations/touches.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content

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 geometies interior or boundary.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+    
Skip to content

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 geometies interior or boundary.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -28,7 +28,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)
@@ -185,7 +185,7 @@
     end
     return true
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/methods/geom_relations/within.html b/previews/PR132/source/methods/geom_relations/within.html index fcf700365..842cc7d61 100644 --- a/previews/PR132/source/methods/geom_relations/within.html +++ b/previews/PR132/source/methods/geom_relations/within.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content

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
+    
Skip to content

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
@@ -29,7 +29,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)
@@ -202,7 +202,7 @@
     end
     return true
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/methods/orientation.html b/previews/PR132/source/methods/orientation.html index e4171b81d..01dc1a975 100644 --- a/previews/PR132/source/methods/orientation.html +++ b/previews/PR132/source/methods/orientation.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@ -
Skip to content

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
"""
+    
Skip to content

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 or false whether or not the ring is clockwise or
@@ -115,7 +115,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/previews/PR132/source/methods/polygonize.html b/previews/PR132/source/methods/polygonize.html index c60ac417f..b62638d44 100644 --- a/previews/PR132/source/methods/polygonize.html +++ b/previews/PR132/source/methods/polygonize.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@ -
Skip to content

Polygonizing raster data

julia
export polygonize
+    
Skip to content

Polygonizing raster data

julia
export polygonize
 
 #=
 
@@ -234,7 +234,7 @@
 
     return contour_list
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/primitives.html b/previews/PR132/source/primitives.html index adc947819..550ef854a 100644 --- a/previews/PR132/source/primitives.html +++ b/previews/PR132/source/primitives.html @@ -8,20 +8,20 @@ - + - + - + -
Skip to content

Primitive functions

julia
export apply, applyreduce, TraitTarget

This file mainly defines the apply and applyreduce functions, and some related functionality.

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.

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
+    
Skip to content

Primitive functions

julia
export apply, applyreduce, TraitTarget

This file mainly defines the apply and applyreduce functions, and some related functionality.

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.

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
     (GI.y(p), GI.x(p))
 end

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

Missing docstring.

Missing docstring for apply. Check Documenter's build log for details.

Missing docstring.

Missing docstring for applyreduce. Check Documenter's build log for details.

Missing docstring.

Missing docstring for GeometryOps.unwrap. Check Documenter's build log for details.

# GeometryOps.flattenFunction.
julia
flatten(target::Type{<:GI.AbstractTrait}, obj)
-flatten(f, target::Type{<:GI.AbstractTrait}, obj)

Lazily flatten any AbstractArray, iterator, FeatureCollectionTrait, FeatureTrait or AbstractGeometryTrait object obj, so that objects with the target trait are returned by the iterator.

If f is passed in it will be applied to the target geometries.

source


# GeometryOps.reconstructFunction.
julia
reconstruct(geom, components)

Reconstruct geom from an iterable of component objects that match its structure.

All objects in components must have the same GeoInterface.trait.

Ususally used in combination with flatten.

source


# GeometryOps.rebuildFunction.
julia
rebuild(geom, child_geoms)

Rebuild a geometry from child geometries.

By default geometries will be rebuilt as a GeoInterface.Wrappers geometry, but rebuild can have methods added to it to dispatch on geometries from other packages and specify how to rebuild them.

(Maybe it should go into GeoInterface.jl)

source


Types

Missing docstring.

Missing docstring for TraitTarget. Check Documenter's build log for details.

Implementation

We pass threading and calc_extent as types, not simple boolean values.

This is to help compilation - with a type to hold on to, it's easier for the compiler to separate threaded and non-threaded code paths.

Note that if we didn't include the parent abstract type, this would have been really type unstable, since the compiler couldn't tell what would be returned!

We had to add the type annotation on the _booltype(::Bool) method for this reason as well.

julia
abstract type BoolsAsTypes end
+flatten(f, target::Type{<:GI.AbstractTrait}, obj)

Lazily flatten any AbstractArray, iterator, FeatureCollectionTrait, FeatureTrait or AbstractGeometryTrait object obj, so that objects with the target trait are returned by the iterator.

If f is passed in it will be applied to the target geometries.

source


# GeometryOps.reconstructFunction.
julia
reconstruct(geom, components)

Reconstruct geom from an iterable of component objects that match its structure.

All objects in components must have the same GeoInterface.trait.

Ususally used in combination with flatten.

source


# GeometryOps.rebuildFunction.
julia
rebuild(geom, child_geoms)

Rebuild a geometry from child geometries.

By default geometries will be rebuilt as a GeoInterface.Wrappers geometry, but rebuild can have methods added to it to dispatch on geometries from other packages and specify how to rebuild them.

(Maybe it should go into GeoInterface.jl)

source


Types

Missing docstring.

Missing docstring for TraitTarget. Check Documenter's build log for details.

Implementation

We pass threading and calc_extent as types, not simple boolean values.

This is to help compilation - with a type to hold on to, it's easier for the compiler to separate threaded and non-threaded code paths.

Note that if we didn't include the parent abstract type, this would have been really type unstable, since the compiler couldn't tell what would be returned!

We had to add the type annotation on the _booltype(::Bool) method for this reason as well.

julia
abstract type BoolsAsTypes end
 struct _True <: BoolsAsTypes end
 struct _False <: BoolsAsTypes end
 
@@ -360,7 +360,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/previews/PR132/source/transformations/correction/closed_ring.html b/previews/PR132/source/transformations/correction/closed_ring.html index 6368a2ce3..b48afc8df 100644 --- a/previews/PR132/source/transformations/correction/closed_ring.html +++ b/previews/PR132/source/transformations/correction/closed_ring.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@ -
Skip to content

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
+    
Skip to content

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)

You can see that the last point of the ring here is equal to the first point. For a polygon with n sides, there should be n+1 vertices.

Implementation

julia
"""
     ClosedRing() <: GeometryCorrection
@@ -48,7 +48,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/previews/PR132/source/transformations/correction/geometry_correction.html b/previews/PR132/source/transformations/correction/geometry_correction.html index d7b4e7b0e..44c918765 100644 --- a/previews/PR132/source/transformations/correction/geometry_correction.html +++ b/previews/PR132/source/transformations/correction/geometry_correction.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content

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.

# GeometryOps.GeometryCorrectionType.
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


Any geometry correction must implement the interface as given above.

julia
"""
+    
Skip to content

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.

# GeometryOps.GeometryCorrectionType.
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


Any geometry correction must implement the interface as given above.

julia
"""
     abstract type GeometryCorrection
 
 This abstract type represents a geometry correction.
@@ -48,8 +48,8 @@
         final_geometry = apply(net_function, Trait, final_geometry; kwargs...)
     end
     return final_geometry
-end

Available corrections

# GeometryOps.ClosedRingType.
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.DiffIntersectingPolygonsType.
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.GeometryCorrectionType.
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.UnionIntersectingPolygonsType.
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.

- +end

Available corrections

# GeometryOps.ClosedRingType.
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.DiffIntersectingPolygonsType.
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.GeometryCorrectionType.
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.UnionIntersectingPolygonsType.
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/previews/PR132/source/transformations/correction/intersecting_polygons.html b/previews/PR132/source/transformations/correction/intersecting_polygons.html index e2c9a0d1b..83ee1e7e8 100644 --- a/previews/PR132/source/transformations/correction/intersecting_polygons.html +++ b/previews/PR132/source/transformations/correction/intersecting_polygons.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@ -
Skip to content

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 requirment 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
+    
Skip to content

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 requirment 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
"""
@@ -115,7 +115,7 @@
     end
     return diff_multipoly
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/transformations/extent.html b/previews/PR132/source/transformations/extent.html index 451407606..42b887621 100644 --- a/previews/PR132/source/transformations/extent.html +++ b/previews/PR132/source/transformations/extent.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@ -
Skip to content

Extent embedding

julia
"""
+    
Skip to content

Extent embedding

julia
"""
     embed_extent(obj)
 
 Recursively wrap the object with a GeoInterface.jl geometry,
@@ -31,7 +31,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/previews/PR132/source/transformations/flip.html b/previews/PR132/source/transformations/flip.html index 92e250d8a..361a61dc9 100644 --- a/previews/PR132/source/transformations/flip.html +++ b/previews/PR132/source/transformations/flip.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@ -
Skip to content

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
"""
+    
Skip to content

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
@@ -40,7 +40,7 @@
         end
     end
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/transformations/reproject.html b/previews/PR132/source/transformations/reproject.html index 78e5f3bfc..a5af5ebda 100644 --- a/previews/PR132/source/transformations/reproject.html +++ b/previews/PR132/source/transformations/reproject.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@ -
Skip to content

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
"""
+    
Skip to content

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
"""
     reproject(geometry; source_crs, target_crs, transform, always_xy, time)
     reproject(geometry, source_crs, target_crs; always_xy, time)
     reproject(geometry, transform; always_xy, time)
@@ -59,7 +59,7 @@
         nothing
     end
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/transformations/segmentize.html b/previews/PR132/source/transformations/segmentize.html index 33caece00..ccae58b27 100644 --- a/previews/PR132/source/transformations/segmentize.html +++ b/previews/PR132/source/transformations/segmentize.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content

Segmentize

julia
export segmentize
+    
Skip to content

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)
@@ -39,7 +39,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
@@ -77,7 +77,7 @@
 
 end
 
-plot_trials(segmentize_suite)

julia
abstract type SegmentizeMethod end
+plot_trials(segmentize_suite)

julia
abstract type SegmentizeMethod end
 """
     LinearSegments(; max_distance::Real)
 
@@ -172,7 +172,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/previews/PR132/source/transformations/simplify.html b/previews/PR132/source/transformations/simplify.html index b010290ae..37f08ea33 100644 --- a/previews/PR132/source/transformations/simplify.html +++ b/previews/PR132/source/transformations/simplify.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content

Geometry simplification

This file holds implementations for the RadialDistance, Douglas-Peucker, and Visvalingam-Whyatt algorithms for simplifying geometries (specifically for polygons and lines).

Examples

A quick and dirty example is:

julia
using Makie, GeoInterfaceMakie
+    
Skip to content

Geometry simplification

This file holds implementations for the RadialDistance, Douglas-Peucker, and Visvalingam-Whyatt algorithms for simplifying geometries (specifically for polygons and lines).

Examples

A quick and dirty example is:

julia
using Makie, GeoInterfaceMakie
 import GeoInterface as GI
 import GeometryOps as GO
 
@@ -29,7 +29,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
 lg_and_go(geometry) = (GI.convert(LG, geometry), GO.tuples(geometry))
@@ -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
@@ -509,7 +509,7 @@
     end
     return nothing
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/transformations/transform.html b/previews/PR132/source/transformations/transform.html index 7ba1546d7..c637e1bbf 100644 --- a/previews/PR132/source/transformations/transform.html +++ b/previews/PR132/source/transformations/transform.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@ -
Skip to content

Pointwise transformation

julia
"""
+    
Skip to content

Pointwise transformation

julia
"""
     transform(f, obj)
 
 Apply a function `f` to all the points in `obj`.
@@ -73,7 +73,7 @@
         end
     end
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/transformations/tuples.html b/previews/PR132/source/transformations/tuples.html index 025acfd9f..e8221b2de 100644 --- a/previews/PR132/source/transformations/tuples.html +++ b/previews/PR132/source/transformations/tuples.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@ -
Skip to content

Tuple conversion

julia
"""
+    
Skip to content

Tuple conversion

julia
"""
     tuples(obj)
 
 Convert all points in `obj` to `Tuple`s, wherever the are nested.
@@ -37,7 +37,7 @@
         end
     end
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR132/source/utils.html b/previews/PR132/source/utils.html index 89d6249fe..569855404 100644 --- a/previews/PR132/source/utils.html +++ b/previews/PR132/source/utils.html @@ -8,9 +8,9 @@ - + - + @@ -18,7 +18,7 @@ -
Skip to content

Utility functions

julia
_is3d(geom)::Bool = _is3d(GI.trait(geom), geom)
+    
Skip to content

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))
@@ -137,8 +137,8 @@
 function point_in_extent(p, extent::Extents.Extent)
     (x1, x2), (y1, y1) = extent.X, extent.Y
     return x1 <= GI.x(p) && y1 <= GI.y(p) && x2 >= GI.x(p) && y2 >= GI.y(p)
-end

This page was generated using Literate.jl.

- +end

This page was generated using Literate.jl.

+ \ No newline at end of file diff --git a/previews/PR132/tutorials/spatial_joins.html b/previews/PR132/tutorials/spatial_joins.html index b59eea07c..2ed01b745 100644 --- a/previews/PR132/tutorials/spatial_joins.html +++ b/previews/PR132/tutorials/spatial_joins.html @@ -8,17 +8,17 @@ - + - + - + -
Skip to content

Spatial joins

Spatial joins are table joins which are based not on equality, but on some predicate p(x,y), which takes two geometries, and returns a value of either true or false. For geometries, the DE-9IM spatial relationship model is used to determine the spatial relationship between two geometries.

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:

julia
[inner/left/right/outer/...]join((table1, table1),
+    
Skip to content

Spatial joins

Spatial joins are table joins which are based not on equality, but on some predicate p(x,y), which takes two geometries, and returns a value of either true or false. For geometries, the DE-9IM spatial relationship model is used to determine the spatial relationship between two geometries.

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:

julia
[inner/left/right/outer/...]join((table1, table1),
     by_pred(:table1_column, predicate_function, :table2_column) # & add other conditions here
 )

We have enabled the use of all of GeometryOps' boolean comparisons here. These are:

julia
GO.contains, GO.within, GO.intersects, GO.touches, GO.crosses, GO.disjoint, GO.overlaps, GO.covers, GO.coveredby, GO.equals

Tip

Always place the dataframe with more complex geometries second, as that is the one which will be sorted into a tree.

Simple example

This example demonstrates how to perform a spatial join between two datasets: a set of polygons and a set of randomly generated points.

The polygons are represented as a DataFrame with geometries and colors, while the points are stored in a separate DataFrame.

The spatial join is performed using the contains predicate from GeometryOps, which checks if each point is contained within any of the polygons. The resulting joined DataFrame is then used to plot the points, colored according to the containing polygon.

First, we generate our data. We create two triangle polygons which, together, span the rectangle (0, 0, 1, 1), and a set of points which are randomly distributed within this rectangle.

julia
import GeoInterface as GI, GeometryOps as GO
 using FlexiJoins, DataFrames
@@ -28,14 +28,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
@@ -60,7 +60,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