var Prism = {}; Prism.YAHOO_APP_KEY = 'QjWaNNixg67weoRFq_XndthVNIA.1zVH_lDoGQHBQW8OuqHzrmZs9MSrbM45j_s-'; Prism.YAHOO_API_URL = 'http://map.yahooapis.jp/LocalSearchService/V1/LocalSearch'; Prism.PIX2M_BY_ZOOM = [123456.79012, 61728.39506, 30303.03030, 15151.51515, 7575.75758, 3773.58491, 1941.74757, 970.87379, 485.43689, 238.09524, 119.04762, 59.52381, 29.85075, 14.92537, 7.46269, 3.70370, 1.88679, 0.94340, 0.47170, 0.23529]; Prism.MAX_ZOOM = 15; Prism.MIN_ZOOM = 4; Prism.API_URL = '/api/'; Prism.DATA_DIR = 'js/data/'; Prism.DATA_DIR_ZIP = 'js/zip_data/'; Prism.gMap; Prism.circles = new Array(); Prism.posX; Prism.posY; Prism.searchQuery = ''; Prism.report = {}; var _DEBUG = ''; $(document).ready(function(){ // マウスの位置 $("html").mousemove(function(e){ Prism.posX = e.pageX; Prism.posY = e.pageY; }); // 支援する総数 $.getJSON(Prism.API_URL + 'support.php', null , function(results){ $('.support_item .fukidashi #num').html(results[0]); }); $('.img_support').bind("click", function(){ $.getJSON(Prism.API_URL + 'support.php', 'raise=1' , function(results){ if( results[0].search(/^\d+$/) != -1 ){ $('.support_item .fukidashi #num').html(results[0]); }else{ $('#support_results').html('
'+results[0]+'
'); } }); }); Prism.report = {}; //////////////////////////////////////////////////////// // MAP //////////////////////////////////////////////////////// // 地図の定義 var mapdiv = document.getElementById("prism_map"); var position = new google.maps.LatLng(37.560155, 139.658203); var myOptions = { zoom: 4, center: position, mapTypeId: google.maps.MapTypeId.ROADMAP, scaleControl: true }; // 地図を描く Prism.gMap = new google.maps.Map(mapdiv, myOptions); // タイル変更時にデータ再取得 google.maps.event.addListener(Prism.gMap, 'tilesloaded', function () { var bounds = Prism.gMap.getBounds(); var swLatlng = bounds.getSouthWest(); var neLatlng = bounds.getNorthEast(); // クエリ生成 var query = 'zoom_level=' + Prism.gMap.getZoom() + '&swLat=' + swLatlng.lat() + '&swLng=' + swLatlng.lng() + '&neLat=' + neLatlng.lat() + '&neLng=' + neLatlng.lng(); if(0都道府県を選択してください。
'); return false; } if( $('#city option:selected').val()=='' || $('#city option:selected').val()==0 ){ $('#report').after('市区町村を選択してください。
'); return false; } if( $('#area option:selected').val()=='' ){ $('#report').after('町域を選択してください。
'); return false; } if( $('#detail option:selected').val()=='' && 1<$('#detail option').length ){ $('#report').after('丁を選択してください。
'); return false; } if( $('#detail2').val().search(/^\d{0-4}$/ig) != -1 ){ $('#report').after('番地は半角数字で入力してください。
'); return false; } if( $('#reason option:selected').val()=='' ){ $('#report').after('理由を選択してください。
'); return false; } var zip_code = $('#zip1').val() + '-' + $('#zip2').val(); var pref = ($('#pref option:selected').val()!='') ? $('#pref option:selected').text() : ''; var city = ($('#city option:selected').val()!='' && $('#city option:selected').val()!=0) ? $('#city option:selected').text() : ''; var area = ($('#area option:selected').val()!='') ? $('#area option:selected').text() : ''; var detail = ($('#detail option:selected').val()!='') ? $('#detail option:selected').text() : ''; var detail2 = ($('#detail2').val()!='') ? $('#detail2').val() : ''; // lat, lng取得 var target_address = pref + city + area + detail + detail2; $.getJSON(Prism.YAHOO_API_URL+"?appid="+Prism.YAHOO_APP_KEY+"&p=" + target_address + "&o=json&category=address&callback=?", function(data){ if(0==data.Count){ $('#report').after('入力された住所が見つかりませんでした。
'); return false; }else if(1==data.Count && 4<=data.Item[0].AddressLevel){ $('#report').after('個人が特定される恐れがある住所です。番地等を空欄にして投稿ください。
'); return false; } var lat = data.Item[0].DatumWgs84.Lat; var lng = data.Item[0].DatumWgs84.Lon; // query string 生成 var query = 'pref_id=' + $('#pref option:selected').val(); query += '&pref=' + pref; query += '&city_id=' + $('#city option:selected').val(); query += '&city=' + city; query += '&zip_code=' + zip_code; query += '&area=' + area; query += '&detail=' + detail; query += '&detail2=' + detail2; query += '&reason=' + $('#reason option:selected').val(); query += '&latitude=' + lat; query += '&longitude=' + lng; // POST $.post(Prism.API_URL + 'index.php', query , function(data){ if(data.length==0){ $('#report_form').html('ご協力ありがとうございました。
戻る
' + data + '
'); return false; } }); }); }); // ヘッダのフリーテキスト検索 $('#h_search').bind("click", function(){ $('.error').remove(); if( 0 < $('#h_word').val().length ){ Prism.searchQuery = 'word=' + $('#h_word').val() ; }else{ $('#h_search').after('住所を入力してから「検索する」ボタンをクリックしてください。
'); return false; } $.post(Prism.API_URL + 'search.php', Prism.searchQuery , function(data){ reports = $.parseJSON(data); if( reports.length == 0 ){ $('#h_search').after('見つかりませんでした。
'); return false; } Prism.drawCircles(reports); // 地図を移動させる Prism.gMap.setCenter(new google.maps.LatLng(reports[0][2], reports[0][3])); Prism.gMap.setZoom(Prism.MAX_ZOOM); }); }); // 検索 $('#search').bind("click", function(){ $('.error').remove(); if($('#zip1').val().length==0 && $('#zip2').val().length==0 && $('#word').val().length==0 ){ $('#search').after('郵便番号、または住所を入力してから「検索する」ボタンをクリックしてください。
'); return false; } if( 0 < $('#word').val().length ){ Prism.searchQuery = 'word=' + $('#word').val(); } if( ($('#zip1').val().search(/^\d{3}$/)!=-1) && ($('#zip2').val().search(/^\d{4}$/)!=-1) ){ Prism.searchQuery = 'zip_code=' + $('#zip1').val() + '-' + $('#zip2').val(); }else if( 0<$('#zip1').val().length || 0<$('#zip2').val().length ){ $('#search').after('郵便番号は3桁と4桁の数字を入力してください。'); return false; } $.post(Prism.API_URL + 'search.php', Prism.searchQuery , function(data){ reports = $.parseJSON(data); if( reports.length == 0 ){ $('#search').after('
見つかりませんでした。
'); return false; } Prism.drawCircles(reports); // 地図を移動させる Prism.gMap.setCenter(new google.maps.LatLng(reports[0][2], reports[0][3])); Prism.gMap.setZoom(Prism.MAX_ZOOM); }); }); }); //市町村リスト取得 Prism.setCity = function(params){ $.getJSON(Prism.DATA_DIR + 'pref-' + (params.pref_id<10?'0':'') + params.pref_id + '.json', null, function(results){ $('#city option').remove(); $('#city').append(''); var sel; $.each( results[2] , function(i, item){ // [都市コード, 都市名] if( params.city!=undefined && params.city==item[1] ){ sel = 'selected'; }else{ sel = ''; } $('#city').append(''); }) }); $('#city').removeAttr("disabled"); $('#area, #detail, #detail2').attr("disabled","true"); $('#area option, #detail option').removeAttr("selected"); //$('#zip1, #zip2').val(''); } // 町域リスト取得 Prism.setArea = function(params){ $.getJSON(Prism.DATA_DIR + 'pref-' + (params.pref_id<10?'0':'') + params.pref_id + '.json', null, function(results){ $('#area option').remove(); $('#area').append(''); $.each( results[2] , function(i, items){ // items[0]・・・都市コード? // items[1]・・・都市名 if( items[0] == params.city_id || items[1]==params.city){ var sel; $.each( items[2], function(j, item){ if(params.area==item){ sel = 'selected'; }else{ sel = ''; } $('#area').append(''); }) } }) }); $('#area').removeAttr("disabled"); $('#detail, #detail2').attr("disabled","true"); $('#detail option').removeAttr("selected"); //$('#zip1, #zip2').val(''); } // 丁目リスト取得 Prism.setDetail = function(params){ var query = $('#pref option:selected').text() + params.city + params.area; $.getJSON(Prism.YAHOO_API_URL+"?appid="+Prism.YAHOO_APP_KEY+"&p=" + query + "&o=json&n=100&category=address&callback=?", function(data){ $('#detail option').remove(); $('#detail').append(''); arr = new Array(); $.each(data.Item, function( i , item){ var m = item.Title.match(/(\d{1,2})丁目$/ig); if( m!=null && item.AddressLevel==4 ) arr.push(RegExp.$1); }) arr.sort(function(a, b) { return (parseInt(a) > parseInt(b)) ? 1 : -1; }); // 出力 $.each(arr, function(i, item){ $('#detail').append(''); }) if( 0 < arr.length){ $('#detail, #detail2').removeAttr("disabled"); }else{ $('#detail, #detail2').attr("disabled","true"); } // zip_code取得 var target_address = $('#pref option:selected').text() + params.city + params.area; $.getJSON(Prism.YAHOO_API_URL+"?appid="+Prism.YAHOO_APP_KEY+"&p=" + target_address + "&o=json&category=zipcode&callback=?", function(data){ var zip_code = data.Item[0].Title.replace(/〒/ig, ''); var results = zip_code.match(/^(\d{3})\-(\d{4})$/); if(results==null){ $('#report').after('システムエラーが発生しました。
'); return false; } if(0==$('#zip1').val().length && 0==$('#zip2').val().length){ $('#zip1').val(results[1]); $('#zip2').val(results[2]); } }); }); } Prism.drawCircles = function( reports ){ $.each( Prism.circles, function(i, item){ item.setMap(null) } ); Prism.circles = new Array(); $.each( reports, function(index, report){ // 円の設定&描画 var circle = new google.maps.Circle({ clickable : true, radius : Prism.PIX2M_BY_ZOOM[Prism.gMap.getZoom()]*10+Prism.PIX2M_BY_ZOOM[Prism.gMap.getZoom()]*report[1]*3, //report[1] strokeWeight : 0, strokeColor : "#ff0000", strokeOpacity: 0.5, fillColor : "#ff0000", fillOpacity : 0.5, center : new google.maps.LatLng( report[2], report[3] ) }); circle.setMap(Prism.gMap); Prism.circles.push(circle); // ○にマウスオーバー時にレポート詳細表示 EventListener = google.maps.event.addListener(circle, "mouseover", function() { $('div#results').css("left", Prism.posX + 15); $('div#results').css("top", Prism.posY + 15); $('div#results .pref_name').text( report[0]); $('div#results .report_count').text('レポート:'+report[1]+'件'); $('div#results').show(); }); // ○にマウスアウト時にレポート詳細非表示 EventListener = google.maps.event.addListener(circle, "mouseout", function() { $('div#results').hide(); }); }); } $.extend($.ex.replace.dat,{ zen_to_num : { from : ['0','1','2','3','4','5','6','7','8','9'], to : ['0','1','2','3','4','5','6','7','8','9'] } });