106 lines
3.8 KiB
R
106 lines
3.8 KiB
R
#' Create a Paint Rule
|
|
#'
|
|
#' @description
|
|
#' Creates a paint rule that specifies how to render features from a
|
|
#' particular data layer. Paint rules control the visual appearance of
|
|
#' polygon, line, and point features.
|
|
#'
|
|
#' @param dataLayer Character. The name of the data layer in the vector
|
|
#' tile source (e.g., "water", "earth", "roads").
|
|
#' @param symbolizer A symbolizer object created with one of the symbolizer
|
|
#' functions (e.g., \code{\link{pmPolygonSymbolizer}},
|
|
#' \code{\link{pmLineSymbolizer}}).
|
|
#' @param minzoom Numeric. Minimum zoom level at which this rule applies.
|
|
#' Default is NULL (applies at all zoom levels).
|
|
#' @param maxzoom Numeric. Maximum zoom level at which this rule applies.
|
|
#' Default is NULL (applies at all zoom levels).
|
|
#' @param filter Character. A JavaScript expression string that filters
|
|
#' features. The expression has access to \code{zoom} and \code{feature}
|
|
#' variables. Default is NULL (no filter).
|
|
#'
|
|
#' @return A list representing the paint rule configuration.
|
|
#'
|
|
#' @examples
|
|
#' # Render water polygons in blue
|
|
#' pmPaintRule("water", pmPolygonSymbolizer(fill = "steelblue"))
|
|
#'
|
|
#' # Render roads with zoom-dependent visibility
|
|
#' pmPaintRule("roads", pmLineSymbolizer(color = "gray", width = 2),
|
|
#' minzoom = 10)
|
|
#'
|
|
#' # Filter to only show highways
|
|
#' pmPaintRule("roads",
|
|
#' pmLineSymbolizer(color = "orange", width = 4),
|
|
#' filter = "feature.props.kind === 'highway'")
|
|
#'
|
|
#' @export
|
|
pmPaintRule <- function(dataLayer,
|
|
symbolizer,
|
|
minzoom = NULL,
|
|
maxzoom = NULL,
|
|
filter = NULL) {
|
|
rule <- list(
|
|
dataLayer = dataLayer,
|
|
symbolizer = symbolizer
|
|
)
|
|
|
|
if (!is.null(minzoom)) rule$minzoom <- minzoom
|
|
if (!is.null(maxzoom)) rule$maxzoom <- maxzoom
|
|
if (!is.null(filter)) rule$filter <- filter
|
|
|
|
rule
|
|
}
|
|
|
|
|
|
#' Create a Label Rule
|
|
#'
|
|
#' @description
|
|
#' Creates a label rule that specifies how to render text labels for
|
|
#' features from a particular data layer. Label rules control text
|
|
#' placement and styling, with automatic collision detection.
|
|
#'
|
|
#' @param dataLayer Character. The name of the data layer in the vector
|
|
#' tile source (e.g., "places", "roads").
|
|
#' @param symbolizer A text symbolizer object created with one of
|
|
#' \code{\link{pmTextSymbolizer}}, \code{\link{pmCenteredTextSymbolizer}},
|
|
#' \code{\link{pmLineLabelSymbolizer}}, or \code{\link{pmShieldSymbolizer}}.
|
|
#' @param minzoom Numeric. Minimum zoom level at which this rule applies.
|
|
#' Default is NULL (applies at all zoom levels).
|
|
#' @param maxzoom Numeric. Maximum zoom level at which this rule applies.
|
|
#' Default is NULL (applies at all zoom levels).
|
|
#' @param filter Character. A JavaScript expression string that filters
|
|
#' features. Default is NULL (no filter).
|
|
#'
|
|
#' @return A list representing the label rule configuration.
|
|
#'
|
|
#' @examples
|
|
#' # Label cities
|
|
#' pmLabelRule("places",
|
|
#' pmCenteredTextSymbolizer(font = "14px Arial",
|
|
#' fill = "black",
|
|
#' stroke = "white",
|
|
#' width = 2))
|
|
#'
|
|
#' # Label streets along their paths
|
|
#' pmLabelRule("roads",
|
|
#' pmLineLabelSymbolizer(font = "11px Arial",
|
|
#' fill = "#333"),
|
|
#' minzoom = 14)
|
|
#'
|
|
#' @export
|
|
pmLabelRule <- function(dataLayer,
|
|
symbolizer,
|
|
minzoom = NULL,
|
|
maxzoom = NULL,
|
|
filter = NULL) {
|
|
rule <- list(
|
|
dataLayer = dataLayer,
|
|
symbolizer = symbolizer
|
|
)
|
|
|
|
if (!is.null(minzoom)) rule$minzoom <- minzoom
|
|
if (!is.null(maxzoom)) rule$maxzoom <- maxzoom
|
|
if (!is.null(filter)) rule$filter <- filter
|
|
|
|
rule
|
|
}
|