f8g

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 コントロールの初期化とスクリプトの実行」を無効以外にして実行。(動作が確認できたら元に戻した方がいいと思います)