タグ「GPS」 の検索結果(1/1)

2009年12月12日

調査地のGISデータベース構築に挑戦(8) GPSデータのとりこみに苦戦

前回からしばらく更新がとどこおっている。GPSデータのとりこみに苦戦しているからだ。

僕が使っているGPSは、GARMIN(ガーミン) GPSMAP 60CSxだ(リンク先は日本語版だが、安いので英語版を使っている)。外部アンテナなしで、ポケットに入れた状態でガボンの森林の中でもストレスなく測位できる。

この機種は、microSDカードにトラックログを保存できる。microSDを使用する設定にすると、自動的にアクティブログを日ごとにgpx形式で保存してくれる。とても便利だ。

ウェイポイントは、1回の調査旅行が終わるときに、まとめてgpsbabelを用いてgpxファイルとしてPCに取り込んでいる。

だから、GPSデータをGRASSデータベースにとりこむ作業とは、実際にはgpxファイルのデータを読みこむ作業になる。

GRASSには、gpsbabelを用いてgpsデータをとりこむコマンド、v.in.gpsbabel が備わっているので、これを使う。

単にインポートするだけなら簡単だ。まず、GPSデータの受け皿として、WGS84測地系、投影なし(つまり、緯度経度)でロケーションを作成する。

そして、GUIの File → import vector map → GPSBabel GPS import。元データファイルと、GRASSでの地図名を記し、いくつかオプションを指定して Run。

これで、一応インポートできたのだが、問題はその中身だ。とりこんだwaypointデータの中身はどうなっているのだろう。v.info コマンドでたしかめてみる。

v.info -c WPT2009
Displaying column types/names for database connection of layer 1:
INTEGER|cat
DOUBLE PRECISION|x
DOUBLE PRECISION|y
DOUBLE PRECISION|altitude
CHARACTER|gmt_date
CHARACTER|gmt_time
CHARACTER|comments

ポイントデータの属性として、以下のものが作られていることがわかる。
  • cat (整数値)
  • x (浮動小数点数値)
  • y (浮動小数点値)
  • altitude (浮動小数点値)
  • gmt_date (文字列)
  • gmt_time (文字列)
  • comments (文字列)
常識的に考えれば、catにはGPSのポイント名、x, yが緯度経度、altitudeは標高、gmt_dateはグリニッジ標準時の日付、gmt_timeは同じく時刻、commentsがコメント、だろう。

では実際のデータはどう格納されているか、それを確かめるには、v.db.select コマンドを使う。

GRASS 6.4.0RC5 (GPS):~ > v.db.select WPT2009
cat|x|y|altitude|gmt_date|gmt_time|comments
1|136.9424|35.398232|57.564209|||09-JUN-09 9:49:05
2|10.571023|-2.330072|79.434082|||23-AUG-09 8:16:54
3|10.570365|-2.325331|82.317993|||23-AUG-09 8:28:18
4|10.569605|-2.323328|90.248779|||23-AUG-09 8:33:47
5|10.569756|-2.323125|88.806763|||23-AUG-09 8:38:25
6|10.569804|-2.322428|87.845459|||23-AUG-09 9:05:56
...

x, y, altitudeには、期待された値が格納されている。しかし、そのほかがだめだ。

catはGPSのポイント名と対応しない。gpxファイルに書かれている順番に連番が振られている。gmt_date, gmt_timeは空欄で、測位日時はcomments欄に格納されている。

しかも、位置データの精度が落ちている。gpxファイルでは小数点以下9桁まで記されていたのが、4〜6桁に落ちている。

この原因を探るため、gpxファイルそのものを見てみよう。すると、こうなっている。

<?xml version="1.0" encoding="UTF-8"?>
<gpx
  version="1.0"
  creator="GPSBabel - http://www.gpsbabel.org"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://www.topografix.com/GPX/1/0"
  xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
<time>2009-09-25T03:43:30Z</time>
<bounds minlat="-2.920034621" minlon="-1.270407932" maxlat="51.753171729" maxlon="136.946681673"/>
<wpt lat="35.398232108" lon="136.942400113">
  <ele>57.564209</ele>
  <name>003</name>
  <cmt>09-JUN-09 9:49:05</cmt>
  <desc>09-JUN-09 9:49:05</desc>
  <sym>Toll Booth</sym>
</wpt>
<wpt lat="-2.330071935" lon="10.571023263">
  <ele>79.434082</ele>
  <name>004</name>
  <cmt>23-AUG-09 8:16:54</cmt>
  <desc>23-AUG-09 8:16:54</desc>
  <sym>Fishing Hot Spot Facility</sym>
</wpt>
<wpt lat="-2.325330712" lon="10.570364613">
  <ele>82.317993</ele>
  <name>005</name>
  <cmt>23-AUG-09 8:28:18</cmt>
  <desc>23-AUG-09 8:28:18</desc>
  <sym>City (Small)</sym>
</wpt>
<wpt lat="-2.323327772" lon="10.569604794">
  <ele>90.248779</ele>
  <name>006</name>
  <cmt>23-AUG-09 8:33:47</cmt>
  <desc>23-AUG-09 8:33:47</desc>
  <sym>City (Small)</sym>
</wpt>
...

ここから、以下のようなことがわかる。
  • GPSBabelでgpx形式で読みこんだwaypointファイルには、idという概念がない。ポイント名は"name"タグに格納される。
  • 日時は、"cmt"タグと"desc"タグの両方に格納される。cmtはcomment、descはdescriptionの意であろう。
  • 標高は"ele"タグに格納される。
  • 緯度経度は、"wptタグの属性値lat, lonとして格納される。

日時がcomments欄に格納されたのは、それがまさにgpxファイルのcmt欄に格納されているからだろう。そしてcat欄に連番が振られたのは、idがないからで、nameタグには文字列が許されるからそれを使うわけにゆかないのだろう。

というわけで、gpsデータの読みこみは難儀だ。困ったこまった。


2009年10月17日

GPSのトラックをGoogleearthに表示する

調査中にGPSに記録したトラックログやポイントデータをどう活用するか思案中。
とりあえず地図上に表示してみるには、Googleearthがお手軽だ。

データの変換はGPSBabelで行なう。

GPSからのデータ吸い出しの基本は、GPSBabelでusb接続のGPSのデータを吸い出す方法に記した通り。

地理情報データをGoogleearthで表示するには、kml形式に変換する必要がある。GPSBabelはkmlもサポートしているので簡単。

GPSから直接吸い出す場合は、

> gpsbabel -i garmin -f usb: -o kml -F filename.kml

でOK。既に保存したGPXファイルを変換するなら、

> gpsbabel -i gpx -f filename.gpx -o kml -F filename.kml

でOK。

あとは、作成したkmlファイルをGoogleearthから開けば下の写真のようにトラックデータが表示される(クリックで拡大画像)。

20090823track.jpg

なかなか見栄えがよい。アクティブトラックなら、時間軸にそって「再生」することもできる。

ただ問題がいくつか。(1) 見栄えがよい、だから何?という問題と、(2) Googleearthの衛星画像とトラックログが微妙にずれている。Googleearthがどんな画像ソースをどう処理しているのかわからないので、今のところ見て楽しいという以外の利用法がわからない。

やはり、GPSデータをもっと活用しようと思うなら、きちんとGISシステムを組む必要がある。

2009年9月25日

GPSBabelでusb接続のGPSのデータを吸い出す方法

キャンプで、GPSBabelを使ってGPSのデータをPCに読みこうもうとしたらうまくゆかなかった。
僕が知っていたのは、garmin_gpsモジュール+udevを使う次のような方法。

> gpsbabel -i garmin -f /dev/ttyUSB1 -o gpx -F filename.gpx
しかし、/dev/ttyUSB1がないと言われる。lsmodしてみると、garmin_gpsがロードされていない。

途中経過を記すことにはほとんど意味がないので、だーっと端折るが、今のGPSBabelはudevを介さず、直接カーネルのgarmin usb driverと対話するということがわかった。usb接続でgpsと対話するには、入力/出力ファイル名のところを「usb:」とすればよい。

http://www.gpsbabel.org/htmldoc-development/fmt_garmin.html

こんな感じ。

> gpsbabel -i garmin -f usb: -o gpx -F filename.gpx

しかしこれ、usb接続のGPSが2台あったらどうするんだろう。