Hatena::Grouprubyist

いつかはRails(笑) このページをアンテナに追加 RSSフィード

2009-08-05

GPS携帯電話の自動トレース

22:12 | GPS携帯電話の自動トレース - いつかはRails(笑) を含むブックマーク はてなブックマーク - GPS携帯電話の自動トレース - いつかはRails(笑) GPS携帯電話の自動トレース - いつかはRails(笑) のブックマークコメント

GPS携帯電話の自動トレース

仕事がらみでauGPS携帯電話を自動トレースしてみた。もちろんruby使用。

座標点をcgiに送る。

これはxhtmlで行いました。

<html>
<head><title>Timer</title></head>

<wml:card ontimer="device:gpsone?url=http://www.hogehoge.com/gpsinfo2.cgi&amp;ver=1&amp;datum=0&amp;unit=0">
<wml:timer value="6000" />
      <p> connect after 600seconds. </p>
    </wml:card>
</html>

timerを使って一定時間に一回指定urlへ飛ばします。

auの携帯電話は、

device:gpsone

のタグだけで、自動的に座標が送れます。

cgiで受ける。

ここはrubycgiを作りました。urlのgetからデータを受け取って、テキストファイルに追加します。

#!/usr/bin/ruby
require "cgi"

cgi = CGI.new
datum = cgi["datum"]  # 文字列パラメータを取得.
unit = cgi["unit"]  # 文字列パラメータを取得.
lat = cgi["lat"]  # 文字列パラメータを取得.
lon = cgi["lon"]  # 文字列パラメータを取得.

lat=lat.chop
lon=lon.chop

lat_s = lat.split(/\./)
lon_s = lon.split(/\./)

lat_deg=lat_s[0].to_f+lat_s[1].to_f/60+lat_s[2].to_f/3600+lat_s[3].to_f/360000
lon_deg=lon_s[0].to_f+lon_s[1].to_f/60+lon_s[2].to_f/3600+lon_s[3].to_f/360000

FILENAME = "raw.txt"

fh = open(FILENAME, "a")
fh.print lat_deg,",",lon_deg,",",Time.now,"\n"
fh.close

puts "Content-Disposition: filename=\"gps.html\""
puts "Content-type: text/html\n\n"

puts "<html lang=\"ja\"> <head>\n"
puts "<title>GPS Processing</title></head>\n"
puts "<wml\:card ontimer=\"http://www.hogehoge.com/loc2.html\">\n"
puts "<wml\:timer value=\"20\" />\"location report suceeded! \",Time.now"
puts "<p>back to home in 2seconds.</p>"
puts "</wml\:card></html>"

座標はurlからgetで受取ります。cgiライブラリで万全。

受取ったデータをdegreeに変換し、ファイルに出力します。

ファイル出力後は、表示用のxhtmlを生成しますが、ここでもtimerで元のurlへもどしてやるようにします。ザ・無限ループ。

座標にGoogleMap上でピンを立てる。

出来上がったデータには、座標と時間が書かれているので、PCで表示できるようにしてやります。GoogleMap APIをeRubyから使います。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>GPS auto tracer demo site</title>
<script
src="http://maps.google.com/maps?file=api&v=2&key=(GoogleMapキー)"
type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function load() {
if (GBrowserIsCompatible()) {
//地図を作成
var map = new GMap2(document.getElementById("map"));

<%
  i=0
  max_x=0
  min_x=360
  max_y=0
  min_y=360
  total_x=0
  total_y=0
  f=open("/var/www/html/raw.txt")
    f.each {|line|
      l = line.split(/,/)
      if i==0 then
        print "map.setCenter(new GLatLng(",l[0],",",l[1],"), 16 );"
        print "map.addControl(new GScaleControl());"
        print "map.addControl(new GMapTypeControl());"
        print "map.addControl(new GLargeMapControl());"
      end
      total_x += l[0].to_f
      total_y += l[1].to_f
      if l[0].to_f >= max_x then
          max_x = l[0].to_f
      end
      if l[0].to_f <= min_x then
          min_x = l[0].to_f
      end
      if l[1].to_f >= min_y then
          max_y = l[1].to_f
      end
      if l[1].to_f <= min_y then
          min_y = l[1].to_f
      end
      i=i+1
      print "var marker_",i," = new GMarker(new GLatLng(",l[0],",",l[1],"));\n"
      print "GEvent.addListener(marker_",i,", \"click\", function() {
marker_",i,".openInfoWindowHtml(\"",l[2].chomp,"\"); });"

      print "map.addOverlay(marker_",i,");\n"
    }
    print "map.setCenter(new
GLatLng(",(max_x-min_x)/2+min_x,",",(max_y-min_y)/2+min_y,"),16 );"
  f.close
%>
}
}
//]]>
</script>
</head>
<body onload="load()" onunload="GUnload()">
<div id="map" style="width: 500px; height: 500px"></div>
</body>
</html>

要するにeRubyでtextを読んで、javascriptを書き出す作業です。

これで、携帯電話で指定urlを表示したまま持ち歩けば、歩いた軌跡がGoogleMap上にトレースされます。

すごいなぁ。

テストで実機を使ったので、パケ死ぎみw

AnitraAnitra2011/09/08 09:15This is the peerfct way to break down this information.

enikdsqienikdsqi2011/09/09 00:01iNKqwi <a href="http://nngvigzkbetm.com/">nngvigzkbetm</a>

eswcadgsjeswcadgsj2011/09/10 19:08H1NNVy <a href="http://zafnclbhhmor.com/">zafnclbhhmor</a>

kbiebbzykbiebbzy2011/09/12 18:361e7Z8U , [url=http://wognhrtzkugl.com/]wognhrtzkugl[/url], [link=http://jouiduthzghp.com/]jouiduthzghp[/link], http://nkdglvxpyour.com/