山頂立体地図データ
以下の国土地理院のサイトにて日本の山岳データが取得できます。
立体地図(日本の主な山岳)
*山名をクリックすると、「地理院地図」で、山頂付近が表示されます。
【3D表示】をクリックすると、山頂付近が立体地図表示されます。
例えば富士山を選択して3D表示すると以下のようにブラウザに表示されます。
マウスで任意の角度にぐりぐりと動かすことも可能です。
このデータが素晴らしいのは、元データをダウンロード可能な点にあります。
フォーマットとしては3種類、STL*1とVRML*2とWebGLです。
STLファイル | 色を付けられない3Dプリンタ用のデータ | .stl |
---|---|---|
VRMLファイル | フルカラーの3Dプリンタ用のデータ | .wrl / .png / .pgw |
WebGL用ファイル | ブラウザでぐるぐる回す用のファイル | .html / .csv / .png / .pgw |
今回は扱いやすそうなWebGL用のファイルを利用し、標高データを二次元配列に格納して可視化を行います。
R言語のコマンドに関しては以下記事もご参考ください。
標高データを3次元プロット
今回使うのはdem.csvファイルです。標高データが格納されています。
ただし、データの形式等を確認するためにindex.htmlファイルもダウンロードしました。
$ cat dem.csv | wc 0 1 1220775 $ cat dem.csv 21.392565615589863,21.30734226230675,21.283279197850344,21.25495496572978,21.25495496572978...
このようにdem.csvにはカンマ区切り、改行なしで標高に関する値が格納されています。
構造を確認すべく、index.htmlファイルの中身を見てみます。
var vTextureSizeW = 2048; var vTextureSizeH = 2048; /****************************************************/ var vMeshSizeW = 256; var vMeshSizeH = 256;
データはどうやら縦横同じサイズのようです。
カンマを改行に変換して行数を確認すると66049行でした。
$ cat dem.csv | awk 'BEGIN{RS=",";ORS="\n"}{print $0}' | wc 66049 66049 1220776
数字に強い方ならピンとくる通り、66049とは257の二乗なのでデータは257x257として格納されているようです。
> sqrt(66049) [1] 257
この前提にてデータを配列に落とし込みます。
> mt_fj <- matrix(scan("C:\\Users\\XXXX\\Downloads\\dem.csv",sep=","),nrow=257) Read 66049 items > persp(mt_fj)
問題なく可視化できました。
日本三名山を可視化
日本三名山と謳われる
- 富士山
- 白山
- 立山
を立体画像にし、回転動画として可視化してみます。
山名(山頂名) | 都道府県 | 標高 |
---|---|---|
富士山(剣ヶ峯) | 山梨県,静岡県 | 3776m |
白山(御前峰) | 石川県,岐阜県 | 2702m |
立山(大汝山) | 富山県 | 3015m |
回転用GIF作成スクリプト例
library(animation) plot3d360 <- function() { for (i in 1:360) { persp(mt_fj, theta = i-1, phi = 30, expand = 0.5) } } saveGIF(plot3d360(), interval=0.05,movietype="gif", outdir=getwd(),width=640, height=480)
富士山
白山
立山
終わりに
本記事ではオープンデータである山岳データを配列データとして格納し、persp関数でプロットしました。
尚、山の高さは引数にて「expand=0.5」としただけなので実際の縮尺にはなっていません。ただ、富士山の美しさを再認識しました。
生データがあればアイデア次第で可視化できるので、同様のことに興味がある方の参考になったなら幸いです。以上です。