qgmap 開発メモ – 画面外マーカの方向

今回は画面外マーカの表示方向についてです。

今のqgmapの画面外マーカの方向は以下の図のようになっています。

 

今のqgmapの画面外マーカ
今のqgmapの画面外マーカ

 

今は、マークした位置が画面の上下左右に直線的に移動して表示できる場合は「辺」の部分にマーカを表示し、上下左右移動で表示できない場合は頂点部分に斜め方向向きのマーカを表示しています。
ですので、右辺にあるマーカの y 座標はマーカの y 座標と一致しています。

開発当初は、以下のようなものを考えていました。


開発当初のマーカの方向

画面の中心からマーカまでを直線で結んだとき、画面の端を横切った所にマーカを表示する方法です。

一応、こちらで実装したんですが、当時はまだ中央マーカ表示機能がなかったこともあり、スクロールさせたときのマーカの挙動に何となく違和感があったため、現在の方法に切り替えました。
マーカを表示させた状態でスクロールさせると違和感はないんですが。

個人的な感覚での、それぞれの特徴をまとめると以下のようになります。

  • 前者の方法
    • 中央マーカなしの時のスクロール時の挙動が自然
    • マーカとの距離がある程度離れているとき、必ずしも正確に方向を表示しない
  • 後者の方法
    • 中央マーかなしの時のスクロール時の挙動がなんとなく不自然
    • マーカとの距離が離れていても、正しい方向を指し示す。

 

一応、後者の方向で実装したパッケージも作成しましたので、どちらがいいかご意見を伺いたいと思います。

パッケージ名や実行ファイルなど名前を変更しているので、オリジナルの qgmap と共存することが可能です。
また、「.」キーでの中央マーカ表示も実装していますので、中央マーカ表示/非表示でスクロールさせてみて、画面外マーカの挙動がしっくりくるかも試していただけると幸いです。

慣れの問題だとはおもうので、どちらでも一緒かもしれませんが・・・。

qgmap alpha6 リリース

qgmap の alpha6 をリリースします。ダウンロードページからダウンロードしてください。

今回の主な修正は、以下のとおりです。

  • y様からご指摘のあった、ズームレベル 0 の画像が表示できないバグの修正
  • tera 様からご要望があった、マーカー表示機能の実装
  • Hキー or ? キーでヘルプ表示
  • 緯度経度指定ジャンプで数値の前後のスペースを許容

1つ目はダウンロードページのコメント欄に y様からご指摘があったものです。(コメントに気づかず失礼しました。)
私の勘違いでズームレベル 1が最精細だと思っていた ^^; のが原因です。(お恥ずかしい・・・)
この修正でズーム0も表示できるるようになりました。

次は tera 様からご要望があった、マーカー表示機能です。 alpha 6 の目玉機能です(?)。
Shift+0~9のキーで位置を登録できますが、「M」キーを押すと、その登録した位置にマーカーを表示することができます。

マーカー表示機能
マーカー表示機能

縮小した図では分かりにくいですが、0〜9のマーカーが表示されています。画面外に位置するマーカーは、画面の端で方向を指し示します。上記スクリーンショットでは、1, 2, 3, 4, 5, 9 のマーカーが画面外になっています。

ちょっと分かりにくいですかね?? 見づらいとか、分かりづらいとかあればコメントください。できるだけ使いやすくしたいと思います。

マーカーをすべて表示すると、若干重たくなるのと、画面がゴチャゴチャするため、個別に表示・非表示を選べるようにしました。
「M」キーを押した後、左上にツールチップが表示されている間(3秒間)に「0」〜「9」キーを押すことで、個別にON/OFFを選べます。
やはりマーカ表示数が少ないと軽くなるようです。

ただ、上記機能のためツールチップが出ている間は「0」〜「9」の位置にジャンプできないことになります。
ツールチップが消えるまで待てない場合は、「Q」キーを押すことでツールチップが表示されていても、本来の「0」〜「9」キーの挙動に戻すことができます。(ちょっとややこしいですね ^^;)

3番目は、ヘルプ表示機能です。機能が増えてきたので、自分のために作りました照れる
「H」キーまたは「?」キーでヘルプを表示できます。いずれかのキー押下か、画面のタップで消えます。
いずれスタイラスでもヘルプ表示できるように、「?」アイコンでも画面上に作ろうかなと思っています。

最後は、ヘボかった緯度経度パーサをちょっとだけいじりました。数値の前後や、カンマの前後にスペースが入っていても正しくパースできるはずです。

なりふり構わずに機能追加してきたので、そろそろソースを見直して 0.1 をリリースしたいなと思ってはいるんですが・・・。
たぶん次も alpha っぽい気がします あっかんべー

GPS買っちゃいました – uPod

地図表示ソフトを作ってる関係上、なんとなくGPSは欲しいなぁと思っていたんですが、個人的にはあまり需要はなくて、いまいち購入に踏み出せていませんでした。

BitWarpのPHSカードを持っているので、PHS基地局の位置情報程度でも、ある程度の位置は取得できるというのも踏ん切りがつかなかった理由の一つでもありました。

Yahoo!オークションとかでも探してみたんですが、結構高くて・・・。

ですが、色々探していたら、ふと4000円程度で買えるUSB GPSドングルがあることを知り、 ついつい勢いで買ってしまいました。実際は送料が1000円程度かかるので5千円くらいになったんですが。

uPodパッケージ
uPod届きました

購入先はGPSDGPSというお店。GPS機器のお店として結構有名で色々な所で「旭川」と呼ばれているようです。

さっそくWindowsマシンに繋げて動作確認。付属ソフトを起動し、uPodを窓際に置いてしばらく待つと、ちゃんと衛星を捕捉してくれました。パソコン用のGPS機器を初めて触ったので、緯度経度が表示されたときはちょっと感動してしまいました 笑顔

続いて Ubuntu で使えるか確認。uPodを刺すと自動で usb_acmドライバがロードされ、/dev/ttyACM0 が作成されました。

LinuxのGPSソフトはよくわからないので、とりあえず cat /dev/ttyACM0 で読み出してみるとNMEAフォーマットのデータが表示されたので、多分使えるのでしょう。

最後に Zaurus です。USBホストケーブルを使ってつなげてみたところ、自動で acm ドライバがロードされました。ですが、デバイスファイルは自動では作られないようです。

cat /proc/devices を確認したところ、acmドライバはメジャー番号 166 を使うようなので、

mknod /dev/ttyACM0 c 166 0 

と、自分でデバイスファイルを作った所、cat /dev/ttyACM0 で NMEA フォーマットのデータが読み出せました。
気を良くして Zagaでも /dev/ttyACM0 を使うように設定したら、問題なく使うことができました!!

ただ、付属のUSB延長ケーブルでZaurus本体からだいぶ離さないと、ちゃんと捕捉してくれませんでした。
噂でZaurus本体のノイズの影響が大きいため、アンテナを離さないと使えないと聞きましたが、本当ですね。
衛星を捕捉した状態のuPodに Zaurus を近づけると途端に受信できなくなりました。Zaurusは結構ノイジーなんですね。

地図レシピ – 国土交通省の地図を使ってみた

海岸線データを探していたら、国土交通省国土計画局のページから海岸線とか県境のデータが入手できることが分かった。
しかも、各県毎に分かれているなんて、何て使いやすいんだ!

さっそくダウンロードしてデータのフォーマットをみてみると、XMLらしくなんか良く分かんない(^^;
というか、北海道のXMLデータが225MBってデカすぎ! XMLだからかなり冗長ということもあり、ZIP圧縮のファイルは6.2MB程度までちっちゃくなるんだけど、よくこんなデカいデータをメンテできるなぁ。

いちいちXMLをパースなんてやってられないので、正規表現で緯度経度らしいデータを抽出して、地図を描いてみた。


国土交通省のデータで地図を描いてみた
注意!リンク先は大きなサイズになっています(2560×2560 63kB)

すごい!かなり細かい!! 繋がった線だけでも8000本以上あったので、データのポイント数は数万以上なのだろう。かなり詳細でビックリ。

しかも、塗りつぶしてGoogleMapと重ね合わせたらピッタリ!! さすが政府のデータは正確だ。

国土交通省のデータによる地図
国土交通省の地図データによる海岸線の抽出

あまりにピッタリすぎでちょっとビビった。こんな詳細で正確なデータが無料でダウンロードできるなんてすごい世の中になったもんだ。すばらしい!

これでも十分海岸線ピッタリなんだけど、一応念のため、1ドット分太らせて地図取得のデータに使おう。

ただ、完全に閉じた線データになっていなくて、河口や県境が決まっていない部分は開いてしまっているので、単純に陸と海を塗りわけようとすると、以下のようにうまくいかない。以下は陸地を灰色、海を黒く塗り分けた例。


海岸線が切れていて陸地も黒に!

この辺は画像をGIMP等で手修正しようかな。これくらいならそれほど手間じゃないし。
とりあえず、これで各県の陸地部分のマスクデータは作れそうだ。

あとは、そのマスクデータから GM_Lite の down_img のデータに置き換えればOK。
でも、できるだけレシピの行数は短くしたいから、範囲指定を効率よく使って行数減らさないと。

down_map("10", "57", "22");
down_map("10", "57", "23");
down_map("10", "58", "22");
down_map("10", "58", "23");

down_map("10", "57:58", "22:23");

こんな感じの変換をしないと。
特に詳細地図になると、地図1枚を1行にしていたらコピペっていうレベルじゃなくなってしまいそうだし (^^;
このアルゴリズムがまた大変そうだ。うーん。

このページの地図データは、「国土数値情報 行政区域データ 2007年10月版 国土交通省」のデータを元に作成しています。

地図レシピ – DCLライブラリの地図を使ってみた

うーん。うまくいかないです。

試しにDCLライブラリの日本地図データを使って地図を描いてみた。

DCLライブラリの地図
DCLライブラリのデータで描いた日本地図
注意! リンク先はかなり大きいサイズです!! (8704×9728 150kB)

この結果をみるとかなりいけてるように見えるけど、GoogleMapと重ねると結構ずれてしまう。

上記地図とGoogleMapを重ね合わせる
上記地図とGoogleMapを重ね合わせた結果

若干色が黒い部分がDCLライブラリで描いた海岸線。

地図のサイズが zoom=10 のサイズなので、この画像の1ドットが zoom=2 の地図1枚に相当する。この地図で数ドットずれているだけで zoom=2 では数枚分(ザウルスでは1画面分以上)画像が欠けたり余分だったりするわけだ。

うーん。ちょっとズレすぎだなぁ。余分にダウンロードするのは百歩譲っていいとしても、欠落するのはまずいな。

もっと精度の高いデータが必要だなぁ。