These functions implement operations on pairs of geometries in OGC WKT format.
Usage
g_intersection(this_geom, other_geom)
g_union(this_geom, other_geom)
g_difference(this_geom, other_geom)
g_sym_difference(this_geom, other_geom)
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
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