Edited at

OSM 3Dタグの基礎

More than 5 years have passed since last update.

OpenStreetMapで、建物の高さを入力する方法を解説します。


基本資料

OSM Wikiに詳細な解説があります。

Simple_3D_Buildingsのページを参照してください。

日本語ページもあります


3Dレンダラ

入力した結果は、以下のページで表示を確認することができます。



  • OSM Buildings: 建物の高さ、建物の各部分の色がレンダリングされます。データ更新が早いので、確認用として最適です


  • F4 Maps: 多くの3Dタグを網羅しており、非常に綺麗にレンダリングされます。いったん画像が出来上がった後の更新がやや遅いようなので、気長に待ちましょう。(感覚ですが、1日くらいかかる感じです)


基本となるタグ

建物の各部分を、タグを使って表現します。

主に入力する項目は以下のとおりです。この6つのタグを、building=yesのエリアオブジェクトに対して適用します。

内容
タグ

備考

建物の高さ
height
数字(メートル)
建物オブジェクト高さ。入れなくてもよい

建物の階数
building:levels
数字(階数)
階数。heightタグの代わりにこちらが入っていればとりあえずOK。

建物の外壁の色
building:color
カラーコード

屋根の高さ
roof:height
数字(メートル)

屋根の色
roof:color
カラーコード

屋根の形
roof:shape
定義から選択


実例

実際に値が入力されている場所を見てみましょう。

ここでは、以下のタグが使用されています。

とりあえず、このくらいが最低限入っていれば大丈夫です


heightは計測が大変なので、とりあえず building:levels があると、それなりに見栄えがします。


Key
Value
意味

building
yes
これは建物です

building:color
#878F94
外壁の色は#878F94

building:levels
2
2階建て

roof:color
#6B6361
屋根の色は#6B6361

roof:shape
hipped
屋根の形は hipped


JOSMでの入力と確認

まずは、表示確認用にKendzi3dプラグインをインストールしましょう。

インストール方法は、通常のプラグインと同様です。

起動すると、3D表示が確認できる小窓が表示されます。

スクリーンショット 2014-04-20 21.38.56.png

こんなかんじです。なんのことやらわかりませんね。

スクリーンショット_2014-04-20_21_39_22_1.png

それでは、小窓を選択した状態で、キーボードの矢印キーとマウスを使って表示を移動させましょう。

マウスをクリックしながら、まずは地面の方を向き、その後でキーボードの下キーを押し続けると、視点が空中に移動します。

詳しい操作については、kendzi3dのwikiページを参照してください。

スクリーンショット 2014-04-20 21.51.55.png

kendzi3dはあくまで結果確認用のビューアなので、とりあえず表示ができていればよいです。

この状態で、適当な建物に、heightタグを入れてみましょう。

アップロードしないことを考えたら、height=200とか、わかりやすい数字でも大丈夫です。

その建物の高さが伸びることがわかります。

スクリーンショット 2014-04-20 21.56.02.png

あとは、通常のJOSMでの編集と同じく、先ほどのタグを1つ1つ追加してゆきます。

ひたすら地味で、大変な作業です (^^;


建物の色の確認方法

building:colorの調査は、その建物の写真があれば簡単です。

Macであれば、アプリケーション -> ユーティリティ -> DigitalColor Meterというアプリが標準で装備されていて、写真のカラーコードを抽出してくれます。

この色を使います。なるべく明るく写っている写真がよいでしょう。

スクリーンショット_2014-04-20_22_03_43.png

roof:colorも、同様にして空中写真から色を抽出します。


建物の一部分だけ、階数が異なる場合

多くの方が悩む部分だと思います。

これは、 building:part = yes というタグを使います。


  1. まずは、建物の外郭部分を、通常と同じように描きます。

    スクリーンショット 2014-04-20 22.13.13.png


  2. その建物外郭オブジェクトとは別に、建物の中身を埋めるようにしてbuilding:partオブジェクトを作成し、そこに building:levelsなどのタグを付与します。


スクリーンショット_2014-04-20_22_14_06.png


  1. また、building:partタグとbuilding:min_levelsというタグを組み合わせることで、渡り廊下状の形を作成することもできます。
    この建物は、3つの building:partから形成されています。

building

こういう形状のマンションも、これで簡単に作成できますね。

2014-04-11_10_32_15.jpg


より詳しい描き方

リレーションとして表す方法もあります

この方法を使うと、建物の外壁の色を、面ごとに変える(この部分はガラス張りだけど、この部分はコンクリート、など)ことができます。

また、屋根の傾き具合の調整や、"建物の3階と5階にだけ窓がある"などの記述も可能ですが、そこまでやるならテクスチャ貼ったほうがいいのじゃないかなぁ、と思うことはあります。


店舗が建物の中にある場合

建物の中に店舗が存在する場合、建物のエリアオブジェクトとは別に、ノードオブジェクトとして店舗のノードを置くことをお勧めします。

これはなぜかといえば、建物自体の name (たとえば"小池ビル"など)と、そのPOIの name がバッティングすることが多いためです。

また、そのPOIには levelタグを付与しておくことをお勧めします。これによって、"3階建ての小池ビルの2階に、村田歯科医 (amenity=dentist)が入っている" ということがすっきりと表現できます。

POIに付与するための level タグは、1階に入居している場合の値が0(地階)、2階ならば1、という風に、日本での数え方と異なっているため、注意してください。