NEWS
wk 0.9.4 (2024-10-11)
- Ensure package tests pass against sf 1.0-18 (#224, #225).
wk 0.9.3 (2024-09-06)
- Ensure package compiles with
STRICT_R_HEADERS=1 (#222).
wk 0.9.2 (2024-07-09)
- 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 (2023-11-29)
- Fix format strings/arguments for R-devel (#209).
wk 0.9.0 (2023-10-22)
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 (2023-08-25)
- 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 (2023-05-06)
- Fix tests for updated waldo package (#178).
wk 0.7.2 (2023-03-17)
- Fix use-after-free warnings.
wk 0.7.1 (2022-12-09)
- Fix implicit reliance on error
as.data.frame.default(),
which no longer occurs in r-devel (#166).
wk 0.7.0 (2022-10-13)
- 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 (2022-01-03)
- 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 (2021-07-13)
- 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 (2021-03-16)
- Fix LTO and MacOS 3.6.2 check errors (#61).
wk 0.4.0 (2021-03-06)
- 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 (2021-01-16)
- Fixed reference to
wkutils::plot.wk_wksxp(), which
no longer exists.
wk 0.3.3 (2020-10-13)
- 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 (2020-08-03)
- 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 (2020-07-21)
- Added a
NEWS.md file to track changes to the package.