wk 0.9.4
- Ensure package tests pass against sf 1.0-18 (#224, #225).
 
wk 0.9.3
- Ensure package compiles with 
STRICT_R_HEADERS=1
(#222). 
wk 0.9.2
- Add 
wk_crs() and wk_set_crs() methods for
bbox (#213) 
- Fix wk_trans inconsistent meta flags handling (#217)
 
- Ensure package builds on arm64 for Windows (#220)
 
wk 0.9.1
- Fix format strings/arguments for R-devel (#209).
 
wk 0.9.0
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). 
wk 0.8.0
- Added 
wkb_to_hex() (@anthonynorth, #183). 
- Implemented 
vctrs::vec_proxy_equal() for
wkb() vctrs (@anthonynorth, #183). 
- Fixed 
sfc_writer(), which had returned NULL for some
inputs (e.g., via wk_collection()) (@anthonynorth, #182, #186). 
- Added 
wk_clockwise() and
wk_counterclockwise() to re-wind polygon rings (@anthonynorth,
#188). 
- New replacement-function mode for 
wk_coords<-() for
in-place modification of coordinates (@mdsumner, #187). 
- New function 
wk_trans_explicit() migrated from crs2crs
(@mdsumner,
#187). 
wk 0.7.3
- Fix tests for updated waldo package (#178).
 
wk 0.7.2
- Fix use-after-free warnings.
 
wk 0.7.1
- Fix implicit reliance on error 
as.data.frame.default(),
which no longer occurs in r-devel (#166). 
wk 0.7.0
- Remove legacy headers that are no longer used by any downstream
package (#146).
 
validate_wk_wkt() now errors for an object that does
not inherit from ‘wk_wkt’ (#123, #146). 
- Added 
wk_crs_projjson() to get a JSON representation of
a CRS object. To make lookup possible based on shortcut-style CRS
objects (e.g., "EPSG:4326" or 4326), added
data objects wk_proj_crs_view and
wk_proj_crs_json that contain cached versions of rendered
PROJJSON based on the latest PROJ version (#147). 
- Added a 
wk_crs_proj_definition() method for
wk_crs_inherit() (#136, #147). 
- Conversion to sf now uses the 
sfc_writer() for all wk
classes, making conversions faster and fixing at least one issue with
conversion of NA geometries to sf (#135). 
wk_plot() now plots NULL/NA
geometries and mixed geometry types more reliably (#142, #143,
#149). 
- Exported EMPTY geometries to well-known text now include dimension
(e.g., 
POINT Z EMPTY) (#141, #150). 
- Fixed bug where 
wk_polygon() doubled some points when
the input contained closed rings (#134, #151). 
- Fixed bug where 
wk_count() exposed uninitialized values
for empty input (#139, #153). 
- The 
xy_writer() now opportunistically avoids allocating
vectors for Z or M values unless they are actually needed (#131,
#154). 
- Added example WKT for all geometry types and dimensions plus helper
wk_example() to access them and set various properties
(#155). 
- Fixes warnings when compiling with 
-Wstrict-prototypes
(#157, #158). 
- Removed 
wk_chunk_map_feature() in favour of using
chunking strategies directly (#132, #159). 
- Optimized 
wk_coords() for xy() objects
(#138, #160). 
- Added accessor methods for record-style vectors:
rct_xmin(), rct_xmax(),
rct_ymin(), rct_ymax(),
rct_width(), rct_height(),
crc_center(), crc_x(), crc_y(),
crc_r(), xy_x(), xy_y(),
xy_z(), and xy_m() (#144, #161). 
- Added rectangle operators 
rct_intersects(),
rct_contains(), and rct_intersection()
(#161). 
wk 0.6.0
- Fixed 
wk_affine_rescale() to apply the translate and
scale operations in the correct order (#94). 
- Add 
wk_handle_slice() and
wk_chunk_map_feature() to support a chunk + apply workflow
when working with large vectors (#101, #107). 
- C and R code was rewritten to avoid materializing ALTREP vectors
(#103, #109).
 
- Added a 
wk_crs_proj_definition() generic for foreign
CRS objects (#110, #112). 
- Added 
wk_crs_longlat() helper to help promote
authority-compliant CRS choices (#112). 
- Added 
wk_is_geodesic(), wk_set_geodesic(),
and argument geodesic in wkt() and
wkb() as a flag for objects whose edges must be
interpolated along a spherical/ellipsoidal trajectory (#112). 
- Added 
sf::st_geometry() and sf::st_sfc()
methods for wk geometry vectors for better integration with sf (#113,
#114). 
- Refactored well-known text parser to be more reusable and faster
(#115, #104).
 
- Minor performance enhancement for 
is.na() and
validate_wk_wkb() when called on a very long
wkb() vector (#117). 
- Fixed issue with 
validate_wk_wkb() and
validate_wk_wkt(), which failed for most valid objects
(#119). 
- Added 
wk_envelope() and
wk_envelope_handler() to compute feature-wise bounding
boxes (#120, #122). 
- Fixed headers and tests to pass on big endian systems (#105,
#122).
 
- Incorporated the geodesic attribute into vctrs methods, data frame
columns, and bbox/envelope calculation (#124, #125).
 
- Fix 
as_xy() for nested data frames and geodesic objects
(#126, #128). 
- Remove deprecated 
wkb_problems(),
wkt_problems(), wkb_format(), and
wkt_format() (#129). 
wk_plot() is now an S3 generic (#130). 
wk 0.5.0
- Fixed bugs relating to the behaviour of wk classes as vectors (#64,
#65, #67, #70).
 
crc() objects are now correctly exported as polygons
with a closed loop (#66, #70). 
- Added 
wk_vertices() and wk_coords() to
extract individual coordinate values from geometries with optional
identifying information. For advanced users, the
wk_vertex_filter() can be used as part of a pipeline to
export coordinates as point geometries to another handler (#69,
#71). 
- Added 
wk_flatten() to extract geometries from
collections. For advanced users, the wk_flatten_filter()
can be used as part of a pipeline (#75, #78). 
options("max.print") is now respected by all vector
classes (#72, #74). 
- Moved implementation of plot methods from wkutils to wk to simplify
the dependency structure of both packages (#80, #76).
 
- Added 
wk_polygon(), wk_linestring(), and
wk_collection() to construct polygons, lines, and
collections. For advanced users, wk_polygon_filter(),
wk_linestring_filter(), and
wk_collection_filter() can be used as part of a pipeline
(#77, #84). 
- Added a C-level transform struct that can be used to simplify the
the common pattern of transforming coordinates. These structs can be
created by other packages; however, the 
wk_trans_affine()
and wk_trans_set() transforms are also built using this
feature. These are run using the new wk_transform()
function and power the new wk_set_z(),
wk_set_m(), wk_drop_z(),
wk_drop_m(), functions (#87, #88, #89). 
wk 0.4.1
- Fix LTO and MacOS 3.6.2 check errors (#61).
 
wk 0.4.0
- 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).
 
wk 0.3.4
- Fixed reference to 
wkutils::plot.wk_wksxp(), which no
longer exists. 
wk 0.3.3
- 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(). 
wk 0.3.2
- 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.
 
wk 0.3.1
- Added a 
NEWS.md file to track changes to the
package.