qgmapのダウンロードページを作りました。Topから Download でも行けます。
ちまちま作っていっているため、使い方や機能などがいろんなページに散乱してしまっている状態でしたので、1つのページにまとめました。あと、最新版がどこか探すのもたい編かなと思いまして。
使い方も今のところ初期リリース時のコピペですが、徐々に整備していこうと思います。
zaurus で動作する Google Maps の地図ビューワです。
GM_Lite/gmlMgrでダウンロードした地図データを zaurus 上で表示します。
GPSやPHSによる現在地取得に対応しています。
GPL v2です。(v2 なのは何となく)
SL-A300, SL-Cシリーズです。SL-A300, C760, C1000 で確認しています。
基本的にNMEAフォーマットのログが取得できれば使用できるはずです。
以下に動作確認したもの、動作報告を頂いた機器を示します。
動作報告を頂いた皆様、この場を借りて御礼申し上げます。
上記ファイルから ipkg ファイルをダウンロードし、「ソフトウェアの追加と削除」からインストールしてください。
本体、外部メディアどちらでもインストール可能です。
また、SL-A300 で iso, romfs イメージを使用するには別途カーネルモジュールが必要になります。こちらのブログエントリを参照ください。
注意! Google Maps の地図データをダウンロードして使用しますが、このような使い方は Google Maps の通常の使い方ではありませんので、個人の責任で行ってください。
実用工房さんにて、公開されている GM_Lite か、wasteさんが公開されている GmlMgr を使って地図をダウンロードします。
地図のダウンロード方法等は詳しく書かれている方が多くいらっしゃいますので、Google で検索してみてください。
また、地図レシピにて各都道府県のダウンロードスクリプトを配布していますので、合わせてご使用ください。
GM_LiteやGmlMgrでは、メディアの使用容量を少なくするため、地図画像を1つにまとめて「イメージ化」することが可能です。qgmap ではイメージ化された地図にも対応しています。
qgmap をインストールすると、「アプリケーション」タブに以下のような qgmap アイコンが追加されます。
qgmapアイコン
このアイコンをタップすると qgmap が起動します。
初めて起動すると以下のような画面が表示されます。
初回起動時は地図画像のパスが設定されていないので、上記のように地図が表示されません。
設定するために、左上のアイコンをクリックし、 「Map Path」 を選択します。
すると、地図のパスを設定するダイアログが表示されます。
地図を追加するには「追加」を押下し、イメージファイル、もしくは imgs ディレクトリを指定してください。
OKを押すと地図が表示されます。
これで初期設定は完了です。
タッチパネル操作で地図をドラッグでき、上下左右にスクロールさせることができます。
ダブルタップで、タップした位置にセンタリングします。
キーバインドは以下のようになっています。
緯度・経度指定では、緯度,経度 の順に指定します。
度の表記は、”度.分.秒” 表記と、”度.小数部” 表記が使えます。
“.” の数で判断していますので、”度.分.秒”表記の場合は、必ず秒まで入力してください。
「SHIFT」+「0」 で保存した位置はアプリ起動時の初期表示位置になります。
良く使う場所は0に登録しておくと便利でしょう。
「M」キーのマーカー表示機能はすべてのマーカを表示するとスクロールが重くなりますので、個別表示で最低限表示することをおすすめします。
「SHIFT」+「M」キーでの外部マーカ表示モード切り替えについては、動作させてみた方がわかりやすいのですが、地図的にマーカが画面のどちらにあるかを表すモードと、画面の中心からマーカの方向を忠実に指し示すモードがあります。
前者は画面を地図的に見るときに使いやすく、後者は地図の中心に自分がいると仮定したときに、目的地がどちらかを見るときに使いやすいと思います。
「D」キーでフリーハンド範囲指定モードになります。この機能は qgmap で地図上に取得する範囲を描き、ズームレベルを指定すると、GM_Lite で地図ダウンロードする際のダウンロード範囲指定コードを出力する機能です。
あらかじめ広域地図のみダウンロードして qgmap に入れておき、詳細地図は欲しい領域だけピンポイントでダウンロードしたいときに便利です。
フリーハンド範囲指定モードの詳細は2008/10/21のブログを参照ください。
「P」キーでWILLCOM系のPHSカードで現在位置を取得します。 PHSアンテナの位置を取得するので現在位置と大きく変わる可能性があります。参考程度にお考えください。
メニューから「Gamma」を選択することで、ガンマ補正値を設定することができます。zaurus の液晶は白飛びしやすいので、ガンマ補正することで視認性が高まります。
「G」キーでGPSから位置情報を取得することができます、詳細はブログの2009/1/24のエントリを参照ください。
未実装
終わったもの
ゆっくり地道に改造していきます。
一応お約束で・・・^^;
無いとは思いますが、本ソフトウェアを使って起こった一切の損害の責任を作者は負いかねます。
本ソフトウェアを使用する際は At your own risk でお願いします。
お知らせ:新しいバージョンが出ています。最新バージョンはダウンロードページへ
qgmap の alpha4 をリリースします。
変更点は、ここのところの開発メモに書いていた縮尺表示です。今回はあまり革新的な変更ではありません。
画面の左下に縮尺を表示するようになりました。
苦労して導いた式を使って計算しているので、表示している緯度に合わせて縮尺が変化します。
ここのところ、ちょっとずつqgmapのまわりに動きが出てきて、Zetaの作者のHB1様や、GM_Liteの作者のtera様などからもコメントをいただき、さらに、何気なく qgmapでググってみたところ、 2ch でも好意的に取り上げられていて、ちょっと嬉し恥ずかしといった半面、身が引き締まる思いです。
ゆっくりですが、できるだけ使える、使いやすいものを目指して開発していきますので、長い目で見守ってください。。
使いやすいと言う意味では、そろそろ ダウンロードページとか、GM_Liteでの地図のダウンロードの仕方とかを解説したページを作った方がいいですね。 2ch でも使い方が分からず困っていた方もいらっしゃいましたので。
地道にいろいろ整備していきます。
知恵熱にやられながらも、ついに任意の緯度の緯線1周の長さを求めることができた!
高校生の自分ならもっと早く解けたんだろうな・・・。時間は残酷だぜフッ
結果から言うと、緯度θの半径は、こうなった。
x = a2cosθ/√(a2+(b2-a2)sin2θ)
aは地球の長半径(中心と赤道の距離)、bは短半径(中心と北極・南極点の距離)を表している。
半径がわかれば2πr で円周の長さ=緯線の長さがわかるので、後は地球1周分の地図のドット数で割れば、1ドット当たりの距離が求まる!これで縮尺表示の目処が立った。
せっかく錆付いた頭をフル回転させて導いたので、記念に過程も晒しておこう。以下は自己満の世界なので読まなくていいですよ。
楕円の式は以下のようになる。
ここでも、aは地球の長半径、bは短半径を表す。
まずこの楕円の法線ベクトルを求める。法線ベクトルvは以下の式で計算できる。
楕円の方程式より法線ベクトルを求める。
方向が重要で、長さはどうでもいいので、扱いやすいように、a2b2/2をかける。
この法線ベクトルを自身の長さで割って単位ベクトル化すると、
v‘=(xb2/|v|, ya2/|v|)
となる。ただし、
|v| =√(x2b4+y2a4)
である。
この単位法線ベクトルと赤道面がなす角度が緯度θなので、
上の2つの式と、楕円の式①を連立方程式として、x,y を θの式で表す。
式①を変形
x2b2+y2a2 = a2b2
y2a2 = a2b2– x2b2 = b2(a2– x2) ・・・②
sinθの式を両辺2乗する。
式②を代入
x2について整理すると、
ここで |v|2 を求める。
式②を代入
整理すると
|v| 2=b2(x2(b2-a2)+a4)
これを式③に代入
x2について整理すると
1-sin2θ = cos2θなので、
x2= a4cos2θ/(a2+(b2-a2)sin2θ)
平方根を取って
x = a2cosθ/√(a2+(b2-a2)sin2θ)
同様にyも求めて、θを0~πまで回してグラフを書いたところ、楕円の図と一致したので、たぶんあってるのでしょう。
ふぅ。
今度は地図表示に必要な縮尺の表示を考える。
↑こういうやつ
最初は単純にこのズームレベルなら、この縮尺画像みたいに、ズームレベル分画像用意しとけばいいだろうと思っていたけど、実は真面目にやると大変なことが分かった。
というのも、Google Maps は メルカトル図法(あぁ、懐かしい響き ^^;) なので、赤道上の地図の1ドットと、北極・南極に近い所の地図の1ドットは、縮尺が異なるわけだ。極に近い方が拡大されて描画されているので。
ということは、表示している緯度によって、縮尺表示も柔軟に変化させる必要が出てくると。
しかも、厳密にやるなら、標高も関わってくるのか。同じ緯度1度でも、標高が高い方が距離が長いはず。まぁ、これは標高0mで考えればいいか。
さらにややこしいのは、地球が楕円体だということ。完全な球なら、まだ計算しやすいんだけどなぁ。
Google Maps では緯度経度には世界測地系が使われている。世界測地系は GRS80 楕円体とよばれる、国際的な標準として使われている(?) 楕円体を使った測地系らしい。GPS では WGS84 楕円体を使っているらしいが、ほとんど同じと見ていいらしい。
高校以来の楕円の方程式とかをいろいろいじっていると、どんどんワケが分からなくなってくる
色々考えてるうちに、緯度ってなんだ?と、素朴な疑問が・・・。
個人的には、楕円の中心(上図のO)と赤道(R)と、任意の地点(P)がなす角PORの角度θが緯度だと思っていた。
でも、地表上で星や太陽の高さから求まる緯度は、水平線と、地軸のなす角度φとなるはず。
あ、でも、天体の角度から緯度を求める際に水平器で水平を取るだろうから、そうすると、水平線が基準ではなく、重力の方向に対して水平が基準になるから、天体を使ってもθが求まるのか?
混乱しながらいろいろなページを見てみると、どうやらφが緯度らしい。ここのページの図がわかりやすかった。楕円体の法線(地表から垂直に出た線)と、赤道面がなす角度が緯度らしい。
これらを踏まえて、緯度から1ドットの距離(縮尺)を求めると・・・ って、想像しただけで頭から湯気が出てくる ^^;
うーん。任意の緯度の楕円体上1周の長さが計算できればいいんだけどなぁ。