Code quality and documentation
rcpp_aperture.cpp: extracted parameterized helpers for
quantize/center/corners, eliminating copy-paste across 3 apertures.validate_aperture() / validate_resolution() from constants.R.is_pentagon() for ISEA grids: computes pentagon cell IDs
directly from quad coordinates instead of looping through the lon/lat
pipeline.hexify(): rejects unexpected values with
an informative error instead of silently coercing via as.integer().theme_minimal() calls in plot methods with .theme_clean()
helper.test-edge-cases.R with 32 tests covering poles, antimeridian,
dateline, equator, roundtrip stability, pentagon invariants, neighbor
symmetry, and resolution-0 cell counts.Spatial analysis primitives
max_cell_id() for aperture 7 bounding box.get_neighbors(): returns k-ring (disk) of neighboring cells for
both ISEA and H3 grids. Supports k > 1 for multi-ring expansion,
distances = TRUE for ring distance output, and vectorized cell input.
ISEA backend uses axial coordinate offsets with lon/lat fallback for
cross-quad boundaries. H3 backend uses vendored gridDisk /
gridDiskDistances / gridRingUnsafe.hex_summarize(): cell-level data aggregation with tidyeval support.
Groups by cell_id, applies user-defined summary expressions, returns a
data.frame with cell centers, areas, and point counts. Supports
geometry = TRUE for sf output.cpp_h3_gridDisk, cpp_h3_gridDiskDistances,
cpp_h3_gridRingUnsafe, cpp_get_neighbors_isea, cpp_get_neighbors_z7h3Assert.c
(clang 21 -Wempty-translation-unit).o) from source tarball that caused
installation failure on Linux (Debian) and NOTE on all platformsplot_globe() examples in \donttest{} to reduce check time
(was 608s on win-builder)cell_to_sf() now applies sf::st_wrap_dateline() automatically, fixing
horizontal streaks on flat map projections (Plate Carrée, Robinson, etc.) for
hexagons crossing the ±180° antimeridianas_sf(x, geometry = "polygon") now routes all grids (ISEA and H3) through
cell_to_sf(), ensuring consistent antimeridian handlinghexify_cell_to_sf() gains antimeridian normalization matching cell_to_sf()st_wrap_dateline() callsNative H3 backend — zero external dependencies
h3o R package dependencyhexify()h3_lat_lng_to_cell, h3_cell_to_boundary,
h3_cell_to_parent, h3_cell_to_children, h3_polygon_to_cells,
h3_cell_area_km2, h3_cell_to_lat_lngaperture is passed with type = "h3" (ignored parameter)hex_grid() documentationh3_crosswalk() example to H3 vignetteISEA–H3 crosswalk and per-cell area
h3_crosswalk(): bidirectional mapping between ISEA and H3 cell IDs,
with automatic resolution matching and per-cell area comparisoncell_area(): returns geodesic area (km²) for each cell — constant for
ISEA (equal-area), location-dependent for H3, with session-scoped caching$cell_area_km2, [["cell_area_km2"]], and as.data.frame() now
return per-cell areas for H3 grids instead of the grid-wide averageclosest_h3_resolution() helper shared by hex_grid()
and h3_crosswalk()H3 grid support
hex_grid(resolution = 8, type = "h3")hexify(), cell_to_sf(), grid_rect(),
grid_global(), grid_clip(), get_parent(), get_children()h3o package (Suggests, not required for ISEA workflows)hexify_compare_resolutions(type = "h3") for H3 resolution tabledgearthstat() now accepts HexGridInfo objects directlygrid_type slot on HexGridInfo: "isea" (default) or "h3"cell_id slot supports character (H3) and numeric (ISEA) cell IDsHotfix for geometry issues
st_wrap_dateline()grid_global() to include cells above ±85° latitudeHotfix for CRAN UBSAN check failure
as_dggrid(), from_dggrid())