標高値APIを作ってみた

| | コメント(0) | トラックバック(0)

前エントリにて,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

コメントする

このブログ記事について

このページは、tagchanが2007年12月 6日 21:39に書いたブログ記事です。

ひとつ前のブログ記事は「Google Mapsに地形レイヤーが登場」です。

次のブログ記事は「Google Chart APIがおもしろい」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Photo album by Flickr

www.flickr.com
This is a Flickr badge showing public photos from Tagchan. Make your own badge here.

Science and You

食べログ Photo

Powered by Movable Type 4.1
人気エントリ
▼すべて表示
generated by レビュー・ポスター

フォクすけメーター

Firefox3 Meter

なかのひと