/* map.js v1.3 GoogleMapAPI v3用 2010.10.29: 住所から座標を取得できるように変更しました。 */ /*マップ表示用*/ var mapname; //マップID var company_name='株式会社中部不動産センター'; //マップID var mc_lat = 35.08788871002626; //中心座標の緯度(初期値) var mc_lng = 136.9632911682129; //中心座標の経度(初期値) var mp_lat = 35.08788871002626; //マーカーの緯度(初期値) var mp_lng = 136.9632911682129; //マーカーの経度(初期値) var zoom = 15; //ズーム値(初期値) var map; var maker; var currentInfoWindow = null; //最後に開いた情報ウィンドウを記憶 var locationLatLng; //単一マーカー用(座標取得) function map_single(mapname, mapcomment){ if($("#"+mapname)[0] != null){ var gmap_coords = $(".gmap_coord")[0]; //マップ座標を記述している要素 var gmap_address = $(".gmap_address")[0]; //住所を記述している要素 var mapdiv = $("#"+mapname)[0]; //マップを出力する要素 //吹き出し用コメント var comment = "
"; comment += $("#"+mapcomment)[0].innerHTML; comment += "
"; //座標データがある場合 if(gmap_coords != null){ var gmap_coords_array = gmap_coords.innerHTML.split(","); //マーカー座標+中心座標+ズーム値がそろっている場合 if(gmap_coords_array.length == 5){ mp_lat = parseFloat(gmap_coords_array[0]); mp_lng = parseFloat(gmap_coords_array[1]); mc_lat = parseFloat(gmap_coords_array[2]); mc_lng = parseFloat(gmap_coords_array[3]); zoom = parseInt(gmap_coords_array[4]); //マーカー座標+ズーム値しかない場合 }else if(gmap_coords_array.length == 3){ mp_lat = parseFloat(gmap_coords_array[0]); mp_lng = parseFloat(gmap_coords_array[1]); mc_lat = parseFloat(gmap_coords_array[0]); mc_lng = parseFloat(gmap_coords_array[1]); zoom = parseInt(gmap_coords_array[2]); //マーカー座標しかない場合 }else if(gmap_coords_array.length == 2){ mp_lat = parseFloat(gmap_coords_array[0]); mp_lng = parseFloat(gmap_coords_array[1]); mc_lat = parseFloat(gmap_coords_array[0]); mc_lng = parseFloat(gmap_coords_array[1]); //zoomはデフォルト値 }else{ alert("「gmap_coord」の中から座標を取得できませんでした。\r\n座標をご確認ください。"); } map_single_run(mapdiv, comment); //住所から座標を取得する場合 }else if(gmap_address != null){ var geocoder = new google.maps.Geocoder(); var inner_gmap_address = gmap_address.innerHTML; geocoder.geocode({'address': inner_gmap_address}, function(results, status) { //コールバック if (status == google.maps.GeocoderStatus.OK) { mp_lat = results[0].geometry.location.lat(); mp_lng = results[0].geometry.location.lng(); mc_lat = results[0].geometry.location.lat(); mc_lng = results[0].geometry.location.lng(); map_single_run(mapdiv, comment); }else{ alert("住所から座標を取得できませんでした。\r\n住所をご確認ください。"); } }); }else{ alert("「gmap_coord」または「gmap_address」のclassが見つからないため、地図を表示できませんでした。"); } } } //単一マーカー用(実行処理) function map_single_run(mapdiv, comment){ // マップオプション設定 var map_option = { center: new google.maps.LatLng(mc_lat, mc_lng), zoom: zoom, mapTypeId: google.maps.MapTypeId.ROADMAP // マップタイプ }; // マップ描画 map = new google.maps.Map(mapdiv, map_option); // マーカー表示 var get_obj = $(".gmap_title a")[0]; AddGMarker(get_obj, mp_lat, mp_lng, comment); } //複数マーカー用 function map_all(mapname, mapcommentlist){ // マップオブジェクト設定 var mapdiv = $("#"+mapname)[0]; var geocoder = new google.maps.Geocoder(); //緯度経度の最大値、最小値の初期値 var minLat = 999; var maxLat = 0; var minLng = 999; var maxLng = 0; var geocode_count = 0; var func_count = 0; //タグからデータを取得 var content_list = $("#"+mapcommentlist)[0]; var get_li_array = content_list.getElementsByTagName("li"); //項目 var get_gmap_address_array = $(".gmap_address"); var get_gmap_coord_array = $(".gmap_coord"); // 初期設定(とりあえずマップを表示させる) var LatLngCenter = new google.maps.LatLng(mc_lat,mc_lng); var map_option = { zoom: zoom, center: LatLngCenter, scrollwheel: false, mapTypeId: google.maps.MapTypeId.ROADMAP // マップタイプ }; map = new google.maps.Map(mapdiv, map_option); //マーカーを表示 //AddGMarker(get_obj, mp_lat, mp_lng, company_name); // データが空でない場合 if(get_li_array.length != 0){ //住所から座標を取得する項目が1つも無い場合 if(get_gmap_address_array[0] == null && get_li_array.length == get_gmap_coord_array.length){ for(i=0; i maxLat){ maxLat = mp_lat; } if(mp_lng < minLng){ minLng = mp_lng; } if(mp_lng > maxLng){ maxLng = mp_lng; } minLat = parseFloat(minLat); maxLat = parseFloat(maxLat); minLng = parseFloat(minLng); maxLng = parseFloat(maxLng); //中心座標とズームを自動調整 var minLatLng = new google.maps.LatLng(minLat,minLng); var maxLatLng = new google.maps.LatLng(maxLat,maxLng); var LatLngBounds = new google.maps.LatLngBounds(minLatLng,maxLatLng); LatLngCenter = LatLngBounds.getCenter(); zoom = map.fitBounds(LatLngBounds); } }else if(get_gmap_address_array[0] == null && get_li_array.length != get_gmap_coord_array.length){ alert("「gmap_coord」クラスで囲まれた座標が存在しない項目があります。"); //住所から座標を取得する項目がある場合 }else if(get_gmap_address_array[0] != null && get_li_array.length == get_gmap_address_array.length){ for(var i=0; i maxLat){ maxLat = mp_lat; } if(mp_lng < minLng){ minLng = mp_lng; } if(mp_lng > maxLng){ maxLng = mp_lng; } //一番最後の処理 if(func_count == get_li_array.length){ //座標をフロートパース minLat = parseFloat(minLat); maxLat = parseFloat(maxLat); minLng = parseFloat(minLng); maxLng = parseFloat(maxLng); //中心座標とズームを算出 var minLatLng = new google.maps.LatLng(minLat,minLng); var maxLatLng = new google.maps.LatLng(maxLat,maxLng); var LatLngBounds = new google.maps.LatLngBounds(minLatLng,maxLatLng); LatLngCenter = LatLngBounds.getCenter(); zoom = map.fitBounds(LatLngBounds); } geocode_count++; } }); } }else if(get_gmap_address_array[0] != null && get_li_array.length != get_gmap_address_array.length){ alert("住所から座標を取得する項目が1つでもある場合は、\r\nすべての項目の住所を「gmap_address」クラスで囲んでください。"); } } } //マーカー表示用関数 function AddGMarker(obj, arg_mp_lat, arg_mp_lng, arg_comment){ arg_mp_lat = parseFloat(arg_mp_lat); arg_mp_lng = parseFloat(arg_mp_lng); var position = new google.maps.LatLng(arg_mp_lat, arg_mp_lng); // マーカーオブジェクト生成 var marker = new google.maps.Marker({ position: position, icon: icon, map: map }); //情報ウィンドウ描画 var infoWindow = new google.maps.InfoWindow({ content: arg_comment }); //マーカーをクリックした場合 google.maps.event.addListener(marker,"click",function(){ if (currentInfoWindow) { currentInfoWindow.close(); } currentInfoWindow = infoWindow; infoWindow.open(map,marker); }); var browser_type = browser(); //リストから店名をクリックした場合 if(browser_type == "MSIE"){ obj.attachEvent("onclick",function(){ if (currentInfoWindow) { currentInfoWindow.close(); } currentInfoWindow = infoWindow; infoWindow.open(map,marker); }); }else{ obj.addEventListener("click",function(){ if (currentInfoWindow) { currentInfoWindow.close(); } currentInfoWindow = infoWindow; infoWindow.open(map,marker); }, false); } } //ブラウザ判別 function browser(){ if(navigator.userAgent.indexOf("Opera") != -1){ type = "Opera"; }else if(navigator.userAgent.indexOf("MSIE") != -1){ type = "MSIE"; }else if(navigator.userAgent.indexOf("Firefox") != -1){ type = "Firefox"; }else if(navigator.userAgent.indexOf("Netscape") != -1){ type = "Netscape"; }else if(navigator.userAgent.indexOf("Safari") != -1){ type = "Safari"; }else{ type = "Safari"; } return type; }