hilbert provides utilities for quick indexing/encoding of coordinates to a Hilbert Curve.

Installation

You can install hilbert via either remotes or pak:

# pak
pak::pkg_install("program--/hilbert")

# remotes
remotes::install_github("program--/hilbert")

Example

Setting Up

x <- -77.85641
y <- 34.35935
n <- 24 # n > 15 requires `bit64`
e <- c(xmax = 180, xmin = -180, ymax = 90, ymin = -90)

Coordinates to Position

pos <- hilbert::coords_to_position(x, y, n = n, extent = e)
pos
#>         x        y
#> 1 4760236 11591131

Position to Index

index <- hilbert::index(pos, coords = c("x", "y"), n = n, attach = TRUE)
index
#>         x        y               h
#> 1 4760236 11591131 129470580596149

Index to Position

new_pos <- hilbert::position(index, idx = "h", n = n, attach = FALSE)
new_pos
#>         x        y
#> 1 4760236 11591131

Position to Coordinates

new_xy <- hilbert::position_to_coords(new_pos, coords = c("x", "y"), extent = e, n = n, attach = TRUE)
new_xy
#>           x        y
#> 1 -77.85641 34.35935