Changelog
Source:NEWS.md
bigcurve 0.6.0
First CRAN release.
Edges shared by neighbouring polygons now refine to identical vertices. The refinement arithmetic always runs in one canonical direction and the chain is reversed afterwards, so
a -> bandb -> agive bitwise identical new vertices (previously some differed in the last bits, sowkpool::merge_coincident()could not fuse them). An edge that occurs more than once with the same vertices (a merged pool, a segment mesh) is refined once and its new vertices are reused.densify()now really defaults tosource = NULL, so a wkpool input’s own crs is used. Previously the documented default was not the one in the code, and a pool in projected units was read as degrees.The default
toleranceis now derived from the larger side of the projected extent, so a single parallel or meridian (zero width in one direction) no longer errors.Requires wkpool >= 0.4.0 (CRAN) for pool input; the fallbacks for older wkpool versions, and the vctrs and utils dependencies they needed, are gone. glue is no longer used.
New vignette, “bigcurve and s2”, contrasting bigcurve with s2.
Credit and licence notice for the d3-geo resampling method in
inst/COPYRIGHTS; Mike Bostock added as contributor and copyright holder.
bigcurve 0.5.0.9001
densify()carries wkpool path provenance (.pathand the paths table, wkpool >= 0.3.0.9003) through refinement: every refined segment inherits the path of the input segment it descends from, and added vertices are interior to their path, so cycles, ring roles and exact feature reconstruction (wkpool::cycles_to_wkb()) survive densification.The default input coordinate system is now ‘EPSG:4326’ rather than ‘OGC:CRS84’ throughout (
densify(),rproj_xy()). Authority codes are axis-normalized on the way into PROJ, so input remains lon,lat either way; ‘EPSG:4326’ is simply the more familiar name.densify()gains crs awareness for wkpool input:sourcenow defaults toNULL, and a pool built with wkpool >= 0.3.0.9000 supplies its own crs (as captured from the original geometry bywkpool::establish_topology()). An explicitsourcestill wins, and inputs with no crs fall back to ‘EPSG:4326’.The refined pool returned by
densify()now carries the input pool’s crs and geodesic attributes, built through the exportedwkpool::new_wkpool()constructor when available.
bigcurve 0.5.0
densify()now accepts wkpool objects (hypertidy/wkpool >= 0.3.0): any wk-handleable geometry decomposed withwkpool::establish_topology()can be densified directly, returning a wkpool with vertices appended (freshly minted.vxids), directed segments refined in place, and.featureprovenance carried onto every refined segment.Added vertices are degree-2 by construction, so densification does not alter the arc-node structure of a pool:
find_nodes()before and after refinement is identical.The mesh engine now reports
parent, the input segment each refined segment descends from. This is the hook that carries per-segment attributes (feature, ring, arc membership) through refinement.Pools carrying z or m vertex values are refused with an error: densification is strictly 2D and will not invent values at inserted vertices. Rebuild the pool from xy geometry to proceed.
Added wkpool, wk, and vctrs to Suggests.
bigcurve 0.1.0
Complete rework of the package around a new adaptive resampling engine, following d3-geo (Bostock). The prototype bisect() interface is gone.
New user surface
New exported function
densify(), the single verb of the package. Accepts a two-column lon,lat matrix (a path), a list of such matrices, or a segment mesh (rgl mesh3d stylevb/is), and returns the same kind of object with vertices inserted only where the target projection demands them.rproj_xy()is now exported: forward coordinate transformation with axis normalization (authority codes such as ‘EPSG:4326’ behave as lon,lat input) andNArather than error for unprojectable points.
Breaking changes
-
Error is now controlled in the plane of the target projection: the
toleranceargument is in projected units (usually metres), or derived from the projected extent as one part inpixels(default- when unset. The old
distmetres-on-the-sphere argument (which was accepted but not honoured) is gone.
- when unset. The old
Output coordinates are in the source coordinate system (geographic by default); project the result for plotting.
Points outside the domain of the target projection never error: segments touching them are left un-densified and refinement stops at unprojectable midpoints. Clipping is out of scope.
bisect(),curv_len(),project_segment()andreproj_mesh3d()are removed.
Internals and dependencies
New header-only C++ core with no R or PROJ dependency, driving refinement with a target-plane metric: perpendicular distance from the projected great circle midpoint to the planar chord, a parametric shear check, a forced split for arcs wider than 30 degrees, and a maximum depth. Each point is transformed exactly once and no inverse transforms are used, so refinement is dramatically faster than the 0.0.x loop.
Links directly to the system PROJ library (>= 8.0) via configure and pkg-config; the libproj package (removed from CRAN) is no longer used. Windows builds use the PROJ shipped with Rtools.
Dropped terra, geodist, geosphere, glue, reproj, and all undeclared dependencies; hard dependencies are now cpp11 (LinkingTo) and system PROJ only.
Spherical great circle midpoints are used (consistent with d3-geo); this is a display densification tool, not an ellipsoidal geodesy one.
README rewritten around
densify(), with a graticule example usingtextures::segs()(textures and maps added to Suggests).