qgmap-0.2.4 リリース

qgmap の 0.2.4 をリリースします。 →ダウンロードページ

0.2.3 からの変更点は以下のとおりです。

  • メモリ使用量の削減
  • ズーム In/Out で位置がずれないようにした
  • POI検索でキーワード指定をしない時は全てを表示
  • POI検索で検索対象指定が効いていなかったバグを修正
  • POI検索時、件数が200件以上だった場合は最寄りの200件程度を表示 (周辺検索)
  • POI検索中にプログレス表示を追加
  • POI検索ダイアログでフォーカスの移動に上下キーを使えるようにした
  • ’S’ キーでPOI検索を起動
  • SL-A300で、センターキーとOKキーに Zoom In/Out を割り当て

今回の修正は sugarware さんのご意見による改善が多いです。ご意見ありがとうございました。

POI 検索ダイアログでの挙動が結構変わっているので、改めて使い方を説明したいと思います。

POI検索ダイアログ
POI検索ダイアログ

まず、検索するには「検索:」のところにキーワードを入れて「検索」ボタンか、OKキーを押します。キーワードを入れなかった場合は、全てを表示します。

「検索:」の入力欄にフォーカスがある状態で↓/↑キーを押すと、フォーカスを「対象:」/「検索結果」に移動することができます。

「対象:」 では検索する対象を選びます。チェックマークをタップするか、SPACEキー、SL-A300ならセンターキーでチェックをトグルすることができます。ここでOKキーを押しても検索することが可能です。

検索対象が複数ある場合は上下キーで対象を選びますが、一番上の項目を選んでる状態でさらに上を押すと「検索:」の入力欄にフォーカスが移動します。逆に、一番下の項目でさらに下キーを押すと検索結果にフォーカスが移動します。

検索結果も「対象:」のリストと同様、一番上の項目で上キーを押したり、一番下の項目で下キーを押すことで、それぞれ「対象:」、「検索:」 にフォーカスを移動できます。

検索結果を選んでOKキーを押すと、そのPOIの場所へジャンプします。

フォーカスが当たっている部分毎に動作をまとめると以下の様になります。

「検索:」の入力欄にフォーカス

OKキー … 検索を実行
上キー … 検索結果へフォーカスを移動
下キー … 「対象:」リストへフォーカスを移動

「対象:」のリストにフォーカス

OKキー … 検索を実行
スペースキー … チェックをトグル   (SL-A300ではセンターキーも)
上キー … リストの選択の移動。一番上の項目では「検索:」の入力欄へフォーカスを移動
下キー … リストの選択の移動。一番下の項目では「検索結果」リストへフォーカスを移動

「検索結果」のリストにフォーカス

OKキー … 選択しているPOIの位置へジャンプ
上キー … リストの選択の移動。一番上の項目では「対象:」リストへフォーカスを移動
下キー … リストの選択の移動。一番下の項目では「検索:」の入力欄へフォーカスを移動

文章にすると分かりにくいかもしれませんが、使ってみると直感的なフォーカス移動ですぐ馴染めると思います。

 

また、0.2.3 では 1000 件を越える検索はエラーとして検索できませんでしたが、0.2.4 からは地図の中心から近い順に 200 件程度を表示するようになっています。 1000件では表示するまでに待つ時間が長いので 200 件に縮小しました。さらに、待ち時間を紛らすためにプログレス表示も実装しました。

検索数が多い時の警告表示
検索結果が多い時の警告表示

これで最寄り検索ができるようになりました。POIデータとしては全国区のデータを入れておいて、近くのPOIだけ調べるということが可能になりました。

 

あと大きな変更は、キー割り当ての変更です。

POI検索はキーに割り当てられていなかったのですが、’S’キーに割り当てました。

また、SL-A300 では、センターキーと OK キーで Zoom In/Out ができるようになりました。 これで SL-A300 では地図の閲覧だけなら物理キーだけでできるようになり、使い勝手がよくなったと思います。

qgmap-0.2.3 リリース

先日の 2 周年記念のブログエントリには多くの方から暖かい言葉をいただきました!ありがとうございました。

「ぼくがんばったよ!ほめてほめて!」みたいな小学生レベルの自己満エントリで今思うとちょっと恥ずかしいですが、大人な皆様が空気を読んで褒めてくださったので(笑)、読みながら照れ照れニマニマしてしまいました笑顔

皆様からご褒美をいただいたので、お返しといっては何ですが、qgmap の 0.2.3 をリリースします。  →ダウンロードページ

0.2.3 での修正点は以下のとおりです。

  • SL-A300に対応
  • POI検索結果に現在地からの距離を追加

今回はSL-A300 対応がメインです。SL-A300をお持ちでない方にはほとんど変化ありません (^^;

SL-A300対応はダイアログのサイズを固定値で設定していたので思いのほか手間がかかってしまいました。

qgmap が SL-A300 に対応!!
SL-A300に対応!!

ほとんどの機能は SL-C シリーズと同じように使えますが、一部機能は動かないものもあると思います。特に GPS, PHS 関係は動かない可能性が高いです。

スライダとか SL-A300 では操作しづらいので UI はまだまだ改良の余地ありですね。ブースカさんのアイデアの画面下部に大きなボタンを配置するというのもまだ手をつけられていません。

また、SL-A300で使用する際の注意点が3つあります。

  1. iso や rom イメージを使う場合はモジュールのインストールが必要
  2. 他のアプリの高速起動を切ること 
  3. SDカードを挿入していること

まず、SL-A300 で iso や rom イメージを使う場合は、tera さんの実用工房このエントリから miscfs-modules_a300_arm.ipk をダウンロードしてインストールする必要があります。

SL-Cシリーズでは iso はカーネルに組み込まれているんですが、SL-A300は組み込まれていないため、後からインストールする必要があります。

2つ目は qgmap が結構メモリ食いなため、他のアプリの高速起動が有効になっていると、「メモリが足りません」といったメッセージが表示されてしまいます。一応、地図画像のキャッシュサイズなどを減らしたのですが、付け焼き刃で全然効果がありませんでした。省メモリ化は今後の課題ですね。

3つ目はPOIのDBファイルを /mnt/card/qgmap-poi.db 決め打ちで置いてしまっているため、SDカードが必須になっています。SL-A300 はバックパックをつけない限り SD カードしか地図を置く場所がないので、大丈夫だとは思いますが、SL-C シリーズとは挙動が違うところです。

 

SL-A300対応の他のもう1つの変更点は、POIの検索結果に現在地からの距離を表示する機能を追加したことです。

POI検索の結果に距離を追加
現在地からの距離を表示

せっかくなので SL-A300 でスクリーンショットをとりました笑顔

緯度経度から2点間の距離を求めるのエントリで書いた公式で距離を求めています。また、初期状態で距離の近い順に表示されるようになっています。

矢印は「地図上の方向」を示しています。「方角」を示しているわけではないので注意してください。例えば、日本から真東に進むと赤道に交わり、いずれ南半球に到達しますが、上記検索結果の真東は同一緯度を表します。まぁ、qgmap を持って太平洋を横断とかしない限り気にする必要はありませんがあっかんべー

 

いままで一応メモリ使用量を気にして開発してきたんですが、 SL-A300 は SL-Cシリーズよりもさらに空きメモリが少ないんで、かなりキツキツギリギリですね。メモリ関係を見直す必要がありますね。

ただ、qgmap on SL-A300 は SL-C シリーズよりも表示が早く、キビキビ動作するので気持ちいいです。画面がQVGAと 1/4 なのと、回転処理がないので描画の負担が軽いためでしょう。このままでは私の SL-A300 は本当に地図専用デバイスになってしまいそうです笑う

緯度経度から2点間の距離を求める

久しぶりに開発途中のネタです。

POI の最寄検索や、検索結果表示で現在値からの距離を表示させたくて、任意2点の緯度経度から距離を計算する方法を調べてみました。

地球が球体なら何となく頭をひねれば分かるかもしれませんが、楕円体の緯度経度から距離を求めるのは私には見当もつきません。

ということでググってみると、楕円体を考慮していて、世界中の緯度経度で通用しそうな計算式が2つ見つかりました。

何となく航海で使用する下の公式のほうが正確な気はしますが、上のヒュベニの公式の方が演算が簡単そうな気がします。

また、qgmapでは多少の誤差も許容できるので数%程度(?)の精度で十分です。そこで近似式も候補に入れてみます。

これらの計算式がどの程度の正確さなのか、ランダムに選んだ緯度経度で計算して誤差と計算速度を検証してみました。

とはいえ、検証しようにも正解がわからないので、とりあえず国土地理院のサイトで2点間の距離を計算できるようですので、そのサイトとの誤差を調べました。つまり、実際に正確かどうかの検証ではなくて、国土地理院のサイトの公式に近いかどうかの検証です (^^;

で、結果は以下のとおり。

アルゴリズムの違いによる国土地理院サイトとの誤差
アルゴリズムの違いによる国土地理院サイトとの誤差

縦軸は国土地理院サイトで計算した距離(a)と、公式で計算した値(b)の誤差の割合(|a-b|/a) で、横軸が2点間の距離を示しています。

さすが航海算法と呼ばれるだけありLambert-Andoyerの公式は距離によらず 10^-5 以下の誤差率になっています。

ヒュベニの公式は50km以下ではLambert-Andoyerの公式と同等ですが、距離が離れるほど誤差が大きくなっていくようです。

簡易近似式は1000km以下では誤差0.1%前後で、1000kmを越えるとヒュベニの公式と同様誤差が増えていきます。

また、それぞれの公式を Zaurus で計算させた時の時間も測定しました。ちなみに、スペシャルカーネルを使っているので、浮動小数演算が高速化される FastFPE パッチが適用されています。

測地線航海算法のHPにはLambert-Andoyer と式的には同じですが、計算量が少し少ない小野の公式というものも載っていたので、こちらも計測しました。

各公式の計算時間

公式
1万回の計算時間
近似式 0.2838 sec
ヒュベニの公式  0.5043 sec
Lambert-Andoyerの公式  2.8202 sec
小野の公式  2.6518 sec

やはり近似式は演算量が少ないので高速ですね。1万回の計算が0.3秒なら充分実用的です。

ヒュベニの公式は近似式に比べ 1.8倍、Lambert-Andoyerの公式が10倍、小野の公式が9.5倍の時間がかかりました。

やはり精度が高い下の2つの公式は三角関数の演算などが多いため遅いですね。ただ、同じ結果が得られる小野の公式は少し早いようです。

結論

近似式が思いのほか精度が高かったので近似式を使おうと思います。

もともと精度も1%程度あれば十分かなと思っていたので、qgmap には充分ですね。

開発は案外こういう自己満足的な調査が楽しかったりするんですよねー。笑顔