金子邦彦研究室3次元,地図地図情報システムとデータベースosmar を用いた地図描画ブログラムの例

osmar を用いた地図描画ブログラムの例

osmar とは R 言語処理系用の OpenSteetMap の種々の機能のパッケージ.

R言語処理系で, OpenStreetMap-XML ファイルを読み込み,福岡市内の西日本鉄道の路線図と名古屋市内の名古屋鉄道の路線図を描画した.

前準備: OpenStreetMap-XML ファイルを準備しておくこと

福岡市内の西日本鉄道経路図の描画例

[image]

R言語処理系で作成したプログラムを実行して図に示す西日本鉄道の経路図を作成した.実行したプログラムを次に示す.

#ライブラリの読み込み
library("osmar")

#地図データの読み込み
xml <- readLines('/home/hoge.xml')
map <- as_osmar(xmlParse(xml))

##貝塚線の駅の座標(node)のみを含むサブセットを作成
kai.id <- unique(find(map, node(tags(v == "貝塚線"))))
kai.set <- subset(map, node_ids = kai.id)
kai_n.id <- unique(find(kai.set, node(tags(v == "station"))))
kai_n.set <- subset(map, node_ids = kai_n.id)

##貝塚線の路線情報(way)のみを含むサブセットを作成
kai_w.id <- unique(find(map, way(tags(v == "貝塚線"))))
kai_w.id <- find_down(map, way(kai_w.id))
kai_w.set <- subset(map, ids = kai_w.id)

##天神大牟田線の駅の座標(node)のみを含むサブセットを作成
ten.id <- unique(find(map, node(tags(v == "天神大牟田線"))))
ten.set <- subset(map, node_ids = ten.id)
ten_n.id <- unique(find(ten.set, node(tags(v == "station"))))
ten_n.set <- subset(map, node_ids = ten_n.id)

##天神大牟田線の路線情報(way)のみを含むサブセットを作成
ten_w.id <- unique(find(map, way(tags(v == "天神大牟田線"))))
ten_w.id <- find_down(map, way(ten_w.id))
ten_w.set <- subset(map, ids = ten_w.id)

#グラフの作成
par(mar = c(5.5, 6, 4.1, 2))
par(mgp = c(4, 1.2, 0))
plot_nodes(kai_n.set, xlim = c(130.18, 130.50),
    ylim = c(33.41, 33.73), main = "福岡市内における西日本鉄道の経路図",
    xlab = "経度", ylab = "緯度",pch = 1, cex.lab = 2,
    cex.axis = 1.8, cex.main = 1.8)
plot_nodes(ten_n.set, xlim = c(130.35, 130.50), pch = 16,
    ylim = c(33.53, 33.73), xlab = "", ylab = "", add = TRUE)
legend("topleft", legend = c("貝塚線", "天神大牟田線"),
    pch = c(1, 16), cex = 1.5, pt.cex = 2, bty = "n")
plot_ways(kai_w.set, xlim = c(130.35, 130.50), xlab = "", ylab = "",
    ylim = c(33.53, 33.73), add = TRUE)
plot_ways(ten_w.set, xlim = c(130.35, 130.50), xlab = "", ylab = "",
    ylim = c(33.53, 33.73), add = TRUE)

名古屋鉄道経路図の描画例

R言語処理系で作成したプログラムを実行して図に示す名古屋鉄道の経路図を作成した.実行したプログラムを次に示す.

[image]
#ライブラリの読み込み library("osmar")
#地図データの読み込み
xml <- readLines('/home/hoge.xml')
map <- as_osmar(xmlParse(xml))

##名古屋本線の駅の座標(node)のみを含むサブセットを作成
hon.id <- unique(find(map, node(tags(v == "名古屋本線"))))
hon.set <- subset(map, node_ids = hon.id)
hon_n.id <- unique(find(hon.set, node(tags(v == "station"))))
hon_n.set <- subset(map, node_ids = hon_n.id)

##名古屋本線の路線情報(way)のみを含むサブセットを作成
hon_w.id <- unique(find(map, way(tags(v == "名古屋本線"))))
hon_w.id <- find_down(map, way(hon_w.id))
hon_w.set <- subset(map, ids = hon_w.id)

##犬山線の駅の座標(node)のみを含むサブセットを作成
inu.id <- unique(find(map, node(tags(v == "犬山線"))))
inu.set <- subset(map, node_ids = inu.id)
inu_n.id <- unique(find(inu.set, node(tags(v == "station"))))
inu_n.set <- subset(map, node_ids = inu_n.id)

##犬山線の路線情報(way)のみを含むサブセットを作成
inu_w.id <- unique(find(map, way(tags(v == "犬山線"))))
inu_w.id <- find_down(map, way(inu_w.id))
inu_w.set <- subset(map, ids = inu_w.id)

##津島線の駅の座標(node)のみを含むサブセットを作成
tsu.id <- unique(find(map, node(tags(v == "津島線"))))
tsu.set <- subset(map, node_ids = tsu.id)
tsu_n.id <- unique(find(tsu.set, node(tags(v == "station"))))
tsu_n.set <- subset(map, node_ids = tsu_n.id)

##津島線の路線情報(way)のみを含むサブセットを作成
tsu_w.id <- unique(find(map, way(tags(v == "津島線"))))
tsu_w.id <- find_down(map, way(tsu_w.id))
tsu_w.set <- subset(map, ids = tsu_w.id)

##小牧線の駅の座標(node)のみを含むサブセットを作成
omk.id <- unique(find(map, node(tags(v == "小牧線"))))
omk.set <- subset(map, node_ids = omk.id)
omk_n.id <- unique(find(omk.set, node(tags(v == "station"))))
omk_n.set <- subset(map, node_ids = omk_n.id)

##小牧線の路線情報(way)のみを含むサブセットを作成
omk_w.id <- unique(find(map, way(tags(v == "小牧線"))))
omk_w.id <- find_down(map, way(omk_w.id))
omk_w.set <- subset(map, ids = omk_w.id)

##瀬戸線の駅の座標(node)のみを含むサブセットを作成
sto.id <- unique(find(map, node(tags(v == "瀬戸線"))))
sto.set <- subset(map, node_ids = sto.id)
sto_n.id <- unique(find(sto.set, node(tags(v == "station"))))
sto_n.set <- subset(map, node_ids = sto_n.id)

##瀬戸線の路線情報(way)のみを含むサブセットを作成
sto_w.id <- unique(find(map, way(tags(v == "名古屋鉄道瀬戸線"))))
sto_w.id <- find_down(map, way(sto_w.id))
sto_w.set <- subset(map, ids = sto_w.id)

##築港線の駅の座標(node)のみを含むサブセットを作成
tku.id <- unique(find(map, node(tags(v == "築港線"))))
tku.set <- subset(map, node_ids = tku.id)
tku_n.id <- unique(find(tku.set, node(tags(v == "station"))))
tku_n.set <- subset(map, node_ids = tku_n.id)
##築港線の路線情報(way)のみを含むサブセットを作成
tku_w.id <- unique(find(map, way(tags(v == "築港線"))))
tku_w.id <- find_down(map, way(tku_w.id))
tku_w.set <- subset(map, ids = tku_w.id)

##常滑線の駅の座標(node)のみを含むサブセットを作成
jkt.id <- unique(find(map, node(tags(v == "常滑線"))))
jkt.set <- subset(map, node_ids = jkt.id)
jkt_n.id <- unique(find(jkt.set, node(tags(v == "station"))))
jkt_n.set <- subset(map, node_ids = jkt_n.id)

##常滑線の路線情報(way)のみを含むサブセットを作成
jkt_w.id <- unique(find(map, way(tags(v == "常滑線"))))
jkt_w.id <- find_down(map, way(jkt_w.id))
jkt_w.set <- subset(map, ids = jkt_w.id)

##河和線の駅の座標(node)のみを含むサブセットを作成
kww.id <- unique(find(map, node(tags(v == "河和線"))))
kww.set <- subset(map, node_ids = kww.id)
kww_n.id <- unique(find(kww.set, node(tags(v == "station"))))
kww_n.set <- subset(map, node_ids = kww_n.id)

##河和線の路線情報(way)のみを含むサブセットを作成
kww_w.id <- unique(find(map, way(tags(v == "河和線"))))
kww_w.id <- find_down(map, way(kww_w.id))
kww_w.set <- subset(map, ids = kww_w.id)

#グラフのパラメータ設定
par(mar = c(5.5, 6, 4.1, 2))
par(mgp = c(4, 1.2, 0))
XLIM <- c(136.7,137.1)
YLIM <- c(35.0,35.3)
LEGEND <- c("名古屋本線", "犬山線", "津島線", "小牧線", "瀬戸線", "築港線", "常滑線", "河和線")
plot_nodes(hon_n.set, xlim = XLIM, ylim = YLIM, main = "名古屋市内における名古屋鉄道の経路図", 
    xlab = "経度", ylab = "緯度",col = 1, cex.lab = 2, cex.axis = 1.8, cex.main = 1.8)
plot_nodes(inu_n.set, xlim = XLIM, ylim = YLIM,
    xlab = "", ylab = "", col = 2, add = TRUE)
plot_nodes(tsu_n.set, xlim = XLIM, ylim = YLIM,
    xlab = "", ylab = "", col = 3, add = TRUE)
plot_nodes(omk_n.set, xlim = XLIM, ylim = YLIM,
    xlab = "", ylab = "", col = 4, add = TRUE)
plot_nodes(sto_n.set, xlim = XLIM, ylim = YLIM,
    xlab = "", ylab = "", col = 5, add = TRUE)
plot_nodes(tku_n.set, xlim = XLIM, ylim = YLIM,
    xlab = "", ylab = "", col = 6, add = TRUE)
plot_nodes(jkt_n.set, xlim = XLIM, ylim = YLIM,
    xlab = "", ylab = "", col = 7, add = TRUE)
plot_nodes(kww_n.set, xlim = XLIM, ylim = YLIM,
    xlab = "", ylab = "", col = 8, add = TRUE)

legend("bottomleft", legend = LEGEND, col = c(1:8),
    pch = 1, cex = 1.5, pt.cex = 2, bty = "n")

plot_ways(hon_w.set, xlim = XLIM, ylim = YLIM,
    xlab = "", ylab = "", col = 1, add = TRUE)
plot_ways(inu_w.set, xlim = XLIM, ylim = YLIM,
    xlab = "", ylab = "", col = 2, add = TRUE)
plot_ways(tsu_w.set, xlim = XLIM, ylim = YLIM,
    xlab = "", ylab = "", col = 3, add = TRUE)
plot_ways(omk_w.set, xlim = XLIM, ylim = YLIM,
    xlab = "", ylab = "", col = 4, add = TRUE)
plot_ways(sto_w.set, xlim = XLIM, ylim = YLIM,
    xlab = "", ylab = "", col = 5, add = TRUE)
plot_ways(tku_w.set, xlim = XLIM, ylim = YLIM,
    xlab = "", ylab = "", col = 6, add = TRUE)
plot_ways(jkt_w.set, xlim = XLIM, ylim = YLIM,
    xlab = "", ylab = "", col = 7, add = TRUE)
plot_ways(kww_w.set, xlim = XLIM, ylim = YLIM,
    xlab = "", ylab = "", col = 8, add = TRUE)