lawn
is an R wrapper for the Javascript library turf.js. In addition, we have a few functions to interface with the geojson-random and geojsonhint Javascript libraries, for generating random GeoJSON objects and linting GeoJSON, respectively.
The latest release of lawn
is available from CRAN. To install:
install.packages("lawn")
To install the development version:
install.packages("devtools")
devtools::install_github("ropensci/lawn")
library("lawn")
Count number of points within polygons
lawn_count(lawn_data$polygons_count, lawn_data$points_count, 'population')
#> <FeatureCollection>
#> Bounding box: -112.1 46.6 -112.0 46.6
#> No. features: 2
#> No. points: 20
#> Properties:
#> values count
#> 1 200, 600 2
#> 2 0
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, 'population')
#> <FeatureCollection>
#> Bounding box: 10.7 59.9 10.9 59.9
#> No. features: 2
#> No. points: 20
#> Properties:
#> values average
#> 1 200, 600, 100 300
#> 2 200, 300 250
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 (km
)
lawn_distance(from, to)
#> [1] 97.15958
lawn_random(n = 2)
#> <FeatureCollection>
#> Bounding box: -103.8 -37.1 2.6 -36.2
#> No. features: 2
#> No. points: 4
#> Properties: NULL
lawn_random(n = 5)
#> <FeatureCollection>
#> Bounding box: -128.1 -78.3 113.0 78.7
#> No. features: 5
#> No. points: 10
#> Properties: NULL
Points
gr_point(2)
#> <FeatureCollection>
#> Bounding box: -44.4 -78.3 113.9 40.9
#> No. features: 2
#> No. points: 4
#> Properties: NULL
Positions
gr_position()
#> [1] -48.32684 71.47329
Polygons
gr_polygon(n = 1, vertices = 5, max_radial_length = 5)
#> <FeatureCollection>
#> Bounding box: -35.9 -70.6 -31.4 -68.0
#> No. features: 1
#> No. points: 12
#> Properties: NULL
dat <- lawn_data$points_average
lawn_sample(dat, 1)
#> <FeatureCollection>
#> Bounding box: 10.7 59.9 10.7 59.9
#> No. features: 1
#> No. points: 2
#> Properties:
#> population
#> 1 100
lawn_sample(dat, 2)
#> <FeatureCollection>
#> Bounding box: 10.7 59.9 10.8 59.9
#> No. features: 2
#> No. points: 4
#> Properties:
#> population
#> 1 600
#> 2 300
lawn_sample(dat, 3)
#> <FeatureCollection>
#> Bounding box: 10.7 59.9 10.8 59.9
#> No. features: 3
#> No. points: 6
#> Properties:
#> population
#> 1 300
#> 2 200
#> 3 600
lawn_extent(lawn_data$points_average)
#> [1] 10.71579 59.90478 10.80643 59.93162
lawn_within(lawn_data$points_within, lawn_data$polygons_within)
#> <FeatureCollection>
#> Bounding box: -46.6 -23.6 -46.6 -23.6
#> No. features: 2
#> No. points: 4
#> Properties: NULL
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")
#> <Feature>
#> Type: Polygon
#> Bounding box: -112.1 46.6 -112.0 46.6
#> No. points: 74
#> Properties: NULL
lawn
includes a tiny helper function for visualizing geojson.
view(lawn_data$points_average)
Or during process of manipulating geojson, view at mostly any time.
Here, we sample at random two points from the same dataset just viewed.
lawn_sample(lawn_data$points_average, 2) %>% view()
lawn
in R doing citation(package = 'lawn')
Portions of this code have been contributed by Jeff Hollister, US EPA. As such, that code is subjec to the following disclaimer: https://www.epa.gov/home/github-contribution-disclaimer