// http://www.google.com/apis/maps/documentation/polylineutility.html
// http://www.google.com/apis/maps/documentation/#Encoded_Polylines
// http://www.google.com/apis/maps/documentation/reference.html#GPolyline

// 下記のjsからencodeSignedNumberとencodeNumberを取得
/// http://www.google.com/apis/maps/documentation/polyline.js


// 前の位置
var intLatPre = 0;
var intLngPre = 0;

// 初期化
function fncInitEncodedPoint()
{
	intLatPre = 0;
	intLngPre = 0;
}

// エンコードデータ取得
function fncGetEncodedPoint(intLat, intLng)
{
	// 100000倍して整数にする
	var intLatE5 = Math.floor(intLat * 1e5);
	var intLngE5 = Math.floor(intLng * 1e5);

	// 前との差分を取得
	var intLatDiff = intLatE5 - intLatPre;
	var intLngDiff = intLngE5 - intLngPre;

	// 今回のを保存
	intLatPre = intLatE5;
	intLngPre = intLngE5;

	// エンコードデータを戻す
	return encodeSignedNumber(intLatDiff) + encodeSignedNumber(intLngDiff);
}


// Encode a signed number in the encode format.
function encodeSignedNumber(num) {
  var sgn_num = num << 1;

  if (num < 0) {
    sgn_num = ~(sgn_num);
  }

  return(encodeNumber(sgn_num));
}

// Encode an unsigned number in the encode format.
function encodeNumber(num) {
  var encodeString = "";

  while (num >= 0x20) {
    encodeString += (String.fromCharCode((0x20 | (num & 0x1f)) + 63));
    num >>= 5;
  }

  encodeString += (String.fromCharCode(num + 63));
  return encodeString;
}

