• Ensure package compiles with STRICT_R_HEADERS=1 (#222).
  • Fix format strings/arguments for R-devel (#209).

Breaking changes

  • The common well-known binary representation of POINT EMPTY (i.e., POINT (nan nan)) is now handled as POINT EMPTY allowing empty points to roundtrip through wkb() vectors (#196, #204).
  • xy(NA, NA) is now read as a null feature instead of POINT EMPTY. This preserves the invariant that null features can also be identified using is.na() (#205).
  • xy(NaN, NaN) is now read as POINT EMPTY and is.na(xy(NaN, NaN)) now returns FALSE. This means that both EMPTY and null points can roundtrip through xy() (#205).

Bugfixes and improvements

  • wk_meta() now contains a new column is_empty, which is TRUE for any feature that contains at least one non-empty coordinate. This allows more efficient detection of features with zero coordinates (#197, #199).
  • Updated PROJ data to use the latest pull of the database packaged with PROJ 9.3.0 (#201).
  • The wk package now compiles once again on gcc 4.8 (#203, #206).
  • Fixed sfc_writer() to correctly attach the classes attribute to sfc output with mixed geometry types (#195).
  • Function sfc_writer() now has an argument promote_multi to write any input as the MULTI variant. This makes it more likely that an input vector will be read as a single geometry type (#198).
  • The wk_collection_filter() now correctly increments the part_id when calling the child handler (@brownag, #194).
  • Fix tests for updated waldo package (#178).
  • Fix use-after-free warnings.
  • Fix LTO and MacOS 3.6.2 check errors (#61).
  • Removed wksxp() in favour of improved sf::st_sfc() support (#21).
  • Rewrite existing readers, writers, and handlers, using a new C API (#13).
  • Use new C API in favour of header-only approach for all wk functions (#19, #22).
  • Use cpp11 to manage safe use of callables that may longjmp from C++.
  • Vector classes now propagate attr(, "crs"), and check that operations that involve more than one vector have compatable CRS objects as determined by wk_crs_equal().
  • Added an R-level framework for other packages to implement wk readers and handlers: wk_handle(), wk_translate(), and wk_writer() (#37).
  • Added a native reader and writer for sf::st_sfc() objects and implemented R-level generics for sfc, sfg, sf, and bbox objects (#28, #29, #38, #45).
  • Implement crc() vector class to represent circles (#40).
  • Added a 2D cartesian bounding box handler (wk_bbox()) (#42).
  • Refactored unit tests reflecting use of the new API and for improved test coverage (#44, #45, #46).
  • Added wk_meta(), wk_vector_meta(), and wk_count() to inspect properties of vectors (#53).
  • Modified all internal handlers such that they work with vectors of unknown length (#54).
  • Fixed reference to wkutils::plot.wk_wksxp(), which no longer exists.
  • Fixed WKB import of ZM geometries that do not use EWKB.
  • Added xy(), xyz(), xym() and xyzm() classes to efficiently store point geometries.
  • Added the rct() vector class to efficiently store two-dimensional rectangles.
  • Fixed the CRAN check failure caused by a circular dependency with the wkutils package.
  • Added S3 methods to coerce sf objects to and from wkt(), wkb() and wksxp().
  • Fixed EWKB output for collections and multi-geometries that included SRID (#3).
  • Fixed CRAN check errors related to exception handling on MacOS/R 3.6.2.
  • Added a NEWS.md file to track changes to the package.