### 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,]) # st_area(nc[1:3,]) l = st_sfc(st_linestring(rbind(c(7,52), c(8,53))), crs = 4326) st_geod_length(l) 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)]) st_geod_covered_by(x[c(2,2)], x[c(1,1,1)]) st_geod_covers(x[c(1,1,1)], x[c(2,2,2,2)], sparse = FALSE) st_geod_covered_by(x[c(2,2)], x[c(1,1,1)], sparse = FALSE) # 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 pt = st_point(c(30, 70)) x = st_sfc(pole, pt, pt, crs = 4326) st_geod_distance(x, x) st_geod_distance(x, x, sparse = TRUE) st_geod_distance(x, x, tolerance = 1, sparse = TRUE)