3

我有一个FeatureCollection包含 2 种地理数据类型的 geojson:aLineString和 a - 请参阅此处waypoint的原始文件- 这是它在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中的行

除了任何 R 用户都应该清楚,这是一种非常笨重且效率低下的方法,涉及太多代码行和对硬盘的不必要读写。一定有别的办法!

我看过的选项

语境

我正在为可持续交通规划创建一个包,stplanr。查找骑行路线的功能(如下图所示)需要从CycleStreets.net api加载FeatureCollection geojson 数据

流动

4

2 回答 2

3

使用 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")
于 2015-03-15T22:27:46.260 回答
0

我不知道这在 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

于 2015-03-15T21:40:57.660 回答