context("drop_crumbs()")
skip_on_os("solaris")
library(sf)
library(units)
test_that("drop_crumbs() works", {
p <- jagged_polygons$geometry[7]
area_thresh <- units::set_units(200, km^2)
p_dropped <- drop_crumbs(p, threshold = area_thresh)
expect_true(any(st_area(st_cast(p, "POLYGON")) < area_thresh))
expect_true(all(st_area(st_cast(p_dropped, "POLYGON")) >= area_thresh))
l <- jagged_lines$geometry[8]
length_thresh <- units::set_units(40, km)
l_dropped <- drop_crumbs(l, threshold = length_thresh)
expect_true(any(st_length(st_cast(l, "LINESTRING")) < length_thresh))
expect_true(all(st_length(st_cast(l_dropped, "LINESTRING")) >= length_thresh))
})
test_that("drop_crumbs() doesn't alter features with nothing dropped", {
p <- jagged_polygons
p_dropped <- drop_crumbs(p, threshold = units::set_units(0.1, m^2))
expect_equivalent(p, p_dropped)
l <- jagged_lines
l_dropped <- drop_crumbs(l, threshold = units::set_units(0.1, m))
expect_equivalent(l, l_dropped)
})
test_that("drop_crumbs() drop_empty works", {
p <- jagged_polygons$geometry
area_thresh <- units::set_units(200, km^2)
p_dropped <- drop_crumbs(p, threshold = area_thresh, drop_empty = FALSE)
expect_equal(length(p_dropped), length(p))
expect_true(any(st_is_empty(p_dropped)))
p_dropped <- drop_crumbs(p, threshold = area_thresh, drop_empty = TRUE)
expect_lt(length(p_dropped), length(p))
expect_true(all(!st_is_empty(p_dropped)))
})
test_that("drop_crumbs() handling of empty results", {
s_sf <- drop_crumbs(jagged_polygons, threshold = 2e20)
s_sfc <- drop_crumbs(st_geometry(jagged_polygons), threshold = 2e20)
jp_sp <- as(jagged_polygons, "Spatial")
sp::proj4string(jp_sp) <- st_crs(jagged_polygons)$proj4string
s_spdf <- drop_crumbs(jp_sp, threshold = 2e20)
expect_equal(nrow(s_sf), 0)
expect_equal(length(s_sfc), 0)
expect_null(s_spdf)
})
test_that("drop_crumbs() works for different input formats", {
s_sf <- drop_crumbs(jagged_polygons, threshold = 2e8)
s_sfc <- drop_crumbs(st_geometry(jagged_polygons), threshold = 2e8)
jp_spdf <- as_Spatial(jagged_polygons)
sp::proj4string(jp_spdf) <- st_crs(jagged_polygons)$proj4string
s_spdf <- drop_crumbs(jp_spdf, threshold = 2e8)
jp_sp <- as(jp_spdf, "SpatialPolygons")
sp::proj4string(jp_sp) <- st_crs(jagged_polygons)$proj4string
s_sp <- drop_crumbs(jp_sp, threshold = 2e8)
expect_s3_class(s_sf, "sf")
expect_s3_class(s_sfc, "sfc")
expect_s4_class(s_spdf, "SpatialPolygonsDataFrame")
expect_s4_class(s_sp, "SpatialPolygons")
expect_equal(nrow(s_sf), length(s_sfc))
expect_equal(nrow(s_sf), length(s_spdf))
expect_equivalent(st_set_geometry(s_sf, NULL), s_spdf@data)
})
test_that("drop_crumbs() works for SpatVector objects", {
skip_if_not_installed("terra")
jp <- jagged_polygons[7, ]
jp_terra <- terra::vect(jp)
s_terra <- expect_warning(
drop_crumbs(jp_terra, threshold = units::set_units(200, km^2))
)
expect_s4_class(s_terra, "SpatVector")
a_diff <- terra::expanse(jp_terra) - terra::expanse(s_terra)
expect_gt(a_diff, 0)
})
test_that("drop_crumbs() fails for points", {
point <- st_point(c(0, 0)) %>%
st_sfc()
expect_error(drop_crumbs(point, threshold = 1))
expect_error(drop_crumbs(as(st_sfc(point), "Spatial"), threshold = 1))
})
test_that("drop_crumbs() fails for mixed geometries", {
mixed <- list(jagged_polygons$geometry[[1]], jagged_lines$geometry[[1]]) %>%
st_sfc(crs = 4326)
expect_error(drop_crumbs(mixed, threshold = 1))
})
test_that("drop_crumbs() fails for invalid thresholds", {
expect_error(drop_crumbs(jagged_polygons, threshold = -1))
expect_error(drop_crumbs(jagged_polygons, threshold = 0))
expect_error(drop_crumbs(jagged_polygons,
threshold = set_units(1, km)))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.