diff --git a/PanoramicView/OpenLayers.js b/PanoramicView/OpenLayers.js new file mode 100644 index 0000000000000000000000000000000000000000..7f880d55c2ef03d70ba87a6d8c69e37bc1c24e11 --- /dev/null +++ b/PanoramicView/OpenLayers.js @@ -0,0 +1,26176 @@ + +var OpenLayers = { + VERSION_NUMBER: "Release 2.12", + singleFile: !0, + _getScriptLocation: function() { + for (var a = /(^|(.*?\/))(OpenLayers[^\/]*?\.js)(\?|$)/, b = document.getElementsByTagName("script"), c, d = "", e = 0, f = b.length; e < f; e++) + if (c = b[e].getAttribute("src")) + if (c = c.match(a)) { + d = c[1]; + break + } + return function() { + return d + } + }(), + ImgPath: "" +}; +OpenLayers.Class = function() { + var a = arguments.length, + b = arguments[0], + c = arguments[a - 1], + d = "function" == typeof c.initialize ? c.initialize : function() { + b.prototype.initialize.apply(this, arguments) + }; + 1 < a ? (a = [d, b].concat(Array.prototype.slice.call(arguments).slice(1, a - 1), c), OpenLayers.inherit.apply(null, a)) : d.prototype = c; + return d +}; +OpenLayers.inherit = function(a, b) { + var c = function() {}; + c.prototype = b.prototype; + a.prototype = new c; + var d, e, c = 2; + for (d = arguments.length; c < d; c++) e = arguments[c], "function" === typeof e && (e = e.prototype), OpenLayers.Util.extend(a.prototype, e) +}; +OpenLayers.Util = OpenLayers.Util || {}; +OpenLayers.Util.extend = function(a, b) { + a = a || {}; + if (b) { + for (var c in b) { + var d = b[c]; + void 0 !== d && (a[c] = d) + }!("function" == typeof window.Event && b instanceof window.Event) && (b.hasOwnProperty && b.hasOwnProperty("toString")) && (a.toString = b.toString) + } + return a +}; +OpenLayers.String = { + startsWith: function(a, b) { + return 0 == a.indexOf(b) + }, + contains: function(a, b) { + return -1 != a.indexOf(b) + }, + trim: function(a) { + return a.replace(/^\s\s*/, "").replace(/\s\s*$/, "") + }, + camelize: function(a) { + for (var a = a.split("-"), b = a[0], c = 1, d = a.length; c < d; c++) var e = a[c], + b = b + (e.charAt(0).toUpperCase() + e.substring(1)); + return b + }, + format: function(a, b, c) { + b || (b = window); + return a.replace(OpenLayers.String.tokenRegEx, function(a, e) { + for (var f, g = e.split(/\.+/), h = 0; h < g.length; h++) 0 == h && (f = b), f = f[g[h]]; + "function" == + typeof f && (f = c ? f.apply(null, c) : f()); + return "undefined" == typeof f ? "undefined" : f + }) + }, + tokenRegEx: /\$\{([\w.]+?)\}/g, + numberRegEx: /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/, + isNumeric: function(a) { + return OpenLayers.String.numberRegEx.test(a) + }, + numericIf: function(a) { + return OpenLayers.String.isNumeric(a) ? parseFloat(a) : a + } +}; +OpenLayers.Number = { + decimalSeparator: ".", + thousandsSeparator: ",", + limitSigDigs: function(a, b) { + var c = 0; + 0 < b && (c = parseFloat(a.toPrecision(b))); + return c + }, + format: function(a, b, c, d) { + b = "undefined" != typeof b ? b : 0; + c = "undefined" != typeof c ? c : OpenLayers.Number.thousandsSeparator; + d = "undefined" != typeof d ? d : OpenLayers.Number.decimalSeparator; + null != b && (a = parseFloat(a.toFixed(b))); + var e = a.toString().split("."); + 1 == e.length && null == b && (b = 0); + a = e[0]; + if (c) + for (var f = /(-?[0-9]+)([0-9]{3})/; f.test(a);) a = a.replace(f, "$1" + c + "$2"); + 0 == b ? b = a : (c = 1 < e.length ? e[1] : "0", null != b && (c += Array(b - c.length + 1).join("0")), b = a + d + c); + return b + } +}; +OpenLayers.Function = { + bind: function(a, b) { + var c = Array.prototype.slice.apply(arguments, [2]); + return function() { + var d = c.concat(Array.prototype.slice.apply(arguments, [0])); + return a.apply(b, d) + } + }, + bindAsEventListener: function(a, b) { + return function(c) { + return a.call(b, c || window.event) + } + }, + False: function() { + return !1 + }, + True: function() { + return !0 + }, + Void: function() {} +}; +OpenLayers.Array = { + filter: function(a, b, c) { + var d = []; + if (Array.prototype.filter) d = a.filter(b, c); + else { + var e = a.length; + if ("function" != typeof b) throw new TypeError; + for (var f = 0; f < e; f++) + if (f in a) { + var g = a[f]; + b.call(c, g, f, a) && d.push(g) + } + } + return d + } +}; +OpenLayers.Bounds = OpenLayers.Class({ + left: null, + bottom: null, + right: null, + top: null, + centerLonLat: null, + initialize: function(a, b, c, d) { + OpenLayers.Util.isArray(a) && (d = a[3], c = a[2], b = a[1], a = a[0]); + null != a && (this.left = OpenLayers.Util.toFloat(a)); + null != b && (this.bottom = OpenLayers.Util.toFloat(b)); + null != c && (this.right = OpenLayers.Util.toFloat(c)); + null != d && (this.top = OpenLayers.Util.toFloat(d)) + }, + clone: function() { + return new OpenLayers.Bounds(this.left, this.bottom, this.right, this.top) + }, + equals: function(a) { + var b = !1; + null != + a && (b = this.left == a.left && this.right == a.right && this.top == a.top && this.bottom == a.bottom); + return b + }, + toString: function() { + return [this.left, this.bottom, this.right, this.top].join() + }, + toArray: function(a) { + return !0 === a ? [this.bottom, this.left, this.top, this.right] : [this.left, this.bottom, this.right, this.top] + }, + toBBOX: function(a, b) { + null == a && (a = 6); + var c = Math.pow(10, a), + d = Math.round(this.left * c) / c, + e = Math.round(this.bottom * c) / c, + f = Math.round(this.right * c) / c, + c = Math.round(this.top * c) / c; + return !0 === b ? e + "," + d + "," + c + "," + f : d + + "," + e + "," + f + "," + c + }, + toGeometry: function() { + return new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing([new OpenLayers.Geometry.Point(this.left, this.bottom), new OpenLayers.Geometry.Point(this.right, this.bottom), new OpenLayers.Geometry.Point(this.right, this.top), new OpenLayers.Geometry.Point(this.left, this.top)])]) + }, + getWidth: function() { + return this.right - this.left + }, + getHeight: function() { + return this.top - this.bottom + }, + getSize: function() { + return new OpenLayers.Size(this.getWidth(), this.getHeight()) + }, + getCenterPixel: function() { + return new OpenLayers.Pixel((this.left + this.right) / 2, (this.bottom + this.top) / 2) + }, + getCenterLonLat: function() { + this.centerLonLat || (this.centerLonLat = new OpenLayers.LonLat((this.left + this.right) / 2, (this.bottom + this.top) / 2)); + return this.centerLonLat + }, + scale: function(a, b) { + null == b && (b = this.getCenterLonLat()); + var c, d; + "OpenLayers.LonLat" == b.CLASS_NAME ? (c = b.lon, d = b.lat) : (c = b.x, d = b.y); + return new OpenLayers.Bounds((this.left - c) * a + c, (this.bottom - d) * a + d, (this.right - c) * a + c, (this.top - d) * a + + d) + }, + add: function(a, b) { + if (null == a || null == b) throw new TypeError("Bounds.add cannot receive null values"); + return new OpenLayers.Bounds(this.left + a, this.bottom + b, this.right + a, this.top + b) + }, + extend: function(a) { + var b = null; + if (a) { + switch (a.CLASS_NAME) { + case "OpenLayers.LonLat": + b = new OpenLayers.Bounds(a.lon, a.lat, a.lon, a.lat); + break; + case "OpenLayers.Geometry.Point": + b = new OpenLayers.Bounds(a.x, a.y, a.x, a.y); + break; + case "OpenLayers.Bounds": + b = a + } + if (b) { + this.centerLonLat = null; + if (null == this.left || b.left < this.left) this.left = + b.left; + if (null == this.bottom || b.bottom < this.bottom) this.bottom = b.bottom; + if (null == this.right || b.right > this.right) this.right = b.right; + if (null == this.top || b.top > this.top) this.top = b.top + } + } + }, + containsLonLat: function(a, b) { + "boolean" === typeof b && (b = { + inclusive: b + }); + var b = b || {}, + c = this.contains(a.lon, a.lat, b.inclusive), + d = b.worldBounds; + d && !c && (c = d.getWidth(), d = Math.round((a.lon - (d.left + d.right) / 2) / c), c = this.containsLonLat({ + lon: a.lon - d * c, + lat: a.lat + }, { + inclusive: b.inclusive + })); + return c + }, + containsPixel: function(a, b) { + return this.contains(a.x, + a.y, b) + }, + contains: function(a, b, c) { + null == c && (c = !0); + if (null == a || null == b) return !1; + var a = OpenLayers.Util.toFloat(a), + b = OpenLayers.Util.toFloat(b), + d = !1; + return d = c ? a >= this.left && a <= this.right && b >= this.bottom && b <= this.top : a > this.left && a < this.right && b > this.bottom && b < this.top + }, + intersectsBounds: function(a, b) { + "boolean" === typeof b && (b = { + inclusive: b + }); + b = b || {}; + if (b.worldBounds) var c = this.wrapDateLine(b.worldBounds), + a = a.wrapDateLine(b.worldBounds); + else c = this; + null == b.inclusive && (b.inclusive = !0); + var d = !1, + e = c.left == + a.right || c.right == a.left || c.top == a.bottom || c.bottom == a.top; + if (b.inclusive || !e) var d = a.top >= c.bottom && a.top <= c.top || c.top > a.bottom && c.top < a.top, + e = a.left >= c.left && a.left <= c.right || c.left >= a.left && c.left <= a.right, + f = a.right >= c.left && a.right <= c.right || c.right >= a.left && c.right <= a.right, + d = (a.bottom >= c.bottom && a.bottom <= c.top || c.bottom >= a.bottom && c.bottom <= a.top || d) && (e || f); + if (b.worldBounds && !d) { + var g = b.worldBounds, + e = g.getWidth(), + f = !g.containsBounds(c), + g = !g.containsBounds(a); + f && !g ? (a = a.add(-e, 0), d = c.intersectsBounds(a, { + inclusive: b.inclusive + })) : g && !f && (c = c.add(-e, 0), d = a.intersectsBounds(c, { + inclusive: b.inclusive + })) + } + return d + }, + containsBounds: function(a, b, c) { + null == b && (b = !1); + null == c && (c = !0); + var d = this.contains(a.left, a.bottom, c), + e = this.contains(a.right, a.bottom, c), + f = this.contains(a.left, a.top, c), + a = this.contains(a.right, a.top, c); + return b ? d || e || f || a : d && e && f && a + }, + determineQuadrant: function(a) { + var b = "", + c = this.getCenterLonLat(), + b = b + (a.lat < c.lat ? "b" : "t"); + return b += a.lon < c.lon ? "l" : "r" + }, + transform: function(a, b) { + this.centerLonLat = + null; + var c = OpenLayers.Projection.transform({ + x: this.left, + y: this.bottom + }, a, b), + d = OpenLayers.Projection.transform({ + x: this.right, + y: this.bottom + }, a, b), + e = OpenLayers.Projection.transform({ + x: this.left, + y: this.top + }, a, b), + f = OpenLayers.Projection.transform({ + x: this.right, + y: this.top + }, a, b); + this.left = Math.min(c.x, e.x); + this.bottom = Math.min(c.y, d.y); + this.right = Math.max(d.x, f.x); + this.top = Math.max(e.y, f.y); + return this + }, + wrapDateLine: function(a, b) { + var b = b || {}, + c = b.leftTolerance || 0, + d = b.rightTolerance || 0, + e = this.clone(); + if (a) { + for (var f = + a.getWidth(); e.left < a.left && e.right - d <= a.left;) e = e.add(f, 0); + for (; e.left + c >= a.right && e.right > a.right;) e = e.add(-f, 0); + c = e.left + c; + c < a.right && (c > a.left && e.right - d > a.right) && (e = e.add(-f, 0)) + } + return e + }, + CLASS_NAME: "OpenLayers.Bounds" +}); +OpenLayers.Bounds.fromString = function(a, b) { + var c = a.split(","); + return OpenLayers.Bounds.fromArray(c, b) +}; +OpenLayers.Bounds.fromArray = function(a, b) { + return !0 === b ? new OpenLayers.Bounds(a[1], a[0], a[3], a[2]) : new OpenLayers.Bounds(a[0], a[1], a[2], a[3]) +}; +OpenLayers.Bounds.fromSize = function(a) { + return new OpenLayers.Bounds(0, a.h, a.w, 0) +}; +OpenLayers.Bounds.oppositeQuadrant = function(a) { + var b; + b = "" + ("t" == a.charAt(0) ? "b" : "t"); + return b += "l" == a.charAt(1) ? "r" : "l" +}; +OpenLayers.Element = { + visible: function(a) { + return "none" != OpenLayers.Util.getElement(a).style.display + }, + toggle: function() { + for (var a = 0, b = arguments.length; a < b; a++) { + var c = OpenLayers.Util.getElement(arguments[a]), + d = OpenLayers.Element.visible(c) ? "none" : ""; + c.style.display = d + } + }, + remove: function(a) { + a = OpenLayers.Util.getElement(a); + a.parentNode.removeChild(a) + }, + getHeight: function(a) { + a = OpenLayers.Util.getElement(a); + return a.offsetHeight + }, + hasClass: function(a, b) { + var c = a.className; + return !!c && RegExp("(^|\\s)" + b + "(\\s|$)").test(c) + }, + addClass: function(a, b) { + OpenLayers.Element.hasClass(a, b) || (a.className += (a.className ? " " : "") + b); + return a + }, + removeClass: function(a, b) { + var c = a.className; + c && (a.className = OpenLayers.String.trim(c.replace(RegExp("(^|\\s+)" + b + "(\\s+|$)"), " "))); + return a + }, + toggleClass: function(a, b) { + OpenLayers.Element.hasClass(a, b) ? OpenLayers.Element.removeClass(a, b) : OpenLayers.Element.addClass(a, b); + return a + }, + getStyle: function(a, b) { + var a = OpenLayers.Util.getElement(a), + c = null; + if (a && a.style) { + c = a.style[OpenLayers.String.camelize(b)]; + c || (document.defaultView && document.defaultView.getComputedStyle ? c = (c = document.defaultView.getComputedStyle(a, null)) ? c.getPropertyValue(b) : null : a.currentStyle && (c = a.currentStyle[OpenLayers.String.camelize(b)])); + var d = ["left", "top", "right", "bottom"]; + window.opera && (-1 != OpenLayers.Util.indexOf(d, b) && "static" == OpenLayers.Element.getStyle(a, "position")) && (c = "auto") + } + return "auto" == c ? null : c + } +}; +OpenLayers.LonLat = OpenLayers.Class({ +//MOD ASTRO +ori_lon:67.6027, +ori_lat:2.22813, + lon: 0, + lat: 0, + initialize: function(a, b) { + OpenLayers.Util.isArray(a) && (b = a[1], a = a[0]); + this.lon = OpenLayers.Util.toFloat(a);//+this.ori_lon; + this.lat = OpenLayers.Util.toFloat(b);//+this.ori_lat + }, + toString: function() { + return "lon=" + this.lon + ",lat=" + this.lat + }, + toShortString: function() { + return this.lon + ", " + this.lat + }, + clone: function() { + return new OpenLayers.LonLat(this.lon, this.lat) + }, + add: function(a, b) { + if (null == a || null == b) throw new TypeError("LonLat.add cannot receive null values"); + return new OpenLayers.LonLat(this.lon + + OpenLayers.Util.toFloat(a), this.lat + OpenLayers.Util.toFloat(b)) + }, + equals: function(a) { + var b = !1; + null != a && (b = this.lon == a.lon && this.lat == a.lat || isNaN(this.lon) && isNaN(this.lat) && isNaN(a.lon) && isNaN(a.lat)); + return b + }, + transform: function(a, b) { + var c = OpenLayers.Projection.transform({ + x: this.lon, + y: this.lat + }, a, b); + this.lon = c.x; + this.lat = c.y; + return this + }, + wrapDateLine: function(a) { + var b = this.clone(); + if (a) { + for (; b.lon < a.left;) b.lon += a.getWidth(); + for (; b.lon > a.right;) b.lon -= a.getWidth() + } + return b + }, + CLASS_NAME: "OpenLayers.LonLat" +}); +OpenLayers.LonLat.fromString = function(a) { + a = a.split(","); + return new OpenLayers.LonLat(a[0], a[1]) +}; +OpenLayers.LonLat.fromArray = function(a) { + var b = OpenLayers.Util.isArray(a); + return new OpenLayers.LonLat(b && a[0], b && a[1]) +}; +OpenLayers.Pixel = OpenLayers.Class({ + x: 0, + y: 0, + initialize: function(a, b) { + this.x = parseFloat(a); + this.y = parseFloat(b) + }, + toString: function() { + return "x=" + this.x + ",y=" + this.y + }, + clone: function() { + return new OpenLayers.Pixel(this.x, this.y) + }, + equals: function(a) { + var b = !1; + null != a && (b = this.x == a.x && this.y == a.y || isNaN(this.x) && isNaN(this.y) && isNaN(a.x) && isNaN(a.y)); + return b + }, + distanceTo: function(a) { + return Math.sqrt(Math.pow(this.x - a.x, 2) + Math.pow(this.y - a.y, 2)) + }, + add: function(a, b) { + if (null == a || null == b) throw new TypeError("Pixel.add cannot receive null values"); + return new OpenLayers.Pixel(this.x + a, this.y + b) + }, + offset: function(a) { + var b = this.clone(); + a && (b = this.add(a.x, a.y)); + return b + }, + CLASS_NAME: "OpenLayers.Pixel" +}); +OpenLayers.Size = OpenLayers.Class({ + w: 0, + h: 0, + initialize: function(a, b) { + this.w = parseFloat(a); + this.h = parseFloat(b) + }, + toString: function() { + return "w=" + this.w + ",h=" + this.h + }, + clone: function() { + return new OpenLayers.Size(this.w, this.h) + }, + equals: function(a) { + var b = !1; + null != a && (b = this.w == a.w && this.h == a.h || isNaN(this.w) && isNaN(this.h) && isNaN(a.w) && isNaN(a.h)); + return b + }, + CLASS_NAME: "OpenLayers.Size" +}); +OpenLayers.Console = { + log: function() {}, + debug: function() {}, + info: function() {}, + warn: function() {}, + error: function() {}, + userError: function(a) { + alert(a) + }, + assert: function() {}, + dir: function() {}, + dirxml: function() {}, + trace: function() {}, + group: function() {}, + groupEnd: function() {}, + time: function() {}, + timeEnd: function() {}, + profile: function() {}, + profileEnd: function() {}, + count: function() {}, + CLASS_NAME: "OpenLayers.Console" +}; +(function() { + for (var a = document.getElementsByTagName("script"), b = 0, c = a.length; b < c; ++b) + if (-1 != a[b].src.indexOf("firebug.js") && console) { + OpenLayers.Util.extend(OpenLayers.Console, console); + break + } +})(); +OpenLayers.Lang = { + code: null, + defaultCode: "en", + getCode: function() { + OpenLayers.Lang.code || OpenLayers.Lang.setCode(); + return OpenLayers.Lang.code + }, + setCode: function(a) { + var b; + a || (a = "msie" == OpenLayers.BROWSER_NAME ? navigator.userLanguage : navigator.language); + a = a.split("-"); + a[0] = a[0].toLowerCase(); + "object" == typeof OpenLayers.Lang[a[0]] && (b = a[0]); + if (a[1]) { + var c = a[0] + "-" + a[1].toUpperCase(); + "object" == typeof OpenLayers.Lang[c] && (b = c) + } + b || (OpenLayers.Console.warn("Failed to find OpenLayers.Lang." + a.join("-") + " dictionary, falling back to default language"), + b = OpenLayers.Lang.defaultCode); + OpenLayers.Lang.code = b + }, + translate: function(a, b) { + var c = OpenLayers.Lang[OpenLayers.Lang.getCode()]; + (c = c && c[a]) || (c = a); + b && (c = OpenLayers.String.format(c, b)); + return c + } +}; +OpenLayers.i18n = OpenLayers.Lang.translate; +OpenLayers.Util = OpenLayers.Util || {}; +OpenLayers.Util.getElement = function() { + for (var a = [], b = 0, c = arguments.length; b < c; b++) { + var d = arguments[b]; + "string" == typeof d && (d = document.getElementById(d)); + if (1 == arguments.length) return d; + a.push(d) + } + return a +}; +OpenLayers.Util.isElement = function(a) { + return !!(a && 1 === a.nodeType) +}; +OpenLayers.Util.isArray = function(a) { + return "[object Array]" === Object.prototype.toString.call(a) +}; +"undefined" === typeof window.$ && (window.$ = OpenLayers.Util.getElement); +OpenLayers.Util.removeItem = function(a, b) { + for (var c = a.length - 1; c >= 0; c--) a[c] == b && a.splice(c, 1); + return a +}; +OpenLayers.Util.indexOf = function(a, b) { + if (typeof a.indexOf == "function") return a.indexOf(b); + for (var c = 0, d = a.length; c < d; c++) + if (a[c] == b) return c; + return -1 +}; +OpenLayers.Util.modifyDOMElement = function(a, b, c, d, e, f, g, h) { + if (b) a.id = b; + if (c) { + a.style.left = c.x + "px"; + a.style.top = c.y + "px" + } + if (d) { + a.style.width = d.w + "px"; + a.style.height = d.h + "px" + } + if (e) a.style.position = e; + if (f) a.style.border = f; + if (g) a.style.overflow = g; + if (parseFloat(h) >= 0 && parseFloat(h) < 1) { + a.style.filter = "alpha(opacity=" + h * 100 + ")"; + a.style.opacity = h + } else if (parseFloat(h) == 1) { + a.style.filter = ""; + a.style.opacity = "" + } +}; +OpenLayers.Util.createDiv = function(a, b, c, d, e, f, g, h) { + var i = document.createElement("div"); + if (d) i.style.backgroundImage = "url(" + d + ")"; + a || (a = OpenLayers.Util.createUniqueID("OpenLayersDiv")); + e || (e = "absolute"); + OpenLayers.Util.modifyDOMElement(i, a, b, c, e, f, g, h); + return i +}; +OpenLayers.Util.createImage = function(a, b, c, d, e, f, g, h) { + var i = document.createElement("img"); + a || (a = OpenLayers.Util.createUniqueID("OpenLayersDiv")); + e || (e = "relative"); + OpenLayers.Util.modifyDOMElement(i, a, b, c, e, f, null, g); + if (h) { + i.style.display = "none"; + b = function() { + i.style.display = ""; + OpenLayers.Event.stopObservingElement(i) + }; + OpenLayers.Event.observe(i, "load", b); + OpenLayers.Event.observe(i, "error", b) + } + i.style.alt = a; + i.galleryImg = "no"; + if (d) i.src = d; + return i +}; +OpenLayers.IMAGE_RELOAD_ATTEMPTS = 0; +OpenLayers.Util.alphaHackNeeded = null; +OpenLayers.Util.alphaHack = function() { + if (OpenLayers.Util.alphaHackNeeded == null) { + var a = navigator.appVersion.split("MSIE"), + a = parseFloat(a[1]), + b = false; + try { + b = !!document.body.filters + } catch (c) {} + OpenLayers.Util.alphaHackNeeded = b && a >= 5.5 && a < 7 + } + return OpenLayers.Util.alphaHackNeeded +}; +OpenLayers.Util.modifyAlphaImageDiv = function(a, b, c, d, e, f, g, h, i) { + OpenLayers.Util.modifyDOMElement(a, b, c, d, f, null, null, i); + b = a.childNodes[0]; + if (e) b.src = e; + OpenLayers.Util.modifyDOMElement(b, a.id + "_innerImage", null, d, "relative", g); + if (OpenLayers.Util.alphaHack()) { + if (a.style.display != "none") a.style.display = "inline-block"; + h == null && (h = "scale"); + a.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + b.src + "', sizingMethod='" + h + "')"; + if (parseFloat(a.style.opacity) >= 0 && parseFloat(a.style.opacity) < + 1) a.style.filter = a.style.filter + (" alpha(opacity=" + a.style.opacity * 100 + ")"); + b.style.filter = "alpha(opacity=0)" + } +}; +OpenLayers.Util.createAlphaImageDiv = function(a, b, c, d, e, f, g, h, i) { + var j = OpenLayers.Util.createDiv(), + i = OpenLayers.Util.createImage(null, null, null, null, null, null, null, i); + i.className = "olAlphaImg"; + j.appendChild(i); + OpenLayers.Util.modifyAlphaImageDiv(j, a, b, c, d, e, f, g, h); + return j +}; +OpenLayers.Util.upperCaseObject = function(a) { + var b = {}, + c; + for (c in a) b[c.toUpperCase()] = a[c]; + return b +}; +OpenLayers.Util.applyDefaults = function(a, b) { + var a = a || {}, + c = typeof window.Event == "function" && b instanceof window.Event, + d; + for (d in b) + if (a[d] === void 0 || !c && b.hasOwnProperty && b.hasOwnProperty(d) && !a.hasOwnProperty(d)) a[d] = b[d]; + if (!c && b && b.hasOwnProperty && b.hasOwnProperty("toString") && !a.hasOwnProperty("toString")) a.toString = b.toString; + return a +}; +OpenLayers.Util.getParameterString = function(a) { + var b = [], + c; + for (c in a) { + var d = a[c]; + if (d != null && typeof d != "function") { + if (typeof d == "object" && d.constructor == Array) { + for (var e = [], f, g = 0, h = d.length; g < h; g++) { + f = d[g]; + e.push(encodeURIComponent(f === null || f === void 0 ? "" : f)) + } + d = e.join(",") + } else d = encodeURIComponent(d); + b.push(encodeURIComponent(c) + "=" + d) + } + } + return b.join("&") +}; +OpenLayers.Util.urlAppend = function(a, b) { + var c = a; + if (b) var d = (a + " ").split(/[?&]/), + c = c + (d.pop() === " " ? b : d.length ? "&" + b : "?" + b); + return c +}; +OpenLayers.Util.getImagesLocation = function() { + return OpenLayers.ImgPath || OpenLayers._getScriptLocation() + "img/" +}; +OpenLayers.Util.getImageLocation = function(a) { + return OpenLayers.Util.getImagesLocation() + a +}; +OpenLayers.Util.Try = function() { + for (var a = null, b = 0, c = arguments.length; b < c; b++) { + var d = arguments[b]; + try { + a = d(); + break + } catch (e) {} + } + return a +}; +OpenLayers.Util.getXmlNodeValue = function(a) { + var b = null; + OpenLayers.Util.Try(function() { + b = a.text; + if (!b) b = a.textContent; + if (!b) b = a.firstChild.nodeValue + }, function() { + b = a.textContent + }); + return b +}; +OpenLayers.Util.mouseLeft = function(a, b) { + for (var c = a.relatedTarget ? a.relatedTarget : a.toElement; c != b && c != null;) c = c.parentNode; + return c != b +}; +OpenLayers.Util.DEFAULT_PRECISION = 14; +OpenLayers.Util.toFloat = function(a, b) { + if (b == null) b = OpenLayers.Util.DEFAULT_PRECISION; + typeof a !== "number" && (a = parseFloat(a)); + return b === 0 ? a : parseFloat(a.toPrecision(b)) +}; +OpenLayers.Util.rad = function(a) { + return a * Math.PI / 180 +}; +OpenLayers.Util.deg = function(a) { + return a * 180 / Math.PI +}; +OpenLayers.Util.VincentyConstants = { + a: 6378137, + b: 6356752.3142, + f: 1 / 298.257223563 +}; +OpenLayers.Util.distVincenty = function(a, b) { + for (var c = OpenLayers.Util.VincentyConstants, d = c.a, e = c.b, c = c.f, f = OpenLayers.Util.rad(b.lon - a.lon), g = Math.atan((1 - c) * Math.tan(OpenLayers.Util.rad(a.lat))), h = Math.atan((1 - c) * Math.tan(OpenLayers.Util.rad(b.lat))), i = Math.sin(g), g = Math.cos(g), j = Math.sin(h), h = Math.cos(h), k = f, l = 2 * Math.PI, m = 20; Math.abs(k - l) > 1.0E-12 && --m > 0;) { + var n = Math.sin(k), + o = Math.cos(k), + p = Math.sqrt(h * n * h * n + (g * j - i * h * o) * (g * j - i * h * o)); + if (p == 0) return 0; + var o = i * j + g * h * o, + q = Math.atan2(p, o), + r = Math.asin(g * + h * n / p), + s = Math.cos(r) * Math.cos(r), + n = o - 2 * i * j / s, + t = c / 16 * s * (4 + c * (4 - 3 * s)), + l = k, + k = f + (1 - t) * c * Math.sin(r) * (q + t * p * (n + t * o * (-1 + 2 * n * n))) + } + if (m == 0) return NaN; + d = s * (d * d - e * e) / (e * e); + c = d / 1024 * (256 + d * (-128 + d * (74 - 47 * d))); + return (e * (1 + d / 16384 * (4096 + d * (-768 + d * (320 - 175 * d)))) * (q - c * p * (n + c / 4 * (o * (-1 + 2 * n * n) - c / 6 * n * (-3 + 4 * p * p) * (-3 + 4 * n * n))))).toFixed(3) / 1E3 +}; +OpenLayers.Util.destinationVincenty = function(a, b, c) { + for (var d = OpenLayers.Util, e = d.VincentyConstants, f = e.a, g = e.b, h = e.f, e = a.lon, a = a.lat, i = d.rad(b), b = Math.sin(i), i = Math.cos(i), a = (1 - h) * Math.tan(d.rad(a)), j = 1 / Math.sqrt(1 + a * a), k = a * j, l = Math.atan2(a, i), a = j * b, m = 1 - a * a, f = m * (f * f - g * g) / (g * g), n = 1 + f / 16384 * (4096 + f * (-768 + f * (320 - 175 * f))), o = f / 1024 * (256 + f * (-128 + f * (74 - 47 * f))), f = c / (g * n), p = 2 * Math.PI; Math.abs(f - p) > 1.0E-12;) var q = Math.cos(2 * l + f), + r = Math.sin(f), + s = Math.cos(f), + t = o * r * (q + o / 4 * (s * (-1 + 2 * q * q) - o / 6 * q * (-3 + 4 * r * r) * (-3 + 4 * + q * q))), + p = f, + f = c / (g * n) + t; + c = k * r - j * s * i; + g = Math.atan2(k * s + j * r * i, (1 - h) * Math.sqrt(a * a + c * c)); + b = Math.atan2(r * b, j * s - k * r * i); + i = h / 16 * m * (4 + h * (4 - 3 * m)); + q = b - (1 - i) * h * a * (f + i * r * (q + i * s * (-1 + 2 * q * q))); + Math.atan2(a, -c); + return new OpenLayers.LonLat(e + d.deg(q), d.deg(g)) +}; +OpenLayers.Util.getParameters = function(a) { + var a = a === null || a === void 0 ? window.location.href : a, + b = ""; + if (OpenLayers.String.contains(a, "?")) var b = a.indexOf("?") + 1, + c = OpenLayers.String.contains(a, "#") ? a.indexOf("#") : a.length, + b = a.substring(b, c); + for (var a = {}, b = b.split(/[&;]/), c = 0, d = b.length; c < d; ++c) { + var e = b[c].split("="); + if (e[0]) { + var f = e[0]; + try { + f = decodeURIComponent(f) + } catch (g) { + f = unescape(f) + } + e = (e[1] || "").replace(/\+/g, " "); + try { + e = decodeURIComponent(e) + } catch (h) { + e = unescape(e) + } + e = e.split(","); + e.length == 1 && (e = e[0]); + a[f] = e + } + } + return a +}; +OpenLayers.Util.lastSeqID = 0; +OpenLayers.Util.createUniqueID = function(a) { + a == null && (a = "id_"); + OpenLayers.Util.lastSeqID = OpenLayers.Util.lastSeqID + 1; + return a + OpenLayers.Util.lastSeqID +}; +OpenLayers.INCHES_PER_UNIT = { + inches: 1, + ft: 12, + mi: 63360, + m: 39.3701, + km: 39370.1, + dd: 4374754, + yd: 36 +}; +OpenLayers.INCHES_PER_UNIT["in"] = OpenLayers.INCHES_PER_UNIT.inches; +OpenLayers.INCHES_PER_UNIT.degrees = OpenLayers.INCHES_PER_UNIT.dd; +OpenLayers.INCHES_PER_UNIT.nmi = 1852 * OpenLayers.INCHES_PER_UNIT.m; +OpenLayers.METERS_PER_INCH = 0.0254000508001016; +OpenLayers.Util.extend(OpenLayers.INCHES_PER_UNIT, { + Inch: OpenLayers.INCHES_PER_UNIT.inches, + Meter: 1 / OpenLayers.METERS_PER_INCH, + Foot: 0.3048006096012192 / OpenLayers.METERS_PER_INCH, + IFoot: 0.3048 / OpenLayers.METERS_PER_INCH, + ClarkeFoot: 0.3047972651151 / OpenLayers.METERS_PER_INCH, + SearsFoot: 0.30479947153867626 / OpenLayers.METERS_PER_INCH, + GoldCoastFoot: 0.3047997101815088 / OpenLayers.METERS_PER_INCH, + IInch: 0.0254 / OpenLayers.METERS_PER_INCH, + MicroInch: 2.54E-5 / OpenLayers.METERS_PER_INCH, + Mil: 2.54E-8 / OpenLayers.METERS_PER_INCH, + Centimeter: 0.01 / OpenLayers.METERS_PER_INCH, + Kilometer: 1E3 / OpenLayers.METERS_PER_INCH, + Yard: 0.9144018288036576 / OpenLayers.METERS_PER_INCH, + SearsYard: 0.914398414616029 / OpenLayers.METERS_PER_INCH, + IndianYard: 0.9143985307444408 / OpenLayers.METERS_PER_INCH, + IndianYd37: 0.91439523 / OpenLayers.METERS_PER_INCH, + IndianYd62: 0.9143988 / OpenLayers.METERS_PER_INCH, + IndianYd75: 0.9143985 / OpenLayers.METERS_PER_INCH, + IndianFoot: 0.30479951 / OpenLayers.METERS_PER_INCH, + IndianFt37: 0.30479841 / OpenLayers.METERS_PER_INCH, + IndianFt62: 0.3047996 / + OpenLayers.METERS_PER_INCH, + IndianFt75: 0.3047995 / OpenLayers.METERS_PER_INCH, + Mile: 1609.3472186944373 / OpenLayers.METERS_PER_INCH, + IYard: 0.9144 / OpenLayers.METERS_PER_INCH, + IMile: 1609.344 / OpenLayers.METERS_PER_INCH, + NautM: 1852 / OpenLayers.METERS_PER_INCH, + "Lat-66": 110943.31648893273 / OpenLayers.METERS_PER_INCH, + "Lat-83": 110946.25736872235 / OpenLayers.METERS_PER_INCH, + Decimeter: 0.1 / OpenLayers.METERS_PER_INCH, + Millimeter: 0.001 / OpenLayers.METERS_PER_INCH, + Dekameter: 10 / OpenLayers.METERS_PER_INCH, + Decameter: 10 / OpenLayers.METERS_PER_INCH, + Hectometer: 100 / OpenLayers.METERS_PER_INCH, + GermanMeter: 1.0000135965 / OpenLayers.METERS_PER_INCH, + CaGrid: 0.999738 / OpenLayers.METERS_PER_INCH, + ClarkeChain: 20.1166194976 / OpenLayers.METERS_PER_INCH, + GunterChain: 20.11684023368047 / OpenLayers.METERS_PER_INCH, + BenoitChain: 20.116782494375872 / OpenLayers.METERS_PER_INCH, + SearsChain: 20.11676512155 / OpenLayers.METERS_PER_INCH, + ClarkeLink: 0.201166194976 / OpenLayers.METERS_PER_INCH, + GunterLink: 0.2011684023368047 / OpenLayers.METERS_PER_INCH, + BenoitLink: 0.20116782494375873 / OpenLayers.METERS_PER_INCH, + SearsLink: 0.2011676512155 / OpenLayers.METERS_PER_INCH, + Rod: 5.02921005842012 / OpenLayers.METERS_PER_INCH, + IntnlChain: 20.1168 / OpenLayers.METERS_PER_INCH, + IntnlLink: 0.201168 / OpenLayers.METERS_PER_INCH, + Perch: 5.02921005842012 / OpenLayers.METERS_PER_INCH, + Pole: 5.02921005842012 / OpenLayers.METERS_PER_INCH, + Furlong: 201.1684023368046 / OpenLayers.METERS_PER_INCH, + Rood: 3.778266898 / OpenLayers.METERS_PER_INCH, + CapeFoot: 0.3047972615 / OpenLayers.METERS_PER_INCH, + Brealey: 375 / OpenLayers.METERS_PER_INCH, + ModAmFt: 0.304812252984506 / + OpenLayers.METERS_PER_INCH, + Fathom: 1.8288 / OpenLayers.METERS_PER_INCH, + "NautM-UK": 1853.184 / OpenLayers.METERS_PER_INCH, + "50kilometers": 5E4 / OpenLayers.METERS_PER_INCH, + "150kilometers": 15E4 / OpenLayers.METERS_PER_INCH +}); +OpenLayers.Util.extend(OpenLayers.INCHES_PER_UNIT, { + mm: OpenLayers.INCHES_PER_UNIT.Meter / 1E3, + cm: OpenLayers.INCHES_PER_UNIT.Meter / 100, + dm: 100 * OpenLayers.INCHES_PER_UNIT.Meter, + km: 1E3 * OpenLayers.INCHES_PER_UNIT.Meter, + kmi: OpenLayers.INCHES_PER_UNIT.nmi, + fath: OpenLayers.INCHES_PER_UNIT.Fathom, + ch: OpenLayers.INCHES_PER_UNIT.IntnlChain, + link: OpenLayers.INCHES_PER_UNIT.IntnlLink, + "us-in": OpenLayers.INCHES_PER_UNIT.inches, + "us-ft": OpenLayers.INCHES_PER_UNIT.Foot, + "us-yd": OpenLayers.INCHES_PER_UNIT.Yard, + "us-ch": OpenLayers.INCHES_PER_UNIT.GunterChain, + "us-mi": OpenLayers.INCHES_PER_UNIT.Mile, + "ind-yd": OpenLayers.INCHES_PER_UNIT.IndianYd37, + "ind-ft": OpenLayers.INCHES_PER_UNIT.IndianFt37, + "ind-ch": 20.11669506 / OpenLayers.METERS_PER_INCH +}); +OpenLayers.DOTS_PER_INCH = 72; +OpenLayers.Util.normalizeScale = function(a) { + return a > 1 ? 1 / a : a +}; +OpenLayers.Util.getResolutionFromScale = function(a, b) { + var c; + if (a) { + b == null && (b = "degrees"); + c = 1 / (OpenLayers.Util.normalizeScale(a) * OpenLayers.INCHES_PER_UNIT[b] * OpenLayers.DOTS_PER_INCH) + } + return c +}; +OpenLayers.Util.getScaleFromResolution = function(a, b) { + b == null && (b = "degrees"); + return a * OpenLayers.INCHES_PER_UNIT[b] * OpenLayers.DOTS_PER_INCH +}; +OpenLayers.Util.pagePosition = function(a) { + var b = [0, 0], + c = OpenLayers.Util.getViewportElement(); + if (!a || a == window || a == c) return b; + var d = OpenLayers.IS_GECKO && document.getBoxObjectFor && OpenLayers.Element.getStyle(a, "position") == "absolute" && (a.style.top == "" || a.style.left == ""), + e = null; + if (a.getBoundingClientRect) { + a = a.getBoundingClientRect(); + e = c.scrollTop; + b[0] = a.left + c.scrollLeft; + b[1] = a.top + e + } else if (document.getBoxObjectFor && !d) { + a = document.getBoxObjectFor(a); + c = document.getBoxObjectFor(c); + b[0] = a.screenX - c.screenX; + b[1] = a.screenY - c.screenY + } else { + b[0] = a.offsetLeft; + b[1] = a.offsetTop; + e = a.offsetParent; + if (e != a) + for (; e;) { + b[0] = b[0] + e.offsetLeft; + b[1] = b[1] + e.offsetTop; + e = e.offsetParent + } + c = OpenLayers.BROWSER_NAME; + if (c == "opera" || c == "safari" && OpenLayers.Element.getStyle(a, "position") == "absolute") b[1] = b[1] - document.body.offsetTop; + for (e = a.offsetParent; e && e != document.body;) { + b[0] = b[0] - e.scrollLeft; + if (c != "opera" || e.tagName != "TR") b[1] = b[1] - e.scrollTop; + e = e.offsetParent + } + } + return b +}; +OpenLayers.Util.getViewportElement = function() { + var a = arguments.callee.viewportElement; + if (a == void 0) { + a = OpenLayers.BROWSER_NAME == "msie" && document.compatMode != "CSS1Compat" ? document.body : document.documentElement; + arguments.callee.viewportElement = a + } + return a +}; +OpenLayers.Util.isEquivalentUrl = function(a, b, c) { + c = c || {}; + OpenLayers.Util.applyDefaults(c, { + ignoreCase: true, + ignorePort80: true, + ignoreHash: true + }); + var a = OpenLayers.Util.createUrlObject(a, c), + b = OpenLayers.Util.createUrlObject(b, c), + d; + for (d in a) + if (d !== "args" && a[d] != b[d]) return false; + for (d in a.args) { + if (a.args[d] != b.args[d]) return false; + delete b.args[d] + } + for (d in b.args) return false; + return true +}; +OpenLayers.Util.createUrlObject = function(a, b) { + b = b || {}; + if (!/^\w+:\/\//.test(a)) { + var c = window.location, + d = c.port ? ":" + c.port : "", + d = c.protocol + "//" + c.host.split(":").shift() + d; + if (a.indexOf("/") === 0) a = d + a; + else { + c = c.pathname.split("/"); + c.pop(); + a = d + c.join("/") + "/" + a + } + } + b.ignoreCase && (a = a.toLowerCase()); + c = document.createElement("a"); + c.href = a; + d = {}; + d.host = c.host.split(":").shift(); + d.protocol = c.protocol; + d.port = b.ignorePort80 ? c.port == "80" || c.port == "0" ? "" : c.port : c.port == "" || c.port == "0" ? "80" : c.port; + d.hash = b.ignoreHash || + c.hash === "#" ? "" : c.hash; + var e = c.search; + if (!e) { + e = a.indexOf("?"); + e = e != -1 ? a.substr(e) : "" + } + d.args = OpenLayers.Util.getParameters(e); + d.pathname = c.pathname.charAt(0) == "/" ? c.pathname : "/" + c.pathname; + return d +}; +OpenLayers.Util.removeTail = function(a) { + var b = null, + b = a.indexOf("?"), + c = a.indexOf("#"); + return b = b == -1 ? c != -1 ? a.substr(0, c) : a : c != -1 ? a.substr(0, Math.min(b, c)) : a.substr(0, b) +}; +OpenLayers.IS_GECKO = function() { + var a = navigator.userAgent.toLowerCase(); + return a.indexOf("webkit") == -1 && a.indexOf("gecko") != -1 +}(); +OpenLayers.CANVAS_SUPPORTED = function() { + var a = document.createElement("canvas"); + return !(!a.getContext || !a.getContext("2d")) +}(); +OpenLayers.BROWSER_NAME = function() { + var a = "", + b = navigator.userAgent.toLowerCase(); + b.indexOf("opera") != -1 ? a = "opera" : b.indexOf("msie") != -1 ? a = "msie" : b.indexOf("safari") != -1 ? a = "safari" : b.indexOf("mozilla") != -1 && (a = b.indexOf("firefox") != -1 ? "firefox" : "mozilla"); + return a +}(); +OpenLayers.Util.getBrowserName = function() { + return OpenLayers.BROWSER_NAME +}; +OpenLayers.Util.getRenderedDimensions = function(a, b, c) { + var d, e, f = document.createElement("div"); + f.style.visibility = "hidden"; + for (var g = c && c.containerElement ? c.containerElement : document.body, h = false, i = null, j = g; j && j.tagName.toLowerCase() != "body";) { + var k = OpenLayers.Element.getStyle(j, "position"); + if (k == "absolute") { + h = true; + break + } else if (k && k != "static") break; + j = j.parentNode + } + if (h && (g.clientHeight === 0 || g.clientWidth === 0)) { + i = document.createElement("div"); + i.style.visibility = "hidden"; + i.style.position = "absolute"; + i.style.overflow = "visible"; + i.style.width = document.body.clientWidth + "px"; + i.style.height = document.body.clientHeight + "px"; + i.appendChild(f) + } + f.style.position = "absolute"; + if (b) + if (b.w) { + d = b.w; + f.style.width = d + "px" + } else if (b.h) { + e = b.h; + f.style.height = e + "px" + } + if (c && c.displayClass) f.className = c.displayClass; + b = document.createElement("div"); + b.innerHTML = a; + b.style.overflow = "visible"; + if (b.childNodes) { + a = 0; + for (c = b.childNodes.length; a < c; a++) + if (b.childNodes[a].style) b.childNodes[a].style.overflow = "visible" + } + f.appendChild(b); + i ? g.appendChild(i) : g.appendChild(f); + if (!d) { + d = parseInt(b.scrollWidth); + f.style.width = d + "px" + } + e || (e = parseInt(b.scrollHeight)); + f.removeChild(b); + if (i) { + i.removeChild(f); + g.removeChild(i) + } else g.removeChild(f); + return new OpenLayers.Size(d, e) +}; +OpenLayers.Util.getScrollbarWidth = function() { + var a = OpenLayers.Util._scrollbarWidth; + if (a == null) { + var b = null, + c = null, + b = a = 0, + b = document.createElement("div"); + b.style.position = "absolute"; + b.style.top = "-1000px"; + b.style.left = "-1000px"; + b.style.width = "100px"; + b.style.height = "50px"; + b.style.overflow = "hidden"; + c = document.createElement("div"); + c.style.width = "100%"; + c.style.height = "200px"; + b.appendChild(c); + document.body.appendChild(b); + a = c.offsetWidth; + b.style.overflow = "scroll"; + b = c.offsetWidth; + document.body.removeChild(document.body.lastChild); + OpenLayers.Util._scrollbarWidth = a - b; + a = OpenLayers.Util._scrollbarWidth + } + return a +}; +OpenLayers.Util.getFormattedLonLat = function(a, b, c) { + c || (c = "dms"); + var a = (a + 540) % 360 - 180, + d = Math.abs(a), + e = Math.floor(d), + f = d = (d - e) / (1 / 60), + d = Math.floor(d), + f = Math.round((f - d) / (1 / 60) * 10), + f = f / 10; + if (f >= 60) { + f = f - 60; + d = d + 1; + if (d >= 60) { + d = d - 60; + e = e + 1 + } + } + e < 10 && (e = "0" + e); + e = e + "\u00b0"; + if (c.indexOf("dm") >= 0) { + d < 10 && (d = "0" + d); + e = e + (d + "'"); + if (c.indexOf("dms") >= 0) { + f < 10 && (f = "0" + f); + e = e + (f + '"') + } + } + return e = b == "lon" ? e + (a < 0 ? OpenLayers.i18n("W") : OpenLayers.i18n("E")) : e + (a < 0 ? OpenLayers.i18n("S") : OpenLayers.i18n("N")) +}; +OpenLayers.Format = OpenLayers.Class({ + options: null, + externalProjection: null, + internalProjection: null, + data: null, + keepData: !1, + initialize: function(a) { + OpenLayers.Util.extend(this, a); + this.options = a + }, + destroy: function() {}, + read: function() { + throw Error("Read not implemented."); + }, + write: function() { + throw Error("Write not implemented."); + }, + CLASS_NAME: "OpenLayers.Format" +}); +OpenLayers.Format.CSWGetRecords = function(a) { + var a = OpenLayers.Util.applyDefaults(a, OpenLayers.Format.CSWGetRecords.DEFAULTS), + b = OpenLayers.Format.CSWGetRecords["v" + a.version.replace(/\./g, "_")]; + if (!b) throw "Unsupported CSWGetRecords version: " + a.version; + return new b(a) +}; +OpenLayers.Format.CSWGetRecords.DEFAULTS = { + version: "2.0.2" +}; +OpenLayers.Control = OpenLayers.Class({ + id: null, + map: null, + div: null, + type: null, + allowSelection: !1, + displayClass: "", + title: "", + autoActivate: !1, + active: null, + handler: null, + eventListeners: null, + events: null, + initialize: function(a) { + this.displayClass = this.CLASS_NAME.replace("OpenLayers.", "ol").replace(/\./g, ""); + OpenLayers.Util.extend(this, a); + this.events = new OpenLayers.Events(this); + if (this.eventListeners instanceof Object) this.events.on(this.eventListeners); + null == this.id && (this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + + "_")) + }, + destroy: function() { + this.events && (this.eventListeners && this.events.un(this.eventListeners), this.events.destroy(), this.events = null); + this.eventListeners = null; + this.handler && (this.handler.destroy(), this.handler = null); + if (this.handlers) { + for (var a in this.handlers) this.handlers.hasOwnProperty(a) && "function" == typeof this.handlers[a].destroy && this.handlers[a].destroy(); + this.handlers = null + } + this.map && (this.map.removeControl(this), this.map = null); + this.div = null + }, + setMap: function(a) { + this.map = a; + this.handler && + this.handler.setMap(a) + }, + draw: function(a) { + if (null == this.div && (this.div = OpenLayers.Util.createDiv(this.id), this.div.className = this.displayClass, this.allowSelection || (this.div.className += " olControlNoSelect", this.div.setAttribute("unselectable", "on", 0), this.div.onselectstart = OpenLayers.Function.False), "" != this.title)) this.div.title = this.title; + null != a && (this.position = a.clone()); + this.moveTo(this.position); + return this.div + }, + moveTo: function(a) { + null != a && null != this.div && (this.div.style.left = a.x + "px", this.div.style.top = + a.y + "px") + }, + activate: function() { + if (this.active) return !1; + this.handler && this.handler.activate(); + this.active = !0; + this.map && OpenLayers.Element.addClass(this.map.viewPortDiv, this.displayClass.replace(/ /g, "") + "Active"); + this.events.triggerEvent("activate"); + return !0 + }, + deactivate: function() { + return this.active ? (this.handler && this.handler.deactivate(), this.active = !1, this.map && OpenLayers.Element.removeClass(this.map.viewPortDiv, this.displayClass.replace(/ /g, "") + "Active"), this.events.triggerEvent("deactivate"), !0) : !1 + }, + CLASS_NAME: "OpenLayers.Control" +}); +OpenLayers.Control.TYPE_BUTTON = 1; +OpenLayers.Control.TYPE_TOGGLE = 2; +OpenLayers.Control.TYPE_TOOL = 3; +OpenLayers.Event = { + observers: !1, + KEY_SPACE: 32, + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + element: function(a) { + return a.target || a.srcElement + }, + isSingleTouch: function(a) { + return a.touches && 1 == a.touches.length + }, + isMultiTouch: function(a) { + return a.touches && 1 < a.touches.length + }, + isLeftClick: function(a) { + return a.which && 1 == a.which || a.button && 1 == a.button + }, + isRightClick: function(a) { + return a.which && 3 == a.which || a.button && 2 == a.button + }, + stop: function(a, + b) { + b || (a.preventDefault ? a.preventDefault() : a.returnValue = !1); + a.stopPropagation ? a.stopPropagation() : a.cancelBubble = !0 + }, + findElement: function(a, b) { + for (var c = OpenLayers.Event.element(a); c.parentNode && (!c.tagName || c.tagName.toUpperCase() != b.toUpperCase());) c = c.parentNode; + return c + }, + observe: function(a, b, c, d) { + a = OpenLayers.Util.getElement(a); + d = d || !1; + if ("keypress" == b && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || a.attachEvent)) b = "keydown"; + this.observers || (this.observers = {}); + if (!a._eventCacheID) { + var e = + "eventCacheID_"; + a.id && (e = a.id + "_" + e); + a._eventCacheID = OpenLayers.Util.createUniqueID(e) + } + e = a._eventCacheID; + this.observers[e] || (this.observers[e] = []); + this.observers[e].push({ + element: a, + name: b, + observer: c, + useCapture: d + }); + a.addEventListener ? a.addEventListener(b, c, d) : a.attachEvent && a.attachEvent("on" + b, c) + }, + stopObservingElement: function(a) { + a = OpenLayers.Util.getElement(a)._eventCacheID; + this._removeElementObservers(OpenLayers.Event.observers[a]) + }, + _removeElementObservers: function(a) { + if (a) + for (var b = a.length - 1; 0 <= + b; b--) { + var c = a[b]; + OpenLayers.Event.stopObserving.apply(this, [c.element, c.name, c.observer, c.useCapture]) + } + }, + stopObserving: function(a, b, c, d) { + var d = d || !1, + a = OpenLayers.Util.getElement(a), + e = a._eventCacheID; + if ("keypress" == b && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || a.detachEvent)) b = "keydown"; + var f = !1, + g = OpenLayers.Event.observers[e]; + if (g) + for (var h = 0; !f && h < g.length;) { + var i = g[h]; + if (i.name == b && i.observer == c && i.useCapture == d) { + g.splice(h, 1); + 0 == g.length && delete OpenLayers.Event.observers[e]; + f = !0; + break + } + h++ + } + f && (a.removeEventListener ? a.removeEventListener(b, c, d) : a && a.detachEvent && a.detachEvent("on" + b, c)); + return f + }, + unloadCache: function() { + if (OpenLayers.Event && OpenLayers.Event.observers) { + for (var a in OpenLayers.Event.observers) OpenLayers.Event._removeElementObservers.apply(this, [OpenLayers.Event.observers[a]]); + OpenLayers.Event.observers = !1 + } + }, + CLASS_NAME: "OpenLayers.Event" +}; +OpenLayers.Event.observe(window, "unload", OpenLayers.Event.unloadCache, !1); +OpenLayers.Events = OpenLayers.Class({ + BROWSER_EVENTS: "mouseover mouseout mousedown mouseup mousemove click dblclick rightclick dblrightclick resize focus blur touchstart touchmove touchend keydown".split(" "), + listeners: null, + object: null, + element: null, + eventHandler: null, + fallThrough: null, + includeXY: !1, + extensions: null, + extensionCount: null, + clearMouseListener: null, + initialize: function(a, b, c, d, e) { + OpenLayers.Util.extend(this, e); + this.object = a; + this.fallThrough = d; + this.listeners = {}; + this.extensions = {}; + this.extensionCount = {}; + null != b && this.attachToElement(b) + }, + destroy: function() { + for (var a in this.extensions) "boolean" !== typeof this.extensions[a] && this.extensions[a].destroy(); + this.extensions = null; + this.element && (OpenLayers.Event.stopObservingElement(this.element), this.element.hasScrollEvent && OpenLayers.Event.stopObserving(window, "scroll", this.clearMouseListener)); + this.eventHandler = this.fallThrough = this.object = this.listeners = this.element = null + }, + addEventType: function() {}, + attachToElement: function(a) { + this.element ? OpenLayers.Event.stopObservingElement(this.element) : + (this.eventHandler = OpenLayers.Function.bindAsEventListener(this.handleBrowserEvent, this), this.clearMouseListener = OpenLayers.Function.bind(this.clearMouseCache, this)); + this.element = a; + for (var b = 0, c = this.BROWSER_EVENTS.length; b < c; b++) OpenLayers.Event.observe(a, this.BROWSER_EVENTS[b], this.eventHandler); + OpenLayers.Event.observe(a, "dragstart", OpenLayers.Event.stop) + }, + on: function(a) { + for (var b in a) "scope" != b && a.hasOwnProperty(b) && this.register(b, a.scope, a[b]) + }, + register: function(a, b, c, d) { + a in OpenLayers.Events && + !this.extensions[a] && (this.extensions[a] = new OpenLayers.Events[a](this)); + if (null != c) { + null == b && (b = this.object); + var e = this.listeners[a]; + e || (e = [], this.listeners[a] = e, this.extensionCount[a] = 0); + b = { + obj: b, + func: c + }; + d ? (e.splice(this.extensionCount[a], 0, b), "object" === typeof d && d.extension && this.extensionCount[a]++) : e.push(b) + } + }, + registerPriority: function(a, b, c) { + this.register(a, b, c, !0) + }, + un: function(a) { + for (var b in a) "scope" != b && a.hasOwnProperty(b) && this.unregister(b, a.scope, a[b]) + }, + unregister: function(a, b, c) { + null == + b && (b = this.object); + a = this.listeners[a]; + if (null != a) + for (var d = 0, e = a.length; d < e; d++) + if (a[d].obj == b && a[d].func == c) { + a.splice(d, 1); + break + } + }, + remove: function(a) { + null != this.listeners[a] && (this.listeners[a] = []) + }, + triggerEvent: function(a, b) { + var c = this.listeners[a]; + if (c && 0 != c.length) { + null == b && (b = {}); + b.object = this.object; + b.element = this.element; + b.type || (b.type = a); + for (var c = c.slice(), d, e = 0, f = c.length; e < f && !(d = c[e], d = d.func.apply(d.obj, [b]), void 0 != d && !1 == d); e++); + this.fallThrough || OpenLayers.Event.stop(b, !0); + return d + } + }, + handleBrowserEvent: function(a) { + var b = a.type, + c = this.listeners[b]; + if (c && 0 != c.length) { + if ((c = a.touches) && c[0]) { + for (var d = 0, e = 0, f = c.length, g, h = 0; h < f; ++h) g = c[h], d += g.clientX, e += g.clientY; + a.clientX = d / f; + a.clientY = e / f + } + this.includeXY && (a.xy = this.getMousePosition(a)); + this.triggerEvent(b, a) + } + }, + clearMouseCache: function() { + this.element.scrolls = null; + this.element.lefttop = null; + var a = document.body; + if (a && (!(0 != a.scrollTop || 0 != a.scrollLeft) || !navigator.userAgent.match(/iPhone/i))) this.element.offsets = null + }, + getMousePosition: function(a) { + this.includeXY ? + this.element.hasScrollEvent || (OpenLayers.Event.observe(window, "scroll", this.clearMouseListener), this.element.hasScrollEvent = !0) : this.clearMouseCache(); + if (!this.element.scrolls) { + var b = OpenLayers.Util.getViewportElement(); + this.element.scrolls = [b.scrollLeft, b.scrollTop] + } + this.element.lefttop || (this.element.lefttop = [document.documentElement.clientLeft || 0, document.documentElement.clientTop || 0]); + this.element.offsets || (this.element.offsets = OpenLayers.Util.pagePosition(this.element)); + return new OpenLayers.Pixel(a.clientX + + this.element.scrolls[0] - this.element.offsets[0] - this.element.lefttop[0], a.clientY + this.element.scrolls[1] - this.element.offsets[1] - this.element.lefttop[1]) + }, + CLASS_NAME: "OpenLayers.Events" +}); +OpenLayers.Events.buttonclick = OpenLayers.Class({ + target: null, + events: "mousedown mouseup click dblclick touchstart touchmove touchend keydown".split(" "), + startRegEx: /^mousedown|touchstart$/, + cancelRegEx: /^touchmove$/, + completeRegEx: /^mouseup|touchend$/, + initialize: function(a) { + this.target = a; + for (a = this.events.length - 1; 0 <= a; --a) this.target.register(this.events[a], this, this.buttonClick, { + extension: !0 + }) + }, + destroy: function() { + for (var a = this.events.length - 1; 0 <= a; --a) this.target.unregister(this.events[a], this, this.buttonClick); + delete this.target + }, + getPressedButton: function(a) { + var b = 3, + c; + do { + if (OpenLayers.Element.hasClass(a, "olButton")) { + c = a; + break + } + a = a.parentNode + } while (0 < --b && a); + return c + }, + buttonClick: function(a) { + var b = !0, + c = OpenLayers.Event.element(a); + if (c && (OpenLayers.Event.isLeftClick(a) || !~a.type.indexOf("mouse"))) + if (c = this.getPressedButton(c)) { + if ("keydown" === a.type) switch (a.keyCode) { + case OpenLayers.Event.KEY_RETURN: + case OpenLayers.Event.KEY_SPACE: + this.target.triggerEvent("buttonclick", { + buttonElement: c + }), OpenLayers.Event.stop(a), + b = !1 + } else this.startEvt && (this.completeRegEx.test(a.type) && (b = OpenLayers.Util.pagePosition(c), this.target.triggerEvent("buttonclick", { + buttonElement: c, + buttonXY: { + x: this.startEvt.clientX - b[0], + y: this.startEvt.clientY - b[1] + } + })), this.cancelRegEx.test(a.type) && delete this.startEvt, OpenLayers.Event.stop(a), b = !1); + this.startRegEx.test(a.type) && (this.startEvt = a, OpenLayers.Event.stop(a), b = !1) + } else delete this.startEvt; + return b + } +}); +OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, { + element: null, + ovmap: null, + size: { + w: 180, + h: 90 + }, + layers: null, + minRectSize: 15, + minRectDisplayClass: "RectReplacement", + minRatio: 8, + maxRatio: 32, + mapOptions: null, + autoPan: !1, + handlers: null, + resolutionFactor: 1, + maximized: !1, + initialize: function(a) { + this.layers = []; + this.handlers = {}; + OpenLayers.Control.prototype.initialize.apply(this, [a]) + }, + destroy: function() { + this.mapDiv && (this.handlers.click && this.handlers.click.destroy(), this.handlers.drag && this.handlers.drag.destroy(), + this.ovmap && this.ovmap.viewPortDiv.removeChild(this.extentRectangle), this.extentRectangle = null, this.rectEvents && (this.rectEvents.destroy(), this.rectEvents = null), this.ovmap && (this.ovmap.destroy(), this.ovmap = null), this.element.removeChild(this.mapDiv), this.mapDiv = null, this.div.removeChild(this.element), this.element = null, this.maximizeDiv && (this.div.removeChild(this.maximizeDiv), this.maximizeDiv = null), this.minimizeDiv && (this.div.removeChild(this.minimizeDiv), this.minimizeDiv = null), this.map.events.un({ + buttonclick: this.onButtonClick, + moveend: this.update, + changebaselayer: this.baseLayerDraw, + scope: this + }), OpenLayers.Control.prototype.destroy.apply(this, arguments)) + }, + draw: function() { + OpenLayers.Control.prototype.draw.apply(this, arguments); + if (0 === this.layers.length) + if (this.map.baseLayer) this.layers = [this.map.baseLayer.clone()]; + else return this.map.events.register("changebaselayer", this, this.baseLayerDraw), this.div; + this.element = document.createElement("div"); + this.element.className = this.displayClass + "Element"; + this.element.style.display = "none"; + this.mapDiv = document.createElement("div"); + this.mapDiv.style.width = this.size.w + "px"; + this.mapDiv.style.height = this.size.h + "px"; + this.mapDiv.style.position = "relative"; + this.mapDiv.style.overflow = "hidden"; + this.mapDiv.id = OpenLayers.Util.createUniqueID("overviewMap"); + this.extentRectangle = document.createElement("div"); + this.extentRectangle.style.position = "absolute"; + this.extentRectangle.style.zIndex = 1E3; + this.extentRectangle.className = this.displayClass + "ExtentRectangle"; + this.element.appendChild(this.mapDiv); + this.div.appendChild(this.element); + if (this.outsideViewport) this.element.style.display = ""; + else { + this.div.className += " " + this.displayClass + "Container"; + var a = OpenLayers.Util.getImageLocation("layer-switcher-maximize.png"); + this.maximizeDiv = OpenLayers.Util.createAlphaImageDiv(this.displayClass + "MaximizeButton", null, null, a, "absolute"); + this.maximizeDiv.style.display = "none"; + this.maximizeDiv.className = this.displayClass + "MaximizeButton olButton"; + this.div.appendChild(this.maximizeDiv); + a = OpenLayers.Util.getImageLocation("layer-switcher-minimize.png"); + this.minimizeDiv = OpenLayers.Util.createAlphaImageDiv("OpenLayers_Control_minimizeDiv", null, null, a, "absolute"); + this.minimizeDiv.style.display = "none"; + this.minimizeDiv.className = this.displayClass + "MinimizeButton olButton"; + this.div.appendChild(this.minimizeDiv); + this.minimizeControl() + } + this.map.getExtent() && this.update(); + this.map.events.on({ + buttonclick: this.onButtonClick, + moveend: this.update, + scope: this + }); + this.maximized && this.maximizeControl(); + return this.div + }, + baseLayerDraw: function() { + this.draw(); + this.map.events.unregister("changebaselayer", + this, this.baseLayerDraw) + }, + rectDrag: function(a) { + var b = this.handlers.drag.last.x - a.x, + c = this.handlers.drag.last.y - a.y; + if (0 != b || 0 != c) { + var d = this.rectPxBounds.top, + e = this.rectPxBounds.left, + a = Math.abs(this.rectPxBounds.getHeight()), + f = this.rectPxBounds.getWidth(), + c = Math.max(0, d - c), + c = Math.min(c, this.ovmap.size.h - this.hComp - a), + b = Math.max(0, e - b), + b = Math.min(b, this.ovmap.size.w - this.wComp - f); + this.setRectPxBounds(new OpenLayers.Bounds(b, c + a, b + f, c)) + } + }, + mapDivClick: function(a) { + var b = this.rectPxBounds.getCenterPixel(), + c = a.xy.x - b.x, + d = a.xy.y - b.y, + e = this.rectPxBounds.top, + f = this.rectPxBounds.left, + a = Math.abs(this.rectPxBounds.getHeight()), + b = this.rectPxBounds.getWidth(), + d = Math.max(0, e + d), + d = Math.min(d, this.ovmap.size.h - a), + c = Math.max(0, f + c), + c = Math.min(c, this.ovmap.size.w - b); + this.setRectPxBounds(new OpenLayers.Bounds(c, d + a, c + b, d)); + this.updateMapToRect() + }, + onButtonClick: function(a) { + a.buttonElement === this.minimizeDiv ? this.minimizeControl() : a.buttonElement === this.maximizeDiv && this.maximizeControl() + }, + maximizeControl: function(a) { + this.element.style.display = + ""; + this.showToggle(!1); + null != a && OpenLayers.Event.stop(a) + }, + minimizeControl: function(a) { + this.element.style.display = "none"; + this.showToggle(!0); + null != a && OpenLayers.Event.stop(a) + }, + showToggle: function(a) { + this.maximizeDiv.style.display = a ? "" : "none"; + this.minimizeDiv.style.display = a ? "none" : "" + }, + update: function() { + null == this.ovmap && this.createMap(); + (this.autoPan || !this.isSuitableOverview()) && this.updateOverview(); + this.updateRectToMap() + }, + isSuitableOverview: function() { + var a = this.map.getExtent(), + b = this.map.maxExtent, + a = new OpenLayers.Bounds(Math.max(a.left, b.left), Math.max(a.bottom, b.bottom), Math.min(a.right, b.right), Math.min(a.top, b.top)); + this.ovmap.getProjection() != this.map.getProjection() && (a = a.transform(this.map.getProjectionObject(), this.ovmap.getProjectionObject())); + b = this.ovmap.getResolution() / this.map.getResolution(); + return b > this.minRatio && b <= this.maxRatio && this.ovmap.getExtent().containsBounds(a) + }, + updateOverview: function() { + var a = this.map.getResolution(), + b = this.ovmap.getResolution(), + c = b / a; + c > this.maxRatio ? + b = this.minRatio * a : c <= this.minRatio && (b = this.maxRatio * a); + this.ovmap.getProjection() != this.map.getProjection() ? (a = this.map.center.clone(), a.transform(this.map.getProjectionObject(), this.ovmap.getProjectionObject())) : a = this.map.center; + this.ovmap.setCenter(a, this.ovmap.getZoomForResolution(b * this.resolutionFactor)); + this.updateRectToMap() + }, + createMap: function() { + var a = OpenLayers.Util.extend({ + controls: [], + maxResolution: "auto", + fallThrough: !1 + }, this.mapOptions); + this.ovmap = new OpenLayers.Map(this.mapDiv, a); + this.ovmap.viewPortDiv.appendChild(this.extentRectangle); + OpenLayers.Event.stopObserving(window, "unload", this.ovmap.unloadDestroy); + this.ovmap.addLayers(this.layers); + this.ovmap.zoomToMaxExtent(); + this.wComp = (this.wComp = parseInt(OpenLayers.Element.getStyle(this.extentRectangle, "border-left-width")) + parseInt(OpenLayers.Element.getStyle(this.extentRectangle, "border-right-width"))) ? this.wComp : 2; + this.hComp = (this.hComp = parseInt(OpenLayers.Element.getStyle(this.extentRectangle, "border-top-width")) + parseInt(OpenLayers.Element.getStyle(this.extentRectangle, "border-bottom-width"))) ? + this.hComp : 2; + this.handlers.drag = new OpenLayers.Handler.Drag(this, { + move: this.rectDrag, + done: this.updateMapToRect + }, { + map: this.ovmap + }); + this.handlers.click = new OpenLayers.Handler.Click(this, { + click: this.mapDivClick + }, { + single: !0, + "double": !1, + stopSingle: !0, + stopDouble: !0, + pixelTolerance: 1, + map: this.ovmap + }); + this.handlers.click.activate(); + this.rectEvents = new OpenLayers.Events(this, this.extentRectangle, null, !0); + this.rectEvents.register("mouseover", this, function() { + !this.handlers.drag.active && !this.map.dragging && this.handlers.drag.activate() + }); + this.rectEvents.register("mouseout", this, function() { + this.handlers.drag.dragging || this.handlers.drag.deactivate() + }); + if (this.ovmap.getProjection() != this.map.getProjection()) { + var a = this.map.getProjectionObject().getUnits() || this.map.units || this.map.baseLayer.units, + b = this.ovmap.getProjectionObject().getUnits() || this.ovmap.units || this.ovmap.baseLayer.units; + this.resolutionFactor = a && b ? OpenLayers.INCHES_PER_UNIT[a] / OpenLayers.INCHES_PER_UNIT[b] : 1 + } + }, + updateRectToMap: function() { + var a = this.getRectBoundsFromMapBounds(this.ovmap.getProjection() != + this.map.getProjection() ? this.map.getExtent().transform(this.map.getProjectionObject(), this.ovmap.getProjectionObject()) : this.map.getExtent()); + a && this.setRectPxBounds(a) + }, + updateMapToRect: function() { + var a = this.getMapBoundsFromRectBounds(this.rectPxBounds); + this.ovmap.getProjection() != this.map.getProjection() && (a = a.transform(this.ovmap.getProjectionObject(), this.map.getProjectionObject())); + this.map.panTo(a.getCenterLonLat()) + }, + setRectPxBounds: function(a) { + var b = Math.max(a.top, 0), + c = Math.max(a.left, 0), + d = + Math.min(a.top + Math.abs(a.getHeight()), this.ovmap.size.h - this.hComp), + a = Math.min(a.left + a.getWidth(), this.ovmap.size.w - this.wComp), + e = Math.max(a - c, 0), + f = Math.max(d - b, 0); + e < this.minRectSize || f < this.minRectSize ? (this.extentRectangle.className = this.displayClass + this.minRectDisplayClass, e = c + e / 2 - this.minRectSize / 2, this.extentRectangle.style.top = Math.round(b + f / 2 - this.minRectSize / 2) + "px", this.extentRectangle.style.left = Math.round(e) + "px", this.extentRectangle.style.height = this.minRectSize + "px", this.extentRectangle.style.width = + this.minRectSize + "px") : (this.extentRectangle.className = this.displayClass + "ExtentRectangle", this.extentRectangle.style.top = Math.round(b) + "px", this.extentRectangle.style.left = Math.round(c) + "px", this.extentRectangle.style.height = Math.round(f) + "px", this.extentRectangle.style.width = Math.round(e) + "px"); + this.rectPxBounds = new OpenLayers.Bounds(Math.round(c), Math.round(d), Math.round(a), Math.round(b)) + }, + getRectBoundsFromMapBounds: function(a) { + var b = this.getOverviewPxFromLonLat({ + lon: a.left, + lat: a.bottom + }), + a = this.getOverviewPxFromLonLat({ + lon: a.right, + lat: a.top + }), + c = null; + b && a && (c = new OpenLayers.Bounds(b.x, b.y, a.x, a.y)); + return c + }, + getMapBoundsFromRectBounds: function(a) { + var b = this.getLonLatFromOverviewPx({ + x: a.left, + y: a.bottom + }), + a = this.getLonLatFromOverviewPx({ + x: a.right, + y: a.top + }); + return new OpenLayers.Bounds(b.lon, b.lat, a.lon, a.lat) + }, + getLonLatFromOverviewPx: function(a) { + var b = this.ovmap.size, + c = this.ovmap.getResolution(), + d = this.ovmap.getExtent().getCenterLonLat(); + return { + lon: d.lon + (a.x - b.w / 2) * c, + lat: d.lat - (a.y - b.h / 2) * c + } + }, + getOverviewPxFromLonLat: function(a) { + var b = + this.ovmap.getResolution(), + c = this.ovmap.getExtent(); + if (c) return { + x: Math.round(1 / b * (a.lon - c.left)), + y: Math.round(1 / b * (c.top - a.lat)) + } + }, + CLASS_NAME: "OpenLayers.Control.OverviewMap" +}); +OpenLayers.Animation = function(a) { + var b = !(!a.requestAnimationFrame && !a.webkitRequestAnimationFrame && !a.mozRequestAnimationFrame && !a.oRequestAnimationFrame && !a.msRequestAnimationFrame), + c = function() { + var b = a.requestAnimationFrame || a.webkitRequestAnimationFrame || a.mozRequestAnimationFrame || a.oRequestAnimationFrame || a.msRequestAnimationFrame || function(b) { + a.setTimeout(b, 16) + }; + return function(c, d) { + b.apply(a, [c, d]) + } + }(), + d = 0, + e = {}; + return { + isNative: b, + requestFrame: c, + start: function(a, b, h) { + var b = 0 < b ? b : Number.POSITIVE_INFINITY, + i = ++d, + j = +new Date; + e[i] = function() { + e[i] && +new Date - j <= b ? (a(), e[i] && c(e[i], h)) : delete e[i] + }; + c(e[i], h); + return i + }, + stop: function(a) { + delete e[a] + } + } +}(window); +OpenLayers.Tween = OpenLayers.Class({ + easing: null, + begin: null, + finish: null, + duration: null, + callbacks: null, + time: null, + animationId: null, + playing: !1, + initialize: function(a) { + this.easing = a ? a : OpenLayers.Easing.Expo.easeOut + }, + start: function(a, b, c, d) { + this.playing = !0; + this.begin = a; + this.finish = b; + this.duration = c; + this.callbacks = d.callbacks; + this.time = 0; + OpenLayers.Animation.stop(this.animationId); + this.animationId = null; + this.callbacks && this.callbacks.start && this.callbacks.start.call(this, this.begin); + this.animationId = OpenLayers.Animation.start(OpenLayers.Function.bind(this.play, + this)) + }, + stop: function() { + this.playing && (this.callbacks && this.callbacks.done && this.callbacks.done.call(this, this.finish), OpenLayers.Animation.stop(this.animationId), this.animationId = null, this.playing = !1) + }, + play: function() { + var a = {}, + b; + for (b in this.begin) { + var c = this.begin[b], + d = this.finish[b]; + if (null == c || null == d || isNaN(c) || isNaN(d)) throw new TypeError("invalid value for Tween"); + a[b] = this.easing.apply(this, [this.time, c, d - c, this.duration]) + } + this.time++; + this.callbacks && this.callbacks.eachStep && this.callbacks.eachStep.call(this, + a); + this.time > this.duration && this.stop() + }, + CLASS_NAME: "OpenLayers.Tween" +}); +OpenLayers.Easing = { + CLASS_NAME: "OpenLayers.Easing" +}; +OpenLayers.Easing.Linear = { + easeIn: function(a, b, c, d) { + return c * a / d + b + }, + easeOut: function(a, b, c, d) { + return c * a / d + b + }, + easeInOut: function(a, b, c, d) { + return c * a / d + b + }, + CLASS_NAME: "OpenLayers.Easing.Linear" +}; +OpenLayers.Easing.Expo = { + easeIn: function(a, b, c, d) { + return 0 == a ? b : c * Math.pow(2, 10 * (a / d - 1)) + b + }, + easeOut: function(a, b, c, d) { + return a == d ? b + c : c * (-Math.pow(2, -10 * a / d) + 1) + b + }, + easeInOut: function(a, b, c, d) { + return 0 == a ? b : a == d ? b + c : 1 > (a /= d / 2) ? c / 2 * Math.pow(2, 10 * (a - 1)) + b : c / 2 * (-Math.pow(2, -10 * --a) + 2) + b + }, + CLASS_NAME: "OpenLayers.Easing.Expo" +}; +OpenLayers.Easing.Quad = { + easeIn: function(a, b, c, d) { + return c * (a /= d) * a + b + }, + easeOut: function(a, b, c, d) { + return -c * (a /= d) * (a - 2) + b + }, + easeInOut: function(a, b, c, d) { + return 1 > (a /= d / 2) ? c / 2 * a * a + b : -c / 2 * (--a * (a - 2) - 1) + b + }, + CLASS_NAME: "OpenLayers.Easing.Quad" +}; +OpenLayers.Projection = OpenLayers.Class({ + proj: null, + projCode: null, + titleRegEx: /\+title=[^\+]*/, + initialize: function(a, b) { + OpenLayers.Util.extend(this, b); + this.projCode = a; + window.Proj4js && (this.proj = new Proj4js.Proj(a)) + }, + getCode: function() { + return this.proj ? this.proj.srsCode : this.projCode + }, + getUnits: function() { + return this.proj ? this.proj.units : null + }, + toString: function() { + return this.getCode() + }, + equals: function(a) { + var b = !1; + a && (a instanceof OpenLayers.Projection || (a = new OpenLayers.Projection(a)), window.Proj4js && + this.proj.defData && a.proj.defData ? b = this.proj.defData.replace(this.titleRegEx, "") == a.proj.defData.replace(this.titleRegEx, "") : a.getCode && (b = this.getCode(), a = a.getCode(), b = b == a || !!OpenLayers.Projection.transforms[b] && OpenLayers.Projection.transforms[b][a] === OpenLayers.Projection.nullTransform)); + return b + }, + destroy: function() { + delete this.proj; + delete this.projCode + }, + CLASS_NAME: "OpenLayers.Projection" +}); +OpenLayers.Projection.transforms = {}; +OpenLayers.Projection.defaults = { + "EPSG:4326": { + units: "degrees", + maxExtent: [-180, -90, 180, 90], + yx: !0 + }, + "CRS:84": { + units: "degrees", + maxExtent: [-180, -90, 180, 90] + }, + "EPSG:900913": { + units: "m", + maxExtent: [-2.003750834E7, -2.003750834E7, 2.003750834E7, 2.003750834E7] + } +}; +OpenLayers.Projection.addTransform = function(a, b, c) { + if (c === OpenLayers.Projection.nullTransform) { + var d = OpenLayers.Projection.defaults[a]; + d && !OpenLayers.Projection.defaults[b] && (OpenLayers.Projection.defaults[b] = d) + } + OpenLayers.Projection.transforms[a] || (OpenLayers.Projection.transforms[a] = {}); + OpenLayers.Projection.transforms[a][b] = c +}; +OpenLayers.Projection.transform = function(a, b, c) { + if (b && c) + if (b instanceof OpenLayers.Projection || (b = new OpenLayers.Projection(b)), c instanceof OpenLayers.Projection || (c = new OpenLayers.Projection(c)), b.proj && c.proj) a = Proj4js.transform(b.proj, c.proj, a); + else { + var b = b.getCode(), + c = c.getCode(), + d = OpenLayers.Projection.transforms; + if (d[b] && d[b][c]) d[b][c](a) + } + return a +}; +OpenLayers.Projection.nullTransform = function(a) { + return a +}; +(function() { + function a(a) { + a.x = 180 * a.x / d; + a.y = 180 / Math.PI * (2 * Math.atan(Math.exp(a.y / d * Math.PI)) - Math.PI / 2); + return a + } + + function b(a) { + a.x = a.x * d / 180; + a.y = Math.log(Math.tan((90 + a.y) * Math.PI / 360)) / Math.PI * d; + return a + } + + function c(c, d) { + var e = OpenLayers.Projection.addTransform, + f = OpenLayers.Projection.nullTransform, + g, m, n, o, p; + g = 0; + for (m = d.length; g < m; ++g) { + n = d[g]; + e(c, n, b); + e(n, c, a); + for (p = g + 1; p < m; ++p) o = d[p], e(n, o, f), e(o, n, f) + } + } + var d = 2.003750834E7, + e = ["EPSG:900913", "EPSG:3857", "EPSG:102113", "EPSG:102100"], + f = ["CRS:84", "urn:ogc:def:crs:EPSG:6.6:4326", + "EPSG:4326" + ], + g; + for (g = e.length - 1; 0 <= g; --g) c(e[g], f); + for (g = f.length - 1; 0 <= g; --g) c(f[g], e) +})(); +OpenLayers.Map = OpenLayers.Class({ + Z_INDEX_BASE: { + BaseLayer: 100, + Overlay: 325, + Feature: 725, + Popup: 750, + Control: 1E3 + }, + id: null, + fractionalZoom: !1, + events: null, + allOverlays: !1, + div: null, + dragging: !1, + size: null, + viewPortDiv: null, + layerContainerOrigin: null, + layerContainerDiv: null, + layers: null, + controls: null, + popups: null, + baseLayer: null, + center: null, + resolution: null, + zoom: 0, + panRatio: 1.5, + options: null, + tileSize: null, + projection: "EPSG:4326", + units: null, + resolutions: null, + maxResolution: null, + minResolution: null, + maxScale: null, + minScale: null, + maxExtent: null, + minExtent: null, + restrictedExtent: null, + numZoomLevels: 16, + theme: null, + displayProjection: null, + fallThrough: !0, + panTween: null, + eventListeners: null, + panMethod: OpenLayers.Easing.Expo.easeOut, + panDuration: 50, + paddingForPopups: null, + minPx: null, + maxPx: null, + initialize: function(a, b) { + 1 === arguments.length && "object" === typeof a && (a = (b = a) && b.div); + this.tileSize = new OpenLayers.Size(OpenLayers.Map.TILE_WIDTH, OpenLayers.Map.TILE_HEIGHT); + this.paddingForPopups = new OpenLayers.Bounds(15, 15, 15, 15); + this.theme = OpenLayers._getScriptLocation() + + "style.css"; + this.options = OpenLayers.Util.extend({}, b); + OpenLayers.Util.extend(this, b); + OpenLayers.Util.applyDefaults(this, OpenLayers.Projection.defaults[this.projection instanceof OpenLayers.Projection ? this.projection.projCode : this.projection]); + this.maxExtent && !(this.maxExtent instanceof OpenLayers.Bounds) && (this.maxExtent = new OpenLayers.Bounds(this.maxExtent)); + this.minExtent && !(this.minExtent instanceof OpenLayers.Bounds) && (this.minExtent = new OpenLayers.Bounds(this.minExtent)); + this.restrictedExtent && + !(this.restrictedExtent instanceof OpenLayers.Bounds) && (this.restrictedExtent = new OpenLayers.Bounds(this.restrictedExtent)); + this.center && !(this.center instanceof OpenLayers.LonLat) && (this.center = new OpenLayers.LonLat(this.center)); + this.layers = []; + this.id = OpenLayers.Util.createUniqueID("OpenLayers.Map_"); + this.div = OpenLayers.Util.getElement(a); + this.div || (this.div = document.createElement("div"), this.div.style.height = "1px", this.div.style.width = "1px"); + OpenLayers.Element.addClass(this.div, "olMap"); + var c = + this.id + "_OpenLayers_ViewPort"; + this.viewPortDiv = OpenLayers.Util.createDiv(c, null, null, null, "relative", null, "hidden"); + this.viewPortDiv.style.width = "100%"; + this.viewPortDiv.style.height = "100%"; + this.viewPortDiv.className = "olMapViewport"; + this.div.appendChild(this.viewPortDiv); + this.events = new OpenLayers.Events(this, this.viewPortDiv, null, this.fallThrough, { + includeXY: !0 + }); + c = this.id + "_OpenLayers_Container"; + this.layerContainerDiv = OpenLayers.Util.createDiv(c); + this.layerContainerDiv.style.width = "100px"; + this.layerContainerDiv.style.height = + "100px"; + this.layerContainerDiv.style.zIndex = this.Z_INDEX_BASE.Popup - 1; + this.viewPortDiv.appendChild(this.layerContainerDiv); + this.updateSize(); + if (this.eventListeners instanceof Object) this.events.on(this.eventListeners); + 9 > parseFloat(navigator.appVersion.split("MSIE")[1]) ? this.events.register("resize", this, this.updateSize) : (this.updateSizeDestroy = OpenLayers.Function.bind(this.updateSize, this), OpenLayers.Event.observe(window, "resize", this.updateSizeDestroy)); + if (this.theme) { + for (var c = !0, d = document.getElementsByTagName("link"), + e = 0, f = d.length; e < f; ++e) + if (OpenLayers.Util.isEquivalentUrl(d.item(e).href, this.theme)) { + c = !1; + break + } + c && (c = document.createElement("link"), c.setAttribute("rel", "stylesheet"), c.setAttribute("type", "text/css"), c.setAttribute("href", this.theme), document.getElementsByTagName("head")[0].appendChild(c)) + } + null == this.controls && (this.controls = [], null != OpenLayers.Control && (OpenLayers.Control.Navigation ? this.controls.push(new OpenLayers.Control.Navigation) : OpenLayers.Control.TouchNavigation && this.controls.push(new OpenLayers.Control.TouchNavigation), + OpenLayers.Control.Zoom ? this.controls.push(new OpenLayers.Control.Zoom) : OpenLayers.Control.PanZoom && this.controls.push(new OpenLayers.Control.PanZoom), OpenLayers.Control.ArgParser && this.controls.push(new OpenLayers.Control.ArgParser), OpenLayers.Control.Attribution && this.controls.push(new OpenLayers.Control.Attribution))); + e = 0; + for (f = this.controls.length; e < f; e++) this.addControlToMap(this.controls[e]); + this.popups = []; + this.unloadDestroy = OpenLayers.Function.bind(this.destroy, this); + OpenLayers.Event.observe(window, + "unload", this.unloadDestroy); + b && b.layers && (delete this.center, this.addLayers(b.layers), b.center && !this.getCenter() && this.setCenter(b.center, b.zoom)) + }, + getViewport: function() { + return this.viewPortDiv + }, + render: function(a) { + this.div = OpenLayers.Util.getElement(a); + OpenLayers.Element.addClass(this.div, "olMap"); + this.viewPortDiv.parentNode.removeChild(this.viewPortDiv); + this.div.appendChild(this.viewPortDiv); + this.updateSize() + }, + unloadDestroy: null, + updateSizeDestroy: null, + destroy: function() { + if (!this.unloadDestroy) return !1; + this.panTween && (this.panTween.stop(), this.panTween = null); + OpenLayers.Event.stopObserving(window, "unload", this.unloadDestroy); + this.unloadDestroy = null; + this.updateSizeDestroy ? OpenLayers.Event.stopObserving(window, "resize", this.updateSizeDestroy) : this.events.unregister("resize", this, this.updateSize); + this.paddingForPopups = null; + if (null != this.controls) { + for (var a = this.controls.length - 1; 0 <= a; --a) this.controls[a].destroy(); + this.controls = null + } + if (null != this.layers) { + for (a = this.layers.length - 1; 0 <= a; --a) this.layers[a].destroy(!1); + this.layers = null + } + this.viewPortDiv && this.div.removeChild(this.viewPortDiv); + this.viewPortDiv = null; + this.eventListeners && (this.events.un(this.eventListeners), this.eventListeners = null); + this.events.destroy(); + this.options = this.events = null + }, + setOptions: function(a) { + var b = this.minPx && a.restrictedExtent != this.restrictedExtent; + OpenLayers.Util.extend(this, a); + b && this.moveTo(this.getCachedCenter(), this.zoom, { + forceZoomChange: !0 + }) + }, + getTileSize: function() { + return this.tileSize + }, + getBy: function(a, b, c) { + var d = "function" == + typeof c.test; + return OpenLayers.Array.filter(this[a], function(a) { + return a[b] == c || d && c.test(a[b]) + }) + }, + getLayersBy: function(a, b) { + return this.getBy("layers", a, b) + }, + getLayersByName: function(a) { + return this.getLayersBy("name", a) + }, + getLayersByClass: function(a) { + return this.getLayersBy("CLASS_NAME", a) + }, + getControlsBy: function(a, b) { + return this.getBy("controls", a, b) + }, + getControlsByClass: function(a) { + return this.getControlsBy("CLASS_NAME", a) + }, + getLayer: function(a) { + for (var b = null, c = 0, d = this.layers.length; c < d; c++) { + var e = + this.layers[c]; + if (e.id == a) { + b = e; + break + } + } + return b + }, + setLayerZIndex: function(a, b) { + a.setZIndex(this.Z_INDEX_BASE[a.isBaseLayer ? "BaseLayer" : "Overlay"] + 5 * b) + }, + resetLayersZIndex: function() { + for (var a = 0, b = this.layers.length; a < b; a++) this.setLayerZIndex(this.layers[a], a) + }, + addLayer: function(a) { + for (var b = 0, c = this.layers.length; b < c; b++) + if (this.layers[b] == a) return !1; + if (!1 === this.events.triggerEvent("preaddlayer", { + layer: a + })) return !1; + this.allOverlays && (a.isBaseLayer = !1); + a.div.className = "olLayerDiv"; + a.div.style.overflow = + ""; + this.setLayerZIndex(a, this.layers.length); + a.isFixed ? this.viewPortDiv.appendChild(a.div) : this.layerContainerDiv.appendChild(a.div); + this.layers.push(a); + a.setMap(this); + a.isBaseLayer || this.allOverlays && !this.baseLayer ? null == this.baseLayer ? this.setBaseLayer(a) : a.setVisibility(!1) : a.redraw(); + this.events.triggerEvent("addlayer", { + layer: a + }); + a.events.triggerEvent("added", { + map: this, + layer: a + }); + a.afterAdd(); + return !0 + }, + addLayers: function(a) { + for (var b = 0, c = a.length; b < c; b++) this.addLayer(a[b]) + }, + removeLayer: function(a, + b) { + if (!1 !== this.events.triggerEvent("preremovelayer", { + layer: a + })) { + null == b && (b = !0); + a.isFixed ? this.viewPortDiv.removeChild(a.div) : this.layerContainerDiv.removeChild(a.div); + OpenLayers.Util.removeItem(this.layers, a); + a.removeMap(this); + a.map = null; + if (this.baseLayer == a && (this.baseLayer = null, b)) + for (var c = 0, d = this.layers.length; c < d; c++) { + var e = this.layers[c]; + if (e.isBaseLayer || this.allOverlays) { + this.setBaseLayer(e); + break + } + } + this.resetLayersZIndex(); + this.events.triggerEvent("removelayer", { + layer: a + }); + a.events.triggerEvent("removed", { + map: this, + layer: a + }) + } + }, + getNumLayers: function() { + return this.layers.length + }, + getLayerIndex: function(a) { + return OpenLayers.Util.indexOf(this.layers, a) + }, + setLayerIndex: function(a, b) { + var c = this.getLayerIndex(a); + 0 > b ? b = 0 : b > this.layers.length && (b = this.layers.length); + if (c != b) { + this.layers.splice(c, 1); + this.layers.splice(b, 0, a); + for (var c = 0, d = this.layers.length; c < d; c++) this.setLayerZIndex(this.layers[c], c); + this.events.triggerEvent("changelayer", { + layer: a, + property: "order" + }); + this.allOverlays && (0 === b ? this.setBaseLayer(a) : + this.baseLayer !== this.layers[0] && this.setBaseLayer(this.layers[0])) + } + }, + raiseLayer: function(a, b) { + var c = this.getLayerIndex(a) + b; + this.setLayerIndex(a, c) + }, + setBaseLayer: function(a) { + if (a != this.baseLayer && -1 != OpenLayers.Util.indexOf(this.layers, a)) { + var b = this.getCachedCenter(), + c = OpenLayers.Util.getResolutionFromScale(this.getScale(), a.units); + null != this.baseLayer && !this.allOverlays && this.baseLayer.setVisibility(!1); + this.baseLayer = a; + if (!this.allOverlays || this.baseLayer.visibility) this.baseLayer.setVisibility(!0), !1 === this.baseLayer.inRange && this.baseLayer.redraw(); + null != b && (a = this.getZoomForResolution(c || this.resolution, !0), this.setCenter(b, a, !1, !0)); + this.events.triggerEvent("changebaselayer", { + layer: this.baseLayer + }) + } + }, + addControl: function(a, b) { + this.controls.push(a); + this.addControlToMap(a, b) + }, + addControls: function(a, b) { + for (var c = 1 === arguments.length ? [] : b, d = 0, e = a.length; d < e; d++) this.addControl(a[d], c[d] ? c[d] : null) + }, + addControlToMap: function(a, b) { + a.outsideViewport = null != a.div; + this.displayProjection && !a.displayProjection && + (a.displayProjection = this.displayProjection); + a.setMap(this); + var c = a.draw(b); + c && !a.outsideViewport && (c.style.zIndex = this.Z_INDEX_BASE.Control + this.controls.length, this.viewPortDiv.appendChild(c)); + a.autoActivate && a.activate() + }, + getControl: function(a) { + for (var b = null, c = 0, d = this.controls.length; c < d; c++) { + var e = this.controls[c]; + if (e.id == a) { + b = e; + break + } + } + return b + }, + removeControl: function(a) { + a && a == this.getControl(a.id) && (a.div && a.div.parentNode == this.viewPortDiv && this.viewPortDiv.removeChild(a.div), OpenLayers.Util.removeItem(this.controls, + a)) + }, + addPopup: function(a, b) { + if (b) + for (var c = this.popups.length - 1; 0 <= c; --c) this.removePopup(this.popups[c]); + a.map = this; + this.popups.push(a); + if (c = a.draw()) c.style.zIndex = this.Z_INDEX_BASE.Popup + this.popups.length, this.layerContainerDiv.appendChild(c) + }, + removePopup: function(a) { + OpenLayers.Util.removeItem(this.popups, a); + if (a.div) try { + this.layerContainerDiv.removeChild(a.div) + } catch (b) {} + a.map = null + }, + getSize: function() { + var a = null; + null != this.size && (a = this.size.clone()); + return a + }, + updateSize: function() { + var a = this.getCurrentSize(); + if (a && !isNaN(a.h) && !isNaN(a.w)) { + this.events.clearMouseCache(); + var b = this.getSize(); + null == b && (this.size = b = a); + if (!a.equals(b)) { + this.size = a; + a = 0; + for (b = this.layers.length; a < b; a++) this.layers[a].onMapResize(); + a = this.getCachedCenter(); + null != this.baseLayer && null != a && (b = this.getZoom(), this.zoom = null, this.setCenter(a, b)) + } + } + }, + getCurrentSize: function() { + var a = new OpenLayers.Size(this.div.clientWidth, this.div.clientHeight); + if (0 == a.w && 0 == a.h || isNaN(a.w) && isNaN(a.h)) a.w = this.div.offsetWidth, a.h = this.div.offsetHeight; + if (0 == a.w && 0 == a.h || isNaN(a.w) && isNaN(a.h)) a.w = parseInt(this.div.style.width), a.h = parseInt(this.div.style.height); + return a + }, + calculateBounds: function(a, b) { + var c = null; + null == a && (a = this.getCachedCenter()); + null == b && (b = this.getResolution()); + if (null != a && null != b) var c = this.size.w * b / 2, + d = this.size.h * b / 2, + c = new OpenLayers.Bounds(a.lon - c, a.lat - d, a.lon + c, a.lat + d); + return c + }, + getCenter: function() { + var a = null, + b = this.getCachedCenter(); + b && (a = b.clone()); + return a + }, + getCachedCenter: function() { + !this.center && this.size && (this.center = + this.getLonLatFromViewPortPx({ + x: this.size.w / 2, + y: this.size.h / 2 + })); + return this.center + }, + getZoom: function() { + return this.zoom + }, + pan: function(a, b, c) { + c = OpenLayers.Util.applyDefaults(c, { + animate: !0, + dragging: !1 + }); + if (c.dragging)(0 != a || 0 != b) && this.moveByPx(a, b); + else { + var d = this.getViewPortPxFromLonLat(this.getCachedCenter()), + a = d.add(a, b); + if (this.dragging || !a.equals(d)) d = this.getLonLatFromViewPortPx(a), c.animate ? this.panTo(d) : (this.moveTo(d), this.dragging && (this.dragging = !1, this.events.triggerEvent("moveend"))) + } + }, + panTo: function(a) { + if (this.panMethod && this.getExtent().scale(this.panRatio).containsLonLat(a)) { + this.panTween || (this.panTween = new OpenLayers.Tween(this.panMethod)); + var b = this.getCachedCenter(); + if (!a.equals(b)) { + var b = this.getPixelFromLonLat(b), + c = this.getPixelFromLonLat(a), + d = 0, + e = 0; + this.panTween.start({ + x: 0, + y: 0 + }, { + x: c.x - b.x, + y: c.y - b.y + }, this.panDuration, { + callbacks: { + eachStep: OpenLayers.Function.bind(function(a) { + this.moveByPx(a.x - d, a.y - e); + d = Math.round(a.x); + e = Math.round(a.y) + }, this), + done: OpenLayers.Function.bind(function() { + this.moveTo(a); + this.dragging = false; + this.events.triggerEvent("moveend") + }, this) + } + }) + } + } else this.setCenter(a) + }, + setCenter: function(a, b, c, d) { + this.panTween && this.panTween.stop(); + this.moveTo(a, b, { + dragging: c, + forceZoomChange: d + }) + }, + moveByPx: function(a, b) { + var c = this.size.w / 2, + d = this.size.h / 2, + e = c + a, + f = d + b, + g = this.baseLayer.wrapDateLine, + h = 0, + i = 0; + this.restrictedExtent && (h = c, i = d, g = !1); + a = g || e <= this.maxPx.x - h && e >= this.minPx.x + h ? Math.round(a) : 0; + b = f <= this.maxPx.y - i && f >= this.minPx.y + i ? Math.round(b) : 0; + if (a || b) { + this.dragging || (this.dragging = !0, this.events.triggerEvent("movestart")); + this.center = null; + a && (this.layerContainerDiv.style.left = parseInt(this.layerContainerDiv.style.left) - a + "px", this.minPx.x -= a, this.maxPx.x -= a); + b && (this.layerContainerDiv.style.top = parseInt(this.layerContainerDiv.style.top) - b + "px", this.minPx.y -= b, this.maxPx.y -= b); + d = 0; + for (e = this.layers.length; d < e; ++d) + if (c = this.layers[d], c.visibility && (c === this.baseLayer || c.inRange)) c.moveByPx(a, b), c.events.triggerEvent("move"); + this.events.triggerEvent("move") + } + }, + adjustZoom: function(a) { + var b = + this.baseLayer.resolutions, + c = this.getMaxExtent().getWidth() / this.size.w; + if (this.getResolutionForZoom(a) > c) + for (var d = a | 0, e = b.length; d < e; ++d) + if (b[d] <= c) { + a = d; + break + } + return a + }, + moveTo: function(a, b, c) { + null != a && !(a instanceof OpenLayers.LonLat) && (a = new OpenLayers.LonLat(a)); + c || (c = {}); + null != b && (b = parseFloat(b), this.fractionalZoom || (b = Math.round(b))); + if (this.baseLayer.wrapDateLine) { + var d = b, + b = this.adjustZoom(b); + b !== d && (a = this.getCenter()) + } + var d = c.dragging || this.dragging, + e = c.forceZoomChange; + !this.getCachedCenter() && + !this.isValidLonLat(a) && (a = this.maxExtent.getCenterLonLat(), this.center = a.clone()); + if (null != this.restrictedExtent) { + null == a && (a = this.center); + null == b && (b = this.getZoom()); + var f = this.getResolutionForZoom(b), + f = this.calculateBounds(a, f); + if (!this.restrictedExtent.containsBounds(f)) { + var g = this.restrictedExtent.getCenterLonLat(); + f.getWidth() > this.restrictedExtent.getWidth() ? a = new OpenLayers.LonLat(g.lon, a.lat) : f.left < this.restrictedExtent.left ? a = a.add(this.restrictedExtent.left - f.left, 0) : f.right > this.restrictedExtent.right && + (a = a.add(this.restrictedExtent.right - f.right, 0)); + f.getHeight() > this.restrictedExtent.getHeight() ? a = new OpenLayers.LonLat(a.lon, g.lat) : f.bottom < this.restrictedExtent.bottom ? a = a.add(0, this.restrictedExtent.bottom - f.bottom) : f.top > this.restrictedExtent.top && (a = a.add(0, this.restrictedExtent.top - f.top)) + } + } + e = e || this.isValidZoomLevel(b) && b != this.getZoom(); + f = this.isValidLonLat(a) && !a.equals(this.center); + if (e || f || d) { + d || this.events.triggerEvent("movestart"); + f && (!e && this.center && this.centerLayerContainer(a), this.center = + a.clone()); + a = e ? this.getResolutionForZoom(b) : this.getResolution(); + if (e || null == this.layerContainerOrigin) { + this.layerContainerOrigin = this.getCachedCenter(); + this.layerContainerDiv.style.left = "0px"; + this.layerContainerDiv.style.top = "0px"; + var f = this.getMaxExtent({ + restricted: !0 + }), + h = f.getCenterLonLat(), + g = this.center.lon - h.lon, + h = h.lat - this.center.lat, + i = Math.round(f.getWidth() / a), + j = Math.round(f.getHeight() / a); + this.minPx = { + x: (this.size.w - i) / 2 - g / a, + y: (this.size.h - j) / 2 - h / a + }; + this.maxPx = { + x: this.minPx.x + Math.round(f.getWidth() / + a), + y: this.minPx.y + Math.round(f.getHeight() / a) + } + } + e && (this.zoom = b, this.resolution = a); + a = this.getExtent(); + this.baseLayer.visibility && (this.baseLayer.moveTo(a, e, c.dragging), c.dragging || this.baseLayer.events.triggerEvent("moveend", { + zoomChanged: e + })); + a = this.baseLayer.getExtent(); + for (b = this.layers.length - 1; 0 <= b; --b) + if (f = this.layers[b], f !== this.baseLayer && !f.isBaseLayer && (g = f.calculateInRange(), f.inRange != g && ((f.inRange = g) || f.display(!1), this.events.triggerEvent("changelayer", { + layer: f, + property: "visibility" + })), + g && f.visibility)) f.moveTo(a, e, c.dragging), c.dragging || f.events.triggerEvent("moveend", { + zoomChanged: e + }); + this.events.triggerEvent("move"); + d || this.events.triggerEvent("moveend"); + if (e) { + b = 0; + for (c = this.popups.length; b < c; b++) this.popups[b].updatePosition(); + this.events.triggerEvent("zoomend") + } + } + }, + centerLayerContainer: function(a) { + var b = this.getViewPortPxFromLonLat(this.layerContainerOrigin), + c = this.getViewPortPxFromLonLat(a); + if (null != b && null != c) { + var d = parseInt(this.layerContainerDiv.style.left), + a = parseInt(this.layerContainerDiv.style.top), + e = Math.round(b.x - c.x), + b = Math.round(b.y - c.y); + this.layerContainerDiv.style.left = e + "px"; + this.layerContainerDiv.style.top = b + "px"; + d -= e; + a -= b; + this.minPx.x -= d; + this.maxPx.x -= d; + this.minPx.y -= a; + this.maxPx.y -= a + } + }, + isValidZoomLevel: function(a) { + return null != a && 0 <= a && a < this.getNumZoomLevels() + }, + isValidLonLat: function(a) { + var b = !1; + null != a && (b = this.getMaxExtent(), b = b.containsLonLat(a, { + worldBounds: this.baseLayer.wrapDateLine && b + })); + return b + }, + getProjection: function() { + var a = this.getProjectionObject(); + return a ? a.getCode() : + null + }, + getProjectionObject: function() { + var a = null; + null != this.baseLayer && (a = this.baseLayer.projection); + return a + }, + getMaxResolution: function() { + var a = null; + null != this.baseLayer && (a = this.baseLayer.maxResolution); + return a + }, + getMaxExtent: function(a) { + var b = null; + a && a.restricted && this.restrictedExtent ? b = this.restrictedExtent : null != this.baseLayer && (b = this.baseLayer.maxExtent); + return b + }, + getNumZoomLevels: function() { + var a = null; + null != this.baseLayer && (a = this.baseLayer.numZoomLevels); + return a + }, + getExtent: function() { + var a = + null; + null != this.baseLayer && (a = this.baseLayer.getExtent()); + return a + }, + getResolution: function() { + var a = null; + null != this.baseLayer ? a = this.baseLayer.getResolution() : !0 === this.allOverlays && 0 < this.layers.length && (a = this.layers[0].getResolution()); + return a + }, + getUnits: function() { + var a = null; + null != this.baseLayer && (a = this.baseLayer.units); + return a + }, + getScale: function() { + var a = null; + null != this.baseLayer && (a = this.getResolution(), a = OpenLayers.Util.getScaleFromResolution(a, this.baseLayer.units)); + return a + }, + getZoomForExtent: function(a, + b) { + var c = null; + null != this.baseLayer && (c = this.baseLayer.getZoomForExtent(a, b)); + return c + }, + getResolutionForZoom: function(a) { + var b = null; + this.baseLayer && (b = this.baseLayer.getResolutionForZoom(a)); + return b + }, + getZoomForResolution: function(a, b) { + var c = null; + null != this.baseLayer && (c = this.baseLayer.getZoomForResolution(a, b)); + return c + }, + zoomTo: function(a) { + this.isValidZoomLevel(a) && this.setCenter(null, a) + }, + zoomIn: function() { + this.zoomTo(this.getZoom() + 1) + }, + zoomOut: function() { + this.zoomTo(this.getZoom() - 1) + }, + zoomToExtent: function(a, + b) { + a instanceof OpenLayers.Bounds || (a = new OpenLayers.Bounds(a)); + var c = a.getCenterLonLat(); + if (this.baseLayer.wrapDateLine) { + c = this.getMaxExtent(); + for (a = a.clone(); a.right < a.left;) a.right += c.getWidth(); + c = a.getCenterLonLat().wrapDateLine(c) + } + this.setCenter(c, this.getZoomForExtent(a, b)) + }, + zoomToMaxExtent: function(a) { + this.zoomToExtent(this.getMaxExtent({ + restricted: a ? a.restricted : !0 + })) + }, + zoomToScale: function(a, b) { + var c = OpenLayers.Util.getResolutionFromScale(a, this.baseLayer.units), + d = this.size.w * c / 2, + c = this.size.h * + c / 2, + e = this.getCachedCenter(); + this.zoomToExtent(new OpenLayers.Bounds(e.lon - d, e.lat - c, e.lon + d, e.lat + c), b) + }, + getLonLatFromViewPortPx: function(a) { + var b = null; + null != this.baseLayer && (b = this.baseLayer.getLonLatFromViewPortPx(a)); + return b + }, + getViewPortPxFromLonLat: function(a) { + var b = null; + null != this.baseLayer && (b = this.baseLayer.getViewPortPxFromLonLat(a)); + return b + }, + getLonLatFromPixel: function(a) { + return this.getLonLatFromViewPortPx(a) + }, + getPixelFromLonLat: function(a) { + a = this.getViewPortPxFromLonLat(a); + a.x = Math.round(a.x); + a.y = Math.round(a.y); + return a + }, + getGeodesicPixelSize: function(a) { + var b = a ? this.getLonLatFromPixel(a) : this.getCachedCenter() || new OpenLayers.LonLat(0, 0), + c = this.getResolution(), + a = b.add(-c / 2, 0), + d = b.add(c / 2, 0), + e = b.add(0, -c / 2), + b = b.add(0, c / 2), + c = new OpenLayers.Projection("EPSG:4326"), + f = this.getProjectionObject() || c; + f.equals(c) || (a.transform(f, c), d.transform(f, c), e.transform(f, c), b.transform(f, c)); + return new OpenLayers.Size(OpenLayers.Util.distVincenty(a, d), OpenLayers.Util.distVincenty(e, b)) + }, + getViewPortPxFromLayerPx: function(a) { + var b = + null; + if (null != a) var b = parseInt(this.layerContainerDiv.style.left), + c = parseInt(this.layerContainerDiv.style.top), + b = a.add(b, c); + return b + }, + getLayerPxFromViewPortPx: function(a) { + var b = null; + if (null != a) { + var b = -parseInt(this.layerContainerDiv.style.left), + c = -parseInt(this.layerContainerDiv.style.top), + b = a.add(b, c); + if (isNaN(b.x) || isNaN(b.y)) b = null + } + return b + }, + getLonLatFromLayerPx: function(a) { + a = this.getViewPortPxFromLayerPx(a); + return this.getLonLatFromViewPortPx(a) + }, + getLayerPxFromLonLat: function(a) { + return this.getLayerPxFromViewPortPx(this.getPixelFromLonLat(a)) + }, + CLASS_NAME: "OpenLayers.Map" +}); +OpenLayers.Map.TILE_WIDTH = 256; +OpenLayers.Map.TILE_HEIGHT = 256; +OpenLayers.Layer = OpenLayers.Class({ + id: null, + name: null, + div: null, + opacity: 1, + alwaysInRange: null, + RESOLUTION_PROPERTIES: "scales resolutions maxScale minScale maxResolution minResolution numZoomLevels maxZoomLevel".split(" "), + events: null, + map: null, + isBaseLayer: !1, + alpha: !1, + displayInLayerSwitcher: !0, + visibility: !0, + attribution: null, + inRange: !1, + imageSize: null, + options: null, + eventListeners: null, + gutter: 0, + projection: null, + units: null, + scales: null, + resolutions: null, + maxExtent: null, + minExtent: null, + maxResolution: null, + minResolution: null, + numZoomLevels: null, + minScale: null, + maxScale: null, + displayOutsideMaxExtent: !1, + wrapDateLine: !1, + metadata: null, + initialize: function(a, b) { + this.metadata = {}; + this.addOptions(b); + this.name = a; + if (null == this.id && (this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_"), this.div = OpenLayers.Util.createDiv(this.id), this.div.style.width = "100%", this.div.style.height = "100%", this.div.dir = "ltr", this.events = new OpenLayers.Events(this, this.div), this.eventListeners instanceof Object)) this.events.on(this.eventListeners) + }, + destroy: function(a) { + null == a && (a = !0); + null != this.map && this.map.removeLayer(this, a); + this.options = this.div = this.name = this.map = this.projection = null; + this.events && (this.eventListeners && this.events.un(this.eventListeners), this.events.destroy()); + this.events = this.eventListeners = null + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer(this.name, this.getOptions())); + OpenLayers.Util.applyDefaults(a, this); + a.map = null; + return a + }, + getOptions: function() { + var a = {}, + b; + for (b in this.options) a[b] = this[b]; + return a + }, + setName: function(a) { + a != + this.name && (this.name = a, null != this.map && this.map.events.triggerEvent("changelayer", { + layer: this, + property: "name" + })) + }, + addOptions: function(a, b) { + null == this.options && (this.options = {}); + if (a && ("string" == typeof a.projection && (a.projection = new OpenLayers.Projection(a.projection)), a.projection && OpenLayers.Util.applyDefaults(a, OpenLayers.Projection.defaults[a.projection.getCode()]), a.maxExtent && !(a.maxExtent instanceof OpenLayers.Bounds) && (a.maxExtent = new OpenLayers.Bounds(a.maxExtent)), a.minExtent && !(a.minExtent instanceof OpenLayers.Bounds))) a.minExtent = new OpenLayers.Bounds(a.minExtent); + OpenLayers.Util.extend(this.options, a); + OpenLayers.Util.extend(this, a); + this.projection && this.projection.getUnits() && (this.units = this.projection.getUnits()); + if (this.map) { + var c = this.map.getResolution(), + d = this.RESOLUTION_PROPERTIES.concat(["projection", "units", "minExtent", "maxExtent"]), + e; + for (e in a) + if (a.hasOwnProperty(e) && 0 <= OpenLayers.Util.indexOf(d, e)) { + this.initResolutions(); + b && this.map.baseLayer === this && (this.map.setCenter(this.map.getCenter(), + this.map.getZoomForResolution(c), !1, !0), this.map.events.triggerEvent("changebaselayer", { + layer: this + })); + break + } + } + }, + onMapResize: function() {}, + redraw: function() { + var a = !1; + if (this.map) { + this.inRange = this.calculateInRange(); + var b = this.getExtent(); + b && (this.inRange && this.visibility) && (this.moveTo(b, !0, !1), this.events.triggerEvent("moveend", { + zoomChanged: !0 + }), a = !0) + } + return a + }, + moveTo: function() { + var a = this.visibility; + this.isBaseLayer || (a = a && this.inRange); + this.display(a) + }, + moveByPx: function() {}, + setMap: function(a) { + null == + this.map && (this.map = a, this.maxExtent = this.maxExtent || this.map.maxExtent, this.minExtent = this.minExtent || this.map.minExtent, this.projection = this.projection || this.map.projection, "string" == typeof this.projection && (this.projection = new OpenLayers.Projection(this.projection)), this.units = this.projection.getUnits() || this.units || this.map.units, this.initResolutions(), this.isBaseLayer || (this.inRange = this.calculateInRange(), this.div.style.display = this.visibility && this.inRange ? "" : "none"), this.setTileSize()) + }, + afterAdd: function() {}, + removeMap: function() {}, + getImageSize: function() { + return this.imageSize || this.tileSize + }, + setTileSize: function(a) { + this.tileSize = a = a ? a : this.tileSize ? this.tileSize : this.map.getTileSize(); + this.gutter && (this.imageSize = new OpenLayers.Size(a.w + 2 * this.gutter, a.h + 2 * this.gutter)) + }, + getVisibility: function() { + return this.visibility + }, + setVisibility: function(a) { + a != this.visibility && (this.visibility = a, this.display(a), this.redraw(), null != this.map && this.map.events.triggerEvent("changelayer", { + layer: this, + property: "visibility" + }), + this.events.triggerEvent("visibilitychanged")) + }, + display: function(a) { + a != ("none" != this.div.style.display) && (this.div.style.display = a && this.calculateInRange() ? "block" : "none") + }, + calculateInRange: function() { + var a = !1; + this.alwaysInRange ? a = !0 : this.map && (a = this.map.getResolution(), a = a >= this.minResolution && a <= this.maxResolution); + return a + }, + setIsBaseLayer: function(a) { + a != this.isBaseLayer && (this.isBaseLayer = a, null != this.map && this.map.events.triggerEvent("changebaselayer", { + layer: this + })) + }, + initResolutions: function() { + var a, + b, c, d = {}, + e = !0; + a = 0; + for (b = this.RESOLUTION_PROPERTIES.length; a < b; a++) c = this.RESOLUTION_PROPERTIES[a], d[c] = this.options[c], e && this.options[c] && (e = !1); + null == this.alwaysInRange && (this.alwaysInRange = e); + null == d.resolutions && (d.resolutions = this.resolutionsFromScales(d.scales)); + null == d.resolutions && (d.resolutions = this.calculateResolutions(d)); + if (null == d.resolutions) { + a = 0; + for (b = this.RESOLUTION_PROPERTIES.length; a < b; a++) c = this.RESOLUTION_PROPERTIES[a], d[c] = null != this.options[c] ? this.options[c] : this.map[c]; + null == + d.resolutions && (d.resolutions = this.resolutionsFromScales(d.scales)); + null == d.resolutions && (d.resolutions = this.calculateResolutions(d)) + } + var f; + this.options.maxResolution && "auto" !== this.options.maxResolution && (f = this.options.maxResolution); + this.options.minScale && (f = OpenLayers.Util.getResolutionFromScale(this.options.minScale, this.units)); + var g; + this.options.minResolution && "auto" !== this.options.minResolution && (g = this.options.minResolution); + this.options.maxScale && (g = OpenLayers.Util.getResolutionFromScale(this.options.maxScale, + this.units)); + d.resolutions && (d.resolutions.sort(function(a, b) { + return b - a + }), f || (f = d.resolutions[0]), g || (g = d.resolutions[d.resolutions.length - 1])); + if (this.resolutions = d.resolutions) { + b = this.resolutions.length; + this.scales = Array(b); + for (a = 0; a < b; a++) this.scales[a] = OpenLayers.Util.getScaleFromResolution(this.resolutions[a], this.units); + this.numZoomLevels = b + } + if (this.minResolution = g) this.maxScale = OpenLayers.Util.getScaleFromResolution(g, this.units); + if (this.maxResolution = f) this.minScale = OpenLayers.Util.getScaleFromResolution(f, + this.units) + }, + resolutionsFromScales: function(a) { + if (null != a) { + var b, c, d; + d = a.length; + b = Array(d); + for (c = 0; c < d; c++) b[c] = OpenLayers.Util.getResolutionFromScale(a[c], this.units); + return b + } + }, + calculateResolutions: function(a) { + var b, c, d = a.maxResolution; + null != a.minScale ? d = OpenLayers.Util.getResolutionFromScale(a.minScale, this.units) : "auto" == d && null != this.maxExtent && (b = this.map.getSize(), c = this.maxExtent.getWidth() / b.w, b = this.maxExtent.getHeight() / b.h, d = Math.max(c, b)); + c = a.minResolution; + null != a.maxScale ? c = OpenLayers.Util.getResolutionFromScale(a.maxScale, + this.units) : "auto" == a.minResolution && null != this.minExtent && (b = this.map.getSize(), c = this.minExtent.getWidth() / b.w, b = this.minExtent.getHeight() / b.h, c = Math.max(c, b)); + "number" !== typeof d && ("number" !== typeof c && null != this.maxExtent) && (d = this.map.getTileSize(), d = Math.max(this.maxExtent.getWidth() / d.w, this.maxExtent.getHeight() / d.h)); + b = a.maxZoomLevel; + a = a.numZoomLevels; + "number" === typeof c && "number" === typeof d && void 0 === a ? a = Math.floor(Math.log(d / c) / Math.log(2)) + 1 : void 0 === a && null != b && (a = b + 1); + if (!("number" !== + typeof a || 0 >= a || "number" !== typeof d && "number" !== typeof c)) { + b = Array(a); + var e = 2; + "number" == typeof c && "number" == typeof d && (e = Math.pow(d / c, 1 / (a - 1))); + var f; + if ("number" === typeof d) + for (f = 0; f < a; f++) b[f] = d / Math.pow(e, f); + else + for (f = 0; f < a; f++) b[a - 1 - f] = c * Math.pow(e, f); + return b + } + }, + getResolution: function() { + return this.getResolutionForZoom(this.map.getZoom()) + }, + getExtent: function() { + return this.map.calculateBounds() + }, + getZoomForExtent: function(a, b) { + var c = this.map.getSize(); + return this.getZoomForResolution(Math.max(a.getWidth() / + c.w, a.getHeight() / c.h), b) + }, + getDataExtent: function() {}, + getResolutionForZoom: function(a) { + a = Math.max(0, Math.min(a, this.resolutions.length - 1)); + if (this.map.fractionalZoom) var b = Math.floor(a), + c = Math.ceil(a), + a = this.resolutions[b] - (a - b) * (this.resolutions[b] - this.resolutions[c]); + else a = this.resolutions[Math.round(a)]; + return a + }, + getZoomForResolution: function(a, b) { + var c, d; + if (this.map.fractionalZoom) { + var e = 0, + f = this.resolutions[e], + g = this.resolutions[this.resolutions.length - 1], + h; + c = 0; + for (d = this.resolutions.length; c < + d; ++c) + if (h = this.resolutions[c], h >= a && (f = h, e = c), h <= a) { + g = h; + break + } + c = f - g; + c = 0 < c ? e + (f - a) / c : e + } else { + f = Number.POSITIVE_INFINITY; + c = 0; + for (d = this.resolutions.length; c < d; c++) + if (b) { + e = Math.abs(this.resolutions[c] - a); + if (e > f) break; + f = e + } else if (this.resolutions[c] < a) break; + c = Math.max(0, c - 1) + } + return c + }, + getLonLatFromViewPortPx: function(a) { + var b = null, + c = this.map; + if (null != a && c.minPx) { + var b = c.getResolution(), + d = c.getMaxExtent({ + restricted: !0 + }), + b = new OpenLayers.LonLat( (a.x - c.minPx.x) * b + d.left, (c.minPx.y - a.y) * b + d.top); + + //MOD PER COORDINATE ASTRO - MOD ASTRO + step_x=-0.000888889; + step_y=0.000888889; + // b = new OpenLayers.LonLat( ((a.x - c.minPx.x) * b + d.left)*step_x, ((c.minPx.y - a.y) * b + d.top)*step_y); +/* + Coordinata1 = X*step + offset_X ; + Coordinata 2= Y*step + offset_Y + */ + this.wrapDateLine && + (b = b.wrapDateLine(this.maxExtent)) + } + + return b + }, + getViewPortPxFromLonLat: function(a, b) { + var c = null; + null != a && (b = b || this.map.getResolution(), c = this.map.calculateBounds(null, b), c = new OpenLayers.Pixel(1 / b * (a.lon - c.left), 1 / b * (c.top - a.lat))); + return c + }, + setOpacity: function(a) { + if (a != this.opacity) { + this.opacity = a; + for (var b = this.div.childNodes, c = 0, d = b.length; c < d; ++c) { + var e = b[c].firstChild || b[c], + f = b[c].lastChild; + f && "iframe" === f.nodeName.toLowerCase() && (e = f.parentNode); + OpenLayers.Util.modifyDOMElement(e, null, null, null, + null, null, null, a) + } + null != this.map && this.map.events.triggerEvent("changelayer", { + layer: this, + property: "opacity" + }) + } + }, + getZIndex: function() { + return this.div.style.zIndex + }, + setZIndex: function(a) { + this.div.style.zIndex = a + }, + adjustBounds: function(a) { + if (this.gutter) var b = this.gutter * this.map.getResolution(), + a = new OpenLayers.Bounds(a.left - b, a.bottom - b, a.right + b, a.top + b); + this.wrapDateLine && (b = { + rightTolerance: this.getResolution(), + leftTolerance: this.getResolution() + }, a = a.wrapDateLine(this.maxExtent, b)); + return a + }, + CLASS_NAME: "OpenLayers.Layer" +}); +OpenLayers.Layer.SphericalMercator = { + getExtent: function() { + var a = null; + return a = this.sphericalMercator ? this.map.calculateBounds() : OpenLayers.Layer.FixedZoomLevels.prototype.getExtent.apply(this) + }, + getLonLatFromViewPortPx: function(a) { + return OpenLayers.Layer.prototype.getLonLatFromViewPortPx.apply(this, arguments) + }, + getViewPortPxFromLonLat: function(a) { + return OpenLayers.Layer.prototype.getViewPortPxFromLonLat.apply(this, arguments) + }, + initMercatorParameters: function() { + this.RESOLUTIONS = []; + for (var a = 0; a <= this.MAX_ZOOM_LEVEL; ++a) this.RESOLUTIONS[a] = + 156543.03390625 / Math.pow(2, a); + this.units = "m"; + this.projection = this.projection || "EPSG:900913" + }, + forwardMercator: function() { + var a = new OpenLayers.Projection("EPSG:4326"), + b = new OpenLayers.Projection("EPSG:900913"); + return function(c, d) { + var e = OpenLayers.Projection.transform({ + x: c, + y: d + }, a, b); + return new OpenLayers.LonLat(e.x, e.y) + } + }(), + inverseMercator: function() { + var a = new OpenLayers.Projection("EPSG:4326"), + b = new OpenLayers.Projection("EPSG:900913"); + return function(c, d) { + var e = OpenLayers.Projection.transform({ + x: c, + y: d + }, b, a); + return new OpenLayers.LonLat(e.x, e.y) + } + }() +}; +OpenLayers.Layer.EventPane = OpenLayers.Class(OpenLayers.Layer, { + smoothDragPan: !0, + isBaseLayer: !0, + isFixed: !0, + pane: null, + mapObject: null, + initialize: function(a, b) { + OpenLayers.Layer.prototype.initialize.apply(this, arguments); + null == this.pane && (this.pane = OpenLayers.Util.createDiv(this.div.id + "_EventPane")) + }, + destroy: function() { + this.pane = this.mapObject = null; + OpenLayers.Layer.prototype.destroy.apply(this, arguments) + }, + setMap: function(a) { + OpenLayers.Layer.prototype.setMap.apply(this, arguments); + this.pane.style.zIndex = + parseInt(this.div.style.zIndex) + 1; + this.pane.style.display = this.div.style.display; + this.pane.style.width = "100%"; + this.pane.style.height = "100%"; + "msie" == OpenLayers.BROWSER_NAME && (this.pane.style.background = "url(" + OpenLayers.Util.getImageLocation("blank.gif") + ")"); + this.isFixed ? this.map.viewPortDiv.appendChild(this.pane) : this.map.layerContainerDiv.appendChild(this.pane); + this.loadMapObject(); + null == this.mapObject && this.loadWarningMessage() + }, + removeMap: function(a) { + this.pane && this.pane.parentNode && this.pane.parentNode.removeChild(this.pane); + OpenLayers.Layer.prototype.removeMap.apply(this, arguments) + }, + loadWarningMessage: function() { + this.div.style.backgroundColor = "darkblue"; + var a = this.map.getSize(), + b = Math.min(a.w, 300), + c = Math.min(a.h, 200), + b = new OpenLayers.Size(b, c), + a = (new OpenLayers.Pixel(a.w / 2, a.h / 2)).add(-b.w / 2, -b.h / 2), + a = OpenLayers.Util.createDiv(this.name + "_warning", a, b, null, null, null, "auto"); + a.style.padding = "7px"; + a.style.backgroundColor = "yellow"; + a.innerHTML = this.getWarningHTML(); + this.div.appendChild(a) + }, + getWarningHTML: function() { + return "" + }, + display: function(a) { + OpenLayers.Layer.prototype.display.apply(this, arguments); + this.pane.style.display = this.div.style.display + }, + setZIndex: function(a) { + OpenLayers.Layer.prototype.setZIndex.apply(this, arguments); + this.pane.style.zIndex = parseInt(this.div.style.zIndex) + 1 + }, + moveByPx: function(a, b) { + OpenLayers.Layer.prototype.moveByPx.apply(this, arguments); + this.dragPanMapObject ? this.dragPanMapObject(a, -b) : this.moveTo(this.map.getCachedCenter()) + }, + moveTo: function(a, b, c) { + OpenLayers.Layer.prototype.moveTo.apply(this, + arguments); + if (null != this.mapObject) { + var d = this.map.getCenter(), + e = this.map.getZoom(); + if (null != d) { + var f = this.getOLLonLatFromMapObjectLonLat(this.getMapObjectCenter()), + g = this.getOLZoomFromMapObjectZoom(this.getMapObjectZoom()); + if (!d.equals(f) || e != g) !b && f && this.dragPanMapObject && this.smoothDragPan ? (e = this.map.getViewPortPxFromLonLat(f), d = this.map.getViewPortPxFromLonLat(d), this.dragPanMapObject(d.x - e.x, e.y - d.y)) : (d = this.getMapObjectLonLatFromOLLonLat(d), e = this.getMapObjectZoomFromOLZoom(e), this.setMapObjectCenter(d, + e, c)) + } + } + }, + getLonLatFromViewPortPx: function(a) { + var b = null; + null != this.mapObject && null != this.getMapObjectCenter() && (b = this.getOLLonLatFromMapObjectLonLat(this.getMapObjectLonLatFromMapObjectPixel(this.getMapObjectPixelFromOLPixel(a)))); + return b + }, + getViewPortPxFromLonLat: function(a) { + var b = null; + null != this.mapObject && null != this.getMapObjectCenter() && (b = this.getOLPixelFromMapObjectPixel(this.getMapObjectPixelFromMapObjectLonLat(this.getMapObjectLonLatFromOLLonLat(a)))); + return b + }, + getOLLonLatFromMapObjectLonLat: function(a) { + var b = + null; + null != a && (b = this.getLongitudeFromMapObjectLonLat(a), a = this.getLatitudeFromMapObjectLonLat(a), b = new OpenLayers.LonLat(b, a)); + return b + }, + getMapObjectLonLatFromOLLonLat: function(a) { + var b = null; + null != a && (b = this.getMapObjectLonLatFromLonLat(a.lon, a.lat)); + return b + }, + getOLPixelFromMapObjectPixel: function(a) { + var b = null; + null != a && (b = this.getXFromMapObjectPixel(a), a = this.getYFromMapObjectPixel(a), b = new OpenLayers.Pixel(b, a)); + return b + }, + getMapObjectPixelFromOLPixel: function(a) { + var b = null; + null != a && (b = this.getMapObjectPixelFromXY(a.x, + a.y)); + return b + }, + CLASS_NAME: "OpenLayers.Layer.EventPane" +}); +OpenLayers.Layer.FixedZoomLevels = OpenLayers.Class({ + initialize: function() {}, + initResolutions: function() { + for (var a = ["minZoomLevel", "maxZoomLevel", "numZoomLevels"], b = 0, c = a.length; b < c; b++) { + var d = a[b]; + this[d] = null != this.options[d] ? this.options[d] : this.map[d] + } + if (null == this.minZoomLevel || this.minZoomLevel < this.MIN_ZOOM_LEVEL) this.minZoomLevel = this.MIN_ZOOM_LEVEL; + a = this.MAX_ZOOM_LEVEL - this.minZoomLevel + 1; + b = null == this.options.numZoomLevels && null != this.options.maxZoomLevel || null == this.numZoomLevels && null != this.maxZoomLevel ? + this.maxZoomLevel - this.minZoomLevel + 1 : this.numZoomLevels; + this.numZoomLevels = null != b ? Math.min(b, a) : a; + this.maxZoomLevel = this.minZoomLevel + this.numZoomLevels - 1; + if (null != this.RESOLUTIONS) { + a = 0; + this.resolutions = []; + for (b = this.minZoomLevel; b <= this.maxZoomLevel; b++) this.resolutions[a++] = this.RESOLUTIONS[b]; + this.maxResolution = this.resolutions[0]; + this.minResolution = this.resolutions[this.resolutions.length - 1] + } + }, + getResolution: function() { + if (null != this.resolutions) return OpenLayers.Layer.prototype.getResolution.apply(this, + arguments); + var a = null, + b = this.map.getSize(), + c = this.getExtent(); + null != b && null != c && (a = Math.max(c.getWidth() / b.w, c.getHeight() / b.h)); + return a + }, + getExtent: function() { + var a = this.map.getSize(), + b = this.getLonLatFromViewPortPx({ + x: 0, + y: 0 + }), + a = this.getLonLatFromViewPortPx({ + x: a.w, + y: a.h + }); + return null != b && null != a ? new OpenLayers.Bounds(b.lon, a.lat, a.lon, b.lat) : null + }, + getZoomForResolution: function(a) { + return null != this.resolutions ? OpenLayers.Layer.prototype.getZoomForResolution.apply(this, arguments) : this.getZoomForExtent(OpenLayers.Layer.prototype.getExtent.apply(this, [])) + }, + getOLZoomFromMapObjectZoom: function(a) { + var b = null; + null != a && (b = a - this.minZoomLevel, this.map.baseLayer !== this && (b = this.map.baseLayer.getZoomForResolution(this.getResolutionForZoom(b)))); + return b + }, + getMapObjectZoomFromOLZoom: function(a) { + var b = null; + null != a && (b = a + this.minZoomLevel, this.map.baseLayer !== this && (b = this.getZoomForResolution(this.map.baseLayer.getResolutionForZoom(b)))); + return b + }, + CLASS_NAME: "OpenLayers.Layer.FixedZoomLevels" +}); +OpenLayers.Layer.Google = OpenLayers.Class(OpenLayers.Layer.EventPane, OpenLayers.Layer.FixedZoomLevels, { + MIN_ZOOM_LEVEL: 0, + MAX_ZOOM_LEVEL: 21, + RESOLUTIONS: [1.40625, 0.703125, 0.3515625, 0.17578125, 0.087890625, 0.0439453125, 0.02197265625, 0.010986328125, 0.0054931640625, 0.00274658203125, 0.001373291015625, 6.866455078125E-4, 3.4332275390625E-4, 1.71661376953125E-4, 8.58306884765625E-5, 4.291534423828125E-5, 2.145767211914062E-5, 1.072883605957031E-5, 5.36441802978515E-6, 2.68220901489257E-6, 1.341104507446289E-6, 6.705522537231445E-7], + type: null, + wrapDateLine: !0, + sphericalMercator: !1, + version: null, + initialize: function(a, b) { + b = b || {}; + b.version || (b.version = "function" === typeof GMap2 ? "2" : "3"); + var c = OpenLayers.Layer.Google["v" + b.version.replace(/\./g, "_")]; + if (c) OpenLayers.Util.applyDefaults(b, c); + else throw "Unsupported Google Maps API version: " + b.version; + OpenLayers.Util.applyDefaults(b, c.DEFAULTS); + b.maxExtent && (b.maxExtent = b.maxExtent.clone()); + OpenLayers.Layer.EventPane.prototype.initialize.apply(this, [a, b]); + OpenLayers.Layer.FixedZoomLevels.prototype.initialize.apply(this, [a, b]); + this.sphericalMercator && (OpenLayers.Util.extend(this, OpenLayers.Layer.SphericalMercator), this.initMercatorParameters()) + }, + clone: function() { + return new OpenLayers.Layer.Google(this.name, this.getOptions()) + }, + setVisibility: function(a) { + var b = null == this.opacity ? 1 : this.opacity; + OpenLayers.Layer.EventPane.prototype.setVisibility.apply(this, arguments); + this.setOpacity(b) + }, + display: function(a) { + this._dragging || this.setGMapVisibility(a); + OpenLayers.Layer.EventPane.prototype.display.apply(this, arguments) + }, + moveTo: function(a, + b, c) { + this._dragging = c; + OpenLayers.Layer.EventPane.prototype.moveTo.apply(this, arguments); + delete this._dragging + }, + setOpacity: function(a) { + a !== this.opacity && (null != this.map && this.map.events.triggerEvent("changelayer", { + layer: this, + property: "opacity" + }), this.opacity = a); + if (this.getVisibility()) { + var b = this.getMapContainer(); + OpenLayers.Util.modifyDOMElement(b, null, null, null, null, null, null, a) + } + }, + destroy: function() { + if (this.map) { + this.setGMapVisibility(!1); + var a = OpenLayers.Layer.Google.cache[this.map.id]; + a && 1 >= a.count && + this.removeGMapElements() + } + OpenLayers.Layer.EventPane.prototype.destroy.apply(this, arguments) + }, + removeGMapElements: function() { + var a = OpenLayers.Layer.Google.cache[this.map.id]; + if (a) { + var b = this.mapObject && this.getMapContainer(); + b && b.parentNode && b.parentNode.removeChild(b); + (b = a.termsOfUse) && b.parentNode && b.parentNode.removeChild(b); + (a = a.poweredBy) && a.parentNode && a.parentNode.removeChild(a) + } + }, + removeMap: function(a) { + this.visibility && this.mapObject && this.setGMapVisibility(!1); + var b = OpenLayers.Layer.Google.cache[a.id]; + b && (1 >= b.count ? (this.removeGMapElements(), delete OpenLayers.Layer.Google.cache[a.id]) : --b.count); + delete this.termsOfUse; + delete this.poweredBy; + delete this.mapObject; + delete this.dragObject; + OpenLayers.Layer.EventPane.prototype.removeMap.apply(this, arguments) + }, + getOLBoundsFromMapObjectBounds: function(a) { + var b = null; + null != a && (b = a.getSouthWest(), a = a.getNorthEast(), this.sphericalMercator ? (b = this.forwardMercator(b.lng(), b.lat()), a = this.forwardMercator(a.lng(), a.lat())) : (b = new OpenLayers.LonLat(b.lng(), b.lat()), + a = new OpenLayers.LonLat(a.lng(), a.lat())), b = new OpenLayers.Bounds(b.lon, b.lat, a.lon, a.lat)); + return b + }, + getWarningHTML: function() { + return OpenLayers.i18n("googleWarning") + }, + getMapObjectCenter: function() { + return this.mapObject.getCenter() + }, + getMapObjectZoom: function() { + return this.mapObject.getZoom() + }, + getLongitudeFromMapObjectLonLat: function(a) { + return this.sphericalMercator ? this.forwardMercator(a.lng(), a.lat()).lon : a.lng() + }, + getLatitudeFromMapObjectLonLat: function(a) { + return this.sphericalMercator ? this.forwardMercator(a.lng(), + a.lat()).lat : a.lat() + }, + getXFromMapObjectPixel: function(a) { + return a.x + }, + getYFromMapObjectPixel: function(a) { + return a.y + }, + CLASS_NAME: "OpenLayers.Layer.Google" +}); +OpenLayers.Layer.Google.cache = {}; +OpenLayers.Layer.Google.v2 = { + termsOfUse: null, + poweredBy: null, + dragObject: null, + loadMapObject: function() { + this.type || (this.type = G_NORMAL_MAP); + var a, b, c, d = OpenLayers.Layer.Google.cache[this.map.id]; + if (d) a = d.mapObject, b = d.termsOfUse, c = d.poweredBy, ++d.count; + else { + var d = this.map.viewPortDiv, + e = document.createElement("div"); + e.id = this.map.id + "_GMap2Container"; + e.style.position = "absolute"; + e.style.width = "100%"; + e.style.height = "100%"; + d.appendChild(e); + try { + a = new GMap2(e), b = e.lastChild, d.appendChild(b), b.style.zIndex = + "1100", b.style.right = "", b.style.bottom = "", b.className = "olLayerGoogleCopyright", c = e.lastChild, d.appendChild(c), c.style.zIndex = "1100", c.style.right = "", c.style.bottom = "", c.className = "olLayerGooglePoweredBy gmnoprint" + } catch (f) { + throw f; + } + OpenLayers.Layer.Google.cache[this.map.id] = { + mapObject: a, + termsOfUse: b, + poweredBy: c, + count: 1 + } + } + this.mapObject = a; + this.termsOfUse = b; + this.poweredBy = c; - 1 === OpenLayers.Util.indexOf(this.mapObject.getMapTypes(), this.type) && this.mapObject.addMapType(this.type); + "function" == typeof a.getDragObject ? + this.dragObject = a.getDragObject() : this.dragPanMapObject = null; + !1 === this.isBaseLayer && this.setGMapVisibility("none" !== this.div.style.display) + }, + onMapResize: function() { + if (this.visibility && this.mapObject.isLoaded()) this.mapObject.checkResize(); + else { + if (!this._resized) var a = this, + b = GEvent.addListener(this.mapObject, "load", function() { + GEvent.removeListener(b); + delete a._resized; + a.mapObject.checkResize(); + a.moveTo(a.map.getCenter(), a.map.getZoom()) + }); + this._resized = !0 + } + }, + setGMapVisibility: function(a) { + var b = OpenLayers.Layer.Google.cache[this.map.id]; + if (b) { + var c = this.mapObject.getContainer(); + !0 === a ? (this.mapObject.setMapType(this.type), c.style.display = "", this.termsOfUse.style.left = "", this.termsOfUse.style.display = "", this.poweredBy.style.display = "", b.displayed = this.id) : (b.displayed === this.id && delete b.displayed, b.displayed || (c.style.display = "none", this.termsOfUse.style.display = "none", this.termsOfUse.style.left = "-9999px", this.poweredBy.style.display = "none")) + } + }, + getMapContainer: function() { + return this.mapObject.getContainer() + }, + getMapObjectBoundsFromOLBounds: function(a) { + var b = + null; + null != a && (b = this.sphericalMercator ? this.inverseMercator(a.bottom, a.left) : new OpenLayers.LonLat(a.bottom, a.left), a = this.sphericalMercator ? this.inverseMercator(a.top, a.right) : new OpenLayers.LonLat(a.top, a.right), b = new GLatLngBounds(new GLatLng(b.lat, b.lon), new GLatLng(a.lat, a.lon))); + return b + }, + setMapObjectCenter: function(a, b) { + this.mapObject.setCenter(a, b) + }, + dragPanMapObject: function(a, b) { + this.dragObject.moveBy(new GSize(-a, b)) + }, + getMapObjectLonLatFromMapObjectPixel: function(a) { + return this.mapObject.fromContainerPixelToLatLng(a) + }, + getMapObjectPixelFromMapObjectLonLat: function(a) { + return this.mapObject.fromLatLngToContainerPixel(a) + }, + getMapObjectZoomFromMapObjectBounds: function(a) { + return this.mapObject.getBoundsZoomLevel(a) + }, + getMapObjectLonLatFromLonLat: function(a, b) { + var c; + this.sphericalMercator ? (c = this.inverseMercator(a, b), c = new GLatLng(c.lat, c.lon)) : c = new GLatLng(b, a); + return c + }, + getMapObjectPixelFromXY: function(a, b) { + return new GPoint(a, b) + } +}; +OpenLayers.Format.XML = OpenLayers.Class(OpenLayers.Format, { + namespaces: null, + namespaceAlias: null, + defaultPrefix: null, + readers: {}, + writers: {}, + xmldom: null, + initialize: function(a) { + window.ActiveXObject && (this.xmldom = new ActiveXObject("Microsoft.XMLDOM")); + OpenLayers.Format.prototype.initialize.apply(this, [a]); + this.namespaces = OpenLayers.Util.extend({}, this.namespaces); + this.namespaceAlias = {}; + for (var b in this.namespaces) this.namespaceAlias[this.namespaces[b]] = b + }, + destroy: function() { + this.xmldom = null; + OpenLayers.Format.prototype.destroy.apply(this, + arguments) + }, + setNamespace: function(a, b) { + this.namespaces[a] = b; + this.namespaceAlias[b] = a + }, + read: function(a) { + var b = a.indexOf("<"); + 0 < b && (a = a.substring(b)); + b = OpenLayers.Util.Try(OpenLayers.Function.bind(function() { + var b; + b = window.ActiveXObject && !this.xmldom ? new ActiveXObject("Microsoft.XMLDOM") : this.xmldom; + b.loadXML(a); + return b + }, this), function() { + return (new DOMParser).parseFromString(a, "text/xml") + }, function() { + var b = new XMLHttpRequest; + b.open("GET", "data:text/xml;charset=utf-8," + encodeURIComponent(a), !1); + b.overrideMimeType && + b.overrideMimeType("text/xml"); + b.send(null); + return b.responseXML + }); + this.keepData && (this.data = b); + return b + }, + write: function(a) { + if (this.xmldom) a = a.xml; + else { + var b = new XMLSerializer; + if (1 == a.nodeType) { + var c = document.implementation.createDocument("", "", null); + c.importNode && (a = c.importNode(a, !0)); + c.appendChild(a); + a = b.serializeToString(c) + } else a = b.serializeToString(a) + } + return a + }, + createElementNS: function(a, b) { + return this.xmldom ? "string" == typeof a ? this.xmldom.createNode(1, b, a) : this.xmldom.createNode(1, b, "") : document.createElementNS(a, + b) + }, + createTextNode: function(a) { + "string" !== typeof a && (a = "" + a); + return this.xmldom ? this.xmldom.createTextNode(a) : document.createTextNode(a) + }, + getElementsByTagNameNS: function(a, b, c) { + var d = []; + if (a.getElementsByTagNameNS) d = a.getElementsByTagNameNS(b, c); + else + for (var a = a.getElementsByTagName("*"), e, f, g = 0, h = a.length; g < h; ++g) + if (e = a[g], f = e.prefix ? e.prefix + ":" + c : c, "*" == c || f == e.nodeName)("*" == b || b == e.namespaceURI) && d.push(e); return d + }, + getAttributeNodeNS: function(a, b, c) { + var d = null; + if (a.getAttributeNodeNS) d = a.getAttributeNodeNS(b, + c); + else + for (var a = a.attributes, e, f, g = 0, h = a.length; g < h; ++g) + if (e = a[g], e.namespaceURI == b && (f = e.prefix ? e.prefix + ":" + c : c, f == e.nodeName)) { + d = e; + break + } return d + }, + getAttributeNS: function(a, b, c) { + var d = ""; + if (a.getAttributeNS) d = a.getAttributeNS(b, c) || ""; + else if (a = this.getAttributeNodeNS(a, b, c)) d = a.nodeValue; + return d + }, + getChildValue: function(a, b) { + var c = b || ""; + if (a) + for (var d = a.firstChild; d; d = d.nextSibling) switch (d.nodeType) { + case 3: + case 4: + c += d.nodeValue + } + return c + }, + isSimpleContent: function(a) { + for (var b = !0, a = a.firstChild; a; a = + a.nextSibling) + if (1 === a.nodeType) { + b = !1; + break + } + return b + }, + contentType: function(a) { + for (var b = !1, c = !1, d = OpenLayers.Format.XML.CONTENT_TYPE.EMPTY, a = a.firstChild; a; a = a.nextSibling) { + switch (a.nodeType) { + case 1: + c = !0; + break; + case 8: + break; + default: + b = !0 + } + if (c && b) break + } + if (c && b) d = OpenLayers.Format.XML.CONTENT_TYPE.MIXED; + else { + if (c) return OpenLayers.Format.XML.CONTENT_TYPE.COMPLEX; + if (b) return OpenLayers.Format.XML.CONTENT_TYPE.SIMPLE + } + return d + }, + hasAttributeNS: function(a, b, c) { + var d = !1; + return d = a.hasAttributeNS ? a.hasAttributeNS(b, + c) : !!this.getAttributeNodeNS(a, b, c) + }, + setAttributeNS: function(a, b, c, d) { + if (a.setAttributeNS) a.setAttributeNS(b, c, d); + else if (this.xmldom) b ? (b = a.ownerDocument.createNode(2, c, b), b.nodeValue = d, a.setAttributeNode(b)) : a.setAttribute(c, d); + else throw "setAttributeNS not implemented"; + }, + createElementNSPlus: function(a, b) { + var b = b || {}, + c = b.uri || this.namespaces[b.prefix]; + c || (c = a.indexOf(":"), c = this.namespaces[a.substring(0, c)]); + c || (c = this.namespaces[this.defaultPrefix]); + c = this.createElementNS(c, a); + b.attributes && this.setAttributes(c, + b.attributes); + var d = b.value; + null != d && c.appendChild(this.createTextNode(d)); + return c + }, + setAttributes: function(a, b) { + var c, d, e; + for (e in b) null != b[e] && b[e].toString && (c = b[e].toString(), d = this.namespaces[e.substring(0, e.indexOf(":"))] || null, this.setAttributeNS(a, d, e, c)) + }, + readNode: function(a, b) { + b || (b = {}); + var c = this.readers[a.namespaceURI ? this.namespaceAlias[a.namespaceURI] : this.defaultPrefix]; + if (c) { + var d = a.localName || a.nodeName.split(":").pop(); + (c = c[d] || c["*"]) && c.apply(this, [a, b]) + } + return b + }, + readChildNodes: function(a, + b) { + b || (b = {}); + for (var c = a.childNodes, d, e = 0, f = c.length; e < f; ++e) d = c[e], 1 == d.nodeType && this.readNode(d, b); + return b + }, + writeNode: function(a, b, c) { + var d, e = a.indexOf(":"); + 0 < e ? (d = a.substring(0, e), a = a.substring(e + 1)) : d = c ? this.namespaceAlias[c.namespaceURI] : this.defaultPrefix; + b = this.writers[d][a].apply(this, [b]); + c && c.appendChild(b); + return b + }, + getChildEl: function(a, b, c) { + return a && this.getThisOrNextEl(a.firstChild, b, c) + }, + getNextEl: function(a, b, c) { + return a && this.getThisOrNextEl(a.nextSibling, b, c) + }, + getThisOrNextEl: function(a, + b, c) { + a: for (; a; a = a.nextSibling) switch (a.nodeType) { + case 1: + if ((!b || b === (a.localName || a.nodeName.split(":").pop())) && (!c || c === a.namespaceURI)) break a; + a = null; + break a; + case 3: + if (/^\s*$/.test(a.nodeValue)) break; + case 4: + case 6: + case 12: + case 10: + case 11: + a = null; + break a + } + return a || null + }, + lookupNamespaceURI: function(a, b) { + var c = null; + if (a) + if (a.lookupNamespaceURI) c = a.lookupNamespaceURI(b); + else a: switch (a.nodeType) { + case 1: + if (null !== a.namespaceURI && a.prefix === b) { + c = a.namespaceURI; + break a + } + if (c = a.attributes.length) + for (var d, + e = 0; e < c; ++e) + if (d = a.attributes[e], "xmlns" === d.prefix && d.name === "xmlns:" + b) { + c = d.value || null; + break a + } else if ("xmlns" === d.name && null === b) { + c = d.value || null; + break a + } + c = this.lookupNamespaceURI(a.parentNode, b); + break a; + case 2: + c = this.lookupNamespaceURI(a.ownerElement, b); + break a; + case 9: + c = this.lookupNamespaceURI(a.documentElement, b); + break a; + case 6: + case 12: + case 10: + case 11: + break a; + default: + c = this.lookupNamespaceURI(a.parentNode, b) + } + return c + }, + getXMLDoc: function() { + !OpenLayers.Format.XML.document && !this.xmldom && (document.implementation && + document.implementation.createDocument ? OpenLayers.Format.XML.document = document.implementation.createDocument("", "", null) : !this.xmldom && window.ActiveXObject && (this.xmldom = new ActiveXObject("Microsoft.XMLDOM"))); + return OpenLayers.Format.XML.document || this.xmldom + }, + CLASS_NAME: "OpenLayers.Format.XML" +}); +OpenLayers.Format.XML.CONTENT_TYPE = { + EMPTY: 0, + SIMPLE: 1, + COMPLEX: 2, + MIXED: 3 +}; +OpenLayers.Format.XML.lookupNamespaceURI = OpenLayers.Function.bind(OpenLayers.Format.XML.prototype.lookupNamespaceURI, OpenLayers.Format.XML.prototype); +OpenLayers.Format.XML.document = null; +OpenLayers.Format.WFST = function(a) { + var a = OpenLayers.Util.applyDefaults(a, OpenLayers.Format.WFST.DEFAULTS), + b = OpenLayers.Format.WFST["v" + a.version.replace(/\./g, "_")]; + if (!b) throw "Unsupported WFST version: " + a.version; + return new b(a) +}; +OpenLayers.Format.WFST.DEFAULTS = { + version: "1.0.0" +}; +OpenLayers.Format.WFST.v1 = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + xlink: "http://www.w3.org/1999/xlink", + xsi: "http://www.w3.org/2001/XMLSchema-instance", + wfs: "http://www.opengis.net/wfs", + gml: "http://www.opengis.net/gml", + ogc: "http://www.opengis.net/ogc", + ows: "http://www.opengis.net/ows" + }, + defaultPrefix: "wfs", + version: null, + schemaLocations: null, + srsName: null, + extractAttributes: !0, + xy: !0, + stateName: null, + initialize: function(a) { + this.stateName = {}; + this.stateName[OpenLayers.State.INSERT] = "wfs:Insert"; + this.stateName[OpenLayers.State.UPDATE] = + "wfs:Update"; + this.stateName[OpenLayers.State.DELETE] = "wfs:Delete"; + OpenLayers.Format.XML.prototype.initialize.apply(this, [a]) + }, + getSrsName: function(a, b) { + var c = b && b.srsName; + c || (c = a && a.layer ? a.layer.projection.getCode() : this.srsName); + return c + }, + read: function(a, b) { + b = b || {}; + OpenLayers.Util.applyDefaults(b, { + output: "features" + }); + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + a && 9 == a.nodeType && (a = a.documentElement); + var c = {}; + a && this.readNode(a, c, !0); + c.features && "features" === b.output && + (c = c.features); + return c + }, + readers: { + wfs: { + FeatureCollection: function(a, b) { + b.features = []; + this.readChildNodes(a, b) + } + } + }, + write: function(a, b) { + var c = this.writeNode("wfs:Transaction", { + features: a, + options: b + }), + d = this.schemaLocationAttr(); + d && this.setAttributeNS(c, this.namespaces.xsi, "xsi:schemaLocation", d); + return OpenLayers.Format.XML.prototype.write.apply(this, [c]) + }, + writers: { + wfs: { + GetFeature: function(a) { + var b = this.createElementNSPlus("wfs:GetFeature", { + attributes: { + service: "WFS", + version: this.version, + handle: a && a.handle, + outputFormat: a && a.outputFormat, + maxFeatures: a && a.maxFeatures, + "xsi:schemaLocation": this.schemaLocationAttr(a) + } + }); + if ("string" == typeof this.featureType) this.writeNode("Query", a, b); + else + for (var c = 0, d = this.featureType.length; c < d; c++) a.featureType = this.featureType[c], this.writeNode("Query", a, b); + return b + }, + Transaction: function(a) { + var a = a || {}, + b = a.options || {}, + c = this.createElementNSPlus("wfs:Transaction", { + attributes: { + service: "WFS", + version: this.version, + handle: b.handle + } + }), + d, e = a.features; + if (e) { + !0 === b.multi && OpenLayers.Util.extend(this.geometryTypes, { + "OpenLayers.Geometry.Point": "MultiPoint", + "OpenLayers.Geometry.LineString": !0 === this.multiCurve ? "MultiCurve" : "MultiLineString", + "OpenLayers.Geometry.Polygon": !0 === this.multiSurface ? "MultiSurface" : "MultiPolygon" + }); + var f, g, a = 0; + for (d = e.length; a < d; ++a) g = e[a], (f = this.stateName[g.state]) && this.writeNode(f, { + feature: g, + options: b + }, c); + !0 === b.multi && this.setGeometryTypes() + } + if (b.nativeElements) { + a = 0; + for (d = b.nativeElements.length; a < d; ++a) this.writeNode("wfs:Native", b.nativeElements[a], c) + } + return c + }, + Native: function(a) { + return this.createElementNSPlus("wfs:Native", { + attributes: { + vendorId: a.vendorId, + safeToIgnore: a.safeToIgnore + }, + value: a.value + }) + }, + Insert: function(a) { + var b = a.feature, + a = a.options, + a = this.createElementNSPlus("wfs:Insert", { + attributes: { + handle: a && a.handle + } + }); + this.srsName = this.getSrsName(b); + this.writeNode("feature:_typeName", b, a); + return a + }, + Update: function(a) { + var b = a.feature, + a = a.options, + a = this.createElementNSPlus("wfs:Update", { + attributes: { + handle: a && a.handle, + typeName: (this.featureNS ? this.featurePrefix + ":" : "") + this.featureType + } + }); + this.featureNS && a.setAttribute("xmlns:" + + this.featurePrefix, this.featureNS); + var c = b.modified; + if (null !== this.geometryName && (!c || void 0 !== c.geometry)) this.srsName = this.getSrsName(b), this.writeNode("Property", { + name: this.geometryName, + value: b.geometry + }, a); + for (var d in b.attributes) void 0 !== b.attributes[d] && (!c || !c.attributes || c.attributes && void 0 !== c.attributes[d]) && this.writeNode("Property", { + name: d, + value: b.attributes[d] + }, a); + this.writeNode("ogc:Filter", new OpenLayers.Filter.FeatureId({ + fids: [b.fid] + }), a); + return a + }, + Property: function(a) { + var b = this.createElementNSPlus("wfs:Property"); + this.writeNode("Name", a.name, b); + null !== a.value && this.writeNode("Value", a.value, b); + return b + }, + Name: function(a) { + return this.createElementNSPlus("wfs:Name", { + value: a + }) + }, + Value: function(a) { + var b; + a instanceof OpenLayers.Geometry ? (b = this.createElementNSPlus("wfs:Value"), a = this.writeNode("feature:_geometry", a).firstChild, b.appendChild(a)) : b = this.createElementNSPlus("wfs:Value", { + value: a + }); + return b + }, + Delete: function(a) { + var b = a.feature, + a = a.options, + a = this.createElementNSPlus("wfs:Delete", { + attributes: { + handle: a && + a.handle, + typeName: (this.featureNS ? this.featurePrefix + ":" : "") + this.featureType + } + }); + this.featureNS && a.setAttribute("xmlns:" + this.featurePrefix, this.featureNS); + this.writeNode("ogc:Filter", new OpenLayers.Filter.FeatureId({ + fids: [b.fid] + }), a); + return a + } + } + }, + schemaLocationAttr: function(a) { + var a = OpenLayers.Util.extend({ + featurePrefix: this.featurePrefix, + schema: this.schema + }, a), + b = OpenLayers.Util.extend({}, this.schemaLocations); + a.schema && (b[a.featurePrefix] = a.schema); + var a = [], + c, d; + for (d in b)(c = this.namespaces[d]) && + a.push(c + " " + b[d]); + return a.join(" ") || void 0 + }, + setFilterProperty: function(a) { + if (a.filters) + for (var b = 0, c = a.filters.length; b < c; ++b) OpenLayers.Format.WFST.v1.prototype.setFilterProperty.call(this, a.filters[b]); + else a instanceof OpenLayers.Filter.Spatial && !a.property && (a.property = this.geometryName) + }, + CLASS_NAME: "OpenLayers.Format.WFST.v1" +}); +OpenLayers.Format.OGCExceptionReport = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + ogc: "http://www.opengis.net/ogc" + }, + regExes: { + trimSpace: /^\s*|\s*$/g, + removeSpace: /\s*/g, + splitSpace: /\s+/, + trimComma: /\s*,\s*/g + }, + defaultPrefix: "ogc", + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + var b = { + exceptionReport: null + }; + a.documentElement && (this.readChildNodes(a, b), null === b.exceptionReport && (b = (new OpenLayers.Format.OWSCommon).read(a))); + return b + }, + readers: { + ogc: { + ServiceExceptionReport: function(a, + b) { + b.exceptionReport = { + exceptions: [] + }; + this.readChildNodes(a, b.exceptionReport) + }, + ServiceException: function(a, b) { + var c = { + code: a.getAttribute("code"), + locator: a.getAttribute("locator"), + text: this.getChildValue(a) + }; + b.exceptions.push(c) + } + } + }, + CLASS_NAME: "OpenLayers.Format.OGCExceptionReport" +}); +OpenLayers.Format.XML.VersionedOGC = OpenLayers.Class(OpenLayers.Format.XML, { + defaultVersion: null, + version: null, + profile: null, + errorProperty: null, + name: null, + stringifyOutput: !1, + parser: null, + initialize: function(a) { + OpenLayers.Format.XML.prototype.initialize.apply(this, [a]); + a = this.CLASS_NAME; + this.name = a.substring(a.lastIndexOf(".") + 1) + }, + getVersion: function(a, b) { + var c; + a ? (c = this.version, c || (c = a.getAttribute("version"), c || (c = this.defaultVersion))) : c = b && b.version || this.version || this.defaultVersion; + return c + }, + getParser: function(a) { + var a = + a || this.defaultVersion, + b = this.profile ? "_" + this.profile : ""; + if (!this.parser || this.parser.VERSION != a) { + var c = OpenLayers.Format[this.name]["v" + a.replace(/\./g, "_") + b]; + if (!c) throw "Can't find a " + this.name + " parser for version " + a + b; + this.parser = new c(this.options) + } + return this.parser + }, + write: function(a, b) { + this.parser = this.getParser(this.getVersion(null, b)); + var c = this.parser.write(a, b); + return !1 === this.stringifyOutput ? c : OpenLayers.Format.XML.prototype.write.apply(this, [c]) + }, + read: function(a, b) { + "string" == typeof a && + (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + var c = this.getVersion(a.documentElement); + this.parser = this.getParser(c); + var d = this.parser.read(a, b); + if (null !== this.errorProperty && void 0 === d[this.errorProperty]) { + var e = new OpenLayers.Format.OGCExceptionReport; + d.error = e.read(a) + } + d.version = c; + return d + }, + CLASS_NAME: "OpenLayers.Format.XML.VersionedOGC" +}); +OpenLayers.Feature = OpenLayers.Class({ + layer: null, + id: null, + lonlat: null, + data: null, + marker: null, + popupClass: null, + popup: null, + initialize: function(a, b, c) { + this.layer = a; + this.lonlat = b; + this.data = null != c ? c : {}; + this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_") + }, + destroy: function() { + null != this.layer && null != this.layer.map && null != this.popup && this.layer.map.removePopup(this.popup); + null != this.layer && null != this.marker && this.layer.removeMarker(this.marker); + this.data = this.lonlat = this.id = this.layer = null; + null != this.marker && + (this.destroyMarker(this.marker), this.marker = null); + null != this.popup && (this.destroyPopup(this.popup), this.popup = null) + }, + onScreen: function() { + var a = !1; + null != this.layer && null != this.layer.map && (a = this.layer.map.getExtent().containsLonLat(this.lonlat)); + return a + }, + createMarker: function() { + null != this.lonlat && (this.marker = new OpenLayers.Marker(this.lonlat, this.data.icon)); + return this.marker + }, + destroyMarker: function() { + this.marker.destroy() + }, + createPopup: function(a) { + null != this.lonlat && (this.popup || (this.popup = new(this.popupClass ? + this.popupClass : OpenLayers.Popup.Anchored)(this.id + "_popup", this.lonlat, this.data.popupSize, this.data.popupContentHTML, this.marker ? this.marker.icon : null, a)), null != this.data.overflow && (this.popup.contentDiv.style.overflow = this.data.overflow), this.popup.feature = this); + return this.popup + }, + destroyPopup: function() { + this.popup && (this.popup.feature = null, this.popup.destroy(), this.popup = null) + }, + CLASS_NAME: "OpenLayers.Feature" +}); +OpenLayers.State = { + UNKNOWN: "Unknown", + INSERT: "Insert", + UPDATE: "Update", + DELETE: "Delete" +}; +OpenLayers.Feature.Vector = OpenLayers.Class(OpenLayers.Feature, { + fid: null, + geometry: null, + attributes: null, + bounds: null, + state: null, + style: null, + url: null, + renderIntent: "default", + modified: null, + initialize: function(a, b, c) { + OpenLayers.Feature.prototype.initialize.apply(this, [null, null, b]); + this.lonlat = null; + this.geometry = a ? a : null; + this.state = null; + this.attributes = {}; + b && (this.attributes = OpenLayers.Util.extend(this.attributes, b)); + this.style = c ? c : null + }, + destroy: function() { + this.layer && (this.layer.removeFeatures(this), this.layer = + null); + this.modified = this.geometry = null; + OpenLayers.Feature.prototype.destroy.apply(this, arguments) + }, + clone: function() { + return new OpenLayers.Feature.Vector(this.geometry ? this.geometry.clone() : null, this.attributes, this.style) + }, + onScreen: function(a) { + var b = !1; + this.layer && this.layer.map && (b = this.layer.map.getExtent(), a ? (a = this.geometry.getBounds(), b = b.intersectsBounds(a)) : b = b.toGeometry().intersects(this.geometry)); + return b + }, + getVisibility: function() { + return !(this.style && "none" == this.style.display || !this.layer || + this.layer && this.layer.styleMap && "none" == this.layer.styleMap.createSymbolizer(this, this.renderIntent).display || this.layer && !this.layer.getVisibility()) + }, + createMarker: function() { + return null + }, + destroyMarker: function() {}, + createPopup: function() { + return null + }, + atPoint: function(a, b, c) { + var d = !1; + this.geometry && (d = this.geometry.atPoint(a, b, c)); + return d + }, + destroyPopup: function() {}, + move: function(a) { + if (this.layer && this.geometry.move) { + var a = "OpenLayers.LonLat" == a.CLASS_NAME ? this.layer.getViewPortPxFromLonLat(a) : a, + b = this.layer.getViewPortPxFromLonLat(this.geometry.getBounds().getCenterLonLat()), + c = this.layer.map.getResolution(); + this.geometry.move(c * (a.x - b.x), c * (b.y - a.y)); + this.layer.drawFeature(this); + return b + } + }, + toState: function(a) { + if (a == OpenLayers.State.UPDATE) switch (this.state) { + case OpenLayers.State.UNKNOWN: + case OpenLayers.State.DELETE: + this.state = a + } else if (a == OpenLayers.State.INSERT) switch (this.state) { + case OpenLayers.State.UNKNOWN: + break; + default: + this.state = a + } else if (a == OpenLayers.State.DELETE) switch (this.state) { + case OpenLayers.State.UNKNOWN: + case OpenLayers.State.UPDATE: + this.state = + a + } else a == OpenLayers.State.UNKNOWN && (this.state = a) + }, + CLASS_NAME: "OpenLayers.Feature.Vector" +}); +OpenLayers.Feature.Vector.style = { + "default": { + fillColor: "#ee9900", + fillOpacity: 0.4, + hoverFillColor: "white", + hoverFillOpacity: 0.8, + strokeColor: "#ee9900", + strokeOpacity: 1, + strokeWidth: 1, + strokeLinecap: "round", + strokeDashstyle: "solid", + hoverStrokeColor: "red", + hoverStrokeOpacity: 1, + hoverStrokeWidth: 0.2, + pointRadius: 6, + hoverPointRadius: 1, + hoverPointUnit: "%", + pointerEvents: "visiblePainted", + cursor: "inherit", + fontColor: "#000000", + labelAlign: "cm", + labelOutlineColor: "white", + labelOutlineWidth: 3 + }, + select: { + fillColor: "blue", + fillOpacity: 0.4, + hoverFillColor: "white", + hoverFillOpacity: 0.8, + strokeColor: "blue", + strokeOpacity: 1, + strokeWidth: 2, + strokeLinecap: "round", + strokeDashstyle: "solid", + hoverStrokeColor: "red", + hoverStrokeOpacity: 1, + hoverStrokeWidth: 0.2, + pointRadius: 6, + hoverPointRadius: 1, + hoverPointUnit: "%", + pointerEvents: "visiblePainted", + cursor: "pointer", + fontColor: "#000000", + labelAlign: "cm", + labelOutlineColor: "white", + labelOutlineWidth: 3 + }, + temporary: { + fillColor: "#66cccc", + fillOpacity: 0.2, + hoverFillColor: "white", + hoverFillOpacity: 0.8, + strokeColor: "#66cccc", + strokeOpacity: 1, + strokeLinecap: "round", + strokeWidth: 2, + strokeDashstyle: "solid", + hoverStrokeColor: "red", + hoverStrokeOpacity: 1, + hoverStrokeWidth: 0.2, + pointRadius: 6, + hoverPointRadius: 1, + hoverPointUnit: "%", + pointerEvents: "visiblePainted", + cursor: "inherit", + fontColor: "#000000", + labelAlign: "cm", + labelOutlineColor: "white", + labelOutlineWidth: 3 + }, + "delete": { + display: "none" + } +}; +OpenLayers.Style = OpenLayers.Class({ + id: null, + name: null, + title: null, + description: null, + layerName: null, + isDefault: !1, + rules: null, + context: null, + defaultStyle: null, + defaultsPerSymbolizer: !1, + propertyStyles: null, + initialize: function(a, b) { + OpenLayers.Util.extend(this, b); + this.rules = []; + b && b.rules && this.addRules(b.rules); + this.setDefaultStyle(a || OpenLayers.Feature.Vector.style["default"]); + this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_") + }, + destroy: function() { + for (var a = 0, b = this.rules.length; a < b; a++) this.rules[a].destroy(), + this.rules[a] = null; + this.defaultStyle = this.rules = null + }, + createSymbolizer: function(a) { + for (var b = this.defaultsPerSymbolizer ? {} : this.createLiterals(OpenLayers.Util.extend({}, this.defaultStyle), a), c = this.rules, d, e = [], f = !1, g = 0, h = c.length; g < h; g++) d = c[g], d.evaluate(a) && (d instanceof OpenLayers.Rule && d.elseFilter ? e.push(d) : (f = !0, this.applySymbolizer(d, b, a))); + if (!1 == f && 0 < e.length) { + f = !0; + g = 0; + for (h = e.length; g < h; g++) this.applySymbolizer(e[g], b, a) + } + 0 < c.length && !1 == f && (b.display = "none"); + null != b.label && "string" !== typeof b.label && + (b.label = "" + b.label); + return b + }, + applySymbolizer: function(a, b, c) { + var d = c.geometry ? this.getSymbolizerPrefix(c.geometry) : OpenLayers.Style.SYMBOLIZER_PREFIXES[0], + a = a.symbolizer[d] || a.symbolizer; + !0 === this.defaultsPerSymbolizer && (d = this.defaultStyle, OpenLayers.Util.applyDefaults(a, { + pointRadius: d.pointRadius + }), (!0 === a.stroke || !0 === a.graphic) && OpenLayers.Util.applyDefaults(a, { + strokeWidth: d.strokeWidth, + strokeColor: d.strokeColor, + strokeOpacity: d.strokeOpacity, + strokeDashstyle: d.strokeDashstyle, + strokeLinecap: d.strokeLinecap + }), (!0 === a.fill || !0 === a.graphic) && OpenLayers.Util.applyDefaults(a, { + fillColor: d.fillColor, + fillOpacity: d.fillOpacity + }), !0 === a.graphic && OpenLayers.Util.applyDefaults(a, { + pointRadius: this.defaultStyle.pointRadius, + externalGraphic: this.defaultStyle.externalGraphic, + graphicName: this.defaultStyle.graphicName, + graphicOpacity: this.defaultStyle.graphicOpacity, + graphicWidth: this.defaultStyle.graphicWidth, + graphicHeight: this.defaultStyle.graphicHeight, + graphicXOffset: this.defaultStyle.graphicXOffset, + graphicYOffset: this.defaultStyle.graphicYOffset + })); + return this.createLiterals(OpenLayers.Util.extend(b, a), c) + }, + createLiterals: function(a, b) { + var c = OpenLayers.Util.extend({}, b.attributes || b.data); + OpenLayers.Util.extend(c, this.context); + for (var d in this.propertyStyles) a[d] = OpenLayers.Style.createLiteral(a[d], c, b, d); + return a + }, + findPropertyStyles: function() { + var a = {}; + this.addPropertyStyles(a, this.defaultStyle); + for (var b = this.rules, c, d, e = 0, f = b.length; e < f; e++) { + c = b[e].symbolizer; + for (var g in c) + if (d = c[g], "object" == typeof d) this.addPropertyStyles(a, d); + else { + this.addPropertyStyles(a, + c); + break + } + } + return a + }, + addPropertyStyles: function(a, b) { + var c, d; + for (d in b) c = b[d], "string" == typeof c && c.match(/\$\{\w+\}/) && (a[d] = !0); + return a + }, + addRules: function(a) { + Array.prototype.push.apply(this.rules, a); + this.propertyStyles = this.findPropertyStyles() + }, + setDefaultStyle: function(a) { + this.defaultStyle = a; + this.propertyStyles = this.findPropertyStyles() + }, + getSymbolizerPrefix: function(a) { + for (var b = OpenLayers.Style.SYMBOLIZER_PREFIXES, c = 0, d = b.length; c < d; c++) + if (-1 != a.CLASS_NAME.indexOf(b[c])) return b[c] + }, + clone: function() { + var a = + OpenLayers.Util.extend({}, this); + if (this.rules) { + a.rules = []; + for (var b = 0, c = this.rules.length; b < c; ++b) a.rules.push(this.rules[b].clone()) + } + a.context = this.context && OpenLayers.Util.extend({}, this.context); + b = OpenLayers.Util.extend({}, this.defaultStyle); + return new OpenLayers.Style(b, a) + }, + CLASS_NAME: "OpenLayers.Style" +}); +OpenLayers.Style.createLiteral = function(a, b, c, d) { + "string" == typeof a && -1 != a.indexOf("${") && (a = OpenLayers.String.format(a, b, [c, d]), a = isNaN(a) || !a ? a : parseFloat(a)); + return a +}; +OpenLayers.Style.SYMBOLIZER_PREFIXES = ["Point", "Line", "Polygon", "Text", "Raster"]; +OpenLayers.Filter = OpenLayers.Class({ + initialize: function(a) { + OpenLayers.Util.extend(this, a) + }, + destroy: function() {}, + evaluate: function() { + return !0 + }, + clone: function() { + return null + }, + toString: function() { + return OpenLayers.Format && OpenLayers.Format.CQL ? OpenLayers.Format.CQL.prototype.write(this) : Object.prototype.toString.call(this) + }, + CLASS_NAME: "OpenLayers.Filter" +}); +OpenLayers.Filter.FeatureId = OpenLayers.Class(OpenLayers.Filter, { + fids: null, + type: "FID", + initialize: function(a) { + this.fids = []; + OpenLayers.Filter.prototype.initialize.apply(this, [a]) + }, + evaluate: function(a) { + for (var b = 0, c = this.fids.length; b < c; b++) + if ((a.fid || a.id) == this.fids[b]) return !0; + return !1 + }, + clone: function() { + var a = new OpenLayers.Filter.FeatureId; + OpenLayers.Util.extend(a, this); + a.fids = this.fids.slice(); + return a + }, + CLASS_NAME: "OpenLayers.Filter.FeatureId" +}); +OpenLayers.Filter.Logical = OpenLayers.Class(OpenLayers.Filter, { + filters: null, + type: null, + initialize: function(a) { + this.filters = []; + OpenLayers.Filter.prototype.initialize.apply(this, [a]) + }, + destroy: function() { + this.filters = null; + OpenLayers.Filter.prototype.destroy.apply(this) + }, + evaluate: function(a) { + var b, c; + switch (this.type) { + case OpenLayers.Filter.Logical.AND: + b = 0; + for (c = this.filters.length; b < c; b++) + if (!1 == this.filters[b].evaluate(a)) return !1; + return !0; + case OpenLayers.Filter.Logical.OR: + b = 0; + for (c = this.filters.length; b < + c; b++) + if (!0 == this.filters[b].evaluate(a)) return !0; + return !1; + case OpenLayers.Filter.Logical.NOT: + return !this.filters[0].evaluate(a) + } + }, + clone: function() { + for (var a = [], b = 0, c = this.filters.length; b < c; ++b) a.push(this.filters[b].clone()); + return new OpenLayers.Filter.Logical({ + type: this.type, + filters: a + }) + }, + CLASS_NAME: "OpenLayers.Filter.Logical" +}); +OpenLayers.Filter.Logical.AND = "&&"; +OpenLayers.Filter.Logical.OR = "||"; +OpenLayers.Filter.Logical.NOT = "!"; +OpenLayers.Filter.Comparison = OpenLayers.Class(OpenLayers.Filter, { + type: null, + property: null, + value: null, + matchCase: !0, + lowerBoundary: null, + upperBoundary: null, + initialize: function(a) { + OpenLayers.Filter.prototype.initialize.apply(this, [a]); + this.type === OpenLayers.Filter.Comparison.LIKE && void 0 === a.matchCase && (this.matchCase = null) + }, + evaluate: function(a) { + a instanceof OpenLayers.Feature.Vector && (a = a.attributes); + var b = !1, + a = a[this.property]; + switch (this.type) { + case OpenLayers.Filter.Comparison.EQUAL_TO: + b = this.value; + b = !this.matchCase && "string" == typeof a && "string" == typeof b ? a.toUpperCase() == b.toUpperCase() : a == b; + break; + case OpenLayers.Filter.Comparison.NOT_EQUAL_TO: + b = this.value; + b = !this.matchCase && "string" == typeof a && "string" == typeof b ? a.toUpperCase() != b.toUpperCase() : a != b; + break; + case OpenLayers.Filter.Comparison.LESS_THAN: + b = a < this.value; + break; + case OpenLayers.Filter.Comparison.GREATER_THAN: + b = a > this.value; + break; + case OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO: + b = a <= this.value; + break; + case OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO: + b = + a >= this.value; + break; + case OpenLayers.Filter.Comparison.BETWEEN: + b = a >= this.lowerBoundary && a <= this.upperBoundary; + break; + case OpenLayers.Filter.Comparison.LIKE: + b = RegExp(this.value, "gi").test(a) + } + return b + }, + value2regex: function(a, b, c) { + if ("." == a) throw Error("'.' is an unsupported wildCard character for OpenLayers.Filter.Comparison"); + a = a ? a : "*"; + b = b ? b : "."; + this.value = this.value.replace(RegExp("\\" + (c ? c : "!") + "(.|$)", "g"), "\\$1"); + this.value = this.value.replace(RegExp("\\" + b, "g"), "."); + this.value = this.value.replace(RegExp("\\" + + a, "g"), ".*"); + this.value = this.value.replace(RegExp("\\\\.\\*", "g"), "\\" + a); + return this.value = this.value.replace(RegExp("\\\\\\.", "g"), "\\" + b) + }, + regex2value: function() { + var a = this.value, + a = a.replace(/!/g, "!!"), + a = a.replace(/(\\)?\\\./g, function(a, c) { + return c ? a : "!." + }), + a = a.replace(/(\\)?\\\*/g, function(a, c) { + return c ? a : "!*" + }), + a = a.replace(/\\\\/g, "\\"); + return a = a.replace(/\.\*/g, "*") + }, + clone: function() { + return OpenLayers.Util.extend(new OpenLayers.Filter.Comparison, this) + }, + CLASS_NAME: "OpenLayers.Filter.Comparison" +}); +OpenLayers.Filter.Comparison.EQUAL_TO = "=="; +OpenLayers.Filter.Comparison.NOT_EQUAL_TO = "!="; +OpenLayers.Filter.Comparison.LESS_THAN = "<"; +OpenLayers.Filter.Comparison.GREATER_THAN = ">"; +OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO = "<="; +OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO = ">="; +OpenLayers.Filter.Comparison.BETWEEN = ".."; +OpenLayers.Filter.Comparison.LIKE = "~"; +OpenLayers.Format.Filter = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, { + defaultVersion: "1.0.0", + CLASS_NAME: "OpenLayers.Format.Filter" +}); +OpenLayers.Filter.Function = OpenLayers.Class(OpenLayers.Filter, { + name: null, + params: null, + CLASS_NAME: "OpenLayers.Filter.Function" +}); +OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + ogc: "http://www.opengis.net/ogc", + gml: "http://www.opengis.net/gml", + xlink: "http://www.w3.org/1999/xlink", + xsi: "http://www.w3.org/2001/XMLSchema-instance" + }, + defaultPrefix: "ogc", + schemaLocation: null, + initialize: function(a) { + OpenLayers.Format.XML.prototype.initialize.apply(this, [a]) + }, + read: function(a) { + var b = {}; + this.readers.ogc.Filter.apply(this, [a, b]); + return b.filter + }, + readers: { + ogc: { + _expression: function(a) { + for (var b = "", c = a.firstChild; c; c = + c.nextSibling) switch (c.nodeType) { + case 1: + a = this.readNode(c); + a.property ? b += "${" + a.property + "}" : void 0 !== a.value && (b += a.value); + break; + case 3: + case 4: + b += c.nodeValue + } + return b + }, + Filter: function(a, b) { + var c = { + fids: [], + filters: [] + }; + this.readChildNodes(a, c); + 0 < c.fids.length ? b.filter = new OpenLayers.Filter.FeatureId({ + fids: c.fids + }) : 0 < c.filters.length && (b.filter = c.filters[0]) + }, + FeatureId: function(a, b) { + var c = a.getAttribute("fid"); + c && b.fids.push(c) + }, + And: function(a, b) { + var c = new OpenLayers.Filter.Logical({ + type: OpenLayers.Filter.Logical.AND + }); + this.readChildNodes(a, c); + b.filters.push(c) + }, + Or: function(a, b) { + var c = new OpenLayers.Filter.Logical({ + type: OpenLayers.Filter.Logical.OR + }); + this.readChildNodes(a, c); + b.filters.push(c) + }, + Not: function(a, b) { + var c = new OpenLayers.Filter.Logical({ + type: OpenLayers.Filter.Logical.NOT + }); + this.readChildNodes(a, c); + b.filters.push(c) + }, + PropertyIsLessThan: function(a, b) { + var c = new OpenLayers.Filter.Comparison({ + type: OpenLayers.Filter.Comparison.LESS_THAN + }); + this.readChildNodes(a, c); + b.filters.push(c) + }, + PropertyIsGreaterThan: function(a, + b) { + var c = new OpenLayers.Filter.Comparison({ + type: OpenLayers.Filter.Comparison.GREATER_THAN + }); + this.readChildNodes(a, c); + b.filters.push(c) + }, + PropertyIsLessThanOrEqualTo: function(a, b) { + var c = new OpenLayers.Filter.Comparison({ + type: OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO + }); + this.readChildNodes(a, c); + b.filters.push(c) + }, + PropertyIsGreaterThanOrEqualTo: function(a, b) { + var c = new OpenLayers.Filter.Comparison({ + type: OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO + }); + this.readChildNodes(a, c); + b.filters.push(c) + }, + PropertyIsBetween: function(a, b) { + var c = new OpenLayers.Filter.Comparison({ + type: OpenLayers.Filter.Comparison.BETWEEN + }); + this.readChildNodes(a, c); + b.filters.push(c) + }, + Literal: function(a, b) { + b.value = OpenLayers.String.numericIf(this.getChildValue(a)) + }, + PropertyName: function(a, b) { + b.property = this.getChildValue(a) + }, + LowerBoundary: function(a, b) { + b.lowerBoundary = OpenLayers.String.numericIf(this.readers.ogc._expression.call(this, a)) + }, + UpperBoundary: function(a, b) { + b.upperBoundary = OpenLayers.String.numericIf(this.readers.ogc._expression.call(this, + a)) + }, + Intersects: function(a, b) { + this.readSpatial(a, b, OpenLayers.Filter.Spatial.INTERSECTS) + }, + Within: function(a, b) { + this.readSpatial(a, b, OpenLayers.Filter.Spatial.WITHIN) + }, + Contains: function(a, b) { + this.readSpatial(a, b, OpenLayers.Filter.Spatial.CONTAINS) + }, + DWithin: function(a, b) { + this.readSpatial(a, b, OpenLayers.Filter.Spatial.DWITHIN) + }, + Distance: function(a, b) { + b.distance = parseInt(this.getChildValue(a)); + b.distanceUnits = a.getAttribute("units") + }, + Function: function() {} + } + }, + readSpatial: function(a, b, c) { + c = new OpenLayers.Filter.Spatial({ + type: c + }); + this.readChildNodes(a, c); + c.value = c.components[0]; + delete c.components; + b.filters.push(c) + }, + writeOgcExpression: function(a, b) { + if (a instanceof OpenLayers.Filter.Function) { + var c = this.writeNode("Function", a, b); + b.appendChild(c) + } else this.writeNode("Literal", a, b); + return b + }, + write: function(a) { + return this.writers.ogc.Filter.apply(this, [a]) + }, + writeFeatureIdNodes: function(a, b) { + for (var c = 0, d = a.fids.length; c < d; ++c) this.writeNode("FeatureId", a.fids[c], b) + }, + writers: { + ogc: { + Filter: function(a) { + var b = this.createElementNSPlus("ogc:Filter"); + "FID" === a.type ? OpenLayers.Format.Filter.v1.prototype.writeFeatureIdNodes.call(this, a, b) : this.writeNode(this.getFilterType(a), a, b); + return b + }, + FeatureId: function(a) { + return this.createElementNSPlus("ogc:FeatureId", { + attributes: { + fid: a + } + }) + }, + And: function(a) { + for (var b = this.createElementNSPlus("ogc:And"), c, d = 0, e = a.filters.length; d < e; ++d) c = a.filters[d], "FID" === c.type ? OpenLayers.Format.Filter.v1.prototype.writeFeatureIdNodes.call(this, c, b) : this.writeNode(this.getFilterType(c), c, b); + return b + }, + Or: function(a) { + for (var b = + this.createElementNSPlus("ogc:Or"), c, d = 0, e = a.filters.length; d < e; ++d) c = a.filters[d], "FID" === c.type ? OpenLayers.Format.Filter.v1.prototype.writeFeatureIdNodes.call(this, c, b) : this.writeNode(this.getFilterType(c), c, b); + return b + }, + Not: function(a) { + var b = this.createElementNSPlus("ogc:Not"), + a = a.filters[0]; + "FID" === a.type ? OpenLayers.Format.Filter.v1.prototype.writeFeatureIdNodes.call(this, a, b) : this.writeNode(this.getFilterType(a), a, b); + return b + }, + PropertyIsLessThan: function(a) { + var b = this.createElementNSPlus("ogc:PropertyIsLessThan"); + this.writeNode("PropertyName", a, b); + this.writeOgcExpression(a.value, b); + return b + }, + PropertyIsGreaterThan: function(a) { + var b = this.createElementNSPlus("ogc:PropertyIsGreaterThan"); + this.writeNode("PropertyName", a, b); + this.writeOgcExpression(a.value, b); + return b + }, + PropertyIsLessThanOrEqualTo: function(a) { + var b = this.createElementNSPlus("ogc:PropertyIsLessThanOrEqualTo"); + this.writeNode("PropertyName", a, b); + this.writeOgcExpression(a.value, b); + return b + }, + PropertyIsGreaterThanOrEqualTo: function(a) { + var b = this.createElementNSPlus("ogc:PropertyIsGreaterThanOrEqualTo"); + this.writeNode("PropertyName", a, b); + this.writeOgcExpression(a.value, b); + return b + }, + PropertyIsBetween: function(a) { + var b = this.createElementNSPlus("ogc:PropertyIsBetween"); + this.writeNode("PropertyName", a, b); + this.writeNode("LowerBoundary", a, b); + this.writeNode("UpperBoundary", a, b); + return b + }, + PropertyName: function(a) { + return this.createElementNSPlus("ogc:PropertyName", { + value: a.property + }) + }, + Literal: function(a) { + return this.createElementNSPlus("ogc:Literal", { + value: a + }) + }, + LowerBoundary: function(a) { + var b = this.createElementNSPlus("ogc:LowerBoundary"); + this.writeOgcExpression(a.lowerBoundary, b); + return b + }, + UpperBoundary: function(a) { + var b = this.createElementNSPlus("ogc:UpperBoundary"); + this.writeNode("Literal", a.upperBoundary, b); + return b + }, + INTERSECTS: function(a) { + return this.writeSpatial(a, "Intersects") + }, + WITHIN: function(a) { + return this.writeSpatial(a, "Within") + }, + CONTAINS: function(a) { + return this.writeSpatial(a, "Contains") + }, + DWITHIN: function(a) { + var b = this.writeSpatial(a, "DWithin"); + this.writeNode("Distance", a, b); + return b + }, + Distance: function(a) { + return this.createElementNSPlus("ogc:Distance", { + attributes: { + units: a.distanceUnits + }, + value: a.distance + }) + }, + Function: function(a) { + for (var b = this.createElementNSPlus("ogc:Function", { + attributes: { + name: a.name + } + }), a = a.params, c = 0, d = a.length; c < d; c++) this.writeOgcExpression(a[c], b); + return b + } + } + }, + getFilterType: function(a) { + var b = this.filterMap[a.type]; + if (!b) throw "Filter writing not supported for rule type: " + a.type; + return b + }, + filterMap: { + "&&": "And", + "||": "Or", + "!": "Not", + "==": "PropertyIsEqualTo", + "!=": "PropertyIsNotEqualTo", + "<": "PropertyIsLessThan", + ">": "PropertyIsGreaterThan", + "<=": "PropertyIsLessThanOrEqualTo", + ">=": "PropertyIsGreaterThanOrEqualTo", + "..": "PropertyIsBetween", + "~": "PropertyIsLike", + BBOX: "BBOX", + DWITHIN: "DWITHIN", + WITHIN: "WITHIN", + CONTAINS: "CONTAINS", + INTERSECTS: "INTERSECTS", + FID: "FeatureId" + }, + CLASS_NAME: "OpenLayers.Format.Filter.v1" +}); +OpenLayers.Geometry = OpenLayers.Class({ + id: null, + parent: null, + bounds: null, + initialize: function() { + this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_") + }, + destroy: function() { + this.bounds = this.id = null + }, + clone: function() { + return new OpenLayers.Geometry + }, + setBounds: function(a) { + a && (this.bounds = a.clone()) + }, + clearBounds: function() { + this.bounds = null; + this.parent && this.parent.clearBounds() + }, + extendBounds: function(a) { + this.getBounds() ? this.bounds.extend(a) : this.setBounds(a) + }, + getBounds: function() { + null == this.bounds && this.calculateBounds(); + return this.bounds + }, + calculateBounds: function() {}, + distanceTo: function() {}, + getVertices: function() {}, + atPoint: function(a, b, c) { + var d = !1; + null != this.getBounds() && null != a && (b = null != b ? b : 0, c = null != c ? c : 0, d = (new OpenLayers.Bounds(this.bounds.left - b, this.bounds.bottom - c, this.bounds.right + b, this.bounds.top + c)).containsLonLat(a)); + return d + }, + getLength: function() { + return 0 + }, + getArea: function() { + return 0 + }, + getCentroid: function() { + return null + }, + toString: function() { + return OpenLayers.Format && OpenLayers.Format.WKT ? OpenLayers.Format.WKT.prototype.write(new OpenLayers.Feature.Vector(this)) : + Object.prototype.toString.call(this) + }, + CLASS_NAME: "OpenLayers.Geometry" +}); +OpenLayers.Geometry.fromWKT = function(a) { + var b; + if (OpenLayers.Format && OpenLayers.Format.WKT) { + var c = OpenLayers.Geometry.fromWKT.format; + c || (c = new OpenLayers.Format.WKT, OpenLayers.Geometry.fromWKT.format = c); + a = c.read(a); + if (a instanceof OpenLayers.Feature.Vector) b = a.geometry; + else if (OpenLayers.Util.isArray(a)) { + b = a.length; + for (var c = Array(b), d = 0; d < b; ++d) c[d] = a[d].geometry; + b = new OpenLayers.Geometry.Collection(c) + } + } + return b +}; +OpenLayers.Geometry.segmentsIntersect = function(a, b, c) { + var d = c && c.point, + c = c && c.tolerance, + e = !1, + f = a.x1 - b.x1, + g = a.y1 - b.y1, + h = a.x2 - a.x1, + i = a.y2 - a.y1, + j = b.y2 - b.y1, + k = b.x2 - b.x1, + l = j * h - k * i, + j = k * g - j * f, + g = h * g - i * f; + 0 == l ? 0 == j && 0 == g && (e = !0) : (f = j / l, l = g / l, 0 <= f && (1 >= f && 0 <= l && 1 >= l) && (d ? (h = a.x1 + f * h, l = a.y1 + f * i, e = new OpenLayers.Geometry.Point(h, l)) : e = !0)); + if (c) + if (e) { + if (d) { + a = [a, b]; + b = 0; + a: for (; 2 > b; ++b) { + f = a[b]; + for (i = 1; 3 > i; ++i) + if (h = f["x" + i], l = f["y" + i], d = Math.sqrt(Math.pow(h - e.x, 2) + Math.pow(l - e.y, 2)), d < c) { + e.x = h; + e.y = l; + break a + } + } + } + } else { + a = [a, b]; + b = 0; + a: for (; 2 > b; ++b) { + h = a[b]; + l = a[(b + 1) % 2]; + for (i = 1; 3 > i; ++i) + if (f = { + x: h["x" + i], + y: h["y" + i] + }, g = OpenLayers.Geometry.distanceToSegment(f, l), g.distance < c) { + e = d ? new OpenLayers.Geometry.Point(f.x, f.y) : !0; + break a + } + } + } + return e +}; +OpenLayers.Geometry.distanceToSegment = function(a, b) { + var c = a.x, + d = a.y, + e = b.x1, + f = b.y1, + g = b.x2, + h = b.y2, + i = g - e, + j = h - f, + k = (i * (c - e) + j * (d - f)) / (Math.pow(i, 2) + Math.pow(j, 2)); + 0 >= k || (1 <= k ? (e = g, f = h) : (e += k * i, f += k * j)); + return { + distance: Math.sqrt(Math.pow(e - c, 2) + Math.pow(f - d, 2)), + x: e, + y: f + } +}; +OpenLayers.Geometry.Point = OpenLayers.Class(OpenLayers.Geometry, { + x: null, + y: null, + initialize: function(a, b) { + OpenLayers.Geometry.prototype.initialize.apply(this, arguments); + this.x = parseFloat(a); + this.y = parseFloat(b) + }, + clone: function(a) { + null == a && (a = new OpenLayers.Geometry.Point(this.x, this.y)); + OpenLayers.Util.applyDefaults(a, this); + return a + }, + calculateBounds: function() { + this.bounds = new OpenLayers.Bounds(this.x, this.y, this.x, this.y) + }, + distanceTo: function(a, b) { + var c = !(b && !1 === b.edge) && b && b.details, + d, e, f, g, h; + a instanceof + OpenLayers.Geometry.Point ? (e = this.x, f = this.y, g = a.x, h = a.y, d = Math.sqrt(Math.pow(e - g, 2) + Math.pow(f - h, 2)), d = !c ? d : { + x0: e, + y0: f, + x1: g, + y1: h, + distance: d + }) : (d = a.distanceTo(this, b), c && (d = { + x0: d.x1, + y0: d.y1, + x1: d.x0, + y1: d.y0, + distance: d.distance + })); + return d + }, + equals: function(a) { + var b = !1; + null != a && (b = this.x == a.x && this.y == a.y || isNaN(this.x) && isNaN(this.y) && isNaN(a.x) && isNaN(a.y)); + return b + }, + toShortString: function() { + return this.x + ", " + this.y + }, + move: function(a, b) { + this.x += a; + this.y += b; + this.clearBounds() + }, + rotate: function(a, b) { + var a = + a * (Math.PI / 180), + c = this.distanceTo(b), + d = a + Math.atan2(this.y - b.y, this.x - b.x); + this.x = b.x + c * Math.cos(d); + this.y = b.y + c * Math.sin(d); + this.clearBounds() + }, + getCentroid: function() { + return new OpenLayers.Geometry.Point(this.x, this.y) + }, + resize: function(a, b, c) { + this.x = b.x + a * (void 0 == c ? 1 : c) * (this.x - b.x); + this.y = b.y + a * (this.y - b.y); + this.clearBounds(); + return this + }, + intersects: function(a) { + var b = !1; + return b = "OpenLayers.Geometry.Point" == a.CLASS_NAME ? this.equals(a) : a.intersects(this) + }, + transform: function(a, b) { + a && b && (OpenLayers.Projection.transform(this, + a, b), this.bounds = null); + return this + }, + getVertices: function() { + return [this] + }, + CLASS_NAME: "OpenLayers.Geometry.Point" +}); +OpenLayers.Geometry.Collection = OpenLayers.Class(OpenLayers.Geometry, { + components: null, + componentTypes: null, + initialize: function(a) { + OpenLayers.Geometry.prototype.initialize.apply(this, arguments); + this.components = []; + null != a && this.addComponents(a) + }, + destroy: function() { + this.components.length = 0; + this.components = null; + OpenLayers.Geometry.prototype.destroy.apply(this, arguments) + }, + clone: function() { + for (var a = eval("new " + this.CLASS_NAME + "()"), b = 0, c = this.components.length; b < c; b++) a.addComponent(this.components[b].clone()); + OpenLayers.Util.applyDefaults(a, this); + return a + }, + getComponentsString: function() { + for (var a = [], b = 0, c = this.components.length; b < c; b++) a.push(this.components[b].toShortString()); + return a.join(",") + }, + calculateBounds: function() { + this.bounds = null; + var a = new OpenLayers.Bounds, + b = this.components; + if (b) + for (var c = 0, d = b.length; c < d; c++) a.extend(b[c].getBounds()); + null != a.left && (null != a.bottom && null != a.right && null != a.top) && this.setBounds(a) + }, + addComponents: function(a) { + OpenLayers.Util.isArray(a) || (a = [a]); + for (var b = 0, c = a.length; b < + c; b++) this.addComponent(a[b]) + }, + addComponent: function(a, b) { + var c = !1; + if (a && (null == this.componentTypes || -1 < OpenLayers.Util.indexOf(this.componentTypes, a.CLASS_NAME))) { + if (null != b && b < this.components.length) { + var c = this.components.slice(0, b), + d = this.components.slice(b, this.components.length); + c.push(a); + this.components = c.concat(d) + } else this.components.push(a); + a.parent = this; + this.clearBounds(); + c = !0 + } + return c + }, + removeComponents: function(a) { + var b = !1; + OpenLayers.Util.isArray(a) || (a = [a]); + for (var c = a.length - 1; 0 <= c; --c) b = + this.removeComponent(a[c]) || b; + return b + }, + removeComponent: function(a) { + OpenLayers.Util.removeItem(this.components, a); + this.clearBounds(); + return !0 + }, + getLength: function() { + for (var a = 0, b = 0, c = this.components.length; b < c; b++) a += this.components[b].getLength(); + return a + }, + getArea: function() { + for (var a = 0, b = 0, c = this.components.length; b < c; b++) a += this.components[b].getArea(); + return a + }, + getGeodesicArea: function(a) { + for (var b = 0, c = 0, d = this.components.length; c < d; c++) b += this.components[c].getGeodesicArea(a); + return b + }, + getCentroid: function(a) { + if (!a) return this.components.length && + this.components[0].getCentroid(); + a = this.components.length; + if (!a) return !1; + for (var b = [], c = [], d = 0, e = Number.MAX_VALUE, f, g = 0; g < a; ++g) { + f = this.components[g]; + var h = f.getArea(); + f = f.getCentroid(!0); + !isNaN(h) && (!isNaN(f.x) && !isNaN(f.y)) && (b.push(h), d += h, e = h < e && 0 < h ? h : e, c.push(f)) + } + a = b.length; + if (0 === d) { + for (g = 0; g < a; ++g) b[g] = 1; + d = b.length + } else { + for (g = 0; g < a; ++g) b[g] /= e; + d /= e + } + for (var i = e = 0, g = 0; g < a; ++g) f = c[g], h = b[g], e += f.x * h, i += f.y * h; + return new OpenLayers.Geometry.Point(e / d, i / d) + }, + getGeodesicLength: function(a) { + for (var b = + 0, c = 0, d = this.components.length; c < d; c++) b += this.components[c].getGeodesicLength(a); + return b + }, + move: function(a, b) { + for (var c = 0, d = this.components.length; c < d; c++) this.components[c].move(a, b) + }, + rotate: function(a, b) { + for (var c = 0, d = this.components.length; c < d; ++c) this.components[c].rotate(a, b) + }, + resize: function(a, b, c) { + for (var d = 0; d < this.components.length; ++d) this.components[d].resize(a, b, c); + return this + }, + distanceTo: function(a, b) { + for (var c = !(b && !1 === b.edge) && b && b.details, d, e, f, g = Number.POSITIVE_INFINITY, h = 0, i = this.components.length; h < + i && !(d = this.components[h].distanceTo(a, b), f = c ? d.distance : d, f < g && (g = f, e = d, 0 == g)); ++h); + return e + }, + equals: function(a) { + var b = !0; + if (!a || !a.CLASS_NAME || this.CLASS_NAME != a.CLASS_NAME) b = !1; + else if (!OpenLayers.Util.isArray(a.components) || a.components.length != this.components.length) b = !1; + else + for (var c = 0, d = this.components.length; c < d; ++c) + if (!this.components[c].equals(a.components[c])) { + b = !1; + break + } return b + }, + transform: function(a, b) { + if (a && b) { + for (var c = 0, d = this.components.length; c < d; c++) this.components[c].transform(a, + b); + this.bounds = null + } + return this + }, + intersects: function(a) { + for (var b = !1, c = 0, d = this.components.length; c < d && !(b = a.intersects(this.components[c])); ++c); + return b + }, + getVertices: function(a) { + for (var b = [], c = 0, d = this.components.length; c < d; ++c) Array.prototype.push.apply(b, this.components[c].getVertices(a)); + return b + }, + CLASS_NAME: "OpenLayers.Geometry.Collection" +}); +OpenLayers.Geometry.MultiPoint = OpenLayers.Class(OpenLayers.Geometry.Collection, { + componentTypes: ["OpenLayers.Geometry.Point"], + addPoint: function(a, b) { + this.addComponent(a, b) + }, + removePoint: function(a) { + this.removeComponent(a) + }, + CLASS_NAME: "OpenLayers.Geometry.MultiPoint" +}); +OpenLayers.Geometry.Curve = OpenLayers.Class(OpenLayers.Geometry.MultiPoint, { + componentTypes: ["OpenLayers.Geometry.Point"], + getLength: function() { + var a = 0; + if (this.components && 1 < this.components.length) + for (var b = 1, c = this.components.length; b < c; b++) a += this.components[b - 1].distanceTo(this.components[b]); + return a + }, + getGeodesicLength: function(a) { + var b = this; + if (a) { + var c = new OpenLayers.Projection("EPSG:4326"); + c.equals(a) || (b = this.clone().transform(a, c)) + } + a = 0; + if (b.components && 1 < b.components.length) + for (var d, e = 1, f = b.components.length; e < + f; e++) c = b.components[e - 1], d = b.components[e], a += OpenLayers.Util.distVincenty({ + lon: c.x, + lat: c.y + }, { + lon: d.x, + lat: d.y + }); + return 1E3 * a + }, + CLASS_NAME: "OpenLayers.Geometry.Curve" +}); +OpenLayers.Geometry.LineString = OpenLayers.Class(OpenLayers.Geometry.Curve, { + removeComponent: function(a) { + var b = this.components && 2 < this.components.length; + b && OpenLayers.Geometry.Collection.prototype.removeComponent.apply(this, arguments); + return b + }, + intersects: function(a) { + var b = !1, + c = a.CLASS_NAME; + if ("OpenLayers.Geometry.LineString" == c || "OpenLayers.Geometry.LinearRing" == c || "OpenLayers.Geometry.Point" == c) { + var d = this.getSortedSegments(), + a = "OpenLayers.Geometry.Point" == c ? [{ + x1: a.x, + y1: a.y, + x2: a.x, + y2: a.y + }] : a.getSortedSegments(), + e, f, g, h, i, j, k, l = 0, + m = d.length; + a: for (; l < m; ++l) { + c = d[l]; + e = c.x1; + f = c.x2; + g = c.y1; + h = c.y2; + var n = 0, + o = a.length; + for (; n < o; ++n) { + i = a[n]; + if (i.x1 > f) break; + if (!(i.x2 < e) && (j = i.y1, k = i.y2, !(Math.min(j, k) > Math.max(g, h)) && !(Math.max(j, k) < Math.min(g, h)) && OpenLayers.Geometry.segmentsIntersect(c, i))) { + b = !0; + break a + } + } + } + } else b = a.intersects(this); + return b + }, + getSortedSegments: function() { + for (var a = this.components.length - 1, b = Array(a), c, d, e = 0; e < a; ++e) c = this.components[e], d = this.components[e + 1], b[e] = c.x < d.x ? { + x1: c.x, + y1: c.y, + x2: d.x, + y2: d.y + } : { + x1: d.x, + y1: d.y, + x2: c.x, + y2: c.y + }; + return b.sort(function(a, b) { + return a.x1 - b.x1 + }) + }, + splitWithSegment: function(a, b) { + for (var c = !(b && !1 === b.edge), d = b && b.tolerance, e = [], f = this.getVertices(), g = [], h = [], i = !1, j, k, l, m = { + point: !0, + tolerance: d + }, n = null, o = 0, p = f.length - 2; o <= p; ++o) + if (d = f[o], g.push(d.clone()), j = f[o + 1], k = { + x1: d.x, + y1: d.y, + x2: j.x, + y2: j.y + }, k = OpenLayers.Geometry.segmentsIntersect(a, k, m), k instanceof OpenLayers.Geometry.Point && ((l = k.x === a.x1 && k.y === a.y1 || k.x === a.x2 && k.y === a.y2 || k.equals(d) || k.equals(j) ? !0 : !1) || c)) k.equals(h[h.length - + 1]) || h.push(k.clone()), !(0 === o && k.equals(d)) && !k.equals(j) && (i = !0, k.equals(d) || g.push(k), e.push(new OpenLayers.Geometry.LineString(g)), g = [k.clone()]); + i && (g.push(j.clone()), e.push(new OpenLayers.Geometry.LineString(g))); + if (0 < h.length) var q = a.x1 < a.x2 ? 1 : -1, + r = a.y1 < a.y2 ? 1 : -1, + n = { + lines: e, + points: h.sort(function(a, b) { + return q * a.x - q * b.x || r * a.y - r * b.y + }) + }; + return n + }, + split: function(a, b) { + var c = null, + d = b && b.mutual, + e, f, g, h; + if (a instanceof OpenLayers.Geometry.LineString) { + var i = this.getVertices(), + j, k, l, m, n, o = []; + g = []; + for (var p = 0, q = i.length - 2; p <= q; ++p) { + j = i[p]; + k = i[p + 1]; + l = { + x1: j.x, + y1: j.y, + x2: k.x, + y2: k.y + }; + h = h || [a]; + d && o.push(j.clone()); + for (var r = 0; r < h.length; ++r) + if (m = h[r].splitWithSegment(l, b)) + if (n = m.lines, 0 < n.length && (n.unshift(r, 1), Array.prototype.splice.apply(h, n), r += n.length - 2), d) + for (var s = 0, t = m.points.length; s < t; ++s) n = m.points[s], n.equals(j) || (o.push(n), g.push(new OpenLayers.Geometry.LineString(o)), o = n.equals(k) ? [] : [n.clone()]) + } + d && (0 < g.length && 0 < o.length) && (o.push(k.clone()), g.push(new OpenLayers.Geometry.LineString(o))) + } else c = + a.splitWith(this, b); + h && 1 < h.length ? f = !0 : h = []; + g && 1 < g.length ? e = !0 : g = []; + if (f || e) c = d ? [g, h] : h; + return c + }, + splitWith: function(a, b) { + return a.split(this, b) + }, + getVertices: function(a) { + return !0 === a ? [this.components[0], this.components[this.components.length - 1]] : !1 === a ? this.components.slice(1, this.components.length - 1) : this.components.slice() + }, + distanceTo: function(a, b) { + var c = !(b && !1 === b.edge) && b && b.details, + d, e = {}, + f = Number.POSITIVE_INFINITY; + if (a instanceof OpenLayers.Geometry.Point) { + for (var g = this.getSortedSegments(), + h = a.x, i = a.y, j, k = 0, l = g.length; k < l; ++k) + if (j = g[k], d = OpenLayers.Geometry.distanceToSegment(a, j), d.distance < f) { + if (f = d.distance, e = d, 0 === f) break + } else if (j.x2 > h && (i > j.y1 && i < j.y2 || i < j.y1 && i > j.y2)) break; + e = c ? { + distance: e.distance, + x0: e.x, + y0: e.y, + x1: h, + y1: i + } : e.distance + } else if (a instanceof OpenLayers.Geometry.LineString) { + var g = this.getSortedSegments(), + h = a.getSortedSegments(), + m, n, o = h.length, + p = { + point: !0 + }, + k = 0, + l = g.length; + a: for (; k < l; ++k) { + i = g[k]; + j = i.x1; + n = i.y1; + for (var q = 0; q < o; ++q) + if (d = h[q], m = OpenLayers.Geometry.segmentsIntersect(i, + d, p)) { + f = 0; + e = { + distance: 0, + x0: m.x, + y0: m.y, + x1: m.x, + y1: m.y + }; + break a + } else d = OpenLayers.Geometry.distanceToSegment({ + x: j, + y: n + }, d), d.distance < f && (f = d.distance, e = { + distance: f, + x0: j, + y0: n, + x1: d.x, + y1: d.y + }) + } + c || (e = e.distance); + 0 !== f && i && (d = a.distanceTo(new OpenLayers.Geometry.Point(i.x2, i.y2), b), k = c ? d.distance : d, k < f && (e = c ? { + distance: f, + x0: d.x1, + y0: d.y1, + x1: d.x0, + y1: d.y0 + } : k)) + } else e = a.distanceTo(this, b), c && (e = { + distance: e.distance, + x0: e.x1, + y0: e.y1, + x1: e.x0, + y1: e.y0 + }); + return e + }, + simplify: function(a) { + if (this && null !== this) { + var b = this.getVertices(); + if (3 > b.length) return this; + var c = function(a, b, d, i) { + for (var j = 0, k = 0, l = b, m; l < d; l++) { + m = a[b]; + var n = a[d], + o = a[l], + o = Math.abs(0.5 * (m.x * n.y + n.x * o.y + o.x * m.y - n.x * m.y - o.x * n.y - m.x * o.y)); + m = Math.sqrt(Math.pow(m.x - n.x, 2) + Math.pow(m.y - n.y, 2)); + m = 2 * (o / m); + m > j && (j = m, k = l) + } + j > i && k != b && (e.push(k), c(a, b, k, i), c(a, k, d, i)) + }, + d = b.length - 1, + e = []; + e.push(0); + for (e.push(d); b[0].equals(b[d]);) d--, e.push(d); + c(b, 0, d, a); + a = []; + e.sort(function(a, b) { + return a - b + }); + for (d = 0; d < e.length; d++) a.push(b[e[d]]); + return new OpenLayers.Geometry.LineString(a) + } + return this + }, + CLASS_NAME: "OpenLayers.Geometry.LineString" +}); +OpenLayers.Geometry.MultiLineString = OpenLayers.Class(OpenLayers.Geometry.Collection, { + componentTypes: ["OpenLayers.Geometry.LineString"], + split: function(a, b) { + for (var c = null, d = b && b.mutual, e, f, g, h, i = [], j = [a], k = 0, l = this.components.length; k < l; ++k) { + f = this.components[k]; + g = !1; + for (var m = 0; m < j.length; ++m) + if (e = f.split(j[m], b)) { + if (d) { + g = e[0]; + for (var n = 0, o = g.length; n < o; ++n) 0 === n && i.length ? i[i.length - 1].addComponent(g[n]) : i.push(new OpenLayers.Geometry.MultiLineString([g[n]])); + g = !0; + e = e[1] + } + if (e.length) { + e.unshift(m, + 1); + Array.prototype.splice.apply(j, e); + break + } + } + g || (i.length ? i[i.length - 1].addComponent(f.clone()) : i = [new OpenLayers.Geometry.MultiLineString(f.clone())]) + } + i && 1 < i.length ? g = !0 : i = []; + j && 1 < j.length ? h = !0 : j = []; + if (g || h) c = d ? [i, j] : j; + return c + }, + splitWith: function(a, b) { + var c = null, + d = b && b.mutual, + e, f, g, h, i, j; + if (a instanceof OpenLayers.Geometry.LineString) { + j = []; + i = [a]; + for (var k = 0, l = this.components.length; k < l; ++k) { + g = !1; + f = this.components[k]; + for (var m = 0; m < i.length; ++m) + if (e = i[m].split(f, b)) { + d && (g = e[0], g.length && (g.unshift(m, + 1), Array.prototype.splice.apply(i, g), m += g.length - 2), e = e[1], 0 === e.length && (e = [f.clone()])); + g = 0; + for (var n = e.length; g < n; ++g) 0 === g && j.length ? j[j.length - 1].addComponent(e[g]) : j.push(new OpenLayers.Geometry.MultiLineString([e[g]])); + g = !0 + } + g || (j.length ? j[j.length - 1].addComponent(f.clone()) : j = [new OpenLayers.Geometry.MultiLineString([f.clone()])]) + } + } else c = a.split(this); + i && 1 < i.length ? h = !0 : i = []; + j && 1 < j.length ? g = !0 : j = []; + if (h || g) c = d ? [i, j] : j; + return c + }, + CLASS_NAME: "OpenLayers.Geometry.MultiLineString" +}); +OpenLayers.Geometry.LinearRing = OpenLayers.Class(OpenLayers.Geometry.LineString, { + componentTypes: ["OpenLayers.Geometry.Point"], + addComponent: function(a, b) { + var c = !1, + d = this.components.pop(); + if (null != b || !a.equals(d)) c = OpenLayers.Geometry.Collection.prototype.addComponent.apply(this, arguments); + OpenLayers.Geometry.Collection.prototype.addComponent.apply(this, [this.components[0]]); + return c + }, + removeComponent: function(a) { + var b = this.components && 3 < this.components.length; + b && (this.components.pop(), OpenLayers.Geometry.Collection.prototype.removeComponent.apply(this, + arguments), OpenLayers.Geometry.Collection.prototype.addComponent.apply(this, [this.components[0]])); + return b + }, + move: function(a, b) { + for (var c = 0, d = this.components.length; c < d - 1; c++) this.components[c].move(a, b) + }, + rotate: function(a, b) { + for (var c = 0, d = this.components.length; c < d - 1; ++c) this.components[c].rotate(a, b) + }, + resize: function(a, b, c) { + for (var d = 0, e = this.components.length; d < e - 1; ++d) this.components[d].resize(a, b, c); + return this + }, + transform: function(a, b) { + if (a && b) { + for (var c = 0, d = this.components.length; c < d - 1; c++) this.components[c].transform(a, + b); + this.bounds = null + } + return this + }, + getCentroid: function() { + if (this.components && 2 < this.components.length) { + for (var a = 0, b = 0, c = 0; c < this.components.length - 1; c++) var d = this.components[c], + e = this.components[c + 1], + a = a + (d.x + e.x) * (d.x * e.y - e.x * d.y), + b = b + (d.y + e.y) * (d.x * e.y - e.x * d.y); + c = -1 * this.getArea(); + return new OpenLayers.Geometry.Point(a / (6 * c), b / (6 * c)) + } + return null + }, + getArea: function() { + var a = 0; + if (this.components && 2 < this.components.length) { + for (var b = a = 0, c = this.components.length; b < c - 1; b++) var d = this.components[b], + e = + this.components[b + 1], + a = a + (d.x + e.x) * (e.y - d.y); + a = -a / 2 + } + return a + }, + getGeodesicArea: function(a) { + var b = this; + if (a) { + var c = new OpenLayers.Projection("EPSG:4326"); + c.equals(a) || (b = this.clone().transform(a, c)) + } + a = 0; + c = b.components && b.components.length; + if (2 < c) { + for (var d, e, f = 0; f < c - 1; f++) d = b.components[f], e = b.components[f + 1], a += OpenLayers.Util.rad(e.x - d.x) * (2 + Math.sin(OpenLayers.Util.rad(d.y)) + Math.sin(OpenLayers.Util.rad(e.y))); + a = 40680631590769 * a / 2 + } + return a + }, + containsPoint: function(a) { + for (var b = OpenLayers.Number.limitSigDigs, + c = b(a.x, 14), a = b(a.y, 14), d = this.components.length - 1, e, f, g, h, i, j = 0, k = 0; k < d; ++k) + if (e = this.components[k], g = b(e.x, 14), e = b(e.y, 14), f = this.components[k + 1], h = b(f.x, 14), f = b(f.y, 14), e == f) { + if (a == e && (g <= h && c >= g && c <= h || g >= h && c <= g && c >= h)) { + j = -1; + break + } + } else { + i = b((a - f) * ((h - g) / (f - e)) + h, 14); + if (i == c && (e < f && a >= e && a <= f || e > f && a <= e && a >= f)) { + j = -1; + break + } + i <= c || g != h && (i < Math.min(g, h) || i > Math.max(g, h)) || (e < f && a >= e && a < f || e > f && a < e && a >= f) && ++j + } + return -1 == j ? 1 : !!(j & 1) + }, + intersects: function(a) { + var b = !1; + if ("OpenLayers.Geometry.Point" == + a.CLASS_NAME) b = this.containsPoint(a); + else if ("OpenLayers.Geometry.LineString" == a.CLASS_NAME) b = a.intersects(this); + else if ("OpenLayers.Geometry.LinearRing" == a.CLASS_NAME) b = OpenLayers.Geometry.LineString.prototype.intersects.apply(this, [a]); + else + for (var c = 0, d = a.components.length; c < d && !(b = a.components[c].intersects(this)); ++c); + return b + }, + getVertices: function(a) { + return !0 === a ? [] : this.components.slice(0, this.components.length - 1) + }, + CLASS_NAME: "OpenLayers.Geometry.LinearRing" +}); +OpenLayers.Geometry.Polygon = OpenLayers.Class(OpenLayers.Geometry.Collection, { + componentTypes: ["OpenLayers.Geometry.LinearRing"], + getArea: function() { + var a = 0; + if (this.components && 0 < this.components.length) + for (var a = a + Math.abs(this.components[0].getArea()), b = 1, c = this.components.length; b < c; b++) a -= Math.abs(this.components[b].getArea()); + return a + }, + getGeodesicArea: function(a) { + var b = 0; + if (this.components && 0 < this.components.length) + for (var b = b + Math.abs(this.components[0].getGeodesicArea(a)), c = 1, d = this.components.length; c < + d; c++) b -= Math.abs(this.components[c].getGeodesicArea(a)); + return b + }, + containsPoint: function(a) { + var b = this.components.length, + c = !1; + if (0 < b && (c = this.components[0].containsPoint(a), 1 !== c && c && 1 < b)) + for (var d, e = 1; e < b; ++e) + if (d = this.components[e].containsPoint(a)) { + c = 1 === d ? 1 : !1; + break + } + return c + }, + intersects: function(a) { + var b = !1, + c, d; + if ("OpenLayers.Geometry.Point" == a.CLASS_NAME) b = this.containsPoint(a); + else if ("OpenLayers.Geometry.LineString" == a.CLASS_NAME || "OpenLayers.Geometry.LinearRing" == a.CLASS_NAME) { + c = 0; + for (d = + this.components.length; c < d && !(b = a.intersects(this.components[c])); ++c); + if (!b) { + c = 0; + for (d = a.components.length; c < d && !(b = this.containsPoint(a.components[c])); ++c); + } + } else { + c = 0; + for (d = a.components.length; c < d && !(b = this.intersects(a.components[c])); ++c); + } + if (!b && "OpenLayers.Geometry.Polygon" == a.CLASS_NAME) { + var e = this.components[0]; + c = 0; + for (d = e.components.length; c < d && !(b = a.containsPoint(e.components[c])); ++c); + } + return b + }, + distanceTo: function(a, b) { + return b && !1 === b.edge && this.intersects(a) ? 0 : OpenLayers.Geometry.Collection.prototype.distanceTo.apply(this, [a, b]) + }, + CLASS_NAME: "OpenLayers.Geometry.Polygon" +}); +OpenLayers.Geometry.Polygon.createRegularPolygon = function(a, b, c, d) { + var e = Math.PI * (1 / c - 0.5); + d && (e += d / 180 * Math.PI); + for (var f, g = [], h = 0; h < c; ++h) f = e + 2 * h * Math.PI / c, d = a.x + b * Math.cos(f), f = a.y + b * Math.sin(f), g.push(new OpenLayers.Geometry.Point(d, f)); + a = new OpenLayers.Geometry.LinearRing(g); + return new OpenLayers.Geometry.Polygon([a]) +}; +OpenLayers.Geometry.MultiPolygon = OpenLayers.Class(OpenLayers.Geometry.Collection, { + componentTypes: ["OpenLayers.Geometry.Polygon"], + CLASS_NAME: "OpenLayers.Geometry.MultiPolygon" +}); +OpenLayers.Format.GML = OpenLayers.Class(OpenLayers.Format.XML, { + featureNS: "http://mapserver.gis.umn.edu/mapserver", + featurePrefix: "feature", + featureName: "featureMember", + layerName: "features", + geometryName: "geometry", + collectionName: "FeatureCollection", + gmlns: "http://www.opengis.net/gml", + extractAttributes: !0, + xy: !0, + initialize: function(a) { + this.regExes = { + trimSpace: /^\s*|\s*$/g, + removeSpace: /\s*/g, + splitSpace: /\s+/, + trimComma: /\s*,\s*/g + }; + OpenLayers.Format.XML.prototype.initialize.apply(this, [a]) + }, + read: function(a) { + "string" == + typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + for (var a = this.getElementsByTagNameNS(a.documentElement, this.gmlns, this.featureName), b = [], c = 0; c < a.length; c++) { + var d = this.parseFeature(a[c]); + d && b.push(d) + } + return b + }, + parseFeature: function(a) { + for (var b = "MultiPolygon Polygon MultiLineString LineString MultiPoint Point Envelope".split(" "), c, d, e, f = 0; f < b.length; ++f) + if (c = b[f], d = this.getElementsByTagNameNS(a, this.gmlns, c), 0 < d.length) { + if (e = this.parseGeometry[c.toLowerCase()]) e = e.apply(this, [d[0]]), this.internalProjection && this.externalProjection && e.transform(this.externalProjection, this.internalProjection); + else throw new TypeError("Unsupported geometry type: " + c); + break + } + var g; + c = this.getElementsByTagNameNS(a, this.gmlns, "Box"); + for (f = 0; f < c.length; ++f) b = c[f], d = this.parseGeometry.box.apply(this, [b]), b = b.parentNode, "boundedBy" === (b.localName || b.nodeName.split(":").pop()) ? g = d : e = d.toGeometry(); + var h; + this.extractAttributes && (h = this.parseAttributes(a)); + h = new OpenLayers.Feature.Vector(e, h); + h.bounds = + g; + h.gml = { + featureType: a.firstChild.nodeName.split(":")[1], + featureNS: a.firstChild.namespaceURI, + featureNSPrefix: a.firstChild.prefix + }; + for (var a = a.firstChild, i; a && !(1 == a.nodeType && (i = a.getAttribute("fid") || a.getAttribute("id")));) a = a.nextSibling; + h.fid = i; + return h + }, + parseGeometry: { + point: function(a) { + var b, c; + c = []; + b = this.getElementsByTagNameNS(a, this.gmlns, "pos"); + 0 < b.length && (c = b[0].firstChild.nodeValue, c = c.replace(this.regExes.trimSpace, ""), c = c.split(this.regExes.splitSpace)); + 0 == c.length && (b = this.getElementsByTagNameNS(a, + this.gmlns, "coordinates"), 0 < b.length && (c = b[0].firstChild.nodeValue, c = c.replace(this.regExes.removeSpace, ""), c = c.split(","))); + 0 == c.length && (b = this.getElementsByTagNameNS(a, this.gmlns, "coord"), 0 < b.length && (a = this.getElementsByTagNameNS(b[0], this.gmlns, "X"), b = this.getElementsByTagNameNS(b[0], this.gmlns, "Y"), 0 < a.length && 0 < b.length && (c = [a[0].firstChild.nodeValue, b[0].firstChild.nodeValue]))); + 2 == c.length && (c[2] = null); + return this.xy ? new OpenLayers.Geometry.Point(c[0], c[1], c[2]) : new OpenLayers.Geometry.Point(c[1], + c[0], c[2]) + }, + multipoint: function(a) { + var a = this.getElementsByTagNameNS(a, this.gmlns, "Point"), + b = []; + if (0 < a.length) + for (var c, d = 0; d < a.length; ++d)(c = this.parseGeometry.point.apply(this, [a[d]])) && b.push(c); + return new OpenLayers.Geometry.MultiPoint(b) + }, + linestring: function(a, b) { + var c, d; + d = []; + var e = []; + c = this.getElementsByTagNameNS(a, this.gmlns, "posList"); + if (0 < c.length) { + d = this.getChildValue(c[0]); + d = d.replace(this.regExes.trimSpace, ""); + d = d.split(this.regExes.splitSpace); + var f = parseInt(c[0].getAttribute("dimension")), + g, h, i; + for (c = 0; c < d.length / f; ++c) g = c * f, h = d[g], i = d[g + 1], g = 2 == f ? null : d[g + 2], this.xy ? e.push(new OpenLayers.Geometry.Point(h, i, g)) : e.push(new OpenLayers.Geometry.Point(i, h, g)) + } + if (0 == d.length && (c = this.getElementsByTagNameNS(a, this.gmlns, "coordinates"), 0 < c.length)) { + d = this.getChildValue(c[0]); + d = d.replace(this.regExes.trimSpace, ""); + d = d.replace(this.regExes.trimComma, ","); + f = d.split(this.regExes.splitSpace); + for (c = 0; c < f.length; ++c) d = f[c].split(","), 2 == d.length && (d[2] = null), this.xy ? e.push(new OpenLayers.Geometry.Point(d[0], + d[1], d[2])) : e.push(new OpenLayers.Geometry.Point(d[1], d[0], d[2])) + } + d = null; + 0 != e.length && (d = b ? new OpenLayers.Geometry.LinearRing(e) : new OpenLayers.Geometry.LineString(e)); + return d + }, + multilinestring: function(a) { + var a = this.getElementsByTagNameNS(a, this.gmlns, "LineString"), + b = []; + if (0 < a.length) + for (var c, d = 0; d < a.length; ++d)(c = this.parseGeometry.linestring.apply(this, [a[d]])) && b.push(c); + return new OpenLayers.Geometry.MultiLineString(b) + }, + polygon: function(a) { + var a = this.getElementsByTagNameNS(a, this.gmlns, "LinearRing"), + b = []; + if (0 < a.length) + for (var c, d = 0; d < a.length; ++d)(c = this.parseGeometry.linestring.apply(this, [a[d], !0])) && b.push(c); + return new OpenLayers.Geometry.Polygon(b) + }, + multipolygon: function(a) { + var a = this.getElementsByTagNameNS(a, this.gmlns, "Polygon"), + b = []; + if (0 < a.length) + for (var c, d = 0; d < a.length; ++d)(c = this.parseGeometry.polygon.apply(this, [a[d]])) && b.push(c); + return new OpenLayers.Geometry.MultiPolygon(b) + }, + envelope: function(a) { + var b = [], + c, d, e = this.getElementsByTagNameNS(a, this.gmlns, "lowerCorner"); + if (0 < e.length) { + c = []; + 0 < e.length && (c = e[0].firstChild.nodeValue, c = c.replace(this.regExes.trimSpace, ""), c = c.split(this.regExes.splitSpace)); + 2 == c.length && (c[2] = null); + var f = this.xy ? new OpenLayers.Geometry.Point(c[0], c[1], c[2]) : new OpenLayers.Geometry.Point(c[1], c[0], c[2]) + } + a = this.getElementsByTagNameNS(a, this.gmlns, "upperCorner"); + if (0 < a.length) { + c = []; + 0 < a.length && (c = a[0].firstChild.nodeValue, c = c.replace(this.regExes.trimSpace, ""), c = c.split(this.regExes.splitSpace)); + 2 == c.length && (c[2] = null); + var g = this.xy ? new OpenLayers.Geometry.Point(c[0], + c[1], c[2]) : new OpenLayers.Geometry.Point(c[1], c[0], c[2]) + } + f && g && (b.push(new OpenLayers.Geometry.Point(f.x, f.y)), b.push(new OpenLayers.Geometry.Point(g.x, f.y)), b.push(new OpenLayers.Geometry.Point(g.x, g.y)), b.push(new OpenLayers.Geometry.Point(f.x, g.y)), b.push(new OpenLayers.Geometry.Point(f.x, f.y)), b = new OpenLayers.Geometry.LinearRing(b), d = new OpenLayers.Geometry.Polygon([b])); + return d + }, + box: function(a) { + var b = this.getElementsByTagNameNS(a, this.gmlns, "coordinates"), + c = a = null; + 0 < b.length && (b = b[0].firstChild.nodeValue, + b = b.split(" "), 2 == b.length && (a = b[0].split(","), c = b[1].split(","))); + if (null !== a && null !== c) return new OpenLayers.Bounds(parseFloat(a[0]), parseFloat(a[1]), parseFloat(c[0]), parseFloat(c[1])) + } + }, + parseAttributes: function(a) { + for (var b = {}, a = a.firstChild, c, d, e; a;) { + if (1 == a.nodeType) { + a = a.childNodes; + for (c = 0; c < a.length; ++c) + if (d = a[c], 1 == d.nodeType) + if (e = d.childNodes, 1 == e.length) { + if (e = e[0], 3 == e.nodeType || 4 == e.nodeType) d = d.prefix ? d.nodeName.split(":")[1] : d.nodeName, e = e.nodeValue.replace(this.regExes.trimSpace, ""), + b[d] = e + } else b[d.nodeName.split(":").pop()] = null; + break + } + a = a.nextSibling + } + return b + }, + write: function(a) { + OpenLayers.Util.isArray(a) || (a = [a]); + for (var b = this.createElementNS("http://www.opengis.net/wfs", "wfs:" + this.collectionName), c = 0; c < a.length; c++) b.appendChild(this.createFeatureXML(a[c])); + return OpenLayers.Format.XML.prototype.write.apply(this, [b]) + }, + createFeatureXML: function(a) { + var b = this.buildGeometryNode(a.geometry), + c = this.createElementNS(this.featureNS, this.featurePrefix + ":" + this.geometryName); + c.appendChild(b); + var b = this.createElementNS(this.gmlns, "gml:" + this.featureName), + d = this.createElementNS(this.featureNS, this.featurePrefix + ":" + this.layerName); + d.setAttribute("fid", a.fid || a.id); + d.appendChild(c); + for (var e in a.attributes) { + var c = this.createTextNode(a.attributes[e]), + f = this.createElementNS(this.featureNS, this.featurePrefix + ":" + e.substring(e.lastIndexOf(":") + 1)); + f.appendChild(c); + d.appendChild(f) + } + b.appendChild(d); + return b + }, + buildGeometryNode: function(a) { + this.externalProjection && this.internalProjection && (a = + a.clone(), a.transform(this.internalProjection, this.externalProjection)); + var b = a.CLASS_NAME; + return this.buildGeometry[b.substring(b.lastIndexOf(".") + 1).toLowerCase()].apply(this, [a]) + }, + buildGeometry: { + point: function(a) { + var b = this.createElementNS(this.gmlns, "gml:Point"); + b.appendChild(this.buildCoordinatesNode(a)); + return b + }, + multipoint: function(a) { + for (var b = this.createElementNS(this.gmlns, "gml:MultiPoint"), a = a.components, c, d, e = 0; e < a.length; e++) c = this.createElementNS(this.gmlns, "gml:pointMember"), d = this.buildGeometry.point.apply(this, [a[e]]), c.appendChild(d), b.appendChild(c); + return b + }, + linestring: function(a) { + var b = this.createElementNS(this.gmlns, "gml:LineString"); + b.appendChild(this.buildCoordinatesNode(a)); + return b + }, + multilinestring: function(a) { + for (var b = this.createElementNS(this.gmlns, "gml:MultiLineString"), a = a.components, c, d, e = 0; e < a.length; ++e) c = this.createElementNS(this.gmlns, "gml:lineStringMember"), d = this.buildGeometry.linestring.apply(this, [a[e]]), c.appendChild(d), b.appendChild(c); + return b + }, + linearring: function(a) { + var b = this.createElementNS(this.gmlns, + "gml:LinearRing"); + b.appendChild(this.buildCoordinatesNode(a)); + return b + }, + polygon: function(a) { + for (var b = this.createElementNS(this.gmlns, "gml:Polygon"), a = a.components, c, d, e = 0; e < a.length; ++e) c = 0 == e ? "outerBoundaryIs" : "innerBoundaryIs", c = this.createElementNS(this.gmlns, "gml:" + c), d = this.buildGeometry.linearring.apply(this, [a[e]]), c.appendChild(d), b.appendChild(c); + return b + }, + multipolygon: function(a) { + for (var b = this.createElementNS(this.gmlns, "gml:MultiPolygon"), a = a.components, c, d, e = 0; e < a.length; ++e) c = this.createElementNS(this.gmlns, + "gml:polygonMember"), d = this.buildGeometry.polygon.apply(this, [a[e]]), c.appendChild(d), b.appendChild(c); + return b + }, + bounds: function(a) { + var b = this.createElementNS(this.gmlns, "gml:Box"); + b.appendChild(this.buildCoordinatesNode(a)); + return b + } + }, + buildCoordinatesNode: function(a) { + var b = this.createElementNS(this.gmlns, "gml:coordinates"); + b.setAttribute("decimal", "."); + b.setAttribute("cs", ","); + b.setAttribute("ts", " "); + var c = []; + if (a instanceof OpenLayers.Bounds) c.push(a.left + "," + a.bottom), c.push(a.right + "," + a.top); + else + for (var a = a.components ? a.components : [a], d = 0; d < a.length; d++) c.push(a[d].x + "," + a[d].y); + c = this.createTextNode(c.join(" ")); + b.appendChild(c); + return b + }, + CLASS_NAME: "OpenLayers.Format.GML" +}); +OpenLayers.Format.GML || (OpenLayers.Format.GML = {}); +OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + gml: "http://www.opengis.net/gml", + xlink: "http://www.w3.org/1999/xlink", + xsi: "http://www.w3.org/2001/XMLSchema-instance", + wfs: "http://www.opengis.net/wfs" + }, + defaultPrefix: "gml", + schemaLocation: null, + featureType: null, + featureNS: null, + geometryName: "geometry", + extractAttributes: !0, + srsName: null, + xy: !0, + geometryTypes: null, + singleFeatureType: null, + regExes: { + trimSpace: /^\s*|\s*$/g, + removeSpace: /\s*/g, + splitSpace: /\s+/, + trimComma: /\s*,\s*/g, + featureMember: /^(.*:)?featureMembers?$/ + }, + initialize: function(a) { + OpenLayers.Format.XML.prototype.initialize.apply(this, [a]); + this.setGeometryTypes(); + a && a.featureNS && this.setNamespace("feature", a.featureNS); + this.singleFeatureType = !a || typeof a.featureType === "string" + }, + read: function(a) { + typeof a == "string" && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + if (a && a.nodeType == 9) a = a.documentElement; + var b = []; + this.readNode(a, { + features: b + }, true); + if (b.length == 0) { + var c = this.getElementsByTagNameNS(a, this.namespaces.gml, "featureMember"); + if (c.length) + for (var a = + 0, d = c.length; a < d; ++a) this.readNode(c[a], { + features: b + }, true); + else { + c = this.getElementsByTagNameNS(a, this.namespaces.gml, "featureMembers"); + c.length && this.readNode(c[0], { + features: b + }, true) + } + } + return b + }, + readNode: function(a, b, c) { + if (c === true && this.autoConfig === true) { + this.featureType = null; + delete this.namespaceAlias[this.featureNS]; + delete this.namespaces.feature; + this.featureNS = null + } + if (!this.featureNS && !(a.prefix in this.namespaces) && a.parentNode.namespaceURI == this.namespaces.gml && this.regExes.featureMember.test(a.parentNode.nodeName)) { + this.featureType = + a.nodeName.split(":").pop(); + this.setNamespace("feature", a.namespaceURI); + this.featureNS = a.namespaceURI; + this.autoConfig = true + } + return OpenLayers.Format.XML.prototype.readNode.apply(this, [a, b]) + }, + readers: { + gml: { + featureMember: function(a, b) { + this.readChildNodes(a, b) + }, + featureMembers: function(a, b) { + this.readChildNodes(a, b) + }, + name: function(a, b) { + b.name = this.getChildValue(a) + }, + boundedBy: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + if (c.components && c.components.length > 0) b.bounds = c.components[0] + }, + Point: function(a, + b) { + var c = { + points: [] + }; + this.readChildNodes(a, c); + if (!b.components) b.components = []; + b.components.push(c.points[0]) + }, + coordinates: function(a, b) { + for (var c = this.getChildValue(a).replace(this.regExes.trimSpace, ""), c = c.replace(this.regExes.trimComma, ","), c = c.split(this.regExes.splitSpace), d, e = c.length, f = Array(e), g = 0; g < e; ++g) { + d = c[g].split(","); + f[g] = this.xy ? new OpenLayers.Geometry.Point(d[0], d[1], d[2]) : new OpenLayers.Geometry.Point(d[1], d[0], d[2]) + } + b.points = f + }, + coord: function(a, b) { + var c = {}; + this.readChildNodes(a, + c); + if (!b.points) b.points = []; + b.points.push(new OpenLayers.Geometry.Point(c.x, c.y, c.z)) + }, + X: function(a, b) { + b.x = this.getChildValue(a) + }, + Y: function(a, b) { + b.y = this.getChildValue(a) + }, + Z: function(a, b) { + b.z = this.getChildValue(a) + }, + MultiPoint: function(a, b) { + var c = { + components: [] + }; + this.readChildNodes(a, c); + b.components = [new OpenLayers.Geometry.MultiPoint(c.components)] + }, + pointMember: function(a, b) { + this.readChildNodes(a, b) + }, + LineString: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + if (!b.components) b.components = []; + b.components.push(new OpenLayers.Geometry.LineString(c.points)) + }, + MultiLineString: function(a, b) { + var c = { + components: [] + }; + this.readChildNodes(a, c); + b.components = [new OpenLayers.Geometry.MultiLineString(c.components)] + }, + lineStringMember: function(a, b) { + this.readChildNodes(a, b) + }, + Polygon: function(a, b) { + var c = { + outer: null, + inner: [] + }; + this.readChildNodes(a, c); + c.inner.unshift(c.outer); + if (!b.components) b.components = []; + b.components.push(new OpenLayers.Geometry.Polygon(c.inner)) + }, + LinearRing: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + b.components = [new OpenLayers.Geometry.LinearRing(c.points)] + }, + MultiPolygon: function(a, b) { + var c = { + components: [] + }; + this.readChildNodes(a, c); + b.components = [new OpenLayers.Geometry.MultiPolygon(c.components)] + }, + polygonMember: function(a, b) { + this.readChildNodes(a, b) + }, + GeometryCollection: function(a, b) { + var c = { + components: [] + }; + this.readChildNodes(a, c); + b.components = [new OpenLayers.Geometry.Collection(c.components)] + }, + geometryMember: function(a, b) { + this.readChildNodes(a, b) + } + }, + feature: { + "*": function(a, b) { + var c, d = a.localName || a.nodeName.split(":").pop(); + b.features ? !this.singleFeatureType && + OpenLayers.Util.indexOf(this.featureType, d) !== -1 ? c = "_typeName" : d === this.featureType && (c = "_typeName") : a.childNodes.length == 0 || a.childNodes.length == 1 && a.firstChild.nodeType == 3 ? this.extractAttributes && (c = "_attribute") : c = "_geometry"; + c && this.readers.feature[c].apply(this, [a, b]) + }, + _typeName: function(a, b) { + var c = { + components: [], + attributes: {} + }; + this.readChildNodes(a, c); + if (c.name) c.attributes.name = c.name; + var d = new OpenLayers.Feature.Vector(c.components[0], c.attributes); + if (!this.singleFeatureType) { + d.type = a.nodeName.split(":").pop(); + d.namespace = a.namespaceURI + } + var e = a.getAttribute("fid") || this.getAttributeNS(a, this.namespaces.gml, "id"); + if (e) d.fid = e; + this.internalProjection && (this.externalProjection && d.geometry) && d.geometry.transform(this.externalProjection, this.internalProjection); + if (c.bounds) d.bounds = c.bounds; + b.features.push(d) + }, + _geometry: function(a, b) { + if (!this.geometryName) this.geometryName = a.nodeName.split(":").pop(); + this.readChildNodes(a, b) + }, + _attribute: function(a, b) { + var c = a.localName || a.nodeName.split(":").pop(), + d = this.getChildValue(a); + b.attributes[c] = d + } + }, + wfs: { + FeatureCollection: function(a, b) { + this.readChildNodes(a, b) + } + } + }, + write: function(a) { + a = this.writeNode("gml:" + (OpenLayers.Util.isArray(a) ? "featureMembers" : "featureMember"), a); + this.setAttributeNS(a, this.namespaces.xsi, "xsi:schemaLocation", this.schemaLocation); + return OpenLayers.Format.XML.prototype.write.apply(this, [a]) + }, + writers: { + gml: { + featureMember: function(a) { + var b = this.createElementNSPlus("gml:featureMember"); + this.writeNode("feature:_typeName", a, b); + return b + }, + MultiPoint: function(a) { + for (var b = + this.createElementNSPlus("gml:MultiPoint"), a = a.components || [a], c = 0, d = a.length; c < d; ++c) this.writeNode("pointMember", a[c], b); + return b + }, + pointMember: function(a) { + var b = this.createElementNSPlus("gml:pointMember"); + this.writeNode("Point", a, b); + return b + }, + MultiLineString: function(a) { + for (var b = this.createElementNSPlus("gml:MultiLineString"), a = a.components || [a], c = 0, d = a.length; c < d; ++c) this.writeNode("lineStringMember", a[c], b); + return b + }, + lineStringMember: function(a) { + var b = this.createElementNSPlus("gml:lineStringMember"); + this.writeNode("LineString", a, b); + return b + }, + MultiPolygon: function(a) { + for (var b = this.createElementNSPlus("gml:MultiPolygon"), a = a.components || [a], c = 0, d = a.length; c < d; ++c) this.writeNode("polygonMember", a[c], b); + return b + }, + polygonMember: function(a) { + var b = this.createElementNSPlus("gml:polygonMember"); + this.writeNode("Polygon", a, b); + return b + }, + GeometryCollection: function(a) { + for (var b = this.createElementNSPlus("gml:GeometryCollection"), c = 0, d = a.components.length; c < d; ++c) this.writeNode("geometryMember", a.components[c], + b); + return b + }, + geometryMember: function(a) { + var b = this.createElementNSPlus("gml:geometryMember"), + a = this.writeNode("feature:_geometry", a); + b.appendChild(a.firstChild); + return b + } + }, + feature: { + _typeName: function(a) { + var b = this.createElementNSPlus("feature:" + this.featureType, { + attributes: { + fid: a.fid + } + }); + a.geometry && this.writeNode("feature:_geometry", a.geometry, b); + for (var c in a.attributes) { + var d = a.attributes[c]; + d != null && this.writeNode("feature:_attribute", { + name: c, + value: d + }, b) + } + return b + }, + _geometry: function(a) { + this.externalProjection && + this.internalProjection && (a = a.clone().transform(this.internalProjection, this.externalProjection)); + var b = this.createElementNSPlus("feature:" + this.geometryName), + a = this.writeNode("gml:" + this.geometryTypes[a.CLASS_NAME], a, b); + this.srsName && a.setAttribute("srsName", this.srsName); + return b + }, + _attribute: function(a) { + return this.createElementNSPlus("feature:" + a.name, { + value: a.value + }) + } + }, + wfs: { + FeatureCollection: function(a) { + for (var b = this.createElementNSPlus("wfs:FeatureCollection"), c = 0, d = a.length; c < d; ++c) this.writeNode("gml:featureMember", + a[c], b); + return b + } + } + }, + setGeometryTypes: function() { + this.geometryTypes = { + "OpenLayers.Geometry.Point": "Point", + "OpenLayers.Geometry.MultiPoint": "MultiPoint", + "OpenLayers.Geometry.LineString": "LineString", + "OpenLayers.Geometry.MultiLineString": "MultiLineString", + "OpenLayers.Geometry.Polygon": "Polygon", + "OpenLayers.Geometry.MultiPolygon": "MultiPolygon", + "OpenLayers.Geometry.Collection": "GeometryCollection" + } + }, + CLASS_NAME: "OpenLayers.Format.GML.Base" +}); +OpenLayers.Format.GML.v3 = OpenLayers.Class(OpenLayers.Format.GML.Base, { + schemaLocation: "http://www.opengis.net/gml http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsf.xsd", + curve: !1, + multiCurve: !0, + surface: !1, + multiSurface: !0, + initialize: function(a) { + OpenLayers.Format.GML.Base.prototype.initialize.apply(this, [a]) + }, + readers: { + gml: OpenLayers.Util.applyDefaults({ + featureMembers: function(a, b) { + this.readChildNodes(a, b) + }, + Curve: function(a, b) { + var c = { + points: [] + }; + this.readChildNodes(a, c); + b.components || + (b.components = []); + b.components.push(new OpenLayers.Geometry.LineString(c.points)) + }, + segments: function(a, b) { + this.readChildNodes(a, b) + }, + LineStringSegment: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + c.points && Array.prototype.push.apply(b.points, c.points) + }, + pos: function(a, b) { + var c = this.getChildValue(a).replace(this.regExes.trimSpace, "").split(this.regExes.splitSpace), + c = this.xy ? new OpenLayers.Geometry.Point(c[0], c[1], c[2]) : new OpenLayers.Geometry.Point(c[1], c[0], c[2]); + b.points = [c] + }, + posList: function(a, + b) { + for (var c = this.getChildValue(a).replace(this.regExes.trimSpace, "").split(this.regExes.splitSpace), d = parseInt(a.getAttribute("dimension")) || 2, e, f, g, h = Array(c.length / d), i = 0, j = c.length; i < j; i += d) e = c[i], f = c[i + 1], g = 2 == d ? void 0 : c[i + 2], h[i / d] = this.xy ? new OpenLayers.Geometry.Point(e, f, g) : new OpenLayers.Geometry.Point(f, e, g); + b.points = h + }, + Surface: function(a, b) { + this.readChildNodes(a, b) + }, + patches: function(a, b) { + this.readChildNodes(a, b) + }, + PolygonPatch: function(a, b) { + this.readers.gml.Polygon.apply(this, [a, b]) + }, + exterior: function(a, + b) { + var c = {}; + this.readChildNodes(a, c); + b.outer = c.components[0] + }, + interior: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + b.inner.push(c.components[0]) + }, + MultiCurve: function(a, b) { + var c = { + components: [] + }; + this.readChildNodes(a, c); + 0 < c.components.length && (b.components = [new OpenLayers.Geometry.MultiLineString(c.components)]) + }, + curveMember: function(a, b) { + this.readChildNodes(a, b) + }, + MultiSurface: function(a, b) { + var c = { + components: [] + }; + this.readChildNodes(a, c); + 0 < c.components.length && (b.components = [new OpenLayers.Geometry.MultiPolygon(c.components)]) + }, + surfaceMember: function(a, b) { + this.readChildNodes(a, b) + }, + surfaceMembers: function(a, b) { + this.readChildNodes(a, b) + }, + pointMembers: function(a, b) { + this.readChildNodes(a, b) + }, + lineStringMembers: function(a, b) { + this.readChildNodes(a, b) + }, + polygonMembers: function(a, b) { + this.readChildNodes(a, b) + }, + geometryMembers: function(a, b) { + this.readChildNodes(a, b) + }, + Envelope: function(a, b) { + var c = { + points: Array(2) + }; + this.readChildNodes(a, c); + b.components || (b.components = []); + var d = c.points[0], + c = c.points[1]; + b.components.push(new OpenLayers.Bounds(d.x, + d.y, c.x, c.y)) + }, + lowerCorner: function(a, b) { + var c = {}; + this.readers.gml.pos.apply(this, [a, c]); + b.points[0] = c.points[0] + }, + upperCorner: function(a, b) { + var c = {}; + this.readers.gml.pos.apply(this, [a, c]); + b.points[1] = c.points[0] + } + }, OpenLayers.Format.GML.Base.prototype.readers.gml), + feature: OpenLayers.Format.GML.Base.prototype.readers.feature, + wfs: OpenLayers.Format.GML.Base.prototype.readers.wfs + }, + write: function(a) { + a = this.writeNode("gml:" + (OpenLayers.Util.isArray(a) ? "featureMembers" : "featureMember"), a); + this.setAttributeNS(a, + this.namespaces.xsi, "xsi:schemaLocation", this.schemaLocation); + return OpenLayers.Format.XML.prototype.write.apply(this, [a]) + }, + writers: { + gml: OpenLayers.Util.applyDefaults({ + featureMembers: function(a) { + for (var b = this.createElementNSPlus("gml:featureMembers"), c = 0, d = a.length; c < d; ++c) this.writeNode("feature:_typeName", a[c], b); + return b + }, + Point: function(a) { + var b = this.createElementNSPlus("gml:Point"); + this.writeNode("pos", a, b); + return b + }, + pos: function(a) { + return this.createElementNSPlus("gml:pos", { + value: this.xy ? a.x + + " " + a.y : a.y + " " + a.x + }) + }, + LineString: function(a) { + var b = this.createElementNSPlus("gml:LineString"); + this.writeNode("posList", a.components, b); + return b + }, + Curve: function(a) { + var b = this.createElementNSPlus("gml:Curve"); + this.writeNode("segments", a, b); + return b + }, + segments: function(a) { + var b = this.createElementNSPlus("gml:segments"); + this.writeNode("LineStringSegment", a, b); + return b + }, + LineStringSegment: function(a) { + var b = this.createElementNSPlus("gml:LineStringSegment"); + this.writeNode("posList", a.components, b); + return b + }, + posList: function(a) { + for (var b = a.length, c = Array(b), d, e = 0; e < b; ++e) d = a[e], c[e] = this.xy ? d.x + " " + d.y : d.y + " " + d.x; + return this.createElementNSPlus("gml:posList", { + value: c.join(" ") + }) + }, + Surface: function(a) { + var b = this.createElementNSPlus("gml:Surface"); + this.writeNode("patches", a, b); + return b + }, + patches: function(a) { + var b = this.createElementNSPlus("gml:patches"); + this.writeNode("PolygonPatch", a, b); + return b + }, + PolygonPatch: function(a) { + var b = this.createElementNSPlus("gml:PolygonPatch", { + attributes: { + interpolation: "planar" + } + }); + this.writeNode("exterior", a.components[0], b); + for (var c = 1, d = a.components.length; c < d; ++c) this.writeNode("interior", a.components[c], b); + return b + }, + Polygon: function(a) { + var b = this.createElementNSPlus("gml:Polygon"); + this.writeNode("exterior", a.components[0], b); + for (var c = 1, d = a.components.length; c < d; ++c) this.writeNode("interior", a.components[c], b); + return b + }, + exterior: function(a) { + var b = this.createElementNSPlus("gml:exterior"); + this.writeNode("LinearRing", a, b); + return b + }, + interior: function(a) { + var b = this.createElementNSPlus("gml:interior"); + this.writeNode("LinearRing", a, b); + return b + }, + LinearRing: function(a) { + var b = this.createElementNSPlus("gml:LinearRing"); + this.writeNode("posList", a.components, b); + return b + }, + MultiCurve: function(a) { + for (var b = this.createElementNSPlus("gml:MultiCurve"), a = a.components || [a], c = 0, d = a.length; c < d; ++c) this.writeNode("curveMember", a[c], b); + return b + }, + curveMember: function(a) { + var b = this.createElementNSPlus("gml:curveMember"); + this.curve ? this.writeNode("Curve", a, b) : this.writeNode("LineString", a, b); + return b + }, + MultiSurface: function(a) { + for (var b = + this.createElementNSPlus("gml:MultiSurface"), a = a.components || [a], c = 0, d = a.length; c < d; ++c) this.writeNode("surfaceMember", a[c], b); + return b + }, + surfaceMember: function(a) { + var b = this.createElementNSPlus("gml:surfaceMember"); + this.surface ? this.writeNode("Surface", a, b) : this.writeNode("Polygon", a, b); + return b + }, + Envelope: function(a) { + var b = this.createElementNSPlus("gml:Envelope"); + this.writeNode("lowerCorner", a, b); + this.writeNode("upperCorner", a, b); + this.srsName && b.setAttribute("srsName", this.srsName); + return b + }, + lowerCorner: function(a) { + return this.createElementNSPlus("gml:lowerCorner", { + value: this.xy ? a.left + " " + a.bottom : a.bottom + " " + a.left + }) + }, + upperCorner: function(a) { + return this.createElementNSPlus("gml:upperCorner", { + value: this.xy ? a.right + " " + a.top : a.top + " " + a.right + }) + } + }, OpenLayers.Format.GML.Base.prototype.writers.gml), + feature: OpenLayers.Format.GML.Base.prototype.writers.feature, + wfs: OpenLayers.Format.GML.Base.prototype.writers.wfs + }, + setGeometryTypes: function() { + this.geometryTypes = { + "OpenLayers.Geometry.Point": "Point", + "OpenLayers.Geometry.MultiPoint": "MultiPoint", + "OpenLayers.Geometry.LineString": !0 === + this.curve ? "Curve" : "LineString", + "OpenLayers.Geometry.MultiLineString": !1 === this.multiCurve ? "MultiLineString" : "MultiCurve", + "OpenLayers.Geometry.Polygon": !0 === this.surface ? "Surface" : "Polygon", + "OpenLayers.Geometry.MultiPolygon": !1 === this.multiSurface ? "MultiPolygon" : "MultiSurface", + "OpenLayers.Geometry.Collection": "GeometryCollection" + } + }, + CLASS_NAME: "OpenLayers.Format.GML.v3" +}); +OpenLayers.Format.Filter.v1_1_0 = OpenLayers.Class(OpenLayers.Format.GML.v3, OpenLayers.Format.Filter.v1, { + VERSION: "1.1.0", + schemaLocation: "http://www.opengis.net/ogc/filter/1.1.0/filter.xsd", + initialize: function(a) { + OpenLayers.Format.GML.v3.prototype.initialize.apply(this, [a]) + }, + readers: { + ogc: OpenLayers.Util.applyDefaults({ + PropertyIsEqualTo: function(a, b) { + var c = a.getAttribute("matchCase"), + c = new OpenLayers.Filter.Comparison({ + type: OpenLayers.Filter.Comparison.EQUAL_TO, + matchCase: !("false" === c || "0" === c) + }); + this.readChildNodes(a, + c); + b.filters.push(c) + }, + PropertyIsNotEqualTo: function(a, b) { + var c = a.getAttribute("matchCase"), + c = new OpenLayers.Filter.Comparison({ + type: OpenLayers.Filter.Comparison.NOT_EQUAL_TO, + matchCase: !("false" === c || "0" === c) + }); + this.readChildNodes(a, c); + b.filters.push(c) + }, + PropertyIsLike: function(a, b) { + var c = new OpenLayers.Filter.Comparison({ + type: OpenLayers.Filter.Comparison.LIKE + }); + this.readChildNodes(a, c); + var d = a.getAttribute("wildCard"), + e = a.getAttribute("singleChar"), + f = a.getAttribute("escapeChar"); + c.value2regex(d, e, + f); + b.filters.push(c) + } + }, OpenLayers.Format.Filter.v1.prototype.readers.ogc), + gml: OpenLayers.Format.GML.v3.prototype.readers.gml, + feature: OpenLayers.Format.GML.v3.prototype.readers.feature + }, + writers: { + ogc: OpenLayers.Util.applyDefaults({ + PropertyIsEqualTo: function(a) { + var b = this.createElementNSPlus("ogc:PropertyIsEqualTo", { + attributes: { + matchCase: a.matchCase + } + }); + this.writeNode("PropertyName", a, b); + this.writeOgcExpression(a.value, b); + return b + }, + PropertyIsNotEqualTo: function(a) { + var b = this.createElementNSPlus("ogc:PropertyIsNotEqualTo", { + attributes: { + matchCase: a.matchCase + } + }); + this.writeNode("PropertyName", a, b); + this.writeOgcExpression(a.value, b); + return b + }, + PropertyIsLike: function(a) { + var b = this.createElementNSPlus("ogc:PropertyIsLike", { + attributes: { + matchCase: a.matchCase, + wildCard: "*", + singleChar: ".", + escapeChar: "!" + } + }); + this.writeNode("PropertyName", a, b); + this.writeNode("Literal", a.regex2value(), b); + return b + }, + BBOX: function(a) { + var b = this.createElementNSPlus("ogc:BBOX"); + a.property && this.writeNode("PropertyName", a, b); + var c = this.writeNode("gml:Envelope", + a.value); + a.projection && c.setAttribute("srsName", a.projection); + b.appendChild(c); + return b + }, + SortBy: function(a) { + for (var b = this.createElementNSPlus("ogc:SortBy"), c = 0, d = a.length; c < d; c++) this.writeNode("ogc:SortProperty", a[c], b); + return b + }, + SortProperty: function(a) { + var b = this.createElementNSPlus("ogc:SortProperty"); + this.writeNode("ogc:PropertyName", a, b); + this.writeNode("ogc:SortOrder", "DESC" == a.order ? "DESC" : "ASC", b); + return b + }, + SortOrder: function(a) { + return this.createElementNSPlus("ogc:SortOrder", { + value: a + }) + } + }, + OpenLayers.Format.Filter.v1.prototype.writers.ogc), + gml: OpenLayers.Format.GML.v3.prototype.writers.gml, + feature: OpenLayers.Format.GML.v3.prototype.writers.feature + }, + writeSpatial: function(a, b) { + var c = this.createElementNSPlus("ogc:" + b); + this.writeNode("PropertyName", a, c); + if (a.value instanceof OpenLayers.Filter.Function) this.writeNode("Function", a.value, c); + else { + var d; + d = a.value instanceof OpenLayers.Geometry ? this.writeNode("feature:_geometry", a.value).firstChild : this.writeNode("gml:Envelope", a.value); + a.projection && + d.setAttribute("srsName", a.projection); + c.appendChild(d) + } + return c + }, + CLASS_NAME: "OpenLayers.Format.Filter.v1_1_0" +}); +OpenLayers.Format.OWSCommon = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, { + defaultVersion: "1.0.0", + getVersion: function(a) { + var b = this.version; + b || ((a = a.getAttribute("xmlns:ows")) && "1.1" === a.substring(a.lastIndexOf("/") + 1) && (b = "1.1.0"), b || (b = this.defaultVersion)); + return b + }, + CLASS_NAME: "OpenLayers.Format.OWSCommon" +}); +OpenLayers.Format.OWSCommon.v1 = OpenLayers.Class(OpenLayers.Format.XML, { + regExes: { + trimSpace: /^\s*|\s*$/g, + removeSpace: /\s*/g, + splitSpace: /\s+/, + trimComma: /\s*,\s*/g + }, + read: function(a, b) { + OpenLayers.Util.applyDefaults(b, this.options); + var c = {}; + this.readChildNodes(a, c); + return c + }, + readers: { + ows: { + Exception: function(a, b) { + var c = { + code: a.getAttribute("exceptionCode"), + locator: a.getAttribute("locator"), + texts: [] + }; + b.exceptions.push(c); + this.readChildNodes(a, c) + }, + ExceptionText: function(a, b) { + var c = this.getChildValue(a); + b.texts.push(c) + }, + ServiceIdentification: function(a, b) { + b.serviceIdentification = {}; + this.readChildNodes(a, b.serviceIdentification) + }, + Title: function(a, b) { + b.title = this.getChildValue(a) + }, + Abstract: function(a, b) { + b["abstract"] = this.getChildValue(a) + }, + Keywords: function(a, b) { + b.keywords = {}; + this.readChildNodes(a, b.keywords) + }, + Keyword: function(a, b) { + b[this.getChildValue(a)] = !0 + }, + ServiceType: function(a, b) { + b.serviceType = { + codeSpace: a.getAttribute("codeSpace"), + value: this.getChildValue(a) + } + }, + ServiceTypeVersion: function(a, b) { + b.serviceTypeVersion = + this.getChildValue(a) + }, + Fees: function(a, b) { + b.fees = this.getChildValue(a) + }, + AccessConstraints: function(a, b) { + b.accessConstraints = this.getChildValue(a) + }, + ServiceProvider: function(a, b) { + b.serviceProvider = {}; + this.readChildNodes(a, b.serviceProvider) + }, + ProviderName: function(a, b) { + b.providerName = this.getChildValue(a) + }, + ProviderSite: function(a, b) { + b.providerSite = this.getAttributeNS(a, this.namespaces.xlink, "href") + }, + ServiceContact: function(a, b) { + b.serviceContact = {}; + this.readChildNodes(a, b.serviceContact) + }, + IndividualName: function(a, + b) { + b.individualName = this.getChildValue(a) + }, + PositionName: function(a, b) { + b.positionName = this.getChildValue(a) + }, + ContactInfo: function(a, b) { + b.contactInfo = {}; + this.readChildNodes(a, b.contactInfo) + }, + Phone: function(a, b) { + b.phone = {}; + this.readChildNodes(a, b.phone) + }, + Voice: function(a, b) { + b.voice = this.getChildValue(a) + }, + Address: function(a, b) { + b.address = {}; + this.readChildNodes(a, b.address) + }, + DeliveryPoint: function(a, b) { + b.deliveryPoint = this.getChildValue(a) + }, + City: function(a, b) { + b.city = this.getChildValue(a) + }, + AdministrativeArea: function(a, + b) { + b.administrativeArea = this.getChildValue(a) + }, + PostalCode: function(a, b) { + b.postalCode = this.getChildValue(a) + }, + Country: function(a, b) { + b.country = this.getChildValue(a) + }, + ElectronicMailAddress: function(a, b) { + b.electronicMailAddress = this.getChildValue(a) + }, + Role: function(a, b) { + b.role = this.getChildValue(a) + }, + OperationsMetadata: function(a, b) { + b.operationsMetadata = {}; + this.readChildNodes(a, b.operationsMetadata) + }, + Operation: function(a, b) { + var c = a.getAttribute("name"); + b[c] = {}; + this.readChildNodes(a, b[c]) + }, + DCP: function(a, + b) { + b.dcp = {}; + this.readChildNodes(a, b.dcp) + }, + HTTP: function(a, b) { + b.http = {}; + this.readChildNodes(a, b.http) + }, + Get: function(a, b) { + b.get || (b.get = []); + var c = { + url: this.getAttributeNS(a, this.namespaces.xlink, "href") + }; + this.readChildNodes(a, c); + b.get.push(c) + }, + Post: function(a, b) { + b.post || (b.post = []); + var c = { + url: this.getAttributeNS(a, this.namespaces.xlink, "href") + }; + this.readChildNodes(a, c); + b.post.push(c) + }, + Parameter: function(a, b) { + b.parameters || (b.parameters = {}); + var c = a.getAttribute("name"); + b.parameters[c] = {}; + this.readChildNodes(a, + b.parameters[c]) + }, + Constraint: function(a, b) { + b.constraints || (b.constraints = {}); + var c = a.getAttribute("name"); + b.constraints[c] = {}; + this.readChildNodes(a, b.constraints[c]) + }, + Value: function(a, b) { + b[this.getChildValue(a)] = !0 + }, + OutputFormat: function(a, b) { + b.formats.push({ + value: this.getChildValue(a) + }); + this.readChildNodes(a, b) + }, + WGS84BoundingBox: function(a, b) { + var c = {}; + c.crs = a.getAttribute("crs"); + b.BoundingBox ? b.BoundingBox.push(c) : (b.projection = c.crs, c = b); + this.readChildNodes(a, c) + }, + BoundingBox: function(a, b) { + this.readers.ows.WGS84BoundingBox.apply(this, [a, b]) + }, + LowerCorner: function(a, b) { + var c = this.getChildValue(a).replace(this.regExes.trimSpace, ""), + c = c.replace(this.regExes.trimComma, ","), + c = c.split(this.regExes.splitSpace); + b.left = c[0]; + b.bottom = c[1] + }, + UpperCorner: function(a, b) { + var c = this.getChildValue(a).replace(this.regExes.trimSpace, ""), + c = c.replace(this.regExes.trimComma, ","), + c = c.split(this.regExes.splitSpace); + b.right = c[0]; + b.top = c[1]; + b.bounds = new OpenLayers.Bounds(b.left, b.bottom, b.right, b.top); + delete b.left; + delete b.bottom; + delete b.right; + delete b.top + }, + Language: function(a, b) { + b.language = this.getChildValue(a) + } + } + }, + writers: { + ows: { + BoundingBox: function(a) { + var b = this.createElementNSPlus("ows:BoundingBox", { + attributes: { + crs: a.projection + } + }); + this.writeNode("ows:LowerCorner", a, b); + this.writeNode("ows:UpperCorner", a, b); + return b + }, + LowerCorner: function(a) { + return this.createElementNSPlus("ows:LowerCorner", { + value: a.bounds.left + " " + a.bounds.bottom + }) + }, + UpperCorner: function(a) { + return this.createElementNSPlus("ows:UpperCorner", { + value: a.bounds.right + " " + a.bounds.top + }) + }, + Identifier: function(a) { + return this.createElementNSPlus("ows:Identifier", { + value: a + }) + }, + Title: function(a) { + return this.createElementNSPlus("ows:Title", { + value: a + }) + }, + Abstract: function(a) { + return this.createElementNSPlus("ows:Abstract", { + value: a + }) + }, + OutputFormat: function(a) { + return this.createElementNSPlus("ows:OutputFormat", { + value: a + }) + } + } + }, + CLASS_NAME: "OpenLayers.Format.OWSCommon.v1" +}); +OpenLayers.Format.OWSCommon.v1_0_0 = OpenLayers.Class(OpenLayers.Format.OWSCommon.v1, { + namespaces: { + ows: "http://www.opengis.net/ows", + xlink: "http://www.w3.org/1999/xlink" + }, + readers: { + ows: OpenLayers.Util.applyDefaults({ + ExceptionReport: function(a, b) { + b.success = !1; + b.exceptionReport = { + version: a.getAttribute("version"), + language: a.getAttribute("language"), + exceptions: [] + }; + this.readChildNodes(a, b.exceptionReport) + } + }, OpenLayers.Format.OWSCommon.v1.prototype.readers.ows) + }, + writers: { + ows: OpenLayers.Format.OWSCommon.v1.prototype.writers.ows + }, + CLASS_NAME: "OpenLayers.Format.OWSCommon.v1_0_0" +}); +OpenLayers.Format.WFST.v1_1_0 = OpenLayers.Class(OpenLayers.Format.Filter.v1_1_0, OpenLayers.Format.WFST.v1, { + version: "1.1.0", + schemaLocations: { + wfs: "http://schemas.opengis.net/wfs/1.1.0/wfs.xsd" + }, + initialize: function(a) { + OpenLayers.Format.Filter.v1_1_0.prototype.initialize.apply(this, [a]); + OpenLayers.Format.WFST.v1.prototype.initialize.apply(this, [a]) + }, + readNode: function(a, b) { + return OpenLayers.Format.GML.v3.prototype.readNode.apply(this, [a, b]) + }, + readers: { + wfs: OpenLayers.Util.applyDefaults({ + FeatureCollection: function(a, + b) { + b.numberOfFeatures = parseInt(a.getAttribute("numberOfFeatures")); + OpenLayers.Format.WFST.v1.prototype.readers.wfs.FeatureCollection.apply(this, arguments) + }, + TransactionResponse: function(a, b) { + b.insertIds = []; + b.success = !1; + this.readChildNodes(a, b) + }, + TransactionSummary: function(a, b) { + b.success = !0 + }, + InsertResults: function(a, b) { + this.readChildNodes(a, b) + }, + Feature: function(a, b) { + var c = { + fids: [] + }; + this.readChildNodes(a, c); + b.insertIds.push(c.fids[0]) + } + }, OpenLayers.Format.WFST.v1.prototype.readers.wfs), + gml: OpenLayers.Format.GML.v3.prototype.readers.gml, + feature: OpenLayers.Format.GML.v3.prototype.readers.feature, + ogc: OpenLayers.Format.Filter.v1_1_0.prototype.readers.ogc, + ows: OpenLayers.Format.OWSCommon.v1_0_0.prototype.readers.ows + }, + writers: { + wfs: OpenLayers.Util.applyDefaults({ + GetFeature: function(a) { + var b = OpenLayers.Format.WFST.v1.prototype.writers.wfs.GetFeature.apply(this, arguments); + a && this.setAttributes(b, { + resultType: a.resultType, + startIndex: a.startIndex, + count: a.count + }); + return b + }, + Query: function(a) { + var a = OpenLayers.Util.extend({ + featureNS: this.featureNS, + featurePrefix: this.featurePrefix, + featureType: this.featureType, + srsName: this.srsName + }, a), + b = a.featurePrefix, + c = this.createElementNSPlus("wfs:Query", { + attributes: { + typeName: (b ? b + ":" : "") + a.featureType, + srsName: a.srsName + } + }); + a.featureNS && c.setAttribute("xmlns:" + b, a.featureNS); + if (a.propertyNames) + for (var b = 0, d = a.propertyNames.length; b < d; b++) this.writeNode("wfs:PropertyName", { + property: a.propertyNames[b] + }, c); + a.filter && (OpenLayers.Format.WFST.v1_1_0.prototype.setFilterProperty.call(this, a.filter), this.writeNode("ogc:Filter", + a.filter, c)); + return c + }, + PropertyName: function(a) { + return this.createElementNSPlus("wfs:PropertyName", { + value: a.property + }) + } + }, OpenLayers.Format.WFST.v1.prototype.writers.wfs), + gml: OpenLayers.Format.GML.v3.prototype.writers.gml, + feature: OpenLayers.Format.GML.v3.prototype.writers.feature, + ogc: OpenLayers.Format.Filter.v1_1_0.prototype.writers.ogc + }, + CLASS_NAME: "OpenLayers.Format.WFST.v1_1_0" +}); +OpenLayers.Protocol = OpenLayers.Class({ + format: null, + options: null, + autoDestroy: !0, + defaultFilter: null, + initialize: function(a) { + a = a || {}; + OpenLayers.Util.extend(this, a); + this.options = a + }, + mergeWithDefaultFilter: function(a) { + return a && this.defaultFilter ? new OpenLayers.Filter.Logical({ + type: OpenLayers.Filter.Logical.AND, + filters: [this.defaultFilter, a] + }) : a || this.defaultFilter || void 0 + }, + destroy: function() { + this.format = this.options = null + }, + read: function(a) { + a = a || {}; + a.filter = this.mergeWithDefaultFilter(a.filter) + }, + create: function() {}, + update: function() {}, + "delete": function() {}, + commit: function() {}, + abort: function() {}, + createCallback: function(a, b, c) { + return OpenLayers.Function.bind(function() { + a.apply(this, [b, c]) + }, this) + }, + CLASS_NAME: "OpenLayers.Protocol" +}); +OpenLayers.Protocol.Response = OpenLayers.Class({ + code: null, + requestType: null, + last: !0, + features: null, + data: null, + reqFeatures: null, + priv: null, + error: null, + initialize: function(a) { + OpenLayers.Util.extend(this, a) + }, + success: function() { + return 0 < this.code + }, + CLASS_NAME: "OpenLayers.Protocol.Response" +}); +OpenLayers.Protocol.Response.SUCCESS = 1; +OpenLayers.Protocol.Response.FAILURE = 0; +OpenLayers.Format.JSON = OpenLayers.Class(OpenLayers.Format, { + indent: " ", + space: " ", + newline: "\n", + level: 0, + pretty: !1, + nativeJSON: function() { + return !(!window.JSON || !("function" == typeof JSON.parse && "function" == typeof JSON.stringify)) + }(), + read: function(a, b) { + var c; + if (this.nativeJSON) c = JSON.parse(a, b); + else try { + if (/^[\],:{}\s]*$/.test(a.replace(/\\["\\\/bfnrtu]/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, "")) && (c = eval("(" + a + ")"), "function" === + typeof b)) { + var d = function(a, c) { + if (c && "object" === typeof c) + for (var e in c) c.hasOwnProperty(e) && (c[e] = d(e, c[e])); + return b(a, c) + }; + c = d("", c) + } + } catch (e) {} + this.keepData && (this.data = c); + return c + }, + write: function(a, b) { + this.pretty = !!b; + var c = null, + d = typeof a; + if (this.serialize[d]) try { + c = !this.pretty && this.nativeJSON ? JSON.stringify(a) : this.serialize[d].apply(this, [a]) + } catch (e) { + OpenLayers.Console.error("Trouble serializing: " + e) + } + return c + }, + writeIndent: function() { + var a = []; + if (this.pretty) + for (var b = 0; b < this.level; ++b) a.push(this.indent); + return a.join("") + }, + writeNewline: function() { + return this.pretty ? this.newline : "" + }, + writeSpace: function() { + return this.pretty ? this.space : "" + }, + serialize: { + object: function(a) { + if (null == a) return "null"; + if (a.constructor == Date) return this.serialize.date.apply(this, [a]); + if (a.constructor == Array) return this.serialize.array.apply(this, [a]); + var b = ["{"]; + this.level += 1; + var c, d, e, f = !1; + for (c in a) a.hasOwnProperty(c) && (d = OpenLayers.Format.JSON.prototype.write.apply(this, [c, this.pretty]), e = OpenLayers.Format.JSON.prototype.write.apply(this, [a[c], this.pretty]), null != d && null != e && (f && b.push(","), b.push(this.writeNewline(), this.writeIndent(), d, ":", this.writeSpace(), e), f = !0)); + this.level -= 1; + b.push(this.writeNewline(), this.writeIndent(), "}"); + return b.join("") + }, + array: function(a) { + var b, c = ["["]; + this.level += 1; + for (var d = 0, e = a.length; d < e; ++d) b = OpenLayers.Format.JSON.prototype.write.apply(this, [a[d], this.pretty]), null != b && (0 < d && c.push(","), c.push(this.writeNewline(), this.writeIndent(), b)); + this.level -= 1; + c.push(this.writeNewline(), this.writeIndent(), + "]"); + return c.join("") + }, + string: function(a) { + var b = { + "\u0008": "\\b", + "\t": "\\t", + "\n": "\\n", + "\u000c": "\\f", + "\r": "\\r", + '"': '\\"', + "\\": "\\\\" + }; + return /["\\\x00-\x1f]/.test(a) ? '"' + a.replace(/([\x00-\x1f\\"])/g, function(a, d) { + var e = b[d]; + if (e) return e; + e = d.charCodeAt(); + return "\\u00" + Math.floor(e / 16).toString(16) + (e % 16).toString(16) + }) + '"' : '"' + a + '"' + }, + number: function(a) { + return isFinite(a) ? "" + a : "null" + }, + "boolean": function(a) { + return "" + a + }, + date: function(a) { + function b(a) { + return 10 > a ? "0" + a : a + } + return '"' + a.getFullYear() + "-" + + b(a.getMonth() + 1) + "-" + b(a.getDate()) + "T" + b(a.getHours()) + ":" + b(a.getMinutes()) + ":" + b(a.getSeconds()) + '"' + } + }, + CLASS_NAME: "OpenLayers.Format.JSON" +}); +OpenLayers.Format.GeoJSON = OpenLayers.Class(OpenLayers.Format.JSON, { + ignoreExtraDims: !1, + read: function(a, b, c) { + var b = b ? b : "FeatureCollection", + d = null, + e = null; + if (e = "string" == typeof a ? OpenLayers.Format.JSON.prototype.read.apply(this, [a, c]) : a) + if ("string" != typeof e.type) OpenLayers.Console.error("Bad GeoJSON - no type: " + a); + else { + if (this.isValidType(e, b)) switch (b) { + case "Geometry": + try { + d = this.parseGeometry(e) + } catch (f) { + OpenLayers.Console.error(f) + } + break; + case "Feature": + try { + d = this.parseFeature(e), d.type = "Feature" + } catch (g) { + OpenLayers.Console.error(g) + } + break; + case "FeatureCollection": + switch (d = [], e.type) { + case "Feature": + try { + d.push(this.parseFeature(e)) + } catch (h) { + d = null, OpenLayers.Console.error(h) + } + break; + case "FeatureCollection": + a = 0; + for (b = e.features.length; a < b; ++a) try { + d.push(this.parseFeature(e.features[a])) + } catch (i) { + d = null, OpenLayers.Console.error(i) + } + break; + default: + try { + var j = this.parseGeometry(e); + d.push(new OpenLayers.Feature.Vector(j)) + } catch (k) { + d = null, OpenLayers.Console.error(k) + } + } + } + } else OpenLayers.Console.error("Bad JSON: " + a); + return d + }, + isValidType: function(a, + b) { + var c = !1; + switch (b) { + case "Geometry": + -1 == OpenLayers.Util.indexOf("Point MultiPoint LineString MultiLineString Polygon MultiPolygon Box GeometryCollection".split(" "), a.type) ? OpenLayers.Console.error("Unsupported geometry type: " + a.type) : c = !0; + break; + case "FeatureCollection": + c = !0; + break; + default: + a.type == b ? c = !0 : OpenLayers.Console.error("Cannot convert types from " + a.type + " to " + b) + } + return c + }, + parseFeature: function(a) { + var b, c, d; + c = a.properties ? a.properties : {}; + d = a.geometry && a.geometry.bbox || a.bbox; + try { + b = this.parseGeometry(a.geometry) + } catch (e) { + throw e; + } + b = new OpenLayers.Feature.Vector(b, c); + d && (b.bounds = OpenLayers.Bounds.fromArray(d)); + a.id && (b.fid = a.id); + return b + }, + parseGeometry: function(a) { + if (null == a) return null; + var b, c = !1; + if ("GeometryCollection" == a.type) { + if (!OpenLayers.Util.isArray(a.geometries)) throw "GeometryCollection must have geometries array: " + a; + b = a.geometries.length; + for (var c = Array(b), d = 0; d < b; ++d) c[d] = this.parseGeometry.apply(this, [a.geometries[d]]); + b = new OpenLayers.Geometry.Collection(c); + c = !0 + } else { + if (!OpenLayers.Util.isArray(a.coordinates)) throw "Geometry must have coordinates array: " + + a; + if (!this.parseCoords[a.type.toLowerCase()]) throw "Unsupported geometry type: " + a.type; + try { + b = this.parseCoords[a.type.toLowerCase()].apply(this, [a.coordinates]) + } catch (e) { + throw e; + } + } + this.internalProjection && (this.externalProjection && !c) && b.transform(this.externalProjection, this.internalProjection); + return b + }, + parseCoords: { + point: function(a) { + if (!1 == this.ignoreExtraDims && 2 != a.length) throw "Only 2D points are supported: " + a; + return new OpenLayers.Geometry.Point(a[0], a[1]) + }, + multipoint: function(a) { + for (var b = [], + c = null, d = 0, e = a.length; d < e; ++d) { + try { + c = this.parseCoords.point.apply(this, [a[d]]) + } catch (f) { + throw f; + } + b.push(c) + } + return new OpenLayers.Geometry.MultiPoint(b) + }, + linestring: function(a) { + for (var b = [], c = null, d = 0, e = a.length; d < e; ++d) { + try { + c = this.parseCoords.point.apply(this, [a[d]]) + } catch (f) { + throw f; + } + b.push(c) + } + return new OpenLayers.Geometry.LineString(b) + }, + multilinestring: function(a) { + for (var b = [], c = null, d = 0, e = a.length; d < e; ++d) { + try { + c = this.parseCoords.linestring.apply(this, [a[d]]) + } catch (f) { + throw f; + } + b.push(c) + } + return new OpenLayers.Geometry.MultiLineString(b) + }, + polygon: function(a) { + for (var b = [], c, d, e = 0, f = a.length; e < f; ++e) { + try { + d = this.parseCoords.linestring.apply(this, [a[e]]) + } catch (g) { + throw g; + } + c = new OpenLayers.Geometry.LinearRing(d.components); + b.push(c) + } + return new OpenLayers.Geometry.Polygon(b) + }, + multipolygon: function(a) { + for (var b = [], c = null, d = 0, e = a.length; d < e; ++d) { + try { + c = this.parseCoords.polygon.apply(this, [a[d]]) + } catch (f) { + throw f; + } + b.push(c) + } + return new OpenLayers.Geometry.MultiPolygon(b) + }, + box: function(a) { + if (2 != a.length) throw "GeoJSON box coordinates must have 2 elements"; + return new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing([new OpenLayers.Geometry.Point(a[0][0], a[0][1]), new OpenLayers.Geometry.Point(a[1][0], a[0][1]), new OpenLayers.Geometry.Point(a[1][0], a[1][1]), new OpenLayers.Geometry.Point(a[0][0], a[1][1]), new OpenLayers.Geometry.Point(a[0][0], a[0][1])])]) + } + }, + write: function(a, b) { + var c = { + type: null + }; + if (OpenLayers.Util.isArray(a)) { + c.type = "FeatureCollection"; + var d = a.length; + c.features = Array(d); + for (var e = 0; e < d; ++e) { + var f = a[e]; + if (!f instanceof OpenLayers.Feature.Vector) throw "FeatureCollection only supports collections of features: " + + f; + c.features[e] = this.extract.feature.apply(this, [f]) + } + } else 0 == a.CLASS_NAME.indexOf("OpenLayers.Geometry") ? c = this.extract.geometry.apply(this, [a]) : a instanceof OpenLayers.Feature.Vector && (c = this.extract.feature.apply(this, [a]), a.layer && a.layer.projection && (c.crs = this.createCRSObject(a))); + return OpenLayers.Format.JSON.prototype.write.apply(this, [c, b]) + }, + createCRSObject: function(a) { + var a = a.layer.projection.toString(), + b = {}; + a.match(/epsg:/i) && (a = parseInt(a.substring(a.indexOf(":") + 1)), b = 4326 == a ? { + type: "name", + properties: { + name: "urn:ogc:def:crs:OGC:1.3:CRS84" + } + } : { + type: "name", + properties: { + name: "EPSG:" + a + } + }); + return b + }, + extract: { + feature: function(a) { + var b = this.extract.geometry.apply(this, [a.geometry]), + b = { + type: "Feature", + properties: a.attributes, + geometry: b + }; + null != a.fid && (b.id = a.fid); + return b + }, + geometry: function(a) { + if (null == a) return null; + this.internalProjection && this.externalProjection && (a = a.clone(), a.transform(this.internalProjection, this.externalProjection)); + var b = a.CLASS_NAME.split(".")[2], + a = this.extract[b.toLowerCase()].apply(this, [a]); + return "Collection" == b ? { + type: "GeometryCollection", + geometries: a + } : { + type: b, + coordinates: a + } + }, + point: function(a) { + return [a.x, a.y] + }, + multipoint: function(a) { + for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push(this.extract.point.apply(this, [a.components[c]])); + return b + }, + linestring: function(a) { + for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push(this.extract.point.apply(this, [a.components[c]])); + return b + }, + multilinestring: function(a) { + for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push(this.extract.linestring.apply(this, [a.components[c]])); + return b + }, + polygon: function(a) { + for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push(this.extract.linestring.apply(this, [a.components[c]])); + return b + }, + multipolygon: function(a) { + for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push(this.extract.polygon.apply(this, [a.components[c]])); + return b + }, + collection: function(a) { + for (var b = a.components.length, c = Array(b), d = 0; d < b; ++d) c[d] = this.extract.geometry.apply(this, [a.components[d]]); + return c + } + }, + CLASS_NAME: "OpenLayers.Format.GeoJSON" +}); +OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, { + url: null, + params: null, + callback: null, + callbackTemplate: "OpenLayers.Protocol.Script.registry.${id}", + callbackKey: "callback", + callbackPrefix: "", + scope: null, + format: null, + pendingRequests: null, + srsInBBOX: !1, + initialize: function(a) { + a = a || {}; + this.params = {}; + this.pendingRequests = {}; + OpenLayers.Protocol.prototype.initialize.apply(this, arguments); + this.format || (this.format = new OpenLayers.Format.GeoJSON); + if (!this.filterToParams && OpenLayers.Format.QueryStringFilter) { + var b = + new OpenLayers.Format.QueryStringFilter({ + srsInBBOX: this.srsInBBOX + }); + this.filterToParams = function(a, d) { + return b.write(a, d) + } + } + }, + read: function(a) { + OpenLayers.Protocol.prototype.read.apply(this, arguments); + a = OpenLayers.Util.applyDefaults(a, this.options); + a.params = OpenLayers.Util.applyDefaults(a.params, this.options.params); + a.filter && this.filterToParams && (a.params = this.filterToParams(a.filter, a.params)); + var b = new OpenLayers.Protocol.Response({ + requestType: "read" + }), + c = this.createRequest(a.url, a.params, OpenLayers.Function.bind(function(c) { + b.data = + c; + this.handleRead(b, a) + }, this)); + b.priv = c; + return b + }, + createRequest: function(a, b, c) { + var c = OpenLayers.Protocol.Script.register(c), + d = OpenLayers.String.format(this.callbackTemplate, { + id: c + }), + b = OpenLayers.Util.extend({}, b); + b[this.callbackKey] = this.callbackPrefix + d; + a = OpenLayers.Util.urlAppend(a, OpenLayers.Util.getParameterString(b)); + b = document.createElement("script"); + b.type = "text/javascript"; + b.src = a; + b.id = "OpenLayers_Protocol_Script_" + c; + this.pendingRequests[b.id] = b; + document.getElementsByTagName("head")[0].appendChild(b); + return b + }, + destroyRequest: function(a) { + OpenLayers.Protocol.Script.unregister(a.id.split("_").pop()); + delete this.pendingRequests[a.id]; + a.parentNode && a.parentNode.removeChild(a) + }, + handleRead: function(a, b) { + this.handleResponse(a, b) + }, + handleResponse: function(a, b) { + b.callback && (a.data ? (a.features = this.parseFeatures(a.data), a.code = OpenLayers.Protocol.Response.SUCCESS) : a.code = OpenLayers.Protocol.Response.FAILURE, this.destroyRequest(a.priv), b.callback.call(b.scope, a)) + }, + parseFeatures: function(a) { + return this.format.read(a) + }, + abort: function(a) { + if (a) this.destroyRequest(a.priv); + else + for (var b in this.pendingRequests) this.destroyRequest(this.pendingRequests[b]) + }, + destroy: function() { + this.abort(); + delete this.params; + delete this.format; + OpenLayers.Protocol.prototype.destroy.apply(this) + }, + CLASS_NAME: "OpenLayers.Protocol.Script" +}); +(function() { + var a = OpenLayers.Protocol.Script, + b = 0; + a.registry = {}; + a.register = function(c) { + var d = "c" + ++b; + a.registry[d] = function() { + c.apply(this, arguments) + }; + return d + }; + a.unregister = function(b) { + delete a.registry[b] + } +})(); +OpenLayers.Control.Panel = OpenLayers.Class(OpenLayers.Control, { + controls: null, + autoActivate: !0, + defaultControl: null, + saveState: !1, + allowDepress: !1, + activeState: null, + initialize: function(a) { + OpenLayers.Control.prototype.initialize.apply(this, [a]); + this.controls = []; + this.activeState = {} + }, + destroy: function() { + this.map && this.map.events.unregister("buttonclick", this, this.onButtonClick); + OpenLayers.Control.prototype.destroy.apply(this, arguments); + for (var a, b = this.controls.length - 1; 0 <= b; b--) a = this.controls[b], a.events && + a.events.un({ + activate: this.iconOn, + deactivate: this.iconOff + }), a.panel_div = null; + this.activeState = null + }, + activate: function() { + if (OpenLayers.Control.prototype.activate.apply(this, arguments)) { + for (var a, b = 0, c = this.controls.length; b < c; b++) a = this.controls[b], (a === this.defaultControl || this.saveState && this.activeState[a.id]) && a.activate(); + !0 === this.saveState && (this.defaultControl = null); + this.redraw(); + return !0 + } + return !1 + }, + deactivate: function() { + if (OpenLayers.Control.prototype.deactivate.apply(this, arguments)) { + for (var a, + b = 0, c = this.controls.length; b < c; b++) a = this.controls[b], this.activeState[a.id] = a.deactivate(); + this.redraw(); + return !0 + } + return !1 + }, + draw: function() { + OpenLayers.Control.prototype.draw.apply(this, arguments); + this.outsideViewport ? (this.events.attachToElement(this.div), this.events.register("buttonclick", this, this.onButtonClick)) : this.map.events.register("buttonclick", this, this.onButtonClick); + this.addControlsToMap(this.controls); + return this.div + }, + redraw: function() { + for (var a = this.div.childNodes.length - 1; 0 <= a; a--) this.div.removeChild(this.div.childNodes[a]); + this.div.innerHTML = ""; + if (this.active) + for (var a = 0, b = this.controls.length; a < b; a++) this.div.appendChild(this.controls[a].panel_div) + }, + activateControl: function(a) { + if (!this.active) return !1; + if (a.type == OpenLayers.Control.TYPE_BUTTON) a.trigger(); + else if (a.type == OpenLayers.Control.TYPE_TOGGLE) a.active ? a.deactivate() : a.activate(); + else if (this.allowDepress && a.active) a.deactivate(); + else { + for (var b, c = 0, d = this.controls.length; c < d; c++) b = this.controls[c], b != a && (b.type === OpenLayers.Control.TYPE_TOOL || null == b.type) && + b.deactivate(); + a.activate() + } + }, + addControls: function(a) { + OpenLayers.Util.isArray(a) || (a = [a]); + this.controls = this.controls.concat(a); + for (var b = 0, c = a.length; b < c; b++) { + var d = a[b], + e = this.createControlMarkup(d); + OpenLayers.Element.addClass(e, d.displayClass + "ItemInactive"); + OpenLayers.Element.addClass(e, "olButton"); + "" != d.title && !e.title && (e.title = d.title); + d.panel_div = e + } + this.map && (this.addControlsToMap(a), this.redraw()) + }, + createControlMarkup: function() { + return document.createElement("div") + }, + addControlsToMap: function(a) { + for (var b, + c = 0, d = a.length; c < d; c++) b = a[c], !0 === b.autoActivate ? (b.autoActivate = !1, this.map.addControl(b), b.autoActivate = !0) : (this.map.addControl(b), b.deactivate()), b.events.on({ + activate: this.iconOn, + deactivate: this.iconOff + }) + }, + iconOn: function() { + var a = this.panel_div; + a.className = a.className.replace(RegExp("\\b(" + this.displayClass + "Item)Inactive\\b"), "$1Active") + }, + iconOff: function() { + var a = this.panel_div; + a.className = a.className.replace(RegExp("\\b(" + this.displayClass + "Item)Active\\b"), "$1Inactive") + }, + onButtonClick: function(a) { + for (var b = + this.controls, a = a.buttonElement, c = b.length - 1; 0 <= c; --c) + if (b[c].panel_div === a) { + this.activateControl(b[c]); + break + } + }, + getControlsBy: function(a, b) { + var c = "function" == typeof b.test; + return OpenLayers.Array.filter(this.controls, function(d) { + return d[a] == b || c && b.test(d[a]) + }) + }, + getControlsByName: function(a) { + return this.getControlsBy("name", a) + }, + getControlsByClass: function(a) { + return this.getControlsBy("CLASS_NAME", a) + }, + CLASS_NAME: "OpenLayers.Control.Panel" +}); +OpenLayers.Control.ZoomIn = OpenLayers.Class(OpenLayers.Control, { + type: OpenLayers.Control.TYPE_BUTTON, + trigger: function() { + this.map.zoomIn() + }, + CLASS_NAME: "OpenLayers.Control.ZoomIn" +}); +OpenLayers.Control.ZoomOut = OpenLayers.Class(OpenLayers.Control, { + type: OpenLayers.Control.TYPE_BUTTON, + trigger: function() { + this.map.zoomOut() + }, + CLASS_NAME: "OpenLayers.Control.ZoomOut" +}); +OpenLayers.Control.ZoomToMaxExtent = OpenLayers.Class(OpenLayers.Control, { + type: OpenLayers.Control.TYPE_BUTTON, + trigger: function() { + this.map && this.map.zoomToMaxExtent() + }, + CLASS_NAME: "OpenLayers.Control.ZoomToMaxExtent" +}); +OpenLayers.Control.ZoomPanel = OpenLayers.Class(OpenLayers.Control.Panel, { + initialize: function(a) { + OpenLayers.Control.Panel.prototype.initialize.apply(this, [a]); + this.addControls([new OpenLayers.Control.ZoomIn, new OpenLayers.Control.ZoomToMaxExtent, new OpenLayers.Control.ZoomOut]) + }, + CLASS_NAME: "OpenLayers.Control.ZoomPanel" +}); +OpenLayers.Layer.HTTPRequest = OpenLayers.Class(OpenLayers.Layer, { + URL_HASH_FACTOR: (Math.sqrt(5) - 1) / 2, + url: null, + params: null, + reproject: !1, + initialize: function(a, b, c, d) { + OpenLayers.Layer.prototype.initialize.apply(this, [a, d]); + this.url = b; + this.params || (this.params = OpenLayers.Util.extend({}, c)) + }, + destroy: function() { + this.params = this.url = null; + OpenLayers.Layer.prototype.destroy.apply(this, arguments) + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.HTTPRequest(this.name, this.url, this.params, this.getOptions())); + return a = OpenLayers.Layer.prototype.clone.apply(this, [a]) + }, + setUrl: function(a) { + this.url = a + }, + mergeNewParams: function(a) { + this.params = OpenLayers.Util.extend(this.params, a); + a = this.redraw(); + null != this.map && this.map.events.triggerEvent("changelayer", { + layer: this, + property: "params" + }); + return a + }, + redraw: function(a) { + return a ? this.mergeNewParams({ + _olSalt: Math.random() + }) : OpenLayers.Layer.prototype.redraw.apply(this, []) + }, + selectUrl: function(a, b) { + for (var c = 1, d = 0, e = a.length; d < e; d++) c *= a.charCodeAt(d) * this.URL_HASH_FACTOR, + c -= Math.floor(c); + return b[Math.floor(c * b.length)] + }, + getFullRequestString: function(a, b) { + var c = b || this.url, + d = OpenLayers.Util.extend({}, this.params), + d = OpenLayers.Util.extend(d, a), + e = OpenLayers.Util.getParameterString(d); + OpenLayers.Util.isArray(c) && (c = this.selectUrl(e, c)); + var e = OpenLayers.Util.upperCaseObject(OpenLayers.Util.getParameters(c)), + f; + for (f in d) f.toUpperCase() in e && delete d[f]; + e = OpenLayers.Util.getParameterString(d); + return OpenLayers.Util.urlAppend(c, e) + }, + CLASS_NAME: "OpenLayers.Layer.HTTPRequest" +}); +OpenLayers.Tile = OpenLayers.Class({ + events: null, + eventListeners: null, + id: null, + layer: null, + url: null, + bounds: null, + size: null, + position: null, + isLoading: !1, + initialize: function(a, b, c, d, e, f) { + this.layer = a; + this.position = b.clone(); + this.setBounds(c); + this.url = d; + e && (this.size = e.clone()); + this.id = OpenLayers.Util.createUniqueID("Tile_"); + OpenLayers.Util.extend(this, f); + this.events = new OpenLayers.Events(this); + if (this.eventListeners instanceof Object) this.events.on(this.eventListeners) + }, + unload: function() { + this.isLoading && (this.isLoading = !1, this.events.triggerEvent("unload")) + }, + destroy: function() { + this.position = this.size = this.bounds = this.layer = null; + this.eventListeners && this.events.un(this.eventListeners); + this.events.destroy(); + this.events = this.eventListeners = null + }, + draw: function(a) { + a || this.clear(); + var b = this.shouldDraw(); + b && !a && (b = !1 !== this.events.triggerEvent("beforedraw")); + return b + }, + shouldDraw: function() { + var a = !1, + b = this.layer.maxExtent; + if (b) { + var c = this.layer.map, + c = c.baseLayer.wrapDateLine && c.getMaxExtent(); + this.bounds.intersectsBounds(b, { + inclusive: !1, + worldBounds: c + }) && (a = !0) + } + return a || this.layer.displayOutsideMaxExtent + }, + setBounds: function(a) { + a = a.clone(); + if (this.layer.map.baseLayer.wrapDateLine) var b = this.layer.map.getMaxExtent(), + c = this.layer.map.getResolution(), + a = a.wrapDateLine(b, { + leftTolerance: c, + rightTolerance: c + }); + this.bounds = a + }, + moveTo: function(a, b, c) { + null == c && (c = !0); + this.setBounds(a); + this.position = b.clone(); + c && this.draw() + }, + clear: function() {}, + CLASS_NAME: "OpenLayers.Tile" +}); +OpenLayers.Tile.Image = OpenLayers.Class(OpenLayers.Tile, { + url: null, + imgDiv: null, + frame: null, + imageReloadAttempts: null, + layerAlphaHack: null, + asyncRequestId: null, + blankImageUrl: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAQAIBRAA7", + maxGetUrlLength: null, + canvasContext: null, + crossOriginKeyword: null, + initialize: function(a, b, c, d, e, f) { + OpenLayers.Tile.prototype.initialize.apply(this, arguments); + this.url = d; + this.layerAlphaHack = this.layer.alpha && OpenLayers.Util.alphaHack(); + if (null != this.maxGetUrlLength || + this.layer.gutter || this.layerAlphaHack) this.frame = document.createElement("div"), this.frame.style.position = "absolute", this.frame.style.overflow = "hidden"; + null != this.maxGetUrlLength && OpenLayers.Util.extend(this, OpenLayers.Tile.Image.IFrame) + }, + destroy: function() { + this.imgDiv && (this.clear(), this.frame = this.imgDiv = null); + this.asyncRequestId = null; + OpenLayers.Tile.prototype.destroy.apply(this, arguments) + }, + draw: function() { + var a = OpenLayers.Tile.prototype.draw.apply(this, arguments); + a ? (this.layer != this.layer.map.baseLayer && + this.layer.reproject && (this.bounds = this.getBoundsFromBaseLayer(this.position)), this.isLoading ? this._loadEvent = "reload" : (this.isLoading = !0, this._loadEvent = "loadstart"), this.positionTile(), this.renderTile()) : this.unload(); + return a + }, + renderTile: function() { + this.layer.div.appendChild(this.getTile()); + if (this.layer.async) { + var a = this.asyncRequestId = (this.asyncRequestId || 0) + 1; + this.layer.getURLasync(this.bounds, function(b) { + a == this.asyncRequestId && (this.url = b, this.initImage()) + }, this) + } else this.url = this.layer.getURL(this.bounds), + this.initImage() + }, + positionTile: function() { + var a = this.getTile().style, + b = this.frame ? this.size : this.layer.getImageSize(this.bounds); + a.left = this.position.x + "%"; + a.top = this.position.y + "%"; + a.width = b.w + "%"; + a.height = b.h + "%" + }, + clear: function() { + OpenLayers.Tile.prototype.clear.apply(this, arguments); + var a = this.imgDiv; + if (a) { + OpenLayers.Event.stopObservingElement(a); + var b = this.getTile(); + b.parentNode === this.layer.div && this.layer.div.removeChild(b); + this.setImgSrc(); + !0 === this.layerAlphaHack && (a.style.filter = ""); + OpenLayers.Element.removeClass(a, + "olImageLoadError") + } + this.canvasContext = null + }, + getImage: function() { + if (!this.imgDiv) { + this.imgDiv = document.createElement("img"); + this.imgDiv.className = "olTileImage"; + this.imgDiv.galleryImg = "no"; + var a = this.imgDiv.style; + if (this.frame) { + var b = 0, + c = 0; + this.layer.gutter && (b = 100 * (this.layer.gutter / this.layer.tileSize.w), c = 100 * (this.layer.gutter / this.layer.tileSize.h)); + a.left = -b + "%"; + a.top = -c + "%"; + a.width = 2 * b + 100 + "%"; + a.height = 2 * c + 100 + "%" + } + a.visibility = "hidden"; + a.opacity = 0; + 1 > this.layer.opacity && (a.filter = "alpha(opacity=" + + 100 * this.layer.opacity + ")"); + a.position = "absolute"; + this.layerAlphaHack && (a.paddingTop = a.height, a.height = "0", a.width = "100%"); + this.frame && this.frame.appendChild(this.imgDiv) + } + return this.imgDiv + }, + initImage: function() { + this.events.triggerEvent(this._loadEvent); + var a = this.getImage(); + if (this.url && a.getAttribute("src") == this.url) this.onImageLoad(); + else { + var b = OpenLayers.Function.bind(function() { + OpenLayers.Event.stopObservingElement(a); + OpenLayers.Event.observe(a, "load", OpenLayers.Function.bind(this.onImageLoad, + this)); + OpenLayers.Event.observe(a, "error", OpenLayers.Function.bind(this.onImageError, this)); + this.imageReloadAttempts = 0; + this.setImgSrc(this.url) + }, this); + a.getAttribute("src") == this.blankImageUrl ? b() : (OpenLayers.Event.observe(a, "load", b), OpenLayers.Event.observe(a, "error", b), this.crossOriginKeyword && a.removeAttribute("crossorigin"), a.src = this.blankImageUrl) + } + }, + setImgSrc: function(a) { + var b = this.imgDiv; + b.style.visibility = "hidden"; + b.style.opacity = 0; + a && (this.crossOriginKeyword && ("data:" !== a.substr(0, 5) ? b.setAttribute("crossorigin", + this.crossOriginKeyword) : b.removeAttribute("crossorigin")), b.src = a) + }, + getTile: function() { + return this.frame ? this.frame : this.getImage() + }, + createBackBuffer: function() { + if (this.imgDiv && !this.isLoading) { + var a; + this.frame ? (a = this.frame.cloneNode(!1), a.appendChild(this.imgDiv)) : a = this.imgDiv; + this.imgDiv = null; + return a + } + }, + onImageLoad: function() { + var a = this.imgDiv; + OpenLayers.Event.stopObservingElement(a); + a.style.visibility = "inherit"; + a.style.opacity = this.layer.opacity; + this.isLoading = !1; + this.canvasContext = null; + this.events.triggerEvent("loadend"); + if (7 > parseFloat(navigator.appVersion.split("MSIE")[1]) && this.layer && this.layer.div) { + var b = document.createElement("span"); + b.style.display = "none"; + var c = this.layer.div; + c.appendChild(b); + window.setTimeout(function() { + b.parentNode === c && b.parentNode.removeChild(b) + }, 0) + }!0 === this.layerAlphaHack && (a.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + a.src + "', sizingMethod='scale')") + }, + onImageError: function() { + var a = this.imgDiv; + null != a.src && (this.imageReloadAttempts++, this.imageReloadAttempts <= + OpenLayers.IMAGE_RELOAD_ATTEMPTS ? this.setImgSrc(this.layer.getURL(this.bounds)) : (OpenLayers.Element.addClass(a, "olImageLoadError"), this.events.triggerEvent("loaderror"), this.onImageLoad())) + }, + getCanvasContext: function() { + if (OpenLayers.CANVAS_SUPPORTED && this.imgDiv && !this.isLoading) { + if (!this.canvasContext) { + var a = document.createElement("canvas"); + a.width = this.size.w; + a.height = this.size.h; + this.canvasContext = a.getContext("2d"); + this.canvasContext.drawImage(this.imgDiv, 0, 0) + } + return this.canvasContext + } + }, + CLASS_NAME: "OpenLayers.Tile.Image" +}); +OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, { + tileSize: null, + tileOriginCorner: "bl", + tileOrigin: null, + tileOptions: null, + tileClass: OpenLayers.Tile.Image, + grid: null, + singleTile: !1, + ratio: 1.5, + buffer: 0, + transitionEffect: null, + numLoadingTiles: 0, + tileLoadingDelay: 85, + serverResolutions: null, + moveTimerId: null, + deferMoveGriddedTiles: null, + tileQueueId: null, + tileQueue: null, + loading: !1, + backBuffer: null, + gridResolution: null, + backBufferResolution: null, + backBufferLonLat: null, + backBufferTimerId: null, + removeBackBufferDelay: null, + className: null, + initialize: function(a, b, c, d) { + OpenLayers.Layer.HTTPRequest.prototype.initialize.apply(this, arguments); + this.grid = []; + this.tileQueue = []; + null === this.removeBackBufferDelay && (this.removeBackBufferDelay = this.singleTile ? 0 : 2500); + null === this.className && (this.className = this.singleTile ? "olLayerGridSingleTile" : "olLayerGrid"); + OpenLayers.Animation.isNative || (this.deferMoveGriddedTiles = OpenLayers.Function.bind(function() { + this.moveGriddedTiles(true); + this.moveTimerId = null + }, this)) + }, + setMap: function(a) { + OpenLayers.Layer.HTTPRequest.prototype.setMap.call(this, + a); + OpenLayers.Element.addClass(this.div, this.className) + }, + removeMap: function() { + null !== this.moveTimerId && (window.clearTimeout(this.moveTimerId), this.moveTimerId = null); + this.clearTileQueue(); + null !== this.backBufferTimerId && (window.clearTimeout(this.backBufferTimerId), this.backBufferTimerId = null) + }, + destroy: function() { + this.removeBackBuffer(); + this.clearGrid(); + this.tileSize = this.grid = null; + OpenLayers.Layer.HTTPRequest.prototype.destroy.apply(this, arguments) + }, + clearGrid: function() { + this.clearTileQueue(); + if (this.grid) { + for (var a = + 0, b = this.grid.length; a < b; a++) + for (var c = this.grid[a], d = 0, e = c.length; d < e; d++) this.destroyTile(c[d]); + this.grid = []; + this.gridResolution = null + } + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.Grid(this.name, this.url, this.params, this.getOptions())); + a = OpenLayers.Layer.HTTPRequest.prototype.clone.apply(this, [a]); + null != this.tileSize && (a.tileSize = this.tileSize.clone()); + a.grid = []; + a.gridResolution = null; + a.backBuffer = null; + a.backBufferTimerId = null; + a.tileQueue = []; + a.tileQueueId = null; + a.loading = !1; + a.moveTimerId = null; + return a + }, + moveTo: function(a, b, c) { + OpenLayers.Layer.HTTPRequest.prototype.moveTo.apply(this, arguments); + a = a || this.map.getExtent(); + if (null != a) { + var d = !this.grid.length || b, + e = this.getTilesBounds(), + f = this.map.getResolution(), + g = this.getServerResolution(f); + if (this.singleTile) { + if (d || !c && !e.containsBounds(a)) b && "resize" !== this.transitionEffect && this.removeBackBuffer(), (!b || "resize" === this.transitionEffect) && this.applyBackBuffer(g), this.initSingleTile(a) + } else(d = d || !e.intersectsBounds(a, { + worldBounds: this.map.baseLayer.wrapDateLine && + this.map.getMaxExtent() + }), f !== g ? (a = this.map.calculateBounds(null, g), d && this.transformDiv(g / f)) : (this.div.style.width = "100%", this.div.style.height = "100%", this.div.style.left = "0%", this.div.style.top = "0%"), d) ? (b && "resize" === this.transitionEffect && this.applyBackBuffer(g), this.initGriddedTiles(a)) : this.moveGriddedTiles() + } + }, + getTileData: function(a) { + var b = null, + c = a.lon, + d = a.lat, + e = this.grid.length; + if (this.map && e) { + var f = this.map.getResolution(), + a = this.tileSize.w, + g = this.tileSize.h, + h = this.grid[0][0].bounds, + i = h.left, + h = h.top; + if (c < i && this.map.baseLayer.wrapDateLine) var j = this.map.getMaxExtent().getWidth(), + k = Math.ceil((i - c) / j), + c = c + j * k; + c = (c - i) / (f * a); + d = (h - d) / (f * g); + f = Math.floor(c); + i = Math.floor(d); + 0 <= i && i < e && (e = this.grid[i][f]) && (b = { + tile: e, + i: Math.floor((c - f) * a), + j: Math.floor((d - i) * g) + }) + } + return b + }, + queueTileDraw: function(a) { + a = a.object; + ~OpenLayers.Util.indexOf(this.tileQueue, a) || this.tileQueue.push(a); + this.tileQueueId || (this.tileQueueId = OpenLayers.Animation.start(OpenLayers.Function.bind(this.drawTileFromQueue, this), null, + this.div)); + return !1 + }, + drawTileFromQueue: function() { + 0 === this.tileQueue.length ? this.clearTileQueue() : this.tileQueue.shift().draw(!0) + }, + clearTileQueue: function() { + OpenLayers.Animation.stop(this.tileQueueId); + this.tileQueueId = null; + this.tileQueue = [] + }, + destroyTile: function(a) { + this.removeTileMonitoringHooks(a); + a.destroy() + }, + getServerResolution: function(a) { + a = a || this.map.getResolution(); + if (this.serverResolutions && -1 === OpenLayers.Util.indexOf(this.serverResolutions, a)) { + var b, c; + for (b = this.serverResolutions.length - + 1; 0 <= b; b--) + if (c = this.serverResolutions[b], c > a) { + a = c; + break + } + if (-1 === b) throw "no appropriate resolution in serverResolutions"; + } + return a + }, + getServerZoom: function() { + var a = this.getServerResolution(); + return this.serverResolutions ? OpenLayers.Util.indexOf(this.serverResolutions, a) : this.map.getZoomForResolution(a) + (this.zoomOffset || 0) + }, + transformDiv: function(a) { + this.div.style.width = 100 * a + "%"; + this.div.style.height = 100 * a + "%"; + var b = this.map.getSize(), + c = parseInt(this.map.layerContainerDiv.style.left, 10), + d = (parseInt(this.map.layerContainerDiv.style.top, + 10) - b.h / 2) * (a - 1); + this.div.style.left = (c - b.w / 2) * (a - 1) + "%"; + this.div.style.top = d + "%" + }, + getResolutionScale: function() { + return parseInt(this.div.style.width, 10) / 100 + }, + applyBackBuffer: function(a) { + null !== this.backBufferTimerId && this.removeBackBuffer(); + var b = this.backBuffer; + if (!b) { + b = this.createBackBuffer(); + if (!b) return; + this.div.insertBefore(b, this.div.firstChild); + this.backBuffer = b; + var c = this.grid[0][0].bounds; + this.backBufferLonLat = { + lon: c.left, + lat: c.top + }; + this.backBufferResolution = this.gridResolution + } + var c = b.style, + d = this.backBufferResolution / a; + c.width = 100 * d + "%"; + c.height = 100 * d + "%"; + a = this.getViewPortPxFromLonLat(this.backBufferLonLat, a); + c = parseInt(this.map.layerContainerDiv.style.left, 10); + d = parseInt(this.map.layerContainerDiv.style.top, 10); + b.style.left = Math.round(a.x - c) + "%"; + b.style.top = Math.round(a.y - d) + "%" + }, + createBackBuffer: function() { + var a; + if (0 < this.grid.length) { + a = document.createElement("div"); + a.id = this.div.id + "_bb"; + a.className = "olBackBuffer"; + a.style.position = "absolute"; + a.style.width = "100%"; + a.style.height = + "100%"; + for (var b = 0, c = this.grid.length; b < c; b++) + for (var d = 0, e = this.grid[b].length; d < e; d++) { + var f = this.grid[b][d].createBackBuffer(); + f && (f.style.top = b * this.tileSize.h + "%", f.style.left = d * this.tileSize.w + "%", a.appendChild(f)) + } + } + return a + }, + removeBackBuffer: function() { + this.backBuffer && (this.div.removeChild(this.backBuffer), this.backBufferResolution = this.backBuffer = null, null !== this.backBufferTimerId && (window.clearTimeout(this.backBufferTimerId), this.backBufferTimerId = null)) + }, + moveByPx: function() { + this.singleTile || + this.moveGriddedTiles() + }, + setTileSize: function(a) { + this.singleTile && (a = this.map.getSize(), a.h = parseInt(a.h * this.ratio), a.w = parseInt(a.w * this.ratio)); + OpenLayers.Layer.HTTPRequest.prototype.setTileSize.apply(this, [a]) + }, + getTilesBounds: function() { + var a = null, + b = this.grid.length; + if (b) var a = this.grid[b - 1][0].bounds, + b = this.grid[0].length * a.getWidth(), + c = this.grid.length * a.getHeight(), + a = new OpenLayers.Bounds(a.left, a.bottom, a.left + b, a.bottom + c); + return a + }, + initSingleTile: function(a) { + this.clearTileQueue(); + var b = + a.getCenterLonLat(), + c = a.getWidth() * this.ratio, + a = a.getHeight() * this.ratio, + b = new OpenLayers.Bounds(b.lon - c / 2, b.lat - a / 2, b.lon + c / 2, b.lat + a / 2), + c = this.map.getLayerPxFromLonLat({ + lon: b.left, + lat: b.top + }); + this.grid.length || (this.grid[0] = []); + (a = this.grid[0][0]) ? a.moveTo(b, c): (a = this.addTile(b, c), this.addTileMonitoringHooks(a), a.draw(), this.grid[0][0] = a); + this.removeExcessTiles(1, 1); + this.gridResolution = this.getServerResolution() + }, + calculateGridLayout: function(a, b, c) { + var d = c * this.tileSize.w, + c = c * this.tileSize.h, + e = + a.left - b.lon, + f = Math.floor(e / d) - this.buffer, + e = -(e / d - f) * this.tileSize.w, + f = b.lon + f * d, + a = a.top - (b.lat + c), + g = Math.ceil(a / c) + this.buffer; + return { + tilelon: d, + tilelat: c, + tileoffsetlon: f, + tileoffsetlat: b.lat + g * c, + tileoffsetx: e, + tileoffsety: -(g - a / c) * this.tileSize.h + } + }, + getTileOrigin: function() { + var a = this.tileOrigin; + if (!a) var a = this.getMaxExtent(), + b = { + tl: ["left", "top"], + tr: ["right", "top"], + bl: ["left", "bottom"], + br: ["right", "bottom"] + }[this.tileOriginCorner], + a = new OpenLayers.LonLat(a[b[0]], a[b[1]]); + return a + }, + initGriddedTiles: function(a) { + this.clearTileQueue(); + var b = this.map.getSize(), + c = Math.ceil(b.h / this.tileSize.h) + Math.max(1, 2 * this.buffer), + b = Math.ceil(b.w / this.tileSize.w) + Math.max(1, 2 * this.buffer), + d = this.getTileOrigin(), + e = this.getServerResolution(), + d = this.calculateGridLayout(a, d, e), + e = Math.round(d.tileoffsetx), + f = Math.round(d.tileoffsety), + g = d.tileoffsetlon, + h = d.tileoffsetlat, + i = d.tilelon, + j = d.tilelat, + k = e, + l = g, + m = 0, + n = parseInt(this.map.layerContainerDiv.style.left), + o = parseInt(this.map.layerContainerDiv.style.top), + d = [], + p = this.map.getCenter(); + do { + var q = this.grid[m++]; + q || (q = [], this.grid.push(q)); + var g = l, + e = k, + r = 0; + do { + var s = new OpenLayers.Bounds(g, h, g + i, h + j), + t = e, + t = t - n, + u = f, + u = u - o, + u = new OpenLayers.Pixel(t, u); + (t = q[r++]) ? t.moveTo(s, u, !1): (t = this.addTile(s, u), this.addTileMonitoringHooks(t), q.push(t)); + s = s.getCenterLonLat(); + d.push({ + tile: t, + distance: Math.pow(s.lon - p.lon, 2) + Math.pow(s.lat - p.lat, 2) + }); + g += i; + e += this.tileSize.w + } while (g <= a.right + i * this.buffer || r < b); + h -= j; + f += this.tileSize.h + } while (h >= a.bottom - j * this.buffer || m < c); + this.removeExcessTiles(m, r); + this.gridResolution = this.getServerResolution(); + d.sort(function(a, b) { + return a.distance - b.distance + }); + a = 0; + for (c = d.length; a < c; ++a) d[a].tile.draw() + }, + getMaxExtent: function() { + return this.maxExtent + }, + addTile: function(a, b) { + var c = new this.tileClass(this, b, a, null, this.tileSize, this.tileOptions); + c.events.register("beforedraw", this, this.queueTileDraw); + return c + }, + addTileMonitoringHooks: function(a) { + a.onLoadStart = function() { + !1 === this.loading && (this.loading = !0, this.events.triggerEvent("loadstart")); + this.events.triggerEvent("tileloadstart", { + tile: a + }); + this.numLoadingTiles++ + }; + a.onLoadEnd = function() { + this.numLoadingTiles--; + this.events.triggerEvent("tileloaded", { + tile: a + }); + 0 === this.tileQueue.length && 0 === this.numLoadingTiles && (this.loading = !1, this.events.triggerEvent("loadend"), this.backBuffer && (this.backBufferTimerId = window.setTimeout(OpenLayers.Function.bind(this.removeBackBuffer, this), this.removeBackBufferDelay))) + }; + a.onLoadError = function() { + this.events.triggerEvent("tileerror", { + tile: a + }) + }; + a.events.on({ + loadstart: a.onLoadStart, + loadend: a.onLoadEnd, + unload: a.onLoadEnd, + loaderror: a.onLoadError, + scope: this + }) + }, + removeTileMonitoringHooks: function(a) { + a.unload(); + a.events.un({ + loadstart: a.onLoadStart, + loadend: a.onLoadEnd, + unload: a.onLoadEnd, + loaderror: a.onLoadError, + scope: this + }) + }, + moveGriddedTiles: function(a) { + if (!a && !OpenLayers.Animation.isNative) null != this.moveTimerId && window.clearTimeout(this.moveTimerId), this.moveTimerId = window.setTimeout(this.deferMoveGriddedTiles, this.tileLoadingDelay); + else + for (var a = this.buffer || 1, b = this.getResolutionScale();;) { + var c = this.grid[0][0].position.x * b + parseInt(this.div.style.left, + 10) + parseInt(this.map.layerContainerDiv.style.left), + d = this.grid[0][0].position.y * b + parseInt(this.div.style.top, 10) + parseInt(this.map.layerContainerDiv.style.top), + e = this.tileSize.w * b, + f = this.tileSize.h * b; + if (c > -e * (a - 1)) this.shiftColumn(!0); + else if (c < -e * a) this.shiftColumn(!1); + else if (d > -f * (a - 1)) this.shiftRow(!0); + else if (d < -f * a) this.shiftRow(!1); + else break + } + }, + shiftRow: function(a) { + for (var b = this.grid, c = b[a ? 0 : this.grid.length - 1], d = this.getServerResolution(), e = a ? -this.tileSize.h : this.tileSize.h, d = d * -e, f = a ? + b.pop() : b.shift(), g = 0, h = c.length; g < h; g++) { + var i = c[g], + j = i.bounds.clone(), + i = i.position.clone(); + j.bottom += d; + j.top += d; + i.y += e; + f[g].moveTo(j, i) + } + a ? b.unshift(f) : b.push(f) + }, + shiftColumn: function(a) { + for (var b = a ? -this.tileSize.w : this.tileSize.w, c = this.getServerResolution() * b, d = 0, e = this.grid.length; d < e; d++) { + var f = this.grid[d], + g = f[a ? 0 : f.length - 1], + h = g.bounds.clone(), + g = g.position.clone(); + h.left += c; + h.right += c; + g.x += b; + var i = a ? this.grid[d].pop() : this.grid[d].shift(); + i.moveTo(h, g); + a ? f.unshift(i) : f.push(i) + } + }, + removeExcessTiles: function(a, + b) { + for (var c, d; this.grid.length > a;) { + var e = this.grid.pop(); + c = 0; + for (d = e.length; c < d; c++) { + var f = e[c]; + this.destroyTile(f) + } + } + c = 0; + for (d = this.grid.length; c < d; c++) + for (; this.grid[c].length > b;) e = this.grid[c], f = e.pop(), this.destroyTile(f) + }, + onMapResize: function() { + this.singleTile && (this.clearGrid(), this.setTileSize()) + }, + getTileBounds: function(a) { + var b = this.maxExtent, + c = this.getResolution(), + d = c * this.tileSize.w, + c = c * this.tileSize.h, + e = this.getLonLatFromViewPortPx(a), + a = b.left + d * Math.floor((e.lon - b.left) / d), + b = b.bottom + + c * Math.floor((e.lat - b.bottom) / c); + return new OpenLayers.Bounds(a, b, a + d, b + c) + }, + CLASS_NAME: "OpenLayers.Layer.Grid" +}); +OpenLayers.Format.ArcXML = OpenLayers.Class(OpenLayers.Format.XML, { + fontStyleKeys: "antialiasing blockout font fontcolor fontsize fontstyle glowing interval outline printmode shadow transparency".split(" "), + request: null, + response: null, + initialize: function(a) { + this.request = new OpenLayers.Format.ArcXML.Request; + this.response = new OpenLayers.Format.ArcXML.Response; + if (a) + if ("feature" == a.requesttype) { + this.request.get_image = null; + var b = this.request.get_feature.query; + this.addCoordSys(b.featurecoordsys, a.featureCoordSys); + this.addCoordSys(b.filtercoordsys, a.filterCoordSys); + a.polygon ? (b.isspatial = !0, b.spatialfilter.polygon = a.polygon) : a.envelope && (b.isspatial = !0, b.spatialfilter.envelope = { + minx: 0, + miny: 0, + maxx: 0, + maxy: 0 + }, this.parseEnvelope(b.spatialfilter.envelope, a.envelope)) + } else "image" == a.requesttype ? (this.request.get_feature = null, b = this.request.get_image.properties, this.parseEnvelope(b.envelope, a.envelope), this.addLayers(b.layerlist, a.layers), this.addImageSize(b.imagesize, a.tileSize), this.addCoordSys(b.featurecoordsys, + a.featureCoordSys), this.addCoordSys(b.filtercoordsys, a.filterCoordSys)) : this.request = null; + OpenLayers.Format.XML.prototype.initialize.apply(this, [a]) + }, + parseEnvelope: function(a, b) { + b && 4 == b.length && (a.minx = b[0], a.miny = b[1], a.maxx = b[2], a.maxy = b[3]) + }, + addLayers: function(a, b) { + for (var c = 0, d = b.length; c < d; c++) a.push(b[c]) + }, + addImageSize: function(a, b) { + null !== b && (a.width = b.w, a.height = b.h, a.printwidth = b.w, a.printheight = b.h) + }, + addCoordSys: function(a, b) { + "string" == typeof b ? (a.id = parseInt(b), a.string = b) : "object" == typeof b && + null !== b.proj && (a.id = b.proj.srsProjNumber, a.string = b.proj.srsCode) + }, + iserror: function(a) { + var b = null; + a ? (a = OpenLayers.Format.XML.prototype.read.apply(this, [a]), a = a.documentElement.getElementsByTagName("ERROR"), b = null !== a && 0 < a.length) : b = "" !== this.response.error; + return b + }, + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + var b = null; + a && a.documentElement && (b = "ARCXML" == a.documentElement.nodeName ? a.documentElement : a.documentElement.getElementsByTagName("ARCXML")[0]); + if (!b || "parsererror" === b.firstChild.nodeName) { + var c, d; + try { + c = a.firstChild.nodeValue, d = a.firstChild.childNodes[1].firstChild.nodeValue + } catch (e) {} + throw { + message: "Error parsing the ArcXML request", + error: c, + source: d + }; + } + return this.parseResponse(b) + }, + write: function(a) { + a || (a = this.request); + var b = this.createElementNS("", "ARCXML"); + b.setAttribute("version", "1.1"); + var c = this.createElementNS("", "REQUEST"); + if (null != a.get_image) { + var d = this.createElementNS("", "GET_IMAGE"); + c.appendChild(d); + var e = this.createElementNS("", + "PROPERTIES"); + d.appendChild(e); + a = a.get_image.properties; + null != a.featurecoordsys && (d = this.createElementNS("", "FEATURECOORDSYS"), e.appendChild(d), 0 === a.featurecoordsys.id ? d.setAttribute("string", a.featurecoordsys.string) : d.setAttribute("id", a.featurecoordsys.id)); + null != a.filtercoordsys && (d = this.createElementNS("", "FILTERCOORDSYS"), e.appendChild(d), 0 === a.filtercoordsys.id ? d.setAttribute("string", a.filtercoordsys.string) : d.setAttribute("id", a.filtercoordsys.id)); + null != a.envelope && (d = this.createElementNS("", + "ENVELOPE"), e.appendChild(d), d.setAttribute("minx", a.envelope.minx), d.setAttribute("miny", a.envelope.miny), d.setAttribute("maxx", a.envelope.maxx), d.setAttribute("maxy", a.envelope.maxy)); + d = this.createElementNS("", "IMAGESIZE"); + e.appendChild(d); + d.setAttribute("height", a.imagesize.height); + d.setAttribute("width", a.imagesize.width); + if (a.imagesize.height != a.imagesize.printheight || a.imagesize.width != a.imagesize.printwidth) d.setAttribute("printheight", a.imagesize.printheight), d.setArrtibute("printwidth", a.imagesize.printwidth); + null != a.background && (d = this.createElementNS("", "BACKGROUND"), e.appendChild(d), d.setAttribute("color", a.background.color.r + "," + a.background.color.g + "," + a.background.color.b), null !== a.background.transcolor && d.setAttribute("transcolor", a.background.transcolor.r + "," + a.background.transcolor.g + "," + a.background.transcolor.b)); + if (null != a.layerlist && 0 < a.layerlist.length) { + d = this.createElementNS("", "LAYERLIST"); + e.appendChild(d); + for (e = 0; e < a.layerlist.length; e++) { + var f = this.createElementNS("", "LAYERDEF"); + d.appendChild(f); + f.setAttribute("id", a.layerlist[e].id); + f.setAttribute("visible", a.layerlist[e].visible); + if ("object" == typeof a.layerlist[e].query) { + var g = a.layerlist[e].query; + if (0 > g.where.length) continue; + var h = null, + h = "boolean" == typeof g.spatialfilter && g.spatialfilter ? this.createElementNS("", "SPATIALQUERY") : this.createElementNS("", "QUERY"); + h.setAttribute("where", g.where); + "number" == typeof g.accuracy && 0 < g.accuracy && h.setAttribute("accuracy", g.accuracy); + "number" == typeof g.featurelimit && 2E3 > g.featurelimit && h.setAttribute("featurelimit", + g.featurelimit); + "string" == typeof g.subfields && "#ALL#" != g.subfields && h.setAttribute("subfields", g.subfields); + "string" == typeof g.joinexpression && 0 < g.joinexpression.length && h.setAttribute("joinexpression", g.joinexpression); + "string" == typeof g.jointables && 0 < g.jointables.length && h.setAttribute("jointables", g.jointables); + f.appendChild(h) + } + "object" == typeof a.layerlist[e].renderer && this.addRenderer(f, a.layerlist[e].renderer) + } + } + } else if (null != a.get_feature && (d = this.createElementNS("", "GET_FEATURES"), d.setAttribute("outputmode", + "newxml"), d.setAttribute("checkesc", "true"), a.get_feature.geometry ? d.setAttribute("geometry", a.get_feature.geometry) : d.setAttribute("geometry", "false"), a.get_feature.compact && d.setAttribute("compact", a.get_feature.compact), "number" == a.get_feature.featurelimit && d.setAttribute("featurelimit", a.get_feature.featurelimit), d.setAttribute("globalenvelope", "true"), c.appendChild(d), null != a.get_feature.layer && 0 < a.get_feature.layer.length && (e = this.createElementNS("", "LAYER"), e.setAttribute("id", a.get_feature.layer), + d.appendChild(e)), a = a.get_feature.query, null != a)) e = null, e = a.isspatial ? this.createElementNS("", "SPATIALQUERY") : this.createElementNS("", "QUERY"), d.appendChild(e), "number" == typeof a.accuracy && e.setAttribute("accuracy", a.accuracy), null != a.featurecoordsys && (d = this.createElementNS("", "FEATURECOORDSYS"), 0 == a.featurecoordsys.id ? d.setAttribute("string", a.featurecoordsys.string) : d.setAttribute("id", a.featurecoordsys.id), e.appendChild(d)), null != a.filtercoordsys && (d = this.createElementNS("", "FILTERCOORDSYS"), + 0 === a.filtercoordsys.id ? d.setAttribute("string", a.filtercoordsys.string) : d.setAttribute("id", a.filtercoordsys.id), e.appendChild(d)), 0 < a.buffer && (d = this.createElementNS("", "BUFFER"), d.setAttribute("distance", a.buffer), e.appendChild(d)), a.isspatial && (d = this.createElementNS("", "SPATIALFILTER"), d.setAttribute("relation", a.spatialfilter.relation), e.appendChild(d), a.spatialfilter.envelope ? (f = this.createElementNS("", "ENVELOPE"), f.setAttribute("minx", a.spatialfilter.envelope.minx), f.setAttribute("miny", a.spatialfilter.envelope.miny), + f.setAttribute("maxx", a.spatialfilter.envelope.maxx), f.setAttribute("maxy", a.spatialfilter.envelope.maxy), d.appendChild(f)) : "object" == typeof a.spatialfilter.polygon && d.appendChild(this.writePolygonGeometry(a.spatialfilter.polygon))), null != a.where && 0 < a.where.length && e.setAttribute("where", a.where); + b.appendChild(c); + return OpenLayers.Format.XML.prototype.write.apply(this, [b]) + }, + addGroupRenderer: function(a, b) { + var c = this.createElementNS("", "GROUPRENDERER"); + a.appendChild(c); + for (var d = 0; d < b.length; d++) this.addRenderer(c, + b[d]) + }, + addRenderer: function(a, b) { + if (OpenLayers.Util.isArray(b)) this.addGroupRenderer(a, b); + else { + var c = this.createElementNS("", b.type.toUpperCase() + "RENDERER"); + a.appendChild(c); + "VALUEMAPRENDERER" == c.tagName ? this.addValueMapRenderer(c, b) : "VALUEMAPLABELRENDERER" == c.tagName ? this.addValueMapLabelRenderer(c, b) : "SIMPLELABELRENDERER" == c.tagName ? this.addSimpleLabelRenderer(c, b) : "SCALEDEPENDENTRENDERER" == c.tagName && this.addScaleDependentRenderer(c, b) + } + }, + addScaleDependentRenderer: function(a, b) { + ("string" == typeof b.lower || + "number" == typeof b.lower) && a.setAttribute("lower", b.lower); + ("string" == typeof b.upper || "number" == typeof b.upper) && a.setAttribute("upper", b.upper); + this.addRenderer(a, b.renderer) + }, + addValueMapLabelRenderer: function(a, b) { + a.setAttribute("lookupfield", b.lookupfield); + a.setAttribute("labelfield", b.labelfield); + if ("object" == typeof b.exacts) + for (var c = 0, d = b.exacts.length; c < d; c++) { + var e = b.exacts[c], + f = this.createElementNS("", "EXACT"); + "string" == typeof e.value && f.setAttribute("value", e.value); + "string" == typeof e.label && + f.setAttribute("label", e.label); + "string" == typeof e.method && f.setAttribute("method", e.method); + a.appendChild(f); + if ("object" == typeof e.symbol) { + var g = null; + "text" == e.symbol.type && (g = this.createElementNS("", "TEXTSYMBOL")); + if (null != g) { + for (var h = this.fontStyleKeys, i = 0, j = h.length; i < j; i++) { + var k = h[i]; + e.symbol[k] && g.setAttribute(k, e.symbol[k]) + } + f.appendChild(g) + } + } + } + }, + addValueMapRenderer: function(a, b) { + a.setAttribute("lookupfield", b.lookupfield); + if ("object" == typeof b.ranges) + for (var c = 0, d = b.ranges.length; c < d; c++) { + var e = + b.ranges[c], + f = this.createElementNS("", "RANGE"); + f.setAttribute("lower", e.lower); + f.setAttribute("upper", e.upper); + a.appendChild(f); + if ("object" == typeof e.symbol) { + var g = null; + "simplepolygon" == e.symbol.type && (g = this.createElementNS("", "SIMPLEPOLYGONSYMBOL")); + null != g && ("string" == typeof e.symbol.boundarycolor && g.setAttribute("boundarycolor", e.symbol.boundarycolor), "string" == typeof e.symbol.fillcolor && g.setAttribute("fillcolor", e.symbol.fillcolor), "number" == typeof e.symbol.filltransparency && g.setAttribute("filltransparency", + e.symbol.filltransparency), f.appendChild(g)) + } + } else if ("object" == typeof b.exacts) { + c = 0; + for (d = b.exacts.length; c < d; c++) e = b.exacts[c], f = this.createElementNS("", "EXACT"), "string" == typeof e.value && f.setAttribute("value", e.value), "string" == typeof e.label && f.setAttribute("label", e.label), "string" == typeof e.method && f.setAttribute("method", e.method), a.appendChild(f), "object" == typeof e.symbol && (g = null, "simplemarker" == e.symbol.type && (g = this.createElementNS("", "SIMPLEMARKERSYMBOL")), null != g && ("string" == typeof e.symbol.antialiasing && + g.setAttribute("antialiasing", e.symbol.antialiasing), "string" == typeof e.symbol.color && g.setAttribute("color", e.symbol.color), "string" == typeof e.symbol.outline && g.setAttribute("outline", e.symbol.outline), "string" == typeof e.symbol.overlap && g.setAttribute("overlap", e.symbol.overlap), "string" == typeof e.symbol.shadow && g.setAttribute("shadow", e.symbol.shadow), "number" == typeof e.symbol.transparency && g.setAttribute("transparency", e.symbol.transparency), "string" == typeof e.symbol.usecentroid && g.setAttribute("usecentroid", + e.symbol.usecentroid), "number" == typeof e.symbol.width && g.setAttribute("width", e.symbol.width), f.appendChild(g))) + } + }, + addSimpleLabelRenderer: function(a, b) { + a.setAttribute("field", b.field); + for (var c = "featureweight howmanylabels labelbufferratio labelpriorities labelweight linelabelposition rotationalangles".split(" "), d = 0, e = c.length; d < e; d++) { + var f = c[d]; + b[f] && a.setAttribute(f, b[f]) + } + if ("text" == b.symbol.type) { + var g = b.symbol, + h = this.createElementNS("", "TEXTSYMBOL"); + a.appendChild(h); + c = this.fontStyleKeys; + d = 0; + for (e = c.length; d < e; d++) f = c[d], g[f] && h.setAttribute(f, b[f]) + } + }, + writePolygonGeometry: function(a) { + if (!(a instanceof OpenLayers.Geometry.Polygon)) throw { + message: "Cannot write polygon geometry to ArcXML with an " + a.CLASS_NAME + " object.", + geometry: a + }; + for (var b = this.createElementNS("", "POLYGON"), c = 0, d = a.components.length; c < d; c++) { + for (var e = a.components[c], f = this.createElementNS("", "RING"), g = 0, h = e.components.length; g < h; g++) { + var i = e.components[g], + j = this.createElementNS("", "POINT"); + j.setAttribute("x", i.x); + j.setAttribute("y", + i.y); + f.appendChild(j) + } + b.appendChild(f) + } + return b + }, + parseResponse: function(a) { + "string" == typeof a && (a = (new OpenLayers.Format.XML).read(a)); + var b = new OpenLayers.Format.ArcXML.Response, + c = a.getElementsByTagName("ERROR"); + if (null != c && 0 < c.length) b.error = this.getChildValue(c, "Unknown error."); + else { + c = a.getElementsByTagName("RESPONSE"); + if (null == c || 0 == c.length) return b.error = "No RESPONSE tag found in ArcXML response.", b; + var d = c[0].firstChild.nodeName; + "#text" == d && (d = c[0].firstChild.nextSibling.nodeName); + if ("IMAGE" == + d) c = a.getElementsByTagName("ENVELOPE"), a = a.getElementsByTagName("OUTPUT"), null == c || 0 == c.length ? b.error = "No ENVELOPE tag found in ArcXML response." : null == a || 0 == a.length ? b.error = "No OUTPUT tag found in ArcXML response." : (c = this.parseAttributes(c[0]), d = this.parseAttributes(a[0]), b.image = "string" == typeof d.type ? { + envelope: c, + output: { + type: d.type, + data: this.getChildValue(a[0]) + } + } : { + envelope: c, + output: d + }); + else if ("FEATURES" == d) { + if (a = c[0].getElementsByTagName("FEATURES"), c = a[0].getElementsByTagName("FEATURECOUNT"), + b.features.featurecount = c[0].getAttribute("count"), 0 < b.features.featurecount) { + c = a[0].getElementsByTagName("ENVELOPE"); + b.features.envelope = this.parseAttributes(c[0], "number"); + a = a[0].getElementsByTagName("FEATURE"); + for (c = 0; c < a.length; c++) { + for (var d = new OpenLayers.Feature.Vector, e = a[c].getElementsByTagName("FIELD"), f = 0; f < e.length; f++) { + var g = e[f].getAttribute("name"), + h = e[f].getAttribute("value"); + d.attributes[g] = h + } + e = a[c].getElementsByTagName("POLYGON"); + if (0 < e.length) { + e = e[0].getElementsByTagName("RING"); + f = []; + for (g = 0; g < e.length; g++) { + h = []; + h.push(this.parsePointGeometry(e[g])); + for (var i = e[g].getElementsByTagName("HOLE"), j = 0; j < i.length; j++) h.push(this.parsePointGeometry(i[j])); + f.push(new OpenLayers.Geometry.Polygon(h)) + } + d.geometry = 1 == f.length ? f[0] : new OpenLayers.Geometry.MultiPolygon(f) + } + b.features.feature.push(d) + } + } + } else b.error = "Unidentified response type." + } + return b + }, + parseAttributes: function(a, b) { + for (var c = {}, d = 0; d < a.attributes.length; d++) c[a.attributes[d].nodeName] = "number" == b ? parseFloat(a.attributes[d].nodeValue) : + a.attributes[d].nodeValue; + return c + }, + parsePointGeometry: function(a) { + var b = [], + c = a.getElementsByTagName("COORDS"); + if (0 < c.length) { + a = this.getChildValue(c[0]); + a = a.split(/;/); + for (c = 0; c < a.length; c++) { + var d = a[c].split(/ /); + b.push(new OpenLayers.Geometry.Point(d[0], d[1])) + } + } else if (a = a.getElementsByTagName("POINT"), 0 < a.length) + for (c = 0; c < a.length; c++) b.push(new OpenLayers.Geometry.Point(parseFloat(a[c].getAttribute("x")), parseFloat(a[c].getAttribute("y")))); + return new OpenLayers.Geometry.LinearRing(b) + }, + CLASS_NAME: "OpenLayers.Format.ArcXML" +}); +OpenLayers.Format.ArcXML.Request = OpenLayers.Class({ + initialize: function() { + return OpenLayers.Util.extend(this, { + get_image: { + properties: { + background: null, + draw: !0, + envelope: { + minx: 0, + miny: 0, + maxx: 0, + maxy: 0 + }, + featurecoordsys: { + id: 0, + string: "", + datumtransformid: 0, + datumtransformstring: "" + }, + filtercoordsys: { + id: 0, + string: "", + datumtransformid: 0, + datumtransformstring: "" + }, + imagesize: { + height: 0, + width: 0, + dpi: 96, + printheight: 0, + printwidth: 0, + scalesymbols: !1 + }, + layerlist: [], + output: { + baseurl: "", + legendbaseurl: "", + legendname: "", + legendpath: "", + legendurl: "", + name: "", + path: "", + type: "jpg", + url: "" + } + } + }, + get_feature: { + layer: "", + query: { + isspatial: !1, + featurecoordsys: { + id: 0, + string: "", + datumtransformid: 0, + datumtransformstring: "" + }, + filtercoordsys: { + id: 0, + string: "", + datumtransformid: 0, + datumtransformstring: "" + }, + buffer: 0, + where: "", + spatialfilter: { + relation: "envelope_intersection", + envelope: null + } + } + }, + environment: { + separators: { + cs: " ", + ts: ";" + } + }, + layer: [], + workspaces: [] + }) + }, + CLASS_NAME: "OpenLayers.Format.ArcXML.Request" +}); +OpenLayers.Format.ArcXML.Response = OpenLayers.Class({ + initialize: function() { + return OpenLayers.Util.extend(this, { + image: { + envelope: null, + output: "" + }, + features: { + featurecount: 0, + envelope: null, + feature: [] + }, + error: "" + }) + }, + CLASS_NAME: "OpenLayers.Format.ArcXML.Response" +}); +OpenLayers.ProxyHost = ""; +OpenLayers.Request = { + DEFAULT_CONFIG: { + method: "GET", + url: window.location.href, + async: !0, + user: void 0, + password: void 0, + params: null, + proxy: OpenLayers.ProxyHost, + headers: {}, + data: null, + callback: function() {}, + success: null, + failure: null, + scope: null + }, + URL_SPLIT_REGEX: /([^:]*:)\/\/([^:]*:?[^@]*@)?([^:\/\?]*):?([^\/\?]*)/, + events: new OpenLayers.Events(this), + makeSameOrigin: function(a, b) { + var c = 0 !== a.indexOf("http"), + d = !c && a.match(this.URL_SPLIT_REGEX); + if (d) { + var e = window.location, + c = d[1] == e.protocol && d[3] == e.hostname, + d = d[4], + e = e.port; + if (80 != d && "" != d || "80" != e && "" != e) c = c && d == e + } + c || (b ? a = "function" == typeof b ? b(a) : b + encodeURIComponent(a) : OpenLayers.Console.warn(OpenLayers.i18n("proxyNeeded"), { + url: a + })); + return a + }, + issue: function(a) { + var b = OpenLayers.Util.extend(this.DEFAULT_CONFIG, { + proxy: OpenLayers.ProxyHost + }), + a = OpenLayers.Util.applyDefaults(a, b), + b = !1, + c; + for (c in a.headers) a.headers.hasOwnProperty(c) && "x-requested-with" === c.toLowerCase() && (b = !0); + !1 === b && (a.headers["X-Requested-With"] = "XMLHttpRequest"); + var d = new OpenLayers.Request.XMLHttpRequest, + e = OpenLayers.Util.urlAppend(a.url, OpenLayers.Util.getParameterString(a.params || {})), + e = OpenLayers.Request.makeSameOrigin(e, a.proxy); + d.open(a.method, e, a.async, a.user, a.password); + for (var f in a.headers) d.setRequestHeader(f, a.headers[f]); + var g = this.events, + h = this; + d.onreadystatechange = function() { + d.readyState == OpenLayers.Request.XMLHttpRequest.DONE && !1 !== g.triggerEvent("complete", { + request: d, + config: a, + requestUrl: e + }) && h.runCallbacks({ + request: d, + config: a, + requestUrl: e + }) + }; + !1 === a.async ? d.send(a.data) : window.setTimeout(function() { + 0 !== + d.readyState && d.send(a.data) + }, 0); + return d + }, + runCallbacks: function(a) { + var b = a.request, + c = a.config, + d = c.scope ? OpenLayers.Function.bind(c.callback, c.scope) : c.callback, + e; + c.success && (e = c.scope ? OpenLayers.Function.bind(c.success, c.scope) : c.success); + var f; + c.failure && (f = c.scope ? OpenLayers.Function.bind(c.failure, c.scope) : c.failure); + "file:" == OpenLayers.Util.createUrlObject(c.url).protocol && b.responseText && (b.status = 200); + d(b); + if (!b.status || 200 <= b.status && 300 > b.status) this.events.triggerEvent("success", a), e && e(b); + if (b.status && (200 > b.status || 300 <= b.status)) this.events.triggerEvent("failure", a), f && f(b) + }, + GET: function(a) { + a = OpenLayers.Util.extend(a, { + method: "GET" + }); + return OpenLayers.Request.issue(a) + }, + POST: function(a) { + a = OpenLayers.Util.extend(a, { + method: "POST" + }); + a.headers = a.headers ? a.headers : {}; + "CONTENT-TYPE" in OpenLayers.Util.upperCaseObject(a.headers) || (a.headers["Content-Type"] = "application/xml"); + return OpenLayers.Request.issue(a) + }, + PUT: function(a) { + a = OpenLayers.Util.extend(a, { + method: "PUT" + }); + a.headers = a.headers ? + a.headers : {}; + "CONTENT-TYPE" in OpenLayers.Util.upperCaseObject(a.headers) || (a.headers["Content-Type"] = "application/xml"); + return OpenLayers.Request.issue(a) + }, + DELETE: function(a) { + a = OpenLayers.Util.extend(a, { + method: "DELETE" + }); + return OpenLayers.Request.issue(a) + }, + HEAD: function(a) { + a = OpenLayers.Util.extend(a, { + method: "HEAD" + }); + return OpenLayers.Request.issue(a) + }, + OPTIONS: function(a) { + a = OpenLayers.Util.extend(a, { + method: "OPTIONS" + }); + return OpenLayers.Request.issue(a) + } +}; +OpenLayers.Layer.ArcIMS = OpenLayers.Class(OpenLayers.Layer.Grid, { + DEFAULT_PARAMS: { + ClientVersion: "9.2", + ServiceName: "" + }, + featureCoordSys: "4326", + filterCoordSys: "4326", + layers: null, + async: !0, + name: "ArcIMS", + isBaseLayer: !0, + DEFAULT_OPTIONS: { + tileSize: new OpenLayers.Size(512, 512), + featureCoordSys: "4326", + filterCoordSys: "4326", + layers: null, + isBaseLayer: !0, + async: !0, + name: "ArcIMS" + }, + initialize: function(a, b, c) { + this.tileSize = new OpenLayers.Size(512, 512); + this.params = OpenLayers.Util.applyDefaults({ + ServiceName: c.serviceName + }, + this.DEFAULT_PARAMS); + this.options = OpenLayers.Util.applyDefaults(c, this.DEFAULT_OPTIONS); + OpenLayers.Layer.Grid.prototype.initialize.apply(this, [a, b, this.params, c]); + if (this.transparent && (this.isBaseLayer || (this.isBaseLayer = !1), "image/jpeg" == this.format)) this.format = OpenLayers.Util.alphaHack() ? "image/gif" : "image/png"; + null === this.options.layers && (this.options.layers = []) + }, + getURL: function(a) { + var b = "", + a = this.adjustBounds(a), + a = new OpenLayers.Format.ArcXML(OpenLayers.Util.extend(this.options, { + requesttype: "image", + envelope: a.toArray(), + tileSize: this.tileSize + })), + a = new OpenLayers.Request.POST({ + url: this.getFullRequestString(), + data: a.write(), + async: !1 + }); + if (null != a) { + b = a.responseXML; + if (!b || !b.documentElement) b = a.responseText; + b = this.getUrlOrImage((new OpenLayers.Format.ArcXML).read(b).image.output) + } + return b + }, + getURLasync: function(a, b, c) { + a = this.adjustBounds(a); + a = new OpenLayers.Format.ArcXML(OpenLayers.Util.extend(this.options, { + requesttype: "image", + envelope: a.toArray(), + tileSize: this.tileSize + })); + OpenLayers.Request.POST({ + url: this.getFullRequestString(), + async: !0, + data: a.write(), + callback: function(a) { + var e = a.responseXML; + if (!e || !e.documentElement) e = a.responseText; + a = (new OpenLayers.Format.ArcXML).read(e); + b.call(c, this.getUrlOrImage(a.image.output)) + }, + scope: this + }) + }, + getUrlOrImage: function(a) { + var b = ""; + a.url ? b = a.url : a.data && (b = "data:image/" + a.type + ";base64," + a.data); + return b + }, + setLayerQuery: function(a, b) { + for (var c = 0; c < this.options.layers.length; c++) + if (a == this.options.layers[c].id) { + this.options.layers[c].query = b; + return + } + this.options.layers.push({ + id: a, + visible: !0, + query: b + }) + }, + getFeatureInfo: function(a, b, c) { + var d = c.buffer || 1, + e = c.callback || function() {}, + f = c.scope || window, + g = {}; + OpenLayers.Util.extend(g, this.options); + g.requesttype = "feature"; + a instanceof OpenLayers.LonLat ? (g.polygon = null, g.envelope = [a.lon - d, a.lat - d, a.lon + d, a.lat + d]) : a instanceof OpenLayers.Geometry.Polygon && (g.envelope = null, g.polygon = a); + var h = new OpenLayers.Format.ArcXML(g); + OpenLayers.Util.extend(h.request.get_feature, c); + h.request.get_feature.layer = b.id; + "number" == typeof b.query.accuracy ? h.request.get_feature.query.accuracy = + b.query.accuracy : (a = this.map.getCenter(), c = this.map.getViewPortPxFromLonLat(a), c.x++, c = this.map.getLonLatFromPixel(c), h.request.get_feature.query.accuracy = c.lon - a.lon); + h.request.get_feature.query.where = b.query.where; + h.request.get_feature.query.spatialfilter.relation = "area_intersection"; + OpenLayers.Request.POST({ + url: this.getFullRequestString({ + CustomService: "Query" + }), + data: h.write(), + callback: function(a) { + a = h.parseResponse(a.responseText); + h.iserror() ? e.call(f, null) : e.call(f, a.features) + } + }) + }, + clone: function(a) { + null == + a && (a = new OpenLayers.Layer.ArcIMS(this.name, this.url, this.getOptions())); + return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [a]) + }, + CLASS_NAME: "OpenLayers.Layer.ArcIMS" +}); +OpenLayers.Format.OWSCommon.v1_1_0 = OpenLayers.Class(OpenLayers.Format.OWSCommon.v1, { + namespaces: { + ows: "http://www.opengis.net/ows/1.1", + xlink: "http://www.w3.org/1999/xlink" + }, + readers: { + ows: OpenLayers.Util.applyDefaults({ + ExceptionReport: function(a, b) { + b.exceptionReport = { + version: a.getAttribute("version"), + language: a.getAttribute("xml:lang"), + exceptions: [] + }; + this.readChildNodes(a, b.exceptionReport) + }, + AllowedValues: function(a, b) { + b.allowedValues = {}; + this.readChildNodes(a, b.allowedValues) + }, + AnyValue: function(a, b) { + b.anyValue = !0 + }, + DataType: function(a, b) { + b.dataType = this.getChildValue(a) + }, + Range: function(a, b) { + b.range = {}; + this.readChildNodes(a, b.range) + }, + MinimumValue: function(a, b) { + b.minValue = this.getChildValue(a) + }, + MaximumValue: function(a, b) { + b.maxValue = this.getChildValue(a) + }, + Identifier: function(a, b) { + b.identifier = this.getChildValue(a) + }, + SupportedCRS: function(a, b) { + b.supportedCRS = this.getChildValue(a) + } + }, OpenLayers.Format.OWSCommon.v1.prototype.readers.ows) + }, + writers: { + ows: OpenLayers.Util.applyDefaults({ + Range: function(a) { + var b = this.createElementNSPlus("ows:Range", { + attributes: { + "ows:rangeClosure": a.closure + } + }); + this.writeNode("ows:MinimumValue", a.minValue, b); + this.writeNode("ows:MaximumValue", a.maxValue, b); + return b + }, + MinimumValue: function(a) { + return this.createElementNSPlus("ows:MinimumValue", { + value: a + }) + }, + MaximumValue: function(a) { + return this.createElementNSPlus("ows:MaximumValue", { + value: a + }) + }, + Value: function(a) { + return this.createElementNSPlus("ows:Value", { + value: a + }) + } + }, OpenLayers.Format.OWSCommon.v1.prototype.writers.ows) + }, + CLASS_NAME: "OpenLayers.Format.OWSCommon.v1_1_0" +}); +OpenLayers.Format.WCSGetCoverage = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + ows: "http://www.opengis.net/ows/1.1", + wcs: "http://www.opengis.net/wcs/1.1", + xlink: "http://www.w3.org/1999/xlink", + xsi: "http://www.w3.org/2001/XMLSchema-instance" + }, + regExes: { + trimSpace: /^\s*|\s*$/g, + removeSpace: /\s*/g, + splitSpace: /\s+/, + trimComma: /\s*,\s*/g + }, + VERSION: "1.1.2", + schemaLocation: "http://www.opengis.net/wcs/1.1 http://schemas.opengis.net/wcs/1.1/wcsGetCoverage.xsd", + write: function(a) { + a = this.writeNode("wcs:GetCoverage", + a); + this.setAttributeNS(a, this.namespaces.xsi, "xsi:schemaLocation", this.schemaLocation); + return OpenLayers.Format.XML.prototype.write.apply(this, [a]) + }, + writers: { + wcs: { + GetCoverage: function(a) { + var b = this.createElementNSPlus("wcs:GetCoverage", { + attributes: { + version: a.version || this.VERSION, + service: "WCS" + } + }); + this.writeNode("ows:Identifier", a.identifier, b); + this.writeNode("wcs:DomainSubset", a.domainSubset, b); + this.writeNode("wcs:Output", a.output, b); + return b + }, + DomainSubset: function(a) { + var b = this.createElementNSPlus("wcs:DomainSubset", {}); + this.writeNode("ows:BoundingBox", a.boundingBox, b); + a.temporalSubset && this.writeNode("wcs:TemporalSubset", a.temporalSubset, b); + return b + }, + TemporalSubset: function(a) { + for (var b = this.createElementNSPlus("wcs:TemporalSubset", {}), c = 0, d = a.timePeriods.length; c < d; ++c) this.writeNode("wcs:TimePeriod", a.timePeriods[c], b); + return b + }, + TimePeriod: function(a) { + var b = this.createElementNSPlus("wcs:TimePeriod", {}); + this.writeNode("wcs:BeginPosition", a.begin, b); + this.writeNode("wcs:EndPosition", a.end, b); + a.resolution && this.writeNode("wcs:TimeResolution", + a.resolution, b); + return b + }, + BeginPosition: function(a) { + return this.createElementNSPlus("wcs:BeginPosition", { + value: a + }) + }, + EndPosition: function(a) { + return this.createElementNSPlus("wcs:EndPosition", { + value: a + }) + }, + TimeResolution: function(a) { + return this.createElementNSPlus("wcs:TimeResolution", { + value: a + }) + }, + Output: function(a) { + var b = this.createElementNSPlus("wcs:Output", { + attributes: { + format: a.format, + store: a.store + } + }); + a.gridCRS && this.writeNode("wcs:GridCRS", a.gridCRS, b); + return b + }, + GridCRS: function(a) { + var b = this.createElementNSPlus("wcs:GridCRS", {}); + this.writeNode("wcs:GridBaseCRS", a.baseCRS, b); + a.type && this.writeNode("wcs:GridType", a.type, b); + a.origin && this.writeNode("wcs:GridOrigin", a.origin, b); + this.writeNode("wcs:GridOffsets", a.offsets, b); + a.CS && this.writeNode("wcs:GridCS", a.CS, b); + return b + }, + GridBaseCRS: function(a) { + return this.createElementNSPlus("wcs:GridBaseCRS", { + value: a + }) + }, + GridOrigin: function(a) { + return this.createElementNSPlus("wcs:GridOrigin", { + value: a + }) + }, + GridType: function(a) { + return this.createElementNSPlus("wcs:GridType", { + value: a + }) + }, + GridOffsets: function(a) { + return this.createElementNSPlus("wcs:GridOffsets", { + value: a + }) + }, + GridCS: function(a) { + return this.createElementNSPlus("wcs:GridCS", { + value: a + }) + } + }, + ows: OpenLayers.Format.OWSCommon.v1_1_0.prototype.writers.ows + }, + CLASS_NAME: "OpenLayers.Format.WCSGetCoverage" +}); +OpenLayers.Format.WPSExecute = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + ows: "http://www.opengis.net/ows/1.1", + gml: "http://www.opengis.net/gml", + wps: "http://www.opengis.net/wps/1.0.0", + wfs: "http://www.opengis.net/wfs", + ogc: "http://www.opengis.net/ogc", + wcs: "http://www.opengis.net/wcs", + xlink: "http://www.w3.org/1999/xlink", + xsi: "http://www.w3.org/2001/XMLSchema-instance" + }, + regExes: { + trimSpace: /^\s*|\s*$/g, + removeSpace: /\s*/g, + splitSpace: /\s+/, + trimComma: /\s*,\s*/g + }, + VERSION: "1.0.0", + schemaLocation: "http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd", + schemaLocationAttr: function() {}, + write: function(a) { + var b; + window.ActiveXObject ? this.xmldom = b = new ActiveXObject("Microsoft.XMLDOM") : b = document.implementation.createDocument("", "", null); + a = this.writeNode("wps:Execute", a, b); + this.setAttributeNS(a, this.namespaces.xsi, "xsi:schemaLocation", this.schemaLocation); + return OpenLayers.Format.XML.prototype.write.apply(this, [a]) + }, + writers: { + wps: { + Execute: function(a) { + var b = this.createElementNSPlus("wps:Execute", { + attributes: { + version: this.VERSION, + service: "WPS" + } + }); + this.writeNode("ows:Identifier", + a.identifier, b); + this.writeNode("wps:DataInputs", a.dataInputs, b); + this.writeNode("wps:ResponseForm", a.responseForm, b); + return b + }, + ResponseForm: function(a) { + var b = this.createElementNSPlus("wps:ResponseForm", {}); + a.rawDataOutput && this.writeNode("wps:RawDataOutput", a.rawDataOutput, b); + a.responseDocument && this.writeNode("wps:ResponseDocument", a.responseDocument, b); + return b + }, + ResponseDocument: function(a) { + var b = this.createElementNSPlus("wps:ResponseDocument", { + attributes: { + storeExecuteResponse: a.storeExecuteResponse, + lineage: a.lineage, + status: a.status + } + }); + a.output && this.writeNode("wps:Output", a.output, b); + return b + }, + Output: function(a) { + var b = this.createElementNSPlus("wps:Output", { + attributes: { + asReference: a.asReference + } + }); + this.writeNode("ows:Identifier", a.identifier, b); + this.writeNode("ows:Title", a.title, b); + this.writeNode("ows:Abstract", a["abstract"], b); + return b + }, + RawDataOutput: function(a) { + var b = this.createElementNSPlus("wps:RawDataOutput", { + attributes: { + mimeType: a.mimeType + } + }); + this.writeNode("ows:Identifier", a.identifier, + b); + return b + }, + DataInputs: function(a) { + for (var b = this.createElementNSPlus("wps:DataInputs", {}), c = 0, d = a.length; c < d; ++c) this.writeNode("wps:Input", a[c], b); + return b + }, + Input: function(a) { + var b = this.createElementNSPlus("wps:Input", {}); + this.writeNode("ows:Identifier", a.identifier, b); + a.title && this.writeNode("ows:Title", a.title, b); + a.data && this.writeNode("wps:Data", a.data, b); + a.reference && this.writeNode("wps:Reference", a.reference, b); + return b + }, + Data: function(a) { + var b = this.createElementNSPlus("wps:Data", {}); + a.literalData ? + this.writeNode("wps:LiteralData", a.literalData, b) : a.complexData && this.writeNode("wps:ComplexData", a.complexData, b); + return b + }, + LiteralData: function(a) { + return this.createElementNSPlus("wps:LiteralData", { + attributes: { + uom: a.uom + }, + value: a.value + }) + }, + ComplexData: function(a) { + var b = this.createElementNSPlus("wps:ComplexData", { + attributes: { + mimeType: a.mimeType, + encoding: a.encoding, + schema: a.schema + } + }), + c = a.value; + "string" === typeof c ? b.appendChild(this.getXMLDoc().createCDATASection(a.value)) : b.appendChild(c); + return b + }, + Reference: function(a) { + var b = this.createElementNSPlus("wps:Reference", { + attributes: { + mimeType: a.mimeType, + "xlink:href": a.href, + method: a.method, + encoding: a.encoding, + schema: a.schema + } + }); + a.body && this.writeNode("wps:Body", a.body, b); + return b + }, + Body: function(a) { + var b = this.createElementNSPlus("wps:Body", {}); + a.wcs ? this.writeNode("wcs:GetCoverage", a.wcs, b) : a.wfs ? (this.featureType = a.wfs.featureType, this.version = a.wfs.version, this.writeNode("wfs:GetFeature", a.wfs, b)) : this.writeNode("wps:Execute", a, b); + return b + } + }, + wcs: OpenLayers.Format.WCSGetCoverage.prototype.writers.wcs, + wfs: OpenLayers.Format.WFST.v1_1_0.prototype.writers.wfs, + ogc: OpenLayers.Format.Filter.v1_1_0.prototype.writers.ogc, + ows: OpenLayers.Format.OWSCommon.v1_1_0.prototype.writers.ows + }, + CLASS_NAME: "OpenLayers.Format.WPSExecute" +}); +OpenLayers.Control.PanZoom = OpenLayers.Class(OpenLayers.Control, { + slideFactor: 50, + slideRatio: null, + buttons: null, + position: null, + initialize: function(a) { + this.position = new OpenLayers.Pixel(OpenLayers.Control.PanZoom.X, OpenLayers.Control.PanZoom.Y); + OpenLayers.Control.prototype.initialize.apply(this, arguments) + }, + destroy: function() { + this.map && this.map.events.unregister("buttonclick", this, this.onButtonClick); + this.removeButtons(); + this.position = this.buttons = null; + OpenLayers.Control.prototype.destroy.apply(this, arguments) + }, + setMap: function(a) { + OpenLayers.Control.prototype.setMap.apply(this, arguments); + this.map.events.register("buttonclick", this, this.onButtonClick) + }, + draw: function(a) { + OpenLayers.Control.prototype.draw.apply(this, arguments); + a = this.position; + this.buttons = []; + var b = { + w: 18, + h: 18 + }, + c = new OpenLayers.Pixel(a.x + b.w / 2, a.y); + this._addButton("panup", "north-mini.png", c, b); + a.y = c.y + b.h; + this._addButton("panleft", "west-mini.png", a, b); + this._addButton("panright", "east-mini.png", a.add(b.w, 0), b); + this._addButton("pandown", "south-mini.png", + c.add(0, 2 * b.h), b); + this._addButton("zoomin", "zoom-plus-mini.png", c.add(0, 3 * b.h + 5), b); + this._addButton("zoomworld", "zoom-world-mini.png", c.add(0, 4 * b.h + 5), b); + this._addButton("zoomout", "zoom-minus-mini.png", c.add(0, 5 * b.h + 5), b); + return this.div + }, + _addButton: function(a, b, c, d) { + b = OpenLayers.Util.getImageLocation(b); + c = OpenLayers.Util.createAlphaImageDiv(this.id + "_" + a, c, d, b, "absolute"); + c.style.cursor = "pointer"; + this.div.appendChild(c); + c.action = a; + c.className = "olButton"; + this.buttons.push(c); + return c + }, + _removeButton: function(a) { + this.div.removeChild(a); + OpenLayers.Util.removeItem(this.buttons, a) + }, + removeButtons: function() { + for (var a = this.buttons.length - 1; 0 <= a; --a) this._removeButton(this.buttons[a]) + }, + onButtonClick: function(a) { + switch (a.buttonElement.action) { + case "panup": + this.map.pan(0, -this.getSlideFactor("h")); + break; + case "pandown": + this.map.pan(0, this.getSlideFactor("h")); + break; + case "panleft": + this.map.pan(-this.getSlideFactor("w"), 0); + break; + case "panright": + this.map.pan(this.getSlideFactor("w"), 0); + break; + case "zoomin": + this.map.zoomIn(); + break; + case "zoomout": + this.map.zoomOut(); + break; + case "zoomworld": + this.map.zoomToMaxExtent() + } + }, + getSlideFactor: function(a) { + return this.slideRatio ? this.map.getSize()[a] * this.slideRatio : this.slideFactor + }, + CLASS_NAME: "OpenLayers.Control.PanZoom" +}); +OpenLayers.Control.PanZoom.X = 4; +OpenLayers.Control.PanZoom.Y = 4; +OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, { + zoomStopWidth: 18, + zoomStopHeight: 11, + slider: null, + sliderEvents: null, + zoombarDiv: null, + zoomWorldIcon: !1, + panIcons: !0, + forceFixedZoomLevel: !1, + mouseDragStart: null, + deltaY: null, + zoomStart: null, + destroy: function() { + this._removeZoomBar(); + this.map.events.un({ + changebaselayer: this.redraw, + scope: this + }); + OpenLayers.Control.PanZoom.prototype.destroy.apply(this, arguments); + delete this.mouseDragStart; + delete this.zoomStart + }, + setMap: function(a) { + OpenLayers.Control.PanZoom.prototype.setMap.apply(this, + arguments); + this.map.events.register("changebaselayer", this, this.redraw) + }, + redraw: function() { + null != this.div && (this.removeButtons(), this._removeZoomBar()); + this.draw() + }, + draw: function(a) { + OpenLayers.Control.prototype.draw.apply(this, arguments); + a = this.position.clone(); + this.buttons = []; + var b = { + w: 18, + h: 18 + }; + if (this.panIcons) { + var c = new OpenLayers.Pixel(a.x + b.w / 2, a.y), + d = b.w; + this.zoomWorldIcon && (c = new OpenLayers.Pixel(a.x + b.w, a.y)); + this._addButton("panup", "north-mini.png", c, b); + a.y = c.y + b.h; + this._addButton("panleft", + "west-mini.png", a, b); + this.zoomWorldIcon && (this._addButton("zoomworld", "zoom-world-mini.png", a.add(b.w, 0), b), d *= 2); + this._addButton("panright", "east-mini.png", a.add(d, 0), b); + this._addButton("pandown", "south-mini.png", c.add(0, 2 * b.h), b); + this._addButton("zoomin", "zoom-plus-mini.png", c.add(0, 3 * b.h + 5), b); + c = this._addZoomBar(c.add(0, 4 * b.h + 5)); + this._addButton("zoomout", "zoom-minus-mini.png", c, b) + } else this._addButton("zoomin", "zoom-plus-mini.png", a, b), c = this._addZoomBar(a.add(0, b.h)), this._addButton("zoomout", + "zoom-minus-mini.png", c, b), this.zoomWorldIcon && (c = c.add(0, b.h + 3), this._addButton("zoomworld", "zoom-world-mini.png", c, b)); + return this.div + }, + _addZoomBar: function(a) { + var b = OpenLayers.Util.getImageLocation("slider.png"), + c = this.id + "_" + this.map.id, + d = this.map.getNumZoomLevels() - 1 - this.map.getZoom(), + d = OpenLayers.Util.createAlphaImageDiv(c, a.add(-1, d * this.zoomStopHeight), { + w: 20, + h: 9 + }, b, "absolute"); + d.style.cursor = "move"; + this.slider = d; + this.sliderEvents = new OpenLayers.Events(this, d, null, !0, { + includeXY: !0 + }); + this.sliderEvents.on({ + touchstart: this.zoomBarDown, + touchmove: this.zoomBarDrag, + touchend: this.zoomBarUp, + mousedown: this.zoomBarDown, + mousemove: this.zoomBarDrag, + mouseup: this.zoomBarUp + }); + var e = { + w: this.zoomStopWidth, + h: this.zoomStopHeight * this.map.getNumZoomLevels() + }, + b = OpenLayers.Util.getImageLocation("zoombar.png"), + c = null; + OpenLayers.Util.alphaHack() ? (c = this.id + "_" + this.map.id, c = OpenLayers.Util.createAlphaImageDiv(c, a, { + w: e.w, + h: this.zoomStopHeight + }, b, "absolute", null, "crop"), c.style.height = e.h + "px") : c = OpenLayers.Util.createDiv("OpenLayers_Control_PanZoomBar_Zoombar" + + this.map.id, a, e, b); + c.style.cursor = "pointer"; + c.className = "olButton"; + this.zoombarDiv = c; + this.div.appendChild(c); + this.startTop = parseInt(c.style.top); + this.div.appendChild(d); + this.map.events.register("zoomend", this, this.moveZoomBar); + return a = a.add(0, this.zoomStopHeight * this.map.getNumZoomLevels()) + }, + _removeZoomBar: function() { + this.sliderEvents.un({ + touchstart: this.zoomBarDown, + touchmove: this.zoomBarDrag, + touchend: this.zoomBarUp, + mousedown: this.zoomBarDown, + mousemove: this.zoomBarDrag, + mouseup: this.zoomBarUp + }); + this.sliderEvents.destroy(); + this.div.removeChild(this.zoombarDiv); + this.zoombarDiv = null; + this.div.removeChild(this.slider); + this.slider = null; + this.map.events.unregister("zoomend", this, this.moveZoomBar) + }, + onButtonClick: function(a) { + OpenLayers.Control.PanZoom.prototype.onButtonClick.apply(this, arguments); + if (a.buttonElement === this.zoombarDiv) { + var b = a.buttonXY.y / this.zoomStopHeight; + if (this.forceFixedZoomLevel || !this.map.fractionalZoom) b = Math.floor(b); + b = this.map.getNumZoomLevels() - 1 - b; + b = Math.min(Math.max(b, 0), this.map.getNumZoomLevels() - + 1); + this.map.zoomTo(b) + } + }, + passEventToSlider: function(a) { + this.sliderEvents.handleBrowserEvent(a) + }, + zoomBarDown: function(a) { + if (OpenLayers.Event.isLeftClick(a) || OpenLayers.Event.isSingleTouch(a)) this.map.events.on({ + touchmove: this.passEventToSlider, + mousemove: this.passEventToSlider, + mouseup: this.passEventToSlider, + scope: this + }), this.mouseDragStart = a.xy.clone(), this.zoomStart = a.xy.clone(), this.div.style.cursor = "move", this.zoombarDiv.offsets = null, OpenLayers.Event.stop(a) + }, + zoomBarDrag: function(a) { + if (null != this.mouseDragStart) { + var b = + this.mouseDragStart.y - a.xy.y, + c = OpenLayers.Util.pagePosition(this.zoombarDiv); + 0 < a.clientY - c[1] && a.clientY - c[1] < parseInt(this.zoombarDiv.style.height) - 2 && (this.slider.style.top = parseInt(this.slider.style.top) - b + "px", this.mouseDragStart = a.xy.clone()); + this.deltaY = this.zoomStart.y - a.xy.y; + OpenLayers.Event.stop(a) + } + }, + zoomBarUp: function(a) { + if ((OpenLayers.Event.isLeftClick(a) || "touchend" === a.type) && this.mouseDragStart) { + this.div.style.cursor = ""; + this.map.events.un({ + touchmove: this.passEventToSlider, + mouseup: this.passEventToSlider, + mousemove: this.passEventToSlider, + scope: this + }); + var b = this.map.zoom; + !this.forceFixedZoomLevel && this.map.fractionalZoom ? (b += this.deltaY / this.zoomStopHeight, b = Math.min(Math.max(b, 0), this.map.getNumZoomLevels() - 1)) : (b += this.deltaY / this.zoomStopHeight, b = Math.max(Math.round(b), 0)); + this.map.zoomTo(b); + this.zoomStart = this.mouseDragStart = null; + this.deltaY = 0; + OpenLayers.Event.stop(a) + } + }, + moveZoomBar: function() { + this.slider.style.top = (this.map.getNumZoomLevels() - 1 - this.map.getZoom()) * this.zoomStopHeight + this.startTop + + 1 + "px" + }, + CLASS_NAME: "OpenLayers.Control.PanZoomBar" +}); +OpenLayers.Format.WFSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, { + defaultVersion: "1.1.0", + errorProperty: "service", + CLASS_NAME: "OpenLayers.Format.WFSCapabilities" +}); +OpenLayers.Format.WFSCapabilities.v1 = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + wfs: "http://www.opengis.net/wfs", + xlink: "http://www.w3.org/1999/xlink", + xsi: "http://www.w3.org/2001/XMLSchema-instance", + ows: "http://www.opengis.net/ows" + }, + defaultPrefix: "wfs", + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + a && 9 == a.nodeType && (a = a.documentElement); + var b = {}; + this.readNode(a, b); + return b + }, + readers: { + wfs: { + WFS_Capabilities: function(a, b) { + this.readChildNodes(a, b) + }, + FeatureTypeList: function(a, b) { + b.featureTypeList = { + featureTypes: [] + }; + this.readChildNodes(a, b.featureTypeList) + }, + FeatureType: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + b.featureTypes.push(c) + }, + Name: function(a, b) { + var c = this.getChildValue(a); + c && (c = c.split(":"), b.name = c.pop(), 0 < c.length && (b.featureNS = this.lookupNamespaceURI(a, c[0]))) + }, + Title: function(a, b) { + var c = this.getChildValue(a); + c && (b.title = c) + }, + Abstract: function(a, b) { + var c = this.getChildValue(a); + c && (b["abstract"] = c) + } + } + }, + CLASS_NAME: "OpenLayers.Format.WFSCapabilities.v1" +}); +OpenLayers.Format.WFSCapabilities.v1_1_0 = OpenLayers.Class(OpenLayers.Format.WFSCapabilities.v1, { + regExes: { + trimSpace: /^\s*|\s*$/g, + removeSpace: /\s*/g, + splitSpace: /\s+/, + trimComma: /\s*,\s*/g + }, + readers: { + wfs: OpenLayers.Util.applyDefaults({ + DefaultSRS: function(a, b) { + var c = this.getChildValue(a); + c && (b.srs = c) + } + }, OpenLayers.Format.WFSCapabilities.v1.prototype.readers.wfs), + ows: OpenLayers.Format.OWSCommon.v1.prototype.readers.ows + }, + CLASS_NAME: "OpenLayers.Format.WFSCapabilities.v1_1_0" +}); +OpenLayers.Layer.Image = OpenLayers.Class(OpenLayers.Layer, { + isBaseLayer: !0, + url: null, + extent: null, + size: null, + tile: null, + aspectRatio: null, + initialize: function(a, b, c, d, e) { + this.url = b; + this.maxExtent = this.extent = c; + this.size = d; + OpenLayers.Layer.prototype.initialize.apply(this, [a, e]); + this.aspectRatio = this.extent.getHeight() / this.size.h / (this.extent.getWidth() / this.size.w) + }, + destroy: function() { + this.tile && (this.removeTileMonitoringHooks(this.tile), this.tile.destroy(), this.tile = null); + OpenLayers.Layer.prototype.destroy.apply(this, + arguments) + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.Image(this.name, this.url, this.extent, this.size, this.getOptions())); + return a = OpenLayers.Layer.prototype.clone.apply(this, [a]) + }, + setMap: function(a) { + null == this.options.maxResolution && (this.options.maxResolution = this.aspectRatio * this.extent.getWidth() / this.size.w); + OpenLayers.Layer.prototype.setMap.apply(this, arguments) + }, + moveTo: function(a, b, c) { + OpenLayers.Layer.prototype.moveTo.apply(this, arguments); + var d = null == this.tile; + if (b || d) { + this.setTileSize(); + var e = this.map.getLayerPxFromLonLat({ + lon: this.extent.left, + lat: this.extent.top + }); + d ? (this.tile = new OpenLayers.Tile.Image(this, e, this.extent, null, this.tileSize), this.addTileMonitoringHooks(this.tile)) : (this.tile.size = this.tileSize.clone(), this.tile.position = e.clone()); + this.tile.draw() + } + }, + setTileSize: function() { + var a = this.extent.getWidth() / this.map.getResolution(), + b = this.extent.getHeight() / this.map.getResolution(); + this.tileSize = new OpenLayers.Size(a, b) + }, + addTileMonitoringHooks: function(a) { + a.onLoadStart = + function() { + this.events.triggerEvent("loadstart") + }; + a.events.register("loadstart", this, a.onLoadStart); + a.onLoadEnd = function() { + this.events.triggerEvent("loadend") + }; + a.events.register("loadend", this, a.onLoadEnd); + a.events.register("unload", this, a.onLoadEnd) + }, + removeTileMonitoringHooks: function(a) { + a.unload(); + a.events.un({ + loadstart: a.onLoadStart, + loadend: a.onLoadEnd, + unload: a.onLoadEnd, + scope: this + }) + }, + setUrl: function(a) { + this.url = a; + this.tile.draw() + }, + getURL: function() { + return this.url + }, + CLASS_NAME: "OpenLayers.Layer.Image" +}); +OpenLayers.Strategy = OpenLayers.Class({ + layer: null, + options: null, + active: null, + autoActivate: !0, + autoDestroy: !0, + initialize: function(a) { + OpenLayers.Util.extend(this, a); + this.options = a; + this.active = !1 + }, + destroy: function() { + this.deactivate(); + this.options = this.layer = null + }, + setLayer: function(a) { + this.layer = a + }, + activate: function() { + return !this.active ? this.active = !0 : !1 + }, + deactivate: function() { + return this.active ? (this.active = !1, !0) : !1 + }, + CLASS_NAME: "OpenLayers.Strategy" +}); +OpenLayers.Strategy.Save = OpenLayers.Class(OpenLayers.Strategy, { + events: null, + auto: !1, + timer: null, + initialize: function(a) { + OpenLayers.Strategy.prototype.initialize.apply(this, [a]); + this.events = new OpenLayers.Events(this) + }, + activate: function() { + var a = OpenLayers.Strategy.prototype.activate.call(this); + if (a && this.auto) + if ("number" === typeof this.auto) this.timer = window.setInterval(OpenLayers.Function.bind(this.save, this), 1E3 * this.auto); + else this.layer.events.on({ + featureadded: this.triggerSave, + afterfeaturemodified: this.triggerSave, + scope: this + }); + return a + }, + deactivate: function() { + var a = OpenLayers.Strategy.prototype.deactivate.call(this); + a && this.auto && ("number" === typeof this.auto ? window.clearInterval(this.timer) : this.layer.events.un({ + featureadded: this.triggerSave, + afterfeaturemodified: this.triggerSave, + scope: this + })); + return a + }, + triggerSave: function(a) { + var b = a.feature; + (b.state === OpenLayers.State.INSERT || b.state === OpenLayers.State.UPDATE || b.state === OpenLayers.State.DELETE) && this.save([a.feature]) + }, + save: function(a) { + a || (a = this.layer.features); + this.events.triggerEvent("start", { + features: a + }); + var b = this.layer.projection, + c = this.layer.map.getProjectionObject(); + if (!c.equals(b)) { + for (var d = a.length, e = Array(d), f, g, h = 0; h < d; ++h) f = a[h], g = f.clone(), g.fid = f.fid, g.state = f.state, f.url && (g.url = f.url), g._original = f, g.geometry.transform(c, b), e[h] = g; + a = e + } + this.layer.protocol.commit(a, { + callback: this.onCommit, + scope: this + }) + }, + onCommit: function(a) { + var b = { + response: a + }; + if (a.success()) { + for (var c = a.reqFeatures, d, e = [], f = a.insertIds || [], g = 0, h = 0, i = c.length; h < i; ++h) + if (d = c[h], + d = d._original || d, a = d.state) a == OpenLayers.State.DELETE ? e.push(d) : a == OpenLayers.State.INSERT && (d.fid = f[g], ++g), d.state = null; + 0 < e.length && this.layer.destroyFeatures(e); + this.events.triggerEvent("success", b) + } else this.events.triggerEvent("fail", b) + }, + CLASS_NAME: "OpenLayers.Strategy.Save" +}); +OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, { + defaultDesc: "No description available", + extractWaypoints: !0, + extractTracks: !0, + extractRoutes: !0, + extractAttributes: !0, + namespaces: { + gpx: "http://www.topografix.com/GPX/1/1", + xsi: "http://www.w3.org/2001/XMLSchema-instance" + }, + schemaLocation: "http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd", + creator: "OpenLayers", + initialize: function(a) { + this.externalProjection = new OpenLayers.Projection("EPSG:4326"); + OpenLayers.Format.XML.prototype.initialize.apply(this, [a]) + }, + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + var b = []; + if (this.extractTracks) + for (var c = a.getElementsByTagName("trk"), d = 0, e = c.length; d < e; d++) { + var f = {}; + this.extractAttributes && (f = this.parseAttributes(c[d])); + for (var g = this.getElementsByTagNameNS(c[d], c[d].namespaceURI, "trkseg"), h = 0, i = g.length; h < i; h++) { + var j = this.extractSegment(g[h], "trkpt"); + b.push(new OpenLayers.Feature.Vector(j, f)) + } + } + if (this.extractRoutes) { + e = a.getElementsByTagName("rte"); + c = 0; + for (d = + e.length; c < d; c++) f = {}, this.extractAttributes && (f = this.parseAttributes(e[c])), g = this.extractSegment(e[c], "rtept"), b.push(new OpenLayers.Feature.Vector(g, f)) + } + if (this.extractWaypoints) { + a = a.getElementsByTagName("wpt"); + c = 0; + for (e = a.length; c < e; c++) f = {}, this.extractAttributes && (f = this.parseAttributes(a[c])), d = new OpenLayers.Geometry.Point(a[c].getAttribute("lon"), a[c].getAttribute("lat")), b.push(new OpenLayers.Feature.Vector(d, f)) + } + if (this.internalProjection && this.externalProjection) { + f = 0; + for (a = b.length; f < + a; f++) b[f].geometry.transform(this.externalProjection, this.internalProjection) + } + return b + }, + extractSegment: function(a, b) { + for (var c = this.getElementsByTagNameNS(a, a.namespaceURI, b), d = [], e = 0, f = c.length; e < f; e++) d.push(new OpenLayers.Geometry.Point(c[e].getAttribute("lon"), c[e].getAttribute("lat"))); + return new OpenLayers.Geometry.LineString(d) + }, + parseAttributes: function(a) { + for (var b = {}, a = a.firstChild, c, d; a;) { + if (1 == a.nodeType && a.firstChild && (c = a.firstChild, 3 == c.nodeType || 4 == c.nodeType)) d = a.prefix ? a.nodeName.split(":")[1] : + a.nodeName, "trkseg" != d && "rtept" != d && (b[d] = c.nodeValue); + a = a.nextSibling + } + return b + }, + write: function(a, b) { + var a = OpenLayers.Util.isArray(a) ? a : [a], + c = this.createElementNS(this.namespaces.gpx, "gpx"); + c.setAttribute("version", "1.1"); + c.setAttribute("creator", this.creator); + this.setAttributes(c, { + "xsi:schemaLocation": this.schemaLocation + }); + b && "object" == typeof b && c.appendChild(this.buildMetadataNode(b)); + for (var d = 0, e = a.length; d < e; d++) c.appendChild(this.buildFeatureNode(a[d])); + return OpenLayers.Format.XML.prototype.write.apply(this, [c]) + }, + buildMetadataNode: function(a) { + for (var b = ["name", "desc", "author"], c = this.createElementNSPlus("gpx:metadata"), d = 0; d < b.length; d++) { + var e = b[d]; + if (a[e]) { + var f = this.createElementNSPlus("gpx:" + e); + f.appendChild(this.createTextNode(a[e])); + c.appendChild(f) + } + } + return c + }, + buildFeatureNode: function(a) { + var b = a.geometry, + b = b.clone(); + this.internalProjection && this.externalProjection && b.transform(this.internalProjection, this.externalProjection); + if ("OpenLayers.Geometry.Point" == b.CLASS_NAME) { + var c = this.buildWptNode(b); + this.appendAttributesNode(c, a); + return c + } + c = this.createElementNSPlus("gpx:trk"); + this.appendAttributesNode(c, a); + for (var a = this.buildTrkSegNode(b), a = OpenLayers.Util.isArray(a) ? a : [a], b = 0, d = a.length; b < d; b++) c.appendChild(a[b]); + return c + }, + buildTrkSegNode: function(a) { + var b, c, d, e; + if ("OpenLayers.Geometry.LineString" == a.CLASS_NAME || "OpenLayers.Geometry.LinearRing" == a.CLASS_NAME) { + b = this.createElementNSPlus("gpx:trkseg"); + c = 0; + for (d = a.components.length; c < d; c++) e = a.components[c], b.appendChild(this.buildTrkPtNode(e)); + return b + } + b = []; + c = 0; + for (d = a.components.length; c < d; c++) b.push(this.buildTrkSegNode(a.components[c])); + return b + }, + buildTrkPtNode: function(a) { + var b = this.createElementNSPlus("gpx:trkpt"); + b.setAttribute("lon", a.x); + b.setAttribute("lat", a.y); + return b + }, + buildWptNode: function(a) { + var b = this.createElementNSPlus("gpx:wpt"); + b.setAttribute("lon", a.x); + b.setAttribute("lat", a.y); + return b + }, + appendAttributesNode: function(a, b) { + var c = this.createElementNSPlus("gpx:name"); + c.appendChild(this.createTextNode(b.attributes.name || + b.id)); + a.appendChild(c); + c = this.createElementNSPlus("gpx:desc"); + c.appendChild(this.createTextNode(b.attributes.description || this.defaultDesc)); + a.appendChild(c) + }, + CLASS_NAME: "OpenLayers.Format.GPX" +}); +OpenLayers.Format.WMSDescribeLayer = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, { + defaultVersion: "1.1.1", + getVersion: function(a, b) { + var c = OpenLayers.Format.XML.VersionedOGC.prototype.getVersion.apply(this, arguments); + if ("1.1.1" == c || "1.1.0" == c) c = "1.1"; + return c + }, + CLASS_NAME: "OpenLayers.Format.WMSDescribeLayer" +}); +OpenLayers.Format.WMSDescribeLayer.v1_1 = OpenLayers.Class(OpenLayers.Format.WMSDescribeLayer, { + initialize: function(a) { + OpenLayers.Format.WMSDescribeLayer.prototype.initialize.apply(this, [a]) + }, + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + for (var a = a.documentElement.childNodes, b = [], c, d, e = 0; e < a.length; ++e) + if (c = a[e], d = c.nodeName, "LayerDescription" == d) { + d = c.getAttribute("name"); + var f = "", + g = "", + h = ""; + c.getAttribute("owsType") ? (f = c.getAttribute("owsType"), g = c.getAttribute("owsURL")) : + "" != c.getAttribute("wfs") ? (f = "WFS", g = c.getAttribute("wfs")) : "" != c.getAttribute("wcs") && (f = "WCS", g = c.getAttribute("wcs")); + c = c.getElementsByTagName("Query"); + 0 < c.length && ((h = c[0].getAttribute("typeName")) || (h = c[0].getAttribute("typename"))); + b.push({ + layerName: d, + owsType: f, + owsURL: g, + typeName: h + }) + } + return b + }, + CLASS_NAME: "OpenLayers.Format.WMSDescribeLayer.v1_1" +}); +OpenLayers.Layer.XYZ = OpenLayers.Class(OpenLayers.Layer.Grid, { + isBaseLayer: !0, + sphericalMercator: !1, + zoomOffset: 0, + serverResolutions: null, + initialize: function(a, b, c) { + if (c && c.sphericalMercator || this.sphericalMercator) c = OpenLayers.Util.extend({ + projection: "EPSG:900913", + numZoomLevels: 19 + }, c); + OpenLayers.Layer.Grid.prototype.initialize.apply(this, [a || this.name, b || this.url, {}, c]) + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.XYZ(this.name, this.url, this.getOptions())); + return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [a]) + }, + getURL: function(a) { + var a = this.getXYZ(a), + b = this.url; + OpenLayers.Util.isArray(b) && (b = this.selectUrl("" + a.x + a.y + a.z, b)); + return OpenLayers.String.format(b, a) + }, + getXYZ: function(a) { + var b = this.getServerResolution(), + c = Math.round((a.left - this.maxExtent.left) / (b * this.tileSize.w)), + a = Math.round((this.maxExtent.top - a.top) / (b * this.tileSize.h)), + b = this.getServerZoom(); + if (this.wrapDateLine) var d = Math.pow(2, b), + c = (c % d + d) % d; + return { + x: c, + y: a, + z: b + } + }, + setMap: function(a) { + OpenLayers.Layer.Grid.prototype.setMap.apply(this, + arguments); + this.tileOrigin || (this.tileOrigin = new OpenLayers.LonLat(this.maxExtent.left, this.maxExtent.bottom)) + }, + CLASS_NAME: "OpenLayers.Layer.XYZ" +}); +OpenLayers.Layer.OSM = OpenLayers.Class(OpenLayers.Layer.XYZ, { + name: "OpenStreetMap", + url: ["http://a.tile.openstreetmap.org/${z}/${x}/${y}.png", "http://b.tile.openstreetmap.org/${z}/${x}/${y}.png", "http://c.tile.openstreetmap.org/${z}/${x}/${y}.png"], + attribution: "Data CC-By-SA by <a href='http://openstreetmap.org/'>OpenStreetMap</a>", + sphericalMercator: !0, + wrapDateLine: !0, + tileOptions: null, + initialize: function(a, b, c) { + OpenLayers.Layer.XYZ.prototype.initialize.apply(this, arguments); + this.tileOptions = OpenLayers.Util.extend({ + crossOriginKeyword: "anonymous" + }, + this.options && this.options.tileOptions) + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.OSM(this.name, this.url, this.getOptions())); + return a = OpenLayers.Layer.XYZ.prototype.clone.apply(this, [a]) + }, + CLASS_NAME: "OpenLayers.Layer.OSM" +}); +OpenLayers.Renderer = OpenLayers.Class({ + container: null, + root: null, + extent: null, + locked: !1, + size: null, + resolution: null, + map: null, + featureDx: 0, + initialize: function(a, b) { + this.container = OpenLayers.Util.getElement(a); + OpenLayers.Util.extend(this, b) + }, + destroy: function() { + this.map = this.resolution = this.size = this.extent = this.container = null + }, + supported: function() { + return !1 + }, + setExtent: function(a, b) { + this.extent = a.clone(); + if (this.map.baseLayer && this.map.baseLayer.wrapDateLine) { + var c = a.getWidth() / this.map.getExtent().getWidth(), + a = a.scale(1 / c); + this.extent = a.wrapDateLine(this.map.getMaxExtent()).scale(c) + } + b && (this.resolution = null); + return !0 + }, + setSize: function(a) { + this.size = a.clone(); + this.resolution = null + }, + getResolution: function() { + return this.resolution = this.resolution || this.map.getResolution() + }, + drawFeature: function(a, b) { + null == b && (b = a.style); + if (a.geometry) { + var c = a.geometry.getBounds(); + if (c) { + var d; + this.map.baseLayer && this.map.baseLayer.wrapDateLine && (d = this.map.getMaxExtent()); + c.intersectsBounds(this.extent, { + worldBounds: d + }) ? this.calculateFeatureDx(c, + d) : b = { + display: "none" + }; + c = this.drawGeometry(a.geometry, b, a.id); + if ("none" != b.display && b.label && !1 !== c) { + d = a.geometry.getCentroid(); + if (b.labelXOffset || b.labelYOffset) { + var e = isNaN(b.labelXOffset) ? 0 : b.labelXOffset, + f = isNaN(b.labelYOffset) ? 0 : b.labelYOffset, + g = this.getResolution(); + d.move(e * g, f * g) + } + this.drawText(a.id, b, d) + } else this.removeText(a.id); + return c + } + } + }, + calculateFeatureDx: function(a, b) { + this.featureDx = 0; + if (b) { + var c = b.getWidth(); + this.featureDx = Math.round(((a.left + a.right) / 2 - (this.extent.left + this.extent.right) / + 2) / c) * c + } + }, + drawGeometry: function() {}, + drawText: function() {}, + removeText: function() {}, + clear: function() {}, + getFeatureIdFromEvent: function() {}, + eraseFeatures: function(a) { + OpenLayers.Util.isArray(a) || (a = [a]); + for (var b = 0, c = a.length; b < c; ++b) { + var d = a[b]; + this.eraseGeometry(d.geometry, d.id); + this.removeText(d.id) + } + }, + eraseGeometry: function() {}, + moveRoot: function() {}, + getRenderLayerId: function() { + return this.container.id + }, + applyDefaultSymbolizer: function(a) { + var b = OpenLayers.Util.extend({}, OpenLayers.Renderer.defaultSymbolizer); + !1 === a.stroke && (delete b.strokeWidth, delete b.strokeColor); + !1 === a.fill && delete b.fillColor; + OpenLayers.Util.extend(b, a); + return b + }, + CLASS_NAME: "OpenLayers.Renderer" +}); +OpenLayers.Renderer.defaultSymbolizer = { + fillColor: "#000000", + strokeColor: "#000000", + strokeWidth: 2, + fillOpacity: 1, + strokeOpacity: 1, + pointRadius: 0, + labelAlign: "cm" +}; +OpenLayers.Renderer.symbol = { + star: [350, 75, 379, 161, 469, 161, 397, 215, 423, 301, 350, 250, 277, 301, 303, 215, 231, 161, 321, 161, 350, 75], + cross: [4, 0, 6, 0, 6, 4, 10, 4, 10, 6, 6, 6, 6, 10, 4, 10, 4, 6, 0, 6, 0, 4, 4, 4, 4, 0], + x: [0, 0, 25, 0, 50, 35, 75, 0, 100, 0, 65, 50, 100, 100, 75, 100, 50, 65, 25, 100, 0, 100, 35, 50, 0, 0], + square: [0, 0, 0, 1, 1, 1, 1, 0, 0, 0], + triangle: [0, 10, 10, 10, 5, 0, 0, 10] +}; +OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, { + hitDetection: !0, + hitOverflow: 0, + canvas: null, + features: null, + pendingRedraw: !1, + cachedSymbolBounds: {}, + initialize: function(a, b) { + OpenLayers.Renderer.prototype.initialize.apply(this, arguments); + this.root = document.createElement("canvas"); + this.container.appendChild(this.root); + this.canvas = this.root.getContext("2d"); + this.features = {}; + this.hitDetection && (this.hitCanvas = document.createElement("canvas"), this.hitContext = this.hitCanvas.getContext("2d")) + }, + setExtent: function() { + OpenLayers.Renderer.prototype.setExtent.apply(this, arguments); + return !1 + }, + eraseGeometry: function(a, b) { + this.eraseFeatures(this.features[b][0]) + }, + supported: function() { + return OpenLayers.CANVAS_SUPPORTED + }, + setSize: function(a) { + this.size = a.clone(); + var b = this.root; + b.style.width = a.w + "px"; + b.style.height = a.h + "px"; + b.width = a.w; + b.height = a.h; + this.resolution = null; + this.hitDetection && (b = this.hitCanvas, b.style.width = a.w + "px", b.style.height = a.h + "px", b.width = a.w, b.height = a.h) + }, + drawFeature: function(a, + b) { + var c; + if (a.geometry) { + b = this.applyDefaultSymbolizer(b || a.style); + c = a.geometry.getBounds(); + var d; + this.map.baseLayer && this.map.baseLayer.wrapDateLine && (d = this.map.getMaxExtent()); + d = c && c.intersectsBounds(this.extent, { + worldBounds: d + }); + (c = "none" !== b.display && !!c && d) ? this.features[a.id] = [a, b]: delete this.features[a.id]; + this.pendingRedraw = !0 + } + this.pendingRedraw && !this.locked && (this.redraw(), this.pendingRedraw = !1); + return c + }, + drawGeometry: function(a, b, c) { + var d = a.CLASS_NAME; + if ("OpenLayers.Geometry.Collection" == + d || "OpenLayers.Geometry.MultiPoint" == d || "OpenLayers.Geometry.MultiLineString" == d || "OpenLayers.Geometry.MultiPolygon" == d) + for (d = 0; d < a.components.length; d++) this.drawGeometry(a.components[d], b, c); + else switch (a.CLASS_NAME) { + case "OpenLayers.Geometry.Point": + this.drawPoint(a, b, c); + break; + case "OpenLayers.Geometry.LineString": + this.drawLineString(a, b, c); + break; + case "OpenLayers.Geometry.LinearRing": + this.drawLinearRing(a, b, c); + break; + case "OpenLayers.Geometry.Polygon": + this.drawPolygon(a, b, c) + } + }, + drawExternalGraphic: function(a, + b, c) { + var d = new Image; + b.graphicTitle && (d.title = b.graphicTitle); + var e = b.graphicWidth || b.graphicHeight, + f = b.graphicHeight || b.graphicWidth, + e = e ? e : 2 * b.pointRadius, + f = f ? f : 2 * b.pointRadius, + g = void 0 != b.graphicXOffset ? b.graphicXOffset : -(0.5 * e), + h = void 0 != b.graphicYOffset ? b.graphicYOffset : -(0.5 * f), + i = b.graphicOpacity || b.fillOpacity; + d.onload = OpenLayers.Function.bind(function() { + if (this.features[c]) { + var b = this.getLocalXY(a), + k = b[0], + b = b[1]; + if (!isNaN(k) && !isNaN(b)) { + var k = k + g | 0, + b = b + h | 0, + l = this.canvas; + l.globalAlpha = i; + var m = + OpenLayers.Renderer.Canvas.drawImageScaleFactor || (OpenLayers.Renderer.Canvas.drawImageScaleFactor = /android 2.1/.test(navigator.userAgent.toLowerCase()) ? 320 / window.screen.width : 1); + l.drawImage(d, k * m, b * m, e * m, f * m); + if (this.hitDetection) { + this.setHitContextStyle("fill", c); + this.hitContext.fillRect(k, b, e, f) + } + } + } + }, this); + d.src = b.externalGraphic + }, + drawNamedSymbol: function(a, b, c) { + var d, e, f, g; + f = Math.PI / 180; + var h = OpenLayers.Renderer.symbol[b.graphicName]; + if (!h) throw Error(b.graphicName + " is not a valid symbol name"); + if (h.length && !(2 > h.length) && (a = this.getLocalXY(a), e = a[0], g = a[1], !isNaN(e) && !isNaN(g))) { + this.canvas.lineCap = "round"; + this.canvas.lineJoin = "round"; + this.hitDetection && (this.hitContext.lineCap = "round", this.hitContext.lineJoin = "round"); + if (b.graphicName in this.cachedSymbolBounds) d = this.cachedSymbolBounds[b.graphicName]; + else { + d = new OpenLayers.Bounds; + for (a = 0; a < h.length; a += 2) d.extend(new OpenLayers.LonLat(h[a], h[a + 1])); + this.cachedSymbolBounds[b.graphicName] = d + } + this.canvas.save(); + this.hitDetection && this.hitContext.save(); + this.canvas.translate(e, g); + this.hitDetection && this.hitContext.translate(e, g); + a = f * b.rotation; + isNaN(a) || (this.canvas.rotate(a), this.hitDetection && this.hitContext.rotate(a)); + f = 2 * b.pointRadius / Math.max(d.getWidth(), d.getHeight()); + this.canvas.scale(f, f); + this.hitDetection && this.hitContext.scale(f, f); + a = d.getCenterLonLat().lon; + d = d.getCenterLonLat().lat; + this.canvas.translate(-a, -d); + this.hitDetection && this.hitContext.translate(-a, -d); + g = b.strokeWidth; + b.strokeWidth = g / f; + if (!1 !== b.fill) { + this.setCanvasStyle("fill", + b); + this.canvas.beginPath(); + for (a = 0; a < h.length; a += 2) d = h[a], e = h[a + 1], 0 == a && this.canvas.moveTo(d, e), this.canvas.lineTo(d, e); + this.canvas.closePath(); + this.canvas.fill(); + if (this.hitDetection) { + this.setHitContextStyle("fill", c, b); + this.hitContext.beginPath(); + for (a = 0; a < h.length; a += 2) d = h[a], e = h[a + 1], 0 == a && this.canvas.moveTo(d, e), this.hitContext.lineTo(d, e); + this.hitContext.closePath(); + this.hitContext.fill() + } + } + if (!1 !== b.stroke) { + this.setCanvasStyle("stroke", b); + this.canvas.beginPath(); + for (a = 0; a < h.length; a += 2) d = h[a], + e = h[a + 1], 0 == a && this.canvas.moveTo(d, e), this.canvas.lineTo(d, e); + this.canvas.closePath(); + this.canvas.stroke(); + if (this.hitDetection) { + this.setHitContextStyle("stroke", c, b, f); + this.hitContext.beginPath(); + for (a = 0; a < h.length; a += 2) d = h[a], e = h[a + 1], 0 == a && this.hitContext.moveTo(d, e), this.hitContext.lineTo(d, e); + this.hitContext.closePath(); + this.hitContext.stroke() + } + } + b.strokeWidth = g; + this.canvas.restore(); + this.hitDetection && this.hitContext.restore(); + this.setCanvasStyle("reset") + } + }, + setCanvasStyle: function(a, b) { + "fill" === + a ? (this.canvas.globalAlpha = b.fillOpacity, this.canvas.fillStyle = b.fillColor) : "stroke" === a ? (this.canvas.globalAlpha = b.strokeOpacity, this.canvas.strokeStyle = b.strokeColor, this.canvas.lineWidth = b.strokeWidth) : (this.canvas.globalAlpha = 0, this.canvas.lineWidth = 1) + }, + featureIdToHex: function(a) { + a = Number(a.split("_").pop()) + 1; + 16777216 <= a && (this.hitOverflow = a - 16777215, a = a % 16777216 + 1); + var a = "000000" + a.toString(16), + b = a.length; + return a = "#" + a.substring(b - 6, b) + }, + setHitContextStyle: function(a, b, c, d) { + b = this.featureIdToHex(b); + "fill" == a ? (this.hitContext.globalAlpha = 1, this.hitContext.fillStyle = b) : "stroke" == a ? (this.hitContext.globalAlpha = 1, this.hitContext.strokeStyle = b, "undefined" === typeof d ? this.hitContext.lineWidth = c.strokeWidth + 2 : isNaN(d) || (this.hitContext.lineWidth = c.strokeWidth + 2 / d)) : (this.hitContext.globalAlpha = 0, this.hitContext.lineWidth = 1) + }, + drawPoint: function(a, b, c) { + if (!1 !== b.graphic) + if (b.externalGraphic) this.drawExternalGraphic(a, b, c); + else if (b.graphicName && "circle" != b.graphicName) this.drawNamedSymbol(a, b, c); + else { + var d = + this.getLocalXY(a), + a = d[0], + d = d[1]; + if (!isNaN(a) && !isNaN(d)) { + var e = 2 * Math.PI, + f = b.pointRadius; + !1 !== b.fill && (this.setCanvasStyle("fill", b), this.canvas.beginPath(), this.canvas.arc(a, d, f, 0, e, !0), this.canvas.fill(), this.hitDetection && (this.setHitContextStyle("fill", c, b), this.hitContext.beginPath(), this.hitContext.arc(a, d, f, 0, e, !0), this.hitContext.fill())); + !1 !== b.stroke && (this.setCanvasStyle("stroke", b), this.canvas.beginPath(), this.canvas.arc(a, d, f, 0, e, !0), this.canvas.stroke(), this.hitDetection && (this.setHitContextStyle("stroke", + c, b), this.hitContext.beginPath(), this.hitContext.arc(a, d, f, 0, e, !0), this.hitContext.stroke()), this.setCanvasStyle("reset")) + } + } + }, + drawLineString: function(a, b, c) { + b = OpenLayers.Util.applyDefaults({ + fill: !1 + }, b); + this.drawLinearRing(a, b, c) + }, + drawLinearRing: function(a, b, c) { + !1 !== b.fill && (this.setCanvasStyle("fill", b), this.renderPath(this.canvas, a, b, c, "fill"), this.hitDetection && (this.setHitContextStyle("fill", c, b), this.renderPath(this.hitContext, a, b, c, "fill"))); + !1 !== b.stroke && (this.setCanvasStyle("stroke", b), this.renderPath(this.canvas, + a, b, c, "stroke"), this.hitDetection && (this.setHitContextStyle("stroke", c, b), this.renderPath(this.hitContext, a, b, c, "stroke"))); + this.setCanvasStyle("reset") + }, + renderPath: function(a, b, c, d, e) { + b = b.components; + c = b.length; + a.beginPath(); + var d = this.getLocalXY(b[0]), + f = d[1]; + if (!isNaN(d[0]) && !isNaN(f)) { + a.moveTo(d[0], d[1]); + for (d = 1; d < c; ++d) f = this.getLocalXY(b[d]), a.lineTo(f[0], f[1]); + "fill" === e ? a.fill() : a.stroke() + } + }, + drawPolygon: function(a, b, c) { + var a = a.components, + d = a.length; + this.drawLinearRing(a[0], b, c); + for (var e = 1; e < + d; ++e) this.canvas.globalCompositeOperation = "destination-out", this.hitDetection && (this.hitContext.globalCompositeOperation = "destination-out"), this.drawLinearRing(a[e], OpenLayers.Util.applyDefaults({ + stroke: !1, + fillOpacity: 1 + }, b), c), this.canvas.globalCompositeOperation = "source-over", this.hitDetection && (this.hitContext.globalCompositeOperation = "source-over"), this.drawLinearRing(a[e], OpenLayers.Util.applyDefaults({ + fill: !1 + }, b), c) + }, + drawText: function(a, b) { + var c = this.getLocalXY(a); + this.setCanvasStyle("reset"); + this.canvas.fillStyle = b.fontColor; + this.canvas.globalAlpha = b.fontOpacity || 1; + var d = [b.fontStyle ? b.fontStyle : "normal", "normal", b.fontWeight ? b.fontWeight : "normal", b.fontSize ? b.fontSize : "1em", b.fontFamily ? b.fontFamily : "sans-serif"].join(" "), + e = b.label.split("\n"), + f = e.length; + if (this.canvas.fillText) { + this.canvas.font = d; + this.canvas.textAlign = OpenLayers.Renderer.Canvas.LABEL_ALIGN[b.labelAlign[0]] || "center"; + this.canvas.textBaseline = OpenLayers.Renderer.Canvas.LABEL_ALIGN[b.labelAlign[1]] || "middle"; + var g = OpenLayers.Renderer.Canvas.LABEL_FACTOR[b.labelAlign[1]]; + null == g && (g = -0.5); + d = this.canvas.measureText("Mg").height || this.canvas.measureText("xx").width; + c[1] += d * g * (f - 1); + for (g = 0; g < f; g++) b.labelOutlineWidth && (this.canvas.save(), this.canvas.strokeStyle = b.labelOutlineColor, this.canvas.lineWidth = b.labelOutlineWidth, this.canvas.strokeText(e[g], c[0], c[1] + d * g + 1), this.canvas.restore()), this.canvas.fillText(e[g], c[0], c[1] + d * g) + } else if (this.canvas.mozDrawText) { + this.canvas.mozTextStyle = d; + var h = OpenLayers.Renderer.Canvas.LABEL_FACTOR[b.labelAlign[0]]; + null == h && (h = -0.5); + g = OpenLayers.Renderer.Canvas.LABEL_FACTOR[b.labelAlign[1]]; + null == g && (g = -0.5); + d = this.canvas.mozMeasureText("xx"); + c[1] += d * (1 + g * f); + for (g = 0; g < f; g++) { + var i = c[0] + h * this.canvas.mozMeasureText(e[g]), + j = c[1] + g * d; + this.canvas.translate(i, j); + this.canvas.mozDrawText(e[g]); + this.canvas.translate(-i, -j) + } + } + this.setCanvasStyle("reset") + }, + getLocalXY: function(a) { + var b = this.getResolution(), + c = this.extent; + return [(a.x - this.featureDx) / b + -c.left / b, c.top / b - a.y / b] + }, + clear: function() { + var a = this.root.height, + b = this.root.width; + this.canvas.clearRect(0, + 0, b, a); + this.features = {}; + this.hitDetection && this.hitContext.clearRect(0, 0, b, a) + }, + getFeatureIdFromEvent: function(a) { + var b; + if (this.hitDetection && "none" !== this.root.style.display && !this.map.dragging && (a = a.xy, a = this.hitContext.getImageData(a.x | 0, a.y | 0, 1, 1).data, 255 === a[3] && (a = a[2] + 256 * (a[1] + 256 * a[0])))) { + a = "OpenLayers.Feature.Vector_" + (a - 1 + this.hitOverflow); + try { + b = this.features[a][0] + } catch (c) {} + } + return b + }, + eraseFeatures: function(a) { + OpenLayers.Util.isArray(a) || (a = [a]); + for (var b = 0; b < a.length; ++b) delete this.features[a[b].id]; + this.redraw() + }, + redraw: function() { + if (!this.locked) { + var a = this.root.height, + b = this.root.width; + this.canvas.clearRect(0, 0, b, a); + this.hitDetection && this.hitContext.clearRect(0, 0, b, a); + var a = [], + c, d, e = this.map.baseLayer && this.map.baseLayer.wrapDateLine && this.map.getMaxExtent(), + f; + for (f in this.features) this.features.hasOwnProperty(f) && (b = this.features[f][0], c = b.geometry, this.calculateFeatureDx(c.getBounds(), e), d = this.features[f][1], this.drawGeometry(c, d, b.id), d.label && a.push([b, d])); + b = 0; + for (c = a.length; b < c; ++b) f = + a[b], this.drawText(f[0].geometry.getCentroid(), f[1]) + } + }, + CLASS_NAME: "OpenLayers.Renderer.Canvas" +}); +OpenLayers.Renderer.Canvas.LABEL_ALIGN = { + l: "left", + r: "right", + t: "top", + b: "bottom" +}; +OpenLayers.Renderer.Canvas.LABEL_FACTOR = { + l: 0, + r: -1, + t: 0, + b: -1 +}; +OpenLayers.Renderer.Canvas.drawImageScaleFactor = null; +OpenLayers.Format.OSM = OpenLayers.Class(OpenLayers.Format.XML, { + checkTags: !1, + interestingTagsExclude: null, + areaTags: null, + initialize: function(a) { + for (var b = { + interestingTagsExclude: "source source_ref source:ref history attribution created_by".split(" "), + areaTags: "area building leisure tourism ruins historic landuse military natural sport".split(" ") + }, b = OpenLayers.Util.extend(b, a), c = {}, a = 0; a < b.interestingTagsExclude.length; a++) c[b.interestingTagsExclude[a]] = !0; + b.interestingTagsExclude = c; + c = {}; + for (a = 0; a < b.areaTags.length; a++) c[b.areaTags[a]] = !0; + b.areaTags = c; + this.externalProjection = new OpenLayers.Projection("EPSG:4326"); + OpenLayers.Format.XML.prototype.initialize.apply(this, [b]) + }, + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + for (var b = this.getNodes(a), c = this.getWays(a), a = Array(c.length), d = 0; d < c.length; d++) { + for (var e = Array(c[d].nodes.length), f = this.isWayArea(c[d]) ? 1 : 0, g = 0; g < c[d].nodes.length; g++) { + var h = b[c[d].nodes[g]], + i = new OpenLayers.Geometry.Point(h.lon, h.lat); + i.osm_id = parseInt(c[d].nodes[g]); + e[g] = i; + h.used = !0 + } + h = null; + h = f ? new OpenLayers.Geometry.Polygon(new OpenLayers.Geometry.LinearRing(e)) : new OpenLayers.Geometry.LineString(e); + this.internalProjection && this.externalProjection && h.transform(this.externalProjection, this.internalProjection); + e = new OpenLayers.Feature.Vector(h, c[d].tags); + e.osm_id = parseInt(c[d].id); + e.fid = "way." + e.osm_id; + a[d] = e + } + for (var j in b) { + h = b[j]; + if (!h.used || this.checkTags) { + c = null; + if (this.checkTags) { + c = this.getTags(h.node, !0); + if (h.used && !c[1]) continue; + c = c[0] + } else c = this.getTags(h.node); + e = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(h.lon, h.lat), c); + this.internalProjection && this.externalProjection && e.geometry.transform(this.externalProjection, this.internalProjection); + e.osm_id = parseInt(j); + e.fid = "node." + e.osm_id; + a.push(e) + } + h.node = null + } + return a + }, + getNodes: function(a) { + for (var a = a.getElementsByTagName("node"), b = {}, c = 0; c < a.length; c++) { + var d = a[c], + e = d.getAttribute("id"); + b[e] = { + lat: d.getAttribute("lat"), + lon: d.getAttribute("lon"), + node: d + } + } + return b + }, + getWays: function(a) { + for (var a = + a.getElementsByTagName("way"), b = [], c = 0; c < a.length; c++) { + var d = a[c], + e = { + id: d.getAttribute("id") + }; + e.tags = this.getTags(d); + d = d.getElementsByTagName("nd"); + e.nodes = Array(d.length); + for (var f = 0; f < d.length; f++) e.nodes[f] = d[f].getAttribute("ref"); + b.push(e) + } + return b + }, + getTags: function(a, b) { + for (var c = a.getElementsByTagName("tag"), d = {}, e = !1, f = 0; f < c.length; f++) { + var g = c[f].getAttribute("k"); + d[g] = c[f].getAttribute("v"); + b && (this.interestingTagsExclude[g] || (e = !0)) + } + return b ? [d, e] : d + }, + isWayArea: function(a) { + var b = !1, + c = !1; + a.nodes[0] == a.nodes[a.nodes.length - 1] && (b = !0); + if (this.checkTags) + for (var d in a.tags) + if (this.areaTags[d]) { + c = !0; + break + } + return b && (this.checkTags ? c : !0) + }, + write: function(a) { + OpenLayers.Util.isArray(a) || (a = [a]); + this.osm_id = 1; + this.created_nodes = {}; + var b = this.createElementNS(null, "osm"); + b.setAttribute("version", "0.5"); + b.setAttribute("generator", "OpenLayers " + OpenLayers.VERSION_NUMBER); + for (var c = a.length - 1; 0 <= c; c--) + for (var d = this.createFeatureNodes(a[c]), e = 0; e < d.length; e++) b.appendChild(d[e]); + return OpenLayers.Format.XML.prototype.write.apply(this, [b]) + }, + createFeatureNodes: function(a) { + var b = [], + c = a.geometry.CLASS_NAME, + c = c.substring(c.lastIndexOf(".") + 1), + c = c.toLowerCase(); + (c = this.createXML[c]) && (b = c.apply(this, [a])); + return b + }, + createXML: { + point: function(a) { + var b = null, + c = a.geometry ? a.geometry : a; + this.internalProjection && this.externalProjection && (c = c.clone(), c.transform(this.internalProjection, this.externalProjection)); + var d = !1; + a.osm_id ? (b = a.osm_id, this.created_nodes[b] && (d = !0)) : (b = -this.osm_id, this.osm_id++); + var e = d ? this.created_nodes[b] : this.createElementNS(null, + "node"); + this.created_nodes[b] = e; + e.setAttribute("id", b); + e.setAttribute("lon", c.x); + e.setAttribute("lat", c.y); + a.attributes && this.serializeTags(a, e); + this.setState(a, e); + return d ? [] : [e] + }, + linestring: function(a) { + var b, c = [], + d = a.geometry; + a.osm_id ? b = a.osm_id : (b = -this.osm_id, this.osm_id++); + var e = this.createElementNS(null, "way"); + e.setAttribute("id", b); + for (b = 0; b < d.components.length; b++) { + var f = this.createXML.point.apply(this, [d.components[b]]); + if (f.length) { + var f = f[0], + g = f.getAttribute("id"); + c.push(f) + } else g = d.components[b].osm_id, + f = this.created_nodes[g]; + this.setState(a, f); + f = this.createElementNS(null, "nd"); + f.setAttribute("ref", g); + e.appendChild(f) + } + this.serializeTags(a, e); + c.push(e); + return c + }, + polygon: function(a) { + var b = OpenLayers.Util.extend({ + area: "yes" + }, a.attributes), + b = new OpenLayers.Feature.Vector(a.geometry.components[0], b); + b.osm_id = a.osm_id; + return this.createXML.linestring.apply(this, [b]) + } + }, + serializeTags: function(a, b) { + for (var c in a.attributes) { + var d = this.createElementNS(null, "tag"); + d.setAttribute("k", c); + d.setAttribute("v", + a.attributes[c]); + b.appendChild(d) + } + }, + setState: function(a, b) { + if (a.state) { + var c = null; + switch (a.state) { + case OpenLayers.State.UPDATE: + case OpenLayers.State.DELETE: + c = "delete" + } + c && b.setAttribute("action", c) + } + }, + CLASS_NAME: "OpenLayers.Format.OSM" +}); +OpenLayers.Handler = OpenLayers.Class({ + id: null, + control: null, + map: null, + keyMask: null, + active: !1, + evt: null, + initialize: function(a, b, c) { + OpenLayers.Util.extend(this, c); + this.control = a; + this.callbacks = b; + (a = this.map || a.map) && this.setMap(a); + this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_") + }, + setMap: function(a) { + this.map = a + }, + checkModifiers: function(a) { + return null == this.keyMask ? !0 : ((a.shiftKey ? OpenLayers.Handler.MOD_SHIFT : 0) | (a.ctrlKey ? OpenLayers.Handler.MOD_CTRL : 0) | (a.altKey ? OpenLayers.Handler.MOD_ALT : 0)) == + this.keyMask + }, + activate: function() { + if (this.active) return !1; + for (var a = OpenLayers.Events.prototype.BROWSER_EVENTS, b = 0, c = a.length; b < c; b++) this[a[b]] && this.register(a[b], this[a[b]]); + return this.active = !0 + }, + deactivate: function() { + if (!this.active) return !1; + for (var a = OpenLayers.Events.prototype.BROWSER_EVENTS, b = 0, c = a.length; b < c; b++) this[a[b]] && this.unregister(a[b], this[a[b]]); + this.active = !1; + return !0 + }, + callback: function(a, b) { + a && this.callbacks[a] && this.callbacks[a].apply(this.control, b) + }, + register: function(a, b) { + this.map.events.registerPriority(a, + this, b); + this.map.events.registerPriority(a, this, this.setEvent) + }, + unregister: function(a, b) { + this.map.events.unregister(a, this, b); + this.map.events.unregister(a, this, this.setEvent) + }, + setEvent: function(a) { + this.evt = a; + return !0 + }, + destroy: function() { + this.deactivate(); + this.control = this.map = null + }, + CLASS_NAME: "OpenLayers.Handler" +}); +OpenLayers.Handler.MOD_NONE = 0; +OpenLayers.Handler.MOD_SHIFT = 1; +OpenLayers.Handler.MOD_CTRL = 2; +OpenLayers.Handler.MOD_ALT = 4; +OpenLayers.Handler.Drag = OpenLayers.Class(OpenLayers.Handler, { + started: !1, + stopDown: !0, + dragging: !1, + touch: !1, + last: null, + start: null, + lastMoveEvt: null, + oldOnselectstart: null, + interval: 0, + timeoutId: null, + documentDrag: !1, + documentEvents: null, + initialize: function(a, b, c) { + OpenLayers.Handler.prototype.initialize.apply(this, arguments); + if (!0 === this.documentDrag) { + var d = this; + this._docMove = function(a) { + d.mousemove({ + xy: { + x: a.clientX, + y: a.clientY + }, + element: document + }) + }; + this._docUp = function(a) { + d.mouseup({ + xy: { + x: a.clientX, + y: a.clientY + } + }) + } + } + }, + dragstart: function(a) { + var b = !0; + this.dragging = !1; + this.checkModifiers(a) && (OpenLayers.Event.isLeftClick(a) || OpenLayers.Event.isSingleTouch(a)) ? (this.started = !0, this.last = this.start = a.xy, OpenLayers.Element.addClass(this.map.viewPortDiv, "olDragDown"), this.down(a), this.callback("down", [a.xy]), OpenLayers.Event.stop(a), this.oldOnselectstart || (this.oldOnselectstart = document.onselectstart ? document.onselectstart : OpenLayers.Function.True), document.onselectstart = OpenLayers.Function.False, b = !this.stopDown) : (this.started = !1, this.last = this.start = null); + return b + }, + dragmove: function(a) { + this.lastMoveEvt = a; + if (this.started && !this.timeoutId && (a.xy.x != this.last.x || a.xy.y != this.last.y)) !0 === this.documentDrag && this.documentEvents && (a.element === document ? (this.adjustXY(a), this.setEvent(a)) : this.removeDocumentEvents()), 0 < this.interval && (this.timeoutId = setTimeout(OpenLayers.Function.bind(this.removeTimeout, this), this.interval)), this.dragging = !0, this.move(a), this.callback("move", [a.xy]), this.oldOnselectstart || (this.oldOnselectstart = + document.onselectstart, document.onselectstart = OpenLayers.Function.False), this.last = a.xy; + return !0 + }, + dragend: function(a) { + if (this.started) { + !0 === this.documentDrag && this.documentEvents && (this.adjustXY(a), this.removeDocumentEvents()); + var b = this.start != this.last; + this.dragging = this.started = !1; + OpenLayers.Element.removeClass(this.map.viewPortDiv, "olDragDown"); + this.up(a); + this.callback("up", [a.xy]); + b && this.callback("done", [a.xy]); + document.onselectstart = this.oldOnselectstart + } + return !0 + }, + down: function() {}, + move: function() {}, + up: function() {}, + out: function() {}, + mousedown: function(a) { + return this.dragstart(a) + }, + touchstart: function(a) { + this.touch || (this.touch = !0, this.map.events.un({ + mousedown: this.mousedown, + mouseup: this.mouseup, + mousemove: this.mousemove, + click: this.click, + scope: this + })); + return this.dragstart(a) + }, + mousemove: function(a) { + return this.dragmove(a) + }, + touchmove: function(a) { + return this.dragmove(a) + }, + removeTimeout: function() { + this.timeoutId = null; + this.dragging && this.mousemove(this.lastMoveEvt) + }, + mouseup: function(a) { + return this.dragend(a) + }, + touchend: function(a) { + a.xy = this.last; + return this.dragend(a) + }, + mouseout: function(a) { + if (this.started && OpenLayers.Util.mouseLeft(a, this.map.viewPortDiv)) + if (!0 === this.documentDrag) this.addDocumentEvents(); + else { + var b = this.start != this.last; + this.dragging = this.started = !1; + OpenLayers.Element.removeClass(this.map.viewPortDiv, "olDragDown"); + this.out(a); + this.callback("out", []); + b && this.callback("done", [a.xy]); + document.onselectstart && (document.onselectstart = this.oldOnselectstart) + } + return !0 + }, + click: function() { + return this.start == + this.last + }, + activate: function() { + var a = !1; + OpenLayers.Handler.prototype.activate.apply(this, arguments) && (this.dragging = !1, a = !0); + return a + }, + deactivate: function() { + var a = !1; + OpenLayers.Handler.prototype.deactivate.apply(this, arguments) && (this.dragging = this.started = this.touch = !1, this.last = this.start = null, a = !0, OpenLayers.Element.removeClass(this.map.viewPortDiv, "olDragDown")); + return a + }, + adjustXY: function(a) { + var b = OpenLayers.Util.pagePosition(this.map.viewPortDiv); + a.xy.x -= b[0]; + a.xy.y -= b[1] + }, + addDocumentEvents: function() { + OpenLayers.Element.addClass(document.body, + "olDragDown"); + this.documentEvents = !0; + OpenLayers.Event.observe(document, "mousemove", this._docMove); + OpenLayers.Event.observe(document, "mouseup", this._docUp) + }, + removeDocumentEvents: function() { + OpenLayers.Element.removeClass(document.body, "olDragDown"); + this.documentEvents = !1; + OpenLayers.Event.stopObserving(document, "mousemove", this._docMove); + OpenLayers.Event.stopObserving(document, "mouseup", this._docUp) + }, + CLASS_NAME: "OpenLayers.Handler.Drag" +}); +OpenLayers.Handler.Feature = OpenLayers.Class(OpenLayers.Handler, { + EVENTMAP: { + click: { + "in": "click", + out: "clickout" + }, + mousemove: { + "in": "over", + out: "out" + }, + dblclick: { + "in": "dblclick", + out: null + }, + mousedown: { + "in": null, + out: null + }, + mouseup: { + "in": null, + out: null + }, + touchstart: { + "in": "click", + out: "clickout" + } + }, + feature: null, + lastFeature: null, + down: null, + up: null, + touch: !1, + clickTolerance: 4, + geometryTypes: null, + stopClick: !0, + stopDown: !0, + stopUp: !1, + initialize: function(a, b, c, d) { + OpenLayers.Handler.prototype.initialize.apply(this, [a, c, d]); + this.layer = + b + }, + touchstart: function(a) { + this.touch || (this.touch = !0, this.map.events.un({ + mousedown: this.mousedown, + mouseup: this.mouseup, + mousemove: this.mousemove, + click: this.click, + dblclick: this.dblclick, + scope: this + })); + return OpenLayers.Event.isMultiTouch(a) ? !0 : this.mousedown(a) + }, + touchmove: function(a) { + OpenLayers.Event.stop(a) + }, + mousedown: function(a) { + if (OpenLayers.Event.isLeftClick(a) || OpenLayers.Event.isSingleTouch(a)) this.down = a.xy; + return this.handle(a) ? !this.stopDown : !0 + }, + mouseup: function(a) { + this.up = a.xy; + return this.handle(a) ? + !this.stopUp : !0 + }, + click: function(a) { + return this.handle(a) ? !this.stopClick : !0 + }, + mousemove: function(a) { + if (!this.callbacks.over && !this.callbacks.out) return !0; + this.handle(a); + return !0 + }, + dblclick: function(a) { + return !this.handle(a) + }, + geometryTypeMatches: function(a) { + return null == this.geometryTypes || -1 < OpenLayers.Util.indexOf(this.geometryTypes, a.geometry.CLASS_NAME) + }, + handle: function(a) { + this.feature && !this.feature.layer && (this.feature = null); + var b = a.type, + c = !1, + d = !!this.feature, + e = "click" == b || "dblclick" == b || "touchstart" == + b; + if ((this.feature = this.layer.getFeatureFromEvent(a)) && !this.feature.layer) this.feature = null; + this.lastFeature && !this.lastFeature.layer && (this.lastFeature = null); + this.feature ? ("touchstart" === b && OpenLayers.Event.stop(a), a = this.feature != this.lastFeature, this.geometryTypeMatches(this.feature) ? (d && a ? (this.lastFeature && this.triggerCallback(b, "out", [this.lastFeature]), this.triggerCallback(b, "in", [this.feature])) : (!d || e) && this.triggerCallback(b, "in", [this.feature]), this.lastFeature = this.feature, c = !0) : (this.lastFeature && + (d && a || e) && this.triggerCallback(b, "out", [this.lastFeature]), this.feature = null)) : this.lastFeature && (d || e) && this.triggerCallback(b, "out", [this.lastFeature]); + return c + }, + triggerCallback: function(a, b, c) { + (b = this.EVENTMAP[a][b]) && ("click" == a && this.up && this.down ? Math.sqrt(Math.pow(this.up.x - this.down.x, 2) + Math.pow(this.up.y - this.down.y, 2)) <= this.clickTolerance && this.callback(b, c) : this.callback(b, c)) + }, + activate: function() { + var a = !1; + OpenLayers.Handler.prototype.activate.apply(this, arguments) && (this.moveLayerToTop(), + this.map.events.on({ + removelayer: this.handleMapEvents, + changelayer: this.handleMapEvents, + scope: this + }), a = !0); + return a + }, + deactivate: function() { + var a = !1; + OpenLayers.Handler.prototype.deactivate.apply(this, arguments) && (this.moveLayerBack(), this.up = this.down = this.lastFeature = this.feature = null, this.touch = !1, this.map.events.un({ + removelayer: this.handleMapEvents, + changelayer: this.handleMapEvents, + scope: this + }), a = !0); + return a + }, + handleMapEvents: function(a) { + ("removelayer" == a.type || "order" == a.property) && this.moveLayerToTop() + }, + moveLayerToTop: function() { + this.layer.setZIndex(Math.max(this.map.Z_INDEX_BASE.Feature - 1, this.layer.getZIndex()) + 1) + }, + moveLayerBack: function() { + var a = this.layer.getZIndex() - 1; + a >= this.map.Z_INDEX_BASE.Feature ? this.layer.setZIndex(a) : this.map.setLayerZIndex(this.layer, this.map.getLayerIndex(this.layer)) + }, + CLASS_NAME: "OpenLayers.Handler.Feature" +}); +OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, { + geometryTypes: null, + onStart: function() {}, + onDrag: function() {}, + onComplete: function() {}, + onEnter: function() {}, + onLeave: function() {}, + documentDrag: !1, + layer: null, + feature: null, + dragCallbacks: {}, + featureCallbacks: {}, + lastPixel: null, + initialize: function(a, b) { + OpenLayers.Control.prototype.initialize.apply(this, [b]); + this.layer = a; + this.handlers = { + drag: new OpenLayers.Handler.Drag(this, OpenLayers.Util.extend({ + down: this.downFeature, + move: this.moveFeature, + up: this.upFeature, + out: this.cancel, + done: this.doneDragging + }, this.dragCallbacks), { + documentDrag: this.documentDrag + }), + feature: new OpenLayers.Handler.Feature(this, this.layer, OpenLayers.Util.extend({ + click: this.clickFeature, + clickout: this.clickoutFeature, + over: this.overFeature, + out: this.outFeature + }, this.featureCallbacks), { + geometryTypes: this.geometryTypes + }) + } + }, + clickFeature: function(a) { + this.handlers.feature.touch && (!this.over && this.overFeature(a)) && (this.handlers.drag.dragstart(this.handlers.feature.evt), this.handlers.drag.stopDown = !1) + }, + clickoutFeature: function(a) { + this.handlers.feature.touch && this.over && (this.outFeature(a), this.handlers.drag.stopDown = !0) + }, + destroy: function() { + this.layer = null; + OpenLayers.Control.prototype.destroy.apply(this, []) + }, + activate: function() { + return this.handlers.feature.activate() && OpenLayers.Control.prototype.activate.apply(this, arguments) + }, + deactivate: function() { + this.handlers.drag.deactivate(); + this.handlers.feature.deactivate(); + this.feature = null; + this.dragging = !1; + this.lastPixel = null; + OpenLayers.Element.removeClass(this.map.viewPortDiv, + this.displayClass + "Over"); + return OpenLayers.Control.prototype.deactivate.apply(this, arguments) + }, + overFeature: function(a) { + var b = !1; + this.handlers.drag.dragging ? this.over = this.feature.id == a.id ? !0 : !1 : (this.feature = a, this.handlers.drag.activate(), this.over = b = !0, OpenLayers.Element.addClass(this.map.viewPortDiv, this.displayClass + "Over"), this.onEnter(a)); + return b + }, + downFeature: function(a) { + this.lastPixel = a; + this.onStart(this.feature, a) + }, + moveFeature: function(a) { + var b = this.map.getResolution(); + this.feature.geometry.move(b * + (a.x - this.lastPixel.x), b * (this.lastPixel.y - a.y)); + this.layer.drawFeature(this.feature); + this.lastPixel = a; + this.onDrag(this.feature, a) + }, + upFeature: function() { + this.over || this.handlers.drag.deactivate() + }, + doneDragging: function(a) { + this.onComplete(this.feature, a) + }, + outFeature: function(a) { + this.handlers.drag.dragging ? this.feature.id == a.id && (this.over = !1) : (this.over = !1, this.handlers.drag.deactivate(), OpenLayers.Element.removeClass(this.map.viewPortDiv, this.displayClass + "Over"), this.onLeave(a), this.feature = null) + }, + cancel: function() { + this.handlers.drag.deactivate(); + this.over = !1 + }, + setMap: function(a) { + this.handlers.drag.setMap(a); + this.handlers.feature.setMap(a); + OpenLayers.Control.prototype.setMap.apply(this, arguments) + }, + CLASS_NAME: "OpenLayers.Control.DragFeature" +}); +OpenLayers.StyleMap = OpenLayers.Class({ + styles: null, + extendDefault: !0, + initialize: function(a, b) { + this.styles = { + "default": new OpenLayers.Style(OpenLayers.Feature.Vector.style["default"]), + select: new OpenLayers.Style(OpenLayers.Feature.Vector.style.select), + temporary: new OpenLayers.Style(OpenLayers.Feature.Vector.style.temporary), + "delete": new OpenLayers.Style(OpenLayers.Feature.Vector.style["delete"]) + }; + if (a instanceof OpenLayers.Style) this.styles["default"] = a, this.styles.select = a, this.styles.temporary = a, this.styles["delete"] = + a; + else if ("object" == typeof a) + for (var c in a) + if (a[c] instanceof OpenLayers.Style) this.styles[c] = a[c]; + else if ("object" == typeof a[c]) this.styles[c] = new OpenLayers.Style(a[c]); + else { + this.styles["default"] = new OpenLayers.Style(a); + this.styles.select = new OpenLayers.Style(a); + this.styles.temporary = new OpenLayers.Style(a); + this.styles["delete"] = new OpenLayers.Style(a); + break + } + OpenLayers.Util.extend(this, b) + }, + destroy: function() { + for (var a in this.styles) this.styles[a].destroy(); + this.styles = null + }, + createSymbolizer: function(a, + b) { + a || (a = new OpenLayers.Feature.Vector); + this.styles[b] || (b = "default"); + a.renderIntent = b; + var c = {}; + this.extendDefault && "default" != b && (c = this.styles["default"].createSymbolizer(a)); + return OpenLayers.Util.extend(c, this.styles[b].createSymbolizer(a)) + }, + addUniqueValueRules: function(a, b, c, d) { + var e = [], + f; + for (f in c) e.push(new OpenLayers.Rule({ + symbolizer: c[f], + context: d, + filter: new OpenLayers.Filter.Comparison({ + type: OpenLayers.Filter.Comparison.EQUAL_TO, + property: b, + value: f + }) + })); + this.styles[a].addRules(e) + }, + CLASS_NAME: "OpenLayers.StyleMap" +}); +OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, { + isBaseLayer: !1, + isFixed: !1, + features: null, + filter: null, + selectedFeatures: null, + unrenderedFeatures: null, + reportError: !0, + style: null, + styleMap: null, + strategies: null, + protocol: null, + renderers: ["SVG", "VML", "Canvas"], + renderer: null, + rendererOptions: null, + geometryType: null, + drawn: !1, + ratio: 1, + initialize: function(a, b) { + OpenLayers.Layer.prototype.initialize.apply(this, arguments); + (!this.renderer || !this.renderer.supported()) && this.assignRenderer(); + if (!this.renderer || + !this.renderer.supported()) this.renderer = null, this.displayError(); + this.styleMap || (this.styleMap = new OpenLayers.StyleMap); + this.features = []; + this.selectedFeatures = []; + this.unrenderedFeatures = {}; + if (this.strategies) + for (var c = 0, d = this.strategies.length; c < d; c++) this.strategies[c].setLayer(this) + }, + destroy: function() { + if (this.strategies) { + var a, b, c; + b = 0; + for (c = this.strategies.length; b < c; b++) a = this.strategies[b], a.autoDestroy && a.destroy(); + this.strategies = null + } + this.protocol && (this.protocol.autoDestroy && this.protocol.destroy(), + this.protocol = null); + this.destroyFeatures(); + this.unrenderedFeatures = this.selectedFeatures = this.features = null; + this.renderer && this.renderer.destroy(); + this.drawn = this.geometryType = this.renderer = null; + OpenLayers.Layer.prototype.destroy.apply(this, arguments) + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.Vector(this.name, this.getOptions())); + for (var a = OpenLayers.Layer.prototype.clone.apply(this, [a]), b = this.features, c = b.length, d = Array(c), e = 0; e < c; ++e) d[e] = b[e].clone(); + a.features = d; + return a + }, + refresh: function(a) { + this.calculateInRange() && + this.visibility && this.events.triggerEvent("refresh", a) + }, + assignRenderer: function() { + for (var a = 0, b = this.renderers.length; a < b; a++) { + var c = this.renderers[a]; + if ((c = "function" == typeof c ? c : OpenLayers.Renderer[c]) && c.prototype.supported()) { + this.renderer = new c(this.div, this.rendererOptions); + break + } + } + }, + displayError: function() { + this.reportError && OpenLayers.Console.userError(OpenLayers.i18n("browserNotSupported", { + renderers: this.renderers.join("\n") + })) + }, + setMap: function(a) { + OpenLayers.Layer.prototype.setMap.apply(this, + arguments); + if (this.renderer) { + this.renderer.map = this.map; + var b = this.map.getSize(); + b.w *= this.ratio; + b.h *= this.ratio; + this.renderer.setSize(b) + } else this.map.removeLayer(this) + }, + afterAdd: function() { + if (this.strategies) { + var a, b, c; + b = 0; + for (c = this.strategies.length; b < c; b++) a = this.strategies[b], a.autoActivate && a.activate() + } + }, + removeMap: function() { + this.drawn = !1; + if (this.strategies) { + var a, b, c; + b = 0; + for (c = this.strategies.length; b < c; b++) a = this.strategies[b], a.autoActivate && a.deactivate() + } + }, + onMapResize: function() { + OpenLayers.Layer.prototype.onMapResize.apply(this, + arguments); + var a = this.map.getSize(); + a.w *= this.ratio; + a.h *= this.ratio; + this.renderer.setSize(a) + }, + moveTo: function(a, b, c) { + OpenLayers.Layer.prototype.moveTo.apply(this, arguments); + var d = !0; + if (!c) { + this.renderer.root.style.visibility = "hidden"; + var d = this.map.getSize(), + e = d.w, + d = d.h, + e = e / 2 * this.ratio - e / 2, + d = d / 2 * this.ratio - d / 2, + e = e + parseInt(this.map.layerContainerDiv.style.left, 10), + e = -Math.round(e), + d = d + parseInt(this.map.layerContainerDiv.style.top, 10), + d = -Math.round(d); + this.div.style.left = e + "px"; + this.div.style.top = + d + "px"; + d = this.renderer.setExtent(this.map.getExtent().scale(this.ratio), b); + this.renderer.root.style.visibility = "visible"; + !0 === OpenLayers.IS_GECKO && (this.div.scrollLeft = this.div.scrollLeft); + if (!b && d) + for (var f in this.unrenderedFeatures) e = this.unrenderedFeatures[f], this.drawFeature(e) + } + if (!this.drawn || b || !d) { + this.drawn = !0; + f = 0; + for (d = this.features.length; f < d; f++) this.renderer.locked = f !== d - 1, e = this.features[f], this.drawFeature(e) + } + }, + display: function(a) { + OpenLayers.Layer.prototype.display.apply(this, arguments); + var b = this.div.style.display; + b != this.renderer.root.style.display && (this.renderer.root.style.display = b) + }, + addFeatures: function(a, b) { + OpenLayers.Util.isArray(a) || (a = [a]); + var c = !b || !b.silent; + if (c) { + var d = { + features: a + }; + if (!1 === this.events.triggerEvent("beforefeaturesadded", d)) return; + a = d.features + } + for (var d = [], e = 0, f = a.length; e < f; e++) { + this.renderer.locked = e != a.length - 1 ? !0 : !1; + var g = a[e]; + if (this.geometryType && !(g.geometry instanceof this.geometryType)) throw new TypeError("addFeatures: component should be an " + + this.geometryType.prototype.CLASS_NAME); + g.layer = this; + !g.style && this.style && (g.style = OpenLayers.Util.extend({}, this.style)); + if (c) { + if (!1 === this.events.triggerEvent("beforefeatureadded", { + feature: g + })) continue; + this.preFeatureInsert(g) + } + d.push(g); + this.features.push(g); + this.drawFeature(g); + c && (this.events.triggerEvent("featureadded", { + feature: g + }), this.onFeatureInsert(g)) + } + c && this.events.triggerEvent("featuresadded", { + features: d + }) + }, + removeFeatures: function(a, b) { + if (a && 0 !== a.length) { + if (a === this.features) return this.removeAllFeatures(b); + OpenLayers.Util.isArray(a) || (a = [a]); + a === this.selectedFeatures && (a = a.slice()); + var c = !b || !b.silent; + c && this.events.triggerEvent("beforefeaturesremoved", { + features: a + }); + for (var d = a.length - 1; 0 <= d; d--) { + this.renderer.locked = 0 != d && a[d - 1].geometry ? !0 : !1; + var e = a[d]; + delete this.unrenderedFeatures[e.id]; + c && this.events.triggerEvent("beforefeatureremoved", { + feature: e + }); + this.features = OpenLayers.Util.removeItem(this.features, e); + e.layer = null; + e.geometry && this.renderer.eraseFeatures(e); - 1 != OpenLayers.Util.indexOf(this.selectedFeatures, + e) && OpenLayers.Util.removeItem(this.selectedFeatures, e); + c && this.events.triggerEvent("featureremoved", { + feature: e + }) + } + c && this.events.triggerEvent("featuresremoved", { + features: a + }) + } + }, + removeAllFeatures: function(a) { + var a = !a || !a.silent, + b = this.features; + a && this.events.triggerEvent("beforefeaturesremoved", { + features: b + }); + for (var c, d = b.length - 1; 0 <= d; d--) c = b[d], a && this.events.triggerEvent("beforefeatureremoved", { + feature: c + }), c.layer = null, a && this.events.triggerEvent("featureremoved", { + feature: c + }); + this.renderer.clear(); + this.features = []; + this.unrenderedFeatures = {}; + this.selectedFeatures = []; + a && this.events.triggerEvent("featuresremoved", { + features: b + }) + }, + destroyFeatures: function(a, b) { + void 0 == a && (a = this.features); + if (a) { + this.removeFeatures(a, b); + for (var c = a.length - 1; 0 <= c; c--) a[c].destroy() + } + }, + drawFeature: function(a, b) { + if (this.drawn) { + if ("object" != typeof b) { + !b && a.state === OpenLayers.State.DELETE && (b = "delete"); + var c = b || a.renderIntent; + (b = a.style || this.style) || (b = this.styleMap.createSymbolizer(a, c)) + } + c = this.renderer.drawFeature(a, + b); + !1 === c || null === c ? this.unrenderedFeatures[a.id] = a : delete this.unrenderedFeatures[a.id] + } + }, + eraseFeatures: function(a) { + this.renderer.eraseFeatures(a) + }, + getFeatureFromEvent: function(a) { + if (!this.renderer) throw Error("getFeatureFromEvent called on layer with no renderer. This usually means you destroyed a layer, but not some handler which is associated with it."); + var b = null; + (a = this.renderer.getFeatureIdFromEvent(a)) && (b = "string" === typeof a ? this.getFeatureById(a) : a); + return b + }, + getFeatureBy: function(a, b) { + for (var c = + null, d = 0, e = this.features.length; d < e; ++d) + if (this.features[d][a] == b) { + c = this.features[d]; + break + } + return c + }, + getFeatureById: function(a) { + return this.getFeatureBy("id", a) + }, + getFeatureByFid: function(a) { + return this.getFeatureBy("fid", a) + }, + getFeaturesByAttribute: function(a, b) { + var c, d, e = this.features.length, + f = []; + for (c = 0; c < e; c++)(d = this.features[c]) && d.attributes && d.attributes[a] === b && f.push(d); + return f + }, + onFeatureInsert: function() {}, + preFeatureInsert: function() {}, + getDataExtent: function() { + var a = null, + b = this.features; + if (b && 0 < b.length) + for (var c = null, d = 0, e = b.length; d < e; d++) + if (c = b[d].geometry) null === a && (a = new OpenLayers.Bounds), a.extend(c.getBounds()); + return a + }, + CLASS_NAME: "OpenLayers.Layer.Vector" +}); +OpenLayers.Layer.Vector.RootContainer = OpenLayers.Class(OpenLayers.Layer.Vector, { + displayInLayerSwitcher: !1, + layers: null, + display: function() {}, + getFeatureFromEvent: function(a) { + for (var b = this.layers, c, d = 0; d < b.length; d++) + if (c = b[d].getFeatureFromEvent(a)) return c + }, + setMap: function(a) { + OpenLayers.Layer.Vector.prototype.setMap.apply(this, arguments); + this.collectRoots(); + a.events.register("changelayer", this, this.handleChangeLayer) + }, + removeMap: function(a) { + a.events.unregister("changelayer", this, this.handleChangeLayer); + this.resetRoots(); + OpenLayers.Layer.Vector.prototype.removeMap.apply(this, arguments) + }, + collectRoots: function() { + for (var a, b = 0; b < this.map.layers.length; ++b) a = this.map.layers[b], -1 != OpenLayers.Util.indexOf(this.layers, a) && a.renderer.moveRoot(this.renderer) + }, + resetRoots: function() { + for (var a, b = 0; b < this.layers.length; ++b) a = this.layers[b], this.renderer && a.renderer.getRenderLayerId() == this.id && this.renderer.moveRoot(a.renderer) + }, + handleChangeLayer: function(a) { + var b = a.layer; + "order" == a.property && -1 != OpenLayers.Util.indexOf(this.layers, + b) && (this.resetRoots(), this.collectRoots()) + }, + CLASS_NAME: "OpenLayers.Layer.Vector.RootContainer" +}); +OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, { + multipleKey: null, + toggleKey: null, + multiple: !1, + clickout: !0, + toggle: !1, + hover: !1, + highlightOnly: !1, + box: !1, + onBeforeSelect: function() {}, + onSelect: function() {}, + onUnselect: function() {}, + scope: null, + geometryTypes: null, + layer: null, + layers: null, + callbacks: null, + selectStyle: null, + renderIntent: "select", + handlers: null, + initialize: function(a, b) { + OpenLayers.Control.prototype.initialize.apply(this, [b]); + null === this.scope && (this.scope = this); + this.initLayer(a); + var c = { + click: this.clickFeature, + clickout: this.clickoutFeature + }; + this.hover && (c.over = this.overFeature, c.out = this.outFeature); + this.callbacks = OpenLayers.Util.extend(c, this.callbacks); + this.handlers = { + feature: new OpenLayers.Handler.Feature(this, this.layer, this.callbacks, { + geometryTypes: this.geometryTypes + }) + }; + this.box && (this.handlers.box = new OpenLayers.Handler.Box(this, { + done: this.selectBox + }, { + boxDivClassName: "olHandlerBoxSelectFeature" + })) + }, + initLayer: function(a) { + OpenLayers.Util.isArray(a) ? (this.layers = a, this.layer = + new OpenLayers.Layer.Vector.RootContainer(this.id + "_container", { + layers: a + })) : this.layer = a + }, + destroy: function() { + this.active && this.layers && this.map.removeLayer(this.layer); + OpenLayers.Control.prototype.destroy.apply(this, arguments); + this.layers && this.layer.destroy() + }, + activate: function() { + this.active || (this.layers && this.map.addLayer(this.layer), this.handlers.feature.activate(), this.box && this.handlers.box && this.handlers.box.activate()); + return OpenLayers.Control.prototype.activate.apply(this, arguments) + }, + deactivate: function() { + this.active && + (this.handlers.feature.deactivate(), this.handlers.box && this.handlers.box.deactivate(), this.layers && this.map.removeLayer(this.layer)); + return OpenLayers.Control.prototype.deactivate.apply(this, arguments) + }, + unselectAll: function(a) { + for (var b = this.layers || [this.layer], c, d, e = 0; e < b.length; ++e) { + c = b[e]; + for (var f = c.selectedFeatures.length - 1; 0 <= f; --f) d = c.selectedFeatures[f], (!a || a.except != d) && this.unselect(d) + } + }, + clickFeature: function(a) { + this.hover || (-1 < OpenLayers.Util.indexOf(a.layer.selectedFeatures, a) ? this.toggleSelect() ? + this.unselect(a) : this.multipleSelect() || this.unselectAll({ + except: a + }) : (this.multipleSelect() || this.unselectAll({ + except: a + }), this.select(a))) + }, + multipleSelect: function() { + return this.multiple || this.handlers.feature.evt && this.handlers.feature.evt[this.multipleKey] + }, + toggleSelect: function() { + return this.toggle || this.handlers.feature.evt && this.handlers.feature.evt[this.toggleKey] + }, + clickoutFeature: function() { + !this.hover && this.clickout && this.unselectAll() + }, + overFeature: function(a) { + var b = a.layer; + this.hover && (this.highlightOnly ? + this.highlight(a) : -1 == OpenLayers.Util.indexOf(b.selectedFeatures, a) && this.select(a)) + }, + outFeature: function(a) { + if (this.hover) + if (this.highlightOnly) { + if (a._lastHighlighter == this.id) + if (a._prevHighlighter && a._prevHighlighter != this.id) { + delete a._lastHighlighter; + var b = this.map.getControl(a._prevHighlighter); + b && b.highlight(a) + } else this.unhighlight(a) + } else this.unselect(a) + }, + highlight: function(a) { + var b = a.layer; + !1 !== this.events.triggerEvent("beforefeaturehighlighted", { + feature: a + }) && (a._prevHighlighter = a._lastHighlighter, + a._lastHighlighter = this.id, b.drawFeature(a, this.selectStyle || this.renderIntent), this.events.triggerEvent("featurehighlighted", { + feature: a + })) + }, + unhighlight: function(a) { + var b = a.layer; + void 0 == a._prevHighlighter ? delete a._lastHighlighter : (a._prevHighlighter != this.id && (a._lastHighlighter = a._prevHighlighter), delete a._prevHighlighter); + b.drawFeature(a, a.style || a.layer.style || "default"); + this.events.triggerEvent("featureunhighlighted", { + feature: a + }) + }, + select: function(a) { + var b = this.onBeforeSelect.call(this.scope, + a), + c = a.layer; + !1 !== b && (b = c.events.triggerEvent("beforefeatureselected", { + feature: a + }), !1 !== b && (c.selectedFeatures.push(a), this.highlight(a), this.handlers.feature.lastFeature || (this.handlers.feature.lastFeature = c.selectedFeatures[0]), c.events.triggerEvent("featureselected", { + feature: a + }), this.onSelect.call(this.scope, a))) + }, + unselect: function(a) { + var b = a.layer; + this.unhighlight(a); + OpenLayers.Util.removeItem(b.selectedFeatures, a); + b.events.triggerEvent("featureunselected", { + feature: a + }); + this.onUnselect.call(this.scope, + a) + }, + selectBox: function(a) { + if (a instanceof OpenLayers.Bounds) { + var b = this.map.getLonLatFromPixel({ + x: a.left, + y: a.bottom + }), + a = this.map.getLonLatFromPixel({ + x: a.right, + y: a.top + }), + b = new OpenLayers.Bounds(b.lon, b.lat, a.lon, a.lat); + this.multipleSelect() || this.unselectAll(); + a = this.multiple; + this.multiple = !0; + var c = this.layers || [this.layer]; + this.events.triggerEvent("boxselectionstart", { + layers: c + }); + for (var d, e = 0; e < c.length; ++e) { + d = c[e]; + for (var f = 0, g = d.features.length; f < g; ++f) { + var h = d.features[f]; + h.getVisibility() && (null == + this.geometryTypes || -1 < OpenLayers.Util.indexOf(this.geometryTypes, h.geometry.CLASS_NAME)) && b.toGeometry().intersects(h.geometry) && -1 == OpenLayers.Util.indexOf(d.selectedFeatures, h) && this.select(h) + } + } + this.multiple = a; + this.events.triggerEvent("boxselectionend", { + layers: c + }) + } + }, + setMap: function(a) { + this.handlers.feature.setMap(a); + this.box && this.handlers.box.setMap(a); + OpenLayers.Control.prototype.setMap.apply(this, arguments) + }, + setLayer: function(a) { + var b = this.active; + this.unselectAll(); + this.deactivate(); + this.layers && + (this.layer.destroy(), this.layers = null); + this.initLayer(a); + this.handlers.feature.layer = this.layer; + b && this.activate() + }, + CLASS_NAME: "OpenLayers.Control.SelectFeature" +}); +OpenLayers.Handler.Keyboard = OpenLayers.Class(OpenLayers.Handler, { + KEY_EVENTS: ["keydown", "keyup"], + eventListener: null, + observeElement: null, + initialize: function(a, b, c) { + OpenLayers.Handler.prototype.initialize.apply(this, arguments); + this.eventListener = OpenLayers.Function.bindAsEventListener(this.handleKeyEvent, this) + }, + destroy: function() { + this.deactivate(); + this.eventListener = null; + OpenLayers.Handler.prototype.destroy.apply(this, arguments) + }, + activate: function() { + if (OpenLayers.Handler.prototype.activate.apply(this, + arguments)) { + this.observeElement = this.observeElement || document; + for (var a = 0, b = this.KEY_EVENTS.length; a < b; a++) OpenLayers.Event.observe(this.observeElement, this.KEY_EVENTS[a], this.eventListener); + return !0 + } + return !1 + }, + deactivate: function() { + var a = !1; + if (OpenLayers.Handler.prototype.deactivate.apply(this, arguments)) { + for (var a = 0, b = this.KEY_EVENTS.length; a < b; a++) OpenLayers.Event.stopObserving(this.observeElement, this.KEY_EVENTS[a], this.eventListener); + a = !0 + } + return a + }, + handleKeyEvent: function(a) { + this.checkModifiers(a) && + this.callback(a.type, [a]) + }, + CLASS_NAME: "OpenLayers.Handler.Keyboard" +}); +OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, { + geometryTypes: null, + clickout: !0, + toggle: !0, + standalone: !1, + layer: null, + feature: null, + vertices: null, + virtualVertices: null, + selectControl: null, + dragControl: null, + handlers: null, + deleteCodes: null, + virtualStyle: null, + vertexRenderIntent: null, + mode: null, + createVertices: !0, + modified: !1, + radiusHandle: null, + dragHandle: null, + onModificationStart: function() {}, + onModification: function() {}, + onModificationEnd: function() {}, + initialize: function(a, b) { + b = b || {}; + this.layer = + a; + this.vertices = []; + this.virtualVertices = []; + this.virtualStyle = OpenLayers.Util.extend({}, this.layer.style || this.layer.styleMap.createSymbolizer(null, b.vertexRenderIntent)); + this.virtualStyle.fillOpacity = 0.3; + this.virtualStyle.strokeOpacity = 0.3; + this.deleteCodes = [46, 68]; + this.mode = OpenLayers.Control.ModifyFeature.RESHAPE; + OpenLayers.Control.prototype.initialize.apply(this, [b]); + OpenLayers.Util.isArray(this.deleteCodes) || (this.deleteCodes = [this.deleteCodes]); + var c = this, + d = { + geometryTypes: this.geometryTypes, + clickout: this.clickout, + toggle: this.toggle, + onBeforeSelect: this.beforeSelectFeature, + onSelect: this.selectFeature, + onUnselect: this.unselectFeature, + scope: this + }; + !1 === this.standalone && (this.selectControl = new OpenLayers.Control.SelectFeature(a, d)); + this.dragControl = new OpenLayers.Control.DragFeature(a, { + geometryTypes: ["OpenLayers.Geometry.Point"], + onStart: function(a, b) { + c.dragStart.apply(c, [a, b]) + }, + onDrag: function(a, b) { + c.dragVertex.apply(c, [a, b]) + }, + onComplete: function(a) { + c.dragComplete.apply(c, [a]) + }, + featureCallbacks: { + over: function(a) { + (c.standalone !== + true || a._sketch || c.feature === a) && c.dragControl.overFeature.apply(c.dragControl, [a]) + } + } + }); + this.handlers = { + keyboard: new OpenLayers.Handler.Keyboard(this, { + keydown: this.handleKeypress + }) + } + }, + destroy: function() { + this.layer = null; + this.standalone || this.selectControl.destroy(); + this.dragControl.destroy(); + OpenLayers.Control.prototype.destroy.apply(this, []) + }, + activate: function() { + return (this.standalone || this.selectControl.activate()) && this.handlers.keyboard.activate() && OpenLayers.Control.prototype.activate.apply(this, + arguments) + }, + deactivate: function() { + var a = !1; + if (OpenLayers.Control.prototype.deactivate.apply(this, arguments)) { + this.layer.removeFeatures(this.vertices, { + silent: !0 + }); + this.layer.removeFeatures(this.virtualVertices, { + silent: !0 + }); + this.vertices = []; + this.dragControl.deactivate(); + var b = (a = this.feature) && a.geometry && a.layer; + !1 === this.standalone ? (b && this.selectControl.unselect.apply(this.selectControl, [a]), this.selectControl.deactivate()) : b && this.unselectFeature(a); + this.handlers.keyboard.deactivate(); + a = !0 + } + return a + }, + beforeSelectFeature: function(a) { + return this.layer.events.triggerEvent("beforefeaturemodified", { + feature: a + }) + }, + selectFeature: function(a) { + if (!this.standalone || !1 !== this.beforeSelectFeature(a)) this.feature = a, this.modified = !1, this.resetVertices(), this.dragControl.activate(), this.onModificationStart(this.feature); + var b = a.modified; + if (a.geometry && (!b || !b.geometry)) this._originalGeometry = a.geometry.clone() + }, + unselectFeature: function(a) { + this.layer.removeFeatures(this.vertices, { + silent: !0 + }); + this.vertices = []; + this.layer.destroyFeatures(this.virtualVertices, { + silent: !0 + }); + this.virtualVertices = []; + this.dragHandle && (this.layer.destroyFeatures([this.dragHandle], { + silent: !0 + }), delete this.dragHandle); + this.radiusHandle && (this.layer.destroyFeatures([this.radiusHandle], { + silent: !0 + }), delete this.radiusHandle); + this.feature = null; + this.dragControl.deactivate(); + this.onModificationEnd(a); + this.layer.events.triggerEvent("afterfeaturemodified", { + feature: a, + modified: this.modified + }); + this.modified = !1 + }, + dragStart: function(a, b) { + if (a != this.feature && (!a.geometry.parent && a != this.dragHandle && + a != this.radiusHandle) && (!1 === this.standalone && this.feature && this.selectControl.clickFeature.apply(this.selectControl, [this.feature]), null == this.geometryTypes || -1 != OpenLayers.Util.indexOf(this.geometryTypes, a.geometry.CLASS_NAME))) this.standalone || this.selectControl.clickFeature.apply(this.selectControl, [a]), this.dragControl.overFeature.apply(this.dragControl, [a]), this.dragControl.lastPixel = b, this.dragControl.handlers.drag.started = !0, this.dragControl.handlers.drag.start = b, this.dragControl.handlers.drag.last = + b + }, + dragVertex: function(a, b) { + this.modified = !0; + "OpenLayers.Geometry.Point" == this.feature.geometry.CLASS_NAME ? (this.feature != a && (this.feature = a), this.layer.events.triggerEvent("vertexmodified", { + vertex: a.geometry, + feature: this.feature, + pixel: b + })) : (a._index ? (a.geometry.parent.addComponent(a.geometry, a._index), delete a._index, OpenLayers.Util.removeItem(this.virtualVertices, a), this.vertices.push(a)) : a == this.dragHandle ? (this.layer.removeFeatures(this.vertices, { + silent: !0 + }), this.vertices = [], this.radiusHandle && + (this.layer.destroyFeatures([this.radiusHandle], { + silent: !0 + }), this.radiusHandle = null)) : a !== this.radiusHandle && this.layer.events.triggerEvent("vertexmodified", { + vertex: a.geometry, + feature: this.feature, + pixel: b + }), 0 < this.virtualVertices.length && (this.layer.destroyFeatures(this.virtualVertices, { + silent: !0 + }), this.virtualVertices = []), this.layer.drawFeature(this.feature, this.standalone ? void 0 : this.selectControl.renderIntent)); + this.layer.drawFeature(a) + }, + dragComplete: function() { + this.resetVertices(); + this.setFeatureState(); + this.onModification(this.feature); + this.layer.events.triggerEvent("featuremodified", { + feature: this.feature + }) + }, + setFeatureState: function() { + if (this.feature.state != OpenLayers.State.INSERT && this.feature.state != OpenLayers.State.DELETE && (this.feature.state = OpenLayers.State.UPDATE, this.modified && this._originalGeometry)) { + var a = this.feature; + a.modified = OpenLayers.Util.extend(a.modified, { + geometry: this._originalGeometry + }); + delete this._originalGeometry + } + }, + resetVertices: function() { + this.dragControl.feature && this.dragControl.outFeature(this.dragControl.feature); + 0 < this.vertices.length && (this.layer.removeFeatures(this.vertices, { + silent: !0 + }), this.vertices = []); + 0 < this.virtualVertices.length && (this.layer.removeFeatures(this.virtualVertices, { + silent: !0 + }), this.virtualVertices = []); + this.dragHandle && (this.layer.destroyFeatures([this.dragHandle], { + silent: !0 + }), this.dragHandle = null); + this.radiusHandle && (this.layer.destroyFeatures([this.radiusHandle], { + silent: !0 + }), this.radiusHandle = null); + this.feature && "OpenLayers.Geometry.Point" != this.feature.geometry.CLASS_NAME && (this.mode & + OpenLayers.Control.ModifyFeature.DRAG && this.collectDragHandle(), this.mode & (OpenLayers.Control.ModifyFeature.ROTATE | OpenLayers.Control.ModifyFeature.RESIZE) && this.collectRadiusHandle(), this.mode & OpenLayers.Control.ModifyFeature.RESHAPE && (this.mode & OpenLayers.Control.ModifyFeature.RESIZE || this.collectVertices())) + }, + handleKeypress: function(a) { + var b = a.keyCode; + if (this.feature && -1 != OpenLayers.Util.indexOf(this.deleteCodes, b) && (b = this.dragControl.feature) && -1 != OpenLayers.Util.indexOf(this.vertices, b) && !this.dragControl.handlers.drag.dragging && + b.geometry.parent) b.geometry.parent.removeComponent(b.geometry), this.layer.events.triggerEvent("vertexremoved", { + vertex: b.geometry, + feature: this.feature, + pixel: a.xy + }), this.layer.drawFeature(this.feature, this.standalone ? void 0 : this.selectControl.renderIntent), this.modified = !0, this.resetVertices(), this.setFeatureState(), this.onModification(this.feature), this.layer.events.triggerEvent("featuremodified", { + feature: this.feature + }) + }, + collectVertices: function() { + function a(c) { + var d, e, f; + if ("OpenLayers.Geometry.Point" == + c.CLASS_NAME) e = new OpenLayers.Feature.Vector(c), e._sketch = !0, e.renderIntent = b.vertexRenderIntent, b.vertices.push(e); + else { + f = c.components.length; + "OpenLayers.Geometry.LinearRing" == c.CLASS_NAME && (f -= 1); + for (d = 0; d < f; ++d) e = c.components[d], "OpenLayers.Geometry.Point" == e.CLASS_NAME ? (e = new OpenLayers.Feature.Vector(e), e._sketch = !0, e.renderIntent = b.vertexRenderIntent, b.vertices.push(e)) : a(e); + if (b.createVertices && "OpenLayers.Geometry.MultiPoint" != c.CLASS_NAME) { + d = 0; + for (f = c.components.length; d < f - 1; ++d) { + e = c.components[d]; + var g = c.components[d + 1]; + "OpenLayers.Geometry.Point" == e.CLASS_NAME && "OpenLayers.Geometry.Point" == g.CLASS_NAME && (e = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point((e.x + g.x) / 2, (e.y + g.y) / 2), null, b.virtualStyle), e.geometry.parent = c, e._index = d + 1, e._sketch = !0, b.virtualVertices.push(e)) + } + } + } + } + this.vertices = []; + this.virtualVertices = []; + var b = this; + a.call(this, this.feature.geometry); + this.layer.addFeatures(this.virtualVertices, { + silent: !0 + }); + this.layer.addFeatures(this.vertices, { + silent: !0 + }) + }, + collectDragHandle: function() { + var a = + this.feature.geometry, + b = a.getBounds().getCenterLonLat(), + b = new OpenLayers.Geometry.Point(b.lon, b.lat), + c = new OpenLayers.Feature.Vector(b); + b.move = function(b, c) { + OpenLayers.Geometry.Point.prototype.move.call(this, b, c); + a.move(b, c) + }; + c._sketch = !0; + this.dragHandle = c; + this.dragHandle.renderIntent = this.vertexRenderIntent; + this.layer.addFeatures([this.dragHandle], { + silent: !0 + }) + }, + collectRadiusHandle: function() { + var a = this.feature.geometry, + b = a.getBounds(), + c = b.getCenterLonLat(), + d = new OpenLayers.Geometry.Point(c.lon, c.lat), + b = new OpenLayers.Geometry.Point(b.right, b.bottom), + c = new OpenLayers.Feature.Vector(b), + e = this.mode & OpenLayers.Control.ModifyFeature.RESIZE, + f = this.mode & OpenLayers.Control.ModifyFeature.RESHAPE, + g = this.mode & OpenLayers.Control.ModifyFeature.ROTATE; + b.move = function(b, c) { + OpenLayers.Geometry.Point.prototype.move.call(this, b, c); + var j = this.x - d.x, + k = this.y - d.y, + l = j - b, + m = k - c; + if (g) { + var n = Math.atan2(m, l), + n = Math.atan2(k, j) - n, + n = n * (180 / Math.PI); + a.rotate(n, d) + } + if (e) { + var o; + f ? (k /= m, o = j / l / k) : (l = Math.sqrt(l * l + m * m), k = Math.sqrt(j * + j + k * k) / l); + a.resize(k, d, o) + } + }; + c._sketch = !0; + this.radiusHandle = c; + this.radiusHandle.renderIntent = this.vertexRenderIntent; + this.layer.addFeatures([this.radiusHandle], { + silent: !0 + }) + }, + setMap: function(a) { + this.standalone || this.selectControl.setMap(a); + this.dragControl.setMap(a); + OpenLayers.Control.prototype.setMap.apply(this, arguments) + }, + CLASS_NAME: "OpenLayers.Control.ModifyFeature" +}); +OpenLayers.Control.ModifyFeature.RESHAPE = 1; +OpenLayers.Control.ModifyFeature.RESIZE = 2; +OpenLayers.Control.ModifyFeature.ROTATE = 4; +OpenLayers.Control.ModifyFeature.DRAG = 8; +OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, { + key: null, + serverResolutions: [156543.03390625, 78271.516953125, 39135.7584765625, 19567.87923828125, 9783.939619140625, 4891.9698095703125, 2445.9849047851562, 1222.9924523925781, 611.4962261962891, 305.74811309814453, 152.87405654907226, 76.43702827453613, 38.218514137268066, 19.109257068634033, 9.554628534317017, 4.777314267158508, 2.388657133579254, 1.194328566789627, 0.5971642833948135, 0.29858214169740677, 0.14929107084870338, 0.07464553542435169], + attributionTemplate: '<span class="olBingAttribution ${type}"><div><a target="_blank" href="http://www.bing.com/maps/"><img src="${logo}" /></a></div>${copyrights}<a style="white-space: nowrap" target="_blank" href="http://www.microsoft.com/maps/product/terms.html">Terms of Use</a></span>', + metadata: null, + type: "Road", + culture: "en-US", + metadataParams: null, + tileOptions: null, + initialize: function(a) { + a = OpenLayers.Util.applyDefaults({ + sphericalMercator: !0 + }, a); + OpenLayers.Layer.XYZ.prototype.initialize.apply(this, [a.name || "Bing " + (a.type || this.type), null, a]); + this.tileOptions = OpenLayers.Util.extend({ + crossOriginKeyword: "anonymous" + }, this.options.tileOptions); + this.loadMetadata() + }, + loadMetadata: function() { + this._callbackId = "_callback_" + this.id.replace(/\./g, "_"); + window[this._callbackId] = OpenLayers.Function.bind(OpenLayers.Layer.Bing.processMetadata, + this); + var a = OpenLayers.Util.applyDefaults({ + key: this.key, + jsonp: this._callbackId, + include: "ImageryProviders" + }, this.metadataParams), + a = "http://dev.virtualearth.net/REST/v1/Imagery/Metadata/" + this.type + "?" + OpenLayers.Util.getParameterString(a), + b = document.createElement("script"); + b.type = "text/javascript"; + b.src = a; + b.id = this._callbackId; + document.getElementsByTagName("head")[0].appendChild(b) + }, + initLayer: function() { + var a = this.metadata.resourceSets[0].resources[0], + b = a.imageUrl.replace("{quadkey}", "${quadkey}"), + b = b.replace("{culture}", this.culture); + this.url = []; + for (var c = 0; c < a.imageUrlSubdomains.length; ++c) this.url.push(b.replace("{subdomain}", a.imageUrlSubdomains[c])); + this.addOptions({ + maxResolution: Math.min(this.serverResolutions[a.zoomMin], this.maxResolution || Number.POSITIVE_INFINITY), + numZoomLevels: Math.min(a.zoomMax + 1 - a.zoomMin, this.numZoomLevels) + }, !0) + }, + getURL: function(a) { + if (this.url) { + for (var b = this.getXYZ(a), a = b.x, c = b.y, b = b.z, d = [], e = b; 0 < e; --e) { + var f = "0", + g = 1 << e - 1; + 0 != (a & g) && f++; + 0 != (c & g) && (f++, f++); + d.push(f) + } + d = + d.join(""); + a = this.selectUrl("" + a + c + b, this.url); + return OpenLayers.String.format(a, { + quadkey: d + }) + } + }, + updateAttribution: function() { + var a = this.metadata; + if (a.resourceSets && this.map && this.map.center) { + var b = a.resourceSets[0].resources[0], + c = this.map.getExtent().transform(this.map.getProjectionObject(), new OpenLayers.Projection("EPSG:4326")), + b = b.imageryProviders, + d = OpenLayers.Util.indexOf(this.serverResolutions, this.getServerResolution()), + e = "", + f, g, h, i, j, k, l; + g = 0; + for (h = b.length; g < h; ++g) { + f = b[g]; + i = 0; + for (j = f.coverageAreas.length; i < + j; ++i) l = f.coverageAreas[i], k = OpenLayers.Bounds.fromArray(l.bbox, !0), c.intersectsBounds(k) && (d <= l.zoomMax && d >= l.zoomMin) && (e += f.attribution + " ") + } + this.attribution = OpenLayers.String.format(this.attributionTemplate, { + type: this.type.toLowerCase(), + logo: a.brandLogoUri, + copyrights: e + }); + this.map && this.map.events.triggerEvent("changelayer", { + layer: this, + property: "attribution" + }) + } + }, + setMap: function() { + OpenLayers.Layer.XYZ.prototype.setMap.apply(this, arguments); + this.updateAttribution(); + this.map.events.register("moveend", + this, this.updateAttribution) + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.Bing(this.options)); + return a = OpenLayers.Layer.XYZ.prototype.clone.apply(this, [a]) + }, + destroy: function() { + this.map && this.map.events.unregister("moveend", this, this.updateAttribution); + OpenLayers.Layer.XYZ.prototype.destroy.apply(this, arguments) + }, + CLASS_NAME: "OpenLayers.Layer.Bing" +}); +OpenLayers.Layer.Bing.processMetadata = function(a) { + this.metadata = a; + this.initLayer(); + a = document.getElementById(this._callbackId); + a.parentNode.removeChild(a); + window[this._callbackId] = void 0; + delete this._callbackId +}; +OpenLayers.Layer.PointGrid = OpenLayers.Class(OpenLayers.Layer.Vector, { + dx: null, + dy: null, + ratio: 1.5, + maxFeatures: 250, + rotation: 0, + origin: null, + gridBounds: null, + initialize: function(a) { + a = a || {}; + OpenLayers.Layer.Vector.prototype.initialize.apply(this, [a.name, a]) + }, + setMap: function(a) { + OpenLayers.Layer.Vector.prototype.setMap.apply(this, arguments); + a.events.register("moveend", this, this.onMoveEnd) + }, + removeMap: function(a) { + a.events.unregister("moveend", this, this.onMoveEnd); + OpenLayers.Layer.Vector.prototype.removeMap.apply(this, + arguments) + }, + setRatio: function(a) { + this.ratio = a; + this.updateGrid(!0) + }, + setMaxFeatures: function(a) { + this.maxFeatures = a; + this.updateGrid(!0) + }, + setSpacing: function(a, b) { + this.dx = a; + this.dy = b || a; + this.updateGrid(!0) + }, + setOrigin: function(a) { + this.origin = a; + this.updateGrid(!0) + }, + getOrigin: function() { + this.origin || (this.origin = this.map.getExtent().getCenterLonLat()); + return this.origin + }, + setRotation: function(a) { + this.rotation = a; + this.updateGrid(!0) + }, + onMoveEnd: function() { + this.updateGrid() + }, + getViewBounds: function() { + var a = this.map.getExtent(); + if (this.rotation) { + var b = this.getOrigin(), + b = new OpenLayers.Geometry.Point(b.lon, b.lat), + a = a.toGeometry(); + a.rotate(-this.rotation, b); + a = a.getBounds() + } + return a + }, + updateGrid: function(a) { + if (a || this.invalidBounds()) { + var b = this.getViewBounds(), + c = this.getOrigin(), + a = new OpenLayers.Geometry.Point(c.lon, c.lat), + d = b.getWidth(), + e = b.getHeight(), + f = d / e, + g = Math.sqrt(this.dx * this.dy * this.maxFeatures / f), + d = Math.min(d * this.ratio, g * f), + e = Math.min(e * this.ratio, g), + b = b.getCenterLonLat(); + this.gridBounds = new OpenLayers.Bounds(b.lon - + d / 2, b.lat - e / 2, b.lon + d / 2, b.lat + e / 2); + for (var b = Math.floor(e / this.dy), d = Math.floor(d / this.dx), e = c.lon + this.dx * Math.ceil((this.gridBounds.left - c.lon) / this.dx), c = c.lat + this.dy * Math.ceil((this.gridBounds.bottom - c.lat) / this.dy), g = Array(b * d), h, i = 0; i < d; ++i) + for (var f = e + i * this.dx, j = 0; j < b; ++j) h = c + j * this.dy, h = new OpenLayers.Geometry.Point(f, h), this.rotation && h.rotate(this.rotation, a), g[i * b + j] = new OpenLayers.Feature.Vector(h); + this.destroyFeatures(this.features, { + silent: !0 + }); + this.addFeatures(g, { + silent: !0 + }) + } + }, + invalidBounds: function() { + return !this.gridBounds || + !this.gridBounds.containsBounds(this.getViewBounds()) + }, + CLASS_NAME: "OpenLayers.Layer.PointGrid" +}); +OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, { + wheelListener: null, + mousePosition: null, + interval: 0, + delta: 0, + cumulative: !0, + initialize: function(a, b, c) { + OpenLayers.Handler.prototype.initialize.apply(this, arguments); + this.wheelListener = OpenLayers.Function.bindAsEventListener(this.onWheelEvent, this) + }, + destroy: function() { + OpenLayers.Handler.prototype.destroy.apply(this, arguments); + this.wheelListener = null + }, + onWheelEvent: function(a) { + if (this.map && this.checkModifiers(a)) { + for (var b = !1, c = !1, d = !1, e = + OpenLayers.Event.element(a); null != e && !d && !b;) { + if (!b) try { + var f = e.currentStyle ? e.currentStyle.overflow : document.defaultView.getComputedStyle(e, null).getPropertyValue("overflow"), + b = f && "auto" == f || "scroll" == f + } catch (g) {} + if (!c) + for (var d = 0, h = this.map.layers.length; d < h; d++) + if (e == this.map.layers[d].div || e == this.map.layers[d].pane) { + c = !0; + break + } + d = e == this.map.div; + e = e.parentNode + }!b && d && (c && ((b = 0, a || (a = window.event), a.wheelDelta ? (b = a.wheelDelta / 120, window.opera && 9.2 > window.opera.version() && (b = -b)) : a.detail && (b = -a.detail / + 3), this.delta += b, this.interval) ? (window.clearTimeout(this._timeoutId), this._timeoutId = window.setTimeout(OpenLayers.Function.bind(function() { + this.wheelZoom(a) + }, this), this.interval)) : this.wheelZoom(a)), OpenLayers.Event.stop(a)) + } + }, + wheelZoom: function(a) { + var b = this.delta; + this.delta = 0; + b && (this.mousePosition && (a.xy = this.mousePosition), a.xy || (a.xy = this.map.getPixelFromLonLat(this.map.getCenter())), 0 > b ? this.callback("down", [a, this.cumulative ? b : -1]) : this.callback("up", [a, this.cumulative ? b : 1])) + }, + mousemove: function(a) { + //alert(a.xy); + this.mousePosition = + a.xy + }, + activate: function(a) { + if (OpenLayers.Handler.prototype.activate.apply(this, arguments)) { + var b = this.wheelListener; + OpenLayers.Event.observe(window, "DOMMouseScroll", b); + OpenLayers.Event.observe(window, "mousewheel", b); + OpenLayers.Event.observe(document, "mousewheel", b); + return !0 + } + return !1 + }, + deactivate: function(a) { + if (OpenLayers.Handler.prototype.deactivate.apply(this, arguments)) { + var b = this.wheelListener; + OpenLayers.Event.stopObserving(window, "DOMMouseScroll", b); + OpenLayers.Event.stopObserving(window, "mousewheel", + b); + OpenLayers.Event.stopObserving(document, "mousewheel", b); + return !0 + } + return !1 + }, + CLASS_NAME: "OpenLayers.Handler.MouseWheel" +}); +OpenLayers.Symbolizer = OpenLayers.Class({ + zIndex: 0, + initialize: function(a) { + OpenLayers.Util.extend(this, a) + }, + clone: function() { + return new(eval(this.CLASS_NAME))(OpenLayers.Util.extend({}, this)) + }, + CLASS_NAME: "OpenLayers.Symbolizer" +}); +OpenLayers.Symbolizer.Raster = OpenLayers.Class(OpenLayers.Symbolizer, { + initialize: function(a) { + OpenLayers.Symbolizer.prototype.initialize.apply(this, arguments) + }, + CLASS_NAME: "OpenLayers.Symbolizer.Raster" +}); +OpenLayers.Rule = OpenLayers.Class({ + id: null, + name: null, + title: null, + description: null, + context: null, + filter: null, + elseFilter: !1, + symbolizer: null, + symbolizers: null, + minScaleDenominator: null, + maxScaleDenominator: null, + initialize: function(a) { + this.symbolizer = {}; + OpenLayers.Util.extend(this, a); + this.symbolizers && delete this.symbolizer; + this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_") + }, + destroy: function() { + for (var a in this.symbolizer) this.symbolizer[a] = null; + this.symbolizer = null; + delete this.symbolizers + }, + evaluate: function(a) { + var b = + this.getContext(a), + c = !0; + if (this.minScaleDenominator || this.maxScaleDenominator) var d = a.layer.map.getScale(); + this.minScaleDenominator && (c = d >= OpenLayers.Style.createLiteral(this.minScaleDenominator, b)); + c && this.maxScaleDenominator && (c = d < OpenLayers.Style.createLiteral(this.maxScaleDenominator, b)); + c && this.filter && (c = "OpenLayers.Filter.FeatureId" == this.filter.CLASS_NAME ? this.filter.evaluate(a) : this.filter.evaluate(b)); + return c + }, + getContext: function(a) { + var b = this.context; + b || (b = a.attributes || a.data); + "function" == + typeof this.context && (b = this.context(a)); + return b + }, + clone: function() { + var a = OpenLayers.Util.extend({}, this); + if (this.symbolizers) { + var b = this.symbolizers.length; + a.symbolizers = Array(b); + for (var c = 0; c < b; ++c) a.symbolizers[c] = this.symbolizers[c].clone() + } else { + a.symbolizer = {}; + for (var d in this.symbolizer) b = this.symbolizer[d], c = typeof b, "object" === c ? a.symbolizer[d] = OpenLayers.Util.extend({}, b) : "string" === c && (a.symbolizer[d] = b) + } + a.filter = this.filter && this.filter.clone(); + a.context = this.context && OpenLayers.Util.extend({}, + this.context); + return new OpenLayers.Rule(a) + }, + CLASS_NAME: "OpenLayers.Rule" +}); +OpenLayers.Filter.Spatial = OpenLayers.Class(OpenLayers.Filter, { + type: null, + property: null, + value: null, + distance: null, + distanceUnits: null, + evaluate: function(a) { + var b = !1; + switch (this.type) { + case OpenLayers.Filter.Spatial.BBOX: + case OpenLayers.Filter.Spatial.INTERSECTS: + if (a.geometry) { + var c = this.value; + "OpenLayers.Bounds" == this.value.CLASS_NAME && (c = this.value.toGeometry()); + a.geometry.intersects(c) && (b = !0) + } + break; + default: + throw Error("evaluate is not implemented for this filter type."); + } + return b + }, + clone: function() { + var a = + OpenLayers.Util.applyDefaults({ + value: this.value && this.value.clone && this.value.clone() + }, this); + return new OpenLayers.Filter.Spatial(a) + }, + CLASS_NAME: "OpenLayers.Filter.Spatial" +}); +OpenLayers.Filter.Spatial.BBOX = "BBOX"; +OpenLayers.Filter.Spatial.INTERSECTS = "INTERSECTS"; +OpenLayers.Filter.Spatial.DWITHIN = "DWITHIN"; +OpenLayers.Filter.Spatial.WITHIN = "WITHIN"; +OpenLayers.Filter.Spatial.CONTAINS = "CONTAINS"; +OpenLayers.Format.SLD = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, { + profile: null, + defaultVersion: "1.0.0", + stringifyOutput: !0, + namedLayersAsArray: !1, + CLASS_NAME: "OpenLayers.Format.SLD" +}); +OpenLayers.Symbolizer.Polygon = OpenLayers.Class(OpenLayers.Symbolizer, { + initialize: function(a) { + OpenLayers.Symbolizer.prototype.initialize.apply(this, arguments) + }, + CLASS_NAME: "OpenLayers.Symbolizer.Polygon" +}); +OpenLayers.Format.GML.v2 = OpenLayers.Class(OpenLayers.Format.GML.Base, { + schemaLocation: "http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd", + initialize: function(a) { + OpenLayers.Format.GML.Base.prototype.initialize.apply(this, [a]) + }, + readers: { + gml: OpenLayers.Util.applyDefaults({ + outerBoundaryIs: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + b.outer = c.components[0] + }, + innerBoundaryIs: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + b.inner.push(c.components[0]) + }, + Box: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + b.components || (b.components = []); + var d = c.points[0], + c = c.points[1]; + b.components.push(new OpenLayers.Bounds(d.x, d.y, c.x, c.y)) + } + }, OpenLayers.Format.GML.Base.prototype.readers.gml), + feature: OpenLayers.Format.GML.Base.prototype.readers.feature, + wfs: OpenLayers.Format.GML.Base.prototype.readers.wfs + }, + write: function(a) { + a = this.writeNode(OpenLayers.Util.isArray(a) ? "wfs:FeatureCollection" : "gml:featureMember", a); + this.setAttributeNS(a, this.namespaces.xsi, "xsi:schemaLocation", this.schemaLocation); + return OpenLayers.Format.XML.prototype.write.apply(this, [a]) + }, + writers: { + gml: OpenLayers.Util.applyDefaults({ + Point: function(a) { + var b = this.createElementNSPlus("gml:Point"); + this.writeNode("coordinates", [a], b); + return b + }, + coordinates: function(a) { + for (var b = a.length, c = Array(b), d, e = 0; e < b; ++e) d = a[e], c[e] = this.xy ? d.x + "," + d.y : d.y + "," + d.x, void 0 != d.z && (c[e] += "," + d.z); + return this.createElementNSPlus("gml:coordinates", { + attributes: { + decimal: ".", + cs: ",", + ts: " " + }, + value: 1 == b ? c[0] : c.join(" ") + }) + }, + LineString: function(a) { + var b = + this.createElementNSPlus("gml:LineString"); + this.writeNode("coordinates", a.components, b); + return b + }, + Polygon: function(a) { + var b = this.createElementNSPlus("gml:Polygon"); + this.writeNode("outerBoundaryIs", a.components[0], b); + for (var c = 1; c < a.components.length; ++c) this.writeNode("innerBoundaryIs", a.components[c], b); + return b + }, + outerBoundaryIs: function(a) { + var b = this.createElementNSPlus("gml:outerBoundaryIs"); + this.writeNode("LinearRing", a, b); + return b + }, + innerBoundaryIs: function(a) { + var b = this.createElementNSPlus("gml:innerBoundaryIs"); + this.writeNode("LinearRing", a, b); + return b + }, + LinearRing: function(a) { + var b = this.createElementNSPlus("gml:LinearRing"); + this.writeNode("coordinates", a.components, b); + return b + }, + Box: function(a) { + var b = this.createElementNSPlus("gml:Box"); + this.writeNode("coordinates", [{ + x: a.left, + y: a.bottom + }, { + x: a.right, + y: a.top + }], b); + this.srsName && b.setAttribute("srsName", this.srsName); + return b + } + }, OpenLayers.Format.GML.Base.prototype.writers.gml), + feature: OpenLayers.Format.GML.Base.prototype.writers.feature, + wfs: OpenLayers.Format.GML.Base.prototype.writers.wfs + }, + CLASS_NAME: "OpenLayers.Format.GML.v2" +}); +OpenLayers.Format.Filter.v1_0_0 = OpenLayers.Class(OpenLayers.Format.GML.v2, OpenLayers.Format.Filter.v1, { + VERSION: "1.0.0", + schemaLocation: "http://www.opengis.net/ogc/filter/1.0.0/filter.xsd", + initialize: function(a) { + OpenLayers.Format.GML.v2.prototype.initialize.apply(this, [a]) + }, + readers: { + ogc: OpenLayers.Util.applyDefaults({ + PropertyIsEqualTo: function(a, b) { + var c = new OpenLayers.Filter.Comparison({ + type: OpenLayers.Filter.Comparison.EQUAL_TO + }); + this.readChildNodes(a, c); + b.filters.push(c) + }, + PropertyIsNotEqualTo: function(a, + b) { + var c = new OpenLayers.Filter.Comparison({ + type: OpenLayers.Filter.Comparison.NOT_EQUAL_TO + }); + this.readChildNodes(a, c); + b.filters.push(c) + }, + PropertyIsLike: function(a, b) { + var c = new OpenLayers.Filter.Comparison({ + type: OpenLayers.Filter.Comparison.LIKE + }); + this.readChildNodes(a, c); + var d = a.getAttribute("wildCard"), + e = a.getAttribute("singleChar"), + f = a.getAttribute("escape"); + c.value2regex(d, e, f); + b.filters.push(c) + } + }, OpenLayers.Format.Filter.v1.prototype.readers.ogc), + gml: OpenLayers.Format.GML.v2.prototype.readers.gml, + feature: OpenLayers.Format.GML.v2.prototype.readers.feature + }, + writers: { + ogc: OpenLayers.Util.applyDefaults({ + PropertyIsEqualTo: function(a) { + var b = this.createElementNSPlus("ogc:PropertyIsEqualTo"); + this.writeNode("PropertyName", a, b); + this.writeOgcExpression(a.value, b); + return b + }, + PropertyIsNotEqualTo: function(a) { + var b = this.createElementNSPlus("ogc:PropertyIsNotEqualTo"); + this.writeNode("PropertyName", a, b); + this.writeOgcExpression(a.value, b); + return b + }, + PropertyIsLike: function(a) { + var b = this.createElementNSPlus("ogc:PropertyIsLike", { + attributes: { + wildCard: "*", + singleChar: ".", + escape: "!" + } + }); + this.writeNode("PropertyName", a, b); + this.writeNode("Literal", a.regex2value(), b); + return b + }, + BBOX: function(a) { + var b = this.createElementNSPlus("ogc:BBOX"); + a.property && this.writeNode("PropertyName", a, b); + var c = this.writeNode("gml:Box", a.value, b); + a.projection && c.setAttribute("srsName", a.projection); + return b + } + }, OpenLayers.Format.Filter.v1.prototype.writers.ogc), + gml: OpenLayers.Format.GML.v2.prototype.writers.gml, + feature: OpenLayers.Format.GML.v2.prototype.writers.feature + }, + writeSpatial: function(a, b) { + var c = this.createElementNSPlus("ogc:" + b); + this.writeNode("PropertyName", a, c); + if (a.value instanceof OpenLayers.Filter.Function) this.writeNode("Function", a.value, c); + else { + var d; + d = a.value instanceof OpenLayers.Geometry ? this.writeNode("feature:_geometry", a.value).firstChild : this.writeNode("gml:Box", a.value); + a.projection && d.setAttribute("srsName", a.projection); + c.appendChild(d) + } + return c + }, + CLASS_NAME: "OpenLayers.Format.Filter.v1_0_0" +}); +OpenLayers.Format.WFST.v1_0_0 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, OpenLayers.Format.WFST.v1, { + version: "1.0.0", + srsNameInQuery: !1, + schemaLocations: { + wfs: "http://schemas.opengis.net/wfs/1.0.0/WFS-transaction.xsd" + }, + initialize: function(a) { + OpenLayers.Format.Filter.v1_0_0.prototype.initialize.apply(this, [a]); + OpenLayers.Format.WFST.v1.prototype.initialize.apply(this, [a]) + }, + readNode: function(a, b) { + return OpenLayers.Format.GML.v2.prototype.readNode.apply(this, [a, b]) + }, + readers: { + wfs: OpenLayers.Util.applyDefaults({ + WFS_TransactionResponse: function(a, + b) { + b.insertIds = []; + b.success = !1; + this.readChildNodes(a, b) + }, + InsertResult: function(a, b) { + var c = { + fids: [] + }; + this.readChildNodes(a, c); + b.insertIds.push(c.fids[0]) + }, + TransactionResult: function(a, b) { + this.readChildNodes(a, b) + }, + Status: function(a, b) { + this.readChildNodes(a, b) + }, + SUCCESS: function(a, b) { + b.success = !0 + } + }, OpenLayers.Format.WFST.v1.prototype.readers.wfs), + gml: OpenLayers.Format.GML.v2.prototype.readers.gml, + feature: OpenLayers.Format.GML.v2.prototype.readers.feature, + ogc: OpenLayers.Format.Filter.v1_0_0.prototype.readers.ogc + }, + writers: { + wfs: OpenLayers.Util.applyDefaults({ + Query: function(a) { + var a = OpenLayers.Util.extend({ + featureNS: this.featureNS, + featurePrefix: this.featurePrefix, + featureType: this.featureType, + srsName: this.srsName, + srsNameInQuery: this.srsNameInQuery + }, a), + b = a.featurePrefix, + c = this.createElementNSPlus("wfs:Query", { + attributes: { + typeName: (b ? b + ":" : "") + a.featureType + } + }); + a.srsNameInQuery && a.srsName && c.setAttribute("srsName", a.srsName); + a.featureNS && c.setAttribute("xmlns:" + b, a.featureNS); + if (a.propertyNames) + for (var b = 0, d = a.propertyNames.length; b < + d; b++) this.writeNode("ogc:PropertyName", { + property: a.propertyNames[b] + }, c); + a.filter && (this.setFilterProperty(a.filter), this.writeNode("ogc:Filter", a.filter, c)); + return c + } + }, OpenLayers.Format.WFST.v1.prototype.writers.wfs), + gml: OpenLayers.Format.GML.v2.prototype.writers.gml, + feature: OpenLayers.Format.GML.v2.prototype.writers.feature, + ogc: OpenLayers.Format.Filter.v1_0_0.prototype.writers.ogc + }, + CLASS_NAME: "OpenLayers.Format.WFST.v1_0_0" +}); +OpenLayers.ElementsIndexer = OpenLayers.Class({ + maxZIndex: null, + order: null, + indices: null, + compare: null, + initialize: function(a) { + this.compare = a ? OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER_Y_ORDER : OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER_DRAWING_ORDER; + this.clear() + }, + insert: function(a) { + this.exists(a) && this.remove(a); + var b = a.id; + this.determineZIndex(a); + for (var c = -1, d = this.order.length, e; 1 < d - c;) e = parseInt((c + d) / 2), 0 < this.compare(this, a, OpenLayers.Util.getElement(this.order[e])) ? c = e : d = e; + this.order.splice(d, + 0, b); + this.indices[b] = this.getZIndex(a); + return this.getNextElement(d) + }, + remove: function(a) { + var a = a.id, + b = OpenLayers.Util.indexOf(this.order, a); + 0 <= b && (this.order.splice(b, 1), delete this.indices[a], this.maxZIndex = 0 < this.order.length ? this.indices[this.order[this.order.length - 1]] : 0) + }, + clear: function() { + this.order = []; + this.indices = {}; + this.maxZIndex = 0 + }, + exists: function(a) { + return null != this.indices[a.id] + }, + getZIndex: function(a) { + return a._style.graphicZIndex + }, + determineZIndex: function(a) { + var b = a._style.graphicZIndex; + null == b ? (b = this.maxZIndex, a._style.graphicZIndex = b) : b > this.maxZIndex && (this.maxZIndex = b) + }, + getNextElement: function(a) { + a += 1; + if (a < this.order.length) { + var b = OpenLayers.Util.getElement(this.order[a]); + void 0 == b && (b = this.getNextElement(a)); + return b + } + return null + }, + CLASS_NAME: "OpenLayers.ElementsIndexer" +}); +OpenLayers.ElementsIndexer.IndexingMethods = { + Z_ORDER: function(a, b, c) { + var b = a.getZIndex(b), + d = 0; + c && (a = a.getZIndex(c), d = b - a); + return d + }, + Z_ORDER_DRAWING_ORDER: function(a, b, c) { + a = OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER(a, b, c); + c && 0 == a && (a = 1); + return a + }, + Z_ORDER_Y_ORDER: function(a, b, c) { + a = OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER(a, b, c); + c && 0 === a && (b = c._boundsBottom - b._boundsBottom, a = 0 === b ? 1 : b); + return a + } +}; +OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, { + rendererRoot: null, + root: null, + vectorRoot: null, + textRoot: null, + xmlns: null, + xOffset: 0, + indexer: null, + BACKGROUND_ID_SUFFIX: "_background", + LABEL_ID_SUFFIX: "_label", + LABEL_OUTLINE_SUFFIX: "_outline", + initialize: function(a, b) { + OpenLayers.Renderer.prototype.initialize.apply(this, arguments); + this.rendererRoot = this.createRenderRoot(); + this.root = this.createRoot("_root"); + this.vectorRoot = this.createRoot("_vroot"); + this.textRoot = this.createRoot("_troot"); + this.root.appendChild(this.vectorRoot); + this.root.appendChild(this.textRoot); + this.rendererRoot.appendChild(this.root); + this.container.appendChild(this.rendererRoot); + if (b && (b.zIndexing || b.yOrdering)) this.indexer = new OpenLayers.ElementsIndexer(b.yOrdering) + }, + destroy: function() { + this.clear(); + this.xmlns = this.root = this.rendererRoot = null; + OpenLayers.Renderer.prototype.destroy.apply(this, arguments) + }, + clear: function() { + var a, b = this.vectorRoot; + if (b) + for (; a = b.firstChild;) b.removeChild(a); + if (b = this.textRoot) + for (; a = b.firstChild;) b.removeChild(a); + this.indexer && + this.indexer.clear() + }, + setExtent: function(a, b) { + var c = OpenLayers.Renderer.prototype.setExtent.apply(this, arguments), + d = this.getResolution(); + if (this.map.baseLayer && this.map.baseLayer.wrapDateLine) { + var e, f = a.getWidth() / this.map.getExtent().getWidth(), + a = a.scale(1 / f), + f = this.map.getMaxExtent(); + f.right > a.left && f.right < a.right ? e = !0 : f.left > a.left && f.left < a.right && (e = !1); + if (e !== this.rightOfDateLine || b) c = !1, this.xOffset = !0 === e ? f.getWidth() / d : 0; + this.rightOfDateLine = e + } + return c + }, + getNodeType: function() {}, + drawGeometry: function(a, + b, c) { + var d = a.CLASS_NAME, + e = !0; + if ("OpenLayers.Geometry.Collection" == d || "OpenLayers.Geometry.MultiPoint" == d || "OpenLayers.Geometry.MultiLineString" == d || "OpenLayers.Geometry.MultiPolygon" == d) { + for (var d = 0, f = a.components.length; d < f; d++) e = this.drawGeometry(a.components[d], b, c) && e; + return e + } + d = e = !1; + "none" != b.display && (b.backgroundGraphic ? this.redrawBackgroundNode(a.id, a, b, c) : d = !0, e = this.redrawNode(a.id, a, b, c)); + if (!1 == e && (b = document.getElementById(a.id))) b._style.backgroundGraphic && (d = !0), b.parentNode.removeChild(b); + d && (b = document.getElementById(a.id + this.BACKGROUND_ID_SUFFIX)) && b.parentNode.removeChild(b); + return e + }, + redrawNode: function(a, b, c, d) { + c = this.applyDefaultSymbolizer(c); + a = this.nodeFactory(a, this.getNodeType(b, c)); + a._featureId = d; + a._boundsBottom = b.getBounds().bottom; + a._geometryClass = b.CLASS_NAME; + a._style = c; + b = this.drawGeometryNode(a, b, c); + if (!1 === b) return !1; + a = b.node; + this.indexer ? (c = this.indexer.insert(a)) ? this.vectorRoot.insertBefore(a, c) : this.vectorRoot.appendChild(a) : a.parentNode !== this.vectorRoot && this.vectorRoot.appendChild(a); + this.postDraw(a); + return b.complete + }, + redrawBackgroundNode: function(a, b, c) { + c = OpenLayers.Util.extend({}, c); + c.externalGraphic = c.backgroundGraphic; + c.graphicXOffset = c.backgroundXOffset; + c.graphicYOffset = c.backgroundYOffset; + c.graphicZIndex = c.backgroundGraphicZIndex; + c.graphicWidth = c.backgroundWidth || c.graphicWidth; + c.graphicHeight = c.backgroundHeight || c.graphicHeight; + c.backgroundGraphic = null; + c.backgroundXOffset = null; + c.backgroundYOffset = null; + c.backgroundGraphicZIndex = null; + return this.redrawNode(a + this.BACKGROUND_ID_SUFFIX, + b, c, null) + }, + drawGeometryNode: function(a, b, c) { + var c = c || a._style, + d = { + isFilled: void 0 === c.fill ? !0 : c.fill, + isStroked: void 0 === c.stroke ? !!c.strokeWidth : c.stroke + }, + e; + switch (b.CLASS_NAME) { + case "OpenLayers.Geometry.Point": + !1 === c.graphic && (d.isFilled = !1, d.isStroked = !1); + e = this.drawPoint(a, b); + break; + case "OpenLayers.Geometry.LineString": + d.isFilled = !1; + e = this.drawLineString(a, b); + break; + case "OpenLayers.Geometry.LinearRing": + e = this.drawLinearRing(a, b); + break; + case "OpenLayers.Geometry.Polygon": + e = this.drawPolygon(a, b); + break; + case "OpenLayers.Geometry.Rectangle": + e = this.drawRectangle(a, b) + } + a._options = d; + return !1 != e ? { + node: this.setStyle(a, c, d, b), + complete: e + } : !1 + }, + postDraw: function() {}, + drawPoint: function() {}, + drawLineString: function() {}, + drawLinearRing: function() {}, + drawPolygon: function() {}, + drawRectangle: function() {}, + drawCircle: function() {}, + removeText: function(a) { + var b = document.getElementById(a + this.LABEL_ID_SUFFIX); + b && this.textRoot.removeChild(b); + (a = document.getElementById(a + this.LABEL_OUTLINE_SUFFIX)) && this.textRoot.removeChild(a) + }, + getFeatureIdFromEvent: function(a) { + var b = a.target, + c = b && b.correspondingUseElement; + return (c ? c : b || a.srcElement)._featureId + }, + eraseGeometry: function(a, b) { + if ("OpenLayers.Geometry.MultiPoint" == a.CLASS_NAME || "OpenLayers.Geometry.MultiLineString" == a.CLASS_NAME || "OpenLayers.Geometry.MultiPolygon" == a.CLASS_NAME || "OpenLayers.Geometry.Collection" == a.CLASS_NAME) + for (var c = 0, d = a.components.length; c < d; c++) this.eraseGeometry(a.components[c], b); + else if ((c = OpenLayers.Util.getElement(a.id)) && c.parentNode) + if (c.geometry && + (c.geometry.destroy(), c.geometry = null), c.parentNode.removeChild(c), this.indexer && this.indexer.remove(c), c._style.backgroundGraphic)(c = OpenLayers.Util.getElement(a.id + this.BACKGROUND_ID_SUFFIX)) && c.parentNode && c.parentNode.removeChild(c) + }, + nodeFactory: function(a, b) { + var c = OpenLayers.Util.getElement(a); + c ? this.nodeTypeCompare(c, b) || (c.parentNode.removeChild(c), c = this.nodeFactory(a, b)) : c = this.createNode(b, a); + return c + }, + nodeTypeCompare: function() {}, + createNode: function() {}, + moveRoot: function(a) { + var b = this.root; + a.root.parentNode == this.rendererRoot && (b = a.root); + b.parentNode.removeChild(b); + a.rendererRoot.appendChild(b) + }, + getRenderLayerId: function() { + return this.root.parentNode.parentNode.id + }, + isComplexSymbol: function(a) { + return "circle" != a && !!a + }, + CLASS_NAME: "OpenLayers.Renderer.Elements" +}); +OpenLayers.Control.ArgParser = OpenLayers.Class(OpenLayers.Control, { + center: null, + zoom: null, + layers: null, + displayProjection: null, + getParameters: function(a) { + var a = a || window.location.href, + b = OpenLayers.Util.getParameters(a), + c = a.indexOf("#"); + 0 < c && (a = "?" + a.substring(c + 1, a.length), OpenLayers.Util.extend(b, OpenLayers.Util.getParameters(a))); + return b + }, + setMap: function(a) { + OpenLayers.Control.prototype.setMap.apply(this, arguments); + for (var b = 0, c = this.map.controls.length; b < c; b++) { + var d = this.map.controls[b]; + if (d != this && + "OpenLayers.Control.ArgParser" == d.CLASS_NAME) { + d.displayProjection != this.displayProjection && (this.displayProjection = d.displayProjection); + break + } + } + if (b == this.map.controls.length && (b = this.getParameters(), b.layers && (this.layers = b.layers, this.map.events.register("addlayer", this, this.configureLayers), this.configureLayers()), b.lat && b.lon)) this.center = new OpenLayers.LonLat(parseFloat(b.lon), parseFloat(b.lat)), b.zoom && (this.zoom = parseFloat(b.zoom)), this.map.events.register("changebaselayer", this, this.setCenter), + this.setCenter() + }, + setCenter: function() { + this.map.baseLayer && (this.map.events.unregister("changebaselayer", this, this.setCenter), this.displayProjection && this.center.transform(this.displayProjection, this.map.getProjectionObject()), this.map.setCenter(this.center, this.zoom)) + }, + configureLayers: function() { + if (this.layers.length == this.map.layers.length) { + this.map.events.unregister("addlayer", this, this.configureLayers); + for (var a = 0, b = this.layers.length; a < b; a++) { + var c = this.map.layers[a], + d = this.layers.charAt(a); + "B" == d ? this.map.setBaseLayer(c) : ("T" == d || "F" == d) && c.setVisibility("T" == d) + } + } + }, + CLASS_NAME: "OpenLayers.Control.ArgParser" +}); +OpenLayers.Control.Permalink = OpenLayers.Class(OpenLayers.Control, { + argParserClass: OpenLayers.Control.ArgParser, + element: null, + anchor: !1, + base: "", + displayProjection: null, + initialize: function(a, b, c) { + null !== a && "object" == typeof a && !OpenLayers.Util.isElement(a) ? (this.base = document.location.href, OpenLayers.Control.prototype.initialize.apply(this, [a]), null != this.element && (this.element = OpenLayers.Util.getElement(this.element))) : (OpenLayers.Control.prototype.initialize.apply(this, [c]), this.element = OpenLayers.Util.getElement(a), + this.base = b || document.location.href) + }, + destroy: function() { + this.element && this.element.parentNode == this.div && (this.div.removeChild(this.element), this.element = null); + this.map && this.map.events.unregister("moveend", this, this.updateLink); + OpenLayers.Control.prototype.destroy.apply(this, arguments) + }, + setMap: function(a) { + OpenLayers.Control.prototype.setMap.apply(this, arguments); + for (var b = 0, c = this.map.controls.length; b < c; b++) { + var d = this.map.controls[b]; + if (d.CLASS_NAME == this.argParserClass.CLASS_NAME) { + d.displayProjection != + this.displayProjection && (this.displayProjection = d.displayProjection); + break + } + } + b == this.map.controls.length && this.map.addControl(new this.argParserClass({ + displayProjection: this.displayProjection + })) + }, + draw: function() { + OpenLayers.Control.prototype.draw.apply(this, arguments); + !this.element && !this.anchor && (this.element = document.createElement("a"), this.element.innerHTML = OpenLayers.i18n("Permalink"), this.element.href = "", this.div.appendChild(this.element)); + this.map.events.on({ + moveend: this.updateLink, + changelayer: this.updateLink, + changebaselayer: this.updateLink, + scope: this + }); + this.updateLink(); + return this.div + }, + updateLink: function() { + var a = this.anchor ? "#" : "?", + b = this.base; - 1 != b.indexOf(a) && (b = b.substring(0, b.indexOf(a))); + b += a + OpenLayers.Util.getParameterString(this.createParams()); + this.anchor && !this.element ? window.location.href = b : this.element.href = b + }, + createParams: function(a, b, c) { + var a = a || this.map.getCenter(), + d = OpenLayers.Util.getParameters(this.base); + if (a) { + d.zoom = b || this.map.getZoom(); + b = a.lat; + a = a.lon; + this.displayProjection && (b = + OpenLayers.Projection.transform({ + x: a, + y: b + }, this.map.getProjectionObject(), this.displayProjection), a = b.x, b = b.y); + d.lat = Math.round(1E5 * b) / 1E5; + d.lon = Math.round(1E5 * a) / 1E5; + c = c || this.map.layers; + d.layers = ""; + a = 0; + for (b = c.length; a < b; a++) { + var e = c[a]; + d.layers = e.isBaseLayer ? d.layers + (e == this.map.baseLayer ? "B" : "0") : d.layers + (e.getVisibility() ? "T" : "F") + } + } + return d + }, + CLASS_NAME: "OpenLayers.Control.Permalink" +}); +OpenLayers.Layer.TMS = OpenLayers.Class(OpenLayers.Layer.Grid, { + serviceVersion: "1.0.0", + layername: null, + type: null, + isBaseLayer: !0, + tileOrigin: null, + serverResolutions: null, + zoomOffset: 0, + initialize: function(a, b, c) { + var d = []; + d.push(a, b, {}, c); + OpenLayers.Layer.Grid.prototype.initialize.apply(this, d) + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.TMS(this.name, this.url, this.getOptions())); + return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [a]) + }, + getURL: function(a) { + var a = this.adjustBounds(a), + b = this.getServerResolution(), + c = Math.round((a.left - this.tileOrigin.lon) / (b * this.tileSize.w)), + a = Math.round((a.bottom - this.tileOrigin.lat) / (b * this.tileSize.h)), + c = this.serviceVersion + "/" + this.layername + "/" + this.getServerZoom() + "/" + c + "/" + a + "." + this.type, + a = this.url; + OpenLayers.Util.isArray(a) && (a = this.selectUrl(c, a)); + return a + c + }, + setMap: function(a) { + OpenLayers.Layer.Grid.prototype.setMap.apply(this, arguments); + this.tileOrigin || (this.tileOrigin = new OpenLayers.LonLat(this.map.maxExtent.left, this.map.maxExtent.bottom)) + }, + CLASS_NAME: "OpenLayers.Layer.TMS" +}); +OpenLayers.Strategy.Fixed = OpenLayers.Class(OpenLayers.Strategy, { + preload: !1, + activate: function() { + if (OpenLayers.Strategy.prototype.activate.apply(this, arguments)) { + this.layer.events.on({ + refresh: this.load, + scope: this + }); + if (!0 == this.layer.visibility || this.preload) this.load(); + else this.layer.events.on({ + visibilitychanged: this.load, + scope: this + }); + return !0 + } + return !1 + }, + deactivate: function() { + var a = OpenLayers.Strategy.prototype.deactivate.call(this); + a && this.layer.events.un({ + refresh: this.load, + visibilitychanged: this.load, + scope: this + }); + return a + }, + load: function(a) { + var b = this.layer; + b.events.triggerEvent("loadstart"); + b.protocol.read(OpenLayers.Util.applyDefaults({ + callback: OpenLayers.Function.bind(this.merge, this, b.map.getProjectionObject()), + filter: b.filter + }, a)); + b.events.un({ + visibilitychanged: this.load, + scope: this + }) + }, + merge: function(a, b) { + var c = this.layer; + c.destroyFeatures(); + var d = b.features; + if (d && 0 < d.length) { + if (!a.equals(c.projection)) + for (var e, f = 0, g = d.length; f < g; ++f)(e = d[f].geometry) && e.transform(c.projection, a); + c.addFeatures(d) + } + c.events.triggerEvent("loadend") + }, + CLASS_NAME: "OpenLayers.Strategy.Fixed" +}); +OpenLayers.Control.Zoom = OpenLayers.Class(OpenLayers.Control, { + zoomInText: "+", + zoomInId: "olZoomInLink", + zoomOutText: "-", + zoomOutId: "olZoomOutLink", + draw: function() { + var a = OpenLayers.Control.prototype.draw.apply(this), + b = this.getOrCreateLinks(a), + c = b.zoomIn, + b = b.zoomOut, + d = this.map.events; + b.parentNode !== a && (d = this.events, d.attachToElement(b.parentNode)); + d.register("buttonclick", this, this.onZoomClick); + this.zoomInLink = c; + this.zoomOutLink = b; + return a + }, + getOrCreateLinks: function(a) { + var b = document.getElementById(this.zoomInId), + c = document.getElementById(this.zoomOutId); + b || (b = document.createElement("a"), b.href = "#zoomIn", b.appendChild(document.createTextNode(this.zoomInText)), b.className = "olControlZoomIn", a.appendChild(b)); + OpenLayers.Element.addClass(b, "olButton"); + c || (c = document.createElement("a"), c.href = "#zoomOut", c.appendChild(document.createTextNode(this.zoomOutText)), c.className = "olControlZoomOut", a.appendChild(c)); + OpenLayers.Element.addClass(c, "olButton"); + return { + zoomIn: b, + zoomOut: c + } + }, + onZoomClick: function(a) { + a = a.buttonElement; + a === this.zoomInLink ? this.map.zoomIn() : a === this.zoomOutLink && this.map.zoomOut() + }, + destroy: function() { + this.map && this.map.events.unregister("buttonclick", this, this.onZoomClick); + delete this.zoomInLink; + delete this.zoomOutLink; + OpenLayers.Control.prototype.destroy.apply(this) + }, + CLASS_NAME: "OpenLayers.Control.Zoom" +}); +OpenLayers.Layer.PointTrack = OpenLayers.Class(OpenLayers.Layer.Vector, { + dataFrom: null, + styleFrom: null, + addNodes: function(a, b) { + if (2 > a.length) throw Error("At least two point features have to be added to create a line from"); + for (var c = Array(a.length - 1), d, e, f, g = 0, h = a.length; g < h; g++) { + d = a[g]; + if (f = d.geometry) { + if ("OpenLayers.Geometry.Point" != f.CLASS_NAME) throw new TypeError("Only features with point geometries are supported."); + } else f = d.lonlat, f = new OpenLayers.Geometry.Point(f.lon, f.lat); + if (0 < g) { + d = null != this.dataFrom ? + a[g + this.dataFrom].data || a[g + this.dataFrom].attributes : null; + var i = null != this.styleFrom ? a[g + this.styleFrom].style : null; + e = new OpenLayers.Geometry.LineString([e, f]); + c[g - 1] = new OpenLayers.Feature.Vector(e, d, i) + } + e = f + } + this.addFeatures(c, b) + }, + CLASS_NAME: "OpenLayers.Layer.PointTrack" +}); +OpenLayers.Layer.PointTrack.SOURCE_NODE = -1; +OpenLayers.Layer.PointTrack.TARGET_NODE = 0; +OpenLayers.Layer.PointTrack.dataFrom = { + SOURCE_NODE: -1, + TARGET_NODE: 0 +}; +OpenLayers.Protocol.WFS = function(a) { + var a = OpenLayers.Util.applyDefaults(a, OpenLayers.Protocol.WFS.DEFAULTS), + b = OpenLayers.Protocol.WFS["v" + a.version.replace(/\./g, "_")]; + if (!b) throw "Unsupported WFS version: " + a.version; + return new b(a) +}; +OpenLayers.Protocol.WFS.fromWMSLayer = function(a, b) { + var c, d; + c = a.params.LAYERS; + c = (OpenLayers.Util.isArray(c) ? c[0] : c).split(":"); + 1 < c.length && (d = c[0]); + c = c.pop(); + d = { + url: a.url, + featureType: c, + featurePrefix: d, + srsName: a.projection && a.projection.getCode() || a.map && a.map.getProjectionObject().getCode(), + version: "1.1.0" + }; + return new OpenLayers.Protocol.WFS(OpenLayers.Util.applyDefaults(b, d)) +}; +OpenLayers.Protocol.WFS.DEFAULTS = { + version: "1.0.0" +}; +OpenLayers.Layer.Markers = OpenLayers.Class(OpenLayers.Layer, { + isBaseLayer: !1, + markers: null, + drawn: !1, + initialize: function(a, b) { + OpenLayers.Layer.prototype.initialize.apply(this, arguments); + this.markers = [] + }, + destroy: function() { + this.clearMarkers(); + this.markers = null; + OpenLayers.Layer.prototype.destroy.apply(this, arguments) + }, + setOpacity: function(a) { + if (a != this.opacity) { + this.opacity = a; + for (var a = 0, b = this.markers.length; a < b; a++) this.markers[a].setOpacity(this.opacity) + } + }, + moveTo: function(a, b, c) { + OpenLayers.Layer.prototype.moveTo.apply(this, + arguments); + if (b || !this.drawn) { + for (var d = 0, e = this.markers.length; d < e; d++) this.drawMarker(this.markers[d]); + this.drawn = !0 + } + }, + addMarker: function(a) { + this.markers.push(a); + 1 > this.opacity && a.setOpacity(this.opacity); + this.map && this.map.getExtent() && (a.map = this.map, this.drawMarker(a)) + }, + removeMarker: function(a) { + this.markers && this.markers.length && (OpenLayers.Util.removeItem(this.markers, a), a.erase()) + }, + clearMarkers: function() { + if (null != this.markers) + for (; 0 < this.markers.length;) this.removeMarker(this.markers[0]) + }, + drawMarker: function(a) { + var b = this.map.getLayerPxFromLonLat(a.lonlat); + null == b ? a.display(!1) : a.isDrawn() ? a.icon && a.icon.moveTo(b) : this.div.appendChild(a.draw(b)) + }, + getDataExtent: function() { + var a = null; + if (this.markers && 0 < this.markers.length) + for (var a = new OpenLayers.Bounds, b = 0, c = this.markers.length; b < c; b++) a.extend(this.markers[b].lonlat); + return a + }, + CLASS_NAME: "OpenLayers.Layer.Markers" +}); +OpenLayers.Control.Pan = OpenLayers.Class(OpenLayers.Control, { + slideFactor: 50, + slideRatio: null, + direction: null, + type: OpenLayers.Control.TYPE_BUTTON, + initialize: function(a, b) { + this.direction = a; + this.CLASS_NAME += this.direction; + OpenLayers.Control.prototype.initialize.apply(this, [b]) + }, + trigger: function() { + var a = OpenLayers.Function.bind(function(a) { + return this.slideRatio ? this.map.getSize()[a] * this.slideRatio : this.slideFactor + }, this); + switch (this.direction) { + case OpenLayers.Control.Pan.NORTH: + this.map.pan(0, -a("h")); + break; + case OpenLayers.Control.Pan.SOUTH: + this.map.pan(0, a("h")); + break; + case OpenLayers.Control.Pan.WEST: + this.map.pan(-a("w"), 0); + break; + case OpenLayers.Control.Pan.EAST: + this.map.pan(a("w"), 0) + } + }, + CLASS_NAME: "OpenLayers.Control.Pan" +}); +OpenLayers.Control.Pan.NORTH = "North"; +OpenLayers.Control.Pan.SOUTH = "South"; +OpenLayers.Control.Pan.EAST = "East"; +OpenLayers.Control.Pan.WEST = "West"; +OpenLayers.Format.CSWGetDomain = function(a) { + var a = OpenLayers.Util.applyDefaults(a, OpenLayers.Format.CSWGetDomain.DEFAULTS), + b = OpenLayers.Format.CSWGetDomain["v" + a.version.replace(/\./g, "_")]; + if (!b) throw "Unsupported CSWGetDomain version: " + a.version; + return new b(a) +}; +OpenLayers.Format.CSWGetDomain.DEFAULTS = { + version: "2.0.2" +}; +OpenLayers.Format.CSWGetDomain.v2_0_2 = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + xlink: "http://www.w3.org/1999/xlink", + xsi: "http://www.w3.org/2001/XMLSchema-instance", + csw: "http://www.opengis.net/cat/csw/2.0.2" + }, + defaultPrefix: "csw", + version: "2.0.2", + schemaLocation: "http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd", + PropertyName: null, + ParameterName: null, + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + a && 9 == + a.nodeType && (a = a.documentElement); + var b = {}; + this.readNode(a, b); + return b + }, + readers: { + csw: { + GetDomainResponse: function(a, b) { + this.readChildNodes(a, b) + }, + DomainValues: function(a, b) { + OpenLayers.Util.isArray(b.DomainValues) || (b.DomainValues = []); + for (var c = a.attributes, d = {}, e = 0, f = c.length; e < f; ++e) d[c[e].name] = c[e].nodeValue; + this.readChildNodes(a, d); + b.DomainValues.push(d) + }, + PropertyName: function(a, b) { + b.PropertyName = this.getChildValue(a) + }, + ParameterName: function(a, b) { + b.ParameterName = this.getChildValue(a) + }, + ListOfValues: function(a, + b) { + OpenLayers.Util.isArray(b.ListOfValues) || (b.ListOfValues = []); + this.readChildNodes(a, b.ListOfValues) + }, + Value: function(a, b) { + for (var c = a.attributes, d = {}, e = 0, f = c.length; e < f; ++e) d[c[e].name] = c[e].nodeValue; + d.value = this.getChildValue(a); + b.push({ + Value: d + }) + }, + ConceptualScheme: function(a, b) { + b.ConceptualScheme = {}; + this.readChildNodes(a, b.ConceptualScheme) + }, + Name: function(a, b) { + b.Name = this.getChildValue(a) + }, + Document: function(a, b) { + b.Document = this.getChildValue(a) + }, + Authority: function(a, b) { + b.Authority = this.getChildValue(a) + }, + RangeOfValues: function(a, b) { + b.RangeOfValues = {}; + this.readChildNodes(a, b.RangeOfValues) + }, + MinValue: function(a, b) { + for (var c = a.attributes, d = {}, e = 0, f = c.length; e < f; ++e) d[c[e].name] = c[e].nodeValue; + d.value = this.getChildValue(a); + b.MinValue = d + }, + MaxValue: function(a, b) { + for (var c = a.attributes, d = {}, e = 0, f = c.length; e < f; ++e) d[c[e].name] = c[e].nodeValue; + d.value = this.getChildValue(a); + b.MaxValue = d + } + } + }, + write: function(a) { + a = this.writeNode("csw:GetDomain", a); + return OpenLayers.Format.XML.prototype.write.apply(this, [a]) + }, + writers: { + csw: { + GetDomain: function(a) { + var b = + this.createElementNSPlus("csw:GetDomain", { + attributes: { + service: "CSW", + version: this.version + } + }); + if (a.PropertyName || this.PropertyName) this.writeNode("csw:PropertyName", a.PropertyName || this.PropertyName, b); + else if (a.ParameterName || this.ParameterName) this.writeNode("csw:ParameterName", a.ParameterName || this.ParameterName, b); + this.readChildNodes(b, a); + return b + }, + PropertyName: function(a) { + return this.createElementNSPlus("csw:PropertyName", { + value: a + }) + }, + ParameterName: function(a) { + return this.createElementNSPlus("csw:ParameterName", { + value: a + }) + } + } + }, + CLASS_NAME: "OpenLayers.Format.CSWGetDomain.v2_0_2" +}); +OpenLayers.Format.ArcXML.Features = OpenLayers.Class(OpenLayers.Format.XML, { + read: function(a) { + return (new OpenLayers.Format.ArcXML).read(a).features.feature + } +}); +OpenLayers.Control.Snapping = OpenLayers.Class(OpenLayers.Control, { + DEFAULTS: { + tolerance: 10, + node: !0, + edge: !0, + vertex: !0 + }, + greedy: !0, + precedence: ["node", "vertex", "edge"], + resolution: null, + geoToleranceCache: null, + layer: null, + feature: null, + point: null, + initialize: function(a) { + OpenLayers.Control.prototype.initialize.apply(this, [a]); + this.options = a || {}; + this.options.layer && this.setLayer(this.options.layer); + a = OpenLayers.Util.extend({}, this.options.defaults); + this.defaults = OpenLayers.Util.applyDefaults(a, this.DEFAULTS); + this.setTargets(this.options.targets); + 0 === this.targets.length && this.layer && this.addTargetLayer(this.layer); + this.geoToleranceCache = {} + }, + setLayer: function(a) { + this.active ? (this.deactivate(), this.layer = a, this.activate()) : this.layer = a + }, + setTargets: function(a) { + this.targets = []; + if (a && a.length) + for (var b, c = 0, d = a.length; c < d; ++c) b = a[c], b instanceof OpenLayers.Layer.Vector ? this.addTargetLayer(b) : this.addTarget(b) + }, + addTargetLayer: function(a) { + this.addTarget({ + layer: a + }) + }, + addTarget: function(a) { + a = OpenLayers.Util.applyDefaults(a, this.defaults); + a.nodeTolerance = + a.nodeTolerance || a.tolerance; + a.vertexTolerance = a.vertexTolerance || a.tolerance; + a.edgeTolerance = a.edgeTolerance || a.tolerance; + this.targets.push(a) + }, + removeTargetLayer: function(a) { + for (var b, c = this.targets.length - 1; 0 <= c; --c) b = this.targets[c], b.layer === a && this.removeTarget(b) + }, + removeTarget: function(a) { + return OpenLayers.Util.removeItem(this.targets, a) + }, + activate: function() { + var a = OpenLayers.Control.prototype.activate.call(this); + if (a && this.layer && this.layer.events) this.layer.events.on({ + sketchstarted: this.onSketchModified, + sketchmodified: this.onSketchModified, + vertexmodified: this.onVertexModified, + scope: this + }); + return a + }, + deactivate: function() { + var a = OpenLayers.Control.prototype.deactivate.call(this); + a && this.layer && this.layer.events && this.layer.events.un({ + sketchstarted: this.onSketchModified, + sketchmodified: this.onSketchModified, + vertexmodified: this.onVertexModified, + scope: this + }); + this.point = this.feature = null; + return a + }, + onSketchModified: function(a) { + this.feature = a.feature; + this.considerSnapping(a.vertex, a.vertex) + }, + onVertexModified: function(a) { + this.feature = + a.feature; + var b = this.layer.map.getLonLatFromViewPortPx(a.pixel); + this.considerSnapping(a.vertex, new OpenLayers.Geometry.Point(b.lon, b.lat)) + }, + considerSnapping: function(a, b) { + for (var c = { + rank: Number.POSITIVE_INFINITY, + dist: Number.POSITIVE_INFINITY, + x: null, + y: null + }, d = !1, e, f, g = 0, h = this.targets.length; g < h; ++g) + if (f = this.targets[g], e = this.testTarget(f, b)) + if (this.greedy) { + c = e; + c.target = f; + d = !0; + break + } else if (e.rank < c.rank || e.rank === c.rank && e.dist < c.dist) c = e, c.target = f, d = !0; + d && (!1 !== this.events.triggerEvent("beforesnap", { + point: a, + x: c.x, + y: c.y, + distance: c.dist, + layer: c.target.layer, + snapType: this.precedence[c.rank] + }) ? (a.x = c.x, a.y = c.y, this.point = a, this.events.triggerEvent("snap", { + point: a, + snapType: this.precedence[c.rank], + layer: c.target.layer, + distance: c.dist + })) : d = !1); + this.point && !d && (a.x = b.x, a.y = b.y, this.point = null, this.events.triggerEvent("unsnap", { + point: a + })) + }, + testTarget: function(a, b) { + var c = this.layer.map.getResolution(); + if ("minResolution" in a && c < a.minResolution || "maxResolution" in a && c >= a.maxResolution) return null; + for (var c = { + node: this.getGeoTolerance(a.nodeTolerance, c), + vertex: this.getGeoTolerance(a.vertexTolerance, c), + edge: this.getGeoTolerance(a.edgeTolerance, c) + }, d = Math.max(c.node, c.vertex, c.edge), e = { + rank: Number.POSITIVE_INFINITY, + dist: Number.POSITIVE_INFINITY + }, f = !1, g = a.layer.features, h, i, j, k, l, m, n = this.precedence.length, o = new OpenLayers.LonLat(b.x, b.y), p = 0, q = g.length; p < q; ++p) + if (h = g[p], h !== this.feature && (!h._sketch && h.state !== OpenLayers.State.DELETE && (!a.filter || a.filter.evaluate(h))) && h.atPoint(o, d, d)) + for (var r = 0, s = Math.min(e.rank + + 1, n); r < s; ++r) + if (i = this.precedence[r], a[i]) + if ("edge" === i) { + if (j = h.geometry.distanceTo(b, { + details: !0 + }), l = j.distance, l <= c[i] && l < e.dist) { + e = { + rank: r, + dist: l, + x: j.x0, + y: j.y0 + }; + f = !0; + break + } + } else { + j = h.geometry.getVertices("node" === i); + m = !1; + for (var t = 0, u = j.length; t < u; ++t) + if (k = j[t], l = k.distanceTo(b), l <= c[i] && (r < e.rank || r === e.rank && l < e.dist)) e = { + rank: r, + dist: l, + x: k.x, + y: k.y + }, m = f = !0; + if (m) break + } + return f ? e : null + }, + getGeoTolerance: function(a, b) { + b !== this.resolution && (this.resolution = b, this.geoToleranceCache = {}); + var c = this.geoToleranceCache[a]; + void 0 === c && (c = a * b, this.geoToleranceCache[a] = c); + return c + }, + destroy: function() { + this.active && this.deactivate(); + delete this.layer; + delete this.targets; + OpenLayers.Control.prototype.destroy.call(this) + }, + CLASS_NAME: "OpenLayers.Control.Snapping" +}); +OpenLayers.Date = { + toISOString: function() { + if ("toISOString" in Date.prototype) return function(a) { + return a.toISOString() + }; + var a = function(a, c) { + for (var d = a + ""; d.length < c;) d = "0" + d; + return d + }; + return function(b) { + return isNaN(b.getTime()) ? "Invalid Date" : b.getUTCFullYear() + "-" + a(b.getUTCMonth() + 1, 2) + "-" + a(b.getUTCDate(), 2) + "T" + a(b.getUTCHours(), 2) + ":" + a(b.getUTCMinutes(), 2) + ":" + a(b.getUTCSeconds(), 2) + "." + a(b.getUTCMilliseconds(), 3) + "Z" + } + }(), + parse: function(a) { + var b; + if ((a = a.match(/^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:(?:T(\d{1,2}):(\d{2}):(\d{2}(?:\.\d+)?)(Z|(?:[+-]\d{1,2}(?::(\d{2}))?)))|Z)?$/)) && + (a[1] || a[7])) { + b = parseInt(a[1], 10) || 0; + var c = parseInt(a[2], 10) - 1 || 0, + d = parseInt(a[3], 10) || 1; + b = new Date(Date.UTC(b, c, d)); + if (c = a[7]) { + var d = parseInt(a[4], 10), + e = parseInt(a[5], 10), + f = parseFloat(a[6]), + g = f | 0, + f = Math.round(1E3 * (f - g)); + b.setUTCHours(d, e, g, f); + "Z" !== c && (c = parseInt(c, 10), a = parseInt(a[8], 10) || 0, b = new Date(b.getTime() + -1E3 * (60 * 60 * c + 60 * a))) + } + } else b = new Date("invalid"); + return b + } +}; +(function() { + function a() { + this._object = f && !i ? new f : new window.ActiveXObject("Microsoft.XMLHTTP"); + this._listeners = [] + } + + function b() { + return new a + } + + function c(a) { + b.onreadystatechange && b.onreadystatechange.apply(a); + a.dispatchEvent({ + type: "readystatechange", + bubbles: !1, + cancelable: !1, + timeStamp: new Date + 0 + }) + } + + function d(a) { + try { + a.responseText = a._object.responseText + } catch (b) {} + try { + var c; + var d = a._object, + e = d.responseXML, + f = d.responseText; + h && (f && e && !e.documentElement && d.getResponseHeader("Content-Type").match(/[^\/]+\/[^\+]+\+xml/)) && + (e = new window.ActiveXObject("Microsoft.XMLDOM"), e.async = !1, e.validateOnParse = !1, e.loadXML(f)); + c = e && (h && 0 != e.parseError || !e.documentElement || e.documentElement && "parsererror" == e.documentElement.tagName) ? null : e; + a.responseXML = c + } catch (g) {} + try { + a.status = a._object.status + } catch (i) {} + try { + a.statusText = a._object.statusText + } catch (r) {} + } + + function e(a) { + a._object.onreadystatechange = new window.Function + } + var f = window.XMLHttpRequest, + g = !!window.controllers, + h = window.document.all && !window.opera, + i = h && window.navigator.userAgent.match(/MSIE 7.0/); + b.prototype = a.prototype; + g && f.wrapped && (b.wrapped = f.wrapped); + b.UNSENT = 0; + b.OPENED = 1; + b.HEADERS_RECEIVED = 2; + b.LOADING = 3; + b.DONE = 4; + b.prototype.readyState = b.UNSENT; + b.prototype.responseText = ""; + b.prototype.responseXML = null; + b.prototype.status = 0; + b.prototype.statusText = ""; + b.prototype.priority = "NORMAL"; + b.prototype.onreadystatechange = null; + b.onreadystatechange = null; + b.onopen = null; + b.onsend = null; + b.onabort = null; + b.prototype.open = function(a, f, i, m, n) { + delete this._headers; + arguments.length < 3 && (i = true); + this._async = i; + var o = + this, + p = this.readyState, + q; + if (h && i) { + q = function() { + if (p != b.DONE) { + e(o); + o.abort() + } + }; + window.attachEvent("onunload", q) + } + b.onopen && b.onopen.apply(this, arguments); + arguments.length > 4 ? this._object.open(a, f, i, m, n) : arguments.length > 3 ? this._object.open(a, f, i, m) : this._object.open(a, f, i); + this.readyState = b.OPENED; + c(this); + this._object.onreadystatechange = function() { + if (!g || i) { + o.readyState = o._object.readyState; + d(o); + if (o._aborted) o.readyState = b.UNSENT; + else { + if (o.readyState == b.DONE) { + delete o._data; + e(o); + h && i && window.detachEvent("onunload", + q) + } + p != o.readyState && c(o); + p = o.readyState + } + } + } + }; + b.prototype.send = function(a) { + b.onsend && b.onsend.apply(this, arguments); + arguments.length || (a = null); + if (a && a.nodeType) { + a = window.XMLSerializer ? (new window.XMLSerializer).serializeToString(a) : a.xml; + this._headers["Content-Type"] || this._object.setRequestHeader("Content-Type", "application/xml") + } + this._data = a; + a: { + this._object.send(this._data); + if (g && !this._async) { + this.readyState = b.OPENED; + for (d(this); this.readyState < b.DONE;) { + this.readyState++; + c(this); + if (this._aborted) break a + } + } + } + }; + b.prototype.abort = function() { + b.onabort && b.onabort.apply(this, arguments); + if (this.readyState > b.UNSENT) this._aborted = true; + this._object.abort(); + e(this); + this.readyState = b.UNSENT; + delete this._data + }; + b.prototype.getAllResponseHeaders = function() { + return this._object.getAllResponseHeaders() + }; + b.prototype.getResponseHeader = function(a) { + return this._object.getResponseHeader(a) + }; + b.prototype.setRequestHeader = function(a, b) { + if (!this._headers) this._headers = {}; + this._headers[a] = b; + return this._object.setRequestHeader(a, + b) + }; + b.prototype.addEventListener = function(a, b, c) { + for (var d = 0, e; e = this._listeners[d]; d++) + if (e[0] == a && e[1] == b && e[2] == c) return; + this._listeners.push([a, b, c]) + }; + b.prototype.removeEventListener = function(a, b, c) { + for (var d = 0, e; e = this._listeners[d]; d++) + if (e[0] == a && e[1] == b && e[2] == c) break; + e && this._listeners.splice(d, 1) + }; + b.prototype.dispatchEvent = function(a) { + a = { + type: a.type, + target: this, + currentTarget: this, + eventPhase: 2, + bubbles: a.bubbles, + cancelable: a.cancelable, + timeStamp: a.timeStamp, + stopPropagation: function() {}, + preventDefault: function() {}, + initEvent: function() {} + }; + a.type == "readystatechange" && this.onreadystatechange && (this.onreadystatechange.handleEvent || this.onreadystatechange).apply(this, [a]); + for (var b = 0, c; c = this._listeners[b]; b++) c[0] == a.type && !c[2] && (c[1].handleEvent || c[1]).apply(this, [a]) + }; + b.prototype.toString = function() { + return "[object XMLHttpRequest]" + }; + b.toString = function() { + return "[XMLHttpRequest]" + }; + window.Function.prototype.apply || (window.Function.prototype.apply = function(a, b) { + b || (b = []); + a.__func = this; + a.__func(b[0], b[1], b[2], b[3], + b[4]); + delete a.__func + }); + OpenLayers.Request.XMLHttpRequest = b +})(); +OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + kml: "http://www.opengis.net/kml/2.2", + gx: "http://www.google.com/kml/ext/2.2" + }, + kmlns: "http://earth.google.com/kml/2.0", + placemarksDesc: "No description available", + foldersName: "OpenLayers export", + foldersDesc: "Exported on " + new Date, + extractAttributes: !0, + kvpAttributes: !1, + extractStyles: !1, + extractTracks: !1, + trackAttributes: null, + internalns: null, + features: null, + styles: null, + styleBaseUrl: "", + fetched: null, + maxDepth: 0, + initialize: function(a) { + this.regExes = { + trimSpace: /^\s*|\s*$/g, + removeSpace: /\s*/g, + splitSpace: /\s+/, + trimComma: /\s*,\s*/g, + kmlColor: /(\w{2})(\w{2})(\w{2})(\w{2})/, + kmlIconPalette: /root:\/\/icons\/palette-(\d+)(\.\w+)/, + straightBracket: /\$\[(.*?)\]/g + }; + this.externalProjection = new OpenLayers.Projection("EPSG:4326"); + OpenLayers.Format.XML.prototype.initialize.apply(this, [a]) + }, + read: function(a) { + this.features = []; + this.styles = {}; + this.fetched = {}; + return this.parseData(a, { + depth: 0, + styleBaseUrl: this.styleBaseUrl + }) + }, + parseData: function(a, b) { + "string" == typeof a && + (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + for (var c = ["Link", "NetworkLink", "Style", "StyleMap", "Placemark"], d = 0, e = c.length; d < e; ++d) { + var f = c[d], + g = this.getElementsByTagNameNS(a, "*", f); + if (0 != g.length) switch (f.toLowerCase()) { + case "link": + case "networklink": + this.parseLinks(g, b); + break; + case "style": + this.extractStyles && this.parseStyles(g, b); + break; + case "stylemap": + this.extractStyles && this.parseStyleMaps(g, b); + break; + case "placemark": + this.parseFeatures(g, b) + } + } + return this.features + }, + parseLinks: function(a, + b) { + if (b.depth >= this.maxDepth) return !1; + var c = OpenLayers.Util.extend({}, b); + c.depth++; + for (var d = 0, e = a.length; d < e; d++) { + var f = this.parseProperty(a[d], "*", "href"); + f && !this.fetched[f] && (this.fetched[f] = !0, (f = this.fetchLink(f)) && this.parseData(f, c)) + } + }, + fetchLink: function(a) { + if (a = OpenLayers.Request.GET({ + url: a, + async: !1 + })) return a.responseText + }, + parseStyles: function(a, b) { + for (var c = 0, d = a.length; c < d; c++) { + var e = this.parseStyle(a[c]); + e && (this.styles[(b.styleBaseUrl || "") + "#" + e.id] = e) + } + }, + parseKmlColor: function(a) { + var b = + null; + a && (a = a.match(this.regExes.kmlColor)) && (b = { + color: "#" + a[4] + a[3] + a[2], + opacity: parseInt(a[1], 16) / 255 + }); + return b + }, + parseStyle: function(a) { + for (var b = {}, c = ["LineStyle", "PolyStyle", "IconStyle", "BalloonStyle", "LabelStyle"], d, e, f = 0, g = c.length; f < g; ++f) + if (d = c[f], e = this.getElementsByTagNameNS(a, "*", d)[0]) switch (d.toLowerCase()) { + case "linestyle": + d = this.parseProperty(e, "*", "color"); + if (d = this.parseKmlColor(d)) b.strokeColor = d.color, b.strokeOpacity = d.opacity; + (d = this.parseProperty(e, "*", "width")) && (b.strokeWidth = + d); + break; + case "polystyle": + d = this.parseProperty(e, "*", "color"); + if (d = this.parseKmlColor(d)) b.fillOpacity = d.opacity, b.fillColor = d.color; + "0" == this.parseProperty(e, "*", "fill") && (b.fillColor = "none"); + "0" == this.parseProperty(e, "*", "outline") && (b.strokeWidth = "0"); + break; + case "iconstyle": + var h = parseFloat(this.parseProperty(e, "*", "scale") || 1); + d = 32 * h; + var i = 32 * h, + j = this.getElementsByTagNameNS(e, "*", "Icon")[0]; + if (j) { + var k = this.parseProperty(j, "*", "href"); + if (k) { + var l = this.parseProperty(j, "*", "w"), + m = this.parseProperty(j, + "*", "h"); + OpenLayers.String.startsWith(k, "http://maps.google.com/mapfiles/kml") && (!l && !m) && (m = l = 64, h /= 2); + l = l || m; + m = m || l; + l && (d = parseInt(l) * h); + m && (i = parseInt(m) * h); + if (m = k.match(this.regExes.kmlIconPalette)) l = m[1], m = m[2], k = this.parseProperty(j, "*", "x"), j = this.parseProperty(j, "*", "y"), k = "http://maps.google.com/mapfiles/kml/pal" + l + "/icon" + (8 * (j ? 7 - j / 32 : 7) + (k ? k / 32 : 0)) + m; + b.graphicOpacity = 1; + b.externalGraphic = k + } + } + if (e = this.getElementsByTagNameNS(e, "*", "hotSpot")[0]) k = parseFloat(e.getAttribute("x")), j = parseFloat(e.getAttribute("y")), + l = e.getAttribute("xunits"), "pixels" == l ? b.graphicXOffset = -k * h : "insetPixels" == l ? b.graphicXOffset = -d + k * h : "fraction" == l && (b.graphicXOffset = -d * k), e = e.getAttribute("yunits"), "pixels" == e ? b.graphicYOffset = -i + j * h + 1 : "insetPixels" == e ? b.graphicYOffset = -(j * h) + 1 : "fraction" == e && (b.graphicYOffset = -i * (1 - j) + 1); + b.graphicWidth = d; + b.graphicHeight = i; + break; + case "balloonstyle": + (e = OpenLayers.Util.getXmlNodeValue(e)) && (b.balloonStyle = e.replace(this.regExes.straightBracket, "${$1}")); + break; + case "labelstyle": + if (d = this.parseProperty(e, + "*", "color"), d = this.parseKmlColor(d)) b.fontColor = d.color, b.fontOpacity = d.opacity + }!b.strokeColor && b.fillColor && (b.strokeColor = b.fillColor); + if ((a = a.getAttribute("id")) && b) b.id = a; + return b + }, + parseStyleMaps: function(a, b) { + for (var c = 0, d = a.length; c < d; c++) + for (var e = a[c], f = this.getElementsByTagNameNS(e, "*", "Pair"), e = e.getAttribute("id"), g = 0, h = f.length; g < h; g++) { + var i = f[g], + j = this.parseProperty(i, "*", "key"); + (i = this.parseProperty(i, "*", "styleUrl")) && "normal" == j && (this.styles[(b.styleBaseUrl || "") + "#" + e] = this.styles[(b.styleBaseUrl || + "") + i]) + } + }, + parseFeatures: function(a, b) { + for (var c = [], d = 0, e = a.length; d < e; d++) { + var f = a[d], + g = this.parseFeature.apply(this, [f]); + if (g) { + this.extractStyles && (g.attributes && g.attributes.styleUrl) && (g.style = this.getStyle(g.attributes.styleUrl, b)); + if (this.extractStyles) { + var h = this.getElementsByTagNameNS(f, "*", "Style")[0]; + if (h && (h = this.parseStyle(h))) g.style = OpenLayers.Util.extend(g.style, h) + } + if (this.extractTracks) { + if ((f = this.getElementsByTagNameNS(f, this.namespaces.gx, "Track")) && 0 < f.length) g = { + features: [], + feature: g + }, + this.readNode(f[0], g), 0 < g.features.length && c.push.apply(c, g.features) + } else c.push(g) + } else throw "Bad Placemark: " + d; + } + this.features = this.features.concat(c) + }, + readers: { + kml: { + when: function(a, b) { + b.whens.push(OpenLayers.Date.parse(this.getChildValue(a))) + }, + _trackPointAttribute: function(a, b) { + var c = a.nodeName.split(":").pop(); + b.attributes[c].push(this.getChildValue(a)) + } + }, + gx: { + Track: function(a, b) { + var c = { + whens: [], + points: [], + angles: [] + }; + if (this.trackAttributes) { + var d; + c.attributes = {}; + for (var e = 0, f = this.trackAttributes.length; e < + f; ++e) d = this.trackAttributes[e], c.attributes[d] = [], d in this.readers.kml || (this.readers.kml[d] = this.readers.kml._trackPointAttribute) + } + this.readChildNodes(a, c); + if (c.whens.length !== c.points.length) throw Error("gx:Track with unequal number of when (" + c.whens.length + ") and gx:coord (" + c.points.length + ") elements."); + var g = 0 < c.angles.length; + if (g && c.whens.length !== c.angles.length) throw Error("gx:Track with unequal number of when (" + c.whens.length + ") and gx:angles (" + c.angles.length + ") elements."); + for (var h, + i, e = 0, f = c.whens.length; e < f; ++e) { + h = b.feature.clone(); + h.fid = b.feature.fid || b.feature.id; + i = c.points[e]; + h.geometry = i; + "z" in i && (h.attributes.altitude = i.z); + this.internalProjection && this.externalProjection && h.geometry.transform(this.externalProjection, this.internalProjection); + if (this.trackAttributes) { + i = 0; + for (var j = this.trackAttributes.length; i < j; ++i) h.attributes[d] = c.attributes[this.trackAttributes[i]][e] + } + h.attributes.when = c.whens[e]; + h.attributes.trackId = b.feature.id; + g && (i = c.angles[e], h.attributes.heading = + parseFloat(i[0]), h.attributes.tilt = parseFloat(i[1]), h.attributes.roll = parseFloat(i[2])); + b.features.push(h) + } + }, + coord: function(a, b) { + var c = this.getChildValue(a).replace(this.regExes.trimSpace, "").split(/\s+/), + d = new OpenLayers.Geometry.Point(c[0], c[1]); + 2 < c.length && (d.z = parseFloat(c[2])); + b.points.push(d) + }, + angles: function(a, b) { + var c = this.getChildValue(a).replace(this.regExes.trimSpace, "").split(/\s+/); + b.angles.push(c) + } + } + }, + parseFeature: function(a) { + for (var b = ["MultiGeometry", "Polygon", "LineString", "Point"], + c, d, e, f = 0, g = b.length; f < g; ++f) + if (c = b[f], this.internalns = a.namespaceURI ? a.namespaceURI : this.kmlns, d = this.getElementsByTagNameNS(a, this.internalns, c), 0 < d.length) { + if (b = this.parseGeometry[c.toLowerCase()]) e = b.apply(this, [d[0]]), this.internalProjection && this.externalProjection && e.transform(this.externalProjection, this.internalProjection); + else throw new TypeError("Unsupported geometry type: " + c); + break + } + var h; + this.extractAttributes && (h = this.parseAttributes(a)); + c = new OpenLayers.Feature.Vector(e, h); + a = a.getAttribute("id") || + a.getAttribute("name"); + null != a && (c.fid = a); + return c + }, + getStyle: function(a, b) { + var c = OpenLayers.Util.removeTail(a), + d = OpenLayers.Util.extend({}, b); + d.depth++; + d.styleBaseUrl = c; + !this.styles[a] && !OpenLayers.String.startsWith(a, "#") && d.depth <= this.maxDepth && !this.fetched[c] && (c = this.fetchLink(c)) && this.parseData(c, d); + return OpenLayers.Util.extend({}, this.styles[a]) + }, + parseGeometry: { + point: function(a) { + var b = this.getElementsByTagNameNS(a, this.internalns, "coordinates"), + a = []; + if (0 < b.length) var c = b[0].firstChild.nodeValue, + c = c.replace(this.regExes.removeSpace, ""), + a = c.split(","); + b = null; + if (1 < a.length) 2 == a.length && (a[2] = null), b = new OpenLayers.Geometry.Point(a[0], a[1], a[2]); + else throw "Bad coordinate string: " + c; + return b + }, + linestring: function(a, b) { + var c = this.getElementsByTagNameNS(a, this.internalns, "coordinates"), + d = null; + if (0 < c.length) { + for (var c = this.getChildValue(c[0]), c = c.replace(this.regExes.trimSpace, ""), c = c.replace(this.regExes.trimComma, ","), d = c.split(this.regExes.splitSpace), e = d.length, f = Array(e), g, h, i = 0; i < e; ++i) + if (g = + d[i].split(","), h = g.length, 1 < h) 2 == g.length && (g[2] = null), f[i] = new OpenLayers.Geometry.Point(g[0], g[1], g[2]); + else throw "Bad LineString point coordinates: " + d[i]; + if (e) d = b ? new OpenLayers.Geometry.LinearRing(f) : new OpenLayers.Geometry.LineString(f); + else throw "Bad LineString coordinates: " + c; + } + return d + }, + polygon: function(a) { + var a = this.getElementsByTagNameNS(a, this.internalns, "LinearRing"), + b = a.length, + c = Array(b); + if (0 < b) + for (var d = 0, e = a.length; d < e; ++d) + if (b = this.parseGeometry.linestring.apply(this, [a[d], !0])) c[d] = + b; + else throw "Bad LinearRing geometry: " + d; + return new OpenLayers.Geometry.Polygon(c) + }, + multigeometry: function(a) { + for (var b, c = [], d = a.childNodes, e = 0, f = d.length; e < f; ++e) a = d[e], 1 == a.nodeType && (b = this.parseGeometry[(a.prefix ? a.nodeName.split(":")[1] : a.nodeName).toLowerCase()]) && c.push(b.apply(this, [a])); + return new OpenLayers.Geometry.Collection(c) + } + }, + parseAttributes: function(a) { + var b = {}, + c = a.getElementsByTagName("ExtendedData"); + c.length && (b = this.parseExtendedData(c[0])); + for (var d, e, f, a = a.childNodes, c = 0, g = + a.length; c < g; ++c) + if (d = a[c], 1 == d.nodeType && (e = d.childNodes, 1 <= e.length && 3 >= e.length)) { + switch (e.length) { + case 1: + f = e[0]; + break; + case 2: + f = e[0]; + e = e[1]; + f = 3 == f.nodeType || 4 == f.nodeType ? f : e; + break; + default: + f = e[1] + } + if (3 == f.nodeType || 4 == f.nodeType) + if (d = d.prefix ? d.nodeName.split(":")[1] : d.nodeName, f = OpenLayers.Util.getXmlNodeValue(f)) f = f.replace(this.regExes.trimSpace, ""), b[d] = f + } + return b + }, + parseExtendedData: function(a) { + var b = {}, + c, d, e, f, g = a.getElementsByTagName("Data"); + c = 0; + for (d = g.length; c < d; c++) { + e = g[c]; + f = e.getAttribute("name"); + var h = {}, + i = e.getElementsByTagName("value"); + i.length && (h.value = this.getChildValue(i[0])); + this.kvpAttributes ? b[f] = h.value : (e = e.getElementsByTagName("displayName"), e.length && (h.displayName = this.getChildValue(e[0])), b[f] = h) + } + a = a.getElementsByTagName("SimpleData"); + c = 0; + for (d = a.length; c < d; c++) h = {}, e = a[c], f = e.getAttribute("name"), h.value = this.getChildValue(e), this.kvpAttributes ? b[f] = h.value : (h.displayName = f, b[f] = h); + return b + }, + parseProperty: function(a, b, c) { + var d, a = this.getElementsByTagNameNS(a, b, c); + try { + d = OpenLayers.Util.getXmlNodeValue(a[0]) + } catch (e) { + d = + null + } + return d + }, + write: function(a) { + OpenLayers.Util.isArray(a) || (a = [a]); + for (var b = this.createElementNS(this.kmlns, "kml"), c = this.createFolderXML(), d = 0, e = a.length; d < e; ++d) c.appendChild(this.createPlacemarkXML(a[d])); + b.appendChild(c); + return OpenLayers.Format.XML.prototype.write.apply(this, [b]) + }, + createFolderXML: function() { + var a = this.createElementNS(this.kmlns, "Folder"); + if (this.foldersName) { + var b = this.createElementNS(this.kmlns, "name"), + c = this.createTextNode(this.foldersName); + b.appendChild(c); + a.appendChild(b) + } + this.foldersDesc && + (b = this.createElementNS(this.kmlns, "description"), c = this.createTextNode(this.foldersDesc), b.appendChild(c), a.appendChild(b)); + return a + }, + createPlacemarkXML: function(a) { + var b = this.createElementNS(this.kmlns, "name"); + b.appendChild(this.createTextNode(a.style && a.style.label ? a.style.label : a.attributes.name || a.id)); + var c = this.createElementNS(this.kmlns, "description"); + c.appendChild(this.createTextNode(a.attributes.description || this.placemarksDesc)); + var d = this.createElementNS(this.kmlns, "Placemark"); + null != + a.fid && d.setAttribute("id", a.fid); + d.appendChild(b); + d.appendChild(c); + b = this.buildGeometryNode(a.geometry); + d.appendChild(b); + a.attributes && (a = this.buildExtendedData(a.attributes)) && d.appendChild(a); + return d + }, + buildGeometryNode: function(a) { + var b = a.CLASS_NAME, + b = this.buildGeometry[b.substring(b.lastIndexOf(".") + 1).toLowerCase()], + c = null; + b && (c = b.apply(this, [a])); + return c + }, + buildGeometry: { + point: function(a) { + var b = this.createElementNS(this.kmlns, "Point"); + b.appendChild(this.buildCoordinatesNode(a)); + return b + }, + multipoint: function(a) { + return this.buildGeometry.collection.apply(this, [a]) + }, + linestring: function(a) { + var b = this.createElementNS(this.kmlns, "LineString"); + b.appendChild(this.buildCoordinatesNode(a)); + return b + }, + multilinestring: function(a) { + return this.buildGeometry.collection.apply(this, [a]) + }, + linearring: function(a) { + var b = this.createElementNS(this.kmlns, "LinearRing"); + b.appendChild(this.buildCoordinatesNode(a)); + return b + }, + polygon: function(a) { + for (var b = this.createElementNS(this.kmlns, "Polygon"), a = a.components, c, d, e = 0, f = a.length; e < f; ++e) c = 0 == e ? "outerBoundaryIs" : "innerBoundaryIs", + c = this.createElementNS(this.kmlns, c), d = this.buildGeometry.linearring.apply(this, [a[e]]), c.appendChild(d), b.appendChild(c); + return b + }, + multipolygon: function(a) { + return this.buildGeometry.collection.apply(this, [a]) + }, + collection: function(a) { + for (var b = this.createElementNS(this.kmlns, "MultiGeometry"), c, d = 0, e = a.components.length; d < e; ++d)(c = this.buildGeometryNode.apply(this, [a.components[d]])) && b.appendChild(c); + return b + } + }, + buildCoordinatesNode: function(a) { + var b = this.createElementNS(this.kmlns, "coordinates"), + c; + if (c = a.components) { + for (var d = c.length, e = Array(d), f = 0; f < d; ++f) a = c[f], e[f] = this.buildCoordinates(a); + c = e.join(" ") + } else c = this.buildCoordinates(a); + c = this.createTextNode(c); + b.appendChild(c); + return b + }, + buildCoordinates: function(a) { + this.internalProjection && this.externalProjection && (a = a.clone(), a.transform(this.internalProjection, this.externalProjection)); + return a.x + "," + a.y + }, + buildExtendedData: function(a) { + var b = this.createElementNS(this.kmlns, "ExtendedData"), + c; + for (c in a) + if (a[c] && "name" != c && "description" != + c && "styleUrl" != c) { + var d = this.createElementNS(this.kmlns, "Data"); + d.setAttribute("name", c); + var e = this.createElementNS(this.kmlns, "value"); + if ("object" == typeof a[c]) { + if (a[c].value && e.appendChild(this.createTextNode(a[c].value)), a[c].displayName) { + var f = this.createElementNS(this.kmlns, "displayName"); + f.appendChild(this.getXMLDoc().createCDATASection(a[c].displayName)); + d.appendChild(f) + } + } else e.appendChild(this.createTextNode(a[c])); + d.appendChild(e); + b.appendChild(d) + } + return this.isSimpleContent(b) ? null : b + }, + CLASS_NAME: "OpenLayers.Format.KML" +}); +OpenLayers.Popup = OpenLayers.Class({ + events: null, + id: "", + lonlat: null, + div: null, + contentSize: null, + size: null, + contentHTML: null, + backgroundColor: "", + opacity: "", + border: "", + contentDiv: null, + groupDiv: null, + closeDiv: null, + autoSize: !1, + minSize: null, + maxSize: null, + displayClass: "olPopup", + contentDisplayClass: "olPopupContent", + padding: 0, + disableFirefoxOverflowHack: !1, + fixPadding: function() { + "number" == typeof this.padding && (this.padding = new OpenLayers.Bounds(this.padding, this.padding, this.padding, this.padding)) + }, + panMapIfOutOfView: !1, + keepInMap: !1, + closeOnMove: !1, + map: null, + initialize: function(a, b, c, d, e, f) { + null == a && (a = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_")); + this.id = a; + this.lonlat = b; + this.contentSize = null != c ? c : new OpenLayers.Size(OpenLayers.Popup.WIDTH, OpenLayers.Popup.HEIGHT); + null != d && (this.contentHTML = d); + this.backgroundColor = OpenLayers.Popup.COLOR; + this.opacity = OpenLayers.Popup.OPACITY; + this.border = OpenLayers.Popup.BORDER; + this.div = OpenLayers.Util.createDiv(this.id, null, null, null, null, null, "hidden"); + this.div.className = this.displayClass; + this.groupDiv = OpenLayers.Util.createDiv(this.id + "_GroupDiv", null, null, null, "relative", null, "hidden"); + a = this.div.id + "_contentDiv"; + this.contentDiv = OpenLayers.Util.createDiv(a, null, this.contentSize.clone(), null, "relative"); + this.contentDiv.className = this.contentDisplayClass; + this.groupDiv.appendChild(this.contentDiv); + this.div.appendChild(this.groupDiv); + e && this.addCloseBox(f); + this.registerEvents() + }, + destroy: function() { + this.border = this.opacity = this.backgroundColor = this.contentHTML = this.size = this.lonlat = this.id = + null; + this.closeOnMove && this.map && this.map.events.unregister("movestart", this, this.hide); + this.events.destroy(); + this.events = null; + this.closeDiv && (OpenLayers.Event.stopObservingElement(this.closeDiv), this.groupDiv.removeChild(this.closeDiv)); + this.closeDiv = null; + this.div.removeChild(this.groupDiv); + this.groupDiv = null; + null != this.map && this.map.removePopup(this); + this.panMapIfOutOfView = this.padding = this.maxSize = this.minSize = this.autoSize = this.div = this.map = null + }, + draw: function(a) { + null == a && null != this.lonlat && null != + this.map && (a = this.map.getLayerPxFromLonLat(this.lonlat)); + this.closeOnMove && this.map.events.register("movestart", this, this.hide); + !this.disableFirefoxOverflowHack && "firefox" == OpenLayers.BROWSER_NAME && (this.map.events.register("movestart", this, function() { + var a = document.defaultView.getComputedStyle(this.contentDiv, null).getPropertyValue("overflow"); + "hidden" != a && (this.contentDiv._oldOverflow = a, this.contentDiv.style.overflow = "hidden") + }), this.map.events.register("moveend", this, function() { + var a = this.contentDiv._oldOverflow; + a && (this.contentDiv.style.overflow = a, this.contentDiv._oldOverflow = null) + })); + this.moveTo(a); + !this.autoSize && !this.size && this.setSize(this.contentSize); + this.setBackgroundColor(); + this.setOpacity(); + this.setBorder(); + this.setContentHTML(); + this.panMapIfOutOfView && this.panIntoView(); + return this.div + }, + updatePosition: function() { + if (this.lonlat && this.map) { + var a = this.map.getLayerPxFromLonLat(this.lonlat); + a && this.moveTo(a) + } + }, + moveTo: function(a) { + null != a && null != this.div && (this.div.style.left = a.x + "px", this.div.style.top = + a.y + "px") + }, + visible: function() { + return OpenLayers.Element.visible(this.div) + }, + toggle: function() { + this.visible() ? this.hide() : this.show() + }, + show: function() { + this.div.style.display = ""; + this.panMapIfOutOfView && this.panIntoView() + }, + hide: function() { + this.div.style.display = "none" + }, + setSize: function(a) { + this.size = a.clone(); + var b = this.getContentDivPadding(), + c = b.left + b.right, + d = b.top + b.bottom; + this.fixPadding(); + c += this.padding.left + this.padding.right; + d += this.padding.top + this.padding.bottom; + if (this.closeDiv) var e = parseInt(this.closeDiv.style.width), + c = c + (e + b.right); + this.size.w += c; + this.size.h += d; + "msie" == OpenLayers.BROWSER_NAME && (this.contentSize.w += b.left + b.right, this.contentSize.h += b.bottom + b.top); + null != this.div && (this.div.style.width = this.size.w + "px", this.div.style.height = this.size.h + "px"); + null != this.contentDiv && (this.contentDiv.style.width = a.w + "px", this.contentDiv.style.height = a.h + "px") + }, + updateSize: function() { + var a = "<div class='" + this.contentDisplayClass + "'>" + this.contentDiv.innerHTML + "</div>", + b = this.map ? this.map.div : document.body, + c = OpenLayers.Util.getRenderedDimensions(a, + null, { + displayClass: this.displayClass, + containerElement: b + }), + d = this.getSafeContentSize(c), + e = null; + d.equals(c) ? e = c : (c = { + w: d.w < c.w ? d.w : null, + h: d.h < c.h ? d.h : null + }, c.w && c.h ? e = d : (a = OpenLayers.Util.getRenderedDimensions(a, c, { + displayClass: this.contentDisplayClass, + containerElement: b + }), "hidden" != OpenLayers.Element.getStyle(this.contentDiv, "overflow") && a.equals(d) && (d = OpenLayers.Util.getScrollbarWidth(), c.w ? a.h += d : a.w += d), e = this.getSafeContentSize(a))); + this.setSize(e) + }, + setBackgroundColor: function(a) { + void 0 != a && (this.backgroundColor = + a); + null != this.div && (this.div.style.backgroundColor = this.backgroundColor) + }, + setOpacity: function(a) { + void 0 != a && (this.opacity = a); + null != this.div && (this.div.style.opacity = this.opacity, this.div.style.filter = "alpha(opacity=" + 100 * this.opacity + ")") + }, + setBorder: function(a) { + void 0 != a && (this.border = a); + null != this.div && (this.div.style.border = this.border) + }, + setContentHTML: function(a) { + null != a && (this.contentHTML = a); + null != this.contentDiv && (null != this.contentHTML && this.contentHTML != this.contentDiv.innerHTML) && (this.contentDiv.innerHTML = + this.contentHTML, this.autoSize && (this.registerImageListeners(), this.updateSize())) + }, + registerImageListeners: function() { + for (var a = function() { + null !== this.popup.id && (this.popup.updateSize(), this.popup.visible() && this.popup.panMapIfOutOfView && this.popup.panIntoView(), OpenLayers.Event.stopObserving(this.img, "load", this.img._onImageLoad)) + }, b = this.contentDiv.getElementsByTagName("img"), c = 0, d = b.length; c < d; c++) { + var e = b[c]; + if (0 == e.width || 0 == e.height) e._onImgLoad = OpenLayers.Function.bind(a, { + popup: this, + img: e + }), + OpenLayers.Event.observe(e, "load", e._onImgLoad) + } + }, + getSafeContentSize: function(a) { + var a = a.clone(), + b = this.getContentDivPadding(), + c = b.left + b.right, + d = b.top + b.bottom; + this.fixPadding(); + c += this.padding.left + this.padding.right; + d += this.padding.top + this.padding.bottom; + if (this.closeDiv) var e = parseInt(this.closeDiv.style.width), + c = c + (e + b.right); + this.minSize && (a.w = Math.max(a.w, this.minSize.w - c), a.h = Math.max(a.h, this.minSize.h - d)); + this.maxSize && (a.w = Math.min(a.w, this.maxSize.w - c), a.h = Math.min(a.h, this.maxSize.h - + d)); + if (this.map && this.map.size) { + e = b = 0; + if (this.keepInMap && !this.panMapIfOutOfView) switch (e = this.map.getPixelFromLonLat(this.lonlat), this.relativePosition) { + case "tr": + b = e.x; + e = this.map.size.h - e.y; + break; + case "tl": + b = this.map.size.w - e.x; + e = this.map.size.h - e.y; + break; + case "bl": + b = this.map.size.w - e.x; + e = e.y; + break; + case "br": + b = e.x; + e = e.y; + break; + default: + b = e.x, e = this.map.size.h - e.y + } + d = this.map.size.h - this.map.paddingForPopups.top - this.map.paddingForPopups.bottom - d - e; + a.w = Math.min(a.w, this.map.size.w - this.map.paddingForPopups.left - + this.map.paddingForPopups.right - c - b); + a.h = Math.min(a.h, d) + } + return a + }, + getContentDivPadding: function() { + var a = this._contentDivPadding; + if (!a && (null == this.div.parentNode && (this.div.style.display = "none", document.body.appendChild(this.div)), this._contentDivPadding = a = new OpenLayers.Bounds(OpenLayers.Element.getStyle(this.contentDiv, "padding-left"), OpenLayers.Element.getStyle(this.contentDiv, "padding-bottom"), OpenLayers.Element.getStyle(this.contentDiv, "padding-right"), OpenLayers.Element.getStyle(this.contentDiv, + "padding-top")), this.div.parentNode == document.body)) document.body.removeChild(this.div), this.div.style.display = ""; + return a + }, + addCloseBox: function(a) { + this.closeDiv = OpenLayers.Util.createDiv(this.id + "_close", null, { + w: 17, + h: 17 + }); + this.closeDiv.className = "olPopupCloseBox"; + var b = this.getContentDivPadding(); + this.closeDiv.style.right = b.right + "px"; + this.closeDiv.style.top = b.top + "px"; + this.groupDiv.appendChild(this.closeDiv); + a = a || function(a) { + this.hide(); + OpenLayers.Event.stop(a) + }; + OpenLayers.Event.observe(this.closeDiv, + "touchend", OpenLayers.Function.bindAsEventListener(a, this)); + OpenLayers.Event.observe(this.closeDiv, "click", OpenLayers.Function.bindAsEventListener(a, this)) + }, + panIntoView: function() { + var a = this.map.getSize(), + b = this.map.getViewPortPxFromLayerPx(new OpenLayers.Pixel(parseInt(this.div.style.left), parseInt(this.div.style.top))), + c = b.clone(); + b.x < this.map.paddingForPopups.left ? c.x = this.map.paddingForPopups.left : b.x + this.size.w > a.w - this.map.paddingForPopups.right && (c.x = a.w - this.map.paddingForPopups.right - this.size.w); + b.y < this.map.paddingForPopups.top ? c.y = this.map.paddingForPopups.top : b.y + this.size.h > a.h - this.map.paddingForPopups.bottom && (c.y = a.h - this.map.paddingForPopups.bottom - this.size.h); + this.map.pan(b.x - c.x, b.y - c.y) + }, + registerEvents: function() { + this.events = new OpenLayers.Events(this, this.div, null, !0); + this.events.on({ + mousedown: this.onmousedown, + mousemove: this.onmousemove, + mouseup: this.onmouseup, + click: this.onclick, + mouseout: this.onmouseout, + dblclick: this.ondblclick, + touchstart: function(a) { + OpenLayers.Event.stop(a, !0) + }, + scope: this + }) + }, + onmousedown: function(a) { + this.mousedown = !0; + OpenLayers.Event.stop(a, !0) + }, + onmousemove: function(a) { + this.mousedown && OpenLayers.Event.stop(a, !0) + }, + onmouseup: function(a) { + this.mousedown && (this.mousedown = !1, OpenLayers.Event.stop(a, !0)) + }, + onclick: function(a) { + OpenLayers.Event.stop(a, !0) + }, + onmouseout: function() { + this.mousedown = !1 + }, + ondblclick: function(a) { + OpenLayers.Event.stop(a, !0) + }, + CLASS_NAME: "OpenLayers.Popup" +}); +OpenLayers.Popup.WIDTH = 200; +OpenLayers.Popup.HEIGHT = 200; +OpenLayers.Popup.COLOR = "white"; +OpenLayers.Popup.OPACITY = 1; +OpenLayers.Popup.BORDER = "0px"; +OpenLayers.Popup.Anchored = OpenLayers.Class(OpenLayers.Popup, { + relativePosition: null, + keepInMap: !0, + anchor: null, + initialize: function(a, b, c, d, e, f, g) { + OpenLayers.Popup.prototype.initialize.apply(this, [a, b, c, d, f, g]); + this.anchor = null != e ? e : { + size: new OpenLayers.Size(0, 0), + offset: new OpenLayers.Pixel(0, 0) + } + }, + destroy: function() { + this.relativePosition = this.anchor = null; + OpenLayers.Popup.prototype.destroy.apply(this, arguments) + }, + show: function() { + this.updatePosition(); + OpenLayers.Popup.prototype.show.apply(this, arguments) + }, + moveTo: function(a) { + var b = this.relativePosition; + this.relativePosition = this.calculateRelativePosition(a); + a = this.calculateNewPx(a); + OpenLayers.Popup.prototype.moveTo.apply(this, Array(a)); + this.relativePosition != b && this.updateRelativePosition() + }, + setSize: function(a) { + OpenLayers.Popup.prototype.setSize.apply(this, arguments); + this.lonlat && this.map && this.moveTo(this.map.getLayerPxFromLonLat(this.lonlat)) + }, + calculateRelativePosition: function(a) { + a = this.map.getLonLatFromLayerPx(a); + a = this.map.getExtent().determineQuadrant(a); + return OpenLayers.Bounds.oppositeQuadrant(a) + }, + updateRelativePosition: function() {}, + calculateNewPx: function(a) { + var a = a.offset(this.anchor.offset), + b = this.size || this.contentSize, + c = "t" == this.relativePosition.charAt(0); + a.y += c ? -b.h : this.anchor.size.h; + c = "l" == this.relativePosition.charAt(1); + a.x += c ? -b.w : this.anchor.size.w; + return a + }, + CLASS_NAME: "OpenLayers.Popup.Anchored" +}); +/* + Apache 2 + + Contains portions of Rico <http://openrico.org/> + + Copyright 2005 Sabre Airline Solutions + + Licensed under the Apache License, Version 2.0 (the "License"); you + may not use this file except in compliance with the License. You + may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied. See the License for the specific language governing + permissions and limitations under the License. +*/ +OpenLayers.Console.warn("OpenLayers.Rico is deprecated"); +OpenLayers.Rico = OpenLayers.Rico || {}; +OpenLayers.Rico.Color = OpenLayers.Class({ + initialize: function(a, b, c) { + this.rgb = { + r: a, + g: b, + b: c + } + }, + setRed: function(a) { + this.rgb.r = a + }, + setGreen: function(a) { + this.rgb.g = a + }, + setBlue: function(a) { + this.rgb.b = a + }, + setHue: function(a) { + var b = this.asHSB(); + b.h = a; + this.rgb = OpenLayers.Rico.Color.HSBtoRGB(b.h, b.s, b.b) + }, + setSaturation: function(a) { + var b = this.asHSB(); + b.s = a; + this.rgb = OpenLayers.Rico.Color.HSBtoRGB(b.h, b.s, b.b) + }, + setBrightness: function(a) { + var b = this.asHSB(); + b.b = a; + this.rgb = OpenLayers.Rico.Color.HSBtoRGB(b.h, b.s, b.b) + }, + darken: function(a) { + var b = this.asHSB(); + this.rgb = OpenLayers.Rico.Color.HSBtoRGB(b.h, b.s, Math.max(b.b - a, 0)) + }, + brighten: function(a) { + var b = this.asHSB(); + this.rgb = OpenLayers.Rico.Color.HSBtoRGB(b.h, b.s, Math.min(b.b + a, 1)) + }, + blend: function(a) { + this.rgb.r = Math.floor((this.rgb.r + a.rgb.r) / 2); + this.rgb.g = Math.floor((this.rgb.g + a.rgb.g) / 2); + this.rgb.b = Math.floor((this.rgb.b + a.rgb.b) / 2) + }, + isBright: function() { + this.asHSB(); + return 0.5 < this.asHSB().b + }, + isDark: function() { + return !this.isBright() + }, + asRGB: function() { + return "rgb(" + + this.rgb.r + "," + this.rgb.g + "," + this.rgb.b + ")" + }, + asHex: function() { + return "#" + this.rgb.r.toColorPart() + this.rgb.g.toColorPart() + this.rgb.b.toColorPart() + }, + asHSB: function() { + return OpenLayers.Rico.Color.RGBtoHSB(this.rgb.r, this.rgb.g, this.rgb.b) + }, + toString: function() { + return this.asHex() + } +}); +OpenLayers.Rico.Color.createFromHex = function(a) { + if (4 == a.length) + for (var b = a, a = "#", c = 1; 4 > c; c++) a += b.charAt(c) + b.charAt(c); + 0 == a.indexOf("#") && (a = a.substring(1)); + b = a.substring(0, 2); + c = a.substring(2, 4); + a = a.substring(4, 6); + return new OpenLayers.Rico.Color(parseInt(b, 16), parseInt(c, 16), parseInt(a, 16)) +}; +OpenLayers.Rico.Color.createColorFromBackground = function(a) { + var b = OpenLayers.Element.getStyle(OpenLayers.Util.getElement(a), "backgroundColor"); + return "transparent" == b && a.parentNode ? OpenLayers.Rico.Color.createColorFromBackground(a.parentNode) : null == b ? new OpenLayers.Rico.Color(255, 255, 255) : 0 == b.indexOf("rgb(") ? (a = b.substring(4, b.length - 1).split(","), new OpenLayers.Rico.Color(parseInt(a[0]), parseInt(a[1]), parseInt(a[2]))) : 0 == b.indexOf("#") ? OpenLayers.Rico.Color.createFromHex(b) : new OpenLayers.Rico.Color(255, + 255, 255) +}; +OpenLayers.Rico.Color.HSBtoRGB = function(a, b, c) { + var d = 0, + e = 0, + f = 0; + if (0 == b) f = e = d = parseInt(255 * c + 0.5); + else { + var a = 6 * (a - Math.floor(a)), + g = a - Math.floor(a), + h = c * (1 - b), + i = c * (1 - b * g), + b = c * (1 - b * (1 - g)); + switch (parseInt(a)) { + case 0: + d = 255 * c + 0.5; + e = 255 * b + 0.5; + f = 255 * h + 0.5; + break; + case 1: + d = 255 * i + 0.5; + e = 255 * c + 0.5; + f = 255 * h + 0.5; + break; + case 2: + d = 255 * h + 0.5; + e = 255 * c + 0.5; + f = 255 * b + 0.5; + break; + case 3: + d = 255 * h + 0.5; + e = 255 * i + 0.5; + f = 255 * c + 0.5; + break; + case 4: + d = 255 * b + 0.5; + e = 255 * h + 0.5; + f = 255 * c + 0.5; + break; + case 5: + d = 255 * c + 0.5, e = 255 * h + 0.5, f = 255 * i + 0.5 + } + } + return { + r: parseInt(d), + g: parseInt(e), + b: parseInt(f) + } +}; +OpenLayers.Rico.Color.RGBtoHSB = function(a, b, c) { + var d, e = a > b ? a : b; + c > e && (e = c); + var f = a < b ? a : b; + c < f && (f = c); + d = 0 != e ? (e - f) / e : 0; + if (0 == d) a = 0; + else { + var g = (e - a) / (e - f), + h = (e - b) / (e - f), + c = (e - c) / (e - f), + a = (a == e ? c - h : b == e ? 2 + g - c : 4 + h - g) / 6; + 0 > a && (a += 1) + } + return { + h: a, + s: d, + b: e / 255 + } +}; +OpenLayers.Console.warn("OpenLayers.Rico is deprecated"); +OpenLayers.Rico = OpenLayers.Rico || {}; +OpenLayers.Rico.Corner = { + round: function(a, b) { + a = OpenLayers.Util.getElement(a); + this._setOptions(b); + var c = this.options.color; + "fromElement" == this.options.color && (c = this._background(a)); + var d = this.options.bgColor; + "fromParent" == this.options.bgColor && (d = this._background(a.offsetParent)); + this._roundCornersImpl(a, c, d) + }, + changeColor: function(a, b) { + a.style.backgroundColor = b; + for (var c = a.parentNode.getElementsByTagName("span"), d = 0; d < c.length; d++) c[d].style.backgroundColor = b + }, + changeOpacity: function(a, b) { + var c = "alpha(opacity=" + + 100 * b + ")"; + a.style.opacity = b; + a.style.filter = c; + for (var d = a.parentNode.getElementsByTagName("span"), e = 0; e < d.length; e++) d[e].style.opacity = b, d[e].style.filter = c + }, + reRound: function(a, b) { + var c = a.parentNode.childNodes[2]; + a.parentNode.removeChild(a.parentNode.childNodes[0]); + a.parentNode.removeChild(c); + this.round(a.parentNode, b) + }, + _roundCornersImpl: function(a, b, c) { + this.options.border && this._renderBorder(a, c); + this._isTopRounded() && this._roundTopCorners(a, b, c); + this._isBottomRounded() && this._roundBottomCorners(a, + b, c) + }, + _renderBorder: function(a, b) { + var c = "1px solid " + this._borderColor(b); + a.innerHTML = "<div " + ("style='border-left: " + c + ";" + ("border-right: " + c) + "'") + ">" + a.innerHTML + "</div>" + }, + _roundTopCorners: function(a, b, c) { + for (var d = this._createCorner(c), e = 0; e < this.options.numSlices; e++) d.appendChild(this._createCornerSlice(b, c, e, "top")); + a.style.paddingTop = 0; + a.insertBefore(d, a.firstChild) + }, + _roundBottomCorners: function(a, b, c) { + for (var d = this._createCorner(c), e = this.options.numSlices - 1; 0 <= e; e--) d.appendChild(this._createCornerSlice(b, + c, e, "bottom")); + a.style.paddingBottom = 0; + a.appendChild(d) + }, + _createCorner: function(a) { + var b = document.createElement("div"); + b.style.backgroundColor = this._isTransparent() ? "transparent" : a; + return b + }, + _createCornerSlice: function(a, b, c, d) { + var e = document.createElement("span"), + f = e.style; + f.backgroundColor = a; + f.display = "block"; + f.height = "1px"; + f.overflow = "hidden"; + f.fontSize = "1px"; + a = this._borderColor(a, b); + this.options.border && 0 == c ? (f.borderTopStyle = "solid", f.borderTopWidth = "1px", f.borderLeftWidth = "0px", f.borderRightWidth = + "0px", f.borderBottomWidth = "0px", f.height = "0px", f.borderColor = a) : a && (f.borderColor = a, f.borderStyle = "solid", f.borderWidth = "0px 1px"); + !this.options.compact && c == this.options.numSlices - 1 && (f.height = "2px"); + this._setMargin(e, c, d); + this._setBorder(e, c, d); + return e + }, + _setOptions: function(a) { + this.options = { + corners: "all", + color: "fromElement", + bgColor: "fromParent", + blend: !0, + border: !1, + compact: !1 + }; + OpenLayers.Util.extend(this.options, a || {}); + this.options.numSlices = this.options.compact ? 2 : 4; + this._isTransparent() && (this.options.blend = !1) + }, + _whichSideTop: function() { + return this._hasString(this.options.corners, "all", "top") || 0 <= this.options.corners.indexOf("tl") && 0 <= this.options.corners.indexOf("tr") ? "" : 0 <= this.options.corners.indexOf("tl") ? "left" : 0 <= this.options.corners.indexOf("tr") ? "right" : "" + }, + _whichSideBottom: function() { + return this._hasString(this.options.corners, "all", "bottom") || 0 <= this.options.corners.indexOf("bl") && 0 <= this.options.corners.indexOf("br") ? "" : 0 <= this.options.corners.indexOf("bl") ? "left" : 0 <= this.options.corners.indexOf("br") ? + "right" : "" + }, + _borderColor: function(a, b) { + return "transparent" == a ? b : this.options.border ? this.options.border : this.options.blend ? this._blend(b, a) : "" + }, + _setMargin: function(a, b, c) { + b = this._marginSize(b); + c = "top" == c ? this._whichSideTop() : this._whichSideBottom(); + "left" == c ? (a.style.marginLeft = b + "px", a.style.marginRight = "0px") : "right" == c ? (a.style.marginRight = b + "px", a.style.marginLeft = "0px") : (a.style.marginLeft = b + "px", a.style.marginRight = b + "px") + }, + _setBorder: function(a, b, c) { + b = this._borderSize(b); + c = "top" == c ? this._whichSideTop() : + this._whichSideBottom(); + "left" == c ? (a.style.borderLeftWidth = b + "px", a.style.borderRightWidth = "0px") : "right" == c ? (a.style.borderRightWidth = b + "px", a.style.borderLeftWidth = "0px") : (a.style.borderLeftWidth = b + "px", a.style.borderRightWidth = b + "px"); + !1 != this.options.border && (a.style.borderLeftWidth = b + "px", a.style.borderRightWidth = b + "px") + }, + _marginSize: function(a) { + if (this._isTransparent()) return 0; + var b = [5, 3, 2, 1], + c = [3, 2, 1, 0], + d = [2, 1], + e = [1, 0]; + return this.options.compact && this.options.blend ? e[a] : this.options.compact ? + d[a] : this.options.blend ? c[a] : b[a] + }, + _borderSize: function(a) { + var b = [5, 3, 2, 1], + c = [2, 1, 1, 1], + d = [1, 0], + e = [0, 2, 0, 0]; + return this.options.compact && (this.options.blend || this._isTransparent()) ? 1 : this.options.compact ? d[a] : this.options.blend ? c[a] : this.options.border ? e[a] : this._isTransparent() ? b[a] : 0 + }, + _hasString: function(a) { + for (var b = 1; b < arguments.length; b++) + if (0 <= a.indexOf(arguments[b])) return !0; + return !1 + }, + _blend: function(a, b) { + var c = OpenLayers.Rico.Color.createFromHex(a); + c.blend(OpenLayers.Rico.Color.createFromHex(b)); + return c + }, + _background: function(a) { + try { + return OpenLayers.Rico.Color.createColorFromBackground(a).asHex() + } catch (b) { + return "#ffffff" + } + }, + _isTransparent: function() { + return "transparent" == this.options.color + }, + _isTopRounded: function() { + return this._hasString(this.options.corners, "all", "top", "tl", "tr") + }, + _isBottomRounded: function() { + return this._hasString(this.options.corners, "all", "bottom", "bl", "br") + }, + _hasSingleTextChild: function(a) { + return 1 == a.childNodes.length && 3 == a.childNodes[0].nodeType + } +}; +OpenLayers.Popup.AnchoredBubble = OpenLayers.Class(OpenLayers.Popup.Anchored, { + rounded: !1, + initialize: function(a, b, c, d, e, f, g) { + OpenLayers.Console.warn("AnchoredBubble is deprecated"); + this.padding = new OpenLayers.Bounds(0, OpenLayers.Popup.AnchoredBubble.CORNER_SIZE, 0, OpenLayers.Popup.AnchoredBubble.CORNER_SIZE); + OpenLayers.Popup.Anchored.prototype.initialize.apply(this, arguments) + }, + draw: function(a) { + OpenLayers.Popup.Anchored.prototype.draw.apply(this, arguments); + this.setContentHTML(); + this.setBackgroundColor(); + this.setOpacity(); + return this.div + }, + updateRelativePosition: function() { + this.setRicoCorners() + }, + setSize: function(a) { + OpenLayers.Popup.Anchored.prototype.setSize.apply(this, arguments); + this.setRicoCorners() + }, + setBackgroundColor: function(a) { + void 0 != a && (this.backgroundColor = a); + null != this.div && null != this.contentDiv && (this.div.style.background = "transparent", OpenLayers.Rico.Corner.changeColor(this.groupDiv, this.backgroundColor)) + }, + setOpacity: function(a) { + OpenLayers.Popup.Anchored.prototype.setOpacity.call(this, + a); + null != this.div && null != this.groupDiv && OpenLayers.Rico.Corner.changeOpacity(this.groupDiv, this.opacity) + }, + setBorder: function() { + this.border = 0 + }, + setRicoCorners: function() { + var a = { + corners: this.getCornersToRound(this.relativePosition), + color: this.backgroundColor, + bgColor: "transparent", + blend: !1 + }; + this.rounded ? (OpenLayers.Rico.Corner.reRound(this.groupDiv, a), this.setBackgroundColor(), this.setOpacity()) : (OpenLayers.Rico.Corner.round(this.div, a), this.rounded = !0) + }, + getCornersToRound: function() { + var a = ["tl", "tr", + "bl", "br" + ], + b = OpenLayers.Bounds.oppositeQuadrant(this.relativePosition); + OpenLayers.Util.removeItem(a, b); + return a.join(" ") + }, + CLASS_NAME: "OpenLayers.Popup.AnchoredBubble" +}); +OpenLayers.Popup.AnchoredBubble.CORNER_SIZE = 5; +OpenLayers.Protocol.WFS.v1 = OpenLayers.Class(OpenLayers.Protocol, { + version: null, + srsName: "EPSG:4326", + featureType: null, + featureNS: null, + geometryName: "the_geom", + schema: null, + featurePrefix: "feature", + formatOptions: null, + readFormat: null, + readOptions: null, + initialize: function(a) { + OpenLayers.Protocol.prototype.initialize.apply(this, [a]); + a.format || (this.format = OpenLayers.Format.WFST(OpenLayers.Util.extend({ + version: this.version, + featureType: this.featureType, + featureNS: this.featureNS, + featurePrefix: this.featurePrefix, + geometryName: this.geometryName, + srsName: this.srsName, + schema: this.schema + }, this.formatOptions))); + !a.geometryName && 1 < parseFloat(this.format.version) && this.setGeometryName(null) + }, + destroy: function() { + this.options && !this.options.format && this.format.destroy(); + this.format = null; + OpenLayers.Protocol.prototype.destroy.apply(this) + }, + read: function(a) { + OpenLayers.Protocol.prototype.read.apply(this, arguments); + a = OpenLayers.Util.extend({}, a); + OpenLayers.Util.applyDefaults(a, this.options || {}); + var b = new OpenLayers.Protocol.Response({ + requestType: "read" + }), + c = OpenLayers.Format.XML.prototype.write.apply(this.format, [this.format.writeNode("wfs:GetFeature", a)]); + b.priv = OpenLayers.Request.POST({ + url: a.url, + callback: this.createCallback(this.handleRead, b, a), + params: a.params, + headers: a.headers, + data: c + }); + return b + }, + setFeatureType: function(a) { + this.featureType = a; + this.format.featureType = a + }, + setGeometryName: function(a) { + this.geometryName = a; + this.format.geometryName = a + }, + handleRead: function(a, b) { + b = OpenLayers.Util.extend({}, b); + OpenLayers.Util.applyDefaults(b, this.options); + if (b.callback) { + var c = + a.priv; + 200 <= c.status && 300 > c.status ? (c = this.parseResponse(c, b.readOptions)) && !1 !== c.success ? (b.readOptions && "object" == b.readOptions.output ? OpenLayers.Util.extend(a, c) : a.features = c, a.code = OpenLayers.Protocol.Response.SUCCESS) : (a.code = OpenLayers.Protocol.Response.FAILURE, a.error = c) : a.code = OpenLayers.Protocol.Response.FAILURE; + b.callback.call(b.scope, a) + } + }, + parseResponse: function(a, b) { + var c = a.responseXML; + if (!c || !c.documentElement) c = a.responseText; + if (!c || 0 >= c.length) return null; + c = null !== this.readFormat ? this.readFormat.read(c) : + this.format.read(c, b); + if (!this.featureNS) { + var d = this.readFormat || this.format; + this.featureNS = d.featureNS; + d.autoConfig = !1; + this.geometryName || this.setGeometryName(d.geometryName) + } + return c + }, + commit: function(a, b) { + b = OpenLayers.Util.extend({}, b); + OpenLayers.Util.applyDefaults(b, this.options); + var c = new OpenLayers.Protocol.Response({ + requestType: "commit", + reqFeatures: a + }); + c.priv = OpenLayers.Request.POST({ + url: b.url, + headers: b.headers, + data: this.format.write(a, b), + callback: this.createCallback(this.handleCommit, c, b) + }); + return c + }, + handleCommit: function(a, b) { + if (b.callback) { + var c = a.priv, + d = c.responseXML; + if (!d || !d.documentElement) d = c.responseText; + c = this.format.read(d) || {}; + a.insertIds = c.insertIds || []; + c.success ? a.code = OpenLayers.Protocol.Response.SUCCESS : (a.code = OpenLayers.Protocol.Response.FAILURE, a.error = c); + b.callback.call(b.scope, a) + } + }, + filterDelete: function(a, b) { + b = OpenLayers.Util.extend({}, b); + OpenLayers.Util.applyDefaults(b, this.options); + new OpenLayers.Protocol.Response({ + requestType: "commit" + }); + var c = this.format.createElementNSPlus("wfs:Transaction", { + attributes: { + service: "WFS", + version: this.version + } + }), + d = this.format.createElementNSPlus("wfs:Delete", { + attributes: { + typeName: (b.featureNS ? this.featurePrefix + ":" : "") + b.featureType + } + }); + b.featureNS && d.setAttribute("xmlns:" + this.featurePrefix, b.featureNS); + var e = this.format.writeNode("ogc:Filter", a); + d.appendChild(e); + c.appendChild(d); + c = OpenLayers.Format.XML.prototype.write.apply(this.format, [c]); + return OpenLayers.Request.POST({ + url: this.url, + callback: b.callback || function() {}, + data: c + }) + }, + abort: function(a) { + a && a.priv.abort() + }, + CLASS_NAME: "OpenLayers.Protocol.WFS.v1" +}); +OpenLayers.Handler.Point = OpenLayers.Class(OpenLayers.Handler, { + point: null, + layer: null, + multi: !1, + citeCompliant: !1, + mouseDown: !1, + stoppedDown: null, + lastDown: null, + lastUp: null, + persist: !1, + stopDown: !1, + stopUp: !1, + layerOptions: null, + pixelTolerance: 5, + touch: !1, + lastTouchPx: null, + initialize: function(a, b, c) { + if (!c || !c.layerOptions || !c.layerOptions.styleMap) this.style = OpenLayers.Util.extend(OpenLayers.Feature.Vector.style["default"], {}); + OpenLayers.Handler.prototype.initialize.apply(this, arguments) + }, + activate: function() { + if (!OpenLayers.Handler.prototype.activate.apply(this, + arguments)) return !1; + var a = OpenLayers.Util.extend({ + displayInLayerSwitcher: !1, + calculateInRange: OpenLayers.Function.True, + wrapDateLine: this.citeCompliant + }, this.layerOptions); + this.layer = new OpenLayers.Layer.Vector(this.CLASS_NAME, a); + this.map.addLayer(this.layer); + return !0 + }, + createFeature: function(a) { + a = this.layer.getLonLatFromViewPortPx(a); + a = new OpenLayers.Geometry.Point(a.lon, a.lat); + this.point = new OpenLayers.Feature.Vector(a); + this.callback("create", [this.point.geometry, this.point]); + this.point.geometry.clearBounds(); + this.layer.addFeatures([this.point], { + silent: !0 + }) + }, + deactivate: function() { + if (!OpenLayers.Handler.prototype.deactivate.apply(this, arguments)) return !1; + this.cancel(); + null != this.layer.map && (this.destroyFeature(!0), this.layer.destroy(!1)); + this.layer = null; + this.touch = !1; + return !0 + }, + destroyFeature: function(a) { + this.layer && (a || !this.persist) && this.layer.destroyFeatures(); + this.point = null + }, + destroyPersistedFeature: function() { + var a = this.layer; + a && 1 < a.features.length && this.layer.features[0].destroy() + }, + finalize: function(a) { + this.mouseDown = !1; + this.lastTouchPx = this.lastUp = this.lastDown = null; + this.callback(a ? "cancel" : "done", [this.geometryClone()]); + this.destroyFeature(a) + }, + cancel: function() { + this.finalize(!0) + }, + click: function(a) { + OpenLayers.Event.stop(a); + return !1 + }, + dblclick: function(a) { + OpenLayers.Event.stop(a); + return !1 + }, + modifyFeature: function(a) { + this.point || this.createFeature(a); + a = this.layer.getLonLatFromViewPortPx(a); + this.point.geometry.x = a.lon; + this.point.geometry.y = a.lat; + this.callback("modify", [this.point.geometry, this.point, !1]); + this.point.geometry.clearBounds(); + this.drawFeature() + }, + drawFeature: function() { + this.layer.drawFeature(this.point, this.style) + }, + getGeometry: function() { + var a = this.point && this.point.geometry; + a && this.multi && (a = new OpenLayers.Geometry.MultiPoint([a])); + return a + }, + geometryClone: function() { + var a = this.getGeometry(); + return a && a.clone() + }, + mousedown: function(a) { + return this.down(a) + }, + touchstart: function(a) { + this.touch || (this.touch = !0, this.map.events.un({ + mousedown: this.mousedown, + mouseup: this.mouseup, + mousemove: this.mousemove, + click: this.click, + dblclick: this.dblclick, + scope: this + })); + this.lastTouchPx = a.xy; + return this.down(a) + }, + mousemove: function(a) { + return this.move(a) + }, + touchmove: function(a) { + this.lastTouchPx = a.xy; + return this.move(a) + }, + mouseup: function(a) { + return this.up(a) + }, + touchend: function(a) { + a.xy = this.lastTouchPx; + return this.up(a) + }, + down: function(a) { + this.mouseDown = !0; + this.lastDown = a.xy; + this.touch || this.modifyFeature(a.xy); + this.stoppedDown = this.stopDown; + return !this.stopDown + }, + move: function(a) { + !this.touch && (!this.mouseDown || this.stoppedDown) && this.modifyFeature(a.xy); + return !0 + }, + up: function(a) { + this.mouseDown = !1; + this.stoppedDown = this.stopDown; + return this.checkModifiers(a) && (!this.lastUp || !this.lastUp.equals(a.xy)) && this.lastDown && this.passesTolerance(this.lastDown, a.xy, this.pixelTolerance) ? (this.touch && this.modifyFeature(a.xy), this.persist && this.destroyPersistedFeature(), this.lastUp = a.xy, this.finalize(), !this.stopUp) : !0 + }, + mouseout: function(a) { + OpenLayers.Util.mouseLeft(a, this.map.viewPortDiv) && (this.stoppedDown = this.stopDown, this.mouseDown = !1) + }, + passesTolerance: function(a, + b, c) { + var d = !0; + null != c && a && b && a.distanceTo(b) > c && (d = !1); + return d + }, + CLASS_NAME: "OpenLayers.Handler.Point" +}); +OpenLayers.Handler.Path = OpenLayers.Class(OpenLayers.Handler.Point, { + line: null, + maxVertices: null, + doubleTouchTolerance: 20, + freehand: !1, + freehandToggle: "shiftKey", + timerId: null, + redoStack: null, + createFeature: function(a) { + a = this.layer.getLonLatFromViewPortPx(a); + a = new OpenLayers.Geometry.Point(a.lon, a.lat); + this.point = new OpenLayers.Feature.Vector(a); + this.line = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString([this.point.geometry])); + this.callback("create", [this.point.geometry, this.getSketch()]); + this.point.geometry.clearBounds(); + this.layer.addFeatures([this.line, this.point], { + silent: !0 + }) + }, + destroyFeature: function(a) { + OpenLayers.Handler.Point.prototype.destroyFeature.call(this, a); + this.line = null + }, + destroyPersistedFeature: function() { + var a = this.layer; + a && 2 < a.features.length && this.layer.features[0].destroy() + }, + removePoint: function() { + this.point && this.layer.removeFeatures([this.point]) + }, + addPoint: function(a) { + this.layer.removeFeatures([this.point]); + a = this.layer.getLonLatFromViewPortPx(a); + this.point = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(a.lon, + a.lat)); + this.line.geometry.addComponent(this.point.geometry, this.line.geometry.components.length); + this.layer.addFeatures([this.point]); + this.callback("point", [this.point.geometry, this.getGeometry()]); + this.callback("modify", [this.point.geometry, this.getSketch()]); + this.drawFeature(); + delete this.redoStack + }, + insertXY: function(a, b) { + this.line.geometry.addComponent(new OpenLayers.Geometry.Point(a, b), this.getCurrentPointIndex()); + this.drawFeature(); + delete this.redoStack + }, + insertDeltaXY: function(a, b) { + var c = this.line.geometry.components[this.getCurrentPointIndex() - + 1]; + c && (!isNaN(c.x) && !isNaN(c.y)) && this.insertXY(c.x + a, c.y + b) + }, + insertDirectionLength: function(a, b) { + var a = a * (Math.PI / 180), + c = b * Math.cos(a), + d = b * Math.sin(a); + this.insertDeltaXY(c, d) + }, + insertDeflectionLength: function(a, b) { + var c = this.getCurrentPointIndex() - 1; + if (0 < c) { + var d = this.line.geometry.components[c], + c = this.line.geometry.components[c - 1]; + this.insertDirectionLength(180 * Math.atan2(d.y - c.y, d.x - c.x) / Math.PI + a, b) + } + }, + getCurrentPointIndex: function() { + return this.line.geometry.components.length - 1 + }, + undo: function() { + var a = + this.line.geometry, + b = a.components, + c = this.getCurrentPointIndex() - 1, + b = b[c]; + if (a = a.removeComponent(b)) this.redoStack || (this.redoStack = []), this.redoStack.push(b), this.drawFeature(); + return a + }, + redo: function() { + var a = this.redoStack && this.redoStack.pop(); + a && (this.line.geometry.addComponent(a, this.getCurrentPointIndex()), this.drawFeature()); + return !!a + }, + freehandMode: function(a) { + return this.freehandToggle && a[this.freehandToggle] ? !this.freehand : this.freehand + }, + modifyFeature: function(a, b) { + this.line || this.createFeature(a); + var c = this.layer.getLonLatFromViewPortPx(a); + this.point.geometry.x = c.lon; + this.point.geometry.y = c.lat; + this.callback("modify", [this.point.geometry, this.getSketch(), b]); + this.point.geometry.clearBounds(); + this.drawFeature() + }, + drawFeature: function() { + this.layer.drawFeature(this.line, this.style); + this.layer.drawFeature(this.point, this.style) + }, + getSketch: function() { + return this.line + }, + getGeometry: function() { + var a = this.line && this.line.geometry; + a && this.multi && (a = new OpenLayers.Geometry.MultiLineString([a])); + return a + }, + touchstart: function(a) { + if (this.timerId && this.passesTolerance(this.lastTouchPx, a.xy, this.doubleTouchTolerance)) return this.finishGeometry(), window.clearTimeout(this.timerId), this.timerId = null, !1; + this.timerId && (window.clearTimeout(this.timerId), this.timerId = null); + this.timerId = window.setTimeout(OpenLayers.Function.bind(function() { + this.timerId = null + }, this), 300); + return OpenLayers.Handler.Point.prototype.touchstart.call(this, a) + }, + down: function(a) { + var b = this.stopDown; + this.freehandMode(a) && (b = !0, this.touch && + (this.modifyFeature(a.xy, !!this.lastUp), OpenLayers.Event.stop(a))); + !this.touch && (!this.lastDown || !this.passesTolerance(this.lastDown, a.xy, this.pixelTolerance)) && this.modifyFeature(a.xy, !!this.lastUp); + this.mouseDown = !0; + this.lastDown = a.xy; + this.stoppedDown = b; + return !b + }, + move: function(a) { + if (this.stoppedDown && this.freehandMode(a)) return this.persist && this.destroyPersistedFeature(), this.maxVertices && this.line && this.line.geometry.components.length === this.maxVertices ? (this.removePoint(), this.finalize()) : this.addPoint(a.xy), !1; + !this.touch && (!this.mouseDown || this.stoppedDown) && this.modifyFeature(a.xy, !!this.lastUp); + return !0 + }, + up: function(a) { + if (this.mouseDown && (!this.lastUp || !this.lastUp.equals(a.xy))) this.stoppedDown && this.freehandMode(a) ? (this.persist && this.destroyPersistedFeature(), this.removePoint(), this.finalize()) : this.passesTolerance(this.lastDown, a.xy, this.pixelTolerance) && (this.touch && this.modifyFeature(a.xy), null == this.lastUp && this.persist && this.destroyPersistedFeature(), this.addPoint(a.xy), this.lastUp = a.xy, this.line.geometry.components.length === + this.maxVertices + 1 && this.finishGeometry()); + this.stoppedDown = this.stopDown; + this.mouseDown = !1; + return !this.stopUp + }, + finishGeometry: function() { + this.line.geometry.removeComponent(this.line.geometry.components[this.line.geometry.components.length - 1]); + this.removePoint(); + this.finalize() + }, + dblclick: function(a) { + this.freehandMode(a) || this.finishGeometry(); + return !1 + }, + CLASS_NAME: "OpenLayers.Handler.Path" +}); +OpenLayers.Spherical = OpenLayers.Spherical || {}; +OpenLayers.Spherical.DEFAULT_RADIUS = 6378137; +OpenLayers.Spherical.computeDistanceBetween = function(a, b, c) { + var c = c || OpenLayers.Spherical.DEFAULT_RADIUS, + d = Math.sin(Math.PI * (b.lon - a.lon) / 360), + e = Math.sin(Math.PI * (b.lat - a.lat) / 360), + a = e * e + d * d * Math.cos(Math.PI * a.lat / 180) * Math.cos(Math.PI * b.lat / 180); + return 2 * c * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)) +}; +OpenLayers.Spherical.computeHeading = function(a, b) { + var c = Math.sin(Math.PI * (a.lon - b.lon) / 180) * Math.cos(Math.PI * b.lat / 180), + d = Math.cos(Math.PI * a.lat / 180) * Math.sin(Math.PI * b.lat / 180) - Math.sin(Math.PI * a.lat / 180) * Math.cos(Math.PI * b.lat / 180) * Math.cos(Math.PI * (a.lon - b.lon) / 180); + return 180 * Math.atan2(c, d) / Math.PI +}; +OpenLayers.Control.CacheWrite = OpenLayers.Class(OpenLayers.Control, { + layers: null, + imageFormat: "image/png", + quotaRegEx: /quota/i, + setMap: function(a) { + OpenLayers.Control.prototype.setMap.apply(this, arguments); + var b, c = this.layers || a.layers; + for (b = c.length - 1; 0 <= b; --b) this.addLayer({ + layer: c[b] + }); + if (!this.layers) a.events.on({ + addlayer: this.addLayer, + removeLayer: this.removeLayer, + scope: this + }) + }, + addLayer: function(a) { + a.layer.events.on({ + tileloadstart: this.makeSameOrigin, + tileloaded: this.cache, + scope: this + }) + }, + removeLayer: function(a) { + a.layer.events.un({ + tileloadstart: this.makeSameOrigin, + tileloaded: this.cache, + scope: this + }) + }, + makeSameOrigin: function(a) { + if (this.active && (a = a.tile, a instanceof OpenLayers.Tile.Image && !a.crossOriginKeyword && "data:" !== a.url.substr(0, 5))) { + var b = OpenLayers.Request.makeSameOrigin(a.url, OpenLayers.ProxyHost); + OpenLayers.Control.CacheWrite.urlMap[b] = a.url; + a.url = b + } + }, + cache: function(a) { + if (this.active && window.localStorage && (a = a.tile, a instanceof OpenLayers.Tile.Image && "data:" !== a.url.substr(0, 5))) try { + var b = a.getCanvasContext(); + if (b) { + var c = OpenLayers.Control.CacheWrite.urlMap; + window.localStorage.setItem("olCache_" + (c[a.url] || a.url), b.canvas.toDataURL(this.imageFormat)); + delete c[a.url] + } + } catch (d) { + (b = d.name || d.message) && this.quotaRegEx.test(b) ? this.events.triggerEvent("cachefull", { + tile: a + }) : OpenLayers.Console.error(d.toString()) + } + }, + destroy: function() { + if (this.layers || this.map) { + var a, b = this.layers || this.map.layers; + for (a = b.length - 1; 0 <= a; --a) this.removeLayer({ + layer: b[a] + }) + } + this.map && this.map.events.un({ + addlayer: this.addLayer, + removeLayer: this.removeLayer, + scope: this + }); + OpenLayers.Control.prototype.destroy.apply(this, + arguments) + }, + CLASS_NAME: "OpenLayers.Control.CacheWrite" +}); +OpenLayers.Control.CacheWrite.clearCache = function() { + if (window.localStorage) { + var a, b; + for (a = window.localStorage.length - 1; 0 <= a; --a) b = window.localStorage.key(a), "olCache_" === b.substr(0, 8) && window.localStorage.removeItem(b) + } +}; +OpenLayers.Control.CacheWrite.urlMap = {}; +OpenLayers.Format.Context = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, { + layerOptions: null, + layerParams: null, + read: function(a, b) { + var c = OpenLayers.Format.XML.VersionedOGC.prototype.read.apply(this, arguments); + if (b && b.map) + if (this.context = c, b.map instanceof OpenLayers.Map) c = this.mergeContextToMap(c, b.map); + else { + var d = b.map; + if (OpenLayers.Util.isElement(d) || "string" == typeof d) d = { + div: d + }; + c = this.contextToMap(c, d) + } + return c + }, + getLayerFromContext: function(a) { + var b, c, d = { + queryable: a.queryable, + visibility: a.visibility, + maxExtent: a.maxExtent, + metadata: OpenLayers.Util.applyDefaults(a.metadata, { + styles: a.styles, + formats: a.formats, + "abstract": a["abstract"], + dataURL: a.dataURL + }), + numZoomLevels: a.numZoomLevels, + units: a.units, + isBaseLayer: a.isBaseLayer, + opacity: a.opacity, + displayInLayerSwitcher: a.displayInLayerSwitcher, + singleTile: a.singleTile, + tileSize: a.tileSize ? new OpenLayers.Size(a.tileSize.width, a.tileSize.height) : void 0, + minScale: a.minScale || a.maxScaleDenominator, + maxScale: a.maxScale || a.minScaleDenominator, + srs: a.srs, + dimensions: a.dimensions, + metadataURL: a.metadataURL + }; + this.layerOptions && OpenLayers.Util.applyDefaults(d, this.layerOptions); + var e = { + layers: a.name, + transparent: a.transparent, + version: a.version + }; + if (a.formats && 0 < a.formats.length) { + e.format = a.formats[0].value; + b = 0; + for (c = a.formats.length; b < c; b++) { + var f = a.formats[b]; + if (!0 == f.current) { + e.format = f.value; + break + } + } + } + if (a.styles && 0 < a.styles.length) { + b = 0; + for (c = a.styles.length; b < c; b++) + if (f = a.styles[b], !0 == f.current) { + f.href ? e.sld = f.href : f.body ? e.sld_body = f.body : e.styles = f.name; + break + } + } + this.layerParams && + OpenLayers.Util.applyDefaults(e, this.layerParams); + b = null; + c = a.service; + c == OpenLayers.Format.Context.serviceTypes.WFS ? (d.strategies = [new OpenLayers.Strategy.BBOX], d.protocol = new OpenLayers.Protocol.WFS({ + url: a.url, + featurePrefix: a.name.split(":")[0], + featureType: a.name.split(":").pop() + }), b = new OpenLayers.Layer.Vector(a.title || a.name, d)) : c == OpenLayers.Format.Context.serviceTypes.KML ? (d.strategies = [new OpenLayers.Strategy.Fixed], d.protocol = new OpenLayers.Protocol.HTTP({ + url: a.url, + format: new OpenLayers.Format.KML + }), + b = new OpenLayers.Layer.Vector(a.title || a.name, d)) : c == OpenLayers.Format.Context.serviceTypes.GML ? (d.strategies = [new OpenLayers.Strategy.Fixed], d.protocol = new OpenLayers.Protocol.HTTP({ + url: a.url, + format: new OpenLayers.Format.GML + }), b = new OpenLayers.Layer.Vector(a.title || a.name, d)) : a.features ? (b = new OpenLayers.Layer.Vector(a.title || a.name, d), b.addFeatures(a.features)) : !0 !== a.categoryLayer && (b = new OpenLayers.Layer.WMS(a.title || a.name, a.url, e, d)); + return b + }, + getLayersFromContext: function(a) { + for (var b = [], c = + 0, d = a.length; c < d; c++) { + var e = this.getLayerFromContext(a[c]); + null !== e && b.push(e) + } + return b + }, + contextToMap: function(a, b) { + b = OpenLayers.Util.applyDefaults({ + maxExtent: a.maxExtent, + projection: a.projection, + units: a.units + }, b); + b.maxExtent && (b.maxResolution = b.maxExtent.getWidth() / OpenLayers.Map.TILE_WIDTH); + b.metadata = { + contactInformation: a.contactInformation, + "abstract": a["abstract"], + keywords: a.keywords, + logo: a.logo, + descriptionURL: a.descriptionURL + }; + var c = new OpenLayers.Map(b); + c.addLayers(this.getLayersFromContext(a.layersContext)); + c.setCenter(a.bounds.getCenterLonLat(), c.getZoomForExtent(a.bounds, !0)); + return c + }, + mergeContextToMap: function(a, b) { + b.addLayers(this.getLayersFromContext(a.layersContext)); + return b + }, + write: function(a, b) { + a = this.toContext(a); + return OpenLayers.Format.XML.VersionedOGC.prototype.write.apply(this, arguments) + }, + CLASS_NAME: "OpenLayers.Format.Context" +}); +OpenLayers.Format.Context.serviceTypes = { + WMS: "urn:ogc:serviceType:WMS", + WFS: "urn:ogc:serviceType:WFS", + WCS: "urn:ogc:serviceType:WCS", + GML: "urn:ogc:serviceType:GML", + SLD: "urn:ogc:serviceType:SLD", + FES: "urn:ogc:serviceType:FES", + KML: "urn:ogc:serviceType:KML" +}; +OpenLayers.Format.WMC = OpenLayers.Class(OpenLayers.Format.Context, { + defaultVersion: "1.1.0", + layerToContext: function(a) { + var b = this.getParser(), + c = { + queryable: a.queryable, + visibility: a.visibility, + name: a.params.LAYERS, + title: a.name, + "abstract": a.metadata["abstract"], + dataURL: a.metadata.dataURL, + metadataURL: a.metadataURL, + server: { + version: a.params.VERSION, + url: a.url + }, + maxExtent: a.maxExtent, + transparent: a.params.TRANSPARENT, + numZoomLevels: a.numZoomLevels, + units: a.units, + isBaseLayer: a.isBaseLayer, + opacity: 1 == a.opacity ? void 0 : a.opacity, + displayInLayerSwitcher: a.displayInLayerSwitcher, + singleTile: a.singleTile, + tileSize: a.singleTile || !a.tileSize ? void 0 : { + width: a.tileSize.w, + height: a.tileSize.h + }, + minScale: a.options.resolutions || a.options.scales || a.options.maxResolution || a.options.minScale ? a.minScale : void 0, + maxScale: a.options.resolutions || a.options.scales || a.options.minResolution || a.options.maxScale ? a.maxScale : void 0, + formats: [], + styles: [], + srs: a.srs, + dimensions: a.dimensions + }; + a.metadata.servertitle && (c.server.title = a.metadata.servertitle); + if (a.metadata.formats && 0 < a.metadata.formats.length) + for (var d = 0, e = a.metadata.formats.length; d < e; d++) { + var f = a.metadata.formats[d]; + c.formats.push({ + value: f.value, + current: f.value == a.params.FORMAT + }) + } else c.formats.push({ + value: a.params.FORMAT, + current: !0 + }); + if (a.metadata.styles && 0 < a.metadata.styles.length) { + d = 0; + for (e = a.metadata.styles.length; d < e; d++) b = a.metadata.styles[d], b.current = b.href == a.params.SLD || b.body == a.params.SLD_BODY || b.name == a.params.STYLES ? !0 : !1, c.styles.push(b) + } else c.styles.push({ + href: a.params.SLD, + body: a.params.SLD_BODY, + name: a.params.STYLES || b.defaultStyleName, + title: b.defaultStyleTitle, + current: !0 + }); + return c + }, + toContext: function(a) { + var b = {}, + c = a.layers; + if ("OpenLayers.Map" == a.CLASS_NAME) { + var d = a.metadata || {}; + b.size = a.getSize(); + b.bounds = a.getExtent(); + b.projection = a.projection; + b.title = a.title; + b.keywords = d.keywords; + b["abstract"] = d["abstract"]; + b.logo = d.logo; + b.descriptionURL = d.descriptionURL; + b.contactInformation = d.contactInformation; + b.maxExtent = a.maxExtent + } else OpenLayers.Util.applyDefaults(b, a), void 0 != + b.layers && delete b.layers; + void 0 == b.layersContext && (b.layersContext = []); + if (void 0 != c && OpenLayers.Util.isArray(c)) { + a = 0; + for (d = c.length; a < d; a++) { + var e = c[a]; + e instanceof OpenLayers.Layer.WMS && b.layersContext.push(this.layerToContext(e)) + } + } + return b + }, + CLASS_NAME: "OpenLayers.Format.WMC" +}); +OpenLayers.Format.WMC.v1 = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + ol: "http://openlayers.org/context", + wmc: "http://www.opengis.net/context", + sld: "http://www.opengis.net/sld", + xlink: "http://www.w3.org/1999/xlink", + xsi: "http://www.w3.org/2001/XMLSchema-instance" + }, + schemaLocation: "", + getNamespacePrefix: function(a) { + var b = null; + if (null == a) b = this.namespaces[this.defaultPrefix]; + else + for (b in this.namespaces) + if (this.namespaces[b] == a) break; return b + }, + defaultPrefix: "wmc", + rootPrefix: null, + defaultStyleName: "", + defaultStyleTitle: "Default", + initialize: function(a) { + OpenLayers.Format.XML.prototype.initialize.apply(this, [a]) + }, + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + a = a.documentElement; + this.rootPrefix = a.prefix; + var b = { + version: a.getAttribute("version") + }; + this.runChildNodes(b, a); + return b + }, + runChildNodes: function(a, b) { + for (var c = b.childNodes, d, e, f, g = 0, h = c.length; g < h; ++g) d = c[g], 1 == d.nodeType && (e = this.getNamespacePrefix(d.namespaceURI), f = d.nodeName.split(":").pop(), (e = this["read_" + e + "_" + f]) && e.apply(this, [a, d])) + }, + read_wmc_General: function(a, b) { + this.runChildNodes(a, b) + }, + read_wmc_BoundingBox: function(a, b) { + a.projection = b.getAttribute("SRS"); + a.bounds = new OpenLayers.Bounds(b.getAttribute("minx"), b.getAttribute("miny"), b.getAttribute("maxx"), b.getAttribute("maxy")) + }, + read_wmc_LayerList: function(a, b) { + a.layersContext = []; + this.runChildNodes(a, b) + }, + read_wmc_Layer: function(a, b) { + var c = { + visibility: "1" != b.getAttribute("hidden"), + queryable: "1" == b.getAttribute("queryable"), + formats: [], + styles: [], + metadata: {} + }; + this.runChildNodes(c, b); + a.layersContext.push(c) + }, + read_wmc_Extension: function(a, b) { + this.runChildNodes(a, b) + }, + read_ol_units: function(a, b) { + a.units = this.getChildValue(b) + }, + read_ol_maxExtent: function(a, b) { + var c = new OpenLayers.Bounds(b.getAttribute("minx"), b.getAttribute("miny"), b.getAttribute("maxx"), b.getAttribute("maxy")); + a.maxExtent = c + }, + read_ol_transparent: function(a, b) { + a.transparent = this.getChildValue(b) + }, + read_ol_numZoomLevels: function(a, b) { + a.numZoomLevels = parseInt(this.getChildValue(b)) + }, + read_ol_opacity: function(a, b) { + a.opacity = parseFloat(this.getChildValue(b)) + }, + read_ol_singleTile: function(a, b) { + a.singleTile = "true" == this.getChildValue(b) + }, + read_ol_tileSize: function(a, b) { + var c = { + width: b.getAttribute("width"), + height: b.getAttribute("height") + }; + a.tileSize = c + }, + read_ol_isBaseLayer: function(a, b) { + a.isBaseLayer = "true" == this.getChildValue(b) + }, + read_ol_displayInLayerSwitcher: function(a, b) { + a.displayInLayerSwitcher = "true" == this.getChildValue(b) + }, + read_wmc_Server: function(a, b) { + a.version = b.getAttribute("version"); + a.url = this.getOnlineResource_href(b); + a.metadata.servertitle = b.getAttribute("title") + }, + read_wmc_FormatList: function(a, b) { + this.runChildNodes(a, b) + }, + read_wmc_Format: function(a, b) { + var c = { + value: this.getChildValue(b) + }; + "1" == b.getAttribute("current") && (c.current = !0); + a.formats.push(c) + }, + read_wmc_StyleList: function(a, b) { + this.runChildNodes(a, b) + }, + read_wmc_Style: function(a, b) { + var c = {}; + this.runChildNodes(c, b); + "1" == b.getAttribute("current") && (c.current = !0); + a.styles.push(c) + }, + read_wmc_SLD: function(a, b) { + this.runChildNodes(a, + b) + }, + read_sld_StyledLayerDescriptor: function(a, b) { + var c = OpenLayers.Format.XML.prototype.write.apply(this, [b]); + a.body = c + }, + read_sld_FeatureTypeStyle: function(a, b) { + var c = OpenLayers.Format.XML.prototype.write.apply(this, [b]); + a.body = c + }, + read_wmc_OnlineResource: function(a, b) { + a.href = this.getAttributeNS(b, this.namespaces.xlink, "href") + }, + read_wmc_Name: function(a, b) { + var c = this.getChildValue(b); + c && (a.name = c) + }, + read_wmc_Title: function(a, b) { + var c = this.getChildValue(b); + c && (a.title = c) + }, + read_wmc_MetadataURL: function(a, + b) { + a.metadataURL = this.getOnlineResource_href(b) + }, + read_wmc_KeywordList: function(a, b) { + a.keywords = []; + this.runChildNodes(a.keywords, b) + }, + read_wmc_Keyword: function(a, b) { + a.push(this.getChildValue(b)) + }, + read_wmc_Abstract: function(a, b) { + var c = this.getChildValue(b); + c && (a["abstract"] = c) + }, + read_wmc_LogoURL: function(a, b) { + a.logo = { + width: b.getAttribute("width"), + height: b.getAttribute("height"), + format: b.getAttribute("format"), + href: this.getOnlineResource_href(b) + } + }, + read_wmc_DescriptionURL: function(a, b) { + a.descriptionURL = + this.getOnlineResource_href(b) + }, + read_wmc_ContactInformation: function(a, b) { + var c = {}; + this.runChildNodes(c, b); + a.contactInformation = c + }, + read_wmc_ContactPersonPrimary: function(a, b) { + var c = {}; + this.runChildNodes(c, b); + a.personPrimary = c + }, + read_wmc_ContactPerson: function(a, b) { + var c = this.getChildValue(b); + c && (a.person = c) + }, + read_wmc_ContactOrganization: function(a, b) { + var c = this.getChildValue(b); + c && (a.organization = c) + }, + read_wmc_ContactPosition: function(a, b) { + var c = this.getChildValue(b); + c && (a.position = c) + }, + read_wmc_ContactAddress: function(a, + b) { + var c = {}; + this.runChildNodes(c, b); + a.contactAddress = c + }, + read_wmc_AddressType: function(a, b) { + var c = this.getChildValue(b); + c && (a.type = c) + }, + read_wmc_Address: function(a, b) { + var c = this.getChildValue(b); + c && (a.address = c) + }, + read_wmc_City: function(a, b) { + var c = this.getChildValue(b); + c && (a.city = c) + }, + read_wmc_StateOrProvince: function(a, b) { + var c = this.getChildValue(b); + c && (a.stateOrProvince = c) + }, + read_wmc_PostCode: function(a, b) { + var c = this.getChildValue(b); + c && (a.postcode = c) + }, + read_wmc_Country: function(a, b) { + var c = this.getChildValue(b); + c && (a.country = c) + }, + read_wmc_ContactVoiceTelephone: function(a, b) { + var c = this.getChildValue(b); + c && (a.phone = c) + }, + read_wmc_ContactFacsimileTelephone: function(a, b) { + var c = this.getChildValue(b); + c && (a.fax = c) + }, + read_wmc_ContactElectronicMailAddress: function(a, b) { + var c = this.getChildValue(b); + c && (a.email = c) + }, + read_wmc_DataURL: function(a, b) { + a.dataURL = this.getOnlineResource_href(b) + }, + read_wmc_LegendURL: function(a, b) { + var c = { + width: b.getAttribute("width"), + height: b.getAttribute("height"), + format: b.getAttribute("format"), + href: this.getOnlineResource_href(b) + }; + a.legend = c + }, + read_wmc_DimensionList: function(a, b) { + a.dimensions = {}; + this.runChildNodes(a.dimensions, b) + }, + read_wmc_Dimension: function(a, b) { + var c = { + name: b.getAttribute("name").toLowerCase(), + units: b.getAttribute("units") || "", + unitSymbol: b.getAttribute("unitSymbol") || "", + userValue: b.getAttribute("userValue") || "", + nearestValue: "1" === b.getAttribute("nearestValue"), + multipleValues: "1" === b.getAttribute("multipleValues"), + current: "1" === b.getAttribute("current"), + "default": b.getAttribute("default") || + "" + }, + d = this.getChildValue(b); + c.values = d.split(","); + a[c.name] = c + }, + write: function(a, b) { + var c = this.createElementDefaultNS("ViewContext"); + this.setAttributes(c, { + version: this.VERSION, + id: b && "string" == typeof b.id ? b.id : OpenLayers.Util.createUniqueID("OpenLayers_Context_") + }); + this.setAttributeNS(c, this.namespaces.xsi, "xsi:schemaLocation", this.schemaLocation); + c.appendChild(this.write_wmc_General(a)); + c.appendChild(this.write_wmc_LayerList(a)); + return OpenLayers.Format.XML.prototype.write.apply(this, [c]) + }, + createElementDefaultNS: function(a, + b, c) { + a = this.createElementNS(this.namespaces[this.defaultPrefix], a); + b && a.appendChild(this.createTextNode(b)); + c && this.setAttributes(a, c); + return a + }, + setAttributes: function(a, b) { + var c, d; + for (d in b) c = b[d].toString(), c.match(/[A-Z]/) ? this.setAttributeNS(a, null, d, c) : a.setAttribute(d, c) + }, + write_wmc_General: function(a) { + var b = this.createElementDefaultNS("General"); + a.size && b.appendChild(this.createElementDefaultNS("Window", null, { + width: a.size.w, + height: a.size.h + })); + var c = a.bounds; + b.appendChild(this.createElementDefaultNS("BoundingBox", + null, { + minx: c.left.toPrecision(18), + miny: c.bottom.toPrecision(18), + maxx: c.right.toPrecision(18), + maxy: c.top.toPrecision(18), + SRS: a.projection + })); + b.appendChild(this.createElementDefaultNS("Title", a.title)); + a.keywords && b.appendChild(this.write_wmc_KeywordList(a.keywords)); + a["abstract"] && b.appendChild(this.createElementDefaultNS("Abstract", a["abstract"])); + a.logo && b.appendChild(this.write_wmc_URLType("LogoURL", a.logo.href, a.logo)); + a.descriptionURL && b.appendChild(this.write_wmc_URLType("DescriptionURL", a.descriptionURL)); + a.contactInformation && b.appendChild(this.write_wmc_ContactInformation(a.contactInformation)); + b.appendChild(this.write_ol_MapExtension(a)); + return b + }, + write_wmc_KeywordList: function(a) { + for (var b = this.createElementDefaultNS("KeywordList"), c = 0, d = a.length; c < d; c++) b.appendChild(this.createElementDefaultNS("Keyword", a[c])); + return b + }, + write_wmc_ContactInformation: function(a) { + var b = this.createElementDefaultNS("ContactInformation"); + a.personPrimary && b.appendChild(this.write_wmc_ContactPersonPrimary(a.personPrimary)); + a.position && b.appendChild(this.createElementDefaultNS("ContactPosition", a.position)); + a.contactAddress && b.appendChild(this.write_wmc_ContactAddress(a.contactAddress)); + a.phone && b.appendChild(this.createElementDefaultNS("ContactVoiceTelephone", a.phone)); + a.fax && b.appendChild(this.createElementDefaultNS("ContactFacsimileTelephone", a.fax)); + a.email && b.appendChild(this.createElementDefaultNS("ContactElectronicMailAddress", a.email)); + return b + }, + write_wmc_ContactPersonPrimary: function(a) { + var b = this.createElementDefaultNS("ContactPersonPrimary"); + a.person && b.appendChild(this.createElementDefaultNS("ContactPerson", a.person)); + a.organization && b.appendChild(this.createElementDefaultNS("ContactOrganization", a.organization)); + return b + }, + write_wmc_ContactAddress: function(a) { + var b = this.createElementDefaultNS("ContactAddress"); + a.type && b.appendChild(this.createElementDefaultNS("AddressType", a.type)); + a.address && b.appendChild(this.createElementDefaultNS("Address", a.address)); + a.city && b.appendChild(this.createElementDefaultNS("City", a.city)); + a.stateOrProvince && + b.appendChild(this.createElementDefaultNS("StateOrProvince", a.stateOrProvince)); + a.postcode && b.appendChild(this.createElementDefaultNS("PostCode", a.postcode)); + a.country && b.appendChild(this.createElementDefaultNS("Country", a.country)); + return b + }, + write_ol_MapExtension: function(a) { + var b = this.createElementDefaultNS("Extension"); + if (a = a.maxExtent) { + var c = this.createElementNS(this.namespaces.ol, "ol:maxExtent"); + this.setAttributes(c, { + minx: a.left.toPrecision(18), + miny: a.bottom.toPrecision(18), + maxx: a.right.toPrecision(18), + maxy: a.top.toPrecision(18) + }); + b.appendChild(c) + } + return b + }, + write_wmc_LayerList: function(a) { + for (var b = this.createElementDefaultNS("LayerList"), c = 0, d = a.layersContext.length; c < d; ++c) b.appendChild(this.write_wmc_Layer(a.layersContext[c])); + return b + }, + write_wmc_Layer: function(a) { + var b = this.createElementDefaultNS("Layer", null, { + queryable: a.queryable ? "1" : "0", + hidden: a.visibility ? "0" : "1" + }); + b.appendChild(this.write_wmc_Server(a)); + b.appendChild(this.createElementDefaultNS("Name", a.name)); + b.appendChild(this.createElementDefaultNS("Title", + a.title)); + a["abstract"] && b.appendChild(this.createElementDefaultNS("Abstract", a["abstract"])); + a.dataURL && b.appendChild(this.write_wmc_URLType("DataURL", a.dataURL)); + a.metadataURL && b.appendChild(this.write_wmc_URLType("MetadataURL", a.metadataURL)); + return b + }, + write_wmc_LayerExtension: function(a) { + var b = this.createElementDefaultNS("Extension"), + c = a.maxExtent, + d = this.createElementNS(this.namespaces.ol, "ol:maxExtent"); + this.setAttributes(d, { + minx: c.left.toPrecision(18), + miny: c.bottom.toPrecision(18), + maxx: c.right.toPrecision(18), + maxy: c.top.toPrecision(18) + }); + b.appendChild(d); + a.tileSize && !a.singleTile && (c = this.createElementNS(this.namespaces.ol, "ol:tileSize"), this.setAttributes(c, a.tileSize), b.appendChild(c)); + for (var c = "transparent numZoomLevels units isBaseLayer opacity displayInLayerSwitcher singleTile".split(" "), e = 0, f = c.length; e < f; ++e)(d = this.createOLPropertyNode(a, c[e])) && b.appendChild(d); + return b + }, + createOLPropertyNode: function(a, b) { + var c = null; + null != a[b] && (c = this.createElementNS(this.namespaces.ol, "ol:" + b), c.appendChild(this.createTextNode(a[b].toString()))); + return c + }, + write_wmc_Server: function(a) { + var a = a.server, + b = this.createElementDefaultNS("Server"), + c = { + service: "OGC:WMS", + version: a.version + }; + a.title && (c.title = a.title); + this.setAttributes(b, c); + b.appendChild(this.write_wmc_OnlineResource(a.url)); + return b + }, + write_wmc_URLType: function(a, b, c) { + a = this.createElementDefaultNS(a); + a.appendChild(this.write_wmc_OnlineResource(b)); + if (c) + for (var b = ["width", "height", "format"], d = 0; d < b.length; d++) b[d] in c && a.setAttribute(b[d], c[b[d]]); + return a + }, + write_wmc_DimensionList: function(a) { + var b = + this.createElementDefaultNS("DimensionList"), + c; + for (c in a.dimensions) { + var d = {}, + e = a.dimensions[c], + f; + for (f in e) d[f] = "boolean" == typeof e[f] ? Number(e[f]) : e[f]; + e = ""; + d.values && (e = d.values.join(","), delete d.values); + b.appendChild(this.createElementDefaultNS("Dimension", e, d)) + } + return b + }, + write_wmc_FormatList: function(a) { + for (var b = this.createElementDefaultNS("FormatList"), c = 0, d = a.formats.length; c < d; c++) { + var e = a.formats[c]; + b.appendChild(this.createElementDefaultNS("Format", e.value, e.current && !0 == e.current ? { + current: "1" + } : + null)) + } + return b + }, + write_wmc_StyleList: function(a) { + var b = this.createElementDefaultNS("StyleList"); + if ((a = a.styles) && OpenLayers.Util.isArray(a)) + for (var c, d = 0, e = a.length; d < e; d++) { + var f = a[d], + g = this.createElementDefaultNS("Style", null, f.current && !0 == f.current ? { + current: "1" + } : null); + f.href ? (c = this.createElementDefaultNS("SLD"), f.name && c.appendChild(this.createElementDefaultNS("Name", f.name)), f.title && c.appendChild(this.createElementDefaultNS("Title", f.title)), f.legend && c.appendChild(this.write_wmc_URLType("LegendURL", + f.legend.href, f.legend)), f = this.write_wmc_OnlineResource(f.href), c.appendChild(f), g.appendChild(c)) : f.body ? (c = this.createElementDefaultNS("SLD"), f.name && c.appendChild(this.createElementDefaultNS("Name", f.name)), f.title && c.appendChild(this.createElementDefaultNS("Title", f.title)), f.legend && c.appendChild(this.write_wmc_URLType("LegendURL", f.legend.href, f.legend)), f = OpenLayers.Format.XML.prototype.read.apply(this, [f.body]).documentElement, c.ownerDocument && c.ownerDocument.importNode && (f = c.ownerDocument.importNode(f, !0)), c.appendChild(f), g.appendChild(c)) : (g.appendChild(this.createElementDefaultNS("Name", f.name)), g.appendChild(this.createElementDefaultNS("Title", f.title)), f["abstract"] && g.appendChild(this.createElementDefaultNS("Abstract", f["abstract"])), f.legend && g.appendChild(this.write_wmc_URLType("LegendURL", f.legend.href, f.legend))); + b.appendChild(g) + } + return b + }, + write_wmc_OnlineResource: function(a) { + var b = this.createElementDefaultNS("OnlineResource"); + this.setAttributeNS(b, this.namespaces.xlink, "xlink:type", + "simple"); + this.setAttributeNS(b, this.namespaces.xlink, "xlink:href", a); + return b + }, + getOnlineResource_href: function(a) { + var b = {}, + a = a.getElementsByTagName("OnlineResource"); + 0 < a.length && this.read_wmc_OnlineResource(b, a[0]); + return b.href + }, + CLASS_NAME: "OpenLayers.Format.WMC.v1" +}); +OpenLayers.Control.PanPanel = OpenLayers.Class(OpenLayers.Control.Panel, { + slideFactor: 50, + slideRatio: null, + initialize: function(a) { + OpenLayers.Control.Panel.prototype.initialize.apply(this, [a]); + a = { + slideFactor: this.slideFactor, + slideRatio: this.slideRatio + }; + this.addControls([new OpenLayers.Control.Pan(OpenLayers.Control.Pan.NORTH, a), new OpenLayers.Control.Pan(OpenLayers.Control.Pan.SOUTH, a), new OpenLayers.Control.Pan(OpenLayers.Control.Pan.EAST, a), new OpenLayers.Control.Pan(OpenLayers.Control.Pan.WEST, a)]) + }, + CLASS_NAME: "OpenLayers.Control.PanPanel" +}); +OpenLayers.Control.Attribution = OpenLayers.Class(OpenLayers.Control, { + separator: ", ", + template: "${layers}", + destroy: function() { + this.map.events.un({ + removelayer: this.updateAttribution, + addlayer: this.updateAttribution, + changelayer: this.updateAttribution, + changebaselayer: this.updateAttribution, + scope: this + }); + OpenLayers.Control.prototype.destroy.apply(this, arguments) + }, + draw: function() { + OpenLayers.Control.prototype.draw.apply(this, arguments); + this.map.events.on({ + changebaselayer: this.updateAttribution, + changelayer: this.updateAttribution, + addlayer: this.updateAttribution, + removelayer: this.updateAttribution, + scope: this + }); + this.updateAttribution(); + return this.div + }, + updateAttribution: function() { + var a = []; + if (this.map && this.map.layers) { + for (var b = 0, c = this.map.layers.length; b < c; b++) { + var d = this.map.layers[b]; + d.attribution && d.getVisibility() && -1 === OpenLayers.Util.indexOf(a, d.attribution) && a.push(d.attribution) + } + this.div.innerHTML = OpenLayers.String.format(this.template, { + layers: a.join(this.separator) + }) + } + }, + CLASS_NAME: "OpenLayers.Control.Attribution" +}); +OpenLayers.Kinetic = OpenLayers.Class({ + threshold: 0, + deceleration: 0.0035, + nbPoints: 100, + delay: 200, + points: void 0, + timerId: void 0, + initialize: function(a) { + OpenLayers.Util.extend(this, a) + }, + begin: function() { + OpenLayers.Animation.stop(this.timerId); + this.timerId = void 0; + this.points = [] + }, + update: function(a) { + this.points.unshift({ + xy: a, + tick: (new Date).getTime() + }); + this.points.length > this.nbPoints && this.points.pop() + }, + end: function(a) { + for (var b, c = (new Date).getTime(), d = 0, e = this.points.length, f; d < e; d++) { + f = this.points[d]; + if (c - + f.tick > this.delay) break; + b = f + } + if (b && (d = (new Date).getTime() - b.tick, c = Math.sqrt(Math.pow(a.x - b.xy.x, 2) + Math.pow(a.y - b.xy.y, 2)), d = c / d, !(0 == d || d < this.threshold))) return c = Math.asin((a.y - b.xy.y) / c), b.xy.x <= a.x && (c = Math.PI - c), { + speed: d, + theta: c + } + }, + move: function(a, b) { + var c = a.speed, + d = Math.cos(a.theta), + e = -Math.sin(a.theta), + f = (new Date).getTime(), + g = 0, + h = 0; + this.timerId = OpenLayers.Animation.start(OpenLayers.Function.bind(function() { + if (null != this.timerId) { + var a = (new Date).getTime() - f, + j = -this.deceleration * Math.pow(a, + 2) / 2 + c * a, + k = j * d, + j = j * e, + l, m; + l = !1; + 0 >= -this.deceleration * a + c && (OpenLayers.Animation.stop(this.timerId), this.timerId = null, l = !0); + a = k - g; + m = j - h; + g = k; + h = j; + b(a, m, l) + } + }, this)) + }, + CLASS_NAME: "OpenLayers.Kinetic" +}); +OpenLayers.Layer.GeoRSS = OpenLayers.Class(OpenLayers.Layer.Markers, { + location: null, + features: null, + formatOptions: null, + selectedFeature: null, + icon: null, + popupSize: null, + useFeedTitle: !0, + initialize: function(a, b, c) { + OpenLayers.Layer.Markers.prototype.initialize.apply(this, [a, c]); + this.location = b; + this.features = [] + }, + destroy: function() { + OpenLayers.Layer.Markers.prototype.destroy.apply(this, arguments); + this.clearFeatures(); + this.features = null + }, + loadRSS: function() { + this.loaded || (this.events.triggerEvent("loadstart"), OpenLayers.Request.GET({ + url: this.location, + success: this.parseData, + scope: this + }), this.loaded = !0) + }, + moveTo: function(a, b, c) { + OpenLayers.Layer.Markers.prototype.moveTo.apply(this, arguments); + this.visibility && !this.loaded && this.loadRSS() + }, + parseData: function(a) { + var b = a.responseXML; + if (!b || !b.documentElement) b = OpenLayers.Format.XML.prototype.read(a.responseText); + if (this.useFeedTitle) { + a = null; + try { + a = b.getElementsByTagNameNS("*", "title")[0].firstChild.nodeValue + } catch (c) { + a = b.getElementsByTagName("title")[0].firstChild.nodeValue + } + a && this.setName(a) + } + a = {}; + OpenLayers.Util.extend(a, + this.formatOptions); + this.map && !this.projection.equals(this.map.getProjectionObject()) && (a.externalProjection = this.projection, a.internalProjection = this.map.getProjectionObject()); + for (var b = (new OpenLayers.Format.GeoRSS(a)).read(b), a = 0, d = b.length; a < d; a++) { + var e = {}, + f = b[a]; + if (f.geometry) { + var g = f.attributes.title ? f.attributes.title : "Untitled", + h = f.attributes.description ? f.attributes.description : "No description.", + i = f.attributes.link ? f.attributes.link : "", + f = f.geometry.getBounds().getCenterLonLat(); + e.icon = + null == this.icon ? OpenLayers.Marker.defaultIcon() : this.icon.clone(); + e.popupSize = this.popupSize ? this.popupSize.clone() : new OpenLayers.Size(250, 120); + if (g || h) { + e.title = g; + e.description = h; + var j = '<div class="olLayerGeoRSSClose">[x]</div>', + j = j + '<div class="olLayerGeoRSSTitle">'; + i && (j += '<a class="link" href="' + i + '" target="_blank">'); + j += g; + i && (j += "</a>"); + j += "</div>"; + j += '<div style="" class="olLayerGeoRSSDescription">'; + j += h; + j += "</div>"; + e.popupContentHTML = j + } + f = new OpenLayers.Feature(this, f, e); + this.features.push(f); + e = f.createMarker(); + e.events.register("click", f, this.markerClick); + this.addMarker(e) + } + } + this.events.triggerEvent("loadend") + }, + markerClick: function(a) { + var b = this == this.layer.selectedFeature; + this.layer.selectedFeature = !b ? this : null; + for (var c = 0, d = this.layer.map.popups.length; c < d; c++) this.layer.map.removePopup(this.layer.map.popups[c]); + b || (b = this.createPopup(), OpenLayers.Event.observe(b.div, "click", OpenLayers.Function.bind(function() { + for (var a = 0, b = this.layer.map.popups.length; a < b; a++) this.layer.map.removePopup(this.layer.map.popups[a]) + }, + this)), this.layer.map.addPopup(b)); + OpenLayers.Event.stop(a) + }, + clearFeatures: function() { + if (null != this.features) + for (; 0 < this.features.length;) { + var a = this.features[0]; + OpenLayers.Util.removeItem(this.features, a); + a.destroy() + } + }, + CLASS_NAME: "OpenLayers.Layer.GeoRSS" +}); +OpenLayers.Symbolizer.Point = OpenLayers.Class(OpenLayers.Symbolizer, { + initialize: function(a) { + OpenLayers.Symbolizer.prototype.initialize.apply(this, arguments) + }, + CLASS_NAME: "OpenLayers.Symbolizer.Point" +}); +OpenLayers.Symbolizer.Line = OpenLayers.Class(OpenLayers.Symbolizer, { + initialize: function(a) { + OpenLayers.Symbolizer.prototype.initialize.apply(this, arguments) + }, + CLASS_NAME: "OpenLayers.Symbolizer.Line" +}); +OpenLayers.Symbolizer.Text = OpenLayers.Class(OpenLayers.Symbolizer, { + initialize: function(a) { + OpenLayers.Symbolizer.prototype.initialize.apply(this, arguments) + }, + CLASS_NAME: "OpenLayers.Symbolizer.Text" +}); +OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, { + namespaces: { + sld: "http://www.opengis.net/sld", + ogc: "http://www.opengis.net/ogc", + gml: "http://www.opengis.net/gml", + xlink: "http://www.w3.org/1999/xlink", + xsi: "http://www.w3.org/2001/XMLSchema-instance" + }, + defaultPrefix: "sld", + schemaLocation: null, + multipleSymbolizers: !1, + featureTypeCounter: null, + defaultSymbolizer: { + fillColor: "#808080", + fillOpacity: 1, + strokeColor: "#000000", + strokeOpacity: 1, + strokeWidth: 1, + strokeDashstyle: "solid", + pointRadius: 3, + graphicName: "square" + }, + read: function(a, b) { + var b = OpenLayers.Util.applyDefaults(b, this.options), + c = { + namedLayers: !0 === b.namedLayersAsArray ? [] : {} + }; + this.readChildNodes(a, c); + return c + }, + readers: OpenLayers.Util.applyDefaults({ + sld: { + StyledLayerDescriptor: function(a, b) { + b.version = a.getAttribute("version"); + this.readChildNodes(a, b) + }, + Name: function(a, b) { + b.name = this.getChildValue(a) + }, + Title: function(a, b) { + b.title = this.getChildValue(a) + }, + Abstract: function(a, b) { + b.description = this.getChildValue(a) + }, + NamedLayer: function(a, b) { + var c = { + userStyles: [], + namedStyles: [] + }; + this.readChildNodes(a, c); + for (var d = 0, e = c.userStyles.length; d < e; ++d) c.userStyles[d].layerName = c.name; + OpenLayers.Util.isArray(b.namedLayers) ? b.namedLayers.push(c) : b.namedLayers[c.name] = c + }, + NamedStyle: function(a, b) { + b.namedStyles.push(this.getChildName(a.firstChild)) + }, + UserStyle: function(a, b) { + var c = { + defaultsPerSymbolizer: !0, + rules: [] + }; + this.featureTypeCounter = -1; + this.readChildNodes(a, c); + this.multipleSymbolizers ? (delete c.defaultsPerSymbolizer, c = new OpenLayers.Style2(c)) : c = new OpenLayers.Style(this.defaultSymbolizer, + c); + b.userStyles.push(c) + }, + IsDefault: function(a, b) { + "1" == this.getChildValue(a) && (b.isDefault = !0) + }, + FeatureTypeStyle: function(a, b) { + ++this.featureTypeCounter; + var c = { + rules: this.multipleSymbolizers ? b.rules : [] + }; + this.readChildNodes(a, c); + this.multipleSymbolizers || (b.rules = c.rules) + }, + Rule: function(a, b) { + var c; + this.multipleSymbolizers && (c = { + symbolizers: [] + }); + c = new OpenLayers.Rule(c); + this.readChildNodes(a, c); + b.rules.push(c) + }, + ElseFilter: function(a, b) { + b.elseFilter = !0 + }, + MinScaleDenominator: function(a, b) { + b.minScaleDenominator = + parseFloat(this.getChildValue(a)) + }, + MaxScaleDenominator: function(a, b) { + b.maxScaleDenominator = parseFloat(this.getChildValue(a)) + }, + TextSymbolizer: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + this.multipleSymbolizers ? (c.zIndex = this.featureTypeCounter, b.symbolizers.push(new OpenLayers.Symbolizer.Text(c))) : b.symbolizer.Text = OpenLayers.Util.applyDefaults(c, b.symbolizer.Text) + }, + LabelPlacement: function(a, b) { + this.readChildNodes(a, b) + }, + PointPlacement: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + c.labelRotation = + c.rotation; + delete c.rotation; + var d, e = b.labelAnchorPointX, + f = b.labelAnchorPointY; + e <= 1 / 3 ? d = "l" : e > 1 / 3 && e < 2 / 3 ? d = "c" : e >= 2 / 3 && (d = "r"); + f <= 1 / 3 ? d += "b" : f > 1 / 3 && f < 2 / 3 ? d += "m" : f >= 2 / 3 && (d += "t"); + c.labelAlign = d; + OpenLayers.Util.applyDefaults(b, c) + }, + AnchorPoint: function(a, b) { + this.readChildNodes(a, b) + }, + AnchorPointX: function(a, b) { + var c = this.readers.ogc._expression.call(this, a); + c && (b.labelAnchorPointX = c) + }, + AnchorPointY: function(a, b) { + var c = this.readers.ogc._expression.call(this, a); + c && (b.labelAnchorPointY = c) + }, + Displacement: function(a, + b) { + this.readChildNodes(a, b) + }, + DisplacementX: function(a, b) { + var c = this.readers.ogc._expression.call(this, a); + c && (b.labelXOffset = c) + }, + DisplacementY: function(a, b) { + var c = this.readers.ogc._expression.call(this, a); + c && (b.labelYOffset = c) + }, + LinePlacement: function(a, b) { + this.readChildNodes(a, b) + }, + PerpendicularOffset: function(a, b) { + var c = this.readers.ogc._expression.call(this, a); + c && (b.labelPerpendicularOffset = c) + }, + Label: function(a, b) { + var c = this.readers.ogc._expression.call(this, a); + c && (b.label = c) + }, + Font: function(a, b) { + this.readChildNodes(a, + b) + }, + Halo: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + b.haloRadius = c.haloRadius; + b.haloColor = c.fillColor; + b.haloOpacity = c.fillOpacity + }, + Radius: function(a, b) { + var c = this.readers.ogc._expression.call(this, a); + null != c && (b.haloRadius = c) + }, + RasterSymbolizer: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + this.multipleSymbolizers ? (c.zIndex = this.featureTypeCounter, b.symbolizers.push(new OpenLayers.Symbolizer.Raster(c))) : b.symbolizer.Raster = OpenLayers.Util.applyDefaults(c, b.symbolizer.Raster) + }, + Geometry: function(a, + b) { + b.geometry = {}; + this.readChildNodes(a, b.geometry) + }, + ColorMap: function(a, b) { + b.colorMap = []; + this.readChildNodes(a, b.colorMap) + }, + ColorMapEntry: function(a, b) { + var c = a.getAttribute("quantity"), + d = a.getAttribute("opacity"); + b.push({ + color: a.getAttribute("color"), + quantity: null !== c ? parseFloat(c) : void 0, + label: a.getAttribute("label") || void 0, + opacity: null !== d ? parseFloat(d) : void 0 + }) + }, + LineSymbolizer: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + this.multipleSymbolizers ? (c.zIndex = this.featureTypeCounter, b.symbolizers.push(new OpenLayers.Symbolizer.Line(c))) : + b.symbolizer.Line = OpenLayers.Util.applyDefaults(c, b.symbolizer.Line) + }, + PolygonSymbolizer: function(a, b) { + var c = { + fill: !1, + stroke: !1 + }; + this.multipleSymbolizers || (c = b.symbolizer.Polygon || c); + this.readChildNodes(a, c); + this.multipleSymbolizers ? (c.zIndex = this.featureTypeCounter, b.symbolizers.push(new OpenLayers.Symbolizer.Polygon(c))) : b.symbolizer.Polygon = c + }, + PointSymbolizer: function(a, b) { + var c = { + fill: !1, + stroke: !1, + graphic: !1 + }; + this.multipleSymbolizers || (c = b.symbolizer.Point || c); + this.readChildNodes(a, c); + this.multipleSymbolizers ? + (c.zIndex = this.featureTypeCounter, b.symbolizers.push(new OpenLayers.Symbolizer.Point(c))) : b.symbolizer.Point = c + }, + Stroke: function(a, b) { + b.stroke = !0; + this.readChildNodes(a, b) + }, + Fill: function(a, b) { + b.fill = !0; + this.readChildNodes(a, b) + }, + CssParameter: function(a, b) { + var c = a.getAttribute("name"), + d = this.cssMap[c]; + b.label && ("fill" === c ? d = "fontColor" : "fill-opacity" === c && (d = "fontOpacity")); + d && (c = this.readers.ogc._expression.call(this, a)) && (b[d] = c) + }, + Graphic: function(a, b) { + b.graphic = !0; + var c = {}; + this.readChildNodes(a, c); + for (var d = "stroke strokeColor strokeWidth strokeOpacity strokeLinecap fill fillColor fillOpacity graphicName rotation graphicFormat".split(" "), e, f, g = 0, h = d.length; g < h; ++g) e = d[g], f = c[e], void 0 != f && (b[e] = f); + void 0 != c.opacity && (b.graphicOpacity = c.opacity); + void 0 != c.size && (isNaN(c.size / 2) ? b.graphicWidth = c.size : b.pointRadius = c.size / 2); + void 0 != c.href && (b.externalGraphic = c.href); + void 0 != c.rotation && (b.rotation = c.rotation) + }, + ExternalGraphic: function(a, b) { + this.readChildNodes(a, b) + }, + Mark: function(a, b) { + this.readChildNodes(a, + b) + }, + WellKnownName: function(a, b) { + b.graphicName = this.getChildValue(a) + }, + Opacity: function(a, b) { + var c = this.readers.ogc._expression.call(this, a); + c && (b.opacity = c) + }, + Size: function(a, b) { + var c = this.readers.ogc._expression.call(this, a); + c && (b.size = c) + }, + Rotation: function(a, b) { + var c = this.readers.ogc._expression.call(this, a); + c && (b.rotation = c) + }, + OnlineResource: function(a, b) { + b.href = this.getAttributeNS(a, this.namespaces.xlink, "href") + }, + Format: function(a, b) { + b.graphicFormat = this.getChildValue(a) + } + } + }, OpenLayers.Format.Filter.v1_0_0.prototype.readers), + cssMap: { + stroke: "strokeColor", + "stroke-opacity": "strokeOpacity", + "stroke-width": "strokeWidth", + "stroke-linecap": "strokeLinecap", + "stroke-dasharray": "strokeDashstyle", + fill: "fillColor", + "fill-opacity": "fillOpacity", + "font-family": "fontFamily", + "font-size": "fontSize", + "font-weight": "fontWeight", + "font-style": "fontStyle" + }, + getCssProperty: function(a) { + var b = null, + c; + for (c in this.cssMap) + if (this.cssMap[c] == a) { + b = c; + break + } + return b + }, + getGraphicFormat: function(a) { + var b, c; + for (c in this.graphicFormats) + if (this.graphicFormats[c].test(a)) { + b = + c; + break + } + return b || this.defaultGraphicFormat + }, + defaultGraphicFormat: "image/png", + graphicFormats: { + "image/jpeg": /\.jpe?g$/i, + "image/gif": /\.gif$/i, + "image/png": /\.png$/i + }, + write: function(a) { + return this.writers.sld.StyledLayerDescriptor.apply(this, [a]) + }, + writers: OpenLayers.Util.applyDefaults({ + sld: { + _OGCExpression: function(a, b) { + var c = this.createElementNSPlus(a), + d = "string" == typeof b ? b.split("${") : [b]; + c.appendChild(this.createTextNode(d[0])); + for (var e, f, g = 1, h = d.length; g < h; g++) e = d[g], f = e.indexOf("}"), 0 < f ? (this.writeNode("ogc:PropertyName", { + property: e.substring(0, f) + }, c), c.appendChild(this.createTextNode(e.substring(++f)))) : c.appendChild(this.createTextNode("${" + e)); + return c + }, + StyledLayerDescriptor: function(a) { + var b = this.createElementNSPlus("sld:StyledLayerDescriptor", { + attributes: { + version: this.VERSION, + "xsi:schemaLocation": this.schemaLocation + } + }); + b.setAttribute("xmlns:ogc", this.namespaces.ogc); + b.setAttribute("xmlns:gml", this.namespaces.gml); + a.name && this.writeNode("Name", a.name, b); + a.title && this.writeNode("Title", a.title, b); + a.description && + this.writeNode("Abstract", a.description, b); + if (OpenLayers.Util.isArray(a.namedLayers)) + for (var c = 0, d = a.namedLayers.length; c < d; ++c) this.writeNode("NamedLayer", a.namedLayers[c], b); + else + for (c in a.namedLayers) this.writeNode("NamedLayer", a.namedLayers[c], b); + return b + }, + Name: function(a) { + return this.createElementNSPlus("sld:Name", { + value: a + }) + }, + Title: function(a) { + return this.createElementNSPlus("sld:Title", { + value: a + }) + }, + Abstract: function(a) { + return this.createElementNSPlus("sld:Abstract", { + value: a + }) + }, + NamedLayer: function(a) { + var b = + this.createElementNSPlus("sld:NamedLayer"); + this.writeNode("Name", a.name, b); + if (a.namedStyles) + for (var c = 0, d = a.namedStyles.length; c < d; ++c) this.writeNode("NamedStyle", a.namedStyles[c], b); + if (a.userStyles) { + c = 0; + for (d = a.userStyles.length; c < d; ++c) this.writeNode("UserStyle", a.userStyles[c], b) + } + return b + }, + NamedStyle: function(a) { + var b = this.createElementNSPlus("sld:NamedStyle"); + this.writeNode("Name", a, b); + return b + }, + UserStyle: function(a) { + var b = this.createElementNSPlus("sld:UserStyle"); + a.name && this.writeNode("Name", + a.name, b); + a.title && this.writeNode("Title", a.title, b); + a.description && this.writeNode("Abstract", a.description, b); + a.isDefault && this.writeNode("IsDefault", a.isDefault, b); + if (this.multipleSymbolizers && a.rules) { + for (var c = { + "0": [] + }, d = [0], e, f, g, h, i, j = 0, k = a.rules.length; j < k; ++j) + if (e = a.rules[j], e.symbolizers) { + f = {}; + for (var l = 0, m = e.symbolizers.length; l < m; ++l) g = e.symbolizers[l], h = g.zIndex, h in f || (i = e.clone(), i.symbolizers = [], f[h] = i), f[h].symbolizers.push(g.clone()); + for (h in f) h in c || (d.push(h), c[h] = []), c[h].push(f[h]) + } else c[0].push(e.clone()); + d.sort(); + j = 0; + for (k = d.length; j < k; ++j) e = c[d[j]], 0 < e.length && (i = a.clone(), i.rules = c[d[j]], this.writeNode("FeatureTypeStyle", i, b)) + } else this.writeNode("FeatureTypeStyle", a, b); + return b + }, + IsDefault: function(a) { + return this.createElementNSPlus("sld:IsDefault", { + value: a ? "1" : "0" + }) + }, + FeatureTypeStyle: function(a) { + for (var b = this.createElementNSPlus("sld:FeatureTypeStyle"), c = 0, d = a.rules.length; c < d; ++c) this.writeNode("Rule", a.rules[c], b); + return b + }, + Rule: function(a) { + var b = this.createElementNSPlus("sld:Rule"); + a.name && + this.writeNode("Name", a.name, b); + a.title && this.writeNode("Title", a.title, b); + a.description && this.writeNode("Abstract", a.description, b); + a.elseFilter ? this.writeNode("ElseFilter", null, b) : a.filter && this.writeNode("ogc:Filter", a.filter, b); + void 0 != a.minScaleDenominator && this.writeNode("MinScaleDenominator", a.minScaleDenominator, b); + void 0 != a.maxScaleDenominator && this.writeNode("MaxScaleDenominator", a.maxScaleDenominator, b); + var c, d; + if (this.multipleSymbolizers && a.symbolizers) + for (var e = 0, f = a.symbolizers.length; e < + f; ++e) d = a.symbolizers[e], c = d.CLASS_NAME.split(".").pop(), this.writeNode(c + "Symbolizer", d, b); + else + for (var f = OpenLayers.Style.SYMBOLIZER_PREFIXES, e = 0, g = f.length; e < g; ++e) c = f[e], (d = a.symbolizer[c]) && this.writeNode(c + "Symbolizer", d, b); + return b + }, + ElseFilter: function() { + return this.createElementNSPlus("sld:ElseFilter") + }, + MinScaleDenominator: function(a) { + return this.createElementNSPlus("sld:MinScaleDenominator", { + value: a + }) + }, + MaxScaleDenominator: function(a) { + return this.createElementNSPlus("sld:MaxScaleDenominator", { + value: a + }) + }, + LineSymbolizer: function(a) { + var b = this.createElementNSPlus("sld:LineSymbolizer"); + this.writeNode("Stroke", a, b); + return b + }, + Stroke: function(a) { + var b = this.createElementNSPlus("sld:Stroke"); + void 0 != a.strokeColor && this.writeNode("CssParameter", { + symbolizer: a, + key: "strokeColor" + }, b); + void 0 != a.strokeOpacity && this.writeNode("CssParameter", { + symbolizer: a, + key: "strokeOpacity" + }, b); + void 0 != a.strokeWidth && this.writeNode("CssParameter", { + symbolizer: a, + key: "strokeWidth" + }, b); + void 0 != a.strokeDashstyle && "solid" !== + a.strokeDashstyle && this.writeNode("CssParameter", { + symbolizer: a, + key: "strokeDashstyle" + }, b); + void 0 != a.strokeLinecap && this.writeNode("CssParameter", { + symbolizer: a, + key: "strokeLinecap" + }, b); + return b + }, + CssParameter: function(a) { + return this.createElementNSPlus("sld:CssParameter", { + attributes: { + name: this.getCssProperty(a.key) + }, + value: a.symbolizer[a.key] + }) + }, + TextSymbolizer: function(a) { + var b = this.createElementNSPlus("sld:TextSymbolizer"); + null != a.label && this.writeNode("Label", a.label, b); + (null != a.fontFamily || null != a.fontSize || + null != a.fontWeight || null != a.fontStyle) && this.writeNode("Font", a, b); + (null != a.labelAnchorPointX || null != a.labelAnchorPointY || null != a.labelAlign || null != a.labelXOffset || null != a.labelYOffset || null != a.labelRotation || null != a.labelPerpendicularOffset) && this.writeNode("LabelPlacement", a, b); + (null != a.haloRadius || null != a.haloColor || null != a.haloOpacity) && this.writeNode("Halo", a, b); + (null != a.fontColor || null != a.fontOpacity) && this.writeNode("Fill", { + fillColor: a.fontColor, + fillOpacity: a.fontOpacity + }, b); + return b + }, + LabelPlacement: function(a) { + var b = + this.createElementNSPlus("sld:LabelPlacement"); + (null != a.labelAnchorPointX || null != a.labelAnchorPointY || null != a.labelAlign || null != a.labelXOffset || null != a.labelYOffset || null != a.labelRotation) && null == a.labelPerpendicularOffset && this.writeNode("PointPlacement", a, b); + null != a.labelPerpendicularOffset && this.writeNode("LinePlacement", a, b); + return b + }, + LinePlacement: function(a) { + var b = this.createElementNSPlus("sld:LinePlacement"); + this.writeNode("PerpendicularOffset", a.labelPerpendicularOffset, b); + return b + }, + PerpendicularOffset: function(a) { + return this.createElementNSPlus("sld:PerpendicularOffset", { + value: a + }) + }, + PointPlacement: function(a) { + var b = this.createElementNSPlus("sld:PointPlacement"); + (null != a.labelAnchorPointX || null != a.labelAnchorPointY || null != a.labelAlign) && this.writeNode("AnchorPoint", a, b); + (null != a.labelXOffset || null != a.labelYOffset) && this.writeNode("Displacement", a, b); + null != a.labelRotation && this.writeNode("Rotation", a.labelRotation, b); + return b + }, + AnchorPoint: function(a) { + var b = this.createElementNSPlus("sld:AnchorPoint"), + c = a.labelAnchorPointX, + d = a.labelAnchorPointY; + null != c && this.writeNode("AnchorPointX", + c, b); + null != d && this.writeNode("AnchorPointY", d, b); + if (null == c && null == d) { + var e = a.labelAlign.substr(0, 1), + a = a.labelAlign.substr(1, 1); + "l" === e ? c = 0 : "c" === e ? c = 0.5 : "r" === e && (c = 1); + "b" === a ? d = 0 : "m" === a ? d = 0.5 : "t" === a && (d = 1); + this.writeNode("AnchorPointX", c, b); + this.writeNode("AnchorPointY", d, b) + } + return b + }, + AnchorPointX: function(a) { + return this.createElementNSPlus("sld:AnchorPointX", { + value: a + }) + }, + AnchorPointY: function(a) { + return this.createElementNSPlus("sld:AnchorPointY", { + value: a + }) + }, + Displacement: function(a) { + var b = this.createElementNSPlus("sld:Displacement"); + null != a.labelXOffset && this.writeNode("DisplacementX", a.labelXOffset, b); + null != a.labelYOffset && this.writeNode("DisplacementY", a.labelYOffset, b); + return b + }, + DisplacementX: function(a) { + return this.createElementNSPlus("sld:DisplacementX", { + value: a + }) + }, + DisplacementY: function(a) { + return this.createElementNSPlus("sld:DisplacementY", { + value: a + }) + }, + Font: function(a) { + var b = this.createElementNSPlus("sld:Font"); + a.fontFamily && this.writeNode("CssParameter", { + symbolizer: a, + key: "fontFamily" + }, b); + a.fontSize && this.writeNode("CssParameter", { + symbolizer: a, + key: "fontSize" + }, b); + a.fontWeight && this.writeNode("CssParameter", { + symbolizer: a, + key: "fontWeight" + }, b); + a.fontStyle && this.writeNode("CssParameter", { + symbolizer: a, + key: "fontStyle" + }, b); + return b + }, + Label: function(a) { + return this.writers.sld._OGCExpression.call(this, "sld:Label", a) + }, + Halo: function(a) { + var b = this.createElementNSPlus("sld:Halo"); + a.haloRadius && this.writeNode("Radius", a.haloRadius, b); + (a.haloColor || a.haloOpacity) && this.writeNode("Fill", { + fillColor: a.haloColor, + fillOpacity: a.haloOpacity + }, b); + return b + }, + Radius: function(a) { + return this.createElementNSPlus("sld:Radius", { + value: a + }) + }, + RasterSymbolizer: function(a) { + var b = this.createElementNSPlus("sld:RasterSymbolizer"); + a.geometry && this.writeNode("Geometry", a.geometry, b); + a.opacity && this.writeNode("Opacity", a.opacity, b); + a.colorMap && this.writeNode("ColorMap", a.colorMap, b); + return b + }, + Geometry: function(a) { + var b = this.createElementNSPlus("sld:Geometry"); + a.property && this.writeNode("ogc:PropertyName", a, b); + return b + }, + ColorMap: function(a) { + for (var b = this.createElementNSPlus("sld:ColorMap"), + c = 0, d = a.length; c < d; ++c) this.writeNode("ColorMapEntry", a[c], b); + return b + }, + ColorMapEntry: function(a) { + var b = this.createElementNSPlus("sld:ColorMapEntry"); + b.setAttribute("color", a.color); + void 0 !== a.opacity && b.setAttribute("opacity", parseFloat(a.opacity)); + void 0 !== a.quantity && b.setAttribute("quantity", parseFloat(a.quantity)); + void 0 !== a.label && b.setAttribute("label", a.label); + return b + }, + PolygonSymbolizer: function(a) { + var b = this.createElementNSPlus("sld:PolygonSymbolizer"); + !1 !== a.fill && this.writeNode("Fill", + a, b); + !1 !== a.stroke && this.writeNode("Stroke", a, b); + return b + }, + Fill: function(a) { + var b = this.createElementNSPlus("sld:Fill"); + a.fillColor && this.writeNode("CssParameter", { + symbolizer: a, + key: "fillColor" + }, b); + null != a.fillOpacity && this.writeNode("CssParameter", { + symbolizer: a, + key: "fillOpacity" + }, b); + return b + }, + PointSymbolizer: function(a) { + var b = this.createElementNSPlus("sld:PointSymbolizer"); + this.writeNode("Graphic", a, b); + return b + }, + Graphic: function(a) { + var b = this.createElementNSPlus("sld:Graphic"); + void 0 != a.externalGraphic ? + this.writeNode("ExternalGraphic", a, b) : this.writeNode("Mark", a, b); + void 0 != a.graphicOpacity && this.writeNode("Opacity", a.graphicOpacity, b); + void 0 != a.pointRadius ? this.writeNode("Size", 2 * a.pointRadius, b) : void 0 != a.graphicWidth && this.writeNode("Size", a.graphicWidth, b); + void 0 != a.rotation && this.writeNode("Rotation", a.rotation, b); + return b + }, + ExternalGraphic: function(a) { + var b = this.createElementNSPlus("sld:ExternalGraphic"); + this.writeNode("OnlineResource", a.externalGraphic, b); + this.writeNode("Format", a.graphicFormat || + this.getGraphicFormat(a.externalGraphic), b); + return b + }, + Mark: function(a) { + var b = this.createElementNSPlus("sld:Mark"); + a.graphicName && this.writeNode("WellKnownName", a.graphicName, b); + !1 !== a.fill && this.writeNode("Fill", a, b); + !1 !== a.stroke && this.writeNode("Stroke", a, b); + return b + }, + WellKnownName: function(a) { + return this.createElementNSPlus("sld:WellKnownName", { + value: a + }) + }, + Opacity: function(a) { + return this.createElementNSPlus("sld:Opacity", { + value: a + }) + }, + Size: function(a) { + return this.writers.sld._OGCExpression.call(this, + "sld:Size", a) + }, + Rotation: function(a) { + return this.createElementNSPlus("sld:Rotation", { + value: a + }) + }, + OnlineResource: function(a) { + return this.createElementNSPlus("sld:OnlineResource", { + attributes: { + "xlink:type": "simple", + "xlink:href": a + } + }) + }, + Format: function(a) { + return this.createElementNSPlus("sld:Format", { + value: a + }) + } + } + }, OpenLayers.Format.Filter.v1_0_0.prototype.writers), + CLASS_NAME: "OpenLayers.Format.SLD.v1" +}); +OpenLayers.Layer.WMS = OpenLayers.Class(OpenLayers.Layer.Grid, { + DEFAULT_PARAMS: { + service: "WMS", + version: "1.1.1", + request: "GetMap", + styles: "", + format: "image/jpeg" + }, + isBaseLayer: !0, + encodeBBOX: !1, + noMagic: !1, + yx: {}, + initialize: function(a, b, c, d) { + var e = [], + c = OpenLayers.Util.upperCaseObject(c); + 1.3 <= parseFloat(c.VERSION) && !c.EXCEPTIONS && (c.EXCEPTIONS = "INIMAGE"); + e.push(a, b, c, d); + OpenLayers.Layer.Grid.prototype.initialize.apply(this, e); + OpenLayers.Util.applyDefaults(this.params, OpenLayers.Util.upperCaseObject(this.DEFAULT_PARAMS)); + if (!this.noMagic && this.params.TRANSPARENT && "true" == this.params.TRANSPARENT.toString().toLowerCase()) { + if (null == d || !d.isBaseLayer) this.isBaseLayer = !1; + "image/jpeg" == this.params.FORMAT && (this.params.FORMAT = OpenLayers.Util.alphaHack() ? "image/gif" : "image/png") + } + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.WMS(this.name, this.url, this.params, this.getOptions())); + return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [a]) + }, + reverseAxisOrder: function() { + var a = this.projection.getCode(); + return 1.3 <= parseFloat(this.params.VERSION) && + !(!this.yx[a] && !OpenLayers.Projection.defaults[a].yx) + }, + getURL: function(a) { + var a = this.adjustBounds(a), + b = this.getImageSize(), + c = {}, + d = this.reverseAxisOrder(); + c.BBOX = this.encodeBBOX ? a.toBBOX(null, d) : a.toArray(d); + c.WIDTH = b.w; + c.HEIGHT = b.h; + return this.getFullRequestString(c) + }, + mergeNewParams: function(a) { + a = [OpenLayers.Util.upperCaseObject(a)]; + return OpenLayers.Layer.Grid.prototype.mergeNewParams.apply(this, a) + }, + getFullRequestString: function(a, b) { + var c = this.map.getProjectionObject(), + c = this.projection && this.projection.equals(c) ? + this.projection.getCode() : c.getCode(), + c = "none" == c ? null : c; + 1.3 <= parseFloat(this.params.VERSION) ? this.params.CRS = c : this.params.SRS = c; + "boolean" == typeof this.params.TRANSPARENT && (a.TRANSPARENT = this.params.TRANSPARENT ? "TRUE" : "FALSE"); + return OpenLayers.Layer.Grid.prototype.getFullRequestString.apply(this, arguments) + }, + CLASS_NAME: "OpenLayers.Layer.WMS" +}); +OpenLayers.Format.WMC.v1_1_0 = OpenLayers.Class(OpenLayers.Format.WMC.v1, { + VERSION: "1.1.0", + schemaLocation: "http://www.opengis.net/context http://schemas.opengis.net/context/1.1.0/context.xsd", + initialize: function(a) { + OpenLayers.Format.WMC.v1.prototype.initialize.apply(this, [a]) + }, + read_sld_MinScaleDenominator: function(a, b) { + var c = parseFloat(this.getChildValue(b)); + 0 < c && (a.maxScale = c) + }, + read_sld_MaxScaleDenominator: function(a, b) { + a.minScale = parseFloat(this.getChildValue(b)) + }, + read_wmc_SRS: function(a, b) { + "srs" in + a || (a.srs = {}); + a.srs[this.getChildValue(b)] = !0 + }, + write_wmc_Layer: function(a) { + var b = OpenLayers.Format.WMC.v1.prototype.write_wmc_Layer.apply(this, [a]); + if (a.maxScale) { + var c = this.createElementNS(this.namespaces.sld, "sld:MinScaleDenominator"); + c.appendChild(this.createTextNode(a.maxScale.toPrecision(16))); + b.appendChild(c) + } + a.minScale && (c = this.createElementNS(this.namespaces.sld, "sld:MaxScaleDenominator"), c.appendChild(this.createTextNode(a.minScale.toPrecision(16))), b.appendChild(c)); + if (a.srs) + for (var d in a.srs) b.appendChild(this.createElementDefaultNS("SRS", + d)); + b.appendChild(this.write_wmc_FormatList(a)); + b.appendChild(this.write_wmc_StyleList(a)); + a.dimensions && b.appendChild(this.write_wmc_DimensionList(a)); + b.appendChild(this.write_wmc_LayerExtension(a)); + return b + }, + CLASS_NAME: "OpenLayers.Format.WMC.v1_1_0" +}); +OpenLayers.Format.XLS = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, { + defaultVersion: "1.1.0", + stringifyOutput: !0, + CLASS_NAME: "OpenLayers.Format.XLS" +}); +OpenLayers.Format.XLS.v1 = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + xls: "http://www.opengis.net/xls", + gml: "http://www.opengis.net/gml", + xsi: "http://www.w3.org/2001/XMLSchema-instance" + }, + regExes: { + trimSpace: /^\s*|\s*$/g, + removeSpace: /\s*/g, + splitSpace: /\s+/, + trimComma: /\s*,\s*/g + }, + xy: !0, + defaultPrefix: "xls", + schemaLocation: null, + read: function(a, b) { + OpenLayers.Util.applyDefaults(b, this.options); + var c = {}; + this.readChildNodes(a, c); + return c + }, + readers: { + xls: { + XLS: function(a, b) { + b.version = a.getAttribute("version"); + this.readChildNodes(a, b) + }, + Response: function(a, b) { + this.readChildNodes(a, b) + }, + GeocodeResponse: function(a, b) { + b.responseLists = []; + this.readChildNodes(a, b) + }, + GeocodeResponseList: function(a, b) { + var c = { + features: [], + numberOfGeocodedAddresses: parseInt(a.getAttribute("numberOfGeocodedAddresses")) + }; + b.responseLists.push(c); + this.readChildNodes(a, c) + }, + GeocodedAddress: function(a, b) { + var c = new OpenLayers.Feature.Vector; + b.features.push(c); + this.readChildNodes(a, c); + c.geometry = c.components[0] + }, + GeocodeMatchCode: function(a, b) { + b.attributes.matchCode = { + accuracy: parseFloat(a.getAttribute("accuracy")), + matchType: a.getAttribute("matchType") + } + }, + Address: function(a, b) { + var c = { + countryCode: a.getAttribute("countryCode"), + addressee: a.getAttribute("addressee"), + street: [], + place: [] + }; + b.attributes.address = c; + this.readChildNodes(a, c) + }, + freeFormAddress: function(a, b) { + b.freeFormAddress = this.getChildValue(a) + }, + StreetAddress: function(a, b) { + this.readChildNodes(a, b) + }, + Building: function(a, b) { + b.building = { + number: a.getAttribute("number"), + subdivision: a.getAttribute("subdivision"), + buildingName: a.getAttribute("buildingName") + } + }, + Street: function(a, b) { + b.street.push(this.getChildValue(a)) + }, + Place: function(a, b) { + b.place[a.getAttribute("type")] = this.getChildValue(a) + }, + PostalCode: function(a, b) { + b.postalCode = this.getChildValue(a) + } + }, + gml: OpenLayers.Format.GML.v3.prototype.readers.gml + }, + write: function(a) { + return this.writers.xls.XLS.apply(this, [a]) + }, + writers: { + xls: { + XLS: function(a) { + var b = this.createElementNSPlus("xls:XLS", { + attributes: { + version: this.VERSION, + "xsi:schemaLocation": this.schemaLocation + } + }); + this.writeNode("RequestHeader", a.header, b); + this.writeNode("Request", a, b); + return b + }, + RequestHeader: function() { + return this.createElementNSPlus("xls:RequestHeader") + }, + Request: function(a) { + var b = this.createElementNSPlus("xls:Request", { + attributes: { + methodName: "GeocodeRequest", + requestID: a.requestID || "", + version: this.VERSION + } + }); + this.writeNode("GeocodeRequest", a.addresses, b); + return b + }, + GeocodeRequest: function(a) { + for (var b = this.createElementNSPlus("xls:GeocodeRequest"), c = 0, d = a.length; c < d; c++) this.writeNode("Address", + a[c], b); + return b + }, + Address: function(a) { + var b = this.createElementNSPlus("xls:Address", { + attributes: { + countryCode: a.countryCode + } + }); + a.freeFormAddress ? this.writeNode("freeFormAddress", a.freeFormAddress, b) : (a.street && this.writeNode("StreetAddress", a, b), a.municipality && this.writeNode("Municipality", a.municipality, b), a.countrySubdivision && this.writeNode("CountrySubdivision", a.countrySubdivision, b), a.postalCode && this.writeNode("PostalCode", a.postalCode, b)); + return b + }, + freeFormAddress: function(a) { + return this.createElementNSPlus("freeFormAddress", { + value: a + }) + }, + StreetAddress: function(a) { + var b = this.createElementNSPlus("xls:StreetAddress"); + a.building && this.writeNode(b, "Building", a.building); + a = a.street; + OpenLayers.Util.isArray(a) || (a = [a]); + for (var c = 0, d = a.length; c < d; c++) this.writeNode("Street", a[c], b); + return b + }, + Building: function(a) { + return this.createElementNSPlus("xls:Building", { + attributes: { + number: a.number, + subdivision: a.subdivision, + buildingName: a.buildingName + } + }) + }, + Street: function(a) { + return this.createElementNSPlus("xls:Street", { + value: a + }) + }, + Municipality: function(a) { + return this.createElementNSPlus("xls:Place", { + attributes: { + type: "Municipality" + }, + value: a + }) + }, + CountrySubdivision: function(a) { + return this.createElementNSPlus("xls:Place", { + attributes: { + type: "CountrySubdivision" + }, + value: a + }) + }, + PostalCode: function(a) { + return this.createElementNSPlus("xls:PostalCode", { + value: a + }) + } + } + }, + CLASS_NAME: "OpenLayers.Format.XLS.v1" +}); +OpenLayers.Format.XLS.v1_1_0 = OpenLayers.Class(OpenLayers.Format.XLS.v1, { + VERSION: "1.1", + schemaLocation: "http://www.opengis.net/xls http://schemas.opengis.net/ols/1.1.0/LocationUtilityService.xsd", + CLASS_NAME: "OpenLayers.Format.XLS.v1_1_0" +}); +OpenLayers.Format.XLS.v1_1 = OpenLayers.Format.XLS.v1_1_0; +OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { + xmlns: "http://www.w3.org/2000/svg", + xlinkns: "http://www.w3.org/1999/xlink", + MAX_PIXEL: 15E3, + translationParameters: null, + symbolMetrics: null, + initialize: function(a) { + this.supported() && (OpenLayers.Renderer.Elements.prototype.initialize.apply(this, arguments), this.translationParameters = { + x: 0, + y: 0 + }, this.symbolMetrics = {}) + }, + supported: function() { + return document.implementation && (document.implementation.hasFeature("org.w3c.svg", "1.0") || document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#SVG", + "1.1") || document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1")) + }, + inValidRange: function(a, b, c) { + a += c ? 0 : this.translationParameters.x; + b += c ? 0 : this.translationParameters.y; + return a >= -this.MAX_PIXEL && a <= this.MAX_PIXEL && b >= -this.MAX_PIXEL && b <= this.MAX_PIXEL + }, + setExtent: function(a, b) { + var c = OpenLayers.Renderer.Elements.prototype.setExtent.apply(this, arguments), + d = this.getResolution(), + e = -a.left / d, + d = a.top / d; + if (b) return this.left = e, this.top = d, this.rendererRoot.setAttributeNS(null, + "viewBox", "0 0 " + this.size.w + " " + this.size.h), this.translate(this.xOffset, 0), !0; + (e = this.translate(e - this.left + this.xOffset, d - this.top)) || this.setExtent(a, !0); + return c && e + }, + translate: function(a, b) { + if (this.inValidRange(a, b, !0)) { + var c = ""; + if (a || b) c = "translate(" + a + "," + b + ")"; + this.root.setAttributeNS(null, "transform", c); + this.translationParameters = { + x: a, + y: b + }; + return !0 + } + return !1 + }, + setSize: function(a) { + OpenLayers.Renderer.prototype.setSize.apply(this, arguments); + this.rendererRoot.setAttributeNS(null, "width", this.size.w); + this.rendererRoot.setAttributeNS(null, "height", this.size.h) + }, + getNodeType: function(a, b) { + var c = null; + switch (a.CLASS_NAME) { + case "OpenLayers.Geometry.Point": + c = b.externalGraphic ? "image" : this.isComplexSymbol(b.graphicName) ? "svg" : "circle"; + break; + case "OpenLayers.Geometry.Rectangle": + c = "rect"; + break; + case "OpenLayers.Geometry.LineString": + c = "polyline"; + break; + case "OpenLayers.Geometry.LinearRing": + c = "polygon"; + break; + case "OpenLayers.Geometry.Polygon": + case "OpenLayers.Geometry.Curve": + c = "path" + } + return c + }, + setStyle: function(a, + b, c) { + var b = b || a._style, + c = c || a._options, + d = parseFloat(a.getAttributeNS(null, "r")), + e = 1, + f; + if ("OpenLayers.Geometry.Point" == a._geometryClass && d) { + a.style.visibility = ""; + if (!1 === b.graphic) a.style.visibility = "hidden"; + else if (b.externalGraphic) { + f = this.getPosition(a); + b.graphicTitle && (a.setAttributeNS(null, "title", b.graphicTitle), d = a.getElementsByTagName("title"), 0 < d.length ? d[0].firstChild.textContent = b.graphicTitle : (d = this.nodeFactory(null, "title"), d.textContent = b.graphicTitle, a.appendChild(d))); + b.graphicWidth && + b.graphicHeight && a.setAttributeNS(null, "preserveAspectRatio", "none"); + var d = b.graphicWidth || b.graphicHeight, + g = b.graphicHeight || b.graphicWidth, + d = d ? d : 2 * b.pointRadius, + g = g ? g : 2 * b.pointRadius, + h = void 0 != b.graphicYOffset ? b.graphicYOffset : -(0.5 * g), + i = b.graphicOpacity || b.fillOpacity; + a.setAttributeNS(null, "x", (f.x + (void 0 != b.graphicXOffset ? b.graphicXOffset : -(0.5 * d))).toFixed()); + a.setAttributeNS(null, "y", (f.y + h).toFixed()); + a.setAttributeNS(null, "width", d); + a.setAttributeNS(null, "height", g); + a.setAttributeNS(this.xlinkns, + "href", b.externalGraphic); + a.setAttributeNS(null, "style", "opacity: " + i); + a.onclick = OpenLayers.Renderer.SVG.preventDefault + } else if (this.isComplexSymbol(b.graphicName)) { + var d = 3 * b.pointRadius, + g = 2 * d, + j = this.importSymbol(b.graphicName); + f = this.getPosition(a); + e = 3 * this.symbolMetrics[j.id][0] / g; + h = a.parentNode; + i = a.nextSibling; + h && h.removeChild(a); + a.firstChild && a.removeChild(a.firstChild); + a.appendChild(j.firstChild.cloneNode(!0)); + a.setAttributeNS(null, "viewBox", j.getAttributeNS(null, "viewBox")); + a.setAttributeNS(null, + "width", g); + a.setAttributeNS(null, "height", g); + a.setAttributeNS(null, "x", f.x - d); + a.setAttributeNS(null, "y", f.y - d); + i ? h.insertBefore(a, i) : h && h.appendChild(a) + } else a.setAttributeNS(null, "r", b.pointRadius); + d = b.rotation; + if ((void 0 !== d || void 0 !== a._rotation) && f) a._rotation = d, d |= 0, "svg" !== a.nodeName ? a.setAttributeNS(null, "transform", "rotate(" + d + " " + f.x + " " + f.y + ")") : (f = this.symbolMetrics[j.id], a.firstChild.setAttributeNS(null, "transform", "rotate(" + d + " " + f[1] + " " + f[2] + ")")) + } + c.isFilled ? (a.setAttributeNS(null, + "fill", b.fillColor), a.setAttributeNS(null, "fill-opacity", b.fillOpacity)) : a.setAttributeNS(null, "fill", "none"); + c.isStroked ? (a.setAttributeNS(null, "stroke", b.strokeColor), a.setAttributeNS(null, "stroke-opacity", b.strokeOpacity), a.setAttributeNS(null, "stroke-width", b.strokeWidth * e), a.setAttributeNS(null, "stroke-linecap", b.strokeLinecap || "round"), a.setAttributeNS(null, "stroke-linejoin", "round"), b.strokeDashstyle && a.setAttributeNS(null, "stroke-dasharray", this.dashStyle(b, e))) : a.setAttributeNS(null, "stroke", + "none"); + b.pointerEvents && a.setAttributeNS(null, "pointer-events", b.pointerEvents); + null != b.cursor && a.setAttributeNS(null, "cursor", b.cursor); + return a + }, + dashStyle: function(a, b) { + var c = a.strokeWidth * b, + d = a.strokeDashstyle; + switch (d) { + case "solid": + return "none"; + case "dot": + return [1, 4 * c].join(); + case "dash": + return [4 * c, 4 * c].join(); + case "dashdot": + return [4 * c, 4 * c, 1, 4 * c].join(); + case "longdash": + return [8 * c, 4 * c].join(); + case "longdashdot": + return [8 * c, 4 * c, 1, 4 * c].join(); + default: + return OpenLayers.String.trim(d).replace(/\s+/g, + ",") + } + }, + createNode: function(a, b) { + var c = document.createElementNS(this.xmlns, a); + b && c.setAttributeNS(null, "id", b); + return c + }, + nodeTypeCompare: function(a, b) { + return b == a.nodeName + }, + createRenderRoot: function() { + var a = this.nodeFactory(this.container.id + "_svgRoot", "svg"); + a.style.display = "block"; + return a + }, + createRoot: function(a) { + return this.nodeFactory(this.container.id + a, "g") + }, + createDefs: function() { + var a = this.nodeFactory(this.container.id + "_defs", "defs"); + this.rendererRoot.appendChild(a); + return a + }, + drawPoint: function(a, + b) { + return this.drawCircle(a, b, 1) + }, + drawCircle: function(a, b, c) { + var d = this.getResolution(), + e = (b.x - this.featureDx) / d + this.left, + b = this.top - b.y / d; + return this.inValidRange(e, b) ? (a.setAttributeNS(null, "cx", e), a.setAttributeNS(null, "cy", b), a.setAttributeNS(null, "r", c), a) : !1 + }, + drawLineString: function(a, b) { + var c = this.getComponentsString(b.components); + return c.path ? (a.setAttributeNS(null, "points", c.path), c.complete ? a : null) : !1 + }, + drawLinearRing: function(a, b) { + var c = this.getComponentsString(b.components); + return c.path ? + (a.setAttributeNS(null, "points", c.path), c.complete ? a : null) : !1 + }, + drawPolygon: function(a, b) { + for (var c = "", d = !0, e = !0, f, g, h = 0, i = b.components.length; h < i; h++) c += " M", f = this.getComponentsString(b.components[h].components, " "), (g = f.path) ? (c += " " + g, e = f.complete && e) : d = !1; + return d ? (a.setAttributeNS(null, "d", c + " z"), a.setAttributeNS(null, "fill-rule", "evenodd"), e ? a : null) : !1 + }, + drawRectangle: function(a, b) { + var c = this.getResolution(), + d = (b.x - this.featureDx) / c + this.left, + e = this.top - b.y / c; + return this.inValidRange(d, e) ? (a.setAttributeNS(null, + "x", d), a.setAttributeNS(null, "y", e), a.setAttributeNS(null, "width", b.width / c), a.setAttributeNS(null, "height", b.height / c), a) : !1 + }, + drawText: function(a, b, c) { + var d = !!b.labelOutlineWidth; + if (d) { + var e = OpenLayers.Util.extend({}, b); + e.fontColor = e.labelOutlineColor; + e.fontStrokeColor = e.labelOutlineColor; + e.fontStrokeWidth = b.labelOutlineWidth; + delete e.labelOutlineWidth; + this.drawText(a, e, c) + } + var f = this.getResolution(), + e = (c.x - this.featureDx) / f + this.left, + g = c.y / f - this.top, + d = d ? this.LABEL_OUTLINE_SUFFIX : this.LABEL_ID_SUFFIX, + f = this.nodeFactory(a + d, "text"); + f.setAttributeNS(null, "x", e); + f.setAttributeNS(null, "y", -g); + b.fontColor && f.setAttributeNS(null, "fill", b.fontColor); + b.fontStrokeColor && f.setAttributeNS(null, "stroke", b.fontStrokeColor); + b.fontStrokeWidth && f.setAttributeNS(null, "stroke-width", b.fontStrokeWidth); + b.fontOpacity && f.setAttributeNS(null, "opacity", b.fontOpacity); + b.fontFamily && f.setAttributeNS(null, "font-family", b.fontFamily); + b.fontSize && f.setAttributeNS(null, "font-size", b.fontSize); + b.fontWeight && f.setAttributeNS(null, + "font-weight", b.fontWeight); + b.fontStyle && f.setAttributeNS(null, "font-style", b.fontStyle); + !0 === b.labelSelect ? (f.setAttributeNS(null, "pointer-events", "visible"), f._featureId = a) : f.setAttributeNS(null, "pointer-events", "none"); + g = b.labelAlign || OpenLayers.Renderer.defaultSymbolizer.labelAlign; + f.setAttributeNS(null, "text-anchor", OpenLayers.Renderer.SVG.LABEL_ALIGN[g[0]] || "middle"); + !0 === OpenLayers.IS_GECKO && f.setAttributeNS(null, "dominant-baseline", OpenLayers.Renderer.SVG.LABEL_ALIGN[g[1]] || "central"); + for (var h = + b.label.split("\n"), i = h.length; f.childNodes.length > i;) f.removeChild(f.lastChild); + for (var j = 0; j < i; j++) { + var k = this.nodeFactory(a + d + "_tspan_" + j, "tspan"); + !0 === b.labelSelect && (k._featureId = a, k._geometry = c, k._geometryClass = c.CLASS_NAME); + !1 === OpenLayers.IS_GECKO && k.setAttributeNS(null, "baseline-shift", OpenLayers.Renderer.SVG.LABEL_VSHIFT[g[1]] || "-35%"); + k.setAttribute("x", e); + if (0 == j) { + var l = OpenLayers.Renderer.SVG.LABEL_VFACTOR[g[1]]; + null == l && (l = -0.5); + k.setAttribute("dy", l * (i - 1) + "em") + } else k.setAttribute("dy", + "1em"); + k.textContent = "" === h[j] ? " " : h[j]; + k.parentNode || f.appendChild(k) + } + f.parentNode || this.textRoot.appendChild(f) + }, + getComponentsString: function(a, b) { + for (var c = [], d = !0, e = a.length, f = [], g, h = 0; h < e; h++) g = a[h], c.push(g), (g = this.getShortString(g)) ? f.push(g) : (0 < h && this.getShortString(a[h - 1]) && f.push(this.clipLine(a[h], a[h - 1])), h < e - 1 && this.getShortString(a[h + 1]) && f.push(this.clipLine(a[h], a[h + 1])), d = !1); + return { + path: f.join(b || ","), + complete: d + } + }, + clipLine: function(a, b) { + if (b.equals(a)) return ""; + var c = this.getResolution(), + d = this.MAX_PIXEL - this.translationParameters.x, + e = this.MAX_PIXEL - this.translationParameters.y, + f = (b.x - this.featureDx) / c + this.left, + g = this.top - b.y / c, + h = (a.x - this.featureDx) / c + this.left, + c = this.top - a.y / c, + i; + if (h < -d || h > d) i = (c - g) / (h - f), h = 0 > h ? -d : d, c = g + (h - f) * i; + if (c < -e || c > e) i = (h - f) / (c - g), c = 0 > c ? -e : e, h = f + (c - g) * i; + return h + "," + c + }, + getShortString: function(a) { + var b = this.getResolution(), + c = (a.x - this.featureDx) / b + this.left, + a = this.top - a.y / b; + return this.inValidRange(c, a) ? c + "," + a : !1 + }, + getPosition: function(a) { + return { + x: parseFloat(a.getAttributeNS(null, + "cx")), + y: parseFloat(a.getAttributeNS(null, "cy")) + } + }, + importSymbol: function(a) { + this.defs || (this.defs = this.createDefs()); + var b = this.container.id + "-" + a, + c = document.getElementById(b); + if (null != c) return c; + var d = OpenLayers.Renderer.symbol[a]; + if (!d) throw Error(a + " is not a valid symbol name"); + var a = this.nodeFactory(b, "symbol"), + e = this.nodeFactory(null, "polygon"); + a.appendChild(e); + for (var c = new OpenLayers.Bounds(Number.MAX_VALUE, Number.MAX_VALUE, 0, 0), f = [], g, h, i = 0; i < d.length; i += 2) g = d[i], h = d[i + 1], c.left = Math.min(c.left, + g), c.bottom = Math.min(c.bottom, h), c.right = Math.max(c.right, g), c.top = Math.max(c.top, h), f.push(g, ",", h); + e.setAttributeNS(null, "points", f.join(" ")); + d = c.getWidth(); + e = c.getHeight(); + a.setAttributeNS(null, "viewBox", [c.left - d, c.bottom - e, 3 * d, 3 * e].join(" ")); + this.symbolMetrics[b] = [Math.max(d, e), c.getCenterLonLat().lon, c.getCenterLonLat().lat]; + this.defs.appendChild(a); + return a + }, + getFeatureIdFromEvent: function(a) { + var b = OpenLayers.Renderer.Elements.prototype.getFeatureIdFromEvent.apply(this, arguments); + b || (b = a.target, + b = b.parentNode && b != this.rendererRoot ? b.parentNode._featureId : void 0); + return b + }, + CLASS_NAME: "OpenLayers.Renderer.SVG" +}); +OpenLayers.Renderer.SVG.LABEL_ALIGN = { + l: "start", + r: "end", + b: "bottom", + t: "hanging" +}; +OpenLayers.Renderer.SVG.LABEL_VSHIFT = { + t: "-70%", + b: "0" +}; +OpenLayers.Renderer.SVG.LABEL_VFACTOR = { + t: 0, + b: -1 +}; +OpenLayers.Renderer.SVG.preventDefault = function(a) { + a.preventDefault && a.preventDefault() +}; +OpenLayers.Format.SLD.v1_0_0 = OpenLayers.Class(OpenLayers.Format.SLD.v1, { + VERSION: "1.0.0", + schemaLocation: "http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd", + CLASS_NAME: "OpenLayers.Format.SLD.v1_0_0" +}); +OpenLayers.Format.OWSContext = OpenLayers.Class(OpenLayers.Format.Context, { + defaultVersion: "0.3.1", + getVersion: function(a, b) { + var c = OpenLayers.Format.XML.VersionedOGC.prototype.getVersion.apply(this, arguments); + "0.3.0" === c && (c = this.defaultVersion); + return c + }, + toContext: function(a) { + var b = {}; + "OpenLayers.Map" == a.CLASS_NAME && (b.bounds = a.getExtent(), b.maxExtent = a.maxExtent, b.projection = a.projection, b.size = a.getSize(), b.layers = a.layers); + return b + }, + CLASS_NAME: "OpenLayers.Format.OWSContext" +}); +OpenLayers.Format.OWSContext.v0_3_1 = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + owc: "http://www.opengis.net/ows-context", + gml: "http://www.opengis.net/gml", + kml: "http://www.opengis.net/kml/2.2", + ogc: "http://www.opengis.net/ogc", + ows: "http://www.opengis.net/ows", + sld: "http://www.opengis.net/sld", + xlink: "http://www.w3.org/1999/xlink", + xsi: "http://www.w3.org/2001/XMLSchema-instance" + }, + VERSION: "0.3.1", + schemaLocation: "http://www.opengis.net/ows-context http://www.ogcnetwork.net/schemas/owc/0.3.1/owsContext.xsd", + defaultPrefix: "owc", + extractAttributes: !0, + xy: !0, + regExes: { + trimSpace: /^\s*|\s*$/g, + removeSpace: /\s*/g, + splitSpace: /\s+/, + trimComma: /\s*,\s*/g + }, + featureNS: "http://mapserver.gis.umn.edu/mapserver", + featureType: "vector", + geometryName: "geometry", + nestingLayerLookup: null, + initialize: function(a) { + OpenLayers.Format.XML.prototype.initialize.apply(this, [a]); + OpenLayers.Format.GML.v2.prototype.setGeometryTypes.call(this) + }, + setNestingPath: function(a) { + if (a.layersContext) + for (var b = 0, c = a.layersContext.length; b < c; b++) { + var d = + a.layersContext[b], + e = [], + f = a.title || ""; + a.metadata && a.metadata.nestingPath && (e = a.metadata.nestingPath.slice()); + "" != f && e.push(f); + d.metadata.nestingPath = e; + d.layersContext && this.setNestingPath(d) + } + }, + decomposeNestingPath: function(a) { + var b = []; + if (OpenLayers.Util.isArray(a)) { + for (a = a.slice(); 0 < a.length;) b.push(a.slice()), a.pop(); + b.reverse() + } + return b + }, + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + a && 9 == a.nodeType && (a = a.documentElement); + var b = {}; + this.readNode(a, + b); + this.setNestingPath({ + layersContext: b.layersContext + }); + a = []; + this.processLayer(a, b); + delete b.layersContext; + b.layersContext = a; + return b + }, + processLayer: function(a, b) { + if (b.layersContext) + for (var c = 0, d = b.layersContext.length; c < d; c++) { + var e = b.layersContext[c]; + a.push(e); + e.layersContext && this.processLayer(a, e) + } + }, + write: function(a, b) { + this.nestingLayerLookup = {}; + b = b || {}; + OpenLayers.Util.applyDefaults(b, a); + var c = this.writeNode("OWSContext", b); + this.nestingLayerLookup = null; + this.setAttributeNS(c, this.namespaces.xsi, + "xsi:schemaLocation", this.schemaLocation); + return OpenLayers.Format.XML.prototype.write.apply(this, [c]) + }, + readers: { + kml: { + Document: function(a, b) { + b.features = (new OpenLayers.Format.KML({ + kmlns: this.namespaces.kml, + extractStyles: !0 + })).read(a) + } + }, + owc: { + OWSContext: function(a, b) { + this.readChildNodes(a, b) + }, + General: function(a, b) { + this.readChildNodes(a, b) + }, + ResourceList: function(a, b) { + this.readChildNodes(a, b) + }, + Layer: function(a, b) { + var c = { + metadata: {}, + visibility: "1" != a.getAttribute("hidden"), + queryable: "1" == a.getAttribute("queryable"), + opacity: null != a.getAttribute("opacity") ? parseFloat(a.getAttribute("opacity")) : null, + name: a.getAttribute("name"), + categoryLayer: null == a.getAttribute("name"), + formats: [], + styles: [] + }; + b.layersContext || (b.layersContext = []); + b.layersContext.push(c); + this.readChildNodes(a, c) + }, + InlineGeometry: function(a, b) { + b.features = []; + var c = this.getElementsByTagNameNS(a, this.namespaces.gml, "featureMember"), + d; + 1 <= c.length && (d = c[0]); + d && d.firstChild && (c = d.firstChild.nextSibling ? d.firstChild.nextSibling : d.firstChild, this.setNamespace("feature", + c.namespaceURI), this.featureType = c.localName || c.nodeName.split(":").pop(), this.readChildNodes(a, b)) + }, + Server: function(a, b) { + if (!b.service && !b.version || b.service != OpenLayers.Format.Context.serviceTypes.WMS) b.service = a.getAttribute("service"), b.version = a.getAttribute("version"), this.readChildNodes(a, b) + }, + Name: function(a, b) { + b.name = this.getChildValue(a); + this.readChildNodes(a, b) + }, + Title: function(a, b) { + b.title = this.getChildValue(a); + this.readChildNodes(a, b) + }, + StyleList: function(a, b) { + this.readChildNodes(a, b.styles) + }, + Style: function(a, b) { + var c = {}; + b.push(c); + this.readChildNodes(a, c) + }, + LegendURL: function(a, b) { + var c = {}; + b.legend = c; + this.readChildNodes(a, c) + }, + OnlineResource: function(a, b) { + b.url = this.getAttributeNS(a, this.namespaces.xlink, "href"); + this.readChildNodes(a, b) + } + }, + ows: OpenLayers.Format.OWSCommon.v1_0_0.prototype.readers.ows, + gml: OpenLayers.Format.GML.v2.prototype.readers.gml, + sld: OpenLayers.Format.SLD.v1_0_0.prototype.readers.sld, + feature: OpenLayers.Format.GML.v2.prototype.readers.feature + }, + writers: { + owc: { + OWSContext: function(a) { + var b = + this.createElementNSPlus("OWSContext", { + attributes: { + version: this.VERSION, + id: a.id || OpenLayers.Util.createUniqueID("OpenLayers_OWSContext_") + } + }); + this.writeNode("General", a, b); + this.writeNode("ResourceList", a, b); + return b + }, + General: function(a) { + var b = this.createElementNSPlus("General"); + this.writeNode("ows:BoundingBox", a, b); + this.writeNode("ows:Title", a.title || "OpenLayers OWSContext", b); + return b + }, + ResourceList: function(a) { + for (var b = this.createElementNSPlus("ResourceList"), c = 0, d = a.layers.length; c < d; c++) { + var e = + a.layers[c], + f = this.decomposeNestingPath(e.metadata.nestingPath); + this.writeNode("_Layer", { + layer: e, + subPaths: f + }, b) + } + return b + }, + Server: function(a) { + var b = this.createElementNSPlus("Server", { + attributes: { + version: a.version, + service: a.service + } + }); + this.writeNode("OnlineResource", a, b); + return b + }, + OnlineResource: function(a) { + return this.createElementNSPlus("OnlineResource", { + attributes: { + "xlink:href": a.url + } + }) + }, + InlineGeometry: function(a) { + var b = this.createElementNSPlus("InlineGeometry"); + this.writeNode("gml:boundedBy", a.getDataExtent(), + b); + for (var c = 0, d = a.features.length; c < d; c++) this.writeNode("gml:featureMember", a.features[c], b); + return b + }, + StyleList: function(a) { + for (var b = this.createElementNSPlus("StyleList"), c = 0, d = a.length; c < d; c++) this.writeNode("Style", a[c], b); + return b + }, + Style: function(a) { + var b = this.createElementNSPlus("Style"); + this.writeNode("Name", a, b); + this.writeNode("Title", a, b); + a.legend && this.writeNode("LegendURL", a, b); + return b + }, + Name: function(a) { + return this.createElementNSPlus("Name", { + value: a.name + }) + }, + Title: function(a) { + return this.createElementNSPlus("Title", { + value: a.title + }) + }, + LegendURL: function(a) { + var b = this.createElementNSPlus("LegendURL"); + this.writeNode("OnlineResource", a.legend, b); + return b + }, + _WMS: function(a) { + var b = this.createElementNSPlus("Layer", { + attributes: { + name: a.params.LAYERS, + queryable: a.queryable ? "1" : "0", + hidden: a.visibility ? "0" : "1", + opacity: a.hasOwnProperty("opacity") ? a.opacity : null + } + }); + this.writeNode("ows:Title", a.name, b); + this.writeNode("ows:OutputFormat", a.params.FORMAT, b); + this.writeNode("Server", { + service: OpenLayers.Format.Context.serviceTypes.WMS, + version: a.params.VERSION, + url: a.url + }, b); + a.metadata.styles && 0 < a.metadata.styles.length && this.writeNode("StyleList", a.metadata.styles, b); + return b + }, + _Layer: function(a) { + var b, c, d; + b = a.layer; + c = a.subPaths; + d = null; + 0 < c.length ? (b = c[0].join("/"), c = b.lastIndexOf("/"), d = this.nestingLayerLookup[b], c = 0 < c ? b.substring(c + 1, b.length) : b, d || (d = this.createElementNSPlus("Layer"), this.writeNode("ows:Title", c, d), this.nestingLayerLookup[b] = d), a.subPaths.shift(), this.writeNode("_Layer", a, d)) : (b instanceof OpenLayers.Layer.WMS ? + d = this.writeNode("_WMS", b) : b instanceof OpenLayers.Layer.Vector && (b.protocol instanceof OpenLayers.Protocol.WFS.v1 ? d = this.writeNode("_WFS", b) : b.protocol instanceof OpenLayers.Protocol.HTTP ? b.protocol.format instanceof OpenLayers.Format.GML ? (b.protocol.format.version = "2.1.2", d = this.writeNode("_GML", b)) : b.protocol.format instanceof OpenLayers.Format.KML && (b.protocol.format.version = "2.2", d = this.writeNode("_KML", b)) : (this.setNamespace("feature", this.featureNS), d = this.writeNode("_InlineGeometry", b))), + b.options.maxScale && this.writeNode("sld:MinScaleDenominator", b.options.maxScale, d), b.options.minScale && this.writeNode("sld:MaxScaleDenominator", b.options.minScale, d), this.nestingLayerLookup[b.name] = d); + return d + }, + _WFS: function(a) { + var b = this.createElementNSPlus("Layer", { + attributes: { + name: a.protocol.featurePrefix + ":" + a.protocol.featureType, + hidden: a.visibility ? "0" : "1" + } + }); + this.writeNode("ows:Title", a.name, b); + this.writeNode("Server", { + service: OpenLayers.Format.Context.serviceTypes.WFS, + version: a.protocol.version, + url: a.protocol.url + }, b); + return b + }, + _InlineGeometry: function(a) { + var b = this.createElementNSPlus("Layer", { + attributes: { + name: this.featureType, + hidden: a.visibility ? "0" : "1" + } + }); + this.writeNode("ows:Title", a.name, b); + this.writeNode("InlineGeometry", a, b); + return b + }, + _GML: function(a) { + var b = this.createElementNSPlus("Layer"); + this.writeNode("ows:Title", a.name, b); + this.writeNode("Server", { + service: OpenLayers.Format.Context.serviceTypes.GML, + url: a.protocol.url, + version: a.protocol.format.version + }, b); + return b + }, + _KML: function(a) { + var b = + this.createElementNSPlus("Layer"); + this.writeNode("ows:Title", a.name, b); + this.writeNode("Server", { + service: OpenLayers.Format.Context.serviceTypes.KML, + version: a.protocol.format.version, + url: a.protocol.url + }, b); + return b + } + }, + gml: OpenLayers.Util.applyDefaults({ + boundedBy: function(a) { + var b = this.createElementNSPlus("gml:boundedBy"); + this.writeNode("gml:Box", a, b); + return b + } + }, OpenLayers.Format.GML.v2.prototype.writers.gml), + ows: OpenLayers.Format.OWSCommon.v1_0_0.prototype.writers.ows, + sld: OpenLayers.Format.SLD.v1_0_0.prototype.writers.sld, + feature: OpenLayers.Format.GML.v2.prototype.writers.feature + }, + CLASS_NAME: "OpenLayers.Format.OWSContext.v0_3_1" +}); +OpenLayers.Control.ScaleLine = OpenLayers.Class(OpenLayers.Control, { + maxWidth: 100, + topOutUnits: "km", + topInUnits: "m", + bottomOutUnits: "mi", + bottomInUnits: "ft", + eTop: null, + eBottom: null, + geodesic: !1, + draw: function() { + OpenLayers.Control.prototype.draw.apply(this, arguments); + this.eTop || (this.eTop = document.createElement("div"), this.eTop.className = this.displayClass + "Top", this.div.appendChild(this.eTop), this.eTop.style.visibility = "" == this.topOutUnits || "" == this.topInUnits ? "hidden" : "visible", this.eBottom = document.createElement("div"), + this.eBottom.className = this.displayClass + "Bottom", this.div.appendChild(this.eBottom), this.eBottom.style.visibility = "" == this.bottomOutUnits || "" == this.bottomInUnits ? "hidden" : "visible"); + this.map.events.register("moveend", this, this.update); + this.update(); + return this.div + }, + getBarLen: function(a) { + var b = parseInt(Math.log(a) / Math.log(10)), + b = Math.pow(10, b), + a = parseInt(a / b); + return (5 < a ? 5 : 2 < a ? 2 : 1) * b + }, + update: function() { + var a = this.map.getResolution(); + if (a) { + var b = this.map.getUnits(), + c = OpenLayers.INCHES_PER_UNIT, + d = this.maxWidth * + a * c[b], + e = 1; + !0 === this.geodesic && (e = (this.map.getGeodesicPixelSize().w || 1.0E-6) * this.maxWidth / (d / c.km), d *= e); + var f, g; + 1E5 < d ? (f = this.topOutUnits, g = this.bottomOutUnits) : (f = this.topInUnits, g = this.bottomInUnits); + var h = d / c[f], + i = d / c[g], + d = this.getBarLen(h), + j = this.getBarLen(i), + h = d / c[b] * c[f], + i = j / c[b] * c[g], + b = h / a / e, + a = i / a / e; + "visible" == this.eBottom.style.visibility && (this.eBottom.style.width = Math.round(a) + "px", this.eBottom.innerHTML = j + " " + g); + "visible" == this.eTop.style.visibility && (this.eTop.style.width = Math.round(b) + + "px", this.eTop.innerHTML = d + " " + f) + } + }, + CLASS_NAME: "OpenLayers.Control.ScaleLine" +}); +OpenLayers.Icon = OpenLayers.Class({ + url: null, + size: null, + offset: null, + calculateOffset: null, + imageDiv: null, + px: null, + initialize: function(a, b, c, d) { + this.url = a; + this.size = b || { + w: 20, + h: 20 + }; + this.offset = c || { + x: -(this.size.w / 2), + y: -(this.size.h / 2) + }; + this.calculateOffset = d; + a = OpenLayers.Util.createUniqueID("OL_Icon_"); + this.imageDiv = OpenLayers.Util.createAlphaImageDiv(a) + }, + destroy: function() { + this.erase(); + OpenLayers.Event.stopObservingElement(this.imageDiv.firstChild); + this.imageDiv.innerHTML = ""; + this.imageDiv = null + }, + clone: function() { + return new OpenLayers.Icon(this.url, + this.size, this.offset, this.calculateOffset) + }, + setSize: function(a) { + null != a && (this.size = a); + this.draw() + }, + setUrl: function(a) { + null != a && (this.url = a); + this.draw() + }, + draw: function(a) { + OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv, null, null, this.size, this.url, "absolute"); + this.moveTo(a); + return this.imageDiv + }, + erase: function() { + null != this.imageDiv && null != this.imageDiv.parentNode && OpenLayers.Element.remove(this.imageDiv) + }, + setOpacity: function(a) { + OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv, null, null, null, null, + null, null, null, a) + }, + moveTo: function(a) { + null != a && (this.px = a); + null != this.imageDiv && (null == this.px ? this.display(!1) : (this.calculateOffset && (this.offset = this.calculateOffset(this.size)), OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv, null, { + x: this.px.x + this.offset.x, + y: this.px.y + this.offset.y + }))) + }, + display: function(a) { + this.imageDiv.style.display = a ? "" : "none" + }, + isDrawn: function() { + return this.imageDiv && this.imageDiv.parentNode && 11 != this.imageDiv.parentNode.nodeType + }, + CLASS_NAME: "OpenLayers.Icon" +}); +OpenLayers.Marker = OpenLayers.Class({ + icon: null, + lonlat: null, + events: null, + map: null, + initialize: function(a, b) { + this.lonlat = a; + var c = b ? b : OpenLayers.Marker.defaultIcon(); + null == this.icon ? this.icon = c : (this.icon.url = c.url, this.icon.size = c.size, this.icon.offset = c.offset, this.icon.calculateOffset = c.calculateOffset); + this.events = new OpenLayers.Events(this, this.icon.imageDiv) + }, + destroy: function() { + this.erase(); + this.map = null; + this.events.destroy(); + this.events = null; + null != this.icon && (this.icon.destroy(), this.icon = null) + }, + draw: function(a) { + return this.icon.draw(a) + }, + erase: function() { + null != this.icon && this.icon.erase() + }, + moveTo: function(a) { + null != a && null != this.icon && this.icon.moveTo(a); + this.lonlat = this.map.getLonLatFromLayerPx(a) + }, + isDrawn: function() { + return this.icon && this.icon.isDrawn() + }, + onScreen: function() { + var a = !1; + this.map && (a = this.map.getExtent().containsLonLat(this.lonlat)); + return a + }, + inflate: function(a) { + this.icon && this.icon.setSize({ + w: this.icon.size.w * a, + h: this.icon.size.h * a + }) + }, + setOpacity: function(a) { + this.icon.setOpacity(a) + }, + setUrl: function(a) { + this.icon.setUrl(a) + }, + display: function(a) { + this.icon.display(a) + }, + CLASS_NAME: "OpenLayers.Marker" +}); +OpenLayers.Marker.defaultIcon = function() { + return new OpenLayers.Icon(OpenLayers.Util.getImageLocation("marker.png"), { + w: 21, + h: 25 + }, { + x: -10.5, + y: -25 + }) +}; +OpenLayers.Layer.TileCache = OpenLayers.Class(OpenLayers.Layer.Grid, { + isBaseLayer: !0, + format: "image/png", + serverResolutions: null, + initialize: function(a, b, c, d) { + this.layername = c; + OpenLayers.Layer.Grid.prototype.initialize.apply(this, [a, b, {}, d]); + this.extension = this.format.split("/")[1].toLowerCase(); + this.extension = "jpg" == this.extension ? "jpeg" : this.extension + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.TileCache(this.name, this.url, this.layername, this.getOptions())); + return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [a]) + }, + getURL: function(a) { + function b(a, b) { + for (var a = "" + a, c = [], d = 0; d < b; ++d) c.push("0"); + return c.join("").substring(0, b - a.length) + a + } + var c = this.getServerResolution(), + d = this.maxExtent, + e = this.tileSize, + f = Math.round((a.left - d.left) / (c * e.w)), + a = Math.round((a.bottom - d.bottom) / (c * e.h)), + c = null != this.serverResolutions ? OpenLayers.Util.indexOf(this.serverResolutions, c) : this.map.getZoom(), + f = [this.layername, b(c, 2), b(parseInt(f / 1E6), 3), b(parseInt(f / 1E3) % 1E3, 3), b(parseInt(f) % 1E3, 3), b(parseInt(a / 1E6), 3), b(parseInt(a / + 1E3) % 1E3, 3), b(parseInt(a) % 1E3, 3) + "." + this.extension].join("/"), + c = this.url; + OpenLayers.Util.isArray(c) && (c = this.selectUrl(f, c)); + c = "/" == c.charAt(c.length - 1) ? c : c + "/"; + return c + f + }, + CLASS_NAME: "OpenLayers.Layer.TileCache" +}); +OpenLayers.Layer.KaMap = OpenLayers.Class(OpenLayers.Layer.Grid, { + isBaseLayer: !0, + DEFAULT_PARAMS: { + i: "jpeg", + map: "" + }, + initialize: function(a, b, c, d) { + OpenLayers.Layer.Grid.prototype.initialize.apply(this, arguments); + this.params = OpenLayers.Util.applyDefaults(this.params, this.DEFAULT_PARAMS) + }, + getURL: function(a) { + var a = this.adjustBounds(a), + b = this.map.getResolution(), + c = Math.round(1E4 * this.map.getScale()) / 1E4, + d = Math.round(a.left / b); + return this.getFullRequestString({ + t: -Math.round(a.top / b), + l: d, + s: c + }) + }, + calculateGridLayout: function(a, + b, c) { + var b = c * this.tileSize.w, + c = c * this.tileSize.h, + d = a.left, + e = Math.floor(d / b) - this.buffer, + d = -(d / b - e) * this.tileSize.w, + e = e * b, + a = a.top, + f = Math.ceil(a / c) + this.buffer; + return { + tilelon: b, + tilelat: c, + tileoffsetlon: e, + tileoffsetlat: f * c, + tileoffsetx: d, + tileoffsety: -(f - a / c + 1) * this.tileSize.h + } + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.KaMap(this.name, this.url, this.params, this.getOptions())); + a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [a]); + null != this.tileSize && (a.tileSize = this.tileSize.clone()); + a.grid = []; + return a + }, + getTileBounds: function(a) { + var b = this.getResolution(), + c = b * this.tileSize.w, + b = b * this.tileSize.h, + d = this.getLonLatFromViewPortPx(a), + a = c * Math.floor(d.lon / c), + d = b * Math.floor(d.lat / b); + return new OpenLayers.Bounds(a, d, a + c, d + b) + }, + CLASS_NAME: "OpenLayers.Layer.KaMap" +}); +OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, { + geometryTypes: null, + layer: null, + preserveAspectRatio: !1, + rotate: !0, + feature: null, + renderIntent: "temporary", + rotationHandleSymbolizer: null, + box: null, + center: null, + scale: 1, + ratio: 1, + rotation: 0, + handles: null, + rotationHandles: null, + dragControl: null, + irregular: !1, + initialize: function(a, b) { + OpenLayers.Control.prototype.initialize.apply(this, [b]); + this.layer = a; + this.rotationHandleSymbolizer || (this.rotationHandleSymbolizer = { + stroke: !1, + pointRadius: 10, + fillOpacity: 0, + cursor: "pointer" + }); + this.createBox(); + this.createControl() + }, + activate: function() { + var a = !1; + OpenLayers.Control.prototype.activate.apply(this, arguments) && (this.dragControl.activate(), this.layer.addFeatures([this.box]), this.rotate && this.layer.addFeatures(this.rotationHandles), this.layer.addFeatures(this.handles), a = !0); + return a + }, + deactivate: function() { + var a = !1; + OpenLayers.Control.prototype.deactivate.apply(this, arguments) && (this.layer.removeFeatures(this.handles), this.rotate && this.layer.removeFeatures(this.rotationHandles), + this.layer.removeFeatures([this.box]), this.dragControl.deactivate(), a = !0); + return a + }, + setMap: function(a) { + this.dragControl.setMap(a); + OpenLayers.Control.prototype.setMap.apply(this, arguments) + }, + setFeature: function(a, b) { + var b = OpenLayers.Util.applyDefaults(b, { + rotation: 0, + scale: 1, + ratio: 1 + }), + c = this.rotation, + d = this.center; + OpenLayers.Util.extend(this, b); + if (!1 !== this.events.triggerEvent("beforesetfeature", { + feature: a + })) { + this.feature = a; + this.activate(); + this._setfeature = !0; + var e = this.feature.geometry.getBounds(); + this.box.move(e.getCenterLonLat()); + this.box.geometry.rotate(-c, d); + this._angle = 0; + this.rotation ? (c = a.geometry.clone(), c.rotate(-this.rotation, this.center), c = new OpenLayers.Feature.Vector(c.getBounds().toGeometry()), c.geometry.rotate(this.rotation, this.center), this.box.geometry.rotate(this.rotation, this.center), this.box.move(c.geometry.getBounds().getCenterLonLat()), c = c.geometry.components[0].components[0].getBounds().getCenterLonLat()) : c = new OpenLayers.LonLat(e.left, e.bottom); + this.handles[0].move(c); + delete this._setfeature; + this.events.triggerEvent("setfeature", { + feature: a + }) + } + }, + unsetFeature: function() { + this.active ? this.deactivate() : (this.feature = null, this.rotation = 0, this.ratio = this.scale = 1) + }, + createBox: function() { + var a = this; + this.center = new OpenLayers.Geometry.Point(0, 0); + this.box = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString([new OpenLayers.Geometry.Point(-1, -1), new OpenLayers.Geometry.Point(0, -1), new OpenLayers.Geometry.Point(1, -1), new OpenLayers.Geometry.Point(1, 0), new OpenLayers.Geometry.Point(1, 1), new OpenLayers.Geometry.Point(0, 1), new OpenLayers.Geometry.Point(-1, + 1), new OpenLayers.Geometry.Point(-1, 0), new OpenLayers.Geometry.Point(-1, -1)]), null, "string" == typeof this.renderIntent ? null : this.renderIntent); + this.box.geometry.move = function(b, c) { + a._moving = !0; + OpenLayers.Geometry.LineString.prototype.move.apply(this, arguments); + a.center.move(b, c); + delete a._moving + }; + for (var b = function(a, b) { + OpenLayers.Geometry.Point.prototype.move.apply(this, arguments); + this._rotationHandle && this._rotationHandle.geometry.move(a, b); + this._handle.geometry.move(a, b) + }, c = function(a, b, c) { + OpenLayers.Geometry.Point.prototype.resize.apply(this, + arguments); + this._rotationHandle && this._rotationHandle.geometry.resize(a, b, c); + this._handle.geometry.resize(a, b, c) + }, d = function(a, b) { + OpenLayers.Geometry.Point.prototype.rotate.apply(this, arguments); + this._rotationHandle && this._rotationHandle.geometry.rotate(a, b); + this._handle.geometry.rotate(a, b) + }, e = function(b, c) { + var d = this.x, + e = this.y; + OpenLayers.Geometry.Point.prototype.move.call(this, b, c); + if (!a._moving) { + var f = a.dragControl.handlers.drag.evt, + g = !(!a._setfeature && a.preserveAspectRatio) && !(f && f.shiftKey), + h = new OpenLayers.Geometry.Point(d, e), + f = a.center; + this.rotate(-a.rotation, f); + h.rotate(-a.rotation, f); + var i = this.x - f.x, + j = this.y - f.y, + k = i - (this.x - h.x), + l = j - (this.y - h.y); + a.irregular && !a._setfeature && (i -= (this.x - h.x) / 2, j -= (this.y - h.y) / 2); + this.x = d; + this.y = e; + h = 1; + g ? (j = 1.0E-5 > Math.abs(l) ? 1 : j / l, h = (1.0E-5 > Math.abs(k) ? 1 : i / k) / j) : (k = Math.sqrt(k * k + l * l), j = Math.sqrt(i * i + j * j) / k); + a._moving = !0; + a.box.geometry.rotate(-a.rotation, f); + delete a._moving; + a.box.geometry.resize(j, f, h); + a.box.geometry.rotate(a.rotation, f); + a.transformFeature({ + scale: j, + ratio: h + }); + a.irregular && !a._setfeature && (i = f.clone(), i.x += 1.0E-5 > Math.abs(d - f.x) ? 0 : this.x - d, i.y += 1.0E-5 > Math.abs(e - f.y) ? 0 : this.y - e, a.box.geometry.move(this.x - d, this.y - e), a.transformFeature({ + center: i + })) + } + }, f = function(b, c) { + var d = this.x, + e = this.y; + OpenLayers.Geometry.Point.prototype.move.call(this, b, c); + if (!a._moving) { + var f = a.dragControl.handlers.drag.evt, + f = f && f.shiftKey ? 45 : 1, + g = a.center, + h = this.x - g.x, + i = this.y - g.y; + this.x = d; + this.y = e; + d = Math.atan2(i - c, h - b); + d = Math.atan2(i, h) - d; + d *= 180 / Math.PI; + a._angle = (a._angle + + d) % 360; + d = a.rotation % f; + if (Math.abs(a._angle) >= f || 0 !== d) d = Math.round(a._angle / f) * f - d, a._angle = 0, a.box.geometry.rotate(d, g), a.transformFeature({ + rotation: d + }) + } + }, g = Array(8), h = Array(4), i, j, k, l = "sw s se e ne n nw w".split(" "), m = 0; 8 > m; ++m) i = this.box.geometry.components[m], j = new OpenLayers.Feature.Vector(i.clone(), { + role: l[m] + "-resize" + }, "string" == typeof this.renderIntent ? null : this.renderIntent), 0 == m % 2 && (k = new OpenLayers.Feature.Vector(i.clone(), { + role: l[m] + "-rotate" + }, "string" == typeof this.rotationHandleSymbolizer ? + null : this.rotationHandleSymbolizer), k.geometry.move = f, i._rotationHandle = k, h[m / 2] = k), i.move = b, i.resize = c, i.rotate = d, j.geometry.move = e, i._handle = j, g[m] = j; + this.rotationHandles = h; + this.handles = g + }, + createControl: function() { + var a = this; + this.dragControl = new OpenLayers.Control.DragFeature(this.layer, { + documentDrag: !0, + moveFeature: function(b) { + this.feature === a.feature && (this.feature = a.box); + OpenLayers.Control.DragFeature.prototype.moveFeature.apply(this, arguments) + }, + onDrag: function(b) { + b === a.box && a.transformFeature({ + center: a.center + }) + }, + onStart: function(b) { + var c = !a.geometryTypes || -1 !== OpenLayers.Util.indexOf(a.geometryTypes, b.geometry.CLASS_NAME), + d = OpenLayers.Util.indexOf(a.handles, b), + d = d + OpenLayers.Util.indexOf(a.rotationHandles, b); + b !== a.feature && (b !== a.box && -2 == d && c) && a.setFeature(b) + }, + onComplete: function() { + a.events.triggerEvent("transformcomplete", { + feature: a.feature + }) + } + }) + }, + drawHandles: function() { + for (var a = this.layer, b = 0; 8 > b; ++b) this.rotate && 0 === b % 2 && a.drawFeature(this.rotationHandles[b / 2], this.rotationHandleSymbolizer), a.drawFeature(this.handles[b], + this.renderIntent) + }, + transformFeature: function(a) { + if (!this._setfeature) { + this.scale *= a.scale || 1; + this.ratio *= a.ratio || 1; + var b = this.rotation; + this.rotation = (this.rotation + (a.rotation || 0)) % 360; + if (!1 !== this.events.triggerEvent("beforetransform", a)) { + var c = this.feature, + d = c.geometry, + e = this.center; + d.rotate(-b, e); + a.scale || a.ratio ? d.resize(a.scale, e, a.ratio) : a.center && c.move(a.center.getBounds().getCenterLonLat()); + d.rotate(this.rotation, e); + this.layer.drawFeature(c); + c.toState(OpenLayers.State.UPDATE); + this.events.triggerEvent("transform", + a) + } + } + this.layer.drawFeature(this.box, this.renderIntent); + this.drawHandles() + }, + destroy: function() { + for (var a, b = 0; 8 > b; ++b) a = this.box.geometry.components[b], a._handle.destroy(), a._handle = null, a._rotationHandle && a._rotationHandle.destroy(), a._rotationHandle = null; + this.rotationHandles = this.rotationHandleSymbolizer = this.handles = this.feature = this.center = null; + this.box.destroy(); + this.layer = this.box = null; + this.dragControl.destroy(); + this.dragControl = null; + OpenLayers.Control.prototype.destroy.apply(this, arguments) + }, + CLASS_NAME: "OpenLayers.Control.TransformFeature" +}); +OpenLayers.Handler.Box = OpenLayers.Class(OpenLayers.Handler, { + dragHandler: null, + boxDivClassName: "olHandlerBoxZoomBox", + boxOffsets: null, + initialize: function(a, b, c) { + OpenLayers.Handler.prototype.initialize.apply(this, arguments); + this.dragHandler = new OpenLayers.Handler.Drag(this, { + down: this.startBox, + move: this.moveBox, + out: this.removeBox, + up: this.endBox + }, { + keyMask: this.keyMask + }) + }, + destroy: function() { + OpenLayers.Handler.prototype.destroy.apply(this, arguments); + this.dragHandler && (this.dragHandler.destroy(), this.dragHandler = + null) + }, + setMap: function(a) { + OpenLayers.Handler.prototype.setMap.apply(this, arguments); + this.dragHandler && this.dragHandler.setMap(a) + }, + startBox: function() { + this.callback("start", []); + this.zoomBox = OpenLayers.Util.createDiv("zoomBox", { + x: -9999, + y: -9999 + }); + this.zoomBox.className = this.boxDivClassName; + this.zoomBox.style.zIndex = this.map.Z_INDEX_BASE.Popup - 1; + this.map.viewPortDiv.appendChild(this.zoomBox); + OpenLayers.Element.addClass(this.map.viewPortDiv, "olDrawBox") + }, + moveBox: function(a) { + var b = this.dragHandler.start.x, + c = this.dragHandler.start.y, + d = Math.abs(b - a.x), + e = Math.abs(c - a.y), + f = this.getBoxOffsets(); + this.zoomBox.style.width = d + f.width + 1 + "px"; + this.zoomBox.style.height = e + f.height + 1 + "px"; + this.zoomBox.style.left = (a.x < b ? b - d - f.left : b - f.left) + "px"; + this.zoomBox.style.top = (a.y < c ? c - e - f.top : c - f.top) + "px" + }, + endBox: function(a) { + var b; + if (5 < Math.abs(this.dragHandler.start.x - a.x) || 5 < Math.abs(this.dragHandler.start.y - a.y)) { + var c = this.dragHandler.start; + b = Math.min(c.y, a.y); + var d = Math.max(c.y, a.y), + e = Math.min(c.x, a.x), + a = Math.max(c.x, + a.x); + b = new OpenLayers.Bounds(e, d, a, b) + } else b = this.dragHandler.start.clone(); + this.removeBox(); + this.callback("done", [b]) + }, + removeBox: function() { + this.map.viewPortDiv.removeChild(this.zoomBox); + this.boxOffsets = this.zoomBox = null; + OpenLayers.Element.removeClass(this.map.viewPortDiv, "olDrawBox") + }, + activate: function() { + return OpenLayers.Handler.prototype.activate.apply(this, arguments) ? (this.dragHandler.activate(), !0) : !1 + }, + deactivate: function() { + return OpenLayers.Handler.prototype.deactivate.apply(this, arguments) ? + (this.dragHandler.deactivate() && this.zoomBox && this.removeBox(), !0) : !1 + }, + getBoxOffsets: function() { + if (!this.boxOffsets) { + var a = document.createElement("div"); + a.style.position = "absolute"; + a.style.border = "1px solid black"; + a.style.width = "3px"; + document.body.appendChild(a); + var b = 3 == a.clientWidth; + document.body.removeChild(a); + var a = parseInt(OpenLayers.Element.getStyle(this.zoomBox, "border-left-width")), + c = parseInt(OpenLayers.Element.getStyle(this.zoomBox, "border-right-width")), + d = parseInt(OpenLayers.Element.getStyle(this.zoomBox, + "border-top-width")), + e = parseInt(OpenLayers.Element.getStyle(this.zoomBox, "border-bottom-width")); + this.boxOffsets = { + left: a, + right: c, + top: d, + bottom: e, + width: !1 === b ? a + c : 0, + height: !1 === b ? d + e : 0 + } + } + return this.boxOffsets + }, + CLASS_NAME: "OpenLayers.Handler.Box" +}); +OpenLayers.Control.ZoomBox = OpenLayers.Class(OpenLayers.Control, { + type: OpenLayers.Control.TYPE_TOOL, + out: !1, + keyMask: null, + alwaysZoom: !1, + draw: function() { + this.handler = new OpenLayers.Handler.Box(this, { + done: this.zoomBox + }, { + keyMask: this.keyMask + }) + }, + zoomBox: function(a) { + if (a instanceof OpenLayers.Bounds) { + var b; + if (this.out) { + b = Math.abs(a.right - a.left); + var c = Math.abs(a.top - a.bottom); + b = Math.min(this.map.size.h / c, this.map.size.w / b); + var c = this.map.getExtent(), + d = this.map.getLonLatFromPixel(a.getCenterPixel()), + a = d.lon - + c.getWidth() / 2 * b, + e = d.lon + c.getWidth() / 2 * b, + f = d.lat - c.getHeight() / 2 * b; + b = d.lat + c.getHeight() / 2 * b; + b = new OpenLayers.Bounds(a, f, e, b) + } else b = this.map.getLonLatFromPixel({ + x: a.left, + y: a.bottom + }), c = this.map.getLonLatFromPixel({ + x: a.right, + y: a.top + }), b = new OpenLayers.Bounds(b.lon, b.lat, c.lon, c.lat); + c = this.map.getZoom(); + this.map.zoomToExtent(b); + c == this.map.getZoom() && !0 == this.alwaysZoom && this.map.zoomTo(c + (this.out ? -1 : 1)) + } else this.out ? this.map.setCenter(this.map.getLonLatFromPixel(a), this.map.getZoom() - 1) : this.map.setCenter(this.map.getLonLatFromPixel(a), + this.map.getZoom() + 1) + }, + CLASS_NAME: "OpenLayers.Control.ZoomBox" +}); +OpenLayers.Control.DragPan = OpenLayers.Class(OpenLayers.Control, { + type: OpenLayers.Control.TYPE_TOOL, + panned: !1, + interval: 1, + documentDrag: !1, + kinetic: null, + enableKinetic: !1, + kineticInterval: 10, + draw: function() { + if (this.enableKinetic) { + var a = { + interval: this.kineticInterval + }; + "object" === typeof this.enableKinetic && (a = OpenLayers.Util.extend(a, this.enableKinetic)); + this.kinetic = new OpenLayers.Kinetic(a) + } + this.handler = new OpenLayers.Handler.Drag(this, { + move: this.panMap, + done: this.panMapDone, + down: this.panMapStart + }, { + interval: this.interval, + documentDrag: this.documentDrag + }) + }, + panMapStart: function() { + this.kinetic && this.kinetic.begin() + }, + panMap: function(a) { + this.kinetic && this.kinetic.update(a); + this.panned = !0; + this.map.pan(this.handler.last.x - a.x, this.handler.last.y - a.y, { + dragging: !0, + animate: !1 + }) + }, + panMapDone: function(a) { + if (this.panned) { + var b = null; + this.kinetic && (b = this.kinetic.end(a)); + this.map.pan(this.handler.last.x - a.x, this.handler.last.y - a.y, { + dragging: !!b, + animate: !1 + }); + if (b) { + var c = this; + this.kinetic.move(b, function(a, b, f) { + c.map.pan(a, b, { + dragging: !f, + animate: !1 + }) + }) + } + this.panned = !1 + } + }, + CLASS_NAME: "OpenLayers.Control.DragPan" +}); +OpenLayers.Handler.Click = OpenLayers.Class(OpenLayers.Handler, { + delay: 300, + single: !0, + "double": !1, + pixelTolerance: 0, + dblclickTolerance: 13, + stopSingle: !1, + stopDouble: !1, + timerId: null, + touch: !1, + down: null, + last: null, + first: null, + rightclickTimerId: null, + touchstart: function(a) { + this.touch || (this.unregisterMouseListeners(), this.touch = !0); + this.down = this.getEventInfo(a); + this.last = this.getEventInfo(a); + return !0 + }, + touchmove: function(a) { + this.last = this.getEventInfo(a); + return !0 + }, + touchend: function(a) { + this.down && (a.xy = this.last.xy, + a.lastTouches = this.last.touches, this.handleSingle(a), this.down = null); + return !0 + }, + unregisterMouseListeners: function() { + this.map.events.un({ + mousedown: this.mousedown, + mouseup: this.mouseup, + click: this.click, + dblclick: this.dblclick, + scope: this + }) + }, + mousedown: function(a) { + this.down = this.getEventInfo(a); + this.last = this.getEventInfo(a); + return !0 + }, + mouseup: function(a) { + var b = !0; + this.checkModifiers(a) && (this.control.handleRightClicks && OpenLayers.Event.isRightClick(a)) && (b = this.rightclick(a)); + return b + }, + rightclick: function(a) { + if (this.passesTolerance(a)) { + if (null != + this.rightclickTimerId) return this.clearTimer(), this.callback("dblrightclick", [a]), !this.stopDouble; + a = this["double"] ? OpenLayers.Util.extend({}, a) : this.callback("rightclick", [a]); + a = OpenLayers.Function.bind(this.delayedRightCall, this, a); + this.rightclickTimerId = window.setTimeout(a, this.delay) + } + return !this.stopSingle + }, + delayedRightCall: function(a) { + this.rightclickTimerId = null; + a && this.callback("rightclick", [a]) + }, + click: function(a) { + this.last || (this.last = this.getEventInfo(a)); + this.handleSingle(a); + return !this.stopSingle + }, + dblclick: function(a) { + this.handleDouble(a); + return !this.stopDouble + }, + handleDouble: function(a) { + this.passesDblclickTolerance(a) && (this["double"] && this.callback("dblclick", [a]), this.clearTimer()) + }, + handleSingle: function(a) { + this.passesTolerance(a) && (null != this.timerId ? (this.last.touches && 1 === this.last.touches.length && (this["double"] && OpenLayers.Event.stop(a), this.handleDouble(a)), (!this.last.touches || 2 !== this.last.touches.length) && this.clearTimer()) : (this.first = this.getEventInfo(a), this.queuePotentialClick(this.single ? + OpenLayers.Util.extend({}, a) : null))) + }, + queuePotentialClick: function(a) { + this.timerId = window.setTimeout(OpenLayers.Function.bind(this.delayedCall, this, a), this.delay) + }, + passesTolerance: function(a) { + var b = !0; + if (null != this.pixelTolerance && this.down && this.down.xy && (b = this.pixelTolerance >= this.down.xy.distanceTo(a.xy)) && this.touch && this.down.touches.length === this.last.touches.length) + for (var a = 0, c = this.down.touches.length; a < c; ++a) + if (this.getTouchDistance(this.down.touches[a], this.last.touches[a]) > this.pixelTolerance) { + b = !1; + break + } + return b + }, + getTouchDistance: function(a, b) { + return Math.sqrt(Math.pow(a.clientX - b.clientX, 2) + Math.pow(a.clientY - b.clientY, 2)) + }, + passesDblclickTolerance: function() { + var a = !0; + this.down && this.first && (a = this.down.xy.distanceTo(this.first.xy) <= this.dblclickTolerance); + return a + }, + clearTimer: function() { + null != this.timerId && (window.clearTimeout(this.timerId), this.timerId = null); + null != this.rightclickTimerId && (window.clearTimeout(this.rightclickTimerId), this.rightclickTimerId = null) + }, + delayedCall: function(a) { + this.timerId = + null; + a && this.callback("click", [a]) + }, + getEventInfo: function(a) { + var b; + if (a.touches) { + var c = a.touches.length; + b = Array(c); + for (var d, e = 0; e < c; e++) d = a.touches[e], b[e] = { + clientX: d.clientX, + clientY: d.clientY + } + } + return { + xy: a.xy, + touches: b + } + }, + deactivate: function() { + var a = !1; + OpenLayers.Handler.prototype.deactivate.apply(this, arguments) && (this.clearTimer(), this.last = this.first = this.down = null, this.touch = !1, a = !0); + return a + }, + CLASS_NAME: "OpenLayers.Handler.Click" +}); +OpenLayers.Control.Navigation = OpenLayers.Class(OpenLayers.Control, { + dragPan: null, + dragPanOptions: null, + pinchZoom: null, + pinchZoomOptions: null, + documentDrag: !1, + zoomBox: null, + zoomBoxEnabled: !0, + zoomWheelEnabled: !0, + mouseWheelOptions: null, + handleRightClicks: !1, + zoomBoxKeyMask: OpenLayers.Handler.MOD_SHIFT, + autoActivate: !0, + initialize: function(a) { + this.handlers = {}; + OpenLayers.Control.prototype.initialize.apply(this, arguments) + }, + destroy: function() { + this.deactivate(); + this.dragPan && this.dragPan.destroy(); + this.dragPan = null; + this.zoomBox && this.zoomBox.destroy(); + this.zoomBox = null; + this.pinchZoom && this.pinchZoom.destroy(); + this.pinchZoom = null; + OpenLayers.Control.prototype.destroy.apply(this, arguments) + }, + activate: function() { + this.dragPan.activate(); + this.zoomWheelEnabled && this.handlers.wheel.activate(); + this.handlers.click.activate(); + this.zoomBoxEnabled && this.zoomBox.activate(); + this.pinchZoom && this.pinchZoom.activate(); + return OpenLayers.Control.prototype.activate.apply(this, arguments) + }, + deactivate: function() { + this.pinchZoom && this.pinchZoom.deactivate(); + this.zoomBox.deactivate(); + this.dragPan.deactivate(); + this.handlers.click.deactivate(); + this.handlers.wheel.deactivate(); + return OpenLayers.Control.prototype.deactivate.apply(this, arguments) + }, + draw: function() { + this.handleRightClicks && (this.map.viewPortDiv.oncontextmenu = OpenLayers.Function.False); + this.handlers.click = new OpenLayers.Handler.Click(this, { + click: this.defaultClick, + dblclick: this.defaultDblClick, + dblrightclick: this.defaultDblRightClick + }, { + "double": !0, + stopDouble: !0 + }); + this.dragPan = new OpenLayers.Control.DragPan(OpenLayers.Util.extend({ + map: this.map, + documentDrag: this.documentDrag + }, this.dragPanOptions)); + this.zoomBox = new OpenLayers.Control.ZoomBox({ + map: this.map, + keyMask: this.zoomBoxKeyMask + }); + this.dragPan.draw(); + this.zoomBox.draw(); + this.handlers.wheel = new OpenLayers.Handler.MouseWheel(this, { + up: this.wheelUp, + down: this.wheelDown + }, this.mouseWheelOptions); + OpenLayers.Control.PinchZoom && (this.pinchZoom = new OpenLayers.Control.PinchZoom(OpenLayers.Util.extend({ + map: this.map + }, this.pinchZoomOptions))) + }, + defaultClick: function(a) { + a.lastTouches && 2 == a.lastTouches.length && + this.map.zoomOut() + }, + defaultDblClick: function(a) { + this.map.setCenter(this.map.getLonLatFromViewPortPx(a.xy), this.map.zoom + 1) + }, + defaultDblRightClick: function(a) { + this.map.setCenter(this.map.getLonLatFromViewPortPx(a.xy), this.map.zoom - 1) + }, + wheelChange: function(a, b) { + var c = this.map.getZoom(), + d = this.map.getZoom() + Math.round(b), + d = Math.max(d, 0), + d = Math.min(d, this.map.getNumZoomLevels()); + if (d !== c) { + var e = this.map.getSize(), + c = e.w / 2 - a.xy.x, + e = a.xy.y - e.h / 2, + f = this.map.baseLayer.getResolutionForZoom(d), + g = this.map.getLonLatFromPixel(a.xy); + this.map.setCenter(new OpenLayers.LonLat(g.lon + c * f, g.lat + e * f), d) + } + }, + wheelUp: function(a, b) { + this.wheelChange(a, b || 1) + }, + wheelDown: function(a, b) { + this.wheelChange(a, b || -1) + }, + disableZoomBox: function() { + this.zoomBoxEnabled = !1; + this.zoomBox.deactivate() + }, + enableZoomBox: function() { + this.zoomBoxEnabled = !0; + this.active && this.zoomBox.activate() + }, + disableZoomWheel: function() { + this.zoomWheelEnabled = !1; + this.handlers.wheel.deactivate() + }, + enableZoomWheel: function() { + this.zoomWheelEnabled = !0; + this.active && this.handlers.wheel.activate() + }, + CLASS_NAME: "OpenLayers.Control.Navigation" +}); +OpenLayers.Control.DrawFeature = OpenLayers.Class(OpenLayers.Control, { + layer: null, + callbacks: null, + multi: !1, + featureAdded: function() {}, + handlerOptions: null, + initialize: function(a, b, c) { + OpenLayers.Control.prototype.initialize.apply(this, [c]); + this.callbacks = OpenLayers.Util.extend({ + done: this.drawFeature, + modify: function(a, b) { + this.layer.events.triggerEvent("sketchmodified", { + vertex: a, + feature: b + }) + }, + create: function(a, b) { + this.layer.events.triggerEvent("sketchstarted", { + vertex: a, + feature: b + }) + } + }, this.callbacks); + this.layer = + a; + this.handlerOptions = this.handlerOptions || {}; + this.handlerOptions.layerOptions = OpenLayers.Util.applyDefaults(this.handlerOptions.layerOptions, { + renderers: a.renderers, + rendererOptions: a.rendererOptions + }); + "multi" in this.handlerOptions || (this.handlerOptions.multi = this.multi); + if (a = this.layer.styleMap && this.layer.styleMap.styles.temporary) this.handlerOptions.layerOptions = OpenLayers.Util.applyDefaults(this.handlerOptions.layerOptions, { + styleMap: new OpenLayers.StyleMap({ + "default": a + }) + }); + this.handler = new b(this, + this.callbacks, this.handlerOptions) + }, + drawFeature: function(a) { + a = new OpenLayers.Feature.Vector(a); + !1 !== this.layer.events.triggerEvent("sketchcomplete", { + feature: a + }) && (a.state = OpenLayers.State.INSERT, this.layer.addFeatures([a]), this.featureAdded(a), this.events.triggerEvent("featureadded", { + feature: a + })) + }, + insertXY: function(a, b) { + this.handler && this.handler.line && this.handler.insertXY(a, b) + }, + insertDeltaXY: function(a, b) { + this.handler && this.handler.line && this.handler.insertDeltaXY(a, b) + }, + insertDirectionLength: function(a, + b) { + this.handler && this.handler.line && this.handler.insertDirectionLength(a, b) + }, + insertDeflectionLength: function(a, b) { + this.handler && this.handler.line && this.handler.insertDeflectionLength(a, b) + }, + undo: function() { + return this.handler.undo && this.handler.undo() + }, + redo: function() { + return this.handler.redo && this.handler.redo() + }, + finishSketch: function() { + this.handler.finishGeometry() + }, + cancel: function() { + this.handler.cancel() + }, + CLASS_NAME: "OpenLayers.Control.DrawFeature" +}); +OpenLayers.Handler.Polygon = OpenLayers.Class(OpenLayers.Handler.Path, { + holeModifier: null, + drawingHole: !1, + polygon: null, + createFeature: function(a) { + a = this.layer.getLonLatFromViewPortPx(a); + a = new OpenLayers.Geometry.Point(a.lon, a.lat); + this.point = new OpenLayers.Feature.Vector(a); + this.line = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LinearRing([this.point.geometry])); + this.polygon = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon([this.line.geometry])); + this.callback("create", [this.point.geometry, + this.getSketch() + ]); + this.point.geometry.clearBounds(); + this.layer.addFeatures([this.polygon, this.point], { + silent: !0 + }) + }, + addPoint: function(a) { + if (!this.drawingHole && this.holeModifier && this.evt && this.evt[this.holeModifier]) + for (var b = this.point.geometry, c = this.control.layer.features, d, e = c.length - 1; 0 <= e; --e) + if (d = c[e].geometry, (d instanceof OpenLayers.Geometry.Polygon || d instanceof OpenLayers.Geometry.MultiPolygon) && d.intersects(b)) { + b = c[e]; + this.control.layer.removeFeatures([b], { + silent: !0 + }); + this.control.layer.events.registerPriority("sketchcomplete", + this, this.finalizeInteriorRing); + this.control.layer.events.registerPriority("sketchmodified", this, this.enforceTopology); + b.geometry.addComponent(this.line.geometry); + this.polygon = b; + this.drawingHole = !0; + break + } + OpenLayers.Handler.Path.prototype.addPoint.apply(this, arguments) + }, + getCurrentPointIndex: function() { + return this.line.geometry.components.length - 2 + }, + enforceTopology: function(a) { + var a = a.vertex, + b = this.line.geometry.components; + this.polygon.geometry.intersects(a) || (b = b[b.length - 3], a.x = b.x, a.y = b.y) + }, + finishGeometry: function() { + this.line.geometry.removeComponent(this.line.geometry.components[this.line.geometry.components.length - + 2]); + this.removePoint(); + this.finalize() + }, + finalizeInteriorRing: function() { + var a = this.line.geometry, + b = 0 !== a.getArea(); + if (b) { + for (var c = this.polygon.geometry.components, d = c.length - 2; 0 <= d; --d) + if (a.intersects(c[d])) { + b = !1; + break + } + if (b) { + d = c.length - 2; + a: for (; 0 < d; --d) + for (var e = c[d].components, f = 0, g = e.length; f < g; ++f) + if (a.containsPoint(e[f])) { + b = !1; + break a + } + } + } + b ? this.polygon.state !== OpenLayers.State.INSERT && (this.polygon.state = OpenLayers.State.UPDATE) : this.polygon.geometry.removeComponent(a); + this.restoreFeature(); + return !1 + }, + cancel: function() { + this.drawingHole && (this.polygon.geometry.removeComponent(this.line.geometry), this.restoreFeature(!0)); + return OpenLayers.Handler.Path.prototype.cancel.apply(this, arguments) + }, + restoreFeature: function(a) { + this.control.layer.events.unregister("sketchcomplete", this, this.finalizeInteriorRing); + this.control.layer.events.unregister("sketchmodified", this, this.enforceTopology); + this.layer.removeFeatures([this.polygon], { + silent: !0 + }); + this.control.layer.addFeatures([this.polygon], { + silent: !0 + }); + this.drawingHole = !1; + a || this.control.layer.events.triggerEvent("sketchcomplete", { + feature: this.polygon + }) + }, + destroyFeature: function(a) { + OpenLayers.Handler.Path.prototype.destroyFeature.call(this, a); + this.polygon = null + }, + drawFeature: function() { + this.layer.drawFeature(this.polygon, this.style); + this.layer.drawFeature(this.point, this.style) + }, + getSketch: function() { + return this.polygon + }, + getGeometry: function() { + var a = this.polygon && this.polygon.geometry; + a && this.multi && (a = new OpenLayers.Geometry.MultiPolygon([a])); + return a + }, + CLASS_NAME: "OpenLayers.Handler.Polygon" +}); +OpenLayers.Control.EditingToolbar = OpenLayers.Class(OpenLayers.Control.Panel, { + citeCompliant: !1, + initialize: function(a, b) { + OpenLayers.Control.Panel.prototype.initialize.apply(this, [b]); + this.addControls([new OpenLayers.Control.Navigation]); + this.addControls([new OpenLayers.Control.DrawFeature(a, OpenLayers.Handler.Point, { + displayClass: "olControlDrawFeaturePoint", + handlerOptions: { + citeCompliant: this.citeCompliant + } + }), new OpenLayers.Control.DrawFeature(a, OpenLayers.Handler.Path, { + displayClass: "olControlDrawFeaturePath", + handlerOptions: { + citeCompliant: this.citeCompliant + } + }), new OpenLayers.Control.DrawFeature(a, OpenLayers.Handler.Polygon, { + displayClass: "olControlDrawFeaturePolygon", + handlerOptions: { + citeCompliant: this.citeCompliant + } + })]) + }, + draw: function() { + var a = OpenLayers.Control.Panel.prototype.draw.apply(this, arguments); + null === this.defaultControl && (this.defaultControl = this.controls[0]); + return a + }, + CLASS_NAME: "OpenLayers.Control.EditingToolbar" +}); +OpenLayers.Strategy.BBOX = OpenLayers.Class(OpenLayers.Strategy, { + bounds: null, + resolution: null, + ratio: 2, + resFactor: null, + response: null, + activate: function() { + var a = OpenLayers.Strategy.prototype.activate.call(this); + a && (this.layer.events.on({ + moveend: this.update, + refresh: this.update, + visibilitychanged: this.update, + scope: this + }), this.update()); + return a + }, + deactivate: function() { + var a = OpenLayers.Strategy.prototype.deactivate.call(this); + a && this.layer.events.un({ + moveend: this.update, + refresh: this.update, + visibilitychanged: this.update, + scope: this + }); + return a + }, + update: function(a) { + var b = this.getMapBounds(); + if (null !== b && (a && a.force || this.layer.visibility && this.layer.calculateInRange() && this.invalidBounds(b))) this.calculateBounds(b), this.resolution = this.layer.map.getResolution(), this.triggerRead(a) + }, + getMapBounds: function() { + if (null === this.layer.map) return null; + var a = this.layer.map.getExtent(); + a && !this.layer.projection.equals(this.layer.map.getProjectionObject()) && (a = a.clone().transform(this.layer.map.getProjectionObject(), this.layer.projection)); + return a + }, + invalidBounds: function(a) { + a || (a = this.getMapBounds()); + a = !this.bounds || !this.bounds.containsBounds(a); + !a && this.resFactor && (a = this.resolution / this.layer.map.getResolution(), a = a >= this.resFactor || a <= 1 / this.resFactor); + return a + }, + calculateBounds: function(a) { + a || (a = this.getMapBounds()); + var b = a.getCenterLonLat(), + c = a.getWidth() * this.ratio, + a = a.getHeight() * this.ratio; + this.bounds = new OpenLayers.Bounds(b.lon - c / 2, b.lat - a / 2, b.lon + c / 2, b.lat + a / 2) + }, + triggerRead: function(a) { + this.response && !(a && !0 === a.noAbort) && + (this.layer.protocol.abort(this.response), this.layer.events.triggerEvent("loadend")); + this.layer.events.triggerEvent("loadstart"); + this.response = this.layer.protocol.read(OpenLayers.Util.applyDefaults({ + filter: this.createFilter(), + callback: this.merge, + scope: this + }, a)) + }, + createFilter: function() { + var a = new OpenLayers.Filter.Spatial({ + type: OpenLayers.Filter.Spatial.BBOX, + value: this.bounds, + projection: this.layer.projection + }); + this.layer.filter && (a = new OpenLayers.Filter.Logical({ + type: OpenLayers.Filter.Logical.AND, + filters: [this.layer.filter, a] + })); + return a + }, + merge: function(a) { + this.layer.destroyFeatures(); + if ((a = a.features) && 0 < a.length) { + var b = this.layer.projection, + c = this.layer.map.getProjectionObject(); + if (!c.equals(b)) + for (var d, e = 0, f = a.length; e < f; ++e)(d = a[e].geometry) && d.transform(b, c); + this.layer.addFeatures(a) + } + this.response = null; + this.layer.events.triggerEvent("loadend") + }, + CLASS_NAME: "OpenLayers.Strategy.BBOX" +}); +OpenLayers.Layer.WorldWind = OpenLayers.Class(OpenLayers.Layer.Grid, { + DEFAULT_PARAMS: {}, + isBaseLayer: !0, + lzd: null, + zoomLevels: null, + initialize: function(a, b, c, d, e, f) { + this.lzd = c; + this.zoomLevels = d; + c = []; + c.push(a, b, e, f); + OpenLayers.Layer.Grid.prototype.initialize.apply(this, c); + this.params = OpenLayers.Util.applyDefaults(this.params, this.DEFAULT_PARAMS) + }, + getZoom: function() { + var a = this.map.getZoom(); + this.map.getMaxExtent(); + return a -= Math.log(this.maxResolution / (this.lzd / 512)) / Math.log(2) + }, + getURL: function(a) { + var a = + this.adjustBounds(a), + b = this.getZoom(), + c = this.map.getMaxExtent(), + d = this.lzd / Math.pow(2, this.getZoom()), + e = Math.floor((a.left - c.left) / d), + a = Math.floor((a.bottom - c.bottom) / d); + return this.map.getResolution() <= this.lzd / 512 && this.getZoom() <= this.zoomLevels ? this.getFullRequestString({ + L: b, + X: e, + Y: a + }) : OpenLayers.Util.getImageLocation("blank.gif") + }, + CLASS_NAME: "OpenLayers.Layer.WorldWind" +}); +OpenLayers.Protocol.CSW = function(a) { + var a = OpenLayers.Util.applyDefaults(a, OpenLayers.Protocol.CSW.DEFAULTS), + b = OpenLayers.Protocol.CSW["v" + a.version.replace(/\./g, "_")]; + if (!b) throw "Unsupported CSW version: " + a.version; + return new b(a) +}; +OpenLayers.Protocol.CSW.DEFAULTS = { + version: "2.0.2" +}; +OpenLayers.Format.WMTSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, { + defaultVersion: "1.0.0", + yx: { + "urn:ogc:def:crs:EPSG::4326": !0 + }, + createLayer: function(a, b) { + var c, d = { + layer: !0, + matrixSet: !0 + }, + e; + for (e in d) + if (!(e in b)) throw Error("Missing property '" + e + "' in layer configuration."); + d = a.contents; + e = d.tileMatrixSets[b.matrixSet]; + for (var f, g = 0, h = d.layers.length; g < h; ++g) + if (d.layers[g].identifier === b.layer) { + f = d.layers[g]; + break + } + if (f && e) { + for (var i, g = 0, h = f.styles.length; g < h && !(i = f.styles[g], i.isDefault); ++g); + c = new OpenLayers.Layer.WMTS(OpenLayers.Util.applyDefaults(b, { + url: "REST" === b.requestEncoding && f.resourceUrl ? f.resourceUrl.tile.template : a.operationsMetadata.GetTile.dcp.http.get[0].url, + name: f.title, + style: i.identifier, + matrixIds: e.matrixIds, + tileFullExtent: e.bounds + })) + } + return c + }, + CLASS_NAME: "OpenLayers.Format.WMTSCapabilities" +}); +OpenLayers.Layer.Google.v3 = { + DEFAULTS: { + sphericalMercator: !0, + projection: "EPSG:900913" + }, + animationEnabled: !0, + loadMapObject: function() { + this.type || (this.type = google.maps.MapTypeId.ROADMAP); + var a, b = OpenLayers.Layer.Google.cache[this.map.id]; + b ? (a = b.mapObject, ++b.count) : (b = this.map.viewPortDiv, a = document.createElement("div"), a.id = this.map.id + "_GMapContainer", a.style.position = "absolute", a.style.width = "100%", a.style.height = "100%", b.appendChild(a), b = this.map.getCenter(), a = new google.maps.Map(a, { + center: b ? new google.maps.LatLng(b.lat, + b.lon) : new google.maps.LatLng(0, 0), + zoom: this.map.getZoom() || 0, + mapTypeId: this.type, + disableDefaultUI: !0, + keyboardShortcuts: !1, + draggable: !1, + disableDoubleClickZoom: !0, + scrollwheel: !1, + streetViewControl: !1 + }), b = { + mapObject: a, + count: 1 + }, OpenLayers.Layer.Google.cache[this.map.id] = b, this.repositionListener = google.maps.event.addListenerOnce(a, "center_changed", OpenLayers.Function.bind(this.repositionMapElements, this))); + this.mapObject = a; + this.setGMapVisibility(this.visibility) + }, + repositionMapElements: function() { + google.maps.event.trigger(this.mapObject, + "resize"); + var a = this.mapObject.getDiv().firstChild; + if (!a || 3 > a.childNodes.length) return this.repositionTimer = window.setTimeout(OpenLayers.Function.bind(this.repositionMapElements, this), 250), !1; + for (var b = OpenLayers.Layer.Google.cache[this.map.id], c = this.map.viewPortDiv, d = a.children.length - 1; 0 <= d; --d) { + if (1000001 == a.children[d].style.zIndex) { + var e = a.children[d]; + c.appendChild(e); + e.style.zIndex = "1100"; + e.style.bottom = ""; + e.className = "olLayerGoogleCopyright olLayerGoogleV3"; + e.style.display = ""; + b.termsOfUse = + e + } + 1E6 == a.children[d].style.zIndex && (e = a.children[d], c.appendChild(e), e.style.zIndex = "1100", e.style.bottom = "", e.className = "olLayerGooglePoweredBy olLayerGoogleV3 gmnoprint", e.style.display = "", b.poweredBy = e); + 10000002 == a.children[d].style.zIndex && c.appendChild(a.children[d]) + } + this.setGMapVisibility(this.visibility) + }, + onMapResize: function() { + if (this.visibility) google.maps.event.trigger(this.mapObject, "resize"); + else { + var a = OpenLayers.Layer.Google.cache[this.map.id]; + if (!a.resized) { + var b = this; + google.maps.event.addListenerOnce(this.mapObject, + "tilesloaded", + function() { + google.maps.event.trigger(b.mapObject, "resize"); + b.moveTo(b.map.getCenter(), b.map.getZoom()); + delete a.resized + }) + } + a.resized = !0 + } + }, + setGMapVisibility: function(a) { + var b = OpenLayers.Layer.Google.cache[this.map.id]; + if (b) { + for (var c = this.type, d = this.map.layers, e, f = d.length - 1; 0 <= f; --f) + if (e = d[f], e instanceof OpenLayers.Layer.Google && !0 === e.visibility && !0 === e.inRange) { + c = e.type; + a = !0; + break + } + d = this.mapObject.getDiv(); + !0 === a ? (this.mapObject.setMapTypeId(c), d.style.left = "", b.termsOfUse && b.termsOfUse.style && + (b.termsOfUse.style.left = "", b.termsOfUse.style.display = "", b.poweredBy.style.display = ""), b.displayed = this.id) : (delete b.displayed, d.style.left = "-9999px", b.termsOfUse && b.termsOfUse.style && (b.termsOfUse.style.display = "none", b.termsOfUse.style.left = "-9999px", b.poweredBy.style.display = "none")) + } + }, + getMapContainer: function() { + return this.mapObject.getDiv() + }, + getMapObjectBoundsFromOLBounds: function(a) { + var b = null; + null != a && (b = this.sphericalMercator ? this.inverseMercator(a.bottom, a.left) : new OpenLayers.LonLat(a.bottom, + a.left), a = this.sphericalMercator ? this.inverseMercator(a.top, a.right) : new OpenLayers.LonLat(a.top, a.right), b = new google.maps.LatLngBounds(new google.maps.LatLng(b.lat, b.lon), new google.maps.LatLng(a.lat, a.lon))); + return b + }, + getMapObjectLonLatFromMapObjectPixel: function(a) { + var b = this.map.getSize(), + c = this.getLongitudeFromMapObjectLonLat(this.mapObject.center), + d = this.getLatitudeFromMapObjectLonLat(this.mapObject.center), + e = this.map.getResolution(), + a = new OpenLayers.LonLat(c + (a.x - b.w / 2) * e, d - (a.y - b.h / 2) * e); + this.wrapDateLine && (a = a.wrapDateLine(this.maxExtent)); + return this.getMapObjectLonLatFromLonLat(a.lon, a.lat) + }, + getMapObjectPixelFromMapObjectLonLat: function(a) { + var b = this.getLongitudeFromMapObjectLonLat(a), + a = this.getLatitudeFromMapObjectLonLat(a), + c = this.map.getResolution(), + d = this.map.getExtent(); + return this.getMapObjectPixelFromXY(1 / c * (b - d.left), 1 / c * (d.top - a)) + }, + setMapObjectCenter: function(a, b) { + if (!1 === this.animationEnabled && b != this.mapObject.zoom) { + var c = this.getMapContainer(); + google.maps.event.addListenerOnce(this.mapObject, + "idle", + function() { + c.style.visibility = "" + }); + c.style.visibility = "hidden" + } + this.mapObject.setOptions({ + center: a, + zoom: b + }) + }, + getMapObjectZoomFromMapObjectBounds: function(a) { + return this.mapObject.getBoundsZoomLevel(a) + }, + getMapObjectLonLatFromLonLat: function(a, b) { + var c; + this.sphericalMercator ? (c = this.inverseMercator(a, b), c = new google.maps.LatLng(c.lat, c.lon)) : c = new google.maps.LatLng(b, a); + return c + }, + getMapObjectPixelFromXY: function(a, b) { + return new google.maps.Point(a, b) + }, + destroy: function() { + this.repositionListener && + google.maps.event.removeListener(this.repositionListener); + this.repositionTimer && window.clearTimeout(this.repositionTimer); + OpenLayers.Layer.Google.prototype.destroy.apply(this, arguments) + } +}; +OpenLayers.Format.WPSDescribeProcess = OpenLayers.Class(OpenLayers.Format.XML, { + VERSION: "1.0.0", + namespaces: { + wps: "http://www.opengis.net/wps/1.0.0", + ows: "http://www.opengis.net/ows/1.1", + xsi: "http://www.w3.org/2001/XMLSchema-instance" + }, + schemaLocation: "http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd", + defaultPrefix: "wps", + regExes: { + trimSpace: /^\s*|\s*$/g, + removeSpace: /\s*/g, + splitSpace: /\s+/, + trimComma: /\s*,\s*/g + }, + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + a && 9 == a.nodeType && (a = a.documentElement); + var b = {}; + this.readNode(a, b); + return b + }, + readers: { + wps: { + ProcessDescriptions: function(a, b) { + b.processDescriptions = {}; + this.readChildNodes(a, b.processDescriptions) + }, + ProcessDescription: function(a, b) { + var c = { + processVersion: this.getAttributeNS(a, this.namespaces.wps, "processVersion"), + statusSupported: "true" === a.getAttribute("statusSupported"), + storeSupported: "true" === a.getAttribute("storeSupported") + }; + this.readChildNodes(a, c); + b[c.identifier] = c + }, + DataInputs: function(a, + b) { + b.dataInputs = []; + this.readChildNodes(a, b.dataInputs) + }, + ProcessOutputs: function(a, b) { + b.processOutputs = []; + this.readChildNodes(a, b.processOutputs) + }, + Output: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + b.push(c) + }, + ComplexOutput: function(a, b) { + b.complexOutput = {}; + this.readChildNodes(a, b.complexOutput) + }, + Input: function(a, b) { + var c = { + maxOccurs: parseInt(a.getAttribute("maxOccurs")), + minOccurs: parseInt(a.getAttribute("minOccurs")) + }; + this.readChildNodes(a, c); + b.push(c) + }, + BoundingBoxData: function(a, b) { + b.boundingBoxData = {}; + this.readChildNodes(a, b.boundingBoxData) + }, + CRS: function(a, b) { + b.CRSs || (b.CRSs = {}); + b.CRSs[this.getChildValue(a)] = !0 + }, + LiteralData: function(a, b) { + b.literalData = {}; + this.readChildNodes(a, b.literalData) + }, + ComplexData: function(a, b) { + b.complexData = {}; + this.readChildNodes(a, b.complexData) + }, + Default: function(a, b) { + b["default"] = {}; + this.readChildNodes(a, b["default"]) + }, + Supported: function(a, b) { + b.supported = {}; + this.readChildNodes(a, b.supported) + }, + Format: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + b.formats || (b.formats = {}); + b.formats[c.mimeType] = !0 + }, + MimeType: function(a, b) { + b.mimeType = this.getChildValue(a) + } + }, + ows: OpenLayers.Format.OWSCommon.v1_1_0.prototype.readers.ows + }, + CLASS_NAME: "OpenLayers.Format.WPSDescribeProcess" +}); +OpenLayers.Format.CSWGetRecords.v2_0_2 = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + csw: "http://www.opengis.net/cat/csw/2.0.2", + dc: "http://purl.org/dc/elements/1.1/", + dct: "http://purl.org/dc/terms/", + gmd: "http://www.isotc211.org/2005/gmd", + geonet: "http://www.fao.org/geonetwork", + ogc: "http://www.opengis.net/ogc", + ows: "http://www.opengis.net/ows", + xlink: "http://www.w3.org/1999/xlink", + xsi: "http://www.w3.org/2001/XMLSchema-instance" + }, + defaultPrefix: "csw", + version: "2.0.2", + schemaLocation: "http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd", + requestId: null, + resultType: null, + outputFormat: null, + outputSchema: null, + startPosition: null, + maxRecords: null, + DistributedSearch: null, + ResponseHandler: null, + Query: null, + regExes: { + trimSpace: /^\s*|\s*$/g, + removeSpace: /\s*/g, + splitSpace: /\s+/, + trimComma: /\s*,\s*/g + }, + initialize: function(a) { + OpenLayers.Format.XML.prototype.initialize.apply(this, [a]) + }, + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + a && 9 == a.nodeType && (a = a.documentElement); + var b = {}; + this.readNode(a, b); + return b + }, + readers: { + csw: { + GetRecordsResponse: function(a, b) { + b.records = []; + this.readChildNodes(a, b); + var c = this.getAttributeNS(a, "", "version"); + "" != c && (b.version = c) + }, + RequestId: function(a, b) { + b.RequestId = this.getChildValue(a) + }, + SearchStatus: function(a, b) { + b.SearchStatus = {}; + var c = this.getAttributeNS(a, "", "timestamp"); + "" != c && (b.SearchStatus.timestamp = c) + }, + SearchResults: function(a, b) { + this.readChildNodes(a, b); + for (var c = a.attributes, d = {}, e = 0, f = c.length; e < f; ++e) d[c[e].name] = "numberOfRecordsMatched" == c[e].name || "numberOfRecordsReturned" == + c[e].name || "nextRecord" == c[e].name ? parseInt(c[e].nodeValue) : c[e].nodeValue; + b.SearchResults = d + }, + SummaryRecord: function(a, b) { + var c = { + type: "SummaryRecord" + }; + this.readChildNodes(a, c); + b.records.push(c) + }, + BriefRecord: function(a, b) { + var c = { + type: "BriefRecord" + }; + this.readChildNodes(a, c); + b.records.push(c) + }, + DCMIRecord: function(a, b) { + var c = { + type: "DCMIRecord" + }; + this.readChildNodes(a, c); + b.records.push(c) + }, + Record: function(a, b) { + var c = { + type: "Record" + }; + this.readChildNodes(a, c); + b.records.push(c) + }, + "*": function(a, b) { + var c = a.localName || + a.nodeName.split(":").pop(); + b[c] = this.getChildValue(a) + } + }, + geonet: { + info: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + b.gninfo = c + } + }, + dc: { + "*": function(a, b) { + var c = a.localName || a.nodeName.split(":").pop(); + OpenLayers.Util.isArray(b[c]) || (b[c] = []); + for (var d = {}, e = a.attributes, f = 0, g = e.length; f < g; ++f) d[e[f].name] = e[f].nodeValue; + d.value = this.getChildValue(a); + "" != d.value && b[c].push(d) + } + }, + dct: { + "*": function(a, b) { + var c = a.localName || a.nodeName.split(":").pop(); + OpenLayers.Util.isArray(b[c]) || (b[c] = []); + b[c].push(this.getChildValue(a)) + } + }, + ows: OpenLayers.Util.applyDefaults({ + BoundingBox: function(a, b) { + b.bounds && (b.BoundingBox = [{ + crs: b.projection, + value: [b.bounds.left, b.bounds.bottom, b.bounds.right, b.bounds.top] + }], delete b.projection, delete b.bounds); + OpenLayers.Format.OWSCommon.v1_0_0.prototype.readers.ows.BoundingBox.apply(this, arguments) + } + }, OpenLayers.Format.OWSCommon.v1_0_0.prototype.readers.ows) + }, + write: function(a) { + a = this.writeNode("csw:GetRecords", a); + a.setAttribute("xmlns:gmd", this.namespaces.gmd); + return OpenLayers.Format.XML.prototype.write.apply(this, [a]) + }, + writers: { + csw: { + GetRecords: function(a) { + a || (a = {}); + var b = this.createElementNSPlus("csw:GetRecords", { + attributes: { + service: "CSW", + version: this.version, + requestId: a.requestId || this.requestId, + resultType: a.resultType || this.resultType, + outputFormat: a.outputFormat || this.outputFormat, + outputSchema: a.outputSchema || this.outputSchema, + startPosition: a.startPosition || this.startPosition, + maxRecords: a.maxRecords || this.maxRecords + } + }); + if (a.DistributedSearch || this.DistributedSearch) this.writeNode("csw:DistributedSearch", + a.DistributedSearch || this.DistributedSearch, b); + var c = a.ResponseHandler || this.ResponseHandler; + if (OpenLayers.Util.isArray(c) && 0 < c.length) + for (var d = 0, e = c.length; d < e; d++) this.writeNode("csw:ResponseHandler", c[d], b); + this.writeNode("Query", a.Query || this.Query, b); + return b + }, + DistributedSearch: function(a) { + return this.createElementNSPlus("csw:DistributedSearch", { + attributes: { + hopCount: a.hopCount + } + }) + }, + ResponseHandler: function(a) { + return this.createElementNSPlus("csw:ResponseHandler", { + value: a.value + }) + }, + Query: function(a) { + a || + (a = {}); + var b = this.createElementNSPlus("csw:Query", { + attributes: { + typeNames: a.typeNames || "csw:Record" + } + }), + c = a.ElementName; + if (OpenLayers.Util.isArray(c) && 0 < c.length) + for (var d = 0, e = c.length; d < e; d++) this.writeNode("csw:ElementName", c[d], b); + else this.writeNode("csw:ElementSetName", a.ElementSetName || { + value: "summary" + }, b); + a.Constraint && this.writeNode("csw:Constraint", a.Constraint, b); + a.SortBy && this.writeNode("ogc:SortBy", a.SortBy, b); + return b + }, + ElementName: function(a) { + return this.createElementNSPlus("csw:ElementName", { + value: a.value + }) + }, + ElementSetName: function(a) { + return this.createElementNSPlus("csw:ElementSetName", { + attributes: { + typeNames: a.typeNames + }, + value: a.value + }) + }, + Constraint: function(a) { + var b = this.createElementNSPlus("csw:Constraint", { + attributes: { + version: a.version + } + }); + if (a.Filter) { + var c = new OpenLayers.Format.Filter({ + version: a.version + }); + b.appendChild(c.write(a.Filter)) + } else a.CqlText && (a = this.createElementNSPlus("CqlText", { + value: a.CqlText.value + }), b.appendChild(a)); + return b + } + }, + ogc: OpenLayers.Format.Filter.v1_1_0.prototype.writers.ogc + }, + CLASS_NAME: "OpenLayers.Format.CSWGetRecords.v2_0_2" +}); +OpenLayers.Marker.Box = OpenLayers.Class(OpenLayers.Marker, { + bounds: null, + div: null, + initialize: function(a, b, c) { + this.bounds = a; + this.div = OpenLayers.Util.createDiv(); + this.div.style.overflow = "hidden"; + this.events = new OpenLayers.Events(this, this.div); + this.setBorder(b, c) + }, + destroy: function() { + this.div = this.bounds = null; + OpenLayers.Marker.prototype.destroy.apply(this, arguments) + }, + setBorder: function(a, b) { + a || (a = "red"); + b || (b = 2); + this.div.style.border = b + "px solid " + a + }, + draw: function(a, b) { + OpenLayers.Util.modifyDOMElement(this.div, + null, a, b); + return this.div + }, + onScreen: function() { + var a = !1; + this.map && (a = this.map.getExtent().containsBounds(this.bounds, !0, !0)); + return a + }, + display: function(a) { + this.div.style.display = a ? "" : "none" + }, + CLASS_NAME: "OpenLayers.Marker.Box" +}); +OpenLayers.Format.Text = OpenLayers.Class(OpenLayers.Format, { + defaultStyle: null, + extractStyles: !0, + initialize: function(a) { + a = a || {}; + !1 !== a.extractStyles && (a.defaultStyle = { + externalGraphic: OpenLayers.Util.getImageLocation("marker.png"), + graphicWidth: 21, + graphicHeight: 25, + graphicXOffset: -10.5, + graphicYOffset: -12.5 + }); + OpenLayers.Format.prototype.initialize.apply(this, [a]) + }, + read: function(a) { + for (var a = a.split("\n"), b, c = [], d = 0; d < a.length - 1; d++) { + var e = a[d].replace(/^\s*/, "").replace(/\s*$/, ""); + if ("#" != e.charAt(0)) + if (b) { + for (var e = + e.split("\t"), f = new OpenLayers.Geometry.Point(0, 0), g = {}, h = this.defaultStyle ? OpenLayers.Util.applyDefaults({}, this.defaultStyle) : null, i = !1, j = 0; j < e.length; j++) + if (e[j]) + if ("point" == b[j]) i = e[j].split(","), f.y = parseFloat(i[0]), f.x = parseFloat(i[1]), i = !0; + else if ("lat" == b[j]) f.y = parseFloat(e[j]), i = !0; + else if ("lon" == b[j]) f.x = parseFloat(e[j]), i = !0; + else if ("title" == b[j]) g.title = e[j]; + else if ("image" == b[j] || "icon" == b[j] && h) h.externalGraphic = e[j]; + else if ("iconSize" == b[j] && h) { + var k = e[j].split(","); + h.graphicWidth = + parseFloat(k[0]); + h.graphicHeight = parseFloat(k[1]) + } else "iconOffset" == b[j] && h ? (k = e[j].split(","), h.graphicXOffset = parseFloat(k[0]), h.graphicYOffset = parseFloat(k[1])) : "description" == b[j] ? g.description = e[j] : "overflow" == b[j] ? g.overflow = e[j] : g[b[j]] = e[j]; + i && (this.internalProjection && this.externalProjection && f.transform(this.externalProjection, this.internalProjection), e = new OpenLayers.Feature.Vector(f, g, h), c.push(e)) + } else b = e.split("\t") + } + return c + }, + CLASS_NAME: "OpenLayers.Format.Text" +}); +OpenLayers.Layer.Text = OpenLayers.Class(OpenLayers.Layer.Markers, { + location: null, + features: null, + formatOptions: null, + selectedFeature: null, + initialize: function(a, b) { + OpenLayers.Layer.Markers.prototype.initialize.apply(this, arguments); + this.features = [] + }, + destroy: function() { + OpenLayers.Layer.Markers.prototype.destroy.apply(this, arguments); + this.clearFeatures(); + this.features = null + }, + loadText: function() { + !this.loaded && null != this.location && (this.events.triggerEvent("loadstart"), OpenLayers.Request.GET({ + url: this.location, + success: this.parseData, + failure: function() { + this.events.triggerEvent("loadend") + }, + scope: this + }), this.loaded = !0) + }, + moveTo: function(a, b, c) { + OpenLayers.Layer.Markers.prototype.moveTo.apply(this, arguments); + this.visibility && !this.loaded && this.loadText() + }, + parseData: function(a) { + var a = a.responseText, + b = {}; + OpenLayers.Util.extend(b, this.formatOptions); + this.map && !this.projection.equals(this.map.getProjectionObject()) && (b.externalProjection = this.projection, b.internalProjection = this.map.getProjectionObject()); + for (var a = + (new OpenLayers.Format.Text(b)).read(a), b = 0, c = a.length; b < c; b++) { + var d = {}, + e = a[b], + f, g, h; + f = new OpenLayers.LonLat(e.geometry.x, e.geometry.y); + e.style.graphicWidth && e.style.graphicHeight && (g = new OpenLayers.Size(e.style.graphicWidth, e.style.graphicHeight)); + void 0 !== e.style.graphicXOffset && void 0 !== e.style.graphicYOffset && (h = new OpenLayers.Pixel(e.style.graphicXOffset, e.style.graphicYOffset)); + null != e.style.externalGraphic ? d.icon = new OpenLayers.Icon(e.style.externalGraphic, g, h) : (d.icon = OpenLayers.Marker.defaultIcon(), + null != g && d.icon.setSize(g)); + null != e.attributes.title && null != e.attributes.description && (d.popupContentHTML = "<h2>" + e.attributes.title + "</h2><p>" + e.attributes.description + "</p>"); + d.overflow = e.attributes.overflow || "auto"; + d = new OpenLayers.Feature(this, f, d); + this.features.push(d); + f = d.createMarker(); + null != e.attributes.title && null != e.attributes.description && f.events.register("click", d, this.markerClick); + this.addMarker(f) + } + this.events.triggerEvent("loadend") + }, + markerClick: function(a) { + var b = this == this.layer.selectedFeature; + this.layer.selectedFeature = !b ? this : null; + for (var c = 0, d = this.layer.map.popups.length; c < d; c++) this.layer.map.removePopup(this.layer.map.popups[c]); + b || this.layer.map.addPopup(this.createPopup()); + OpenLayers.Event.stop(a) + }, + clearFeatures: function() { + if (null != this.features) + for (; 0 < this.features.length;) { + var a = this.features[0]; + OpenLayers.Util.removeItem(this.features, a); + a.destroy() + } + }, + CLASS_NAME: "OpenLayers.Layer.Text" +}); +OpenLayers.Handler.RegularPolygon = OpenLayers.Class(OpenLayers.Handler.Drag, { + sides: 4, + radius: null, + snapAngle: null, + snapToggle: "shiftKey", + layerOptions: null, + persist: !1, + irregular: !1, + citeCompliant: !1, + angle: null, + fixedRadius: !1, + feature: null, + layer: null, + origin: null, + initialize: function(a, b, c) { + if (!c || !c.layerOptions || !c.layerOptions.styleMap) this.style = OpenLayers.Util.extend(OpenLayers.Feature.Vector.style["default"], {}); + OpenLayers.Handler.Drag.prototype.initialize.apply(this, [a, b, c]); + this.options = c ? c : {} + }, + setOptions: function(a) { + OpenLayers.Util.extend(this.options, + a); + OpenLayers.Util.extend(this, a) + }, + activate: function() { + var a = !1; + OpenLayers.Handler.Drag.prototype.activate.apply(this, arguments) && (a = OpenLayers.Util.extend({ + displayInLayerSwitcher: !1, + calculateInRange: OpenLayers.Function.True, + wrapDateLine: this.citeCompliant + }, this.layerOptions), this.layer = new OpenLayers.Layer.Vector(this.CLASS_NAME, a), this.map.addLayer(this.layer), a = !0); + return a + }, + deactivate: function() { + var a = !1; + OpenLayers.Handler.Drag.prototype.deactivate.apply(this, arguments) && (this.dragging && this.cancel(), + null != this.layer.map && (this.layer.destroy(!1), this.feature && this.feature.destroy()), this.feature = this.layer = null, a = !0); + return a + }, + down: function(a) { + this.fixedRadius = !!this.radius; + a = this.layer.getLonLatFromViewPortPx(a.xy); + this.origin = new OpenLayers.Geometry.Point(a.lon, a.lat); + if (!this.fixedRadius || this.irregular) this.radius = this.map.getResolution(); + this.persist && this.clear(); + this.feature = new OpenLayers.Feature.Vector; + this.createGeometry(); + this.callback("create", [this.origin, this.feature]); + this.layer.addFeatures([this.feature], { + silent: !0 + }); + this.layer.drawFeature(this.feature, this.style) + }, + move: function(a) { + var b = this.layer.getLonLatFromViewPortPx(a.xy), + b = new OpenLayers.Geometry.Point(b.lon, b.lat); + this.irregular ? (a = Math.sqrt(2) * Math.abs(b.y - this.origin.y) / 2, this.radius = Math.max(this.map.getResolution() / 2, a)) : this.fixedRadius ? this.origin = b : (this.calculateAngle(b, a), this.radius = Math.max(this.map.getResolution() / 2, b.distanceTo(this.origin))); + this.modifyGeometry(); + this.irregular && (a = b.x - this.origin.x, b = b.y - this.origin.y, this.feature.geometry.resize(1, + this.origin, 0 == b ? a / (this.radius * Math.sqrt(2)) : a / b), this.feature.geometry.move(a / 2, b / 2)); + this.layer.drawFeature(this.feature, this.style) + }, + up: function(a) { + this.finalize(); + this.start == this.last && this.callback("done", [a.xy]) + }, + out: function() { + this.finalize() + }, + createGeometry: function() { + this.angle = Math.PI * (1 / this.sides - 0.5); + this.snapAngle && (this.angle += this.snapAngle * (Math.PI / 180)); + this.feature.geometry = OpenLayers.Geometry.Polygon.createRegularPolygon(this.origin, this.radius, this.sides, this.snapAngle) + }, + modifyGeometry: function() { + var a, + b, c = this.feature.geometry.components[0]; + c.components.length != this.sides + 1 && (this.createGeometry(), c = this.feature.geometry.components[0]); + for (var d = 0; d < this.sides; ++d) b = c.components[d], a = this.angle + 2 * d * Math.PI / this.sides, b.x = this.origin.x + this.radius * Math.cos(a), b.y = this.origin.y + this.radius * Math.sin(a), b.clearBounds() + }, + calculateAngle: function(a, b) { + var c = Math.atan2(a.y - this.origin.y, a.x - this.origin.x); + if (this.snapAngle && this.snapToggle && !b[this.snapToggle]) { + var d = Math.PI / 180 * this.snapAngle; + this.angle = + Math.round(c / d) * d + } else this.angle = c + }, + cancel: function() { + this.callback("cancel", null); + this.finalize() + }, + finalize: function() { + this.origin = null; + this.radius = this.options.radius + }, + clear: function() { + this.layer && (this.layer.renderer.clear(), this.layer.destroyFeatures()) + }, + callback: function(a) { + this.callbacks[a] && this.callbacks[a].apply(this.control, [this.feature.geometry.clone()]); + !this.persist && ("done" == a || "cancel" == a) && this.clear() + }, + CLASS_NAME: "OpenLayers.Handler.RegularPolygon" +}); +OpenLayers.Control.SLDSelect = OpenLayers.Class(OpenLayers.Control, { + clearOnDeactivate: !1, + layers: null, + callbacks: null, + selectionSymbolizer: { + Polygon: { + fillColor: "#FF0000", + stroke: !1 + }, + Line: { + strokeColor: "#FF0000", + strokeWidth: 2 + }, + Point: { + graphicName: "square", + fillColor: "#FF0000", + pointRadius: 5 + } + }, + layerOptions: null, + handlerOptions: null, + sketchStyle: null, + wfsCache: {}, + layerCache: {}, + initialize: function(a, b) { + OpenLayers.Control.prototype.initialize.apply(this, [b]); + this.callbacks = OpenLayers.Util.extend({ + done: this.select, + click: this.select + }, + this.callbacks); + this.handlerOptions = this.handlerOptions || {}; + this.layerOptions = OpenLayers.Util.applyDefaults(this.layerOptions, { + displayInLayerSwitcher: !1, + tileOptions: { + maxGetUrlLength: 2048 + } + }); + this.sketchStyle && (this.handlerOptions.layerOptions = OpenLayers.Util.applyDefaults(this.handlerOptions.layerOptions, { + styleMap: new OpenLayers.StyleMap({ + "default": this.sketchStyle + }) + })); + this.handler = new a(this, this.callbacks, this.handlerOptions) + }, + destroy: function() { + for (var a in this.layerCache) delete this.layerCache[a]; + for (a in this.wfsCache) delete this.wfsCache[a]; + OpenLayers.Control.prototype.destroy.apply(this, arguments) + }, + coupleLayerVisiblity: function(a) { + this.setVisibility(a.object.getVisibility()) + }, + createSelectionLayer: function(a) { + var b; + if (this.layerCache[a.id]) b = this.layerCache[a.id]; + else { + b = new OpenLayers.Layer.WMS(a.name, a.url, a.params, OpenLayers.Util.applyDefaults(this.layerOptions, a.getOptions())); + this.layerCache[a.id] = b; + if (!1 === this.layerOptions.displayInLayerSwitcher) a.events.on({ + visibilitychanged: this.coupleLayerVisiblity, + scope: b + }); + this.map.addLayer(b) + } + return b + }, + createSLD: function(a, b, c) { + for (var d = { + version: "1.0.0", + namedLayers: {} + }, e = ("" + a.params.LAYERS).split(","), f = 0, g = e.length; f < g; f++) { + var h = e[f]; + d.namedLayers[h] = { + name: h, + userStyles: [] + }; + var i = this.selectionSymbolizer, + j = c[f]; + 0 <= j.type.indexOf("Polygon") ? i = { + Polygon: this.selectionSymbolizer.Polygon + } : 0 <= j.type.indexOf("LineString") ? i = { + Line: this.selectionSymbolizer.Line + } : 0 <= j.type.indexOf("Point") && (i = { + Point: this.selectionSymbolizer.Point + }); + d.namedLayers[h].userStyles.push({ + name: "default", + rules: [new OpenLayers.Rule({ + symbolizer: i, + filter: b[f], + maxScaleDenominator: a.options.minScale + })] + }) + } + return (new OpenLayers.Format.SLD({ + srsName: this.map.getProjection() + })).write(d) + }, + parseDescribeLayer: function(a) { + var b = new OpenLayers.Format.WMSDescribeLayer, + c = a.responseXML; + if (!c || !c.documentElement) c = a.responseText; + for (var a = b.read(c), b = [], c = null, d = 0, e = a.length; d < e; d++) "WFS" == a[d].owsType && (b.push(a[d].typeName), c = a[d].owsURL); + OpenLayers.Request.GET({ + url: c, + params: { + SERVICE: "WFS", + TYPENAME: b.toString(), + REQUEST: "DescribeFeatureType", + VERSION: "1.0.0" + }, + callback: function(a) { + var b = new OpenLayers.Format.WFSDescribeFeatureType, + c = a.responseXML; + if (!c || !c.documentElement) c = a.responseText; + this.control.wfsCache[this.layer.id] = b.read(c); + this.control._queue && this.control.applySelection() + }, + scope: this + }) + }, + getGeometryAttributes: function(a) { + for (var b = [], a = this.wfsCache[a.id], c = 0, d = a.featureTypes.length; c < d; c++) + for (var e = a.featureTypes[c].properties, f = 0, g = e.length; f < g; f++) { + var h = e[f], + i = h.type; + (0 <= i.indexOf("LineString") || 0 <= i.indexOf("GeometryAssociationType") || + 0 <= i.indexOf("GeometryPropertyType") || 0 <= i.indexOf("Point") || 0 <= i.indexOf("Polygon")) && b.push(h) + } + return b + }, + activate: function() { + var a = OpenLayers.Control.prototype.activate.call(this); + if (a) + for (var b = 0, c = this.layers.length; b < c; b++) { + var d = this.layers[b]; + d && !this.wfsCache[d.id] && OpenLayers.Request.GET({ + url: d.url, + params: { + SERVICE: "WMS", + VERSION: d.params.VERSION, + LAYERS: d.params.LAYERS, + REQUEST: "DescribeLayer" + }, + callback: this.parseDescribeLayer, + scope: { + layer: d, + control: this + } + }) + } + return a + }, + deactivate: function() { + var a = + OpenLayers.Control.prototype.deactivate.call(this); + if (a) + for (var b = 0, c = this.layers.length; b < c; b++) { + var d = this.layers[b]; + if (d && !0 === this.clearOnDeactivate) { + var e = this.layerCache, + f = e[d.id]; + f && (d.events.un({ + visibilitychanged: this.coupleLayerVisiblity, + scope: f + }), f.destroy(), delete e[d.id]) + } + } + return a + }, + setLayers: function(a) { + this.active ? (this.deactivate(), this.layers = a, this.activate()) : this.layers = a + }, + createFilter: function(a, b) { + var c = null; + this.handler instanceof OpenLayers.Handler.RegularPolygon ? c = !0 === this.handler.irregular ? + new OpenLayers.Filter.Spatial({ + type: OpenLayers.Filter.Spatial.BBOX, + property: a.name, + value: b.getBounds() + }) : new OpenLayers.Filter.Spatial({ + type: OpenLayers.Filter.Spatial.INTERSECTS, + property: a.name, + value: b + }) : this.handler instanceof OpenLayers.Handler.Polygon ? c = new OpenLayers.Filter.Spatial({ + type: OpenLayers.Filter.Spatial.INTERSECTS, + property: a.name, + value: b + }) : this.handler instanceof OpenLayers.Handler.Path ? c = 0 <= a.type.indexOf("Point") ? new OpenLayers.Filter.Spatial({ + type: OpenLayers.Filter.Spatial.DWITHIN, + property: a.name, + distance: 0.01 * this.map.getExtent().getWidth(), + distanceUnits: this.map.getUnits(), + value: b + }) : new OpenLayers.Filter.Spatial({ + type: OpenLayers.Filter.Spatial.INTERSECTS, + property: a.name, + value: b + }) : this.handler instanceof OpenLayers.Handler.Click && (c = 0 <= a.type.indexOf("Polygon") ? new OpenLayers.Filter.Spatial({ + type: OpenLayers.Filter.Spatial.INTERSECTS, + property: a.name, + value: b + }) : new OpenLayers.Filter.Spatial({ + type: OpenLayers.Filter.Spatial.DWITHIN, + property: a.name, + distance: 0.01 * this.map.getExtent().getWidth(), + distanceUnits: this.map.getUnits(), + value: b + })); + return c + }, + select: function(a) { + this._queue = function() { + for (var b = 0, c = this.layers.length; b < c; b++) { + for (var d = this.layers[b], e = this.getGeometryAttributes(d), f = [], g = 0, h = e.length; g < h; g++) { + var i = e[g]; + if (null !== i) { + if (!(a instanceof OpenLayers.Geometry)) { + var j = this.map.getLonLatFromPixel(a.xy); + a = new OpenLayers.Geometry.Point(j.lon, j.lat) + } + i = this.createFilter(i, a); + null !== i && f.push(i) + } + } + g = this.createSelectionLayer(d); + e = this.createSLD(d, f, e); + this.events.triggerEvent("selected", { + layer: d, + filters: f + }); + g.mergeNewParams({ + SLD_BODY: e + }); + delete this._queue + } + }; + this.applySelection() + }, + applySelection: function() { + for (var a = !0, b = 0, c = this.layers.length; b < c; b++) + if (!this.wfsCache[this.layers[b].id]) { + a = !1; + break + } + a && this._queue.call(this) + }, + CLASS_NAME: "OpenLayers.Control.SLDSelect" +}); +OpenLayers.Control.Scale = OpenLayers.Class(OpenLayers.Control, { + element: null, + geodesic: !1, + initialize: function(a, b) { + OpenLayers.Control.prototype.initialize.apply(this, [b]); + this.element = OpenLayers.Util.getElement(a) + }, + draw: function() { + OpenLayers.Control.prototype.draw.apply(this, arguments); + this.element || (this.element = document.createElement("div"), this.div.appendChild(this.element)); + this.map.events.register("moveend", this, this.updateScale); + this.updateScale(); + return this.div + }, + updateScale: function() { + var a; + if (!0 === this.geodesic) { + if (!this.map.getUnits()) return; + a = OpenLayers.INCHES_PER_UNIT; + a = (this.map.getGeodesicPixelSize().w || 1.0E-6) * a.km * OpenLayers.DOTS_PER_INCH + } else a = this.map.getScale(); + a && (a = 9500 <= a && 95E4 >= a ? Math.round(a / 1E3) + "K" : 95E4 <= a ? Math.round(a / 1E6) + "M" : Math.round(a), this.element.innerHTML = OpenLayers.i18n("Scale = 1 : ${scaleDenom}", { + scaleDenom: a + })) + }, + CLASS_NAME: "OpenLayers.Control.Scale" +}); +OpenLayers.Control.Button = OpenLayers.Class(OpenLayers.Control, { + type: OpenLayers.Control.TYPE_BUTTON, + trigger: function() {}, + CLASS_NAME: "OpenLayers.Control.Button" +}); +OpenLayers.Layer.MapGuide = OpenLayers.Class(OpenLayers.Layer.Grid, { + isBaseLayer: !0, + useHttpTile: !1, + singleTile: !1, + useOverlay: !1, + useAsyncOverlay: !0, + TILE_PARAMS: { + operation: "GETTILEIMAGE", + version: "1.2.0" + }, + SINGLE_TILE_PARAMS: { + operation: "GETMAPIMAGE", + format: "PNG", + locale: "en", + clip: "1", + version: "1.0.0" + }, + OVERLAY_PARAMS: { + operation: "GETDYNAMICMAPOVERLAYIMAGE", + format: "PNG", + locale: "en", + clip: "1", + version: "2.0.0" + }, + FOLDER_PARAMS: { + tileColumnsPerFolder: 30, + tileRowsPerFolder: 30, + format: "png", + querystring: null + }, + defaultSize: new OpenLayers.Size(300, + 300), + tileOriginCorner: "tl", + initialize: function(a, b, c, d) { + OpenLayers.Layer.Grid.prototype.initialize.apply(this, arguments); + if (null == d || null == d.isBaseLayer) this.isBaseLayer = "true" != this.transparent && !0 != this.transparent; + d && null != d.useOverlay && (this.useOverlay = d.useOverlay); + this.singleTile ? this.useOverlay ? (OpenLayers.Util.applyDefaults(this.params, this.OVERLAY_PARAMS), this.useAsyncOverlay || (this.params.version = "1.0.0")) : OpenLayers.Util.applyDefaults(this.params, this.SINGLE_TILE_PARAMS) : (this.useHttpTile ? + OpenLayers.Util.applyDefaults(this.params, this.FOLDER_PARAMS) : OpenLayers.Util.applyDefaults(this.params, this.TILE_PARAMS), this.setTileSize(this.defaultSize)) + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.MapGuide(this.name, this.url, this.params, this.getOptions())); + return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [a]) + }, + getURL: function(a) { + var b; + b = a.getCenterLonLat(); + var c = this.map.getSize(); + this.singleTile ? (a = { + setdisplaydpi: OpenLayers.DOTS_PER_INCH, + setdisplayheight: c.h * this.ratio, + setdisplaywidth: c.w * + this.ratio, + setviewcenterx: b.lon, + setviewcentery: b.lat, + setviewscale: this.map.getScale() + }, this.useOverlay && !this.useAsyncOverlay && (b = {}, b = OpenLayers.Util.extend(b, a), b.operation = "GETVISIBLEMAPEXTENT", b.version = "1.0.0", b.session = this.params.session, b.mapName = this.params.mapName, b.format = "text/xml", b = this.getFullRequestString(b), OpenLayers.Request.GET({ + url: b, + async: !1 + })), b = this.getFullRequestString(a)) : (c = this.map.getResolution(), b = Math.floor((a.left - this.maxExtent.left) / c), b = Math.round(b / this.tileSize.w), + a = Math.floor((this.maxExtent.top - a.top) / c), a = Math.round(a / this.tileSize.h), b = this.useHttpTile ? this.getImageFilePath({ + tilecol: b, + tilerow: a, + scaleindex: this.resolutions.length - this.map.zoom - 1 + }) : this.getFullRequestString({ + tilecol: b, + tilerow: a, + scaleindex: this.resolutions.length - this.map.zoom - 1 + })); + return b + }, + getFullRequestString: function(a, b) { + var c = null == b ? this.url : b; + "object" == typeof c && (c = c[Math.floor(Math.random() * c.length)]); + var d = c, + e = OpenLayers.Util.extend({}, this.params), + e = OpenLayers.Util.extend(e, a), + f = OpenLayers.Util.upperCaseObject(OpenLayers.Util.getParameters(c)), + g; + for (g in e) g.toUpperCase() in f && delete e[g]; + e = OpenLayers.Util.getParameterString(e); + e = e.replace(/,/g, "+"); + "" != e && (f = c.charAt(c.length - 1), d = "&" == f || "?" == f ? d + e : -1 == c.indexOf("?") ? d + ("?" + e) : d + ("&" + e)); + return d + }, + getImageFilePath: function(a, b) { + var c = null == b ? this.url : b; + "object" == typeof c && (c = c[Math.floor(Math.random() * c.length)]); + var d = "", + e = ""; + 0 > a.tilerow && (d = "-"); + d = 0 == a.tilerow ? d + "0" : d + Math.floor(Math.abs(a.tilerow / this.params.tileRowsPerFolder)) * + this.params.tileRowsPerFolder; + 0 > a.tilecol && (e = "-"); + e = 0 == a.tilecol ? e + "0" : e + Math.floor(Math.abs(a.tilecol / this.params.tileColumnsPerFolder)) * this.params.tileColumnsPerFolder; + d = "/S" + Math.floor(a.scaleindex) + "/" + this.params.basemaplayergroupname + "/R" + d + "/C" + e + "/" + a.tilerow % this.params.tileRowsPerFolder + "_" + a.tilecol % this.params.tileColumnsPerFolder + "." + this.params.format; + this.params.querystring && (d += "?" + this.params.querystring); + return c + d + }, + calculateGridLayout: function(a, b, c) { + var d = c * this.tileSize.w, + c = + c * this.tileSize.h, + e = a.left - b.lon, + f = Math.floor(e / d) - this.buffer, + a = b.lat - a.top + c, + g = Math.floor(a / c) - this.buffer; + return { + tilelon: d, + tilelat: c, + tileoffsetlon: b.lon + f * d, + tileoffsetlat: b.lat - c * g, + tileoffsetx: -(e / d - f) * this.tileSize.w, + tileoffsety: (g - a / c) * this.tileSize.h + } + }, + CLASS_NAME: "OpenLayers.Layer.MapGuide" +}); +OpenLayers.Control.Measure = OpenLayers.Class(OpenLayers.Control, { + handlerOptions: null, + callbacks: null, + displaySystem: "metric", + geodesic: !1, + displaySystemUnits: { + geographic: ["dd"], + english: ["mi", "ft", "in"], + metric: ["km", "m"] + }, + partialDelay: 300, + delayedTrigger: null, + persist: !1, + immediate: !1, + initialize: function(a, b) { + OpenLayers.Control.prototype.initialize.apply(this, [b]); + var c = { + done: this.measureComplete, + point: this.measurePartial + }; + this.immediate && (c.modify = this.measureImmediate); + this.callbacks = OpenLayers.Util.extend(c, + this.callbacks); + this.handlerOptions = OpenLayers.Util.extend({ + persist: this.persist + }, this.handlerOptions); + this.handler = new a(this, this.callbacks, this.handlerOptions) + }, + deactivate: function() { + this.cancelDelay(); + return OpenLayers.Control.prototype.deactivate.apply(this, arguments) + }, + cancel: function() { + this.cancelDelay(); + this.handler.cancel() + }, + setImmediate: function(a) { + (this.immediate = a) ? this.callbacks.modify = this.measureImmediate: delete this.callbacks.modify + }, + updateHandler: function(a, b) { + var c = this.active; + c && + this.deactivate(); + this.handler = new a(this, this.callbacks, b); + c && this.activate() + }, + measureComplete: function(a) { + this.cancelDelay(); + this.measure(a, "measure") + }, + measurePartial: function(a, b) { + this.cancelDelay(); + b = b.clone(); + this.handler.freehandMode(this.handler.evt) ? this.measure(b, "measurepartial") : this.delayedTrigger = window.setTimeout(OpenLayers.Function.bind(function() { + this.delayedTrigger = null; + this.measure(b, "measurepartial") + }, this), this.partialDelay) + }, + measureImmediate: function(a, b, c) { + c && !this.handler.freehandMode(this.handler.evt) && + (this.cancelDelay(), this.measure(b.geometry, "measurepartial")) + }, + cancelDelay: function() { + null !== this.delayedTrigger && (window.clearTimeout(this.delayedTrigger), this.delayedTrigger = null) + }, + measure: function(a, b) { + var c, d; - 1 < a.CLASS_NAME.indexOf("LineString") ? (c = this.getBestLength(a), d = 1) : (c = this.getBestArea(a), d = 2); + this.events.triggerEvent(b, { + measure: c[0], + units: c[1], + order: d, + geometry: a + }) + }, + getBestArea: function(a) { + for (var b = this.displaySystemUnits[this.displaySystem], c, d, e = 0, f = b.length; e < f && !(c = b[e], d = this.getArea(a, + c), 1 < d); ++e); + return [d, c] + }, + getArea: function(a, b) { + var c, d; + this.geodesic ? (c = a.getGeodesicArea(this.map.getProjectionObject()), d = "m") : (c = a.getArea(), d = this.map.getUnits()); + var e = OpenLayers.INCHES_PER_UNIT[b]; + e && (c *= Math.pow(OpenLayers.INCHES_PER_UNIT[d] / e, 2)); + return c + }, + getBestLength: function(a) { + for (var b = this.displaySystemUnits[this.displaySystem], c, d, e = 0, f = b.length; e < f && !(c = b[e], d = this.getLength(a, c), 1 < d); ++e); + return [d, c] + }, + getLength: function(a, b) { + var c, d; + this.geodesic ? (c = a.getGeodesicLength(this.map.getProjectionObject()), + d = "m") : (c = a.getLength(), d = this.map.getUnits()); + var e = OpenLayers.INCHES_PER_UNIT[b]; + e && (c *= OpenLayers.INCHES_PER_UNIT[d] / e); + return c + }, + CLASS_NAME: "OpenLayers.Control.Measure" +}); +OpenLayers.Format.WMC.v1_0_0 = OpenLayers.Class(OpenLayers.Format.WMC.v1, { + VERSION: "1.0.0", + schemaLocation: "http://www.opengis.net/context http://schemas.opengis.net/context/1.0.0/context.xsd", + initialize: function(a) { + OpenLayers.Format.WMC.v1.prototype.initialize.apply(this, [a]) + }, + read_wmc_SRS: function(a, b) { + var c = this.getChildValue(b); + "object" != typeof a.projections && (a.projections = {}); + for (var c = c.split(/ +/), d = 0, e = c.length; d < e; d++) a.projections[c[d]] = !0 + }, + write_wmc_Layer: function(a) { + var b = OpenLayers.Format.WMC.v1.prototype.write_wmc_Layer.apply(this, [a]); + if (a.srs) { + var c = [], + d; + for (d in a.srs) c.push(d); + b.appendChild(this.createElementDefaultNS("SRS", c.join(" "))) + } + b.appendChild(this.write_wmc_FormatList(a)); + b.appendChild(this.write_wmc_StyleList(a)); + a.dimensions && b.appendChild(this.write_wmc_DimensionList(a)); + b.appendChild(this.write_wmc_LayerExtension(a)) + }, + CLASS_NAME: "OpenLayers.Format.WMC.v1_0_0" +}); +OpenLayers.Popup.Framed = OpenLayers.Class(OpenLayers.Popup.Anchored, { + imageSrc: null, + imageSize: null, + isAlphaImage: !1, + positionBlocks: null, + blocks: null, + fixedRelativePosition: !1, + initialize: function(a, b, c, d, e, f, g) { + OpenLayers.Popup.Anchored.prototype.initialize.apply(this, arguments); + this.fixedRelativePosition && (this.updateRelativePosition(), this.calculateRelativePosition = function() { + return this.relativePosition + }); + this.contentDiv.style.position = "absolute"; + this.contentDiv.style.zIndex = 1; + f && (this.closeDiv.style.zIndex = + 1); + this.groupDiv.style.position = "absolute"; + this.groupDiv.style.top = "0px"; + this.groupDiv.style.left = "0px"; + this.groupDiv.style.height = "100%"; + this.groupDiv.style.width = "100%" + }, + destroy: function() { + this.isAlphaImage = this.imageSize = this.imageSrc = null; + this.fixedRelativePosition = !1; + this.positionBlocks = null; + for (var a = 0; a < this.blocks.length; a++) { + var b = this.blocks[a]; + b.image && b.div.removeChild(b.image); + b.image = null; + b.div && this.groupDiv.removeChild(b.div); + b.div = null + } + this.blocks = null; + OpenLayers.Popup.Anchored.prototype.destroy.apply(this, + arguments) + }, + setBackgroundColor: function() {}, + setBorder: function() {}, + setOpacity: function() {}, + setSize: function(a) { + OpenLayers.Popup.Anchored.prototype.setSize.apply(this, arguments); + this.updateBlocks() + }, + updateRelativePosition: function() { + this.padding = this.positionBlocks[this.relativePosition].padding; + if (this.closeDiv) { + var a = this.getContentDivPadding(); + this.closeDiv.style.right = a.right + this.padding.right + "px"; + this.closeDiv.style.top = a.top + this.padding.top + "px" + } + this.updateBlocks() + }, + calculateNewPx: function(a) { + var b = + OpenLayers.Popup.Anchored.prototype.calculateNewPx.apply(this, arguments); + return b = b.offset(this.positionBlocks[this.relativePosition].offset) + }, + createBlocks: function() { + this.blocks = []; + var a = null, + b; + for (b in this.positionBlocks) { + a = b; + break + } + a = this.positionBlocks[a]; + for (b = 0; b < a.blocks.length; b++) { + var c = {}; + this.blocks.push(c); + c.div = OpenLayers.Util.createDiv(this.id + "_FrameDecorationDiv_" + b, null, null, null, "absolute", null, "hidden", null); + c.image = (this.isAlphaImage ? OpenLayers.Util.createAlphaImageDiv : OpenLayers.Util.createImage)(this.id + + "_FrameDecorationImg_" + b, null, this.imageSize, this.imageSrc, "absolute", null, null, null); + c.div.appendChild(c.image); + this.groupDiv.appendChild(c.div) + } + }, + updateBlocks: function() { + this.blocks || this.createBlocks(); + if (this.size && this.relativePosition) { + for (var a = this.positionBlocks[this.relativePosition], b = 0; b < a.blocks.length; b++) { + var c = a.blocks[b], + d = this.blocks[b], + e = c.anchor.left, + f = c.anchor.bottom, + g = c.anchor.right, + h = c.anchor.top, + i = isNaN(c.size.w) ? this.size.w - (g + e) : c.size.w, + j = isNaN(c.size.h) ? this.size.h - (f + + h) : c.size.h; + d.div.style.width = (0 > i ? 0 : i) + "px"; + d.div.style.height = (0 > j ? 0 : j) + "px"; + d.div.style.left = null != e ? e + "px" : ""; + d.div.style.bottom = null != f ? f + "px" : ""; + d.div.style.right = null != g ? g + "px" : ""; + d.div.style.top = null != h ? h + "px" : ""; + d.image.style.left = c.position.x + "px"; + d.image.style.top = c.position.y + "px" + } + this.contentDiv.style.left = this.padding.left + "px"; + this.contentDiv.style.top = this.padding.top + "px" + } + }, + CLASS_NAME: "OpenLayers.Popup.Framed" +}); +OpenLayers.Popup.FramedCloud = OpenLayers.Class(OpenLayers.Popup.Framed, { + contentDisplayClass: "olFramedCloudPopupContent", + autoSize: !0, + panMapIfOutOfView: !0, + imageSize: new OpenLayers.Size(1276, 736), + isAlphaImage: !1, + fixedRelativePosition: !1, + positionBlocks: { + tl: { + offset: new OpenLayers.Pixel(44, 0), + padding: new OpenLayers.Bounds(8, 40, 8, 9), + blocks: [{ + size: new OpenLayers.Size("auto", "auto"), + anchor: new OpenLayers.Bounds(0, 51, 22, 0), + position: new OpenLayers.Pixel(0, 0) + }, { + size: new OpenLayers.Size(22, "auto"), + anchor: new OpenLayers.Bounds(null, + 50, 0, 0), + position: new OpenLayers.Pixel(-1238, 0) + }, { + size: new OpenLayers.Size("auto", 19), + anchor: new OpenLayers.Bounds(0, 32, 22, null), + position: new OpenLayers.Pixel(0, -631) + }, { + size: new OpenLayers.Size(22, 18), + anchor: new OpenLayers.Bounds(null, 32, 0, null), + position: new OpenLayers.Pixel(-1238, -632) + }, { + size: new OpenLayers.Size(81, 35), + anchor: new OpenLayers.Bounds(null, 0, 0, null), + position: new OpenLayers.Pixel(0, -688) + }] + }, + tr: { + offset: new OpenLayers.Pixel(-45, 0), + padding: new OpenLayers.Bounds(8, 40, 8, 9), + blocks: [{ + size: new OpenLayers.Size("auto", + "auto"), + anchor: new OpenLayers.Bounds(0, 51, 22, 0), + position: new OpenLayers.Pixel(0, 0) + }, { + size: new OpenLayers.Size(22, "auto"), + anchor: new OpenLayers.Bounds(null, 50, 0, 0), + position: new OpenLayers.Pixel(-1238, 0) + }, { + size: new OpenLayers.Size("auto", 19), + anchor: new OpenLayers.Bounds(0, 32, 22, null), + position: new OpenLayers.Pixel(0, -631) + }, { + size: new OpenLayers.Size(22, 19), + anchor: new OpenLayers.Bounds(null, 32, 0, null), + position: new OpenLayers.Pixel(-1238, -631) + }, { + size: new OpenLayers.Size(81, 35), + anchor: new OpenLayers.Bounds(0, + 0, null, null), + position: new OpenLayers.Pixel(-215, -687) + }] + }, + bl: { + offset: new OpenLayers.Pixel(45, 0), + padding: new OpenLayers.Bounds(8, 9, 8, 40), + blocks: [{ + size: new OpenLayers.Size("auto", "auto"), + anchor: new OpenLayers.Bounds(0, 21, 22, 32), + position: new OpenLayers.Pixel(0, 0) + }, { + size: new OpenLayers.Size(22, "auto"), + anchor: new OpenLayers.Bounds(null, 21, 0, 32), + position: new OpenLayers.Pixel(-1238, 0) + }, { + size: new OpenLayers.Size("auto", 21), + anchor: new OpenLayers.Bounds(0, 0, 22, null), + position: new OpenLayers.Pixel(0, -629) + }, { + size: new OpenLayers.Size(22, + 21), + anchor: new OpenLayers.Bounds(null, 0, 0, null), + position: new OpenLayers.Pixel(-1238, -629) + }, { + size: new OpenLayers.Size(81, 33), + anchor: new OpenLayers.Bounds(null, null, 0, 0), + position: new OpenLayers.Pixel(-101, -674) + }] + }, + br: { + offset: new OpenLayers.Pixel(-44, 0), + padding: new OpenLayers.Bounds(8, 9, 8, 40), + blocks: [{ + size: new OpenLayers.Size("auto", "auto"), + anchor: new OpenLayers.Bounds(0, 21, 22, 32), + position: new OpenLayers.Pixel(0, 0) + }, { + size: new OpenLayers.Size(22, "auto"), + anchor: new OpenLayers.Bounds(null, 21, 0, 32), + position: new OpenLayers.Pixel(-1238, + 0) + }, { + size: new OpenLayers.Size("auto", 21), + anchor: new OpenLayers.Bounds(0, 0, 22, null), + position: new OpenLayers.Pixel(0, -629) + }, { + size: new OpenLayers.Size(22, 21), + anchor: new OpenLayers.Bounds(null, 0, 0, null), + position: new OpenLayers.Pixel(-1238, -629) + }, { + size: new OpenLayers.Size(81, 33), + anchor: new OpenLayers.Bounds(0, null, null, 0), + position: new OpenLayers.Pixel(-311, -674) + }] + } + }, + minSize: new OpenLayers.Size(105, 10), + maxSize: new OpenLayers.Size(1200, 660), + initialize: function(a, b, c, d, e, f, g) { + this.imageSrc = OpenLayers.Util.getImageLocation("cloud-popup-relative.png"); + OpenLayers.Popup.Framed.prototype.initialize.apply(this, arguments); + this.contentDiv.className = this.contentDisplayClass + }, + CLASS_NAME: "OpenLayers.Popup.FramedCloud" +}); +OpenLayers.Tile.Image.IFrame = { + useIFrame: null, + draw: function() { + if (OpenLayers.Tile.Image.prototype.shouldDraw.call(this)) { + var a = this.layer.getURL(this.bounds), + b = this.useIFrame; + this.useIFrame = null !== this.maxGetUrlLength && !this.layer.async && a.length > this.maxGetUrlLength; + a = b && !this.useIFrame; + b = !b && this.useIFrame; + if (a || b) this.imgDiv && this.imgDiv.parentNode === this.frame && this.frame.removeChild(this.imgDiv), this.imgDiv = null, a ? (this.blankImageUrl = this._blankImageUrl, this.frame.removeChild(this.frame.firstChild)) : + (this._blankImageUrl = this.blankImageUrl, this.blankImageUrl = "about:blank") + } + return OpenLayers.Tile.Image.prototype.draw.apply(this, arguments) + }, + getImage: function() { + if (!0 === this.useIFrame) { + if (!this.frame.childNodes.length) { + var a = document.createElement("div"), + b = a.style; + b.position = "absolute"; + b.width = "100%"; + b.height = "100%"; + b.zIndex = 1; + b.backgroundImage = "url(" + this._blankImageUrl + ")"; + this.frame.appendChild(a) + } + a = this.id + "_iFrame"; + 9 > parseFloat(navigator.appVersion.split("MSIE")[1]) ? (b = document.createElement('<iframe name="' + + a + '">'), b.style.backgroundColor = "#FFFFFF", b.style.filter = "chroma(color=#FFFFFF)") : (b = document.createElement("iframe"), b.style.backgroundColor = "transparent", b.name = a); + b.scrolling = "no"; + b.marginWidth = "0px"; + b.marginHeight = "0px"; + b.frameBorder = "0"; + b.style.position = "absolute"; + b.style.width = "100%"; + b.style.height = "100%"; + 1 > this.layer.opacity && OpenLayers.Util.modifyDOMElement(b, null, null, null, null, null, null, this.layer.opacity); + this.frame.appendChild(b); + return this.imgDiv = b + } + return OpenLayers.Tile.Image.prototype.getImage.apply(this, + arguments) + }, + createRequestForm: function() { + var a = document.createElement("form"); + a.method = "POST"; + var b = this.layer.params._OLSALT, + b = (b ? b + "_" : "") + this.bounds.toBBOX(); + a.action = OpenLayers.Util.urlAppend(this.layer.url, b); + a.target = this.id + "_iFrame"; + this.layer.getImageSize(); + var b = OpenLayers.Util.getParameters(this.url), + c, d; + for (d in b) c = document.createElement("input"), c.type = "hidden", c.name = d, c.value = b[d], a.appendChild(c); + return a + }, + setImgSrc: function(a) { + if (!0 === this.useIFrame) + if (a) { + var b = this.createRequestForm(); + this.frame.appendChild(b); + b.submit(); + this.frame.removeChild(b) + } else this.imgDiv.parentNode === this.frame && (this.frame.removeChild(this.imgDiv), this.imgDiv = null); + else OpenLayers.Tile.Image.prototype.setImgSrc.apply(this, arguments) + }, + onImageLoad: function() { + OpenLayers.Tile.Image.prototype.onImageLoad.apply(this, arguments); + !0 === this.useIFrame && (this.imgDiv.style.opacity = 1, this.frame.style.opacity = this.layer.opacity) + }, + createBackBuffer: function() { + var a; + !1 === this.useIFrame && (a = OpenLayers.Tile.Image.prototype.createBackBuffer.call(this)); + return a + } +}; +OpenLayers.Format.SOSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, { + defaultVersion: "1.0.0", + CLASS_NAME: "OpenLayers.Format.SOSCapabilities" +}); +OpenLayers.Format.SOSCapabilities.v1_0_0 = OpenLayers.Class(OpenLayers.Format.SOSCapabilities, { + namespaces: { + ows: "http://www.opengis.net/ows/1.1", + sos: "http://www.opengis.net/sos/1.0", + gml: "http://www.opengis.net/gml", + xlink: "http://www.w3.org/1999/xlink" + }, + regExes: { + trimSpace: /^\s*|\s*$/g, + removeSpace: /\s*/g, + splitSpace: /\s+/, + trimComma: /\s*,\s*/g + }, + initialize: function(a) { + OpenLayers.Format.XML.prototype.initialize.apply(this, [a]); + this.options = a + }, + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + a && 9 == a.nodeType && (a = a.documentElement); + var b = {}; + this.readNode(a, b); + return b + }, + readers: { + gml: OpenLayers.Util.applyDefaults({ + name: function(a, b) { + b.name = this.getChildValue(a) + }, + TimePeriod: function(a, b) { + b.timePeriod = {}; + this.readChildNodes(a, b.timePeriod) + }, + beginPosition: function(a, b) { + b.beginPosition = this.getChildValue(a) + }, + endPosition: function(a, b) { + b.endPosition = this.getChildValue(a) + } + }, OpenLayers.Format.GML.v3.prototype.readers.gml), + sos: { + Capabilities: function(a, b) { + this.readChildNodes(a, b) + }, + Contents: function(a, + b) { + b.contents = {}; + this.readChildNodes(a, b.contents) + }, + ObservationOfferingList: function(a, b) { + b.offeringList = {}; + this.readChildNodes(a, b.offeringList) + }, + ObservationOffering: function(a, b) { + var c = this.getAttributeNS(a, this.namespaces.gml, "id"); + b[c] = { + procedures: [], + observedProperties: [], + featureOfInterestIds: [], + responseFormats: [], + resultModels: [], + responseModes: [] + }; + this.readChildNodes(a, b[c]) + }, + time: function(a, b) { + b.time = {}; + this.readChildNodes(a, b.time) + }, + procedure: function(a, b) { + b.procedures.push(this.getAttributeNS(a, + this.namespaces.xlink, "href")) + }, + observedProperty: function(a, b) { + b.observedProperties.push(this.getAttributeNS(a, this.namespaces.xlink, "href")) + }, + featureOfInterest: function(a, b) { + b.featureOfInterestIds.push(this.getAttributeNS(a, this.namespaces.xlink, "href")) + }, + responseFormat: function(a, b) { + b.responseFormats.push(this.getChildValue(a)) + }, + resultModel: function(a, b) { + b.resultModels.push(this.getChildValue(a)) + }, + responseMode: function(a, b) { + b.responseModes.push(this.getChildValue(a)) + } + }, + ows: OpenLayers.Format.OWSCommon.v1_1_0.prototype.readers.ows + }, + CLASS_NAME: "OpenLayers.Format.SOSCapabilities.v1_0_0" +}); +OpenLayers.Handler.Pinch = OpenLayers.Class(OpenLayers.Handler, { + started: !1, + stopDown: !1, + pinching: !1, + last: null, + start: null, + touchstart: function(a) { + var b = !0; + this.pinching = !1; + OpenLayers.Event.isMultiTouch(a) ? (this.started = !0, this.last = this.start = { + distance: this.getDistance(a.touches), + delta: 0, + scale: 1 + }, this.callback("start", [a, this.start]), b = !this.stopDown) : (this.started = !1, this.last = this.start = null); + OpenLayers.Event.stop(a); + return b + }, + touchmove: function(a) { + if (this.started && OpenLayers.Event.isMultiTouch(a)) { + this.pinching = !0; + var b = this.getPinchData(a); + this.callback("move", [a, b]); + this.last = b; + OpenLayers.Event.stop(a) + } + return !0 + }, + touchend: function(a) { + this.started && (this.pinching = this.started = !1, this.callback("done", [a, this.start, this.last]), this.last = this.start = null); + return !0 + }, + activate: function() { + var a = !1; + OpenLayers.Handler.prototype.activate.apply(this, arguments) && (this.pinching = !1, a = !0); + return a + }, + deactivate: function() { + var a = !1; + OpenLayers.Handler.prototype.deactivate.apply(this, arguments) && (this.pinching = this.started = !1, this.last = this.start = null, a = !0); + return a + }, + getDistance: function(a) { + var b = a[0], + a = a[1]; + return Math.sqrt(Math.pow(b.clientX - a.clientX, 2) + Math.pow(b.clientY - a.clientY, 2)) + }, + getPinchData: function(a) { + a = this.getDistance(a.touches); + return { + distance: a, + delta: this.last.distance - a, + scale: a / this.start.distance + } + }, + CLASS_NAME: "OpenLayers.Handler.Pinch" +}); +OpenLayers.Control.NavToolbar = OpenLayers.Class(OpenLayers.Control.Panel, { + initialize: function(a) { + OpenLayers.Control.Panel.prototype.initialize.apply(this, [a]); + this.addControls([new OpenLayers.Control.Navigation, new OpenLayers.Control.ZoomBox]) + }, + draw: function() { + var a = OpenLayers.Control.Panel.prototype.draw.apply(this, arguments); + null === this.defaultControl && (this.defaultControl = this.controls[0]); + return a + }, + CLASS_NAME: "OpenLayers.Control.NavToolbar" +}); +OpenLayers.Strategy.Refresh = OpenLayers.Class(OpenLayers.Strategy, { + force: !1, + interval: 0, + timer: null, + activate: function() { + var a = OpenLayers.Strategy.prototype.activate.call(this); + a && (!0 === this.layer.visibility && this.start(), this.layer.events.on({ + visibilitychanged: this.reset, + scope: this + })); + return a + }, + deactivate: function() { + var a = OpenLayers.Strategy.prototype.deactivate.call(this); + a && this.stop(); + return a + }, + reset: function() { + !0 === this.layer.visibility ? this.start() : this.stop() + }, + start: function() { + this.interval && ("number" === + typeof this.interval && 0 < this.interval) && (this.timer = window.setInterval(OpenLayers.Function.bind(this.refresh, this), this.interval)) + }, + refresh: function() { + this.layer && (this.layer.refresh && "function" == typeof this.layer.refresh) && this.layer.refresh({ + force: this.force + }) + }, + stop: function() { + null !== this.timer && (window.clearInterval(this.timer), this.timer = null) + }, + CLASS_NAME: "OpenLayers.Strategy.Refresh" +}); +OpenLayers.Layer.ArcGIS93Rest = OpenLayers.Class(OpenLayers.Layer.Grid, { + DEFAULT_PARAMS: { + format: "png" + }, + isBaseLayer: !0, + initialize: function(a, b, c, d) { + var e = [], + c = OpenLayers.Util.upperCaseObject(c); + e.push(a, b, c, d); + OpenLayers.Layer.Grid.prototype.initialize.apply(this, e); + OpenLayers.Util.applyDefaults(this.params, OpenLayers.Util.upperCaseObject(this.DEFAULT_PARAMS)); + if (this.params.TRANSPARENT && "true" == this.params.TRANSPARENT.toString().toLowerCase()) { + if (null == d || !d.isBaseLayer) this.isBaseLayer = !1; + "jpg" == this.params.FORMAT && + (this.params.FORMAT = OpenLayers.Util.alphaHack() ? "gif" : "png") + } + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.ArcGIS93Rest(this.name, this.url, this.params, this.getOptions())); + return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [a]) + }, + getURL: function(a) { + var a = this.adjustBounds(a), + b = this.projection.getCode().split(":"), + b = b[b.length - 1], + c = this.getImageSize(), + a = { + BBOX: a.toBBOX(), + SIZE: c.w + "," + c.h, + F: "image", + BBOXSR: b, + IMAGESR: b + }; + if (this.layerDefs) { + var b = [], + d; + for (d in this.layerDefs) this.layerDefs.hasOwnProperty(d) && + this.layerDefs[d] && (b.push(d), b.push(":"), b.push(this.layerDefs[d]), b.push(";")); + 0 < b.length && (a.LAYERDEFS = b.join("")) + } + return this.getFullRequestString(a) + }, + setLayerFilter: function(a, b) { + this.layerDefs || (this.layerDefs = {}); + b ? this.layerDefs[a] = b : delete this.layerDefs[a] + }, + clearLayerFilter: function(a) { + a ? delete this.layerDefs[a] : delete this.layerDefs + }, + mergeNewParams: function(a) { + a = [OpenLayers.Util.upperCaseObject(a)]; + return OpenLayers.Layer.Grid.prototype.mergeNewParams.apply(this, a) + }, + CLASS_NAME: "OpenLayers.Layer.ArcGIS93Rest" +}); +OpenLayers.Format.WKT = OpenLayers.Class(OpenLayers.Format, { + initialize: function(a) { + this.regExes = { + typeStr: /^\s*(\w+)\s*\(\s*(.*)\s*\)\s*$/, + spaces: /\s+/, + parenComma: /\)\s*,\s*\(/, + doubleParenComma: /\)\s*\)\s*,\s*\(\s*\(/, + trimParens: /^\s*\(?(.*?)\)?\s*$/ + }; + OpenLayers.Format.prototype.initialize.apply(this, [a]) + }, + read: function(a) { + var b, c, a = a.replace(/[\n\r]/g, " "); + if (c = this.regExes.typeStr.exec(a)) + if (a = c[1].toLowerCase(), c = c[2], this.parse[a] && (b = this.parse[a].apply(this, [c])), this.internalProjection && this.externalProjection) + if (b && + "OpenLayers.Feature.Vector" == b.CLASS_NAME) b.geometry.transform(this.externalProjection, this.internalProjection); + else if (b && "geometrycollection" != a && "object" == typeof b) { + a = 0; + for (c = b.length; a < c; a++) b[a].geometry.transform(this.externalProjection, this.internalProjection) + } + return b + }, + write: function(a) { + var b, c; + a.constructor == Array ? c = !0 : (a = [a], c = !1); + var d = []; + c && d.push("GEOMETRYCOLLECTION("); + for (var e = 0, f = a.length; e < f; ++e) c && 0 < e && d.push(","), b = a[e].geometry, d.push(this.extractGeometry(b)); + c && d.push(")"); + return d.join("") + }, + extractGeometry: function(a) { + var b = a.CLASS_NAME.split(".")[2].toLowerCase(); + if (!this.extract[b]) return null; + this.internalProjection && this.externalProjection && (a = a.clone(), a.transform(this.internalProjection, this.externalProjection)); + return ("collection" == b ? "GEOMETRYCOLLECTION" : b.toUpperCase()) + "(" + this.extract[b].apply(this, [a]) + ")" + }, + extract: { + point: function(a) { + return a.x + " " + a.y + }, + multipoint: function(a) { + for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push("(" + this.extract.point.apply(this, [a.components[c]]) + + ")"); + return b.join(",") + }, + linestring: function(a) { + for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push(this.extract.point.apply(this, [a.components[c]])); + return b.join(",") + }, + multilinestring: function(a) { + for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push("(" + this.extract.linestring.apply(this, [a.components[c]]) + ")"); + return b.join(",") + }, + polygon: function(a) { + for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push("(" + this.extract.linestring.apply(this, [a.components[c]]) + ")"); + return b.join(",") + }, + multipolygon: function(a) { + for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push("(" + this.extract.polygon.apply(this, [a.components[c]]) + ")"); + return b.join(",") + }, + collection: function(a) { + for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push(this.extractGeometry.apply(this, [a.components[c]])); + return b.join(",") + } + }, + parse: { + point: function(a) { + a = OpenLayers.String.trim(a).split(this.regExes.spaces); + return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(a[0], a[1])) + }, + multipoint: function(a) { + for (var b = OpenLayers.String.trim(a).split(","), + c = [], d = 0, e = b.length; d < e; ++d) a = b[d].replace(this.regExes.trimParens, "$1"), c.push(this.parse.point.apply(this, [a]).geometry); + return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.MultiPoint(c)) + }, + linestring: function(a) { + for (var a = OpenLayers.String.trim(a).split(","), b = [], c = 0, d = a.length; c < d; ++c) b.push(this.parse.point.apply(this, [a[c]]).geometry); + return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(b)) + }, + multilinestring: function(a) { + for (var b = OpenLayers.String.trim(a).split(this.regExes.parenComma), + c = [], d = 0, e = b.length; d < e; ++d) a = b[d].replace(this.regExes.trimParens, "$1"), c.push(this.parse.linestring.apply(this, [a]).geometry); + return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.MultiLineString(c)) + }, + polygon: function(a) { + for (var b, a = OpenLayers.String.trim(a).split(this.regExes.parenComma), c = [], d = 0, e = a.length; d < e; ++d) b = a[d].replace(this.regExes.trimParens, "$1"), b = this.parse.linestring.apply(this, [b]).geometry, b = new OpenLayers.Geometry.LinearRing(b.components), c.push(b); + return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon(c)) + }, + multipolygon: function(a) { + for (var b = OpenLayers.String.trim(a).split(this.regExes.doubleParenComma), c = [], d = 0, e = b.length; d < e; ++d) a = b[d].replace(this.regExes.trimParens, "$1"), c.push(this.parse.polygon.apply(this, [a]).geometry); + return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.MultiPolygon(c)) + }, + geometrycollection: function(a) { + for (var a = a.replace(/,\s*([A-Za-z])/g, "|$1"), a = OpenLayers.String.trim(a).split("|"), b = [], c = 0, d = a.length; c < d; ++c) b.push(OpenLayers.Format.WKT.prototype.read.apply(this, [a[c]])); + return b + } + }, + CLASS_NAME: "OpenLayers.Format.WKT" +}); +OpenLayers.Handler.Hover = OpenLayers.Class(OpenLayers.Handler, { + delay: 500, + pixelTolerance: null, + stopMove: !1, + px: null, + timerId: null, + mousemove: function(a) { + this.passesTolerance(a.xy) && (this.clearTimer(), this.callback("move", [a]), this.px = a.xy, a = OpenLayers.Util.extend({}, a), this.timerId = window.setTimeout(OpenLayers.Function.bind(this.delayedCall, this, a), this.delay)); + return !this.stopMove + }, + mouseout: function(a) { + OpenLayers.Util.mouseLeft(a, this.map.viewPortDiv) && (this.clearTimer(), this.callback("move", [a])); + return !0 + }, + passesTolerance: function(a) { + var b = !0; + this.pixelTolerance && this.px && Math.sqrt(Math.pow(this.px.x - a.x, 2) + Math.pow(this.px.y - a.y, 2)) < this.pixelTolerance && (b = !1); + return b + }, + clearTimer: function() { + null != this.timerId && (window.clearTimeout(this.timerId), this.timerId = null) + }, + delayedCall: function(a) { + this.callback("pause", [a]) + }, + deactivate: function() { + var a = !1; + OpenLayers.Handler.prototype.deactivate.apply(this, arguments) && (this.clearTimer(), a = !0); + return a + }, + CLASS_NAME: "OpenLayers.Handler.Hover" +}); +OpenLayers.Control.GetFeature = OpenLayers.Class(OpenLayers.Control, { + protocol: null, + multipleKey: null, + toggleKey: null, + modifiers: null, + multiple: !1, + click: !0, + single: !0, + clickout: !0, + toggle: !1, + clickTolerance: 5, + hover: !1, + box: !1, + maxFeatures: 10, + features: null, + hoverFeature: null, + handlerOptions: null, + handlers: null, + hoverResponse: null, + filterType: OpenLayers.Filter.Spatial.BBOX, + initialize: function(a) { + a.handlerOptions = a.handlerOptions || {}; + OpenLayers.Control.prototype.initialize.apply(this, [a]); + this.features = {}; + this.handlers = {}; + this.click && (this.handlers.click = new OpenLayers.Handler.Click(this, { + click: this.selectClick + }, this.handlerOptions.click || {})); + this.box && (this.handlers.box = new OpenLayers.Handler.Box(this, { + done: this.selectBox + }, OpenLayers.Util.extend(this.handlerOptions.box, { + boxDivClassName: "olHandlerBoxSelectFeature" + }))); + this.hover && (this.handlers.hover = new OpenLayers.Handler.Hover(this, { + move: this.cancelHover, + pause: this.selectHover + }, OpenLayers.Util.extend(this.handlerOptions.hover, { + delay: 250, + pixelTolerance: 2 + }))) + }, + activate: function() { + if (!this.active) + for (var a in this.handlers) this.handlers[a].activate(); + return OpenLayers.Control.prototype.activate.apply(this, arguments) + }, + deactivate: function() { + if (this.active) + for (var a in this.handlers) this.handlers[a].deactivate(); + return OpenLayers.Control.prototype.deactivate.apply(this, arguments) + }, + selectClick: function(a) { + var b = this.pixelToBounds(a.xy); + this.setModifiers(a); + this.request(b, { + single: this.single + }) + }, + selectBox: function(a) { + var b; + if (a instanceof OpenLayers.Bounds) b = + this.map.getLonLatFromPixel({ + x: a.left, + y: a.bottom + }), a = this.map.getLonLatFromPixel({ + x: a.right, + y: a.top + }), b = new OpenLayers.Bounds(b.lon, b.lat, a.lon, a.lat); + else { + if (this.click) return; + b = this.pixelToBounds(a) + } + this.setModifiers(this.handlers.box.dragHandler.evt); + this.request(b) + }, + selectHover: function(a) { + this.request(this.pixelToBounds(a.xy), { + single: !0, + hover: !0 + }) + }, + cancelHover: function() { + this.hoverResponse && (this.protocol.abort(this.hoverResponse), this.hoverResponse = null, OpenLayers.Element.removeClass(this.map.viewPortDiv, + "olCursorWait")) + }, + request: function(a, b) { + var b = b || {}, + c = new OpenLayers.Filter.Spatial({ + type: this.filterType, + value: a + }); + OpenLayers.Element.addClass(this.map.viewPortDiv, "olCursorWait"); + c = this.protocol.read({ + maxFeatures: !0 == b.single ? this.maxFeatures : void 0, + filter: c, + callback: function(c) { + c.success() && (c.features.length ? !0 == b.single ? this.selectBestFeature(c.features, a.getCenterLonLat(), b) : this.select(c.features) : b.hover ? this.hoverSelect() : (this.events.triggerEvent("clickout"), this.clickout && this.unselectAll())); + OpenLayers.Element.removeClass(this.map.viewPortDiv, "olCursorWait") + }, + scope: this + }); + !0 == b.hover && (this.hoverResponse = c) + }, + selectBestFeature: function(a, b, c) { + c = c || {}; + if (a.length) { + for (var b = new OpenLayers.Geometry.Point(b.lon, b.lat), d, e, f, g = Number.MAX_VALUE, h = 0; h < a.length && !(d = a[h], d.geometry && (f = b.distanceTo(d.geometry, { + edge: !1 + }), f < g && (g = f, e = d, 0 == g))); ++h); + !0 == c.hover ? this.hoverSelect(e) : this.select(e || a) + } + }, + setModifiers: function(a) { + this.modifiers = { + multiple: this.multiple || this.multipleKey && a[this.multipleKey], + toggle: this.toggle || this.toggleKey && a[this.toggleKey] + } + }, + select: function(a) { + !this.modifiers.multiple && !this.modifiers.toggle && this.unselectAll(); + OpenLayers.Util.isArray(a) || (a = [a]); + var b = this.events.triggerEvent("beforefeaturesselected", { + features: a + }); + if (!1 !== b) { + for (var c = [], d, e = 0, f = a.length; e < f; ++e) d = a[e], this.features[d.fid || d.id] ? this.modifiers.toggle && this.unselect(this.features[d.fid || d.id]) : (b = this.events.triggerEvent("beforefeatureselected", { + feature: d + }), !1 !== b && (this.features[d.fid || d.id] = d, + c.push(d), this.events.triggerEvent("featureselected", { + feature: d + }))); + this.events.triggerEvent("featuresselected", { + features: c + }) + } + }, + hoverSelect: function(a) { + var b = a ? a.fid || a.id : null, + c = this.hoverFeature ? this.hoverFeature.fid || this.hoverFeature.id : null; + c && c != b && (this.events.triggerEvent("outfeature", { + feature: this.hoverFeature + }), this.hoverFeature = null); + b && b != c && (this.events.triggerEvent("hoverfeature", { + feature: a + }), this.hoverFeature = a) + }, + unselect: function(a) { + delete this.features[a.fid || a.id]; + this.events.triggerEvent("featureunselected", { + feature: a + }) + }, + unselectAll: function() { + for (var a in this.features) this.unselect(this.features[a]) + }, + setMap: function(a) { + for (var b in this.handlers) this.handlers[b].setMap(a); + OpenLayers.Control.prototype.setMap.apply(this, arguments) + }, + pixelToBounds: function(a) { + var b = a.add(-this.clickTolerance / 2, this.clickTolerance / 2), + a = a.add(this.clickTolerance / 2, -this.clickTolerance / 2), + b = this.map.getLonLatFromPixel(b), + a = this.map.getLonLatFromPixel(a); + return new OpenLayers.Bounds(b.lon, b.lat, a.lon, a.lat) + }, + CLASS_NAME: "OpenLayers.Control.GetFeature" +}); +OpenLayers.Format.QueryStringFilter = function() { + function a(a) { + a = a.replace(/%/g, "\\%"); + a = a.replace(/\\\\\.(\*)?/g, function(a, b) { + return b ? a : "\\\\_" + }); + a = a.replace(/\\\\\.\*/g, "\\\\%"); + a = a.replace(/(\\)?\.(\*)?/g, function(a, b, c) { + return b || c ? a : "_" + }); + a = a.replace(/(\\)?\.\*/g, function(a, b) { + return b ? a : "%" + }); + a = a.replace(/\\\./g, "."); + return a = a.replace(/(\\)?\\\*/g, function(a, b) { + return b ? a : "*" + }) + } + var b = {}; + b[OpenLayers.Filter.Comparison.EQUAL_TO] = "eq"; + b[OpenLayers.Filter.Comparison.NOT_EQUAL_TO] = "ne"; + b[OpenLayers.Filter.Comparison.LESS_THAN] = + "lt"; + b[OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO] = "lte"; + b[OpenLayers.Filter.Comparison.GREATER_THAN] = "gt"; + b[OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO] = "gte"; + b[OpenLayers.Filter.Comparison.LIKE] = "ilike"; + return OpenLayers.Class(OpenLayers.Format, { + wildcarded: !1, + srsInBBOX: !1, + write: function(c, d) { + var d = d || {}, + e = c.CLASS_NAME, + e = e.substring(e.lastIndexOf(".") + 1); + switch (e) { + case "Spatial": + switch (c.type) { + case OpenLayers.Filter.Spatial.BBOX: + d.bbox = c.value.toArray(); + this.srsInBBOX && c.projection && + d.bbox.push(c.projection.getCode()); + break; + case OpenLayers.Filter.Spatial.DWITHIN: + d.tolerance = c.distance; + case OpenLayers.Filter.Spatial.WITHIN: + d.lon = c.value.x; + d.lat = c.value.y; + break; + default: + OpenLayers.Console.warn("Unknown spatial filter type " + c.type) + } + break; + case "Comparison": + e = b[c.type]; + if (void 0 !== e) { + var f = c.value; + c.type == OpenLayers.Filter.Comparison.LIKE && (f = a(f), this.wildcarded && (f = "%" + f + "%")); + d[c.property + "__" + e] = f; + d.queryable = d.queryable || []; + d.queryable.push(c.property) + } else OpenLayers.Console.warn("Unknown comparison filter type " + + c.type); + break; + case "Logical": + if (c.type === OpenLayers.Filter.Logical.AND) { + e = 0; + for (f = c.filters.length; e < f; e++) d = this.write(c.filters[e], d) + } else OpenLayers.Console.warn("Unsupported logical filter type " + c.type); + break; + default: + OpenLayers.Console.warn("Unknown filter type " + e) + } + return d + }, + CLASS_NAME: "OpenLayers.Format.QueryStringFilter" + }) +}(); +OpenLayers.Control.MousePosition = OpenLayers.Class(OpenLayers.Control, { + autoActivate: !true, + element: null, + prefix: "", + separator: ", ", + suffix: "", + numDigits: 5, + granularity: 10, + emptyString: "", + lastXy: null, + displayProjection: null, + destroy: function() { + this.deactivate(); + OpenLayers.Control.prototype.destroy.apply(this, arguments) + }, + activate: function() { + return OpenLayers.Control.prototype.activate.apply(this, arguments) ? (this.map.events.register("mousemove", this, this.redraw), this.map.events.register("mouseout", this, this.reset), + this.redraw(), !0) : !1 + }, + deactivate: function() { + return OpenLayers.Control.prototype.deactivate.apply(this, arguments) ? (this.map.events.unregister("mousemove", this, this.redraw), this.map.events.unregister("mouseout", this, this.reset), this.element.innerHTML = "", !0) : !1 + }, + draw: function() { + OpenLayers.Control.prototype.draw.apply(this, arguments); + this.element || (this.div.left = "", this.div.top = "", this.element = this.div); + return this.div + }, + redraw: function(a) { + var b; + if (null == a) this.reset(); + else if (null == this.lastXy || Math.abs(a.xy.x - + this.lastXy.x) > this.granularity || Math.abs(a.xy.y - this.lastXy.y) > this.granularity) this.lastXy = a.xy; + else if (b = this.map.getLonLatFromPixel(a.xy)) + this.displayProjection && b.transform(this.map.getProjectionObject(), this.displayProjection), this.lastXy = a.xy, a = this.formatOutput(b), a != this.element.innerHTML && (this.element.innerHTML = a) + }, + reset: function() { + null != this.emptyString && (this.element.innerHTML = this.emptyString) + }, + formatOutput: function(a) { + var b = parseInt(this.numDigits); + return this.prefix + a.lon.toFixed(b) + + this.separator + a.lat.toFixed(b) + this.suffix + }, + CLASS_NAME: "OpenLayers.Control.MousePosition" +}); +OpenLayers.Control.Geolocate = OpenLayers.Class(OpenLayers.Control, { + geolocation: navigator.geolocation, + bind: !0, + watch: !1, + geolocationOptions: null, + destroy: function() { + this.deactivate(); + OpenLayers.Control.prototype.destroy.apply(this, arguments) + }, + activate: function() { + return !this.geolocation ? (this.events.triggerEvent("locationuncapable"), !1) : OpenLayers.Control.prototype.activate.apply(this, arguments) ? (this.watch ? this.watchId = this.geolocation.watchPosition(OpenLayers.Function.bind(this.geolocate, this), OpenLayers.Function.bind(this.failure, + this), this.geolocationOptions) : this.getCurrentLocation(), !0) : !1 + }, + deactivate: function() { + this.active && null !== this.watchId && this.geolocation.clearWatch(this.watchId); + return OpenLayers.Control.prototype.deactivate.apply(this, arguments) + }, + geolocate: function(a) { + var b = (new OpenLayers.LonLat(a.coords.longitude, a.coords.latitude)).transform(new OpenLayers.Projection("EPSG:4326"), this.map.getProjectionObject()); + this.bind && this.map.setCenter(b); + this.events.triggerEvent("locationupdated", { + position: a, + point: new OpenLayers.Geometry.Point(b.lon, + b.lat) + }) + }, + getCurrentLocation: function() { + if (!this.active || this.watch) return !1; + this.geolocation.getCurrentPosition(OpenLayers.Function.bind(this.geolocate, this), OpenLayers.Function.bind(this.failure, this), this.geolocationOptions); + return !0 + }, + failure: function(a) { + this.events.triggerEvent("locationfailed", { + error: a + }) + }, + CLASS_NAME: "OpenLayers.Control.Geolocate" +}); +OpenLayers.Tile.UTFGrid = OpenLayers.Class(OpenLayers.Tile, { + url: null, + utfgridResolution: 2, + json: null, + format: null, + destroy: function() { + this.clear(); + OpenLayers.Tile.prototype.destroy.apply(this, arguments) + }, + draw: function() { + var a = OpenLayers.Tile.prototype.draw.apply(this, arguments); + if (a) + if (this.isLoading ? (this.abortLoading(), this.events.triggerEvent("reload")) : (this.isLoading = !0, this.events.triggerEvent("loadstart")), this.url = this.layer.getURL(this.bounds), this.layer.useJSONP) { + var b = new OpenLayers.Protocol.Script({ + url: this.url, + callback: function(a) { + this.isLoading = false; + this.events.triggerEvent("loadend"); + this.json = a.data + }, + scope: this + }); + b.read(); + this.request = b + } else this.request = OpenLayers.Request.GET({ + url: this.url, + callback: function(a) { + this.isLoading = false; + this.events.triggerEvent("loadend"); + a.status === 200 && this.parseData(a.responseText) + }, + scope: this + }); + else this.unload(); + return a + }, + abortLoading: function() { + this.request && (this.request.abort(), delete this.request); + this.isLoading = !1 + }, + getFeatureInfo: function(a, b) { + var c = null; + if (this.json) { + var d = + this.getFeatureId(a, b); + null !== d && (c = { + id: d, + data: this.json.data[d] + }) + } + return c + }, + getFeatureId: function(a, b) { + var c = null; + if (this.json) { + var d = this.utfgridResolution, + d = this.indexFromCharCode(this.json.grid[Math.floor(b / d)].charCodeAt(Math.floor(a / d))), + e = this.json.keys; + !isNaN(d) && d in e && (c = e[d]) + } + return c + }, + indexFromCharCode: function(a) { + 93 <= a && a--; + 35 <= a && a--; + return a - 32 + }, + parseData: function(a) { + this.format || (this.format = new OpenLayers.Format.JSON); + this.json = this.format.read(a) + }, + clear: function() { + this.json = null + }, + CLASS_NAME: "OpenLayers.Tile.UTFGrid" +}); +OpenLayers.Control.NavigationHistory = OpenLayers.Class(OpenLayers.Control, { + type: OpenLayers.Control.TYPE_TOGGLE, + previous: null, + previousOptions: null, + next: null, + nextOptions: null, + limit: 50, + autoActivate: !0, + clearOnDeactivate: !1, + registry: null, + nextStack: null, + previousStack: null, + listeners: null, + restoring: !1, + initialize: function(a) { + OpenLayers.Control.prototype.initialize.apply(this, [a]); + this.registry = OpenLayers.Util.extend({ + moveend: this.getState + }, this.registry); + a = { + trigger: OpenLayers.Function.bind(this.previousTrigger, + this), + displayClass: this.displayClass + " " + this.displayClass + "Previous" + }; + OpenLayers.Util.extend(a, this.previousOptions); + this.previous = new OpenLayers.Control.Button(a); + a = { + trigger: OpenLayers.Function.bind(this.nextTrigger, this), + displayClass: this.displayClass + " " + this.displayClass + "Next" + }; + OpenLayers.Util.extend(a, this.nextOptions); + this.next = new OpenLayers.Control.Button(a); + this.clear() + }, + onPreviousChange: function(a) { + a && !this.previous.active ? this.previous.activate() : !a && this.previous.active && this.previous.deactivate() + }, + onNextChange: function(a) { + a && !this.next.active ? this.next.activate() : !a && this.next.active && this.next.deactivate() + }, + destroy: function() { + OpenLayers.Control.prototype.destroy.apply(this); + this.previous.destroy(); + this.next.destroy(); + this.deactivate(); + for (var a in this) this[a] = null + }, + setMap: function(a) { + this.map = a; + this.next.setMap(a); + this.previous.setMap(a) + }, + draw: function() { + OpenLayers.Control.prototype.draw.apply(this, arguments); + this.next.draw(); + this.previous.draw() + }, + previousTrigger: function() { + var a = this.previousStack.shift(), + b = this.previousStack.shift(); + void 0 != b ? (this.nextStack.unshift(a), this.previousStack.unshift(b), this.restoring = !0, this.restore(b), this.restoring = !1, this.onNextChange(this.nextStack[0], this.nextStack.length), this.onPreviousChange(this.previousStack[1], this.previousStack.length - 1)) : this.previousStack.unshift(a); + return b + }, + nextTrigger: function() { + var a = this.nextStack.shift(); + void 0 != a && (this.previousStack.unshift(a), this.restoring = !0, this.restore(a), this.restoring = !1, this.onNextChange(this.nextStack[0], + this.nextStack.length), this.onPreviousChange(this.previousStack[1], this.previousStack.length - 1)); + return a + }, + clear: function() { + this.previousStack = []; + this.previous.deactivate(); + this.nextStack = []; + this.next.deactivate() + }, + getState: function() { + return { + center: this.map.getCenter(), + resolution: this.map.getResolution(), + projection: this.map.getProjectionObject(), + units: this.map.getProjectionObject().getUnits() || this.map.units || this.map.baseLayer.units + } + }, + restore: function(a) { + var b, c; + if (this.map.getProjectionObject() == + a.projection) c = this.map.getZoomForResolution(a.resolution), b = a.center; + else { + b = a.center.clone(); + b.transform(a.projection, this.map.getProjectionObject()); + c = a.units; + var d = this.map.getProjectionObject().getUnits() || this.map.units || this.map.baseLayer.units; + c = this.map.getZoomForResolution((c && d ? OpenLayers.INCHES_PER_UNIT[c] / OpenLayers.INCHES_PER_UNIT[d] : 1) * a.resolution) + } + this.map.setCenter(b, c) + }, + setListeners: function() { + this.listeners = {}; + for (var a in this.registry) this.listeners[a] = OpenLayers.Function.bind(function() { + if (!this.restoring) { + this.previousStack.unshift(this.registry[a].apply(this, + arguments)); + if (1 < this.previousStack.length) this.onPreviousChange(this.previousStack[1], this.previousStack.length - 1); + this.previousStack.length > this.limit + 1 && this.previousStack.pop(); + 0 < this.nextStack.length && (this.nextStack = [], this.onNextChange(null, 0)) + } + return !0 + }, this) + }, + activate: function() { + var a = !1; + if (this.map && OpenLayers.Control.prototype.activate.apply(this)) { + null == this.listeners && this.setListeners(); + for (var b in this.listeners) this.map.events.register(b, this, this.listeners[b]); + a = !0; + 0 == this.previousStack.length && + this.initStack() + } + return a + }, + initStack: function() { + this.map.getCenter() && this.listeners.moveend() + }, + deactivate: function() { + var a = !1; + if (this.map && OpenLayers.Control.prototype.deactivate.apply(this)) { + for (var b in this.listeners) this.map.events.unregister(b, this, this.listeners[b]); + this.clearOnDeactivate && this.clear(); + a = !0 + } + return a + }, + CLASS_NAME: "OpenLayers.Control.NavigationHistory" +}); +OpenLayers.Protocol.HTTP = OpenLayers.Class(OpenLayers.Protocol, { + url: null, + headers: null, + params: null, + callback: null, + scope: null, + readWithPOST: !1, + updateWithPOST: !1, + deleteWithPOST: !1, + wildcarded: !1, + srsInBBOX: !1, + initialize: function(a) { + a = a || {}; + this.params = {}; + this.headers = {}; + OpenLayers.Protocol.prototype.initialize.apply(this, arguments); + if (!this.filterToParams && OpenLayers.Format.QueryStringFilter) { + var b = new OpenLayers.Format.QueryStringFilter({ + wildcarded: this.wildcarded, + srsInBBOX: this.srsInBBOX + }); + this.filterToParams = + function(a, d) { + return b.write(a, d) + } + } + }, + destroy: function() { + this.headers = this.params = null; + OpenLayers.Protocol.prototype.destroy.apply(this) + }, + read: function(a) { + OpenLayers.Protocol.prototype.read.apply(this, arguments); + a = a || {}; + a.params = OpenLayers.Util.applyDefaults(a.params, this.options.params); + a = OpenLayers.Util.applyDefaults(a, this.options); + a.filter && this.filterToParams && (a.params = this.filterToParams(a.filter, a.params)); + var b = void 0 !== a.readWithPOST ? a.readWithPOST : this.readWithPOST, + c = new OpenLayers.Protocol.Response({ + requestType: "read" + }); + b ? (b = a.headers || {}, b["Content-Type"] = "application/x-www-form-urlencoded", c.priv = OpenLayers.Request.POST({ + url: a.url, + callback: this.createCallback(this.handleRead, c, a), + data: OpenLayers.Util.getParameterString(a.params), + headers: b + })) : c.priv = OpenLayers.Request.GET({ + url: a.url, + callback: this.createCallback(this.handleRead, c, a), + params: a.params, + headers: a.headers + }); + return c + }, + handleRead: function(a, b) { + this.handleResponse(a, b) + }, + create: function(a, b) { + var b = OpenLayers.Util.applyDefaults(b, this.options), + c = new OpenLayers.Protocol.Response({ + reqFeatures: a, + requestType: "create" + }); + c.priv = OpenLayers.Request.POST({ + url: b.url, + callback: this.createCallback(this.handleCreate, c, b), + headers: b.headers, + data: this.format.write(a) + }); + return c + }, + handleCreate: function(a, b) { + this.handleResponse(a, b) + }, + update: function(a, b) { + var b = b || {}, + c = b.url || a.url || this.options.url + "/" + a.fid, + b = OpenLayers.Util.applyDefaults(b, this.options), + d = new OpenLayers.Protocol.Response({ + reqFeatures: a, + requestType: "update" + }); + d.priv = OpenLayers.Request[this.updateWithPOST ? "POST" : "PUT"]({ + url: c, + callback: this.createCallback(this.handleUpdate, + d, b), + headers: b.headers, + data: this.format.write(a) + }); + return d + }, + handleUpdate: function(a, b) { + this.handleResponse(a, b) + }, + "delete": function(a, b) { + var b = b || {}, + c = b.url || a.url || this.options.url + "/" + a.fid, + b = OpenLayers.Util.applyDefaults(b, this.options), + d = new OpenLayers.Protocol.Response({ + reqFeatures: a, + requestType: "delete" + }), + e = this.deleteWithPOST ? "POST" : "DELETE", + c = { + url: c, + callback: this.createCallback(this.handleDelete, d, b), + headers: b.headers + }; + this.deleteWithPOST && (c.data = this.format.write(a)); + d.priv = OpenLayers.Request[e](c); + return d + }, + handleDelete: function(a, b) { + this.handleResponse(a, b) + }, + handleResponse: function(a, b) { + var c = a.priv; + b.callback && (200 <= c.status && 300 > c.status ? ("delete" != a.requestType && (a.features = this.parseFeatures(c)), a.code = OpenLayers.Protocol.Response.SUCCESS) : a.code = OpenLayers.Protocol.Response.FAILURE, b.callback.call(b.scope, a)) + }, + parseFeatures: function(a) { + var b = a.responseXML; + if (!b || !b.documentElement) b = a.responseText; + return !b || 0 >= b.length ? null : this.format.read(b) + }, + commit: function(a, b) { + function c(a) { + for (var b = + a.features ? a.features.length : 0, c = Array(b), e = 0; e < b; ++e) c[e] = a.features[e].fid; + o.insertIds = c; + d.apply(this, [a]) + } + + function d(a) { + this.callUserCallback(a, b); + n = n && a.success(); + f++; + f >= m && b.callback && (o.code = n ? OpenLayers.Protocol.Response.SUCCESS : OpenLayers.Protocol.Response.FAILURE, b.callback.apply(b.scope, [o])) + } + var b = OpenLayers.Util.applyDefaults(b, this.options), + e = [], + f = 0, + g = {}; + g[OpenLayers.State.INSERT] = []; + g[OpenLayers.State.UPDATE] = []; + g[OpenLayers.State.DELETE] = []; + for (var h, i, j = [], k = 0, l = a.length; k < l; ++k) + if (h = + a[k], i = g[h.state]) i.push(h), j.push(h); + var m = (0 < g[OpenLayers.State.INSERT].length ? 1 : 0) + g[OpenLayers.State.UPDATE].length + g[OpenLayers.State.DELETE].length, + n = !0, + o = new OpenLayers.Protocol.Response({ + reqFeatures: j + }); + h = g[OpenLayers.State.INSERT]; + 0 < h.length && e.push(this.create(h, OpenLayers.Util.applyDefaults({ + callback: c, + scope: this + }, b.create))); + h = g[OpenLayers.State.UPDATE]; + for (k = h.length - 1; 0 <= k; --k) e.push(this.update(h[k], OpenLayers.Util.applyDefaults({ + callback: d, + scope: this + }, b.update))); + h = g[OpenLayers.State.DELETE]; + for (k = h.length - 1; 0 <= k; --k) e.push(this["delete"](h[k], OpenLayers.Util.applyDefaults({ + callback: d, + scope: this + }, b["delete"]))); + return e + }, + abort: function(a) { + a && a.priv.abort() + }, + callUserCallback: function(a, b) { + var c = b[a.requestType]; + c && c.callback && c.callback.call(c.scope, a) + }, + CLASS_NAME: "OpenLayers.Protocol.HTTP" +}); +OpenLayers.Strategy.Cluster = OpenLayers.Class(OpenLayers.Strategy, { + distance: 20, + threshold: null, + features: null, + clusters: null, + clustering: !1, + resolution: null, + activate: function() { + var a = OpenLayers.Strategy.prototype.activate.call(this); + if (a) this.layer.events.on({ + beforefeaturesadded: this.cacheFeatures, + moveend: this.cluster, + scope: this + }); + return a + }, + deactivate: function() { + var a = OpenLayers.Strategy.prototype.deactivate.call(this); + a && (this.clearCache(), this.layer.events.un({ + beforefeaturesadded: this.cacheFeatures, + moveend: this.cluster, + scope: this + })); + return a + }, + cacheFeatures: function(a) { + var b = !0; + this.clustering || (this.clearCache(), this.features = a.features, this.cluster(), b = !1); + return b + }, + clearCache: function() { + this.features = null + }, + cluster: function(a) { + if ((!a || a.zoomChanged) && this.features) + if (a = this.layer.map.getResolution(), a != this.resolution || !this.clustersExist()) { + this.resolution = a; + for (var a = [], b, c, d, e = 0; e < this.features.length; ++e) + if (b = this.features[e], b.geometry) { + c = !1; + for (var f = a.length - 1; 0 <= f; --f) + if (d = a[f], this.shouldCluster(d, b)) { + this.addToCluster(d, + b); + c = !0; + break + } + c || a.push(this.createCluster(this.features[e])) + } + this.layer.removeAllFeatures(); + if (0 < a.length) { + if (1 < this.threshold) { + b = a.slice(); + a = []; + e = 0; + for (d = b.length; e < d; ++e) c = b[e], c.attributes.count < this.threshold ? Array.prototype.push.apply(a, c.cluster) : a.push(c) + } + this.clustering = !0; + this.layer.addFeatures(a); + this.clustering = !1 + } + this.clusters = a + } + }, + clustersExist: function() { + var a = !1; + if (this.clusters && 0 < this.clusters.length && this.clusters.length == this.layer.features.length) + for (var a = !0, b = 0; b < this.clusters.length; ++b) + if (this.clusters[b] != + this.layer.features[b]) { + a = !1; + break + } + return a + }, + shouldCluster: function(a, b) { + var c = a.geometry.getBounds().getCenterLonLat(), + d = b.geometry.getBounds().getCenterLonLat(); + return Math.sqrt(Math.pow(c.lon - d.lon, 2) + Math.pow(c.lat - d.lat, 2)) / this.resolution <= this.distance + }, + addToCluster: function(a, b) { + a.cluster.push(b); + a.attributes.count += 1 + }, + createCluster: function(a) { + var b = a.geometry.getBounds().getCenterLonLat(), + b = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(b.lon, b.lat), { + count: 1 + }); + b.cluster = [a]; + return b + }, + CLASS_NAME: "OpenLayers.Strategy.Cluster" +}); +OpenLayers.Strategy.Filter = OpenLayers.Class(OpenLayers.Strategy, { + filter: null, + cache: null, + caching: !1, + activate: function() { + var a = OpenLayers.Strategy.prototype.activate.apply(this, arguments); + a && (this.cache = [], this.layer.events.on({ + beforefeaturesadded: this.handleAdd, + beforefeaturesremoved: this.handleRemove, + scope: this + })); + return a + }, + deactivate: function() { + this.cache = null; + this.layer && this.layer.events && this.layer.events.un({ + beforefeaturesadded: this.handleAdd, + beforefeaturesremoved: this.handleRemove, + scope: this + }); + return OpenLayers.Strategy.prototype.deactivate.apply(this, arguments) + }, + handleAdd: function(a) { + if (!this.caching && this.filter) { + var b = a.features; + a.features = []; + for (var c, d = 0, e = b.length; d < e; ++d) c = b[d], this.filter.evaluate(c) ? a.features.push(c) : this.cache.push(c) + } + }, + handleRemove: function() { + this.caching || (this.cache = []) + }, + setFilter: function(a) { + this.filter = a; + a = this.cache; + this.cache = []; + this.handleAdd({ + features: this.layer.features + }); + 0 < this.cache.length && (this.caching = !0, this.layer.removeFeatures(this.cache.slice()), + this.caching = !1); + 0 < a.length && (a = { + features: a + }, this.handleAdd(a), 0 < a.features.length && (this.caching = !0, this.layer.addFeatures(a.features), this.caching = !1)) + }, + CLASS_NAME: "OpenLayers.Strategy.Filter" +}); +OpenLayers.Protocol.SOS = function(a) { + var a = OpenLayers.Util.applyDefaults(a, OpenLayers.Protocol.SOS.DEFAULTS), + b = OpenLayers.Protocol.SOS["v" + a.version.replace(/\./g, "_")]; + if (!b) throw "Unsupported SOS version: " + a.version; + return new b(a) +}; +OpenLayers.Protocol.SOS.DEFAULTS = { + version: "1.0.0" +}; +OpenLayers.Format.WFSDescribeFeatureType = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + xsd: "http://www.w3.org/2001/XMLSchema" + }, + readers: { + xsd: { + schema: function(a, b) { + var c = [], + d = {}; + this.readChildNodes(a, { + complexTypes: c, + customTypes: d + }); + for (var e = a.attributes, f, g, h = 0, i = e.length; h < i; ++h) f = e[h], g = f.name, 0 == g.indexOf("xmlns") ? this.setNamespace(g.split(":")[1] || "", f.value) : b[g] = f.value; + b.featureTypes = c; + b.targetPrefix = this.namespaceAlias[b.targetNamespace]; + h = 0; + for (i = c.length; h < i; ++h) e = c[h], f = d[e.typeName], + d[e.typeName] && (e.typeName = f.name) + }, + complexType: function(a, b) { + var c = { + typeName: a.getAttribute("name") + }; + this.readChildNodes(a, c); + b.complexTypes.push(c) + }, + complexContent: function(a, b) { + this.readChildNodes(a, b) + }, + extension: function(a, b) { + this.readChildNodes(a, b) + }, + sequence: function(a, b) { + var c = { + elements: [] + }; + this.readChildNodes(a, c); + b.properties = c.elements + }, + element: function(a, b) { + if (b.elements) { + for (var c = {}, d = a.attributes, e, f = 0, g = d.length; f < g; ++f) e = d[f], c[e.name] = e.value; + d = c.type; + d || (d = {}, this.readChildNodes(a, + d), c.restriction = d, c.type = d.base); + c.localType = (d.base || d).split(":").pop(); + b.elements.push(c) + } + b.complexTypes && (d = a.getAttribute("type"), c = d.split(":").pop(), b.customTypes[c] = { + name: a.getAttribute("name"), + type: d + }) + }, + simpleType: function(a, b) { + this.readChildNodes(a, b) + }, + restriction: function(a, b) { + b.base = a.getAttribute("base"); + this.readRestriction(a, b) + } + } + }, + readRestriction: function(a, b) { + for (var c = a.childNodes, d, e, f = 0, g = c.length; f < g; ++f) d = c[f], 1 == d.nodeType && (e = d.nodeName.split(":").pop(), d = d.getAttribute("value"), + b[e] ? ("string" == typeof b[e] && (b[e] = [b[e]]), b[e].push(d)) : b[e] = d) + }, + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + a && 9 == a.nodeType && (a = a.documentElement); + var b = {}; + this.readNode(a, b); + return b + }, + CLASS_NAME: "OpenLayers.Format.WFSDescribeFeatureType" +}); +OpenLayers.Format.GeoRSS = OpenLayers.Class(OpenLayers.Format.XML, { + rssns: "http://backend.userland.com/rss2", + featureNS: "http://mapserver.gis.umn.edu/mapserver", + georssns: "http://www.georss.org/georss", + geons: "http://www.w3.org/2003/01/geo/wgs84_pos#", + featureTitle: "Untitled", + featureDescription: "No Description", + gmlParser: null, + xy: !1, + createGeometryFromItem: function(a) { + var b = this.getElementsByTagNameNS(a, this.georssns, "point"), + c = this.getElementsByTagNameNS(a, this.geons, "lat"), + d = this.getElementsByTagNameNS(a, + this.geons, "long"), + e = this.getElementsByTagNameNS(a, this.georssns, "line"), + f = this.getElementsByTagNameNS(a, this.georssns, "polygon"), + g = this.getElementsByTagNameNS(a, this.georssns, "where"), + a = this.getElementsByTagNameNS(a, this.georssns, "box"); + if (0 < b.length || 0 < c.length && 0 < d.length) { + 0 < b.length ? (c = OpenLayers.String.trim(b[0].firstChild.nodeValue).split(/\s+/), 2 != c.length && (c = OpenLayers.String.trim(b[0].firstChild.nodeValue).split(/\s*,\s*/))) : c = [parseFloat(c[0].firstChild.nodeValue), parseFloat(d[0].firstChild.nodeValue)]; + var h = new OpenLayers.Geometry.Point(c[1], c[0]) + } else if (0 < e.length) { + c = OpenLayers.String.trim(this.getChildValue(e[0])).split(/\s+/); + d = []; + e = 0; + for (f = c.length; e < f; e += 2) b = new OpenLayers.Geometry.Point(c[e + 1], c[e]), d.push(b); + h = new OpenLayers.Geometry.LineString(d) + } else if (0 < f.length) { + c = OpenLayers.String.trim(this.getChildValue(f[0])).split(/\s+/); + d = []; + e = 0; + for (f = c.length; e < f; e += 2) b = new OpenLayers.Geometry.Point(c[e + 1], c[e]), d.push(b); + h = new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(d)]) + } else 0 < + g.length ? (this.gmlParser || (this.gmlParser = new OpenLayers.Format.GML({ + xy: this.xy + })), h = this.gmlParser.parseFeature(g[0]).geometry) : 0 < a.length && (c = OpenLayers.String.trim(a[0].firstChild.nodeValue).split(/\s+/), d = [], 3 < c.length && (b = new OpenLayers.Geometry.Point(c[1], c[0]), d.push(b), b = new OpenLayers.Geometry.Point(c[1], c[2]), d.push(b), b = new OpenLayers.Geometry.Point(c[3], c[2]), d.push(b), b = new OpenLayers.Geometry.Point(c[3], c[0]), d.push(b), b = new OpenLayers.Geometry.Point(c[1], c[0]), d.push(b)), h = new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(d)])); + h && (this.internalProjection && this.externalProjection) && h.transform(this.externalProjection, this.internalProjection); + return h + }, + createFeatureFromItem: function(a) { + var b = this.createGeometryFromItem(a), + c = this._getChildValue(a, "*", "title", this.featureTitle), + d = this._getChildValue(a, "*", "description", this._getChildValue(a, "*", "content", this._getChildValue(a, "*", "summary", this.featureDescription))), + e = this._getChildValue(a, "*", "link"); + if (!e) try { + e = this.getElementsByTagNameNS(a, "*", "link")[0].getAttribute("href") + } catch (f) { + e = + null + } + a = this._getChildValue(a, "*", "id", null); + b = new OpenLayers.Feature.Vector(b, { + title: c, + description: d, + link: e + }); + b.fid = a; + return b + }, + _getChildValue: function(a, b, c, d) { + return (a = this.getElementsByTagNameNS(a, b, c)) && a[0] && a[0].firstChild && a[0].firstChild.nodeValue ? this.getChildValue(a[0]) : void 0 == d ? "" : d + }, + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + var b = null, + b = this.getElementsByTagNameNS(a, "*", "item"); + 0 == b.length && (b = this.getElementsByTagNameNS(a, "*", "entry")); + for (var a = b.length, c = Array(a), d = 0; d < a; d++) c[d] = this.createFeatureFromItem(b[d]); + return c + }, + write: function(a) { + var b; + if (OpenLayers.Util.isArray(a)) { + b = this.createElementNS(this.rssns, "rss"); + for (var c = 0, d = a.length; c < d; c++) b.appendChild(this.createFeatureXML(a[c])) + } else b = this.createFeatureXML(a); + return OpenLayers.Format.XML.prototype.write.apply(this, [b]) + }, + createFeatureXML: function(a) { + var b = this.buildGeometryNode(a.geometry), + c = this.createElementNS(this.rssns, "item"), + d = this.createElementNS(this.rssns, "title"); + d.appendChild(this.createTextNode(a.attributes.title ? a.attributes.title : "")); + var e = this.createElementNS(this.rssns, "description"); + e.appendChild(this.createTextNode(a.attributes.description ? a.attributes.description : "")); + c.appendChild(d); + c.appendChild(e); + a.attributes.link && (d = this.createElementNS(this.rssns, "link"), d.appendChild(this.createTextNode(a.attributes.link)), c.appendChild(d)); + for (var f in a.attributes) "link" == f || ("title" == f || "description" == f) || (d = this.createTextNode(a.attributes[f]), e = f, -1 != + f.search(":") && (e = f.split(":")[1]), e = this.createElementNS(this.featureNS, "feature:" + e), e.appendChild(d), c.appendChild(e)); + c.appendChild(b); + return c + }, + buildGeometryNode: function(a) { + this.internalProjection && this.externalProjection && (a = a.clone(), a.transform(this.internalProjection, this.externalProjection)); + var b; + if ("OpenLayers.Geometry.Polygon" == a.CLASS_NAME) b = this.createElementNS(this.georssns, "georss:polygon"), b.appendChild(this.buildCoordinatesNode(a.components[0])); + else if ("OpenLayers.Geometry.LineString" == + a.CLASS_NAME) b = this.createElementNS(this.georssns, "georss:line"), b.appendChild(this.buildCoordinatesNode(a)); + else if ("OpenLayers.Geometry.Point" == a.CLASS_NAME) b = this.createElementNS(this.georssns, "georss:point"), b.appendChild(this.buildCoordinatesNode(a)); + else throw "Couldn't parse " + a.CLASS_NAME; + return b + }, + buildCoordinatesNode: function(a) { + var b = null; + a.components && (b = a.components); + if (b) { + for (var a = b.length, c = Array(a), d = 0; d < a; d++) c[d] = b[d].y + " " + b[d].x; + b = c.join(" ") + } else b = a.y + " " + a.x; + return this.createTextNode(b) + }, + CLASS_NAME: "OpenLayers.Format.GeoRSS" +}); +OpenLayers.Format.WPSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, { + defaultVersion: "1.0.0", + CLASS_NAME: "OpenLayers.Format.WPSCapabilities" +}); +OpenLayers.Format.WPSCapabilities.v1_0_0 = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + ows: "http://www.opengis.net/ows/1.1", + wps: "http://www.opengis.net/wps/1.0.0", + xlink: "http://www.w3.org/1999/xlink" + }, + regExes: { + trimSpace: /^\s*|\s*$/g, + removeSpace: /\s*/g, + splitSpace: /\s+/, + trimComma: /\s*,\s*/g + }, + initialize: function(a) { + OpenLayers.Format.XML.prototype.initialize.apply(this, [a]) + }, + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + a && 9 == a.nodeType && (a = a.documentElement); + var b = {}; + this.readNode(a, b); + return b + }, + readers: { + wps: { + Capabilities: function(a, b) { + this.readChildNodes(a, b) + }, + ProcessOfferings: function(a, b) { + b.processOfferings = {}; + this.readChildNodes(a, b.processOfferings) + }, + Process: function(a, b) { + var c = { + processVersion: this.getAttributeNS(a, this.namespaces.wps, "processVersion") + }; + this.readChildNodes(a, c); + b[c.identifier] = c + }, + Languages: function(a, b) { + b.languages = []; + this.readChildNodes(a, b.languages) + }, + Default: function(a, b) { + var c = { + isDefault: !0 + }; + this.readChildNodes(a, c); + b.push(c) + }, + Supported: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + b.push(c) + } + }, + ows: OpenLayers.Format.OWSCommon.v1_1_0.prototype.readers.ows + }, + CLASS_NAME: "OpenLayers.Format.WPSCapabilities.v1_0_0" +}); +OpenLayers.Control.PinchZoom = OpenLayers.Class(OpenLayers.Control, { + type: OpenLayers.Control.TYPE_TOOL, + containerCenter: null, + pinchOrigin: null, + currentCenter: null, + autoActivate: !0, + initialize: function(a) { + OpenLayers.Control.prototype.initialize.apply(this, arguments); + this.handler = new OpenLayers.Handler.Pinch(this, { + start: this.pinchStart, + move: this.pinchMove, + done: this.pinchDone + }, this.handlerOptions) + }, + activate: function() { + var a = OpenLayers.Control.prototype.activate.apply(this, arguments); + a && (this.map.events.on({ + moveend: this.updateContainerCenter, + scope: this + }), this.updateContainerCenter()); + return a + }, + deactivate: function() { + var a = OpenLayers.Control.prototype.deactivate.apply(this, arguments); + this.map && this.map.events && this.map.events.un({ + moveend: this.updateContainerCenter, + scope: this + }); + return a + }, + updateContainerCenter: function() { + var a = this.map.layerContainerDiv; + this.containerCenter = { + x: parseInt(a.style.left, 10) + 50, + y: parseInt(a.style.top, 10) + 50 + } + }, + pinchStart: function(a) { + this.currentCenter = this.pinchOrigin = a.xy + }, + pinchMove: function(a, b) { + var c = b.scale, + d = this.containerCenter, + e = this.pinchOrigin, + f = a.xy, + g = Math.round(f.x - e.x + (c - 1) * (d.x - e.x)), + d = Math.round(f.y - e.y + (c - 1) * (d.y - e.y)); + this.applyTransform("translate(" + g + "px, " + d + "px) scale(" + c + ")"); + this.currentCenter = f + }, + applyTransform: function(a) { + var b = this.map.layerContainerDiv.style; + b["-webkit-transform"] = a; + b["-moz-transform"] = a + }, + pinchDone: function(a, b, c) { + this.applyTransform(""); + a = this.map.getZoomForResolution(this.map.getResolution() / c.scale, !0); + if (a !== this.map.getZoom() || !this.currentCenter.equals(this.pinchOrigin)) { + var b = + this.map.getResolutionForZoom(a), + c = this.map.getLonLatFromPixel(this.pinchOrigin), + d = this.currentCenter, + e = this.map.getSize(); + c.lon += b * (e.w / 2 - d.x); + c.lat -= b * (e.h / 2 - d.y); + this.map.div.clientWidth = this.map.div.clientWidth; + this.map.setCenter(c, a) + } + }, + CLASS_NAME: "OpenLayers.Control.PinchZoom" +}); +OpenLayers.Control.TouchNavigation = OpenLayers.Class(OpenLayers.Control, { + dragPan: null, + dragPanOptions: null, + pinchZoom: null, + pinchZoomOptions: null, + clickHandlerOptions: null, + documentDrag: !1, + autoActivate: !0, + initialize: function(a) { + this.handlers = {}; + OpenLayers.Control.prototype.initialize.apply(this, arguments) + }, + destroy: function() { + this.deactivate(); + this.dragPan && this.dragPan.destroy(); + this.dragPan = null; + this.pinchZoom && (this.pinchZoom.destroy(), delete this.pinchZoom); + OpenLayers.Control.prototype.destroy.apply(this, + arguments) + }, + activate: function() { + return OpenLayers.Control.prototype.activate.apply(this, arguments) ? (this.dragPan.activate(), this.handlers.click.activate(), this.pinchZoom.activate(), !0) : !1 + }, + deactivate: function() { + return OpenLayers.Control.prototype.deactivate.apply(this, arguments) ? (this.dragPan.deactivate(), this.handlers.click.deactivate(), this.pinchZoom.deactivate(), !0) : !1 + }, + draw: function() { + var a = { + click: this.defaultClick, + dblclick: this.defaultDblClick + }, + b = OpenLayers.Util.extend({ + "double": !0, + stopDouble: !0, + pixelTolerance: 2 + }, this.clickHandlerOptions); + this.handlers.click = new OpenLayers.Handler.Click(this, a, b); + this.dragPan = new OpenLayers.Control.DragPan(OpenLayers.Util.extend({ + map: this.map, + documentDrag: this.documentDrag + }, this.dragPanOptions)); + this.dragPan.draw(); + this.pinchZoom = new OpenLayers.Control.PinchZoom(OpenLayers.Util.extend({ + map: this.map + }, this.pinchZoomOptions)) + }, + defaultClick: function(a) { + a.lastTouches && 2 == a.lastTouches.length && this.map.zoomOut() + }, + defaultDblClick: function(a) { + this.map.setCenter(this.map.getLonLatFromViewPortPx(a.xy), + this.map.zoom + 1) + }, + CLASS_NAME: "OpenLayers.Control.TouchNavigation" +}); +OpenLayers.Style2 = OpenLayers.Class({ + id: null, + name: null, + title: null, + description: null, + layerName: null, + isDefault: !1, + rules: null, + initialize: function(a) { + OpenLayers.Util.extend(this, a); + this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_") + }, + destroy: function() { + for (var a = 0, b = this.rules.length; a < b; a++) this.rules[a].destroy(); + delete this.rules + }, + clone: function() { + var a = OpenLayers.Util.extend({}, this); + if (this.rules) { + a.rules = []; + for (var b = 0, c = this.rules.length; b < c; ++b) a.rules.push(this.rules[b].clone()) + } + return new OpenLayers.Style2(a) + }, + CLASS_NAME: "OpenLayers.Style2" +}); +OpenLayers.Format.WFS = OpenLayers.Class(OpenLayers.Format.GML, { + layer: null, + wfsns: "http://www.opengis.net/wfs", + ogcns: "http://www.opengis.net/ogc", + initialize: function(a, b) { + OpenLayers.Format.GML.prototype.initialize.apply(this, [a]); + this.layer = b; + this.layer.featureNS && (this.featureNS = this.layer.featureNS); + this.layer.options.geometry_column && (this.geometryName = this.layer.options.geometry_column); + this.layer.options.typename && (this.featureName = this.layer.options.typename) + }, + write: function(a) { + var b = this.createElementNS(this.wfsns, + "wfs:Transaction"); + b.setAttribute("version", "1.0.0"); + b.setAttribute("service", "WFS"); + for (var c = 0; c < a.length; c++) switch (a[c].state) { + case OpenLayers.State.INSERT: + b.appendChild(this.insert(a[c])); + break; + case OpenLayers.State.UPDATE: + b.appendChild(this.update(a[c])); + break; + case OpenLayers.State.DELETE: + b.appendChild(this.remove(a[c])) + } + return OpenLayers.Format.XML.prototype.write.apply(this, [b]) + }, + createFeatureXML: function(a) { + var b = this.buildGeometryNode(a.geometry), + c = this.createElementNS(this.featureNS, "feature:" + + this.geometryName); + c.appendChild(b); + b = this.createElementNS(this.featureNS, "feature:" + this.featureName); + b.appendChild(c); + for (var d in a.attributes) { + var c = this.createTextNode(a.attributes[d]), + e = d; - 1 != d.search(":") && (e = d.split(":")[1]); + e = this.createElementNS(this.featureNS, "feature:" + e); + e.appendChild(c); + b.appendChild(e) + } + return b + }, + insert: function(a) { + var b = this.createElementNS(this.wfsns, "wfs:Insert"); + b.appendChild(this.createFeatureXML(a)); + return b + }, + update: function(a) { + a.fid || OpenLayers.Console.userError(OpenLayers.i18n("noFID")); + var b = this.createElementNS(this.wfsns, "wfs:Update"); + b.setAttribute("typeName", this.featurePrefix + ":" + this.featureName); + b.setAttribute("xmlns:" + this.featurePrefix, this.featureNS); + var c = this.createElementNS(this.wfsns, "wfs:Property"), + d = this.createElementNS(this.wfsns, "wfs:Name"), + e = this.createTextNode(this.geometryName); + d.appendChild(e); + c.appendChild(d); + d = this.createElementNS(this.wfsns, "wfs:Value"); + e = this.buildGeometryNode(a.geometry); + a.layer && e.setAttribute("srsName", a.layer.projection.getCode()); + d.appendChild(e); + c.appendChild(d); + b.appendChild(c); + for (var f in a.attributes) c = this.createElementNS(this.wfsns, "wfs:Property"), d = this.createElementNS(this.wfsns, "wfs:Name"), d.appendChild(this.createTextNode(f)), c.appendChild(d), d = this.createElementNS(this.wfsns, "wfs:Value"), d.appendChild(this.createTextNode(a.attributes[f])), c.appendChild(d), b.appendChild(c); + c = this.createElementNS(this.ogcns, "ogc:Filter"); + f = this.createElementNS(this.ogcns, "ogc:FeatureId"); + f.setAttribute("fid", a.fid); + c.appendChild(f); + b.appendChild(c); + return b + }, + remove: function(a) { + if (!a.fid) return OpenLayers.Console.userError(OpenLayers.i18n("noFID")), !1; + var b = this.createElementNS(this.wfsns, "wfs:Delete"); + b.setAttribute("typeName", this.featurePrefix + ":" + this.featureName); + b.setAttribute("xmlns:" + this.featurePrefix, this.featureNS); + var c = this.createElementNS(this.ogcns, "ogc:Filter"), + d = this.createElementNS(this.ogcns, "ogc:FeatureId"); + d.setAttribute("fid", a.fid); + c.appendChild(d); + b.appendChild(c); + return b + }, + destroy: function() { + this.layer = + null + }, + CLASS_NAME: "OpenLayers.Format.WFS" +}); +OpenLayers.Format.SLD.v1_0_0_GeoServer = OpenLayers.Class(OpenLayers.Format.SLD.v1_0_0, { + version: "1.0.0", + profile: "GeoServer", + readers: OpenLayers.Util.applyDefaults({ + sld: OpenLayers.Util.applyDefaults({ + Priority: function(a, b) { + var c = this.readers.ogc._expression.call(this, a); + c && (b.priority = c) + }, + VendorOption: function(a, b) { + b.vendorOptions || (b.vendorOptions = {}); + b.vendorOptions[a.getAttribute("name")] = this.getChildValue(a) + } + }, OpenLayers.Format.SLD.v1_0_0.prototype.readers.sld) + }, OpenLayers.Format.SLD.v1_0_0.prototype.readers), + writers: OpenLayers.Util.applyDefaults({ + sld: OpenLayers.Util.applyDefaults({ + Priority: function(a) { + return this.writers.sld._OGCExpression.call(this, "sld:Priority", a) + }, + VendorOption: function(a) { + return this.createElementNSPlus("sld:VendorOption", { + attributes: { + name: a.name + }, + value: a.value + }) + }, + TextSymbolizer: function(a) { + var b = OpenLayers.Format.SLD.v1_0_0.prototype.writers.sld.TextSymbolizer.apply(this, arguments); + !1 !== a.graphic && (a.externalGraphic || a.graphicName) && this.writeNode("Graphic", a, b); + "priority" in a && + this.writeNode("Priority", a.priority, b); + return this.addVendorOptions(b, a) + }, + PointSymbolizer: function(a) { + return this.addVendorOptions(OpenLayers.Format.SLD.v1_0_0.prototype.writers.sld.PointSymbolizer.apply(this, arguments), a) + }, + LineSymbolizer: function(a) { + return this.addVendorOptions(OpenLayers.Format.SLD.v1_0_0.prototype.writers.sld.LineSymbolizer.apply(this, arguments), a) + }, + PolygonSymbolizer: function(a) { + return this.addVendorOptions(OpenLayers.Format.SLD.v1_0_0.prototype.writers.sld.PolygonSymbolizer.apply(this, + arguments), a) + } + }, OpenLayers.Format.SLD.v1_0_0.prototype.writers.sld) + }, OpenLayers.Format.SLD.v1_0_0.prototype.writers), + addVendorOptions: function(a, b) { + if (b.vendorOptions) + for (var c in b.vendorOptions) this.writeNode("VendorOption", { + name: c, + value: b.vendorOptions[c] + }, a); + return a + }, + CLASS_NAME: "OpenLayers.Format.SLD.v1_0_0_GeoServer" +}); +OpenLayers.Layer.Boxes = OpenLayers.Class(OpenLayers.Layer.Markers, { + drawMarker: function(a) { + var b = this.map.getLayerPxFromLonLat({ + lon: a.bounds.left, + lat: a.bounds.top + }), + c = this.map.getLayerPxFromLonLat({ + lon: a.bounds.right, + lat: a.bounds.bottom + }); + null == c || null == b ? a.display(!1) : (b = a.draw(b, { + w: Math.max(1, c.x - b.x), + h: Math.max(1, c.y - b.y) + }), a.drawn || (this.div.appendChild(b), a.drawn = !0)) + }, + removeMarker: function(a) { + OpenLayers.Util.removeItem(this.markers, a); + null != a.div && a.div.parentNode == this.div && this.div.removeChild(a.div) + }, + CLASS_NAME: "OpenLayers.Layer.Boxes" +}); +OpenLayers.Format.WFSCapabilities.v1_0_0 = OpenLayers.Class(OpenLayers.Format.WFSCapabilities.v1, { + readers: { + wfs: OpenLayers.Util.applyDefaults({ + Service: function(a, b) { + b.service = {}; + this.readChildNodes(a, b.service) + }, + Fees: function(a, b) { + var c = this.getChildValue(a); + c && "none" != c.toLowerCase() && (b.fees = c) + }, + AccessConstraints: function(a, b) { + var c = this.getChildValue(a); + c && "none" != c.toLowerCase() && (b.accessConstraints = c) + }, + OnlineResource: function(a, b) { + var c = this.getChildValue(a); + c && "none" != c.toLowerCase() && (b.onlineResource = + c) + }, + Keywords: function(a, b) { + var c = this.getChildValue(a); + c && "none" != c.toLowerCase() && (b.keywords = c.split(", ")) + }, + Capability: function(a, b) { + b.capability = {}; + this.readChildNodes(a, b.capability) + }, + Request: function(a, b) { + b.request = {}; + this.readChildNodes(a, b.request) + }, + GetFeature: function(a, b) { + b.getfeature = { + href: {}, + formats: [] + }; + this.readChildNodes(a, b.getfeature) + }, + ResultFormat: function(a, b) { + for (var c = a.childNodes, d, e = 0; e < c.length; e++) d = c[e], 1 == d.nodeType && b.formats.push(d.nodeName) + }, + DCPType: function(a, b) { + this.readChildNodes(a, + b) + }, + HTTP: function(a, b) { + this.readChildNodes(a, b.href) + }, + Get: function(a, b) { + b.get = a.getAttribute("onlineResource") + }, + Post: function(a, b) { + b.post = a.getAttribute("onlineResource") + }, + SRS: function(a, b) { + var c = this.getChildValue(a); + c && (b.srs = c) + } + }, OpenLayers.Format.WFSCapabilities.v1.prototype.readers.wfs) + }, + CLASS_NAME: "OpenLayers.Format.WFSCapabilities.v1_0_0" +}); +OpenLayers.Format.WMSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, { + defaultVersion: "1.1.1", + profile: null, + CLASS_NAME: "OpenLayers.Format.WMSCapabilities" +}); +OpenLayers.Format.WMSCapabilities.v1 = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + wms: "http://www.opengis.net/wms", + xlink: "http://www.w3.org/1999/xlink", + xsi: "http://www.w3.org/2001/XMLSchema-instance" + }, + defaultPrefix: "wms", + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + var b = a; + a && 9 == a.nodeType && (a = a.documentElement); + var c = {}; + this.readNode(a, c); + void 0 === c.service && (a = new OpenLayers.Format.OGCExceptionReport, c.error = a.read(b)); + return c + }, + readers: { + wms: { + Service: function(a, + b) { + b.service = {}; + this.readChildNodes(a, b.service) + }, + Name: function(a, b) { + b.name = this.getChildValue(a) + }, + Title: function(a, b) { + b.title = this.getChildValue(a) + }, + Abstract: function(a, b) { + b["abstract"] = this.getChildValue(a) + }, + BoundingBox: function(a) { + var b = {}; + b.bbox = [parseFloat(a.getAttribute("minx")), parseFloat(a.getAttribute("miny")), parseFloat(a.getAttribute("maxx")), parseFloat(a.getAttribute("maxy"))]; + a = { + x: parseFloat(a.getAttribute("resx")), + y: parseFloat(a.getAttribute("resy")) + }; + if (!isNaN(a.x) || !isNaN(a.y)) b.res = + a; + return b + }, + OnlineResource: function(a, b) { + b.href = this.getAttributeNS(a, this.namespaces.xlink, "href") + }, + ContactInformation: function(a, b) { + b.contactInformation = {}; + this.readChildNodes(a, b.contactInformation) + }, + ContactPersonPrimary: function(a, b) { + b.personPrimary = {}; + this.readChildNodes(a, b.personPrimary) + }, + ContactPerson: function(a, b) { + b.person = this.getChildValue(a) + }, + ContactOrganization: function(a, b) { + b.organization = this.getChildValue(a) + }, + ContactPosition: function(a, b) { + b.position = this.getChildValue(a) + }, + ContactAddress: function(a, + b) { + b.contactAddress = {}; + this.readChildNodes(a, b.contactAddress) + }, + AddressType: function(a, b) { + b.type = this.getChildValue(a) + }, + Address: function(a, b) { + b.address = this.getChildValue(a) + }, + City: function(a, b) { + b.city = this.getChildValue(a) + }, + StateOrProvince: function(a, b) { + b.stateOrProvince = this.getChildValue(a) + }, + PostCode: function(a, b) { + b.postcode = this.getChildValue(a) + }, + Country: function(a, b) { + b.country = this.getChildValue(a) + }, + ContactVoiceTelephone: function(a, b) { + b.phone = this.getChildValue(a) + }, + ContactFacsimileTelephone: function(a, + b) { + b.fax = this.getChildValue(a) + }, + ContactElectronicMailAddress: function(a, b) { + b.email = this.getChildValue(a) + }, + Fees: function(a, b) { + var c = this.getChildValue(a); + c && "none" != c.toLowerCase() && (b.fees = c) + }, + AccessConstraints: function(a, b) { + var c = this.getChildValue(a); + c && "none" != c.toLowerCase() && (b.accessConstraints = c) + }, + Capability: function(a, b) { + b.capability = { + nestedLayers: [], + layers: [] + }; + this.readChildNodes(a, b.capability) + }, + Request: function(a, b) { + b.request = {}; + this.readChildNodes(a, b.request) + }, + GetCapabilities: function(a, + b) { + b.getcapabilities = { + formats: [] + }; + this.readChildNodes(a, b.getcapabilities) + }, + Format: function(a, b) { + OpenLayers.Util.isArray(b.formats) ? b.formats.push(this.getChildValue(a)) : b.format = this.getChildValue(a) + }, + DCPType: function(a, b) { + this.readChildNodes(a, b) + }, + HTTP: function(a, b) { + this.readChildNodes(a, b) + }, + Get: function(a, b) { + b.get = {}; + this.readChildNodes(a, b.get); + b.href || (b.href = b.get.href) + }, + Post: function(a, b) { + b.post = {}; + this.readChildNodes(a, b.post); + b.href || (b.href = b.get.href) + }, + GetMap: function(a, b) { + b.getmap = { + formats: [] + }; + this.readChildNodes(a, b.getmap) + }, + GetFeatureInfo: function(a, b) { + b.getfeatureinfo = { + formats: [] + }; + this.readChildNodes(a, b.getfeatureinfo) + }, + Exception: function(a, b) { + b.exception = { + formats: [] + }; + this.readChildNodes(a, b.exception) + }, + Layer: function(a, b) { + var c, d; + b.capability ? (d = b.capability, c = b) : d = b; + var e = a.getAttributeNode("queryable"), + f = e && e.specified ? a.getAttribute("queryable") : null, + g = (e = a.getAttributeNode("cascaded")) && e.specified ? a.getAttribute("cascaded") : null, + e = (e = a.getAttributeNode("opaque")) && e.specified ? + a.getAttribute("opaque") : null, + h = a.getAttribute("noSubsets"), + i = a.getAttribute("fixedWidth"), + j = a.getAttribute("fixedHeight"), + k = c || {}, + l = OpenLayers.Util.extend; + c = { + nestedLayers: [], + styles: c ? [].concat(c.styles) : [], + srs: c ? l({}, k.srs) : {}, + metadataURLs: [], + bbox: c ? l({}, k.bbox) : {}, + llbbox: k.llbbox, + dimensions: c ? l({}, k.dimensions) : {}, + authorityURLs: c ? l({}, k.authorityURLs) : {}, + identifiers: {}, + keywords: [], + queryable: f && "" !== f ? "1" === f || "true" === f : k.queryable || !1, + cascaded: null !== g ? parseInt(g) : k.cascaded || 0, + opaque: e ? "1" === + e || "true" === e : k.opaque || !1, + noSubsets: null !== h ? "1" === h || "true" === h : k.noSubsets || !1, + fixedWidth: null != i ? parseInt(i) : k.fixedWidth || 0, + fixedHeight: null != j ? parseInt(j) : k.fixedHeight || 0, + minScale: k.minScale, + maxScale: k.maxScale, + attribution: k.attribution + }; + b.nestedLayers.push(c); + c.capability = d; + this.readChildNodes(a, c); + delete c.capability; + if (c.name && (f = c.name.split(":"), g = d.request, e = g.getfeatureinfo, 0 < f.length && (c.prefix = f[0]), d.layers.push(c), void 0 === c.formats && (c.formats = g.getmap.formats), void 0 === c.infoFormats && + e)) c.infoFormats = e.formats + }, + Attribution: function(a, b) { + b.attribution = {}; + this.readChildNodes(a, b.attribution) + }, + LogoURL: function(a, b) { + b.logo = { + width: a.getAttribute("width"), + height: a.getAttribute("height") + }; + this.readChildNodes(a, b.logo) + }, + Style: function(a, b) { + var c = {}; + b.styles.push(c); + this.readChildNodes(a, c) + }, + LegendURL: function(a, b) { + var c = { + width: a.getAttribute("width"), + height: a.getAttribute("height") + }; + b.legend = c; + this.readChildNodes(a, c) + }, + MetadataURL: function(a, b) { + var c = { + type: a.getAttribute("type") + }; + b.metadataURLs.push(c); + this.readChildNodes(a, c) + }, + DataURL: function(a, b) { + b.dataURL = {}; + this.readChildNodes(a, b.dataURL) + }, + FeatureListURL: function(a, b) { + b.featureListURL = {}; + this.readChildNodes(a, b.featureListURL) + }, + AuthorityURL: function(a, b) { + var c = a.getAttribute("name"), + d = {}; + this.readChildNodes(a, d); + b.authorityURLs[c] = d.href + }, + Identifier: function(a, b) { + var c = a.getAttribute("authority"); + b.identifiers[c] = this.getChildValue(a) + }, + KeywordList: function(a, b) { + this.readChildNodes(a, b) + }, + SRS: function(a, b) { + b.srs[this.getChildValue(a)] = !0 + } + } + }, + CLASS_NAME: "OpenLayers.Format.WMSCapabilities.v1" +}); +OpenLayers.Format.WMSCapabilities.v1_3 = OpenLayers.Class(OpenLayers.Format.WMSCapabilities.v1, { + readers: { + wms: OpenLayers.Util.applyDefaults({ + WMS_Capabilities: function(a, b) { + this.readChildNodes(a, b) + }, + LayerLimit: function(a, b) { + b.layerLimit = parseInt(this.getChildValue(a)) + }, + MaxWidth: function(a, b) { + b.maxWidth = parseInt(this.getChildValue(a)) + }, + MaxHeight: function(a, b) { + b.maxHeight = parseInt(this.getChildValue(a)) + }, + BoundingBox: function(a, b) { + var c = OpenLayers.Format.WMSCapabilities.v1.prototype.readers.wms.BoundingBox.apply(this, [a, b]); + c.srs = a.getAttribute("CRS"); + b.bbox[c.srs] = c + }, + CRS: function(a, b) { + this.readers.wms.SRS.apply(this, [a, b]) + }, + EX_GeographicBoundingBox: function(a, b) { + b.llbbox = []; + this.readChildNodes(a, b.llbbox) + }, + westBoundLongitude: function(a, b) { + b[0] = this.getChildValue(a) + }, + eastBoundLongitude: function(a, b) { + b[2] = this.getChildValue(a) + }, + southBoundLatitude: function(a, b) { + b[1] = this.getChildValue(a) + }, + northBoundLatitude: function(a, b) { + b[3] = this.getChildValue(a) + }, + MinScaleDenominator: function(a, b) { + b.maxScale = parseFloat(this.getChildValue(a)).toPrecision(16) + }, + MaxScaleDenominator: function(a, b) { + b.minScale = parseFloat(this.getChildValue(a)).toPrecision(16) + }, + Dimension: function(a, b) { + var c = { + name: a.getAttribute("name").toLowerCase(), + units: a.getAttribute("units"), + unitsymbol: a.getAttribute("unitSymbol"), + nearestVal: "1" === a.getAttribute("nearestValue"), + multipleVal: "1" === a.getAttribute("multipleValues"), + "default": a.getAttribute("default") || "", + current: "1" === a.getAttribute("current"), + values: this.getChildValue(a).split(",") + }; + b.dimensions[c.name] = c + }, + Keyword: function(a, + b) { + var c = { + value: this.getChildValue(a), + vocabulary: a.getAttribute("vocabulary") + }; + b.keywords && b.keywords.push(c) + } + }, OpenLayers.Format.WMSCapabilities.v1.prototype.readers.wms), + sld: { + UserDefinedSymbolization: function(a, b) { + this.readers.wms.UserDefinedSymbolization.apply(this, [a, b]); + b.userSymbols.inlineFeature = 1 == parseInt(a.getAttribute("InlineFeature")); + b.userSymbols.remoteWCS = 1 == parseInt(a.getAttribute("RemoteWCS")) + }, + DescribeLayer: function(a, b) { + this.readers.wms.DescribeLayer.apply(this, [a, b]) + }, + GetLegendGraphic: function(a, + b) { + this.readers.wms.GetLegendGraphic.apply(this, [a, b]) + } + } + }, + CLASS_NAME: "OpenLayers.Format.WMSCapabilities.v1_3" +}); +OpenLayers.Layer.Zoomify = OpenLayers.Class(OpenLayers.Layer.Grid, { + size: null, + isBaseLayer: !0, + standardTileSize: 256, + tileOriginCorner: "tl", + numberOfTiers: 0, + tileCountUpToTier: null, + tierSizeInTiles: null, + tierImageSize: null, + initialize: function(a, b, c, d) { + this.initializeZoomify(c); + OpenLayers.Layer.Grid.prototype.initialize.apply(this, [a, b, c, {}, d]) + }, + initializeZoomify: function(a) { + var a = a.clone(), + b = new OpenLayers.Size(Math.ceil(a.w / this.standardTileSize), Math.ceil(a.h / this.standardTileSize)); + this.tierSizeInTiles = [b]; + for (this.tierImageSize = [a]; a.w > this.standardTileSize || a.h > this.standardTileSize;) a = new OpenLayers.Size(Math.floor(a.w / 2), Math.floor(a.h / 2)), b = new OpenLayers.Size(Math.ceil(a.w / this.standardTileSize), Math.ceil(a.h / this.standardTileSize)), this.tierSizeInTiles.push(b), this.tierImageSize.push(a); + this.tierSizeInTiles.reverse(); + this.tierImageSize.reverse(); + this.numberOfTiers = this.tierSizeInTiles.length; + this.tileCountUpToTier = [0]; + for (a = 1; a < this.numberOfTiers; a++) this.tileCountUpToTier.push(this.tierSizeInTiles[a - + 1].w * this.tierSizeInTiles[a - 1].h + this.tileCountUpToTier[a - 1]) + }, + destroy: function() { + OpenLayers.Layer.Grid.prototype.destroy.apply(this, arguments); + this.tileCountUpToTier.length = 0; + this.tierSizeInTiles.length = 0; + this.tierImageSize.length = 0 + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.Zoomify(this.name, this.url, this.size, this.options)); + return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [a]) + }, + getURL: function(a) { + var a = this.adjustBounds(a), + b = this.map.getResolution(), + c = Math.round((a.left - this.tileOrigin.lon) / + (b * this.tileSize.w)), + a = Math.round((this.tileOrigin.lat - a.top) / (b * this.tileSize.h)), + b = this.map.getZoom(), + c = "TileGroup" + Math.floor((c + a * this.tierSizeInTiles[b].w + this.tileCountUpToTier[b]) / 256) + "/" + b + "-" + c + "-" + a + ".jpg", + a = this.url; + OpenLayers.Util.isArray(a) && (a = this.selectUrl(c, a)); + return a + c + }, + getImageSize: function() { + if (0 < arguments.length) { + var a = this.adjustBounds(arguments[0]), + b = this.map.getResolution(), + c = Math.round((a.left - this.tileOrigin.lon) / (b * this.tileSize.w)), + a = Math.round((this.tileOrigin.lat - + a.top) / (b * this.tileSize.h)), + b = this.map.getZoom(), + d = this.standardTileSize, + e = this.standardTileSize; + c == this.tierSizeInTiles[b].w - 1 && (d = this.tierImageSize[b].w % this.standardTileSize); + a == this.tierSizeInTiles[b].h - 1 && (e = this.tierImageSize[b].h % this.standardTileSize); + return new OpenLayers.Size(d, e) + } + return this.tileSize + }, + setMap: function(a) { + OpenLayers.Layer.Grid.prototype.setMap.apply(this, arguments); + this.tileOrigin = new OpenLayers.LonLat(this.map.maxExtent.left, this.map.maxExtent.top) + }, + calculateGridLayout: function(a, + b, c) { + var d = c * this.tileSize.w, + c = c * this.tileSize.h, + e = a.left - b.lon, + f = Math.floor(e / d) - this.buffer, + a = b.lat - a.top + c, + g = Math.floor(a / c) - this.buffer; + return { + tilelon: d, + tilelat: c, + tileoffsetlon: b.lon + f * d, + tileoffsetlat: b.lat - c * g, + tileoffsetx: -(e / d - f) * this.tileSize.w, + tileoffsety: (g - a / c) * this.tileSize.h + } + }, + CLASS_NAME: "OpenLayers.Layer.Zoomify" +}); +OpenLayers.Layer.MapServer = OpenLayers.Class(OpenLayers.Layer.Grid, { + DEFAULT_PARAMS: { + mode: "map", + map_imagetype: "png" + }, + initialize: function(a, b, c, d) { + OpenLayers.Layer.Grid.prototype.initialize.apply(this, arguments); + this.params = OpenLayers.Util.applyDefaults(this.params, this.DEFAULT_PARAMS); + if (null == d || null == d.isBaseLayer) this.isBaseLayer = "true" != this.params.transparent && !0 != this.params.transparent + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.MapServer(this.name, this.url, this.params, this.getOptions())); + return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [a]) + }, + getURL: function(a) { + var a = this.adjustBounds(a), + a = [a.left, a.bottom, a.right, a.top], + b = this.getImageSize(); + return this.getFullRequestString({ + mapext: a, + imgext: a, + map_size: [b.w, b.h], + imgx: b.w / 2, + imgy: b.h / 2, + imgxy: [b.w, b.h] + }) + }, + getFullRequestString: function(a, b) { + var c = null == b ? this.url : b, + d = OpenLayers.Util.extend({}, this.params), + d = OpenLayers.Util.extend(d, a), + e = OpenLayers.Util.getParameterString(d); + OpenLayers.Util.isArray(c) && (c = this.selectUrl(e, c)); + var e = OpenLayers.Util.upperCaseObject(OpenLayers.Util.getParameters(c)), + f; + for (f in d) f.toUpperCase() in e && delete d[f]; + e = OpenLayers.Util.getParameterString(d); + d = c; + e = e.replace(/,/g, "+"); + "" != e && (f = c.charAt(c.length - 1), d = "&" == f || "?" == f ? d + e : -1 == c.indexOf("?") ? d + ("?" + e) : d + ("&" + e)); + return d + }, + CLASS_NAME: "OpenLayers.Layer.MapServer" +}); +OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, { + xmlns: "urn:schemas-microsoft-com:vml", + symbolCache: {}, + offset: null, + initialize: function(a) { + if (this.supported()) { + if (!document.namespaces.olv) { + document.namespaces.add("olv", this.xmlns); + for (var b = document.createStyleSheet(), c = "shape rect oval fill stroke imagedata group textbox".split(" "), d = 0, e = c.length; d < e; d++) b.addRule("olv\\:" + c[d], "behavior: url(#default#VML); position: absolute; display: inline-block;") + } + OpenLayers.Renderer.Elements.prototype.initialize.apply(this, + arguments) + } + }, + supported: function() { + return !!document.namespaces + }, + setExtent: function(a, b) { + var c = OpenLayers.Renderer.Elements.prototype.setExtent.apply(this, arguments), + d = this.getResolution(), + e = a.left / d | 0, + d = a.top / d - this.size.h | 0; + b || !this.offset ? (this.offset = { + x: e, + y: d + }, d = e = 0) : (e -= this.offset.x, d -= this.offset.y); + this.root.coordorigin = e - this.xOffset + " " + d; + for (var e = [this.root, this.vectorRoot, this.textRoot], f = 0, g = e.length; f < g; ++f) d = e[f], d.coordsize = this.size.w + " " + this.size.h; + this.root.style.flip = "y"; + return c + }, + setSize: function(a) { + OpenLayers.Renderer.prototype.setSize.apply(this, arguments); + for (var b = [this.rendererRoot, this.root, this.vectorRoot, this.textRoot], c = this.size.w + "px", d = this.size.h + "px", e, f = 0, g = b.length; f < g; ++f) e = b[f], e.style.width = c, e.style.height = d + }, + getNodeType: function(a, b) { + var c = null; + switch (a.CLASS_NAME) { + case "OpenLayers.Geometry.Point": + c = b.externalGraphic ? "olv:rect" : this.isComplexSymbol(b.graphicName) ? "olv:shape" : "olv:oval"; + break; + case "OpenLayers.Geometry.Rectangle": + c = "olv:rect"; + break; + case "OpenLayers.Geometry.LineString": + case "OpenLayers.Geometry.LinearRing": + case "OpenLayers.Geometry.Polygon": + case "OpenLayers.Geometry.Curve": + c = + "olv:shape" + } + return c + }, + setStyle: function(a, b, c, d) { + var b = b || a._style, + c = c || a._options, + e = b.fillColor; + if ("OpenLayers.Geometry.Point" === a._geometryClass) + if (b.externalGraphic) { + c.isFilled = !0; + b.graphicTitle && (a.title = b.graphicTitle); + var e = b.graphicWidth || b.graphicHeight, + f = b.graphicHeight || b.graphicWidth, + e = e ? e : 2 * b.pointRadius, + f = f ? f : 2 * b.pointRadius, + g = this.getResolution(), + h = void 0 != b.graphicXOffset ? b.graphicXOffset : -(0.5 * e), + i = void 0 != b.graphicYOffset ? b.graphicYOffset : -(0.5 * f); + a.style.left = ((d.x - this.featureDx) / + g - this.offset.x + h | 0) + "px"; + a.style.top = (d.y / g - this.offset.y - (i + f) | 0) + "px"; + a.style.width = e + "px"; + a.style.height = f + "px"; + a.style.flip = "y"; + e = "none"; + c.isStroked = !1 + } else this.isComplexSymbol(b.graphicName) ? (f = this.importSymbol(b.graphicName), a.path = f.path, a.coordorigin = f.left + "," + f.bottom, f = f.size, a.coordsize = f + "," + f, this.drawCircle(a, d, b.pointRadius), a.style.flip = "y") : this.drawCircle(a, d, b.pointRadius); + c.isFilled ? a.fillcolor = e : a.filled = "false"; + d = a.getElementsByTagName("fill"); + d = 0 == d.length ? null : d[0]; + if (c.isFilled) { + d || + (d = this.createNode("olv:fill", a.id + "_fill")); + d.opacity = b.fillOpacity; + if ("OpenLayers.Geometry.Point" === a._geometryClass && b.externalGraphic && (b.graphicOpacity && (d.opacity = b.graphicOpacity), d.src = b.externalGraphic, d.type = "frame", !b.graphicWidth || !b.graphicHeight)) d.aspect = "atmost"; + d.parentNode != a && a.appendChild(d) + } else d && a.removeChild(d); + e = b.rotation; + if (void 0 !== e || void 0 !== a._rotation) a._rotation = e, b.externalGraphic ? (this.graphicRotate(a, h, i, b), d.opacity = 0) : "OpenLayers.Geometry.Point" === a._geometryClass && + (a.style.rotation = e || 0); + h = a.getElementsByTagName("stroke"); + h = 0 == h.length ? null : h[0]; + if (c.isStroked) { + if (h || (h = this.createNode("olv:stroke", a.id + "_stroke"), a.appendChild(h)), h.on = !0, h.color = b.strokeColor, h.weight = b.strokeWidth + "px", h.opacity = b.strokeOpacity, h.endcap = "butt" == b.strokeLinecap ? "flat" : b.strokeLinecap || "round", b.strokeDashstyle) h.dashstyle = this.dashStyle(b) + } else a.stroked = !1, h && (h.on = !1); + "inherit" != b.cursor && null != b.cursor && (a.style.cursor = b.cursor); + return a + }, + graphicRotate: function(a, b, c, + d) { + var d = d || a._style, + e = d.rotation || 0, + f, g; + if (!d.graphicWidth || !d.graphicHeight) { + var h = new Image; + h.onreadystatechange = OpenLayers.Function.bind(function() { + if ("complete" == h.readyState || "interactive" == h.readyState) f = h.width / h.height, g = Math.max(2 * d.pointRadius, d.graphicWidth || 0, d.graphicHeight || 0), b *= f, d.graphicWidth = g * f, d.graphicHeight = g, this.graphicRotate(a, b, c, d) + }, this); + h.src = d.externalGraphic + } else { + g = Math.max(d.graphicWidth, d.graphicHeight); + f = d.graphicWidth / d.graphicHeight; + var i = Math.round(d.graphicWidth || + g * f), + j = Math.round(d.graphicHeight || g); + a.style.width = i + "px"; + a.style.height = j + "px"; + var k = document.getElementById(a.id + "_image"); + k || (k = this.createNode("olv:imagedata", a.id + "_image"), a.appendChild(k)); + k.style.width = i + "px"; + k.style.height = j + "px"; + k.src = d.externalGraphic; + k.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='', sizingMethod='scale')"; + k = e * Math.PI / 180; + e = Math.sin(k); + k = Math.cos(k); + e = "progid:DXImageTransform.Microsoft.Matrix(M11=" + k + ",M12=" + -e + ",M21=" + e + ",M22=" + k + ",SizingMethod='auto expand')\n"; + (k = d.graphicOpacity || d.fillOpacity) && 1 != k && (e += "progid:DXImageTransform.Microsoft.BasicImage(opacity=" + k + ")\n"); + a.style.filter = e; + e = new OpenLayers.Geometry.Point(-b, -c); + i = (new OpenLayers.Bounds(0, 0, i, j)).toGeometry(); + i.rotate(d.rotation, e); + i = i.getBounds(); + a.style.left = Math.round(parseInt(a.style.left) + i.left) + "px"; + a.style.top = Math.round(parseInt(a.style.top) - i.bottom) + "px" + } + }, + postDraw: function(a) { + a.style.visibility = "visible"; + var b = a._style.fillColor, + c = a._style.strokeColor; + "none" == b && a.fillcolor != b && + (a.fillcolor = b); + "none" == c && a.strokecolor != c && (a.strokecolor = c) + }, + setNodeDimension: function(a, b) { + var c = b.getBounds(); + if (c) { + var d = this.getResolution(), + c = new OpenLayers.Bounds((c.left - this.featureDx) / d - this.offset.x | 0, c.bottom / d - this.offset.y | 0, (c.right - this.featureDx) / d - this.offset.x | 0, c.top / d - this.offset.y | 0); + a.style.left = c.left + "px"; + a.style.top = c.top + "px"; + a.style.width = c.getWidth() + "px"; + a.style.height = c.getHeight() + "px"; + a.coordorigin = c.left + " " + c.top; + a.coordsize = c.getWidth() + " " + c.getHeight() + } + }, + dashStyle: function(a) { + a = + a.strokeDashstyle; + switch (a) { + case "solid": + case "dot": + case "dash": + case "dashdot": + case "longdash": + case "longdashdot": + return a; + default: + return a = a.split(/[ ,]/), 2 == a.length ? 1 * a[0] >= 2 * a[1] ? "longdash" : 1 == a[0] || 1 == a[1] ? "dot" : "dash" : 4 == a.length ? 1 * a[0] >= 2 * a[1] ? "longdashdot" : "dashdot" : "solid" + } + }, + createNode: function(a, b) { + var c = document.createElement(a); + b && (c.id = b); + c.unselectable = "on"; + c.onselectstart = OpenLayers.Function.False; + return c + }, + nodeTypeCompare: function(a, b) { + var c = b, + d = c.indexOf(":"); - 1 != d && (c = c.substr(d + + 1)); + var e = a.nodeName, + d = e.indexOf(":"); - 1 != d && (e = e.substr(d + 1)); + return c == e + }, + createRenderRoot: function() { + return this.nodeFactory(this.container.id + "_vmlRoot", "div") + }, + createRoot: function(a) { + return this.nodeFactory(this.container.id + a, "olv:group") + }, + drawPoint: function(a, b) { + return this.drawCircle(a, b, 1) + }, + drawCircle: function(a, b, c) { + if (!isNaN(b.x) && !isNaN(b.y)) { + var d = this.getResolution(); + a.style.left = ((b.x - this.featureDx) / d - this.offset.x | 0) - c + "px"; + a.style.top = (b.y / d - this.offset.y | 0) - c + "px"; + b = 2 * c; + a.style.width = + b + "px"; + a.style.height = b + "px"; + return a + } + return !1 + }, + drawLineString: function(a, b) { + return this.drawLine(a, b, !1) + }, + drawLinearRing: function(a, b) { + return this.drawLine(a, b, !0) + }, + drawLine: function(a, b, c) { + this.setNodeDimension(a, b); + for (var d = this.getResolution(), e = b.components.length, f = Array(e), g, h, i = 0; i < e; i++) g = b.components[i], h = (g.x - this.featureDx) / d - this.offset.x | 0, g = g.y / d - this.offset.y | 0, f[i] = " " + h + "," + g + " l "; + a.path = "m" + f.join("") + (c ? " x e" : " e"); + return a + }, + drawPolygon: function(a, b) { + this.setNodeDimension(a, + b); + var c = this.getResolution(), + d = [], + e, f, g, h, i, j, k, l, m, n; + e = 0; + for (f = b.components.length; e < f; e++) { + d.push("m"); + g = b.components[e].components; + h = 0 === e; + j = i = null; + k = 0; + for (l = g.length; k < l; k++) m = g[k], n = (m.x - this.featureDx) / c - this.offset.x | 0, m = m.y / c - this.offset.y | 0, n = " " + n + "," + m, d.push(n), 0 == k && d.push(" l"), h || (i ? i != n && (j ? j != n && (h = !0) : j = n) : i = n); + d.push(h ? " x " : " ") + } + d.push("e"); + a.path = d.join(""); + return a + }, + drawRectangle: function(a, b) { + var c = this.getResolution(); + a.style.left = ((b.x - this.featureDx) / c - this.offset.x | 0) + + "px"; + a.style.top = (b.y / c - this.offset.y | 0) + "px"; + a.style.width = (b.width / c | 0) + "px"; + a.style.height = (b.height / c | 0) + "px"; + return a + }, + drawText: function(a, b, c) { + var d = this.nodeFactory(a + this.LABEL_ID_SUFFIX, "olv:rect"), + e = this.nodeFactory(a + this.LABEL_ID_SUFFIX + "_textbox", "olv:textbox"), + f = this.getResolution(); + d.style.left = ((c.x - this.featureDx) / f - this.offset.x | 0) + "px"; + d.style.top = (c.y / f - this.offset.y | 0) + "px"; + d.style.flip = "y"; + e.innerText = b.label; + "inherit" != b.cursor && null != b.cursor && (e.style.cursor = b.cursor); + b.fontColor && + (e.style.color = b.fontColor); + b.fontOpacity && (e.style.filter = "alpha(opacity=" + 100 * b.fontOpacity + ")"); + b.fontFamily && (e.style.fontFamily = b.fontFamily); + b.fontSize && (e.style.fontSize = b.fontSize); + b.fontWeight && (e.style.fontWeight = b.fontWeight); + b.fontStyle && (e.style.fontStyle = b.fontStyle); + !0 === b.labelSelect && (d._featureId = a, e._featureId = a, e._geometry = c, e._geometryClass = c.CLASS_NAME); + e.style.whiteSpace = "nowrap"; + e.inset = "1px,0px,0px,0px"; + d.parentNode || (d.appendChild(e), this.textRoot.appendChild(d)); + b = b.labelAlign || + "cm"; + 1 == b.length && (b += "m"); + a = e.clientWidth * OpenLayers.Renderer.VML.LABEL_SHIFT[b.substr(0, 1)]; + e = e.clientHeight * OpenLayers.Renderer.VML.LABEL_SHIFT[b.substr(1, 1)]; + d.style.left = parseInt(d.style.left) - a - 1 + "px"; + d.style.top = parseInt(d.style.top) + e + "px" + }, + moveRoot: function(a) { + var b = this.map.getLayer(a.container.id); + b instanceof OpenLayers.Layer.Vector.RootContainer && (b = this.map.getLayer(this.container.id)); + b && b.renderer.clear(); + OpenLayers.Renderer.Elements.prototype.moveRoot.apply(this, arguments); + b && b.redraw() + }, + importSymbol: function(a) { + var b = this.container.id + "-" + a, + c = this.symbolCache[b]; + if (c) return c; + c = OpenLayers.Renderer.symbol[a]; + if (!c) throw Error(a + " is not a valid symbol name"); + for (var a = new OpenLayers.Bounds(Number.MAX_VALUE, Number.MAX_VALUE, 0, 0), d = ["m"], e = 0; e < c.length; e += 2) { + var f = c[e], + g = c[e + 1]; + a.left = Math.min(a.left, f); + a.bottom = Math.min(a.bottom, g); + a.right = Math.max(a.right, f); + a.top = Math.max(a.top, g); + d.push(f); + d.push(g); + 0 == e && d.push("l") + } + d.push("x e"); + c = d.join(" "); + d = (a.getWidth() - a.getHeight()) / 2; + 0 < d ? (a.bottom -= d, a.top += d) : (a.left += d, a.right -= d); + c = { + path: c, + size: a.getWidth(), + left: a.left, + bottom: a.bottom + }; + return this.symbolCache[b] = c + }, + CLASS_NAME: "OpenLayers.Renderer.VML" +}); +OpenLayers.Renderer.VML.LABEL_SHIFT = { + l: 0, + c: 0.5, + r: 1, + t: 0, + m: 0.5, + b: 1 +}; +OpenLayers.Control.CacheRead = OpenLayers.Class(OpenLayers.Control, { + fetchEvent: "tileloadstart", + layers: null, + autoActivate: !0, + setMap: function(a) { + OpenLayers.Control.prototype.setMap.apply(this, arguments); + var b, c = this.layers || a.layers; + for (b = c.length - 1; 0 <= b; --b) this.addLayer({ + layer: c[b] + }); + if (!this.layers) a.events.on({ + addlayer: this.addLayer, + removeLayer: this.removeLayer, + scope: this + }) + }, + addLayer: function(a) { + a.layer.events.register(this.fetchEvent, this, this.fetch) + }, + removeLayer: function(a) { + a.layer.events.unregister(this.fetchEvent, + this, this.fetch) + }, + fetch: function(a) { + if (this.active && window.localStorage && a.tile instanceof OpenLayers.Tile.Image) { + var b = a.tile, + c = b.url; + !b.layer.crossOriginKeyword && (OpenLayers.ProxyHost && 0 === c.indexOf(OpenLayers.ProxyHost)) && (c = OpenLayers.Control.CacheWrite.urlMap[c]); + if (c = window.localStorage.getItem("olCache_" + c)) b.url = c, "tileerror" === a.type && b.setImgSrc(c) + } + }, + destroy: function() { + if (this.layers || this.map) { + var a, b = this.layers || this.map.layers; + for (a = b.length - 1; 0 <= a; --a) this.removeLayer({ + layer: b[a] + }) + } + this.map && + this.map.events.un({ + addlayer: this.addLayer, + removeLayer: this.removeLayer, + scope: this + }); + OpenLayers.Control.prototype.destroy.apply(this, arguments) + }, + CLASS_NAME: "OpenLayers.Control.CacheRead" +}); +OpenLayers.Protocol.WFS.v1_0_0 = OpenLayers.Class(OpenLayers.Protocol.WFS.v1, { + version: "1.0.0", + CLASS_NAME: "OpenLayers.Protocol.WFS.v1_0_0" +}); +OpenLayers.Format.WMSGetFeatureInfo = OpenLayers.Class(OpenLayers.Format.XML, { + layerIdentifier: "_layer", + featureIdentifier: "_feature", + regExes: { + trimSpace: /^\s*|\s*$/g, + removeSpace: /\s*/g, + splitSpace: /\s+/, + trimComma: /\s*,\s*/g + }, + gmlFormat: null, + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + var b = a.documentElement; + if (b) var c = this["read_" + b.nodeName], + a = c ? c.call(this, b) : (new OpenLayers.Format.GML(this.options ? this.options : {})).read(a); + return a + }, + read_msGMLOutput: function(a) { + var b = []; + if (a = this.getSiblingNodesByTagCriteria(a, this.layerIdentifier)) + for (var c = 0, d = a.length; c < d; ++c) { + var e = a[c], + f = e.nodeName; + e.prefix && (f = f.split(":")[1]); + f = f.replace(this.layerIdentifier, ""); + if (e = this.getSiblingNodesByTagCriteria(e, this.featureIdentifier)) + for (var g = 0; g < e.length; g++) { + var h = e[g], + i = this.parseGeometry(h), + h = this.parseAttributes(h), + h = new OpenLayers.Feature.Vector(i.geometry, h, null); + h.bounds = i.bounds; + h.type = f; + b.push(h) + } + } + return b + }, + read_FeatureInfoResponse: function(a) { + for (var b = [], a = this.getElementsByTagNameNS(a, + "*", "FIELDS"), c = 0, d = a.length; c < d; c++) { + var e = a[c], + f = {}, + g, h = e.attributes.length; + if (0 < h) + for (g = 0; g < h; g++) { + var i = e.attributes[g]; + f[i.nodeName] = i.nodeValue + } else { + e = e.childNodes; + g = 0; + for (h = e.length; g < h; ++g) i = e[g], 3 != i.nodeType && (f[i.getAttribute("name")] = i.getAttribute("value")) + } + b.push(new OpenLayers.Feature.Vector(null, f, null)) + } + return b + }, + getSiblingNodesByTagCriteria: function(a, b) { + var c = [], + d, e, f, g; + if (a && a.hasChildNodes()) { + d = a.childNodes; + f = d.length; + for (var h = 0; h < f; h++) { + for (g = d[h]; g && 1 != g.nodeType;) g = g.nextSibling, + h++; + e = g ? g.nodeName : ""; + 0 < e.length && -1 < e.indexOf(b) ? c.push(g) : (e = this.getSiblingNodesByTagCriteria(g, b), 0 < e.length && (0 == c.length ? c = e : c.push(e))) + } + } + return c + }, + parseAttributes: function(a) { + var b = {}; + if (1 == a.nodeType) + for (var a = a.childNodes, c = a.length, d = 0; d < c; ++d) { + var e = a[d]; + if (1 == e.nodeType) { + var f = e.childNodes, + e = e.prefix ? e.nodeName.split(":")[1] : e.nodeName; + if (0 == f.length) b[e] = null; + else if (1 == f.length && (f = f[0], 3 == f.nodeType || 4 == f.nodeType)) f = f.nodeValue.replace(this.regExes.trimSpace, ""), b[e] = f + } + } + return b + }, + parseGeometry: function(a) { + this.gmlFormat || (this.gmlFormat = new OpenLayers.Format.GML); + var a = this.gmlFormat.parseFeature(a), + b, c = null; + a && (b = a.geometry && a.geometry.clone(), c = a.bounds && a.bounds.clone(), a.destroy()); + return { + geometry: b, + bounds: c + } + }, + CLASS_NAME: "OpenLayers.Format.WMSGetFeatureInfo" +}); +OpenLayers.Control.WMTSGetFeatureInfo = OpenLayers.Class(OpenLayers.Control, { + hover: !1, + requestEncoding: "KVP", + drillDown: !1, + maxFeatures: 10, + clickCallback: "click", + layers: null, + queryVisible: !0, + infoFormat: "text/html", + vendorParams: {}, + format: null, + formatOptions: null, + handlerOptions: null, + handler: null, + hoverRequest: null, + pending: 0, + initialize: function(a) { + a = a || {}; + a.handlerOptions = a.handlerOptions || {}; + OpenLayers.Control.prototype.initialize.apply(this, [a]); + this.format || (this.format = new OpenLayers.Format.WMSGetFeatureInfo(a.formatOptions)); + !0 === this.drillDown && (this.hover = !1); + this.hover ? this.handler = new OpenLayers.Handler.Hover(this, { + move: this.cancelHover, + pause: this.getInfoForHover + }, OpenLayers.Util.extend(this.handlerOptions.hover || {}, { + delay: 250 + })) : (a = {}, a[this.clickCallback] = this.getInfoForClick, this.handler = new OpenLayers.Handler.Click(this, a, this.handlerOptions.click || {})) + }, + getInfoForClick: function(a) { + this.request(a.xy, {}) + }, + getInfoForHover: function(a) { + this.request(a.xy, { + hover: !0 + }) + }, + cancelHover: function() { + this.hoverRequest && (--this.pending, + 0 >= this.pending && (OpenLayers.Element.removeClass(this.map.viewPortDiv, "olCursorWait"), this.pending = 0), this.hoverRequest.abort(), this.hoverRequest = null) + }, + findLayers: function() { + for (var a = this.layers || this.map.layers, b = [], c, d = a.length - 1; 0 <= d; --d) + if (c = a[d], c instanceof OpenLayers.Layer.WMTS && c.requestEncoding === this.requestEncoding && (!this.queryVisible || c.getVisibility())) + if (b.push(c), !this.drillDown || this.hover) break; + return b + }, + buildRequestOptions: function(a, b) { + var c = this.map.getLonLatFromPixel(b), + d = + a.getURL(new OpenLayers.Bounds(c.lon, c.lat, c.lon, c.lat)), + d = OpenLayers.Util.getParameters(d), + c = a.getTileInfo(c); + OpenLayers.Util.extend(d, { + service: "WMTS", + version: a.version, + request: "GetFeatureInfo", + infoFormat: this.infoFormat, + i: c.i, + j: c.j + }); + OpenLayers.Util.applyDefaults(d, this.vendorParams); + return { + url: OpenLayers.Util.isArray(a.url) ? a.url[0] : a.url, + params: OpenLayers.Util.upperCaseObject(d), + callback: function(c) { + this.handleResponse(b, c, a) + }, + scope: this + } + }, + request: function(a, b) { + var b = b || {}, + c = this.findLayers(); + if (0 < c.length) { + for (var d, e, f = 0, g = c.length; f < g; f++) e = c[f], d = this.events.triggerEvent("beforegetfeatureinfo", { + xy: a, + layer: e + }), !1 !== d && (++this.pending, d = this.buildRequestOptions(e, a), d = OpenLayers.Request.GET(d), !0 === b.hover && (this.hoverRequest = d)); + 0 < this.pending && OpenLayers.Element.addClass(this.map.viewPortDiv, "olCursorWait") + } + }, + handleResponse: function(a, b, c) { + --this.pending; + 0 >= this.pending && (OpenLayers.Element.removeClass(this.map.viewPortDiv, "olCursorWait"), this.pending = 0); + if (b.status && (200 > b.status || + 300 <= b.status)) this.events.triggerEvent("exception", { + xy: a, + request: b, + layer: c + }); + else { + var d = b.responseXML; + if (!d || !d.documentElement) d = b.responseText; + var e, f; + try { + e = this.format.read(d) + } catch (g) { + f = !0, this.events.triggerEvent("exception", { + xy: a, + request: b, + error: g, + layer: c + }) + } + f || this.events.triggerEvent("getfeatureinfo", { + text: b.responseText, + features: e, + request: b, + xy: a, + layer: c + }) + } + }, + CLASS_NAME: "OpenLayers.Control.WMTSGetFeatureInfo" +}); +OpenLayers.Strategy.Paging = OpenLayers.Class(OpenLayers.Strategy, { + features: null, + length: 10, + num: null, + paging: !1, + activate: function() { + var a = OpenLayers.Strategy.prototype.activate.call(this); + if (a) this.layer.events.on({ + beforefeaturesadded: this.cacheFeatures, + scope: this + }); + return a + }, + deactivate: function() { + var a = OpenLayers.Strategy.prototype.deactivate.call(this); + a && (this.clearCache(), this.layer.events.un({ + beforefeaturesadded: this.cacheFeatures, + scope: this + })); + return a + }, + cacheFeatures: function(a) { + this.paging || (this.clearCache(), + this.features = a.features, this.pageNext(a)) + }, + clearCache: function() { + if (this.features) + for (var a = 0; a < this.features.length; ++a) this.features[a].destroy(); + this.num = this.features = null + }, + pageCount: function() { + return Math.ceil((this.features ? this.features.length : 0) / this.length) + }, + pageNum: function() { + return this.num + }, + pageLength: function(a) { + a && 0 < a && (this.length = a); + return this.length + }, + pageNext: function(a) { + var b = !1; + this.features && (null === this.num && (this.num = -1), b = this.page((this.num + 1) * this.length, a)); + return b + }, + pagePrevious: function() { + var a = !1; + this.features && (null === this.num && (this.num = this.pageCount()), a = this.page((this.num - 1) * this.length)); + return a + }, + page: function(a, b) { + var c = !1; + if (this.features && 0 <= a && a < this.features.length) { + var d = Math.floor(a / this.length); + d != this.num && (this.paging = !0, c = this.features.slice(a, a + this.length), this.layer.removeFeatures(this.layer.features), this.num = d, b && b.features ? b.features = c : this.layer.addFeatures(c), this.paging = !1, c = !0) + } + return c + }, + CLASS_NAME: "OpenLayers.Strategy.Paging" +}); +OpenLayers.Protocol.CSW.v2_0_2 = OpenLayers.Class(OpenLayers.Protocol, { + formatOptions: null, + initialize: function(a) { + OpenLayers.Protocol.prototype.initialize.apply(this, [a]); + a.format || (this.format = new OpenLayers.Format.CSWGetRecords.v2_0_2(OpenLayers.Util.extend({}, this.formatOptions))) + }, + destroy: function() { + this.options && !this.options.format && this.format.destroy(); + this.format = null; + OpenLayers.Protocol.prototype.destroy.apply(this) + }, + read: function(a) { + a = OpenLayers.Util.extend({}, a); + OpenLayers.Util.applyDefaults(a, + this.options || {}); + var b = new OpenLayers.Protocol.Response({ + requestType: "read" + }), + c = this.format.write(a.params); + b.priv = OpenLayers.Request.POST({ + url: a.url, + callback: this.createCallback(this.handleRead, b, a), + params: a.params, + headers: a.headers, + data: c + }); + return b + }, + handleRead: function(a, b) { + if (b.callback) { + var c = a.priv; + 200 <= c.status && 300 > c.status ? (a.data = this.parseData(c), a.code = OpenLayers.Protocol.Response.SUCCESS) : a.code = OpenLayers.Protocol.Response.FAILURE; + b.callback.call(b.scope, a) + } + }, + parseData: function(a) { + var b = + a.responseXML; + if (!b || !b.documentElement) b = a.responseText; + return !b || 0 >= b.length ? null : this.format.read(b) + }, + CLASS_NAME: "OpenLayers.Protocol.CSW.v2_0_2" +}); +OpenLayers.Format.WMSCapabilities.v1_1 = OpenLayers.Class(OpenLayers.Format.WMSCapabilities.v1, { + readers: { + wms: OpenLayers.Util.applyDefaults({ + WMT_MS_Capabilities: function(a, b) { + this.readChildNodes(a, b) + }, + Keyword: function(a, b) { + b.keywords && b.keywords.push(this.getChildValue(a)) + }, + DescribeLayer: function(a, b) { + b.describelayer = { + formats: [] + }; + this.readChildNodes(a, b.describelayer) + }, + GetLegendGraphic: function(a, b) { + b.getlegendgraphic = { + formats: [] + }; + this.readChildNodes(a, b.getlegendgraphic) + }, + GetStyles: function(a, b) { + b.getstyles = { + formats: [] + }; + this.readChildNodes(a, b.getstyles) + }, + PutStyles: function(a, b) { + b.putstyles = { + formats: [] + }; + this.readChildNodes(a, b.putstyles) + }, + UserDefinedSymbolization: function(a, b) { + var c = { + supportSLD: 1 == parseInt(a.getAttribute("SupportSLD")), + userLayer: 1 == parseInt(a.getAttribute("UserLayer")), + userStyle: 1 == parseInt(a.getAttribute("UserStyle")), + remoteWFS: 1 == parseInt(a.getAttribute("RemoteWFS")) + }; + b.userSymbols = c + }, + LatLonBoundingBox: function(a, b) { + b.llbbox = [parseFloat(a.getAttribute("minx")), parseFloat(a.getAttribute("miny")), + parseFloat(a.getAttribute("maxx")), parseFloat(a.getAttribute("maxy")) + ] + }, + BoundingBox: function(a, b) { + var c = OpenLayers.Format.WMSCapabilities.v1.prototype.readers.wms.BoundingBox.apply(this, [a, b]); + c.srs = a.getAttribute("SRS"); + b.bbox[c.srs] = c + }, + ScaleHint: function(a, b) { + var c = a.getAttribute("min"), + d = a.getAttribute("max"), + e = Math.pow(2, 0.5), + f = OpenLayers.INCHES_PER_UNIT.m; + b.maxScale = parseFloat((c / e * f * OpenLayers.DOTS_PER_INCH).toPrecision(13)); + b.minScale = parseFloat((d / e * f * OpenLayers.DOTS_PER_INCH).toPrecision(13)) + }, + Dimension: function(a, b) { + var c = { + name: a.getAttribute("name").toLowerCase(), + units: a.getAttribute("units"), + unitsymbol: a.getAttribute("unitSymbol") + }; + b.dimensions[c.name] = c + }, + Extent: function(a, b) { + var c = a.getAttribute("name").toLowerCase(); + if (c in b.dimensions) { + c = b.dimensions[c]; + c.nearestVal = "1" === a.getAttribute("nearestValue"); + c.multipleVal = "1" === a.getAttribute("multipleValues"); + c.current = "1" === a.getAttribute("current"); + c["default"] = a.getAttribute("default") || ""; + var d = this.getChildValue(a); + c.values = d.split(",") + } + } + }, + OpenLayers.Format.WMSCapabilities.v1.prototype.readers.wms) + }, + CLASS_NAME: "OpenLayers.Format.WMSCapabilities.v1_1" +}); +OpenLayers.Control.Graticule = OpenLayers.Class(OpenLayers.Control, { + autoActivate: !0, + intervals: [45, 30, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.01, 0.005, 0.002, 0.001], + displayInLayerSwitcher: !0, + visible: !0, + numPoints: 50, + targetSize: 200, + layerName: null, + labelled: !0, + labelFormat: "dm", + lineSymbolizer: { + strokeColor: "#333", + strokeWidth: 1, + strokeOpacity: 0.5 + }, + labelSymbolizer: {}, + gratLayer: null, + initialize: function(a) { + a = a || {}; + a.layerName = a.layerName || OpenLayers.i18n("Graticule"); + OpenLayers.Control.prototype.initialize.apply(this, [a]); + this.labelSymbolizer.stroke = !1; + this.labelSymbolizer.fill = !1; + this.labelSymbolizer.label = "${label}"; + this.labelSymbolizer.labelAlign = "${labelAlign}"; + this.labelSymbolizer.labelXOffset = "${xOffset}"; + this.labelSymbolizer.labelYOffset = "${yOffset}" + }, + destroy: function() { + this.deactivate(); + OpenLayers.Control.prototype.destroy.apply(this, arguments); + this.gratLayer && (this.gratLayer.destroy(), this.gratLayer = null) + }, + draw: function() { + OpenLayers.Control.prototype.draw.apply(this, arguments); + if (!this.gratLayer) { + var a = new OpenLayers.Style({}, { + rules: [new OpenLayers.Rule({ + symbolizer: { + Point: this.labelSymbolizer, + Line: this.lineSymbolizer + } + })] + }); + this.gratLayer = new OpenLayers.Layer.Vector(this.layerName, { + styleMap: new OpenLayers.StyleMap({ + "default": a + }), + visibility: this.visible, + displayInLayerSwitcher: this.displayInLayerSwitcher + }) + } + return this.div + }, + activate: function() { + return OpenLayers.Control.prototype.activate.apply(this, arguments) ? (this.map.addLayer(this.gratLayer), this.map.events.register("moveend", this, this.update), this.update(), !0) : !1 + }, + deactivate: function() { + return OpenLayers.Control.prototype.deactivate.apply(this, + arguments) ? (this.map.events.unregister("moveend", this, this.update), this.map.removeLayer(this.gratLayer), !0) : !1 + }, + update: function() { + var a = this.map.getExtent(); + if (a) { + this.gratLayer.destroyFeatures(); + var b = new OpenLayers.Projection("EPSG:4326"), + c = this.map.getProjectionObject(), + d = this.map.getResolution(); + c.proj && "longlat" == c.proj.projName && (this.numPoints = 1); + var e = this.map.getCenter(), + f = new OpenLayers.Pixel(e.lon, e.lat); + OpenLayers.Projection.transform(f, c, b); + for (var e = this.targetSize * d, e = e * e, g, d = 0; d < this.intervals.length; ++d) { + g = + this.intervals[d]; + var h = g / 2, + i = f.offset({ + x: -h, + y: -h + }), + h = f.offset({ + x: h, + y: h + }); + OpenLayers.Projection.transform(i, b, c); + OpenLayers.Projection.transform(h, b, c); + if ((i.x - h.x) * (i.x - h.x) + (i.y - h.y) * (i.y - h.y) <= e) break + } + f.x = Math.floor(f.x / g) * g; + f.y = Math.floor(f.y / g) * g; + var d = 0, + e = [f.clone()], + h = f.clone(), + j; + do h = h.offset({ + x: 0, + y: g + }), j = OpenLayers.Projection.transform(h.clone(), b, c), e.unshift(h); while (a.containsPixel(j) && 1E3 > ++d); + h = f.clone(); + do h = h.offset({ + x: 0, + y: -g + }), j = OpenLayers.Projection.transform(h.clone(), b, c), e.push(h); + while (a.containsPixel(j) && 1E3 > ++d); + d = 0; + i = [f.clone()]; + h = f.clone(); + do h = h.offset({ + x: -g, + y: 0 + }), j = OpenLayers.Projection.transform(h.clone(), b, c), i.unshift(h); while (a.containsPixel(j) && 1E3 > ++d); + h = f.clone(); + do h = h.offset({ + x: g, + y: 0 + }), j = OpenLayers.Projection.transform(h.clone(), b, c), i.push(h); while (a.containsPixel(j) && 1E3 > ++d); + g = []; + for (d = 0; d < i.length; ++d) { + j = i[d].x; + for (var f = [], k = null, l = Math.min(e[0].y, 90), h = Math.max(e[e.length - 1].y, -90), m = (l - h) / this.numPoints, l = h, h = 0; h <= this.numPoints; ++h) { + var n = new OpenLayers.Geometry.Point(j, + l); + n.transform(b, c); + f.push(n); + l += m; + n.y >= a.bottom && !k && (k = n) + } + this.labelled && (k = new OpenLayers.Geometry.Point(k.x, a.bottom), j = { + value: j, + label: this.labelled ? OpenLayers.Util.getFormattedLonLat(j, "lon", this.labelFormat) : "", + labelAlign: "cb", + xOffset: 0, + yOffset: 2 + }, this.gratLayer.addFeatures(new OpenLayers.Feature.Vector(k, j))); + f = new OpenLayers.Geometry.LineString(f); + g.push(new OpenLayers.Feature.Vector(f)) + } + for (h = 0; h < e.length; ++h) + if (l = e[h].y, !(-90 > l || 90 < l)) { + f = []; + d = i[0].x; + m = (i[i.length - 1].x - d) / this.numPoints; + j = d; + k = null; + for (d = 0; d <= this.numPoints; ++d) n = new OpenLayers.Geometry.Point(j, l), n.transform(b, c), f.push(n), j += m, n.x < a.right && (k = n); + this.labelled && (k = new OpenLayers.Geometry.Point(a.right, k.y), j = { + value: l, + label: this.labelled ? OpenLayers.Util.getFormattedLonLat(l, "lat", this.labelFormat) : "", + labelAlign: "rb", + xOffset: -2, + yOffset: 2 + }, this.gratLayer.addFeatures(new OpenLayers.Feature.Vector(k, j))); + f = new OpenLayers.Geometry.LineString(f); + g.push(new OpenLayers.Feature.Vector(f)) + } + this.gratLayer.addFeatures(g) + } + }, + CLASS_NAME: "OpenLayers.Control.Graticule" +}); +OpenLayers.Layer.UTFGrid = OpenLayers.Class(OpenLayers.Layer.XYZ, { + isBaseLayer: !1, + projection: new OpenLayers.Projection("EPSG:900913"), + useJSONP: !1, + tileClass: OpenLayers.Tile.UTFGrid, + initialize: function(a) { + OpenLayers.Layer.Grid.prototype.initialize.apply(this, [a.name, a.url, {}, a]); + this.tileOptions = OpenLayers.Util.extend({ + utfgridResolution: this.utfgridResolution + }, this.tileOptions) + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.UTFGrid(this.getOptions())); + return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [a]) + }, + getFeatureInfo: function(a) { + var b = null, + a = this.getTileData(a); + a.tile && (b = a.tile.getFeatureInfo(a.i, a.j)); + return b + }, + getFeatureId: function(a) { + var b = null, + a = this.getTileData(a); + a.tile && (b = a.tile.getFeatureId(a.i, a.j)); + return b + }, + CLASS_NAME: "OpenLayers.Layer.UTFGrid" +}); +OpenLayers.Layer.ArcGISCache = OpenLayers.Class(OpenLayers.Layer.XYZ, { + url: null, + tileOrigin: null, + tileSize: new OpenLayers.Size(256, 256), + useArcGISServer: !0, + type: "png", + useScales: !1, + overrideDPI: !1, + initialize: function(a, b, c) { + OpenLayers.Layer.XYZ.prototype.initialize.apply(this, arguments); + this.resolutions && (this.serverResolutions = this.resolutions, this.maxExtent = this.getMaxExtentForResolution(this.resolutions[0])); + if (this.layerInfo) { + var d = this.layerInfo, + e = new OpenLayers.Bounds(d.fullExtent.xmin, d.fullExtent.ymin, + d.fullExtent.xmax, d.fullExtent.ymax); + this.projection = "EPSG:" + d.spatialReference.wkid; + this.sphericalMercator = 102100 == d.spatialReference.wkid; + this.units = "esriFeet" == d.units ? "ft" : "m"; + if (d.tileInfo) { + this.tileSize = new OpenLayers.Size(d.tileInfo.width || d.tileInfo.cols, d.tileInfo.height || d.tileInfo.rows); + this.tileOrigin = new OpenLayers.LonLat(d.tileInfo.origin.x, d.tileInfo.origin.y); + var f = new OpenLayers.Geometry.Point(e.left, e.top), + e = new OpenLayers.Geometry.Point(e.right, e.bottom); + this.useScales ? this.scales = [] : this.resolutions = []; + this.lods = []; + for (var g in d.tileInfo.lods) + if (d.tileInfo.lods.hasOwnProperty(g)) { + var h = d.tileInfo.lods[g]; + this.useScales ? this.scales.push(h.scale) : this.resolutions.push(h.resolution); + var i = this.getContainingTileCoords(f, h.resolution); + h.startTileCol = i.x; + h.startTileRow = i.y; + i = this.getContainingTileCoords(e, h.resolution); + h.endTileCol = i.x; + h.endTileRow = i.y; + this.lods.push(h) + } + this.maxExtent = this.calculateMaxExtentWithLOD(this.lods[0]); + this.serverResolutions = this.resolutions; + this.overrideDPI && + d.tileInfo.dpi && (OpenLayers.DOTS_PER_INCH = d.tileInfo.dpi) + } + } + }, + getContainingTileCoords: function(a, b) { + return new OpenLayers.Pixel(Math.max(Math.floor((a.x - this.tileOrigin.lon) / (this.tileSize.w * b)), 0), Math.max(Math.floor((this.tileOrigin.lat - a.y) / (this.tileSize.h * b)), 0)) + }, + calculateMaxExtentWithLOD: function(a) { + var b = this.tileOrigin.lon + a.startTileCol * this.tileSize.w * a.resolution, + c = this.tileOrigin.lat - a.startTileRow * this.tileSize.h * a.resolution; + return new OpenLayers.Bounds(b, c - (a.endTileRow - a.startTileRow + + 1) * this.tileSize.h * a.resolution, b + (a.endTileCol - a.startTileCol + 1) * this.tileSize.w * a.resolution, c) + }, + calculateMaxExtentWithExtent: function(a, b) { + var c = new OpenLayers.Geometry.Point(a.left, a.top), + d = new OpenLayers.Geometry.Point(a.right, a.bottom), + c = this.getContainingTileCoords(c, b), + d = this.getContainingTileCoords(d, b); + return this.calculateMaxExtentWithLOD({ + resolution: b, + startTileCol: c.x, + startTileRow: c.y, + endTileCol: d.x, + endTileRow: d.y + }) + }, + getUpperLeftTileCoord: function(a) { + return this.getContainingTileCoords(new OpenLayers.Geometry.Point(this.maxExtent.left, + this.maxExtent.top), a) + }, + getLowerRightTileCoord: function(a) { + return this.getContainingTileCoords(new OpenLayers.Geometry.Point(this.maxExtent.right, this.maxExtent.bottom), a) + }, + getMaxExtentForResolution: function(a) { + var b = this.getUpperLeftTileCoord(a), + c = this.getLowerRightTileCoord(a), + d = this.tileOrigin.lon + b.x * this.tileSize.w * a, + e = this.tileOrigin.lat - b.y * this.tileSize.h * a; + return new OpenLayers.Bounds(d, e - (c.y - b.y + 1) * this.tileSize.h * a, d + (c.x - b.x + 1) * this.tileSize.w * a, e) + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.ArcGISCache(this.name, + this.url, this.options)); + return OpenLayers.Layer.XYZ.prototype.clone.apply(this, [a]) + }, + getMaxExtent: function() { + return this.maxExtent = this.getMaxExtentForResolution(this.map.getResolution()) + }, + getTileOrigin: function() { + var a = this.getMaxExtent(); + return new OpenLayers.LonLat(a.left, a.bottom) + }, + getURL: function(a) { + var b = this.getResolution(), + c = this.tileOrigin.lon + b * this.tileSize.w / 2, + d = this.tileOrigin.lat - b * this.tileSize.h / 2, + a = a.getCenterLonLat(), + c = Math.round(Math.abs((a.lon - c) / (b * this.tileSize.w))), + d = Math.round(Math.abs((d - + a.lat) / (b * this.tileSize.h))), + a = this.map.getZoom(); + if (this.lods) { + if (b = this.lods[this.map.getZoom()], c < b.startTileCol || c > b.endTileCol || d < b.startTileRow || d > b.endTileRow) return null + } else { + var e = this.getUpperLeftTileCoord(b), + b = this.getLowerRightTileCoord(b); + if (c < e.x || c >= b.x || d < e.y || d >= b.y) return null + } + b = this.url; + e = "" + c + d + a; + OpenLayers.Util.isArray(b) && (b = this.selectUrl(e, b)); + this.useArcGISServer ? b += "/tile/${z}/${y}/${x}" : (c = "C" + this.zeroPad(c, 8, 16), d = "R" + this.zeroPad(d, 8, 16), a = "L" + this.zeroPad(a, 2, 16), b = + b + "/${z}/${y}/${x}." + this.type); + b = OpenLayers.String.format(b, { + x: c, + y: d, + z: a + }); + return OpenLayers.Util.urlAppend(b, OpenLayers.Util.getParameterString(this.params)) + }, + zeroPad: function(a, b, c) { + for (a = a.toString(c || 10); a.length < b;) a = "0" + a; + return a + }, + CLASS_NAME: "OpenLayers.Layer.ArcGISCache" +}); +OpenLayers.Control.WMSGetFeatureInfo = OpenLayers.Class(OpenLayers.Control, { + hover: !1, + drillDown: !1, + maxFeatures: 10, + clickCallback: "click", + output: "features", + layers: null, + queryVisible: !1, + url: null, + layerUrls: null, + infoFormat: "text/html", + vendorParams: {}, + format: null, + formatOptions: null, + handlerOptions: null, + handler: null, + hoverRequest: null, + initialize: function(a) { + a = a || {}; + a.handlerOptions = a.handlerOptions || {}; + OpenLayers.Control.prototype.initialize.apply(this, [a]); + this.format || (this.format = new OpenLayers.Format.WMSGetFeatureInfo(a.formatOptions)); + !0 === this.drillDown && (this.hover = !1); + this.hover ? this.handler = new OpenLayers.Handler.Hover(this, { + move: this.cancelHover, + pause: this.getInfoForHover + }, OpenLayers.Util.extend(this.handlerOptions.hover || {}, { + delay: 250 + })) : (a = {}, a[this.clickCallback] = this.getInfoForClick, this.handler = new OpenLayers.Handler.Click(this, a, this.handlerOptions.click || {})) + }, + getInfoForClick: function(a) { + this.events.triggerEvent("beforegetfeatureinfo", { + xy: a.xy + }); + OpenLayers.Element.addClass(this.map.viewPortDiv, "olCursorWait"); + this.request(a.xy, {}) + }, + getInfoForHover: function(a) { + this.events.triggerEvent("beforegetfeatureinfo", { + xy: a.xy + }); + this.request(a.xy, { + hover: !0 + }) + }, + cancelHover: function() { + this.hoverRequest && (this.hoverRequest.abort(), this.hoverRequest = null) + }, + findLayers: function() { + for (var a = this.layers || this.map.layers, b = [], c, d, e = a.length - 1; 0 <= e; --e) + if (c = a[e], c instanceof OpenLayers.Layer.WMS && (!this.queryVisible || c.getVisibility())) d = OpenLayers.Util.isArray(c.url) ? c.url[0] : c.url, !1 === this.drillDown && !this.url && (this.url = d), (!0 === this.drillDown || + this.urlMatches(d)) && b.push(c); + return b + }, + urlMatches: function(a) { + var b = OpenLayers.Util.isEquivalentUrl(this.url, a); + if (!b && this.layerUrls) + for (var c = 0, d = this.layerUrls.length; c < d; ++c) + if (OpenLayers.Util.isEquivalentUrl(this.layerUrls[c], a)) { + b = !0; + break + } + return b + }, + buildWMSOptions: function(a, b, c, d) { + for (var e = [], f = [], g = 0, h = b.length; g < h; g++) null != b[g].params.LAYERS && (e = e.concat(b[g].params.LAYERS), f = f.concat(this.getStyleNames(b[g]))); + b = b[0]; + g = this.map.getProjection(); + (h = b.projection) && h.equals(this.map.getProjectionObject()) && + (g = h.getCode()); + d = OpenLayers.Util.extend({ + service: "WMS", + version: b.params.VERSION, + request: "GetFeatureInfo", + exceptions: b.params.EXCEPTIONS, + bbox: this.map.getExtent().toBBOX(null, b.reverseAxisOrder()), + feature_count: this.maxFeatures, + height: this.map.getSize().h, + width: this.map.getSize().w, + format: d, + info_format: b.params.INFO_FORMAT || this.infoFormat + }, 1.3 <= parseFloat(b.params.VERSION) ? { + crs: g, + i: parseInt(c.x), + j: parseInt(c.y) + } : { + srs: g, + x: parseInt(c.x), + y: parseInt(c.y) + }); + 0 != e.length && (d = OpenLayers.Util.extend({ + layers: e, + query_layers: e, + styles: f + }, d)); + OpenLayers.Util.applyDefaults(d, this.vendorParams); + return { + url: a, + params: OpenLayers.Util.upperCaseObject(d), + callback: function(b) { + this.handleResponse(c, b, a) + }, + scope: this + } + }, + getStyleNames: function(a) { + return a.params.STYLES ? a.params.STYLES : OpenLayers.Util.isArray(a.params.LAYERS) ? Array(a.params.LAYERS.length) : a.params.LAYERS.replace(/[^,]/g, "") + }, + request: function(a, b) { + var c = this.findLayers(); + if (0 == c.length) this.events.triggerEvent("nogetfeatureinfo"), OpenLayers.Element.removeClass(this.map.viewPortDiv, + "olCursorWait"); + else if (b = b || {}, !1 === this.drillDown) { + var c = this.buildWMSOptions(this.url, c, a, c[0].params.FORMAT), + d = OpenLayers.Request.GET(c); + !0 === b.hover && (this.hoverRequest = d) + } else { + this._numRequests = this._requestCount = 0; + this.features = []; + for (var d = {}, e, f = 0, g = c.length; f < g; f++) { + var h = c[f]; + e = OpenLayers.Util.isArray(h.url) ? h.url[0] : h.url; + e in d ? d[e].push(h) : (this._numRequests++, d[e] = [h]) + } + for (e in d) c = d[e], c = this.buildWMSOptions(e, c, a, c[0].params.FORMAT), OpenLayers.Request.GET(c) + } + }, + triggerGetFeatureInfo: function(a, + b, c) { + this.events.triggerEvent("getfeatureinfo", { + text: a.responseText, + features: c, + request: a, + xy: b + }); + OpenLayers.Element.removeClass(this.map.viewPortDiv, "olCursorWait") + }, + handleResponse: function(a, b, c) { + var d = b.responseXML; + if (!d || !d.documentElement) d = b.responseText; + d = this.format.read(d); + !1 === this.drillDown ? this.triggerGetFeatureInfo(b, a, d) : (this._requestCount++, this._features = "object" === this.output ? (this._features || []).concat({ + url: c, + features: d + }) : (this._features || []).concat(d), this._requestCount === this._numRequests && + (this.triggerGetFeatureInfo(b, a, this._features.concat()), delete this._features, delete this._requestCount, delete this._numRequests)) + }, + CLASS_NAME: "OpenLayers.Control.WMSGetFeatureInfo" +}); +OpenLayers.Format.WMSCapabilities.v1_3_0 = OpenLayers.Class(OpenLayers.Format.WMSCapabilities.v1_3, { + version: "1.3.0", + CLASS_NAME: "OpenLayers.Format.WMSCapabilities.v1_3_0" +}); +OpenLayers.Format.SOSGetFeatureOfInterest = OpenLayers.Class(OpenLayers.Format.XML, { + VERSION: "1.0.0", + namespaces: { + sos: "http://www.opengis.net/sos/1.0", + gml: "http://www.opengis.net/gml", + sa: "http://www.opengis.net/sampling/1.0", + xsi: "http://www.w3.org/2001/XMLSchema-instance" + }, + schemaLocation: "http://www.opengis.net/sos/1.0 http://schemas.opengis.net/sos/1.0.0/sosAll.xsd", + defaultPrefix: "sos", + regExes: { + trimSpace: /^\s*|\s*$/g, + removeSpace: /\s*/g, + splitSpace: /\s+/, + trimComma: /\s*,\s*/g + }, + read: function(a) { + "string" == + typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + a && 9 == a.nodeType && (a = a.documentElement); + var b = { + features: [] + }; + this.readNode(a, b); + for (var a = [], c = 0, d = b.features.length; c < d; c++) { + var e = b.features[c]; + this.internalProjection && (this.externalProjection && e.components[0]) && e.components[0].transform(this.externalProjection, this.internalProjection); + e = new OpenLayers.Feature.Vector(e.components[0], e.attributes); + a.push(e) + } + return a + }, + readers: { + sa: { + SamplingPoint: function(a, b) { + if (!b.attributes) { + var c = { + attributes: {} + }; + b.features.push(c); + b = c + } + b.attributes.id = this.getAttributeNS(a, this.namespaces.gml, "id"); + this.readChildNodes(a, b) + }, + position: function(a, b) { + this.readChildNodes(a, b) + } + }, + gml: OpenLayers.Util.applyDefaults({ + FeatureCollection: function(a, b) { + this.readChildNodes(a, b) + }, + featureMember: function(a, b) { + var c = { + attributes: {} + }; + b.features.push(c); + this.readChildNodes(a, c) + }, + name: function(a, b) { + b.attributes.name = this.getChildValue(a) + }, + pos: function(a, b) { + this.externalProjection || (this.externalProjection = new OpenLayers.Projection(a.getAttribute("srsName"))); + OpenLayers.Format.GML.v3.prototype.readers.gml.pos.apply(this, [a, b]) + } + }, OpenLayers.Format.GML.v3.prototype.readers.gml) + }, + writers: { + sos: { + GetFeatureOfInterest: function(a) { + for (var b = this.createElementNSPlus("GetFeatureOfInterest", { + attributes: { + version: this.VERSION, + service: "SOS", + "xsi:schemaLocation": this.schemaLocation + } + }), c = 0, d = a.fois.length; c < d; c++) this.writeNode("FeatureOfInterestId", { + foi: a.fois[c] + }, b); + return b + }, + FeatureOfInterestId: function(a) { + return this.createElementNSPlus("FeatureOfInterestId", { + value: a.foi + }) + } + } + }, + CLASS_NAME: "OpenLayers.Format.SOSGetFeatureOfInterest" +}); +OpenLayers.Format.SOSGetObservation = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + ows: "http://www.opengis.net/ows", + gml: "http://www.opengis.net/gml", + sos: "http://www.opengis.net/sos/1.0", + ogc: "http://www.opengis.net/ogc", + om: "http://www.opengis.net/om/1.0", + sa: "http://www.opengis.net/sampling/1.0", + xlink: "http://www.w3.org/1999/xlink", + xsi: "http://www.w3.org/2001/XMLSchema-instance" + }, + regExes: { + trimSpace: /^\s*|\s*$/g, + removeSpace: /\s*/g, + splitSpace: /\s+/, + trimComma: /\s*,\s*/g + }, + VERSION: "1.0.0", + schemaLocation: "http://www.opengis.net/sos/1.0 http://schemas.opengis.net/sos/1.0.0/sosGetObservation.xsd", + defaultPrefix: "sos", + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + a && 9 == a.nodeType && (a = a.documentElement); + var b = { + measurements: [], + observations: [] + }; + this.readNode(a, b); + return b + }, + write: function(a) { + a = this.writeNode("sos:GetObservation", a); + a.setAttribute("xmlns:om", this.namespaces.om); + a.setAttribute("xmlns:ogc", this.namespaces.ogc); + this.setAttributeNS(a, this.namespaces.xsi, "xsi:schemaLocation", this.schemaLocation); + return OpenLayers.Format.XML.prototype.write.apply(this, [a]) + }, + readers: { + om: { + ObservationCollection: function(a, b) { + b.id = this.getAttributeNS(a, this.namespaces.gml, "id"); + this.readChildNodes(a, b) + }, + member: function(a, b) { + this.readChildNodes(a, b) + }, + Measurement: function(a, b) { + var c = {}; + b.measurements.push(c); + this.readChildNodes(a, c) + }, + Observation: function(a, b) { + var c = {}; + b.observations.push(c); + this.readChildNodes(a, c) + }, + samplingTime: function(a, b) { + var c = {}; + b.samplingTime = c; + this.readChildNodes(a, c) + }, + observedProperty: function(a, b) { + b.observedProperty = this.getAttributeNS(a, this.namespaces.xlink, + "href"); + this.readChildNodes(a, b) + }, + procedure: function(a, b) { + b.procedure = this.getAttributeNS(a, this.namespaces.xlink, "href"); + this.readChildNodes(a, b) + }, + featureOfInterest: function(a, b) { + var c = { + features: [] + }; + b.fois = []; + b.fois.push(c); + this.readChildNodes(a, c); + for (var d = [], e = 0, f = c.features.length; e < f; e++) { + var g = c.features[e]; + d.push(new OpenLayers.Feature.Vector(g.components[0], g.attributes)) + } + c.features = d + }, + result: function(a, b) { + var c = {}; + b.result = c; + "" !== this.getChildValue(a) ? (c.value = this.getChildValue(a), c.uom = + a.getAttribute("uom")) : this.readChildNodes(a, c) + } + }, + sa: OpenLayers.Format.SOSGetFeatureOfInterest.prototype.readers.sa, + gml: OpenLayers.Util.applyDefaults({ + TimeInstant: function(a, b) { + var c = {}; + b.timeInstant = c; + this.readChildNodes(a, c) + }, + timePosition: function(a, b) { + b.timePosition = this.getChildValue(a) + } + }, OpenLayers.Format.SOSGetFeatureOfInterest.prototype.readers.gml) + }, + writers: { + sos: { + GetObservation: function(a) { + var b = this.createElementNSPlus("GetObservation", { + attributes: { + version: this.VERSION, + service: "SOS" + } + }); + this.writeNode("offering", + a, b); + a.eventTime && this.writeNode("eventTime", a, b); + for (var c in a.procedures) this.writeNode("procedure", a.procedures[c], b); + for (var d in a.observedProperties) this.writeNode("observedProperty", a.observedProperties[d], b); + a.foi && this.writeNode("featureOfInterest", a.foi, b); + this.writeNode("responseFormat", a, b); + a.resultModel && this.writeNode("resultModel", a, b); + a.responseMode && this.writeNode("responseMode", a, b); + return b + }, + featureOfInterest: function(a) { + var b = this.createElementNSPlus("featureOfInterest"); + this.writeNode("ObjectID", + a.objectId, b); + return b + }, + ObjectID: function(a) { + return this.createElementNSPlus("ObjectID", { + value: a + }) + }, + responseFormat: function(a) { + return this.createElementNSPlus("responseFormat", { + value: a.responseFormat + }) + }, + procedure: function(a) { + return this.createElementNSPlus("procedure", { + value: a + }) + }, + offering: function(a) { + return this.createElementNSPlus("offering", { + value: a.offering + }) + }, + observedProperty: function(a) { + return this.createElementNSPlus("observedProperty", { + value: a + }) + }, + eventTime: function(a) { + var b = this.createElementNSPlus("eventTime"); + "latest" === a.eventTime && this.writeNode("ogc:TM_Equals", a, b); + return b + }, + resultModel: function(a) { + return this.createElementNSPlus("resultModel", { + value: a.resultModel + }) + }, + responseMode: function(a) { + return this.createElementNSPlus("responseMode", { + value: a.responseMode + }) + } + }, + ogc: { + TM_Equals: function(a) { + var b = this.createElementNSPlus("ogc:TM_Equals"); + this.writeNode("ogc:PropertyName", { + property: "urn:ogc:data:time:iso8601" + }, b); + "latest" === a.eventTime && this.writeNode("gml:TimeInstant", { + value: "latest" + }, b); + return b + }, + PropertyName: function(a) { + return this.createElementNSPlus("ogc:PropertyName", { + value: a.property + }) + } + }, + gml: { + TimeInstant: function(a) { + var b = this.createElementNSPlus("gml:TimeInstant"); + this.writeNode("gml:timePosition", a, b); + return b + }, + timePosition: function(a) { + return this.createElementNSPlus("gml:timePosition", { + value: a.value + }) + } + } + }, + CLASS_NAME: "OpenLayers.Format.SOSGetObservation" +}); +OpenLayers.Control.UTFGrid = OpenLayers.Class(OpenLayers.Control, { + autoActivate: !0, + layers: null, + defaultHandlerOptions: { + delay: 300, + pixelTolerance: 4, + stopMove: !1, + single: !0, + "double": !1, + stopSingle: !1, + stopDouble: !1 + }, + handlerMode: "click", + setHandler: function(a) { + this.handlerMode = a; + this.resetHandler() + }, + resetHandler: function() { + this.handler && (this.handler.deactivate(), this.handler.destroy(), this.handler = null); + "hover" == this.handlerMode ? this.handler = new OpenLayers.Handler.Hover(this, { + pause: this.handleEvent, + move: this.reset + }, + this.handlerOptions) : "click" == this.handlerMode ? this.handler = new OpenLayers.Handler.Click(this, { + click: this.handleEvent + }, this.handlerOptions) : "move" == this.handlerMode && (this.handler = new OpenLayers.Handler.Hover(this, { + pause: this.handleEvent, + move: this.handleEvent + }, this.handlerOptions)); + return this.handler ? !0 : !1 + }, + initialize: function(a) { + a = a || {}; + a.handlerOptions = a.handlerOptions || this.defaultHandlerOptions; + OpenLayers.Control.prototype.initialize.apply(this, [a]); + this.resetHandler() + }, + handleEvent: function(a) { + if (null == + a) this.reset(); + else { + var b = this.map.getLonLatFromPixel(a.xy); + if (b) { + var c = this.findLayers(); + if (0 < c.length) { + for (var d = {}, e, f, g = 0, h = c.length; g < h; g++) e = c[g], f = OpenLayers.Util.indexOf(this.map.layers, e), d[f] = e.getFeatureInfo(b); + this.callback(d, b, a.xy) + } + } + } + }, + callback: function() {}, + reset: function() { + this.callback(null) + }, + findLayers: function() { + for (var a = this.layers || this.map.layers, b = [], c, d = a.length - 1; 0 <= d; --d) c = a[d], c instanceof OpenLayers.Layer.UTFGrid && b.push(c); + return b + }, + CLASS_NAME: "OpenLayers.Control.UTFGrid" +}); +OpenLayers.Format.CQL = function() { + function a(a) { + function b() { + var a = e.pop(); + switch (a.type) { + case "LOGICAL": + var c = b(), + g = b(); + return new OpenLayers.Filter.Logical({ + filters: [g, c], + type: f[a.text.toUpperCase()] + }); + case "NOT": + return c = b(), new OpenLayers.Filter.Logical({ + filters: [c], + type: OpenLayers.Filter.Logical.NOT + }); + case "BETWEEN": + return e.pop(), g = b(), a = b(), c = b(), new OpenLayers.Filter.Comparison({ + property: c, + lowerBoundary: a, + upperBoundary: g, + type: OpenLayers.Filter.Comparison.BETWEEN + }); + case "COMPARISON": + return g = + b(), c = b(), new OpenLayers.Filter.Comparison({ + property: c, + value: g, + type: d[a.text.toUpperCase()] + }); + case "VALUE": + return /^'.*'$/.test(a.text) ? a.text.substr(1, a.text.length - 2) : Number(a.text); + case "SPATIAL": + switch (a.text.toUpperCase()) { + case "BBOX": + var c = b(), + a = b(), + g = b(), + h = b(), + i = b(); + return new OpenLayers.Filter.Spatial({ + type: OpenLayers.Filter.Spatial.BBOX, + property: i, + value: OpenLayers.Bounds.fromArray([h, g, a, c]) + }); + case "INTERSECTS": + return g = b(), c = b(), new OpenLayers.Filter.Spatial({ + type: OpenLayers.Filter.Spatial.INTERSECTS, + property: c, + value: g + }); + case "WITHIN": + return g = b(), c = b(), new OpenLayers.Filter.Spatial({ + type: OpenLayers.Filter.Spatial.WITHIN, + property: c, + value: g + }); + case "CONTAINS": + return g = b(), c = b(), new OpenLayers.Filter.Spatial({ + type: OpenLayers.Filter.Spatial.CONTAINS, + property: c, + value: g + }); + case "DWITHIN": + return a = b(), g = b(), c = b(), new OpenLayers.Filter.Spatial({ + type: OpenLayers.Filter.Spatial.DWITHIN, + value: g, + property: c, + distance: Number(a) + }) + } + case "GEOMETRY": + return OpenLayers.Geometry.fromWKT(a.text); + default: + return a.text + } + } + for (var c = [], e = []; a.length;) { + var g = a.shift(); + switch (g.type) { + case "PROPERTY": + case "GEOMETRY": + case "VALUE": + e.push(g); + break; + case "COMPARISON": + case "BETWEEN": + case "LOGICAL": + for (var i = h[g.type]; 0 < c.length && h[c[c.length - 1].type] <= i;) e.push(c.pop()); + c.push(g); + break; + case "SPATIAL": + case "NOT": + case "LPAREN": + c.push(g); + break; + case "RPAREN": + for (; 0 < c.length && "LPAREN" != c[c.length - 1].type;) e.push(c.pop()); + c.pop(); + 0 < c.length && "SPATIAL" == c[c.length - 1].type && e.push(c.pop()); + case "COMMA": + case "END": + break; + default: + throw Error("Unknown token type " + + g.type); + } + } + for (; 0 < c.length;) e.push(c.pop()); + a = b(); + if (0 < e.length) { + a = "Remaining tokens after building AST: \n"; + for (c = e.length - 1; 0 <= c; c--) a += e[c].type + ": " + e[c].text + "\n"; + throw Error(a); + } + return a + } + var b = { + PROPERTY: /^[_a-zA-Z]\w*/, + COMPARISON: /^(=|<>|<=|<|>=|>|LIKE)/i, + COMMA: /^,/, + LOGICAL: /^(AND|OR)/i, + VALUE: /^('\w+'|\d+(\.\d*)?|\.\d+)/, + LPAREN: /^\(/, + RPAREN: /^\)/, + SPATIAL: /^(BBOX|INTERSECTS|DWITHIN|WITHIN|CONTAINS)/i, + NOT: /^NOT/i, + BETWEEN: /^BETWEEN/i, + GEOMETRY: function(a) { + var b = /^(POINT|LINESTRING|POLYGON|MULTIPOINT|MULTILINESTRING|MULTIPOLYGON|GEOMETRYCOLLECTION)/.exec(a); + if (b) { + var c = a.length, + b = a.indexOf("(", b[0].length); + if (-1 < b) + for (var d = 1; b < c && 0 < d;) switch (b++, a.charAt(b)) { + case "(": + d++; + break; + case ")": + d-- + } + return [a.substr(0, b + 1)] + } + }, + END: /^$/ + }, + c = { + LPAREN: ["GEOMETRY", "SPATIAL", "PROPERTY", "VALUE", "LPAREN"], + RPAREN: ["NOT", "LOGICAL", "END", "RPAREN"], + PROPERTY: ["COMPARISON", "BETWEEN", "COMMA"], + BETWEEN: ["VALUE"], + COMPARISON: ["VALUE"], + COMMA: ["GEOMETRY", "VALUE", "PROPERTY"], + VALUE: ["LOGICAL", "COMMA", "RPAREN", "END"], + SPATIAL: ["LPAREN"], + LOGICAL: ["NOT", "VALUE", "SPATIAL", "PROPERTY", "LPAREN"], + NOT: ["PROPERTY", "LPAREN"], + GEOMETRY: ["COMMA", "RPAREN"] + }, + d = { + "=": OpenLayers.Filter.Comparison.EQUAL_TO, + "<>": OpenLayers.Filter.Comparison.NOT_EQUAL_TO, + "<": OpenLayers.Filter.Comparison.LESS_THAN, + "<=": OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO, + ">": OpenLayers.Filter.Comparison.GREATER_THAN, + ">=": OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO, + LIKE: OpenLayers.Filter.Comparison.LIKE, + BETWEEN: OpenLayers.Filter.Comparison.BETWEEN + }, + e = {}, + f = { + AND: OpenLayers.Filter.Logical.AND, + OR: OpenLayers.Filter.Logical.OR + }, + g = {}, + h = { + RPAREN: 3, + LOGICAL: 2, + COMPARISON: 1 + }, + i; + for (i in d) d.hasOwnProperty(i) && (e[d[i]] = i); + for (i in f) f.hasOwnProperty(i) && (g[f[i]] = i); + return OpenLayers.Class(OpenLayers.Format, { + read: function(d) { + var e = d, + d = [], + f, g = ["NOT", "GEOMETRY", "SPATIAL", "PROPERTY", "LPAREN"]; + do { + a: { + f = g; + for (var h = void 0, g = void 0, i = f.length, h = 0; h < i; h++) { + var g = f[h], + p = b[g] instanceof RegExp ? b[g].exec(e) : (0, b[g])(e); + if (p) { + f = p[0]; + e = e.substr(f.length).replace(/^\s*/, ""); + f = { + type: g, + text: f, + remainder: e + }; + break a + } + } + d = "ERROR: In parsing: [" + e + "], expected one of: "; + for (h = 0; h < i; h++) g = f[h], d += "\n " + g + ": " + b[g]; + throw Error(d); + } + e = f.remainder;g = c[f.type]; + if ("END" != f.type && !g) throw Error("No follows list for " + f.type);d.push(f) + } while ("END" != f.type); + d = a(d); + this.keepData && (this.data = d); + return d + }, + write: function(a) { + if (a instanceof OpenLayers.Geometry) return a.toString(); + switch (a.CLASS_NAME) { + case "OpenLayers.Filter.Spatial": + switch (a.type) { + case OpenLayers.Filter.Spatial.BBOX: + return "BBOX(" + a.property + "," + a.value.toBBOX() + ")"; + case OpenLayers.Filter.Spatial.DWITHIN: + return "DWITHIN(" + + a.property + ", " + this.write(a.value) + ", " + a.distance + ")"; + case OpenLayers.Filter.Spatial.WITHIN: + return "WITHIN(" + a.property + ", " + this.write(a.value) + ")"; + case OpenLayers.Filter.Spatial.INTERSECTS: + return "INTERSECTS(" + a.property + ", " + this.write(a.value) + ")"; + case OpenLayers.Filter.Spatial.CONTAINS: + return "CONTAINS(" + a.property + ", " + this.write(a.value) + ")"; + default: + throw Error("Unknown spatial filter type: " + a.type); + } + case "OpenLayers.Filter.Logical": + if (a.type == OpenLayers.Filter.Logical.NOT) return "NOT (" + this.write(a.filters[0]) + + ")"; + for (var b = "(", c = !0, d = 0; d < a.filters.length; d++) c ? c = !1 : b += ") " + g[a.type] + " (", b += this.write(a.filters[d]); + return b + ")"; + case "OpenLayers.Filter.Comparison": + return a.type == OpenLayers.Filter.Comparison.BETWEEN ? a.property + " BETWEEN " + this.write(a.lowerBoundary) + " AND " + this.write(a.upperBoundary) : a.property + " " + e[a.type] + " " + this.write(a.value); + case void 0: + if ("string" === typeof a) return "'" + a + "'"; + if ("number" === typeof a) return "" + a; + default: + throw Error("Can't encode: " + a.CLASS_NAME + " " + a); + } + }, + CLASS_NAME: "OpenLayers.Format.CQL" + }) +}(); +OpenLayers.Control.Split = OpenLayers.Class(OpenLayers.Control, { + layer: null, + source: null, + sourceOptions: null, + tolerance: null, + edge: !0, + deferDelete: !1, + mutual: !0, + targetFilter: null, + sourceFilter: null, + handler: null, + initialize: function(a) { + OpenLayers.Control.prototype.initialize.apply(this, [a]); + this.options = a || {}; + this.options.source && this.setSource(this.options.source) + }, + setSource: function(a) { + this.active ? (this.deactivate(), this.handler && (this.handler.destroy(), delete this.handler), this.source = a, this.activate()) : this.source = + a + }, + activate: function() { + var a = OpenLayers.Control.prototype.activate.call(this); + if (a) + if (this.source) { + if (this.source.events) this.source.events.on({ + sketchcomplete: this.onSketchComplete, + afterfeaturemodified: this.afterFeatureModified, + scope: this + }) + } else this.handler || (this.handler = new OpenLayers.Handler.Path(this, { + done: function(a) { + this.onSketchComplete({ + feature: new OpenLayers.Feature.Vector(a) + }) + } + }, { + layerOptions: this.sourceOptions + })), this.handler.activate(); + return a + }, + deactivate: function() { + var a = OpenLayers.Control.prototype.deactivate.call(this); + a && this.source && this.source.events && this.layer.events.un({ + sketchcomplete: this.onSketchComplete, + afterfeaturemodified: this.afterFeatureModified, + scope: this + }); + return a + }, + onSketchComplete: function(a) { + this.feature = null; + return !this.considerSplit(a.feature) + }, + afterFeatureModified: function(a) { + a.modified && "function" === typeof a.feature.geometry.split && (this.feature = a.feature, this.considerSplit(a.feature)) + }, + removeByGeometry: function(a, b) { + for (var c = 0, d = a.length; c < d; ++c) + if (a[c].geometry === b) { + a.splice(c, 1); + break + } + }, + isEligible: function(a) { + return a.geometry ? a.state !== OpenLayers.State.DELETE && "function" === typeof a.geometry.split && this.feature !== a && (!this.targetFilter || this.targetFilter.evaluate(a.attributes)) : !1 + }, + considerSplit: function(a) { + var b = !1, + c = !1; + if (!this.sourceFilter || this.sourceFilter.evaluate(a.attributes)) { + for (var d = this.layer && this.layer.features || [], e, f, g = [], h = [], i = this.layer === this.source && this.mutual, j = { + edge: this.edge, + tolerance: this.tolerance, + mutual: i + }, k = [a.geometry], l, m, n, o = 0, p = d.length; o < p; ++o) + if (l = + d[o], this.isEligible(l)) { + m = [l.geometry]; + for (var q = 0; q < k.length; ++q) { + n = k[q]; + for (var r = 0; r < m.length; ++r) + if (e = m[r], n.getBounds().intersectsBounds(e.getBounds()) && (e = n.split(e, j))) + if (f = this.events.triggerEvent("beforesplit", { + source: a, + target: l + }), !1 !== f && (i && (f = e[0], 1 < f.length && (f.unshift(q, 1), Array.prototype.splice.apply(k, f), q += f.length - 3), e = e[1]), 1 < e.length)) e.unshift(r, 1), Array.prototype.splice.apply(m, e), r += e.length - 3 + } + m && 1 < m.length && (this.geomsToFeatures(l, m), this.events.triggerEvent("split", { + original: l, + features: m + }), Array.prototype.push.apply(g, m), h.push(l), c = !0) + } + k && 1 < k.length && (this.geomsToFeatures(a, k), this.events.triggerEvent("split", { + original: a, + features: k + }), Array.prototype.push.apply(g, k), h.push(a), b = !0); + if (b || c) { + if (this.deferDelete) { + d = []; + o = 0; + for (p = h.length; o < p; ++o) c = h[o], c.state === OpenLayers.State.INSERT ? d.push(c) : (c.state = OpenLayers.State.DELETE, this.layer.drawFeature(c)); + this.layer.destroyFeatures(d, { + silent: !0 + }); + o = 0; + for (p = g.length; o < p; ++o) g[o].state = OpenLayers.State.INSERT + } else this.layer.destroyFeatures(h, { + silent: !0 + }); + this.layer.addFeatures(g, { + silent: !0 + }); + this.events.triggerEvent("aftersplit", { + source: a, + features: g + }) + } + } + return b + }, + geomsToFeatures: function(a, b) { + var c = a.clone(); + delete c.geometry; + for (var d, e = 0, f = b.length; e < f; ++e) d = c.clone(), d.geometry = b[e], d.state = OpenLayers.State.INSERT, b[e] = d + }, + destroy: function() { + this.active && this.deactivate(); + OpenLayers.Control.prototype.destroy.call(this) + }, + CLASS_NAME: "OpenLayers.Control.Split" +}); +OpenLayers.Layer.WMTS = OpenLayers.Class(OpenLayers.Layer.Grid, { + isBaseLayer: !0, + version: "1.0.0", + requestEncoding: "KVP", + url: null, + layer: null, + matrixSet: null, + style: null, + format: "image/jpeg", + tileOrigin: null, + tileFullExtent: null, + formatSuffix: null, + matrixIds: null, + dimensions: null, + params: null, + zoomOffset: 0, + serverResolutions: null, + formatSuffixMap: { + "image/png": "png", + "image/png8": "png", + "image/png24": "png", + "image/png32": "png", + png: "png", + "image/jpeg": "jpg", + "image/jpg": "jpg", + jpeg: "jpg", + jpg: "jpg" + }, + matrix: null, + initialize: function(a) { + var b = { + url: !0, + layer: !0, + style: !0, + matrixSet: !0 + }, + c; + for (c in b) + if (!(c in a)) throw Error("Missing property '" + c + "' in layer configuration."); + a.params = OpenLayers.Util.upperCaseObject(a.params); + OpenLayers.Layer.Grid.prototype.initialize.apply(this, [a.name, a.url, a.params, a]); + this.formatSuffix || (this.formatSuffix = this.formatSuffixMap[this.format] || this.format.split("/").pop()); + if (this.matrixIds && (a = this.matrixIds.length) && "string" === typeof this.matrixIds[0]) { + b = this.matrixIds; + this.matrixIds = Array(a); + for (c = 0; c < a; ++c) this.matrixIds[c] = { + identifier: b[c] + } + } + }, + setMap: function() { + OpenLayers.Layer.Grid.prototype.setMap.apply(this, arguments); + this.updateMatrixProperties() + }, + updateMatrixProperties: function() { + if (this.matrix = this.getMatrix()) + if (this.matrix.topLeftCorner && (this.tileOrigin = this.matrix.topLeftCorner), this.matrix.tileWidth && this.matrix.tileHeight && (this.tileSize = new OpenLayers.Size(this.matrix.tileWidth, this.matrix.tileHeight)), this.tileOrigin || (this.tileOrigin = new OpenLayers.LonLat(this.maxExtent.left, this.maxExtent.top)), !this.tileFullExtent) this.tileFullExtent = + this.maxExtent + }, + moveTo: function(a, b, c) { + (b || !this.matrix) && this.updateMatrixProperties(); + return OpenLayers.Layer.Grid.prototype.moveTo.apply(this, arguments) + }, + clone: function(a) { + null == a && (a = new OpenLayers.Layer.WMTS(this.options)); + return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [a]) + }, + getIdentifier: function() { + return this.getServerZoom() + }, + getMatrix: function() { + var a; + if (!this.matrixIds || 0 === this.matrixIds.length) a = { + identifier: this.getIdentifier() + }; + else if ("scaleDenominator" in this.matrixIds[0]) + for (var b = + OpenLayers.METERS_PER_INCH * OpenLayers.INCHES_PER_UNIT[this.units] * this.getServerResolution() / 2.8E-4, c = Number.POSITIVE_INFINITY, d, e = 0, f = this.matrixIds.length; e < f; ++e) d = Math.abs(1 - this.matrixIds[e].scaleDenominator / b), d < c && (c = d, a = this.matrixIds[e]); + else a = this.matrixIds[this.getIdentifier()]; + return a + }, + getTileInfo: function(a) { + var b = this.getServerResolution(), + c = (a.lon - this.tileOrigin.lon) / (b * this.tileSize.w), + a = (this.tileOrigin.lat - a.lat) / (b * this.tileSize.h), + b = Math.floor(c), + d = Math.floor(a); + return { + col: b, + row: d, + i: Math.floor((c - b) * this.tileSize.w), + j: Math.floor((a - d) * this.tileSize.h) + } + }, + getURL: function(a) { + var a = this.adjustBounds(a), + b = ""; + if (!this.tileFullExtent || this.tileFullExtent.intersectsBounds(a)) { + var c = this.getTileInfo(a.getCenterLonLat()), + a = this.dimensions; + if ("REST" === this.requestEncoding.toUpperCase()) + if (b = this.params, "string" === typeof this.url && -1 !== this.url.indexOf("{")) { + var d = this.url.replace(/\{/g, "${"), + c = { + style: this.style, + Style: this.style, + TileMatrixSet: this.matrixSet, + TileMatrix: this.matrix.identifier, + TileRow: c.row, + TileCol: c.col + }; + if (a) { + var e, f; + for (f = a.length - 1; 0 <= f; --f) e = a[f], c[e] = b[e.toUpperCase()] + } + b = OpenLayers.String.format(d, c) + } else { + d = this.version + "/" + this.layer + "/" + this.style + "/"; + if (a) + for (f = 0; f < a.length; f++) b[a[f]] && (d = d + b[a[f]] + "/"); + d = d + this.matrixSet + "/" + this.matrix.identifier + "/" + c.row + "/" + c.col + "." + this.formatSuffix; + b = OpenLayers.Util.isArray(this.url) ? this.selectUrl(d, this.url) : this.url; + b.match(/\/$/) || (b += "/"); + b += d + } else "KVP" === this.requestEncoding.toUpperCase() && (b = { + SERVICE: "WMTS", + REQUEST: "GetTile", + VERSION: this.version, + LAYER: this.layer, + STYLE: this.style, + TILEMATRIXSET: this.matrixSet, + TILEMATRIX: this.matrix.identifier, + TILEROW: c.row, + TILECOL: c.col, + FORMAT: this.format + }, b = OpenLayers.Layer.Grid.prototype.getFullRequestString.apply(this, [b])) + } + return b + }, + mergeNewParams: function(a) { + if ("KVP" === this.requestEncoding.toUpperCase()) return OpenLayers.Layer.Grid.prototype.mergeNewParams.apply(this, [OpenLayers.Util.upperCaseObject(a)]) + }, + CLASS_NAME: "OpenLayers.Layer.WMTS" +}); +OpenLayers.Protocol.SOS.v1_0_0 = OpenLayers.Class(OpenLayers.Protocol, { + fois: null, + formatOptions: null, + initialize: function(a) { + OpenLayers.Protocol.prototype.initialize.apply(this, [a]); + a.format || (this.format = new OpenLayers.Format.SOSGetFeatureOfInterest(this.formatOptions)) + }, + destroy: function() { + this.options && !this.options.format && this.format.destroy(); + this.format = null; + OpenLayers.Protocol.prototype.destroy.apply(this) + }, + read: function(a) { + a = OpenLayers.Util.extend({}, a); + OpenLayers.Util.applyDefaults(a, this.options || {}); + var b = new OpenLayers.Protocol.Response({ + requestType: "read" + }), + c = this.format, + c = OpenLayers.Format.XML.prototype.write.apply(c, [c.writeNode("sos:GetFeatureOfInterest", { + fois: this.fois + })]); + b.priv = OpenLayers.Request.POST({ + url: a.url, + callback: this.createCallback(this.handleRead, b, a), + data: c + }); + return b + }, + handleRead: function(a, b) { + if (b.callback) { + var c = a.priv; + 200 <= c.status && 300 > c.status ? (a.features = this.parseFeatures(c), a.code = OpenLayers.Protocol.Response.SUCCESS) : a.code = OpenLayers.Protocol.Response.FAILURE; + b.callback.call(b.scope, a) + } + }, + parseFeatures: function(a) { + var b = a.responseXML; + if (!b || !b.documentElement) b = a.responseText; + return !b || 0 >= b.length ? null : this.format.read(b) + }, + CLASS_NAME: "OpenLayers.Protocol.SOS.v1_0_0" +}); +OpenLayers.Layer.KaMapCache = OpenLayers.Class(OpenLayers.Layer.KaMap, { + IMAGE_EXTENSIONS: { + jpeg: "jpg", + gif: "gif", + png: "png", + png8: "png", + png24: "png", + dithered: "png" + }, + DEFAULT_FORMAT: "jpeg", + initialize: function(a, b, c, d) { + OpenLayers.Layer.KaMap.prototype.initialize.apply(this, arguments); + this.extension = this.IMAGE_EXTENSIONS[this.params.i.toLowerCase() || this.DEFAULT_FORMAT] + }, + getURL: function(a) { + var a = this.adjustBounds(a), + b = this.map.getResolution(), + c = Math.round(1E4 * this.map.getScale()) / 1E4, + d = Math.round(a.left / b), + a = -Math.round(a.top / b), + b = Math.floor(d / this.tileSize.w / this.params.metaTileSize.w) * this.tileSize.w * this.params.metaTileSize.w, + e = Math.floor(a / this.tileSize.h / this.params.metaTileSize.h) * this.tileSize.h * this.params.metaTileSize.h, + c = ["/", this.params.map, "/", c, "/", this.params.g.replace(/\s/g, "_"), "/def/t", e, "/l", b, "/t", a, "l", d, ".", this.extension], + d = this.url; + OpenLayers.Util.isArray(d) && (d = this.selectUrl(c.join(""), d)); + return d + c.join("") + }, + CLASS_NAME: "OpenLayers.Layer.KaMapCache" +}); +OpenLayers.Protocol.WFS.v1_1_0 = OpenLayers.Class(OpenLayers.Protocol.WFS.v1, { + version: "1.1.0", + initialize: function(a) { + OpenLayers.Protocol.WFS.v1.prototype.initialize.apply(this, arguments); + this.outputFormat && !this.readFormat && ("gml2" == this.outputFormat.toLowerCase() ? this.readFormat = new OpenLayers.Format.GML.v2({ + featureType: this.featureType, + featureNS: this.featureNS, + geometryName: this.geometryName + }) : "json" == this.outputFormat.toLowerCase() && (this.readFormat = new OpenLayers.Format.GeoJSON)) + }, + CLASS_NAME: "OpenLayers.Protocol.WFS.v1_1_0" +}); +OpenLayers.Format.WMSCapabilities.v1_1_1 = OpenLayers.Class(OpenLayers.Format.WMSCapabilities.v1_1, { + version: "1.1.1", + readers: { + wms: OpenLayers.Util.applyDefaults({ + SRS: function(a, b) { + b.srs[this.getChildValue(a)] = !0 + } + }, OpenLayers.Format.WMSCapabilities.v1_1.prototype.readers.wms) + }, + CLASS_NAME: "OpenLayers.Format.WMSCapabilities.v1_1_1" +}); +OpenLayers.Format.WMSCapabilities.v1_1_1_WMSC = OpenLayers.Class(OpenLayers.Format.WMSCapabilities.v1_1_1, { + version: "1.1.1", + profile: "WMSC", + readers: { + wms: OpenLayers.Util.applyDefaults({ + VendorSpecificCapabilities: function(a, b) { + b.vendorSpecific = { + tileSets: [] + }; + this.readChildNodes(a, b.vendorSpecific) + }, + TileSet: function(a, b) { + var c = { + srs: {}, + bbox: {}, + resolutions: [] + }; + this.readChildNodes(a, c); + b.tileSets.push(c) + }, + Resolutions: function(a, b) { + for (var c = this.getChildValue(a).split(" "), d = 0, e = c.length; d < e; d++) "" != c[d] && b.resolutions.push(parseFloat(c[d])) + }, + Width: function(a, b) { + b.width = parseInt(this.getChildValue(a)) + }, + Height: function(a, b) { + b.height = parseInt(this.getChildValue(a)) + }, + Layers: function(a, b) { + b.layers = this.getChildValue(a) + }, + Styles: function(a, b) { + b.styles = this.getChildValue(a) + } + }, OpenLayers.Format.WMSCapabilities.v1_1_1.prototype.readers.wms) + }, + CLASS_NAME: "OpenLayers.Format.WMSCapabilities.v1_1_1_WMSC" +}); +OpenLayers.Format.WMSCapabilities.v1_1_0 = OpenLayers.Class(OpenLayers.Format.WMSCapabilities.v1_1, { + version: "1.1.0", + readers: { + wms: OpenLayers.Util.applyDefaults({ + SRS: function(a, b) { + for (var c = this.getChildValue(a).split(/ +/), d = 0, e = c.length; d < e; d++) b.srs[c[d]] = !0 + } + }, OpenLayers.Format.WMSCapabilities.v1_1.prototype.readers.wms) + }, + CLASS_NAME: "OpenLayers.Format.WMSCapabilities.v1_1_0" +}); +OpenLayers.Control.LayerSwitcher = OpenLayers.Class(OpenLayers.Control, { + roundedCorner: !1, + roundedCornerColor: "darkblue", + layerStates: null, + layersDiv: null, + baseLayersDiv: null, + baseLayers: null, + dataLbl: null, + dataLayersDiv: null, + dataLayers: null, + minimizeDiv: null, + maximizeDiv: null, + ascending: !0, + initialize: function(a) { + OpenLayers.Control.prototype.initialize.apply(this, arguments); + this.layerStates = []; + this.roundedCorner && OpenLayers.Console.warn("roundedCorner option is deprecated") + }, + destroy: function() { + this.clearLayersArray("base"); + this.clearLayersArray("data"); + this.map.events.un({ + buttonclick: this.onButtonClick, + addlayer: this.redraw, + changelayer: this.redraw, + removelayer: this.redraw, + changebaselayer: this.redraw, + scope: this + }); + this.events.unregister("buttonclick", this, this.onButtonClick); + OpenLayers.Control.prototype.destroy.apply(this, arguments) + }, + setMap: function(a) { + OpenLayers.Control.prototype.setMap.apply(this, arguments); + this.map.events.on({ + addlayer: this.redraw, + changelayer: this.redraw, + removelayer: this.redraw, + changebaselayer: this.redraw, + scope: this + }); + this.outsideViewport ? (this.events.attachToElement(this.div), this.events.register("buttonclick", this, this.onButtonClick)) : this.map.events.register("buttonclick", this, this.onButtonClick) + }, + draw: function() { + OpenLayers.Control.prototype.draw.apply(this); + this.loadContents(); + this.outsideViewport || this.minimizeControl(); + this.redraw(); + return this.div + }, + onButtonClick: function(a) { + a = a.buttonElement; + a === this.minimizeDiv ? this.minimizeControl() : a === this.maximizeDiv ? this.maximizeControl() : a._layerSwitcher === + this.id && (a["for"] && (a = document.getElementById(a["for"])), a.disabled || ("radio" == a.type ? (a.checked = !0, this.map.setBaseLayer(this.map.getLayer(a._layer))) : (a.checked = !a.checked, this.updateMap()))) + }, + clearLayersArray: function(a) { + this[a + "LayersDiv"].innerHTML = ""; + this[a + "Layers"] = [] + }, + checkRedraw: function() { + var a = !1; + if (!this.layerStates.length || this.map.layers.length != this.layerStates.length) a = !0; + else + for (var b = 0, c = this.layerStates.length; b < c; b++) { + var d = this.layerStates[b], + e = this.map.layers[b]; + if (d.name != + e.name || d.inRange != e.inRange || d.id != e.id || d.visibility != e.visibility) { + a = !0; + break + } + } + return a + }, + redraw: function() { + if (!this.checkRedraw()) return this.div; + this.clearLayersArray("base"); + this.clearLayersArray("data"); + var a = !1, + b = !1, + c = this.map.layers.length; + this.layerStates = Array(c); + for (var d = 0; d < c; d++) { + var e = this.map.layers[d]; + this.layerStates[d] = { + name: e.name, + visibility: e.visibility, + inRange: e.inRange, + id: e.id + } + } + var f = this.map.layers.slice(); + this.ascending || f.reverse(); + d = 0; + for (c = f.length; d < c; d++) { + var e = f[d], + g = e.isBaseLayer; + if (e.displayInLayerSwitcher) { + g ? b = !0 : a = !0; + var h = g ? e == this.map.baseLayer : e.getVisibility(), + i = document.createElement("input"); + i.id = this.id + "_input_" + e.name; + i.name = g ? this.id + "_baseLayers" : e.name; + i.type = g ? "radio" : "checkbox"; + i.value = e.name; + i.checked = h; + i.defaultChecked = h; + i.className = "olButton"; + i._layer = e.id; + i._layerSwitcher = this.id; + !g && !e.inRange && (i.disabled = !0); + h = document.createElement("label"); + h["for"] = i.id; + OpenLayers.Element.addClass(h, "labelSpan olButton"); + h._layer = e.id; + h._layerSwitcher = + this.id; + !g && !e.inRange && (h.style.color = "gray"); + h.innerHTML = e.name; + h.style.verticalAlign = g ? "bottom" : "baseline"; + var j = document.createElement("br"); + (g ? this.baseLayers : this.dataLayers).push({ + layer: e, + inputElem: i, + labelSpan: h + }); + e = g ? this.baseLayersDiv : this.dataLayersDiv; + e.appendChild(i); + e.appendChild(h); + e.appendChild(j) + } + } + this.dataLbl.style.display = a ? "" : "none"; + this.baseLbl.style.display = b ? "" : "none"; + return this.div + }, + updateMap: function() { + for (var a = 0, b = this.baseLayers.length; a < b; a++) { + var c = this.baseLayers[a]; + c.inputElem.checked && this.map.setBaseLayer(c.layer, !1) + } + a = 0; + for (b = this.dataLayers.length; a < b; a++) c = this.dataLayers[a], c.layer.setVisibility(c.inputElem.checked) + }, + maximizeControl: function(a) { + this.div.style.width = ""; + this.div.style.height = ""; + this.showControls(!1); + null != a && OpenLayers.Event.stop(a) + }, + minimizeControl: function(a) { + this.div.style.width = "0px"; + this.div.style.height = "0px"; + this.showControls(!0); + null != a && OpenLayers.Event.stop(a) + }, + showControls: function(a) { + this.maximizeDiv.style.display = a ? "" : "none"; + this.minimizeDiv.style.display = a ? "none" : ""; + this.layersDiv.style.display = a ? "none" : "" + }, + loadContents: function() { + this.layersDiv = document.createElement("div"); + this.layersDiv.id = this.id + "_layersDiv"; + OpenLayers.Element.addClass(this.layersDiv, "layersDiv"); + this.baseLbl = document.createElement("div"); + this.baseLbl.innerHTML = OpenLayers.i18n("Base Layer"); + OpenLayers.Element.addClass(this.baseLbl, "baseLbl"); + this.baseLayersDiv = document.createElement("div"); + OpenLayers.Element.addClass(this.baseLayersDiv, "baseLayersDiv"); + this.dataLbl = document.createElement("div"); + this.dataLbl.innerHTML = OpenLayers.i18n("Overlays"); + OpenLayers.Element.addClass(this.dataLbl, "dataLbl"); + this.dataLayersDiv = document.createElement("div"); + OpenLayers.Element.addClass(this.dataLayersDiv, "dataLayersDiv"); + this.ascending ? (this.layersDiv.appendChild(this.baseLbl), this.layersDiv.appendChild(this.baseLayersDiv), this.layersDiv.appendChild(this.dataLbl), this.layersDiv.appendChild(this.dataLayersDiv)) : (this.layersDiv.appendChild(this.dataLbl), this.layersDiv.appendChild(this.dataLayersDiv), + this.layersDiv.appendChild(this.baseLbl), this.layersDiv.appendChild(this.baseLayersDiv)); + this.div.appendChild(this.layersDiv); + this.roundedCorner && (OpenLayers.Rico.Corner.round(this.div, { + corners: "tl bl", + bgColor: "transparent", + color: this.roundedCornerColor, + blend: !1 + }), OpenLayers.Rico.Corner.changeOpacity(this.layersDiv, 0.75)); + var a = OpenLayers.Util.getImageLocation("layer-switcher-maximize.png"); + this.maximizeDiv = OpenLayers.Util.createAlphaImageDiv("OpenLayers_Control_MaximizeDiv", null, null, a, "absolute"); + OpenLayers.Element.addClass(this.maximizeDiv, "maximizeDiv olButton"); + this.maximizeDiv.style.display = "none"; + this.div.appendChild(this.maximizeDiv); + a = OpenLayers.Util.getImageLocation("layer-switcher-minimize.png"); + this.minimizeDiv = OpenLayers.Util.createAlphaImageDiv("OpenLayers_Control_MinimizeDiv", null, null, a, "absolute"); + OpenLayers.Element.addClass(this.minimizeDiv, "minimizeDiv olButton"); + this.minimizeDiv.style.display = "none"; + this.div.appendChild(this.minimizeDiv) + }, + CLASS_NAME: "OpenLayers.Control.LayerSwitcher" +}); +OpenLayers.Format.Atom = OpenLayers.Class(OpenLayers.Format.XML, { + namespaces: { + atom: "http://www.w3.org/2005/Atom", + georss: "http://www.georss.org/georss" + }, + feedTitle: "untitled", + defaultEntryTitle: "untitled", + gmlParser: null, + xy: !1, + read: function(a) { + "string" == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + return this.parseFeatures(a) + }, + write: function(a) { + var b; + if (OpenLayers.Util.isArray(a)) { + b = this.createElementNSPlus("atom:feed"); + b.appendChild(this.createElementNSPlus("atom:title", { + value: this.feedTitle + })); + for (var c = 0, d = a.length; c < d; c++) b.appendChild(this.buildEntryNode(a[c])) + } else b = this.buildEntryNode(a); + return OpenLayers.Format.XML.prototype.write.apply(this, [b]) + }, + buildContentNode: function(a) { + var b = this.createElementNSPlus("atom:content", { + attributes: { + type: a.type || null + } + }); + if (a.src) b.setAttribute("src", a.src); + else if ("text" == a.type || null == a.type) b.appendChild(this.createTextNode(a.value)); + else if ("html" == a.type) { + if ("string" != typeof a.value) throw "HTML content must be in form of an escaped string"; + b.appendChild(this.createTextNode(a.value)) + } else "xhtml" == + a.type ? b.appendChild(a.value) : "xhtml" == a.type || a.type.match(/(\+|\/)xml$/) ? b.appendChild(a.value) : b.appendChild(this.createTextNode(a.value)); + return b + }, + buildEntryNode: function(a) { + var b = a.attributes, + c = b.atom || {}, + d = this.createElementNSPlus("atom:entry"); + if (c.authors) + for (var e = OpenLayers.Util.isArray(c.authors) ? c.authors : [c.authors], f = 0, g = e.length; f < g; f++) d.appendChild(this.buildPersonConstructNode("author", e[f])); + if (c.categories) + for (var e = OpenLayers.Util.isArray(c.categories) ? c.categories : [c.categories], + h, f = 0, g = e.length; f < g; f++) h = e[f], d.appendChild(this.createElementNSPlus("atom:category", { + attributes: { + term: h.term, + scheme: h.scheme || null, + label: h.label || null + } + })); + c.content && d.appendChild(this.buildContentNode(c.content)); + if (c.contributors) { + e = OpenLayers.Util.isArray(c.contributors) ? c.contributors : [c.contributors]; + f = 0; + for (g = e.length; f < g; f++) d.appendChild(this.buildPersonConstructNode("contributor", e[f])) + } + a.fid && d.appendChild(this.createElementNSPlus("atom:id", { + value: a.fid + })); + if (c.links) { + e = OpenLayers.Util.isArray(c.links) ? + c.links : [c.links]; + f = 0; + for (g = e.length; f < g; f++) h = e[f], d.appendChild(this.createElementNSPlus("atom:link", { + attributes: { + href: h.href, + rel: h.rel || null, + type: h.type || null, + hreflang: h.hreflang || null, + title: h.title || null, + length: h.length || null + } + })) + } + c.published && d.appendChild(this.createElementNSPlus("atom:published", { + value: c.published + })); + c.rights && d.appendChild(this.createElementNSPlus("atom:rights", { + value: c.rights + })); + if (c.summary || b.description) d.appendChild(this.createElementNSPlus("atom:summary", { + value: c.summary || + b.description + })); + d.appendChild(this.createElementNSPlus("atom:title", { + value: c.title || b.title || this.defaultEntryTitle + })); + c.updated && d.appendChild(this.createElementNSPlus("atom:updated", { + value: c.updated + })); + a.geometry && (b = this.createElementNSPlus("georss:where"), b.appendChild(this.buildGeometryNode(a.geometry)), d.appendChild(b)); + return d + }, + initGmlParser: function() { + this.gmlParser = new OpenLayers.Format.GML.v3({ + xy: this.xy, + featureNS: "http://example.com#feature", + internalProjection: this.internalProjection, + externalProjection: this.externalProjection + }) + }, + buildGeometryNode: function(a) { + this.gmlParser || this.initGmlParser(); + return this.gmlParser.writeNode("feature:_geometry", a).firstChild + }, + buildPersonConstructNode: function(a, b) { + var c = ["uri", "email"], + d = this.createElementNSPlus("atom:" + a); + d.appendChild(this.createElementNSPlus("atom:name", { + value: b.name + })); + for (var e = 0, f = c.length; e < f; e++) b[c[e]] && d.appendChild(this.createElementNSPlus("atom:" + c[e], { + value: b[c[e]] + })); + return d + }, + getFirstChildValue: function(a, b, c, + d) { + return (a = this.getElementsByTagNameNS(a, b, c)) && 0 < a.length ? this.getChildValue(a[0], d) : d + }, + parseFeature: function(a) { + var b = {}, + c = null, + d = null, + e = null, + f = this.namespaces.atom; + this.parsePersonConstructs(a, "author", b); + d = this.getElementsByTagNameNS(a, f, "category"); + 0 < d.length && (b.categories = []); + for (var g = 0, h = d.length; g < h; g++) { + c = {}; + c.term = d[g].getAttribute("term"); + if (e = d[g].getAttribute("scheme")) c.scheme = e; + if (e = d[g].getAttribute("label")) c.label = e; + b.categories.push(c) + } + d = this.getElementsByTagNameNS(a, f, "content"); + if (0 < d.length) { + c = {}; + if (e = d[0].getAttribute("type")) c.type = e; + (e = d[0].getAttribute("src")) ? c.src = e: (c.value = "text" == c.type || "html" == c.type || null == c.type ? this.getFirstChildValue(a, f, "content", null) : "xhtml" == c.type || c.type.match(/(\+|\/)xml$/) ? this.getChildEl(d[0]) : this.getFirstChildValue(a, f, "content", null), b.content = c) + } + this.parsePersonConstructs(a, "contributor", b); + b.id = this.getFirstChildValue(a, f, "id", null); + d = this.getElementsByTagNameNS(a, f, "link"); + 0 < d.length && (b.links = Array(d.length)); + for (var i = ["rel", + "type", "hreflang", "title", "length" + ], g = 0, h = d.length; g < h; g++) { + c = {}; + c.href = d[g].getAttribute("href"); + for (var j = 0, k = i.length; j < k; j++)(e = d[g].getAttribute(i[j])) && (c[i[j]] = e); + b.links[g] = c + } + if (c = this.getFirstChildValue(a, f, "published", null)) b.published = c; + if (c = this.getFirstChildValue(a, f, "rights", null)) b.rights = c; + if (c = this.getFirstChildValue(a, f, "summary", null)) b.summary = c; + b.title = this.getFirstChildValue(a, f, "title", null); + b.updated = this.getFirstChildValue(a, f, "updated", null); + c = { + title: b.title, + description: b.summary, + atom: b + }; + a = this.parseLocations(a)[0]; + a = new OpenLayers.Feature.Vector(a, c); + a.fid = b.id; + return a + }, + parseFeatures: function(a) { + var b = [], + c = this.getElementsByTagNameNS(a, this.namespaces.atom, "entry"); + 0 == c.length && (c = [a]); + for (var a = 0, d = c.length; a < d; a++) b.push(this.parseFeature(c[a])); + return b + }, + parseLocations: function(a) { + var b = this.namespaces.georss, + c = { + components: [] + }, + d = this.getElementsByTagNameNS(a, b, "where"); + if (d && 0 < d.length) { + this.gmlParser || this.initGmlParser(); + for (var e = 0, f = d.length; e < f; e++) this.gmlParser.readChildNodes(d[e], + c) + } + c = c.components; + if ((d = this.getElementsByTagNameNS(a, b, "point")) && 0 < d.length) { + e = 0; + for (f = d.length; e < f; e++) { + var g = OpenLayers.String.trim(d[e].firstChild.nodeValue).split(/\s+/); + 2 != g.length && (g = OpenLayers.String.trim(d[e].firstChild.nodeValue).split(/\s*,\s*/)); + c.push(new OpenLayers.Geometry.Point(g[1], g[0])) + } + } + var h = this.getElementsByTagNameNS(a, b, "line"); + if (h && 0 < h.length) + for (var i, e = 0, f = h.length; e < f; e++) { + d = OpenLayers.String.trim(h[e].firstChild.nodeValue).split(/\s+/); + i = []; + for (var j = 0, k = d.length; j < + k; j += 2) g = new OpenLayers.Geometry.Point(d[j + 1], d[j]), i.push(g); + c.push(new OpenLayers.Geometry.LineString(i)) + } + if ((a = this.getElementsByTagNameNS(a, b, "polygon")) && 0 < a.length) { + e = 0; + for (f = a.length; e < f; e++) { + d = OpenLayers.String.trim(a[e].firstChild.nodeValue).split(/\s+/); + i = []; + j = 0; + for (k = d.length; j < k; j += 2) g = new OpenLayers.Geometry.Point(d[j + 1], d[j]), i.push(g); + c.push(new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(c)])) + } + } + if (this.internalProjection && this.externalProjection) { + e = 0; + for (f = c.length; e < + f; e++) c[e] && c[e].transform(this.externalProjection, this.internalProjection) + } + return c + }, + parsePersonConstructs: function(a, b, c) { + for (var d = [], e = this.namespaces.atom, a = this.getElementsByTagNameNS(a, e, b), f = ["uri", "email"], g = 0, h = a.length; g < h; g++) { + var i = {}; + i.name = this.getFirstChildValue(a[g], e, "name", null); + for (var j = 0, k = f.length; j < k; j++) { + var l = this.getFirstChildValue(a[g], e, f[j], null); + l && (i[f[j]] = l) + } + d.push(i) + } + 0 < d.length && (c[b + "s"] = d) + }, + CLASS_NAME: "OpenLayers.Format.Atom" +}); +OpenLayers.Control.KeyboardDefaults = OpenLayers.Class(OpenLayers.Control, { + autoActivate: !0, + slideFactor: 75, + observeElement: null, + draw: function() { + this.handler = new OpenLayers.Handler.Keyboard(this, { + keydown: this.defaultKeyPress + }, { + observeElement: this.observeElement || document + }) + }, + defaultKeyPress: function(a) { + var b, c = !0; + switch (a.keyCode) { + case OpenLayers.Event.KEY_LEFT: + this.map.pan(-this.slideFactor, 0); + break; + case OpenLayers.Event.KEY_RIGHT: + this.map.pan(this.slideFactor, 0); + break; + case OpenLayers.Event.KEY_UP: + this.map.pan(0, -this.slideFactor); + break; + case OpenLayers.Event.KEY_DOWN: + this.map.pan(0, this.slideFactor); + break; + case 33: + b = this.map.getSize(); + this.map.pan(0, -0.75 * b.h); + break; + case 34: + b = this.map.getSize(); + this.map.pan(0, 0.75 * b.h); + break; + case 35: + b = this.map.getSize(); + this.map.pan(0.75 * b.w, 0); + break; + case 36: + b = this.map.getSize(); + this.map.pan(-0.75 * b.w, 0); + break; + case 43: + case 61: + case 187: + case 107: + this.map.zoomIn(); + break; + case 45: + case 109: + case 189: + case 95: + this.map.zoomOut(); + break; + default: + c = !1 + } + c && OpenLayers.Event.stop(a) + }, + CLASS_NAME: "OpenLayers.Control.KeyboardDefaults" +}); +OpenLayers.Format.WMTSCapabilities.v1_0_0 = OpenLayers.Class(OpenLayers.Format.OWSCommon.v1_1_0, { + version: "1.0.0", + namespaces: { + ows: "http://www.opengis.net/ows/1.1", + wmts: "http://www.opengis.net/wmts/1.0", + xlink: "http://www.w3.org/1999/xlink" + }, + yx: null, + defaultPrefix: "wmts", + initialize: function(a) { + OpenLayers.Format.XML.prototype.initialize.apply(this, [a]); + this.options = a; + a = OpenLayers.Util.extend({}, OpenLayers.Format.WMTSCapabilities.prototype.yx); + this.yx = OpenLayers.Util.extend(a, this.yx) + }, + read: function(a) { + "string" == + typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [a])); + a && 9 == a.nodeType && (a = a.documentElement); + var b = {}; + this.readNode(a, b); + b.version = this.version; + return b + }, + readers: { + wmts: { + Capabilities: function(a, b) { + this.readChildNodes(a, b) + }, + Contents: function(a, b) { + b.contents = {}; + b.contents.layers = []; + b.contents.tileMatrixSets = {}; + this.readChildNodes(a, b.contents) + }, + Layer: function(a, b) { + var c = { + styles: [], + formats: [], + dimensions: [], + tileMatrixSetLinks: [], + layers: [] + }; + this.readChildNodes(a, c); + b.layers.push(c) + }, + Style: function(a, + b) { + var c = {}; + c.isDefault = "true" === a.getAttribute("isDefault"); + this.readChildNodes(a, c); + b.styles.push(c) + }, + Format: function(a, b) { + b.formats.push(this.getChildValue(a)) + }, + TileMatrixSetLink: function(a, b) { + var c = {}; + this.readChildNodes(a, c); + b.tileMatrixSetLinks.push(c) + }, + TileMatrixSet: function(a, b) { + if (b.layers) { + var c = { + matrixIds: [] + }; + this.readChildNodes(a, c); + b.tileMatrixSets[c.identifier] = c + } else b.tileMatrixSet = this.getChildValue(a) + }, + TileMatrix: function(a, b) { + var c = { + supportedCRS: b.supportedCRS + }; + this.readChildNodes(a, + c); + b.matrixIds.push(c) + }, + ScaleDenominator: function(a, b) { + b.scaleDenominator = parseFloat(this.getChildValue(a)) + }, + TopLeftCorner: function(a, b) { + var c = this.getChildValue(a).split(" "), + d; + b.supportedCRS && (d = !!this.yx[b.supportedCRS.replace(/urn:ogc:def:crs:(\w+):.+:(\w+)$/, "urn:ogc:def:crs:$1::$2")]); + b.topLeftCorner = d ? new OpenLayers.LonLat(c[1], c[0]) : new OpenLayers.LonLat(c[0], c[1]) + }, + TileWidth: function(a, b) { + b.tileWidth = parseInt(this.getChildValue(a)) + }, + TileHeight: function(a, b) { + b.tileHeight = parseInt(this.getChildValue(a)) + }, + MatrixWidth: function(a, b) { + b.matrixWidth = parseInt(this.getChildValue(a)) + }, + MatrixHeight: function(a, b) { + b.matrixHeight = parseInt(this.getChildValue(a)) + }, + ResourceURL: function(a, b) { + b.resourceUrl = b.resourceUrl || {}; + b.resourceUrl[a.getAttribute("resourceType")] = { + format: a.getAttribute("format"), + template: a.getAttribute("template") + } + }, + WSDL: function(a, b) { + b.wsdl = {}; + b.wsdl.href = a.getAttribute("xlink:href") + }, + ServiceMetadataURL: function(a, b) { + b.serviceMetadataUrl = {}; + b.serviceMetadataUrl.href = a.getAttribute("xlink:href") + }, + LegendURL: function(a, b) { + b.legend = {}; + b.legend.href = a.getAttribute("xlink:href"); + b.legend.format = a.getAttribute("format") + }, + Dimension: function(a, b) { + var c = { + values: [] + }; + this.readChildNodes(a, c); + b.dimensions.push(c) + }, + Default: function(a, b) { + b["default"] = this.getChildValue(a) + }, + Value: function(a, b) { + b.values.push(this.getChildValue(a)) + } + }, + ows: OpenLayers.Format.OWSCommon.v1_1_0.prototype.readers.ows + }, + CLASS_NAME: "OpenLayers.Format.WMTSCapabilities.v1_0_0" +}); \ No newline at end of file diff --git a/PanoramicView/img/.DS_Store b/PanoramicView/img/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5222d092f845a15e0c520d22acf56bcef52cdcd4 Binary files /dev/null and b/PanoramicView/img/.DS_Store differ diff --git a/PanoramicView/img/east-mini.png b/PanoramicView/img/east-mini.png new file mode 100644 index 0000000000000000000000000000000000000000..ecedc5ef9f2ea756eaebb78e187b543c221760b2 Binary files /dev/null and b/PanoramicView/img/east-mini.png differ diff --git a/PanoramicView/img/layer-switcher-maximize.png b/PanoramicView/img/layer-switcher-maximize.png new file mode 100644 index 0000000000000000000000000000000000000000..f346086b38eb98effa931eb7c50ab5a221cf06c0 Binary files /dev/null and b/PanoramicView/img/layer-switcher-maximize.png differ diff --git a/PanoramicView/img/layer-switcher-minimize.png b/PanoramicView/img/layer-switcher-minimize.png new file mode 100644 index 0000000000000000000000000000000000000000..b4aab0bf784076f86893d0c28a8cae36ec6c113e Binary files /dev/null and b/PanoramicView/img/layer-switcher-minimize.png differ diff --git a/PanoramicView/img/north-mini.png b/PanoramicView/img/north-mini.png new file mode 100644 index 0000000000000000000000000000000000000000..dfd7211ffc7bf3ec82c490c7e9f522a872eb5c2b Binary files /dev/null and b/PanoramicView/img/north-mini.png differ diff --git a/PanoramicView/img/slider.png b/PanoramicView/img/slider.png new file mode 100644 index 0000000000000000000000000000000000000000..433536422ead435c8e9e5b9dd1f209c7087994c3 Binary files /dev/null and b/PanoramicView/img/slider.png differ diff --git a/PanoramicView/img/south-mini.png b/PanoramicView/img/south-mini.png new file mode 100644 index 0000000000000000000000000000000000000000..2970875c4c2588c1345cc2c782cc40e7dfb667e3 Binary files /dev/null and b/PanoramicView/img/south-mini.png differ diff --git a/PanoramicView/img/west-mini.png b/PanoramicView/img/west-mini.png new file mode 100644 index 0000000000000000000000000000000000000000..363cd3d7b2e9aaa24625d57fb59293a063a55158 Binary files /dev/null and b/PanoramicView/img/west-mini.png differ diff --git a/PanoramicView/img/zoom-minus-mini.png b/PanoramicView/img/zoom-minus-mini.png new file mode 100644 index 0000000000000000000000000000000000000000..8f0d77fff1cc3f68b512dce21bd789d7f59f2f62 Binary files /dev/null and b/PanoramicView/img/zoom-minus-mini.png differ diff --git a/PanoramicView/img/zoom-plus-mini.png b/PanoramicView/img/zoom-plus-mini.png new file mode 100644 index 0000000000000000000000000000000000000000..a73ab4e951b38fde6f1f39124efb1fa01fdc01b2 Binary files /dev/null and b/PanoramicView/img/zoom-plus-mini.png differ diff --git a/PanoramicView/img/zoombar.png b/PanoramicView/img/zoombar.png new file mode 100644 index 0000000000000000000000000000000000000000..47110ab3e5a5e3e9d01a9f6ad1ae4aa08d4e3a28 Binary files /dev/null and b/PanoramicView/img/zoombar.png differ diff --git a/PanoramicView/logo.jpg b/PanoramicView/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c69280004d285a2cffba12f58d40aa4c7ebcf97 Binary files /dev/null and b/PanoramicView/logo.jpg differ diff --git a/PanoramicView/logo.png b/PanoramicView/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a18c9f489a994bf29eeaefc6bb2719116fcd6bfe Binary files /dev/null and b/PanoramicView/logo.png differ diff --git a/PanoramicView/openlayers.html b/PanoramicView/openlayers.html new file mode 100644 index 0000000000000000000000000000000000000000..e73c533e858dc6c7af39e5038a9218ae5950da12 --- /dev/null +++ b/PanoramicView/openlayers.html @@ -0,0 +1,441 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml" + <head> + <meta http-equiv='imagetoolbar' content='no'/> + <style type="text/css"> v\:* {behavior:url(#default#VML);} + html, body { overflow: hidden; padding: 0; height: 100%; width: 100%; font-family: 'Lucida Grande',Geneva,Arial,Verdana,sans-serif; } + body { margin: 10px; background: #fff; } + h1 { margin: 0; padding: 6px; border:0; font-size: 20pt; } + #header { height: 50px; padding: 0;/* background-color: #eee;*/ border: 1px solid #888; } + #subheader { height: 12px; text-align: right; font-size: 10px; color: #555;} + #map { height: 95%; border: 1px solid #888; } + .olImageLoadError { display: none; } + .olControlLayerSwitcher .layersDiv { border-radius: 10px 0 0 10px; } + </style> + <script src="OpenLayers.js"></script> + <script> + + + OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, { + defaultHandlerOptions: { + 'single': true, + 'double': false, + 'pixelTolerance': 0, + 'stopSingle': false, + 'stopDouble': false + }, + + initialize: function(options) { + this.handlerOptions = OpenLayers.Util.extend( + {}, this.defaultHandlerOptions + ); + OpenLayers.Control.prototype.initialize.apply( + this, arguments + ); + this.handler = new OpenLayers.Handler.Click( + this, { + 'click': this.trigger + }, this.handlerOptions + ); + }, + + trigger: function(e) { + var lonlat = map.getLonLatFromPixel(e.xy); + + var b = map.getLonLatFromPixel(e.xy); + + displayProjection= null; + displayProjection && b.transform(map.getProjectionObject(), displayProjection); + var ret=b.lon.toFixed(b) +" , " + b.lat.toFixed(b); + step_x=-0.001333333333333333; + step_y=0.001333333333333333; + ori_lat=3.0125822852714919; + ori_lon=181.94317626951325; + + + + d=map.getMaxExtent({ + restricted: !0 + }); + var tmp = new OpenLayers.LonLat( ((e.xy.x - map.minPx.x) * map.getResolution() + d.left)*step_x, ((map.minPx.y - e.xy.y) * map.getResolution() + d.top)*step_y); + + var lon_final_tmp = OpenLayers.Util.toFloat(tmp.lon)+ori_lon; + lon_final=lon_final_tmp<0?360+lon_final_tmp:lon_final_tmp; + var lat_final = OpenLayers.Util.toFloat(tmp.lat)+ori_lat; + + + document.getElementById("valuediv").value=lon_final.toFixed(4) +"," + lat_final.toFixed(4); + + // if (lat_final<2.22813 && lat_final> -2.22813 && lon_final_tmp< 67.6027 && lon_final_tmp>-71.18) + // alert("You clicked near " + lon_final + " , " + lat_final); + // else + // OpenLayers.Util.getElement("valuediv").innerHTML = ""; + + + + + + } + + }); + + var map; + + var mapBounds = new OpenLayers.Bounds( 0.0, -4398.0, 270674.0, 0.0); + +// var mapBounds = new OpenLayers.Bounds(0.0, -4274.0, 155805.0, 0.0); + + var mapMinZoom = 0; + var mapMaxZoom = 10; + var emptyTileURL = "http://www.maptiler.org/img/none.png"; + OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3; + + function init(){ + var graticuleCtl1; + + graticuleCtl1 = new OpenLayers.Control.Graticule({ + lineSymbolizer:{strokeColor: "#ff0000", strokeWidth: 1, strokeOpacity: 0.8}, + + labelled: true + }); + + + var options = { + div: "map", + controls: [ + // graticuleCtl1, + new OpenLayers.Control.OverviewMap(), + ], + maxExtent: new OpenLayers.Bounds( 0.0, -4398.0, 270674.0, 0.0), + maxResolution: 2048.000000, + numZoomLevels: 11 + }; + + map = new OpenLayers.Map(options); + + + map.events.register("mousemove", map, function(e) { + var position = this.events.getMousePosition(e); + + var a={x:position.x,y:position.y}; + var b = map.getLonLatFromPixel(a); + + displayProjection= null; + + displayProjection && b.transform(map.getProjectionObject(), displayProjection); + + var ret=b.lon.toFixed(b) +" , " + b.lat.toFixed(b) + + + + step_x=-0.001333333333333333; + step_y=0.001333333333333333; + ori_lat=3.0125822852714919; + ori_lon=181.94317626951325; + + d=map.getMaxExtent({ + restricted: !0 + }); + + var tmp = new OpenLayers.LonLat( ((a.x - map.minPx.x) * map.getResolution() + d.left)*step_x, ((map.minPx.y - a.y) * map.getResolution() + d.top)*step_y); + + var lon_final_tmp = OpenLayers.Util.toFloat(tmp.lon)+ori_lon; + lon_final=lon_final_tmp<0?360+lon_final_tmp:lon_final_tmp; + var lat_final = OpenLayers.Util.toFloat(tmp.lat)+ori_lat; + + if (lat_final<3.08588 && lat_final> -2.90 && lon_final_tmp< 181.943 && lon_final_tmp>-183.943) + OpenLayers.Util.getElement("valuediv").innerHTML = lon_final_tmp.toFixed(4)+", "+lat_final.toFixed(4); + // OpenLayers.Util.getElement("valuediv").innerHTML = a.x+", "+a.y; + else + OpenLayers.Util.getElement("valuediv").innerHTML = ""; + + + }); + + var layer = new OpenLayers.Layer.TMS("TMS Layer", "", + { + serviceVersion: '.', + layername: '.', + alpha: true, + type: 'png', + getURL: getURL + }); + + map.addLayer(layer); + + var polygonLayer = new OpenLayers.Layer.Vector("Polygon Layer"); + map.addLayer(polygonLayer); + // map.zoomToExtent(mapBounds); + + var mapBoundsInitialZoom = new OpenLayers.Bounds(135.337, 16000.0, 135.337, 20000.0); + map.zoomToExtent(mapBoundsInitialZoom); + + + map.addControls([new OpenLayers.Control.PanZoomBar(), + new OpenLayers.Control.Navigation(), + new OpenLayers.Control.MousePosition(), + new OpenLayers.Control.ArgParser(), + new OpenLayers.Control.Attribution()]); + + map.addControl(new OpenLayers.Control.LayerSwitcher()); + + + + + pointControl = new OpenLayers.Control.DrawFeature(polygonLayer, OpenLayers.Handler.Point); + + + + map.addControl(pointControl); + + // register a listener on each control + pointControl.events.register('featureadded', pointControl, function(f) + { + if (polygonLayer.features.length >1) + { + polygonLayer.removeFeatures(polygonLayer.features[0]); + } + v = OpenLayers.Util.getElement("valuediv").innerHTML; + OpenLayers.Util.getElement("selected_point").innerHTML = v; + OpenLayers.Util.getElement("selected_radius").innerHTML = ""; + + window.status=""; + + }); + + + polygonControl = new OpenLayers.Control.DrawFeature(polygonLayer, OpenLayers.Handler.RegularPolygon, { + handlerOptions: { + sides: 4, + irregular: true + } + }); + + map.addControl(polygonControl); + + // register a listener on each control + polygonControl.events.register('featureadded', polygonControl, function(f) + { + + centerPixel=f.feature.geometry.getBounds().getCenterPixel(); + //lonlat del centro + var lonlat={lon:centerPixel.x,lat:centerPixel.y}; + //lonlat del pixel top left + var lonlat_top={lon:f.feature.geometry.getBounds().left,lat:f.feature.geometry.getBounds().top}; + //lonlat del pixel bot + var lonlat_bot={lon:f.feature.geometry.getBounds().left,lat:f.feature.geometry.getBounds().bottom}; + //lonlat del pixel top right + var lonlat_right={lon:f.feature.geometry.getBounds().right,lat:f.feature.geometry.getBounds().top}; + + + + + var a=map.getPixelFromLonLat(lonlat); + var b = map.getLonLatFromPixel(a); + + var a_top=map.getPixelFromLonLat(lonlat_top); + var b_top = map.getLonLatFromPixel(a_top); + + var a_bot=map.getPixelFromLonLat(lonlat_bot); + var b_bot = map.getLonLatFromPixel(a_bot); + + var a_right = map.getPixelFromLonLat(lonlat_right); + var b_right = map.getLonLatFromPixel(a_right); + + //displayProjection= null; + + //displayProjection && b.transform(map.getProjectionObject(), displayProjection); + + + + //var tmp = parseInt(10); + // var ret=b.lon.toFixed(b) +" , " + b.lat.toFixed(b) + + + //ori_lon=181.943; + //ori_lat=2.8514; + //ori_lat=3.08588; + step_x=-0.001333333333333333; + step_y=0.001333333333333333; + ori_lat=3.0125822852714919; + ori_lon=181.94317626951325; + + + + d=map.getMaxExtent({ + restricted: !0 + }); + + + //COMPUTE CENTER GLON/GLAT + var tmp = new OpenLayers.LonLat( ((a.x - map.minPx.x) * map.getResolution() + d.left)*step_x, ((map.minPx.y - a.y) * map.getResolution() + d.top)*step_y); + var lon_final = OpenLayers.Util.toFloat(tmp.lon)+ori_lon; + //var lon_final=lon_final_tmp<0?360+lon_final_tmp:lon_final_tmp; + var lat_final = OpenLayers.Util.toFloat(tmp.lat)+ori_lat; + + //COMPUTE TOP GLON/GLAT + var tmp_top = new OpenLayers.LonLat( ((a_top.x - map.minPx.x) * map.getResolution() + d.left)*step_x, ((map.minPx.y - a_top.y) * map.getResolution() + d.top)*step_y); + var lon_final_top = OpenLayers.Util.toFloat(tmp_top.lon)+ori_lon; + // var lon_final_top=lon_final_tmp<0?360+lon_final_tmp:lon_final_tmp; + var lat_final_top = OpenLayers.Util.toFloat(tmp_top.lat)+ori_lat; + + //COMPUTE BOTTOM GLON/GLAT + var tmp_bot = new OpenLayers.LonLat( ((a_bot.x - map.minPx.x) * map.getResolution() + d.left)*step_x, ((map.minPx.y - a_bot.y) * map.getResolution() + d.top)*step_y); + var lon_final_bot = OpenLayers.Util.toFloat(tmp_bot.lon)+ori_lon; + //var lon_final_bot=lon_final_tmp<0?360+lon_final_tmp:lon_final_tmp; + var lat_final_bot = OpenLayers.Util.toFloat(tmp_bot.lat)+ori_lat; + + //COMPUTE right GLON/GLAT + var tmp_right = new OpenLayers.LonLat( ((a_right.x - map.minPx.x) * map.getResolution() + d.left)*step_x, ((map.minPx.y - a_right.y) * map.getResolution() + d.top)*step_y); + var lon_final_right = OpenLayers.Util.toFloat(tmp_right.lon)+ori_lon; + //var lon_final_right = lon_final_tmp<0?360+lon_final_tmp:lon_final_tmp; + var lat_final_right = OpenLayers.Util.toFloat(tmp_right.lat)+ori_lat; + + + var db=Math.abs(lat_final_top-lat_final_bot); + var dl=Math.abs(lon_final_top-lon_final_right); + + /* + console.log("CENTER: "+lon_final.toFixed(4) +"," + lat_final.toFixed(4) ); + console.log("TOP: "+lon_final_top.toFixed(4) +"," + lat_final_top.toFixed(4) ); + console.log("BOT: "+lon_final_bot.toFixed(4) +"," + lat_final_bot.toFixed(4) ); + console.log("RIGHT: "+lon_final_right.toFixed(4) +"," + lat_final_right.toFixed(4) );*/ + console.log("db: "+db.toFixed(4) +" dl: "+dl.toFixed(4) ); + + + + + + + if (polygonLayer.features.length >1) + { + polygonLayer.removeFeatures(polygonLayer.features[0]); + } + OpenLayers.Util.getElement("selected_point").innerHTML = lon_final.toFixed(4) +"," + lat_final.toFixed(4); + OpenLayers.Util.getElement("selected_radius").innerHTML = dl.toFixed(4) +"," + db.toFixed(4); + window.status=""; + + + }); + + + + + + activatePointSelection(false); + activateRectangularSelection(false); + // activatePointSelection(true); + //activateRectangularSelection(true); + + var click = new OpenLayers.Control.Click(); + map.addControl(click); + click.activate(); + + } + + + + function activateRectangularSelection(e) + { + if(e) + { + polygonControl.activate(); + pointControl.deactivate(); + } + else + { + polygonControl.deactivate(); + } + } + + + function activatePointSelection(e) + { + if(e) + { + pointControl.activate(); + polygonControl.deactivate(); + } + else + { + pointControl.deactivate(); + } + } + + + function getURL(bounds) { + bounds = this.adjustBounds(bounds); + var res = this.getServerResolution(); + + var x = Math.round((bounds.left - this.tileOrigin.lon) / (res * this.tileSize.w)); + var y = Math.round((bounds.bottom - this.tileOrigin.lat) / (res * this.tileSize.h)); + var z = this.getServerZoom(); + var path = this.serviceVersion + "/" + this.layername + "/" + z + "/" + x + "/" + y + "." + this.type; + var url = this.url; + + + if (OpenLayers.Util.isArray(url)) { + url = this.selectUrl(path, url); + } + if (mapBounds.intersectsBounds(bounds) && (z >= mapMinZoom) && (z <= mapMaxZoom)) { + return url + path; + } else { + return emptyTileURL; + } + } + + function getWindowHeight() { + if (self.innerHeight) return self.innerHeight; + if (document.documentElement && document.documentElement.clientHeight) + return document.documentElement.clientHeight; + if (document.body) return document.body.clientHeight; + return 0; + } + + function getWindowWidth() { + if (self.innerWidth) return self.innerWidth; + if (document.documentElement && document.documentElement.clientWidth) + return document.documentElement.clientWidth; + if (document.body) return document.body.clientWidth; + return 0; + } + + function resize() { + var map = document.getElementById("map"); + var header = document.getElementById("header"); + var subheader = document.getElementById("subheader"); + map.style.height = (getWindowHeight()-80) + "px"; + map.style.width = (getWindowWidth()-20) + "px"; + header.style.width = (getWindowWidth()-20) + "px"; + subheader.style.width = (getWindowWidth()-20) + "px"; + if (map.updateSize) { map.updateSize(); }; + } + + onresize=function(){ resize(); }; + + + </script> + </head> + <body onload="init()"> + <div id="header"> + <img src="./logo.png" alt="logo" height="50px"> + <div id="valuediv" style="float:right" value=""></div> + <div id="selected_point" style="display:none;" value=""></div> + <div id="selected_radius" style="display:none;" value=""></div> + + </div> + <div id="subheader"> + <!-- + Generated by <a href="http://www.maptiler.org/">MapTiler</a>/<a href="http://www.klokan.cz/projects/gdal2tiles/">GDAL2Tiles</a>, Copyright © 2008 <a href="http://www.klokan.cz/">Klokan Petr Pridal</a>, <a href="http://www.gdal.org/">GDAL</a> & <a href="http://www.osgeo.org/">OSGeo</a> <a href="http://code.google.com/soc/">GSoC</a> + --> + <!-- PLEASE, LET THIS NOTE ABOUT AUTHOR AND PROJECT SOMEWHERE ON YOUR WEBSITE, OR AT LEAST IN THE COMMENT IN HTML. THANK YOU --> + </div> + + + + <div id="map"></div> + <script type="text/javascript" > + resize(); + </script> + </body> + </html> \ No newline at end of file diff --git a/PanoramicView/style.css b/PanoramicView/style.css new file mode 100644 index 0000000000000000000000000000000000000000..8e0abb70f4b1317b58894d8cf659a938091d4433 --- /dev/null +++ b/PanoramicView/style.css @@ -0,0 +1,484 @@ +div.olMap { + z-index: 0; + padding: 0 !important; + margin: 0 !important; + cursor: default; +} + +div.olMapViewport { + text-align: left; +} + +div.olLayerDiv { + -moz-user-select: none; + -khtml-user-select: none; +} + +.olLayerGoogleCopyright { + left: 2px; + bottom: 2px; +} +.olLayerGoogleV3.olLayerGoogleCopyright { + right: auto !important; +} +.olLayerGooglePoweredBy { + left: 2px; + bottom: 15px; +} +.olLayerGoogleV3.olLayerGooglePoweredBy { + bottom: 15px !important; +} +.olControlAttribution { + font-size: smaller; + right: 3px; + bottom: 4.5em; + position: absolute; + display: block; +} +.olControlScale { + right: 3px; + bottom: 3em; + display: block; + position: absolute; + font-size: smaller; +} +.olControlScaleLine { + display: block; + position: absolute; + left: 10px; + bottom: 15px; + font-size: xx-small; +} +.olControlScaleLineBottom { + border: solid 2px black; + border-bottom: none; + margin-top:-2px; + text-align: center; +} +.olControlScaleLineTop { + border: solid 2px black; + border-top: none; + text-align: center; +} + +.olControlPermalink { + right: 3px; + bottom: 1.5em; + display: block; + position: absolute; + font-size: smaller; +} + +div.olControlMousePosition { + bottom: 0; + right: 3px; + display: block; + position: absolute; + font-family: Arial; + font-size: smaller; +} + +.olControlOverviewMapContainer { + position: absolute; + bottom: 0; + right: 0; +} + +.olControlOverviewMapElement { + padding: 10px 18px 10px 10px; + background-color: #00008B; + -moz-border-radius: 1em 0 0 0; +} + +.olControlOverviewMapMinimizeButton, +.olControlOverviewMapMaximizeButton { + height: 18px; + width: 18px; + right: 0; + bottom: 80px; + cursor: pointer; +} + +.olControlOverviewMapExtentRectangle { + overflow: hidden; + background-image: url("img/blank.gif"); + cursor: move; + border: 2px dotted red; +} +.olControlOverviewMapRectReplacement { + overflow: hidden; + cursor: move; + background-image: url("img/overview_replacement.gif"); + background-repeat: no-repeat; + background-position: center; +} + +.olLayerGeoRSSDescription { + float:left; + width:100%; + overflow:auto; + font-size:1.0em; +} +.olLayerGeoRSSClose { + float:right; + color:gray; + font-size:1.2em; + margin-right:6px; + font-family:sans-serif; +} +.olLayerGeoRSSTitle { + float:left;font-size:1.2em; +} + +.olPopupContent { + padding:5px; + overflow: auto; +} + +.olControlNavigationHistory { + background-image: url("img/navigation_history.png"); + background-repeat: no-repeat; + width: 24px; + height: 24px; + +} +.olControlNavigationHistoryPreviousItemActive { + background-position: 0 0; +} +.olControlNavigationHistoryPreviousItemInactive { + background-position: 0 -24px; +} +.olControlNavigationHistoryNextItemActive { + background-position: -24px 0; +} +.olControlNavigationHistoryNextItemInactive { + background-position: -24px -24px; +} + +div.olControlSaveFeaturesItemActive { + background-image: url(img/save_features_on.png); + background-repeat: no-repeat; + background-position: 0 1px; +} +div.olControlSaveFeaturesItemInactive { + background-image: url(img/save_features_off.png); + background-repeat: no-repeat; + background-position: 0 1px; +} + +.olHandlerBoxZoomBox { + border: 2px solid red; + position: absolute; + background-color: white; + opacity: 0.50; + font-size: 1px; + filter: alpha(opacity=50); +} +.olHandlerBoxSelectFeature { + border: 2px solid blue; + position: absolute; + background-color: white; + opacity: 0.50; + font-size: 1px; + filter: alpha(opacity=50); +} + +.olControlPanPanel { + top: 10px; + left: 5px; +} + +.olControlPanPanel div { + background-image: url(img/pan-panel.png); + height: 18px; + width: 18px; + cursor: pointer; + position: absolute; +} + +.olControlPanPanel .olControlPanNorthItemInactive { + top: 0; + left: 9px; + background-position: 0 0; +} +.olControlPanPanel .olControlPanSouthItemInactive { + top: 36px; + left: 9px; + background-position: 18px 0; +} +.olControlPanPanel .olControlPanWestItemInactive { + position: absolute; + top: 18px; + left: 0; + background-position: 0 18px; +} +.olControlPanPanel .olControlPanEastItemInactive { + top: 18px; + left: 18px; + background-position: 18px 18px; +} + +.olControlZoomPanel { + top: 71px; + left: 14px; +} + +.olControlZoomPanel div { + background-image: url(img/zoom-panel.png); + position: absolute; + height: 18px; + width: 18px; + cursor: pointer; +} + +.olControlZoomPanel .olControlZoomInItemInactive { + top: 0; + left: 0; + background-position: 0 0; +} + +.olControlZoomPanel .olControlZoomToMaxExtentItemInactive { + top: 18px; + left: 0; + background-position: 0 -18px; +} + +.olControlZoomPanel .olControlZoomOutItemInactive { + top: 36px; + left: 0; + background-position: 0 18px; +} + +/* + * When a potential text is bigger than the image it move the image + * with some headers (closes #3154) + */ +.olControlPanZoomBar div { + font-size: 1px; +} + +.olPopupCloseBox { + background: url("img/close.gif") no-repeat; + cursor: pointer; +} + +.olFramedCloudPopupContent { + padding: 5px; + overflow: auto; +} + +.olControlNoSelect { + -moz-user-select: none; + -khtml-user-select: none; +} + +.olImageLoadError { + background-color: pink; + opacity: 0.5; + filter: alpha(opacity=50); /* IE */ +} + +/** + * Cursor styles + */ + +.olCursorWait { + cursor: wait; +} +.olDragDown { + cursor: move; +} +.olDrawBox { + cursor: crosshair; +} +.olControlDragFeatureOver { + cursor: move; +} +.olControlDragFeatureActive.olControlDragFeatureOver.olDragDown { + cursor: -moz-grabbing; +} + +/** + * Layer switcher + */ +.olControlLayerSwitcher { + position: absolute; + top: 25px; + right: 0; + width: 20em; + font-family: sans-serif; + font-weight: bold; + margin-top: 3px; + margin-left: 3px; + margin-bottom: 3px; + font-size: smaller; + color: white; + background-color: transparent; +} + +.olControlLayerSwitcher .layersDiv { + padding-top: 5px; + padding-left: 10px; + padding-bottom: 5px; + padding-right: 10px; + background-color: darkblue; +} + +.olControlLayerSwitcher .layersDiv .baseLbl, +.olControlLayerSwitcher .layersDiv .dataLbl { + margin-top: 3px; + margin-left: 3px; + margin-bottom: 3px; +} + +.olControlLayerSwitcher .layersDiv .baseLayersDiv, +.olControlLayerSwitcher .layersDiv .dataLayersDiv { + padding-left: 10px; +} + +.olControlLayerSwitcher .maximizeDiv, +.olControlLayerSwitcher .minimizeDiv { + width: 18px; + height: 18px; + top: 5px; + right: 0; + cursor: pointer; +} + +.olBingAttribution { + color: #DDD; +} +.olBingAttribution.road { + color: #333; +} + +.olGoogleAttribution.hybrid, .olGoogleAttribution.satellite { + color: #EEE; +} +.olGoogleAttribution { + color: #333; +} +span.olGoogleAttribution a { + color: #77C; +} +span.olGoogleAttribution.hybrid a, span.olGoogleAttribution.satellite a { + color: #EEE; +} + +/** + * Editing and navigation icons. + * (using the editing_tool_bar.png sprint image) + */ +.olControlNavToolbar , +.olControlEditingToolbar { + margin: 5px 5px 0 0; +} +.olControlNavToolbar div, +.olControlEditingToolbar div { + background-image: url("img/editing_tool_bar.png"); + background-repeat: no-repeat; + margin: 0 0 5px 5px; + width: 24px; + height: 22px; + cursor: pointer +} +/* positions */ +.olControlEditingToolbar { + right: 0; + top: 0; +} +.olControlNavToolbar { + top: 295px; + left: 9px; +} +/* layouts */ +.olControlEditingToolbar div { + float: right; +} +/* individual controls */ +.olControlNavToolbar .olControlNavigationItemInactive, +.olControlEditingToolbar .olControlNavigationItemInactive { + background-position: -103px -1px; +} +.olControlNavToolbar .olControlNavigationItemActive , +.olControlEditingToolbar .olControlNavigationItemActive { + background-position: -103px -24px; +} +.olControlNavToolbar .olControlZoomBoxItemInactive { + background-position: -128px -1px; +} +.olControlNavToolbar .olControlZoomBoxItemActive { + background-position: -128px -24px; +} +.olControlEditingToolbar .olControlDrawFeaturePointItemInactive { + background-position: -77px -1px; +} +.olControlEditingToolbar .olControlDrawFeaturePointItemActive { + background-position: -77px -24px; +} +.olControlEditingToolbar .olControlDrawFeaturePathItemInactive { + background-position: -51px -1px; +} +.olControlEditingToolbar .olControlDrawFeaturePathItemActive { + background-position: -51px -24px; +} +.olControlEditingToolbar .olControlDrawFeaturePolygonItemInactive{ + background-position: -26px -1px; +} +.olControlEditingToolbar .olControlDrawFeaturePolygonItemActive { + background-position: -26px -24px; +} + +div.olControlZoom { + position: absolute; + top: 8px; + left: 8px; + background: rgba(255,255,255,0.4); + border-radius: 4px; + padding: 2px; +} +div.olControlZoom a { + display: block; + margin: 1px; + padding: 0; + color: white; + font-size: 18px; + font-family: 'Lucida Grande', Verdana, Geneva, Lucida, Arial, Helvetica, sans-serif; + font-weight: bold; + text-decoration: none; + text-align: center; + height: 22px; + width:22px; + line-height: 19px; + background: #130085; /* fallback for IE - IE6 requires background shorthand*/ + background: rgba(0, 60, 136, 0.5); + filter: alpha(opacity=80); +} +div.olControlZoom a:hover { + background: #130085; /* fallback for IE */ + background: rgba(0, 60, 136, 0.7); + filter: alpha(opacity=100); +} +@media only screen and (max-width: 600px) { + div.olControlZoom a:hover { + background: rgba(0, 60, 136, 0.5); + } +} +a.olControlZoomIn { + border-radius: 4px 4px 0 0; +} +a.olControlZoomOut { + border-radius: 0 0 4px 4px; +} + + +/** + * Animations + */ + +.olLayerGrid .olTileImage { + -webkit-transition: opacity 0.2s linear; + -moz-transition: opacity 0.2s linear; + -o-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; +} diff --git a/PanoramicView/tilemapresource.xml b/PanoramicView/tilemapresource.xml new file mode 100644 index 0000000000000000000000000000000000000000..7eea67abc11746f7a926ddd7414a7b5fc33c3db3 --- /dev/null +++ b/PanoramicView/tilemapresource.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> + <TileMap version="1.0.0" tilemapservice="http://tms.osgeo.org/1.0.0"> + <Title>HiGal Pano Inner Galaxy Full Resolution.tif</Title> + <Abstract></Abstract> + <SRS></SRS> + <BoundingBox minx="0.00000000000000" miny="-4398.00000000000000" maxx="270674.00000000000000" maxy="0.00000000000000"/> + <Origin x="0.00000000000000" y="-4398.00000000000000"/> + <TileFormat width="256" height="256" mime-type="image/png" extension="png"/> + <TileSets profile="raster"> + <TileSet href="0" units-per-pixel="2048.00000000000000" order="0"/> + <TileSet href="1" units-per-pixel="1024.00000000000000" order="1"/> + <TileSet href="2" units-per-pixel="512.00000000000000" order="2"/> + <TileSet href="3" units-per-pixel="256.00000000000000" order="3"/> + <TileSet href="4" units-per-pixel="128.00000000000000" order="4"/> + <TileSet href="5" units-per-pixel="64.00000000000000" order="5"/> + <TileSet href="6" units-per-pixel="32.00000000000000" order="6"/> + <TileSet href="7" units-per-pixel="16.00000000000000" order="7"/> + <TileSet href="8" units-per-pixel="8.00000000000000" order="8"/> + <TileSet href="9" units-per-pixel="4.00000000000000" order="9"/> + <TileSet href="10" units-per-pixel="2.00000000000000" order="10"/> + <TileSet href="11" units-per-pixel="1.00000000000000" order="11"/> + </TileSets> + </TileMap> + \ No newline at end of file