Carga de paquetes y de datos

# Paquete para manipulación de datos
library(dplyr)

# Paquete para manejo de datos vectoriales
library(sf)

# Paquetes para manejo de datos raster
library(terra)

# Paquete para manejo de tablas
library(DT)

# Paquetes para graficación
library(ggplot2)
library(plotly)

# Paquete para mapas interactivos
library(leaflet)
# Lectura de una capa vectorial (GeoJSON) de provincias de Costa Rica
provincias <-
  st_read(
    "https://github.com/tpb728O-programaciongeoespacialr/2021ii/raw/main/datos/ign/delimitacion-territorial-administrativa/provincias-simplificadas_100m.geojson",
    quiet = TRUE
  )

# Transformación del CRS del objeto provincias
provincias <-
  provincias %>%
  st_transform(4326)

# Lectura de un archivo CSV con registros de presencia de felinos en Costa Rica
felidae <-
  st_read(
    "/vsicurl/https://raw.githubusercontent.com/tpb728O-programaciongeoespacialr/2021ii/main/datos/gbif/felidae.csv",
    options = c(
      "X_POSSIBLE_NAMES=decimalLongitude",
      "Y_POSSIBLE_NAMES=decimalLatitude"
    ),
    quiet = TRUE
  )

# Asignación de un CRS al objeto felidae
st_crs(felidae) <- 4326

# Lectura de una capa raster de altitud
altitud <-
  rast(
    "/vsicurl/https://raw.githubusercontent.com/tpb728O-programaciongeoespacialr/2021ii/master/datos/worldclim/altitud.tif"
  )

Tabla

felidae %>%
  st_drop_geometry() %>%
  select(scientificName, stateProvince, locality, eventDate) %>%
  datatable()

Gráficos

Estacionalidad

# Gráfico de estacionalidad
felidae %>%
  st_drop_geometry() %>%
  group_by(mes = format(as.Date(eventDate, "%Y-%m-%d"), "%m")) %>%
  summarize(suma_registros = n()) %>%
  filter(!is.na(mes))  %>%
  plot_ly(x = ~ mes,
          y = ~ suma_registros,
          type="scatter", mode="markers", fill = "tozeroy", fillcolor = "green") %>%
  layout(title = "Estacionalidad",
         xaxis = list(title = "Mes"),
         yaxis = list(title = "Cantidad de registros"))

Historial

felidae %>%
  st_drop_geometry() %>%
  group_by(anio = format(as.Date(eventDate, "%Y-%m-%d"), "%Y")) %>%
  summarize(suma_registros = n()) %>%
  filter(!is.na(anio))  %>%
  filter(anio >= 2011) %>%
  plot_ly(x = ~ anio,
          y = ~ suma_registros,
          type="bar", color = I("blue")) %>%
  layout(title = "Historial",
         xaxis = list(title = "Año"),
         yaxis = list(title = "Cantidad de registros"))

Mapa

# Conversión del objeto altitud a la clase RasterLayer
altitud_rl <- raster::raster(altitud)

# Mapa leaflet básico con capas de provincias y registros de presencia de felinos
leaflet() %>%
  addTiles() %>%
  addRasterImage(
    altitud_rl, 
    opacity = 0.6
  ) %>%    
  addPolygons(
    data = provincias,
    color = "black",
    fillColor = "transparent",
    stroke = TRUE,
    weight = 1.0,
  ) %>%
  addCircleMarkers(
    data = felidae,
    stroke = F,
    radius = 4,
    fillColor = 'orange',
    fillOpacity = 1
  )