- Ensure package tests pass against sf 1.0-18 (#224, #225).
- Ensure package compiles with
STRICT_R_HEADERS=1
(#222).
- Add
wk_crs()
andwk_set_crs()
methods forbbox
(#213) - Fix wk_trans inconsistent meta flags handling (#217)
- Ensure package builds on arm64 for Windows (#220)
- Fix format strings/arguments for R-devel (#209).
- 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 usingis.na()
(#205).xy(NaN, NaN)
is now read as POINT EMPTY andis.na(xy(NaN, NaN))
now returnsFALSE
. This means that both EMPTY and null points can roundtrip throughxy()
(#205).
wk_meta()
now contains a new columnis_empty
, which isTRUE
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 theclasses
attribute to sfc output with mixed geometry types (#195). - Function
sfc_writer()
now has an argumentpromote_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 thepart_id
when calling the child handler (@brownag, #194).
- Added
wkb_to_hex()
(@anthonynorth, #183). - Implemented
vctrs::vec_proxy_equal()
forwkb()
vctrs (@anthonynorth, #183). - Fixed
sfc_writer()
, which had returned NULL for some inputs (e.g., viawk_collection()
) (@anthonynorth, #182, #186). - Added
wk_clockwise()
andwk_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).
- Fix tests for updated waldo package (#178).
- Fix use-after-free warnings.
- Fix implicit reliance on error
as.data.frame.default()
, which no longer occurs in r-devel (#166).
- 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"
or4326
), added data objectswk_proj_crs_view
andwk_proj_crs_json
that contain cached versions of rendered PROJJSON based on the latest PROJ version (#147). - Added a
wk_crs_proj_definition()
method forwk_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 plotsNULL
/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()
forxy()
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()
, andxy_m()
(#144, #161). - Added rectangle operators
rct_intersects()
,rct_contains()
, andrct_intersection()
(#161).
- Fixed
wk_affine_rescale()
to apply the translate and scale operations in the correct order (#94). - Add
wk_handle_slice()
andwk_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 argumentgeodesic
inwkt()
andwkb()
as a flag for objects whose edges must be interpolated along a spherical/ellipsoidal trajectory (#112). - Added
sf::st_geometry()
andsf::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()
andvalidate_wk_wkb()
when called on a very longwkb()
vector (#117). - Fixed issue with
validate_wk_wkb()
andvalidate_wk_wkt()
, which failed for most valid objects (#119). - Added
wk_envelope()
andwk_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()
, andwkt_format()
(#129). wk_plot()
is now an S3 generic (#130).
- 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()
andwk_coords()
to extract individual coordinate values from geometries with optional identifying information. For advanced users, thewk_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, thewk_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()
, andwk_collection()
to construct polygons, lines, and collections. For advanced users,wk_polygon_filter()
,wk_linestring_filter()
, andwk_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()
andwk_trans_set()
transforms are also built using this feature. These are run using the newwk_transform()
function and power the newwk_set_z()
,wk_set_m()
,wk_drop_z()
,wk_drop_m()
, functions (#87, #88, #89).
- Fix LTO and MacOS 3.6.2 check errors (#61).
- Removed
wksxp()
in favour of improvedsf::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 bywk_crs_equal()
. - Added an R-level framework for other packages to implement
wk readers and handlers:
wk_handle()
,wk_translate()
, andwk_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()
, andwk_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()
andxyzm()
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()
andwksxp()
.
- 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.