geojsonio
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 formatgeojson_json()- convert to geojson as jsongeojson_sp()- convert output ofgeojson_list()orgeojson_json()to spatial objectsgeojson_read()/topojson_read()- read a geojson/topojson file from file path or URLgeojson_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 theleafletpackage
*json Info
- GeoJSON - spec
- GeoJSON lint
- TopoJSON - spec
Install
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 gdalThen 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-devThen 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")GeoJSON
Convert various formats to geojson
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},"geometry":{"type":"Polygon","coordinates":[[[-100,40],[-90,50],[-85,45],[-100,40]]]}},{"type":"Feature","id":2,"properties":{"dummy":0},"geometry":{"type":"Polygon","coordinates":[[[-90,30],[-80,40],[-75,35],[-90,30]]]}}]}to list
geojson_list(sp_poly)$features[[1]]
#> $type
#> [1] "Feature"
#>
#> $id
#> [1] 1
#>
#> $properties
#> $properties$dummy
#> [1] 0
#>
...Combine objects
geo_list + geo_list
Note:
geo_listis the output type fromgeojson_list(), it's just a list with a class attached so we know it's geojson :)
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":[]}]}Write geojson
library('maps')
data(us.cities)
geojson_write(us.cities[1:2, ], lat = 'lat', lon = 'long')
#> <geojson>
#> Path: myfile.geojson
#> From class: data.frameRead geojson
file <- system.file("examples", "california.geojson", package = "geojsonio")
out <- geojson_read(file)TopoJSON
Read topojson
TopoJSON
library("sp")
url <- "https://raw.githubusercontent.com/shawnbot/d3-cartogram/master/data/us-states.topojson"
out <- topojson_read(url, verbose = FALSE)
plot(out)Use case: Play with US states
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.
Meta
- Please report any issues or bugs.
- License: MIT
- Get citation information for
geojsonioin R doingcitation(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.