AREarthroid 標高データ [Androidアプリ AREarthroid]
本日は、AREarthroidのネタである。
AREarthroidは今のところ平坦な球でしかない。ここに標高データを持ってきて、山を描いてみたいと野望を抱いている。
緯度、経度から簡単に標高がわかるようなサービスがあればよいのだが、そんな気が効いたサービスはない。MapViewの機能にあれば、よかったんだけどねぇ。
標高データ自体は、国土地理院に行けばありそうな感じ。しかし、アプリに組み込んで使用するとなると、なんかめんどう。
NASAにSRTMっていうのがあり、ここに地球全体の標高データがあることがわかった。
SRTM Shuttle Radar Topography Mission
http://www2.jpl.nasa.gov/srtm/
カシミールのSRTMの説明
http://www.kashmir3d.com/srtm/
カシミールは山を3Dで立体的に表示するPC用のソフト。カシミールなにげにすごいのだが、android版はないのかなぁ。
でもって、SRTMの30秒データっていうのが軽くてよさげではある。
この標高データから標高を計算して、3Dデータを作成する。今は、高度についてはみな「0」となっている。ここにSRTMの標高データを組み込んでやろう。という作戦である。
3Dデータの作成は、C/C++で書いた。SRTMから持ってきた標高データはファイルで置いておき、その都度読み込んで使いたい。もう、メモリはぎりぎりなので。
androidでのそういった外部ファイルのデータは、res/rawやassetsに入れておくといった決まりがある。assetsはテキスト形式のちょっとした設定ファイル用。バイナリはres/rawに入れておくっぽい。
でね。問題は、C/C++でres/raw、assetsに入っているリソースをfopenでオープンできないのですよ。もちろん、Javaからなら、getResources().openRawResource(R.raw.ファイル名)やら、getResources().getAssets().open(ファイル名)とかでできる。
fopenでもちゃんとフルパスを指定してやれば、オープンできると思うが、どこに入っているのやら。apkファイルは圧縮されているから、展開してやらないと読み込めないか...
と、以下のページを発見。
http://androgeek.info/?p=275
libzipを組み込んで、zip_fopenしてやればOKなのか。
うーん。ちょいとめんどうだがやってみるか。
なんかできたっぽい。
ソースをフォルダにわけてやらないといけなかったが、ちゃんとビルドできた。
res/rawフォルダを作って、適当にデータを入れてみる。
で、ファイルをオープンするのは、zip_fopenするのか。もしかしてこれって、いちいち展開する?遅そうだなぁ...ローカルファイルにキャッシュするか。それは後でもできるので、とりあえずはパフォーマンスをみるか。
zip_freadで読み込んで、zip_fcloseで閉じればよいのね。zipが付いただけで、fopenと使い方はかわらない。
さて、肝心の標高データはどうなっているかというと、30秒メッシュのやつはなんだかフォーマットがよくわからないのでパス。SRTM3の3秒メッシュを加工して(間引きして)使うことにする。
ごそごそと、間引きプログラムを作成中...
あー、結構大変。
できたぽい。ちょっとやってみる。
むむ、山にはなったが、なんかえらく陥没している部分が...
データの値を見ると、-32768? ほほ、これはデータが欠落しておるな。カシミールのページにもデータげ欠落していると書いてあった。これか。
じゃあ、-32768は無視。ついでに、まわりの標高の平均を計算するようにして...
どうじゃぁ...
富士山がみえた。
夕方なので、暗いのは勘弁。
メッシュが荒いのできれいな富士山にはなってないなぁ。これでも少し精度は上げたんだけど。標高データの取得パフォーマンスは、それほど悪くない感じ。展開後のファイルをキャッシュすればもっと軽くなるであろう。もしかして、res/drawbleに入っている画像データもいちいち展開しているのかも。そうやって、ローカルのキャッシュファイルが増えていくのか... 違うかな。
それに、視点の位置も標高で調整しないと、山の裏から見ている感じになってしまう。もう少ししたら、リリースできるであろう。
サイト内を検索
AREarthroidは今のところ平坦な球でしかない。ここに標高データを持ってきて、山を描いてみたいと野望を抱いている。
緯度、経度から簡単に標高がわかるようなサービスがあればよいのだが、そんな気が効いたサービスはない。MapViewの機能にあれば、よかったんだけどねぇ。
標高データ自体は、国土地理院に行けばありそうな感じ。しかし、アプリに組み込んで使用するとなると、なんかめんどう。
NASAにSRTMっていうのがあり、ここに地球全体の標高データがあることがわかった。
SRTM Shuttle Radar Topography Mission
http://www2.jpl.nasa.gov/srtm/
カシミールのSRTMの説明
http://www.kashmir3d.com/srtm/
カシミールは山を3Dで立体的に表示するPC用のソフト。カシミールなにげにすごいのだが、android版はないのかなぁ。
でもって、SRTMの30秒データっていうのが軽くてよさげではある。
この標高データから標高を計算して、3Dデータを作成する。今は、高度についてはみな「0」となっている。ここにSRTMの標高データを組み込んでやろう。という作戦である。
3Dデータの作成は、C/C++で書いた。SRTMから持ってきた標高データはファイルで置いておき、その都度読み込んで使いたい。もう、メモリはぎりぎりなので。
androidでのそういった外部ファイルのデータは、res/rawやassetsに入れておくといった決まりがある。assetsはテキスト形式のちょっとした設定ファイル用。バイナリはres/rawに入れておくっぽい。
でね。問題は、C/C++でres/raw、assetsに入っているリソースをfopenでオープンできないのですよ。もちろん、Javaからなら、getResources().openRawResource(R.raw.ファイル名)やら、getResources().getAssets().open(ファイル名)とかでできる。
fopenでもちゃんとフルパスを指定してやれば、オープンできると思うが、どこに入っているのやら。apkファイルは圧縮されているから、展開してやらないと読み込めないか...
と、以下のページを発見。
http://androgeek.info/?p=275
libzipを組み込んで、zip_fopenしてやればOKなのか。
うーん。ちょいとめんどうだがやってみるか。
なんかできたっぽい。
ソースをフォルダにわけてやらないといけなかったが、ちゃんとビルドできた。
res/rawフォルダを作って、適当にデータを入れてみる。
で、ファイルをオープンするのは、zip_fopenするのか。もしかしてこれって、いちいち展開する?遅そうだなぁ...ローカルファイルにキャッシュするか。それは後でもできるので、とりあえずはパフォーマンスをみるか。
zip_freadで読み込んで、zip_fcloseで閉じればよいのね。zipが付いただけで、fopenと使い方はかわらない。
さて、肝心の標高データはどうなっているかというと、30秒メッシュのやつはなんだかフォーマットがよくわからないのでパス。SRTM3の3秒メッシュを加工して(間引きして)使うことにする。
ごそごそと、間引きプログラムを作成中...
あー、結構大変。
できたぽい。ちょっとやってみる。
むむ、山にはなったが、なんかえらく陥没している部分が...
データの値を見ると、-32768? ほほ、これはデータが欠落しておるな。カシミールのページにもデータげ欠落していると書いてあった。これか。
じゃあ、-32768は無視。ついでに、まわりの標高の平均を計算するようにして...
どうじゃぁ...
富士山がみえた。
夕方なので、暗いのは勘弁。
メッシュが荒いのできれいな富士山にはなってないなぁ。これでも少し精度は上げたんだけど。標高データの取得パフォーマンスは、それほど悪くない感じ。展開後のファイルをキャッシュすればもっと軽くなるであろう。もしかして、res/drawbleに入っている画像データもいちいち展開しているのかも。そうやって、ローカルのキャッシュファイルが増えていくのか... 違うかな。
それに、視点の位置も標高で調整しないと、山の裏から見ている感じになってしまう。もう少ししたら、リリースできるであろう。
サイト内を検索
2012-04-25 17:29
nice!(0)
コメント(0)
Copyright Atsushi Asai Google+朝井淳
[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)
- 作者: 朝井 淳
- 出版社/メーカー: 技術評論社
- 発売日: 2015/03/03
- メディア: 単行本(ソフトカバー)
Access クエリ 徹底活用ガイド ~仕事の現場で即使える
- 作者: 朝井 淳
- 出版社/メーカー: 技術評論社
- 発売日: 2018/05/25
- メディア: 大型本
コメント 0