Learn R Programming

osmplotr (version 0.2.0)

add_osm_groups: add_osm_groups

Description

Plots spatially distinct groups of osm objects in different colours.

Usage

add_osm_groups(map, obj, groups, cols, bg, make_hull = FALSE, boundary = -1,
  size, shape, borderWidth, colmat = FALSE, rotate)

Arguments

map
A ggplot2 object to which the grouped objects are to be added
obj
An sp SPDF or SLDF (list of polygons or lines) returned by extract_osm_objects()
groups
A list of spatial points objects, each of which contains the coordinates of points defining one group
cols
Either a vector of >= 4 colours passed to colour_mat() (if 'colmat=T') to arrange as a 2-D map of visually distinct colours (default uses rainbow colours), or (if 'colmat=F'), a vector of the same length as groups specifying individual colours for each.
bg
If given, then any objects not within groups are coloured this colour, otherwise (if not given) they are assigned to nearest group and coloured accordingly. ('boundary' has no effect in this latter case.)
make_hull
Either a single boolean value or a vector of same length as groups specifying whether convex hulls should be constructed around all groups (TRUE), or whether the group already defines a hull (convex or otherwise; FALSE).
boundary
(negative, 0, positive) values define whether the boundary of groups should (exclude, bisect, include) objects which straddle the precise boundary. (Has no effect if 'bg' is given)
size
Size argument passed to ggplot2 (polygon, path, point) functions: determines width of lines for (polygon, line), and sizes of points. Respective defaults are (0, 0.5, 0.5).
shape
Shape of points or lines (the latter passed as 'linetype'): see ?ggplot2::shape
borderWidth
If given, draws convex hull borders around entire groups in same colours as groups (try values around 1-2)
colmat
If TRUE generates colours according to colour_mat(), otherwise the colours of groups are specified directly by the vector of cols.
rotate
Passed to colour_mat() to rotate colours by the specified number of degrees clockwise.

Value

  • Modified version of map with groups added

Note

Any group that is entirely contained within any other group is assumed to represent a hole, such that points internal to the smaller contained group are *excluded* from the group, while those outside the smaller yet inside the bigger group are included.

See Also

colour_mat.

Examples

Run this code
bbox <- get_bbox (c (-0.13, 51.5, -0.11, 51.52))
# Download data using 'extract_osm_objects'
dat_HP <- extract_osm_objects (key='highway', value='primary', bbox=bbox)
dat_T <- extract_osm_objects (key='tree', bbox=bbox)
dat_BNR <- extract_osm_objects (key='building', value='!residential',
bbox=bbox)
# These data are also provided in
dat_HP <- london$dat_HP
dat_T <- london$dat_T
dat_BNR <- london$dat_BNR

# Define a function to easily generate a basemap
bmap <- function ()
{
    map <- plot_osm_basemap (bbox=bbox, bg="gray20")
    map <- add_osm_objects (map, dat_HP, col="gray70", size=1)
    add_osm_objects (map, dat_T, col="green")
}

# Highlight a single region using all objects lying partially inside the
# boundary (via the boundary=1 argument)
pts <- sp::SpatialPoints (cbind (c (-0.115, -0.125, -0.125, -0.115),
                                 c (51.505, 51.505, 51.515, 51.515)))
dat_H <- extract_osm_objects (key='highway', bbox=bbox) # all highways
map <- bmap ()
map <- add_osm_groups (map, dat_BNR, groups=pts, cols="gray90",
                       bg="gray40", boundary=1)
map <- add_osm_groups (map, dat_H, groups=pts, cols="gray80",
                       bg="gray30", boundary=1)
print (map)

# Generate random points to serve as group centres
set.seed (2)
ngroups <- 6
x <- bbox [1,1] + runif (ngroups) * diff (bbox [1,])
y <- bbox [2,1] + runif (ngroups) * diff (bbox [2,])
groups <- cbind (x, y)
groups <- apply (groups, 1, function (i) 
              sp::SpatialPoints (matrix (i, nrow=1, ncol=2)))
# plot a basemap and add groups
map <- bmap ()
cols <- rainbow (length (groups))
map <- add_osm_groups (map, obj=london$dat_BNR, group=groups, cols=cols)
cols <- adjust_colours (cols, -0.2)
map <- add_osm_groups (map, obj=london$dat_H, groups=groups, cols=cols)
print (map)

# Highlight convex hulls containing groups:
map <- bmap ()
map <- add_osm_groups (map, obj=london$dat_BNR, group=groups, cols=cols,
                       borderWidth=2)
print (map)

Run the code above in your browser using DataLab