|
|
|
#' opensensmapr: Get sensor data from opensensemap.org
|
|
|
|
#'
|
|
|
|
#' The opensensmapr package provides functions for
|
|
|
|
#' \itemize{
|
|
|
|
#' \item retrieval of senseBox metadata,
|
|
|
|
#' \item retrieval of senseBox measurements,
|
|
|
|
#' \item general statistics about the openSenseMap database.
|
|
|
|
#' }
|
|
|
|
#' Additionally, helper functions are provided to ease the integration with the
|
|
|
|
#' \code{\link[sf]{sf}} package for spatial analysis as well as
|
|
|
|
#' \code{\link[dplyr]{dplyr}} for general data handling.
|
|
|
|
#'
|
|
|
|
#' @section Retrieving senseBox metadata:
|
|
|
|
#' On the openSenseMap, measurements are provided by sensors which are assigned
|
|
|
|
#' to a sensor station ("senseBox").
|
|
|
|
#' A senseBox consists of a collection of sensors, a location (-history), an ID,
|
|
|
|
#' as well as metadata about its owner & placement.
|
|
|
|
#' senseBoxes can be retrieved either by ID, or as a collection with optional
|
|
|
|
#' filters on their metadata
|
|
|
|
#' \itemize{
|
|
|
|
#' \item \code{\link{osem_box}}: Get metadata about a single box by its ID.
|
|
|
|
#' \item \code{\link{osem_boxes}}: Get metadata about all boxes, optionally
|
|
|
|
#' filtered by their attributes.
|
|
|
|
#' }
|
|
|
|
#'
|
|
|
|
#' The data is returned as a \code{\link{data.frame}} with the class
|
|
|
|
#' \code{sensebox} attached.
|
|
|
|
#' To help in getting an overview of the dataset additional functions are
|
|
|
|
#' implemented:
|
|
|
|
#' \itemize{
|
|
|
|
#' \item \code{summary.sensebox()}: Aggregate the metadata about the given
|
|
|
|
#' list of senseBoxes.
|
|
|
|
#' \item \code{plot.sensebox()}: Shows the spatial distribution of the given
|
|
|
|
#' list of senseBoxes on a map. Requires additional packages!
|
|
|
|
#' \item \code{\link{osem_phenomena}}: Get a named list with
|
|
|
|
#' counts of the measured phenomena of the given list of senseBoxes.
|
|
|
|
#' }
|
|
|
|
#'
|
|
|
|
#' @section Retrieving measurements:
|
|
|
|
#' There are two ways to retrieve measurements:
|
|
|
|
#' \itemize{
|
|
|
|
#' \item \code{\link{osem_measurements_archive}}:
|
|
|
|
#' Downloads measurements for a \emph{single box} from the openSenseMap archive.
|
|
|
|
#' This function does not provide realtime data, but is suitable for long time frames.
|
|
|
|
#'
|
|
|
|
#' \item \code{\link{osem_measurements}}:
|
|
|
|
#' This function retrieves (realtime) measurements from the API. It works for a
|
|
|
|
#' \emph{single phenomenon} only, but provides various filters to select sensors by
|
|
|
|
#'
|
|
|
|
#' \itemize{
|
|
|
|
#' \item a list of senseBoxes, previously retrieved through
|
|
|
|
#' \code{\link{osem_box}} or \code{\link{osem_boxes}}.
|
|
|
|
#' \item a geographic bounding box, which can be generated with the
|
|
|
|
#' \code{\link[sf]{sf}} package.
|
|
|
|
#' \item a time frame
|
|
|
|
#' \item a exposure type of the given box
|
|
|
|
#' }
|
|
|
|
#'
|
|
|
|
#' Use this function with caution for long time frames, as the API becomes
|
|
|
|
#' quite slow is limited to 10.000 measurements per 30 day interval.
|
|
|
|
#' }
|
|
|
|
#'
|
|
|
|
#' Data is returned as \code{tibble} with the class \code{osem_measurements}.
|
|
|
|
#'
|
|
|
|
#' @section Retrieving statistics:
|
|
|
|
#' Count statistics about the database are provided with \code{\link{osem_counts}}.
|
|
|
|
#'
|
|
|
|
#' @section Using a different API instance / endpoint:
|
|
|
|
#' You can override the functions \code{osem_endpoint} and \code{osem_endpoint_archive}
|
|
|
|
#' inside the package namespace:
|
|
|
|
#'
|
|
|
|
#' \code{
|
|
|
|
#' assignInNamespace("osem_endpoint", function() "http://mynewosem.org", "opensensmapr")
|
|
|
|
#' }
|
|
|
|
#'
|
|
|
|
#' @section Integration with other packages:
|
|
|
|
#' The package aims to be compatible with the tidyverse.
|
|
|
|
#' Helpers are implemented to ease the further usage of the retrieved data:
|
|
|
|
#'
|
|
|
|
#' \itemize{
|
|
|
|
#' \item \code{\link{osem_as_sensebox}} & \code{\link{osem_as_measurements}}:
|
|
|
|
#' Transform a foreign object to a sensebox data.frame or osem_measurements
|
|
|
|
#' by attaching the required classes and attributes.
|
|
|
|
#' \item \code{\link{st_as_sf.sensebox}} & \code{\link{st_as_sf.osem_measurements}}:
|
|
|
|
#' Transform the senseBoxes or measurements into an \code{\link[sf]{sf}}
|
|
|
|
#' compatible format for spatial analysis.
|
|
|
|
#' \item \code{filter.sensebox()} & \code{mutate.sensebox()}: for use with
|
|
|
|
#' \code{\link{dplyr}}.
|
|
|
|
#' }
|
|
|
|
#'
|
|
|
|
#' @seealso Report bugs at \url{https://github.com/sensebox/opensensmapR/issues}
|
|
|
|
#' @seealso openSenseMap API: \url{https://api.opensensemap.org/}
|
|
|
|
#' @seealso official openSenseMap API documentation: \url{https://docs.opensensemap.org/}
|
|
|
|
#' @docType package
|
|
|
|
#' @name opensensmapr
|
|
|
|
'_PACKAGE'
|
|
|
|
|
|
|
|
#' @importFrom graphics plot legend par
|
|
|
|
#' @importFrom magrittr %>%
|
|
|
|
`%>%` = magrittr::`%>%`
|
|
|
|
|
|
|
|
# just to make R CMD check happy, due to NSE (dplyr) functions
|
|
|
|
globalVariables(c(
|
|
|
|
'createdAt',
|
|
|
|
'lastMeasurement',
|
|
|
|
'sensorType',
|
|
|
|
'title',
|
|
|
|
'unit',
|
|
|
|
'value',
|
|
|
|
'X_id',
|
|
|
|
'.'
|
|
|
|
))
|