osmar を使ってみる
【目次】
前準備
Ubuntu の場合
osmarパッケージはlibxml2とlibcurlに依存している。Ubuntuでは、以下のコマンドで必要なライブラリをインストールする。
sudo apt -y update
sudo apt -y install libxml2-dev
sudo apt -y install libcurl3-dev
osmar パッケージのインストール
Rを起動し、以下のコマンドでosmarパッケージをインストールする。
install.packages("osmar")
ダウンロード
osmarでは、OSMプロジェクトのAPIを通じて地図データを取得できる。APIのエンドポイントは以下のとおりである。
https://api.openstreetmap.org/api/0.6/
取得範囲の指定には以下の2つの関数を使用する。
- corner_bbox(): left、bottom、right、topの緯度経度で矩形範囲を指定する
- center_bbox(): 中心点の緯度経度と、幅および高さ(メートル単位)を指定する
以下の例では、指定地点を中心とする500m四方の範囲からデータを取得する。
library("osmar")
src <- osmsource_api()
bb <- center_bbox(130.21688103675842, 33.59656025053064, 500, 500)
ua <- get_osm(bb, source = src)
取得したデータの概要として、ノード、ウェイ、リレーションの各要素数が表示される。
- ノード(node): 緯度経度を持つ点。店舗、交差点、地点などを表す
- ウェイ(way): ノードを結んだ線または多角形。道路、河川、建物の輪郭などを表す
- リレーション(relation): 複数のノードやウェイをまとめた関係。バス路線、行政境界などを表す
描画
取得したデータを描画して、内容を確認できる。plot()関数はすべての要素を描画する。
library("osmar")
src <- osmsource_api()
bb <- center_bbox(130.21688103675842, 33.59656025053064, 500, 500)
ua <- get_osm(bb, source = src)
plot(ua)
ノード、ウェイ、リレーションを含むすべての要素が描画される。
plot_nodes()関数はノード(点)のみを描画する。以下の例では緑色で描画する。
library("osmar")
src <- osmsource_api()
bb <- center_bbox(130.21688103675842, 33.59656025053064, 500, 500)
ua <- get_osm(bb, source = src)
plot_nodes(ua, col="green")
店舗や交差点などの地点がノードとして表示される。
plot_ways()関数はウェイ(線)のみを描画する。以下の例では青色で描画する。
library("osmar")
src <- osmsource_api()
bb <- center_bbox(130.21688103675842, 33.59656025053064, 500, 500)
ua <- get_osm(bb, source = src)
plot_ways(ua, col="blue")
道路や河川、建物の輪郭などがウェイとして表示される。
sp オブジェクトへの変換と描画
osmarで取得したデータをas_sp()関数でspパッケージの空間オブジェクトに変換すると、空間解析やGIS処理が可能になる。spパッケージはRで空間データを扱うための標準的なパッケージである。
以下の例では、"points"を指定してノードをSpatialPointsDataFrameに変換し、spplot()関数で描画する。
library("osmar")
src <- osmsource_api()
bb <- center_bbox(130.21688103675842, 33.59656025053064, 500, 500)
ua <- get_osm(bb, source = src)
point <- as_sp(ua, "points")
spplot(point, c("id"))
各ノードがid属性の値に応じた色で表示される。
以下の例では、"lines"を指定してウェイをSpatialLinesDataFrameに変換する。
library("osmar")
src <- osmsource_api()
bb <- center_bbox(130.21688103675842, 33.59656025053064, 500, 500)
ua <- get_osm(bb, source = src)
line <- as_sp(ua, "lines")
spplot(line, c("id"))
各ウェイがid属性の値に応じた色で表示される。
以下の例では、"polygons"を指定して閉じたウェイをSpatialPolygonsDataFrameに変換する。
library("osmar")
src <- osmsource_api()
bb <- center_bbox(130.21688103675842, 33.59656025053064, 500, 500)
ua <- get_osm(bb, source = src)
poly <- as_sp(ua, "polygons")
spplot(poly, c("id"))
建物や公園など、閉じた領域を持つ要素がポリゴンとして表示される。