2011年12月06日

GoogleMapに複数のGPSログを表示する

グーグルマップで最近遊んでいます.


今回の旅行のジオタグ(kml形式で保存されたデータ)をGoogleMap上で表示させようと思ったのですが苦戦した.

まず,1日1回記録していたため,ファイルが複数にわかれている.これを単純に1つのファイルにまとめたりしたけど,Google Map上にうまく表示されない.


ファイルは,kml という形式なのだけど,簡単に言えば,XMLと同じ.各タグの意味,及び関連は,以下のサイトに載っています.

http://code.google.com/intl/ja/apis/kml/documentation/kmlreference.html#coordinates


ここを見ながら,最終的には,重要なのは,こんな風に,タグで括った座標群を連続して書いておけばいいのかなぁとやったりした.

※タグ表示がうまく表示されなかったため,"< " の後に空白を入れています.

	< Placemark>
< LineString>
< coordinates>
座標をずらずらーっと.
135.749222,35.040817,82.400002
135.749222,35.040817,85.320000
135.749054,35.040913,89.120003
< /coordinates>
< /LineString>
< Placemark>
< Placemark>
< LineString>
< coordinates>
座標をずらずらーっと.
< /coordinates>
< /LineString>
< Placemark>
…以下続く




だけど,やっぱり,全ては表示される,一部だけ.表示されてない部分も左側に出るリストをクリックすることで出たりするんだけど,代わりに最初のが消えて,さらにはそれを出す方法もわからない.

しかも,各座標系に,日付なり地名なり名前をつけたり,線の色を変えたりしたいのだけど,それもうまくできない.

一つのcoordinates の中に全ての座標点を書き込んだのだけど,それでも表示されないので,どうやら一度に表示できる座標点数に制限がある模様.試した感じだとcoordinatesタグで括れるのは400ポイントずつっぽい.あと,1200くらいまでは全部表示できそう.


そこで以下の手順を踏んだ


1. 同じ座標点を削除
2. < coordinates>< /coordinates>の間に全ての座標点を記述
3. oogle Map にインポート.




順番に説明する.

■1. 同じ座標点を削除

座標点数を少なくするために,同じ座標点を削ることにした.食事したり,観光地で説明してくれる人たちの話を聞いている時など動いていないときは結構あり,その間も座標点が記録されているのでこれでだいぶ削減されるはず.座標点は空白で区切られているので,それをキーワードに改行をいれて,座標点を並べたファイルを作ります.

それをExcelでもなんでもいいのですが,重複している行を削る処理をかけます.(並び替えてしまうと,歩いた順番がおかしくなるので注意.)自分は,uniq コマンドを使って処理しました.これは,同じ座標のものしか削除できないので,数mの差は削れません.
ゆるく削除するスクリプトを作ろうか考えましたが,そこまで困ってはいないのでやらないですね.

ちなみに,Windowsだったら,座標点数を間引くソフトがあります.移動スピードや時間間隔で変えることが出来るのかな?このソフトの完成度は高いと自分は感じています.

ソフトはこれです.「轍 Wadachihttp://www.forest.impress.co.jp/article/2008/03/18/wadachi.html


2. < coordinates>< /coordinates>の間に全ての座標点を記述


上記の処理した座標点を,元のkmlファイルの座標点を消して,入れ替えます.(手動でファイルを編集しました.)



3. Google Map にインポート.

こうして座標点を減らしたkml ファイルをGoogle Mapにインポートします.一つのcoordinates に大量の座標点が入っていると,Google Map側で勝手に分割してくれます.
その分割数が,数えたら400点ごとでした.とりあえず,前より見えるようになった.



■各座標に,名前や色を付ける方法


GoogleMapにインポートした線を,マウスで名前つけたり,線の色や太さを変えてそれを再度kmlフォーマットでExportしたファイルを参照すると,どのようにXMLタグで色別にしたり,それぞれに名前をつけたりする方法が分かる.

具体的には以下のように,Styleを定義して,それぞれ名前(nameタグ)とStyleUrlを指定すればいいらしい.


< ?xml version="1.0" encoding="UTF-8"?>
< kml xmlns="http://earth.google.com/kml/2.2">
< Document>
< name>テストだよ< /name>
< description>< /description>
< Style id="style3">
< LineStyle>
< color>FFFFFF00
< width>4
< /LineStyle>
< /Style>
< Style id="style1">
< LineStyle>
< color>FFFF0000< /color>
< width>4< /width>
< /LineStyle>
< /Style>
< Style id="style2">
< LineStyle>
< color>FF00FFFF< /color>
< width>4< /width>
< /LineStyle>
< /Style>
< Placemark>
< name>最初< /name>
< styleUrl>#style1< /styleUrl>
< LineString>
< tessellate>1< /tessellate>
< coordinates>
135.762238,35.023342,56.270000 以下,ずらーっと.
< /coordinates>
< /LineString>
< /Placemark>
< Placemark>
< name>2こめ< /name>
< styleUrl>#style2< /styleUrl>
< LineString>
< tessellate>1< /tessellate>
< coordinates>
< /coordinates>
< /LineString>
< /Placemark>
< Placemark>
< name>3こめ< /name>
< styleUrl>#style3< /styleUrl>
< LineString>
< tessellate>1< /tessellate>
< coordinates>
135.762238,35.023342,56.270000 以下,ずらーっと.
< /coordinates>
< /LineString>
< /Placemark>



しかし,疲れたー.この問題を解決するのに寝不足になってしまった.



posted by maplewine at 21:40| Comment(0) | TrackBack(0) | Computer | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック