Nothing
## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
message = FALSE,
warning = FALSE,
fig.height = 7,
fig.width = 7,
dpi = 75
)
## ----eval = FALSE-------------------------------------------------------------
# # install from CRAN
# install.packages("geofi")
#
# # Install development version from GitHub
# remotes::install_github("ropengov/geofi")
## ----include = FALSE, eval = TRUE---------------------------------------------
# Let's first create a function that checks if the suggested
# packages are available
check_namespaces <- function(pkgs){
return(all(unlist(sapply(pkgs, requireNamespace,quietly = TRUE))))
}
apiacc <- geofi::check_api_access()
pkginst <- check_namespaces(c("sf","dplyr","patchwork","ggplot2"))
apiacc_pkginst <- all(apiacc,pkginst)
## ----eval = apiacc_pkginst----------------------------------------------------
library(geofi)
library(sf)
library(dplyr)
muni <- get_municipalities()
point <- municipality_central_localities
crs <- st_crs(muni)
crs$input
## ----crss, eval = apiacc_pkginst----------------------------------------------
muni_4326 <- st_transform(muni, "EPSG:4326")
crs <- st_crs(muni_4326)
crs$input
library(ggplot2)
p1 <- ggplot(muni %>% st_union()) +
geom_sf() +
labs(subtitle = "EPSG:3067")
p2 <- ggplot(muni_4326 %>% st_union()) +
geom_sf() +
labs(subtitle = "EPSG:4326")
library(patchwork)
wrap_plots(list(p1,p2), nrow = 1) +
plot_annotation(title = "Map of Finland in two different CRS")
## ----largest, fig.width=5, eval = apiacc_pkginst------------------------------
# compute area
muni$area <- sf::st_area(muni)
# largest
muni %>%
arrange(desc(area)) %>%
slice(1:10) %>%
ggplot() +
geom_sf() +
geom_sf_label(aes(label = name_fi)) +
labs(title = "largest 10")
# smallest
muni %>%
arrange(area) %>%
slice(1:10) %>%
ggplot() +
geom_sf() +
geom_sf_label(aes(label = name_fi)) +
labs(title = "smallest 10")
## ----subsetting, eval = apiacc_pkginst----------------------------------------
greater_helsinki <- c('Espoo','Helsinki','Vantaa','Hyvinkää',
'Järvenpää','Kauniainen','Kerava','Kirkkonummi',
'Mäntsälä','Nurmijärvi','Pornainen','Sipoo','Tuusula','Vihti')
greater_helsinki_polygon <- muni %>% filter(municipality_name_fi %in% greater_helsinki)
ggplot(greater_helsinki_polygon) +
geom_sf() +
geom_sf(data = point %>%
filter(teksti %in% toupper(greater_helsinki)))
## ----bb_poly, eval = apiacc_pkginst-------------------------------------------
bounding_box_polygon <- st_as_sfc(st_bbox(muni %>% filter(municipality_name_fi %in% greater_helsinki)))
ggplot(st_intersection(bounding_box_polygon, muni)) +
geom_sf() +
geom_sf(data = point %>% filter(teksti %in% toupper(greater_helsinki)))
## ----bb_point, eval = apiacc_pkginst------------------------------------------
bounding_box_point <- st_as_sfc(st_bbox(point %>% filter(teksti %in% toupper(greater_helsinki))))
ggplot(st_intersection(bounding_box_point, muni)) +
geom_sf() +
geom_sf(data = point %>% filter(teksti %in% toupper(greater_helsinki)))
## ----neighbours, fig.height = 5, eval = apiacc_pkginst-----------------------
helsinki <- muni %>% filter(municipality_name_fi == "Helsinki")
neigbour_codes <- st_intersection(muni,helsinki) %>%
pull(municipality_code)
ggplot(muni %>% filter(municipality_code %in% neigbour_codes)) +
geom_sf() +
geom_sf_label(aes(label = municipality_name_fi))
## ----unioin, eval = apiacc_pkginst--------------------------------------------
muni$area_class <- cut_number(x = as.numeric(muni$area), n = 3)
muni %>%
filter(area_class == levels(muni$area_class)[1]) %>%
st_union() %>%
ggplot() +
geom_sf()
## ----union2, eval = apiacc_pkginst--------------------------------------------
muni %>%
group_by(area_class) %>%
summarise() %>%
ggplot() +
geom_sf(aes(fill = area_class))
## ----centroids, fig.width=5, eval = apiacc_pkginst----------------------------
muni_centroids <- st_centroid(muni)
ggplot() +
geom_sf(data = muni) +
geom_sf(data = muni_centroids, color = "blue") +
# plot also the municipality_central_localities
geom_sf(data = municipality_central_localities, color = "red")
## ----buffers, fig.width=5, eval = apiacc_pkginst------------------------------
muni_centroids_buffer <- muni_centroids %>%
st_buffer(dist = 15000)
ggplot() +
geom_sf(data = muni) +
geom_sf(data = muni_centroids_buffer) +
geom_sf(data = muni_centroids, shape = 3)
## ----muonio, fig.width=5, eval = apiacc_pkginst-------------------------------
muonio <- muni %>% filter(municipality_name_fi == "Muonio")
grid_sf <- st_make_grid(muonio, cellsize = c(2000,4000), what="polygons") %>%
st_sf()
grid_clip <- st_intersection(grid_sf, muonio)
grid_clip$rank <- 1:nrow(grid_clip)
ggplot(grid_clip) +
geom_sf(aes(fill = rank), color = alpha("white", 1/3), size = 3) +
scale_fill_viridis_c() +
theme_minimal()
## ----voronoi, fig.height = 9, eval = apiacc_pkginst---------------------------
library(geofi)
library(sf)
muni_voronoi <- municipality_central_localities %>%
st_union() %>%
st_voronoi() %>%
st_cast() %>%
st_sf() %>%
st_intersection(st_union(muni)) %>%
mutate(rnk = 1:nrow(.))
ggplot(muni_voronoi) +
geom_sf(aes(fill = rnk)) +
geom_sf(data = municipality_central_localities, shape = 4) +
scale_fill_fermenter(palette = "YlGnBu") +
theme_minimal() +
theme(axis.text = element_blank(),
axis.title = element_blank(),
panel.grid = element_blank(),
legend.position = "none")
## ----kunnat, eval = apiacc_pkginst--------------------------------------------
kunta <- geofi::municipality_central_localities %>%
select(teksti,kuntatunnus) %>%
mutate(kuntatunnus = as.integer(kuntatunnus)) %>%
select(-teksti) %>%
left_join(geofi::municipality_key_2022 %>% select(municipality_code, municipality_name_fi),
by = c("kuntatunnus" = "municipality_code")) %>%
rename(teksti = municipality_name_fi)
kunta
## ----dmatrix, eval = apiacc_pkginst-------------------------------------------
d_list <- list()
kuntadatan_teksti_ja_kuntatunnus <- sf::st_drop_geometry(kunta) %>%
select(teksti,kuntatunnus)
for (i in 1:nrow(kunta)){
dist_tmp <- sf::st_distance(x = kunta[i,], y = kunta)
tibble(origin_name = kunta[i,]$teksti,
origin_code = kunta[i,]$kuntatunnus) %>%
bind_cols(kuntadatan_teksti_ja_kuntatunnus %>% rename(destination_name = teksti,
destination_code = kuntatunnus)) %>%
mutate(dist = dist_tmp[1,]) -> d_list[[i]]
}
kunta_dist <- do.call("bind_rows", d_list) %>%
mutate(dist = as.numeric(dist))
head(kunta_dist)
## ----nearest, eval = apiacc_pkginst-------------------------------------------
ggplot(kunta_dist %>%
filter(origin_name == "Helsinki") %>%
arrange(dist) %>% slice(1:20),
aes(x = dist, y = reorder(destination_name, dist), label = round(dist))) +
geom_col() + geom_text(aes(x = 1000), color = "white", hjust = 0) +
labs(title = "Nearest 20 municipality localities to Helsinki", x = "distance in meters")
## ----dist0, eval = apiacc_pkginst---------------------------------------------
# We firt need the country map as a single polygon
geofi::get_municipalities() %>%
sf::st_union() %>%
# then we need to compute the centroid of that polygon
sf::st_centroid() -> fin_centroid
# The let's find the nearest neighbour with
distance <- st_distance(x = fin_centroid, y = kunta)
kuntadatan_teksti_ja_kuntatunnus %>%
mutate(dist = as.numeric(distance)) %>%
arrange(dist) -> closest_to_center
head(closest_to_center)
## ----dist1, eval = apiacc_pkginst---------------------------------------------
furthest20 <- kunta_dist %>%
filter(origin_name == closest_to_center[1,]$teksti) %>%
arrange(desc(dist)) %>% slice(1:20)
ggplot(furthest20,
aes(x = dist, y = reorder(destination_name, dist), label = round(dist))) +
geom_col() + geom_text(aes(x = 10000), color = "white", hjust = 0) +
labs(title = paste("Furthest 20 municipality localities \nfrom the most central locality of ", closest_to_center[1,]$teksti), x = "distance in meters")
## ----dist2, eval = apiacc_pkginst---------------------------------------------
sf_lahto <- kunta %>%
filter(teksti %in% closest_to_center[1,]$teksti) %>%
select(teksti)
sf_paate <- kunta %>%
filter(teksti %in% furthest20$destination_name) %>%
select(teksti)
triplst <- list()
for (i in 1:nrow(sf_paate)){
triplst[[i]] <- rbind(
sf_lahto,
sf_paate[i,]
) %>%
summarize(m = mean(row_number()),do_union=FALSE) %>%
st_cast("LINESTRING")
}
trips <- do.call("rbind", triplst)
ggplot() +
geom_sf(data = muni %>% st_union(), alpha = .3) +
geom_sf(data = trips, color = "dim grey") +
geom_sf_label(data = sf_lahto, aes(label = teksti)) +
geom_sf_text(data = sf_paate, aes(label = teksti))
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.