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)
```

## Arguments

- this_geom
Character. OGC WKT string for a simple feature geometry.

- other_geom
Character. OGC WKT string for a simple feature geometry.

## 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
```