/* カスタマイズ用のJavaScriptコードをここに記述してください */ // メッセージ用ウィジェット var messagewidget = null; // 縮尺レベルセレクタ(スマホ) var lvlselector = null; // 移動前緯度経度 var preLatLon = null; // メッセージフラグ // 拠点検索時の地図移動+縮尺変更を行う際に地図移動時にメッセージを飛ばさない var messageFlag = false; // 初期化 function CustomMapInit() { var mapdiv = document.getElementById("ZdcEmapMap"); mapdiv.style.visibility = "visible"; lvlselector = document.getElementById( "ZdcEmapLvlSelect" ); setMapControlsEnable(false); // 地図のイベント登録 //ZDC.MAP_CHG_LATLON 緯度経度の変更 //ZDC.MAP_CHG_ZOOM 縮尺レベルの変更 ZDC.addListener(ZdcEmapMapObj, ZDC.MAP_CHG_LATLON, changeLatLon); ZDC.addListener(ZdcEmapMapObj, ZDC.MAP_CHG_ZOOM, changeZoom); // postMessageのイベントリスナ追加 window.addEventListener('message',messageListener); } // 地図画面上のコントロールの活性・非活性操作 function setMapControlsEnable(enable) { if (enable == false) { // ドラッグ操作無効化 ZdcEmapMapObj.dragOff(); // ホイールでのズーム操作無効化 ZdcEmapMapObj.zoomOff(); // 縮尺レベル変更セレクタの非活性化 if (lvlselector != null) { lvlselector.disabled = true; } } else { // ドラッグ操作有効化 ZdcEmapMapObj.dragOn(); // ホイールでのズーム操作有効化 ZdcEmapMapObj.zoomOn(); // 縮尺レベル変更セレクタの活性化 if (lvlselector != null) { lvlselector.disabled = false; } } } // postMessage送信 function sendMessage(message) { window.parent.postMessage(message, "*"); } // postMessage受信 function messageListener(event) { // 拠点IDのメッセージ // store:xxxx,xxxxx, if (event.data.indexOf("store") == 0) { // 拠点ID // setStoreの実装はmapview_0 // setStoreは↓のsearchKyotenListを呼ぶ setStore(event.data.substring("store:".length)); setMapControlsEnable(true); } } // 拠点検索+アイコンプロット function searchKyotenList(url) { if (messagewidget != null) { messagewidget.close(); } // add start 2016/07/29 H.Yasunaga 吹き出しをとじる [ ZdcEmapShopMsgClose(); // 吹き出しを閉じる // add end ] var currentZoom = ZdcEmapMapObj.getZoom(); var currentLatLon = ZdcEmapMapObj.getLatLon(); ZdcEmapSearchClickFlg = 0; var httpReq = new ZdcEmapHttpRequest('EUC', 'EUC'); httpReq.request(url, function(reference_text,status){ var result = new NKyotenResult(reference_text, status); if (result.items.length == 0) { alert("該当する店舗がありません。"); return; } ZdcEmapSearchShopResult(result); var latlonArray = new Array(); for(var i = 0; i < result.items.length; i++) { // ミリ秒から十進度形式に変換してZDC.LatLonオブジェクトを生成 var latlon = new ZDC.LatLon(ZDC.msTodeg(result.items[i].lat), ZDC.msTodeg(result.items[i].lon)); // 配列に格納 latlonArray.push(latlon); } // fix:true 戻り値のlatlonは現在の地図の中心点の緯度経度と同じ // fix:false 戻り値のlatlonは、latlonsで指定された点列が全て含まれる最小の矩形の中心点 // mod start 2016/07/29 H.Yasunaga 中心点の移動を行わない //var adjustObj = ZdcEmapMapObj.getAdjustZoom(latlonArray, {fix:false}); var adjustObj = ZdcEmapMapObj.getAdjustZoom(latlonArray, {fix:true}); // mod end ] if (adjustObj != null) { // getAdjustZoomでnull以外が成功 // getAdjustZoomの戻り値のオブジェクトのlatlonが中心座標 zoomが縮尺 if (currentZoom != adjustObj.zoom) { // 縮尺が変わる場合はmoveLatLonで[box:xxx,〜]が送られないよう抑止のフラグを立てる messageFlag = true; } ZdcEmapMapObj.moveLatLon(adjustObj.latlon); ZdcEmapMapObj.setZoom(adjustObj.zoom); } }); } // 検索結果解析 function NKyotenResult(text_data,status) { if( text_data == null ){ ZdcSetErrorStatus.call(this, '', status); return; } //header var res = new Array(); res = text_data.split('\n'); var header = res.shift(); var cols = header.split('\t'); var retcd = cols[0]; var cnt = parseFloat(cols[1]); var hitcnt = parseFloat(cols[2]); var rest = ( retcd.charAt(3) == '0' && retcd.charAt(7) == '1' )? true : false; //Parameter Error Check if( retcd.charAt(3) == '1' ){ ZdcSetErrorStatus.call(this, retcd); return; } //record this.retCode = retcd; this.type = ''; this.status = status; this.recCount = cnt; this.hitCount = hitcnt; this.rest = rest; this.items = []; for(var i=0; i18) lvl = 0; var item = new NkyotenItem(cols,lvl); this.items.push(item); } } // 1拠点分のデータ[COL_xxはなし] function NkyotenItem(cols, lvl) { this.id = cols[0]; this.lat = cols[1]; this.lon = cols[2]; this.icon = cols[3]; this.dist = cols[4]; this.nflg = cols[5]; this.name = cols[9]; this.addr = cols[14]; this.lvl = lvl; } // メッセージの表示 function setMessage(message) { var mapsize = ZdcEmapMapObj.getMapSize(); if (messagewidget != null) { messagewidget.close(); } // 地図のサイズ -20 を最大とみる // (地図サイズ - 20) / 文字数 が一文字あたりのピクセル数 // 1文字当たりのピクセル数からフォントサイズを算出 var charpixel = Math.floor((mapsize.width - 20) / message.length); // ピクセルからフォントへ変換 var fontpoint = Math.floor((charpixel/96*72*100)/100); var widgetlabel = { html: '

' + message + '

', // +2はボーダーの分 size: new ZDC.WH(message.length * charpixel, (charpixel * 3) + 2) }; messagewidget = new ZDC.StaticUserWidget({ top: mapsize.height/2 - (((charpixel * 3) + 2) /2),left: (mapsize.width /2) - ((message.length * charpixel) /2) }, widgetlabel); /* ユーザウィジットを追加 */ ZdcEmapMapObj.addWidget(messagewidget); /* ユーザウィジットを表示 */ messagewidget.open(); } // 地図の緯度経度変更時のコールバック function changeLatLon() { var nowcenter = ZdcEmapMapObj.getLatLon(); if (preLatLon == null) { preLatLon = nowcenter; // 緯度経度の変更を送信 // pos:緯度,経度 // mod start 2016/07/29 H.Yasunaga 10進度形式→ミリ秒形式 //sendMessage("pos:" + nowcenter.lat + "," + nowcenter.lon); sendMessage("pos:" + ZDC.degToms(nowcenter.lat) + "," + ZDC.degToms(nowcenter.lon)); // mod end ] } else { // 拠点IDセット時の地図移動と縮尺変更で2回postMessageしないようガード if (messageFlag == true) { messageFlag = false; return; } preLatLon = nowcenter; var nowbox = ZdcEmapMapObj.getLatLonBox(); var minlatlon = nowbox.getMin(); var maxlatlon = nowbox.getMax(); // 縮尺の変更を送信 // box:最小緯度,最大緯度,最小経度,最大経度 // mod start 2016/07/29 H.Yasunaga 10進度形式→ミリ秒形式 //sendMessage("box:" + minlatlon.lat + "," + maxlatlon.lat + "," + minlatlon.lon + "," + maxlatlon.lon); sendMessage("box:" + ZDC.degToms(minlatlon.lat) + "," + ZDC.degToms(maxlatlon.lat) + "," + ZDC.degToms(minlatlon.lon) + "," + ZDC.degToms(maxlatlon.lon)); // mod end ] } } // 縮尺変更イベントのコールバック function changeZoom() { var nowbox = ZdcEmapMapObj.getLatLonBox(); var minlatlon = nowbox.getMin(); var maxlatlon = nowbox.getMax(); // 縮尺の変更を送信 // box:最小緯度,最大緯度,最小経度,最大経度 // mod start 2016/07/29 H.Yasunaga 10進度形式→ミリ秒形式 //sendMessage("box:" + minlatlon.lat + "," + maxlatlon.lat + "," + minlatlon.lon + "," + maxlatlon.lon); sendMessage("box:" + ZDC.degToms(minlatlon.lat) + "," + ZDC.degToms(maxlatlon.lat) + "," + ZDC.degToms(minlatlon.lon) + "," + ZDC.degToms(maxlatlon.lon)); // mod end ] } // 現在地取得のコールバックから呼ばれる function nowLocSuccessCallback(lat, lon) { // 世界測地系でGPSの座標を取得 var wgs = new ZDC.LatLon(lat, lon); // 測地系を日本測地系に変換 var tky = ZDC.wgsTotky(wgs); if (preLatLon == null) { // 地図移動 ZdcEmapMapObj.moveLatLon(tky); // 緯度経度の保存 ZdcEmapMapObj.setHome(tky); } // 親フレームに中心緯度経度を送信は緯度経度変更のイベントコールバック //sendMessage("pos:" + tky.lat + "," + tky.lon); } // 現在地取得のコールバックから呼ばれる function nowLocErrorCallback(err) { // del start 2016/08/02 H.Yasunaga 位置取得失敗時は日本全域が見える中心と縮尺で表示 [ //var nowcenter = ZdcEmapMapObj.getLatLon(); //preLatLon = nowcenter; // 緯度経度の変更を送信 // pos:緯度,経度 // mod start 2016/07/29 H.Yasunaga 10進度形式→ミリ秒形式 //sendMessage("pos:" + nowcenter.lat + "," + nowcenter.lon); //sendMessage("pos:" + ZDC.degToms(nowcenter.lat) + "," + ZDC.degToms(nowcenter.lon)); // mod end ] // del end ] // del start 2016/08/03 H.Yasunaga 位置取得失敗時は東京駅でズームアウトなし [ // add start 2016/08/02 H.Yasunaga 位置取得失敗時は日本全域が見える中心と縮尺で表示 [ // 位置取得失敗時は日本全域が見える縮尺に変更 //messageFlag = true; // 宗谷岬(45.5140472, 141.9515444)と佐多岬(30.9935278, 130.6613083)が含まれる地図の中心位置 // 縮尺レベルは0固定 //var centerLatLon = new ZDC.LatLon(38.2537875, 136.30642634999998); //ZdcEmapMapObj.moveLatLon(centerLatLon); //ZdcEmapMapObj.setZoom(0); // add end ] // del end ] // add start 2016/08/03 H.Yasunaga 位置取得失敗時は東京駅でズームアウトなし [ var nowcenter = ZdcEmapMapObj.getLatLon(); preLatLon = nowcenter; // 緯度経度の変更を送信 // pos:緯度,経度 sendMessage("pos:" + ZDC.degToms(nowcenter.lat) + "," + ZDC.degToms(nowcenter.lon)); // add end ] }