diff --git a/README.md b/README.md index e72de19fd5922b7fb745d0cb7fc5068458041aa7..307c6988f2b04e29f29b597eafdb8c8ea2d6cf0d 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,22 @@ Simple (and not so simple) examples of mapping data with R You might also like https://git.soton.ac.uk/twr1m15/la_emissions_viz which drives https://rushby.shinyapps.io/LAemissions/ +## data + +The following example data is provided in this repository: + +* Boundary data - for Solent region (various geographies: LA, LSOA, MSOA) +* Energy - area-based statistics for domestic electricity consumption (LSOA, MSOA) +* Lookup table for geographies + +## rMappingExample + +A simple example of mapping using R. Examples use Local Authority (LA) and Middle-layer Super Output Area (MSOA) geography and electricity consumption data (provided in `data` subfolder). + +## ONS-open-geography + +An example and resources for using the [ONS Open Geography portal](https://geoportal.statistics.gov.uk) to download geographical data and create maps using `Leaflet` package. + ## Resources ### Openstreetmap for base maps (i.e. map tiles/rasters) @@ -18,4 +34,4 @@ They want you to have an API key now. Yeah nah. ### tmap package - nice - check out the bubble geom - * https://cran.r-project.org/web/packages/tmap/vignettes/tmap-getstarted.html \ No newline at end of file + * https://cran.r-project.org/web/packages/tmap/vignettes/tmap-getstarted.html diff --git a/open-geog-API/ONS-open-geography-example.R b/open-geog-API/ONS-open-geography-example.R new file mode 100644 index 0000000000000000000000000000000000000000..3e9cffc6fca60e62bb6953e32ba00a1b9d483d03 --- /dev/null +++ b/open-geog-API/ONS-open-geography-example.R @@ -0,0 +1,76 @@ +# get feature layer data from ONS open geography API + +# Really useful example of using ONS open geography portal with R +# https://medium.com/@traffordDataLab/pushing-the-boundaries-with-the-open-geography-portal-api-4d70637bddc3 + +library(sf) + +# Load Local Authority geography from ---- +# https://geoportal.statistics.gov.uk/datasets/ons::local-authority-districts-december-2020-uk-bgc/api + +# Construct query URL from elements +geo_endpoint <- "https://ons-inspire.esriuk.com/arcgis/rest/services/" +geo_boundarylayer <- "Administrative_Boundaries/Local_Authority_Districts_December_2020_UK_BGC/" +geo_server <- "FeatureServer/0/" +geo_search <- "LAD20NM IN " + +# Construct a vector of local authorities to load +# the following local authorities are the 'Solent' region +las_to_load <- c("Southampton","Portsmouth","Winchester", + "Eastleigh","Isle of Wight","Fareham", + "Gosport","Test Valley","East Hampshire", + "Havant","New Forest","Hart","Basingstoke and Deane") + +geo_where <- las_to_load # sometimes we don't want all boundaries +geo_outfields <- "*" # returns all fields +#geo_outfields <- c("LAD20CD","LAD20NM","LONG","LAT") # use in place of line above to return selected fields only +geo_outSR <- "4326" +geo_format <- "json" + +# Assemble the full URL for the query from elements above +geo_query_string <- paste0(geo_endpoint,geo_boundarylayer,geo_server, + "query?where=",geo_search,"(",paste(paste0("'",geo_where,"'"), collapse = ","), + ")&outFields=",(paste(geo_outfields, collapse = ",")),"&outSR=",geo_outSR,"&f=",geo_format) + + +# Format the URL to remove spaces +geo_query <- URLencode(geo_query_string) +message("Loading LA geometry from ONS Open Geography API") +# API query +sf_data <- st_read(geo_query) +#plot(st_geometry(sf_data)) + +# Useful lookup spatial reference for CRS +# https://spatialreference.org/ref/epsg/27700/ +st_coord_sys <- st_crs(sf_data) # check coord system +st_coord_sys # current coord system EPSG: 4326 (is what leaflet wants - good) + +# transform the coord system if required +if(st_coord_sys$epsg != 4326){ + sf_data <- st_transform(sf_data, "+proj=longlat +datum=WGS84") +} + +# Create map (using leaflet) ---- + +# create popup first (using htmltools) +# by adding a column to sf_data object +library(htmltools) +sf_data$popup_text <- + paste("Locial authority area code: ","<b>", sf_data$lad20cd, "</b>", + '<br/>', 'Local authority: ', '<b>', sf_data$lad20nm, '</b>', ' ') %>% + lapply(htmltools::HTML) + +# plot map +library(leaflet) +leaflet(sf_data) %>% + addTiles() %>% # Add default OpenStreetMap map tiles + addPolygons(color = "blue", fillColor = "blue", fillOpacity = 0.2, weight = 1.5, popup = ~(lad20nm), # popups clicked + label = ~(popup_text), # define labels + labelOptions = labelOptions( # label options + style = list("font-weight" = "normal", padding = "2px 2px"), + direction = "auto"), + highlight = highlightOptions( + weight = 5, + color = "#666", + fillOpacity = 0.7, + bringToFront = TRUE))