こんにちは。
AMDlabの松原です。
私は前職で、地理院データを使い、住所を入力したら「地形」「周辺の建物」のモデルと「白地図」が自動で生成されるプログラムを組んでRevitのアドインを作成しましたが、あのデータ、どんな構成になっているかご存知ですか?
データ自体はxmlファイル形式になっています。
xmlはeXtensible Markup Languageの略で、ツリーな構造をマークアップで表現したファイルです。
1 2 3 4 5 6 7 |
<AMDlab> <HEAD> <TITLE> Welcome to AMDlab </TITLE> </HEAD> </AMDlab> |
webサイトなど作られてる方は、htmlで見慣れている形式ですよね。
国土地理院のデータも、このような形式で収められています。
(もっと分散処理しやすい形式にしておいて欲しかったです)
このデータですが、データの開始点とデータの順番がわかれば、中身はすぐに解くことができます。
地形のモデルの元となる標高データであるDEMデータはDEMという要素(上のサンプルで言うHEADやTITLEのこと)を持っており、その中に様々なプロパティの要素が記載されています。
例えば、開始点が0,0(gml:startPointと言う要素に書かれている)、データの順番がx y(gml:axisLabelsと言う要素に書かれている。次のピクセルはxにいくつ、yにいくつ進んだピクセルかを示す)の時、データは以下の図のように、情報が収められている状態だと言えます。
gml:tupleListに地形のタイプと、標高が
1 2 3 4 5 6 7 8 9 |
<gml:tupleList> 地表面,55.26 地表面,55.45 地表面,55.71 地表面,55.94 地表面,56.58 地表面,57.48 地表面,57.51 ..... |
こんな感じで入っているので、これを上から順番に、0,0から並べていくことで、欲しい地形の形を得ることができるのです。
ちなみにこの列と行の数自体もgml:GridEnvelopeという要素に記載されているため、この要素も計算に含める必要があります。
基本的には、地図データも地形データもこの構成になっており、細かいプロパティ情報が違っているというような感じです。
0,0になっている点は、gml:Envelopeという要素から緯度経度を導きだせるようになっているため、複数のデータからモデルを作成する場合は、緯度経度を元に全ての点の緯度経度を取得し、繋げていくとうやり方がいいですかね。
どの言語でも、xmlの要素を読み込むようなライブラリはあるはずなので、簡単なプログラムを書いて地形モデルを作ってみてはいかがでしょうか?
では。
COMMENTS