library("knitr") hook_output <- knitr::knit_hooks$get("output") knitr::knit_hooks$set(output = function(x, options) { lines <- options$output.lines if (is.null(lines)) { return(hook_output(x, options)) # pass to default hook } x <- unlist(strsplit(x, "\n")) more <- "..." if (length(lines)==1) { # first n lines if (length(x) > lines) { # truncate the output, but add .... x <- c(head(x, lines), more) } } else { x <- c(if (abs(lines[1])>1) more else NULL, x[lines], if (length(x)>lines[abs(length(lines))]) more else NULL ) } # paste these lines together x <- paste(c(x, ""), collapse = "\n") hook_output(x, options) }) knitr::opts_chunk$set( comment = "#>", collapse = TRUE, warning = FALSE, message = FALSE )
lawn
is an R wrapper for the Javascript library turf.js for advanced geospatial analysis. In addition, we have a few functions to interface with the geojson-random Javascript library.
lawn
includes traditional spatial operations, helper functions for creating GeoJSON data, and data classification and statistics tools.
There is an additional helper function (see view()
) in this package to help visualize data with interactive maps via the leaflet
package (https://github.com/rstudio/leaflet). Note that leaflet
is not required to install lawn
- it's in Suggests, not Imports or Depends.
If installing leaflet
devtools::install_github("rstudio/leaflet")
Stable lawn
version from CRAN
install.packages("lawn")
Or, the development version from Github
devtools::install_github("ropensci/lawn")
library("lawn")
Point
lawn_point(c(-74.5, 40))
Polygon
rings <- list(list( c(-2.275543, 53.464547), c(-2.275543, 53.489271), c(-2.215118, 53.489271), c(-2.215118, 53.464547), c(-2.275543, 53.464547) )) lawn_polygon(rings)
Count number of points within polygons
lawn_count(polygons = lawn_data$polygons_count, points = lawn_data$points_count, "population")
Average value of a field for a set of points within a set of polygons
lawn_average(polygons = lawn_data$polygons_average, points = lawn_data$points_average, in_field = 'population')
Define two points
from <- '{ "type": "Feature", "properties": {}, "geometry": { "type": "Point", "coordinates": [-75.343, 39.984] } }' to <- '{ "type": "Feature", "properties": {}, "geometry": { "type": "Point", "coordinates": [-75.534, 39.123] } }'
Calculate distance, default units is kilometers (default output: km
)
lawn_distance(from, to)
lawn_random(n = 2)
lawn_random(n = 5)
Positions
gr_position()
Points
gr_point(2)
Polygons
gr_polygon(n = 1, vertices = 5, max_radial_length = 5)
dat <- lawn_data$points_average lawn_sample(dat, 1)
lawn_sample(dat, 2)
lawn_sample(dat, 3)
lawn_extent(lawn_data$points_average)
lawn_within(lawn_data$points_within, lawn_data$polygons_within)
dat <- '{ "type": "Feature", "properties": {}, "geometry": { "type": "Polygon", "coordinates": [[ [-112.072391,46.586591], [-112.072391,46.61761], [-112.028102,46.61761], [-112.028102,46.586591], [-112.072391,46.586591] ]] } }' lawn_buffer(dat, 1, "miles")
For most functions, you can lint your input geojson data to make sure it is proper geojson. We use
the javascript library geojsonhint. See the lint
parameter where available.
Good GeoJSON
dat <- '{ "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": { "population": 200 }, "geometry": { "type": "Point", "coordinates": [10.724029, 59.926807] } }, { "type": "Feature", "properties": { "population": 600 }, "geometry": { "type": "Point", "coordinates": [10.715789, 59.904778] } } ] }' lawn_extent(dat)
Bad GeoJSON
dat <- '{ "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": { "population": 200 }, "geometry": { "type": "Point" } }, { "type": "Feature", "properties": { "population": 600 }, "geometry": { "type": "Point", "coordinates": [10.715789, 59.904778] } } ] }' lawn_extent(dat, lint = TRUE) #> Error: Line 1 - "coordinates" member required
lawn
includes a tiny helper function for visualizing geojson.
view(lawn_data$points_average)
Here, we sample at random two points from the same dataset just viewed.
lawn_sample(lawn_data$points_average, 2) %>% view()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.