Partitioning
Overview
It is often useful to group geospatial data based on geometric criteria, instead of statistical criteria in Clustering methods. We provide various partitioning methods for geotables or domains via the partition
function:
Meshes.partition
— Functionpartition([rng], object, method)
Partition object
with partition method
. Optionally, specify random number generator rng
.
Meshes.PartitionMethod
— TypePartitionMethod
A method for partitioning domain/data objects.
We illustrate this concept with the BisectFractionPartition
method:
# random image with 100x100 pixels
gtb = georef((; z=rand(100, 100)))
# 70%/30% partition perpendicular to (1.0, 1.0) direction
Π = partition(gtb, BisectFractionPartition((1.0, 1.0), 0.7))
2 Partition
├─ 6997×2 SubGeoTable over 6997 view(::CartesianGrid, [1, 2, 3, 4, ..., 9920, 9921, 9922, 9923])
└─ 3003×2 SubGeoTable over 3003 view(::CartesianGrid, [2400, 2499, 2500, 2598, ..., 9997, 9998, 9999, 10000])
The result of a partitioning method is a lazy indexable collection of geotables or domains:
Π[1] |> viewer

Π[2] |> viewer

In this specific example, we could have used the geosplit
utility function, which simplifies the syntax further:
GeoStatsBase.geosplit
— Functiongeosplit(object, fraction, [normal])
Split geospatial object
into two parts where the first part has a fraction
of the elements. Optionally, the split is performed perpendicular to a normal
direction.
geosplit(gtb, 0.7, (1.0, 1.0))
2 Partition
├─ 6997×2 SubGeoTable over 6997 view(::CartesianGrid, [1, 2, 3, 4, ..., 9920, 9921, 9922, 9923])
└─ 3003×2 SubGeoTable over 3003 view(::CartesianGrid, [2400, 2499, 2500, 2598, ..., 9997, 9998, 9999, 10000])
Methods
Uniform
Meshes.UniformPartition
— TypeUniformPartition(k, [shuffle])
A method for partitioning spatial objects uniformly into k
subsets of approximately equal size. Optionally shuffle
the data (default to true
).
Fraction
Meshes.FractionPartition
— TypeFractionPartition(fraction, shuffle=true)
A method for partitioning spatial objects according to a given fraction
. Optionally shuffle
elements before partitioning.
Block
Meshes.BlockPartition
— TypeBlockPartition(sides; neighbors=false)
A method for partitioning spatial objects into blocks of given sides
. Optionally, compute the neighbors
of a block as the metadata.
BlockPartition(side₁, side₂, ..., sideₙ; neighbors=false)
Alternatively, specify the sides side₁
, side₂
, ..., sideₙ
.
Bisect-Point
Meshes.BisectPointPartition
— TypeBisectPointPartition(normal, point)
A method for partitioning spatial objects into two half spaces defined by a normal
direction and a reference point
.
Bisect-Fraction
Meshes.BisectFractionPartition
— TypeBisectFractionPartition(normal, fraction=0.5, maxiter=10)
A method for partitioning spatial objects into two half spaces defined by a normal
direction and a fraction
of points. The partition is returned within maxiter
bisection iterations.
Ball
Meshes.BallPartition
— TypeBallPartition(radius; metric=Euclidean())
A method for partitioning spatial objects into balls of a given radius
using a metric
.
Plane
Meshes.PlanePartition
— TypePlanePartition(normal; [tol])
A method for partitioning spatial objects into a family of hyperplanes defined by a normal
direction. Two points x
and y
belong to the same hyperplane when (x - y) ⋅ normal < tol
.
Direction
Meshes.DirectionPartition
— TypeDirectionPartition(direction; [tol])
A method for partitioning spatial objects along a given direction
with bandwidth tolerance tol
.
Predicate
Meshes.PredicatePartition
— TypePredicatePartition(predicate)
A method for partitioning spatial objects with a given predicate
function. Two locations i
and j
are part of the same subset whenever predicate(i, j) == true
SpatialPredicate
Meshes.SpatialPredicatePartition
— TypeSpatialPredicatePartition(predicate)
A method for partitioning spatial objects with a given spatial predicate
function. Two coordinates x
and y
are part of the same subset whenever predicate(x, y) == true
.
Product
Meshes.ProductPartition
— TypeProductPartition(p₁, p₂)
A method for partitioning spatial objects using the product of two partitioning methods p₁
and p₂
.
Hierarchical
Meshes.HierarchicalPartition
— TypeHierarchicalPartition(first, second)
A partitioning method in which a first
partition is applied and then a second
partition is applied to each subset of the first
.