a5R 0.5.0
- Removed
a5_grid(), deprecated since 0.4.0. Use
a5_polygon_to_cells() instead. Note the semantics differ:
a5_grid() selected every cell a geometry touched (boundary
intersection), whereas a5_polygon_to_cells() selects cells
whose centre lies inside the geometry. For a bounding box, pass a closed
polygon, e.g.
a5_polygon_to_cells(wk::rct(xmin, ymin, xmax, ymax), res).
- Dropped the
lifecycle R dependency and the
wkt Rust dependency, both of which were only needed by
a5_grid().
- Replaced the heavy
geo Rust dependency with the
lightweight geographiclib-rs crate for
a5_cell_distance(). The haversine and rhumb methods are now
computed directly; the geodesic method continues to use Karney’s
algorithm. Distance results are unchanged. This removes 33 transitive
crates and shrinks the vendored sources substantially.
- Updated the bundled ‘A5’ Rust crate to 0.9.0, bringing a faster
polyhedral projection and an
EqualAreaProjection
refactor.
a5_polygon_to_cells() now delegates hole handling to
the upstream crate, which excludes hole interiors natively rather than
subtracting hole-ring cells in R. Results are unchanged; the
implementation is simpler and avoids an uncompact/recompact round-trip
for single-part polygons.
a5R 0.4.0
a5_grid() is soft-deprecated in favour of
a5_polygon_to_cells(). Calling it now emits a
lifecycle::deprecate_warn() with guidance: use
a5_polygon_to_cells() for geometry inputs
(centre-in-polygon containment), or pass a wk::rct()
bounding box for the bbox use case. Note that the two functions are not
semantically identical: a5_grid() uses boundary
intersection (any cell touched by the geometry), whereas
a5_polygon_to_cells() uses centre-point containment (cells
whose centroid lies inside).
- New
a5_polygon_to_cells() returns the A5 cells whose
centres lie inside a polygon. Distinct from a5_grid(),
which uses boundary-intersection semantics. Accepts wk-handleable
geometries (including MULTIPOLYGON and sfc of
several polygons), terra SpatVector objects, numeric
matrices, or data.frame(lon, lat). Multi-part inputs are
handled natively: per polygon part the outer ring’s cells are computed
and any hole-ring cells are subtracted, then the results are unioned
across parts and recompacted.
- New
a5_linestring_to_cells() returns the A5 cells whose
pentagons are intersected by a great-circle polyline, in discovery order
along the path. Accepts the same input shapes as
a5_polygon_to_cells(), including
MULTILINESTRING, sfcs of multiple linestrings,
and terra SpatVector objects; per-feature outputs are
concatenated with first-seen deduplication.
- Bumped the embedded
a5 Rust crate from 0.7.0 to 0.8.0.
Transparent improvements inherited from upstream: resolution-30
(de)serialisation (a5 0.7.1), neighbour functions at resolutions 0 and 1
(a5 0.7.2), longitude normalisation in cell_to_lonlat (a5
0.7.3), faster cell_to_parent, and a polar-region spiral
fix in grid_disk and spherical_cap.
- Breaking:
a5_cell_to_lonlat() replaces
its normalise argument with as_dataframe
(default FALSE). When FALSE, centroids are
returned as a wk::xy() vector with WGS 84 CRS; when
TRUE, as a base data.frame with
lon/lat columns. The previous
normalise argument toggled longitude normalisation, but
upstream a5 (>= 0.7.3) always returns normalised longitudes, so the
flag’s effective job collapsed to “what container?”.
as_dataframe makes that explicit. Defaults are unchanged
for users who never set normalise (still returns
wk::xy); explicit
normalise = TRUE/FALSE calls now error and
must be updated.
- New
lifecycle dependency added to
Imports.
a5R 0.3.1
a5_cell() now requires hex strings to be exactly 16
characters, preventing silent construction of wrong cells from truncated
input.
- Improved vignettes covering the new
a5_cell
representation and Arrow integration.
a5R 0.3.0
a5_cell internal representation now uses 8 parallel raw
byte vectors instead of hex strings, reducing memory from ~80 bytes/cell
to 8 bytes/cell (#12).
a5_cell gains vec_proxy_compare() and
vec_proxy_order() methods, enabling sort(),
order(), unique(), duplicated(),
match(), and %in% (#12).
a5_cell gains an is.na() method
(#12).
- New
a5_cell_from_arrow() and
a5_cell_to_arrow() for lossless conversion between
a5_cell and Arrow uint64 arrays, enabling
zero-copy Parquet I/O (#12).
- New
a5_u64_to_hex() and a5_hex_to_u64()
for explicit conversion between a5_cell vectors and hex
strings.
a5_is_cell() has been renamed to
a5_is_valid() and now accepts both a5_cell
vectors and character hex strings.
a5_cell_distance() and a5_cell_area() gain
a units = NULL option to return plain numeric vectors
without units class overhead.
- New vignettes:
vignette("internal-cell-representation")
and vignette("arrow-parquet").
a5R 0.2.0