/*
map.js v1.3
GoogleMapAPI v3用
2010.10.29: 住所から座標を取得できるように変更しました。
*/
/*マップ表示用*/
var mapname; //マップID
var company_name='有限会社米本不動産'; //マップID
var mc_lat = 35.22030476137202; //中心座標の緯度(初期値)
var mc_lng = 136.88538640737533; //中心座標の経度(初期値)
var mp_lat = 35.22030476137202; //マーカーの緯度(初期値)
var mp_lng = 136.88538640737533; //マーカーの経度(初期値)
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";
//マーカー用座標
var inner_gmap_coord = $(".gmap_coord")[i].innerHTML;
var inner_gmap_coord_array = inner_gmap_coord.split(',');
mp_lat = inner_gmap_coord_array[0];
mp_lng = inner_gmap_coord_array[1];
mp_lat = parseFloat(mp_lat);
mp_lng = parseFloat(mp_lng);
//数字の表示
icon = "../images/map_icon/marker";
icon += i+1;
icon += ".png";
var get_obj = $(".gmap_title a")[i];
//マーカーを表示
AddGMarker(get_obj, mp_lat, mp_lng, comment);
//中心座標を取得するため、緯度経度の最小値と最大値を取得する
if(mp_lat < minLat){
minLat = mp_lat;
}
if(mp_lat > 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";
//座標をそのまま取得できる場合
if(inner_gmap_coord != ""){
//マーカー用座標
var inner_gmap_coord_array = inner_gmap_coord.split(',');
mp_lat = inner_gmap_coord_array[0];
mp_lng = inner_gmap_coord_array[1];
normal_flag = 1;
//住所から座標に変換する場合
}else if (status == google.maps.GeocoderStatus.OK) {
//座標を取得
mp_lat = results[0].geometry.location.lat();
mp_lng = results[0].geometry.location.lng();
normal_flag = 1;
}
if(normal_flag == 1){
//座標をパースフロート
mp_lat = parseFloat(mp_lat);
mp_lng = parseFloat(mp_lng);
//マーカー出力
var get_obj = $(".gmap_title a")[geocode_count];
AddGMarker(get_obj, mp_lat, mp_lng, comment);
//中心座標を取得するため、緯度経度の最小値と最大値を取得する
if(mp_lat < minLat){
minLat = mp_lat;
}
if(mp_lat > 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;
}