Convert sfc object to an WKB object
st_as_binary(x, ...)# S3 method for sfc
st_as_binary(x, ..., EWKB = FALSE, endian = .Platform$endian,
pureR = FALSE, precision = attr(x, "precision"), hex = FALSE)
# S3 method for sfg
st_as_binary(x, ..., endian = .Platform$endian, EWKB = FALSE,
pureR = FALSE, hex = FALSE)
object to convert
ignored
logical; use EWKB (PostGIS), or (default) ISO-WKB?
character; either "big" or "little"; default: use that of platform
logical; use pure R solution, or C++?
numeric; if zero, do not modify; to reduce precision: negative values convert to float (4-byte real); positive values convert to round(x*precision)/precision. See details.
logical; return as (unclassed) hexadecimal encoded character vector?
st_as_binary
is called on sfc objects on their way to the GDAL or GEOS libraries, and hence does rounding (if requested) on the fly before e.g. computing spatial predicates like st_intersects. The examples show a round-trip of an sfc
to and from binary.
For the precision model used, see also https://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/PrecisionModel.html. There, it is written that: ``... to specify 3 decimal places of precision, use a scale factor of 1000. To specify -3 decimal places of precision (i.e. rounding to the nearest 1000), use a scale factor of 0.001.''. Note that ALL coordinates, so also Z or M values (if present) are affected.
x = st_sfc(st_point(c(1/3, 1/6)), precision = 1000)
st_as_sfc(st_as_binary(x)) # rounds
Run the code above in your browser using DataLab