GeoJSON to TopoJSON and back
geo2topo(x, object_name = "foo", quantization = 0, ...)topo2geo(x, ...)
An object of class json
, of either GeoJSON or TopoJSON
GeoJSON or TopoJSON as a character string, json, a file path, or url
(character) name to give to the TopoJSON object created. Default: "foo"
(numeric) quantization parameter, use this to
quantize geometry prior to computing topology. Typical values are powers of
ten (1e4
, 1e5
, ...), default is 0
to not perform quantization.
For more information about quantization, see this by Mike Bostock
https://stackoverflow.com/questions/18900022/topojson-quantization-vs-simplification/18921214#18921214
for geo2topo
args passed on to
jsonlite::fromJSON()
, and for topo2geo
args passed on to
sf::st_read()
topojson_write()
, topojson_read()
# geojson to topojson
x <- '{"type": "LineString", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ]}'
z <- geo2topo(x)
jsonlite::prettify(z)
if (FALSE) {
library(leaflet)
leaflet() %>%
addProviderTiles(provider = "Stamen.Terrain") %>%
addTopoJSON(z)
}
# geojson to topojson as a list
x <- list(
'{"type": "LineString", "coordinates": [ [100, 0], [101, 1] ]}',
'{"type": "LineString", "coordinates": [ [110, 0], [110, 1] ]}',
'{"type": "LineString", "coordinates": [ [120, 0], [121, 1] ]}'
)
geo2topo(x)
# change the object name created
x <- '{"type": "LineString", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ]}'
geo2topo(x, object_name = "HelloWorld")
geo2topo(x, object_name = "4")
x <- list(
'{"type": "LineString", "coordinates": [ [100, 0], [101, 1] ]}',
'{"type": "LineString", "coordinates": [ [110, 0], [110, 1] ]}',
'{"type": "LineString", "coordinates": [ [120, 0], [121, 1] ]}'
)
geo2topo(x, "HelloWorld")
geo2topo(x, c("A", "B", "C"))
# topojson to geojson
w <- topo2geo(z)
jsonlite::prettify(w)
## larger examples
file <- system.file("examples", "us_states.topojson", package = "geojsonio")
topo2geo(file)
Run the code above in your browser using DataLab