Published April 20, 2017 | https://doi.org/10.59350/c9n1a-1tp49

Random GeoJSON and WKT with randgeo

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 point
  • geo_polygon - random GeoJSON polygon
  • wkt_point - random WKT point
  • wkt_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))
visualize shapes with the lawn package for R

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()
visualize shapes with the lawn package for R

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)))
visualize shapes with the lawn package for R

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