User:Nmaruichi/3Dmapping
「3D マッピングのすすめ」の前に、このページの説明をします。
OpenStreetMap Advent Calendar 2024 として話をもらったので過去やってきた3Dマッピングのことをまとめます。
私は専門的な測量技術を持っているわけでなく、この記事は性格は裏付けが取れていないものを含みます。
OpenStreetMapの3Dレンダラーなどのソフトウェアは今後改善されれば、記事の内容が現実が合わなくなることも多いと思います。
そもそも間違った記述を含んでいる可能性があります。記事の目的と性質上、私の認識で書いていきますが、間違いは直したいと思うので修正案をいただいたら修正を行いたいと思います。
オープンソースカンファレンス 2019 Hiroshima でセミナーとして発表していて当初は、焼き直しまではできるだろうと考えていたものです。 でもまるっきり変えたい気もしていたものでもあります。まぁ、折衷案になりそうです。
現時点では、このページは書ききっていません。
次元
OpenStreetMap(以降は、OSMと略す)での3Dだと、緯度(弧度法)・経度(弧度法)と高さ(多分、階数かメートル、レイヤータグは……)という変則的な要素で構成されます。
3DのCGソフトとは大きく違うはずです。
平面(ではなく正確には球面かな)と高さ方向で単位が全然違うという変則的な3Dです。
しかも本当は、地面の標高(高さ要素)も考える必要がないとは言えません。平面や球面ですらないかもしれません。
3D建物
OSMでの3Dの地物(object)として主に使われているのは、建物です。
建物で3Dを表現すると単純なものは箱になるのですが、平面の多角形に高さがあるものを屋根という切断面を追加することで表していきます。
四角柱と円柱とかを屋根の形状でカットすることになります。地面側は平らになってしまうので、階段の下の空間が空いているものを表現するのは、OSM向きではありません。
OSMでCGでよく使われるポリゴン的な表現をするには、屋根のみの建物を(屋根の)形状できった面で表現するしかありません。
以下のような感じです。
building=roof height=4.046 roof:direction=45.7297173° roof:height=0.296 roof:shape=skillion
上記のタグ付け例では、高さを物理的な長さの単位(デフォルトはメートル)で書いていますが、階だけでタグを設定して、下記のようにすることもできます。
building = yes building:levels = 4 roof:direction = 65 roof:levels = 1 roof:shape = skillion
精密な3Dのタグ付けには、サーベイで長さを取得するもしくは、後で計算するが必要になります。 物理的な高さと論理的な高さ(階)は、を組み合わせて設定することができます。
どうやって3D要素を調べる
サーベイかMaipllaryですが、OSMで平面地図のみを意識したものと異なる部分や共通する部分があります。 調べなきゃいけないことは、
- 階数
- 高さを調べる。
- 水平面(同じ標高や高さ)です。
- 屋根の形と屋根の高さ(or N階分)
本格的な建設目的の測量は私も分かっていないのですが、光学的に水平箇所を調べるための機器
階数の調べ方
言われる前でもなしかと思いますが、以下のような方法があります。
- 建物の構造的に窓があることが多いのでそれを高さ方向で数える
- エレベータの階数を見る。
※OpenStreetMapの階は、日本の階の数え方とは異なります。0から始まるので、 'level=0' が 1階になります。
高さを調べる
最も単純な調べ方のひとつは、メジャーかと思います。
等間隔のタイル状の外壁なら1つを測って掛け算である程度求めることは可能かもしれません。
そうでなければ、メジャーで建物高さを測ろうとしても階を超える長くなるため難しくなると思います。
そしてまわりの目を気にするとメジャーで測るのもためらう場面が多くなります。
人に目を気にする場合は写真を取って計算するのが良いかと思います。
どうやって計算するかというとレンズの画角と撮影面(以前は、フィルムで今は、CCDかな)の情報で計算します。
このあとの方法は、レンズにも歪みの要素があるし本来の用途ではないので確実なものではありません。
長い短焦点のレンズのほうが良いかもしれませんが、ズームレンズなら望遠系を使って望遠側の最大の焦点距離か広角側の最小の焦点距離から計算したほうが良いかと思います。
最近のデシタルカメラは、焦点距離を保存された写真データ(JPEG前提でEXIFヘッダー)に焦点距離が含まれていると思います。
対象物までの距離は、どのょうにして調べるのが良いかですが、
ピントでもある程度の距離はわかりますが、おそらく精度が足りません。写真と取った場所と高さを測る対象となる建物を地図編集ソフトで距離を図ったほうが良いかと思います。
もしくは、各2点の緯度・経度で計算することも可能です。
色
素材
レンダラー
3Dに対応したレンダラーを紹介しますが、内情は知らないので個人的な印象を書いてみます。
F4 Map
高度なレンダラーで建物以外の3Dの要素にも一部対応しています。 一般的には、ノードやウェイで示す地物を高さ(height)を設定するとそれに合わせて高さを表現されます。 街路灯、旗、壁、フェンスなどが、それに当たります。
OSM Buildings
OSM Buildings は、建物の3Dを描画する一般的な機能は持っていると思います。 タグ付けされていないもの独自の機能は、ほぼない印象ですが窓を自動的に表示します。