Random GeoJSON and WKT with randgeo
Creators
randgeo generates random points and shapes in GeoJSON and WKT formats foruse in examples, teaching, or statistical applications.
Points and shapes are generated in the long/lat coordinate system and withappropriate spherical geometry; random points are distributed evenly acrossthe globe, and random shapes are sized according to a maximum great-circledistance from the center of the shape.
randgeo was adapted from https://github.com/tmcw/geojson-random to havea pure R implementation without any dependencies as well as appropriategeometry. Data generated by randgeo may be processed or displayed of withpackages such as sf,wicket,geojson,wellknown,geojsonio, orlawn.
Package API:
rg_position
- random position (lon, lat)geo_point
- random GeoJSON pointgeo_polygon
- random GeoJSON polygonwkt_point
- random WKT pointwkt_polygon
- random WKT polygon
🔗Setup
Install randgeo
- and we'll need a few other packages for examples below.
install.packages("randgeo")install.packages(c('leaflet', 'lawn'))
library(randgeo)
Functions that start with geo
are for creating GeoJSON data in JSON format.If you want to create an R list or data.frame, you can use jsonlite::fromJSON
.
🔗Random
Evenly distributed across the sphere. The bbox
option allowsyou to limit points to within long/lat bounds.
geo_point()#> $type#> [1] "FeatureCollection"#>#> $features#> $features[[1]]#> $features[[1]]$type#> [1] "Feature"#>#> $features[[1]]$geometry#> $features[[1]]$geometry$type#> [1] "Point"#>#> $features[[1]]$geometry$coordinates#> [1] 105.95999 -46.58477#>#>#> $features[[1]]$properties#> NULL#>#>#>#> attr(,"class")#> [1] "geo_list"
Centered on a random point, with default maximum size
geo_polygon()#> $type#> [1] "FeatureCollection"#>#> $features#> $features[[1]]#> $features[[1]]$type#> [1] "Feature"#>#> $features[[1]]$geometry#> $features[[1]]$geometry$type#> [1] "Polygon"#>#> $features[[1]]$geometry$coordinates#> $features[[1]]$geometry$coordinates[[1]]#> $features[[1]]$geometry$coordinates[[1]][[1]]#> [1] -138.49434 -25.11895#>#> $features[[1]]$geometry$coordinates[[1]][[2]]#> [1] -145.95566 -28.17623#>#> $features[[1]]$geometry$coordinates[[1]][[3]]#> [1] -145.87817 -28.74364#>#> $features[[1]]$geometry$coordinates[[1]][[4]]#> [1] -146.61325 -28.59748#>#> $features[[1]]$geometry$coordinates[[1]][[5]]#> [1] -139.18167 -31.07703#>#> $features[[1]]$geometry$coordinates[[1]][[6]]#> [1] -140.88748 -31.24708#>#> $features[[1]]$geometry$coordinates[[1]][[7]]#> [1] -143.50402 -33.93551#>#> $features[[1]]$geometry$coordinates[[1]][[8]]#> [1] -146.48114 -30.43185#>#> $features[[1]]$geometry$coordinates[[1]][[9]]#> [1] -144.68315 -35.45465#>#> $features[[1]]$geometry$coordinates[[1]][[10]]#> [1] -157.58084 -24.52897#>#> $features[[1]]$geometry$coordinates[[1]][[11]]#> [1] -138.49434 -25.11895#>#>#>#>#> $features[[1]]$properties#> NULL#>#>#>#> attr(,"class")#> [1] "geo_list"
Visualize your shapes with lawn.
lawn::view(jsonlite::toJSON(unclass(geo_polygon(count = 4)), auto_unbox = TRUE))

Shapes visualized in R with lawn
🔗WKT
Functions prefixed with wkt
create random Well-Known Text (WKT) data. These functionswrap the GeoJSON versions, but then convert the data to WKT.
Random point:
wkt_point()#> [1] "POINT (179.8795330 -29.1106238)"
Random polygon:
wkt_polygon()#> [1] "POLYGON ((-60.0870329 -12.9315478, -61.5073816 -25.3204334, -62.6987366 -24.5766272, -64.1853669 -24.0497260, -67.7152546 -27.4752321, -68.4190340 -26.9510818, -67.6018452 -21.5489551, -64.3083560 -21.6772242, -63.1471630 -21.9415438, -64.1137279 -14.2398013, -60.0870329 -12.9315478))"
🔗Use case
Example of geospatial data manipulation, using randgeo
, leaflet
andlawn
.
Steps:
- Generate random overlapping polygons
- Calculate a single polygon from overlapping polygons
- Map polygon
- Generate random locaitons (points)
- Clip locations to the polygon
- Overlay locations (more random points) on the polygon
library(randgeo)library(lawn)library(leaflet)
generate random data
set.seed(5)polys <- randgeo::geo_polygon(count = 2, num_vertices = 4, bbox = c(-120, 40, -100, 50))
Get intersection of polygons
polysinter <- lawn::lawn_intersect(polys$features[[1]], polys$features[[2]])
Map polygons
polysinter %>% lawn::view()

Shapes visualized in R with lawn
Generate random points - clip points to polygon
pts <- randgeo::geo_point(count = 500, bbox = c(-120, 40, -100, 50))pts <- lawn::lawn_within( points = lawn_featurecollection(pts), polygons = lawn_featurecollection(polysinter))
Draw polygon + points on map
polysinter %>% view() %>% addGeoJSON(geojson = jsonlite::toJSON(unclass(pts)))

Shapes visualized in R with lawn
🔗Feedback
Let us know what you think! randgeo
doesn't have any revdep's on CRAN yet, butis being used in one package on GitHub.
Additional details
Description
randgeo generates random points and shapes in GeoJSON and WKT formats foruse in examples, teaching, or statistical applications. Points and shapes are generated in the long/lat coordinate system and withappropriate spherical geometry; random points are distributed evenly acrossthe globe, and random shapes are sized according to a maximum great-circledistance from the center of the shape.
Identifiers
- UUID
- 7e299fc6-3d3b-4ef5-b2ff-6e0e196e5084
- GUID
- https://doi.org/10.59350/c9n1a-1tp49
- URL
- https://ropensci.org/blog/2017/04/20/randgeo/
Dates
- Issued
-
2017-04-20T00:00:00Z
- Updated
-
2025-02-13T12:42:17Z