osmarのデータ構造例
【目次】
osmarは、R言語でOpenStreetMapデータを取得・操作するためのパッケージである。OpenStreetMapのXMLデータを読み込み、R言語で扱いやすいデータ構造に変換する機能を提供する。
以下では、福岡市内全域を含むOpenStreetMap XMLファイルをosmarパッケージで読み込み、データ構造を確認した例を示す。
#ライブラリの読み込み
library("osmar")
#XMLデータの読み込み
xml <- readLines('/home/hoge.xml')
#OpenStreetMapデータとして整形
map <- as_osmar(xmlParse(xml))
#データ構造の表示
STR(map)
上記コードの実行結果を以下に示す。
> str(map)
List of 3
$ nodes :List of 2
..$ attrs:'data.frame': 495982 obs. of 9 variables:
.. ..$ id : num [1:495982] 2.41e+08 2.41e+08 2.41e+08 2.41e+08 2.41e+08 ...
.. ..$ timestamp: POSIXlt[1:495982], format: "2011-04-07 13:44:33" "2008-01-21 07:47:00" ...
.. ..$ uid : Factor w/ 108 levels "1008753","105009",..: 52 71 48 69 12 12 12 12 12 69 ...
.. ..$ user : Factor w/ 108 levels "AJI-INTERNATIONAL",..: 44 41 38 47 3 3 3 3 3 47 ...
.. ..$ visible : Factor w/ 1 level "true": 1 1 1 1 1 1 1 1 1 1 ...
.. ..$ version : num [1:495982] 4 1 4 4 2 2 2 2 2 2 ...
.. ..$ changeset: num [1:495982] 7794785 675578 12697666 13096850 756400 ...
.. ..$ lat : num [1:495982] 33.6 33.7 33.6 33.6 33.6 ...
.. ..$ lon : num [1:495982] 130 130 130 130 130 ...
..$ tags :'data.frame': 160600 obs. of 3 variables:
.. ..$ id: num [1:160600] 2.52e+08 2.52e+08 2.52e+08 2.52e+08 2.52e+08 ...
.. ..$ k : Factor w/ 137 levels "FIXME","KSJ2:ADS",..: 37 37 37 37 37 37 37 37 37 37 ...
.. ..$ v : Factor w/ 48191 levels "?????","(有)浜田電業",..: 43122 43122 43122 43122 43122 43122 43122 43122 43122 43122 ...
..- attr(*, "class")= chr [1:3] "nodes" "osmar_element" "list"
$ ways :List of 3
..$ attrs:'data.frame': 46857 obs. of 7 variables:
.. ..$ id : num [1:46857] 22491953 23303818 23303822 23303825 23303826 ...
.. ..$ timestamp: POSIXlt[1:46857], format: "2012-08-12 04:27:31" "2012-09-06 11:45:27" ...
.. ..$ uid : Factor w/ 75 levels "103253","105009",..: 27 42 42 71 27 42 68 71 42 27 ...
.. ..$ user : Factor w/ 75 levels "42429","Andre68",..: 24 32 32 23 24 32 13 23 32 24 ...
.. ..$ visible : Factor w/ 1 level "true": 1 1 1 1 1 1 1 1 1 1 ...
.. ..$ version : num [1:46857] 6 4 6 27 13 7 5 33 13 29 ...
.. ..$ changeset: num [1:46857] 12697666 13008987 14891887 14989948 12213785 ...
..$ tags :'data.frame': 171329 obs. of 3 variables:
.. ..$ id: num [1:171329] 22491953 23303822 23303825 23303825 23303825 ...
.. ..$ k : Factor w/ 127 levels "FIXME","KSJ2:ADS",..: 103 117 72 81 103 104 117 72 77 78 ...
.. ..$ v : Factor w/ 3633 levels " 172.11298791800",..: 411 2745 10 2799 397 3101 2745 10 3064 386 ...
..$ refs :'data.frame': 567420 obs. of 2 variables:
.. ..$ id : num [1:567420] 22491953 22491953 22491953 22491953 22491953 ...
.. ..$ ref: num [1:567420] 2.41e+08 1.86e+09 1.86e+09 1.26e+09 1.26e+09 ...
..- attr(*, "class")= chr [1:3] "ways" "osmar_element" "list"
$ relations:List of 3
..$ attrs:'data.frame': 106 obs. of 7 variables:
.. ..$ id : num [1:106] 111091 359426 952499 952500 952537 ...
.. ..$ timestamp: POSIXlt[1:106], format: "2012-09-03 14:28:14" "2012-12-23 14:46:55" ...
.. ..$ uid : Factor w/ 15 levels "205208","24247",..: 14 6 1 1 1 10 10 1 9 3 ...
.. ..$ user : Factor w/ 15 levels "42429","Keolety",..: 8 15 14 14 14 3 3 14 12 9 ...
.. ..$ visible : Factor w/ 1 level "true": 1 1 1 1 1 1 1 1 1 1 ...
.. ..$ version : num [1:106] 2 40 1 1 1 3 2 1 5 4 ...
.. ..$ changeset: num [1:106] 12968317 14379004 4924513 4924513 4924513 ...
..$ tags :'data.frame': 432 obs. of 3 variables:
.. ..$ id: num [1:432] 111091 111091 111091 359426 359426 ...
.. ..$ k : Factor w/ 49 levels "KSJ2:AAC","KSJ2:AAC_label",..: 20 41 45 22 23 24 25 26 32 33 ...
.. ..$ v : Factor w/ 122 levels " 11958.77567180000",..: 79 57 74 107 33 32 107 34 95 42 ...
..$ refs :'data.frame': 3383 obs. of 4 variables:
.. ..$ id : num [1:3383] 111091 111091 111091 359426 359426 ...
.. ..$ type: Factor w/ 3 levels "node","relation",..: 3 3 3 3 3 3 3 3 3 3 ...
.. ..$ ref : num [1:3383] 2.33e+07 3.30e+07 1.64e+08 2.34e+07 1.88e+08 ...
.. ..$ role: Factor w/ 8 levels "","admin_centre",..: 5 6 6 1 1 1 1 1 1 1 ...
..- attr(*, "class")= chr [1:3] "relations" "osmar_element" "list"
- attr(*, "class")= chr [1:2] "osmar" "list"
実行結果から、データ構造がlist形式であることがわかる。このlistはnodes、ways、relationsの3つの要素を持つ。各要素はOpenStreetMapの基本データモデルに対応している。
以下では、各要素に共通する属性と、要素ごとに固有の属性について説明する。
共通属性
nodes、ways、relationsの各要素は、attrs(属性情報)とtags(タグ情報)という2つのデータフレームを共通して持つ。
attrsデータフレーム
attrsデータフレームには、各オブジェクトのメタデータが格納される。
- id : num
オブジェクト(node、way、relation)を一意に識別する数値である。 - user : Factor
オブジェクトを最後に編集したユーザの名前である。 - uid : Factor
オブジェクトを最後に編集したユーザのIDである。 - timestamp : POSIXlt
オブジェクトが最後に編集された日時である。 - visible : Factor("true"または"false")
オブジェクトの可視状態を表す。"true"の場合は現在有効なデータであり、"false"の場合は削除済みで履歴にのみ存在する。 - version : num
オブジェクトのバージョン番号である。編集のたびに1ずつ増加する。 - changeset : num
オブジェクトが作成または編集された変更セットの番号である。変更セットとは、一人のユーザが一定時間内に行った編集内容をまとめた記録である。
tagsデータフレーム
tagsデータフレームには、オブジェクトに付与されたタグ情報が格納される。タグはキーと値のペアで構成され、オブジェクトの属性(名称、種別など)を表現する。
- id : num
タグが付与されているオブジェクトのidである。 - k : Factor
タグのキーである。タグの種類を示し、同一オブジェクト内では重複しない。 - v : Factor
タグの値である。キーに対応する具体的な内容を示す。
nodes固有の属性
nodesは地図上の点を表す要素である。共通属性に加えて、attrsデータフレームに以下の属性を持つ。
attrsデータフレーム(追加属性)
- lat : num(小数第7位、-90以上90以下)
地点の緯度である。 - lon : num(小数第7位、-180以上180以下)
地点の経度である。
ways固有の属性
waysは道路や建物の輪郭など、複数のnodeを結んだ線または領域を表す要素である。共通属性に加えて、refsデータフレームを持つ。
refsデータフレーム
refsデータフレームには、wayを構成するnodeの参照情報が格納される。
- id : num
wayのidである。 - ref : num
wayを構成するnodeのidである。nodeの並び順がwayの形状を決定する。
relations固有の属性
relationsは複数のnode、way、または他のrelationをグループ化した要素である。バス路線や行政境界など、複合的な地物を表現するために使用される。共通属性に加えて、refsデータフレームを持つ。
refsデータフレーム
refsデータフレームには、relationを構成するメンバーの参照情報が格納される。
- id : num
relationのidである。 - type : Factor("node"、"relation"または"way")
メンバーの種類である。 - ref : num
メンバーのidである。 - role : Factor
relation内でのメンバーの役割を表す文字列である。役割が定義されていない場合は空文字となる。