NEWS.md
STRICT_R_HEADERS=1
(#222).wk_crs()
and wk_set_crs()
methods for bbox
(#213)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).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).sfc_writer()
to correctly attach the classes
attribute to sfc output with mixed geometry types (#195).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).wk_collection_filter()
now correctly increments the part_id
when calling the child handler (@brownag, #194).wkb_to_hex()
(@anthonynorth, #183).vctrs::vec_proxy_equal()
for wkb()
vctrs (@anthonynorth, #183).sfc_writer()
, which had returned NULL for some inputs (e.g., via wk_collection()
) (@anthonynorth, #182, #186).wk_clockwise()
and wk_counterclockwise()
to re-wind polygon rings (@anthonynorth, #188).wk_coords<-()
for in-place modification of coordinates (@mdsumner, #187).wk_trans_explicit()
migrated from crs2crs (@mdsumner, #187).as.data.frame.default()
, which no longer occurs in r-devel (#166).validate_wk_wkt()
now errors for an object that does not inherit from ‘wk_wkt’ (#123, #146).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).wk_crs_proj_definition()
method for wk_crs_inherit()
(#136, #147).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).POINT Z EMPTY
) (#141, #150).wk_polygon()
doubled some points when the input contained closed rings (#134, #151).wk_count()
exposed uninitialized values for empty input (#139, #153).xy_writer()
now opportunistically avoids allocating vectors for Z or M values unless they are actually needed (#131, #154).wk_example()
to access them and set various properties (#155).-Wstrict-prototypes
(#157, #158).wk_chunk_map_feature()
in favour of using chunking strategies directly (#132, #159).wk_coords()
for xy()
objects (#138, #160).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).rct_intersects()
, rct_contains()
, and rct_intersection()
(#161).wk_affine_rescale()
to apply the translate and scale operations in the correct order (#94).wk_handle_slice()
and wk_chunk_map_feature()
to support a chunk + apply workflow when working with large vectors (#101, #107).wk_crs_proj_definition()
generic for foreign CRS objects (#110, #112).wk_crs_longlat()
helper to help promote authority-compliant CRS choices (#112).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).sf::st_geometry()
and sf::st_sfc()
methods for wk geometry vectors for better integration with sf (#113, #114).is.na()
and validate_wk_wkb()
when called on a very long wkb()
vector (#117).validate_wk_wkb()
and validate_wk_wkt()
, which failed for most valid objects (#119).wk_envelope()
and wk_envelope_handler()
to compute feature-wise bounding boxes (#120, #122).as_xy()
for nested data frames and geodesic objects (#126, #128).wkb_problems()
, wkt_problems()
, wkb_format()
, and wkt_format()
(#129).wk_plot()
is now an S3 generic (#130).crc()
objects are now correctly exported as polygons with a closed loop (#66, #70).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).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).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).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).wksxp()
in favour of improved sf::st_sfc()
support (#21).attr(, "crs")
, and check that operations that involve more than one vector have compatable CRS objects as determined by wk_crs_equal()
.wk_handle()
, wk_translate()
, and wk_writer()
(#37).sf::st_sfc()
objects and implemented R-level generics for sfc, sfg, sf, and bbox objects (#28, #29, #38, #45).crc()
vector class to represent circles (#40).wk_bbox()
) (#42).wk_meta()
, wk_vector_meta()
, and wk_count()
to inspect properties of vectors (#53).xy()
, xyz()
, xym()
and xyzm()
classes to efficiently store point geometries.rct()
vector class to efficiently store two-dimensional rectangles.wkt()
, wkb()
and wksxp()
.