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

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

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

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

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

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

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

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

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

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


GM_Lite の地図レシピ

qgmapの開発に平行して、GM_Liteで地図をダウンロードする時のレシピを作れないかなと考え中。

ネットを徘徊していると、自分で範囲を指定して地図ダウンロードしてるひとを見かけないので、東京都の地図はこれをコピペすればOKみたいに、必要な地図を選んで down_img.pl にコピペして実行できるようにすると便利かなと。

で、とりあえず東京都を各ズームレベル毎に切り出してみたんだけど、これが結構手間叫ぶ。広域の間はいいけど、詳細地図になると県境を追いかけるのが面倒。これを全県分手作業でやると思うと気が遠くなる・・・。

大雑把に切り出してしまえばいいんだけど、そうすると詳細地図になるにしたがって余分な領域もダウンロードしてしまうわけで、貧乏性な私は少しでも地図データを小さくしたいと思ってしまう。

なんとか自動で切り出せないかなぁ。日本地図の大陸部分のマスクデータがあれば(さらに欲を言えば各県のマスクデータがあれば)その部分の地図のみダウンロードすればいいんだけど、そんなマニアックなものがそうそう都合良く転がっているワケはない。

で、どうにかして、日本地図の輪郭のみの白紙地図みたいなものはないかと色々探してみると、 DCLライブラリに日本の海岸線と県境のデータが入っているらしいのと、カビパン男と私 – 日本の白地図にSVG形式で白地図データがあるのを発見。

DCLライブラリの方は緯度・経度のデータになっているようなので、自分でゴニョゴニョするには都合が良さそうだ。

日本の白地図の方は国土地理院のデータ(?)を元にSVGで書かれていて、緯度経度からSVG上への変換式も書かれている。しかも、各県毎にオブジェクトが分かれているらしい。これは使いやすそうだ。でもSVGって使ったことないんだよなぁ。
あと、元はフリーハンドで書き写したものらしく、ズレや歪みが無いかが心配かな。

どっちのデータもGoogleMapの地図と重ね合わせてズレがないか確認しないといけないな。

こんなことしてる間に1県ずつ手作業で切り出した方が早かったりして・・・あっかんべー


ザウルスでGoogleMap!?

最近周りに iPhone を持つ人がちらほら出てきました。ガジェットとしては非常に気になるのですが、携帯として考えるとちょっと機能不足なので、「欲しい!」とは思いつつも「買いたい!」までの勢いはありません。

ちょっといじらせて貰うと、やっぱりブラウザによるHP閲覧とGoogleMapが光ります。3G回線使っていつでもどこでもWebブラウズできるのは魅力的ですね。

私はZaurus (SL-C1000)を持っており、bitWarp回線を契約しているので、重いながらも一応いつでもどこでもWebブラウズはできますが、純正ZaurusOS(Qt/E)ではGoogleMapが動かないんですよね。

前に pdaXrom の Firefox でも試してみましたが、確かスクロールが動かなかった気がします。

GoogleMapから地図データさえ取り出せればZaurusでも表示できそうだなぁと、GoogleMapの地図をダウンロードするツールを探していたら、そのものずばりを作っている人がいました。

実用工房さんGM_Liteです。

JavaScriptを駆使してZaurusのOpera 7でもGoogleMapさながらの操作が可能になります。うーん。すごい。

でも、非力なZaurusでしかもブラウザ上のJavaScriptで組まれているため、ちょっと重いのが難点・・。あと、個人的には、指定の縮尺にない画像は、1つ2つ広域な画像を拡大して使ってほしいなぁ。地図画像のファイルサイズも馬鹿にできないので。

ということで拡大するバージョンを作ってみました。

画像がない場合を判定するために、img タグの onError ハンドラを使って実現しました。画像の読み込みに失敗すると、ハンドラが動いて1つ広域の画像を取得する・・・のですが、Opera 7 では動きませんでした (T-T)

Opera 7 には onError ハンドラがサポートされていないようでした。PCのFirefoxでは動いたのに・・・。

(ここまでが前振り。長っ!)

うー。ちょっとくやしいから、Qt/Eのネイティブアプリでつくってやる!

と、Web上で宣言することで、自分のモチベーションをあげてみることにしました。

Qt/E は example をコンパイルするくらいしかやったことありません。

C++はちょっと読めるけど、書けません。(CはOK)

まぁ、ヘタレなので途中で投げ出すかもしれませんが、勉強がてらやってみようかなと。

気長にね。