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.partitionFunction
partition([rng], object, method)

Partition object with partition method. Optionally, specify random number generator rng.

source

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
Example block output
Π[2] |> viewer
Example block output

In this specific example, we could have used the geosplit utility function, which simplifies the syntax further:

GeoStatsBase.geosplitFunction
geosplit(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.

source
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.UniformPartitionType
UniformPartition(k, [shuffle])

A method for partitioning spatial objects uniformly into k subsets of approximately equal size. Optionally shuffle the data (default to true).

source

Fraction

Meshes.FractionPartitionType
FractionPartition(fraction, shuffle=true)

A method for partitioning spatial objects according to a given fraction. Optionally shuffle elements before partitioning.

source

Block

Meshes.BlockPartitionType
BlockPartition(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ₙ.

source

Bisect-Point

Meshes.BisectPointPartitionType
BisectPointPartition(normal, point)

A method for partitioning spatial objects into two half spaces defined by a normal direction and a reference point.

source

Bisect-Fraction

Meshes.BisectFractionPartitionType
BisectFractionPartition(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.

source

Ball

Meshes.BallPartitionType
BallPartition(radius; metric=Euclidean())

A method for partitioning spatial objects into balls of a given radius using a metric.

source

Plane

Meshes.PlanePartitionType
PlanePartition(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.

source

Direction

Meshes.DirectionPartitionType
DirectionPartition(direction; [tol])

A method for partitioning spatial objects along a given direction with bandwidth tolerance tol.

source

Predicate

Meshes.PredicatePartitionType
PredicatePartition(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

source

SpatialPredicate

Meshes.SpatialPredicatePartitionType
SpatialPredicatePartition(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.

source

Product

Meshes.ProductPartitionType
ProductPartition(p₁, p₂)

A method for partitioning spatial objects using the product of two partitioning methods p₁ and p₂.

source

Hierarchical

Meshes.HierarchicalPartitionType
HierarchicalPartition(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.

source