var map;var map_warn = false;var buf_st = '';var crr_x, crr_y;var buf_x, buf_y; function ini_box(){ } function get_pos(pos){var p = pos.coords;var x = p.longitude;var y = p.latitude;var a = p.accuracy; $('#lng').text(x);$('#lat').text(y);$('#acc').text(a);$('#test').text('['+p+']'); crr_x = x;crr_y = y;ini_map(x, y);pos2sttn(x, y);} function pos2sttn(x, y){ $('#near #navi').text('最寄り駅を検索中...');$('#stnm').text('最寄り駅を検索中...'); $.ajax({url:'http://map.simpleapi.net/stationapi?output=json&x='+x+'&y='+y,type:'get',dataType:'jsonp',cache: false,success : function(j){var st = j[0];var st_name = st.name;$('#stnm').text(st.name);$('#near #navi').text(st.name+' '+st.distanceM+' '+st.traveltime);if(buf_st!=st_name){api_g(st_name);}buf_st = st_name;}});} function api_g(st){var st_full = st;var st_name = st.replace(/駅$/,''); $('#lines').html($('<li>').text('最寄り駅リストを取得中...')); var q = "site:timetable.ekitan.com intitle:"+st_name+" | "+st_name+"*駅 -"+st_name+"方面 -ページ"; q = encodeURI(q);var url = 'ajax/station.php?n=50&q='+q; $.ajax({url:url,type:'get',dataType:'jsonp',cache: false,timeout: 10000,success:function(j){ $('#lines').html($('<li>').text('読み込み完了'));var cnt = 1;var lnk = [];var key = {};var ls_buf = {}; $('#svr_tw').attr({'href':'http://twitter.com/'+j.req.svr.tw}).text('@'+j.req.svr.tw);$('#svr_num').text(j.req.svr.num+'号鯖');$('#update').text('update: '+j.req.update); $(j.res.items).each(function(){ var ary_t = this.title.replace('｜',' ').split(' '); var f = ary_t[0].match(new RegExp("^.*"+st_name+"駅"))||ary_t[0].match(new RegExp(st_name+"\([^\)]+\)駅")); if(f && 6<=ary_t.length){var tmp = {};var ary_h = this.href.split('/').pop().replace('-','_').replace('.shtml','').split('_'); tmp.name = st;tmp.line = ary_t[2];tmp.drct = ary_t[3];tmp.file = ary_h[0]+'-'+ary_h[1];tmp.lnid = ary_h[0];tmp.stid = ary_h[1];tmp.drid = ary_h[2];tmp.id = zerofill(tmp.lnid,4)+zerofill(tmp.stid,4)+tmp.drid;tmp.ls = zerofill(tmp.lnid,4)+zerofill(tmp.stid,4); if(!key[tmp.id]){lnk.push(tmp);cnt++;ls_buf[tmp.file] = ls_buf[tmp.file]?ls_buf[tmp.file]+1:1;key[tmp.id]='true';} } }); $.each(ls_buf, function(k, v){if(v<2){$.each(lnk, function(){if(this.file==k){var cln = {};$.each(this, function(kk, vv){cln[kk] = vv;});cln.drct = "反対方面";cln.drid = cln.drid=='D1'?'D2':'D1';cln.id = zerofill(cln.lnid,4)+zerofill(cln.stid,4)+cln.drid;if(cln.stid!=0){lnk.push(cln);}return true;}});}}); srt('id', lnk); setTimeout(function(){sgst(lnk, 'lines');},100); },complete: function(XMLHttpRequest, status){if (status == "timeout") {alert('サーバが混雑している様です。しばらく時間をおいて試して下さい。');}}});} function sgst(ary, tgt){ $('#lines').empty(); var lines = $('#lines');if(!$(ary).size()){lines.append($('<li>').text('該当駅のデータが見つからない、またはgoogle様にブロックされました'))} var tmp_ls = '';var cnt = 1; $(ary).each(function(){tmp_tgt = 'ls_'+this.ls; if(this.ls!=tmp_ls){lines.append($('<li>').addClass('sep').text(this.line+' '+this.name));} lines.append($('<li>').addClass('arrow').append($('<a>').attr({'href':'ajax/unk.php?tblid='+this.file+'_'+this.drid}).text(this.drct))); tmp_ls = this.ls;cnt++;}); } function ctrl(f){switch(f){case '+':break;case '-':break;case '@':map.setCenter(new google.maps.LatLng(crr_y, crr_x));break;default:break;}} function reset_pos(){if(navigator.userAgent.match('iPhone|iPod')){navigator.geolocation.getCurrentPosition(get_pos, error_func);}else{map.setCenter(new google.maps.LatLng(crr_y, crr_x));pos2sttn(crr_x, crr_y);}return false;} function error_func(a){alert('位置の取得に失敗しました');} function set_center_marker(pos){var icon = new google.maps.MarkerImage('img/centermarker.png',new google.maps.Size(23, 23),new google.maps.Point(0,0),new google.maps.Point(11, 11));var shadow = new google.maps.MarkerImage('img/centermarker_shadow.png',new google.maps.Size(29, 29),new google.maps.Point(0, 0),new google.maps.Point(11, 11));center_marker = new google.maps.Marker({position: pos,map: map,shadow: shadow,icon: icon,zIndex: 1});return center_marker;} function ini_map(x, y){var latlng = new google.maps.LatLng(y, x);var opt = {center: latlng,zoom: 15,scrollwheel:true,mapTypeControl: false,navigationControl: true,navigationControlOptions:{style: google.maps.NavigationControlStyle.SMALL},mapTypeId: google.maps.MapTypeId.ROADMAP}; map = new google.maps.Map($('#map').get(0), opt); var geocoder = new google.maps.Geocoder();rev_geo(latlng); var center_marker = set_center_marker(latlng); google.maps.event.addListener(map, 'dragstart', function(){center_marker.set_visible(false);}); google.maps.event.addListener(map, 'dragend', function(){ if(!map_warn && navigator.userAgent.match('iPhone|iPod')){alert('ごめんなさい！ドラッグは表示が乱れる事が多いです！素早くドラッグした方がいいかも。');map_warn = true;} center_pos = map.getCenter();center_marker = set_center_marker(center_pos); var tmp_p = map.get_center();rev_geo(tmp_p); var tmp_x = tmp_p.lng();var tmp_y = tmp_p.lat();if(tmp_x!=buf_x || tmp_y!=buf_y){pos2sttn(tmp_x, tmp_y);}else{} buf_x = tmp_x;buf_y = tmp_y; }); var mkr = new google.maps.Marker({position: latlng,map: map,title:'koko!'}); var infowindow = new google.maps.InfoWindow({content:'この辺でしょ？'}); google.maps.event.addListener(mkr, 'click', function() {infowindow.open(map, mkr);}); google.maps.event.addListener(map, 'tilesloaded', function(){ }); } function rev_geo(latlng){var geocoder = new google.maps.Geocoder();geocoder.geocode({'latLng': latlng}, function(rslt, stat){if(stat == google.maps.GeocoderStatus.OK){var addr; addr = rslt[0].formatted_address;$('#near #addr').text(addr); }}); } function self(){return location.pathname.split('/').pop().split('.').shift();}function zerofill(n, l){var df = l - (n+"").length;var add = "";if(0<df){for(i=0;i<df;i++){add += "0";}}return (add+n);}function srt(k, a){a.sort(function (b, c){return b[k] > c[k]?1:-1;});}


