library(rinat)
library(dplyr)
library(lubridate)
library(sf)
library(mapview)
library(leafpop)
library(DT)Kiama Coastal walk
Tools and Libraries
I will be using R with the following selection of libraries in this blog post:
I use the library here to manage relative paths of the project:
here::i_am("regions/Kiama-walk.qmd")I save the downloaded inat data into this data folder at the root of the project folder:
if (!dir.exists(here::here("data")))
dir.create(here::here("data"))
inat_obs_data <- here::here("data", "inat-obs.rds")This will query all the observations from my iNaturalist user. I will save this to a data folder:
if (file.exists(inat_obs_data)) {
user_obs <- readRDS(inat_obs_data)
} else {
user_obs <- get_inat_obs_user("NeoMapas",maxresults = 5000) |>
mutate(dts=date(datetime), year=year(dts), month=month(dts))
saveRDS(user_obs, inat_obs_data)
}I can make this object spatially explicit using the function st_to_sf from package sf:
user_obs_xy <- st_as_sf(user_obs,coords=c("longitude","latitude"), crs=4326)For this post, I am focusing on the observation made on the 9 March 2025:
kiama_walk_obs <- filter(user_obs_xy,
dts %in% c("2025-02-08", "2025-02-09", "2025-02-10"))This is the number of observations for that day:
nrow(kiama_walk_obs)[1] 61
And this is the approximate number of species (or other taxa) included in those observations:
n_distinct(kiama_walk_obs$species_guess)[1] 48
Table of observations
We can create a table of observations:
st_drop_geometry(kiama_walk_obs) |>
select(scientific_name, common_name, quality_grade, url) |>
mutate(`url` =
sprintf('<a href="%s" target="_blank">iNat link</a>', url)) |>
datatable(style='bootstrap4', escape = FALSE) |>
formatStyle(c('common_name', 'quality_grade', 'url'),
color = 'maroon', backgroundColor = 'mistyrose') |>
formatStyle('scientific_name',
color = 'maroon', backgroundColor = 'mistyrose', fontStyle = 'italic')Here I am using the datatable function from package DT, and setting the style to bootstrap4 to match the style of this website.
Map of locations
A quick map with the default image of each observation can be made with mapview:
mapview(kiama_walk_obs,
map.types = c("OpenStreetMap.DE", "Esri.WorldImagery"),
layer.name = c("Kiama coastal walk"),
popup =
popupImage(kiama_walk_obs$image_url, src = "remote"))That’s fantastic!
Session info
sessionInfo()R version 4.5.2 (2025-10-31)
Platform: aarch64-apple-darwin20
Running under: macOS Tahoe 26.4.1
Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRlapack.dylib; LAPACK version 3.12.1
locale:
[1] en_AU.UTF-8/en_AU.UTF-8/en_AU.UTF-8/C/en_AU.UTF-8/en_AU.UTF-8
time zone: Australia/Sydney
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] DT_0.34.0 leafpop_0.1.0 mapview_2.11.4 sf_1.1-0
[5] lubridate_1.9.5 dplyr_1.2.1 rinat_0.1.10
loaded via a namespace (and not attached):
[1] gtable_0.3.6 xfun_0.57 ggplot2_4.0.3
[4] raster_3.6-32 htmlwidgets_1.6.4 lattice_0.22-9
[7] leaflet.providers_3.0.0 vctrs_0.7.3 tools_4.5.2
[10] crosstalk_1.2.2 generics_0.1.4 stats4_4.5.2
[13] curl_7.1.0 tibble_3.3.1 proxy_0.4-29
[16] pkgconfig_2.0.3 KernSmooth_2.23-26 satellite_1.0.6
[19] RColorBrewer_1.1-3 S7_0.2.2 leaflet_2.2.3
[22] uuid_1.2-2 lifecycle_1.0.5 compiler_4.5.2
[25] farver_2.1.2 textshaping_1.0.5 terra_1.9-11
[28] codetools_0.2-20 htmltools_0.5.9 maps_3.4.3
[31] class_7.3-23 yaml_2.3.12 jquerylib_0.1.4
[34] pillar_1.11.1 classInt_0.4-11 brew_1.0-10
[37] tidyselect_1.2.1 digest_0.6.39 rprojroot_2.1.1
[40] fastmap_1.2.0 grid_4.5.2 here_1.0.2
[43] cli_3.6.6 magrittr_2.0.5 base64enc_0.1-6
[46] dichromat_2.0-0.1 leafem_0.2.5 e1071_1.7-17
[49] withr_3.0.2 scales_1.4.0 sp_2.2-1
[52] timechange_0.4.0 rmarkdown_2.31 httr_1.4.8
[55] otel_0.2.0 png_0.1-9 evaluate_1.0.5
[58] knitr_1.51 rlang_1.2.0 Rcpp_1.1.1-1.1
[61] glue_1.8.1 DBI_1.3.0 svglite_2.2.2
[64] jsonlite_2.0.0 R6_2.6.1 plyr_1.8.9
[67] systemfonts_1.3.2 units_1.0-1