au携帯のGPSで位置を連続的に通知
Up$Date: 2005-04-14 01:03:13 +0900 (Thu, 14 Apr 2005) $ $Rev: 710 $

auのGPS携帯から自分の居場所を連続的に通知する方法について、 jm@foo氏のページ, ここギコ氏のページ, おれさま手帖 などで紹介されてたので実験してみた。 wml:timerという指定を使ってリフレッシュするようにすればよいらしい。 説明はこちら

簡易位置取得法についてはKDDIのサイトに書いてあるが、 正確な値を取得するためには、 GPS携帯的メモgpsOneで位置情報表示 に書いてあるように、以下のような引数でCGIを起動すると正確な値を取得することができる。 "device:gpsone" と指定するところがポイントである。

<form action="device:gpsone" method="GET">
<input type="hidden" name="url" value="http://pitecan.com/Location/gps.cgi">
<input type="hidden" name="ver" value="1">
<input type="hidden" name="datum" value="1">
<input type="hidden" name="unit" value="1">
<input type="hidden" name="acry" value="0">
<input type="hidden" name="number" value="0">
<input type="submit">
</form>
CGI呼び出しの結果の環境変数については モバイルCGI研究のページに書いてある。 端末固有のサブスクリプションIDなどはこれで取得できる。 以下のようなCGI を動かすことで時刻と位置情報がdataファイルに格納されていく。
#!/usr/bin/env ruby

require 'cgi'
cgi = CGI.new('html3')

subno = ENV['HTTP_X_UP_SUBNO'] # Subscription ID (端末にユニークなID)
lat = cgi.params['lat']
lon = cgi.params['lon']
loc = "N#{lat}E#{lon}"
time = Time.now.strftime("%Y/%m/%d %H:%M:%S")

File.open("data","a"){ |f|
  f.puts "#{time} #{subno} #{loc}"
}

s = <<EOF
 <wml:card ontimer="device:gpsone?url=gps.cgi&ver=1&datum=1&unit=0&acry=0&number=0">
  <wml:timer value="600" />
  <p align="center">
   GPS位置計測! (1分ごと)
  </p>
  #{loc}
 </wml:card>
EOF

cgi.out {
  cgi.html {
    cgi.head {
    } + s
  }
}
格納されるデータファイル:
2005/04/13 16:03:09 05000123456789_ae.ezweb.ne.jp N+35.43.23.81E+139.45.02.09
2005/04/13 16:05:06 05000123456789_ae.ezweb.ne.jp N+35.44.02.24E+139.44.50.03
2005/04/13 16:07:37 05000123456789_ae.ezweb.ne.jp N+35.44.09.19E+139.44.46.66
2005/04/13 16:09:33 05000123456789_ae.ezweb.ne.jp N+35.43.37.32E+139.44.52.80
...
自分の位置を常にどこかに通知しておけばいろいろ便利なことも多いのだが、 といった問題も多いのであんまり実用的ではないかもしれない。 鬼ごっことかには面白いかもしれないが...