function MinimapInterface(map) { this.map = map; // map interface object this.elNavigator = null; this.elArea = null; this.isMouseDown = false; this._create = function() { this.elNavigator = document.getElementById('map_navigator'); this.elArea = document.getElementById('map_navigator_area'); if (this.elNavigator) this.elNavigator.style.cursor = 'pointer'; if (this.elArea) { this.elArea.style.cursor = 'pointer'; } this.attachEvents(); this.onUpdateMinimap(); } this.onClickNavigator = function(e) { if ((e.target.id == 'gomin') || (e.target.id == 'gomax')) return false; var res = 2.388657133483887; var exttop = 20037508.34; var extleft = -20037508.34; var mmt = 9215; var mmtpx = 0; var mmb = 47313; var mmbpx = 138; var mml = 0; var mmlpx = 17; var mmr = 65536; var mmrpx = 255; var mmhsize = mmr - mml; var mmvsize = mmb - mmt; var mmhsizepx = mmrpx - mmlpx + 1; var mmvsizepx = mmbpx - mmtpx + 1; if ('undefined' != typeof(e)) { if (e.target.id == "map_navigator_area") { var l = e.target.offsetLeft; var t = e.target.offsetTop; var x = e.offsetX + l - 21; var y = e.offsetY + t - 9; } else { var x = e.offsetX; var y = e.offsetY; x = x - 22; y = y - 10; } } else { var e = window.event; if (e.srcElement.id == "area") { var l = e.srcElement.offsetLeft; var t = e.srcElement.offsetTop; var x = e.offsetX + l + 2; var y = e.offsetY + t - 225; } else { var d = this.elNavigator; var l = d.offsetLeft; var t = d.offsetTop; var x = e.offsetX + 2; var y = e.offsetY - 225; } } x = x - mmlpx; y = y - mmtpx; var posx = ((x / mmhsizepx) * mmhsize) + mml; posx = posx * (res * 256) + extleft; var posy = ((y / mmvsizepx) * mmvsize) + mmt; posy = exttop - posy * (res * 256); this.map.map.panTo(new OpenLayers.LonLat(posx, posy)); return false; } this.onUpdateMinimap = function() { var bnds = this.map.map.getExtent(); var res = 2.388657133483887; var exttop = 20037508.34; var extleft = -20037508.34; var x1 = Math.round((bnds.left - extleft) / (res * 256)); var y1 = Math.round((exttop - bnds.top) / (res * 256)); var x2 = Math.round((bnds.right - extleft) / (res * 256)); var y2 = Math.round((exttop - bnds.bottom) / (res * 256)); var mmt = 9215; var mmtpx = 0; var mmb = 47313; var mmbpx = 138; var mml = 0; var mmlpx = 17; var mmr = 65536; var mmrpx = 255; var mmhsize = mmr - mml; var mmvsize = mmb - mmt; var mmhsizepx = mmrpx - mmlpx + 1; var mmvsizepx = mmbpx - mmtpx + 1; var l = ((x1 - mml) / mmhsize) * mmhsizepx; var t = ((y1 - mmt) / mmvsize) * mmvsizepx; var r = ((x2 - mml) / mmhsize) * mmhsizepx; var b = ((y2 - mmt) / mmvsize) * mmvsizepx; var w = r - l + 1; var h = b - t + 1; if (this.elArea) { this.elArea.style.left = (Math.floor(l) + 22 + 17) + "px"; this.elArea.style.top = (Math.floor(t) + 8) + "px"; this.elArea.style.width = Math.floor(w) + "px"; this.elArea.style.height = Math.floor(h) + "px"; } } this.onMouseDownNavigator = function(e) { this.isMouseDown = true; this.onClickNavigator(e); } this.onMouseUpNavigator = function() { this.isMouseDown = false; } this.onMouseOutNavigator = function() { this.isMouseDown = false; } this.onMouseMoveNavigator = function(e) { if (this.isMouseDown) this.onClickNavigator(e); } this.attachEvents = function() { if (this.elNavigator) { jQuery(this.elNavigator).on('click', jQuery.proxy(this.onClickNavigator, this)); } if (this.elNavigator) { jQuery(this.elNavigator).on('mousemove', jQuery.proxy(this.onMouseMoveNavigator, this)); } if (this.elNavigator) { jQuery(this.elNavigator).on('mousedown', jQuery.proxy(this.onMouseDownNavigator, this)); } if (this.elNavigator) { jQuery(this.elNavigator).on('mouseup', jQuery.proxy(this.onMouseUpNavigator, this)); } if (this.elNavigator) { jQuery(this.elNavigator).on('mouseout', jQuery.proxy(this.onMouseOutNavigator, this)); } this.map.map.events.register('moveend', this, this.onUpdateMinimap); } this._create(); }