Convert Data from and to 'GeoJSON' or 'TopoJSON'

Convert data to 'GeoJSON' or 'TopoJSON' from various R classes, including vectors, lists, data frames, shape files, and spatial classes. geojsonio does not aim to replace packages like 'sp', 'rgdal', 'rgeos', but rather aims to be a high level client to simplify conversions of data from and to 'GeoJSON' and 'TopoJSON'.


Convert various data formats to geoJSON or topoJSON

This package is a utility to convert geographic data to geojson and topojson formats. Nothing else. We hope to do this one job very well, and handle all reasonable use cases.

Functions in this package are organized first around what you're working with or want to get, geojson or topojson, then convert to or read from various formats:

  • geojson_list() - convert to geojson as R list format
  • geojson_json() - convert to geojson as json
  • geojson_sp() - convert output of geojson_list() or geojson_json() to spatial objects
  • geojson_read()/topojson_read() - read a geojson/topojson file from file path or URL
  • geojson_write() - write a geojson file locally (topojson coming later)

Each of the above functions have methods for various objects/classes, including numeric, data.frame, list, SpatialPolygons, SpatialLines, SpatialPoints, etc.

Additional functions:

  • map_gist() - push up a geojson or topojson file as a GitHub gist (renders as an interactive map)

  • map_leaf() - create a local interactive map using the leaflet package

  • GeoJSON - spec

  • GeoJSON lint

  • TopoJSON - spec

A note about installing rgdal and rgeos - these two packages are built on top of C libraries, and their installation often causes trouble for Mac and Linux users because no binaries are provided on CRAN for those platforms. Other dependencies in geojsonio should install easily automatically when you install geojsonio. Change to the version of rgdal and GDAL you have):

Mac

Install GDAL on the command line first, e.g., usingn homebrew

brew install gdal

Then install rgdal and rgeos

install.packages("rgdal", type = "source", configure.args = "--with-gdal-config=/Library/Frameworks/GDAL.framework/Versions/1.11/unix/bin/gdal-config --with-proj-include=/Library/Frameworks/PROJ.framework/unix/include --with-proj-lib=/Library/Frameworks/PROJ.framework/unix/lib")
install.packages("rgeos", type = "source")

Linux

Get deps first

sudo apt-get install libgdal1-dev libgdal-dev libgeos-c1 libproj-dev

Then install rgdal and rgeos

install.packages("rgdal", type = "source")
install.packages("rgeos", type = "source")

Install geojsonio

Stable version from CRAN

install.packages("geojsonio")

Or development version from GitHub

install.packages("devtools")
devtools::install_github("ropensci/geojsonio")
library("geojsonio")

From a numeric vector of length 2, as json or list

geojson_json(c(32.45, -99.74))
#> {"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[32.45,-99.74]},"properties":{}}]}
geojson_list(c(32.45, -99.74))
#> $type
#> [1] "FeatureCollection"
#> 
#> $features
#> $features[[1]]
#> $features[[1]]$type
#> [1] "Feature"
#> 
#> $features[[1]]$geometry
#> $features[[1]]$geometry$type
...

From a data.frame

library('maps')
data(us.cities)
geojson_json(us.cities[1:2, ], lat = 'lat', lon = 'long')
#> {"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-99.74,32.45]},"properties":{"name":"Abilene TX","country.etc":"TX","pop":"113888","capital":"0"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-81.52,41.08]},"properties":{"name":"Akron OH","country.etc":"OH","pop":"206634","capital":"0"}}]}
geojson_list(us.cities[1:2, ], lat = 'lat', lon = 'long')
#> $type
#> [1] "FeatureCollection"
#> 
#> $features
#> $features[[1]]
#> $features[[1]]$type
#> [1] "Feature"
#> 
#> $features[[1]]$geometry
#> $features[[1]]$geometry$type
...

From SpatialPolygons class

library('sp')
poly1 <- Polygons(list(Polygon(cbind(c(-100, -90, -85, -100),
  c(40, 50, 45, 40)))), "1")
poly2 <- Polygons(list(Polygon(cbind(c(-90, -80, -75, -90),
  c(30, 40, 35, 30)))), "2")
sp_poly <- SpatialPolygons(list(poly1, poly2), 1:2)

to json

geojson_json(sp_poly)
#> {
#> "type": "FeatureCollection",
#>                                                                                 
#> "features": [
#> { "type": "Feature", "id": 1, "properties": { "dummy": 0.000000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -100.0, 40.0 ], [ -90.0, 50.0 ], [ -85.0, 45.0 ], [ -100.0, 40.0 ] ] ] } },
#> { "type": "Feature", "id": 2, "properties": { "dummy": 0.000000 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -90.0, 30.0 ], [ -80.0, 40.0 ], [ -75.0, 35.0 ], [ -90.0, 30.0 ] ] ] } }
#> ]
#> }
#> 

to list

geojson_list(sp_poly)$features[[1]]
#> $type
#> [1] "Feature"
#> 
#> $id
#> [1] 1
#> 
#> $properties
#> $properties$dummy
#> [1] 0
#> 
...

geo_list + geo_list

vec <- c(-99.74, 32.45)
a <- geojson_list(vec)
vecs <- list(c(100.0, 0.0), c(101.0, 0.0), c(100.0, 0.0))
b <- geojson_list(vecs, geometry = "polygon")
a + b
#> $type
#> [1] "FeatureCollection"
#> 
#> $features
#> $features[[1]]
#> $features[[1]]$type
#> [1] "Feature"
#> 
#> $features[[1]]$geometry
#> $features[[1]]$geometry$type
...

json + json

c <- geojson_json(c(-99.74, 32.45))
vecs <- list(c(100.0, 0.0), c(101.0, 0.0), c(101.0, 1.0), c(100.0, 1.0), c(100.0, 0.0))
d <- geojson_json(vecs, geometry = "polygon")
c + d
#> {"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-99.74,32.45]},"properties":{}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[100,0],[101,0],[101,1],[100,1],[100,0]]]},"properties":[]}]}
library('maps')
data(us.cities)
geojson_write(us.cities[1:2, ], lat = 'lat', lon = 'long')
#> <geojson>
#>   Path:       myfile.geojson
#>   From class: data.frame
file <- system.file("examples", "california.geojson", package = "geojsonio")
out <- geojson_read(file)

TopoJSON

library("sp")
url <- "https://raw.githubusercontent.com/shawnbot/d3-cartogram/master/data/us-states.topojson"
out <- topojson_read(url, verbose = FALSE)
plot(out)

Using data from https://github.com/glynnbird/usstatesgeojson

Get some geojson

library('httr')
res <- GET('https://api.github.com/repos/glynnbird/usstatesgeojson/contents')
st_names <- Filter(function(x) grepl("\\.geojson", x), sapply(content(res), "[[", "name"))
base <- 'https://raw.githubusercontent.com/glynnbird/usstatesgeojson/master/'
st_files <- paste0(base, st_names)

Make a faceted plot

library('ggplot2')
library('plyr')
st_use <- st_files[7:13]
geo <- lapply(st_use, geojson_read, method = "local", what = "sp")
df <- ldply(setNames(lapply(geo, fortify), gsub("\\.geojson", "", st_names[7:13])))
ggplot(df, aes(long, lat, group = group)) +
  geom_polygon() +
  facet_wrap(~.id, scales = "free")

Okay, so the maps are not quite right (stretched to fit each panel), but you get the idea.

  • Please report any issues or bugs.
  • License: MIT
  • Get citation information for geojsonio in R doing citation(package = 'geojsonio')
  • Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

News

geojsonio 0.2.0

  • Major performance improvement for geojson_json() - moved to reading in json with readr::read_file() (#85) thanks @javrucebo !
  • Now requiring explicit versions of some package dependencies
  • Removed the startup message
  • Changed file_to_geojson() to use httr::write_disk() instead of download.file() (#83) thanks @patperu
  • The two linting functions in this package, lint() and validate() are now deprecated, and will be defunct in the next version of this package. See the new package geojsonlint on CRAN for linting geojson functionality (#82)

geojsonio 0.1.8

  • New method geojson_sp.json() added to geojson_sp() to handle json class inputs
  • Added encodin="UTF-8" to httr::content() calls
  • geojson_write() didn't overwrite existing files despite saying so. New parameter added to the function overwrite to specify whether to overwrite a function or not, which defaults to TRUE (#81) thanks @Robinlovelace !

geojsonio 0.1.6

  • New function geojson_sp() to convert output of geojson_list() or geojson_json() to spatial classes (e.g., SpatialPointsDataFrame) (#71)
  • Startup message added to notify users to ideally update to rgdal > v1.1-1 given fix to make writing multipolygon objects to geojson correct (#69)
  • Filled out test suite more (#46)
  • Fix to lint() function, due to bug in passing data to the Javascript layer (#73)
  • Fixes to as.json() (#76)

geojsonio 0.1.4

  • New function map_leaf() uses the leaflet package to make maps, with S3 methods for most spatial classes as well as most R classes, including data.frame's, lists, vectors, file inputs, and more (#48)
  • geojson_read() now optionally can give back a spatial class object, just a convenience in case you want to not get back geojson, but a spatial class (#60)
  • Now that leaflet R package is on CRAN, put back in examples using it to make maps (#49)
  • Added a linter for list inputs comined with geometry="polygon" to all geojson_*() functions that have .list methods. This checks to make sure inputs have the same first and last coordinate pairs to close the polygon (#34)
  • Importing all non-base R funtions, including from methods, stats and utils packages (#62)
  • Fixed bug in geojson_write() in which geojson style names were altered on accident (#56)

geojsonio 0.1.0

  • released to CRAN

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.

install.packages("geojsonio")

0.3.2 by Scott Chamberlain, 2 months ago


https://github.com/ropensci/geojsonio


Report a bug at https://github.com/ropensci/geojsonio/issues


Browse source code at https://github.com/cran/geojsonio


Authors: Scott Chamberlain [aut, cre], Andy Teucher [aut]


Documentation:   PDF Manual  


Task views: Analysis of Spatial Data


MIT + file LICENSE license


Imports methods, sp, rgdal, rgeos, httr, maptools, jsonlite, magrittr, readr, V8

Suggests gistr, testthat, knitr, leaflet, sf

Enhances RColorBrewer


Imported by jpmesh, repijson, rmapshaper.

Suggested by mregions.

Enhanced by lawn.


See at CRAN