// 天気 var itsmonavi = {}; itsmonavi.weather = function() { }; itsmonavi.weather.codes = null; itsmonavi.weather.getCodes = function() { if (null != itsmonavi.weather.codes) { return itsmonavi.weather.codes; } itsmonavi.weather.codes = {}; var d = [ //['01', '晴れ(昼)', 'fine'], //['02', '晴れ(夜)', 'star'], ['01', '晴れ', 'fine'], ['02', '晴れ', 'star'], ['03', '曇り', 'cloudy'], ['04', '雪', 'snow'], ['05', '雨', 'rain'], ['101', '晴れ時々曇り', ''], ['100', '晴れ', ''], ['102', '晴れ一時雨', ''], ['103', '晴れ時々雨', ''], ['104', '晴れ一時雪', ''], ['105', '晴れ時々雪', ''], ['111', '晴れのち曇り', ''], ['114', '晴れのち雨', ''], ['117', '晴れのち雪', ''], ['201', '曇り時々晴れ', ''], ['202', '曇り一時雨', ''], ['203', '曇り時々雨', ''], ['204', '曇り一時雪', ''], ['205', '曇り時々雪', ''], ['209', '霧', ''], ['211', '曇りのち晴れ', ''], ['214', '曇りのち雨', ''], ['217', '曇りのち雪', ''], ['301', '雨時々晴れ', ''], ['302', '雨時々やむ', ''], ['303', '雨時々雪', ''], ['304', '雨もしくは雪', ''], ['309', '雨一時雪', ''], ['311', '雨のち晴れ', ''], ['313', '雨のち曇り', ''], ['315', '雨のち雪', ''], ['340', '雪もしくは雨', ''], ['401', '雪時々晴れ', ''], ['402', '雪時々やむ', ''], ['403', '雪時々雨', ''], ['409', '雪一時雨', ''], ['411', '雪のち晴れ', ''], ['413', '雪のち曇り', ''], ['414', '雪のち雨', ''], ['999', '不明', ''] ]; $.each(d, function(i, v) { itsmonavi.weather.codes[v[0]] = { nm: v[1], _class: v[2] }; }); return itsmonavi.weather.codes; }; itsmonavi.weather.getTenkiHtml = function(code,week_flg) { var s = itsmonavi.weather.getCodes(); s = s[code]; if (undefined == s || null == s) { s = '不明'; } else { var nm = s.nm; //if ('' == s._class) { if (week_flg == true) {//週間天気 if(code == '01' || code == '02' || code == '03' || code == '04' || code == '05'){ var week_code = {'01':'100','02':'100','03':'200','04':'400','05':'300'}; code = week_code[code]; } s = '' + nm + '' + nm + ''; } else { s = ''; s += nm; } } return s; }; itsmonavi.weather.daysNameStr = [ '日', '月', '火', '水', '木', '金', '土' ]; itsmonavi.weather.getDateStr = function(d) { var s = (d.getMonth() + 1) + '/' + d.getDate() + '(' + itsmonavi.weather.daysNameStr[d.getDay()] + ')'; return s; }; itsmonavi.weather.get02d = function(n) { n = '0' + n; return n.substring(n.length - 2); }; itsmonavi.weather.eventAddress = function(result) { if (null != result && 0 == result.status && result.hitCount >= 1) { result = result.items[0].address; $('._adrnm').html(result); } }; itsmonavi.weather.eventSentaku = function(result) { if (null != result && 0 == result.status) { } else { return; } $.each(result.items, function(i, v) { var n = $.inArray(v.tenkiDate, itsmonavi.weather.days); if (n < 0 || n >= 2) { return; } if (v.sentaku >= 1 && v.sentaku <= 4) { // ok.正常な値。 } else { return; } var s = '' + v.sentakuName + '' + v.sentakuName; $('#id_table_' + n + ' tr.wash td').html(s); }); }; itsmonavi.weather.eventTenki3hour = function(result) { if (null == result) { return; } else if (0 != result.status) { return; } // 発表日時 var s = result.pubDate; $('#id_pubY').html(s.substring(0, 4)); $('#id_pubM').html(parseInt(s.substring(4, 6), 10) + ''); $('#id_pubD').html(parseInt(s.substring(6, 8), 10) + ''); s = result.pubTime; $('#id_pubH').html(parseInt(s.substring(0, 2), 10) + ''); $('#id_pubI').html(s.substring(2, 4)); $.each(result.items, function(i, v) { var n = $.inArray(v.tenkiDate, itsmonavi.weather.days); if (n < 0 || n >= 2) { return null; } var h = parseInt(v.tenkiTime.substring(0, 2), 10); if (0 == n) { h = (h - 6) / 3; } else { h /= 3; } var id = '#id_table_' + n; var id2 = 'td:eq(' + h + ')'; if (v.tenkiCode == '') { s = '-'; } else { s = itsmonavi.weather.getTenkiHtml(v.tenkiCode); } $(id + ' tr:eq(1) ' + id2).html(s); if (v.tenkiCode == '') { s = '-'; } else { s = '' + v.temperature + '℃'; } $(id + ' tr:eq(2) ' + id2).html(s); if (v.tenkiCode == '') { s = '-'; } else { s = '' + v.rainMm + 'mm'; } $(id + ' tr:eq(3) ' + id2).html(s); return null; }); }; itsmonavi.weather.eventTenkiWeek = function(result) { if (null != result && 0 == result.status) { } else { return; } $.each(result.items, function(i, v) { var n = $.inArray(v.tenkiDate, itsmonavi.weather.days); if (n < 2) { return; } var id = '#id_table_2'; var id2 = 'td:eq(' + (n - 2) + ')'; var e = $(id + ' tr:eq(2) ' + id2); e.find('span.highest').html('' + v.maxTemperature); e.find('span.lowest').html('' + v.minTemperature); var s = '' + v.rainPercent + '%'; $(id + ' tr:eq(3) ' + id2).html(s); s = itsmonavi.weather.getTenkiHtml(v.tenkiCode,true); $(id + ' tr:eq(1) ' + id2).html(s); }); }; itsmonavi.weather.days = null; itsmonavi.weather.init = function() { var s = location.search, i, v; s = s.split(/\?|&/); var lat = 0, lon = 0; $.each(s, function(i, v) { if (v.indexOf('lat=') == 0) { i = v.split('=', 2); lat = parseInt(i[1], 10); } else if (v.indexOf('lon=') == 0) { i = v.split('=', 2); lon = parseInt(i[1], 10); } }); if (lat <= 0 || lon <= 0) { lat = 128441320; lon = 503169540; } // 日付設定。 s = new Date(); itsmonavi.weather.days = []; for (i = 0; i < 7; ++i) { $('span.id_daystr_' + i).html(itsmonavi.weather.getDateStr(s)); itsmonavi.weather.days.push(s.getFullYear() + itsmonavi.weather.get02d(s.getMonth() + 1) + itsmonavi.weather.get02d(s.getDate())); s.setTime(s.getTime() + 1 * 24 * 60 * 60 * 1000); } // 住所名称取得。 var opt = new ZdcGetAddressStringGikOptions(); opt.point = new ZdcPoint(lon, lat, 2); opt.matchLevel = 3; opt.timeout = 3000; var gik = new ZdcGetAddressStringGik(); ZdcEvent.addListener(gik, 'end', itsmonavi.weather.eventAddress); gik.search(opt); // 洗濯情報取得。 opt = new ZdcNearTenkiOptions(); opt.point = new ZdcPoint(lon, lat, 2); opt.timeout = 3000; gik = new ZdcNearTenki(); ZdcEvent.addListener(gik, 'end', itsmonavi.weather.eventSentaku); gik.search(opt); // 3時間毎の天気を取得。 opt = new ZdcNearTenki3HourOptions(); opt.point = new ZdcPoint(lon, lat, 2); opt.timeout = 3000; gik = new ZdcNearTenki3Hour(); ZdcEvent.addListener(gik, 'end', itsmonavi.weather.eventTenki3hour); gik.search(opt); // 週間天気を取得。 opt = new ZdcNearTenkiWeekOptions(); opt.point = new ZdcPoint(lon, lat, 2); opt.timeout = 3000; gik = new ZdcNearTenkiWeek(); ZdcEvent.addListener(gik, 'end', itsmonavi.weather.eventTenkiWeek); gik.search(opt); };