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