RでOSMデータの道路を使用するにはどうすればよいですか?


8

道路を使用してGPS位置を比較し、データにエラーがないことを確認する必要があります。

ローマ市の情報があるサイトからmap.osmをダウンロードし、Rの空間線に変換しました。

src <- osmsource_file(file = "rome.osm")
bb <- center_bbox(41.9, 12.3, 1000, 1000)
rome <- get_osm(bb, src)
ways <- find(rome, way(tags(k == "highway")))
ways <- find_down(rome, way(ways))
ways <- subset(rome, ids = ways)
hw_lines <- as_sp(ways, "lines")  

したがって、空間線オブジェクトでdistm関数を使用しようとしましたが、空間オブジェクトを使用できない(適切な形式ではない)と非難されています。

OSMを使用して、RのGPSデータと比較できる道路のみの情報を取得する別の方法はありますか?


1
distmの機能は?何を試したかとエラーメッセージを表示できますか?道路網上のいくつかのポイントから最も近いポイントまでの距離を計算しようとしていますか?
Spacedman

distmRのパッケージgeosphereからの関数で、ポイントからポイントまたは空間オブジェクトへのポイント間の距離を計算し、2番目のケースで行列を返します。`a <-distm(c(taxi $ lat [1]、taxi $ lon [1])、hw_lines、fun = distHaversine)`エラーは「Error in .pointsToMatrix(y):points should be vectors of length 2、 2列の行列、またはSpatialPoints *オブジェクトから継承。as_sposmarパッケージから、読み込まれたOSMオブジェクトを空間オブジェクトに変換します。> class(hw_lines) [1] "SpatialLinesDataFrame" attr(,"package") [1] "sp"
ファビオ城島

回答:


7

osmarパッケージを使用して、ローマ市からデータセットをダウンロードしました。その後、クエリに従って目的の高速道路を取得し、ローマの境界ボックスで取得したデータ内にランダムなSpatialPointsオブジェクトを作成しました。パッケージの関数を使用して、点と線の間の距離を測定dist2lineしましたgeosphere

以下のコードを試してください:

# Load libraries
library('osmar')
library('geosphere')

# Define the spatial extend of the OSM data we want to retrieve
rome.box <- center_bbox(center_lon = 12.5450, center_lat = 41.8992, width =  2000, height = 2000)

# Download all osm data inside this area
api <- osmsource_api()
rome <- get_osm(rome.box, source = api)

# General plot
plot(rome)

# Find highways
ways <- find(rome, way(tags(k == "highway")))
ways <- find_down(rome, way(ways))
ways <- subset(rome, ids = ways)

# SpatialLinesDataFrame object
hw_lines <- as_sp(ways, "lines")  

# Plot
spplot(hw_lines, zcol = "uid")

# Interactive view
mapview::mapview(hw_lines) 

# Make a random points dataset (like GPS)
gpsPoints <- spsample(x = hw_lines, n = 100, type = "random")

# Plot points
plot(hw_lines, xlab = "Lon", ylab = "Lat")
plot(gpsPoints, add = TRUE, pch = 19, col = "red")
box()

# Distances between Higways and random points
distances <- dist2Line(p = gpsPoints, line = hw_lines)

ローマハイウェイ


私は使用しようとしましたapi <- osmsource_api()が、bboxのポイントが多すぎると彼らは言ったので、.osmファイルをダウンロードしようとしました。私はhttp://metro.teczno.com/#romeの rome.osmを使用しました。わかりません。https://en.wikipedia.org/wiki/Romeでローマの座標は41°54′N 12°30′Eであり、OSMのローマでは41°889'N 12°48 'であると述べていますE、それでもrome.boxに別の座標を使用しました。 get_osm()別の座標系がありますか?
ファビオ城島

@FabioJojimaすみません、エラーでした!アメリカの街として「ローマ」を見つけました!答えを更新しました。それがあなたの質問に答えるかどうか確認してください!
グスマン

1
Rcppルーチンが「POSIX *」オブジェクトをサポートしていないmapviewため、オプションのへの呼び出しが機能しないことがわかりました。とにかく、問題はGitHub開発ブランチで解決され、CRANの次の公式アップデートで利用可能になります。
fdetsch 2016年

1
get_osm(rome.box, source = api)言って実行中にエラーが発生しますSpace required after the Public Identifier。それを修正する方法については、ここに回答のリンクがあります。
Jesper Hybel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.