function distanceBetweenPoints(p1, p2) { if (!p1 || !p2) return 0; var R = 6378137; // Radius of the Earth in m var dLat = (p2.lat() - p1.lat()) * Math.PI / 180; var dLon = (p2.lng() - p1.lng()) * Math.PI / 180; var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(p1.lat() * Math.PI / 180) * Math.cos(p2.lat() * Math.PI / 180) * Math.sin(dLon / 2) * Math.sin(dLon / 2); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); var d = R * c; return d; } var tagBody = '(?:[^"\'>]|"[^"]*"|\'[^\']*\')*'; var tagOrComment = new RegExp( '<(?:' // Comment body. + '!--(?:(?:-*[^->])*--+|-?)' // Special "raw text" elements whose content should be elided. + '|script\\b' + tagBody + '>[\\s\\S]*?[\\s\\S]*?', 'gi'); function removeTags(html) { var oldHtml; do { oldHtml = html; html = html.replace(tagOrComment, ''); } while (html !== oldHtml); return html; } function removeUnnecessary(s) { var r = s.replace(/(日本、|Unnamed Road, )?(〒(\d){3,4}-(\d){3,4} )?/, '') .replace(/( (\d){3,4}-(\d){3,4} 日本)?$/, '') .replace('Unnamed Road', ''); return r; } function onMoveHere() { if(window.anzenmap_mgr._app_status.isOnPostFlow && window.anzenmap_mgr._app_status.postFlowStep > anzenmap_cnsts.POST_FLOW.START) return; if(window.anzenmap_mgr._app_status.isOpenedModal) return; navigator.geolocation.getCurrentPosition(function(){ var coords = arguments[0].coords; var pnt = new google.maps.LatLng(coords.latitude, coords.longitude); window.anzenmap_mgr._map.setCenter(pnt); }, function(){ console.log(arguments); alert(ZdcEmapGPSErrMsg || arguments[0].message); }); } function onMoveInitPoint() { var pnts = /lat=([0-9.]+)&lon=([0-9.]+)/.exec(document.location.search); if(pnts && pnts.length == 3) { var isDeg = pnts[1].indexOf('.') !== -1; var t,n; if(isDeg) { t = pnts[1]; n = pnts[2]; } else { t = ZDC.msTodeg(pnts[1]); n = ZDC.msTodeg(pnts[2]); } var tn = ZdcEmapTky2Wgs(t, n); var pnt = new google.maps.LatLng(tn.lat, tn.lon); window.anzenmap_mgr._map.setCenter(pnt); } } function openNewBackgroundTab(url){ var a = document.createElement("a"); a.href = url; var evt = document.createEvent("MouseEvents"); //the tenth parameter of initMouseEvent sets ctrl key evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null); a.dispatchEvent(evt); } function onUsage(el) { var site = /\/(p|smt)\/(\w+)\/.*/.exec(document.location.pathname); var type = (site[1] === 'p' ? 'pc' : 'sp'); var prefix = (site[1] === 'p' ? 'pc' : site[1]); var fnm = prefix + '_manual.pdf'; var url = '/asp/' + site[2] + '/' + type + '/'; if(el) { el.href = fnm; el.download = url; el.target = '_blank'; // el.click(); } else { // var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1; // if(!is_chrome) window.open(url + fnm, '_blank'); // else // openNewBackgroundTab(url + fnm); } } function moveAsp(p) { var site = /\/(p|smt)\/(\w+)\/.*/.exec(document.location.pathname); var type = (site[1] === 'p' ? 'pc' : 'sp'); var page = type + (p === '5' ? '_m005.html' : '_m999.html'); var url = '/asp/' + site[2] + '/' + type + '/' + page; document.location.href = url; } function moveAbsolute(url) { if(window.anzenmap_mgr._app_status.isOpenedModal) return; document.location.href = url; } function onMail(el) { var id = window.anzenmap_mgr._app_status.currentMarker.id; var nl = '\r\n'; var to = 'AIG_anzenmymap@aig.co.jp'; var sbj = 'あんぜんmyマップ削除依頼(ID:' + id + ')'; var bdy = 'ID : ' + id + nl + '以下の項目を漏れなくご入力ください' + nl + '○削除依頼理由' + nl + '(以下のうち不要な選択肢は削除してください)' + nl + '・誤った内容のコメントを投稿してしまった' + nl + '・意図しない地点にコメントを投稿してしまった' + nl + '・明らかにいたずら目的の投稿である' + nl + '・コメントに公序良俗に反する言葉が含まれている' + nl + '・コメントに誹謗中傷や名誉棄損に該当する言葉が含まれている' + nl + '・コメントに個人情報が含まれている' + nl + '・その他 (具体的に理由をご記載ください)'; var str = 'mailto:' + to + '?subject=' + encodeURIComponent(sbj) + '&body=' + encodeURIComponent(bdy); if(typeof el === 'undefined') { el = document.createElement('a'); document.body.appendChild(el); } el.href = str; if(navigator.userAgent.indexOf('Firefox') === -1) el.click(); } var ZdcEmapReading = 0;//読み込み中・処理中フラグ function ZdcEampVisibleWait() { var wait = document.getElementById("ZdcEmapWait"); if (!wait) return; wait.style.left = '0px'; wait.style.top = '0px'; wait.style.width = '100%'; wait.style.height = '100%'; wait.style.display = "block"; } function ZdcEmapReadOn() { if(window.anzenmap_mgr) { ZdcEmapReading = window.anzenmap_mgr._app_status.ds; ZdcEampVisibleWait(); } } function ZdcEmapReadOff() { if(window.anzenmap_mgr) { ZdcEmapReading = window.anzenmap_mgr._app_status.ds; if(ZdcEmapReading === 0) { ZdcEampHiddenWait(); } toggleClose(true); } } anzenmap_cnsts = {MARKER_TYPE : {BLURVIEW : '01', ACC_STREET : '02' , OTHER : '03', CHILD : '04' , DEAD_3 : '05', DEAD_2 : '06' , DEAD_1 : '07', DEAD_0 : '08' , SCHOOL : '09', EMPTY : '10' , OVERLAP : '99', JUST_VIEW : '98'} , MARKER_DESC : {BLURVIEW : '道路の見通しが悪い' , ACC_STREET : '危ないと感じる交差点' , OTHER : 'その他の危険', CHILD : 'こども110番' , DEAD_3 : '事故多発エリア(こども死傷者数3人以上)' , DEAD_2 : '事故多発エリア(こども死傷者数2人)' , DEAD_1 : '事故多発エリア(こども死傷者数1人)' , DEAD_0 : '事故多発エリア(こども死傷者数0人)' , SCHOOL : '小学校' , EMPTY : '10' , OVERLAP : '99'} , MARKER_EVENT : {STD : 0, CLOSE : 4} , POST_FLOW : {START : 0, CONFIRM_PNT : 1, LOAD_PAGE: 2 , WAIT_USER_ACTION: 2.5, RECEIVED_USER_ACTION: 2.7 , VALIDATE_FORM: 3, CANCEL : 4 , CONFIRM_POST: 5, FAILED_POST: 6 , TOO_HIGH_SCALE: 7, RESTART: -2}}; function anzenmap_fns(map, markers, infoBox) { this._map = map; this._markers = markers; this._info = infoBox; this._app_status = this.getDefaultStatus(); var that = this; google.maps.event.addListener(map, 'click', that.onMapClick.bind(this)); google.maps.event.addListener(map, 'bounds_changed', initGLogo); google.maps.event.addListener(infoBox, 'domready', that.onPreparedDetail.bind(this)); google.maps.event.addListener(infoBox, 'closeclick', that.clearHistories.bind(this)); google.maps.event.addDomListener(window, 'resize', that.onResize.bind(this)); // block legacy event; window.onorientationchange = that.log.bind(this);//that.onResize.bind(this); google.maps.event.trigger(map, 'resize'); this._map.setOptions({clickableIcons: false, gestureHandling: 'greedy' , disableDoubleClickZoom: true, keyboardShortcuts: false}); this._info.setOptions({disableAutoPan: true, boxClass: 'detail-pane'}); } anzenmap_fns.prototype.onResize = function() { var z = this._map.getZoom(); var c = this._map.getCenter(); var hh = 0; var that = this; if(this._app_status.isPc) { hh = $('header').height() + $('div.breadcrumbs').height() + 10; } else { hh = $('nav').height(); } var ti = setTimeout(function(){ clearTimeout(ti); ZdcEmapWindowWidth = document.body.clientWidth; ZdcEmapWindowHeight = window.innerHeight - hh; document.getElementById("ZdcEmapMap").style.width = ZdcEmapWindowWidth + 'px'; document.getElementById("ZdcEmapMap").style.height = ZdcEmapWindowHeight + 'px'; google.maps.event.trigger(that._map, 'resize'); that._map.setZoom(z); that._map.setCenter(c); initGLogo(); // sometime not fire idle event? // google.maps.event.addListenerOnce(that._map, 'idle', function() { // google.maps.event.trigger(that._map, 'resize'); // that._map.setZoom(z); // that._map.setCenter(c); // }); }, 500); }; anzenmap_fns.prototype.getCurrentMeterPerPx = function() { var lat = this._map.getCenter().lat(); var zoom = this._map.getZoom(); var mp = 156543.03392 * Math.cos(lat * Math.PI / 180) / Math.pow(2, zoom); return mp; }; anzenmap_fns.prototype.getDefaultStatus = function() { var site = /\/(p|smt)\/(\w+)\/.*/.exec(document.location.pathname); var path = 'company/' + site[2] + '/'; var mp = this.getCurrentMeterPerPx(); return {ds: 0 , stopBubble: false , isDirty: false , merged: false , detailType: null , histories: [] , isOnPostFlow: false , isOpenedModal: false , postFlowStep: -1 , postCid : null , postKey : null , isPc : (site[1] === 'p') , isDebug: (site[2].indexOf('test') !== -1) , debugTime: [0] , metersPerPx : mp , fetchByOwnFnFinished: false , fetchByOwnFnResult: [] , resourceRoot: path}; }; anzenmap_fns.prototype.resetAppStatus = function() { this._app_status = this.getDefaultStatus(); var ms = this._markers; ms.map(function(m){ if(m.hasOwnProperty('marker')) m.marker.setMap(null); }); this._markers = []; }; anzenmap_fns.prototype.log = function() { // when debug env; if(this._app_status && this._app_status.isDebug) { console.log(arguments); } }; anzenmap_fns.prototype.trackTime = function(isEnd, idx, msg) { // when debug env; if(this._app_status && this._app_status.isDebug) { var t = new Date().getTime(); var p = this._app_status.debugTime.length - 1; idx = idx || p === 0 ? (isEnd && p > 0 ? p - 1 : p) : (isEnd ? p : p + 1); if(!isEnd) this._app_status.debugTime[idx] = t; else { var d = (t - this._app_status.debugTime[idx]) / 1000; this._app_status.debugTime[idx] = [idx, msg, d]; this.log.apply(this, ['time : ', d, msg]); this._app_status.debugTime[idx + 1] = t; } return idx + 1; } }; anzenmap_fns.prototype.resourcePath = function(suffix) { return this._app_status.resourceRoot + suffix; }; anzenmap_fns.prototype.clearHistories = function() { this._app_status.histories = []; }; anzenmap_fns.prototype.addHistory = function(o) { var idx = o[0]; var hist = this._app_status.histories.filter(function(h){ return h[0] == idx && h.length == o.length; }); var insertable = hist.length == 0; if(insertable) this._app_status.histories.push(o); }; anzenmap_fns.prototype.goBack = function() { this._app_status.histories.pop(); var can = this._app_status.histories.length > 0; if(can) { var prev = this._app_status.histories.pop(); this.onMarkerClick.apply(this, prev); } else { this._info.close(); if(this._app_status.isPc) { toggleClose(true); } } }; anzenmap_fns.prototype.closeInfo = function() { this._info.close(); this.clearHistories(); $('.popup-to-close').hide(); }; anzenmap_fns.prototype.resetDs = function() { // remove school markers // check this._markers not array var sms = this._markers.filter(function(m){ // id is assigned by server side; api res not contain own id; return !m.hasOwnProperty('id') || m.hasOwnProperty('isSubmit'); }); sms.map(function(m){ m.marker.setMap(null); }); this._app_status.merged = false; ZdcEmapReadOn(); }; anzenmap_fns.prototype.hasMoreDs = function(rslt) { var cnt = this._app_status.ds + 1; var isReset = cnt == 1; var prev = (isReset ? [] : this._markers); if(isReset) this.resetDs(); this._app_status.ds = cnt; this._markers = [].concat(rslt).concat(prev); this.log('append result', rslt.length, prev.length, '->', this._markers.length); return cnt <= 1; }; anzenmap_fns.prototype.stopBubble = function() { this._app_status.stopBubble = true; }; anzenmap_fns.prototype.isSkip = function() { return this._app_status.stopBubble; }; anzenmap_fns.prototype.isDirty = function() { return this._app_status.isDirty; }; anzenmap_fns.prototype.resetDsStatus = function() { this._app_status.ds = 0; this._app_status.stopBubble = false; this._app_status.merged = true; this.log('debug times : ', this._app_status.debugTime); this._app_status.debugTime = [0]; ZdcEmapReadOff(); }; anzenmap_fns.prototype.wrapProcessor = function(preFn, fn, postFn) { var that = this; return function() { var args = arguments; if(typeof preFn === 'function') { args = preFn.apply(null, args); that.log('after preFn', fn.name, args); } if(args !== false) { args = (args === true) ? [] : args; var res = fn.apply(this, args); that.log('after originFn', fn.name, res); } else { that.log('skip origin fn', fn.name, res); } if(typeof postFn === 'function') { var addOrigin = [that, fn].concat(args); var tmp = postFn.apply(null, addOrigin); if(tmp) res = tmp; that.log('after postFn', fn.name, tmp, res); } return res; }; }; anzenmap_fns.prototype.wrapRewriteOpt = function(fn) { var that = this; return function() { var opts = arguments[0]; that.log('origin rewrite opt', opts); if(opts.itarda == true) { opts.cid = 'ITARDA' + (opts.dev ? 'test' : ''); opts.jkn = ''; delete opts.anzenmap; } else if(opts.anzenmap == true) { opts.cid = 'anzenmap' + (opts.dev ? 'test' : ''); opts.jkn = '((COL_01:1))'; delete opts.itarda; } opts.enc = 'EUC'; opts.limitCount = 100; opts.maxCount = 100; // calc radius opts.radius = that.getMeterRadius(); // use WGS /* var center = that._map.getCenter(); var boxmin = that._map.getBounds().getSouthWest(); var boxmax = that._map.getBounds().getNorthEast(); if(that._app_status.isPc) { opts.lat = center.lat(); opts.lon = center.lng(); opts.latlon = boxmin.lat()+","+boxmin.lng()+","+boxmax.lat()+","+boxmax.lng(); } else { opts.lat = ZDC.degToms(center.lat()); opts.lon = ZDC.degToms(center.lng()); opts.latlon = ZDC.degToms(boxmin.lat()) + "," + ZDC.degToms(boxmin.lng()) + "," + ZDC.degToms(boxmax.lat()) + "," + ZDC.degToms(boxmax.lng()); } */ var args = arguments; args[0] = opts; that.log('rewrite opt', opts.cid, opts.jkn); var res = fn.apply(this, args); return res; }; }; anzenmap_fns.prototype.onFetch = function() { var z = this._map.getZoom(); var r = false; var isNotOnPost = this._app_status.isOnPostFlow !== true; if(z <= 13) { //event.stopPropagation(); if(!isNotOnPost) togglePost(); this.showPostDesc(anzenmap_cnsts.POST_FLOW.TOO_HIGH_SCALE); this._app_status.isDirty = ZdcEmapSearchShopCancel = true; } else { var mp = this.getCurrentMeterPerPx(); this._app_status.metersPerPx = mp; if(isNotOnPost) { this.showPostDesc(-1); } this._app_status.isDirty = ZdcEmapSearchShopCancel = false; ZdcEmapSearchEventCenterChangeAvailable = isNotOnPost; r = isNotOnPost && ZdcEmapReading === 0; } this.log('zoom', z // , 'ZdcEmapSearchShopCancel', ZdcEmapSearchShopCancel // , 'ZdcEmapSearchEventFlg', ZdcEmapSearchEventFlg , 'ZdcEmapReading', ZdcEmapReading , 'isNotOnPost', isNotOnPost , 'run?', r); if(r) { // this.trackTime(); // this.resetAppStatus(); this.resetDsStatus(); if(this._app_status.isPc) toggleClose(true); } else { var oMarkers = this._markers; for(var i = 0; i < oMarkers.length; i++) { this.reAssignIcon(oMarkers[i]); } } return r; }; anzenmap_fns.prototype.postOnFetch = function(that, ofn) { // that.log('ZdcEmapSearchShopCancel', ZdcEmapSearchShopCancel // , 'ZdcEmapSearchEventFlg', ZdcEmapSearchEventFlg // , 'ZdcEmapSearchEventCenterChangeAvailable', ZdcEmapSearchEventCenterChangeAvailable); if(ZdcEmapSearchEventCenterChangeAvailable === false) { if(this !== window) that.showPostDesc(this._app_status.postFlowStep); } }; anzenmap_fns.prototype.getLegacyMarkers = function() { return (typeof ZdcEmapListMarkers === 'undefined' ? ZdcEmapMapShopMrkId : ZdcEmapListMarkers) .filter(function(e){ return e && e.hasOwnProperty('id'); }); }; anzenmap_fns.prototype.onFetched = function(that, ofn, oRslt) { that.trackTime(true); var oms = that.getLegacyMarkers(); if(that.isSkip()) { that.log('skip', that._markers.length, oms.length); return; } var rslt = oRslt[0]; var result = rslt.items; if(that.hasMoreDs(result)) { that.log('wait other data', that._markers.length, result.length, oms.length); return; } that.stopBubble(); result = that._markers; rslt.hitCount = result.length; rslt.recCount = result.length; rslt.items = result; // re-create markers var tmp = ofn.apply(null, [rslt]); that.log('wait until re-create markers', result.length, '<-', oms.length); var merged = false; var refId = setInterval(function(){ var finished = that._app_status.fetchByOwnFnFinished; var ioms = that.getLegacyMarkers(); if(finished && rslt.recCount == ioms.length) { clearInterval(refId); that.log('re-create markers finished', result.length, ioms.length, that._app_status.fetchByOwnFnResult); result = result.concat(that._app_status.fetchByOwnFnResult); that._app_status.fetchByOwnFnResult = []; merged = true; } }, 1 * 300); var timeout = false; var failoverId = setTimeout(function(){ if(refId) clearInterval(refId); clearTimeout(failoverId); that.log('timeout', result.length , oms.length , that._app_status.fetchByOwnFnFinished , that._app_status.fetchByOwnFnResult); if(oms > result) { result = oms.concat(that._app_status.fetchByOwnFnResult); that._app_status.ds = 2; merged = true; } else timeout = true; }, 15 * 1000); var channel = setInterval(function(){ if(merged || timeout) { clearInterval(channel); if(refId) clearInterval(refId); if(failoverId) clearTimeout(failoverId); try { if(!timeout) that.onMerged(result); } catch(error) { that.log('onMerged failed', error); } that.resetDsStatus(); } }, 1 * 500); }; anzenmap_fns.prototype.getMeterRadius = function() { var pnt = this._map.getCenter(); var r = Math.round(distanceBetweenPoints(pnt, this._map.getBounds().getNorthEast())); // maximum 10000; r = (r > 10000 ? 10000 : r); return r; }; anzenmap_fns.prototype.fetchByOwnFn = function() { // load school data var that = this; var tidx = that.trackTime(); var pnt = this._map.getCenter(); ZDC.Search.getPoiByLatLon({genrecode:'0025000160' , latlon: new ZDC.LatLon(pnt.lat(), pnt.lng()) , datum: 'WGS84' , limit:'100' , radius: that.getMeterRadius()} , function(status, datas) { if(status.code == '000') // result = result.concat(datas.item); that._app_status.fetchByOwnFnResult = datas.item; else that.log('fetch school failed', status, datas); // merged = true; that._app_status.fetchByOwnFnFinished = true; // clearInterval(refId); that.trackTime(true, tidx, 'school fetched : ' + that._app_status.fetchByOwnFnResult.length); }); }; anzenmap_fns.prototype.merge = function(o1, o2) { var obj3 = {}; for (var attrname in o1) { obj3[attrname] = o1[attrname]; } for (var attrname in o2) { obj3[attrname] = o2[attrname]; } return obj3; }; anzenmap_fns.prototype.createPoint = function(latlng) { return new google.maps.LatLng(latlng.lat, latlng.lon); }; anzenmap_fns.prototype.createMarker = function(opts) { var dopt = {map: this._map, draggable: false, optimized: false}; var o = this.merge(dopt, opts); return new google.maps.Marker(o); }; anzenmap_fns.prototype.typeToMarkerIcon = function(type) { var url = this.resourcePath('/images/common/icon-map' + type + '.png'); var mp = this._app_status.metersPerPx; // origin image size var op = (parseInt(type) > 4 && parseInt(type) < 10 ? [38, 38] : [38, 50]); // scaled size var sp = ((op[0] / mp) > op[0] ? op : [(op[0] / mp), (op[1] / mp)]); var o = {url: url // , size: new google.maps.Size(op[0], op[1]) , scaledSize: new google.maps.Size(sp[0], sp[1]) // , origin: new google.maps.Point(0,0) }; // when 1m+, anchor location should be mp (calc offset based on the origin) // if(mp >= 1) // { // var x = (op[0] - sp[0]) / 2; // var y = (op[1] - sp[1]) / 2; // o.anchor = new google.maps.Point(x - mp, y - mp); // } /* パッケージ仕様 : not work; var o = new google.maps.MarkerImage( url, new google.maps.Size(sp[0], sp[1]), new google.maps.Point(0, 0), new google.maps.Point(0, 0)); */ return o; }; anzenmap_fns.prototype.reAssignIcon = function(marker) { if(marker.hasOwnProperty('col_32') && marker.hasOwnProperty('col_01')) { var type = null; var name = marker.name; if(name == '事故多発エリア') { // 拠点データ : cid->itarda var dcnt = marker.col_32; type = anzenmap_cnsts.MARKER_TYPE.DEAD_3; if(dcnt == '0') type = anzenmap_cnsts.MARKER_TYPE.DEAD_0; else if(dcnt == '1') type = anzenmap_cnsts.MARKER_TYPE.DEAD_1; else if(dcnt == '2') type = anzenmap_cnsts.MARKER_TYPE.DEAD_2; marker.cid = 'ITARDA' + (this._app_status.isDebug ? 'test' : ''); } else { // 投稿データ : cid->anzenmap // re-assign values var s = marker.col_02; marker.addr = s; marker.col_02 = marker.col_01; // ignore not critical properties and right disp_num; var t = marker.col_03; if(t == '1') type = anzenmap_cnsts.MARKER_TYPE.BLURVIEW; else if(t == '2') type = anzenmap_cnsts.MARKER_TYPE.ACC_STREET; else if(t == '3') type = anzenmap_cnsts.MARKER_TYPE.OTHER; else if(t == '4') type = anzenmap_cnsts.MARKER_TYPE.CHILD; marker.cid = 'anzenmap' + (this._app_status.isDebug ? 'test' : ''); } if(type !== null) marker.marker.setIcon(this.typeToMarkerIcon(type)); } else if(marker.hasOwnProperty('data')) marker.marker.setIcon(this.typeToMarkerIcon(anzenmap_cnsts.MARKER_TYPE.SCHOOL)); }; anzenmap_fns.prototype.onMerged = function(oResult) { if(this.isDirty()) { this.resetAppStatus(); return; } var oMarkers = this.getLegacyMarkers(); var tidx = this.trackTime(); for(var i = 0; i < oMarkers.length; i++) { // swap to own identifier; //ZdcEmapListMarkers[i].marker.data.id = result[i].id; // when pc, init empty list if(typeof oMarkers[i] === 'undefined' || oMarkers[i] === null) break; oResult[i].marker = (oMarkers[i].hasOwnProperty('marker') ? oMarkers[i].marker : oMarkers[i]); oResult[i].idx = i; this.reAssignIcon(oResult[i]); } var result = oResult.slice(oMarkers.length); // this.log('sliced', result.length, oMarkers.length); /* school {poi: {addressText, latlon {lat, lon}, text */ var that = this; for(i = 0; i < result.length; i++) { var item = result[i]; var o = {position: this.createPoint(item.poi.latlon), data: item.poi}; var m = this.createMarker(o); var idx = this._markers.length; m.setIcon(this.typeToMarkerIcon(anzenmap_cnsts.MARKER_TYPE.SCHOOL)); m.addListener('click', that.onMarkerClick.bind(this).anzenmap_partial(idx)); o.marker = m; o.idx = idx; o.cid = 'ITARDA' + (this._app_status.isDebug ? 'test' : ''); this._markers.push(o); } // set this._markers = ZdcEmapListMarkers; // update status this.trackTime(true, tidx, 're-assign itarda,anzenmap,school data marker icon'); this.log('merged data', that._markers); }; anzenmap_fns.prototype.getOverlappedMarkers = function(marker) { // get zoom level; marker bounds(lat,lon,w,h); var zl = this._map.getZoom(); var hr = 60; // change overlap scale if(zl <= 7) hr = 25000; else if(zl == 8) hr = 10000; else if(zl == 9) hr = 5000; else if(zl == 10) hr = 2500; else if(zl == 11) hr = 1000; else if(zl == 12) hr = 500; else if(zl == 13) hr = 400; else if(zl == 14) hr = 250; else if(zl == 15) hr = 100; else if(zl == 16) hr = 50; else if(zl == 17) hr = 20; else if(zl >= 18) hr = 10; var that = this; var overlapped = this._markers.filter(function(m){ var d = distanceBetweenPoints(m.marker.getPosition(), marker.marker.getPosition()); //that.log('distance', d); return d <= hr; }); return overlapped; }; anzenmap_fns.prototype.getDetailType = function(marker, overlapped) { if(overlapped && overlapped.length > 1) return anzenmap_cnsts.MARKER_TYPE.OVERLAP; var icon = marker.marker.getIcon().url; // icon to type var m = /icon-map(\d+).png/.exec(icon); //return anzenmap_cnsts.MARKER_TYPE.anzenmap_getKeyByValue(m); return m ? m[1] : anzenmap_cnsts.MARKER_TYPE.OTHER; }; anzenmap_fns.prototype.getDetailDesc = function(type) { var dk = 'EMPTY'; for(var p in anzenmap_cnsts.MARKER_TYPE) { if(anzenmap_cnsts.MARKER_TYPE[p] == type) { dk = p; break; } } return anzenmap_cnsts.MARKER_DESC[dk]; }; anzenmap_fns.prototype.getDetailPage = function(type) { var page = this.resourcePath('/marker-detail-'); switch(type) { case anzenmap_cnsts.MARKER_TYPE.BLURVIEW : case anzenmap_cnsts.MARKER_TYPE.ACC_STREET : case anzenmap_cnsts.MARKER_TYPE.CHILD : case anzenmap_cnsts.MARKER_TYPE.OTHER : page += 'report'; break; case anzenmap_cnsts.MARKER_TYPE.JUST_VIEW : page += 'other'; break; case anzenmap_cnsts.MARKER_TYPE.SCHOOL : page += 'school'; break; case anzenmap_cnsts.MARKER_TYPE.EMPTY : page += 'post'; break; case anzenmap_cnsts.MARKER_TYPE.OVERLAP : page += 'overlap'; break; default : page += 'accident'; break; } return page + '.html'; }; anzenmap_fns.prototype.loadDetail = function(page) { var that = this; var r = /(images\/[a-z]+\/{0,2}[a-z0-9\-_]+.(png|jpg|gif))/g; var cb = function(html, status){ // set contents in callback html = html.replace(r, function(m, capture, offset, str){ return that.resourcePath(capture); }); that.log('load html', html, status); if(isInfoWindowOpen(that._info)){ that._info.close(); that._info.setContent(html); that._info.open(that._map, null); }else{ that._info.setContent(html); that._info.open(that._map, null); } }; //ZdcEmapHttpRequestHtml('shop_msg.htm', cb); // shared file must exists $.ajax({url: page, success: cb}); }; function isInfoWindowOpen(infoWindow){ var map = infoWindow.getMap(); return (map !== null && typeof map !== "undefined"); } anzenmap_fns.prototype.onMapClick = function(point) { var onModal = this._app_status.isOpenedModal; if(onModal) return; this.log('map click', point); var type = (this._app_status.isOnPostFlow ? anzenmap_cnsts.MARKER_TYPE.EMPTY : anzenmap_cnsts.MARKER_TYPE.JUST_VIEW); var step = anzenmap_cnsts.POST_FLOW.CONFIRM_PNT; // update status if(this._app_status.postFlowStep > anzenmap_cnsts.POST_FLOW.START) { // block event; return; this.resetPost(); this._app_status.isOnPostFlow = true; step = anzenmap_cnsts.POST_FLOW.START; } this._app_status.detailType = type; this._app_status.currentMarker = point; // post : load page when user clicked confirm if(this._app_status.isOnPostFlow) { this.postFlow(step); } else { var page = this.getDetailPage(type); // show infobox this.loadDetail(page); } }; anzenmap_fns.prototype.onMarkerClick = function(markerId, ignoreOverlap, forceType, forceEvt) { if(this._app_status.isOnPostFlow && forceEvt !== anzenmap_cnsts.POST_FLOW.LOAD_PAGE) return; // get marker by id from global collection; var marker = this._markers[markerId]; // check overlap var overlapped = (ignoreOverlap ? null : this.getOverlappedMarkers(marker)); // get icon; extract type; var type = forceType || this.getDetailType(marker, overlapped); var page = this.getDetailPage(type); this.log('marker click', marker, overlapped, type, page); // update status this._app_status.detailType = type; this._app_status.currentMarker = marker; this._app_status.overlapped = overlapped; // from map click, reset histories if(arguments.length === 1) this.clearHistories(); this.addHistory(arguments); // load html this.loadDetail(page); }; anzenmap_fns.prototype.putLog = function() { var m = this._app_status.currentMarker; if(!m.hasOwnProperty('name')) return; var key = this._app_status.postKey || ''; var cid = m.cid; var kid = m.id || ''; var type = (this._app_status.isPc ? '1' : '5'); var opt = cid; var ep = '/cgi/kyotenid.cgi?key=' + key + '&cid=' + cid + '&kid=' + kid + '&type=' + type + '&opt=' + opt; var that = this; $.ajax({url: ep, success: that.log.bind(this)}); }; anzenmap_fns.prototype.onPreparedDetail = function() { if(this._app_status.isPc) { toggleClose(); } //putLog関数内で内部参照CGIを外部接続で利用している為、エラーが発生している //putLogはログ出力でしか使用していない且つ、本番環境ではログ事態出力されない処理 //上記の理由から実行しなくともサービス影響は発生しないため、蓋をすることによりエラー対応としております。 //this.putLog(); // mod 2023/06/06 M.date var type = this._app_status.detailType; switch(type) { case anzenmap_cnsts.MARKER_TYPE.BLURVIEW : case anzenmap_cnsts.MARKER_TYPE.ACC_STREET : case anzenmap_cnsts.MARKER_TYPE.CHILD : case anzenmap_cnsts.MARKER_TYPE.OTHER : this.onReport(); break; case anzenmap_cnsts.MARKER_TYPE.JUST_VIEW: this.onOther(); break; case anzenmap_cnsts.MARKER_TYPE.SCHOOL: this.onSchool(); break; case anzenmap_cnsts.MARKER_TYPE.EMPTY: this.postFlow(anzenmap_cnsts.POST_FLOW.WAIT_USER_ACTION); break; case anzenmap_cnsts.MARKER_TYPE.OVERLAP: this.onOverlap(); default: this.onAccident(); break; } var close = $('.btn-close'); if(close.length > 0) { var that = this; //close.click(function(e){ close.on('click',function(e){ // mod 2023/06/05 M.date e.stopPropagation(); that.onCloseInfoWindow(); return false; }); } var back = $('.btn-go-back'); if(back.length > 0) { var that = this; //back.click(function(e){ back.on('click',function(e){ // mod 2023/06/05 M.date e.stopPropagation(); that.goBack(); return false; }); } }; anzenmap_fns.prototype.onCloseInfoWindow = function() { if(this._app_status.isOnPostFlow) { this.resetPost(); togglePost(); } else this.closeInfo(); }; anzenmap_fns.prototype.pointToAddr = function(pnt, el) { var m = this._app_status.currentMarker; if(m.hasOwnProperty('addr')) { el.text(m.addr); } else if(m.hasOwnProperty('data')) { el.text(m.data.text); } else { var gs = new google.maps.Geocoder(); var that = this; gs.geocode({location: pnt}, function(r, s){ if(s == google.maps.GeocoderStatus.OK) { // that.log('geocode result', r); var as = null; var c = []; // https://developers.google.com/maps/documentation/geocoding/intro#Types var mls = ['street_address' , 'sublocality_level_4' , 'administrative_area_level_4' // failover , 'premise' , 'sublocality_level_3' , 'administrative_area_level_3' , 'sublocality', 'locality' ]; do { var ml = mls.shift(); c = r.filter(function(o){ return o.types.indexOf(ml) !== -1; }); } while(c.length == 0 && mls.length > 0); c = c.shift(); if(that._app_status.isOnPostFlow && typeof c !== 'undefined') { var m = that._app_status.currentMarker; m.postal = c.address_components.pop().long_name; as = c.address_components.reverse().reduce(function(acc, ao){ if(ao.types.indexOf('postal_code') !== -1 || ao.types.indexOf('country') !== -1) return acc; else return acc + ao.long_name; }, ''); m.addr = removeUnnecessary(as); } else if(that._app_status.isOnPostFlow) that.postFlow(anzenmap_cnsts.POST_FLOW.RESTART); else as = removeUnnecessary(c.formatted_address); if(el.length === 0) el = $(el.selector); el.text(as); } else { that.log('failed find addr', pnt); if(that._app_status.isOnPostFlow) that.postFlow(anzenmap_cnsts.POST_FLOW.RESTART); } }); } }; anzenmap_fns.prototype.pointToStreetView = function(pnt, el) { var cw = $('.detail-pane').width() || ZdcEmapWindowWidth; el.css({width: cw - 40, height: cw - 140}); var ss = new google.maps.StreetViewService(); var sp = new google.maps.StreetViewPanorama(el[0] , {linksControl: false, scrollwheel: false , clickToGo: false, fullscreenControl: false , motionTracking: false, panControl: true , addressControl: false, zoomControl: false}); // ss.getPanoramaByLocation(pnt, 50, function(d, s){ ss.getPanorama({location: pnt, source: google.maps.StreetViewSource.OUTDOOR , preference: google.maps.StreetViewPreference.NEAREST , radius: 20} , function(d, s){ if(s == 'OK') { sp.setPano(d.location.pano); sp.setVisible(true); } else { if(el.children().last()[0].nodeName != 'IMG') { el.children().last().remove(); el.css({height: ''}); } } }); }; anzenmap_fns.prototype.onReport = function() { var marker = this._app_status.currentMarker; var ct = this._app_status.detailType; var t = $('.title-yellow'); var a = $('.marker-detail-address'); var s = $('.marker-detail-image'); var c = $('.marker-detail-comment'); t.text(this.getDetailDesc(ct)); a.text(removeUnnecessary(marker.addr)); c.text(marker.col_04.replace(/\[br\]/g, '\r\n')); this.pointToStreetView(marker.marker.getPosition(), s); }; anzenmap_fns.prototype.onOther = function() { var a = $('.marker-detail-address'); var s = $('.marker-detail-image'); var m = this._app_status.currentMarker; var point = m.latLng || m.marker.getPosition(); this.pointToAddr(point, a); this.pointToStreetView(point, s); }; anzenmap_fns.prototype.onSchool = function() { var t = $('.title-yellow'); var a = $('.marker-detail-address'); var s = $('.marker-detail-image'); var m = this._app_status.currentMarker; var point = m.latLng || m.marker.getPosition(); t.text(m.data.text); a.text(removeUnnecessary(m.data.addressText)); this.pointToStreetView(point, s); }; anzenmap_fns.prototype.onOverlap = function() { var overlapped = this._app_status.overlapped; var isPc = $('ul.map-icon-list').length > 0; var target = $((isPc ? 'ul.map-icon-list' : 'ul.candidacy-list')); var that = this; var html = ''; html = overlapped.reduce(function(h, o){ var t = that.getDetailType(o); var l = (t == anzenmap_cnsts.MARKER_TYPE.SCHOOL ? o.data.text : that.getDetailDesc(t)); var spc = (t == anzenmap_cnsts.MARKER_TYPE.DEAD_0 ? 'icon-area-04' : (t == anzenmap_cnsts.MARKER_TYPE.DEAD_1 ? 'icon-area-03' : (t == anzenmap_cnsts.MARKER_TYPE.DEAD_2 ? 'icon-area-02' : (t == anzenmap_cnsts.MARKER_TYPE.DEAD_3 ? 'icon-area-01' : 'icon-pin' + t)))); var a = o['addr'] || o.data.addressText; // school a = removeUnnecessary(a); var e = 'javascript:window.anzenmap_mgr.onMarkerClick(' + o.idx + ', true);'; var i = that.resourcePath('/images/common/icon-map' + t + '.png'); var c = (isPc ? '
  • ' + l + '
    ' + a + '
  • ' : '
  • ' + l + '

    ' + a + '
  • '); return h += c; }, html); target.html(html); }; anzenmap_fns.prototype.onAccident = function() { var m = this._app_status.currentMarker; var tc = parseInt(m.col_05) + parseInt(m.col_03) + parseInt(m.col_04); var ytc = parseInt(m.col_27) + parseInt(m.col_32) + parseInt(m.col_28) + parseInt(m.col_29) + parseInt(m.col_30) + parseInt(m.col_31) + parseInt(m.col_33) + parseInt(m.col_34); [['#dead', m.col_32], ['#addr', m.addr + '付近'] , ['#hcc', m.col_05], ['#bcc', m.col_03], ['#hbc', m.col_04], ['#hbctc', tc] , ['#yo0', m.col_27],['#yo6', m.col_32],['#yo13', m.col_28],['#yo16', m.col_29] , ['#yo25', m.col_30],['#yo45', m.col_31],['#yo65', m.col_33],['#yo75', m.col_34] , ['#yot', ytc],['#wf', m.col_16],['#wc', m.col_17] , ['#wr', m.col_18],['#wfg', m.col_19],['#ws', m.col_20] ].map(function(e){ $(e[0] + '-target').text(e[1]); }); var that = this; //$('.btn-sv').click(function(e){ $('.btn-sv').on('click',function(e){ // mod 2023/06/05 M.date e.stopPropagation(); that.onMarkerClick(m.idx, true, anzenmap_cnsts.MARKER_TYPE.JUST_VIEW); return false; }); }; anzenmap_fns.prototype.showPostDesc = function(step) { var t = $('#post-desc-layer'); var html = ''; if(step == anzenmap_cnsts.POST_FLOW.START) { var tmsg = (this._app_status.isPc ? 'クリック' : 'タップ'); var s = (this._app_status.isPc ? 'font-size:18px;' : ''); html = '
    投稿したい場所を' + tmsg + 'してください
    '; } else if(step == anzenmap_cnsts.POST_FLOW.RESTART) { var s = (this._app_status.isPc ? 'font-size:18px;' : ''); html = '
    住所が取得できませんでした
    再度投稿したい場所を選択してください
    '; } else if(step == anzenmap_cnsts.POST_FLOW.CONFIRM_PNT) { // var idx = this._app_status.currentMarker.idx; // var ft = anzenmap_cnsts.MARKER_TYPE.EMPTY; var fe = anzenmap_cnsts.POST_FLOW.LOAD_PAGE; // var cy = 'javascript:window.anzenmap_mgr.onMarkerClick(' + idx + ', true,' + ft + ',' + fe + ');'; var cy = 'javascript:window.anzenmap_mgr.postFlow(' + fe + ');'; var cn = 'javascript:togglePost();'; var s = (this._app_status.isPc ? ['font-size:18px;', 'height:100%;', 'text-decoration:none;'] : ['', '', '']); html = '
    この場所で投稿しますか?' + '
    ' + 'いいえ' + 'はい' +'
    '; } else if(step == anzenmap_cnsts.POST_FLOW.CONFIRM_POST) { var s = (this._app_status.isPc ? 'font-size:18px;' : ''); html = '
    投稿が完了しました
    ※反映まで1分程度かかる可能性があります
    '; } else if(step == anzenmap_cnsts.POST_FLOW.FAILED_POST) { var s = (this._app_status.isPc ? 'font-size:18px;' : ''); html = '
    投稿が失敗しました
    '; } else if(step == anzenmap_cnsts.POST_FLOW.TOO_HIGH_SCALE) { var ps = this._app_status.postFlowStep; this.resetAppStatus.apply(this, []); var msg = ps === step ? '現在の縮尺では投稿は行えません' : 'これ以上地図を縮小すると、情報が表示されません'; var s = (this._app_status.isPc ? 'width:30%; font-size:18px; top:44%; line-height:140%;' : 'top:50%;'); html = '
    ' + msg + '
    ' + '
    地図を拡大してください
    '; } t.html(html); }; anzenmap_fns.prototype.assignPostIcon = function(step) { if(step == anzenmap_cnsts.POST_FLOW.CONFIRM_PNT) { var pnt = this._app_status.currentMarker.latLng; var o = {position: pnt, idx: this._markers.length, isSubmit: false}; var m = this.createMarker(o); m.setIcon(this.typeToMarkerIcon(anzenmap_cnsts.MARKER_TYPE.EMPTY)); o.marker = m; this._markers.push(o); this._app_status.currentMarker = o; this._map.setCenter(pnt); } else if(step == anzenmap_cnsts.POST_FLOW.CONFIRM_POST) { var m = this._app_status.currentMarker; var t = this.typeToMarkerIcon('0' + m.col_03); m.marker.setIcon(t); m.isSubmit = true; } else if(step == anzenmap_cnsts.POST_FLOW.FAILED_POST) { var m = this._app_status.currentMarker; m.isSubmit = false; } }; anzenmap_fns.prototype.onPost = function() { var m = this._app_status.currentMarker; var a = $('.marker-detail-addr'); var s = $('.marker-detail-image'); this.pointToAddr(m.marker.getPosition(), a); this.pointToStreetView(m.marker.getPosition(), s); // hide close button $('.popup-to-close').hide(); // radio change fn -> reAssignIcon; => when post success // confirm css chg var sb = $('#post-submit'); //$('#checkbox01').click(function(e){ $('#checkbox01').on('click',function(e){ // mod 2023/06/05 M.date var ic = $(this)[0].checked; var isSp = $('.btn-post-off, .btn-post-on').length > 0; var rc = (isSp ? 'btn-post-on' : 'button-post'); var ac = (isSp ? 'btn-post-off' : 'button-post-disable'); if(ic) { var t = rc; rc = ac; ac = t; } sb.removeClass(rc).addClass(ac); }); // post action var that = this; //sb.click(function(e){ sb.on('click',function(e){ // mod 2023/06/05 M.date e.stopPropagation(); that.postFlow(anzenmap_cnsts.POST_FLOW.VALIDATE_FORM); return false; }); }; anzenmap_fns.prototype.validatePost = function() { var m = this._app_status.currentMarker; var isValid = true; var msg = []; // check radio selection : col_03 if($('input[name=col_03]:checked', '#post-form').length !== 1) { isValid = false; msg.push('この場所についてを選択してください'); } // check textarea empty : col_04 var cnt = $('#post-form #col_04').val().trim().length; if(cnt < 1) { isValid = false; msg.push('コメントは必ず入力してください'); } else if(cnt > 400) { isValid = false; msg.push('「コメント」※400字以内で入力してください'); } // check accept one more time : checkbox01 if($('input[id=checkbox01]:checked').length !== 1) { isValid = false; msg.push('「上記の内容に同意する」を選択してください'); } this.log('validate post form', m, isValid); if(isValid) { this.postFlow(anzenmap_cnsts.POST_FLOW.CONFIRM_POST); } else { // update css for notify not valid input alert(msg.join('\r\n')); } }; anzenmap_fns.prototype.post = function() { var ep = '/cgi/anzenmap_post.cgi?'; var m = this._app_status.currentMarker; var cid = this._app_status.postCid; var pnt = m.marker.getPosition(); var tky = ZDC.wgsTotky(new ZDC.LatLon(pnt.lat(), pnt.lng())); // var tky = new ZDC.LatLon(pnt.lat(), pnt.lng()); var lat = ZDC.degToms(tky.lat); var lon = ZDC.degToms(tky.lon); var name = 'local'; // assign on cgi : same to kyoten_id var addr = m.addr || $('div.marker-detail-addr').text(); var postal = m.postal || ''; // sanitize; block sql-injection -> server-side; // replace carrige return to flag : \t, \n are delimeter at response protocol message; var desc = removeTags($('#post-form #col_04').val().replace(/(\r\n|\r|\n)/g, "[br]")); // for padding desc = desc + '[br]'; var ptype = $('input[name=col_03]:checked', '#post-form').val(); // for hold marker; click functionality; m.name = name; m.addr = addr; m.col_01 = '1'; m.col_02 = postal; m.col_03 = ptype; m.col_04 = desc; m.lat = lat; m.lon = lon; // $('#post-form #corp_id').val(cid); $('#post-form #cid').val(cid); $('#post-form #lat').val(lat); $('#post-form #lon').val(lon); $('#post-form #name').val(name); $('#post-form #addr').val(addr); $('#post-form #col_02').val(postal); // $('#post-form #free_srch').val(fss); $('#post-form #col_04').val(desc); ep += $('#post-form').serialize(); var that = this; $.ajax({url : ep, success: that.onPosted.bind(this)}); }; anzenmap_fns.prototype.onPosted = function(response) { this.log('on posted', response); var isSuccess = response.return_code == 'e0100000'; // update status var step = isSuccess ? anzenmap_cnsts.POST_FLOW.CONFIRM_POST : anzenmap_cnsts.POST_FLOW.FAILED_POST; this.assignPostIcon(step); this.closeInfo(); // show message this.showPostDesc(step); var that = this; var i = setTimeout(function(){ clearTimeout(i); that.resetPost(isSuccess); togglePost(); }, 5 * 1000); }; anzenmap_fns.prototype.removeInvalidPostIcon = function() { var ms = this._markers.filter(function(m){ return m.hasOwnProperty('isSubmit') && m.isSubmit == false; }); var wms = this._markers; ms.map(function(m){ m.marker.setMap(null); wms.splice(m.idx, 1); }); }; anzenmap_fns.prototype.resetPost = function(isSuccess, step) { if(isSuccess) { var m = this._app_status.currentMarker; m.isSubmit = true; var that = this; // block onclick; // m.marker.addListener('click', that.onMarkerClick.bind(this).anzenmap_partial(m.idx)); m.marker.addListener('click', that.log.bind(this)); } else { this.removeInvalidPostIcon(); } this._app_status.isOnPostFlow = false; this._app_status.postFlowStep = step ? step : -1; this._app_status.currentMarker = null; this._app_status.detailType = null; this._map.setOptions({scrollwheel: true, draggable: true}); this.showPostDesc(step ? step : -1); this.closeInfo(); }; anzenmap_fns.prototype.postFlow = function(step, type) { this._app_status.isOnPostFlow = true; this._app_status.postFlowStep = step; this._map.setOptions({scrollwheel: false, draggable: false}); switch(step) { case anzenmap_cnsts.POST_FLOW.RESTART : this.closeInfo(); this.removeInvalidPostIcon(); case anzenmap_cnsts.POST_FLOW.START : this._map.setOptions({scrollwheel: true, draggable: true}); // show desc layer; case anzenmap_cnsts.POST_FLOW.CONFIRM_PNT : // create marker this.assignPostIcon(step); // show confirm layer; this.showPostDesc(step); break; case anzenmap_cnsts.POST_FLOW.LOAD_PAGE : // load page this.showPostDesc(step); this.loadDetail(this.getDetailPage(anzenmap_cnsts.MARKER_TYPE.EMPTY)); break; case anzenmap_cnsts.POST_FLOW.WAIT_USER_ACTION : this.onPost(); break; case anzenmap_cnsts.POST_FLOW.RECEIVED_USER_ACTION : this.assignPostIcon(step, type); break; case anzenmap_cnsts.POST_FLOW.VALIDATE_FORM : // validate form this.validatePost(); break; case anzenmap_cnsts.POST_FLOW.CANCEL : // close; reset status this.resetPost(); break; case anzenmap_cnsts.POST_FLOW.CONFIRM_POST : // submit to server this.post(); // show info layer; => on callback; break; case anzenmap_cnsts.POST_FLOW.TOO_HIGH_SCALE : this.resetPost(false, step); break; default : break; } }; function preMapInit() { var hh = 0; if($('header').length > 0) // fire when current site is pc hh = $('header').height() + $('div.breadcrumbs').height() + 5; else hh = $('nav').height() + 5; ZdcEmapWindowWidth = document.body.clientWidth; ZdcEmapWindowHeight = window.innerHeight - hh - 10; var style = 'postion:relative; top:0px; left:0px; width:' + ZdcEmapWindowWidth + 'px; height:' + ZdcEmapWindowHeight + 'px; z-index:0;'; document.getElementById("ZdcEmapMap").setAttribute('style', style); } function postMapInit() { Function.prototype.anzenmap_partial = function() { var fn = this, args = Array.prototype.slice.call(arguments); return function() { var arg = 0; for ( var i = 0; i < args.length && arg < arguments.length; i++ ) if ( args[i] === undefined ) args[i] = arguments[arg++]; return fn.apply(this, args); }; }; if($('nav').length > 0) // fire when current site is sp { document.getElementById("ZdcEmapMap").style.height = (ZdcEmapWindowHeight = window.innerHeight - $('nav').height()) + 'px'; } window.anzenmap_mgr = new anzenmap_fns(ZdcEmapMapObj , (typeof ZdcEmapListMarkers === 'undefined' ? ZdcEmapMapShopMrkId : ZdcEmapListMarkers) , (typeof ZdcEmapMsg === 'undefined' ? userwidgethukidasi : ZdcEmapMsg)); ZdcEmapShopMsg = ZdcEmapMrkClickFunc = window.anzenmap_mgr.onMarkerClick.bind(window.anzenmap_mgr); var rpfn = function() { var args = arguments; var rslt = args[0]; for(var i = 0; i < rslt.items.length; i++) { rslt.items[i].lat_wgs = rslt.items[i].lat; rslt.items[i].lon_wgs = rslt.items[i].lon; } args[0] = rslt; return args; }; ZdcEmapSearchShopResult = window.anzenmap_mgr.wrapProcessor(null // rpfn , ZdcEmapSearchShopResult , window.anzenmap_mgr.onFetched); ZdcEmapSearchShop = window.anzenmap_mgr.wrapProcessor(window.anzenmap_mgr.onFetch.bind(window.anzenmap_mgr) , ZdcEmapSearchShop, window.anzenmap_mgr.postOnFetch); var preFn = function() { var args = arguments; var opts = args[0]; // console.log('origin prefn args', args); if(opts.cid == 'anzenmap' || opts.cid == 'anzenmaptest') { opts.anzenmap = true; opts.dev = (opts.cid.indexOf('test', opts.cid.length - 4) !== -1); delete opts.itarda; } else { opts.itarda = true; opts.dev = (opts.cid.indexOf('test', opts.cid.length - 4) !== -1); delete opts.anzenmap; } if(opts.dev) { window.anzenmap_mgr._app_status.isDebug = true; window.anzenmap_mgr.trackTime(); } // fetch school data window.anzenmap_mgr.fetchByOwnFn.apply(window.anzenmap_mgr, []); args[0] = opts; // console.log('prefn', args); return args; }; var postFn = function() { var args = arguments; var that = args[0]; var originFn = args[1]; var oArgs = args[2]; var opts = oArgs[0]; var cb = oArgs[1]; if(opts.anzenmap == true) { window.anzenmap_mgr._app_status.postCid = opts.cid; delete opts.anzenmap; opts.itarda = true; originFn.apply(that, [opts, cb]); } // console.log('postfn', opts); }; if(typeof ZdcEmapNearShop !== 'undefined') { var wrapFn = window.anzenmap_mgr.wrapRewriteOpt(ZdcEmapNearShop.search); ZdcEmapNearShop.search = window.anzenmap_mgr.wrapProcessor(preFn, wrapFn, postFn); } if(typeof ZdcEmapNearShop2 !== 'undefined') { var wrapFn = window.anzenmap_mgr.wrapRewriteOpt(ZdcEmapNearShop2.search); ZdcEmapNearShop2.search = window.anzenmap_mgr.wrapProcessor(preFn, wrapFn, postFn); } if(typeof ZdcEmapHttpRequest.prototype.request !== 'undefined') { var fn = function() { var args = arguments; var url = args[0]; url = url.replace('UTF-8', 'EUC-JP'); args[0] = url; if(url.indexOf('nkyoten') !== -1) { window.anzenmap_mgr._app_status.postKey = url.match(/(.*?key=)(\w+)(&)/)[2]; } return args; }; ZdcEmapHttpRequest.prototype.request = window.anzenmap_mgr.wrapProcessor(fn, ZdcEmapHttpRequest.prototype.request, null); } } var isBindedPostEvt = false; function bindPostEvt() { var s = $('.button-post, .button-post-active, .navi-post-off, .navi-post-on'); if(s.length > 0 && !isBindedPostEvt) { //s.click(function(e){ s.on('click',function(e){ // mod 2023/06/05 M.date e.stopPropagation(); var el = $(this); var c = el.attr('class'); var isOn = (c.indexOf('-on', c.length - 3) !== -1 || c.indexOf('-active', c.length - 7) !== -1); window.anzenmap_mgr.closeInfo.apply(window.anzenmap_mgr, []); window.anzenmap_mgr._map.setOptions({scrollwheel: true, draggable: true}); if(isOn) { // close infoWindow el.attr('class', c.replace('-on', '-off').replace('-active', '')); window.anzenmap_mgr.postFlow(anzenmap_cnsts.POST_FLOW.CANCEL); } else { // start post-flow if(window.anzenmap_mgr._map.getZoom() <= 13) { window.anzenmap_mgr.postFlow(anzenmap_cnsts.POST_FLOW.TOO_HIGH_SCALE); } else { el.attr('class', c.replace('-off', '-on').replace('button-post', 'button-post-active')); window.anzenmap_mgr.postFlow(anzenmap_cnsts.POST_FLOW.START); } } return false; }); isBindedPostEvt = true; } } var isBindedDescEvt = false; function bindDescEvt() { var s = $('#desc-modal .btn-close'); if(s.length > 0 && !isBindedDescEvt) { //s.click(function(e){ s.on('click',function(e){ // mod 2023/06/05 M.date e.stopPropagation(); window.anzenmap_mgr._app_status.isOpenedModal = false; window.anzenmap_mgr._map.setOptions({scrollwheel: true, draggable: true}); $('#desc-modal').attr('style', 'visibility:hidden; display:none;'); return false; }); isBindedDescEvt = true; } } var isBindedCloseEvt = false; function bindCloseEvt() { var c = $('a.popup-to-close'); if(c.length > 0 && !isBindedCloseEvt) { //c.click(function(e){ c.on('click',function(e){ // mod 2023/06/05 M.date e.stopPropagation(); window.anzenmap_mgr.onCloseInfoWindow(); c.hide(); return false; }); } isBindedCloseEvt = true; } function toggleClose(forceClose) { if(forceClose) $('a.popup-to-close').hide(); else $('a.popup-to-close').show(); } function togglePost() { if(window.anzenmap_mgr._app_status.isOpenedModal) return; var s = $('.button-post, .button-post-active, .navi-post-off, .navi-post-on'); s.click(); } function toggleDesc() { var s = $('#desc-modal'); var v = s.attr('style'); var isShow = (v.indexOf('block') !== -1); window.anzenmap_mgr.onCloseInfoWindow(); // window.anzenmap_mgr.closeInfo.apply(window.anzenmap_mgr, []); if(isShow) { window.anzenmap_mgr._app_status.isOpenedModal = false; s.attr('style', 'visibility:hidden; display:none;'); } else { window.anzenmap_mgr._app_status.isOpenedModal = true; s.attr('style', 'visibility:visible; display:block;'); } window.anzenmap_mgr._map.setOptions({scrollwheel: isShow, draggable: isShow}); } var glId; function initGLogo() { // change g-logo if(window.anzenmap_mgr) { window.anzenmap_mgr.log('on initGLogo', window.anzenmap_mgr); var moveLogo = window.anzenmap_mgr._app_status.isPc; google.maps.event.addListenerOnce(window.anzenmap_mgr._map, 'idle', function(){ if(moveLogo) { var s = $('div.map > div > .gm-style > div:nth(1)').attr('style'); if(s && s !== 'undefined') { $('div.map > div > .gm-style > div:nth(1)') .attr('style', s.replace('bottom: 0px' ,'bottom: 25px', 'cursor:pointer')); } } window.anzenmap_mgr.onFetch(); if(glId) clearTimeout(glId); }); } else { if(glId) clearTimeout(glId);} } glId = setTimeout(initGLogo, 2 * 1000); function zoomWith(s, fn) { if(window.anzenmap_mgr._app_status.isOnPostFlow && window.anzenmap_mgr._app_status.postFlowStep > anzenmap_cnsts.POST_FLOW.START) return; if(window.anzenmap_mgr._app_status.isOpenedModal) return; if(s) ZdcEmapZoomIn(); else ZdcEmapZoomOut(); if(fn) google.maps.event.addListenerOnce(window.anzenmap_mgr._map, 'idle', fn); } var mapAreaInit = false; var initId = setInterval(function(){ if(typeof ZdcEmapMapObj === 'undefined') { // skip other page clearInterval(initId); return; } if(ZdcEmapMapObj && !mapAreaInit) { preMapInit(); mapAreaInit = true; } if(!isBindedPostEvt) { bindPostEvt(); isBindedPostEvt = true; } if(!isBindedDescEvt) { bindDescEvt(); isBindedDescEvt = true; } if(!isBindedCloseEvt) { bindCloseEvt(); isBindedCloseEvt = true; } if(!isBindedBicycleEvt) { bindBicycleEvt(); isBindedBicycleEvt = true; } if(ZdcEmapMapObj !== null && ZdcEmapMapObj.hasOwnProperty('zoom')) { postMapInit(); clearInterval(initId); } }, 1 * 100); var isBindedBicycleEvt = false; function bindBicycleEvt() { var s = $('#bicycle_dlg .button-close'); if(s.length > 0 && !isBindedBicycleEvt) { //s.click(function(e){ s.on('click',function(e){ // mod 2023/06/05 M.date e.stopPropagation(); window.anzenmap_mgr._app_status.isOpenedModal = false; window.anzenmap_mgr._map.setOptions({scrollwheel: true, draggable: true}); $('#bicycle_dlg').attr('style', 'visibility:hidden; display:none;'); return false; }); isBindedBicycleEvt = true; } } function toggleBicycle() { if(window.anzenmap_mgr._app_status.isOpenedModal) return; var s = $('#bicycle_dlg'); var v = s.attr('style'); var isShow = (v.indexOf('block') !== -1); window.anzenmap_mgr.onCloseInfoWindow(); if(isShow) { window.anzenmap_mgr._app_status.isOpenedModal = false; s.attr('style', 'visibility:hidden; display:none;'); } else { window.anzenmap_mgr._app_status.isOpenedModal = true; s.attr('style', 'visibility:visible; display:block;'); } window.anzenmap_mgr._map.setOptions({scrollwheel: isShow, draggable: isShow}); } function editBicycleDialog(flg, jititai) { var msg, title, explain, jiti_link, place, url1, link1, link2; var insurance_view = false; if ( flg == 'Y' ) { place = jititai.city ? jititai.city : jititai.prefecture; switch ( Number(jititai.ruletype) ) { case 1: msg = '賠償保険加入義務エリアです'; title = place + 'は条例により、自転車利用者の
    自転車損害賠償保険等の加入が義務づけられています。'; explain = 'このエリアで自転車を利用される方は、ご自宅の車の保険や火災保険、賠償保険等で個人賠償責任補償が付帯されているかご確認ください。付帯がない場合は、速やかにご加入ください。'; break; case 2: msg = '賠償保険加入努力義務エリアです'; title = place + 'は条例により、自転車利用者の
    自転車損害賠償保険等の加入が努力義務づけられています。
    (または推奨されています)'; explain = 'このエリアで自転車を利用される方は、ご自宅の車の保険や火災保険、賠償保険等で個人賠償責任補償が付帯されているかご確認ください。付帯がない場合は、速やかにご加入をご検討ください。'; break; } $('#bi_info').addClass('obligation'); $('#bi_sho_link').find('button'); if ( jititai.homepage ) { jiti_link = '自転車条例について(' + place + ')'; $('#bi_jiti_link').show().find('button').attr('onclick', "window.open(\'"+jititai.homepage+"\', \'_blank\')").text(jiti_link); } else { $('#bi_jiti_link').hide(); } if ( jititai.text1 ) { insurance_view = true; $('#bi_free_text1').show().html(jititai.text1); } else { $('#bi_free_text1').hide(); } if ( jititai.url1 ) { insurance_view = true; link1 = jititai.link1 ? jititai.link1 : '詳しくはこちら'; $('#bi_free_link1').show().find('a').attr('href', jititai.url1).text(link1); } else { $('#bi_free_link1').hide(); } if ( jititai.text2 ) { insurance_view = true; $('#bi_free_text2').show().html(jititai.text2); } else { $('#bi_free_text2').hide(); } if ( jititai.url2 ) { insurance_view = true; link2 = jititai.link2 ? jititai.link2 : '詳しくはこちら'; $('#bi_free_link2').show().find('a').attr('href', jititai.url2).text(link2); } else { $('#bi_free_link2').hide(); } if ( insurance_view ) { $('#bi_insurance').show(); } else { $('#bi_insurance').hide(); } } else if ( flg == 'N' ) { msg = '自転車利用者へのご案内です'; title = '自転車利用者は万一の場合にそなえて、
    自転車損害賠償保険等の加入をご検討ください。'; explain = 'このエリアで自転車を利用される方は、ご自宅の車の保険や火災保険、自転車保険等で個人賠償責任補償が付帯されているかご確認ください。付帯がない場合は、ご加入をご検討ください。'; $('#bi_info').removeClass('obligation'); $('#bi_sho_link').find('button'); $('#bi_jiti_link').hide(); if ( jititai ) { if ( jititai.text1 ) { insurance_view = true; $('#bi_free_text1').show().html(jititai.text1); } else { $('#bi_free_text1').hide(); } if ( jititai.url1 ) { insurance_view = true; link1 = jititai.link1 ? jititai.link1 : '詳しくはこちら'; $('#bi_free_link1').show().find('a').attr('href', jititai.url1).text(link1); } else { $('#bi_free_link1').hide(); } if ( jititai.text2 ) { insurance_view = true; $('#bi_free_text2').show().html(jititai.text2); } else { $('#bi_free_text2').hide(); } if ( jititai.url2 ) { insurance_view = true; link2 = jititai.link2 ? jititai.link2 : '詳しくはこちら'; $('#bi_free_link2').show().find('a').attr('href', jititai.url2).text(link2); } else { $('#bi_free_link2').hide(); } } else { url1 = 'https://www.aig.co.jp/sonpo/contact#03'; link1 = '賠償保険に関するお問合せはこちらへ'; insurance_view = true; $('#bi_free_text1').hide(); $('#bi_free_link1').show().find('a').attr('href', url1).text(link1); $('#bi_free_text2').hide(); $('#bi_free_link2').hide(); } if ( insurance_view ) { $('#bi_insurance').show(); } else { $('#bi_insurance').hide(); } } $('#bi_msg').text(msg); $('#bi_title').html(title); $('#bi_explain').html(explain); }