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画面分以上)画像が欠けたり余分だったりするわけだ。

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

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