
R version 4.1.0 (2021-05-18) -- "Camp Pontanezen"
Copyright (C) 2021 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> ### Name: lw_geodetic
> ### Title: geodetic length, area, and predicates
> ### Aliases: lw_geodetic st_geod_area lw_geodetic st_geod_length
> ###   lw_geodetic st_geod_segmentize lw_geodetic st_geod_covers
> 
> ### ** Examples
> 
> suppressPackageStartupMessages(library(sf))
> suppressPackageStartupMessages(library(lwgeom))
> suppressPackageStartupMessages(library(units))
> nc = st_read(system.file("gpkg/nc.gpkg", package="sf"), quiet = TRUE)
> st_geod_area(nc[1:3,])
Units: [m^2]
[1] 1137388604  611077263 1423489919
> # st_area(nc[1:3,])
> l = st_sfc(st_linestring(rbind(c(7,52), c(8,53))), crs = 4326)
> st_geod_length(l)
130359.3 [m]
> pol = st_polygon(list(rbind(c(0,0), c(0,60), c(60,60), c(0,0))))
> x = st_sfc(pol, crs = 4326)
> seg = st_geod_segmentize(x[1], set_units(10, km))
> plot(seg, graticule = TRUE, axes = TRUE)
> pole = st_polygon(list(rbind(c(0,80), c(120,80), c(240,80), c(0,80))))
> pt = st_point(c(0,90))
> x = st_sfc(pole, pt, crs = 4326)
> st_geod_covers(x[c(1,1,1)], x[c(2,2,2,2)])
Sparse geometry binary predicate list of length 3, where the predicate
was `covers'
 1: 1, 2, 3, 4
 2: 1, 2, 3, 4
 3: 1, 2, 3, 4
> st_geod_covered_by(x[c(2,2)], x[c(1,1,1)])
Sparse geometry binary predicate list of length 2, where the predicate
was `covered_by'
 1: 1, 2, 3
 2: 1, 2, 3
> st_geod_covers(x[c(1,1,1)], x[c(2,2,2,2)], sparse = FALSE)
     [,1] [,2] [,3] [,4]
[1,] TRUE TRUE TRUE TRUE
[2,] TRUE TRUE TRUE TRUE
[3,] TRUE TRUE TRUE TRUE
> st_geod_covered_by(x[c(2,2)], x[c(1,1,1)], sparse = FALSE)
     [,1] [,2] [,3]
[1,] TRUE TRUE TRUE
[2,] TRUE TRUE TRUE
> 
> # box crossing the dateline:
> #box = st_polygon(list(rbind(c(179.5,0), c(179.5,1), c(-179.5,1), c(-179.5,0), c(179.5,0))))
> box = st_polygon(list(rbind(c(179.5,0.1), c(179.5,1), c(-179.5,1), c(-179.5,0.1), c(179.5,0.1))))
> b = st_sfc(box, crs = 4326)
> units::set_units(st_geod_area(b), km^2) # approx 111^2
11077.84 [km^2]
> 
> pt = st_point(c(30, 70))
> x = st_sfc(pole, pt, pt, crs = 4326)
> st_geod_distance(x, x)
Units: [m]
        [,1]    [,2]    [,3]
[1,]       0 1378923 1378923
[2,] 1378923       0       0
[3,] 1378923       0       0
> st_geod_distance(x, x, sparse = TRUE)
Sparse geometry binary predicate list of length 3, where the predicate
was `st_is_within_distance'
 1: 1
 2: 2, 3
 3: 2, 3
> st_geod_distance(x, x, tolerance = 1, sparse = TRUE)
Sparse geometry binary predicate list of length 3, where the predicate
was `st_is_within_distance'
 1: 1
 2: 2, 3
 3: 2, 3
> 
> proc.time()
   user  system elapsed 
  0.525   0.035   0.553 
