protomapr/R/colors.R
2026-03-06 15:46:39 +11:00

147 lines
4.8 KiB
R

#' Create custom color overrides
#'
#' @description
#' Creates a list of color overrides that can be applied to a built-in flavor.
#' This is the recommended way to customize map colors while keeping the
#' proper rendering rules (zoom handling, polygon simplification, etc.).
#'
#' @param background Background color
#' @param earth Land/earth color
#' @param water Water color
#' @param park Park/green space color (also called park_a or park_b)
#' @param wood Forest/woodland color (also called wood_a or wood_b)
#' @param hospital Hospital area color
#' @param industrial Industrial area color
#' @param school School/university area color
#' @param beach Beach color
#' @param glacier Glacier color
#' @param highway Highway road color
#' @param major Major road color
#' @param minor Minor road color
#' @param city_label City label color
#' @param state_label State/region label color
#' @param country_label Country label color
#' @param ocean_label Ocean label color
#' @param ... Additional color properties
#'
#' @return A list of color overrides to pass to \code{\link{addProtomaps}}.
#'
#' @examples
#' # Simple earth and water colors
#' pmColors(earth = "#d3d3d3", water = "#1a3a5c")
#'
#' # Dark theme with custom colors
#' pmColors(
#' background = "#1a1a2e",
#' earth = "#1a1a2e",
#' water = "#16213e",
#' park = "#1f4037",
#' highway = "#4a4a6a"
#' )
#'
#' # Minimal grayscale
#' pmColors(
#' background = "#ffffff",
#' earth = "#f5f5f5",
#' water = "#e0e0e0"
#' )
#'
#' @seealso \code{\link{addProtomaps}}, \code{\link{protomaps_colors}}
#' @export
pmColors <- function(background = NULL,
earth = NULL,
water = NULL,
park = NULL,
wood = NULL,
hospital = NULL,
industrial = NULL,
school = NULL,
beach = NULL,
glacier = NULL,
highway = NULL,
major = NULL,
minor = NULL,
city_label = NULL,
state_label = NULL,
country_label = NULL,
ocean_label = NULL,
...) {
# Start with extra args, add named params, remove NULLs
colors <- c(
list(...),
list(
background = background, earth = earth, water = water,
hospital = hospital, industrial = industrial, school = school,
beach = beach, glacier = glacier, highway = highway, major = major,
city_label = city_label, state_label = state_label,
country_label = country_label, ocean_label = ocean_label,
# Expand paired colors
park_a = park, park_b = park,
wood_a = wood, wood_b = wood,
minor_a = minor, minor_b = minor
)
)
colors[!vapply(colors, is.null, logical(1))]
}
#' Protomaps Color Properties Reference
#'
#' @description
#' Reference documentation for all available color properties that can be
#' customized using \code{\link{pmColors}}.
#'
#' @section Base Colors:
#' \describe{
#' \item{\code{background}}{Map background color}
#' \item{\code{earth}}{Land/terrain color}
#' \item{\code{water}}{Water bodies color}
#' }
#'
#' @section Land Use Colors:
#' \describe{
#' \item{\code{park_a}, \code{park_b}}{Park colors (use \code{park} in pmColors)}
#' \item{\code{wood_a}, \code{wood_b}}{Forest/woodland colors (use \code{wood} in pmColors)}
#' \item{\code{hospital}}{Hospital areas}
#' \item{\code{industrial}}{Industrial zones}
#' \item{\code{school}}{Schools and universities}
#' \item{\code{beach}}{Beach areas}
#' \item{\code{zoo}}{Zoo areas}
#' \item{\code{aerodrome}}{Airport areas}
#' \item{\code{glacier}}{Glacier areas}
#' }
#'
#' @section Road Colors:
#' \describe{
#' \item{\code{highway}}{Highway/motorway color}
#' \item{\code{major}}{Major road color}
#' \item{\code{minor_a}, \code{minor_b}}{Minor road colors (use \code{minor} in pmColors)}
#' \item{\code{railway}}{Railway lines}
#' \item{\code{pier}}{Pier/dock structures}
#' }
#'
#' @section Label Colors:
#' \describe{
#' \item{\code{city_label}}{City name labels}
#' \item{\code{state_label}}{State/region labels}
#' \item{\code{country_label}}{Country name labels}
#' \item{\code{ocean_label}}{Ocean/sea labels}
#' \item{\code{roads_label_major}}{Major road name labels}
#' \item{\code{roads_label_minor}}{Minor road name labels}
#' }
#'
#' @section Landcover Colors (optional object):
#' These are specified as a nested object:
#' \describe{
#' \item{\code{grassland}}{Grassland areas}
#' \item{\code{barren}}{Barren land}
#' \item{\code{urban_area}}{Urban zones}
#' \item{\code{farmland}}{Agricultural areas}
#' \item{\code{forest}}{Forest areas}
#' \item{\code{scrub}}{Scrubland}
#' }
#'
#' @name protomaps_colors
#' @seealso \code{\link{pmColors}}, \code{\link{addProtomaps}}
NULL