前エントリにて,Google Mapsの地形レイヤーが登場したことを紹介したわけだが,そうなると標高値が知りたいところ。なので,SRTMというNASAがスペースシャトルから作成した地形データを用いて,緯度経度から標高値を抽出するAPIを作成した。
標高値抽出 API
http://www.tagchan.net/sample/elevation_api.html
これまでのAPIと同様に,JSONPで出力される。また,Google Mapsとマッシュアップも行っており,クリックすると,矢印が表示されてその地点の標高値が表示される。
ただ,これを作った後に,同じことをやっている人を発見したのでした…。
以下,細かい実装方法について。
SRTMのデータは緯度経度1度ごとにタイル状に分割されて,データが保存されている。今回,これらタイル状のデータ(ファイル)はモザイク(接合)せず,緯度経度を入力されたら,適切なファイルを読み込み,標高値を返すようなプログラムとした。このようにすることで,標高値を読みに行くまでの時間を短縮させることができたと考えている。
まずはデータをダウンロード。シェルで行った。17度×17度の289枚のタイルである。
http://webmodis.iis.u-tokyo.ac.jp/~tagchan/srtm/get.csh.txt
wgetでダウンロードし,解凍後にddコマンドでBig EndianをLittle Endianに変換する。
そして,
http://webmodis.iis.u-tokyo.ac.jp/~tagchan/srtm/tile.txt
のようなテキストファイルを生成させる。
この,「32129」は,北緯32度東経129度を意味している。SRTMのデータは,ファイル名に左下の緯度経度が含まれている。つまり,「32129」の場合は,N32E129.hgtということになる。
これまでが,get.cshのおこなったこと。
次に,
http://webmodis.iis.u-tokyo.ac.jp/~tagchan/srtm/src/txt2bsq.c
によって先ほどのテキストデータをバイナリデータに変換する。intが17×17個で,1156バイトのバイナリデータである。
そして,
http://webmodis.iis.u-tokyo.ac.jp/~tagchan/srtm/src/dem_value.c
によって,緯度経度を引数として,標高値を返すプログラムである。
// Specify file name using index tile
この段落部分で,緯度経度からファイル名を決定している。
// Extract elevation
そして,この段落部分でピクセル値を抽出する。バイナリファイルには,fseekを使っている。
トラックバック(0)
このブログ記事を参照しているブログ一覧: 標高値APIを作ってみた
このブログ記事に対するトラックバックURL: http://www.tagchan.net/cgi/mt/mt-tb.cgi/123

コメントする