/** * @class 航空写真表示コントロールクラス */ function HskAerial(){ // ----------------------------------------------------------------------------- // [ Layers relation ] // // + lay - // + charLay | // + mapLay --+ shapeLay | // base-| + center mark | // | + iconLay(& eventLay) | // | + dummy | // | | // + copy right + // // // parent <-------------------------------------> child // ----------------------------------------------------------------------------- var instanceID; var base; var mapLay; var iconLay; var shapeLay; var lay; var charLay; var dummy; var eventLay; var centerMark; var copyRight; var offsetX = 0; // temp variable for mouse X var offsetY = 0; // temp variable for mouse Y var totalMoveX = 0; // temp variable for mouse move X var totalMoveY = 0; // temp variable for mouse move Y var year = ''; var width; // width of aerial control var height; // height of aerial control var numx; // number of tiles in direction of X var numy; // number of tiles in direction of Y var tilenum; // number of all tiles var indx; // deference of index in direction of X var indy; // deference of index in direction of Y var laySumX; // move X[px] from default point var laySumY; // move Y[px] from default point var minXNo; // minimum tile No. in direction of X var minYNo; // minimum tile No. in direction of Y var maxXNo; // maximum tile No. in direction of X var maxYNo; // maximum tile No. in direction of Y var minXPos; // minimum position in direction of X var minYPos; // minimum position in direction of Y var isMD = false; // flag of mousedown var isDrag = false; // flag of dragging var pointerX = 0; // X coordinates of mouse pointer var pointerY = 0; // Y coordinates of mouse pointer var tilewidth = AerialCom.tileWidth; // width of tile var tileheight = AerialCom.tileHeight; // height of tile var timerArray = new Array(); // timer ID array var iconArray = new Array(); // icon array var shapeArray = new Array(); // shape array var point = new AerialPoint(); // center point var scaleLv = AerialCom.defaultScaleLv; // scale Lv. var imgObjArray = new Array(); var charLayState = true; // charactor layer visible state var iconIndexCount = 0; var shapeIndexCount= 0; // template instance of shape var _polyline; var _polygon; // Prop /** * 配置するドキュメントエレメント * @type DocumentElement */ this.targetLayer = null; /** * 表示領域の幅(px) * @type int */ this.aerialWidth = AerialCom.aerialDefaultWidth; /** * 表示領域の高さ(px) * @type int */ this.aerialHeight = AerialCom.aerialDefaultHeight; /** * 初期表示の中心の座標 * @type AerialPoint */ this.defaultCenterPoint = new AerialPoint(); /** * 初期表示の縮尺レベル * @type int */ this.defaultScaleLv = null; /** * 拡大/縮小を行った際にエフェクトを表示/非表示の制御フラグ * @type bool * @default true */ this.zoomEffect = true; /** * マウスホイールで拡大/縮小を行う/行わないの制御フラグ * @type bool * @default true */ this.enableMouseWheel = true; this.enableCursorKey = true; /** * コピーライトの表示位置 * @type int * @default 0 * @example 0:左下 1:右下 2:左上 3:右上 */ this.copyRightPosition= 0; //--------- Functions --------- /** * 航空写真上にアイコンを表示する関数 * @function * @param {AerialIcon} icon アイコンオブジェクト * @returns {DocumentID} id ドキュメントID */ this.addIcon = addIcon; /** * 航空写真上にシェイプ図形を表示する関数 * @function * @param {AerialShape} shape シェイプオブジェクト * @returns {DocumentID} ドキュメントID */ this.addShape = addShape; /** * 航空写真上を配置する関数 * @function */ this.aerialLoad = load; /** * 航空写真上の縮尺を変更する関数 * @function * @param {int} scaleLevel 縮尺レベル */ this.changeScaleLv = changeScaleLv; /** * 中心座標を取得する関数 * @function * @returns {AerialPoint} 経緯度オブジェクト */ this.getCenterPoint = getCenterPoint; /** * 航空写真上に配置しているアイコンオブジェクトの一覧を取得する関数 * @function * @returns {AerialIcon[]} アイコンオブジェクトの配列 */ this.getIconList = getIconList; /** * 現在表示している座標系の系番号を取得する関数 * @function * @returns {int} 系番号 */ this.getKeiNo = getKeiNo; /** * ピクセル座標を経緯度に変換する関数 * @function * @param {AerialPixel} pixel ピクセル座標オブジェクト * @returns {AerialPoint} 経緯度オブジェクト */ this.getLLFromPixelCoordinates = getLLFromPixelCoordinates; /** * マウスカーソルの位置に対応する経緯度を取得する関数 * @function * @returns {AerialPoint} 経緯度オブジェクト */ this.getMouseLL = getMouseLL; /** * 経緯度をピクセル座標に変換する関数 * @function * @param {AerialPoint} point 経緯度オブジェクト * @returns {AerialPixel} ピクセル座標オブジェクト */ this.getPixelCoordinatesFromLL = getPixelCoordinatesFromLL; /** * 現在の縮尺レベルを取得する関数 * @function * @returns {int} 縮尺レベル */ this.getScaleLv = getScaleLv; /** * 航空写真上に配置しているシェイプオブジェクトの一覧を取得する関数 * @function * @returns {AerialShape[]} シェイプオブジェクトの配列 */ this.getShapeList = getShapeList; /** * 中心位置を引数で指定したピクセルだけ移動する関数 * @function * @param {int} x 移動させるX方向の値(px) * @param {int} y 移動させるY方向の値(px) * @param {bool} smooth スクロールしながら移動するかどうかを指定する。ただし、xおよびyがそれぞれAerialの幅、高さ以下の値が指定されること。 */ this.move = move; /** * 中心位置を引数で指定した座標に移動する関数 * @function * @param {AerialPoint} point 移動させる座標オブジェクト * @param {int|null} scaleLevel 縮尺レベル */ this.moveTo = moveTo; /** * 最初の中心位置の位置に戻す関数 * @function */ this.moveToDefaultPoint = moveToDefaultPoint; /** * 配置している全てのアイコンオブジェクトを削除する関数 * @function */ this.removeAllIcons = removeAllIcons; /** * 配置している全てのシェイプオブジェクトを削除する関数 * @function */ this.removeAllShapes = removeAllShapes; /** * 中心マークを非表示にする関数 * @function */ this.removeCenterMark = removeCenterMark; /** * 引数で指定したアイコンオブジェクトを削除する関数 * @function * @param {string|AerialIcon} {id|icon} {ID|アイコンオブジェクト} * @returns {bool} 削除した場合はtrue, 失敗した場合や該当するオブジェクトが見つからなかった場合はfalse */ this.removeIcon = removeIcon; /** * 引数で指定したシェイプオブジェクトを削除する関数 * @function * @param {string|AerialShape} {id|shape} {ID|シェイプオブジェクト} * @returns {bool} 削除した場合はtrue, 失敗した場合や該当するオブジェクトが見つからなかった場合はfalse */ this.removeShape = removeShape; /** * 引数で指定したサイズで表示領域をリサイズする関数 * @function * @param {int} width 新しい幅 * @param {int} height 新しい高さ */ this.resizeAerial = resizeAerial; /** * 中心マークを表示する関数 * @function */ this.setCenterMark = setCenterMark; /** * 住所文字および公共施設名の表示/非表示を制御する関数 * @function * @param {bool} isViewPlaceName 表示する場合はtrue, 非表示の場合はfalse */ this.setVisiblePlaceName = setVisiblePlaceName; //---------- Events ---------- /** * 中心位置の移動が起こった際に実行する関数 * @type function */ this.aerialMoved = null; /** * 中心位置の縮尺が変わった際に実行する関数 * @type function */ this.scaleLvChange = null; /** * 航空写真の初期ロードが完了した際に実行する関数 * @type function */ this.onLoad = null; /** * 航空写真上でマウスアップが起こった際に実行する関数 * @type function */ this.mouseUp = null; /** * 航空写真上でマウスダウンが起こった際に実行する関数 * @type function */ this.mouseDown = null; /** * 航空写真上をクリックした際に実行する関数 * @type function */ this.mouseClick = null; /** * 航空写真上をドラッグなしでクリックした際に実行する関数 * @type function */ this.mouseClickWithNoDrag = null; var self = this; // ↓----- Public Functions -----↓ function load() { instanceID = AerialCom.getInstanceID(); base = document.createElement('div'); mapLay = document.createElement('div'); lay = document.createElement('div'); charLay = document.createElement('div'); shapeLay = document.createElement('div'); iconLay = document.createElement('div'); copyRight = document.createElement('div'); dummy = document.createElement('div'); if(!self.targetLayer) self.targetLayer = document.body; self.targetLayer.appendChild(base); base.appendChild(mapLay); base.appendChild(copyRight); mapLay.appendChild(dummy); mapLay.appendChild(lay); mapLay.appendChild(charLay); mapLay.appendChild(shapeLay); mapLay.appendChild(iconLay); // init setAerialPrivateProperty(self.aerialWidth, self.aerialHeight); // event define eventLay = iconLay; eventLay.onmousedown = onMouseDown; eventLay.ondblclick = onDblClick; eventLay.onmousemove = onMouseMove; eventLay.onmouseup = onMouseUp; eventLay.onmouseout = onMouseOut; eventLay.onclick = onClick; eventLay.onmousewheel= onMouseWheel; if(window.addEventListener) eventLay.addEventListener('DOMMouseScroll', onMouseWheel, false); // Default Point Save if(self.defaultCenterPoint){ point.lat = self.defaultCenterPoint.lat; point.lon = self.defaultCenterPoint.lon; } if(self.defaultScaleLv) scaleLv = self.defaultScaleLv; // set tiles for(var i=0; i= AerialCom.scaleArray.length) l = AerialCom.scaleArray.length - 1; if(scaleLv == l) return; interceptExecuteFunctions(); fromLv = scaleLv; toLv = l; scaleLv = l; if(!self.zoomEffect){ reload(self.scaleLvChange, true); return; } var ds = dummy.style; ds.cssText = lay.style.cssText; ds.top = '0px'; ds.left = '0px'; var ltop = parseInt(lay.style.top); var lleft = parseInt(lay.style.left); for(var i=0; i= 0 && slv <= AerialCom.maxZoomLv){ scaleLv = slv; } interceptExecuteFunctions(); point.lat = lat; point.lon = lon; reload(self.aerialMoved); } function moveToDefaultPoint(){ var lat = self.defaultCenterPoint.lat; var lon = self.defaultCenterPoint.lon; moveTo(new AerialPoint(lat,lon)); } function move(argX, argY, smooth){ var x = -argX; var y = -argY; if(smooth && Math.abs(argX) <= width && Math.abs(argY) <= height){ slideLayer(-x, -y); } else{ totalMoveX += x; totalMoveY += y; moveLayer(x, y); layerMoved(); layerMoveEnd(); } } function addIcon(icon){ var img = icon.createElement(); var px = getPixelCoordinatesFromLL(icon.point); var top; var left; switch(icon.positionType){ case 0: left = px.x-(icon.width/2); top = px.y-(icon.height/2); break; case 1: left = px.x; top = px.y; break; case 2: left = px.x-(icon.width/2); top = px.y; break; case 3: left = px.x-icon.width; top = px.y; break; case 4: left = px.x-icon.width; top = px.y-(icon.height/2); break; case 5: left = px.x-icon.width; top = px.y-icon.height; break; case 6: left = px.x-(icon.width/2); top = px.y-icon.height; break; case 7: left = px.x; top = px.y-icon.height; break; case 8: left = px.x; top = px.y-(icon.height/2); break; default: left = px.x-(icon.width/2); top = px.y-(icon.height/2); break; } img.style.position = 'absolute'; img.style.left = left + 'px'; img.style.top = top + 'px'; img.style.zIndex = icon.priority; var id; if(icon.id != null){ var i = document.getElementById(icon.id); if(!i) id = icon.id; else return null; } else{ id = 'AERIAL_ICON_UNDEFINED_ID_' + instanceID + '_' + iconIndexCount; iconIndexCount++; } icon.id = id; img.id = icon.id; iconLay.appendChild(img); iconArray[id] = icon; if(icon.onMouseOver) img.onmouseover = icon.onMouseOver; if(icon.onMouseOut) img.onmouseout = icon.onMouseOut; if(icon.onClick) img.onclick = icon.onClick; img.ondblclick = function(evt){ if(window.event){ event.cancelBubble = true; } else{ evt.stopPropagation(); } }; return id; } function removeIcon(arg){ var id; var target; if(arg && typeof(arg) == 'string') id = arg; else if(arg && arg.id != null) id = arg.id; else return false; target = document.getElementById(id); delete iconArray[id]; if(target){ AerialUtil.removeEvents(target); iconLay.removeChild(target); return true; } else return false; } function removeAllIcons(){ for(var i in iconArray){ try{ var ico = iconArray[i]; //var elm = document.getElementById(ico.id); //AerialUtil.removeEvents(elm); //iconLay.removeChild(elm); removeIcon(ico); } catch(e){} } iconArray = new Array(); } function getIconList(){ var array = new Array(); for(var i in iconArray){ array.push(iconArray[i]); } return Array.apply(null, array); } function addShape(shape){ if(!_polyline){ _polyline = new AerialPolyline(); _polygon = new AerialPolygon(); } if (document.namespaces && !document.namespaces.v) { document.namespaces.add("v", "urn:schemas-microsoft-com:vml"); document.createStyleSheet().addRule("v\\:*","behavior: url(#default#VML);"); } var shapeElement; if(AerialUtil.getBrowserType() == AerialCom.BROWSER_IE){ // DRAW SHAPE BY VML shapeElement = createShapeElementByVML(); } else if(AerialUtil.getBrowserType() != AerialCom.BROWSER_UNKNOWN){ // DRAW SHAPE BY CANVAS shapeElement = createShapeElementByCanvas(); } var id; if(shape.id != null){ var _d = document.getElementById(shape.id); if(!_d) id = shape.id; else return null; } else{ id = 'AERIAL_SHAPE_UNDEFINED_ID_' + instanceID + '_' + shapeIndexCount; shapeIndexCount++; } shape.id = id; shapeElement.id = id; shapeLay.appendChild(shapeElement); shapeArray[id] = shape; return id; function createShapeElementByCanvas(){ var pointArray = shape.pointList; var e = document.createElement('div'); var _e = document.createElement('canvas'); var ctx = _e.getContext('2d'); e.appendChild(_e); e.style.position = 'absolute'; var minx = Number.MAX_VALUE; var miny = Number.MAX_VALUE; var maxx = Number.MIN_VALUE; var maxy = Number.MIN_VALUE; for(var i = 0; i < pointArray.length; i++){ var p = pointArray[i]; var px = getPixelCoordinatesFromLL(p); minx = Math.min(px.x, minx); miny = Math.min(px.y, miny); maxx = Math.max(px.x, maxx); maxy = Math.max(px.y, maxy); } e.style.left = minx + 'px'; e.style.top = miny + 'px'; e.style.width = (maxx-minx) + 'px'; e.style.height = (maxy-miny) + 'px'; _e.width = parseInt(e.style.width); _e.height = parseInt(e.style.height); ctx.strokeStyle = shape.strokeColor; if(shape.type == _polygon.type) ctx.fillStyle = shape.fillColor; ctx.lineWidth = shape.strokeWeight; ctx.globalAlpha = shape.opacity; ctx.beginPath(); for(var i = 0; i < pointArray.length; i++){ var p = pointArray[i]; var px = getPixelCoordinatesFromLL(p); var _x = px.x - minx; var _y = px.y - miny; if(i == 0) ctx.moveTo(_x, _y); else ctx.lineTo(_x, _y); } if(shape.type == _polyline.type) ctx.stroke(); else if(shape.type == _polygon.type){ ctx.closePath(); ctx.stroke(); ctx.fill(); } return e; } function createShapeElementByVML(){ var pointArray = shape.pointList; var e; var s; var f; var _x; var _on; var path = 'm '; if(shape.type == _polyline.type){ _x = ''; _on = false; } else if(shape.type == _polygon.type){ _x = ' x'; _on = true; } e = document.createElement('v:shape'); s = document.createElement('v:stroke'); f = document.createElement('v:fill'); s.color = shape.strokeColor; s.weight = shape.strokeWeight; s.opacity = shape.opacity; e.style.position = 'absolute'; e.style.top = '0px'; e.style.left = '0px'; e.style.antialias= true; e.style.width = width + 'px'; e.style.height = height+ 'px'; e.coordsize = width+','+height; f.on = _on; f.color = shape.fillColor; f.opacity = shape.opacity; for(var i = 0; i < pointArray.length; i++){ var p = pointArray[i]; var px = getPixelCoordinatesFromLL(p); path += px.x + ',' + px.y; if(i == 0) path += 'l '; else if( i == pointArray.length - 1) path += _x + ' e'; else path += ', '; } e.path = path; e.appendChild(s); e.appendChild(f); return e; } } function removeShape(arg){ var id; var tmp = new Array(); var target; if(arg && typeof(arg) == 'string') id = arg; else if(arg && arg.id != null) id = arg.id; else return false; target = document.getElementById(id); delete shapeArray[id]; if(target){ shapeLay.removeChild(target); return true; } else return false; } function removeAllShapes(){ for(var i in shapeArray){ try{ var shape = shapeArray[i]; //var elm = document.getElementById(shape.id); //AerialUtil.removeEvents(elm); //shapeLay.removeChild(elm); removeShape(shape); } catch(e){} } } function getShapeList(){ var array = new Array(); for(var i in shapeArray){ array.push(shapeArray[i]); } return Array.apply(null, array); } function resizeAerial(w, h){ if(w < 0 || h < 0){ alert('Exception : invalid argument'); return; } while(lay.childNodes.length > 0){ var c = lay.firstChild; lay.removeChild(c); } while(charLay.childNodes.length > 0){ var c = charLay.firstChild; charLay.removeChild(c); } while(dummy.childNodes.length > 0){ var c = dummy.firstChild; dummy.removeChild(c); } setAerialPrivateProperty(w, h); // set tiles for(var i=0; i 0){ var id = timerArray.shift(); clearInterval(id); clearTimeout(id); } // dummy layer dummy.style.display = 'none'; lay.style.display = 'block'; } function reload(callBackFunction, isNoRequest){ var ai = new AerialImage(); ai.scaleLv = scaleLv; ai.point = new AerialPoint(point.lat, point.lon); ai.year = year; ai.ongetImage = cF; if(isNoRequest){ ai.point.kei = point.kei; ai.getImageWithNoRequest(); } else{ ai.getImage(); } function cF(){ if(ai.status == 1){ iF(); } else{ alert('サポートエリアを大幅に外れました。'); self.defaultCenterPoint = new AerialPoint(); moveToDefaultPoint(); } } function iF(){ point = ai.point; year = ai.year; for(var i = 0; i < lay.childNodes.length; i++) lay.childNodes[i].src = AerialCom.transImgSrc; for(var i = 0; i < charLay.childNodes.length; i++) charLay.childNodes[i].src = AerialCom.transImgSrc; setVisiblePlaceName(charLayState); mappingImage(ai); mappingIcons(); mappingShapes(); if(callBackFunction) callBackFunction(); } } // ai : AerialImage (center image object) function mappingImage(ai){ totalMoveX = 0; totalMoveY = 0; lay.style.top = '0px'; lay.style.left = '0px'; charLay.style.top = lay.style.top; charLay.style.left = lay.style.left; // mapping Image var x = ai.xNum - indx; var y = ai.yNum + indy; var pdx = ai.pixeldx; var pdy = ai.pixeldy; var revisex = Math.round((-((tilewidth*numx)-width)/2)); var revisey = Math.round((-((tileheight*numy)-height)/2) - tileheight); revisex -= pdx; revisey += pdy; minXNo = Number.MAX_VALUE; minYNo = Number.MAX_VALUE; maxXNo = Number.MIN_VALUE; maxYNo = Number.MIN_VALUE; minXPos = NaN; minYPos = NaN; var k = 0; var nodes = lay.childNodes; var cnodes= charLay.childNodes; for(var i=0; i 0 ? 1 : 0); my = incy + (ay > 0 ? 1 : 0); ax--; ay--; moveLayer(-mx, -my); totalMoveX -= mx; totalMoveY -= my; x++; } } */ } function slideLayer(dx, dy){ var b = 10; var x = 0; var incx = Math.floor(dx/b); var incy = Math.floor(dy/b); var ax = dx%b; var ay = dy%b; var t = setInterval(f, 10); timerArray.push(t); function f(){ var mx; var my; if(x == b){ clearInterval(t); layerMoved(); layerMoveEnd(); return; } mx = incx + (ax > 0 ? 1 : 0); my = incy + (ay > 0 ? 1 : 0); ax--; ay--; moveLayer(-mx, -my); totalMoveX -= mx; totalMoveY -= my; x++; } } function onMouseWheel(evt){ if(!self.enableMouseWheel) return; var delta; if(!evt) evt = window.event; if(evt.wheelDelta) delta = -evt.wheelDelta; else delta = evt.detail; if(delta == 0) return false; delta = delta/Math.abs(delta); changeScaleLv(scaleLv + delta); return false; } function layerMoved(){ // reset icon layer & shape layer position var _x = parseInt(iconLay.style.left); var _y = parseInt(iconLay.style.top); iconLay.style.top = '0px'; iconLay.style.left = '0px'; shapeLay.style.top = '0px'; shapeLay.style.left = '0px'; // icon position reset var clen = iconLay.childNodes.length; for(var i = 0; i < clen; i++){ var c = iconLay.childNodes[i]; var x = parseInt(c.style.left) + _x; var y = parseInt(c.style.top) + _y; c.style.left = x + 'px'; c.style.top = y + 'px'; } // shape position reset var slen = shapeLay.childNodes.length; for(var i = 0; i < slen; i++){ var c = shapeLay.childNodes[i]; var x = parseInt(c.style.left) + _x; var y = parseInt(c.style.top) + _y; c.style.left = x + 'px'; c.style.top = y + 'px'; } // update center XY var _x = point.x; var _y = point.y; var rmx = totalMoveX*AerialCom.realDistanceArray[scaleLv]; var rmy = totalMoveY*AerialCom.realDistanceArray[scaleLv]; point.x = _x - rmx; point.y = _y + rmy; // update center LL point = AerialUtil.getLLFromXY(point); checkImages(); totalMoveX = 0; totalMoveY = 0; } function layerMoveEnd(){ if(self.aerialMoved) self.aerialMoved(); // send Request for Access Log var uid; // USER ID priority 1.ID type 2.WEB type if(AerialCom.accountUID) uid = AerialCom.accountUID; else if(AerialCom.websiteUID) uid = AerialCom.websiteUID; else return; var reqURL = AerialCom.accLogCgiURL + '?USER_ID=' + uid + '&FUNCTION_ID=' + AerialCom.AERIAL_FUNCTION_ID + '&ACCESS_TYPE=' + AerialCom.accessTypeCD + '&DUMMYPRAM=' + Math.random(); var scrID = instanceID + '_ACCLOGREQUEST'; AerialUtil.sendRequest(reqURL, scrID); AerialUtil.endCallBack(scrID); } function checkImages(){ // check error image var nodes = lay.childNodes; var len = nodes.length; var count = 0; for(var i = 0; i < len; i++){ var nod = nodes[i]; var st = nod.getAttribute('errorState'); if(st == 1) count++; } if(count < Math.round(tilenum*0.6)) return; var _ap; var _ai; _ap = new AerialPoint(point.lat, point.lon); _ai = new AerialImage(); _ai.point = _ap; _ai.scaleLv = scaleLv; _ai.ongetImage = cF; _ai.getImage(); function cF(){ if(_ai.isExistImage){ point = _ai.point; mappingImage(_ai); mappingIcons(); } } } function moveLayer(movex, movey){ // move icon layer iconLay.style.top = parseInt(iconLay.style.top) + movey + 'px'; iconLay.style.left= parseInt(iconLay.style.left)+ movex + 'px'; // move shape layer shapeLay.style.top = parseInt(shapeLay.style.top) + movey + 'px'; shapeLay.style.left= parseInt(shapeLay.style.left)+ movex + 'px'; // move image layer var divX = Math.floor(Math.abs(movex/tilewidth)); var divY = Math.floor(Math.abs(movey/tileheight)); for(var i = 1; i <= divX; i++){ moveXDirection(tilewidth*(movex/Math.abs(movex))); } moveXDirection(movex%tilewidth); for(var i = 1; i <= divY; i++){ moveYDirection(tileheight*(movey/Math.abs(movey))); } moveYDirection(movey%tileheight); function moveXDirection(movex){ lay.style.left = parseInt(lay.style.left) + movex + 'px'; charLay.style.left = lay.style.left; dummy.style.left = parseInt(dummy.style.left) + movex + 'px'; var _sumX = laySumX; var sumX = _sumX + movex; var drcx = 0; var att = sumX % tilewidth; if(sumX <= -tilewidth) drcx = 1; else if(sumX >= tilewidth) drcx = -1; var xmax = minXPos + tilewidth * numx; var ymax = minYPos + tileheight * numy; var xmin = minXPos - tilewidth; var fxp = minXNo; var fyp = minYNo; var lxp = maxXNo; var minx = minXPos; if(drcx == 1){ addTilesX(xmax, ymax-tileheight, lxp+1, fyp, minx); } else if(drcx == -1){ addTilesX(xmin, ymax-tileheight, fxp-1, fyp, xmax-tilewidth); } laySumX = att; minXNo += drcx; maxXNo += drcx; minXPos += tilewidth * drcx; } function moveYDirection(movey){ lay.style.top = parseInt(lay.style.top) + movey + 'px'; charLay.style.top = lay.style.top; dummy.style.top = parseInt(dummy.style.top) + movey + 'px'; var _sumY = laySumY; var sumY = _sumY + movey; var drcy = 0; var att = sumY % tileheight; if(sumY <= -tileheight) drcy = 1; else if(sumY >= tileheight) drcy = -1; var ymax = minYPos + tileheight * numy; var ymin = minYPos - tileheight; var fxp = minXNo; var fyp = minYNo; var lyp = maxYNo; var minx = minXPos; var miny = minYPos; if(drcy == 1){ addTilesY(minx, ymax, fxp, fyp-1, miny); } else if(drcy == -1){ addTilesY(minx, ymin, fxp, lyp+1, ymax-tileheight); } laySumY = att; minYNo -= drcy; maxYNo -= drcy; minYPos += tileheight * drcy; } /* posx:始点のoffsetX posy:始点のoffsetY mapx:始点画像のX方向No. mapy:始点画像のY方向No. removex:削除する画像のoffsetX */ function addTilesX(posx, posy, mapx, mapy, removex){ var nodes = new Array(); for(var i=lay.childNodes.length-1; i>=0; i--){ var child = lay.childNodes[i]; var style = child.style; if(parseInt(style.left) == removex) nodes.push(child); } if(numy != nodes.length){ alert('Dom number unmatch Exception !!'); return; } for(var i=0; i=0; i--){ var child = lay.childNodes[i]; var style = child.style; if(parseInt(style.top) == removey) nodes.push(child); } if(numx != nodes.length){ alert('Dom number unmatch Exception !!'); return; } for(var i=0; i 0){ timerArray[index] = setTimeout(setFunc, _delay); } else{ setFunc(); } } function error(){ var ec = parseInt(child.getAttribute('errorCount')); if(ec == 1){ image.onload = null; image.onerror = null; if(type == 0) child.src = AerialCom.loadingImgSrc; image.onload = load; image.onerror = error; image.src = src; } else{ child.setAttribute('errorState', 1); if(type == 0) image.src = AerialCom.noImgSrc; else image.src = AerialCom.transImgSrc; } } } function createTile(){ var tile = document.createElement('img'); var style = tile.style; tile.galleryimg = 'no'; tile.unselectable = 'on'; style.top = -2*tileheight + 'px'; style.position = 'absolute'; style.border = 'none'; return tile; } /* * [type] * 0 : Aerial tile * 1 : Char tile */ function getSource(mapx, mapy, type){ var subx = Math.floor(mapx * tilewidth * AerialCom.realDistanceArray[scaleLv] / 10000); var suby = Math.floor(mapy * tileheight * AerialCom.realDistanceArray[scaleLv] / 7500); var root; var _h; var _ext; switch(type){ case 0: root = AerialCom.imgSrcDir; _h = ''; _ext = '.jpg'; break; case 1: root = AerialCom.charImgSrcDir; _h = 'H_'; _ext = '.gif'; break; default: return; } var path = root + year + '/' + AerialCom.scaleArray[scaleLv] + '/' + point.kei + '/'; var src = path+subx+'_'+suby+'/'+_h+mapx+'_'+mapy+_ext; return src; } }