---
title: "Working with spatial data"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Working with spatial data}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

```{r setup}
#| message: false
library(ARUtools)
library(sf)
library(dplyr)
```

Here we'll cover some workflows using spatial data. For a general workflow, best
take a look at the "Getting started with ARUtools" first.


We'll start with our metadata data frame.

```{r}
m <- clean_metadata(project_files = example_files)
m
```

This isn't spatial because we don't actually know where the sites are located.
But our next step is to get our site coordinates.

Let's assume we have a spatial data frame containing our sites and where they 
are located.
```{r}
s <- st_as_sf(example_sites, coords = c("lon", "lat"), crs = 4326)
s
```

Similar to a non-spatial workflow, we'll clean up this list so we can add these sites to our metadata.

```{r}
sites <- clean_site_index(s,
  name_aru_id = "ARU",
  name_site_id = "Sites",
  name_date_time = c("Date_set_out", "Date_removed")
)
sites
```

Note that we still have a spatial data set.

Now let's add this site-related information to our metadata.

```{r}
m <- add_sites(m, sites)
m
```

Again our output is as a spatial data set.

Let's continue by adding times to sunrise/sunset.
```{r}
m <- calc_sun(m)
m
```

All done! And we've retained a spatial data set the entire way.

## Problems
However, sometimes spatial data sets might be trickier to use.

For example, sf spatial data sets cannot have missing coordinates, meaning
that when using the `add_sites()` function, you'll get a warning and a data frame
back if you try to add an incomplete list of sites.

```{r}
m <- clean_metadata(project_files = example_files)

sites <- st_as_sf(example_sites, coords = c("lon", "lat"), crs = 4326) |>
  clean_site_index(
    name_aru_id = "ARU",
    name_site_id = "Sites",
    name_date_time = c("Date_set_out", "Date_removed")
  )

sites <- sites[-1, ] # Omit that first site

m <- add_sites(m, sites)
m
```

To resolve this, either add in the missing site information, 
or omit the files before joining.


```{r}
m <- clean_metadata(project_files = example_files) |>
  filter(date > "2020-05-03") # Filter out recordings that don't match a site

m <- add_sites(m, sites)
m
```

Fixed!

