geojson package classes

Scott Chamberlain and Jeroen Ooms

2023-07-25

The geojson package has a function to create a GeoJSON class matching all the GeoJSON data types:

The following are some examples of their usage.

library("geojson")

point

(x <- point('{ "type": "Point", "coordinates": [100.0, 0.0] }'))
#> <Point> 
#>   coordinates:  [100,0]
class(x)
#> [1] "geopoint" "geojson"
attributes(x)
#> $class
#> [1] "geopoint" "geojson" 
#> 
#> $coords
#> [1] "[100,0]"

multipoint

multipoint('{"type": "MultiPoint", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ] }')
#> <MultiPoint> 
#>   coordinates:  [[100,0],[101,1]]

linestring

linestring('{ "type": "LineString", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ] }')
#> <LineString> 
#>   coordinates:  [[100,0],[101,1]]

multilinestring

str <- '{ "type": "MultiLineString",
  "coordinates": [ [ [100.0, 0.0], [101.0, 1.0] ], [ [102.0, 2.0], [103.0, 3.0] ] ] }'
multilinestring(str)
#> <MultiLineString> 
#>   no. lines:  2 
#>   no. nodes / line:  2, 2 
#>   coordinates:  [[[100,0],[101,1]],[[102,2],[103,3]]]

polygon

str <- '{ "type": "Polygon",
 "coordinates": [
   [ [100.0, 0.0], [100.0, 1.0], [101.0, 1.0], [101.0, 0.0], [100.0, 0.0] ]
   ]
}'
polygon(str)
#> <Polygon> 
#>   no. lines:  1 
#>   no. holes:  0 
#>   no. nodes / line:  5 
#>   coordinates:  [[[100,0],[100,1],[101,1],[101,0],[100,0]]]

multipolygon

str <- '{ "type": "MultiPolygon",
  "coordinates": [
   [[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]]],
   [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]],
   [[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]]]
  ]
}'
multipolygon(str)
#> <MultiPolygon> 
#>   no. polygons:  2 
#>   coordinates:  [[[[102,2],[103,2],[103,3],[102,3],[102,2]]],[[[100,0],[101,0],[101,1] ...

feature

From geopoint class

pt <- point('{ "type": "Point", "coordinates": [100.0, 0.0] }')
feature(pt)
#> <Feature> 
#>   type:  Point 
#>   coordinates:  [100,0]

From character string

str <- "{ \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [100.0, 0.0] } }"
feature(str)
#> <Feature> 
#>   type:  Point 
#>   coordinates:  [100,0]

featurecollection

From feature

pt %>% feature() %>% featurecollection()
#> <FeatureCollection> 
#>   type:  FeatureCollection 
#>   no. features:  1 
#>   features (1st 5):  Point

From string

file <- system.file("examples", 'featurecollection1.geojson', package = "geojson")
str <- paste0(readLines(file), collapse = " ")
featurecollection(str)
#> <FeatureCollection> 
#>   type:  FeatureCollection 
#>   no. features:  1 
#>   features (1st 5):  GeometryCollection

geometrycollection

str <- '{
 "type": "GeometryCollection",
 "geometries": [
   {
     "type": "Point",
     "coordinates": [100.0, 0.0]
   },
   {
     "type": "LineString",
     "coordinates": [ [101.0, 0.0], [102.0, 1.0] ]
   }
  ]
}'
geometrycollection(str)
#> <GeometryCollection> 
#>   geometries (n): 2 
#>   geometries (geometry / length):
#>     Point / 2
#>     LineString / 2