我的geojson是FeatureCollection
,包含2种地理数据类型:LineString
和waypoint
- 请参阅原始文件here - 这就是它的外观在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。需要function来查找自行车路线(如下图所示),需要加载FeatureCollection geojson data中的CycleStreets.net api。
答案 0 :(得分:3)
使用jsonlite direct直接从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")
答案 1 :(得分:0)
我不知道LeafletR中是否可以这样做但Leaflet的L.GeoJSON
图层有一个filter
方法,它可以根据特征所具有的属性渲染(或不渲染)一个集合的特征。一些代码:
L.geoJson(geojson, {
'filter': function (feature) {
return feature.geometry.type === 'LineString'
}
});