Dropbox

KML data from Shanghai to Huangshan

夏休みの家族旅行で安徽省の黄山に行ってきました。普通は飛行機とか利用するくらいの距離なのですが、いわゆる高速バスを利用したので長距離のGPSログ取りに挑戦してみました。私の使っているのはBluetoothでPDA、PCもしくは携帯電話と接続しないと何も出来ない単機能なGPSデバイスです。そこでNOKIA E61にSports Trackerというプログラムを導入してログを取ることにしました。移動距離506Km、時間にして9時間20分にわたるログ取りでした。さすがにNOKIA E61です見事に最後までログを取ってくれました。

因みに利用した高速バスは上海から安徽省に帰省する人が主に利用するバスで高速道路を降りてからは山間の集落を細かく回っていきます(それに加えローカルなバスに乗り継いだため到着まで9時間以上もかかっています)。感心したのは山に囲まれてテレビも観られないような集落を走っている時でも確認した限り携帯電話(China Mobile, China Unicomともに)が圏外にならずPush Mailで、ばしばしメールが届いていたことです。

Sports Tracker altitude - Huangshan到着の翌日、朝早く起きて黄山に登りました。これもログ取りを行ったのですが、何故か途中で切れてしまいました。Nokia Sports Trackerは、もともと様々なトレーニングに役立つ情報を提供するためのプログラムです。左のグラフはその中の一つで移動距離と高度の関係を表しています。海抜500m付近のホテルをバスで出発し海抜1000m弱の所まで登ります。その後直線的に海抜1700m位までグラフが上がっているのはロープウェイです。それからの上り下りは自らの足による物です 8) 、これが延々と続くのですが記録が途切れてしまっていて残念です。疲労の程度や筋肉痛はたいしたことはなかったのですが、最後は下るときに膝の関節が泣いていました(年かなぁ)。

Sports Tracker自体は良くできていますし、ログを取りながら様々な情報をリアルタイムで提供してくれるので面白いです。しかしながら確実に簡単にログを取るためにはTJさんreveilさんが紹介されているようなGPS単体でログの取れる物が欲しくなりますね。

Google Maps Chinaの測地系は中国独自のものらしくMGMapsにGPSを連動させても使い物にならないということを以前書きました。この問題についてはMGMapsのフォーラムでも取り上げられていて、オフセット付きで地図を取得するアイデアなどが出されていました。

実際のところ、測地系の違いによる座標の変換は単純にオフセットを加えるというだけでは正確には行えません。 どこからか変換のための公式を探してきてMGMapsに組み込んでもらおうかと思っていた矢先にGoogle Mapsの使用差し止め問題が起こりました。ということで公式を探す前にアイデアは頓挫しました。

もう一度、オフセットについて考えてみました。広い中国のどこでも正確に座標を変換するにはオフセットでは問題がありますが、一都市の中であれば固定したオフセットでも実用上問題ないでしょう。よってローカルマップの作成ならば都市ごとにオフセット値を自分で調節しながら取得していけば大丈夫だと思われます。しかしながら手作業が入るので一般的な手順に落とすことが出来ないですしGoogle Maps使用差し止め問題もありますので妄想の域を脱しませんね。 😛

中国移動通信のナビソフト TeleNav を試す

TeleNav Opening ScreenTeleNav Map

Read the rest of this entry

Mobile GMapsフォーラムによるとMGMaps作者のCristian StrengさんのところにGoogleよりMobile GMapsでGoogle Mapsを使わないように要請があったそうです。次のバージョンからGoogle Mapsの選択は出来なくなるそうです。

ローカルマップについては今までの物は無駄にはならないみたいです。MapTileCacher, MapTileFEさえあれば大丈夫ってことかな。

Googl Maps China and Google Satellite

以前、オンラインモードでMGMapsを上海で試した時にGPSの位置情報と中国版Google Mapsにズレがあるかもと書きました。

今回オフラインマップ搭載のMGMapsで試してみると、やはりズレています。検証のためにGoogleの衛星写真と比較してみると見事にズレていました。どうも測地系問題があるようです。Google MapsはGPSで使用されている世界測地系WGS84に合わせて作られています。中国版Google Mapsは、どうも中国ローカルな基準になっているように見えます。Google Mapsが中国と中国以外に分けられているのは地政学的な意味合いが濃いのだと思っていましたが、ローカルな測地系を採用するためだったのかも知れませんね。

調べてみると中国にはBJ-54という測地系があるようです。これが中国版Google Mapsに使われているのかどうかは確証はありませんが、文献によるとBJ-54とWGS84の間のズレは80mから120mにおよぶということなので検証の結果と一致するように思います。

せっかくMGMapsに中国地図がありGPSレシーバーも持っているのに衛星写真と地図とを併用しないと正確な位置が分からないのは情けない話しです。何か解決方法がないか調査した上でMGMapsフォーラムに報告しようと思います。やみくもに地図取得のURLにdatum=wgs84などと書き加えてみましたがダメでした。かなりな難問のような感じです。 🙁

MGMapsのローカルマップを使用すると大量の小さな画像ファイル(Map Tiles)をメモリーカードに持つことになります(jar等にまとめることも検討中のようです)。それがデバイスの画像ギャラリーから見えてしまう、あるいはデバイスが画像ファイルとしてカタログしてしまうという問題はMGMapsのフォーラムでも早くから提起されていました。ファイル数が少なければ良いのですが時には何万というファイル数になるので影響は大きいです。

MGMapsのローカルマップ対応版がα2に成ったときに画像ファイルの拡張子がmgmに変更されたのは、画像ファイルに見せないようにするための対策でした。これは一部のデバイスには有効なのかもしれませんが、私のNOKIA E61は画像ファイルであると判断してしまいました。

対策は単純です、Windows PCなどを使用してMGMapsCacheフォルダーに隠し属性を設定するとE61のギャラリーからは見えなくなります。ただし、一度ギャラリーにカタログされたファイルは隠し属性設定後も見えてしまいます。忙しくて 🙁 、解決方法を確定できていません。たしかMGMapsCacheを見えている状態だか隠しの状態だかで別の名前に変更しギャラリーに一度見せてから隠し属性を持ったMGMapsCacheにしたように思います。詰めの甘い報告で申し訳ないです。

追記) ギャラリーのカタログの消し方をコメントにてJackOneさんに教えていただきました。
一度でもギャラリーが画像ファイルとして認識すると隠し属性を設定しても画像ファイル一覧に現れてしまいます。これを解決するためには、
– E:/System/data/mg2/DB/Eフォルダを削除
– もしローカルマップのフォルダ内に_PAlbTNフォルダが出来ていたらそれも削除
を実行します。

kml2map – KMLファイルから MGMaps のローカルマップを作成

MGMapsのフォーラムにてKMLファイルからローカルマップ(Stored Map)が作れたらいいなぁという書き込みがありました。それに応えて作成したのがkml2map.plです。このプログラムはKMLファイルを読み込みMapTileFE.plに与える地図定義を出力します。

KMLファイルはGoogle EarthやGoogleマップにおける地理データの規格です。ここで取り扱うKMLファイルはGPSのログとして移動の軌跡を記録した物です。その中のLineStringタグ内にある経緯度の情報を分析し、軌跡が含まれる範囲のローカルマップを作成します(実際に地図を作成するのはMapTileFE.plですが)。

プログラムはMGMapsフォーラムのPost .map file hereトピックの最初のメッセージにあります。

パラメーターとしてKMLファイル名を与えると画面に地図定義を出力します。実際にMapTileFEに与えるためにはリダイレクトでファイルにしないといけません。オプションにより地図の種類(GoogleMapのようなもの)、軌跡の周りに取るマージンなどを変更出来ます。詳しくはプログラムに添付されているreadme.txtをご覧ください。

MGMaps ローカルマップ(Stored Map)で中国の地図を見ることが出来るようになりました。実際にはMGMaps本体は最初から対応していたようです。地図を取得するためのMapTileCacher v1.11にてGoogleChinaの指定が出来るようになったものです。

そこで蘇州、杭州の詳細地図を含む上海地区の地図定義ファイルを作りMGMapsフォーラムのPost .map file hereトピックにアップロードしました。

MGMapsローカルマップ(Stored Maps)を使用すると、マップタイルと呼ばれる地図ファイルが大量に必要となります。そのファイルの一つ一つが数KBと比較的小さなファイルであるため断片化により実際のファイルサイズ以上のエリアを消費してしまいます。

この問題は既にMGMapsのフォーラムで話し合われています。断片化を防ぐためには大きなファイルにzip やjarでまとめるなどの方法が提案されていますが、技術的な問題もありどうなるかは判明していません。

そこで取りあえずの対策として、もしメモリーカードがFAT16でフォーマットされている場合はFAT32に変更しクラスターサイズを小さくして断片化の影響を軽減する方法があります。

私の場合Nokia E61に2GBのMiniSDカードを入れています。このカードは(多分)購入してきたままの状態で使用していましたのでFAT16になっています。この時Mac OS Xのファインダーでボリューム情報を見ると空き容量849MB、使用状況1.06GBとなっていました。

このMiniSDカードの中身をPC上に移動し、FAT32でフォーマットし直しました。その後PC上に移動したデータを書き戻してみたら、空き容量1.21GB、使用状況692.1MBとなりました。なんと300MBほども節約できています。地図以外にも小さなファイルは沢山入っているし最初からFAT32にしておくべきだったなぁと思います。これからはカードを最初にFAT32でフォーマットするようにしよう。

MGMapsのオフラインマップ作成に挑戦されている方は、経緯度を調べて、キーボードから何度も同じ経緯度を入力しなければならないのに退屈している頃と思います。将来のMap作成ツールは何かしら改善があるものと期待しますが、とりあえず現在の物を補う形の補助ツールを作成しましたのでお知らせします。

このツールではマップ定義ファイルというものを使用することにより経緯度を何度も入力するという手間から解放されます。また定義ファイルをユーザー間で交換することにより、他の人が作った地図の定義を再利用できるという利点もあります(交換の場が必要ですね)。実際、ツールに添付するサンプルとして多少ましな物を作るのに、ツールをプログラムする時間より多くの時間を費やしました。それくらい面倒な仕事ですし、ユーザー全員が苦労する必要は無いと思います。

マップ定義ファイルをポストするためのトピック「Post .map files here」がMGMapsのフォーラムで立ち上がりました。MGMapsの作者、ほんとうに対応が早いです。(2007/06/17 00:00更新)

このツールにはTokyoとHongKongの二つの定義がサンプルとして入っていますので、これをそのまま使用すれば手間無しで東京と香港の地図が手に入ります。また自分用に手直しするのも簡単だと思います。

[ ツールの入手 ]
MGMapsのフォーラム、Stored Mapsスレッドの15ページ目くらいに貼り付いているMapTileFE.zipをダウンロードしてください。
新しいトピックが立ち上がりました。Post .map files hereにプログラムがあります。

[ 前提 ]
MapTileCahaer.perlが動作すること。「MGMaps オフラインマップの作り方、具体例」参照。

[ 準備 ]
MapTileFE.zipの中身をMapTileCacher.perlと同じフォルダーに展開してください。MapTileFEはマップ定義ファイル(拡張子がmapのファイル)に基づいて地図ファイルを取得します。オリジナルの地図を作成する場合はサンプルとしてTokyo.mapとHongKong.mapが入っていますので、これらを参考に定義ファイルを作成します。

[ 実行 ]
perl MapTileFE.pl をコマンドラインに投入します。定義ファイルの一覧が表示された後に、定義ファイル名を入力してください(拡張子は入れません)。または perl MapTileFE.pl Tokyo のようにパラメーターとして指定することも出来ます。

[ マップ定義ファイル ]
サンプルの中身を見てもらうと大体は分かると思います。
– シャープ記号 ‘#’ で始まる行はコメントです。
– コメントを除いて最初にあらわれる行はMap Type (GoogleMapのようなもの)を表します。
– 残りの行は、Zoomレベルと座標の定義です。この定義は必要なだけ幾つでも入れることができます。フォーマットはZoom_level : TopLeft : RightBottomのようになっています。それぞれのパートはセミコロンで区切ります。Zoom_levelは、一つのZoomレベルもしくは0-10のように範囲でも指定できます。TopLeft, RightBottomは、取得する地図の左上と右下をそれぞれ緯度、経度で表した物です。このあたりはサンプルを見てもらった方が良いでしょう。