geojsonio

by ropensci

ropensci /geojsonio

Convert many data formats to & from GeoJSON & TopoJSON

128 Stars 43 Forks Last release: 5 months ago (v0.9.2) Other 770 Commits 16 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

geojsonio

cran checks Build Status R build status codecov.io cran version

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()
    /
    topojson_list()
    - convert to GeoJSON/TopoJSON as R list format
  • geojson_json()
    /
    topojson_json()
    - convert to GeoJSON/TopoJSON as JSON
  • geojson_sp()
    - convert output of
    geojson_list()
    or
    geojson_json()
    to
    sp
    spatial objects
  • geojson_sf()
    - convert output of
    geojson_list()
    or
    geojson_json()
    to
    sf
    objects
  • geojson_read()
    /
    topojson_read()
    - read a GeoJSON/TopoJSON file from file path or URL
  • geojson_write()
    /
    topojson_write()
    - write a GeoJSON/TopoJSON file locally

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

*json Info

Install

A note about installing

rgeos
- built on top of C libraries, and installation often causes trouble for Linux users because no binaries are provided on CRAN for those platforms. Other dependencies in
geojsonio
should install easily automatically when you install
geojsonio
.

Mac

Install

GDAL
on the command line first, e.g., using
homebrew
brew install gdal

Then install

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

Linux

Get deps first

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

Note: if you have trouble installing rgeos, try installing

libgeos++-dev

Then install

rgeos
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 
#>   no. features:  1 
#>   features (1st 5):  Point
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 
#>   no. features:  2 
#>   features (1st 5):  Point, Point
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 

to json

geojson_json(sp_poly)
#>  
#>   type:  FeatureCollection 
#>   no. features:  2 
#>   features (1st 5):  Polygon, Polygon

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_list
is the output type from
geojson_list()
, it's just a list with a class attached so we know it's geojson :)
vec  $type
#> [1] "FeatureCollection"
#> 
#> $features
#> $features[[1]]
#> $features[[1]]$type
#> [1] "Feature"
#> 
#> $features[[1]]$geometry
#> $features[[1]]$geometry$type
...

json
+
json
c  {"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')
#> 
#>   Path:       myfile.geojson
#>   From class: data.frame

Read GeoJSON

file  [1] "type"     "name"     "crs"      "features"
names(out$features[[1]])
#> [1] "type"       "properties" "geometry"

TopoJSON

to JSON

topojson_json(c(-99.74,32.45))
#> {"type":"Topology","objects":{"foo":{"type":"GeometryCollection","geometries":[{"type":"Point","coordinates":[-99.74,32.45]}]}},"arcs":[],"bbox":[-99.74,32.45,-99.74,32.45]}

to list

library(sp)
x  $type
#> [1] "Topology"
#> 
#> $objects
#> $objects$foo
#> $objects$foo$type
#> [1] "GeometryCollection"
#> 
#> $objects$foo$geometries
#> $objects$foo$geometries[[1]]
#> $objects$foo$geometries[[1]]$type
#> [1] "Point"
#> 
#> $objects$foo$geometries[[1]]$coordinates
#> [1] 1 3
#> 
#> $objects$foo$geometries[[1]]$id
#> [1] 1
#> 
#> $objects$foo$geometries[[1]]$properties
...

Write TopoJSON

library('maps')
data(us.cities)
topojson_write(us.cities[1:2, ], lat = 'lat', lon = 'long')
#> 
#>   Path:       myfile.topojson
#>   From class: data.frame

Read TopoJSON

file  Reading layer `states' from data source `/Library/Frameworks/R.framework/Versions/3.6/Resources/library/geojsonio/examples/us_states.topojson' using driver `TopoJSON'
#> Simple feature collection with 51 features and 1 field
#> geometry type:  MULTIPOLYGON
#> dimension:      XY
#> bbox:           xmin: -171.7911 ymin: 18.91619 xmax: -66.96466 ymax: 71.35776
#> epsg (SRID):    NA
#> proj4string:    NA
plot(out)

plot of chunk unnamed-chunk-22

Use case: Play with US states

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

Get some geojson

library('crul')
res 

Make a faceted plot

library('ggplot2')
library('plyr')
st_use 

plot of chunk unnamed-chunk-24

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

GeoJSON <-> TopoJSON

geo2topo()
and
topo2geo()
x  {"type":"Topology","objects":{"foo":{"type":"LineString","arcs":[0]}},"arcs":[[[100,0],[101,1]]],"bbox":[100,0,101,1]}
topo2geo(topo_json)
#>  
#>   type:  FeatureCollection 
#>   no. features:  1 
#>   features (1st 5):  LineString

Meta

  • 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.

rofooter

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.