pts <- structure("{\"type\":\"FeatureCollection\",
\"features\":[{\"type\":\"Feature\",
\"properties\":{\"a\":1,\"b\":2,\"c\":3},
\"geometry\":{\"type\":\"Point\",
\"coordinates\":[103,3]}}]}", class = c("geojson", "json"))
lines <- structure("{\"type\":\"FeatureCollection\",
\"features\":[{\"type\":\"Feature\",
\"properties\":{\"a\":1,\"b\":2,\"c\":3},
\"geometry\":{\"type\":\"LineString\",
\"coordinates\":[[102,2],[102,4],[104,4],[104,2],[102,2]]}}]}",
class = c("geojson", "json"))
test_that("ms_filter_fields works with polygons", {
poly <- basic_poly(attr = TRUE)
expect_s3_class(ms_filter_fields(poly, "a"), "geojson")
expect_s3_class(ms_filter_fields(unclass(poly), c("a", "b")), "geojson")
expect_snapshot_value(ms_filter_fields(poly, "a"), style = "json2")
out_sp <- ms_filter_fields(GeoJSON_to_sp(poly), c("a", "b"))
expect_s4_class(out_sp, "SpatialPolygonsDataFrame")
expect_equal(out_sp@data, data.frame(a = c(1,5), b = c(2,3), row.names = 1:2))
skip_if_not(has_sys_mapshaper())
expect_s3_class(ms_filter_fields(poly, "a", sys = TRUE), "geojson")
expect_s3_class(ms_filter_fields(GeoJSON_to_sf(poly), c("a", "b"), sys = TRUE), "sf")
})
test_that("ms_filter_fields works with points", {
pts <- basic_points()
expect_s3_class(ms_filter_fields(pts, c("x", "y")), "geojson")
expect_snapshot_value(ms_filter_fields(pts, c("x", "y")), style = "json2")
out_sp <- ms_filter_fields(GeoJSON_to_sp(pts), "x")
expect_s4_class(out_sp, "SpatialPointsDataFrame")
expect_equal(out_sp@data, data.frame(x = c(-78,-71,135)))
})
test_that("ms_filter_fields works with lines", {
lines <- basic_lines()
expect_s3_class(ms_filter_fields(lines, c("a", "b")), "geojson")
expect_snapshot_value(ms_filter_fields(lines, c("a", "b")), style = "json2")
out_sp <- ms_filter_fields(GeoJSON_to_sp(lines), c("a", "b"))
expect_s4_class(out_sp, "SpatialLinesDataFrame")
expect_equal(out_sp@data, data.frame(a = 1, b = 2, row.names = 1L))
})
test_that("ms_filter_fields fails correctly", {
expect_error(ms_filter_fields('{foo: "bar"}', "a"), "Input is not valid geojson")
poly <- basic_poly(attr = TRUE)
expect_warning(ms_filter_fields(poly, "d"), "The command returned an empty response")
expect_error(ms_filter_fields(GeoJSON_to_sp(poly), "d"), "Not all named fields exist in input data")
expect_error(ms_filter_fields(poly, 1), "fields must be a character vector")
})
test_that("ms_filter_fields works with sf", {
lines <- basic_lines()
lines_sf <- read_sf(unclass(lines))
out_sf <- ms_filter_fields(lines_sf, c("a", "b"))
expect_s3_class(out_sf, "sf")
expect_equal(names(out_sf), c("a", "b", "geometry"))
expect_error(ms_filter_fields(lines_sf, "d"), "Not all fields are in input")
skip_if_not(has_sys_mapshaper())
expect_s3_class(ms_filter_fields(lines_sf, c("a", "b"), sys = TRUE), "sf")
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.