GPSで現在地をGoogle Mapsに表示
昨日の続き。何となく動いた。
function load() { if (GBrowserIsCompatible()) { var map = new GMap2(document.getElementById("map")); map.setCenter(new GLatLng(37.4419, -122.1419), 13); $("start").onclick = function(){ startGPS(map); }; } } function startGPS(map){ var sc = new ActiveXObject("ScriptControl"); sc.Language = "RubyScript"; sc.AddCode([ 'require "wincom"', 'def open', ' s = Serial.new', ' s.open(7, 11, 4800, 8, 0, 0, 1, 100)', ' return s', 'end', 'def get(s)', ' s.receive', 'end', 'def close(s)', ' s.close()', 'end'].join("\n")); var ruby = sc.CodeObject; var gps = ruby.open(); var timer = setInterval(function(){ try { var data = ruby.get(gps).split("\n"); } catch(e){ return; } for(var i = 0; i < data.length; i++){ if( data[i].match(/\$GPGGA/) ){ var GPGGA = data[i].split(","); var lat_s = GPGGA[2]; var lng_s = GPGGA[4]; var lat = parseFloat( lat_s.substr(0, 2) ) + parseFloat( lat_s.substr(2, lat_s.length - 1) ) / 60; var lng = parseFloat( lng_s.substr(0, 3) ) + parseFloat( lng_s.substr(3, lng_s.length - 1) ) / 60; map.setCenter(new GLatLng(lat, lng), 13); $("t").innerHTML = [lat, lng]; } } }, 500); $("stop").onclick = function(){ ruby.close(gps); clearInterval(timer) }; } function $(id){ return document.getElementById(id); }
ScriptControl使ってるので、IEのオプションで「スクリプトを実行しても安全だとマークされていない ActiveX コントロールの初期化とスクリプトの実行」を無効以外にして実行。(動作が確認できたら元に戻した方がいいと思います)