Class 16
library(geospaar)
farmers <- system.file("extdata/farmer_spatial.csv", package = "geospaar") %>%
read_csv() %>%
st_as_sf(coords = c("x", "y"))
districts <- st_read(
system.file("extdata/districts.geojson", package = "geospaar")
)
roads <- read_sf(system.file("extdata/roads.geojson", package = "geospaar"))st_length() to add column ‘road_length’ to roadsscale_color_continuous() )lwd = 1)theme_bw()roads <- st_read(
system.file("extdata/roads.geojson", package = "geospaar")
)
roads <- roads %>%
mutate(road_length = as.numeric(units::set_units(st_length(.), "km")))
ggplot() +
geom_sf(data = districts, color = "black", fill = NA) +
geom_sf(data = roads, aes(color = road_length), lwd = 1) +
scale_color_continuous(type = "viridis") +
theme_bw()%>% and + in ggplotggplot(districts) +
geom_sf(color = "black", fill = NA) +
st_read(system.file("extdata/roads.geojson", package = "geospaar")) %>%
mutate(road_length = as.numeric(units::set_units(st_length(.), "km"))) %>%
geom_sf(data = ., aes(color = road_length), lwd = 1) +
scale_color_continuous(type = "viridis") +
theme_bw()p <- ggplot(districts) + geom_sf()
p + roads %>%
mutate(road_length = as.numeric(units::set_units(st_length(.), "km"))) %>%
filter(., road_length <= 500 & road_length > 49) %>%
geom_sf(data = ., color = 'red') + theme_minimal()
roads_ss <- roads %>%
mutate(road_length = as.numeric(units::set_units(st_length(.), "km"))) %>%
filter(., road_length <= 500 & road_length > 49)
p + geom_sf(data = roads_ss, color = 'red') +
theme_minimal()Data setup
st_intersectsst_intersectshighway <- roads_rpj[401, ]
dists_int <- districts %>%
slice(st_intersects(x = highway, y = .)[[1]])
# unlist(st_intersects(x = highway, y = districts))
#> although coordinates are longitude/latitude, st_intersects assumes that they are planar
dists_int
plot(st_geometry(dists_int), col = 'grey')
plot(highway, col = 'red', add = TRUE)st_intersection()pol_int_dists <- st_intersection(x = pol, y = districts)
par(mfrow = c(1, 2), mar = rep(0, 4))
plot(st_geometry(districts), col = "grey")
plot(st_geometry(pol_int_dists), col = rainbow(n = nrow(pol_int_dists)),
add = TRUE)
plot(st_geometry(districts), col = "grey")
districts %>%
slice(unlist(st_intersects(x = pol, y = .))) %>%
plot(add = TRUE)st_differencest_unionst_buffer()## project everything to Albers
farmers_alb <- farmers_sf %>%
st_transform(st_crs(roads))
long_roads <- roads %>%
filter(as.numeric(st_length(.)) > 500000)
districts_alb <- districts %>%
st_transform(st_crs(roads))
roads_buff_20km <- st_buffer(long_roads, 20000)
plot(st_geometry(districts_alb), col = "grey")
plot(st_geometry(roads_buff_20km), col = "blue", add = TRUE)
plot(st_geometry(long_roads), col = "red", add = TRUE)st_samplePlace 3 random points in Zambia (union districts to make single shape of Zambia). Find all districts within 50 km of sampled points?
Adapt this
How many farmers are within 100km of one of the “long roads”?
Adapt
ggplot with the difference in red over Zambia’s districtslibrary(ggplot2)
mypoly <- st_polygon(list(cbind(x = c(26.5, 27.5, 27, 26, 26.5),
y = c(-15.5, -16.5, -17, -16, -15.5)))) %>%
st_sfc(crs = 4326) %>% st_intersection(., districts) %>% st_as_sf() %>%
mutate(ID = seq(1:nrow(.)))
#st_crs(mypoly) <- 4326
smallest_centroid <- districts %>%
filter(distName == "Lusaka") %>%
st_centroid()
p <- ggplot(districts) +
geom_sf() +
geom_sf(data = smallest_centroid, color = "red")
p1 <- p + geom_sf(data = mypoly, aes(color = as.factor(ID)),
fill = "transparent") + labs(color = "ID")
# small_pol2 <- pol %>% st_sfc() %>% st_sf(crs = 4326) %>% mutate(ID = 1)
p2 <- p + geom_sf(data = mypoly, aes(color = as.factor(ID)),
fill = "transparent") +
labs(color = "ID")
gridExtra::grid.arrange(p1, p2, ncol = 2)patchwork