# Tests for oe_match ------------------------------------------------------
test_that("oe_match: simplest examples work", {
expect_match(oe_match("Italy", quiet = TRUE)$url, "italy")
expect_match(oe_match("Leeds", provider = "bbbike", quiet = TRUE)$url, "Leeds")
})
test_that("oe_match: error with new classes", {
expect_error(oe_match(c(1 + 2i, 1 - 2i)), class = "oe_match_NoSupportForClass")
# See #97 for new classes
})
test_that("oe_match: sfc_POINT objects", {
# simplest example with geofabrik
milan_duomo = sf::st_sfc(sf::st_point(c(1514924, 5034552)), crs = 3003)
expect_match(oe_match(milan_duomo, quiet = TRUE)$url, "italy")
# simplest example with bbbike
leeds = sf::st_sfc(sf::st_point(c(430147.8, 433551.5)), crs = 27700)
expect_match(oe_match(leeds, provider = "bbbike", quiet = TRUE)$url, "Leeds")
# an sfc_POINT object that does not intersect anything
# the point is in the middle of the atlantic ocean
ocean = sf::st_sfc(sf::st_point(c(-39.325649, 29.967632)), crs = 4326)
expect_error(oe_match(ocean, quiet = TRUE), class = "oe_match_noIntersectProvider")
expect_error(
oe_match(ocean, provider = "bbbike", quiet = TRUE),
class = "oe_match_noIntersectProvider"
)
# See https://github.com/osmextract/osmextract/issues/98
# an sfc_POINT that does intersect two cities with bbbike
# the problem is (or, at least, it should be) less severe with geofabrik
amsterdam_utrecht = sf::st_sfc(
sf::st_point(c(4.988327, 52.260453)),
crs = 4326
)
# The point is midway between amsterdam and utrecth, closer to Amsterdam, and
# it intersects both bboxes
expect_match(
oe_match(amsterdam_utrecht, provider = "bbbike", quiet = TRUE)$url,
"Amsterdam"
)
})
test_that("oe_match: numeric input", {
expect_match(oe_match(c(9.1916, 45.4650), quiet = TRUE)$url, "italy")
})
test_that("oe_match: sf input", {
my_pt = sf::st_as_sf(sf::st_sfc(sf::st_point(c(9.1916, 45.4650)), crs = 4326))
expect_match(oe_match(my_pt, quiet = TRUE)$url, "italy")
})
test_that("oe_match: different providers, match_by or max_string_dist args", {
expect_error(oe_match("Italy", provider = "XXX", quiet = TRUE), class = "load_provider_data-InvalidProvider")
expect_error(oe_match("Italy", match_by = "XXX", quiet = TRUE), class = "oe_match_chosenColumnDoesNotExist")
expect_match(oe_match("RU", match_by = "iso3166_1_alpha2", quiet = TRUE)$url, "russia")
# expect_null(oe_match("Isle Wight"))
# The previous test was removed in #155 since now oe_match calls nominatim servers in
# case it doesn't find an exact match, so it should never return NULL
expect_match(oe_match("Isle Wight", max_string_dist = 3, quiet = TRUE)$url, "isle-of-wight")
expect_message(oe_match("London", max_string_dist = 3, quiet = FALSE))
})
test_that("oe_match: Cannot specify more than one place", {
# Characters
expect_error(oe_match(c("Italy", "Spain")), class = "oe_match_characterPlaceLengthOne")
expect_error(oe_match("Italy", "Spain"), class = "load_provider_data-InvalidProvider")
# sfc_POINT
milan_duomo = sf::st_sfc(sf::st_point(c(1514924, 5034552)), crs = 3003) %>%
sf::st_transform(4326)
leeds = sf::st_sfc(sf::st_point(c(430147.8, 433551.5)), crs = 27700) %>%
sf::st_transform(4326)
# expect_error(oe_match(c(milan_duomo, leeds)))
expect_error(oe_match(milan_duomo, leeds), class = "load_provider_data-InvalidProvider")
# numeric
expect_error(oe_match(c(9.1916, 45.4650, -1.543794, 53.698968)), class = "oe_match_placeLength2")
expect_error(oe_match(c(9.1916, 45.4650), c(-1.543794, 53.698968)), class = "load_provider_data-InvalidProvider")
})
test_that("oe_match looks for a place location online", {
skip_on_cran()
skip_if_offline("github.com")
skip_on_ci()
expect_match(
oe_match("Olginate", quiet = TRUE)$url,
"italy/nord-ovest-latest\\.osm\\.pbf"
)
})
test_that("oe_match: error when input place is far from all zones and match_by != name", {
expect_error(
object = oe_match("Olginate", match_by = "id", quiet = TRUE),
class = "oe_match_noTolerableMatchFound"
)
})
test_that("oe_match: test level parameter", {
# See https://github.com/ropensci/osmextract/issues/160
yak = c(-120.51084, 46.60156)
expect_equal(
oe_match(yak, level = 1, quiet = TRUE)$url,
"https://download.geofabrik.de/north-america-latest.osm.pbf"
)
expect_equal(
oe_match(yak, quiet = TRUE)$url,
"https://download.geofabrik.de/north-america/us/washington-latest.osm.pbf"
)
expect_error(
oe_match(yak, level = 3, quiet = TRUE),
class = "oe_match_noIntersectLevel"
)
})
test_that("oe_match:sfc objects with multiple places", {
milan_duomo = sf::st_sfc(sf::st_point(c(1514924, 5034552)), crs = 3003) %>%
sf::st_transform(4326)
leeds = sf::st_sfc(sf::st_point(c(430147.8, 433551.5)), crs = 27700) %>%
sf::st_transform(4326)
expect_match(
oe_match(c(milan_duomo, leeds), quiet = TRUE)$url,
"https://download.geofabrik.de/europe-latest.osm.pbf"
)
})
test_that("oe_match can use different providers", {
expect_match(
oe_match("leeds", quiet = TRUE)$url,
"bbbike/Leeds/Leeds\\.osm\\.pbf"
)
})
test_that("oe_match works with a bbox in input", {
# See https://github.com/ropensci/osmextract/issues/185
my_bbox = sf::st_bbox(
c(xmin = 11.23602, ymin = 47.80478, xmax = 11.88867, ymax = 48.24261),
crs = 4326
)
expect_match(
oe_match(my_bbox, quiet = TRUE)$url,
"oberbayern-latest.osm.pbf"
)
})
test_that("oe_match returns a warning message with missing CRS in bbox input", {
# See https://github.com/ropensci/osmextract/issues/185#issuecomment-810378795
my_bbox = sf::st_bbox(
c(xmin = 11.23602, ymin = 47.80478, xmax = 11.88867, ymax = 48.24261)
)
expect_warning(
oe_match(my_bbox, quiet = TRUE),
"The input place has no CRS, setting crs = 4326."
)
})
test_that("oe_match does not create a variable in global env after https://github.com/ropensci/osmextract/pull/246", {
oe_match("Leeds", quiet = TRUE)
expect_false(exists("provider", where = .GlobalEnv))
})
# Tests for oe_match_pattern ----------------------------------------------
test_that("oe_match_pattern: simplest examples work", {
match_yorkshire = oe_match_pattern("Yorkshire")
expect_gte(length(match_yorkshire), 1)
match_yorkshire = oe_match_pattern("Yorkshire", full_row = TRUE)
expect_gte(length(match_yorkshire), 1)
match_empty_no_place = oe_match_pattern("ABC")
expect_length(match_empty_no_place, 0L)
match_empty_no_field = oe_match_pattern("Yorkshire", match_by = "ABC")
expect_length(match_empty_no_field, 0L)
})
test_that("oe_match_pattern: works with numeric input", {
skip_on_cran() # since it takes several seconds
match_milan = oe_match_pattern(c(9, 45))
expect_gte(length(match_milan), 1)
match_milan = oe_match_pattern(c(9, 45), full_row = TRUE)
expect_gte(length(match_milan), 1)
expect_error(oe_match_pattern(1:3), class = "oe_match_pattern-numericInputLengthNe2")
})
test_that("oe_match_pattern: works with sf/bbox input", {
skip_on_cran() # since it takes several seconds
milan = sf::st_bbox(c(xmin = 9.1293, ymin = 45.4399, xmax = 9.2282, ymax = 45.5049))
expect_warning(oe_match_pattern(milan), "The input has no CRS")
sf::st_crs(milan) = 4326
match_milan = oe_match_pattern(milan)
expect_gte(length(match_milan), 1)
match_milan = oe_match_pattern(
sf::st_transform(sf::st_as_sf(sf::st_as_sfc(milan)), 3003),
full_row = TRUE
)
expect_gte(length(match_milan), 1)
})
test_that("oe_match_pattern: test spatial combine", {
skip_on_cran()
milan = sf::st_point(c(9, 45))
palermo = sf::st_point(c(13, 38))
MI_PA = sf::st_sfc(milan, palermo, crs = 4326)
expect_identical(oe_match_pattern(MI_PA)$geofabrik, c("Europe", "Italy"))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.