如何在 R 中加载多功能 geojson 文件的*部分*?

How to load *part* of a multifeature geojson file in R?

我有一个 FeatureCollection 的 geojson,它包含 2 种地理数据类型:LineStringwaypoint - 查看原始文件 here - this is how it looks on GitHub:

我只想加载 LineString,所以这就是我所做的:

library(RCurl)
obj <- getURL("https://raw.githubusercontent.com/Robinlovelace/stplanr/master/inst/extdata/route_data.geojson")
writeLines(obj, "/tmp/obj.geojson")
obj <- readLines("/tmp/obj.geojson")
just_lines <- obj[14:(length(obj) - 28)]
just_lines[1] <- paste0("{",  just_lines[1])
just_lines[length(just_lines)] <- "}"
writeLines(just_lines, "/tmp/just_lines.geojson")

现在我们已经删除了文件开头和结尾的讨厌的行,这是一个格式很好的 GeoJSON 文件,我们可以加载和绘制,是的:

library(rgdal)
route <- readOGR("/tmp/just_lines.geojson", layer = "OGRGeoJSON")
plot(route)

除了对任何 R 用户来说显而易见的是,这是一种非常笨拙且效率低下的方法,涉及太多的代码行和不必要的读写硬盘。一定有别的办法!

我看过的选项

上下文

我正在为可持续交通规划创建一个包,stplanr. A function to find cycling routes (like in the image below) needs to load in the FeatureCollection geojson data from the CycleStreets.net api

我不知道这在 LeafletR 中是否可行,但 Leaflet 的 L.GeoJSON 层有一个 filter 方法可以根据特征具有的属性呈现(或不呈现)集合的特征.一些代码:

L.geoJson(geojson, {
  'filter': function (feature) {
    return feature.geometry.type === 'LineString'
  }
});

一个例子:http://plnkr.co/edit/RXIO0X?p=preview

参考:http://leafletjs.com/reference.html#geojson-filter

使用 jsonlite 直接从 URL 读取数据:

 obj <- jsonlite::fromJSON("https://raw.githubusercontent.com/Robinlovelace/stplanr/master/inst/extdata/route_data.geojson")

将集合中的第一个对象转换为 SpatialLines:

 sl = SpatialLines(list(Lines(list(Line(obj$features[1,]$geometry$coordinates[[1]])),ID=1)))
 plot(sl)

假定特征是单行字符串。

要制作具有以下属性的 SpatialLinesDataFrame:

 sldf=SpatialLinesDataFrame(sl=sl,data=obj$features[1,]$properties)

可能还应该给它一个 CRS:

 proj4string(sldf)=CRS("+init=epsg:4326")