These functions implement operations on pairs of geometries in OGC WKB or WKT format.
Usage
g_intersection(
this_geom,
other_geom,
as_wkb = TRUE,
as_iso = FALSE,
byte_order = "LSB",
quiet = FALSE
)
g_union(
this_geom,
other_geom,
as_wkb = TRUE,
as_iso = FALSE,
byte_order = "LSB",
quiet = FALSE
)
g_difference(
this_geom,
other_geom,
as_wkb = TRUE,
as_iso = FALSE,
byte_order = "LSB",
quiet = FALSE
)
g_sym_difference(
this_geom,
other_geom,
as_wkb = TRUE,
as_iso = FALSE,
byte_order = "LSB",
quiet = FALSE
)
Arguments
- this_geom
Either a raw vector of WKB or list of raw vectors, or a character vector containing one or more WKT strings.
- other_geom
Either a raw vector of WKB or list of raw vectors, or a character vector containing one or more WKT strings. Must contain the same number of geometries as
this_geom
.- as_wkb
Logical,
TRUE
to return the output geometry in WKB format (the default), orFALSE
to return as WKT.- as_iso
Logical,
TRUE
to export as ISO WKB/WKT (ISO 13249 SQL/MM Part 3), orFALSE
(the default) to export as "Extended WKB/WKT".- byte_order
Character string specifying the byte order when output is WKB. One of
"LSB"
(the default) or"MSB"
(uncommon).- quiet
Logical,
TRUE
to suppress warnings. Defaults toFALSE
.
Value
A geometry as WKB raw vector or WKT string, or a list/character vector of
geometries as WKB/WKT with length equal to the number of input geometry
pairs.
NA
is returned with a warning if an input geometry cannot be converted
into an OGR geometry object, or if an error occurs in the call to the
underlying OGR API function.
Details
These functions use the GEOS library via GDAL headers.
g_intersection()
returns a new geometry which is the region of
intersection of the two geometries operated on. g_intersects()
can be used
to test if two geometries intersect.
g_union()
returns a new geometry which is the region of
union of the two geometries operated on.
g_difference()
returns a new geometry which is the region of this geometry
with the region of the other geometry removed.
g_sym_difference()
returns a new geometry which is the symmetric
difference of this geometry and the other geometry (union minus
intersection).
Note
this_geom
and other_geom
are assumed to be in the same coordinate
reference system.
Geometry validity is not checked. In case you are unsure of the validity
of the input geometries, call g_is_valid()
before, otherwise the result
might be wrong.
Examples
elev_file <- system.file("extdata/storml_elev.tif", package="gdalraster")
ds <- new(GDALRaster, elev_file)
g1 <- ds$bbox() |> bbox_to_wkt()
ds$close()
g2 <- "POLYGON ((327381.9 5104541.2, 326824.0 5104092.5, 326708.8 5103182.9,
327885.2 5102612.9, 329334.5 5103322.4, 329304.2 5104474.5,328212.7
5104656.4, 328212.7 5104656.4, 327381.9 5104541.2))"
# see spatial predicate defintions at https://en.wikipedia.org/wiki/DE-9IM
g_intersects(g1, g2) # TRUE
#> [1] TRUE
g_overlaps(g1, g2) # TRUE
#> [1] TRUE
# therefore,
g_contains(g1, g2) # FALSE
#> [1] FALSE
g_sym_difference(g1, g2) |> g_area()
#> [1] 14834452
g3 <- g_intersection(g1, g2)
g4 <- g_union(g1, g2)
g_difference(g4, g3) |> g_area()
#> [1] 14834452