-# install libgdal-dev on debian first
-# install libudunits2-dev on debian first
-#install.packages("sf")
library(sf)
-library(tidyverse)
-library(broom)
-#install.packages("OpenStreetMap")
+library(dplyr)
+library(ggplot2)
library(OpenStreetMap)
library(viridis)
+library(httr2)
-# Read the shapefile obtained from WA opendata (SLIP)
-#shape <- readOGR(dsn = "data/", layer = "CurrentActiveSchoolsSemester12017_PublicDET_014")
-shape.df <- st_read(dsn = "data/", layer = "CurrentActiveSchoolsSemester12017_PublicDET_014", stringsAsFactors = FALSE)
+## Obtain the shapefile from WA opendata (SLIP)
+tempdirSHP <- tempdir()
+tempfileSHP <- tempfile()
+req <- request("https://sso.slip.wa.gov.au/as/token.oauth2") |>
+ req_headers("Authorization" = "Basic ZGlyZWN0LWRvd25sb2Fk") |>
+ req_body_form(list("grant_type" = "password",
+ # SLIP username and password stored in
+ #pass - the standard unix password manager
+ "username" = system2("pass", args = "slip.wa.gov.au | grep Username | sed -e 's/Username: //'", stdout = TRUE),
+ "password" = system2("pass", args = "slip.wa.gov.au | head -1", stdout = TRUE)))
+
+tokenResponse <- req_perform(req)
+
+slipUrl <- "https://direct-download.slip.wa.gov.au/datadownload/Education/Current_Active_Schools_Sem_1_2022_Public_DET_020_WA_GDA94_Public_Shapefile.zip"
+
+req <- request(slipUrl) |>
+ req_headers( 'Authorization' = paste0('Bearer ',resp_body_json(tokenResponse)$access_token))
+
+responseSlip <- req_perform(req)
+writeBin(resp_body_raw(responseSlip), con = tempfileSHP)
+unzip(tempfileSHP, exdir = tempdirSHP)
+shape.df <- st_read(dsn = tempdirSHP)
shape.df$latitude <- as.numeric(shape.df$latitude)
shape.df$longitude <- as.numeric(shape.df$longitude)
shape.df$totalschoo <- as.numeric(shape.df$totalschoo)
# filter out remote islands
shape.df <- filter(shape.df,longitude > 100)
-#shape.df <- filter(shape.df, totalschoo < 500)
# Obtain the contour box of the shape
lat <- c(min(shape.df$latitude), max(shape.df$latitude))
mapLatLon <- openproj(map)
-autoplot(mapLatLon) +
+OpenStreetMap::autoplot.OpenStreetMap(mapLatLon) +
geom_point(data = shape.df,
aes(x = longitude,
y = latitude,
axis.ticks = element_blank()) +
labs(title = "Western Australian schools",
caption = "Map tiles by Stamen Design, under CC BY 3.0.\nMapdata by OpenStreetMap, under ODbL.
- School data © Government of WA 2017.\n Dep. of Education & Training.",
+ School data © Government of WA 2022.\n Dep. of Education & Training.",
x="",
y="")
# Let's look at secondary school only
# 95th percentile of school size
secon95th <- quantile(shape.metro.df[,"totalsecon">0]$totalsecon,probs = .95)
-autoplot(mapLatLon.metro) +
+OpenStreetMap::autoplot.OpenStreetMap(mapLatLon.metro) +
geom_point(data = filter(shape.metro.df, totalsecon > 0), # geom_sf is not yet in ggplot2 on CRAN, so sticking to this for now
aes(x = longitude,
y = latitude,
size = 2) +
scale_color_viridis(option="viridis",
name = "Number\nof pupils") +
- guides(size = FALSE) + # Do not show legend for size, as color is the main key
+ guides(size = 'none') + # Do not show legend for size, as color is the main key
theme(legend.position = "right",
axis.text = element_blank(),
axis.ticks = element_blank()) +
labs(title = "Western Australian secondary schools",
subtitle = "Perth metro area",
caption = "Map tiles by Stamen Design, under CC BY 3.0.\nMapdata by OpenStreetMap, under ODbL.
- School data © Government of WA 2017.\n Dep. of Education & Training.",
+ School data © Government of WA 2022.\n Dep. of Education & Training.",
x="",
y="")