A geovctr is a geometry-like collection of objects. In the geovctrs
package, wkt()
, wkb()
, geo_collection()
,
geo_xy()
, geo_rect()
, and geo_segment()
are all geovctrs.
Extension packages can either use these types or
implement the as_geovctr()
generic
to take advantage of a wide range of processing functions, including
coercion, plotting, and summary information.
is_geovctr(x) as_geovctr(x, ...) # S3 method for character as_geovctr(x, ...) # S3 method for data.frame as_geovctr(x, ...) restore_geovctr(x, result, ...) # S3 method for default restore_geovctr(x, result, ...) # S3 method for data.frame restore_geovctr(x, result, ...) expect_geovctr(x) # S3 method for sfc as_geovctr(x, ...) # S3 method for sf as_geovctr(x, ...) # S3 method for sfc restore_geovctr(x, result, ...) # S3 method for sf restore_geovctr(x, result, ...)
x | A (possibly) geovctr |
---|---|
... | Passed to the constructor |
result | The result of a transformation operation |
This package is intended to allow for a variety of in-memory
representations of geometry, as there are many examples where
simple geometries can be efficiently parameterized without
resorting to storing every coordinate of every vertex
(built-in examples include geo_xy()
, geo_segment()
, and
geo_rect()
). These types do, however, have unambiguous
representations as geometries, and thus should be able to be
used wherever a geometry is appropriate.
For an object to be a "geovctr", it must:
Be a vctr (vctrs::vec_is()
must be TRUE
). This ensures that it will
work with tibble::tibble()
and other tidyverse functions such as
tidyr::unnest()
and dplyr::group_by()
/ dplyr::mutate()
/
dplyr::summarise()
.
Have is_geovctr()
return TRUE
. This makes it work automatically with
functions like geo_bbox()
that have a default
implementation for something that can be coerced to wkt()
,
wkb()
, or wksxp()
.
Have the ability to be coerced to wkt()
, wkb()
, and wksxp()
using as_wkt()
, as_wkb()
, and as_wksxp()
.
These casts power the default implementations of
functions like geo_bbox()
. In addition, a vctrs::vec_cast()
method should be provided so that row-binding and other vector
operations work with functions that might return a simpler type.
Have the ability to be combined with wkt()
, wkb()
, and wksxp()
using vec_c()
in both directions. This helps support processing functions
that return a class to be combined with the output of other functions.
This might require a vctrs::vec_ptype()
implementation for
a class.
You can test these expectations for a given object using expect_geovctr()
.
A secondary class of object is one that could be interpreted as a geovctr,
but in most cases can't be. One example of this is a character vector,
which could be well-known text, but probably isn't. However, when the
user passes it to a function like geo_bbox()
, it
probably is well-known text. Similarly, a data.frame
or
tibble::tibble()
probably doesn't contain a geometry column,
but when passed to a function that operates on geometries,
it's likely that it does. The geovctrs package supports these
objects with the as_geovctr()
generic, which means you can
pass these objects anywhere you would pass a first-class
geometry vector.
is_geovctr(wkt())#> [1] TRUEis_geovctr(NULL)#> [1] FALSE#> <wk_wkt[1]> #> [1] POINT (30 10)as_geovctr("POINT (30 10)")#> <wk_wkt[1]> #> [1] POINT (30 10)#> <wk_wkt[1]> #> [1] POINT (30 10)