--- title: "Parzer use cases" author: "Scott Chamberlain, Alban Sagouis" date: "`r Sys.Date()`" output: html_document: toc: true vignette: > %\VignetteIndexEntry{Parzer use cases} %\VignetteEngine{quarto::html} %\VignetteEncoding{UTF-8} --- ## Use case: working with spatial R packages ```{r} #| label: packages #| collapse: true #| eval: false if (!requireNamespace("sf")) install.packages("sf") if (!requireNamespace("leaflet")) install.packages("leaflet") ``` ```{r} #| label: loading_parzer #| eval: true library(parzer) ``` One may find themselves having to clean up messy coordinates as part of their project/work/etc. How does this look when fit into a workflow going all the way to visualization? Let's say you have the following messy coordinates that you've compiled from different places, leading to a variety of messy formats: ```{r} #| label: lats_lons lats <- c( "46.4183", "46.4383° N", "46.5683° N", "46° 27´ 5.4\" N", "46° 25.56’", "N46°24’4.333" ) lons <- c( "25.7391", "E25°34’6.4533", "25.3391° E", "25.8391° E", "25° 35.56’", "E25°34’4.333" ) ``` Parse messy coordinates: ```{r} #| label: creating_dat #| collapse: true dat <- data.frame( longitude = parse_lon(lons), latitude = parse_lat(lats) ) dat ``` Combine coordinates with other data. ```{r} #| label: adding_variables_to_dat #| collapse: true dat$shape <- c("round", "square", "triangle", "round", "square", "square") dat$color <- c("blue", "yellow", "green", "red", "green", "yellow") dat ``` Coerce to an `sf` object ```{r} #| label: converting_dat_to_sf #| warning: false #| collapse: true datsf <- sf::st_as_sf(dat, coords = c("longitude", "latitude")) datsf ``` Calculate the center of the plot view ```{r} #| label: map_center center_lon <- mean(dat$longitude) center_lat <- mean(dat$latitude) ``` Plot data using the `leaflet` package ```{r out.with="100%"} #| label: fig-leaflet_1 #| warning: false #| collapse: true library("leaflet") leaflet() |> addTiles() |> addMarkers(data = datsf) |> setView(center_lon, center_lat, zoom = 10) ``` We'd like to have data only for a certain area, e.g., a political boundary or a park boundary. We can clip the data to a bounding box using `sf::st_crop()`. First, define the bounding box, and visualize: ```{r} #| label: fig-leaflet_2 #| warning: false bbox <- c( xmin = 25.42813, ymin = 46.39455, xmax = 25.68769, ymax = 46.60346 ) leaflet() |> addTiles() |> addRectangles(bbox[["xmin"]], bbox[["ymin"]], bbox[["xmax"]], bbox[["ymax"]]) |> setView(center_lon, center_lat, zoom = 10) ``` Crop the data to the bounding box: ```{r} #| label: cropping_dat datsf_c <- sf::st_crop(datsf, bbox) ``` Plot the new data: ```{r out.with="100%"} #| label: fig-leaflet_3 #| warning: false leaflet() |> addTiles() |> addMarkers(data = datsf_c) |> setView(center_lon, center_lat, zoom = 10) ```