3

aとa のFeatureCollection2 つの地理的データ型を含むgeojson があります -ここで未加工のファイルを参照してください - これはGitHubでどのように見えるかです:LineStringwaypoint

データ

のみをロードしたい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

URL から直接 jsonlite を使用してデータを読み取ります。

 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)

これは、フィーチャが 1 行の文字列であることを前提としています。

属性を使用して 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 に答える