/* OpenLayers.js -- OpenLayers Map Viewer Library Copyright 2005-2008 MetaCarta, Inc., released under the Clear BSD license. Please see http://svn.openlayers.org/trunk/openlayers/license.txt for the full text of the license. Includes compressed code under the following licenses: (For uncompressed versions of the code used please see the OpenLayers SVN repository: ) */ /* Contains portions of Prototype.js: * * Prototype JavaScript framework, version 1.4.0 * (c) 2005 Sam Stephenson * * Prototype is freely distributable under the terms of an MIT-style license. * For details, see the Prototype web site: http://prototype.conio.net/ * *--------------------------------------------------------------------------*/ /** * * Contains portions of Rico * * 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. * **/ /** * Contains XMLHttpRequest.js * Copyright 2007 Sergey Ilinsky (http://www.ilinsky.com) * * 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 */ /** * Contains portions of Gears * * Copyright 2007, Google Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * 3. Neither the name of Google Inc. nor the names of its contributors may be * used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Sets up google.gears.*, which is *the only* supported way to access Gears. * * Circumvent this file at your own risk! * * In the future, Gears may automatically define google.gears.* without this * file. Gears may use these objects to transparently fix bugs and compatibility * issues. Applications that use the code below will continue to work seamlessly * when that happens. */ var OpenLayers = { singleFile: true }; (function () { var singleFile = (typeof OpenLayers == "object" && OpenLayers.singleFile); var scriptLocation; window.OpenLayers = { _scriptName: (!singleFile) ? "lib/OpenLayers.js" : "OpenLayers.js", _getScriptLocation: function () { if (scriptLocation != undefined) { return scriptLocation; } scriptLocation = ""; var isOL = new RegExp("(^|(.*?\\/))(" + OpenLayers._scriptName + ")(\\?|$)"); var scripts = document.getElementsByTagName('script'); for (var i = 0, len = scripts.length; i < len; i++) { var src = scripts[i].getAttribute('src'); if (src) { var match = src.match(isOL); if (match) { scriptLocation = match[1]; break; } } } return scriptLocation; } }; if (!singleFile) { var jsfiles = new Array("OpenLayers/Util.js", "OpenLayers/BaseTypes.js", "OpenLayers/BaseTypes/Class.js", "OpenLayers/BaseTypes/Bounds.js", "OpenLayers/BaseTypes/Element.js", "OpenLayers/BaseTypes/LonLat.js", "OpenLayers/BaseTypes/Pixel.js", "OpenLayers/BaseTypes/Size.js", "OpenLayers/Console.js", "OpenLayers/Tween.js", "Rico/Corner.js", "Rico/Color.js", "OpenLayers/Ajax.js", "OpenLayers/Events.js", "OpenLayers/Request.js", "OpenLayers/Request/XMLHttpRequest.js", "OpenLayers/Projection.js", "OpenLayers/Map.js", "OpenLayers/Layer.js", "OpenLayers/Icon.js", "OpenLayers/Marker.js", "OpenLayers/Marker/Box.js", "OpenLayers/Popup.js", "OpenLayers/Tile.js", "OpenLayers/Tile/Image.js", "OpenLayers/Tile/Image/IFrame.js", "OpenLayers/Tile/WFS.js", "OpenLayers/Layer/Image.js", "OpenLayers/Layer/SphericalMercator.js", "OpenLayers/Layer/EventPane.js", "OpenLayers/Layer/FixedZoomLevels.js", "OpenLayers/Layer/Google.js", "OpenLayers/Layer/VirtualEarth.js", "OpenLayers/Layer/Yahoo.js", "OpenLayers/Layer/HTTPRequest.js", "OpenLayers/Layer/Grid.js", "OpenLayers/Layer/MapGuide.js", "OpenLayers/Layer/MapServer.js", "OpenLayers/Layer/MapServer/Untiled.js", "OpenLayers/Layer/KaMap.js", "OpenLayers/Layer/KaMapCache.js", "OpenLayers/Layer/MultiMap.js", "OpenLayers/Layer/Markers.js", "OpenLayers/Layer/Text.js", "OpenLayers/Layer/WorldWind.js", "OpenLayers/Layer/ArcGIS93Rest.js", "OpenLayers/Layer/WMS.js", "OpenLayers/Layer/WMS/Untiled.js", "OpenLayers/Layer/WMS/Post.js", "OpenLayers/Layer/ArcIMS.js", "OpenLayers/Layer/GeoRSS.js", "OpenLayers/Layer/Boxes.js", "OpenLayers/Layer/XYZ.js", "OpenLayers/Layer/TMS.js", "OpenLayers/Layer/TileCache.js", "OpenLayers/Layer/Zoomify.js", "OpenLayers/Popup/Anchored.js", "OpenLayers/Popup/AnchoredBubble.js", "OpenLayers/Popup/Framed.js", "OpenLayers/Popup/FramedCloud.js", "OpenLayers/Feature.js", "OpenLayers/Feature/Vector.js", "OpenLayers/Feature/WFS.js", "OpenLayers/Handler.js", "OpenLayers/Handler/Click.js", "OpenLayers/Handler/Hover.js", "OpenLayers/Handler/Point.js", "OpenLayers/Handler/Path.js", "OpenLayers/Handler/Polygon.js", "OpenLayers/Handler/Feature.js", "OpenLayers/Handler/Drag.js", "OpenLayers/Handler/RegularPolygon.js", "OpenLayers/Handler/Box.js", "OpenLayers/Handler/MouseWheel.js", "OpenLayers/Handler/Keyboard.js", "OpenLayers/Control.js", "OpenLayers/Control/Attribution.js", "OpenLayers/Control/Button.js", "OpenLayers/Control/ZoomBox.js", "OpenLayers/Control/ZoomToMaxExtent.js", "OpenLayers/Control/DragPan.js", "OpenLayers/Control/Navigation.js", "OpenLayers/Control/MouseDefaults.js", "OpenLayers/Control/MousePosition.js", "OpenLayers/Control/OverviewMap.js", "OpenLayers/Control/KeyboardDefaults.js", "OpenLayers/Control/PanZoom.js", "OpenLayers/Control/PanZoomBar.js", "OpenLayers/Control/ArgParser.js", "OpenLayers/Control/Permalink.js", "OpenLayers/Control/Scale.js", "OpenLayers/Control/ScaleLine.js", "OpenLayers/Control/Snapping.js", "OpenLayers/Control/Split.js", "OpenLayers/Control/LayerSwitcher.js", "OpenLayers/Control/DrawFeature.js", "OpenLayers/Control/DragFeature.js", "OpenLayers/Control/ModifyFeature.js", "OpenLayers/Control/Panel.js", "OpenLayers/Control/SelectFeature.js", "OpenLayers/Control/NavigationHistory.js", "OpenLayers/Control/Measure.js", "OpenLayers/Control/WMSGetFeatureInfo.js", "OpenLayers/Control/Graticule.js", "OpenLayers/Control/TransformFeature.js", "OpenLayers/Geometry.js", "OpenLayers/Geometry/Rectangle.js", "OpenLayers/Geometry/Collection.js", "OpenLayers/Geometry/Point.js", "OpenLayers/Geometry/MultiPoint.js", "OpenLayers/Geometry/Curve.js", "OpenLayers/Geometry/LineString.js", "OpenLayers/Geometry/LinearRing.js", "OpenLayers/Geometry/Polygon.js", "OpenLayers/Geometry/MultiLineString.js", "OpenLayers/Geometry/MultiPolygon.js", "OpenLayers/Geometry/Surface.js", "OpenLayers/Renderer.js", "OpenLayers/Renderer/Elements.js", "OpenLayers/Renderer/SVG.js", "OpenLayers/Renderer/Canvas.js", "OpenLayers/Renderer/VML.js", "OpenLayers/Layer/Vector.js", "OpenLayers/Layer/Vector/RootContainer.js", "OpenLayers/Strategy.js", "OpenLayers/Strategy/Fixed.js", "OpenLayers/Strategy/Cluster.js", "OpenLayers/Strategy/Paging.js", "OpenLayers/Strategy/BBOX.js", "OpenLayers/Strategy/Save.js", "OpenLayers/Strategy/Refresh.js", "OpenLayers/Filter.js", "OpenLayers/Filter/FeatureId.js", "OpenLayers/Filter/Logical.js", "OpenLayers/Filter/Comparison.js", "OpenLayers/Filter/Spatial.js", "OpenLayers/Protocol.js", "OpenLayers/Protocol/HTTP.js", "OpenLayers/Protocol/SQL.js", "OpenLayers/Protocol/SQL/Gears.js", "OpenLayers/Protocol/WFS.js", "OpenLayers/Protocol/WFS/v1.js", "OpenLayers/Protocol/WFS/v1_0_0.js", "OpenLayers/Protocol/WFS/v1_1_0.js", "OpenLayers/Protocol/SOS.js", "OpenLayers/Protocol/SOS/v1_0_0.js", "OpenLayers/Layer/PointTrack.js", "OpenLayers/Layer/GML.js", "OpenLayers/Style.js", "OpenLayers/StyleMap.js", "OpenLayers/Rule.js", "OpenLayers/Format.js", "OpenLayers/Format/XML.js", "OpenLayers/Format/ArcXML.js", "OpenLayers/Format/ArcXML/Features.js", "OpenLayers/Format/GML.js", "OpenLayers/Format/GML/Base.js", "OpenLayers/Format/GML/v2.js", "OpenLayers/Format/GML/v3.js", "OpenLayers/Format/Atom.js", "OpenLayers/Format/KML.js", "OpenLayers/Format/GeoRSS.js", "OpenLayers/Format/WFS.js", "OpenLayers/Format/WFSCapabilities.js", "OpenLayers/Format/WFSCapabilities/v1.js", "OpenLayers/Format/WFSCapabilities/v1_0_0.js", "OpenLayers/Format/WFSCapabilities/v1_1_0.js", "OpenLayers/Format/WFSDescribeFeatureType.js", "OpenLayers/Format/WMSDescribeLayer.js", "OpenLayers/Format/WMSDescribeLayer/v1_1.js", "OpenLayers/Format/WKT.js", "OpenLayers/Format/OSM.js", "OpenLayers/Format/GPX.js", "OpenLayers/Format/Filter.js", "OpenLayers/Format/Filter/v1.js", "OpenLayers/Format/Filter/v1_0_0.js", "OpenLayers/Format/Filter/v1_1_0.js", "OpenLayers/Format/SLD.js", "OpenLayers/Format/SLD/v1.js", "OpenLayers/Format/SLD/v1_0_0.js", "OpenLayers/Format/CSWGetDomain.js", "OpenLayers/Format/CSWGetDomain/v2_0_2.js", "OpenLayers/Format/CSWGetRecords.js", "OpenLayers/Format/CSWGetRecords/v2_0_2.js", "OpenLayers/Format/WFST.js", "OpenLayers/Format/WFST/v1.js", "OpenLayers/Format/WFST/v1_0_0.js", "OpenLayers/Format/WFST/v1_1_0.js", "OpenLayers/Format/Text.js", "OpenLayers/Format/JSON.js", "OpenLayers/Format/GeoJSON.js", "OpenLayers/Format/WMC.js", "OpenLayers/Format/WMC/v1.js", "OpenLayers/Format/WMC/v1_0_0.js", "OpenLayers/Format/WMC/v1_1_0.js", "OpenLayers/Format/WMSCapabilities.js", "OpenLayers/Format/WMSCapabilities/v1.js", "OpenLayers/Format/WMSCapabilities/v1_1.js", "OpenLayers/Format/WMSCapabilities/v1_1_0.js", "OpenLayers/Format/WMSCapabilities/v1_1_1.js", "OpenLayers/Format/WMSCapabilities/v1_3.js", "OpenLayers/Format/WMSCapabilities/v1_3_0.js", "OpenLayers/Format/WMSGetFeatureInfo.js", "OpenLayers/Format/OWSCommon/v1_1_0.js", "OpenLayers/Format/SOSCapabilities.js", "OpenLayers/Format/SOSCapabilities/v1_0_0.js", "OpenLayers/Format/SOSGetObservation.js", "OpenLayers/Format/SOSGetFeatureOfInterest.js", "OpenLayers/Layer/WFS.js", "OpenLayers/Control/GetFeature.js", "OpenLayers/Control/MouseToolbar.js", "OpenLayers/Control/NavToolbar.js", "OpenLayers/Control/PanPanel.js", "OpenLayers/Control/Pan.js", "OpenLayers/Control/ZoomIn.js", "OpenLayers/Control/ZoomOut.js", "OpenLayers/Control/ZoomPanel.js", "OpenLayers/Control/EditingToolbar.js", "OpenLayers/Lang.js", "OpenLayers/Lang/en.js"); var agent = navigator.userAgent; var docWrite = (agent.match("MSIE") || agent.match("Safari")); if (docWrite) { var allScriptTags = new Array(jsfiles.length); } var host = OpenLayers._getScriptLocation() + "lib/"; for (var i = 0, len = jsfiles.length; i < len; i++) { if (docWrite) { allScriptTags[i] = ""; } else { var s = document.createElement("script"); s.src = host + jsfiles[i]; var h = document.getElementsByTagName("head").length ? document.getElementsByTagName("head")[0] : document.body; h.appendChild(s); } } if (docWrite) { document.write(allScriptTags.join("")); } } })(); OpenLayers.VERSION_NUMBER = "$Revision: 26218 $"; OpenLayers.String = { startsWith: function (str, sub) { return (str.indexOf(sub) == 0); }, contains: function (str, sub) { return (str.indexOf(sub) != -1); }, trim: function (str) { return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }, camelize: function (str) { var oStringList = str.split('-'); var camelizedString = oStringList[0]; for (var i = 1, len = oStringList.length; i < len; i++) { var s = oStringList[i]; camelizedString += s.charAt(0).toUpperCase() + s.substring(1); } return camelizedString; }, format: function (template, context, args) { if (!context) { context = window; } var replacer = function (str, match) { var replacement; var subs = match.split(/\.+/); for (var i = 0; i < subs.length; i++) { if (i == 0) { replacement = context; } replacement = replacement[subs[i]]; } if (typeof replacement == "function") { replacement = args ? replacement.apply(null, args) : replacement(); } if (typeof replacement == 'undefined') { return 'undefined'; } else { return replacement; } }; return template.replace(OpenLayers.String.tokenRegEx, replacer); }, tokenRegEx: /\$\{([\w.]+?)\}/g, numberRegEx: /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/, isNumeric: function (value) { return OpenLayers.String.numberRegEx.test(value); }, numericIf: function (value) { return OpenLayers.String.isNumeric(value) ? parseFloat(value) : value; } }; if (!String.prototype.startsWith) { String.prototype.startsWith = function (sStart) { OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated", { 'newMethod': 'OpenLayers.String.startsWith' })); return OpenLayers.String.startsWith(this, sStart); }; } if (!String.prototype.contains) { String.prototype.contains = function (str) { OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated", { 'newMethod': 'OpenLayers.String.contains' })); return OpenLayers.String.contains(this, str); }; } if (!String.prototype.trim) { String.prototype.trim = function () { OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated", { 'newMethod': 'OpenLayers.String.trim' })); return OpenLayers.String.trim(this); }; } if (!String.prototype.camelize) { String.prototype.camelize = function () { OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated", { 'newMethod': 'OpenLayers.String.camelize' })); return OpenLayers.String.camelize(this); }; } OpenLayers.Number = { decimalSeparator: ".", thousandsSeparator: ",", limitSigDigs: function (num, sig) { var fig = 0; if (sig > 0) { fig = parseFloat(num.toPrecision(sig)); } return fig; }, format: function (num, dec, tsep, dsep) { dec = (typeof dec != "undefined") ? dec : 0; tsep = (typeof tsep != "undefined") ? tsep : OpenLayers.Number.thousandsSeparator; dsep = (typeof dsep != "undefined") ? dsep : OpenLayers.Number.decimalSeparator; if (dec != null) { num = parseFloat(num.toFixed(dec)); } var parts = num.toString().split("."); if (parts.length == 1 && dec == null) { dec = 0; } var integer = parts[0]; if (tsep) { var thousands = /(-?[0-9]+)([0-9]{3})/; while (thousands.test(integer)) { integer = integer.replace(thousands, "$1" + tsep + "$2"); } } var str; if (dec == 0) { str = integer; } else { var rem = parts.length > 1 ? parts[1] : "0"; if (dec != null) { rem = rem + new Array(dec - rem.length + 1).join("0"); } str = integer + dsep + rem; } return str; } }; if (!Number.prototype.limitSigDigs) { Number.prototype.limitSigDigs = function (sig) { OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated", { 'newMethod': 'OpenLayers.Number.limitSigDigs' })); return OpenLayers.Number.limitSigDigs(this, sig); }; } OpenLayers.Function = { bind: function (func, object) { var args = Array.prototype.slice.apply(arguments, [2]); return function () { var newArgs = args.concat(Array.prototype.slice.apply(arguments, [0])); return func.apply(object, newArgs); }; }, bindAsEventListener: function (func, object) { return function (event) { return func.call(object, event || window.event); }; }, False: function () { return false; }, True: function () { return true; } }; if (!Function.prototype.bind) { Function.prototype.bind = function () { OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated", { 'newMethod': 'OpenLayers.Function.bind' })); Array.prototype.unshift.apply(arguments, [this]); return OpenLayers.Function.bind.apply(null, arguments); }; } if (!Function.prototype.bindAsEventListener) { Function.prototype.bindAsEventListener = function (object) { OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated", { 'newMethod': 'OpenLayers.Function.bindAsEventListener' })); return OpenLayers.Function.bindAsEventListener(this, object); }; } OpenLayers.Array = { filter: function (array, callback, caller) { var selected = []; if (Array.prototype.filter) { selected = array.filter(callback, caller); } else { var len = array.length; if (typeof callback != "function") { throw new TypeError(); } for (var i = 0; i < len; i++) { if (i in array) { var val = array[i]; if (callback.call(caller, val, i, array)) { selected.push(val); } } } } return selected; } }; OpenLayers.Class = function () { var Class = function () { if (arguments && arguments[0] != OpenLayers.Class.isPrototype) { this.initialize.apply(this, arguments); } }; var extended = {}; var parent, initialize; for (var i = 0, len = arguments.length; i < len; ++i) { if (typeof arguments[i] == "function") { if (i == 0 && len > 1) { initialize = arguments[i].prototype.initialize; arguments[i].prototype.initialize = function () {}; extended = new arguments[i]; if (initialize === undefined) { delete arguments[i].prototype.initialize; } else { arguments[i].prototype.initialize = initialize; } } parent = arguments[i].prototype; } else { parent = arguments[i]; } OpenLayers.Util.extend(extended, parent); } Class.prototype = extended; return Class; }; OpenLayers.Class.isPrototype = function () {}; OpenLayers.Class.create = function () { return function () { if (arguments && arguments[0] != OpenLayers.Class.isPrototype) { this.initialize.apply(this, arguments); } }; }; OpenLayers.Class.inherit = function () { var superClass = arguments[0]; var proto = new superClass(OpenLayers.Class.isPrototype); for (var i = 1, len = arguments.length; i < len; i++) { if (typeof arguments[i] == "function") { var mixin = arguments[i]; arguments[i] = new mixin(OpenLayers.Class.isPrototype); } OpenLayers.Util.extend(proto, arguments[i]); } return proto; }; OpenLayers.Util = {}; OpenLayers.Util.getElement = function () { var elements = []; for (var i = 0, len = arguments.length; i < len; i++) { var element = arguments[i]; if (typeof element == 'string') { element = document.getElementById(element); } if (arguments.length == 1) { return element; } elements.push(element); } return elements; }; OpenLayers.Util.isElement = function (o) { return !!(o && o.nodeType === 1); }; if (typeof window.$ === "undefined") { window.$ = OpenLayers.Util.getElement; } OpenLayers.Util.extend = function (destination, source) { destination = destination || {}; if (source) { for (var property in source) { var value = source[property]; if (value !== undefined) { destination[property] = value; } } var sourceIsEvt = typeof window.Event == "function" && source instanceof window.Event; if (!sourceIsEvt && source.hasOwnProperty && source.hasOwnProperty('toString')) { destination.toString = source.toString; } } return destination; }; OpenLayers.Util.removeItem = function (array, item) { for (var i = array.length - 1; i >= 0; i--) { if (array[i] == item) { array.splice(i, 1); } } return array; }; OpenLayers.Util.clearArray = function (array) { OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated", { 'newMethod': 'array = []' })); array.length = 0; }; OpenLayers.Util.indexOf = function (array, obj) { if (typeof array.indexOf == "function") { return array.indexOf(obj); } else { for (var i = 0, len = array.length; i < len; i++) { if (array[i] == obj) { return i; } } return -1; } }; OpenLayers.Util.modifyDOMElement = function (element, id, px, sz, position, border, overflow, opacity) { if (id) { element.id = id; } if (px) { element.style.left = px.x + "px"; element.style.top = px.y + "px"; } if (sz) { element.style.width = sz.w + "px"; element.style.height = sz.h + "px"; } if (position) { element.style.position = position; } if (border) { element.style.border = border; } if (overflow) { element.style.overflow = overflow; } if (parseFloat(opacity) >= 0.0 && parseFloat(opacity) < 1.0) { element.style.filter = 'alpha(opacity=' + (opacity * 100) + ')'; element.style.opacity = opacity; } else if (parseFloat(opacity) == 1.0) { element.style.filter = ''; element.style.opacity = ''; } }; OpenLayers.Util.createDiv = function (id, px, sz, imgURL, position, border, overflow, opacity) { var dom = document.createElement('div'); if (imgURL) { dom.style.backgroundImage = 'url(' + imgURL + ')'; } if (!id) { id = OpenLayers.Util.createUniqueID("OpenLayersDiv"); } if (!position) { position = "absolute"; } OpenLayers.Util.modifyDOMElement(dom, id, px, sz, position, border, overflow, opacity); return dom; }; OpenLayers.Util.createImage = function (id, px, sz, imgURL, position, border, opacity, delayDisplay) { var image = document.createElement("img"); if (!id) { id = OpenLayers.Util.createUniqueID("OpenLayersDiv"); } if (!position) { position = "relative"; } OpenLayers.Util.modifyDOMElement(image, id, px, sz, position, border, null, opacity); if (delayDisplay) { image.style.display = "none"; OpenLayers.Event.observe(image, "load", OpenLayers.Function.bind(OpenLayers.Util.onImageLoad, image)); OpenLayers.Event.observe(image, "error", OpenLayers.Function.bind(OpenLayers.Util.onImageLoadError, image)); } image.style.alt = id; image.galleryImg = "no"; if (imgURL) { image.src = imgURL; } return image; }; OpenLayers.Util.setOpacity = function (element, opacity) { OpenLayers.Util.modifyDOMElement(element, null, null, null, null, null, null, opacity); }; OpenLayers.Util.onImageLoad = function () { if (!this.viewRequestID || (this.map && this.viewRequestID == this.map.viewRequestID)) { this.style.display = ""; } OpenLayers.Element.removeClass(this, "olImageLoadError"); }; OpenLayers.IMAGE_RELOAD_ATTEMPTS = 0; OpenLayers.Util.onImageLoadError = function () { this._attempts = (this._attempts) ? (this._attempts + 1) : 1; if (this._attempts <= OpenLayers.IMAGE_RELOAD_ATTEMPTS) { var urls = this.urls; if (urls && urls instanceof Array && urls.length > 1) { var src = this.src.toString(); var current_url, k; for (k = 0; current_url = urls[k]; k++) { if (src.indexOf(current_url) != -1) { break; } } var guess = Math.floor(urls.length * Math.random()); var new_url = urls[guess]; k = 0; while (new_url == current_url && k++ < 4) { guess = Math.floor(urls.length * Math.random()); new_url = urls[guess]; } this.src = src.replace(current_url, new_url); } else { this.src = this.src; } } else { OpenLayers.Element.addClass(this, "olImageLoadError"); } this.style.display = ""; }; OpenLayers.Util.alphaHackNeeded = null; OpenLayers.Util.alphaHack = function () { if (OpenLayers.Util.alphaHackNeeded == null) { var arVersion = navigator.appVersion.split("MSIE"); var version = parseFloat(arVersion[1]); var filter = false; try { filter = !! (document.body.filters); } catch (e) {} OpenLayers.Util.alphaHackNeeded = (filter && (version >= 5.5) && (version < 7)); } return OpenLayers.Util.alphaHackNeeded; }; OpenLayers.Util.modifyAlphaImageDiv = function (div, id, px, sz, imgURL, position, border, sizing, opacity) { OpenLayers.Util.modifyDOMElement(div, id, px, sz, position, null, null, opacity); var img = div.childNodes[0]; if (imgURL) { img.src = imgURL; } OpenLayers.Util.modifyDOMElement(img, div.id + "_innerImage", null, sz, "relative", border); if (OpenLayers.Util.alphaHack()) { if (div.style.display != "none") { div.style.display = "inline-block"; } if (sizing == null) { sizing = "scale"; } div.style.filter = "progid:DXImageTransform.Microsoft" + ".AlphaImageLoader(src='" + img.src + "', " + "sizingMethod='" + sizing + "')"; if (parseFloat(div.style.opacity) >= 0.0 && parseFloat(div.style.opacity) < 1.0) { div.style.filter += " alpha(opacity=" + div.style.opacity * 100 + ")"; } img.style.filter = "alpha(opacity=0)"; } }; OpenLayers.Util.createAlphaImageDiv = function (id, px, sz, imgURL, position, border, sizing, opacity, delayDisplay) { var div = OpenLayers.Util.createDiv(); var img = OpenLayers.Util.createImage(null, null, null, null, null, null, null, false); div.appendChild(img); if (delayDisplay) { img.style.display = "none"; OpenLayers.Event.observe(img, "load", OpenLayers.Function.bind(OpenLayers.Util.onImageLoad, div)); OpenLayers.Event.observe(img, "error", OpenLayers.Function.bind(OpenLayers.Util.onImageLoadError, div)); } OpenLayers.Util.modifyAlphaImageDiv(div, id, px, sz, imgURL, position, border, sizing, opacity); return div; }; OpenLayers.Util.upperCaseObject = function (object) { var uObject = {}; for (var key in object) { uObject[key.toUpperCase()] = object[key]; } return uObject; }; OpenLayers.Util.applyDefaults = function (to, from) { to = to || {}; var fromIsEvt = typeof window.Event == "function" && from instanceof window.Event; for (var key in from) { if (to[key] === undefined || (!fromIsEvt && from.hasOwnProperty && from.hasOwnProperty(key) && !to.hasOwnProperty(key))) { to[key] = from[key]; } } if (!fromIsEvt && from && from.hasOwnProperty && from.hasOwnProperty('toString') && !to.hasOwnProperty('toString')) { to.toString = from.toString; } return to; }; OpenLayers.Util.getParameterString = function (params) { var paramsArray = []; for (var key in params) { var value = params[key]; if ((value != null) && (typeof value != 'function')) { var encodedValue; if (typeof value == 'object' && value.constructor == Array) { var encodedItemArray = []; var item; for (var itemIndex = 0, len = value.length; itemIndex < len; itemIndex++) { item = value[itemIndex]; encodedItemArray.push(encodeURIComponent((item === null || item === undefined) ? "" : item)); } encodedValue = encodedItemArray.join(","); } else { encodedValue = encodeURIComponent(value); } paramsArray.push(encodeURIComponent(key) + "=" + encodedValue); } } return paramsArray.join("&"); }; OpenLayers.Util.urlAppend = function (url, paramStr) { var newUrl = url; if (paramStr) { var parts = (url + " ").split(/[?&]/); newUrl += (parts.pop() === " " ? paramStr : parts.length ? "&" + paramStr : "?" + paramStr); } return newUrl; }; OpenLayers.ImgPath = ''; OpenLayers.Util.getImagesLocation = function () { return OpenLayers.ImgPath || (OpenLayers._getScriptLocation() + "img/"); }; OpenLayers.Util.Try = function () { var returnValue = null; for (var i = 0, len = arguments.length; i < len; i++) { var lambda = arguments[i]; try { returnValue = lambda(); break; } catch (e) {} } return returnValue; }; OpenLayers.Util.getNodes = function (p, tagName) { var nodes = OpenLayers.Util.Try(function () { return OpenLayers.Util._getNodes(p.documentElement.childNodes, tagName); }, function () { return OpenLayers.Util._getNodes(p.childNodes, tagName); }); return nodes; }; OpenLayers.Util._getNodes = function (nodes, tagName) { var retArray = []; for (var i = 0, len = nodes.length; i < len; i++) { if (nodes[i].nodeName == tagName) { retArray.push(nodes[i]); } } return retArray; }; OpenLayers.Util.getTagText = function (parent, item, index) { var result = OpenLayers.Util.getNodes(parent, item); if (result && (result.length > 0)) { if (!index) { index = 0; } if (result[index].childNodes.length > 1) { return result.childNodes[1].nodeValue; } else if (result[index].childNodes.length == 1) { return result[index].firstChild.nodeValue; } } else { return ""; } }; OpenLayers.Util.getXmlNodeValue = function (node) { var val = null; OpenLayers.Util.Try(function () { val = node.text; if (!val) { val = node.textContent; } if (!val) { val = node.firstChild.nodeValue; } }, function () { val = node.textContent; }); return val; }; OpenLayers.Util.mouseLeft = function (evt, div) { var target = (evt.relatedTarget) ? evt.relatedTarget : evt.toElement; while (target != div && target != null) { target = target.parentNode; } return (target != div); }; OpenLayers.Util.DEFAULT_PRECISION = 14; OpenLayers.Util.toFloat = function (number, precision) { if (precision == null) { precision = OpenLayers.Util.DEFAULT_PRECISION; } var number; if (precision == 0) { number = parseFloat(number); } else { number = parseFloat(parseFloat(number).toPrecision(precision)); } return number; }; OpenLayers.Util.rad = function (x) { return x * Math.PI / 180; }; OpenLayers.Util.distVincenty = function (p1, p2) { var a = 6378137, b = 6356752.3142, f = 1 / 298.257223563; var L = OpenLayers.Util.rad(p2.lon - p1.lon); var U1 = Math.atan((1 - f) * Math.tan(OpenLayers.Util.rad(p1.lat))); var U2 = Math.atan((1 - f) * Math.tan(OpenLayers.Util.rad(p2.lat))); var sinU1 = Math.sin(U1), cosU1 = Math.cos(U1); var sinU2 = Math.sin(U2), cosU2 = Math.cos(U2); var lambda = L, lambdaP = 2 * Math.PI; var iterLimit = 20; while (Math.abs(lambda - lambdaP) > 1e-12 && --iterLimit > 0) { var sinLambda = Math.sin(lambda), cosLambda = Math.cos(lambda); var sinSigma = Math.sqrt((cosU2 * sinLambda) * (cosU2 * sinLambda) + (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda) * (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda)); if (sinSigma == 0) { return 0; } var cosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda; var sigma = Math.atan2(sinSigma, cosSigma); var alpha = Math.asin(cosU1 * cosU2 * sinLambda / sinSigma); var cosSqAlpha = Math.cos(alpha) * Math.cos(alpha); var cos2SigmaM = cosSigma - 2 * sinU1 * sinU2 / cosSqAlpha; var C = f / 16 * cosSqAlpha * (4 + f * (4 - 3 * cosSqAlpha)); lambdaP = lambda; lambda = L + (1 - C) * f * Math.sin(alpha) * (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM))); } if (iterLimit == 0) { return NaN; } var uSq = cosSqAlpha * (a * a - b * b) / (b * b); var A = 1 + uSq / 16384 * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq))); var B = uSq / 1024 * (256 + uSq * (-128 + uSq * (74 - 47 * uSq))); var deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * (cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM) - B / 6 * cos2SigmaM * (-3 + 4 * sinSigma * sinSigma) * (-3 + 4 * cos2SigmaM * cos2SigmaM))); var s = b * A * (sigma - deltaSigma); var d = s.toFixed(3) / 1000; return d; }; OpenLayers.Util.getParameters = function (url) { url = url || window.location.href; var paramsString = ""; if (OpenLayers.String.contains(url, '?')) { var start = url.indexOf('?') + 1; var end = OpenLayers.String.contains(url, "#") ? url.indexOf('#') : url.length; paramsString = url.substring(start, end); } var parameters = {}; var pairs = paramsString.split(/[&;]/); for (var i = 0, len = pairs.length; i < len; ++i) { var keyValue = pairs[i].split('='); if (keyValue[0]) { var key = decodeURIComponent(keyValue[0]); var value = keyValue[1] || ''; value = decodeURIComponent(value.replace(/\+/g, " ")).split(","); if (value.length == 1) { value = value[0]; } parameters[key] = value; } } return parameters; }; OpenLayers.Util.getArgs = function (url) { OpenLayers.Console.warn(OpenLayers.i18n("methodDeprecated", { 'newMethod': 'OpenLayers.Util.getParameters' })); return OpenLayers.Util.getParameters(url); }; OpenLayers.Util.lastSeqID = 0; OpenLayers.Util.createUniqueID = function (prefix) { if (prefix == null) { prefix = "id_"; } OpenLayers.Util.lastSeqID += 1; return prefix + OpenLayers.Util.lastSeqID; }; OpenLayers.INCHES_PER_UNIT = { 'inches': 1.0, 'ft': 12.0, 'mi': 63360.0, '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.02540005080010160020; OpenLayers.Util.extend(OpenLayers.INCHES_PER_UNIT, { "Inch": OpenLayers.INCHES_PER_UNIT.inches, "Meter": 1.0 / OpenLayers.METERS_PER_INCH, "Foot": 0.30480060960121920243 / OpenLayers.METERS_PER_INCH, "IFoot": 0.30480000000000000000 / OpenLayers.METERS_PER_INCH, "ClarkeFoot": 0.3047972651151 / OpenLayers.METERS_PER_INCH, "SearsFoot": 0.30479947153867624624 / OpenLayers.METERS_PER_INCH, "GoldCoastFoot": 0.30479971018150881758 / OpenLayers.METERS_PER_INCH, "IInch": 0.02540000000000000000 / OpenLayers.METERS_PER_INCH, "MicroInch": 0.00002540000000000000 / OpenLayers.METERS_PER_INCH, "Mil": 0.00000002540000000000 / OpenLayers.METERS_PER_INCH, "Centimeter": 0.01000000000000000000 / OpenLayers.METERS_PER_INCH, "Kilometer": 1000.00000000000000000000 / OpenLayers.METERS_PER_INCH, "Yard": 0.91440182880365760731 / OpenLayers.METERS_PER_INCH, "SearsYard": 0.914398414616029 / OpenLayers.METERS_PER_INCH, "IndianYard": 0.91439853074444079983 / 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.34721869443738887477 / OpenLayers.METERS_PER_INCH, "IYard": 0.91440000000000000000 / OpenLayers.METERS_PER_INCH, "IMile": 1609.34400000000000000000 / OpenLayers.METERS_PER_INCH, "NautM": 1852.00000000000000000000 / OpenLayers.METERS_PER_INCH, "Lat-66": 110943.316488932731 / OpenLayers.METERS_PER_INCH, "Lat-83": 110946.25736872234125 / OpenLayers.METERS_PER_INCH, "Decimeter": 0.10000000000000000000 / OpenLayers.METERS_PER_INCH, "Millimeter": 0.00100000000000000000 / OpenLayers.METERS_PER_INCH, "Dekameter": 10.00000000000000000000 / OpenLayers.METERS_PER_INCH, "Decameter": 10.00000000000000000000 / OpenLayers.METERS_PER_INCH, "Hectometer": 100.00000000000000000000 / 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.20116782494375872 / 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.00000000000000000000 / OpenLayers.METERS_PER_INCH, "ModAmFt": 0.304812252984505969011938 / OpenLayers.METERS_PER_INCH, "Fathom": 1.8288 / OpenLayers.METERS_PER_INCH, "NautM-UK": 1853.184 / OpenLayers.METERS_PER_INCH, "50kilometers": 50000.0 / OpenLayers.METERS_PER_INCH, "150kilometers": 150000.0 / OpenLayers.METERS_PER_INCH }); OpenLayers.Util.extend(OpenLayers.INCHES_PER_UNIT, { "mm": OpenLayers.INCHES_PER_UNIT["Meter"] / 1000.0, "cm": OpenLayers.INCHES_PER_UNIT["Meter"] / 100.0, "dm": OpenLayers.INCHES_PER_UNIT["Meter"] * 100.0, "km": OpenLayers.INCHES_PER_UNIT["Meter"] * 1000.0, "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 (scale) { var normScale = (scale > 1.0) ? (1.0 / scale) : scale; return normScale; }; OpenLayers.Util.getResolutionFromScale = function (scale, units) { var resolution; if (scale) { if (units == null) { units = "degrees"; } var normScale = OpenLayers.Util.normalizeScale(scale); resolution = 1 / (normScale * OpenLayers.INCHES_PER_UNIT[units] * OpenLayers.DOTS_PER_INCH); } return resolution; }; OpenLayers.Util.getScaleFromResolution = function (resolution, units) { if (units == null) { units = "degrees"; } var scale = resolution * OpenLayers.INCHES_PER_UNIT[units] * OpenLayers.DOTS_PER_INCH; return scale; }; OpenLayers.Util.safeStopPropagation = function (evt) { OpenLayers.Event.stop(evt, true); }; OpenLayers.Util.pagePosition = function (forElement) { var valueT = 0, valueL = 0; var element = forElement; var child = forElement; while (element) { if (element == document.body) { if (OpenLayers.Element.getStyle(child, 'position') == 'absolute') { break; } } valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; child = element; try { element = element.offsetParent; } catch (e) { OpenLayers.Console.error(OpenLayers.i18n("pagePositionFailed", { 'elemId': element.id })); break; } } element = forElement; while (element) { valueT -= element.scrollTop || 0; valueL -= element.scrollLeft || 0; element = element.parentNode; } return [valueL, valueT]; }; OpenLayers.Util.isEquivalentUrl = function (url1, url2, options) { options = options || {}; OpenLayers.Util.applyDefaults(options, { ignoreCase: true, ignorePort80: true, ignoreHash: true }); var urlObj1 = OpenLayers.Util.createUrlObject(url1, options); var urlObj2 = OpenLayers.Util.createUrlObject(url2, options); for (var key in urlObj1) { if (key !== "args") { if (urlObj1[key] != urlObj2[key]) { return false; } } } for (var key in urlObj1.args) { if (urlObj1.args[key] != urlObj2.args[key]) { return false; } delete urlObj2.args[key]; } for (var key in urlObj2.args) { return false; } return true; }; OpenLayers.Util.createUrlObject = function (url, options) { options = options || {}; if (!(/^\w+:\/\//).test(url)) { var loc = window.location; var port = loc.port ? ":" + loc.port : ""; var fullUrl = loc.protocol + "//" + loc.host.split(":").shift() + port; if (url.indexOf("/") === 0) { url = fullUrl + url; } else { var parts = loc.pathname.split("/"); parts.pop(); url = fullUrl + parts.join("/") + "/" + url; } } if (options.ignoreCase) { url = url.toLowerCase(); } var a = document.createElement('a'); a.href = url; var urlObject = {}; urlObject.host = a.host.split(":").shift(); urlObject.protocol = a.protocol; if (options.ignorePort80) { urlObject.port = (a.port == "80" || a.port == "0") ? "" : a.port; } else { urlObject.port = (a.port == "" || a.port == "0") ? "80" : a.port; } urlObject.hash = (options.ignoreHash || a.hash === "#") ? "" : a.hash; var queryString = a.search; if (!queryString) { var qMark = url.indexOf("?"); queryString = (qMark != -1) ? url.substr(qMark) : ""; } urlObject.args = OpenLayers.Util.getParameters(queryString); urlObject.pathname = (a.pathname.charAt(0) == "/") ? a.pathname : "/" + a.pathname; return urlObject; }; OpenLayers.Util.removeTail = function (url) { var head = null; var qMark = url.indexOf("?"); var hashMark = url.indexOf("#"); if (qMark == -1) { head = (hashMark != -1) ? url.substr(0, hashMark) : url; } else { head = (hashMark != -1) ? url.substr(0, Math.min(qMark, hashMark)) : url.substr(0, qMark); } return head; }; OpenLayers.Util.getBrowserName = function () { var browserName = ""; var ua = navigator.userAgent.toLowerCase(); if (ua.indexOf("opera") != -1) { browserName = "opera"; } else if (ua.indexOf("msie") != -1) { browserName = "msie"; } else if (ua.indexOf("safari") != -1) { browserName = "safari"; } else if (ua.indexOf("mozilla") != -1) { if (ua.indexOf("firefox") != -1) { browserName = "firefox"; } else { browserName = "mozilla"; } } return browserName; }; OpenLayers.Util.getRenderedDimensions = function (contentHTML, size, options) { var w, h; var container = document.createElement("div"); container.style.visibility = "hidden"; var containerElement = (options && options.containerElement) ? options.containerElement : document.body; if (size) { if (size.w) { w = size.w; container.style.width = w + "px"; } else if (size.h) { h = size.h; container.style.height = h + "px"; } } if (options && options.displayClass) { container.className = options.displayClass; } var content = document.createElement("div"); content.innerHTML = contentHTML; content.style.overflow = "visible"; if (content.childNodes) { for (var i = 0, l = content.childNodes.length; i < l; i++) { if (!content.childNodes[i].style) continue; content.childNodes[i].style.overflow = "visible"; } } container.appendChild(content); containerElement.appendChild(container); var parentHasPositionAbsolute = false; var parent = container.parentNode; while (parent && parent.tagName.toLowerCase() != "body") { var parentPosition = OpenLayers.Element.getStyle(parent, "position"); if (parentPosition == "absolute") { parentHasPositionAbsolute = true; break; } else if (parentPosition && parentPosition != "static") { break; } parent = parent.parentNode; } if (!parentHasPositionAbsolute) { container.style.position = "absolute"; } if (!w) { w = parseInt(content.scrollWidth); container.style.width = w + "px"; } if (!h) { h = parseInt(content.scrollHeight); } container.removeChild(content); containerElement.removeChild(container); return new OpenLayers.Size(w, h); }; OpenLayers.Util.getScrollbarWidth = function () { var scrollbarWidth = OpenLayers.Util._scrollbarWidth; if (scrollbarWidth == null) { var scr = null; var inn = null; var wNoScroll = 0; var wScroll = 0; scr = document.createElement('div'); scr.style.position = 'absolute'; scr.style.top = '-1000px'; scr.style.left = '-1000px'; scr.style.width = '100px'; scr.style.height = '50px'; scr.style.overflow = 'hidden'; inn = document.createElement('div'); inn.style.width = '100%'; inn.style.height = '200px'; scr.appendChild(inn); document.body.appendChild(scr); wNoScroll = inn.offsetWidth; scr.style.overflow = 'scroll'; wScroll = inn.offsetWidth; document.body.removeChild(document.body.lastChild); OpenLayers.Util._scrollbarWidth = (wNoScroll - wScroll); scrollbarWidth = OpenLayers.Util._scrollbarWidth; } return scrollbarWidth; }; OpenLayers.Util.getFormattedLonLat = function (coordinate, axis, dmsOption) { if (!dmsOption) { dmsOption = 'dms'; } var abscoordinate = Math.abs(coordinate) var coordinatedegrees = Math.floor(abscoordinate); var coordinateminutes = (abscoordinate - coordinatedegrees) / (1 / 60); var tempcoordinateminutes = coordinateminutes; coordinateminutes = Math.floor(coordinateminutes); var coordinateseconds = (tempcoordinateminutes - coordinateminutes) / (1 / 60); coordinateseconds = Math.round(coordinateseconds * 10); coordinateseconds /= 10; if (coordinatedegrees < 10) { coordinatedegrees = "0" + coordinatedegrees; } var str = coordinatedegrees + " "; if (dmsOption.indexOf('dm') >= 0) { if (coordinateminutes < 10) { coordinateminutes = "0" + coordinateminutes; } str += coordinateminutes + "'"; if (dmsOption.indexOf('dms') >= 0) { if (coordinateseconds < 10) { coordinateseconds = "0" + coordinateseconds; } str += coordinateseconds + '"'; } } if (axis == "lon") { str += coordinate < 0 ? OpenLayers.i18n("W") : OpenLayers.i18n("E"); } else { str += coordinate < 0 ? OpenLayers.i18n("S") : OpenLayers.i18n("N"); } return str; }; OpenLayers.Rico = new Object(); OpenLayers.Rico.Corner = { round: function (e, options) { e = OpenLayers.Util.getElement(e); this._setOptions(options); var color = this.options.color; if (this.options.color == "fromElement") { color = this._background(e); } var bgColor = this.options.bgColor; if (this.options.bgColor == "fromParent") { bgColor = this._background(e.offsetParent); } this._roundCornersImpl(e, color, bgColor); }, changeColor: function (theDiv, newColor) { theDiv.style.backgroundColor = newColor; var spanElements = theDiv.parentNode.getElementsByTagName("span"); for (var currIdx = 0; currIdx < spanElements.length; currIdx++) { spanElements[currIdx].style.backgroundColor = newColor; } }, changeOpacity: function (theDiv, newOpacity) { var mozillaOpacity = newOpacity; var ieOpacity = 'alpha(opacity=' + newOpacity * 100 + ')'; theDiv.style.opacity = mozillaOpacity; theDiv.style.filter = ieOpacity; var spanElements = theDiv.parentNode.getElementsByTagName("span"); for (var currIdx = 0; currIdx < spanElements.length; currIdx++) { spanElements[currIdx].style.opacity = mozillaOpacity; spanElements[currIdx].style.filter = ieOpacity; } }, reRound: function (theDiv, options) { var topRico = theDiv.parentNode.childNodes[0]; var bottomRico = theDiv.parentNode.childNodes[2]; theDiv.parentNode.removeChild(topRico); theDiv.parentNode.removeChild(bottomRico); this.round(theDiv.parentNode, options); }, _roundCornersImpl: function (e, color, bgColor) { if (this.options.border) { this._renderBorder(e, bgColor); } if (this._isTopRounded()) { this._roundTopCorners(e, color, bgColor); } if (this._isBottomRounded()) { this._roundBottomCorners(e, color, bgColor); } }, _renderBorder: function (el, bgColor) { var borderValue = "1px solid " + this._borderColor(bgColor); var borderL = "border-left: " + borderValue; var borderR = "border-right: " + borderValue; var style = "style='" + borderL + ";" + borderR + "'"; el.innerHTML = "
" + el.innerHTML + "
"; }, _roundTopCorners: function (el, color, bgColor) { var corner = this._createCorner(bgColor); for (var i = 0; i < this.options.numSlices; i++) { corner.appendChild(this._createCornerSlice(color, bgColor, i, "top")); } el.style.paddingTop = 0; el.insertBefore(corner, el.firstChild); }, _roundBottomCorners: function (el, color, bgColor) { var corner = this._createCorner(bgColor); for (var i = (this.options.numSlices - 1); i >= 0; i--) { corner.appendChild(this._createCornerSlice(color, bgColor, i, "bottom")); } el.style.paddingBottom = 0; el.appendChild(corner); }, _createCorner: function (bgColor) { var corner = document.createElement("div"); corner.style.backgroundColor = (this._isTransparent() ? "transparent" : bgColor); return corner; }, _createCornerSlice: function (color, bgColor, n, position) { var slice = document.createElement("span"); var inStyle = slice.style; inStyle.backgroundColor = color; inStyle.display = "block"; inStyle.height = "1px"; inStyle.overflow = "hidden"; inStyle.fontSize = "1px"; var borderColor = this._borderColor(color, bgColor); if (this.options.border && n == 0) { inStyle.borderTopStyle = "solid"; inStyle.borderTopWidth = "1px"; inStyle.borderLeftWidth = "0px"; inStyle.borderRightWidth = "0px"; inStyle.borderBottomWidth = "0px"; inStyle.height = "0px"; inStyle.borderColor = borderColor; } else if (borderColor) { inStyle.borderColor = borderColor; inStyle.borderStyle = "solid"; inStyle.borderWidth = "0px 1px"; } if (!this.options.compact && (n == (this.options.numSlices - 1))) { inStyle.height = "2px"; } this._setMargin(slice, n, position); this._setBorder(slice, n, position); return slice; }, _setOptions: function (options) { this.options = { corners: "all", color: "fromElement", bgColor: "fromParent", blend: true, border: false, compact: false }; OpenLayers.Util.extend(this.options, options || {}); this.options.numSlices = this.options.compact ? 2 : 4; if (this._isTransparent()) { this.options.blend = false; } }, _whichSideTop: function () { if (this._hasString(this.options.corners, "all", "top")) { return ""; } if (this.options.corners.indexOf("tl") >= 0 && this.options.corners.indexOf("tr") >= 0) { return ""; } if (this.options.corners.indexOf("tl") >= 0) { return "left"; } else if (this.options.corners.indexOf("tr") >= 0) { return "right"; } return ""; }, _whichSideBottom: function () { if (this._hasString(this.options.corners, "all", "bottom")) { return ""; } if (this.options.corners.indexOf("bl") >= 0 && this.options.corners.indexOf("br") >= 0) { return ""; } if (this.options.corners.indexOf("bl") >= 0) { return "left"; } else if (this.options.corners.indexOf("br") >= 0) { return "right"; } return ""; }, _borderColor: function (color, bgColor) { if (color == "transparent") { return bgColor; } else if (this.options.border) { return this.options.border; } else if (this.options.blend) { return this._blend(bgColor, color); } else { return ""; } }, _setMargin: function (el, n, corners) { var marginSize = this._marginSize(n); var whichSide = corners == "top" ? this._whichSideTop() : this._whichSideBottom(); if (whichSide == "left") { el.style.marginLeft = marginSize + "px"; el.style.marginRight = "0px"; } else if (whichSide == "right") { el.style.marginRight = marginSize + "px"; el.style.marginLeft = "0px"; } else { el.style.marginLeft = marginSize + "px"; el.style.marginRight = marginSize + "px"; } }, _setBorder: function (el, n, corners) { var borderSize = this._borderSize(n); var whichSide = corners == "top" ? this._whichSideTop() : this._whichSideBottom(); if (whichSide == "left") { el.style.borderLeftWidth = borderSize + "px"; el.style.borderRightWidth = "0px"; } else if (whichSide == "right") { el.style.borderRightWidth = borderSize + "px"; el.style.borderLeftWidth = "0px"; } else { el.style.borderLeftWidth = borderSize + "px"; el.style.borderRightWidth = borderSize + "px"; } if (this.options.border != false) { el.style.borderLeftWidth = borderSize + "px"; el.style.borderRightWidth = borderSize + "px"; } }, _marginSize: function (n) { if (this._isTransparent()) { return 0; } var marginSizes = [5, 3, 2, 1]; var blendedMarginSizes = [3, 2, 1, 0]; var compactMarginSizes = [2, 1]; var smBlendedMarginSizes = [1, 0]; if (this.options.compact && this.options.blend) { return smBlendedMarginSizes[n]; } else if (this.options.compact) { return compactMarginSizes[n]; } else if (this.options.blend) { return blendedMarginSizes[n]; } else { return marginSizes[n]; } }, _borderSize: function (n) { var transparentBorderSizes = [5, 3, 2, 1]; var blendedBorderSizes = [2, 1, 1, 1]; var compactBorderSizes = [1, 0]; var actualBorderSizes = [0, 2, 0, 0]; if (this.options.compact && (this.options.blend || this._isTransparent())) { return 1; } else if (this.options.compact) { return compactBorderSizes[n]; } else if (this.options.blend) { return blendedBorderSizes[n]; } else if (this.options.border) { return actualBorderSizes[n]; } else if (this._isTransparent()) { return transparentBorderSizes[n]; } return 0; }, _hasString: function (str) { for (var i = 1; i < arguments.length; i++) if (str.indexOf(arguments[i]) >= 0) { return true; } return false; }, _blend: function (c1, c2) { var cc1 = OpenLayers.Rico.Color.createFromHex(c1); cc1.blend(OpenLayers.Rico.Color.createFromHex(c2)); return cc1; }, _background: function (el) { try { return OpenLayers.Rico.Color.createColorFromBackground(el).asHex(); } catch (err) { return "#ffffff"; } }, _isTransparent: function () { return this.options.color == "transparent"; }, _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 (el) { return el.childNodes.length == 1 && el.childNodes[0].nodeType == 3; } }; (function () { if (window.google && google.gears) { return; } var factory = null; if (typeof GearsFactory != 'undefined') { factory = new GearsFactory(); } else { try { factory = new ActiveXObject('Gears.Factory'); if (factory.getBuildInfo().indexOf('ie_mobile') != -1) { factory.privateSetGlobalObject(this); } } catch (e) { if ((typeof navigator.mimeTypes != 'undefined') && navigator.mimeTypes["application/x-googlegears"]) { factory = document.createElement("object"); factory.style.display = "none"; factory.width = 0; factory.height = 0; factory.type = "application/x-googlegears"; document.documentElement.appendChild(factory); } } } if (!factory) { return; } if (!window.google) { google = {}; } if (!google.gears) { google.gears = { factory: factory }; } })(); OpenLayers.Element = { visible: function (element) { return OpenLayers.Util.getElement(element).style.display != 'none'; }, toggle: function () { for (var i = 0, len = arguments.length; i < len; i++) { var element = OpenLayers.Util.getElement(arguments[i]); var display = OpenLayers.Element.visible(element) ? 'hide' : 'show'; OpenLayers.Element[display](element); } }, hide: function () { for (var i = 0, len = arguments.length; i < len; i++) { var element = OpenLayers.Util.getElement(arguments[i]); element.style.display = 'none'; } }, show: function () { for (var i = 0, len = arguments.length; i < len; i++) { var element = OpenLayers.Util.getElement(arguments[i]); element.style.display = ''; } }, remove: function (element) { element = OpenLayers.Util.getElement(element); element.parentNode.removeChild(element); }, getHeight: function (element) { element = OpenLayers.Util.getElement(element); return element.offsetHeight; }, getDimensions: function (element) { element = OpenLayers.Util.getElement(element); if (OpenLayers.Element.getStyle(element, 'display') != 'none') { return { width: element.offsetWidth, height: element.offsetHeight }; } var els = element.style; var originalVisibility = els.visibility; var originalPosition = els.position; var originalDisplay = els.display; els.visibility = 'hidden'; els.position = 'absolute'; els.display = ''; var originalWidth = element.clientWidth; var originalHeight = element.clientHeight; els.display = originalDisplay; els.position = originalPosition; els.visibility = originalVisibility; return { width: originalWidth, height: originalHeight }; }, hasClass: function (element, name) { var names = element.className; return ( !! names && new RegExp("(^|\\s)" + name + "(\\s|$)").test(names)); }, addClass: function (element, name) { if (!OpenLayers.Element.hasClass(element, name)) { element.className += (element.className ? " " : "") + name; } return element; }, removeClass: function (element, name) { var names = element.className; if (names) { element.className = OpenLayers.String.trim(names.replace(new RegExp("(^|\\s+)" + name + "(\\s+|$)"), " ")); } return element; }, toggleClass: function (element, name) { if (OpenLayers.Element.hasClass(element, name)) { OpenLayers.Element.removeClass(element, name); } else { OpenLayers.Element.addClass(element, name); } return element; }, getStyle: function (element, style) { element = OpenLayers.Util.getElement(element); var value = null; if (element && element.style) { value = element.style[OpenLayers.String.camelize(style)]; if (!value) { if (document.defaultView && document.defaultView.getComputedStyle) { var css = document.defaultView.getComputedStyle(element, null); value = css ? css.getPropertyValue(style) : null; } else if (element.currentStyle) { value = element.currentStyle[OpenLayers.String.camelize(style)]; } } var positions = ['left', 'top', 'right', 'bottom']; if (window.opera && (OpenLayers.Util.indexOf(positions, style) != -1) && (OpenLayers.Element.getStyle(element, 'position') == 'static')) { value = 'auto'; } } return value == 'auto' ? null : value; } }; OpenLayers.Size = OpenLayers.Class({ w: 0.0, h: 0.0, initialize: function (w, h) { this.w = parseFloat(w); this.h = parseFloat(h); }, toString: function () { return ("w=" + this.w + ",h=" + this.h); }, clone: function () { return new OpenLayers.Size(this.w, this.h); }, equals: function (sz) { var equals = false; if (sz != null) { equals = ((this.w == sz.w && this.h == sz.h) || (isNaN(this.w) && isNaN(this.h) && isNaN(sz.w) && isNaN(sz.h))); } return equals; }, CLASS_NAME: "OpenLayers.Size" }); OpenLayers.Console = { log: function () {}, debug: function () {}, info: function () {}, warn: function () {}, error: function () {}, userError: function (error) { alert(error); }, 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 () { var scripts = document.getElementsByTagName("script"); for (var i = 0, len = scripts.length; i < len; ++i) { if (scripts[i].src.indexOf("firebug.js") != -1) { if (console) { OpenLayers.Util.extend(OpenLayers.Console, console); break; } } } })(); OpenLayers.Icon = OpenLayers.Class({ url: null, size: null, offset: null, calculateOffset: null, imageDiv: null, px: null, initialize: function (url, size, offset, calculateOffset) { this.url = url; this.size = (size) ? size : new OpenLayers.Size(20, 20); this.offset = offset ? offset : new OpenLayers.Pixel(-(this.size.w / 2), -(this.size.h / 2)); this.calculateOffset = calculateOffset; var id = OpenLayers.Util.createUniqueID("OL_Icon_"); this.imageDiv = OpenLayers.Util.createAlphaImageDiv(id); }, 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 (size) { if (size != null) { this.size = size; } this.draw(); }, setUrl: function (url) { if (url != null) { this.url = url; } this.draw(); }, draw: function (px) { OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv, null, null, this.size, this.url, "absolute"); this.moveTo(px); return this.imageDiv; }, erase: function () { if (this.imageDiv != null && this.imageDiv.parentNode != null) { OpenLayers.Element.remove(this.imageDiv); } }, setOpacity: function (opacity) { OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv, null, null, null, null, null, null, null, opacity); }, moveTo: function (px) { if (px != null) { this.px = px; } if (this.imageDiv != null) { if (this.px == null) { this.display(false); } else { if (this.calculateOffset) { this.offset = this.calculateOffset(this.size); } var offsetPx = this.px.offset(this.offset); OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv, null, offsetPx); } } }, display: function (display) { this.imageDiv.style.display = (display) ? "" : "none"; }, isDrawn: function () { var isDrawn = (this.imageDiv && this.imageDiv.parentNode && (this.imageDiv.parentNode.nodeType != 11)); return isDrawn; }, CLASS_NAME: "OpenLayers.Icon" }); 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: false, minSize: null, maxSize: null, displayClass: "olPopup", contentDisplayClass: "olPopupContent", padding: 0, disableFirefoxOverflowHack: false, fixPadding: function () { if (typeof this.padding == "number") { this.padding = new OpenLayers.Bounds(this.padding, this.padding, this.padding, this.padding); } }, panMapIfOutOfView: false, keepInMap: false, closeOnMove: false, map: null, initialize: function (id, lonlat, contentSize, contentHTML, closeBox, closeBoxCallback) { if (id == null) { id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_"); } this.id = id; this.lonlat = lonlat; this.contentSize = (contentSize != null) ? contentSize : new OpenLayers.Size(OpenLayers.Popup.WIDTH, OpenLayers.Popup.HEIGHT); if (contentHTML != null) { this.contentHTML = contentHTML; } 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; var groupDivId = this.id + "_GroupDiv"; this.groupDiv = OpenLayers.Util.createDiv(groupDivId, null, null, null, "relative", null, "hidden"); var id = this.div.id + "_contentDiv"; this.contentDiv = OpenLayers.Util.createDiv(id, null, this.contentSize.clone(), null, "relative"); this.contentDiv.className = this.contentDisplayClass; this.groupDiv.appendChild(this.contentDiv); this.div.appendChild(this.groupDiv); if (closeBox) { this.addCloseBox(closeBoxCallback); } this.registerEvents(); }, destroy: function () { this.id = null; this.lonlat = null; this.size = null; this.contentHTML = null; this.backgroundColor = null; this.opacity = null; this.border = null; if (this.closeOnMove && this.map) { this.map.events.unregister("movestart", this, this.hide); } this.events.destroy(); this.events = null; if (this.closeDiv) { OpenLayers.Event.stopObservingElement(this.closeDiv); this.groupDiv.removeChild(this.closeDiv); } this.closeDiv = null; this.div.removeChild(this.groupDiv); this.groupDiv = null; if (this.map != null) { this.map.removePopup(this); } this.map = null; this.div = null; this.autoSize = null; this.minSize = null; this.maxSize = null; this.padding = null; this.panMapIfOutOfView = null; }, draw: function (px) { if (px == null) { if ((this.lonlat != null) && (this.map != null)) { px = this.map.getLayerPxFromLonLat(this.lonlat); } } if (this.closeOnMove) { this.map.events.register("movestart", this, this.hide); } if (!this.disableFirefoxOverflowHack && OpenLayers.Util.getBrowserName() == 'firefox') { this.map.events.register("movestart", this, function () { var style = document.defaultView.getComputedStyle(this.contentDiv, null); var currentOverflow = style.getPropertyValue("overflow"); if (currentOverflow != "hidden") { this.contentDiv._oldOverflow = currentOverflow; this.contentDiv.style.overflow = "hidden"; } }); this.map.events.register("moveend", this, function () { var oldOverflow = this.contentDiv._oldOverflow; if (oldOverflow) { this.contentDiv.style.overflow = oldOverflow; this.contentDiv._oldOverflow = null; } }); } this.moveTo(px); if (!this.autoSize && !this.size) { this.setSize(this.contentSize); } this.setBackgroundColor(); this.setOpacity(); this.setBorder(); this.setContentHTML(); if (this.panMapIfOutOfView) { this.panIntoView(); } return this.div; }, updatePosition: function () { if ((this.lonlat) && (this.map)) { var px = this.map.getLayerPxFromLonLat(this.lonlat); if (px) { this.moveTo(px); } } }, moveTo: function (px) { if ((px != null) && (this.div != null)) { this.div.style.left = px.x + "px"; this.div.style.top = px.y + "px"; } }, visible: function () { return OpenLayers.Element.visible(this.div); }, toggle: function () { if (this.visible()) { this.hide(); } else { this.show(); } }, show: function () { OpenLayers.Element.show(this.div); if (this.panMapIfOutOfView) { this.panIntoView(); } }, hide: function () { OpenLayers.Element.hide(this.div); }, setSize: function (contentSize) { this.size = contentSize.clone(); var contentDivPadding = this.getContentDivPadding(); var wPadding = contentDivPadding.left + contentDivPadding.right; var hPadding = contentDivPadding.top + contentDivPadding.bottom; this.fixPadding(); wPadding += this.padding.left + this.padding.right; hPadding += this.padding.top + this.padding.bottom; if (this.closeDiv) { var closeDivWidth = parseInt(this.closeDiv.style.width); wPadding += closeDivWidth + contentDivPadding.right; } this.size.w += wPadding; this.size.h += hPadding; if (OpenLayers.Util.getBrowserName() == "msie") { this.contentSize.w += contentDivPadding.left + contentDivPadding.right; this.contentSize.h += contentDivPadding.bottom + contentDivPadding.top; } if (this.div != null) { this.div.style.width = this.size.w + "px"; this.div.style.height = this.size.h + "px"; } if (this.contentDiv != null) { this.contentDiv.style.width = contentSize.w + "px"; this.contentDiv.style.height = contentSize.h + "px"; } }, updateSize: function () { var preparedHTML = "
" + this.contentDiv.innerHTML + "
"; var containerElement = (this.map) ? this.map.layerContainerDiv : document.body; var realSize = OpenLayers.Util.getRenderedDimensions(preparedHTML, null, { displayClass: this.displayClass, containerElement: containerElement }); var safeSize = this.getSafeContentSize(realSize); var newSize = null; if (safeSize.equals(realSize)) { newSize = realSize; } else { var fixedSize = new OpenLayers.Size(); fixedSize.w = (safeSize.w < realSize.w) ? safeSize.w : null; fixedSize.h = (safeSize.h < realSize.h) ? safeSize.h : null; if (fixedSize.w && fixedSize.h) { newSize = safeSize; } else { var clippedSize = OpenLayers.Util.getRenderedDimensions(preparedHTML, fixedSize, { displayClass: this.contentDisplayClass, containerElement: containerElement }); var currentOverflow = OpenLayers.Element.getStyle(this.contentDiv, "overflow"); if ((currentOverflow != "hidden") && (clippedSize.equals(safeSize))) { var scrollBar = OpenLayers.Util.getScrollbarWidth(); if (fixedSize.w) { clippedSize.h += scrollBar; } else { clippedSize.w += scrollBar; } } newSize = this.getSafeContentSize(clippedSize); } } this.setSize(newSize); }, setBackgroundColor: function (color) { if (color != undefined) { this.backgroundColor = color; } if (this.div != null) { this.div.style.backgroundColor = this.backgroundColor; } }, setOpacity: function (opacity) { if (opacity != undefined) { this.opacity = opacity; } if (this.div != null) { this.div.style.opacity = this.opacity; this.div.style.filter = 'alpha(opacity=' + this.opacity * 100 + ')'; } }, setBorder: function (border) { if (border != undefined) { this.border = border; } if (this.div != null) { this.div.style.border = this.border; } }, setContentHTML: function (contentHTML) { if (contentHTML != null) { this.contentHTML = contentHTML; } if ((this.contentDiv != null) && (this.contentHTML != null) && (this.contentHTML != this.contentDiv.innerHTML)) { this.contentDiv.innerHTML = this.contentHTML; if (this.autoSize) { this.registerImageListeners(); this.updateSize(); } } }, registerImageListeners: function () { var onImgLoad = function () { this.popup.updateSize(); if (this.popup.visible() && this.popup.panMapIfOutOfView) { this.popup.panIntoView(); } OpenLayers.Event.stopObserving(this.img, "load", this.img._onImageLoad); }; var images = this.contentDiv.getElementsByTagName("img"); for (var i = 0, len = images.length; i < len; i++) { var img = images[i]; if (img.width == 0 || img.height == 0) { var context = { 'popup': this, 'img': img }; img._onImgLoad = OpenLayers.Function.bind(onImgLoad, context); OpenLayers.Event.observe(img, 'load', img._onImgLoad); } } }, getSafeContentSize: function (size) { var safeContentSize = size.clone(); var contentDivPadding = this.getContentDivPadding(); var wPadding = contentDivPadding.left + contentDivPadding.right; var hPadding = contentDivPadding.top + contentDivPadding.bottom; this.fixPadding(); wPadding += this.padding.left + this.padding.right; hPadding += this.padding.top + this.padding.bottom; if (this.closeDiv) { var closeDivWidth = parseInt(this.closeDiv.style.width); wPadding += closeDivWidth + contentDivPadding.right; } if (this.minSize) { safeContentSize.w = Math.max(safeContentSize.w, (this.minSize.w - wPadding)); safeContentSize.h = Math.max(safeContentSize.h, (this.minSize.h - hPadding)); } if (this.maxSize) { safeContentSize.w = Math.min(safeContentSize.w, (this.maxSize.w - wPadding)); safeContentSize.h = Math.min(safeContentSize.h, (this.maxSize.h - hPadding)); } if (this.map && this.map.size) { var extraX = 0, extraY = 0; if (this.keepInMap && !this.panMapIfOutOfView) { var px = this.map.getPixelFromLonLat(this.lonlat); switch (this.relativePosition) { case "tr": extraX = px.x; extraY = this.map.size.h - px.y; break; case "tl": extraX = this.map.size.w - px.x; extraY = this.map.size.h - px.y; break; case "bl": extraX = this.map.size.w - px.x; extraY = px.y; break; case "br": extraX = px.x; extraY = px.y; break; default: extraX = px.x; extraY = this.map.size.h - px.y; break; } } var maxY = this.map.size.h - this.map.paddingForPopups.top - this.map.paddingForPopups.bottom - hPadding - extraY; var maxX = this.map.size.w - this.map.paddingForPopups.left - this.map.paddingForPopups.right - wPadding - extraX; safeContentSize.w = Math.min(safeContentSize.w, maxX); safeContentSize.h = Math.min(safeContentSize.h, maxY); } return safeContentSize; }, getContentDivPadding: function () { var contentDivPadding = this._contentDivPadding; if (!contentDivPadding) { if (this.div.parentNode == null) { this.div.style.display = "none"; document.body.appendChild(this.div); } contentDivPadding = 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._contentDivPadding = contentDivPadding; if (this.div.parentNode == document.body) { document.body.removeChild(this.div); this.div.style.display = ""; } } return contentDivPadding; }, addCloseBox: function (callback) { this.closeDiv = OpenLayers.Util.createDiv(this.id + "_close", null, new OpenLayers.Size(17, 17)); this.closeDiv.className = "olPopupCloseBox"; var contentDivPadding = this.getContentDivPadding(); this.closeDiv.style.right = contentDivPadding.right + "px"; this.closeDiv.style.top = contentDivPadding.top + "px"; this.groupDiv.appendChild(this.closeDiv); var closePopup = callback || function (e) { this.hide(); OpenLayers.Event.stop(e); }; OpenLayers.Event.observe(this.closeDiv, "click", OpenLayers.Function.bindAsEventListener(closePopup, this)); }, panIntoView: function () { var mapSize = this.map.getSize(); var origTL = this.map.getViewPortPxFromLayerPx(new OpenLayers.Pixel(parseInt(this.div.style.left), parseInt(this.div.style.top))); var newTL = origTL.clone(); if (origTL.x < this.map.paddingForPopups.left) { newTL.x = this.map.paddingForPopups.left; } else if ((origTL.x + this.size.w) > (mapSize.w - this.map.paddingForPopups.right)) { newTL.x = mapSize.w - this.map.paddingForPopups.right - this.size.w; } if (origTL.y < this.map.paddingForPopups.top) { newTL.y = this.map.paddingForPopups.top; } else if ((origTL.y + this.size.h) > (mapSize.h - this.map.paddingForPopups.bottom)) { newTL.y = mapSize.h - this.map.paddingForPopups.bottom - this.size.h; } var dx = origTL.x - newTL.x; var dy = origTL.y - newTL.y; this.map.pan(dx, dy); }, registerEvents: function () { this.events = new OpenLayers.Events(this, this.div, null, true); this.events.on({ "mousedown": this.onmousedown, "mousemove": this.onmousemove, "mouseup": this.onmouseup, "click": this.onclick, "mouseout": this.onmouseout, "dblclick": this.ondblclick, scope: this }); }, onmousedown: function (evt) { this.mousedown = true; OpenLayers.Event.stop(evt, true); }, onmousemove: function (evt) { if (this.mousedown) { OpenLayers.Event.stop(evt, true); } }, onmouseup: function (evt) { if (this.mousedown) { this.mousedown = false; OpenLayers.Event.stop(evt, true); } }, onclick: function (evt) { OpenLayers.Event.stop(evt, true); }, onmouseout: function (evt) { this.mousedown = false; }, ondblclick: function (evt) { OpenLayers.Event.stop(evt, true); }, 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.Protocol = OpenLayers.Class({ format: null, options: null, autoDestroy: true, defaultFilter: null, initialize: function (options) { options = options || {}; OpenLayers.Util.extend(this, options); this.options = options; }, mergeWithDefaultFilter: function (filter) { if (filter) { if (this.defaultFilter) { filter = new OpenLayers.Filter.Logical({ type: OpenLayers.Filter.Logical.AND, filters: [this.defaultFilter, filter] }); } } else { filter = this.defaultFilter; } return filter; }, destroy: function () { this.options = null; this.format = null; }, read: function (options) { options = options || {}; options.filter = this.mergeWithDefaultFilter(options.filter); }, create: function () {}, update: function () {}, "delete": function () {}, commit: function () {}, abort: function (response) {}, createCallback: function (method, response, options) { return OpenLayers.Function.bind(function () { method.apply(this, [response, options]); }, this); }, CLASS_NAME: "OpenLayers.Protocol" }); OpenLayers.Protocol.Response = OpenLayers.Class({ code: null, requestType: null, last: true, features: null, reqFeatures: null, priv: null, initialize: function (options) { OpenLayers.Util.extend(this, options); }, success: function () { return this.code > 0; }, CLASS_NAME: "OpenLayers.Protocol.Response" }); OpenLayers.Protocol.Response.SUCCESS = 1; OpenLayers.Protocol.Response.FAILURE = 0; OpenLayers.Renderer = OpenLayers.Class({ container: null, root: null, extent: null, locked: false, size: null, resolution: null, map: null, initialize: function (containerID, options) { this.container = OpenLayers.Util.getElement(containerID); }, destroy: function () { this.container = null; this.extent = null; this.size = null; this.resolution = null; this.map = null; }, supported: function () { return false; }, setExtent: function (extent, resolutionChanged) { this.extent = extent.clone(); if (resolutionChanged) { this.resolution = null; } }, setSize: function (size) { this.size = size.clone(); this.resolution = null; }, getResolution: function () { this.resolution = this.resolution || this.map.getResolution(); return this.resolution; }, drawFeature: function (feature, style) { if (style == null) { style = feature.style; } if (feature.geometry) { var bounds = feature.geometry.getBounds(); if (bounds) { if (!bounds.intersectsBounds(this.extent)) { style = { display: "none" }; } var rendered = this.drawGeometry(feature.geometry, style, feature.id); if (style.display != "none" && style.label && rendered !== false) { var location = feature.geometry.getCentroid(); if (style.labelXOffset || style.labelYOffset) { xOffset = isNaN(style.labelXOffset) ? 0 : style.labelXOffset; yOffset = isNaN(style.labelYOffset) ? 0 : style.labelYOffset; var res = this.getResolution(); location.move(xOffset * res, yOffset * res); } this.drawText(feature.id, style, location); } else { this.removeText(feature.id); } return rendered; } } }, drawGeometry: function (geometry, style, featureId) {}, drawText: function (featureId, style, location) {}, removeText: function (featureId) {}, clear: function () {}, getFeatureIdFromEvent: function (evt) {}, eraseFeatures: function (features) { if (!(features instanceof Array)) { features = [features]; } for (var i = 0, len = features.length; i < len; ++i) { this.eraseGeometry(features[i].geometry); this.removeText(features[i].id); } }, eraseGeometry: function (geometry) {}, moveRoot: function (renderer) {}, getRenderLayerId: function () { return this.container.id; }, CLASS_NAME: "OpenLayers.Renderer" }); OpenLayers.Strategy = OpenLayers.Class({ layer: null, options: null, active: null, autoActivate: true, autoDestroy: true, initialize: function (options) { OpenLayers.Util.extend(this, options); this.options = options; this.active = false; }, destroy: function () { this.deactivate(); this.layer = null; this.options = null; }, setLayer: function (layer) { this.layer = layer; }, activate: function () { if (!this.active) { this.active = true; return true; } return false; }, deactivate: function () { if (this.active) { this.active = false; return true; } return false; }, CLASS_NAME: "OpenLayers.Strategy" }); OpenLayers.Rico.Color = OpenLayers.Class({ initialize: function (red, green, blue) { this.rgb = { r: red, g: green, b: blue }; }, setRed: function (r) { this.rgb.r = r; }, setGreen: function (g) { this.rgb.g = g; }, setBlue: function (b) { this.rgb.b = b; }, setHue: function (h) { var hsb = this.asHSB(); hsb.h = h; this.rgb = OpenLayers.Rico.Color.HSBtoRGB(hsb.h, hsb.s, hsb.b); }, setSaturation: function (s) { var hsb = this.asHSB(); hsb.s = s; this.rgb = OpenLayers.Rico.Color.HSBtoRGB(hsb.h, hsb.s, hsb.b); }, setBrightness: function (b) { var hsb = this.asHSB(); hsb.b = b; this.rgb = OpenLayers.Rico.Color.HSBtoRGB(hsb.h, hsb.s, hsb.b); }, darken: function (percent) { var hsb = this.asHSB(); this.rgb = OpenLayers.Rico.Color.HSBtoRGB(hsb.h, hsb.s, Math.max(hsb.b - percent, 0)); }, brighten: function (percent) { var hsb = this.asHSB(); this.rgb = OpenLayers.Rico.Color.HSBtoRGB(hsb.h, hsb.s, Math.min(hsb.b + percent, 1)); }, blend: function (other) { this.rgb.r = Math.floor((this.rgb.r + other.rgb.r) / 2); this.rgb.g = Math.floor((this.rgb.g + other.rgb.g) / 2); this.rgb.b = Math.floor((this.rgb.b + other.rgb.b) / 2); }, isBright: function () { var hsb = this.asHSB(); return this.asHSB().b > 0.5; }, 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 (hexCode) { if (hexCode.length == 4) { var shortHexCode = hexCode; var hexCode = '#'; for (var i = 1; i < 4; i++) { hexCode += (shortHexCode.charAt(i) + shortHexCode.charAt(i)); } } if (hexCode.indexOf('#') == 0) { hexCode = hexCode.substring(1); } var red = hexCode.substring(0, 2); var green = hexCode.substring(2, 4); var blue = hexCode.substring(4, 6); return new OpenLayers.Rico.Color(parseInt(red, 16), parseInt(green, 16), parseInt(blue, 16)); }; OpenLayers.Rico.Color.createColorFromBackground = function (elem) { var actualColor = RicoUtil.getElementsComputedStyle(OpenLayers.Util.getElement(elem), "backgroundColor", "background-color"); if (actualColor == "transparent" && elem.parentNode) { return OpenLayers.Rico.Color.createColorFromBackground(elem.parentNode); } if (actualColor == null) { return new OpenLayers.Rico.Color(255, 255, 255); } if (actualColor.indexOf("rgb(") == 0) { var colors = actualColor.substring(4, actualColor.length - 1); var colorArray = colors.split(","); return new OpenLayers.Rico.Color(parseInt(colorArray[0]), parseInt(colorArray[1]), parseInt(colorArray[2])); } else if (actualColor.indexOf("#") == 0) { return OpenLayers.Rico.Color.createFromHex(actualColor); } else { return new OpenLayers.Rico.Color(255, 255, 255); } }; OpenLayers.Rico.Color.HSBtoRGB = function (hue, saturation, brightness) { var red = 0; var green = 0; var blue = 0; if (saturation == 0) { red = parseInt(brightness * 255.0 + 0.5); green = red; blue = red; } else { var h = (hue - Math.floor(hue)) * 6.0; var f = h - Math.floor(h); var p = brightness * (1.0 - saturation); var q = brightness * (1.0 - saturation * f); var t = brightness * (1.0 - (saturation * (1.0 - f))); switch (parseInt(h)) { case 0: red = (brightness * 255.0 + 0.5); green = (t * 255.0 + 0.5); blue = (p * 255.0 + 0.5); break; case 1: red = (q * 255.0 + 0.5); green = (brightness * 255.0 + 0.5); blue = (p * 255.0 + 0.5); break; case 2: red = (p * 255.0 + 0.5); green = (brightness * 255.0 + 0.5); blue = (t * 255.0 + 0.5); break; case 3: red = (p * 255.0 + 0.5); green = (q * 255.0 + 0.5); blue = (brightness * 255.0 + 0.5); break; case 4: red = (t * 255.0 + 0.5); green = (p * 255.0 + 0.5); blue = (brightness * 255.0 + 0.5); break; case 5: red = (brightness * 255.0 + 0.5); green = (p * 255.0 + 0.5); blue = (q * 255.0 + 0.5); break; } } return { r: parseInt(red), g: parseInt(green), b: parseInt(blue) }; }; OpenLayers.Rico.Color.RGBtoHSB = function (r, g, b) { var hue; var saturation; var brightness; var cmax = (r > g) ? r : g; if (b > cmax) { cmax = b; } var cmin = (r < g) ? r : g; if (b < cmin) { cmin = b; } brightness = cmax / 255.0; if (cmax != 0) { saturation = (cmax - cmin) / cmax; } else { saturation = 0; } if (saturation == 0) { hue = 0; } else { var redc = (cmax - r) / (cmax - cmin); var greenc = (cmax - g) / (cmax - cmin); var bluec = (cmax - b) / (cmax - cmin); if (r == cmax) { hue = bluec - greenc; } else if (g == cmax) { hue = 2.0 + redc - bluec; } else { hue = 4.0 + greenc - redc; } hue = hue / 6.0; if (hue < 0) { hue = hue + 1.0; } } return { h: hue, s: saturation, b: brightness }; }; OpenLayers.Bounds = OpenLayers.Class({ left: null, bottom: null, right: null, top: null, centerLonLat: null, initialize: function (left, bottom, right, top) { if (left != null) { this.left = OpenLayers.Util.toFloat(left); } if (bottom != null) { this.bottom = OpenLayers.Util.toFloat(bottom); } if (right != null) { this.right = OpenLayers.Util.toFloat(right); } if (top != null) { this.top = OpenLayers.Util.toFloat(top); } }, clone: function () { return new OpenLayers.Bounds(this.left, this.bottom, this.right, this.top); }, equals: function (bounds) { var equals = false; if (bounds != null) { equals = ((this.left == bounds.left) && (this.right == bounds.right) && (this.top == bounds.top) && (this.bottom == bounds.bottom)); } return equals; }, toString: function () { return ("left-bottom=(" + this.left + "," + this.bottom + ")" + " right-top=(" + this.right + "," + this.top + ")"); }, toArray: function (reverseAxisOrder) { if (reverseAxisOrder === true) { return [this.bottom, this.left, this.top, this.right]; } else { return [this.left, this.bottom, this.right, this.top]; } }, toBBOX: function (decimal, reverseAxisOrder) { if (decimal == null) { decimal = 6; } var mult = Math.pow(10, decimal); var xmin = Math.round(this.left * mult) / mult; var ymin = Math.round(this.bottom * mult) / mult; var xmax = Math.round(this.right * mult) / mult; var ymax = Math.round(this.top * mult) / mult; if (reverseAxisOrder === true) { return ymin + "," + xmin + "," + ymax + "," + xmax; } else { return xmin + "," + ymin + "," + xmax + "," + ymax; } }, 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 () { if (!this.centerLonLat) { this.centerLonLat = new OpenLayers.LonLat((this.left + this.right) / 2, (this.bottom + this.top) / 2); } return this.centerLonLat; }, scale: function (ratio, origin) { if (origin == null) { origin = this.getCenterLonLat(); } var origx, origy; if (origin.CLASS_NAME == "OpenLayers.LonLat") { origx = origin.lon; origy = origin.lat; } else { origx = origin.x; origy = origin.y; } var left = (this.left - origx) * ratio + origx; var bottom = (this.bottom - origy) * ratio + origy; var right = (this.right - origx) * ratio + origx; var top = (this.top - origy) * ratio + origy; return new OpenLayers.Bounds(left, bottom, right, top); }, add: function (x, y) { if ((x == null) || (y == null)) { var msg = OpenLayers.i18n("boundsAddError"); OpenLayers.Console.error(msg); return null; } return new OpenLayers.Bounds(this.left + x, this.bottom + y, this.right + x, this.top + y); }, extend: function (object) { var bounds = null; if (object) { switch (object.CLASS_NAME) { case "OpenLayers.LonLat": bounds = new OpenLayers.Bounds(object.lon, object.lat, object.lon, object.lat); break; case "OpenLayers.Geometry.Point": bounds = new OpenLayers.Bounds(object.x, object.y, object.x, object.y); break; case "OpenLayers.Bounds": bounds = object; break; } if (bounds) { this.centerLonLat = null; if ((this.left == null) || (bounds.left < this.left)) { this.left = bounds.left; } if ((this.bottom == null) || (bounds.bottom < this.bottom)) { this.bottom = bounds.bottom; } if ((this.right == null) || (bounds.right > this.right)) { this.right = bounds.right; } if ((this.top == null) || (bounds.top > this.top)) { this.top = bounds.top; } } } }, containsLonLat: function (ll, inclusive) { return this.contains(ll.lon, ll.lat, inclusive); }, containsPixel: function (px, inclusive) { return this.contains(px.x, px.y, inclusive); }, contains: function (x, y, inclusive) { if (inclusive == null) { inclusive = true; } if (x == null || y == null) { return false; } x = OpenLayers.Util.toFloat(x); y = OpenLayers.Util.toFloat(y); var contains = false; if (inclusive) { contains = ((x >= this.left) && (x <= this.right) && (y >= this.bottom) && (y <= this.top)); } else { contains = ((x > this.left) && (x < this.right) && (y > this.bottom) && (y < this.top)); } return contains; }, intersectsBounds: function (bounds, inclusive) { if (inclusive == null) { inclusive = true; } var intersects = false; var mightTouch = (this.left == bounds.right || this.right == bounds.left || this.top == bounds.bottom || this.bottom == bounds.top); if (inclusive || !mightTouch) { var inBottom = (((bounds.bottom >= this.bottom) && (bounds.bottom <= this.top)) || ((this.bottom >= bounds.bottom) && (this.bottom <= bounds.top))); var inTop = (((bounds.top >= this.bottom) && (bounds.top <= this.top)) || ((this.top > bounds.bottom) && (this.top < bounds.top))); var inLeft = (((bounds.left >= this.left) && (bounds.left <= this.right)) || ((this.left >= bounds.left) && (this.left <= bounds.right))); var inRight = (((bounds.right >= this.left) && (bounds.right <= this.right)) || ((this.right >= bounds.left) && (this.right <= bounds.right))); intersects = ((inBottom || inTop) && (inLeft || inRight)); } return intersects; }, containsBounds: function (bounds, partial, inclusive) { if (partial == null) { partial = false; } if (inclusive == null) { inclusive = true; } var bottomLeft = this.contains(bounds.left, bounds.bottom, inclusive); var bottomRight = this.contains(bounds.right, bounds.bottom, inclusive); var topLeft = this.contains(bounds.left, bounds.top, inclusive); var topRight = this.contains(bounds.right, bounds.top, inclusive); return (partial) ? (bottomLeft || bottomRight || topLeft || topRight) : (bottomLeft && bottomRight && topLeft && topRight); }, determineQuadrant: function (lonlat) { var quadrant = ""; var center = this.getCenterLonLat(); quadrant += (lonlat.lat < center.lat) ? "b" : "t"; quadrant += (lonlat.lon < center.lon) ? "l" : "r"; return quadrant; }, transform: function (source, dest) { this.centerLonLat = null; var ll = OpenLayers.Projection.transform({ 'x': this.left, 'y': this.bottom }, source, dest); var lr = OpenLayers.Projection.transform({ 'x': this.right, 'y': this.bottom }, source, dest); var ul = OpenLayers.Projection.transform({ 'x': this.left, 'y': this.top }, source, dest); var ur = OpenLayers.Projection.transform({ 'x': this.right, 'y': this.top }, source, dest); this.left = Math.min(ll.x, ul.x); this.bottom = Math.min(ll.y, lr.y); this.right = Math.max(lr.x, ur.x); this.top = Math.max(ul.y, ur.y); return this; }, wrapDateLine: function (maxExtent, options) { options = options || {}; var leftTolerance = options.leftTolerance || 0; var rightTolerance = options.rightTolerance || 0; var newBounds = this.clone(); if (maxExtent) { while (newBounds.left < maxExtent.left && (newBounds.right - rightTolerance) <= maxExtent.left) { newBounds = newBounds.add(maxExtent.getWidth(), 0); } while ((newBounds.left + leftTolerance) >= maxExtent.right && newBounds.right > maxExtent.right) { newBounds = newBounds.add(-maxExtent.getWidth(), 0); } } return newBounds; }, CLASS_NAME: "OpenLayers.Bounds" }); OpenLayers.Bounds.fromString = function (str) { var bounds = str.split(","); return OpenLayers.Bounds.fromArray(bounds); }; OpenLayers.Bounds.fromArray = function (bbox) { return new OpenLayers.Bounds(parseFloat(bbox[0]), parseFloat(bbox[1]), parseFloat(bbox[2]), parseFloat(bbox[3])); }; OpenLayers.Bounds.fromSize = function (size) { return new OpenLayers.Bounds(0, size.h, size.w, 0); }; OpenLayers.Bounds.oppositeQuadrant = function (quadrant) { var opp = ""; opp += (quadrant.charAt(0) == 't') ? 'b' : 't'; opp += (quadrant.charAt(1) == 'l') ? 'r' : 'l'; return opp; }; OpenLayers.LonLat = OpenLayers.Class({ lon: 0.0, lat: 0.0, initialize: function (lon, lat) { this.lon = OpenLayers.Util.toFloat(lon); this.lat = OpenLayers.Util.toFloat(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 (lon, lat) { if ((lon == null) || (lat == null)) { var msg = OpenLayers.i18n("lonlatAddError"); OpenLayers.Console.error(msg); return null; } return new OpenLayers.LonLat(this.lon + lon, this.lat + lat); }, equals: function (ll) { var equals = false; if (ll != null) { equals = ((this.lon == ll.lon && this.lat == ll.lat) || (isNaN(this.lon) && isNaN(this.lat) && isNaN(ll.lon) && isNaN(ll.lat))); } return equals; }, transform: function (source, dest) { var point = OpenLayers.Projection.transform({ 'x': this.lon, 'y': this.lat }, source, dest); this.lon = point.x; this.lat = point.y; return this; }, wrapDateLine: function (maxExtent) { var newLonLat = this.clone(); if (maxExtent) { while (newLonLat.lon < maxExtent.left) { newLonLat.lon += maxExtent.getWidth(); } while (newLonLat.lon > maxExtent.right) { newLonLat.lon -= maxExtent.getWidth(); } } return newLonLat; }, CLASS_NAME: "OpenLayers.LonLat" }); OpenLayers.LonLat.fromString = function (str) { var pair = str.split(","); return new OpenLayers.LonLat(parseFloat(pair[0]), parseFloat(pair[1])); }; OpenLayers.Pixel = OpenLayers.Class({ x: 0.0, y: 0.0, initialize: function (x, y) { this.x = parseFloat(x); this.y = parseFloat(y); }, toString: function () { return ("x=" + this.x + ",y=" + this.y); }, clone: function () { return new OpenLayers.Pixel(this.x, this.y); }, equals: function (px) { var equals = false; if (px != null) { equals = ((this.x == px.x && this.y == px.y) || (isNaN(this.x) && isNaN(this.y) && isNaN(px.x) && isNaN(px.y))); } return equals; }, add: function (x, y) { if ((x == null) || (y == null)) { var msg = OpenLayers.i18n("pixelAddError"); OpenLayers.Console.error(msg); return null; } return new OpenLayers.Pixel(this.x + x, this.y + y); }, offset: function (px) { var newPx = this.clone(); if (px) { newPx = this.add(px.x, px.y); } return newPx; }, CLASS_NAME: "OpenLayers.Pixel" }); OpenLayers.Control = OpenLayers.Class({ id: null, map: null, div: null, type: null, allowSelection: false, displayClass: "", title: "", autoActivate: false, active: null, handler: null, eventListeners: null, events: null, EVENT_TYPES: ["activate", "deactivate"], initialize: function (options) { this.displayClass = this.CLASS_NAME.replace("OpenLayers.", "ol").replace(/\./g, ""); OpenLayers.Util.extend(this, options); this.events = new OpenLayers.Events(this, null, this.EVENT_TYPES); if (this.eventListeners instanceof Object) { this.events.on(this.eventListeners); } if (this.id == null) { this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_"); } }, destroy: function () { if (this.events) { if (this.eventListeners) { this.events.un(this.eventListeners); } this.events.destroy(); this.events = null; } this.eventListeners = null; if (this.handler) { this.handler.destroy(); this.handler = null; } if (this.handlers) { for (var key in this.handlers) { if (this.handlers.hasOwnProperty(key) && typeof this.handlers[key].destroy == "function") { this.handlers[key].destroy(); } } this.handlers = null; } if (this.map) { this.map.removeControl(this); this.map = null; } }, setMap: function (map) { this.map = map; if (this.handler) { this.handler.setMap(map); } }, draw: function (px) { if (this.div == null) { this.div = OpenLayers.Util.createDiv(this.id); this.div.className = this.displayClass; if (!this.allowSelection) { this.div.className += " olControlNoSelect"; this.div.setAttribute("unselectable", "on", 0); this.div.onselectstart = OpenLayers.Function.False; } if (this.title != "") { this.div.title = this.title; } } if (px != null) { this.position = px.clone(); } this.moveTo(this.position); return this.div; }, moveTo: function (px) { if ((px != null) && (this.div != null)) { this.div.style.left = px.x + "px"; this.div.style.top = px.y + "px"; } }, activate: function () { if (this.active) { return false; } if (this.handler) { this.handler.activate(); } this.active = true; if (this.map) { OpenLayers.Element.addClass(this.map.viewPortDiv, this.displayClass.replace(/ /g, "") + "Active"); } this.events.triggerEvent("activate"); return true; }, deactivate: function () { if (this.active) { if (this.handler) { this.handler.deactivate(); } this.active = false; if (this.map) { OpenLayers.Element.removeClass(this.map.viewPortDiv, this.displayClass.replace(/ /g, "") + "Active"); } this.events.triggerEvent("deactivate"); return true; } return false; }, CLASS_NAME: "OpenLayers.Control" }); OpenLayers.Control.TYPE_BUTTON = 1; OpenLayers.Control.TYPE_TOGGLE = 2; OpenLayers.Control.TYPE_TOOL = 3; OpenLayers.Lang = { code: null, defaultCode: "en", getCode: function () { if (!OpenLayers.Lang.code) { OpenLayers.Lang.setCode(); } return OpenLayers.Lang.code; }, setCode: function (code) { var lang; if (!code) { code = (OpenLayers.Util.getBrowserName() == "msie") ? navigator.userLanguage : navigator.language; } var parts = code.split('-'); parts[0] = parts[0].toLowerCase(); if (typeof OpenLayers.Lang[parts[0]] == "object") { lang = parts[0]; } if (parts[1]) { var testLang = parts[0] + '-' + parts[1].toUpperCase(); if (typeof OpenLayers.Lang[testLang] == "object") { lang = testLang; } } if (!lang) { OpenLayers.Console.warn('Failed to find OpenLayers.Lang.' + parts.join("-") + ' dictionary, falling back to default language'); lang = OpenLayers.Lang.defaultCode; } OpenLayers.Lang.code = lang; }, translate: function (key, context) { var dictionary = OpenLayers.Lang[OpenLayers.Lang.getCode()]; var message = dictionary[key]; if (!message) { message = key; } if (context) { message = OpenLayers.String.format(message, context); } return message; } }; OpenLayers.i18n = OpenLayers.Lang.translate; OpenLayers.Popup.Anchored = OpenLayers.Class(OpenLayers.Popup, { relativePosition: null, keepInMap: true, anchor: null, initialize: function (id, lonlat, contentSize, contentHTML, anchor, closeBox, closeBoxCallback) { var newArguments = [id, lonlat, contentSize, contentHTML, closeBox, closeBoxCallback]; OpenLayers.Popup.prototype.initialize.apply(this, newArguments); this.anchor = (anchor != null) ? anchor : { size: new OpenLayers.Size(0, 0), offset: new OpenLayers.Pixel(0, 0) }; }, destroy: function () { this.anchor = null; this.relativePosition = null; OpenLayers.Popup.prototype.destroy.apply(this, arguments); }, show: function () { this.updatePosition(); OpenLayers.Popup.prototype.show.apply(this, arguments); }, moveTo: function (px) { var oldRelativePosition = this.relativePosition; this.relativePosition = this.calculateRelativePosition(px); var newPx = this.calculateNewPx(px); var newArguments = new Array(newPx); OpenLayers.Popup.prototype.moveTo.apply(this, newArguments); if (this.relativePosition != oldRelativePosition) { this.updateRelativePosition(); } }, setSize: function (contentSize) { OpenLayers.Popup.prototype.setSize.apply(this, arguments); if ((this.lonlat) && (this.map)) { var px = this.map.getLayerPxFromLonLat(this.lonlat); this.moveTo(px); } }, calculateRelativePosition: function (px) { var lonlat = this.map.getLonLatFromLayerPx(px); var extent = this.map.getExtent(); var quadrant = extent.determineQuadrant(lonlat); return OpenLayers.Bounds.oppositeQuadrant(quadrant); }, updateRelativePosition: function () {}, calculateNewPx: function (px) { var newPx = px.offset(this.anchor.offset); var size = this.size || this.contentSize; var top = (this.relativePosition.charAt(0) == 't'); newPx.y += (top) ? -size.h : this.anchor.size.h; var left = (this.relativePosition.charAt(1) == 'l'); newPx.x += (left) ? -size.w : this.anchor.size.w; return newPx; }, CLASS_NAME: "OpenLayers.Popup.Anchored" }); OpenLayers.Protocol.SOS = function (options) { options = OpenLayers.Util.applyDefaults(options, OpenLayers.Protocol.SOS.DEFAULTS); var cls = OpenLayers.Protocol.SOS["v" + options.version.replace(/\./g, "_")]; if (!cls) { throw "Unsupported SOS version: " + options.version; } return new cls(options); }; OpenLayers.Protocol.SOS.DEFAULTS = { "version": "1.0.0" }; OpenLayers.Protocol.SQL = OpenLayers.Class(OpenLayers.Protocol, { databaseName: 'ol', tableName: "ol_vector_features", postReadFiltering: true, initialize: function (options) { OpenLayers.Protocol.prototype.initialize.apply(this, [options]); }, destroy: function () { OpenLayers.Protocol.prototype.destroy.apply(this); }, supported: function () { return false; }, evaluateFilter: function (feature, filter) { return filter && this.postReadFiltering ? filter.evaluate(feature) : true; }, CLASS_NAME: "OpenLayers.Protocol.SQL" }); OpenLayers.Protocol.WFS = function (options) { options = OpenLayers.Util.applyDefaults(options, OpenLayers.Protocol.WFS.DEFAULTS); var cls = OpenLayers.Protocol.WFS["v" + options.version.replace(/\./g, "_")]; if (!cls) { throw "Unsupported WFS version: " + options.version; } return new cls(options); }; OpenLayers.Protocol.WFS.fromWMSLayer = function (layer, options) { var typeName, featurePrefix; var param = layer.params["LAYERS"]; var parts = (param instanceof Array ? param[0] : param).split(":"); if (parts.length > 1) { featurePrefix = parts[0]; } typeName = parts.pop(); var protocolOptions = { url: layer.url, featureType: typeName, featurePrefix: featurePrefix, srsName: layer.projection && layer.projection.getCode() || layer.map && layer.map.getProjectionObject().getCode(), version: "1.1.0" }; return new OpenLayers.Protocol.WFS(OpenLayers.Util.applyDefaults(options, protocolOptions)); }; OpenLayers.Protocol.WFS.DEFAULTS = { "version": "1.0.0" }; OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, { canvas: null, features: null, geometryMap: null, initialize: function (containerID) { 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.geometryMap = {}; }, eraseGeometry: function (geometry) { this.eraseFeatures(this.features[this.geometryMap[geometry.id]][0]); }, supported: function () { var canvas = document.createElement("canvas"); return !!canvas.getContext; }, setExtent: function (extent) { this.extent = extent.clone(); this.resolution = null; this.redraw(); }, setSize: function (size) { this.size = size.clone(); this.root.style.width = size.w + "px"; this.root.style.height = size.h + "px"; this.root.width = size.w; this.root.height = size.h; this.resolution = null; }, drawFeature: function (feature, style) { if (style == null) { style = feature.style; } style = OpenLayers.Util.extend({ 'fillColor': '#000000', 'strokeColor': '#000000', 'strokeWidth': 2, 'fillOpacity': 1, 'strokeOpacity': 1 }, style); this.features[feature.id] = [feature, style]; if (feature.geometry) { this.geometryMap[feature.geometry.id] = feature.id; } this.redraw(); }, drawGeometry: function (geometry, style) { var className = geometry.CLASS_NAME; if ((className == "OpenLayers.Geometry.Collection") || (className == "OpenLayers.Geometry.MultiPoint") || (className == "OpenLayers.Geometry.MultiLineString") || (className == "OpenLayers.Geometry.MultiPolygon")) { for (var i = 0; i < geometry.components.length; i++) { this.drawGeometry(geometry.components[i], style); } return; }; switch (geometry.CLASS_NAME) { case "OpenLayers.Geometry.Point": this.drawPoint(geometry, style); break; case "OpenLayers.Geometry.LineString": this.drawLineString(geometry, style); break; case "OpenLayers.Geometry.LinearRing": this.drawLinearRing(geometry, style); break; case "OpenLayers.Geometry.Polygon": this.drawPolygon(geometry, style); break; default: break; } }, drawExternalGraphic: function (pt, style) { var img = new Image(); img.src = style.externalGraphic; if (style.graphicTitle) { img.title = style.graphicTitle; } var width = style.graphicWidth || style.graphicHeight; var height = style.graphicHeight || style.graphicWidth; width = width ? width : style.pointRadius * 2; height = height ? height : style.pointRadius * 2; var xOffset = (style.graphicXOffset != undefined) ? style.graphicXOffset : -(0.5 * width); var yOffset = (style.graphicYOffset != undefined) ? style.graphicYOffset : -(0.5 * height); var opacity = style.graphicOpacity || style.fillOpacity; var context = { img: img, x: (pt[0] + xOffset), y: (pt[1] + yOffset), width: width, height: height, canvas: this.canvas }; img.onload = OpenLayers.Function.bind(function () { this.canvas.drawImage(this.img, this.x, this.y, this.width, this.height); }, context); }, setCanvasStyle: function (type, style) { if (type == "fill") { this.canvas.globalAlpha = style['fillOpacity']; this.canvas.fillStyle = style['fillColor']; } else if (type == "stroke") { this.canvas.globalAlpha = style['strokeOpacity']; this.canvas.strokeStyle = style['strokeColor']; this.canvas.lineWidth = style['strokeWidth']; } else { this.canvas.globalAlpha = 0; this.canvas.lineWidth = 1; } }, drawPoint: function (geometry, style) { if (style.graphic !== false) { var pt = this.getLocalXY(geometry); if (style.externalGraphic) { this.drawExternalGraphic(pt, style); } else { if (style.fill !== false) { this.setCanvasStyle("fill", style); this.canvas.beginPath(); this.canvas.arc(pt[0], pt[1], style.pointRadius, 0, Math.PI * 2, true); this.canvas.fill(); } if (style.stroke !== false) { this.setCanvasStyle("stroke", style); this.canvas.beginPath(); this.canvas.arc(pt[0], pt[1], style.pointRadius, 0, Math.PI * 2, true); this.canvas.stroke(); this.setCanvasStyle("reset"); } } } }, drawLineString: function (geometry, style) { if (style.stroke !== false) { this.setCanvasStyle("stroke", style); this.canvas.beginPath(); var start = this.getLocalXY(geometry.components[0]); this.canvas.moveTo(start[0], start[1]); for (var i = 1; i < geometry.components.length; i++) { var pt = this.getLocalXY(geometry.components[i]); this.canvas.lineTo(pt[0], pt[1]); } this.canvas.stroke(); } this.setCanvasStyle("reset"); }, drawLinearRing: function (geometry, style) { if (style.fill !== false) { this.setCanvasStyle("fill", style); this.canvas.beginPath(); var start = this.getLocalXY(geometry.components[0]); this.canvas.moveTo(start[0], start[1]); for (var i = 1; i < geometry.components.length - 1; i++) { var pt = this.getLocalXY(geometry.components[i]); this.canvas.lineTo(pt[0], pt[1]); } this.canvas.fill(); } if (style.stroke !== false) { var oldWidth = this.canvas.lineWidth; this.setCanvasStyle("stroke", style); this.canvas.beginPath(); var start = this.getLocalXY(geometry.components[0]); this.canvas.moveTo(start[0], start[1]); for (var i = 1; i < geometry.components.length; i++) { var pt = this.getLocalXY(geometry.components[i]); this.canvas.lineTo(pt[0], pt[1]); } this.canvas.stroke(); } this.setCanvasStyle("reset"); }, drawPolygon: function (geometry, style) { this.drawLinearRing(geometry.components[0], style); for (var i = 1; i < geometry.components.length; i++) { this.drawLinearRing(geometry.components[i], { fillOpacity: 0, strokeWidth: 0, strokeOpacity: 0, strokeColor: '#000000', fillColor: '#000000' }); } }, drawText: function (location, style) { style = OpenLayers.Util.extend({ fontColor: "#000000", labelAlign: "cm" }, style); var pt = this.getLocalXY(location); this.setCanvasStyle("reset"); this.canvas.fillStyle = style.fontColor; this.canvas.globalAlpha = style.fontOpacity || 1.0; var fontStyle = style.fontWeight + " " + style.fontSize + " " + style.fontFamily; if (this.canvas.fillText) { var labelAlign = OpenLayers.Renderer.Canvas.LABEL_ALIGN[style.labelAlign[0]] || "center"; this.canvas.font = fontStyle; this.canvas.textAlign = labelAlign; this.canvas.fillText(style.label, pt[0], pt[1]); } else if (this.canvas.mozDrawText) { this.canvas.mozTextStyle = fontStyle; var len = this.canvas.mozMeasureText(style.label); switch (style.labelAlign[0]) { case "l": break; case "r": pt[0] -= len; break; case "c": default: pt[0] -= len / 2; } this.canvas.translate(pt[0], pt[1]); this.canvas.mozDrawText(style.label); this.canvas.translate(-1 * pt[0], -1 * pt[1]); } this.setCanvasStyle("reset"); }, getLocalXY: function (point) { var resolution = this.getResolution(); var extent = this.extent; var x = (point.x / resolution + (-extent.left / resolution)); var y = ((extent.top / resolution) - point.y / resolution); return [x, y]; }, clear: function () { this.canvas.clearRect(0, 0, this.root.width, this.root.height); }, getFeatureIdFromEvent: function (evt) { var loc = this.map.getLonLatFromPixel(evt.xy); var resolution = this.getResolution(); var bounds = new OpenLayers.Bounds(loc.lon - resolution * 5, loc.lat - resolution * 5, loc.lon + resolution * 5, loc.lat + resolution * 5); var geom = bounds.toGeometry(); for (var feat in this.features) { if (!this.features.hasOwnProperty(feat)) { continue; } if (this.features[feat][0].geometry.intersects(geom)) { return feat; } } return null; }, eraseFeatures: function (features) { if (!(features instanceof Array)) { features = [features]; } for (var i = 0; i < features.length; ++i) { delete this.features[features[i].id]; } this.redraw(); }, redraw: function () { if (!this.locked) { this.clear(); var labelMap = []; var feature, style; for (var id in this.features) { if (!this.features.hasOwnProperty(id)) { continue; } feature = this.features[id][0]; style = this.features[id][1]; if (!feature.geometry) { continue; } this.drawGeometry(feature.geometry, style); if (style.label) { labelMap.push([feature, style]); } } var item; for (var i = 0; len = labelMap.length, i < len; ++i) { item = labelMap[i]; this.drawText(item[0].geometry.getCentroid(), item[1]); } } }, CLASS_NAME: "OpenLayers.Renderer.Canvas" }); OpenLayers.Renderer.Canvas.LABEL_ALIGN = { "l": "left", "r": "right" }; OpenLayers.ElementsIndexer = OpenLayers.Class({ maxZIndex: null, order: null, indices: null, compare: null, initialize: function (yOrdering) { this.compare = yOrdering ? OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER_Y_ORDER : OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER_DRAWING_ORDER; this.order = []; this.indices = {}; this.maxZIndex = 0; }, insert: function (newNode) { if (this.exists(newNode)) { this.remove(newNode); } var nodeId = newNode.id; this.determineZIndex(newNode); var leftIndex = -1; var rightIndex = this.order.length; var middle; while (rightIndex - leftIndex > 1) { middle = parseInt((leftIndex + rightIndex) / 2); var placement = this.compare(this, newNode, OpenLayers.Util.getElement(this.order[middle])); if (placement > 0) { leftIndex = middle; } else { rightIndex = middle; } } this.order.splice(rightIndex, 0, nodeId); this.indices[nodeId] = this.getZIndex(newNode); return this.getNextElement(rightIndex); }, remove: function (node) { var nodeId = node.id; var arrayIndex = OpenLayers.Util.indexOf(this.order, nodeId); if (arrayIndex >= 0) { this.order.splice(arrayIndex, 1); delete this.indices[nodeId]; if (this.order.length > 0) { var lastId = this.order[this.order.length - 1]; this.maxZIndex = this.indices[lastId]; } else { this.maxZIndex = 0; } } }, clear: function () { this.order = []; this.indices = {}; this.maxZIndex = 0; }, exists: function (node) { return (this.indices[node.id] != null); }, getZIndex: function (node) { return node._style.graphicZIndex; }, determineZIndex: function (node) { var zIndex = node._style.graphicZIndex; if (zIndex == null) { zIndex = this.maxZIndex; node._style.graphicZIndex = zIndex; } else if (zIndex > this.maxZIndex) { this.maxZIndex = zIndex; } }, getNextElement: function (index) { var nextIndex = index + 1; if (nextIndex < this.order.length) { var nextElement = OpenLayers.Util.getElement(this.order[nextIndex]); if (nextElement == undefined) { nextElement = this.getNextElement(nextIndex); } return nextElement; } else { return null; } }, CLASS_NAME: "OpenLayers.ElementsIndexer" }); OpenLayers.ElementsIndexer.IndexingMethods = { Z_ORDER: function (indexer, newNode, nextNode) { var newZIndex = indexer.getZIndex(newNode); var returnVal = 0; if (nextNode) { var nextZIndex = indexer.getZIndex(nextNode); returnVal = newZIndex - nextZIndex; } return returnVal; }, Z_ORDER_DRAWING_ORDER: function (indexer, newNode, nextNode) { var returnVal = OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER(indexer, newNode, nextNode); if (nextNode && returnVal == 0) { returnVal = 1; } return returnVal; }, Z_ORDER_Y_ORDER: function (indexer, newNode, nextNode) { var returnVal = OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER(indexer, newNode, nextNode); if (nextNode && returnVal === 0) { var result = nextNode._boundsBottom - newNode._boundsBottom; returnVal = (result === 0) ? 1 : result; } return returnVal; } }; OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, { rendererRoot: null, root: null, vectorRoot: null, textRoot: null, xmlns: null, indexer: null, BACKGROUND_ID_SUFFIX: "_background", LABEL_ID_SUFFIX: "_label", minimumSymbolizer: { strokeLinecap: "round", strokeOpacity: 1, strokeDashstyle: "solid", fillOpacity: 1, pointRadius: 0 }, initialize: function (containerID, options) { 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 (options && (options.zIndexing || options.yOrdering)) { this.indexer = new OpenLayers.ElementsIndexer(options.yOrdering); } }, destroy: function () { this.clear(); this.rendererRoot = null; this.root = null; this.xmlns = null; OpenLayers.Renderer.prototype.destroy.apply(this, arguments); }, clear: function () { if (this.vectorRoot) { while (this.vectorRoot.childNodes.length > 0) { this.vectorRoot.removeChild(this.vectorRoot.firstChild); } } if (this.textRoot) { while (this.textRoot.childNodes.length > 0) { this.textRoot.removeChild(this.textRoot.firstChild); } } if (this.indexer) { this.indexer.clear(); } }, getNodeType: function (geometry, style) {}, drawGeometry: function (geometry, style, featureId) { var className = geometry.CLASS_NAME; var rendered = true; if ((className == "OpenLayers.Geometry.Collection") || (className == "OpenLayers.Geometry.MultiPoint") || (className == "OpenLayers.Geometry.MultiLineString") || (className == "OpenLayers.Geometry.MultiPolygon")) { for (var i = 0, len = geometry.components.length; i < len; i++) { rendered = this.drawGeometry(geometry.components[i], style, featureId) && rendered; } return rendered; }; rendered = false; if (style.display != "none") { if (style.backgroundGraphic) { this.redrawBackgroundNode(geometry.id, geometry, style, featureId); } rendered = this.redrawNode(geometry.id, geometry, style, featureId); } if (rendered == false) { var node = document.getElementById(geometry.id); if (node) { if (node._style.backgroundGraphic) { node.parentNode.removeChild(document.getElementById(geometry.id + this.BACKGROUND_ID_SUFFIX)); } node.parentNode.removeChild(node); } } return rendered; }, redrawNode: function (id, geometry, style, featureId) { var node = this.nodeFactory(id, this.getNodeType(geometry, style)); node._featureId = featureId; node._boundsBottom = geometry.getBounds().bottom; node._geometryClass = geometry.CLASS_NAME; node._style = style; var drawResult = this.drawGeometryNode(node, geometry, style); if (drawResult === false) { return false; } node = drawResult.node; if (this.indexer) { var insert = this.indexer.insert(node); if (insert) { this.vectorRoot.insertBefore(node, insert); } else { this.vectorRoot.appendChild(node); } } else { if (node.parentNode !== this.vectorRoot) { this.vectorRoot.appendChild(node); } } this.postDraw(node); return drawResult.complete; }, redrawBackgroundNode: function (id, geometry, style, featureId) { var backgroundStyle = OpenLayers.Util.extend({}, style); backgroundStyle.externalGraphic = backgroundStyle.backgroundGraphic; backgroundStyle.graphicXOffset = backgroundStyle.backgroundXOffset; backgroundStyle.graphicYOffset = backgroundStyle.backgroundYOffset; backgroundStyle.graphicZIndex = backgroundStyle.backgroundGraphicZIndex; backgroundStyle.graphicWidth = backgroundStyle.backgroundWidth || backgroundStyle.graphicWidth; backgroundStyle.graphicHeight = backgroundStyle.backgroundHeight || backgroundStyle.graphicHeight; backgroundStyle.backgroundGraphic = null; backgroundStyle.backgroundXOffset = null; backgroundStyle.backgroundYOffset = null; backgroundStyle.backgroundGraphicZIndex = null; return this.redrawNode(id + this.BACKGROUND_ID_SUFFIX, geometry, backgroundStyle, null); }, drawGeometryNode: function (node, geometry, style) { style = style || node._style; OpenLayers.Util.applyDefaults(style, this.minimumSymbolizer); var options = { 'isFilled': style.fill === undefined ? true : style.fill, 'isStroked': style.stroke === undefined ? !! style.strokeWidth : style.stroke }; var drawn; switch (geometry.CLASS_NAME) { case "OpenLayers.Geometry.Point": if (style.graphic === false) { options.isFilled = false; options.isStroked = false; } drawn = this.drawPoint(node, geometry); break; case "OpenLayers.Geometry.LineString": options.isFilled = false; drawn = this.drawLineString(node, geometry); break; case "OpenLayers.Geometry.LinearRing": drawn = this.drawLinearRing(node, geometry); break; case "OpenLayers.Geometry.Polygon": drawn = this.drawPolygon(node, geometry); break; case "OpenLayers.Geometry.Surface": drawn = this.drawSurface(node, geometry); break; case "OpenLayers.Geometry.Rectangle": drawn = this.drawRectangle(node, geometry); break; default: break; } node._options = options; if (drawn != false) { return { node: this.setStyle(node, style, options, geometry), complete: drawn }; } else { return false; } }, postDraw: function (node) {}, drawPoint: function (node, geometry) {}, drawLineString: function (node, geometry) {}, drawLinearRing: function (node, geometry) {}, drawPolygon: function (node, geometry) {}, drawRectangle: function (node, geometry) {}, drawCircle: function (node, geometry) {}, drawSurface: function (node, geometry) {}, removeText: function (featureId) { var label = document.getElementById(featureId + this.LABEL_ID_SUFFIX); if (label) { this.textRoot.removeChild(label); } }, getFeatureIdFromEvent: function (evt) { var target = evt.target; var useElement = target && target.correspondingUseElement; var node = useElement ? useElement : (target || evt.srcElement); var featureId = node._featureId; return featureId; }, eraseGeometry: function (geometry) { if ((geometry.CLASS_NAME == "OpenLayers.Geometry.MultiPoint") || (geometry.CLASS_NAME == "OpenLayers.Geometry.MultiLineString") || (geometry.CLASS_NAME == "OpenLayers.Geometry.MultiPolygon") || (geometry.CLASS_NAME == "OpenLayers.Geometry.Collection")) { for (var i = 0, len = geometry.components.length; i < len; i++) { this.eraseGeometry(geometry.components[i]); } } else { var element = OpenLayers.Util.getElement(geometry.id); if (element && element.parentNode) { if (element.geometry) { element.geometry.destroy(); element.geometry = null; } element.parentNode.removeChild(element); if (this.indexer) { this.indexer.remove(element); } if (element._style.backgroundGraphic) { var backgroundId = geometry.id + this.BACKGROUND_ID_SUFFIX; var bElem = OpenLayers.Util.getElement(backgroundId); if (bElem && bElem.parentNode) { bElem.parentNode.removeChild(bElem); } } } } }, nodeFactory: function (id, type) { var node = OpenLayers.Util.getElement(id); if (node) { if (!this.nodeTypeCompare(node, type)) { node.parentNode.removeChild(node); node = this.nodeFactory(id, type); } } else { node = this.createNode(type, id); } return node; }, nodeTypeCompare: function (node, type) {}, createNode: function (type, id) {}, moveRoot: function (renderer) { var root = this.root; if (renderer.root.parentNode == this.rendererRoot) { root = renderer.root; } root.parentNode.removeChild(root); renderer.rendererRoot.appendChild(root); }, getRenderLayerId: function () { return this.root.parentNode.parentNode.id; }, isComplexSymbol: function (graphicName) { return (graphicName != "circle") && !! graphicName; }, CLASS_NAME: "OpenLayers.Renderer.Elements" }); 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.Strategy.Cluster = OpenLayers.Class(OpenLayers.Strategy, { distance: 20, threshold: null, features: null, clusters: null, clustering: false, resolution: null, initialize: function (options) { OpenLayers.Strategy.prototype.initialize.apply(this, [options]); }, activate: function () { var activated = OpenLayers.Strategy.prototype.activate.call(this); if (activated) { this.layer.events.on({ "beforefeaturesadded": this.cacheFeatures, "moveend": this.cluster, scope: this }); } return activated; }, deactivate: function () { var deactivated = OpenLayers.Strategy.prototype.deactivate.call(this); if (deactivated) { this.clearCache(); this.layer.events.un({ "beforefeaturesadded": this.cacheFeatures, "moveend": this.cluster, scope: this }); } return deactivated; }, cacheFeatures: function (event) { var propagate = true; if (!this.clustering) { this.clearCache(); this.features = event.features; this.cluster(); propagate = false; } return propagate; }, clearCache: function () { this.features = null; }, cluster: function (event) { if ((!event || event.zoomChanged) && this.features) { var resolution = this.layer.map.getResolution(); if (resolution != this.resolution || !this.clustersExist()) { this.resolution = resolution; var clusters = []; var feature, clustered, cluster; for (var i = 0; i < this.features.length; ++i) { feature = this.features[i]; if (feature.geometry) { clustered = false; for (var j = 0; j < clusters.length; ++j) { cluster = clusters[j]; if (this.shouldCluster(cluster, feature)) { this.addToCluster(cluster, feature); clustered = true; break; } } if (!clustered) { clusters.push(this.createCluster(this.features[i])); } } } this.layer.destroyFeatures(); if (clusters.length > 0) { if (this.threshold > 1) { var clone = clusters.slice(); clusters = []; var candidate; for (var i = 0, len = clone.length; i < len; ++i) { candidate = clone[i]; if (candidate.attributes.count < this.threshold) { Array.prototype.push.apply(clusters, candidate.cluster); } else { clusters.push(candidate); } } } this.clustering = true; this.layer.addFeatures(clusters); this.clustering = false; } this.clusters = clusters; } } }, clustersExist: function () { var exist = false; if (this.clusters && this.clusters.length > 0 && this.clusters.length == this.layer.features.length) { exist = true; for (var i = 0; i < this.clusters.length; ++i) { if (this.clusters[i] != this.layer.features[i]) { exist = false; break; } } } return exist; }, shouldCluster: function (cluster, feature) { var cc = cluster.geometry.getBounds().getCenterLonLat(); var fc = feature.geometry.getBounds().getCenterLonLat(); var distance = (Math.sqrt(Math.pow((cc.lon - fc.lon), 2) + Math.pow((cc.lat - fc.lat), 2)) / this.resolution); return (distance <= this.distance); }, addToCluster: function (cluster, feature) { cluster.cluster.push(feature); cluster.attributes.count += 1; }, createCluster: function (feature) { var center = feature.geometry.getBounds().getCenterLonLat(); var cluster = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(center.lon, center.lat), { count: 1 }); cluster.cluster = [feature]; return cluster; }, CLASS_NAME: "OpenLayers.Strategy.Cluster" }); OpenLayers.Strategy.Fixed = OpenLayers.Class(OpenLayers.Strategy, { preload: false, initialize: function (options) { OpenLayers.Strategy.prototype.initialize.apply(this, [options]); }, destroy: function () { OpenLayers.Strategy.prototype.destroy.apply(this, arguments); }, activate: function () { if (OpenLayers.Strategy.prototype.activate.apply(this, arguments)) { this.layer.events.on({ "refresh": this.load, scope: this }); if (this.layer.visibility == true || this.preload) { this.load(); } else { this.layer.events.on({ "visibilitychanged": this.load, scope: this }); } return true; } return false; }, deactivate: function () { var deactivated = OpenLayers.Strategy.prototype.deactivate.call(this); if (deactivated) { this.layer.events.un({ "refresh": this.load, "visibilitychanged": this.load, scope: this }); } return deactivated; }, load: function (options) { this.layer.events.triggerEvent("loadstart"); this.layer.protocol.read(OpenLayers.Util.applyDefaults({ callback: this.merge, filter: this.layer.filter, scope: this }, options)); this.layer.events.un({ "visibilitychanged": this.load, scope: this }); }, merge: function (resp) { this.layer.destroyFeatures(); var features = resp.features; if (features && features.length > 0) { var remote = this.layer.projection; var local = this.layer.map.getProjectionObject(); if (!local.equals(remote)) { var geom; for (var i = 0, len = features.length; i < len; ++i) { geom = features[i].geometry; if (geom) { geom.transform(remote, local); } } } this.layer.addFeatures(features); } this.layer.events.triggerEvent("loadend"); }, CLASS_NAME: "OpenLayers.Strategy.Fixed" }); OpenLayers.Strategy.Paging = OpenLayers.Class(OpenLayers.Strategy, { features: null, length: 10, num: null, paging: false, initialize: function (options) { OpenLayers.Strategy.prototype.initialize.apply(this, [options]); }, activate: function () { var activated = OpenLayers.Strategy.prototype.activate.call(this); if (activated) { this.layer.events.on({ "beforefeaturesadded": this.cacheFeatures, scope: this }); } return activated; }, deactivate: function () { var deactivated = OpenLayers.Strategy.prototype.deactivate.call(this); if (deactivated) { this.clearCache(); this.layer.events.un({ "beforefeaturesadded": this.cacheFeatures, scope: this }); } return deactivated; }, cacheFeatures: function (event) { if (!this.paging) { this.clearCache(); this.features = event.features; this.pageNext(event); } }, clearCache: function () { if (this.features) { for (var i = 0; i < this.features.length; ++i) { this.features[i].destroy(); } } this.features = null; this.num = null; }, pageCount: function () { var numFeatures = this.features ? this.features.length : 0; return Math.ceil(numFeatures / this.length); }, pageNum: function () { return this.num; }, pageLength: function (newLength) { if (newLength && newLength > 0) { this.length = newLength; } return this.length; }, pageNext: function (event) { var changed = false; if (this.features) { if (this.num === null) { this.num = -1; } var start = (this.num + 1) * this.length; changed = this.page(start, event); } return changed; }, pagePrevious: function () { var changed = false; if (this.features) { if (this.num === null) { this.num = this.pageCount(); } var start = (this.num - 1) * this.length; changed = this.page(start); } return changed; }, page: function (start, event) { var changed = false; if (this.features) { if (start >= 0 && start < this.features.length) { var num = Math.floor(start / this.length); if (num != this.num) { this.paging = true; var features = this.features.slice(start, start + this.length); this.layer.removeFeatures(this.layer.features); this.num = num; if (event && event.features) { event.features = features; } else { this.layer.addFeatures(features); } this.paging = false; changed = true; } } } return changed; }, CLASS_NAME: "OpenLayers.Strategy.Paging" }); OpenLayers.Strategy.Refresh = OpenLayers.Class(OpenLayers.Strategy, { force: false, interval: 0, timer: null, initialize: function (options) { OpenLayers.Strategy.prototype.initialize.apply(this, [options]); }, activate: function () { var activated = OpenLayers.Strategy.prototype.activate.call(this); if (activated) { if (this.layer.visibility === true) { this.start(); } this.layer.events.on({ "visibilitychanged": this.reset, scope: this }); } return activated; }, deactivate: function () { var deactivated = OpenLayers.Strategy.prototype.deactivate.call(this); if (deactivated) { this.stop(); } return deactivated; }, reset: function () { if (this.layer.visibility === true) { this.start(); } else { this.stop(); } }, start: function () { if (this.interval && typeof this.interval === "number" && this.interval > 0) { this.timer = window.setInterval(OpenLayers.Function.bind(this.refresh, this), this.interval); } }, refresh: function () { if (this.layer && this.layer.refresh && typeof this.layer.refresh == "function") { this.layer.refresh({ force: this.force }); } }, stop: function () { if (this.timer !== null) { window.clearInterval(this.timer); this.timer = null; } }, CLASS_NAME: "OpenLayers.Strategy.Refresh" }); OpenLayers.Strategy.Save = OpenLayers.Class(OpenLayers.Strategy, { EVENT_TYPES: ["start", "success", "fail"], events: null, auto: false, timer: null, initialize: function (options) { OpenLayers.Strategy.prototype.initialize.apply(this, [options]); this.events = new OpenLayers.Events(this, null, this.EVENT_TYPES); }, activate: function () { var activated = OpenLayers.Strategy.prototype.activate.call(this); if (activated) { if (this.auto) { if (typeof this.auto === "number") { this.timer = window.setInterval(OpenLayers.Function.bind(this.save, this), this.auto * 1000) } else { this.layer.events.on({ "featureadded": this.triggerSave, "afterfeaturemodified": this.triggerSave, scope: this }); } } } return activated; }, deactivate: function () { var deactivated = OpenLayers.Strategy.prototype.deactivate.call(this); if (deactivated) { if (this.auto) { if (typeof this.auto === "number") { window.clearInterval(this.timer); } else { this.layer.events.un({ "featureadded": this.triggerSave, "afterfeaturemodified": this.triggerSave, scope: this }) } } } return deactivated; }, triggerSave: function (event) { var feature = event.feature; if (feature.state === OpenLayers.State.INSERT || feature.state === OpenLayers.State.UPDATE || feature.state === OpenLayers.State.DELETE) { this.save([event.feature]); } }, save: function (features) { if (!features) { features = this.layer.features; } this.events.triggerEvent("start", { features: features }); var remote = this.layer.projection; var local = this.layer.map.getProjectionObject(); if (!local.equals(remote)) { var len = features.length; var clones = new Array(len); var orig, clone; for (var i = 0; i < len; ++i) { orig = features[i]; clone = orig.clone(); clone.fid = orig.fid; clone.state = orig.state; if (orig.url) { clone.url = orig.url; } clone._original = orig; clone.geometry.transform(local, remote); clones[i] = clone; } features = clones; } this.layer.protocol.commit(features, { callback: this.onCommit, scope: this }); }, onCommit: function (response) { var evt = { "response": response }; if (response.success()) { var features = response.reqFeatures; var state, feature; var destroys = []; var insertIds = response.insertIds || []; var j = 0; for (var i = 0, len = features.length; i < len; ++i) { feature = features[i]; feature = feature._original || feature; state = feature.state; if (state) { if (state == OpenLayers.State.DELETE) { destroys.push(feature); } else if (state == OpenLayers.State.INSERT) { feature.fid = insertIds[j]; ++j; } feature.state = null; } } if (destroys.length > 0) { this.layer.destroyFeatures(destroys); } this.events.triggerEvent("success", evt); } else { this.events.triggerEvent("fail", evt); } }, CLASS_NAME: "OpenLayers.Strategy.Save" }); OpenLayers.Tween = OpenLayers.Class({ INTERVAL: 10, easing: null, begin: null, finish: null, duration: null, callbacks: null, time: null, interval: null, playing: false, initialize: function (easing) { this.easing = (easing) ? easing : OpenLayers.Easing.Expo.easeOut; }, start: function (begin, finish, duration, options) { this.playing = true; this.begin = begin; this.finish = finish; this.duration = duration; this.callbacks = options.callbacks; this.time = 0; if (this.interval) { window.clearInterval(this.interval); this.interval = null; } if (this.callbacks && this.callbacks.start) { this.callbacks.start.call(this, this.begin); } this.interval = window.setInterval(OpenLayers.Function.bind(this.play, this), this.INTERVAL); }, stop: function () { if (!this.playing) { return; } if (this.callbacks && this.callbacks.done) { this.callbacks.done.call(this, this.finish); } window.clearInterval(this.interval); this.interval = null; this.playing = false; }, play: function () { var value = {}; for (var i in this.begin) { var b = this.begin[i]; var f = this.finish[i]; if (b == null || f == null || isNaN(b) || isNaN(f)) { OpenLayers.Console.error('invalid value for Tween'); } var c = f - b; value[i] = this.easing.apply(this, [this.time, b, c, this.duration]); } this.time++; if (this.callbacks && this.callbacks.eachStep) { this.callbacks.eachStep.call(this, value); } if (this.time > this.duration) { if (this.callbacks && this.callbacks.done) { this.callbacks.done.call(this, this.finish); this.playing = false; } window.clearInterval(this.interval); this.interval = null; } }, CLASS_NAME: "OpenLayers.Tween" }); OpenLayers.Easing = { CLASS_NAME: "OpenLayers.Easing" }; OpenLayers.Easing.Linear = { easeIn: function (t, b, c, d) { return c * t / d + b; }, easeOut: function (t, b, c, d) { return c * t / d + b; }, easeInOut: function (t, b, c, d) { return c * t / d + b; }, CLASS_NAME: "OpenLayers.Easing.Linear" }; OpenLayers.Easing.Expo = { easeIn: function (t, b, c, d) { return (t == 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b; }, easeOut: function (t, b, c, d) { return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b; }, easeInOut: function (t, b, c, d) { if (t == 0) return b; if (t == d) return b + c; if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b; return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b; }, CLASS_NAME: "OpenLayers.Easing.Expo" }; OpenLayers.Easing.Quad = { easeIn: function (t, b, c, d) { return c * (t /= d) * t + b; }, easeOut: function (t, b, c, d) { return -c * (t /= d) * (t - 2) + b; }, easeInOut: function (t, b, c, d) { if ((t /= d / 2) < 1) return c / 2 * t * t + b; return -c / 2 * ((--t) * (t - 2) - 1) + b; }, CLASS_NAME: "OpenLayers.Easing.Quad" }; OpenLayers.Control.ArgParser = OpenLayers.Class(OpenLayers.Control, { center: null, zoom: null, layers: null, displayProjection: null, initialize: function (options) { OpenLayers.Control.prototype.initialize.apply(this, arguments); }, setMap: function (map) { OpenLayers.Control.prototype.setMap.apply(this, arguments); for (var i = 0, len = this.map.controls.length; i < len; i++) { var control = this.map.controls[i]; if ((control != this) && (control.CLASS_NAME == "OpenLayers.Control.ArgParser")) { if (control.displayProjection != this.displayProjection) { this.displayProjection = control.displayProjection; } break; } } if (i == this.map.controls.length) { var args = OpenLayers.Util.getParameters(); if (args.layers) { this.layers = args.layers; this.map.events.register('addlayer', this, this.configureLayers); this.configureLayers(); } if (args.lat && args.lon) { this.center = new OpenLayers.LonLat(parseFloat(args.lon), parseFloat(args.lat)); if (args.zoom) { this.zoom = parseInt(args.zoom); } this.map.events.register('changebaselayer', this, this.setCenter); this.setCenter(); } } }, setCenter: function () { if (this.map.baseLayer) { this.map.events.unregister('changebaselayer', this, this.setCenter); if (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 i = 0, len = this.layers.length; i < len; i++) { var layer = this.map.layers[i]; var c = this.layers.charAt(i); if (c == "B") { this.map.setBaseLayer(layer); } else if ((c == "T") || (c == "F")) { layer.setVisibility(c == "T"); } } } }, CLASS_NAME: "OpenLayers.Control.ArgParser" }); OpenLayers.Control.Attribution = OpenLayers.Class(OpenLayers.Control, { separator: ", ", initialize: function (options) { OpenLayers.Control.prototype.initialize.apply(this, arguments); }, 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 attributions = []; if (this.map && this.map.layers) { for (var i = 0, len = this.map.layers.length; i < len; i++) { var layer = this.map.layers[i]; if (layer.attribution && layer.getVisibility()) { if (OpenLayers.Util.indexOf(attributions, layer.attribution) === -1) { attributions.push(layer.attribution); } } } this.div.innerHTML = attributions.join(this.separator); } }, CLASS_NAME: "OpenLayers.Control.Attribution" }); OpenLayers.Control.Button = OpenLayers.Class(OpenLayers.Control, { type: OpenLayers.Control.TYPE_BUTTON, trigger: function () {}, CLASS_NAME: "OpenLayers.Control.Button" }); OpenLayers.Control.Graticule = OpenLayers.Class(OpenLayers.Control, { 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: true, visible: true, numPoints: 50, targetSize: 200, layerName: "Graticule", labelled: true, labelFormat: 'dm', lineSymbolizer: { strokeColor: "#333", strokeWidth: 1, strokeOpacity: 0.5 }, labelSymbolizer: {}, gratLayer: null, initialize: function (options) { OpenLayers.Control.prototype.initialize.apply(this, [options]); this.labelSymbolizer.stroke = false; this.labelSymbolizer.fill = false; this.labelSymbolizer.label = "${label}"; this.labelSymbolizer.labelAlign = "${labelAlign}"; this.labelSymbolizer.labelXOffset = "${xOffset}"; this.labelSymbolizer.labelYOffset = "${yOffset}"; }, draw: function () { OpenLayers.Control.prototype.draw.apply(this, arguments); if (!this.gratLayer) { var gratStyle = 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': gratStyle }), visibility: this.visible, displayInLayerSwitcher: this.displayInLayerSwitcher }); this.map.addLayer(this.gratLayer); } this.map.events.register('moveend', this, this.update); this.update(); return this.div; }, update: function () { var mapBounds = this.map.getExtent(); if (!mapBounds) { return; } this.gratLayer.destroyFeatures(); var llProj = new OpenLayers.Projection("EPSG:4326"); var mapProj = this.map.getProjectionObject(); var mapRes = this.map.getResolution(); if (mapProj.proj && mapProj.proj.projName == "longlat") { this.numPoints = 1; } var mapCenter = this.map.getCenter(); var mapCenterLL = new OpenLayers.Pixel(mapCenter.lon, mapCenter.lat); OpenLayers.Projection.transform(mapCenterLL, mapProj, llProj); var testSq = this.targetSize * mapRes; testSq *= testSq; var llInterval; for (var i = 0; i < this.intervals.length; ++i) { llInterval = this.intervals[i]; var delta = llInterval / 2; var p1 = mapCenterLL.offset(new OpenLayers.Pixel(-delta, -delta)); var p2 = mapCenterLL.offset(new OpenLayers.Pixel(delta, delta)); OpenLayers.Projection.transform(p1, llProj, mapProj); OpenLayers.Projection.transform(p2, llProj, mapProj); var distSq = (p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y); if (distSq <= testSq) { break; } } mapCenterLL.x = Math.floor(mapCenterLL.x / llInterval) * llInterval; mapCenterLL.y = Math.floor(mapCenterLL.y / llInterval) * llInterval; var iter = 0; var centerLonPoints = [mapCenterLL.clone()]; var newPoint = mapCenterLL.clone(); var mapXY; do { newPoint = newPoint.offset(new OpenLayers.Pixel(0, llInterval)); mapXY = OpenLayers.Projection.transform(newPoint.clone(), llProj, mapProj); centerLonPoints.unshift(newPoint); } while (mapBounds.containsPixel(mapXY) && ++iter < 1000); newPoint = mapCenterLL.clone(); do { newPoint = newPoint.offset(new OpenLayers.Pixel(0, -llInterval)); mapXY = OpenLayers.Projection.transform(newPoint.clone(), llProj, mapProj); centerLonPoints.push(newPoint); } while (mapBounds.containsPixel(mapXY) && ++iter < 1000); iter = 0; var centerLatPoints = [mapCenterLL.clone()]; newPoint = mapCenterLL.clone(); do { newPoint = newPoint.offset(new OpenLayers.Pixel(-llInterval, 0)); mapXY = OpenLayers.Projection.transform(newPoint.clone(), llProj, mapProj); centerLatPoints.unshift(newPoint); } while (mapBounds.containsPixel(mapXY) && ++iter < 1000); newPoint = mapCenterLL.clone(); do { newPoint = newPoint.offset(new OpenLayers.Pixel(llInterval, 0)); mapXY = OpenLayers.Projection.transform(newPoint.clone(), llProj, mapProj); centerLatPoints.push(newPoint); } while (mapBounds.containsPixel(mapXY) && ++iter < 1000); var lines = []; for (var i = 0; i < centerLatPoints.length; ++i) { var lon = centerLatPoints[i].x; var pointList = []; var labelPoint = null; var latEnd = Math.min(centerLonPoints[0].y, 90); var latStart = Math.max(centerLonPoints[centerLonPoints.length - 1].y, -90); var latDelta = (latEnd - latStart) / this.numPoints; var lat = latStart; for (var j = 0; j <= this.numPoints; ++j) { var gridPoint = new OpenLayers.Geometry.Point(lon, lat); gridPoint.transform(llProj, mapProj); pointList.push(gridPoint); lat += latDelta; if (gridPoint.y >= mapBounds.bottom && !labelPoint) { labelPoint = gridPoint; } } if (this.labelled) { var labelPos = new OpenLayers.Geometry.Point(labelPoint.x, mapBounds.bottom); var labelAttrs = { value: lon, label: this.labelled ? OpenLayers.Util.getFormattedLonLat(lon, "lon", this.labelFormat) : "", labelAlign: "cb", xOffset: 0, yOffset: 2 }; this.gratLayer.addFeatures(new OpenLayers.Feature.Vector(labelPos, labelAttrs)); } var geom = new OpenLayers.Geometry.LineString(pointList); lines.push(new OpenLayers.Feature.Vector(geom)); } for (var j = 0; j < centerLonPoints.length; ++j) { lat = centerLonPoints[j].y; if (lat < -90 || lat > 90) { continue; } var pointList = []; var lonStart = centerLatPoints[0].x; var lonEnd = centerLatPoints[centerLatPoints.length - 1].x; var lonDelta = (lonEnd - lonStart) / this.numPoints; var lon = lonStart; var labelPoint = null; for (var i = 0; i <= this.numPoints; ++i) { var gridPoint = new OpenLayers.Geometry.Point(lon, lat); gridPoint.transform(llProj, mapProj); pointList.push(gridPoint); lon += lonDelta; if (gridPoint.x < mapBounds.right) { labelPoint = gridPoint; } } if (this.labelled) { var labelPos = new OpenLayers.Geometry.Point(mapBounds.right, labelPoint.y); var labelAttrs = { value: lat, label: this.labelled ? OpenLayers.Util.getFormattedLonLat(lat, "lat", this.labelFormat) : "", labelAlign: "rb", xOffset: -2, yOffset: 2 }; this.gratLayer.addFeatures(new OpenLayers.Feature.Vector(labelPos, labelAttrs)); } var geom = new OpenLayers.Geometry.LineString(pointList); lines.push(new OpenLayers.Feature.Vector(geom)); } this.gratLayer.addFeatures(lines); }, CLASS_NAME: "OpenLayers.Control.Graticule" }); OpenLayers.Control.LayerSwitcher = OpenLayers.Class(OpenLayers.Control, { roundedCorner: true, roundedCornerColor: "darkblue", layerStates: null, layersDiv: null, baseLayersDiv: null, baseLayers: null, dataLbl: null, dataLayersDiv: null, dataLayers: null, minimizeDiv: null, maximizeDiv: null, ascending: true, initialize: function (options) { OpenLayers.Control.prototype.initialize.apply(this, arguments); this.layerStates = []; }, destroy: function () { OpenLayers.Event.stopObservingElement(this.div); OpenLayers.Event.stopObservingElement(this.minimizeDiv); OpenLayers.Event.stopObservingElement(this.maximizeDiv); this.clearLayersArray("base"); this.clearLayersArray("data"); this.map.events.un({ "addlayer": this.redraw, "changelayer": this.redraw, "removelayer": this.redraw, "changebaselayer": this.redraw, scope: this }); OpenLayers.Control.prototype.destroy.apply(this, arguments); }, setMap: function (map) { 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 }); }, draw: function () { OpenLayers.Control.prototype.draw.apply(this); this.loadContents(); if (!this.outsideViewport) { this.minimizeControl(); } this.redraw(); return this.div; }, clearLayersArray: function (layersType) { var layers = this[layersType + "Layers"]; if (layers) { for (var i = 0, len = layers.length; i < len; i++) { var layer = layers[i]; OpenLayers.Event.stopObservingElement(layer.inputElem); OpenLayers.Event.stopObservingElement(layer.labelSpan); } } this[layersType + "LayersDiv"].innerHTML = ""; this[layersType + "Layers"] = []; }, checkRedraw: function () { var redraw = false; if (!this.layerStates.length || (this.map.layers.length != this.layerStates.length)) { redraw = true; } else { for (var i = 0, len = this.layerStates.length; i < len; i++) { var layerState = this.layerStates[i]; var layer = this.map.layers[i]; if ((layerState.name != layer.name) || (layerState.inRange != layer.inRange) || (layerState.id != layer.id) || (layerState.visibility != layer.visibility)) { redraw = true; break; } } } return redraw; }, redraw: function () { if (!this.checkRedraw()) { return this.div; } this.clearLayersArray("base"); this.clearLayersArray("data"); var containsOverlays = false; var containsBaseLayers = false; var len = this.map.layers.length; this.layerStates = new Array(len); for (var i = 0; i < len; i++) { var layer = this.map.layers[i]; this.layerStates[i] = { 'name': layer.name, 'visibility': layer.visibility, 'inRange': layer.inRange, 'id': layer.id }; } var layers = this.map.layers.slice(); if (!this.ascending) { layers.reverse(); } for (var i = 0, len = layers.length; i < len; i++) { var layer = layers[i]; var baseLayer = layer.isBaseLayer; if (layer.displayInLayerSwitcher) { if (baseLayer) { containsBaseLayers = true; } else { containsOverlays = true; } var checked = (baseLayer) ? (layer == this.map.baseLayer) : layer.getVisibility(); var inputElem = document.createElement("input"); inputElem.id = this.id + "_input_" + layer.name; inputElem.name = (baseLayer) ? this.id + "_baseLayers" : layer.name; inputElem.type = (baseLayer) ? "radio" : "checkbox"; inputElem.value = layer.name; inputElem.checked = checked; inputElem.defaultChecked = checked; if (!baseLayer && !layer.inRange) { inputElem.disabled = true; } var context = { 'inputElem': inputElem, 'layer': layer, 'layerSwitcher': this }; OpenLayers.Event.observe(inputElem, "mouseup", OpenLayers.Function.bindAsEventListener(this.onInputClick, context)); var labelSpan = document.createElement("span"); OpenLayers.Element.addClass(labelSpan, "labelSpan") if (!baseLayer && !layer.inRange) { labelSpan.style.color = "gray"; } labelSpan.innerHTML = layer.name; labelSpan.style.verticalAlign = (baseLayer) ? "bottom" : "baseline"; OpenLayers.Event.observe(labelSpan, "click", OpenLayers.Function.bindAsEventListener(this.onInputClick, context)); var br = document.createElement("br"); var groupArray = (baseLayer) ? this.baseLayers : this.dataLayers; groupArray.push({ 'layer': layer, 'inputElem': inputElem, 'labelSpan': labelSpan }); var groupDiv = (baseLayer) ? this.baseLayersDiv : this.dataLayersDiv; groupDiv.appendChild(inputElem); groupDiv.appendChild(labelSpan); groupDiv.appendChild(br); } } this.dataLbl.style.display = (containsOverlays) ? "" : "none"; this.baseLbl.style.display = (containsBaseLayers) ? "" : "none"; return this.div; }, onInputClick: function (e) { if (!this.inputElem.disabled) { if (this.inputElem.type == "radio") { this.inputElem.checked = true; this.layer.map.setBaseLayer(this.layer); } else { this.inputElem.checked = !this.inputElem.checked; this.layerSwitcher.updateMap(); } } OpenLayers.Event.stop(e); }, onLayerClick: function (e) { this.updateMap(); }, updateMap: function () { for (var i = 0, len = this.baseLayers.length; i < len; i++) { var layerEntry = this.baseLayers[i]; if (layerEntry.inputElem.checked) { this.map.setBaseLayer(layerEntry.layer, false); } } for (var i = 0, len = this.dataLayers.length; i < len; i++) { var layerEntry = this.dataLayers[i]; layerEntry.layer.setVisibility(layerEntry.inputElem.checked); } }, maximizeControl: function (e) { this.div.style.width = ""; this.div.style.height = ""; this.showControls(false); if (e != null) { OpenLayers.Event.stop(e); } }, minimizeControl: function (e) { this.div.style.width = "0px"; this.div.style.height = "0px"; this.showControls(true); if (e != null) { OpenLayers.Event.stop(e); } }, showControls: function (minimize) { this.maximizeDiv.style.display = minimize ? "" : "none"; this.minimizeDiv.style.display = minimize ? "none" : ""; this.layersDiv.style.display = minimize ? "none" : ""; }, loadContents: function () { OpenLayers.Event.observe(this.div, "mouseup", OpenLayers.Function.bindAsEventListener(this.mouseUp, this)); OpenLayers.Event.observe(this.div, "click", this.ignoreEvent); OpenLayers.Event.observe(this.div, "mousedown", OpenLayers.Function.bindAsEventListener(this.mouseDown, this)); OpenLayers.Event.observe(this.div, "dblclick", this.ignoreEvent); 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("baseLayer"); 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"); if (this.ascending) { this.layersDiv.appendChild(this.baseLbl); this.layersDiv.appendChild(this.baseLayersDiv); this.layersDiv.appendChild(this.dataLbl); this.layersDiv.appendChild(this.dataLayersDiv); } else { 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); if (this.roundedCorner) { OpenLayers.Rico.Corner.round(this.div, { corners: "tl bl", bgColor: "transparent", color: this.roundedCornerColor, blend: false }); OpenLayers.Rico.Corner.changeOpacity(this.layersDiv, 0.75); } var imgLocation = OpenLayers.Util.getImagesLocation(); var sz = new OpenLayers.Size(18, 18); var img = imgLocation + 'layer-switcher-maximize.png'; this.maximizeDiv = OpenLayers.Util.createAlphaImageDiv("OpenLayers_Control_MaximizeDiv", null, sz, img, "absolute"); OpenLayers.Element.addClass(this.maximizeDiv, "maximizeDiv"); this.maximizeDiv.style.display = "none"; OpenLayers.Event.observe(this.maximizeDiv, "click", OpenLayers.Function.bindAsEventListener(this.maximizeControl, this)); this.div.appendChild(this.maximizeDiv); var img = imgLocation + 'layer-switcher-minimize.png'; var sz = new OpenLayers.Size(18, 18); this.minimizeDiv = OpenLayers.Util.createAlphaImageDiv("OpenLayers_Control_MinimizeDiv", null, sz, img, "absolute"); OpenLayers.Element.addClass(this.minimizeDiv, "minimizeDiv"); this.minimizeDiv.style.display = "none"; OpenLayers.Event.observe(this.minimizeDiv, "click", OpenLayers.Function.bindAsEventListener(this.minimizeControl, this)); this.div.appendChild(this.minimizeDiv); }, ignoreEvent: function (evt) { OpenLayers.Event.stop(evt); }, mouseDown: function (evt) { this.isMouseDown = true; this.ignoreEvent(evt); }, mouseUp: function (evt) { if (this.isMouseDown) { this.isMouseDown = false; this.ignoreEvent(evt); } }, CLASS_NAME: "OpenLayers.Control.LayerSwitcher" }); OpenLayers.Control.MouseDefaults = OpenLayers.Class(OpenLayers.Control, { performedDrag: false, wheelObserver: null, initialize: function () { OpenLayers.Control.prototype.initialize.apply(this, arguments); }, destroy: function () { if (this.handler) { this.handler.destroy(); } this.handler = null; this.map.events.un({ "click": this.defaultClick, "dblclick": this.defaultDblClick, "mousedown": this.defaultMouseDown, "mouseup": this.defaultMouseUp, "mousemove": this.defaultMouseMove, "mouseout": this.defaultMouseOut, scope: this }); OpenLayers.Event.stopObserving(window, "DOMMouseScroll", this.wheelObserver); OpenLayers.Event.stopObserving(window, "mousewheel", this.wheelObserver); OpenLayers.Event.stopObserving(document, "mousewheel", this.wheelObserver); this.wheelObserver = null; OpenLayers.Control.prototype.destroy.apply(this, arguments); }, draw: function () { this.map.events.on({ "click": this.defaultClick, "dblclick": this.defaultDblClick, "mousedown": this.defaultMouseDown, "mouseup": this.defaultMouseUp, "mousemove": this.defaultMouseMove, "mouseout": this.defaultMouseOut, scope: this }); this.registerWheelEvents(); }, registerWheelEvents: function () { this.wheelObserver = OpenLayers.Function.bindAsEventListener(this.onWheelEvent, this); OpenLayers.Event.observe(window, "DOMMouseScroll", this.wheelObserver); OpenLayers.Event.observe(window, "mousewheel", this.wheelObserver); OpenLayers.Event.observe(document, "mousewheel", this.wheelObserver); }, defaultClick: function (evt) { if (!OpenLayers.Event.isLeftClick(evt)) { return; } var notAfterDrag = !this.performedDrag; this.performedDrag = false; return notAfterDrag; }, defaultDblClick: function (evt) { var newCenter = this.map.getLonLatFromViewPortPx(evt.xy); this.map.setCenter(newCenter, this.map.zoom + 1); OpenLayers.Event.stop(evt); return false; }, defaultMouseDown: function (evt) { if (!OpenLayers.Event.isLeftClick(evt)) { return; } this.mouseDragStart = evt.xy.clone(); this.performedDrag = false; if (evt.shiftKey) { this.map.div.style.cursor = "crosshair"; this.zoomBox = OpenLayers.Util.createDiv('zoomBox', this.mouseDragStart, null, null, "absolute", "2px solid red"); this.zoomBox.style.backgroundColor = "white"; this.zoomBox.style.filter = "alpha(opacity=50)"; this.zoomBox.style.opacity = "0.50"; this.zoomBox.style.fontSize = "1px"; this.zoomBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1; this.map.viewPortDiv.appendChild(this.zoomBox); } document.onselectstart = OpenLayers.Function.False; OpenLayers.Event.stop(evt); }, defaultMouseMove: function (evt) { this.mousePosition = evt.xy.clone(); if (this.mouseDragStart != null) { if (this.zoomBox) { var deltaX = Math.abs(this.mouseDragStart.x - evt.xy.x); var deltaY = Math.abs(this.mouseDragStart.y - evt.xy.y); this.zoomBox.style.width = Math.max(1, deltaX) + "px"; this.zoomBox.style.height = Math.max(1, deltaY) + "px"; if (evt.xy.x < this.mouseDragStart.x) { this.zoomBox.style.left = evt.xy.x + "px"; } if (evt.xy.y < this.mouseDragStart.y) { this.zoomBox.style.top = evt.xy.y + "px"; } } else { var deltaX = this.mouseDragStart.x - evt.xy.x; var deltaY = this.mouseDragStart.y - evt.xy.y; var size = this.map.getSize(); var newXY = new OpenLayers.Pixel(size.w / 2 + deltaX, size.h / 2 + deltaY); var newCenter = this.map.getLonLatFromViewPortPx(newXY); this.map.setCenter(newCenter, null, true); this.mouseDragStart = evt.xy.clone(); this.map.div.style.cursor = "move"; } this.performedDrag = true; } }, defaultMouseUp: function (evt) { if (!OpenLayers.Event.isLeftClick(evt)) { return; } if (this.zoomBox) { this.zoomBoxEnd(evt); } else { if (this.performedDrag) { this.map.setCenter(this.map.center); } } document.onselectstart = null; this.mouseDragStart = null; this.map.div.style.cursor = ""; }, defaultMouseOut: function (evt) { if (this.mouseDragStart != null && OpenLayers.Util.mouseLeft(evt, this.map.div)) { if (this.zoomBox) { this.removeZoomBox(); } this.mouseDragStart = null; } }, defaultWheelUp: function (evt) { if (this.map.getZoom() <= this.map.getNumZoomLevels()) { this.map.setCenter(this.map.getLonLatFromPixel(evt.xy), this.map.getZoom() + 1); } }, defaultWheelDown: function (evt) { if (this.map.getZoom() > 0) { this.map.setCenter(this.map.getLonLatFromPixel(evt.xy), this.map.getZoom() - 1); } }, zoomBoxEnd: function (evt) { if (this.mouseDragStart != null) { if (Math.abs(this.mouseDragStart.x - evt.xy.x) > 5 || Math.abs(this.mouseDragStart.y - evt.xy.y) > 5) { var start = this.map.getLonLatFromViewPortPx(this.mouseDragStart); var end = this.map.getLonLatFromViewPortPx(evt.xy); var top = Math.max(start.lat, end.lat); var bottom = Math.min(start.lat, end.lat); var left = Math.min(start.lon, end.lon); var right = Math.max(start.lon, end.lon); var bounds = new OpenLayers.Bounds(left, bottom, right, top); this.map.zoomToExtent(bounds); } else { var end = this.map.getLonLatFromViewPortPx(evt.xy); this.map.setCenter(new OpenLayers.LonLat((end.lon), (end.lat)), this.map.getZoom() + 1); } this.removeZoomBox(); } }, removeZoomBox: function () { this.map.viewPortDiv.removeChild(this.zoomBox); this.zoomBox = null; }, onWheelEvent: function (e) { var inMap = false; var elem = OpenLayers.Event.element(e); while (elem != null) { if (this.map && elem == this.map.div) { inMap = true; break; } elem = elem.parentNode; } if (inMap) { var delta = 0; if (!e) { e = window.event; } if (e.wheelDelta) { delta = e.wheelDelta / 120; if (window.opera && window.opera.version() < 9.2) { delta = -delta; } } else if (e.detail) { delta = -e.detail / 3; } if (delta) { e.xy = this.mousePosition; if (delta < 0) { this.defaultWheelDown(e); } else { this.defaultWheelUp(e); } } OpenLayers.Event.stop(e); } }, CLASS_NAME: "OpenLayers.Control.MouseDefaults" }); OpenLayers.Control.MousePosition = OpenLayers.Class(OpenLayers.Control, { element: null, prefix: '', separator: ', ', suffix: '', numDigits: 5, granularity: 10, emptyString: null, lastXy: null, displayProjection: null, initialize: function (options) { OpenLayers.Control.prototype.initialize.apply(this, arguments); }, destroy: function () { if (this.map) { this.map.events.unregister('mousemove', this, this.redraw); } OpenLayers.Control.prototype.destroy.apply(this, arguments); }, draw: function () { OpenLayers.Control.prototype.draw.apply(this, arguments); if (!this.element) { this.div.left = ""; this.div.top = ""; this.element = this.div; } this.redraw(); return this.div; }, redraw: function (evt) { var lonLat; if (evt == null) { this.reset(); return; } else { if (this.lastXy == null || Math.abs(evt.xy.x - this.lastXy.x) > this.granularity || Math.abs(evt.xy.y - this.lastXy.y) > this.granularity) { this.lastXy = evt.xy; return; } lonLat = this.map.getLonLatFromPixel(evt.xy); if (!lonLat) { return; } if (this.displayProjection) { lonLat.transform(this.map.getProjectionObject(), this.displayProjection); } this.lastXy = evt.xy; } var newHtml = this.formatOutput(lonLat); if (newHtml != this.element.innerHTML) { this.element.innerHTML = newHtml; } }, reset: function (evt) { if (this.emptyString != null) { this.element.innerHTML = this.emptyString; } }, formatOutput: function (lonLat) { var digits = parseInt(this.numDigits); var newHtml = this.prefix + lonLat.lon.toFixed(digits) + this.separator + lonLat.lat.toFixed(digits) + this.suffix; return newHtml; }, setMap: function () { OpenLayers.Control.prototype.setMap.apply(this, arguments); this.map.events.register('mousemove', this, this.redraw); this.map.events.register('mouseout', this, this.reset); }, CLASS_NAME: "OpenLayers.Control.MousePosition" }); OpenLayers.Control.Pan = OpenLayers.Class(OpenLayers.Control, { slideFactor: 50, direction: null, type: OpenLayers.Control.TYPE_BUTTON, initialize: function (direction, options) { this.direction = direction; this.CLASS_NAME += this.direction; OpenLayers.Control.prototype.initialize.apply(this, [options]); }, trigger: function () { switch (this.direction) { case OpenLayers.Control.Pan.NORTH: this.map.pan(0, -this.slideFactor); break; case OpenLayers.Control.Pan.SOUTH: this.map.pan(0, this.slideFactor); break; case OpenLayers.Control.Pan.WEST: this.map.pan(-this.slideFactor, 0); break; case OpenLayers.Control.Pan.EAST: this.map.pan(this.slideFactor, 0); break; } }, 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.Control.PanZoom = OpenLayers.Class(OpenLayers.Control, { slideFactor: 50, slideRatio: null, buttons: null, position: null, initialize: function (options) { this.position = new OpenLayers.Pixel(OpenLayers.Control.PanZoom.X, OpenLayers.Control.PanZoom.Y); OpenLayers.Control.prototype.initialize.apply(this, arguments); }, destroy: function () { OpenLayers.Control.prototype.destroy.apply(this, arguments); this.removeButtons(); this.buttons = null; this.position = null; }, draw: function (px) { OpenLayers.Control.prototype.draw.apply(this, arguments); px = this.position; this.buttons = []; var sz = new OpenLayers.Size(18, 18); var centered = new OpenLayers.Pixel(px.x + sz.w / 2, px.y); this._addButton("panup", "north-mini.png", centered, sz); px.y = centered.y + sz.h; this._addButton("panleft", "west-mini.png", px, sz); this._addButton("panright", "east-mini.png", px.add(sz.w, 0), sz); this._addButton("pandown", "south-mini.png", centered.add(0, sz.h * 2), sz); this._addButton("zoomin", "zoom-plus-mini.png", centered.add(0, sz.h * 3 + 5), sz); this._addButton("zoomworld", "zoom-world-mini.png", centered.add(0, sz.h * 4 + 5), sz); this._addButton("zoomout", "zoom-minus-mini.png", centered.add(0, sz.h * 5 + 5), sz); return this.div; }, _addButton: function (id, img, xy, sz) { var imgLocation = OpenLayers.Util.getImagesLocation() + img; var btn = OpenLayers.Util.createAlphaImageDiv(this.id + "_" + id, xy, sz, imgLocation, "absolute"); this.div.appendChild(btn); OpenLayers.Event.observe(btn, "mousedown", OpenLayers.Function.bindAsEventListener(this.buttonDown, btn)); OpenLayers.Event.observe(btn, "dblclick", OpenLayers.Function.bindAsEventListener(this.doubleClick, btn)); OpenLayers.Event.observe(btn, "click", OpenLayers.Function.bindAsEventListener(this.doubleClick, btn)); btn.action = id; btn.map = this.map; if (!this.slideRatio) { var slideFactorPixels = this.slideFactor; var getSlideFactor = function () { return slideFactorPixels; }; } else { var slideRatio = this.slideRatio; var getSlideFactor = function (dim) { return this.map.getSize()[dim] * slideRatio; }; } btn.getSlideFactor = getSlideFactor; this.buttons.push(btn); return btn; }, _removeButton: function (btn) { OpenLayers.Event.stopObservingElement(btn); btn.map = null; btn.getSlideFactor = null; this.div.removeChild(btn); OpenLayers.Util.removeItem(this.buttons, btn); }, removeButtons: function () { for (var i = this.buttons.length - 1; i >= 0; --i) { this._removeButton(this.buttons[i]); } }, doubleClick: function (evt) { OpenLayers.Event.stop(evt); return false; }, buttonDown: function (evt) { if (!OpenLayers.Event.isLeftClick(evt)) { return; } switch (this.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(); break; } OpenLayers.Event.stop(evt); }, CLASS_NAME: "OpenLayers.Control.PanZoom" }); OpenLayers.Control.PanZoom.X = 4; OpenLayers.Control.PanZoom.Y = 4; OpenLayers.Control.Panel = OpenLayers.Class(OpenLayers.Control, { controls: null, autoActivate: true, defaultControl: null, initialize: function (options) { OpenLayers.Control.prototype.initialize.apply(this, [options]); this.controls = []; }, destroy: function () { OpenLayers.Control.prototype.destroy.apply(this, arguments); for (var i = this.controls.length - 1; i >= 0; i--) { if (this.controls[i].events) { this.controls[i].events.un({ "activate": this.redraw, "deactivate": this.redraw, scope: this }); } OpenLayers.Event.stopObservingElement(this.controls[i].panel_div); this.controls[i].panel_div = null; } }, activate: function () { if (OpenLayers.Control.prototype.activate.apply(this, arguments)) { for (var i = 0, len = this.controls.length; i < len; i++) { if (this.controls[i] == this.defaultControl) { this.controls[i].activate(); } } this.redraw(); return true; } else { return false; } }, deactivate: function () { if (OpenLayers.Control.prototype.deactivate.apply(this, arguments)) { for (var i = 0, len = this.controls.length; i < len; i++) { this.controls[i].deactivate(); } return true; } else { return false; } }, draw: function () { OpenLayers.Control.prototype.draw.apply(this, arguments); for (var i = 0, len = this.controls.length; i < len; i++) { this.map.addControl(this.controls[i]); this.controls[i].deactivate(); this.controls[i].events.on({ "activate": this.redraw, "deactivate": this.redraw, scope: this }); } return this.div; }, redraw: function () { this.div.innerHTML = ""; if (this.active) { for (var i = 0, len = this.controls.length; i < len; i++) { var element = this.controls[i].panel_div; if (this.controls[i].active) { element.className = this.controls[i].displayClass + "ItemActive"; } else { element.className = this.controls[i].displayClass + "ItemInactive"; } this.div.appendChild(element); } } }, activateControl: function (control) { if (!this.active) { return false; } if (control.type == OpenLayers.Control.TYPE_BUTTON) { control.trigger(); this.redraw(); return; } if (control.type == OpenLayers.Control.TYPE_TOGGLE) { if (control.active) { control.deactivate(); } else { control.activate(); } this.redraw(); return; } for (var i = 0, len = this.controls.length; i < len; i++) { if (this.controls[i] != control) { if (this.controls[i].type != OpenLayers.Control.TYPE_TOGGLE) { this.controls[i].deactivate(); } } } control.activate(); }, addControls: function (controls) { if (!(controls instanceof Array)) { controls = [controls]; } this.controls = this.controls.concat(controls); for (var i = 0, len = controls.length; i < len; i++) { var element = document.createElement("div"); controls[i].panel_div = element; if (controls[i].title != "") { controls[i].panel_div.title = controls[i].title; } OpenLayers.Event.observe(controls[i].panel_div, "click", OpenLayers.Function.bind(this.onClick, this, controls[i])); OpenLayers.Event.observe(controls[i].panel_div, "dblclick", OpenLayers.Function.bind(this.onDoubleClick, this, controls[i])); OpenLayers.Event.observe(controls[i].panel_div, "mousedown", OpenLayers.Function.bindAsEventListener(OpenLayers.Event.stop)); } if (this.map) { for (var i = 0, len = controls.length; i < len; i++) { this.map.addControl(controls[i]); controls[i].deactivate(); controls[i].events.on({ "activate": this.redraw, "deactivate": this.redraw, scope: this }); } this.redraw(); } }, onClick: function (ctrl, evt) { OpenLayers.Event.stop(evt ? evt : window.event); this.activateControl(ctrl); }, onDoubleClick: function (ctrl, evt) { OpenLayers.Event.stop(evt ? evt : window.event); }, getControlsBy: function (property, match) { var test = (typeof match.test == "function"); var found = OpenLayers.Array.filter(this.controls, function (item) { return item[property] == match || (test && match.test(item[property])); }); return found; }, getControlsByName: function (match) { return this.getControlsBy("name", match); }, getControlsByClass: function (match) { return this.getControlsBy("CLASS_NAME", match); }, CLASS_NAME: "OpenLayers.Control.Panel" }); OpenLayers.Control.Scale = OpenLayers.Class(OpenLayers.Control, { element: null, initialize: function (element, options) { OpenLayers.Control.prototype.initialize.apply(this, [options]); this.element = OpenLayers.Util.getElement(element); }, draw: function () { OpenLayers.Control.prototype.draw.apply(this, arguments); if (!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 scale = this.map.getScale(); if (!scale) { return; } if (scale >= 9500 && scale <= 950000) { scale = Math.round(scale / 1000) + "K"; } else if (scale >= 950000) { scale = Math.round(scale / 1000000) + "M"; } else { scale = Math.round(scale); } this.element.innerHTML = OpenLayers.i18n("scale", { 'scaleDenom': scale }); }, CLASS_NAME: "OpenLayers.Control.Scale" }); OpenLayers.Control.ScaleLine = OpenLayers.Class(OpenLayers.Control, { maxWidth: 100, topOutUnits: "km", topInUnits: "m", bottomOutUnits: "mi", bottomInUnits: "ft", eTop: null, eBottom: null, geodesic: false, initialize: function (options) { OpenLayers.Control.prototype.initialize.apply(this, [options]); }, draw: function () { OpenLayers.Control.prototype.draw.apply(this, arguments); if (!this.eTop) { this.eTop = document.createElement("div"); this.eTop.className = this.displayClass + "Top"; var theLen = this.topInUnits.length; this.div.appendChild(this.eTop); if ((this.topOutUnits == "") || (this.topInUnits == "")) { this.eTop.style.visibility = "hidden"; } else { this.eTop.style.visibility = "visible"; } this.eBottom = document.createElement("div"); this.eBottom.className = this.displayClass + "Bottom"; this.div.appendChild(this.eBottom); if ((this.bottomOutUnits == "") || (this.bottomInUnits == "")) { this.eBottom.style.visibility = "hidden"; } else { this.eBottom.style.visibility = "visible"; } } this.map.events.register('moveend', this, this.update); this.update(); return this.div; }, getBarLen: function (maxLen) { var digits = parseInt(Math.log(maxLen) / Math.log(10)); var pow10 = Math.pow(10, digits); var firstChar = parseInt(maxLen / pow10); var barLen; if (firstChar > 5) { barLen = 5; } else if (firstChar > 2) { barLen = 2; } else { barLen = 1; } return barLen * pow10; }, update: function () { var res = this.map.getResolution(); if (!res) { return; } var curMapUnits = this.map.getUnits(); var inches = OpenLayers.INCHES_PER_UNIT; var maxSizeData = this.maxWidth * res * inches[curMapUnits]; var geodesicRatio = 1; if (this.geodesic === true) { var maxSizeGeodesic = this.getGeodesicLength(this.maxWidth); var maxSizeKilometers = maxSizeData / inches["km"]; geodesicRatio = maxSizeGeodesic / maxSizeKilometers; maxSizeData *= geodesicRatio; } var topUnits; var bottomUnits; if (maxSizeData > 100000) { topUnits = this.topOutUnits; bottomUnits = this.bottomOutUnits; } else { topUnits = this.topInUnits; bottomUnits = this.bottomInUnits; } var topMax = maxSizeData / inches[topUnits]; var bottomMax = maxSizeData / inches[bottomUnits]; var topRounded = this.getBarLen(topMax); var bottomRounded = this.getBarLen(bottomMax); topMax = topRounded / inches[curMapUnits] * inches[topUnits]; bottomMax = bottomRounded / inches[curMapUnits] * inches[bottomUnits]; var topPx = topMax / res / geodesicRatio; var bottomPx = bottomMax / res / geodesicRatio; if (this.eBottom.style.visibility == "visible") { this.eBottom.style.width = Math.round(bottomPx) + "px"; this.eBottom.innerHTML = bottomRounded + " " + bottomUnits; } if (this.eTop.style.visibility == "visible") { this.eTop.style.width = Math.round(topPx) + "px"; this.eTop.innerHTML = topRounded + " " + topUnits; } }, getGeodesicLength: function (pixels) { var map = this.map; var centerPx = map.getPixelFromLonLat(map.getCenter()); var bottom = map.getLonLatFromPixel(centerPx.add(0, -pixels / 2)); var top = map.getLonLatFromPixel(centerPx.add(0, pixels / 2)); var source = map.getProjectionObject(); var dest = new OpenLayers.Projection("EPSG:4326"); if (!source.equals(dest)) { bottom.transform(source, dest); top.transform(source, dest); } return OpenLayers.Util.distVincenty(bottom, top); }, CLASS_NAME: "OpenLayers.Control.ScaleLine" }); 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 () { if (this.map) { this.map.zoomToMaxExtent(); } }, CLASS_NAME: "OpenLayers.Control.ZoomToMaxExtent" }); OpenLayers.Event = { observers: false, 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 (event) { return event.target || event.srcElement; }, isLeftClick: function (event) { return (((event.which) && (event.which == 1)) || ((event.button) && (event.button == 1))); }, isRightClick: function (event) { return (((event.which) && (event.which == 3)) || ((event.button) && (event.button == 2))); }, stop: function (event, allowDefault) { if (!allowDefault) { if (event.preventDefault) { event.preventDefault(); } else { event.returnValue = false; } } if (event.stopPropagation) { event.stopPropagation(); } else { event.cancelBubble = true; } }, findElement: function (event, tagName) { var element = OpenLayers.Event.element(event); while (element.parentNode && (!element.tagName || (element.tagName.toUpperCase() != tagName.toUpperCase()))) { element = element.parentNode; } return element; }, observe: function (elementParam, name, observer, useCapture) { var element = OpenLayers.Util.getElement(elementParam); useCapture = useCapture || false; if (name == 'keypress' && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || element.attachEvent)) { name = 'keydown'; } if (!this.observers) { this.observers = {}; } if (!element._eventCacheID) { var idPrefix = "eventCacheID_"; if (element.id) { idPrefix = element.id + "_" + idPrefix; } element._eventCacheID = OpenLayers.Util.createUniqueID(idPrefix); } var cacheID = element._eventCacheID; if (!this.observers[cacheID]) { this.observers[cacheID] = []; } this.observers[cacheID].push({ 'element': element, 'name': name, 'observer': observer, 'useCapture': useCapture }); if (element.addEventListener) { element.addEventListener(name, observer, useCapture); } else if (element.attachEvent) { element.attachEvent('on' + name, observer); } }, stopObservingElement: function (elementParam) { var element = OpenLayers.Util.getElement(elementParam); var cacheID = element._eventCacheID; this._removeElementObservers(OpenLayers.Event.observers[cacheID]); }, _removeElementObservers: function (elementObservers) { if (elementObservers) { for (var i = elementObservers.length - 1; i >= 0; i--) { var entry = elementObservers[i]; var args = new Array(entry.element, entry.name, entry.observer, entry.useCapture); var removed = OpenLayers.Event.stopObserving.apply(this, args); } } }, stopObserving: function (elementParam, name, observer, useCapture) { useCapture = useCapture || false; var element = OpenLayers.Util.getElement(elementParam); var cacheID = element._eventCacheID; if (name == 'keypress') { if (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || element.detachEvent) { name = 'keydown'; } } var foundEntry = false; var elementObservers = OpenLayers.Event.observers[cacheID]; if (elementObservers) { var i = 0; while (!foundEntry && i < elementObservers.length) { var cacheEntry = elementObservers[i]; if ((cacheEntry.name == name) && (cacheEntry.observer == observer) && (cacheEntry.useCapture == useCapture)) { elementObservers.splice(i, 1); if (elementObservers.length == 0) { delete OpenLayers.Event.observers[cacheID]; } foundEntry = true; break; } i++; } } if (foundEntry) { if (element.removeEventListener) { element.removeEventListener(name, observer, useCapture); } else if (element && element.detachEvent) { element.detachEvent('on' + name, observer); } } return foundEntry; }, unloadCache: function () { if (OpenLayers.Event && OpenLayers.Event.observers) { for (var cacheID in OpenLayers.Event.observers) { var elementObservers = OpenLayers.Event.observers[cacheID]; OpenLayers.Event._removeElementObservers.apply(this, [elementObservers]); } OpenLayers.Event.observers = false; } }, CLASS_NAME: "OpenLayers.Event" }; OpenLayers.Event.observe(window, 'unload', OpenLayers.Event.unloadCache, false); if (window.Event) { OpenLayers.Util.applyDefaults(window.Event, OpenLayers.Event); } else { var Event = OpenLayers.Event; } OpenLayers.Events = OpenLayers.Class({ BROWSER_EVENTS: ["mouseover", "mouseout", "mousedown", "mouseup", "mousemove", "click", "dblclick", "rightclick", "dblrightclick", "resize", "focus", "blur"], listeners: null, object: null, element: null, eventTypes: null, eventHandler: null, fallThrough: null, includeXY: false, clearMouseListener: null, initialize: function (object, element, eventTypes, fallThrough, options) { OpenLayers.Util.extend(this, options); this.object = object; this.fallThrough = fallThrough; this.listeners = {}; this.eventHandler = OpenLayers.Function.bindAsEventListener(this.handleBrowserEvent, this); this.clearMouseListener = OpenLayers.Function.bind(this.clearMouseCache, this); this.eventTypes = []; if (eventTypes != null) { for (var i = 0, len = eventTypes.length; i < len; i++) { this.addEventType(eventTypes[i]); } } if (element != null) { this.attachToElement(element); } }, destroy: function () { if (this.element) { OpenLayers.Event.stopObservingElement(this.element); if (this.element.hasScrollEvent) { OpenLayers.Event.stopObserving(window, "scroll", this.clearMouseListener); } } this.element = null; this.listeners = null; this.object = null; this.eventTypes = null; this.fallThrough = null; this.eventHandler = null; }, addEventType: function (eventName) { if (!this.listeners[eventName]) { this.eventTypes.push(eventName); this.listeners[eventName] = []; } }, attachToElement: function (element) { if (this.element) { OpenLayers.Event.stopObservingElement(this.element); } this.element = element; for (var i = 0, len = this.BROWSER_EVENTS.length; i < len; i++) { var eventType = this.BROWSER_EVENTS[i]; this.addEventType(eventType); OpenLayers.Event.observe(element, eventType, this.eventHandler); } OpenLayers.Event.observe(element, "dragstart", OpenLayers.Event.stop); }, on: function (object) { for (var type in object) { if (type != "scope") { this.register(type, object.scope, object[type]); } } }, register: function (type, obj, func) { if ((func != null) && (OpenLayers.Util.indexOf(this.eventTypes, type) != -1)) { if (obj == null) { obj = this.object; } var listeners = this.listeners[type]; listeners.push({ obj: obj, func: func }); } }, registerPriority: function (type, obj, func) { if (func != null) { if (obj == null) { obj = this.object; } var listeners = this.listeners[type]; if (listeners != null) { listeners.unshift({ obj: obj, func: func }); } } }, un: function (object) { for (var type in object) { if (type != "scope") { this.unregister(type, object.scope, object[type]); } } }, unregister: function (type, obj, func) { if (obj == null) { obj = this.object; } var listeners = this.listeners[type]; if (listeners != null) { for (var i = 0, len = listeners.length; i < len; i++) { if (listeners[i].obj == obj && listeners[i].func == func) { listeners.splice(i, 1); break; } } } }, remove: function (type) { if (this.listeners[type] != null) { this.listeners[type] = []; } }, triggerEvent: function (type, evt) { var listeners = this.listeners[type]; if (!listeners || listeners.length == 0) { return; } if (evt == null) { evt = {}; } evt.object = this.object; evt.element = this.element; if (!evt.type) { evt.type = type; } var listeners = listeners.slice(), continueChain; for (var i = 0, len = listeners.length; i < len; i++) { var callback = listeners[i]; continueChain = callback.func.apply(callback.obj, [evt]); if ((continueChain != undefined) && (continueChain == false)) { break; } } if (!this.fallThrough) { OpenLayers.Event.stop(evt, true); } return continueChain; }, handleBrowserEvent: function (evt) { if (this.includeXY) { evt.xy = this.getMousePosition(evt); } this.triggerEvent(evt.type, evt); }, clearMouseCache: function () { this.element.scrolls = null; this.element.lefttop = null; this.element.offsets = null; }, getMousePosition: function (evt) { if (!this.includeXY) { this.clearMouseCache(); } else if (!this.element.hasScrollEvent) { OpenLayers.Event.observe(window, "scroll", this.clearMouseListener); this.element.hasScrollEvent = true; } if (!this.element.scrolls) { this.element.scrolls = [(document.documentElement.scrollLeft || document.body.scrollLeft), (document.documentElement.scrollTop || document.body.scrollTop)]; } if (!this.element.lefttop) { this.element.lefttop = [(document.documentElement.clientLeft || 0), (document.documentElement.clientTop || 0)]; } if (!this.element.offsets) { this.element.offsets = OpenLayers.Util.pagePosition(this.element); this.element.offsets[0] += this.element.scrolls[0]; this.element.offsets[1] += this.element.scrolls[1]; } return new OpenLayers.Pixel((evt.clientX + this.element.scrolls[0]) - this.element.offsets[0] - this.element.lefttop[0], (evt.clientY + this.element.scrolls[1]) - this.element.offsets[1] - this.element.lefttop[1]); }, CLASS_NAME: "OpenLayers.Events" }); OpenLayers.Format = OpenLayers.Class({ options: null, externalProjection: null, internalProjection: null, data: null, keepData: false, initialize: function (options) { OpenLayers.Util.extend(this, options); this.options = options; }, destroy: function () {}, read: function (data) { OpenLayers.Console.userError(OpenLayers.i18n("readNotImplemented")); }, write: function (object) { OpenLayers.Console.userError(OpenLayers.i18n("writeNotImplemented")); }, CLASS_NAME: "OpenLayers.Format" }); OpenLayers.Lang["ar"] = OpenLayers.Util.applyDefaults({ 'permalink': "وصلة دائمة", 'baseLayer': "الطبقة الاساسية", 'readNotImplemented': "القراءة غير محققة.", 'writeNotImplemented': "الكتابة غير محققة", 'errorLoadingGML': "خطأ عند تحميل المل٠جي ام ال ${url}", 'scale': "النسبة = 1 : ${scaleDenom}", 'W': "غ", 'E': "شر", 'N': "شم", 'S': "ج" }); OpenLayers.Lang["be-tarask"] = OpenLayers.Util.applyDefaults({ 'unhandledRequest': "Ðеапрацаваны вынік запыту ${statusText}", 'permalink': "Ð¡Ñ‚Ð°Ð»Ð°Ñ ÑпаÑылка", 'overlays': "Слаі", 'baseLayer': "Базавы Ñлой", 'sameProjection': "ÐглÑÐ´Ð½Ð°Ñ Ð¼Ð°Ð¿Ð° працуе толькі калі Ñна мае тую ж праекцыю, што Ñ– аÑÐ½Ð¾ÑžÐ½Ð°Ñ Ð¼Ð°Ð¿Ð°", 'readNotImplemented': "ФункцыÑнальнаÑьць Ñ‡Ñ‹Ñ‚Ð°Ð½ÑŒÐ½Ñ Ð½Ñ ÑтворанаÑ.", 'writeNotImplemented': "ФункцыÑнальнаÑьць запіÑу Ð½Ñ ÑтворанаÑ.", 'noFID': "Ðемагчыма абнавіць магчымаÑьць, Ð´Ð»Ñ Ñкога не Ñ–Ñнуе FID.", 'errorLoadingGML': "Памылка загрузкі файла GML ${url}", 'browserNotSupported': "Ваш браўзÑÑ€ не падтрымлівае вÑктарную графіку. У цÑперашні момант падтрымліваюцца: ${renderers}", 'componentShouldBe': "addFeatures : кампанÑнт павінен быць ${geomType}", 'getFeatureError': "getFeatureFromEvent выкліканы Ð´Ð»Ñ ÑÐ»Ð¾Ñ Ð±Ñз Ñ€ÑндÑру. Звычайна гÑта азначае, што Ð’Ñ‹ зьнішчылі Ñлой, але пакінулі зьвÑзаны зь ім апрацоўшчык.", 'minZoomLevelError': "УлаÑьціваÑьць minZoomLevel прызначана толькі Ð´Ð»Ñ Ð²Ñ‹ÐºÐ°Ñ€Ñ‹ÑÑ‚Ð°Ð½ÑŒÐ½Ñ Ñа ÑлаÑмі вытворнымі ад FixedZoomLevels. Тое, што гÑты wfs-Ñлой правÑраецца на minZoomLevel — Ñ€Ñха прошлага. Ðле мы Ð½Ñ Ð¼Ð¾Ð¶Ð°Ð¼ выдаліць гÑтую магчымаÑьць, таму што ад Ñе залежаць Ð½ÐµÐºÐ°Ñ‚Ð¾Ñ€Ñ‹Ñ Ð·Ð°ÑÐ½Ð°Ð²Ð°Ð½Ñ‹Ñ Ð½Ð° OL даÑтаÑаваньні. Тым Ð½Ñ Ð¼ÐµÐ½Ñˆ, праверка minZoomLevel будзе Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð°Ñ Ñž вÑÑ€ÑÑ–Ñ– 3.0. Калі лаÑка, выкарыÑтоўваеце замеÑÑ‚ Ñе ÑžÑтаноўкі мінімальнага/макÑымальнага памераў, Ñк апіÑана тут: http://trac.openlayers.org/wiki/SettingZoomLevels", 'commitSuccess': "WFS-транзакцыÑ: ПОСЬПЕХ ${response}", 'commitFailed': "WFS-транзакцыÑ: ПÐМЫЛКР${response}", 'googleWarning': "Ðе атрымалаÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ–Ñ†ÑŒ Ñлой Google. \x3cbr\x3e\x3cbr\x3eКаб пазбавіцца гÑтага паведамленьнÑ, выберыце новы базавы Ñлой у ÑьпіÑе Ñž верхнім правым куце.\x3cbr\x3e\x3cbr\x3e ХутчÑй за ÑžÑÑ‘, прычына Ñž тым, што Ñкрыпт бібліÑÑ‚Ñкі Google Maps Ð½Ñ Ð±Ñ‹Ñž ÑƒÐºÐ»ÑŽÑ‡Ð°Ð½Ñ‹Ñ Ð°Ð»ÑŒÐ±Ð¾ не ўтрымлівае Ñлушны API-ключ Ð´Ð»Ñ Ð’Ð°ÑˆÐ°Ð³Ð° Ñайта.\x3cbr\x3e\x3cbr\x3eРаÑпрацоўшчыкам: Ð”Ð»Ñ Ñ‚Ð°Ð³Ð¾, каб даведацца Ñк зрабіць так, каб уÑÑ‘ працавала, \x3ca href=\'http://trac.openlayers.org/wiki/Google\' target=\'_blank\'\x3eнаціÑьніце тут\x3c/a\x3e", 'getLayerWarning': "Ðемагчыма загрузіць Ñлой ${layerType}.\x3cbr\x3e\x3cbr\x3eКаб пазбавіцца гÑтага паведамленьнÑ, выберыце новы базавы Ñлой у ÑьпіÑе Ñž верхнім правым куце.\x3cbr\x3e\x3cbr\x3eХутчÑй за ÑžÑÑ‘, прычына Ñž тым, што Ñкрыпт бібліÑÑ‚Ñкі ${layerLib} Ð½Ñ Ð±Ñ‹Ñž Ñлушна ўключаны.\x3cbr\x3e\x3cbr\x3eРаÑпрацоўшчыкам: Ð”Ð»Ñ Ñ‚Ð°Ð³Ð¾, каб даведацца Ñк зрабіць так, каб уÑÑ‘ працавала, \x3ca href=\'http://trac.openlayers.org/wiki/${layerLib}\' target=\'_blank\'\x3eнаціÑьніце тут\x3c/a\x3e", 'scale': "Маштаб = 1 : ${scaleDenom}", 'W': "З", 'E': "У", 'N': "Пн", 'S': "Пд", 'layerAlreadyAdded': "Ð’Ñ‹ паÑпрабавалі дадаць Ñлой ${layerName} на мапу, але ён ужо дададзены", 'reprojectDeprecated': "Ð’Ñ‹ выкарыÑтоўваеце ÑžÑтаноўку \'reproject\' Ð´Ð»Ñ ÑÐ»Ð¾Ñ ${layerName}. ГÑÑ‚Ð°Ñ ÑžÑтаноўка зьÑўлÑецца ÑаÑтарÑлай: Ñна выкарыÑтоўвалаÑÑ Ð´Ð»Ñ Ð¿Ð°Ð´Ñ‚Ñ€Ñ‹Ð¼ÐºÑ– паказу зьвеÑтак на камÑрцыйных базавых мапах, але гÑта Ñ„ÑƒÐ½ÐºÑ†Ñ‹Ñ Ñ†Ñпер Ñ€ÑÐ°Ð»Ñ–Ð·Ð°Ð²Ð°Ð½Ð°Ñ Ñž убудаванай падтрымцы ÑÑ„Ñрычнай праекцыі МÑркатара. Ð”Ð°Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð°Ñ Ñ–Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ Ñ‘Ñьць на http://trac.openlayers.org/wiki/SphericalMercator.", 'methodDeprecated': "ГÑты мÑтад ÑаÑтарÑлы Ñ– будзе выдалены Ñž вÑÑ€ÑÑ–Ñ– 3.0. Калі лаÑка, замеÑÑ‚ Ñго выкарыÑтоўвайце ${newMethod}.", 'boundsAddError': "Вам неабходна падаць абодва значÑньні x Ñ– y Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ‹Ñ– ÑкладаньнÑ.", 'lonlatAddError': "Вам неабходна падаць абодва значÑньні lon Ñ– lat Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ‹Ñ– ÑкладаньнÑ.", 'pixelAddError': "Вам неабходна падаць абодва значÑньні x Ñ– y Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ‹Ñ– ÑкладаньнÑ.", 'unsupportedGeometryType': "Тып геамÑтрыі не падтрымліваецца: ${geomType}", 'pagePositionFailed': "OpenLayers.Util.pagePosition failed: верагодна ÑлемÑнт з ідÑнтыфікатарам ${elemId} займае нÑÑлушнае меÑца.", 'filterEvaluateNotImplemented': "evaluate не Ñ€Ñалізаваны Ð´Ð»Ñ Ð³Ñтага тыпу фільтру." }); OpenLayers.Lang["bg"] = OpenLayers.Util.applyDefaults({ 'permalink': "ПоÑтоÑнна препратка", 'baseLayer': "ОÑновен Ñлой", 'errorLoadingGML': "Грешка при зареждане на GML файл ${url}", 'scale': "Мащаб = 1 : ${scaleDenom}", 'layerAlreadyAdded': "Опитахте да добавите Ñлой ${layerName} в картата, но той вече е добавен", 'methodDeprecated': "Този метод е оÑтарÑл и ще бъде премахват в 3.0. ВмеÑто него използвайте ${newMethod}." }); OpenLayers.Lang["br"] = OpenLayers.Util.applyDefaults({ 'unhandledRequest': "Distro evel reked anveret ${statusText}", 'permalink': "Peurliamm", 'overlays': "Gwiskadoù", 'baseLayer': "Gwiskad diazez", 'sameProjection': "Ne\'z ar gartenn lec\'hiañ en-dro nemet pa vez heñvel ar banndres anezhi ha hini ar gartenn bennañ", 'readNotImplemented': "N\'eo ket emplementet al lenn.", 'writeNotImplemented': "N\'eo ket emplementet ar skrivañ.", 'noFID': "N\'haller ket hizivaat un elfenn ma n\'eus ket a niverenn-anaout (FID) eviti.", 'errorLoadingGML': "Fazi e-ser kargañ ar restr GML ${url}", 'browserNotSupported': "N\'eo ket skoret an daskor vektorel gant ho merdeer. Setu aze an daskorerioù skoret evit ar poent :\n${renderers}", 'componentShouldBe': "addFeatures : bez\' e tlefe ar parzh besañ eus ar seurt ${geomType}", 'getFeatureError': "Galvet eo bet getFeatureFromEvent called war ur gwiskad hep daskorer. Kement-se a dalvez ez eus bet freuzet ur gwiskad hag hoc\'h eus miret un embreger bennak stag outañ.", 'minZoomLevelError': "Ne zleer implijout ar perzh minZoomLevel nemet evit gwiskadoù FixedZoomLevels-descendent. Ar fed ma wiria ar gwiskad WHS-se hag-eñ ez eus eus minZoomLevel zo un aspadenn gozh. Koulskoude n\'omp ket evit e ziverkañ kuit da derriñ arloadoù diazezet war OL a c\'hallfe bezañ stag outañ. Setu perak eo dispredet -- Lamet kuit e vo ar gwiriañ minZoomLevel a-is er stumm 3.0. Ober gant an arventennoù bihanañ/brasañ evel deskrivet amañ e plas : http://trac.openlayers.org/wiki/SettingZoomLevels", 'commitSuccess': "Treuzgread WFS : MAT EO ${response}", 'commitFailed': "Treuzgread WFS Transaction: C\'HWITET ${response}", 'googleWarning': "N\'eus ket bet gallet kargañ ar gwiskad Google ent reizh.\x3cbr\x3e\x3cbr\x3eEvit en em zizober eus ar c\'hemenn-mañ, dibabit ur BaseLayer nevez en diuzer gwiskadoù er c\'horn dehoù el laez.\x3cbr\x3e\x3cbr\x3eSur a-walc\'h eo peogwir n\'eo ket bet ensoc\'het levraoueg Google Maps pe neuze ne glot ket an alc\'hwez API gant ho lec\'hienn.\x3cbr\x3e\x3cbr\x3eDiorroerien : Evit reizhañ an dra-se, \x3ca href=\'http://trac.openlayers.org/wiki/Google\' target=\'_blank\'\x3eclick here\x3c/a\x3e", 'getLayerWarning': "N\'haller ket kargañ ar gwiskad ${layerType} ent reizh.\x3cbr\x3e\x3cbr\x3eEvit en em zizober eus ar c\'hemenn-mañ, dibabit ur BaseLayer nevez en diuzer gwiskadoù er c\'horn dehoù el laez.\x3cbr\x3e\x3cbr\x3eSur a-walc\'h eo peogwir n\'eo ket bet ensoc\'het mat al levraoueg ${layerLib}.\x3cbr\x3e\x3cbr\x3eDiorroerien : Evit gouzout penaos reizhañ an dra-se, \x3ca href=\'http://trac.openlayers.org/wiki/${layerLib}\' target=\'_blank\'\x3eclick here\x3c/a\x3e", 'scale': "Skeul = 1 : ${scaleDenom}", 'W': "K", 'E': "R", 'N': "N", 'S': "S", 'layerAlreadyAdded': "Klasket hoc\'h eus ouzhpennañ ar gwiskad : ${layerName} d\'ar gartenn, met ouzhpennet e oa bet c\'hoazh", 'reprojectDeprecated': "Emaoc\'h oc\'h implijout an dibarzh \'reproject\' war ar gwiskad ${layerName}. Dispredet eo an dibarzh-mañ : bet eo hag e talveze da ziskwel roadennoù war-c\'horre kartennoù diazez kenwerzhel, un dra hag a c\'haller ober bremañ gant an arc\'hwel dre skor banndres boullek Mercator. Muioc\'h a ditouroù a c\'haller da gaout war http://trac.openlayers.org/wiki/SphericalMercator.", 'methodDeprecated': "Dispredet eo an daore-se ha tennet e vo kuit eus ar stumm 3.0. Grit gant ${newMethod} e plas.", 'boundsAddError': "Rekis eo tremen an div dalvoudenn x ha y d\'an arc\'hwel add.", 'lonlatAddError': "Rekis eo tremen an div dalvoudenn hedred ha ledred d\'an arc\'hwel add.", 'pixelAddError': "Rekis eo tremen an div dalvoudenn x ha y d\'an arc\'hwel add.", 'unsupportedGeometryType': "Seurt mentoniezh anskoret : ${geomType}", 'pagePositionFailed': "C\'hwitet eo OpenLayers.Util.pagePosition : marteze emañ lec\'hiet fall an elfenn id ${elemId}.", 'filterEvaluateNotImplemented': "N\'eo ket bet emplementet ar priziañ evit seurt siloù c\'hoazh." }); OpenLayers.Lang["el"] = OpenLayers.Util.applyDefaults({ 'scale': "Κλίμακα ~ 1 : ${scaleDenom}" }); OpenLayers.Lang.en = { 'unhandledRequest': "Unhandled request return ${statusText}", 'permalink': "Permalink", 'overlays': "Overlays", 'baseLayer': "Base Layer", 'sameProjection': "The overview map only works when it is in the same projection as the main map", 'readNotImplemented': "Read not implemented.", 'writeNotImplemented': "Write not implemented.", 'noFID': "Can't update a feature for which there is no FID.", 'errorLoadingGML': "Error in loading GML file ${url}", 'browserNotSupported': "Your browser does not support vector rendering. Currently supported renderers are:\n${renderers}", 'componentShouldBe': "addFeatures : component should be an ${geomType}", 'getFeatureError': "getFeatureFromEvent called on layer with no renderer. This usually means you " + "destroyed a layer, but not some handler which is associated with it.", 'minZoomLevelError': "The minZoomLevel property is only intended for use " + "with the FixedZoomLevels-descendent layers. That this " + "wfs layer checks for minZoomLevel is a relic of the" + "past. We cannot, however, remove it without possibly " + "breaking OL based applications that may depend on it." + " Therefore we are deprecating it -- the minZoomLevel " + "check below will be removed at 3.0. Please instead " + "use min/max resolution setting as described here: " + "http://trac.openlayers.org/wiki/SettingZoomLevels", 'commitSuccess': "WFS Transaction: SUCCESS ${response}", 'commitFailed': "WFS Transaction: FAILED ${response}", 'googleWarning': "The Google Layer was unable to load correctly.

" + "To get rid of this message, select a new BaseLayer " + "in the layer switcher in the upper-right corner.

" + "Most likely, this is because the Google Maps library " + "script was either not included, or does not contain the " + "correct API key for your site.

" + "Developers: For help getting this working correctly, " + "click here", 'getLayerWarning': "The ${layerType} Layer was unable to load correctly.

" + "To get rid of this message, select a new BaseLayer " + "in the layer switcher in the upper-right corner.

" + "Most likely, this is because the ${layerLib} library " + "script was not correctly included.

" + "Developers: For help getting this working correctly, " + "click here", 'scale': "Scale = 1 : ${scaleDenom}", 'W': 'W', 'E': 'E', 'N': 'N', 'S': 'S', 'layerAlreadyAdded': "You tried to add the layer: ${layerName} to the map, but it has already been added", 'reprojectDeprecated': "You are using the 'reproject' option " + "on the ${layerName} layer. This option is deprecated: " + "its use was designed to support displaying data over commercial " + "basemaps, but that functionality should now be achieved by using " + "Spherical Mercator support. More information is available from " + "http://trac.openlayers.org/wiki/SphericalMercator.", 'methodDeprecated': "This method has been deprecated and will be removed in 3.0. " + "Please use ${newMethod} instead.", 'boundsAddError': "You must pass both x and y values to the add function.", 'lonlatAddError': "You must pass both lon and lat values to the add function.", 'pixelAddError': "You must pass both x and y values to the add function.", 'unsupportedGeometryType': "Unsupported geometry type: ${geomType}", 'pagePositionFailed': "OpenLayers.Util.pagePosition failed: element with id ${elemId} may be misplaced.", 'end': '', 'filterEvaluateNotImplemented': "evaluate is not implemented for this filter type." }; OpenLayers.Lang["fi"] = OpenLayers.Util.applyDefaults({ 'permalink': "Ikilinkki", 'overlays': "Kerrokset", 'baseLayer': "Peruskerros", 'sameProjection': "Yleiskuvakarttaa voi käyttää vain, kun sillä on sama projektio kuin pääkartalla.", 'W': "L", 'E': "I", 'N': "P", 'S': "E" }); OpenLayers.Lang["fur"] = OpenLayers.Util.applyDefaults({ 'permalink': "Leam Permanent", 'overlays': "Livei parsore", 'baseLayer': "Livel di base", 'browserNotSupported': "Il to sgarfadôr nol supuarte la renderizazion vetoriâl. Al moment a son supuartâts:\n${renderers}", 'scale': "Scjale = 1 : ${scaleDenom}", 'W': "O", 'E': "E", 'N': "N", 'S': "S" }); OpenLayers.Lang["gl"] = OpenLayers.Util.applyDefaults({ 'unhandledRequest': "Solicitude non xerada; a resposta foi: ${statusText}", 'permalink': "Ligazón permanente", 'overlays': "Capas superpostas", 'baseLayer': "Capa base", 'sameProjection': "A vista xeral do mapa só funciona cando está na mesma proxección có mapa principal", 'readNotImplemented': "Lectura non implementada.", 'writeNotImplemented': "Escritura non implementada.", 'noFID': "Non se pode actualizar a funcionalidade para a que non hai FID.", 'errorLoadingGML': "Erro ao cargar o ficheiro GML $(url)", 'browserNotSupported': "O seu navegador non soporta a renderización de vectores. Os renderizadores soportados actualmente son:\n${renderers}", 'componentShouldBe': "addFeatures: o compoñente debera ser de tipo ${geomType}", 'getFeatureError': "getFeatureFromEvent ten sido chamado a unha capa sen renderizador. Isto normalmente significa que destruíu unha capa, mais non o executador que está asociado con ela.", 'minZoomLevelError': "A propiedade minZoomLevel é só para uso conxuntamente coas capas FixedZoomLevels-descendent. O feito de que esa capa wfs verifique o minZoomLevel é unha reliquia do pasado. Non podemos, con todo, eliminala sen a posibilidade de non romper as aplicacións baseadas en OL que poidan depender dela. Por iso a estamos deixando obsoleta (a comprobación minZoomLevel de embaixo será eliminada na versión 3.0). Por favor, no canto diso use o axuste de resolución mín/máx tal e como está descrito aquí: http://trac.openlayers.org/wiki/SettingZoomLevels", 'commitSuccess': "Transacción WFS: ÉXITO ${response}", 'commitFailed': "Transacción WFS: FALLIDA ${response}", 'googleWarning': "A capa do Google non puido cargarse correctamente.\x3cbr\x3e\x3cbr\x3ePara evitar esta mensaxe, escolla unha nova capa base no seleccionador de capas na marxe superior dereita.\x3cbr\x3e\x3cbr\x3eProbablemente, isto acontece porque a escritura da libraría do Google Maps ou ben non foi incluída ou ben non contén a clave API correcta para o seu sitio.\x3cbr\x3e\x3cbr\x3eDesenvolvedores: para axudar a facer funcionar isto correctamente, \x3ca href=\'http://trac.openlayers.org/wiki/Google\' target=\'_blank\'\x3epremede aquí\x3c/a\x3e", 'getLayerWarning': "A capa ${layerType} foi incapaz de cargarse correctamente.\x3cbr\x3e\x3cbr\x3ePara evitar esta mensaxe, escolla unha nova capa base no seleccionador de capas na marxe superior dereita.\x3cbr\x3e\x3cbr\x3eProbablemente, isto acontece porque a escritura da libraría ${layerLib} non foi ben incluída.\x3cbr\x3e\x3cbr\x3eDesenvolvedores: para axudar a facer funcionar isto correctamente, \x3ca href=\'http://trac.openlayers.org/wiki/${layerLib}\' target=\'_blank\'\x3epremede aquí\x3c/a\x3e", 'scale': "Escala = 1 : ${scaleDenom}", 'W': "O", 'E': "L", 'N': "N", 'S': "S", 'layerAlreadyAdded': "Intentou engadir a capa: ${layerName} ao mapa, pero xa fora engadida", 'reprojectDeprecated': "Está usando a opción \"reproject\" na capa ${layerName}. Esta opción está obsoleta: o seu uso foi deseñado para a visualización de datos sobre mapas base comerciais, pero esta funcionalidade debera agora ser obtida utilizando a proxección Spherical Mercator. Hai dispoñible máis información en http://trac.openlayers.org/wiki/SphericalMercator.", 'methodDeprecated': "Este método está obsoleto e será eliminado na versión 3.0. Por favor, no canto deste use ${newMethod}.", 'boundsAddError': "Debe achegar os valores x e y á función add.", 'lonlatAddError': "Debe achegar tanto o valor lon coma o lat á función add.", 'pixelAddError': "Debe achegar os valores x e y á función add.", 'unsupportedGeometryType': "Tipo xeométrico non soportado: ${geomType}", 'pagePositionFailed': "OpenLayers.Util.pagePosition fallou: o elemento con id ${elemId} pode non estar na súa posición.", 'filterEvaluateNotImplemented': "avaliar non está implementado para este tipo de filtro." }); OpenLayers.Lang["gsw"] = OpenLayers.Util.applyDefaults({ 'unhandledRequest': "Nit behandleti Aafrogsruckmäldig ${statusText}", 'permalink': "Permalink", 'overlays': "Iberlagerige", 'baseLayer': "Grundcharte", 'sameProjection': "D Ibersichts-Charte funktioniert nume, wänn si di glych Projäktion brucht wie d Hauptcharte", 'readNotImplemented': "Läse nit implementiert.", 'writeNotImplemented': "Schrybe nit implementiert.", 'noFID': "E Feature, wu s kei FID derfir git, cha nit aktualisiert wäre.", 'errorLoadingGML': "Fähler bim Lade vu dr GML-Datei ${url}", 'browserNotSupported': "Dyy Browser unterstitzt kei Vektordarstellig. Aktuäll unterstitzti Renderer:\n${renderers}", 'componentShouldBe': "addFeatures : Komponänt sott dr Typ ${geomType} syy", 'getFeatureError': "getFeatureFromEvent isch uf eme Layer ohni Renderer ufgruefe wore. Des heisst normalerwys, ass Du e Layer kaputt gmacht hesch, aber nit dr Handler, wu derzue ghert.", 'minZoomLevelError': "D minZoomLevel-Eigeschaft isch nume dänk fir d Layer, wu vu dr FixedZoomLevels abstamme. Ass dää wfs-Layer minZoomLevel prieft, scih e Relikt us dr Vergangeheit. Mir chenne s aber nit ändere ohni OL_basierti Aawändige villicht kaputt gehn, wu dervu abhänge. Us däm Grund het die Funktion d Eigeschaft \'deprecated\' iberchuu. D minZoomLevel-Priefig unte wird in dr Version 3.0 usegnuu. Bitte verwänd statt däm e min/max-Uflesig wie s do bschriben isch: http://trac.openlayers.org/wiki/SettingZoomLevels", 'commitSuccess': "WFS-Transaktion: ERFOLGRYCH ${response}", 'commitFailed': "WFS-Transaktion: FÄHLGSCHLAA ${response}", 'googleWarning': "Dr Google-Layer het nit korräkt chenne glade wäre.\x3cbr\x3e\x3cbr\x3eGo die Mäldig nimi z kriege, wehl e andere Hintergrundlayer us em LayerSwitcher im rächte obere Ecke.\x3cbr\x3e\x3cbr\x3eDää Fähler git s seli hyfig, wel s Skript vu dr Google-Maps-Bibliothek nit yybunde woren isch oder wel s kei giltige API-Schlissel fir Dyy URL din het.\x3cbr\x3e\x3cbr\x3eEntwickler: Fir Hilf zum korräkte Yybinde vum Google-Layer \x3ca href=\'http://trac.openlayers.org/wiki/Google\' target=\'_blank\'\x3edoo drucke\x3c/a\x3e", 'getLayerWarning': "Dr ${layerType}-Layer het nit korräkt chenne glade wäre.\x3cbr\x3e\x3cbr\x3eGo die Mäldig nimi z kriege, wehl e andere Hintergrundlayer us em LayerSwitcher im rächte obere Ecke.\x3cbr\x3e\x3cbr\x3eDää Fähler git s seli hyfig, wel s Skript vu dr \'${layerLib}\'-Bibliothek nit yybunde woren isch oder wel s kei giltige API-Schlissel fir Dyy URL din het.\x3cbr\x3e\x3cbr\x3eEntwickler: Fir Hilf zum korräkte Yybinde vu Layer \x3ca href=\'http://trac.openlayers.org/wiki/${layerLib}\' target=\'_blank\'\x3edoo drucke\x3c/a\x3e", 'scale': "Maßstab = 1 : ${scaleDenom}", 'W': "W", 'E': "O", 'N': "N", 'S': "S", 'layerAlreadyAdded': "Du hesch versuecht dää Layer in d Charte yyzfiege: ${layerName}, aber är isch schoi yygfiegt", 'reprojectDeprecated': "Du bruchsch d \'reproject\'-Option bim ${layerName}-Layer. Die Option isch nimi giltig: si isch aagleit wore go Date iber kommerziälli Grundcharte lege, aber des sott mer jetz mache mit dr Unterstitzig vu Spherical Mercator. Meh Informatione git s uf http://trac.openlayers.org/wiki/SphericalMercator.", 'methodDeprecated': "Die Methode isch veraltet un wird us dr Version 3.0 usegnuu. Bitte verwäbnd statt däm ${newMethod}.", 'boundsAddError': "Du muesch e x-Wärt un e y-Wärt yygee bi dr Zuefieg-Funktion", 'lonlatAddError': "Du meusch e Lengi- un e Breiti-Grad yygee bi dr Zuefieg-Funktion.", 'pixelAddError': "Du muesch x- un y-Wärt aagee bi dr Zuefieg-Funktion.", 'unsupportedGeometryType': "Nit unterstitze Geometrii-Typ: ${geomType}", 'pagePositionFailed': "OpenLayers.Util.pagePosition fählgschlaa: Elemänt mit ID ${elemId} isch villicht falsch gsetzt.", 'filterEvaluateNotImplemented': "evaluiere isch nit implemäntiert in däm Filtertyp." }); OpenLayers.Lang["hr"] = OpenLayers.Util.applyDefaults({ 'unhandledRequest': "Nepodržani zahtjev ${statusText}", 'permalink': "Permalink", 'overlays': "Overlays", 'baseLayer': "Osnovna karta", 'sameProjection': "Pregledna karta radi jedino kao je u istoj projekciji kao i glava karta", 'readNotImplemented': "ÄŒitanje nije implementirano.", 'writeNotImplemented': "Pisanje nije implementirano.", 'noFID': "Ne mogu ažurirati znaÄajku za koju ne postoji FID.", 'errorLoadingGML': "GreÅ¡ka u uÄitavanju GML datoteke ${url}", 'browserNotSupported': "VaÅ¡ preglednik ne podržava vektorsko renderiranje. Trenutno podržani rendereri su: ${renderers}", 'componentShouldBe': "addFeatures : komponenta bi trebala biti ${geomType}", 'getFeatureError': "getFeatureFromEvent je pozvao Layer bez renderera. Ovo obiÄno znaÄi da ste uniÅ¡tiili Layer, a ne neki Handler koji je povezan s njim.", 'commitSuccess': "WFS Transakcija: USPJEÅ NA ${response}", 'commitFailed': "WFS Transakcija: NEUSPJEÅ NA ${response}", 'scale': "Mjerilo = 1 : ${scaleDenom}", 'layerAlreadyAdded': "PokuÅ¡ali ste dodati layer: ${layerName} na kartu, ali je već dodan", 'methodDeprecated': "Ova metoda nije odobrena i biti će maknuta u 3.0. Koristite ${newMethod}.", 'boundsAddError': "Morate dati obje vrijednosti , x i y da bi dodali funkciju.", 'lonlatAddError': "Morate dati obje vrijednosti , (lon i lat) da bi dodali funkciju.", 'pixelAddError': "Morate dati obje vrijednosti , x i y da bi dodali funkciju.", 'unsupportedGeometryType': "Nepodržani tip geometrije: ${geomType}", 'pagePositionFailed': "OpenLayers.Util.pagePosition nije uspjelo: element sa id ${elemId} može biti krivo smjeÅ¡ten." }); OpenLayers.Lang["hsb"] = OpenLayers.Util.applyDefaults({ 'unhandledRequest': "WotmoÅ‚wa njewobdźěłaneho napraÅ¡owanja ${statusText}", 'permalink': "Trajny wotkaz", 'overlays': "NaworÅ¡towanja", 'baseLayer': "ZakÅ‚adna runina", 'sameProjection': "PÅ™ehladowa karta jenož funguje, hdyž je w samsnej projekciji kaž hÅ‚owna karta", 'readNotImplemented': "ÄŒitanje njeimplementowane.", 'writeNotImplemented': "Pisanje njeimplementowane.", 'noFID': "Funkcija, za kotruž FID njeje, njeda so aktualizować.", 'errorLoadingGML': "Zmylk pÅ™i zaÄitowanju dataje ${url}", 'browserNotSupported': "Twój wobhladowak wektorowe rysowanje njepodpÄ›ruje. Tuchwilu podpÄ›rowane rysowaki su:\n${renderers}", 'componentShouldBe': "addFeatures: komponenta měła ${geomType} być", 'getFeatureError': "getFeatureFromEvent bu na woršće bjez rysowak zawoÅ‚any. To zwjetÅ¡a woznamjenja, zo sy worÅ¡tu zniÄiÅ‚, ale nic wobdźěłak, kotryž je z njej zwjazany.", 'minZoomLevelError': "Kajkosć minZoomLevel je jenož za wužiwanje z worÅ¡tami myslena, kotrež wot FixedZoomLevels pochadźeja. Zo tuta worÅ¡ta wfs za minZoomLevel pÅ™epruwuje, je relikt zaÅ„dźenosće. Njemóžemy wÅ¡ak ju wotstronić, bjeztoho zo aplikacije, kotrež na OpenLayers bazÄ›ruja a snano tutu kajkosć wužiwaja, hižo njefunguja. Tohodla smy ju jako zestarjenu woznamjenili -- pÅ™epruwowanje za minZoomLevel budu so we wersiji 3.0 wotstronjeć. ProÅ¡u wužij mÄ›sto toho nastajenje min/max, kaž je tu wopisane: http://trac.openlayers.org/wiki/SettingZoomLevels", 'commitSuccess': "WFS-Transakcija: WUSPĚŠNA ${response}", 'commitFailed': "WFS-Transakcija: NJEPORADŹENA ${response}", 'googleWarning': "WorÅ¡ta Google njemóžeÅ¡e so korektnje zaÄitać.\x3cbr\x3e\x3cbr\x3eZo by tutu zdźělenku wotbyÅ‚, wubjer nowy BaseLayer z wubÄ›ra worÅ¡tow horjeka naprawo.\x3cbr\x3e\x3cbr\x3eNajskerje so to stawa, dokelž skript biblioteki Google Maps pak njebu zapÅ™ijaty pak njewobsahuje korektny kluÄ API za twoje sydÅ‚o.\x3cbr\x3e\x3cbr\x3eWuwiwarjo: Za pomoc ke korektnemu fungowanju worÅ¡tow\n\x3ca href=\'http://trac.openlayers.org/wiki/Google\' target=\'_blank\'\x3etu kliknyć\x3c/a\x3e", 'getLayerWarning': "WorÅ¡ta ${layerType} njemóžeÅ¡e so korektnje zaÄitać.\x3cbr\x3e\x3cbr\x3eZo by tutu zdźělenku wotbyÅ‚, wubjer nowy BaseLayer z wubÄ›ra worÅ¡tow horjeka naprawo.\x3cbr\x3e\x3cbr\x3eNajskerje so to stawa, dokelž skript biblioteki ${layerLib} njebu korektnje zapÅ™ijaty.\x3cbr\x3e\x3cbr\x3eWuwiwarjo: Za pomoc ke korektnemu fungowanju worÅ¡tow\n\x3ca href=\'http://trac.openlayers.org/wiki/${layerLib}\' target=\'_blank\'\x3etu kliknyć\x3c/a\x3e", 'scale': "MÄ›ritko = 1 : ${scaleDenom}", 'W': "Z", 'E': "W", 'N': "S", 'S': "J", 'layerAlreadyAdded': "Sy spytaÅ‚ runinu ${layerName} karće dodać, ale je so hižo dodaÅ‚a", 'reprojectDeprecated': "WužiwaÅ¡ opciju \"reproject\" wořšty ${layerName}. Tuta opcija je zestarjena: jeje wužiwanje bÄ› myslene, zo by zwobraznjenje datow nad komercielnymi bazowymi kartami podpÄ›raÅ‚o, ale funkcionalnosć měła so nÄ›tko z pomocu Sperical Mercator docpěć. DalÅ¡e informacije steja na http://trac.openlayers.org/wiki/SphericalMercator k dispoziciji.", 'methodDeprecated': "Tuta metoda je so njeschwaliÅ‚a a budźe so w 3.0 wotstronjeć. ProÅ¡u wužij ${newMethod} mÄ›sto toho.", 'boundsAddError': "DyrbiÅ¡ hódnotu x kaž tež y funkciji \"add\" pÅ™epodać.", 'lonlatAddError': "DyrbiÅ¡ hódnotu lon kaž tež lat funkciji \"add\" pÅ™epodać.", 'pixelAddError': "DyrbiÅ¡ hódnotu x kaž tež y funkciji \"add\" pÅ™epodać.", 'unsupportedGeometryType': "NjepodpÄ›rowany geometrijowy typ: ${geomType}", 'pagePositionFailed': "OpenLayers.Util.pagePosition je so njeporadźiÅ‚: element z id ${elemId} bu snano wopak zamÄ›stnjeny.", 'filterEvaluateNotImplemented': "wuhódnoćenje njeje za tutón filtrowy typ implementowany." }); OpenLayers.Lang["hu"] = OpenLayers.Util.applyDefaults({ 'unhandledRequest': "Nem kezelt kérés visszatérése ${statusText}", 'permalink': "Permalink", 'overlays': "Rávetítések", 'baseLayer': "Alapréteg", 'sameProjection': "Az áttekintÅ‘ térkép csak abban az esetben működik, ha ugyanazon a vetületen van, mint a fÅ‘ térkép.", 'readNotImplemented': "Olvasás nincs végrehajtva.", 'writeNotImplemented': "Ãrás nincs végrehajtva.", 'noFID': "Nem frissíthetÅ‘ olyan jellemzÅ‘, amely nem rendelkezik FID-del.", 'errorLoadingGML': "Hiba GML-fájl betöltésekor ${url}", 'browserNotSupported': "A böngészÅ‘je nem támogatja a vektoros renderelést. A jelenleg támogatott renderelÅ‘k:\n${renderers}", 'componentShouldBe': "addFeatures : az összetevÅ‘nek ilyen típusúnak kell lennie: ${geomType}", 'getFeatureError': "getFeatureFromEvent réteget hívott meg renderelÅ‘ nélkül. Ez rendszerint azt jelenti, hogy megsemmisített egy fóliát, de néhány ahhoz társított kezelÅ‘t nem.", 'minZoomLevelError': "A minZoomLevel tulajdonságot csak a következÅ‘vel való használatra szánták: FixedZoomLevels-leszármazott fóliák. Ez azt jelenti, hogy a minZoomLevel wfs fólia jelölÅ‘négyzetei már a múlté. Mi azonban nem távolíthatjuk el annak a veszélye nélkül, hogy az esetlegesen ettÅ‘l függÅ‘ OL alapú alkalmazásokat tönkretennénk. Ezért ezt érvénytelenítjük -- a minZoomLevel az alul levÅ‘ jelölÅ‘négyzet a 3.0-s verzióból el lesz távolítva. Kérjük, helyette használja a min/max felbontás beállítást, amelyrÅ‘l az alábbi helyen talál leírást: http://trac.openlayers.org/wiki/SettingZoomLevels", 'commitSuccess': "WFS tranzakció: SIKERES ${response}", 'commitFailed': "WFS tranzakció: SIKERTELEN ${response}", 'googleWarning': "A Google fólia betöltése sikertelen.\x3cbr\x3e\x3cbr\x3eAhhoz, hogy ez az üzenet eltűnjön, válasszon egy új BaseLayer fóliát a jobb felsÅ‘ sarokban található fóliakapcsoló segítségével.\x3cbr\x3e\x3cbr\x3eNagy valószínűséggel ez azért van, mert a Google Maps könyvtár parancsfájlja nem található, vagy nem tartalmazza az Ön oldalához tartozó megfelelÅ‘ API-kulcsot.\x3cbr\x3e\x3cbr\x3eFejlesztÅ‘knek: A helyes működtetésre vonatkozó segítség az alábbi helyen érhetÅ‘ el, \x3ca href=\'http://trac.openlayers.org/wiki/Google\' target=\'_blank\'\x3ekattintson ide\x3c/a\x3e", 'getLayerWarning': "A(z) ${layerType} fólia nem töltÅ‘dött be helyesen.\x3cbr\x3e\x3cbr\x3eAhhoz, hogy ez az üzenet eltűnjön, válasszon egy új BaseLayer fóliát a jobb felsÅ‘ sarokban található fóliakapcsoló segítségével.\x3cbr\x3e\x3cbr\x3eNagy valószínűséggel ez azért van, mert a(z) ${layerLib} könyvtár parancsfájlja helytelen.\x3cbr\x3e\x3cbr\x3eFejlesztÅ‘knek: A helyes működtetésre vonatkozó segítség az alábbi helyen érhetÅ‘ el, \x3ca href=\'http://trac.openlayers.org/wiki/${layerLib}\' target=\'_blank\'\x3ekattintson ide\x3c/a\x3e", 'scale': "Lépték = 1 : ${scaleDenom}", 'W': "Ny", 'E': "K", 'N': "É", 'S': "D", 'layerAlreadyAdded': "Megpróbálta hozzáadni a(z) ${layerName} fóliát a térképhez, de az már hozzá van adva", 'reprojectDeprecated': "Ön a \'reproject\' beállítást használja a(z) ${layerName} fólián. Ez a beállítás érvénytelen: használata az üzleti alaptérképek fölötti adatok megjelenítésének támogatására szolgált, de ezt a funkció ezentúl a Gömbi Mercator használatával érhetÅ‘ el. További információ az alábbi helyen érhetÅ‘ el: http://trac.openlayers.org/wiki/SphericalMercator", 'methodDeprecated': "Ez a módszer érvénytelenítve lett és a 3.0-s verzióból el lesz távolítva. Használja a(z) ${newMethod} módszert helyette.", 'boundsAddError': "Az x és y értékeknek egyaránt meg kell felelnie, hogy a funkciót hozzáadhassa.", 'lonlatAddError': "A hossz. és szél. értékeknek egyaránt meg kell felelnie, hogy a funkciót hozzáadhassa.", 'pixelAddError': "Az x és y értékeknek egyaránt meg kell felelnie, hogy a funkciót hozzáadhassa.", 'unsupportedGeometryType': "Nem támogatott geometriatípus: ${geomType}", 'pagePositionFailed': "OpenLayers.Util.pagePosition sikertelen: lehetséges, hogy a(z) ${elemId} azonosítójú elem téves helyre került.", 'filterEvaluateNotImplemented': "ennél a szűrÅ‘típusnál kiértékelés nem hajtódik végre." }); OpenLayers.Lang["ia"] = OpenLayers.Util.applyDefaults({ 'unhandledRequest': "Le responsa a un requesta non esseva maneate: ${statusText}", 'permalink': "Permaligamine", 'overlays': "Superpositiones", 'baseLayer': "Strato de base", 'sameProjection': "Le mini-carta functiona solmente si illo es in le mesme projection que le carta principal", 'readNotImplemented': "Lectura non implementate.", 'writeNotImplemented': "Scriptura non implementate.", 'noFID': "Non pote actualisar un elemento sin FID.", 'errorLoadingGML': "Error al cargamento del file GML ${url}", 'browserNotSupported': "Tu navigator non supporta le rendition de vectores. Le renditores actualmente supportate es:\n${renderers}", 'componentShouldBe': "addFeatures: le componente debe esser del typo ${geomType}", 'getFeatureError': "getFeatureFromEvent ha essite appellate in un strato sin renditor. Isto significa generalmente que tu ha destruite un strato, ma lassava un gestor associate con illo.", 'minZoomLevelError': "Le proprietate minZoomLevel es solmente pro uso con le stratos descendente de FixedZoomLevels. Le facto que iste strato WFS verifica minZoomLevel es un reliquia del passato. Nonobstante, si nos lo remove immediatemente, nos pote rumper applicationes a base de OL que depende de illo. Ergo nos lo declara obsolete; le verification de minZoomLevel in basso essera removite in version 3.0. Per favor usa in su loco le configuration de resolutiones min/max como describite a: http://trac.openlayers.org/wiki/SettingZoomLevels", 'commitSuccess': "Transaction WFS: SUCCESSO ${response}", 'commitFailed': "Transaction WFS: FALLEVA ${response}", 'googleWarning': "Le strato Google non poteva esser cargate correctemente.\x3cbr\x3e\x3cbr\x3ePro disfacer te de iste message, selige un nove BaseLayer in le selector de strato in alto a dextra.\x3cbr\x3e\x3cbr\x3eMulto probabilemente, isto es proque le script del libreria de Google Maps non esseva includite o non contine le clave API correcte pro tu sito.\x3cbr\x3e\x3cbr\x3eDisveloppatores: Pro adjuta de corriger isto, \x3ca href=\'http://trac.openlayers.org/wiki/Google\' target=\'_blank\'\x3eclicca hic\x3c/a", 'getLayerWarning': "Le strato ${layerType} non poteva esser cargate correctemente.\x3cbr\x3e\x3cbr\x3ePro disfacer te de iste message, selige un nove BaseLayer in le selector de strato in alto a dextra.\x3cbr\x3e\x3cbr\x3eMulto probabilemente, isto es proque le script del libreria de ${layerLib} non esseva correctemente includite.\x3cbr\x3e\x3cbr\x3eDisveloppatores: Pro adjuta de corriger isto, \x3ca href=\'http://trac.openlayers.org/wiki/${layerLib}\' target=\'_blank\'\x3eclicca hic\x3c/a\x3e", 'scale': "Scala = 1 : ${scaleDenom}", 'W': "W", 'E': "E", 'N': "N", 'S': "S", 'layerAlreadyAdded': "Tu tentava adder le strato: ${layerName} al carta, ma illo es ja presente", 'reprojectDeprecated': "Tu usa le option \'reproject\' in le strato ${layerName} layer. Iste option es obsolescente: illo esseva pro poter monstrar datos super cartas de base commercial, ma iste functionalitate pote ora esser attingite con le uso de Spherical Mercator. Ulterior information es disponibile a http://trac.openlayers.org/wiki/SphericalMercator.", 'methodDeprecated': "Iste methodo ha essite declarate obsolescente e essera removite in version 3.0. Per favor usa ${newMethod} in su loco.", 'boundsAddError': "Tu debe passar le duo valores x e y al function add.", 'lonlatAddError': "Tu debe passar le duo valores lon e lat al function add.", 'pixelAddError': "Tu debe passar le duo valores x e y al function add.", 'unsupportedGeometryType': "Typo de geometria non supportate: ${geomType}", 'pagePositionFailed': "OpenLayers.Util.pagePosition falleva: le elemento con id ${elemId} pote esser mal placiate.", 'filterEvaluateNotImplemented': "\"evaluate\" non es implementate pro iste typo de filtro." }); OpenLayers.Lang["id"] = OpenLayers.Util.applyDefaults({ 'unhandledRequest': "Permintaan yang tak tertangani menghasilkan ${statusText}", 'permalink': "Pranala permanen", 'overlays': "Hamparan", 'baseLayer': "Lapisan Dasar", 'sameProjection': "Peta tinjauan hanya bekerja bila dalam proyeksi yang sama dengan peta utama", 'readNotImplemented': "Membaca tidak diterapkan.", 'writeNotImplemented': "Menyimpan tidak diterapkan.", 'noFID': "Tidak dapat memperbarui fitur yang tidak memiliki FID.", 'errorLoadingGML': "Kesalahan dalam memuat berkas GML ${url}", 'browserNotSupported': "Peramban Anda tidak mendukung penggambaran vektor. Penggambar yang didukung saat ini adalah:\n${renderers}", 'componentShouldBe': "addFeatures : komponen harus berupa ${geomType}", 'getFeatureError': "getFeatureFromEvent diterapkan pada lapisan tanpa penggambar. Ini biasanya berarti Anda menghapus sebuah lapisan, tetapi tidak menghapus penangan yang terkait dengannya.", 'minZoomLevelError': "Properti minZoomLevel hanya ditujukan bekerja dengan lapisan FixedZoomLevels-descendent. Pengecekan minZoomLevel oleh lapisan wfs adalah peninggalan masa lalu. Kami tidak dapat menghapusnya tanpa kemungkinan merusak aplikasi berbasis OL yang mungkin bergantung padanya. Karenanya, kami menganggapnya tidak berlaku -- Cek minZoomLevel di bawah ini akan dihapus pada 3.0. Silakan gunakan penyetelan resolusi min/maks seperti dijabarkan di sini: http://trac.openlayers.org/wiki/SettingZoomLevels", 'commitSuccess': "WFS Transaksi: BERHASIL ${respon}", 'commitFailed': "WFS Transaksi: GAGAL ${respon}", 'googleWarning': "Lapisan Google tidak dapat dimuat dengan benar.\x3cbr\x3e\x3cbr\x3eUntuk menghilangkan pesan ini, pilih suatu BaseLayer baru melalui penukar lapisan (layer switcher) di ujung kanan atas.\x3cbr\x3e\x3cbr\x3eKemungkinan besar ini karena pustaka skrip Google Maps tidak disertakan atau tidak mengandung kunci API yang tepat untuk situs Anda.\x3cbr\x3e\x3cbr\x3ePengembang: Untuk bantuan mengatasi masalah ini, \x3ca href=\'http://trac.openlayers.org/wiki/Google\' target=\'_blank\'\x3eklik di sini\x3c/a\x3e", 'getLayerWarning': "Lapisan ${layerType} tidak dapat dimuat dengan benar.\x3cbr\x3e\x3cbr\x3eUntuk menghilangkan pesan ini, pilih suatu BaseLayer baru melalui penukar lapisan (layer switcher) di ujung kanan atas.\x3cbr\x3e\x3cbr\x3eKemungkinan besar ini karena pustaka skrip Google Maps tidak disertakan dengan benar.\x3cbr\x3e\x3cbr\x3ePengembang: Untuk bantuan mengatasi masalah ini, \x3ca href=\'http://trac.openlayers.org/wiki/${layerLib}\' target=\'_blank\'\x3eklik di sini\x3c/a\x3e", 'scale': "Sekala = 1 : $(sekala Denom)", 'W': "B", 'E': "T", 'N': "U", 'S': "S", 'layerAlreadyAdded': "Anda mencoba menambahkan lapisan: ${layerName} ke dalam peta, tapi lapisan itu telah ditambahkan", 'reprojectDeprecated': "Anda menggunakan opsi \'reproject\' pada lapisan ${layerName}. Opsi ini telah ditinggalkan: penggunaannya dirancang untuk mendukung tampilan data melalui peta dasar komersial, tapi fungsionalitas tersebut saat ini harus dilakukan dengan menggunakan dukungan Spherical Mercator. Informasi lebih lanjut tersedia di http://trac.openlayers.org/wiki/SphericalMercator.", 'methodDeprecated': "Metode ini telah usang dan akan dihapus di 3.0. Sebaliknya, harap gunakan ${newMethod}.", 'boundsAddError': "Anda harus memberikan kedua nilai x dan y ke fungsi penambah.", 'lonlatAddError': "Anda harus memberikan kedua nilai lon dan lat ke fungsi penambah.", 'pixelAddError': "Anda harus memberikan kedua nilai x dan y ke fungsi penambah.", 'unsupportedGeometryType': "Tipe geometri tak didukung: ${geomType}", 'pagePositionFailed': "OpenLayers.Util.pagePosition gagal: elemen dengan id ${elemId} mungkin salah tempat.", 'filterEvaluateNotImplemented': "evaluasi tidak tersedia untuk tipe filter ini." }); OpenLayers.Lang["io"] = OpenLayers.Util.applyDefaults({ 'scale': "Skalo = 1 : ${scaleDenom}" }); OpenLayers.Lang["is"] = OpenLayers.Util.applyDefaults({ 'permalink': "Varanlegur tengill", 'overlays': "Þekjur", 'baseLayer': "Grunnlag", 'sameProjection': "Yfirlitskortið virkar aðeins ef það er í sömu vörpun og aðalkortið", 'readNotImplemented': "Skrifun er óútfærð.", 'writeNotImplemented': "Lestur er óútfærður.", 'errorLoadingGML': "Villa kom upp við að hlaða inn GML skránni ${url}", 'scale': "Skali = 1 : ${scaleDenom}", 'layerAlreadyAdded': "Þú reyndir að bæta laginu ${layerName} á kortið en það er þegar búið að bæta því við", 'methodDeprecated': "Þetta fall hefur verið úrelt og verður fjarlægt í 3.0. Notaðu ${newMethod} í staðin." }); OpenLayers.Lang["ja"] = OpenLayers.Util.applyDefaults({ 'unhandledRequest': "未処ç†ã®è¦æ±‚㯠${statusText} ã‚’è¿”ã—ã¾ã™", 'permalink': "パーマリンク", 'overlays': "オーãƒãƒ¼ãƒ¬ã‚¤", 'baseLayer': "基底レイヤー", 'sameProjection': "概観地図ã¯ãƒ¡ã‚¤ãƒ³ã®åœ°å›³ã¨åŒã˜æŠ•影法をã¨ã‚‹å ´åˆã®ã¿æ©Ÿèƒ½ã—ã¾ã™", 'readNotImplemented': "読ã¿è¾¼ã¿ã¯å®Ÿè£…ã•れã¦ã„ã¾ã›ã‚“。", 'writeNotImplemented': "書ãè¾¼ã¿ã¯å®Ÿè£…ã•れã¦ã„ã¾ã›ã‚“。", 'noFID': "FID ã®ãªã„åœ°ç‰©ã¯æ›´æ–°ã§ãã¾ã›ã‚“。", 'errorLoadingGML': "GML ファイル ${url} ã®èª­ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼", 'browserNotSupported': "ã‚ãªãŸã®ãƒ–ラウザã¯ãƒ™ã‚¯ã‚¿ãƒ¼ã‚°ãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚¹ã®æå†™ã«å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“ã€‚ç¾æ™‚点ã§å¯¾å¿œã—ã¦ã„るソフトウェアã¯ä»¥ä¸‹ã®ã‚‚ã®ã§ã™ã€‚\n${renderers}", 'componentShouldBe': "addFeatures: è¦ç´ 㯠${geomType} ã§ã‚ã‚‹ã¹ãã§ã™", 'getFeatureError': "getFeatureFromEvent ãŒãƒ¬ãƒ³ãƒ€ãƒ©ãƒ¼ã®ãªã„レイヤーã‹ã‚‰å‘¼ã°ã‚Œã¾ã—ãŸã€‚通常ã€ã“れã¯ã‚ãªãŸãŒãƒ¬ã‚¤ãƒ¤ãƒ¼ã‚’ã€ãれã«é–¢é€£ã¥ã‘られãŸã„ãã¤ã‹ã®ãƒãƒ³ãƒ‰ãƒ©ã‚’除ã„ã¦ã€ç ´å£Šã—ã¦ã—ã¾ã£ãŸã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚", 'minZoomLevelError': "minZoomLevel プロパティ㯠FixedZoomLevels を継承ã™ã‚‹ãƒ¬ã‚¤ãƒ¤ãƒ¼ã§ã®ä½¿ç”¨ã®ã¿ã‚’想定ã—ã¦ã„ã¾ã™ã€‚ã“ã® minZoomLevel ã«å¯¾ã™ã‚‹ WFS ãƒ¬ã‚¤ãƒ¤ãƒ¼ã®æ¤œæŸ»ã¯æ­´å²çš„ãªã‚‚ã®ã§ã™ã€‚ã—ã‹ã—ãªãŒã‚‰ã€ã“ã®æ¤œæŸ»ã‚’除去ã™ã‚‹ã¨ãれã«ä¾å­˜ã™ã‚‹ OpenLayers ベースã®ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ç ´å£Šã—ã¦ã—ã¾ã†å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚よã£ã¦å»ƒæ­¢ãŒäºˆå®šã•れã¦ãŠã‚Šã€ã“ã® minZoomLevel 検査ã¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³3.0ã§é™¤åŽ»ã•れã¾ã™ã€‚代ã‚りã«ã€http://trac.openlayers.org/wiki/SettingZoomLevels ã§è§£èª¬ã•れã¦ã„ã‚‹ã€æœ€å°ãŠã‚ˆã³æœ€å¤§è§£åƒåº¦è¨­å®šã‚’使用ã—ã¦ãã ã•ã„。", 'commitSuccess': "WFS トランザクション: æˆåŠŸ ${response}", 'commitFailed': "WFS トランザクション: 失敗 ${response}", 'googleWarning': "Google ãƒ¬ã‚¤ãƒ¤ãƒ¼ãŒæ­£ã—ã読ã¿è¾¼ã¿ã‚’行ãˆã¾ã›ã‚“ã§ã—ãŸã€‚\x3cbr\x3e\x3cbr\x3eã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’消ã™ã«ã¯ã€å³ä¸Šã®éš…ã«ã‚るレイヤー切り替ãˆéƒ¨åˆ†ã§æ–°ã—ã„基底レイヤーをé¸ã‚“ã§ãã ã•ã„。\x3cbr\x3e\x3cbr\x3eãŠãらãã€ã“れ㯠Google マップ用ライブラリã®ã‚¹ã‚¯ãƒªãƒ—トãŒçµ„ã¿è¾¼ã¾ã‚Œã¦ã„ãªã„ã‹ã€ã‚ãªãŸã®ã‚µã‚¤ãƒˆã«å¯¾å¿œã™ã‚‹æ­£ã—ã„ API キーãŒè¨­å®šã•れã¦ã„ãªã„ãŸã‚ã§ã™ã€‚\x3cbr\x3e\x3cbr\x3eé–‹ç™ºè€…ã®æ–¹ã¸: æ­£ã—ã„動作をã•ã›ã‚‹ãŸã‚ã«\x3ca href=\'http://trac.openlayers.org/wiki/Google\' target=\'_blank\'\x3eã“ã¡ã‚‰ã®ã‚¦ã‚£ã‚­\x3c/a\x3eã‚’å‚ç…§ã—ã¦ãã ã•ã„。", 'getLayerWarning': "${layerType} ãƒ¬ã‚¤ãƒ¤ãƒ¼ãŒæ­£ã—ã読ã¿è¾¼ã¿ã‚’行ãˆã¾ã›ã‚“ã§ã—ãŸã€‚\x3cbr\x3e\x3cbr\x3eã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’消ã™ã«ã¯ã€å³ä¸Šã®éš…ã«ã‚るレイヤー切り替ãˆéƒ¨åˆ†ã§æ–°ã—ã„基底レイヤーをé¸ã‚“ã§ãã ã•ã„。\x3cbr\x3e\x3cbr\x3eãŠãらãã€ã“れ㯠${layerLib} ライブラリã®ã‚¹ã‚¯ãƒªãƒ—ãƒˆãŒæ­£ã—ã組ã¿è¾¼ã¾ã‚Œã¦ã„ãªã„ãŸã‚ã§ã™ã€‚\x3cbr\x3e\x3cbr\x3eé–‹ç™ºè€…ã®æ–¹ã¸: æ­£ã—ã„動作をã•ã›ã‚‹ãŸã‚ã«\x3ca href=\'http://trac.openlayers.org/wiki/${layerLib}\' target=\'_blank\'\x3eã“ã¡ã‚‰ã®ã‚¦ã‚£ã‚­\x3c/a\x3eã‚’å‚ç…§ã—ã¦ãã ã•ã„。", 'scale': "縮尺 = 1 : ${scaleDenom}", 'W': "西", 'E': "æ±", 'N': "北", 'S': "å—", 'layerAlreadyAdded': "ã‚ãªãŸã¯ã€Œ${layerName}ã€ã‚’地図ã«è¿½åŠ ã—よã†ã¨è©¦ã¿ã¾ã—ãŸãŒã€ãã®ãƒ¬ã‚¤ãƒ¤ãƒ¼ã¯æ—¢ã«è¿½åŠ ã•れã¦ã„ã¾ã™", 'reprojectDeprecated': "ã‚ãªãŸã¯ã€Œ${layerName}ã€ãƒ¬ã‚¤ãƒ¤ãƒ¼ã§ reproject オプションを使ã£ã¦ã„ã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションã¯å•†ç”¨ã®åŸºåº•åœ°å›³ä¸Šã«æƒ…å ±ã‚’è¡¨ç¤ºã™ã‚‹ç›®çš„ã§è¨­è¨ˆã•れã¾ã—ãŸãŒã€ç¾åœ¨ã§ã¯ãã®æ©Ÿèƒ½ã¯ Spherical Mercator サãƒãƒ¼ãƒˆã‚’利用ã—ã¦å®Ÿç¾ã•れã¦ãŠã‚Šã€ã“ã®ã‚ªãƒ—ションã®ä½¿ç”¨ã¯éžæŽ¨å¥¨ã§ã™ã€‚è¿½åŠ ã®æƒ…å ±ã¯ http://trac.openlayers.org/wiki/SphericalMercator ã§å…¥æ‰‹ã§ãã¾ã™ã€‚", 'methodDeprecated': "ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯å»ƒæ­¢ãŒäºˆå®šã•れã¦ãŠã‚Šã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³3.0ã§é™¤åŽ»ã•れã¾ã™ã€‚代ã‚り㫠${newMethod} を使用ã—ã¦ãã ã•ã„。", 'boundsAddError': "x 㨠y 両方ã®å€¤ã‚’ add é–¢æ•°ã«æ¸¡ã•ãªã‘れã°ãªã‚Šã¾ã›ã‚“。", 'lonlatAddError': "lon 㨠lat 両方ã®å€¤ã‚’ add é–¢æ•°ã«æ¸¡ã•ãªã‘れã°ãªã‚Šã¾ã›ã‚“。", 'pixelAddError': "x 㨠y ã®å€¤ä¸¡æ–¹ã‚’ add é–¢æ•°ã«æ¸¡ã•ãªã‘れã°ãªã‚Šã¾ã›ã‚“。", 'unsupportedGeometryType': "未対応ã®å½¢çŠ¶åž‹: ${geomType}", 'pagePositionFailed': "OpenLayers.Util.pagePosition ãŒå¤±æ•—ã—ã¾ã—ãŸ: id ${elemId} ã‚’ã‚‚ã¤è¦ç´ ãŒèª¤ã£ãŸä½ç½®ã«ã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚", 'filterEvaluateNotImplemented': "ã“ã®ãƒ•ィルター型ã«ã¤ã„㦠evaluate ã¯å®Ÿè£…ã•れã¦ã„ã¾ã›ã‚“。" }); OpenLayers.Lang["km"] = OpenLayers.Util.applyDefaults({ 'permalink': "ážáŸ†ážŽáž—្ជាប់អចិន្ážáŸ’រៃយáŸ", 'baseLayer': "ស្រទាប់បាážâ€‹", 'errorLoadingGML': "កំហុសកំឡុងពáŸáž›áž•្ទុកឯកសារ GML ${url}", 'scale': "មាážáŸ’រដ្ឋាន = ១ ៖ ${scaleDenom}" }); OpenLayers.Lang["ksh"] = OpenLayers.Util.applyDefaults({ 'unhandledRequest': "Met dä Antwoot op en Aanfrooch ham_mer nix aanjefange: ${statusText}", 'permalink': "Lengk op Duuer", 'overlays': "Drövver jelaat", 'baseLayer': "Jrund-Nivoh", 'sameProjection': "De Övverseeschs_Kaat deiht et bloß, wann se de sälve Projäxjuhn bruche deiht, wi de Houp_Kaat", 'readNotImplemented': "„\x3ccode lang=\"en\"\x3eread\x3c/code\x3e“ is em Projramm nit fürjesinn.", 'writeNotImplemented': "„\x3ccode lang=\"en\"\x3ewrite\x3c/code\x3e“ is em Projramm nit fürjesinn.", 'noFID': "En Saach, woh kein \x3ci lang=\"en\"\x3eFID\x3c/i\x3e för doh es, löht sesch nit ändere.", 'errorLoadingGML': "Fähler beim \x3ci lang=\"en\"\x3eGML\x3c/i\x3e-Datei-Laade vun \x3ccode\x3e${url}\x3c/code\x3e", 'browserNotSupported': "Dinge Brauser kann kein Väktore ußjävve. De Zoote Ußjaabe, di em Momang jon, sen:\n${renderers}", 'componentShouldBe': "\x3ccode lang=\"en\"\x3eaddFeatures\x3c/code\x3e: dä Aandeil sullt vun dä Zoot „\x3ccode lang=\"en\"\x3e${geomType}\x3c/code\x3e“ sin.", 'getFeatureError': "\x3ccode lang=\"en\"\x3egetFeatureFromEvent\x3c/code\x3e es vun enem Nivoh opjeroofe woode, woh et kei Projramm zom Ußjävve jit. Dat bedügg för jewöhnlesch, dat De e Nivoh kapott jemaat häs, ävver nit e Projramm för domet ömzejonn, wat domet verbonge es.", 'minZoomLevelError': "De Eijeschaff „\x3ccode lang=\"en\"\x3eminZoomLevel\x3c/code\x3e“ es bloß doför jedaach, dat mer se met dä Nivvohß bruch, di vun \x3ccode lang=\"en\"\x3eFixedZoomLevels\x3c/code\x3e affhange don. Dat dat \x3ci lang=\"en\"\x3eWFS\x3c/i\x3e-Nivvoh övverhoup de Eijeschaff „\x3ccode lang=\"en\"\x3eminZoomLevel\x3c/code\x3e“ pröhfe deiht, es noch övveresch vun fröhjer. Mer künne dat ävver jez nit fott lohße, oohne dat mer Jevaa loufe, dat Aanwendunge vun OpenLayers nit mieh loufe, di sesch doh velleijsch noch drop am verlohße sin. Dröm sare mer, dat mer et nit mieh han welle, un de „\x3ccode lang=\"en\"\x3eminZoomLevel\x3c/code\x3e“-Eijeschaff weed hee vun de Version 3.0 af nit mieh jeprööf wäde. Nemm doför de Enstellung för de hühßte un de kleinßte Oplöhsung, esu wi et en http://trac.openlayers.org/wiki/SettingZoomLevels opjeschrevve es.", 'commitSuccess': "Dä \x3ci lang=\"en\"\x3eWFS\x3c/i\x3e-Vörjang es joot jeloufe: ${response}", 'commitFailed': "Dä \x3ci lang=\"en\"\x3eWFS\x3c/i\x3e-Vörjang es scheif jejange: ${response}", 'googleWarning': "Dat Nivvoh \x3ccode lang=\"en\"\x3eGoogle\x3c/code\x3e kunnt nit reschtesch jelaade wääde.\x3cbr /\x3e\x3cbr /\x3eÖm hee di Nohreesch loß ze krijje, donn en ander Jrund-Nivvoh ußsöhke, rähß bovve en de Äk.\x3cbr /\x3e\x3cbr /\x3eWascheinlesch es dat wiel dat \x3ci lang=\"en\"\x3eGoogle-Maps\x3c/i\x3e-Skrepp entweeder nit reschtesch enjebonge wood, udder nit dä reschtejje \x3ci lang=\"en\"\x3eAPI\x3c/i\x3e-Schlößel för Ding Web-ßait scheke deiht.\x3cbr /\x3e\x3cbr /\x3eFör Projrammierer jidd_et Hölp do_drövver, \x3ca href=\"http://trac.openlayers.org/wiki/Google\" target=\"_blank\"\x3ewi mer dat aan et Loufe brengk\x3c/a\x3e.", 'getLayerWarning': "Dat Nivvoh \x3ccode\x3e${layerType}\x3c/code\x3e kunnt nit reschtesch jelaade wääde.\x3cbr /\x3e\x3cbr /\x3eÖm hee di Nohreesch loß ze krijje, donn en ander Jrund-Nivvoh ußsöhkre, rähß bovve en de Äk.\x3cbr /\x3e\x3cbr /\x3eWascheinlesch es dat, wiel dat Skrepp \x3ccode\x3e${layerLib}\x3c/code\x3e nit reschtesch enjebonge wood.\x3cbr /\x3e\x3cbr /\x3eFör Projrammierer jidd_Et Hölp do_drövver, \x3ca href=\"http://trac.openlayers.org/wiki/${layerLib}\" target=\"_blank\"\x3ewi mer dat aan et Loufe brengk\x3c/a\x3e.", 'scale': "Mohßshtaab = 1 : ${scaleDenom}", 'W': "W", 'E': "O", 'N': "N", 'S': "S", 'layerAlreadyAdded': "Do häß versöhk, dat Nivvoh \x3ccode\x3e${layerName}\x3c/code\x3e en di Kaat eren ze bränge, et wohr ävver ald do dren.", 'reprojectDeprecated': "Do bruchs de Ußwahl \x3ccode\x3ereproject\x3c/code\x3e op däm Nivvoh \x3ccode\x3e${layerName}\x3c/code\x3e. Di Ußwahl es nit mieh jähn jesinn. Se wohr doför jedaach, öm Date op jeschääfsmäßesch eruß jejovve Kaate bovve drop ze moole, wat ävver enzwesche besser met dä Öngershtözung för de ßfääresche Mäkaator Beldscher jeiht. Doh kanns De mieh drövver fenge op dä Sigg: http://trac.openlayers.org/wiki/SphericalMercator.", 'methodDeprecated': "Hee di Metood es nim_mih aktoäll un et weed se en dä Version 3.0 nit mieh jävve. Nemm \x3ccode\x3e${newMethod}\x3c/code\x3e doföör.", 'boundsAddError': "Do moß beeds vun de \x3ccode\x3ex\x3c/code\x3e un \x3ccode\x3ey\x3c/code\x3e Wääte aan de Fungkßjohn \x3ccode\x3eadd\x3c/code\x3e jävve.", 'lonlatAddError': "Do moß beeds \x3ccode\x3elon\x3c/code\x3e un \x3ccode\x3elat\x3c/code\x3e aan de Fungkßjohn \x3ccode\x3eadd\x3c/code\x3e jävve.", 'pixelAddError': "Do moß beeds \x3ccode\x3ex\x3c/code\x3e un \x3ccode\x3ey\x3c/code\x3e aan de Fungkßjohn \x3ccode\x3eadd\x3c/code\x3e jävve.", 'unsupportedGeometryType': "De Zoot Jommetrii dom_mer nit ongershtöze: \x3ccode\x3e${geomType}\x3c/code\x3e", 'pagePositionFailed': "\x3ccode lang=\"en\"\x3eOpenLayers.Util.pagePosition\x3c/code\x3e es donevve jejange: dat Denge met dä Kännong \x3ccode\x3e${elemId}\x3c/code\x3e künnt am verkeehte Plaz sin.", 'filterEvaluateNotImplemented': "„\x3ccode lang=\"en\"\x3eevaluate\x3c/code\x3e“ es för di Zoot Fellter nit enjereschdt." }); OpenLayers.Lang["nds"] = OpenLayers.Util.applyDefaults({ 'unhandledRequest': "Unbehannelt Trüchmellels för de Anfraag ${statusText}", 'permalink': "Permalink", 'overlays': "Overlays", 'baseLayer': "Achtergrundkoort", 'sameProjection': "De Översichtskoort geiht blot, wenn de sülve Projekschoon as bi de Hööftkoort bruukt warrt", 'readNotImplemented': "Lesen is nich inricht.", 'writeNotImplemented': "Schrieven is nich inricht.", 'noFID': "En Feature, dat keen FID hett, kann nich aktuell maakt warrn.", 'errorLoadingGML': "Fehler bi’t Laden vun de GML-Datei ${url}", 'browserNotSupported': "Dien Browser ünnerstütt keen Vektorbiller. Ünnerstütt Renderers:\n${renderers}", 'componentShouldBe': "addFeatures : Kumponent schull man den Typ ${geomType} hebben", 'getFeatureError': "getFeatureFromEvent is von en Laag ahn Render opropen worrn. Dat bedüüdt normalerwies, dat en Laag wegmaakt worrn is, aver nich de Handler, de dor op verwiest.", 'commitSuccess': "WFS-Transakschoon: hett klappt ${response}", 'commitFailed': "WFS-Transakschoon: hett nich klappt ${response}", 'scale': "Skaal = 1 : ${scaleDenom}", 'layerAlreadyAdded': "Du versöchst de Laag „${layerName}“ to de Koort totofögen, man de is al toföögt", 'methodDeprecated': "Disse Methood is oold un schall dat in 3.0 nich mehr geven. Bruuk dor man beter ${newMethod} för.", 'boundsAddError': "De Weert x un y, de mööt all beid an de add-Funkschoon övergeven warrn.", 'lonlatAddError': "De Weert lon un lat, de mööt all beid an de add-Funkschoon övergeven warrn.", 'pixelAddError': "De Weert x un y, de mööt all beid an de add-Funkschoon övergeven warrn.", 'unsupportedGeometryType': "Nich ünnerstütt Geometrie-Typ: ${geomType}", 'pagePositionFailed': "OpenLayers.Util.pagePosition güng nich: Element mit de Id ${elemId} is villicht an’n verkehrten Platz." }); OpenLayers.Lang["nn"] = OpenLayers.Util.applyDefaults({ 'scale': "Skala = 1 : ${scaleDenom}", 'layerAlreadyAdded': "Du freista Ã¥ leggja til laget «${layerName}» pÃ¥ kartet, men det har alt vorte lagt til.", 'boundsAddError': "Du er nøydd til Ã¥ gje bÃ¥de ein x- og ein y-verdi til «add»-funksjonen.", 'lonlatAddError': "Du er nøydd til Ã¥ gje bÃ¥de lon- og lat-verdiar til «add»-funksjonen.", 'pixelAddError': "Du er nøydd til Ã¥ gje bÃ¥de ein x- og ein y-verdi til «add»-funksjonen." }); OpenLayers.Lang["oc"] = OpenLayers.Util.applyDefaults({ 'unhandledRequest': "Requèsta pas gerida, retorna ${statusText}", 'permalink': "Permaligam", 'overlays': "Calques", 'baseLayer': "Calc de basa", 'sameProjection': "La carta de situacion fonciona pas que quora sa projeccion es la meteissa que la de la carta principala", 'readNotImplemented': "Lectura pas implementada.", 'writeNotImplemented': "Escritura pas implementada.", 'noFID': "Impossible de metre a jorn un objècte sens identificant (fid).", 'errorLoadingGML': "Error al cargament del fichièr GML ${url}", 'browserNotSupported': "Vòstre navegidor supòrta pas lo rendut vectorial. Los renderers actualament suportats son : \n${renderers}", 'componentShouldBe': "addFeatures : lo compausant deuriá èsser de tipe ${geomType}", 'getFeatureError': "getFeatureFromEvent es estat apelat sus un calc sens renderer. Aquò significa generalament qu\'avètz destruch aqueste jaç, mas qu\'avètz conservat un handler que li èra associat.", 'minZoomLevelError': "La proprietat minZoomLevel deu èsser utilizada solament per de jaces FixedZoomLevels-descendent. Lo fach qu\'aqueste jaç WFS verifique la preséncia de minZoomLevel es una relica del passat. Çaquelà , la podèm suprimir sens copar d\'aplicacions que ne poirián dependre. Es per aquò que la depreciam -- la verificacion del minZoomLevel serà suprimida en version 3.0. A la plaça, mercés d\'utilizar los paramètres de resolucions min/max tal coma descrich sus : http://trac.openlayers.org/wiki/SettingZoomLevels", 'commitSuccess': "Transaccion WFS : SUCCES ${response}", 'commitFailed': "Transaccion WFS : FRACAS ${response}", 'googleWarning': "Lo jaç Google es pas estat en mesura de se cargar corrèctament.\x3cbr\x3e\x3cbr\x3ePer suprimir aqueste messatge, causissètz una BaseLayer novèla dins lo selector de jaç en naut a drecha.\x3cbr\x3e\x3cbr\x3eAquò es possiblament causat par la non-inclusion de la librariá Google Maps, o alara perque que la clau de l\'API correspond pas a vòstre site.\x3cbr\x3e\x3cbr\x3eDesvolopaires : per saber cossí corregir aquò, \x3ca href=\'http://trac.openlayers.org/wiki/Google\' target=\'_blank\'\x3eclicatz aicí\x3c/a\x3e", 'getLayerWarning': "Lo jaç ${layerType} es pas en mesura de se cargar corrèctament.\x3cbr\x3e\x3cbr\x3ePer suprimir aqueste messatge, causissètz una BaseLayer novèla dins lo selector de jaç en naut a drecha.\x3cbr\x3e\x3cbr\x3eAquò es possiblament causat per la non-inclusion de la librariá ${layerLib}.\x3cbr\x3e\x3cbr\x3eDesvolopaires : per saber cossí corregir aquí, \x3ca href=\'http://trac.openlayers.org/wiki/${layerLib}\' target=\'_blank\'\x3eclicatz aicí\x3c/a\x3e", 'scale': "Escala ~ 1 : ${scaleDenom}", 'W': "O", 'E': "È", 'N': "N", 'S': "S", 'layerAlreadyAdded': "Avètz ensajat d\'apondre a la carta lo calc : ${layerName}, mas ja es present", 'reprojectDeprecated': "Utilizatz l\'opcion \'reproject\' sul jaç ${layerName}. Aquesta opcion es despreciada : Son usatge permetiá d\'afichar de donadas al dessús de jaces raster comercials. Aquesta foncionalitat ara es suportada en utilizant lo supòrt de la projeccion Mercator Esferica. Mai d\'informacion es disponibla sus http://trac.openlayers.org/wiki/SphericalMercator.", 'methodDeprecated': "Aqueste metòde es despreciada, e serà suprimida a la version 3.0. Mercés d\'utilizar ${newMethod} a la plaça.", 'boundsAddError': "Vos cal passar las doas valors x e y a la foncion add.", 'lonlatAddError': "Vos cal passar las doas valors lon e lat a la foncion add.", 'pixelAddError': "Vos cal passar las doas valors x e y a la foncion add.", 'unsupportedGeometryType': "Tipe de geometria pas suportat : ${geomType}", 'pagePositionFailed': "OpenLayers.Util.pagePosition a fracassat : l\'element d\'id ${elemId} poiriá èsser mal posicionat.", 'filterEvaluateNotImplemented': "evaluar es pas encara estat implementat per aqueste tipe de filtre." }); OpenLayers.Lang["pt"] = OpenLayers.Util.applyDefaults({ 'unhandledRequest': "Servidor devolveu erro não contemplado ${statusText}", 'permalink': "Ligação permanente", 'overlays': "Sobreposições", 'baseLayer': "Camada Base", 'sameProjection': "O mapa panorâmico só funciona quando está na mesma projeção que o mapa principal", 'readNotImplemented': "Leitura não implementada.", 'writeNotImplemented': "Escrita não implementada.", 'noFID': "Não é possível atualizar um elemento para a qual não há FID.", 'errorLoadingGML': "Erro ao carregar ficheiro GML ${url}", 'browserNotSupported': "O seu navegador não suporta renderização vetorial. Actualmente os renderizadores suportados são:\n${renderers}", 'componentShouldBe': "addFeatures: componente deve ser um(a) ${geomType}", 'getFeatureError': "getFeatureFromEvent foi chamado numa camada sem renderizador. Isto normalmente significa que destruiu uma camada, mas não um manipulador \'\'(handler)\'\' que lhe está associado.", 'minZoomLevelError': "A propriedade minZoomLevel só deve ser usada com as camadas descendentes da FixedZoomLevels. A verificação da propriedade por esta camada wfs é uma relíquia do passado. No entanto, não podemos removê-la sem correr o risco de afectar aplicações OL que dependam dela. Portanto, estamos a torná-la obsoleta -- a verificação minZoomLevel será removida na versão 3.0. Em vez dela, por favor, use as opções de resolução min/max descritas aqui: http://trac.openlayers.org/wiki/SettingZoomLevels", 'commitSuccess': "Transacção WFS: SUCESSO ${response}", 'commitFailed': "Transacção WFS: FALHOU ${response}", 'googleWarning': "A Camada Google não foi correctamente carregada.\x3cbr\x3e\x3cbr\x3ePara deixar de receber esta mensagem, seleccione uma nova Camada-Base no \'\'switcher\'\' de camadas no canto superior direito.\x3cbr\x3e\x3cbr\x3eProvavelmente, isto acontece porque o \'\'script\'\' da biblioteca do Google Maps não foi incluído ou não contém a chave API correcta para o seu sítio.\x3cbr\x3e\x3cbr\x3eProgramadores: Para ajuda sobre como solucionar o problema \x3ca href=\'http://trac.openlayers.org/wiki/Google\' target=\'_blank\'\x3eclique aqui\x3c/a\x3e .", 'getLayerWarning': "A camada ${layerType} não foi correctamente carregada.\x3cbr\x3e\x3cbr\x3ePara desactivar esta mensagem, seleccione uma nova Camada-Base no \'\'switcher\'\' de camadas no canto superior direito.\x3cbr\x3e\x3cbr\x3eProvavelmente, isto acontece porque o \'\'script\'\' da biblioteca ${layerLib} não foi incluído correctamente.\x3cbr\x3e\x3cbr\x3eProgramadores: Para ajuda sobre como solucionar o problema \x3ca href=\'http://trac.openlayers.org/wiki/${layerLib}\' target=\'_blank\'\x3eclique aqui\x3c/a\x3e .", 'scale': "Escala = 1 : ${scaleDenom}", 'W': "O", 'E': "E", 'N': "N", 'S': "S", 'layerAlreadyAdded': "Você tentou adicionar a camada: ${layerName} ao mapa, mas ela já tinha sido adicionada antes", 'reprojectDeprecated': "Está usando a opção \'reproject\' na camada ${layerName}. Esta opção é obsoleta: foi concebida para permitir a apresentação de dados sobre mapas-base comerciais, mas esta funcionalidade é agora suportada pelo Mercator Esférico. Mais informação está disponível em http://trac.openlayers.org/wiki/SphericalMercator.", 'methodDeprecated': "Este método foi declarado obsoleto e será removido na versão 3.0. Por favor, use ${newMethod} em vez disso.", 'boundsAddError': "Você deve passar tanto o valor x como o y à função de adição.", 'lonlatAddError': "Você deve passar tanto o valor lon como o lat à função de adição.", 'pixelAddError': "Você deve passar tanto o valor x como o y à função de adição.", 'unsupportedGeometryType': "Tipo de geometria não suportado: ${geomType}", 'pagePositionFailed': "OpenLayers.Util.pagePosition falhou: o elemento com o id ${elemId} poderá estar mal-posicionado.", 'filterEvaluateNotImplemented': "avaliar não está implementado para este tipo de filtro." }); OpenLayers.Lang["ru"] = OpenLayers.Util.applyDefaults({ 'unhandledRequest': "Ðеобработанный Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð²ÐµÑ€Ð½ÑƒÐ» ${statusText}", 'permalink': "ПоÑтоÑÐ½Ð½Ð°Ñ ÑÑылка", 'overlays': "Слои", 'baseLayer': "ОÑновной Ñлой", 'sameProjection': "ÐžÐ±Ð·Ð¾Ñ€Ð½Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð° работает только тогда, когда имеет ту же проекцию, что и оÑновнаÑ", 'readNotImplemented': "Чтение не реализовано.", 'writeNotImplemented': "ЗапиÑÑŒ не реализована.", 'noFID': "Ðевозможно обновить объект, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ нет FID.", 'errorLoadingGML': "Ошибка при загрузке файла GML ${url}", 'browserNotSupported': "Ваш браузер не поддерживает векторную графику. Ðа данный момент поддерживаютÑÑ:\n${renderers}", 'componentShouldBe': "addFeatures: компонент должен быть ${geomType}", 'getFeatureError': "getFeatureFromEvent вызван Ð´Ð»Ñ ÑÐ»Ð¾Ñ Ð±ÐµÐ· рендерера. Обычно Ñто говорит о том, что вы уничтожили Ñлой, но оÑтавили ÑвÑзанный Ñ Ð½Ð¸Ð¼ обработчик.", 'minZoomLevelError': "СвойÑтво minZoomLevel предназначено только Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñо ÑлоÑми, ÑвлÑющимиÑÑ Ð¿Ð¾Ñ‚Ð¾Ð¼ÐºÐ°Ð¼Ð¸ FixedZoomLevels. То, что Ñтот WFS-Ñлой проверÑетÑÑ Ð½Ð° minZoomLevel — реликт прошлого. Однако мы не можем удалить Ñту функцию, так как, возможно, от неё завиÑÑÑ‚ некоторые оÑнованные на OpenLayers приложениÑ. Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¾Ð±ÑŠÑвлена уÑтаревшей — проверка minZoomLevel будет удалена в 3.0. ПожалуйÑта, иÑпользуйте вмеÑто неё наÑтройку мин/Ð¼Ð°ÐºÑ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ, опиÑанную здеÑÑŒ: http://trac.openlayers.org/wiki/SettingZoomLevels", 'commitSuccess': "Ð¢Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ñ WFS: УСПЕШÐО ${response}", 'commitFailed': "Ð¢Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ñ WFS: ОШИБКР${response}", 'googleWarning': "Слой Google не удалоÑÑŒ нормально загрузить.\x3cbr\x3e\x3cbr\x3eЧтобы избавитьÑÑ Ð¾Ñ‚ Ñтого ÑообщениÑ, выбите другой оÑновной Ñлой в переключателе в правом верхнем углу.\x3cbr\x3e\x3cbr\x3eСкорее вÑего, причина в том, что библиотека Google Maps не была включена или не Ñодержит корректного API-ключа Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñайта.\x3cbr\x3e\x3cbr\x3eРазработчикам: чтобы узнать, как Ñделать, чтобы вÑÑ‘ заработало, \x3ca href=\'http://trac.openlayers.org/wiki/Google\' target=\'_blank\'\x3eщёлкните тут\x3c/a\x3e", 'getLayerWarning': "Слой ${layerType} не удалоÑÑŒ нормально загрузить. \x3cbr\x3e\x3cbr\x3eЧтобы избавитьÑÑ Ð¾Ñ‚ Ñтого ÑообщениÑ, выбите другой оÑновной Ñлой в переключателе в правом верхнем углу.\x3cbr\x3e\x3cbr\x3eСкорее вÑего, причина в том, что библиотека ${layerLib} не была включена или была включена некорректно.\x3cbr\x3e\x3cbr\x3eРазработчикам: чтобы узнать, как Ñделать, чтобы вÑÑ‘ заработало, \x3ca href=\'http://trac.openlayers.org/wiki/${layerLib}\' target=\'_blank\'\x3eщёлкните тут\x3c/a\x3e", 'scale': "МаÑштаб = 1 : ${scaleDenom}", 'W': "З", 'E': "Ð’", 'N': "С", 'S': "Ю", 'layerAlreadyAdded': "Ð’Ñ‹ попыталиÑÑŒ добавить Ñлой «${layerName}» на карту, но он уже был добавлен", 'reprojectDeprecated': "Ð’Ñ‹ иÑпользуете опцию \'reproject\' Ð´Ð»Ñ ÑÐ»Ð¾Ñ ${layerName}. Эта Ð¾Ð¿Ñ†Ð¸Ñ ÑвлÑетÑÑ ÑƒÑтаревшей: ее иÑпользование предполагалоÑÑŒ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ показа данных поверх коммерчеÑких базовых карт, но теперь Ñтот функционал неÑёт вÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° ÑферичеÑкой проекции Меркатора. Больше Ñведений доÑтупно на http://trac.openlayers.org/wiki/SphericalMercator.", 'methodDeprecated': "Этот метод ÑчитаетÑÑ ÑƒÑтаревшим и будет удалён в верÑии 3.0. ПожалуйÑта, пользуйтеÑÑŒ ${newMethod}.", 'boundsAddError': "Функции add надо передавать оба значениÑ, x и y.", 'lonlatAddError': "Функции add надо передавать оба значениÑ, lon и lat.", 'pixelAddError': "Функции add надо передавать оба значениÑ, x и y.", 'unsupportedGeometryType': "Ðеподдерживаемый тип геометрии: ${geomType}", 'pagePositionFailed': "OpenLayers.Util.pagePosition failed: Ñлемент Ñ id ${elemId} может находитьÑÑ Ð½Ðµ в нужном меÑте.", 'filterEvaluateNotImplemented': "evaluate не реализовано Ð´Ð»Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð° данного типа." }); OpenLayers.Lang["sk"] = OpenLayers.Util.applyDefaults({ 'unhandledRequest': "Neobslúžené požiadavky vracajú ${statusText}", 'permalink': "Trvalý odkaz", 'overlays': "Prekrytia", 'baseLayer': "Základná vrstva", 'sameProjection': "Prehľadová mapka funguje iba vtedy, keÄ je v rovnakej projekcii ako hlavná mapa", 'readNotImplemented': "Čítanie nie je implementované.", 'writeNotImplemented': "Zápis nie je implementovaný.", 'noFID': "Nie je možné aktualizovaÅ¥ vlastnosÅ¥, pre ktorú neexistuje FID.", 'errorLoadingGML': "Chyba pri naÄítaní súboru GML ${url}", 'browserNotSupported': "Váš prehliadaÄ nepodporuje vykresľovanie vektorov. Momentálne podporované vykresľovaÄe sú:\n${renderers}", 'componentShouldBe': "addFeatures: komponent by mal byÅ¥ ${geomType}", 'getFeatureError': "getFeatureFromEvent bola zavolaná na vrstve bez vykresľovaÄa. To zvyÄajne znamená, že ste odstránili vrstvu, ale nie niektorú z obslúh, ktorá je s ňou asociovaná.", 'minZoomLevelError': "VlastnosÅ¥ minZoomLevel je urÄený iba na použitie s vrstvami odvodenými od FixedZoomLevels. To, že táto wfs vrstva kontroluje minZoomLevel je pozostatok z minulosti. Nemôžeme ho vÅ¡ak odstrániÅ¥, aby sme sa vyhli možnému poruÅ¡eniu aplikácií založených na Open Layers, ktoré na tomto môže závisieÅ¥. Preto ho oznaÄujeme ako zavrhovaný - dolu uvedená kontrola minZoomLevel bude odstránená vo verzii 3.0. Použite prosím namiesto toho kontrolu min./max. rozlíšenia podľa tu uvedeného popisu: http://trac.openlayers.org/wiki/SettingZoomLevels", 'commitSuccess': "Transakcia WFS: ÚSPEÅ Nà ${response}", 'commitFailed': "Transakcia WFS: ZLYHALA ${response}", 'googleWarning': "Vrstvu Google nebolo možné správne naÄítaÅ¥.\x3cbr\x3e\x3cbr\x3eAby ste sa tejto správy zbavili vyberte novú BaseLayer v prepínaÄi vrstiev v pravom hornom rohu.\x3cbr\x3e\x3cbr\x3eToto sa stalo pravdepodobne preto, že skript knižnice Google Maps buÄ nebol naÄítaný alebo neobsahuje správny kÄ¾ÃºÄ API pre vaÅ¡u lokalitu.\x3cbr\x3e\x3cbr\x3eVývojári: Tu môžete získaÅ¥ \x3ca href=\'http://trac.openlayers.org/wiki/Google\' target=\'_blank\'\x3epomoc so sfunkÄnením\x3c/a\x3e", 'getLayerWarning': "Vrstvu ${layerType} nebolo možné správne naÄítaÅ¥.\x3cbr\x3e\x3cbr\x3eAby ste sa tejto správy zbavili vyberte novú BaseLayer v prepínaÄi vrstiev v pravom hornom rohu.\x3cbr\x3e\x3cbr\x3eToto sa stalo pravdepodobne preto, že skript knižnice ${layerType} buÄ nebol naÄítaný alebo neobsahuje správny kÄ¾ÃºÄ API pre vaÅ¡u lokalitu.\x3cbr\x3e\x3cbr\x3eVývojári: Tu môžete získaÅ¥ \x3ca href=\'http://trac.openlayers.org/wiki/${layerType}\' target=\'_blank\'\x3epomoc so sfunkÄnením\x3c/a\x3e", 'scale': "Mierka = 1 : ${scaleDenom}", 'layerAlreadyAdded': "Pokúsili ste sa do mapy pridaÅ¥ vrstvu ${layerName}, ale tá už bola pridaná", 'reprojectDeprecated': "Používate voľby „reproject“ vrstvy ${layerType}. Táto voľba je zzavrhovaná: jej použitie bolo navrhnuté na podporu zobrazovania údajov nad komerÄnými základovými mapami, ale túto funkcionalitu je teraz možné dosiahnuÅ¥ pomocou Spherical Mercator. ÄŽalÅ¡ie informácie získate na stránke http://trac.openlayers.org/wiki/SphericalMercator.", 'methodDeprecated': "Táto metóda je zavrhovaná a bude odstránená vo verzii 3.0. Použite prosím namiesto nej metódu ${newMethod}.", 'boundsAddError': "SÄítacej funkcii musíte daÅ¥ hodnoty x aj y.", 'lonlatAddError': "SÄítacej funkcii musíte daÅ¥ hodnoty lon (zem. dĺžka) aj lat (zem. šírka).", 'pixelAddError': "SÄítacej funkcii musíte daÅ¥ hodnoty x aj y.", 'unsupportedGeometryType': "Nepodporovaný typ geometrie: ${geomType}", 'pagePositionFailed': "OpenLayers.Util.pagePosition zlyhalo: prvok s id ${elemId} môže byÅ¥ zle umiestnený.", 'filterEvaluateNotImplemented': "evaluate nie je implementovaný pre tento typ filtra" }); OpenLayers.Lang["te"] = OpenLayers.Util.applyDefaults({ 'permalink': "à°¸à±à°¥à°¿à°°à°²à°¿à°‚à°•à±", 'W': "à°ª", 'E': "తూ", 'N': "à°‰", 'S': "à°¦" }); OpenLayers.Lang["vi"] = OpenLayers.Util.applyDefaults({ 'unhandledRequest': "Không xá»­ lý được phản hồi ${statusText} cho yêu cầu", 'permalink': "Liên kết thưá»ng trá»±c", 'overlays': "Lấp bản đồ", 'baseLayer': "Lá»›p ná»n", 'sameProjection': "Bản đồ toà n cảnh chỉ hoạt động khi cùng phép chiếu vá»›i bản đồ chính", 'readNotImplemented': "Chưa há»— trợ chức năng Ä‘á»c.", 'writeNotImplemented': "Chưa há»— trợ chức năng viết.", 'noFID': "Không thể cập nhật tính năng thiếu FID.", 'errorLoadingGML': "Lá»—i tải tập tin GML tại ${url}", 'browserNotSupported': "Trình duyệt cá»§a bạn không há»— trợ chức năng vẽ bằng vectÆ¡. Hiện há»— trợ các bá»™ kết xuất:\n${renderers}", 'componentShouldBe': "addFeatures: bá»™ phận cần phải là ${geomType}", 'getFeatureError': "getFeatureFromEvent được gá»i từ lá»›p không có bá»™ kết xuất. Thưá»ng thì có lẽ lá»›p bị xóa nhưng má»™t phần xá»­ lý cá»§a nó vẫn còn.", 'minZoomLevelError': "Chỉ nên sá»­ dụng thuá»™c tính minZoomLevel vá»›i các lá»›p FixedZoomLevels-descendent. Việc lá»›p wfs nà y tìm cho minZoomLevel là di tích còn lại từ xưa. Tuy nhiên, nếu chúng tôi dá»i nó thì sẽ vỡ các chương trình OpenLayers mà dá»±a trên nó. Bởi vậy chúng tôi phản đối sá»­ dụng nó\x26nbsp;– bước tìm cho minZoomLevel sẽ được dá»i và o phiên bản 3.0. Xin sá»­ dụng thiết lập độ phân tích tối thiểu / tối Ä‘a thay thế, theo hướng dẫn nà y: http://trac.openlayers.org/wiki/SettingZoomLevels", 'commitSuccess': "Giao dịch WFS: THÀNH CÔNG ${response}", 'commitFailed': "Giao dịch WFS: THẤT BẠI ${response}", 'googleWarning': "Không thể tải lá»›p Google đúng đắn.\x3cbr\x3e\x3cbr\x3eÄể tránh thông báo nà y lần sau, hãy chá»n BaseLayer má»›i dùng Ä‘iá»u khiển chá»n lá»›p ở góc trên phải.\x3cbr\x3e\x3cbr\x3eChắc script thư viện Google Maps hoặc không được bao gồm hoặc không chứa khóa API hợp vá»›i website cá»§a bạn.\x3cbr\x3e\x3cbr\x3e\x3ca href=\'http://trac.openlayers.org/wiki/Google\' target=\'_blank\'\x3eTrợ giúp vá» tính năng nà y\x3c/a\x3e cho ngưá»i phát triển.", 'getLayerWarning': "Không thể tải lá»›p ${layerType} đúng đắn.\x3cbr\x3e\x3cbr\x3eÄể tránh thông báo nà y lần sau, hãy chá»n BaseLayer má»›i dùng Ä‘iá»u khiển chá»n lá»›p ở góc trên phải.\x3cbr\x3e\x3cbr\x3eChắc script thư viện ${layerLib} không được bao gồm đúng kiểu.\x3cbr\x3e\x3cbr\x3e\x3ca href=\'http://trac.openlayers.org/wiki/${layerLib}\' target=\'_blank\'\x3eTrợ giúp vá» tính năng nà y\x3c/a\x3e cho ngưá»i phát triển.", 'scale': "Tá»· lệ = 1 : ${scaleDenom}", 'W': "T", 'E': "Ä", 'N': "B", 'S': "N", 'layerAlreadyAdded': "Bạn muốn thêm lá»›p ${layerName} và o bản đồ, nhưng lá»›p nà y đã được thêm", 'reprojectDeprecated': "Bạn Ä‘ang áp dụng chế độ “reproject†và o lá»›p ${layerName}. Chế độ nà y đã bị phản đối: nó có mục đích há»— trợ lấp dữ liệu trên các ná»n bản đồ thương mại; nên thá»±c hiện hiệu ứng đó dùng tính năng Mercator Hình cầu. Có sẵn thêm chi tiết tại http://trac.openlayers.org/wiki/SphericalMercator .", 'methodDeprecated': "Phương thức nà y đã bị phản đối và sẽ bị dá»i và o phiên bản 3.0. Xin hãy sá»­ dụng ${newMethod} thay thế.", 'boundsAddError': "Cần phải cho cả giá trị x và y và o hà m add.", 'lonlatAddError': "Cần phải cho cả giá trị lon và lat và o hà m add.", 'pixelAddError': "Cần phải cho cả giá trị x và y và o hà m add.", 'unsupportedGeometryType': "Không há»— trợ kiểu địa lý: ${geomType}", 'pagePositionFailed': "OpenLayers.Util.pagePosition bị thất bại: nguyên tố vá»›i ID ${elemId} có thể ở chá»— sai.", 'filterEvaluateNotImplemented': "chưa há»— trợ evaluate cho loại bá»™ lá»c nà y." }); OpenLayers.Popup.AnchoredBubble = OpenLayers.Class(OpenLayers.Popup.Anchored, { rounded: false, initialize: function (id, lonlat, contentSize, contentHTML, anchor, closeBox, closeBoxCallback) { 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 (px) { OpenLayers.Popup.Anchored.prototype.draw.apply(this, arguments); this.setContentHTML(); this.setBackgroundColor(); this.setOpacity(); return this.div; }, updateRelativePosition: function () { this.setRicoCorners(); }, setSize: function (contentSize) { OpenLayers.Popup.Anchored.prototype.setSize.apply(this, arguments); this.setRicoCorners(); }, setBackgroundColor: function (color) { if (color != undefined) { this.backgroundColor = color; } if (this.div != null) { if (this.contentDiv != null) { this.div.style.background = "transparent"; OpenLayers.Rico.Corner.changeColor(this.groupDiv, this.backgroundColor); } } }, setOpacity: function (opacity) { OpenLayers.Popup.Anchored.prototype.setOpacity.call(this, opacity); if (this.div != null) { if (this.groupDiv != null) { OpenLayers.Rico.Corner.changeOpacity(this.groupDiv, this.opacity); } } }, setBorder: function (border) { this.border = 0; }, setRicoCorners: function () { var corners = this.getCornersToRound(this.relativePosition); var options = { corners: corners, color: this.backgroundColor, bgColor: "transparent", blend: false }; if (!this.rounded) { OpenLayers.Rico.Corner.round(this.div, options); this.rounded = true; } else { OpenLayers.Rico.Corner.reRound(this.groupDiv, options); this.setBackgroundColor(); this.setOpacity(); } }, getCornersToRound: function () { var corners = ['tl', 'tr', 'bl', 'br']; var corner = OpenLayers.Bounds.oppositeQuadrant(this.relativePosition); OpenLayers.Util.removeItem(corners, corner); return corners.join(" "); }, CLASS_NAME: "OpenLayers.Popup.AnchoredBubble" }); OpenLayers.Popup.AnchoredBubble.CORNER_SIZE = 5; OpenLayers.Popup.Framed = OpenLayers.Class(OpenLayers.Popup.Anchored, { imageSrc: null, imageSize: null, isAlphaImage: false, positionBlocks: null, blocks: null, fixedRelativePosition: false, initialize: function (id, lonlat, contentSize, contentHTML, anchor, closeBox, closeBoxCallback) { OpenLayers.Popup.Anchored.prototype.initialize.apply(this, arguments); if (this.fixedRelativePosition) { this.updateRelativePosition(); this.calculateRelativePosition = function (px) { return this.relativePosition; }; } this.contentDiv.style.position = "absolute"; this.contentDiv.style.zIndex = 1; if (closeBox) { 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.imageSrc = null; this.imageSize = null; this.isAlphaImage = null; this.fixedRelativePosition = false; this.positionBlocks = null; for (var i = 0; i < this.blocks.length; i++) { var block = this.blocks[i]; if (block.image) { block.div.removeChild(block.image); } block.image = null; if (block.div) { this.groupDiv.removeChild(block.div); } block.div = null; } this.blocks = null; OpenLayers.Popup.Anchored.prototype.destroy.apply(this, arguments); }, setBackgroundColor: function (color) {}, setBorder: function () {}, setOpacity: function (opacity) {}, setSize: function (contentSize) { OpenLayers.Popup.Anchored.prototype.setSize.apply(this, arguments); this.updateBlocks(); }, updateRelativePosition: function () { this.padding = this.positionBlocks[this.relativePosition].padding; if (this.closeDiv) { var contentDivPadding = this.getContentDivPadding(); this.closeDiv.style.right = contentDivPadding.right + this.padding.right + "px"; this.closeDiv.style.top = contentDivPadding.top + this.padding.top + "px"; } this.updateBlocks(); }, calculateNewPx: function (px) { var newPx = OpenLayers.Popup.Anchored.prototype.calculateNewPx.apply(this, arguments); newPx = newPx.offset(this.positionBlocks[this.relativePosition].offset); return newPx; }, createBlocks: function () { this.blocks = []; var firstPosition = null; for (var key in this.positionBlocks) { firstPosition = key; break; } var position = this.positionBlocks[firstPosition]; for (var i = 0; i < position.blocks.length; i++) { var block = {}; this.blocks.push(block); var divId = this.id + '_FrameDecorationDiv_' + i; block.div = OpenLayers.Util.createDiv(divId, null, null, null, "absolute", null, "hidden", null); var imgId = this.id + '_FrameDecorationImg_' + i; var imageCreator = (this.isAlphaImage) ? OpenLayers.Util.createAlphaImageDiv : OpenLayers.Util.createImage; block.image = imageCreator(imgId, null, this.imageSize, this.imageSrc, "absolute", null, null, null); block.div.appendChild(block.image); this.groupDiv.appendChild(block.div); } }, updateBlocks: function () { if (!this.blocks) { this.createBlocks(); } if (this.size && this.relativePosition) { var position = this.positionBlocks[this.relativePosition]; for (var i = 0; i < position.blocks.length; i++) { var positionBlock = position.blocks[i]; var block = this.blocks[i]; var l = positionBlock.anchor.left; var b = positionBlock.anchor.bottom; var r = positionBlock.anchor.right; var t = positionBlock.anchor.top; var w = (isNaN(positionBlock.size.w)) ? this.size.w - (r + l) : positionBlock.size.w; var h = (isNaN(positionBlock.size.h)) ? this.size.h - (b + t) : positionBlock.size.h; block.div.style.width = (w < 0 ? 0 : w) + 'px'; block.div.style.height = (h < 0 ? 0 : h) + 'px'; block.div.style.left = (l != null) ? l + 'px' : ''; block.div.style.bottom = (b != null) ? b + 'px' : ''; block.div.style.right = (r != null) ? r + 'px' : ''; block.div.style.top = (t != null) ? t + 'px' : ''; block.image.style.left = positionBlock.position.x + 'px'; block.image.style.top = positionBlock.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.Projection = OpenLayers.Class({ proj: null, projCode: null, initialize: function (projCode, options) { OpenLayers.Util.extend(this, options); this.projCode = projCode; if (window.Proj4js) { this.proj = new Proj4js.Proj(projCode); } }, 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 (projection) { if (projection && projection.getCode) { return this.getCode() == projection.getCode(); } else { return false; } }, destroy: function () { delete this.proj; delete this.projCode; }, CLASS_NAME: "OpenLayers.Projection" }); OpenLayers.Projection.transforms = {}; OpenLayers.Projection.addTransform = function (from, to, method) { if (!OpenLayers.Projection.transforms[from]) { OpenLayers.Projection.transforms[from] = {}; } OpenLayers.Projection.transforms[from][to] = method; }; OpenLayers.Projection.transform = function (point, source, dest) { if (source.proj && dest.proj) { point = Proj4js.transform(source.proj, dest.proj, point); } else if (source && dest && OpenLayers.Projection.transforms[source.getCode()] && OpenLayers.Projection.transforms[source.getCode()][dest.getCode()]) { OpenLayers.Projection.transforms[source.getCode()][dest.getCode()](point); } return point; }; 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, initialize: function (options) { OpenLayers.Protocol.prototype.initialize.apply(this, [options]); if (!options.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)); } if (!this.featureNS && this.featurePrefix) { var readNode = this.format.readNode; this.format.readNode = function (node, obj) { if (!this.featureNS && node.prefix == this.featurePrefix) { this.featureNS = node.namespaceURI; this.setNamespace("feature", this.featureNS); } return readNode.apply(this, arguments); }; } }, destroy: function () { if (this.options && !this.options.format) { this.format.destroy(); } this.format = null; OpenLayers.Protocol.prototype.destroy.apply(this); }, read: function (options) { OpenLayers.Protocol.prototype.read.apply(this, arguments); options = OpenLayers.Util.extend({}, options); OpenLayers.Util.applyDefaults(options, this.options || {}); var response = new OpenLayers.Protocol.Response({ requestType: "read" }); var data = OpenLayers.Format.XML.prototype.write.apply(this.format, [this.format.writeNode("wfs:GetFeature", options)]); response.priv = OpenLayers.Request.POST({ url: options.url, callback: this.createCallback(this.handleRead, response, options), params: options.params, headers: options.headers, data: data }); return response; }, handleRead: function (response, options) { if (options.callback) { var request = response.priv; if (request.status >= 200 && request.status < 300) { response.features = this.parseFeatures(request); response.code = OpenLayers.Protocol.Response.SUCCESS; } else { response.code = OpenLayers.Protocol.Response.FAILURE; } options.callback.call(options.scope, response); } }, parseFeatures: function (request) { var doc = request.responseXML; if (!doc || !doc.documentElement) { doc = request.responseText; } if (!doc || doc.length <= 0) { return null; } return (this.readFormat !== null) ? this.readFormat.read(doc) : this.format.read(doc); }, commit: function (features, options) { options = OpenLayers.Util.extend({}, options); OpenLayers.Util.applyDefaults(options, this.options); var response = new OpenLayers.Protocol.Response({ requestType: "commit", reqFeatures: features }); response.priv = OpenLayers.Request.POST({ url: options.url, data: this.format.write(features, options), callback: this.createCallback(this.handleCommit, response, options) }); return response; }, handleCommit: function (response, options) { if (options.callback) { var request = response.priv; var data = request.responseXML; if (!data || !data.documentElement) { data = request.responseText; } var obj = this.format.read(data) || {}; response.insertIds = obj.insertIds || []; response.code = (obj.success) ? OpenLayers.Protocol.Response.SUCCESS : OpenLayers.Protocol.Response.FAILURE; options.callback.call(options.scope, response); } }, filterDelete: function (filter, options) { options = OpenLayers.Util.extend({}, options); OpenLayers.Util.applyDefaults(options, this.options); var response = new OpenLayers.Protocol.Response({ requestType: "commit" }); var root = this.format.createElementNSPlus("wfs:Transaction", { attributes: { service: "WFS", version: this.version } }); var deleteNode = this.format.createElementNSPlus("wfs:Delete", { attributes: { typeName: (options.featureNS ? this.featurePrefix + ":" : "") + options.featureType } }); if (options.featureNS) { deleteNode.setAttribute("xmlns:" + this.featurePrefix, options.featureNS); } var filterNode = this.format.writeNode("ogc:Filter", filter); deleteNode.appendChild(filterNode); root.appendChild(deleteNode); var data = OpenLayers.Format.XML.prototype.write.apply(this.format, [root]); return OpenLayers.Request.POST({ url: this.url, callback: options.callback || function () {}, data: data }); }, abort: function (response) { if (response) { response.priv.abort(); } }, CLASS_NAME: "OpenLayers.Protocol.WFS.v1" }); OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { xmlns: "http://www.w3.org/2000/svg", xlinkns: "http://www.w3.org/1999/xlink", MAX_PIXEL: 15000, translationParameters: null, symbolMetrics: null, isGecko: null, supportUse: null, initialize: function (containerID) { if (!this.supported()) { return; } OpenLayers.Renderer.Elements.prototype.initialize.apply(this, arguments); this.translationParameters = { x: 0, y: 0 }; this.supportUse = (navigator.userAgent.toLowerCase().indexOf("applewebkit/5") == -1); this.isGecko = (navigator.userAgent.toLowerCase().indexOf("gecko/") != -1); this.symbolMetrics = {}; }, destroy: function () { OpenLayers.Renderer.Elements.prototype.destroy.apply(this, arguments); }, supported: function () { var svgFeature = "http://www.w3.org/TR/SVG11/feature#"; return (document.implementation && (document.implementation.hasFeature("org.w3c.svg", "1.0") || document.implementation.hasFeature(svgFeature + "SVG", "1.1") || document.implementation.hasFeature(svgFeature + "BasicStructure", "1.1"))); }, inValidRange: function (x, y, xyOnly) { var left = x + (xyOnly ? 0 : this.translationParameters.x); var top = y + (xyOnly ? 0 : this.translationParameters.y); return (left >= -this.MAX_PIXEL && left <= this.MAX_PIXEL && top >= -this.MAX_PIXEL && top <= this.MAX_PIXEL); }, setExtent: function (extent, resolutionChanged) { OpenLayers.Renderer.Elements.prototype.setExtent.apply(this, arguments); var resolution = this.getResolution(); var left = -extent.left / resolution; var top = extent.top / resolution; if (resolutionChanged) { this.left = left; this.top = top; var extentString = "0 0 " + this.size.w + " " + this.size.h; this.rendererRoot.setAttributeNS(null, "viewBox", extentString); this.translate(0, 0); return true; } else { var inRange = this.translate(left - this.left, top - this.top); if (!inRange) { this.setExtent(extent, true); } return inRange; } }, translate: function (x, y) { if (!this.inValidRange(x, y, true)) { return false; } else { var transformString = ""; if (x || y) { transformString = "translate(" + x + "," + y + ")"; } this.root.setAttributeNS(null, "transform", transformString); this.translationParameters = { x: x, y: y }; return true; } }, setSize: function (size) { 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 (geometry, style) { var nodeType = null; switch (geometry.CLASS_NAME) { case "OpenLayers.Geometry.Point": if (style.externalGraphic) { nodeType = "image"; } else if (this.isComplexSymbol(style.graphicName)) { nodeType = this.supportUse === false ? "svg" : "use"; } else { nodeType = "circle"; } break; case "OpenLayers.Geometry.Rectangle": nodeType = "rect"; break; case "OpenLayers.Geometry.LineString": nodeType = "polyline"; break; case "OpenLayers.Geometry.LinearRing": nodeType = "polygon"; break; case "OpenLayers.Geometry.Polygon": case "OpenLayers.Geometry.Curve": case "OpenLayers.Geometry.Surface": nodeType = "path"; break; default: break; } return nodeType; }, setStyle: function (node, style, options) { style = style || node._style; options = options || node._options; var r = parseFloat(node.getAttributeNS(null, "r")); var widthFactor = 1; var pos; if (node._geometryClass == "OpenLayers.Geometry.Point" && r) { node.style.visibility = ""; if (style.graphic === false) { node.style.visibility = "hidden"; } else if (style.externalGraphic) { pos = this.getPosition(node); if (style.graphicTitle) { node.setAttributeNS(null, "title", style.graphicTitle); } if (style.graphicWidth && style.graphicHeight) { node.setAttributeNS(null, "preserveAspectRatio", "none"); } var width = style.graphicWidth || style.graphicHeight; var height = style.graphicHeight || style.graphicWidth; width = width ? width : style.pointRadius * 2; height = height ? height : style.pointRadius * 2; var xOffset = (style.graphicXOffset != undefined) ? style.graphicXOffset : -(0.5 * width); var yOffset = (style.graphicYOffset != undefined) ? style.graphicYOffset : -(0.5 * height); var opacity = style.graphicOpacity || style.fillOpacity; node.setAttributeNS(null, "x", (pos.x + xOffset).toFixed()); node.setAttributeNS(null, "y", (pos.y + yOffset).toFixed()); node.setAttributeNS(null, "width", width); node.setAttributeNS(null, "height", height); node.setAttributeNS(this.xlinkns, "href", style.externalGraphic); node.setAttributeNS(null, "style", "opacity: " + opacity); } else if (this.isComplexSymbol(style.graphicName)) { var offset = style.pointRadius * 3; var size = offset * 2; var id = this.importSymbol(style.graphicName); pos = this.getPosition(node); widthFactor = this.symbolMetrics[id][0] * 3 / size; var parent = node.parentNode; var nextSibling = node.nextSibling; if (parent) { parent.removeChild(node); } if (this.supportUse === false) { var src = document.getElementById(id); node.firstChild && node.removeChild(node.firstChild); node.appendChild(src.firstChild.cloneNode(true)); node.setAttributeNS(null, "viewBox", src.getAttributeNS(null, "viewBox")); } else { node.setAttributeNS(this.xlinkns, "href", "#" + id); } node.setAttributeNS(null, "width", size); node.setAttributeNS(null, "height", size); node.setAttributeNS(null, "x", pos.x - offset); node.setAttributeNS(null, "y", pos.y - offset); if (nextSibling) { parent.insertBefore(node, nextSibling); } else if (parent) { parent.appendChild(node); } } else { node.setAttributeNS(null, "r", style.pointRadius); } var rotation = style.rotation; if (node._rotation !== rotation && pos) { node._rotation = rotation; rotation |= 0; if (node.nodeName !== "svg") { node.setAttributeNS(null, "transform", "rotate(" + rotation + " " + pos.x + " " + pos.y + ")"); } else { var metrics = this.symbolMetrics[id] node.firstChild.setAttributeNS(null, "transform", "rotate(" + style.rotation + " " + metrics[1] + " " + metrics[2] + ")"); } } } if (options.isFilled) { node.setAttributeNS(null, "fill", style.fillColor); node.setAttributeNS(null, "fill-opacity", style.fillOpacity); } else { node.setAttributeNS(null, "fill", "none"); } if (options.isStroked) { node.setAttributeNS(null, "stroke", style.strokeColor); node.setAttributeNS(null, "stroke-opacity", style.strokeOpacity); node.setAttributeNS(null, "stroke-width", style.strokeWidth * widthFactor); node.setAttributeNS(null, "stroke-linecap", style.strokeLinecap); node.setAttributeNS(null, "stroke-linejoin", "round"); node.setAttributeNS(null, "stroke-dasharray", this.dashStyle(style, widthFactor)); } else { node.setAttributeNS(null, "stroke", "none"); } if (style.pointerEvents) { node.setAttributeNS(null, "pointer-events", style.pointerEvents); } if (style.cursor != null) { node.setAttributeNS(null, "cursor", style.cursor); } return node; }, dashStyle: function (style, widthFactor) { var w = style.strokeWidth * widthFactor; var str = style.strokeDashstyle; switch (str) { case 'solid': return 'none'; case 'dot': return [1, 4 * w].join(); case 'dash': return [4 * w, 4 * w].join(); case 'dashdot': return [4 * w, 4 * w, 1, 4 * w].join(); case 'longdash': return [8 * w, 4 * w].join(); case 'longdashdot': return [8 * w, 4 * w, 1, 4 * w].join(); default: return OpenLayers.String.trim(str).replace(/\s+/g, ","); } }, createNode: function (type, id) { var node = document.createElementNS(this.xmlns, type); if (id) { node.setAttributeNS(null, "id", id); } return node; }, nodeTypeCompare: function (node, type) { return (type == node.nodeName); }, createRenderRoot: function () { return this.nodeFactory(this.container.id + "_svgRoot", "svg"); }, createRoot: function (suffix) { return this.nodeFactory(this.container.id + suffix, "g"); }, createDefs: function () { var defs = this.nodeFactory(this.container.id + "_defs", "defs"); this.rendererRoot.appendChild(defs); return defs; }, drawPoint: function (node, geometry) { return this.drawCircle(node, geometry, 1); }, drawCircle: function (node, geometry, radius) { var resolution = this.getResolution(); var x = (geometry.x / resolution + this.left); var y = (this.top - geometry.y / resolution); if (this.inValidRange(x, y)) { node.setAttributeNS(null, "cx", x); node.setAttributeNS(null, "cy", y); node.setAttributeNS(null, "r", radius); return node; } else { return false; } }, drawLineString: function (node, geometry) { var componentsResult = this.getComponentsString(geometry.components); if (componentsResult.path) { node.setAttributeNS(null, "points", componentsResult.path); return (componentsResult.complete ? node : null); } else { return false; } }, drawLinearRing: function (node, geometry) { var componentsResult = this.getComponentsString(geometry.components); if (componentsResult.path) { node.setAttributeNS(null, "points", componentsResult.path); return (componentsResult.complete ? node : null); } else { return false; } }, drawPolygon: function (node, geometry) { var d = ""; var draw = true; var complete = true; var linearRingResult, path; for (var j = 0, len = geometry.components.length; j < len; j++) { d += " M"; linearRingResult = this.getComponentsString(geometry.components[j].components, " "); path = linearRingResult.path; if (path) { d += " " + path; complete = linearRingResult.complete && complete; } else { draw = false; } } d += " z"; if (draw) { node.setAttributeNS(null, "d", d); node.setAttributeNS(null, "fill-rule", "evenodd"); return complete ? node : null; } else { return false; } }, drawRectangle: function (node, geometry) { var resolution = this.getResolution(); var x = (geometry.x / resolution + this.left); var y = (this.top - geometry.y / resolution); if (this.inValidRange(x, y)) { node.setAttributeNS(null, "x", x); node.setAttributeNS(null, "y", y); node.setAttributeNS(null, "width", geometry.width / resolution); node.setAttributeNS(null, "height", geometry.height / resolution); return node; } else { return false; } }, drawSurface: function (node, geometry) { var d = null; var draw = true; for (var i = 0, len = geometry.components.length; i < len; i++) { if ((i % 3) == 0 && (i / 3) == 0) { var component = this.getShortString(geometry.components[i]); if (!component) { draw = false; } d = "M " + component; } else if ((i % 3) == 1) { var component = this.getShortString(geometry.components[i]); if (!component) { draw = false; } d += " C " + component; } else { var component = this.getShortString(geometry.components[i]); if (!component) { draw = false; } d += " " + component; } } d += " Z"; if (draw) { node.setAttributeNS(null, "d", d); return node; } else { return false; } }, drawText: function (featureId, style, location) { var resolution = this.getResolution(); var x = (location.x / resolution + this.left); var y = (location.y / resolution - this.top); var label = this.nodeFactory(featureId + this.LABEL_ID_SUFFIX, "text"); var tspan = this.nodeFactory(featureId + this.LABEL_ID_SUFFIX + "_tspan", "tspan"); label.setAttributeNS(null, "x", x); label.setAttributeNS(null, "y", -y); if (style.fontColor) { label.setAttributeNS(null, "fill", style.fontColor); } if (style.fontOpacity) { label.setAttributeNS(null, "opacity", style.fontOpacity); } if (style.fontFamily) { label.setAttributeNS(null, "font-family", style.fontFamily); } if (style.fontSize) { label.setAttributeNS(null, "font-size", style.fontSize); } if (style.fontWeight) { label.setAttributeNS(null, "font-weight", style.fontWeight); } if (style.labelSelect === true) { label.setAttributeNS(null, "pointer-events", "visible"); label._featureId = featureId; tspan._featureId = featureId; tspan._geometry = location; tspan._geometryClass = location.CLASS_NAME; } else { label.setAttributeNS(null, "pointer-events", "none"); } var align = style.labelAlign || "cm"; label.setAttributeNS(null, "text-anchor", OpenLayers.Renderer.SVG.LABEL_ALIGN[align[0]] || "middle"); if (this.isGecko) { label.setAttributeNS(null, "dominant-baseline", OpenLayers.Renderer.SVG.LABEL_ALIGN[align[1]] || "central"); } else { tspan.setAttributeNS(null, "baseline-shift", OpenLayers.Renderer.SVG.LABEL_VSHIFT[align[1]] || "-35%"); } tspan.textContent = style.label; if (!label.parentNode) { label.appendChild(tspan); this.textRoot.appendChild(label); } }, getComponentsString: function (components, separator) { var renderCmp = []; var complete = true; var len = components.length; var strings = []; var str, component, j; for (var i = 0; i < len; i++) { component = components[i]; renderCmp.push(component); str = this.getShortString(component); if (str) { strings.push(str); } else { if (i > 0) { if (this.getShortString(components[i - 1])) { strings.push(this.clipLine(components[i], components[i - 1])); } } if (i < len - 1) { if (this.getShortString(components[i + 1])) { strings.push(this.clipLine(components[i], components[i + 1])); } } complete = false; } } return { path: strings.join(separator || ","), complete: complete }; }, clipLine: function (badComponent, goodComponent) { if (goodComponent.equals(badComponent)) { return ""; } var resolution = this.getResolution(); var maxX = this.MAX_PIXEL - this.translationParameters.x; var maxY = this.MAX_PIXEL - this.translationParameters.y; var x1 = goodComponent.x / resolution + this.left; var y1 = this.top - goodComponent.y / resolution; var x2 = badComponent.x / resolution + this.left; var y2 = this.top - badComponent.y / resolution; var k; if (x2 < -maxX || x2 > maxX) { k = (y2 - y1) / (x2 - x1); x2 = x2 < 0 ? -maxX : maxX; y2 = y1 + (x2 - x1) * k; } if (y2 < -maxY || y2 > maxY) { k = (x2 - x1) / (y2 - y1); y2 = y2 < 0 ? -maxY : maxY; x2 = x1 + (y2 - y1) * k; } return x2 + "," + y2; }, getShortString: function (point) { var resolution = this.getResolution(); var x = (point.x / resolution + this.left); var y = (this.top - point.y / resolution); if (this.inValidRange(x, y)) { return x + "," + y; } else { return false; } }, getPosition: function (node) { return ({ x: parseFloat(node.getAttributeNS(null, "cx")), y: parseFloat(node.getAttributeNS(null, "cy")) }); }, importSymbol: function (graphicName) { if (!this.defs) { this.defs = this.createDefs(); } var id = this.container.id + "-" + graphicName; if (document.getElementById(id) != null) { return id; } var symbol = OpenLayers.Renderer.symbol[graphicName]; if (!symbol) { throw new Error(graphicName + ' is not a valid symbol name'); return; } var symbolNode = this.nodeFactory(id, "symbol"); var node = this.nodeFactory(null, "polygon"); symbolNode.appendChild(node); var symbolExtent = new OpenLayers.Bounds(Number.MAX_VALUE, Number.MAX_VALUE, 0, 0); var points = ""; var x, y; for (var i = 0; i < symbol.length; i = i + 2) { x = symbol[i]; y = symbol[i + 1]; symbolExtent.left = Math.min(symbolExtent.left, x); symbolExtent.bottom = Math.min(symbolExtent.bottom, y); symbolExtent.right = Math.max(symbolExtent.right, x); symbolExtent.top = Math.max(symbolExtent.top, y); points += " " + x + "," + y; } node.setAttributeNS(null, "points", points); var width = symbolExtent.getWidth(); var height = symbolExtent.getHeight(); var viewBox = [symbolExtent.left - width, symbolExtent.bottom - height, width * 3, height * 3]; symbolNode.setAttributeNS(null, "viewBox", viewBox.join(" ")); this.symbolMetrics[id] = [Math.max(width, height), symbolExtent.getCenterLonLat().lon, symbolExtent.getCenterLonLat().lat]; this.defs.appendChild(symbolNode); return symbolNode.id; }, getFeatureIdFromEvent: function (evt) { var featureId = OpenLayers.Renderer.Elements.prototype.getFeatureIdFromEvent.apply(this, arguments); if (this.supportUse === false && !featureId) { var target = evt.target; featureId = target.parentNode && target != this.rendererRoot && target.parentNode._featureId; } return featureId; }, 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.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, { xmlns: "urn:schemas-microsoft-com:vml", symbolCache: {}, offset: null, initialize: function (containerID) { if (!this.supported()) { return; } if (!document.namespaces.olv) { document.namespaces.add("olv", this.xmlns); var style = document.createStyleSheet(); var shapes = ['shape', 'rect', 'oval', 'fill', 'stroke', 'imagedata', 'group', 'textbox']; for (var i = 0, len = shapes.length; i < len; i++) { style.addRule('olv\\:' + shapes[i], "behavior: url(#default#VML); " + "position: absolute; display: inline-block;"); } } OpenLayers.Renderer.Elements.prototype.initialize.apply(this, arguments); }, destroy: function () { OpenLayers.Renderer.Elements.prototype.destroy.apply(this, arguments); }, supported: function () { return !!(document.namespaces); }, setExtent: function (extent, resolutionChanged) { OpenLayers.Renderer.Elements.prototype.setExtent.apply(this, arguments); var resolution = this.getResolution(); var left = (extent.left / resolution) | 0; var top = (extent.top / resolution - this.size.h) | 0; if (resolutionChanged || !this.offset) { this.offset = { x: left, y: top }; left = 0; top = 0; } else { left = left - this.offset.x; top = top - this.offset.y; } var org = left + " " + top; this.root.coordorigin = org; var roots = [this.root, this.vectorRoot, this.textRoot]; var root; for (var i = 0, len = roots.length; i < len; ++i) { root = roots[i]; var size = this.size.w + " " + this.size.h; root.coordsize = size; } this.root.style.flip = "y"; return true; }, setSize: function (size) { OpenLayers.Renderer.prototype.setSize.apply(this, arguments); var roots = [this.rendererRoot, this.root, this.vectorRoot, this.textRoot]; var w = this.size.w + "px"; var h = this.size.h + "px"; var root; for (var i = 0, len = roots.length; i < len; ++i) { root = roots[i]; root.style.width = w; root.style.height = h; } }, getNodeType: function (geometry, style) { var nodeType = null; switch (geometry.CLASS_NAME) { case "OpenLayers.Geometry.Point": if (style.externalGraphic) { nodeType = "olv:rect"; } else if (this.isComplexSymbol(style.graphicName)) { nodeType = "olv:shape"; } else { nodeType = "olv:oval"; } break; case "OpenLayers.Geometry.Rectangle": nodeType = "olv:rect"; break; case "OpenLayers.Geometry.LineString": case "OpenLayers.Geometry.LinearRing": case "OpenLayers.Geometry.Polygon": case "OpenLayers.Geometry.Curve": case "OpenLayers.Geometry.Surface": nodeType = "olv:shape"; break; default: break; } return nodeType; }, setStyle: function (node, style, options, geometry) { style = style || node._style; options = options || node._options; var widthFactor = 1; var fillColor = style.fillColor; if (node._geometryClass === "OpenLayers.Geometry.Point") { if (style.externalGraphic) { if (style.graphicTitle) { node.title = style.graphicTitle; } var width = style.graphicWidth || style.graphicHeight; var height = style.graphicHeight || style.graphicWidth; width = width ? width : style.pointRadius * 2; height = height ? height : style.pointRadius * 2; var resolution = this.getResolution(); var xOffset = (style.graphicXOffset != undefined) ? style.graphicXOffset : -(0.5 * width); var yOffset = (style.graphicYOffset != undefined) ? style.graphicYOffset : -(0.5 * height); node.style.left = (((geometry.x / resolution - this.offset.x) + xOffset) | 0) + "px"; node.style.top = (((geometry.y / resolution - this.offset.y) - (yOffset + height)) | 0) + "px"; node.style.width = width + "px"; node.style.height = height + "px"; node.style.flip = "y"; fillColor = "none"; options.isStroked = false; } else if (this.isComplexSymbol(style.graphicName)) { var cache = this.importSymbol(style.graphicName); node.path = cache.path; node.coordorigin = cache.left + "," + cache.bottom; var size = cache.size; node.coordsize = size + "," + size; this.drawCircle(node, geometry, style.pointRadius); node.style.flip = "y"; } else { this.drawCircle(node, geometry, style.pointRadius); } } if (options.isFilled) { node.fillcolor = fillColor; } else { node.filled = "false"; } var fills = node.getElementsByTagName("fill"); var fill = (fills.length == 0) ? null : fills[0]; if (!options.isFilled) { if (fill) { node.removeChild(fill); } } else { if (!fill) { fill = this.createNode('olv:fill', node.id + "_fill"); } fill.opacity = style.fillOpacity; if (node._geometryClass === "OpenLayers.Geometry.Point" && style.externalGraphic) { if (style.graphicOpacity) { fill.opacity = style.graphicOpacity; } fill.src = style.externalGraphic; fill.type = "frame"; if (!(style.graphicWidth && style.graphicHeight)) { fill.aspect = "atmost"; } } if (fill.parentNode != node) { node.appendChild(fill); } } var rotation = style.rotation; if (rotation !== node._rotation) { node._rotation = rotation; if (style.externalGraphic) { this.graphicRotate(node, xOffset, yOffset, style); fill.opacity = 0; } else if (node._geometryClass === "OpenLayers.Geometry.Point") { node.style.rotation = rotation || 0; } } if (options.isStroked) { node.strokecolor = style.strokeColor; node.strokeweight = style.strokeWidth + "px"; } else { node.stroked = false; } var strokes = node.getElementsByTagName("stroke"); var stroke = (strokes.length == 0) ? null : strokes[0]; if (!options.isStroked) { if (stroke) { node.removeChild(stroke); } } else { if (!stroke) { stroke = this.createNode('olv:stroke', node.id + "_stroke"); node.appendChild(stroke); } stroke.opacity = style.strokeOpacity; stroke.endcap = !style.strokeLinecap || style.strokeLinecap == 'butt' ? 'flat' : style.strokeLinecap; stroke.dashstyle = this.dashStyle(style); } if (style.cursor != "inherit" && style.cursor != null) { node.style.cursor = style.cursor; } return node; }, graphicRotate: function (node, xOffset, yOffset, style) { var style = style || node._style; var options = node._options; var rotation = style.rotation || 0; var aspectRatio, size; if (!(style.graphicWidth && style.graphicHeight)) { var img = new Image(); img.onreadystatechange = OpenLayers.Function.bind(function () { if (img.readyState == "complete" || img.readyState == "interactive") { aspectRatio = img.width / img.height; size = Math.max(style.pointRadius * 2, style.graphicWidth || 0, style.graphicHeight || 0); xOffset = xOffset * aspectRatio; style.graphicWidth = size * aspectRatio; style.graphicHeight = size; this.graphicRotate(node, xOffset, yOffset, style); } }, this); img.src = style.externalGraphic; return; } else { size = Math.max(style.graphicWidth, style.graphicHeight); aspectRatio = style.graphicWidth / style.graphicHeight; } var width = Math.round(style.graphicWidth || size * aspectRatio); var height = Math.round(style.graphicHeight || size); node.style.width = width + "px"; node.style.height = height + "px"; var image = document.getElementById(node.id + "_image"); if (!image) { image = this.createNode("olv:imagedata", node.id + "_image"); node.appendChild(image); } image.style.width = width + "px"; image.style.height = height + "px"; image.src = style.externalGraphic; image.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(" + "src='', sizingMethod='scale')"; var rot = rotation * Math.PI / 180; var sintheta = Math.sin(rot); var costheta = Math.cos(rot); var filter = "progid:DXImageTransform.Microsoft.Matrix(M11=" + costheta + ",M12=" + (-sintheta) + ",M21=" + sintheta + ",M22=" + costheta + ",SizingMethod='auto expand')\n"; var opacity = style.graphicOpacity || style.fillOpacity; if (opacity && opacity != 1) { filter += "progid:DXImageTransform.Microsoft.BasicImage(opacity=" + opacity + ")\n"; } node.style.filter = filter; var centerPoint = new OpenLayers.Geometry.Point(-xOffset, -yOffset); var imgBox = new OpenLayers.Bounds(0, 0, width, height).toGeometry(); imgBox.rotate(style.rotation, centerPoint); var imgBounds = imgBox.getBounds(); node.style.left = Math.round(parseInt(node.style.left) + imgBounds.left) + "px"; node.style.top = Math.round(parseInt(node.style.top) - imgBounds.bottom) + "px"; }, postDraw: function (node) { node.style.visibility = "visible"; var fillColor = node._style.fillColor; var strokeColor = node._style.strokeColor; if (fillColor == "none" && node.fillcolor != fillColor) { node.fillcolor = fillColor; } if (strokeColor == "none" && node.strokecolor != strokeColor) { node.strokecolor = strokeColor; } }, setNodeDimension: function (node, geometry) { var bbox = geometry.getBounds(); if (bbox) { var resolution = this.getResolution(); var scaledBox = new OpenLayers.Bounds((bbox.left / resolution - this.offset.x) | 0, (bbox.bottom / resolution - this.offset.y) | 0, (bbox.right / resolution - this.offset.x) | 0, (bbox.top / resolution - this.offset.y) | 0); node.style.left = scaledBox.left + "px"; node.style.top = scaledBox.top + "px"; node.style.width = scaledBox.getWidth() + "px"; node.style.height = scaledBox.getHeight() + "px"; node.coordorigin = scaledBox.left + " " + scaledBox.top; node.coordsize = scaledBox.getWidth() + " " + scaledBox.getHeight(); } }, dashStyle: function (style) { var dash = style.strokeDashstyle; switch (dash) { case 'solid': case 'dot': case 'dash': case 'dashdot': case 'longdash': case 'longdashdot': return dash; default: var parts = dash.split(/[ ,]/); if (parts.length == 2) { if (1 * parts[0] >= 2 * parts[1]) { return "longdash"; } return (parts[0] == 1 || parts[1] == 1) ? "dot" : "dash"; } else if (parts.length == 4) { return (1 * parts[0] >= 2 * parts[1]) ? "longdashdot" : "dashdot"; } return "solid"; } }, createNode: function (type, id) { var node = document.createElement(type); if (id) { node.id = id; } node.unselectable = 'on'; node.onselectstart = OpenLayers.Function.False; return node; }, nodeTypeCompare: function (node, type) { var subType = type; var splitIndex = subType.indexOf(":"); if (splitIndex != -1) { subType = subType.substr(splitIndex + 1); } var nodeName = node.nodeName; splitIndex = nodeName.indexOf(":"); if (splitIndex != -1) { nodeName = nodeName.substr(splitIndex + 1); } return (subType == nodeName); }, createRenderRoot: function () { return this.nodeFactory(this.container.id + "_vmlRoot", "div"); }, createRoot: function (suffix) { return this.nodeFactory(this.container.id + suffix, "olv:group"); }, drawPoint: function (node, geometry) { return this.drawCircle(node, geometry, 1); }, drawCircle: function (node, geometry, radius) { if (!isNaN(geometry.x) && !isNaN(geometry.y)) { var resolution = this.getResolution(); node.style.left = (((geometry.x / resolution - this.offset.x) | 0) - radius) + "px"; node.style.top = (((geometry.y / resolution - this.offset.y) | 0) - radius) + "px"; var diameter = radius * 2; node.style.width = diameter + "px"; node.style.height = diameter + "px"; return node; } return false; }, drawLineString: function (node, geometry) { return this.drawLine(node, geometry, false); }, drawLinearRing: function (node, geometry) { return this.drawLine(node, geometry, true); }, drawLine: function (node, geometry, closeLine) { this.setNodeDimension(node, geometry); var resolution = this.getResolution(); var numComponents = geometry.components.length; var parts = new Array(numComponents); var comp, x, y; for (var i = 0; i < numComponents; i++) { comp = geometry.components[i]; x = (comp.x / resolution - this.offset.x) | 0; y = (comp.y / resolution - this.offset.y) | 0; parts[i] = " " + x + "," + y + " l "; } var end = (closeLine) ? " x e" : " e"; node.path = "m" + parts.join("") + end; return node; }, drawPolygon: function (node, geometry) { this.setNodeDimension(node, geometry); var resolution = this.getResolution(); var path = []; var linearRing, i, j, len, ilen, comp, x, y; for (j = 0, len = geometry.components.length; j < len; j++) { linearRing = geometry.components[j]; path.push("m"); for (i = 0, ilen = linearRing.components.length; i < ilen; i++) { comp = linearRing.components[i]; x = (comp.x / resolution - this.offset.x) | 0; y = (comp.y / resolution - this.offset.y) | 0; path.push(" " + x + "," + y); if (i == 0) { path.push(" l"); } } path.push(" x "); } path.push("e"); node.path = path.join(""); return node; }, drawRectangle: function (node, geometry) { var resolution = this.getResolution(); node.style.left = ((geometry.x / resolution - this.offset.x) | 0) + "px"; node.style.top = ((geometry.y / resolution - this.offset.y) | 0) + "px"; node.style.width = ((geometry.width / resolution) | 0) + "px"; node.style.height = ((geometry.height / resolution) | 0) + "px"; return node; }, drawText: function (featureId, style, location) { var label = this.nodeFactory(featureId + this.LABEL_ID_SUFFIX, "olv:rect"); var textbox = this.nodeFactory(featureId + this.LABEL_ID_SUFFIX + "_textbox", "olv:textbox"); var resolution = this.getResolution(); label.style.left = ((location.x / resolution - this.offset.x) | 0) + "px"; label.style.top = ((location.y / resolution - this.offset.y) | 0) + "px"; label.style.flip = "y"; textbox.innerText = style.label; if (style.fontColor) { textbox.style.color = style.fontColor; } if (style.fontOpacity) { textbox.style.filter = 'alpha(opacity=' + (style.fontOpacity * 100) + ')'; } if (style.fontFamily) { textbox.style.fontFamily = style.fontFamily; } if (style.fontSize) { textbox.style.fontSize = style.fontSize; } if (style.fontWeight) { textbox.style.fontWeight = style.fontWeight; } if (style.labelSelect === true) { label._featureId = featureId; textbox._featureId = featureId; textbox._geometry = location; textbox._geometryClass = location.CLASS_NAME; } textbox.style.whiteSpace = "nowrap"; textbox.inset = "1px,0px,0px,0px"; if (!label.parentNode) { label.appendChild(textbox); this.textRoot.appendChild(label); } var align = style.labelAlign || "cm"; var xshift = textbox.clientWidth * (OpenLayers.Renderer.VML.LABEL_SHIFT[align[0] || "c"]); var yshift = textbox.clientHeight * (OpenLayers.Renderer.VML.LABEL_SHIFT[align[1] || "m"]); label.style.left = parseInt(label.style.left) - xshift - 1 + "px"; label.style.top = parseInt(label.style.top) + yshift + "px"; }, drawSurface: function (node, geometry) { this.setNodeDimension(node, geometry); var resolution = this.getResolution(); var path = []; var comp, x, y; for (var i = 0, len = geometry.components.length; i < len; i++) { comp = geometry.components[i]; x = (comp.x / resolution - this.offset.x) | 0; y = (comp.y / resolution - this.offset.y) | 0; if ((i % 3) == 0 && (i / 3) == 0) { path.push("m"); } else if ((i % 3) == 1) { path.push(" c"); } path.push(" " + x + "," + y); } path.push(" x e"); node.path = path.join(""); return node; }, moveRoot: function (renderer) { var layer = this.map.getLayer(renderer.container.id); if (layer instanceof OpenLayers.Layer.Vector.RootContainer) { layer = this.map.getLayer(this.container.id); } layer && layer.renderer.clear(); OpenLayers.Renderer.Elements.prototype.moveRoot.apply(this, arguments); layer && layer.redraw(); }, importSymbol: function (graphicName) { var id = this.container.id + "-" + graphicName; var cache = this.symbolCache[id]; if (cache) { return cache; } var symbol = OpenLayers.Renderer.symbol[graphicName]; if (!symbol) { throw new Error(graphicName + ' is not a valid symbol name'); return; } var symbolExtent = new OpenLayers.Bounds(Number.MAX_VALUE, Number.MAX_VALUE, 0, 0); var pathitems = ["m"]; for (var i = 0; i < symbol.length; i = i + 2) { var x = symbol[i]; var y = symbol[i + 1]; symbolExtent.left = Math.min(symbolExtent.left, x); symbolExtent.bottom = Math.min(symbolExtent.bottom, y); symbolExtent.right = Math.max(symbolExtent.right, x); symbolExtent.top = Math.max(symbolExtent.top, y); pathitems.push(x); pathitems.push(y); if (i == 0) { pathitems.push("l"); } } pathitems.push("x e"); var path = pathitems.join(" "); var diff = (symbolExtent.getWidth() - symbolExtent.getHeight()) / 2; if (diff > 0) { symbolExtent.bottom = symbolExtent.bottom - diff; symbolExtent.top = symbolExtent.top + diff; } else { symbolExtent.left = symbolExtent.left + diff; symbolExtent.right = symbolExtent.right - diff; } cache = { path: path, size: symbolExtent.getWidth(), left: symbolExtent.left, bottom: symbolExtent.bottom }; this.symbolCache[id] = cache; return cache; }, CLASS_NAME: "OpenLayers.Renderer.VML" }); OpenLayers.Renderer.VML.LABEL_SHIFT = { "l": 0, "c": .5, "r": 1, "t": 0, "m": .5, "b": 1 }; OpenLayers.Tile = OpenLayers.Class({ EVENT_TYPES: ["loadstart", "loadend", "reload", "unload"], events: null, id: null, layer: null, url: null, bounds: null, size: null, position: null, isLoading: false, initialize: function (layer, position, bounds, url, size) { this.layer = layer; this.position = position.clone(); this.bounds = bounds.clone(); this.url = url; this.size = size.clone(); this.id = OpenLayers.Util.createUniqueID("Tile_"); this.events = new OpenLayers.Events(this, null, this.EVENT_TYPES); }, unload: function () { if (this.isLoading) { this.isLoading = false; this.events.triggerEvent("unload"); } }, destroy: function () { this.layer = null; this.bounds = null; this.size = null; this.position = null; this.events.destroy(); this.events = null; }, clone: function (obj) { if (obj == null) { obj = new OpenLayers.Tile(this.layer, this.position, this.bounds, this.url, this.size); } OpenLayers.Util.applyDefaults(obj, this); return obj; }, draw: function () { var maxExtent = this.layer.maxExtent; var withinMaxExtent = (maxExtent && this.bounds.intersectsBounds(maxExtent, false)); this.shouldDraw = (withinMaxExtent || this.layer.displayOutsideMaxExtent); this.clear(); return this.shouldDraw; }, moveTo: function (bounds, position, redraw) { if (redraw == null) { redraw = true; } this.bounds = bounds.clone(); this.position = position.clone(); if (redraw) { this.draw(); } }, clear: function () {}, getBoundsFromBaseLayer: function (position) { var msg = OpenLayers.i18n('reprojectDeprecated', { 'layerName': this.layer.name }); OpenLayers.Console.warn(msg); var topLeft = this.layer.map.getLonLatFromLayerPx(position); var bottomRightPx = position.clone(); bottomRightPx.x += this.size.w; bottomRightPx.y += this.size.h; var bottomRight = this.layer.map.getLonLatFromLayerPx(bottomRightPx); if (topLeft.lon > bottomRight.lon) { if (topLeft.lon < 0) { topLeft.lon = -180 - (topLeft.lon + 180); } else { bottomRight.lon = 180 + bottomRight.lon + 180; } } var bounds = new OpenLayers.Bounds(topLeft.lon, bottomRight.lat, bottomRight.lon, topLeft.lat); return bounds; }, showTile: function () { if (this.shouldDraw) { this.show(); } }, show: function () {}, hide: function () {}, CLASS_NAME: "OpenLayers.Tile" }); OpenLayers.Control.MouseToolbar = OpenLayers.Class(OpenLayers.Control.MouseDefaults, { mode: null, buttons: null, direction: "vertical", buttonClicked: null, initialize: function (position, direction) { OpenLayers.Control.prototype.initialize.apply(this, arguments); this.position = new OpenLayers.Pixel(OpenLayers.Control.MouseToolbar.X, OpenLayers.Control.MouseToolbar.Y); if (position) { this.position = position; } if (direction) { this.direction = direction; } this.measureDivs = []; }, destroy: function () { for (var btnId in this.buttons) { var btn = this.buttons[btnId]; btn.map = null; btn.events.destroy(); } OpenLayers.Control.MouseDefaults.prototype.destroy.apply(this, arguments); }, draw: function () { OpenLayers.Control.prototype.draw.apply(this, arguments); OpenLayers.Control.MouseDefaults.prototype.draw.apply(this, arguments); this.buttons = {}; var sz = new OpenLayers.Size(28, 28); var centered = new OpenLayers.Pixel(OpenLayers.Control.MouseToolbar.X, 0); this._addButton("zoombox", "drag-rectangle-off.png", "drag-rectangle-on.png", centered, sz, "Shift->Drag to zoom to area"); centered = centered.add((this.direction == "vertical" ? 0 : sz.w), (this.direction == "vertical" ? sz.h : 0)); this._addButton("pan", "panning-hand-off.png", "panning-hand-on.png", centered, sz, "Drag the map to pan."); centered = centered.add((this.direction == "vertical" ? 0 : sz.w), (this.direction == "vertical" ? sz.h : 0)); this.switchModeTo("pan"); return this.div; }, _addButton: function (id, img, activeImg, xy, sz, title) { var imgLocation = OpenLayers.Util.getImagesLocation() + img; var activeImgLocation = OpenLayers.Util.getImagesLocation() + activeImg; var btn = OpenLayers.Util.createAlphaImageDiv("OpenLayers_Control_MouseToolbar_" + id, xy, sz, imgLocation, "absolute"); this.div.appendChild(btn); btn.imgLocation = imgLocation; btn.activeImgLocation = activeImgLocation; btn.events = new OpenLayers.Events(this, btn, null, true); btn.events.on({ "mousedown": this.buttonDown, "mouseup": this.buttonUp, "dblclick": OpenLayers.Event.stop, scope: this }); btn.action = id; btn.title = title; btn.alt = title; btn.map = this.map; this.buttons[id] = btn; return btn; }, buttonDown: function (evt) { if (!OpenLayers.Event.isLeftClick(evt)) { return; } this.buttonClicked = evt.element.action; OpenLayers.Event.stop(evt); }, buttonUp: function (evt) { if (!OpenLayers.Event.isLeftClick(evt)) { return; } if (this.buttonClicked != null) { if (this.buttonClicked == evt.element.action) { this.switchModeTo(evt.element.action); } OpenLayers.Event.stop(evt); this.buttonClicked = null; } }, defaultDblClick: function (evt) { this.switchModeTo("pan"); this.performedDrag = false; var newCenter = this.map.getLonLatFromViewPortPx(evt.xy); this.map.setCenter(newCenter, this.map.zoom + 1); OpenLayers.Event.stop(evt); return false; }, defaultMouseDown: function (evt) { if (!OpenLayers.Event.isLeftClick(evt)) { return; } this.mouseDragStart = evt.xy.clone(); this.performedDrag = false; this.startViaKeyboard = false; if (evt.shiftKey && this.mode != "zoombox") { this.switchModeTo("zoombox"); this.startViaKeyboard = true; } else if (evt.altKey && this.mode != "measure") { this.switchModeTo("measure"); } else if (!this.mode) { this.switchModeTo("pan"); } switch (this.mode) { case "zoombox": this.map.div.style.cursor = "crosshair"; this.zoomBox = OpenLayers.Util.createDiv('zoomBox', this.mouseDragStart, null, null, "absolute", "2px solid red"); this.zoomBox.style.backgroundColor = "white"; this.zoomBox.style.filter = "alpha(opacity=50)"; this.zoomBox.style.opacity = "0.50"; this.zoomBox.style.fontSize = "1px"; this.zoomBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1; this.map.viewPortDiv.appendChild(this.zoomBox); this.performedDrag = true; break; case "measure": var distance = ""; if (this.measureStart) { var measureEnd = this.map.getLonLatFromViewPortPx(this.mouseDragStart); distance = OpenLayers.Util.distVincenty(this.measureStart, measureEnd); distance = Math.round(distance * 100) / 100; distance = distance + "km"; this.measureStartBox = this.measureBox; } this.measureStart = this.map.getLonLatFromViewPortPx(this.mouseDragStart);; this.measureBox = OpenLayers.Util.createDiv(null, this.mouseDragStart.add(-2 - parseInt(this.map.layerContainerDiv.style.left), -2 - parseInt(this.map.layerContainerDiv.style.top)), null, null, "absolute"); this.measureBox.style.width = "4px"; this.measureBox.style.height = "4px"; this.measureBox.style.fontSize = "1px"; this.measureBox.style.backgroundColor = "red"; this.measureBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1; this.map.layerContainerDiv.appendChild(this.measureBox); if (distance) { this.measureBoxDistance = OpenLayers.Util.createDiv(null, this.mouseDragStart.add(-2 - parseInt(this.map.layerContainerDiv.style.left), 2 - parseInt(this.map.layerContainerDiv.style.top)), null, null, "absolute"); this.measureBoxDistance.innerHTML = distance; this.measureBoxDistance.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1; this.map.layerContainerDiv.appendChild(this.measureBoxDistance); this.measureDivs.push(this.measureBoxDistance); } this.measureBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1; this.map.layerContainerDiv.appendChild(this.measureBox); this.measureDivs.push(this.measureBox); break; default: this.map.div.style.cursor = "move"; break; } document.onselectstart = OpenLayers.Function.False; OpenLayers.Event.stop(evt); }, switchModeTo: function (mode) { if (mode != this.mode) { if (this.mode && this.buttons[this.mode]) { OpenLayers.Util.modifyAlphaImageDiv(this.buttons[this.mode], null, null, null, this.buttons[this.mode].imgLocation); } if (this.mode == "measure" && mode != "measure") { for (var i = 0, len = this.measureDivs.length; i < len; i++) { if (this.measureDivs[i]) { this.map.layerContainerDiv.removeChild(this.measureDivs[i]); } } this.measureDivs = []; this.measureStart = null; } this.mode = mode; if (this.buttons[mode]) { OpenLayers.Util.modifyAlphaImageDiv(this.buttons[mode], null, null, null, this.buttons[mode].activeImgLocation); } switch (this.mode) { case "zoombox": this.map.div.style.cursor = "crosshair"; break; default: this.map.div.style.cursor = ""; break; } } }, leaveMode: function () { this.switchModeTo("pan"); }, defaultMouseMove: function (evt) { if (this.mouseDragStart != null) { switch (this.mode) { case "zoombox": var deltaX = Math.abs(this.mouseDragStart.x - evt.xy.x); var deltaY = Math.abs(this.mouseDragStart.y - evt.xy.y); this.zoomBox.style.width = Math.max(1, deltaX) + "px"; this.zoomBox.style.height = Math.max(1, deltaY) + "px"; if (evt.xy.x < this.mouseDragStart.x) { this.zoomBox.style.left = evt.xy.x + "px"; } if (evt.xy.y < this.mouseDragStart.y) { this.zoomBox.style.top = evt.xy.y + "px"; } break; default: var deltaX = this.mouseDragStart.x - evt.xy.x; var deltaY = this.mouseDragStart.y - evt.xy.y; var size = this.map.getSize(); var newXY = new OpenLayers.Pixel(size.w / 2 + deltaX, size.h / 2 + deltaY); var newCenter = this.map.getLonLatFromViewPortPx(newXY); this.map.setCenter(newCenter, null, true); this.mouseDragStart = evt.xy.clone(); } this.performedDrag = true; } }, defaultMouseUp: function (evt) { if (!OpenLayers.Event.isLeftClick(evt)) { return; } switch (this.mode) { case "zoombox": this.zoomBoxEnd(evt); if (this.startViaKeyboard) { this.leaveMode(); } break; case "pan": if (this.performedDrag) { this.map.setCenter(this.map.center); } } document.onselectstart = null; this.mouseDragStart = null; this.map.div.style.cursor = "default"; }, defaultMouseOut: function (evt) { if (this.mouseDragStart != null && OpenLayers.Util.mouseLeft(evt, this.map.div)) { if (this.zoomBox) { this.removeZoomBox(); if (this.startViaKeyboard) { this.leaveMode(); } } this.mouseDragStart = null; this.map.div.style.cursor = "default"; } }, defaultClick: function (evt) { if (this.performedDrag) { this.performedDrag = false; return false; } }, CLASS_NAME: "OpenLayers.Control.MouseToolbar" }); OpenLayers.Control.MouseToolbar.X = 6; OpenLayers.Control.MouseToolbar.Y = 300; OpenLayers.Control.NavigationHistory = OpenLayers.Class(OpenLayers.Control, { type: OpenLayers.Control.TYPE_TOGGLE, previous: null, previousOptions: null, next: null, nextOptions: null, limit: 50, autoActivate: true, clearOnDeactivate: false, registry: null, nextStack: null, previousStack: null, listeners: null, restoring: false, initialize: function (options) { OpenLayers.Control.prototype.initialize.apply(this, [options]); this.registry = OpenLayers.Util.extend({ "moveend": this.getState }, this.registry); var previousOptions = { trigger: OpenLayers.Function.bind(this.previousTrigger, this), displayClass: this.displayClass + " " + this.displayClass + "Previous" }; OpenLayers.Util.extend(previousOptions, this.previousOptions); this.previous = new OpenLayers.Control.Button(previousOptions); var nextOptions = { trigger: OpenLayers.Function.bind(this.nextTrigger, this), displayClass: this.displayClass + " " + this.displayClass + "Next" }; OpenLayers.Util.extend(nextOptions, this.nextOptions); this.next = new OpenLayers.Control.Button(nextOptions); this.clear(); }, onPreviousChange: function (state, length) { if (state && !this.previous.active) { this.previous.activate(); } else if (!state && this.previous.active) { this.previous.deactivate(); } }, onNextChange: function (state, length) { if (state && !this.next.active) { this.next.activate(); } else if (!state && this.next.active) { this.next.deactivate(); } }, destroy: function () { OpenLayers.Control.prototype.destroy.apply(this); this.previous.destroy(); this.next.destroy(); this.deactivate(); for (var prop in this) { this[prop] = null; } }, setMap: function (map) { this.map = map; this.next.setMap(map); this.previous.setMap(map); }, draw: function () { OpenLayers.Control.prototype.draw.apply(this, arguments); this.next.draw(); this.previous.draw(); }, previousTrigger: function () { var current = this.previousStack.shift(); var state = this.previousStack.shift(); if (state != undefined) { this.nextStack.unshift(current); this.previousStack.unshift(state); this.restoring = true; this.restore(state); this.restoring = false; this.onNextChange(this.nextStack[0], this.nextStack.length); this.onPreviousChange(this.previousStack[1], this.previousStack.length - 1); } else { this.previousStack.unshift(current); } return state; }, nextTrigger: function () { var state = this.nextStack.shift(); if (state != undefined) { this.previousStack.unshift(state); this.restoring = true; this.restore(state); this.restoring = false; this.onNextChange(this.nextStack[0], this.nextStack.length); this.onPreviousChange(this.previousStack[1], this.previousStack.length - 1); } return state; }, clear: function () { this.previousStack = []; this.previous.deactivate(); this.nextStack = []; this.next.deactivate(); }, getState: function () { return { center: this.map.getCenter(), resolution: this.map.getResolution() }; }, restore: function (state) { var zoom = this.map.getZoomForResolution(state.resolution); this.map.setCenter(state.center, zoom); }, setListeners: function () { this.listeners = {}; for (var type in this.registry) { this.listeners[type] = OpenLayers.Function.bind(function () { if (!this.restoring) { var state = this.registry[type].apply(this, arguments); this.previousStack.unshift(state); if (this.previousStack.length > 1) { this.onPreviousChange(this.previousStack[1], this.previousStack.length - 1); } if (this.previousStack.length > (this.limit + 1)) { this.previousStack.pop(); } if (this.nextStack.length > 0) { this.nextStack = []; this.onNextChange(null, 0); } } return true; }, this); } }, activate: function () { var activated = false; if (this.map) { if (OpenLayers.Control.prototype.activate.apply(this)) { if (this.listeners == null) { this.setListeners(); } for (var type in this.listeners) { this.map.events.register(type, this, this.listeners[type]); } activated = true; if (this.previousStack.length == 0) { this.initStack(); } } } return activated; }, initStack: function () { if (this.map.getCenter()) { this.listeners.moveend(); } }, deactivate: function () { var deactivated = false; if (this.map) { if (OpenLayers.Control.prototype.deactivate.apply(this)) { for (var type in this.listeners) { this.map.events.unregister(type, this, this.listeners[type]); } if (this.clearOnDeactivate) { this.clear(); } deactivated = true; } } return deactivated; }, CLASS_NAME: "OpenLayers.Control.NavigationHistory" }); OpenLayers.Control.PanPanel = OpenLayers.Class(OpenLayers.Control.Panel, { slideFactor: 50, initialize: function (options) { OpenLayers.Control.Panel.prototype.initialize.apply(this, [options]); this.addControls([new OpenLayers.Control.Pan(OpenLayers.Control.Pan.NORTH, { slideFactor: this.slideFactor }), new OpenLayers.Control.Pan(OpenLayers.Control.Pan.SOUTH, { slideFactor: this.slideFactor }), new OpenLayers.Control.Pan(OpenLayers.Control.Pan.EAST, { slideFactor: this.slideFactor }), new OpenLayers.Control.Pan(OpenLayers.Control.Pan.WEST, { slideFactor: this.slideFactor })]); }, CLASS_NAME: "OpenLayers.Control.PanPanel" }); OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, { zoomStopWidth: 18, zoomStopHeight: 11, slider: null, sliderEvents: null, zoombarDiv: null, divEvents: null, zoomWorldIcon: false, forceFixedZoomLevel: false, mouseDragStart: null, zoomStart: null, initialize: function () { OpenLayers.Control.PanZoom.prototype.initialize.apply(this, arguments); }, 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 (map) { OpenLayers.Control.PanZoom.prototype.setMap.apply(this, arguments); this.map.events.register("changebaselayer", this, this.redraw); }, redraw: function () { if (this.div != null) { this.removeButtons(); this._removeZoomBar(); } this.draw(); }, draw: function (px) { OpenLayers.Control.prototype.draw.apply(this, arguments); px = this.position.clone(); this.buttons = []; var sz = new OpenLayers.Size(18, 18); var centered = new OpenLayers.Pixel(px.x + sz.w / 2, px.y); var wposition = sz.w; if (this.zoomWorldIcon) { centered = new OpenLayers.Pixel(px.x + sz.w, px.y); } this._addButton("panup", "north-mini.png", centered, sz); px.y = centered.y + sz.h; this._addButton("panleft", "west-mini.png", px, sz); if (this.zoomWorldIcon) { this._addButton("zoomworld", "zoom-world-mini.png", px.add(sz.w, 0), sz); wposition *= 2; } this._addButton("panright", "east-mini.png", px.add(wposition, 0), sz); this._addButton("pandown", "south-mini.png", centered.add(0, sz.h * 2), sz); this._addButton("zoomin", "zoom-plus-mini.png", centered.add(0, sz.h * 3 + 5), sz); centered = this._addZoomBar(centered.add(0, sz.h * 4 + 5)); this._addButton("zoomout", "zoom-minus-mini.png", centered, sz); return this.div; }, _addZoomBar: function (centered) { var imgLocation = OpenLayers.Util.getImagesLocation(); var id = this.id + "_" + this.map.id; var zoomsToEnd = this.map.getNumZoomLevels() - 1 - this.map.getZoom(); var slider = OpenLayers.Util.createAlphaImageDiv(id, centered.add(-1, zoomsToEnd * this.zoomStopHeight), new OpenLayers.Size(20, 9), imgLocation + "slider.png", "absolute"); this.slider = slider; this.sliderEvents = new OpenLayers.Events(this, slider, null, true, { includeXY: true }); this.sliderEvents.on({ "mousedown": this.zoomBarDown, "mousemove": this.zoomBarDrag, "mouseup": this.zoomBarUp, "dblclick": this.doubleClick, "click": this.doubleClick }); var sz = new OpenLayers.Size(); sz.h = this.zoomStopHeight * this.map.getNumZoomLevels(); sz.w = this.zoomStopWidth; var div = null; if (OpenLayers.Util.alphaHack()) { var id = this.id + "_" + this.map.id; div = OpenLayers.Util.createAlphaImageDiv(id, centered, new OpenLayers.Size(sz.w, this.zoomStopHeight), imgLocation + "zoombar.png", "absolute", null, "crop"); div.style.height = sz.h + "px"; } else { div = OpenLayers.Util.createDiv('OpenLayers_Control_PanZoomBar_Zoombar' + this.map.id, centered, sz, imgLocation + "zoombar.png"); } this.zoombarDiv = div; this.divEvents = new OpenLayers.Events(this, div, null, true, { includeXY: true }); this.divEvents.on({ "mousedown": this.divClick, "mousemove": this.passEventToSlider, "dblclick": this.doubleClick, "click": this.doubleClick }); this.div.appendChild(div); this.startTop = parseInt(div.style.top); this.div.appendChild(slider); this.map.events.register("zoomend", this, this.moveZoomBar); centered = centered.add(0, this.zoomStopHeight * this.map.getNumZoomLevels()); return centered; }, _removeZoomBar: function () { this.sliderEvents.un({ "mousedown": this.zoomBarDown, "mousemove": this.zoomBarDrag, "mouseup": this.zoomBarUp, "dblclick": this.doubleClick, "click": this.doubleClick }); this.sliderEvents.destroy(); this.divEvents.un({ "mousedown": this.divClick, "mousemove": this.passEventToSlider, "dblclick": this.doubleClick, "click": this.doubleClick }); this.divEvents.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); }, passEventToSlider: function (evt) { this.sliderEvents.handleBrowserEvent(evt); }, divClick: function (evt) { if (!OpenLayers.Event.isLeftClick(evt)) { return; } var y = evt.xy.y; var top = OpenLayers.Util.pagePosition(evt.object)[1]; var levels = (y - top) / this.zoomStopHeight; if (this.forceFixedZoomLevel || !this.map.fractionalZoom) { levels = Math.floor(levels); } var zoom = (this.map.getNumZoomLevels() - 1) - levels; zoom = Math.min(Math.max(zoom, 0), this.map.getNumZoomLevels() - 1); this.map.zoomTo(zoom); OpenLayers.Event.stop(evt); }, zoomBarDown: function (evt) { if (!OpenLayers.Event.isLeftClick(evt)) { return; } this.map.events.on({ "mousemove": this.passEventToSlider, "mouseup": this.passEventToSlider, scope: this }); this.mouseDragStart = evt.xy.clone(); this.zoomStart = evt.xy.clone(); this.div.style.cursor = "move"; this.zoombarDiv.offsets = null; OpenLayers.Event.stop(evt); }, zoomBarDrag: function (evt) { if (this.mouseDragStart != null) { var deltaY = this.mouseDragStart.y - evt.xy.y; var offsets = OpenLayers.Util.pagePosition(this.zoombarDiv); if ((evt.clientY - offsets[1]) > 0 && (evt.clientY - offsets[1]) < parseInt(this.zoombarDiv.style.height) - 2) { var newTop = parseInt(this.slider.style.top) - deltaY; this.slider.style.top = newTop + "px"; this.mouseDragStart = evt.xy.clone(); } OpenLayers.Event.stop(evt); } }, zoomBarUp: function (evt) { if (!OpenLayers.Event.isLeftClick(evt)) { return; } if (this.mouseDragStart) { this.div.style.cursor = ""; this.map.events.un({ "mouseup": this.passEventToSlider, "mousemove": this.passEventToSlider, scope: this }); var deltaY = this.zoomStart.y - evt.xy.y; var zoomLevel = this.map.zoom; if (!this.forceFixedZoomLevel && this.map.fractionalZoom) { zoomLevel += deltaY / this.zoomStopHeight; zoomLevel = Math.min(Math.max(zoomLevel, 0), this.map.getNumZoomLevels() - 1); } else { zoomLevel += Math.round(deltaY / this.zoomStopHeight); } this.map.zoomTo(zoomLevel); this.mouseDragStart = null; this.zoomStart = null; OpenLayers.Event.stop(evt); } }, moveZoomBar: function () { var newTop = ((this.map.getNumZoomLevels() - 1) - this.map.getZoom()) * this.zoomStopHeight + this.startTop + 1; this.slider.style.top = newTop + "px"; }, CLASS_NAME: "OpenLayers.Control.PanZoomBar" }); OpenLayers.Control.Permalink = OpenLayers.Class(OpenLayers.Control, { argParserClass: OpenLayers.Control.ArgParser, element: null, base: '', displayProjection: null, initialize: function (element, base, options) { OpenLayers.Control.prototype.initialize.apply(this, [options]); this.element = OpenLayers.Util.getElement(element); this.base = base || document.location.href; }, destroy: function () { if (this.element.parentNode == this.div) { this.div.removeChild(this.element); } this.element = null; this.map.events.unregister('moveend', this, this.updateLink); OpenLayers.Control.prototype.destroy.apply(this, arguments); }, setMap: function (map) { OpenLayers.Control.prototype.setMap.apply(this, arguments); for (var i = 0, len = this.map.controls.length; i < len; i++) { var control = this.map.controls[i]; if (control.CLASS_NAME == this.argParserClass.CLASS_NAME) { if (control.displayProjection != this.displayProjection) { this.displayProjection = control.displayProjection; } break; } } if (i == this.map.controls.length) { this.map.addControl(new this.argParserClass({ 'displayProjection': this.displayProjection })); } }, draw: function () { OpenLayers.Control.prototype.draw.apply(this, arguments); if (!this.element) { this.div.className = this.displayClass; 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 href = this.base; if (href.indexOf('?') != -1) { href = href.substring(0, href.indexOf('?')); } href += '?' + OpenLayers.Util.getParameterString(this.createParams()); this.element.href = href; }, createParams: function (center, zoom, layers) { center = center || this.map.getCenter(); var params = OpenLayers.Util.getParameters(this.base); if (center) { params.zoom = zoom || this.map.getZoom(); var lat = center.lat; var lon = center.lon; if (this.displayProjection) { var mapPosition = OpenLayers.Projection.transform({ x: lon, y: lat }, this.map.getProjectionObject(), this.displayProjection); lon = mapPosition.x; lat = mapPosition.y; } params.lat = Math.round(lat * 100000) / 100000; params.lon = Math.round(lon * 100000) / 100000; layers = layers || this.map.layers; params.layers = ''; for (var i = 0, len = layers.length; i < len; i++) { var layer = layers[i]; if (layer.isBaseLayer) { params.layers += (layer == this.map.baseLayer) ? "B" : "0"; } else { params.layers += (layer.getVisibility()) ? "T" : "F"; } } } return params; }, CLASS_NAME: "OpenLayers.Control.Permalink" }); OpenLayers.Control.ZoomPanel = OpenLayers.Class(OpenLayers.Control.Panel, { initialize: function (options) { OpenLayers.Control.Panel.prototype.initialize.apply(this, [options]); this.addControls([new OpenLayers.Control.ZoomIn(), new OpenLayers.Control.ZoomToMaxExtent(), new OpenLayers.Control.ZoomOut()]); }, CLASS_NAME: "OpenLayers.Control.ZoomPanel" }); OpenLayers.Format.CSWGetDomain = function (options) { options = OpenLayers.Util.applyDefaults(options, OpenLayers.Format.CSWGetDomain.DEFAULTS); var cls = OpenLayers.Format.CSWGetDomain["v" + options.version.replace(/\./g, "_")]; if (!cls) { throw "Unsupported CSWGetDomain version: " + options.version; } return new cls(options); }; OpenLayers.Format.CSWGetDomain.DEFAULTS = { "version": "2.0.2" }; OpenLayers.Format.CSWGetRecords = function (options) { options = OpenLayers.Util.applyDefaults(options, OpenLayers.Format.CSWGetRecords.DEFAULTS); var cls = OpenLayers.Format.CSWGetRecords["v" + options.version.replace(/\./g, "_")]; if (!cls) { throw "Unsupported CSWGetRecords version: " + options.version; } return new cls(options); }; OpenLayers.Format.CSWGetRecords.DEFAULTS = { "version": "2.0.2" }; OpenLayers.Format.JSON = OpenLayers.Class(OpenLayers.Format, { indent: " ", space: " ", newline: "\n", level: 0, pretty: false, initialize: function (options) { OpenLayers.Format.prototype.initialize.apply(this, [options]); }, read: function (json, filter) { try { if (/^[\],:{}\s]*$/.test(json.replace(/\\["\\\/bfnrtu]/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { var object = eval('(' + json + ')'); if (typeof filter === 'function') { function walk(k, v) { if (v && typeof v === 'object') { for (var i in v) { if (v.hasOwnProperty(i)) { v[i] = walk(i, v[i]); } } } return filter(k, v); } object = walk('', object); } if (this.keepData) { this.data = object; } return object; } } catch (e) {} return null; }, write: function (value, pretty) { this.pretty = !! pretty; var json = null; var type = typeof value; if (this.serialize[type]) { try { json = this.serialize[type].apply(this, [value]); } catch (err) { OpenLayers.Console.error("Trouble serializing: " + err); } } return json; }, writeIndent: function () { var pieces = []; if (this.pretty) { for (var i = 0; i < this.level; ++i) { pieces.push(this.indent); } } return pieces.join(''); }, writeNewline: function () { return (this.pretty) ? this.newline : ''; }, writeSpace: function () { return (this.pretty) ? this.space : ''; }, serialize: { 'object': function (object) { if (object == null) { return "null"; } if (object.constructor == Date) { return this.serialize.date.apply(this, [object]); } if (object.constructor == Array) { return this.serialize.array.apply(this, [object]); } var pieces = ['{']; this.level += 1; var key, keyJSON, valueJSON; var addComma = false; for (key in object) { if (object.hasOwnProperty(key)) { keyJSON = OpenLayers.Format.JSON.prototype.write.apply(this, [key, this.pretty]); valueJSON = OpenLayers.Format.JSON.prototype.write.apply(this, [object[key], this.pretty]); if (keyJSON != null && valueJSON != null) { if (addComma) { pieces.push(','); } pieces.push(this.writeNewline(), this.writeIndent(), keyJSON, ':', this.writeSpace(), valueJSON); addComma = true; } } } this.level -= 1; pieces.push(this.writeNewline(), this.writeIndent(), '}'); return pieces.join(''); }, 'array': function (array) { var json; var pieces = ['[']; this.level += 1; for (var i = 0, len = array.length; i < len; ++i) { json = OpenLayers.Format.JSON.prototype.write.apply(this, [array[i], this.pretty]); if (json != null) { if (i > 0) { pieces.push(','); } pieces.push(this.writeNewline(), this.writeIndent(), json); } } this.level -= 1; pieces.push(this.writeNewline(), this.writeIndent(), ']'); return pieces.join(''); }, 'string': function (string) { var m = { '\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"': '\\"', '\\': '\\\\' }; if (/["\\\x00-\x1f]/.test(string)) { return '"' + string.replace(/([\x00-\x1f\\"])/g, function (a, b) { var c = m[b]; if (c) { return c; } c = b.charCodeAt(); return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16); }) + '"'; } return '"' + string + '"'; }, 'number': function (number) { return isFinite(number) ? String(number) : "null"; }, 'boolean': function (bool) { return String(bool); }, 'date': function (date) { function format(number) { return (number < 10) ? '0' + number : number; } return '"' + date.getFullYear() + '-' + format(date.getMonth() + 1) + '-' + format(date.getDate()) + 'T' + format(date.getHours()) + ':' + format(date.getMinutes()) + ':' + format(date.getSeconds()) + '"'; } }, CLASS_NAME: "OpenLayers.Format.JSON" }); OpenLayers.Format.WFST = function (options) { options = OpenLayers.Util.applyDefaults(options, OpenLayers.Format.WFST.DEFAULTS); var cls = OpenLayers.Format.WFST["v" + options.version.replace(/\./g, "_")]; if (!cls) { throw "Unsupported WFST version: " + options.version; } return new cls(options); }; OpenLayers.Format.WFST.DEFAULTS = { "version": "1.0.0" }; OpenLayers.Format.XML = OpenLayers.Class(OpenLayers.Format, { namespaces: null, namespaceAlias: null, defaultPrefix: null, readers: {}, writers: {}, xmldom: null, initialize: function (options) { if (window.ActiveXObject) { this.xmldom = new ActiveXObject("Microsoft.XMLDOM"); } OpenLayers.Format.prototype.initialize.apply(this, [options]); this.namespaces = OpenLayers.Util.extend({}, this.namespaces); this.namespaceAlias = {}; for (var alias in this.namespaces) { this.namespaceAlias[this.namespaces[alias]] = alias; } }, destroy: function () { this.xmldom = null; OpenLayers.Format.prototype.destroy.apply(this, arguments); }, setNamespace: function (alias, uri) { this.namespaces[alias] = uri; this.namespaceAlias[uri] = alias; }, read: function (text) { var index = text.indexOf('<'); if (index > 0) { text = text.substring(index); } var node = OpenLayers.Util.Try(OpenLayers.Function.bind((function () { var xmldom; if (window.ActiveXObject && !this.xmldom) { xmldom = new ActiveXObject("Microsoft.XMLDOM"); } else { xmldom = this.xmldom; } xmldom.loadXML(text); return xmldom; }), this), function () { return new DOMParser().parseFromString(text, 'text/xml'); }, function () { var req = new XMLHttpRequest(); req.open("GET", "data:" + "text/xml" + ";charset=utf-8," + encodeURIComponent(text), false); if (req.overrideMimeType) { req.overrideMimeType("text/xml"); } req.send(null); return req.responseXML; }); if (this.keepData) { this.data = node; } return node; }, write: function (node) { var data; if (this.xmldom) { data = node.xml; } else { var serializer = new XMLSerializer(); if (node.nodeType == 1) { var doc = document.implementation.createDocument("", "", null); if (doc.importNode) { node = doc.importNode(node, true); } doc.appendChild(node); data = serializer.serializeToString(doc); } else { data = serializer.serializeToString(node); } } return data; }, createElementNS: function (uri, name) { var element; if (this.xmldom) { if (typeof uri == "string") { element = this.xmldom.createNode(1, name, uri); } else { element = this.xmldom.createNode(1, name, ""); } } else { element = document.createElementNS(uri, name); } return element; }, createTextNode: function (text) { var node; if (this.xmldom) { node = this.xmldom.createTextNode(text); } else { node = document.createTextNode(text); } return node; }, getElementsByTagNameNS: function (node, uri, name) { var elements = []; if (node.getElementsByTagNameNS) { elements = node.getElementsByTagNameNS(uri, name); } else { var allNodes = node.getElementsByTagName("*"); var potentialNode, fullName; for (var i = 0, len = allNodes.length; i < len; ++i) { potentialNode = allNodes[i]; fullName = (potentialNode.prefix) ? (potentialNode.prefix + ":" + name) : name; if ((name == "*") || (fullName == potentialNode.nodeName)) { if ((uri == "*") || (uri == potentialNode.namespaceURI)) { elements.push(potentialNode); } } } } return elements; }, getAttributeNodeNS: function (node, uri, name) { var attributeNode = null; if (node.getAttributeNodeNS) { attributeNode = node.getAttributeNodeNS(uri, name); } else { var attributes = node.attributes; var potentialNode, fullName; for (var i = 0, len = attributes.length; i < len; ++i) { potentialNode = attributes[i]; if (potentialNode.namespaceURI == uri) { fullName = (potentialNode.prefix) ? (potentialNode.prefix + ":" + name) : name; if (fullName == potentialNode.nodeName) { attributeNode = potentialNode; break; } } } } return attributeNode; }, getAttributeNS: function (node, uri, name) { var attributeValue = ""; if (node.getAttributeNS) { attributeValue = node.getAttributeNS(uri, name) || ""; } else { var attributeNode = this.getAttributeNodeNS(node, uri, name); if (attributeNode) { attributeValue = attributeNode.nodeValue; } } return attributeValue; }, getChildValue: function (node, def) { var value = def || ""; if (node) { for (var child = node.firstChild; child; child = child.nextSibling) { switch (child.nodeType) { case 3: case 4: value += child.nodeValue; } } } return value; }, concatChildValues: function (node, def) { var value = ""; var child = node.firstChild; var childValue; while (child) { childValue = child.nodeValue; if (childValue) { value += childValue; } child = child.nextSibling; } if (value == "" && def != undefined) { value = def; } return value; }, isSimpleContent: function (node) { var simple = true; for (var child = node.firstChild; child; child = child.nextSibling) { if (child.nodeType === 1) { simple = false; break; } } return simple; }, contentType: function (node) { var simple = false, complex = false; var type = OpenLayers.Format.XML.CONTENT_TYPE.EMPTY; for (var child = node.firstChild; child; child = child.nextSibling) { switch (child.nodeType) { case 1: complex = true; break; case 8: break; default: simple = true; } if (complex && simple) { break; } } if (complex && simple) { type = OpenLayers.Format.XML.CONTENT_TYPE.MIXED; } else if (complex) { return OpenLayers.Format.XML.CONTENT_TYPE.COMPLEX; } else if (simple) { return OpenLayers.Format.XML.CONTENT_TYPE.SIMPLE; } return type; }, hasAttributeNS: function (node, uri, name) { var found = false; if (node.hasAttributeNS) { found = node.hasAttributeNS(uri, name); } else { found = !! this.getAttributeNodeNS(node, uri, name); } return found; }, setAttributeNS: function (node, uri, name, value) { if (node.setAttributeNS) { node.setAttributeNS(uri, name, value); } else { if (this.xmldom) { if (uri) { var attribute = node.ownerDocument.createNode(2, name, uri); attribute.nodeValue = value; node.setAttributeNode(attribute); } else { node.setAttribute(name, value); } } else { throw "setAttributeNS not implemented"; } } }, createElementNSPlus: function (name, options) { options = options || {}; var uri = options.uri || this.namespaces[options.prefix]; if (!uri) { var loc = name.indexOf(":"); uri = this.namespaces[name.substring(0, loc)]; } if (!uri) { uri = this.namespaces[this.defaultPrefix]; } var node = this.createElementNS(uri, name); if (options.attributes) { this.setAttributes(node, options.attributes); } var value = options.value; if (value != null) { if (typeof value == "boolean") { value = String(value); } node.appendChild(this.createTextNode(value)); } return node; }, setAttributes: function (node, obj) { var value, uri; for (var name in obj) { if (obj[name] != null && obj[name].toString) { value = obj[name].toString(); uri = this.namespaces[name.substring(0, name.indexOf(":"))] || null; this.setAttributeNS(node, uri, name, value); } } }, readNode: function (node, obj) { if (!obj) { obj = {}; } var group = this.readers[node.namespaceURI ? this.namespaceAlias[node.namespaceURI] : this.defaultPrefix]; if (group) { var local = node.localName || node.nodeName.split(":").pop(); var reader = group[local] || group["*"]; if (reader) { reader.apply(this, [node, obj]); } } return obj; }, readChildNodes: function (node, obj) { if (!obj) { obj = {}; } var children = node.childNodes; var child; for (var i = 0, len = children.length; i < len; ++i) { child = children[i]; if (child.nodeType == 1) { this.readNode(child, obj); } } return obj; }, writeNode: function (name, obj, parent) { var prefix, local; var split = name.indexOf(":"); if (split > 0) { prefix = name.substring(0, split); local = name.substring(split + 1); } else { if (parent) { prefix = this.namespaceAlias[parent.namespaceURI]; } else { prefix = this.defaultPrefix; } local = name; } var child = this.writers[prefix][local].apply(this, [obj]); if (parent) { parent.appendChild(child); } return child; }, getChildEl: function (node, name, uri) { return node && this.getThisOrNextEl(node.firstChild, name, uri); }, getNextEl: function (node, name, uri) { return node && this.getThisOrNextEl(node.nextSibling, name, uri); }, getThisOrNextEl: function (node, name, uri) { outer: for (var sibling = node; sibling; sibling = sibling.nextSibling) { switch (sibling.nodeType) { case 1: if ((!name || name === (sibling.localName || sibling.nodeName.split(":").pop())) && (!uri || uri === sibling.namespaceURI)) { break outer; } sibling = null; break outer; case 3: if (/^\s*$/.test(sibling.nodeValue)) { break; } case 4: case 6: case 12: case 10: case 11: sibling = null; break outer; } } return sibling || null; }, lookupNamespaceURI: function (node, prefix) { var uri = null; if (node) { if (node.lookupNamespaceURI) { uri = node.lookupNamespaceURI(prefix); } else { outer: switch (node.nodeType) { case 1: if (node.namespaceURI !== null && node.prefix === prefix) { uri = node.namespaceURI; break outer; } var len = node.attributes.length; if (len) { var attr; for (var i = 0; i < len; ++i) { attr = node.attributes[i]; if (attr.prefix === "xmlns" && attr.name === "xmlns:" + prefix) { uri = attr.value || null; break outer; } else if (attr.name === "xmlns" && prefix === null) { uri = attr.value || null; break outer; } } } uri = this.lookupNamespaceURI(node.parentNode, prefix); break outer; case 2: uri = this.lookupNamespaceURI(node.ownerElement, prefix); break outer; case 9: uri = this.lookupNamespaceURI(node.documentElement, prefix); break outer; case 6: case 12: case 10: case 11: break outer; default: uri = this.lookupNamespaceURI(node.parentNode, prefix); break outer; } } } return uri; }, 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.Handler = OpenLayers.Class({ id: null, control: null, map: null, keyMask: null, active: false, evt: null, initialize: function (control, callbacks, options) { OpenLayers.Util.extend(this, options); this.control = control; this.callbacks = callbacks; if (control.map) { this.setMap(control.map); } OpenLayers.Util.extend(this, options); this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_"); }, setMap: function (map) { this.map = map; }, checkModifiers: function (evt) { if (this.keyMask == null) { return true; } var keyModifiers = (evt.shiftKey ? OpenLayers.Handler.MOD_SHIFT : 0) | (evt.ctrlKey ? OpenLayers.Handler.MOD_CTRL : 0) | (evt.altKey ? OpenLayers.Handler.MOD_ALT : 0); return (keyModifiers == this.keyMask); }, activate: function () { if (this.active) { return false; } var events = OpenLayers.Events.prototype.BROWSER_EVENTS; for (var i = 0, len = events.length; i < len; i++) { if (this[events[i]]) { this.register(events[i], this[events[i]]); } } this.active = true; return true; }, deactivate: function () { if (!this.active) { return false; } var events = OpenLayers.Events.prototype.BROWSER_EVENTS; for (var i = 0, len = events.length; i < len; i++) { if (this[events[i]]) { this.unregister(events[i], this[events[i]]); } } this.active = false; return true; }, callback: function (name, args) { if (name && this.callbacks[name]) { this.callbacks[name].apply(this.control, args); } }, register: function (name, method) { this.map.events.registerPriority(name, this, method); this.map.events.registerPriority(name, this, this.setEvent); }, unregister: function (name, method) { this.map.events.unregister(name, this, method); this.map.events.unregister(name, this, this.setEvent); }, setEvent: function (evt) { this.evt = evt; return true; }, 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.Map = OpenLayers.Class({ Z_INDEX_BASE: { BaseLayer: 100, Overlay: 325, Feature: 725, Popup: 750, Control: 1000 }, EVENT_TYPES: ["preaddlayer", "addlayer", "removelayer", "changelayer", "movestart", "move", "moveend", "zoomend", "popupopen", "popupclose", "addmarker", "removemarker", "clearmarkers", "mouseover", "mouseout", "mousemove", "dragstart", "drag", "dragend", "changebaselayer"], id: null, fractionalZoom: false, events: null, allOverlays: false, div: null, dragging: false, 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, viewRequestID: 0, tileSize: null, projection: "EPSG:4326", units: 'degrees', resolutions: null, maxResolution: 1.40625, minResolution: null, maxScale: null, minScale: null, maxExtent: null, minExtent: null, restrictedExtent: null, numZoomLevels: 16, theme: null, displayProjection: null, fallThrough: true, panTween: null, eventListeners: null, panMethod: OpenLayers.Easing.Expo.easeOut, panDuration: 50, paddingForPopups: null, initialize: function (div, options) { if (arguments.length === 1 && typeof div === "object") { options = div; div = options && options.div; } this.tileSize = new OpenLayers.Size(OpenLayers.Map.TILE_WIDTH, OpenLayers.Map.TILE_HEIGHT); this.maxExtent = new OpenLayers.Bounds(-180, -90, 180, 90); this.paddingForPopups = new OpenLayers.Bounds(15, 15, 15, 15); this.theme = OpenLayers._getScriptLocation() + 'theme/default/style.css'; OpenLayers.Util.extend(this, options); this.layers = []; this.id = OpenLayers.Util.createUniqueID("OpenLayers.Map_"); this.div = OpenLayers.Util.getElement(div); if (!this.div) { this.div = document.createElement("div"); this.div.style.height = "1px"; this.div.style.width = "1px"; } OpenLayers.Element.addClass(this.div, 'olMap'); var id = this.id + "_OpenLayers_ViewPort"; this.viewPortDiv = OpenLayers.Util.createDiv(id, 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); id = this.id + "_OpenLayers_Container"; this.layerContainerDiv = OpenLayers.Util.createDiv(id); this.layerContainerDiv.style.zIndex = this.Z_INDEX_BASE['Popup'] - 1; this.viewPortDiv.appendChild(this.layerContainerDiv); this.events = new OpenLayers.Events(this, this.div, this.EVENT_TYPES, this.fallThrough, { includeXY: true }); this.updateSize(); if (this.eventListeners instanceof Object) { this.events.on(this.eventListeners); } this.events.register("movestart", this, this.updateSize); if (OpenLayers.String.contains(navigator.appName, "Microsoft")) { this.events.register("resize", this, this.updateSize); } else { this.updateSizeDestroy = OpenLayers.Function.bind(this.updateSize, this); OpenLayers.Event.observe(window, 'resize', this.updateSizeDestroy); } if (this.theme) { var addNode = true; var nodes = document.getElementsByTagName('link'); for (var i = 0, len = nodes.length; i < len; ++i) { if (OpenLayers.Util.isEquivalentUrl(nodes.item(i).href, this.theme)) { addNode = false; break; } } if (addNode) { var cssNode = document.createElement('link'); cssNode.setAttribute('rel', 'stylesheet'); cssNode.setAttribute('type', 'text/css'); cssNode.setAttribute('href', this.theme); document.getElementsByTagName('head')[0].appendChild(cssNode); } } if (this.controls == null) { if (OpenLayers.Control != null) { this.controls = [new OpenLayers.Control.Navigation(), new OpenLayers.Control.PanZoom(), new OpenLayers.Control.ArgParser(), new OpenLayers.Control.Attribution()]; } else { this.controls = []; } } for (var i = 0, len = this.controls.length; i < len; i++) { this.addControlToMap(this.controls[i]); } this.popups = []; this.unloadDestroy = OpenLayers.Function.bind(this.destroy, this); OpenLayers.Event.observe(window, 'unload', this.unloadDestroy); if (options && options.layers) { this.addLayers(options.layers); if (options.center) { this.setCenter(options.center, options.zoom); } } }, render: function (div) { this.div = OpenLayers.Util.getElement(div); OpenLayers.Element.addClass(this.div, 'olMap'); this.events.attachToElement(this.div); this.viewPortDiv.parentNode.removeChild(this.viewPortDiv); this.div.appendChild(this.viewPortDiv); this.updateSize(); }, unloadDestroy: null, updateSizeDestroy: null, destroy: function () { if (!this.unloadDestroy) { return false; } if (this.panTween && this.panTween.playing) { this.panTween.stop(); } OpenLayers.Event.stopObserving(window, 'unload', this.unloadDestroy); this.unloadDestroy = null; if (this.updateSizeDestroy) { OpenLayers.Event.stopObserving(window, 'resize', this.updateSizeDestroy); } else { this.events.unregister("resize", this, this.updateSize); } this.paddingForPopups = null; if (this.controls != null) { for (var i = this.controls.length - 1; i >= 0; --i) { this.controls[i].destroy(); } this.controls = null; } if (this.layers != null) { for (var i = this.layers.length - 1; i >= 0; --i) { this.layers[i].destroy(false); } this.layers = null; } if (this.viewPortDiv) { this.div.removeChild(this.viewPortDiv); } this.viewPortDiv = null; if (this.eventListeners) { this.events.un(this.eventListeners); this.eventListeners = null; } this.events.destroy(); this.events = null; }, setOptions: function (options) { OpenLayers.Util.extend(this, options); }, getTileSize: function () { return this.tileSize; }, getBy: function (array, property, match) { var test = (typeof match.test == "function"); var found = OpenLayers.Array.filter(this[array], function (item) { return item[property] == match || (test && match.test(item[property])); }); return found; }, getLayersBy: function (property, match) { return this.getBy("layers", property, match); }, getLayersByName: function (match) { return this.getLayersBy("name", match); }, getLayersByClass: function (match) { return this.getLayersBy("CLASS_NAME", match); }, getControlsBy: function (property, match) { return this.getBy("controls", property, match); }, getControlsByClass: function (match) { return this.getControlsBy("CLASS_NAME", match); }, getLayer: function (id) { var foundLayer = null; for (var i = 0, len = this.layers.length; i < len; i++) { var layer = this.layers[i]; if (layer.id == id) { foundLayer = layer; break; } } return foundLayer; }, setLayerZIndex: function (layer, zIdx) { layer.setZIndex(this.Z_INDEX_BASE[layer.isBaseLayer ? 'BaseLayer' : 'Overlay'] + zIdx * 5); }, resetLayersZIndex: function () { for (var i = 0, len = this.layers.length; i < len; i++) { var layer = this.layers[i]; this.setLayerZIndex(layer, i); } }, addLayer: function (layer) { for (var i = 0, len = this.layers.length; i < len; i++) { if (this.layers[i] == layer) { var msg = OpenLayers.i18n('layerAlreadyAdded', { 'layerName': layer.name }); OpenLayers.Console.warn(msg); return false; } } if (this.allOverlays) { layer.isBaseLayer = false; } if (this.events.triggerEvent("preaddlayer", { layer: layer }) === false) { return; } layer.div.className = "olLayerDiv"; layer.div.style.overflow = ""; this.setLayerZIndex(layer, this.layers.length); if (layer.isFixed) { this.viewPortDiv.appendChild(layer.div); } else { this.layerContainerDiv.appendChild(layer.div); } this.layers.push(layer); layer.setMap(this); if (layer.isBaseLayer || (this.allOverlays && !this.baseLayer)) { if (this.baseLayer == null) { this.setBaseLayer(layer); } else { layer.setVisibility(false); } } else { layer.redraw(); } this.events.triggerEvent("addlayer", { layer: layer }); layer.afterAdd(); }, addLayers: function (layers) { for (var i = 0, len = layers.length; i < len; i++) { this.addLayer(layers[i]); } }, removeLayer: function (layer, setNewBaseLayer) { if (setNewBaseLayer == null) { setNewBaseLayer = true; } if (layer.isFixed) { this.viewPortDiv.removeChild(layer.div); } else { this.layerContainerDiv.removeChild(layer.div); } OpenLayers.Util.removeItem(this.layers, layer); layer.removeMap(this); layer.map = null; if (this.baseLayer == layer) { this.baseLayer = null; if (setNewBaseLayer) { for (var i = 0, len = this.layers.length; i < len; i++) { var iLayer = this.layers[i]; if (iLayer.isBaseLayer || this.allOverlays) { this.setBaseLayer(iLayer); break; } } } } this.resetLayersZIndex(); this.events.triggerEvent("removelayer", { layer: layer }); }, getNumLayers: function () { return this.layers.length; }, getLayerIndex: function (layer) { return OpenLayers.Util.indexOf(this.layers, layer); }, setLayerIndex: function (layer, idx) { var base = this.getLayerIndex(layer); if (idx < 0) { idx = 0; } else if (idx > this.layers.length) { idx = this.layers.length; } if (base != idx) { this.layers.splice(base, 1); this.layers.splice(idx, 0, layer); for (var i = 0, len = this.layers.length; i < len; i++) { this.setLayerZIndex(this.layers[i], i); } this.events.triggerEvent("changelayer", { layer: layer, property: "order" }); if (this.allOverlays) { if (idx === 0) { this.setBaseLayer(layer); } else if (this.baseLayer !== this.layers[0]) { this.setBaseLayer(this.layers[0]); } } } }, raiseLayer: function (layer, delta) { var idx = this.getLayerIndex(layer) + delta; this.setLayerIndex(layer, idx); }, setBaseLayer: function (newBaseLayer) { if (newBaseLayer != this.baseLayer) { if (OpenLayers.Util.indexOf(this.layers, newBaseLayer) != -1) { var center = this.getCenter(); var newResolution = OpenLayers.Util.getResolutionFromScale(this.getScale(), newBaseLayer.units); if (this.baseLayer != null && !this.allOverlays) { this.baseLayer.setVisibility(false); } this.baseLayer = newBaseLayer; this.viewRequestID++; if (!this.allOverlays || this.baseLayer.visibility) { this.baseLayer.setVisibility(true); } if (center != null) { var newZoom = this.getZoomForResolution(newResolution || this.resolution, true); this.setCenter(center, newZoom, false, true); } this.events.triggerEvent("changebaselayer", { layer: this.baseLayer }); } } }, addControl: function (control, px) { this.controls.push(control); this.addControlToMap(control, px); }, addControls: function (controls, pixels) { var pxs = (arguments.length === 1) ? [] : pixels; for (var i = 0, len = controls.length; i < len; i++) { var ctrl = controls[i]; var px = (pxs[i]) ? pxs[i] : null; this.addControl(ctrl, px); } }, addControlToMap: function (control, px) { control.outsideViewport = (control.div != null); if (this.displayProjection && !control.displayProjection) { control.displayProjection = this.displayProjection; } control.setMap(this); var div = control.draw(px); if (div) { if (!control.outsideViewport) { div.style.zIndex = this.Z_INDEX_BASE['Control'] + this.controls.length; this.viewPortDiv.appendChild(div); } } if (control.autoActivate) { control.activate(); } }, getControl: function (id) { var returnControl = null; for (var i = 0, len = this.controls.length; i < len; i++) { var control = this.controls[i]; if (control.id == id) { returnControl = control; break; } } return returnControl; }, removeControl: function (control) { if ((control) && (control == this.getControl(control.id))) { if (control.div && (control.div.parentNode == this.viewPortDiv)) { this.viewPortDiv.removeChild(control.div); } OpenLayers.Util.removeItem(this.controls, control); } }, addPopup: function (popup, exclusive) { if (exclusive) { for (var i = this.popups.length - 1; i >= 0; --i) { this.removePopup(this.popups[i]); } } popup.map = this; this.popups.push(popup); var popupDiv = popup.draw(); if (popupDiv) { popupDiv.style.zIndex = this.Z_INDEX_BASE['Popup'] + this.popups.length; this.layerContainerDiv.appendChild(popupDiv); } }, removePopup: function (popup) { OpenLayers.Util.removeItem(this.popups, popup); if (popup.div) { try { this.layerContainerDiv.removeChild(popup.div); } catch (e) {} } popup.map = null; }, getSize: function () { var size = null; if (this.size != null) { size = this.size.clone(); } return size; }, updateSize: function () { var newSize = this.getCurrentSize(); if (newSize && !isNaN(newSize.h) && !isNaN(newSize.w)) { this.events.clearMouseCache(); var oldSize = this.getSize(); if (oldSize == null) { this.size = oldSize = newSize; } if (!newSize.equals(oldSize)) { this.size = newSize; for (var i = 0, len = this.layers.length; i < len; i++) { this.layers[i].onMapResize(); } var center = this.getCenter(); if (this.baseLayer != null && center != null) { var zoom = this.getZoom(); this.zoom = null; this.setCenter(center, zoom); } } } }, getCurrentSize: function () { var size = new OpenLayers.Size(this.div.clientWidth, this.div.clientHeight); if (size.w == 0 && size.h == 0 || isNaN(size.w) && isNaN(size.h)) { size.w = parseInt(this.div.style.width); size.h = parseInt(this.div.style.height); } return size; }, calculateBounds: function (center, resolution) { var extent = null; if (center == null) { center = this.getCenter(); } if (resolution == null) { resolution = this.getResolution(); } if ((center != null) && (resolution != null)) { var size = this.getSize(); var w_deg = size.w * resolution; var h_deg = size.h * resolution; extent = new OpenLayers.Bounds(center.lon - w_deg / 2, center.lat - h_deg / 2, center.lon + w_deg / 2, center.lat + h_deg / 2); } return extent; }, getCenter: function () { var center = null; if (this.center) { center = this.center.clone(); } return center; }, getZoom: function () { return this.zoom; }, pan: function (dx, dy, options) { options = OpenLayers.Util.applyDefaults(options, { animate: true, dragging: false }); var centerPx = this.getViewPortPxFromLonLat(this.getCenter()); var newCenterPx = centerPx.add(dx, dy); if (!options.dragging || !newCenterPx.equals(centerPx)) { var newCenterLonLat = this.getLonLatFromViewPortPx(newCenterPx); if (options.animate) { this.panTo(newCenterLonLat); } else { this.setCenter(newCenterLonLat, null, options.dragging); } } }, panTo: function (lonlat) { if (this.panMethod && this.getExtent().scale(this.panRatio).containsLonLat(lonlat)) { if (!this.panTween) { this.panTween = new OpenLayers.Tween(this.panMethod); } var center = this.getCenter(); if (lonlat.lon == center.lon && lonlat.lat == center.lat) { return; } var from = { lon: center.lon, lat: center.lat }; var to = { lon: lonlat.lon, lat: lonlat.lat }; this.panTween.start(from, to, this.panDuration, { callbacks: { start: OpenLayers.Function.bind(function (lonlat) { this.events.triggerEvent("movestart"); }, this), eachStep: OpenLayers.Function.bind(function (lonlat) { lonlat = new OpenLayers.LonLat(lonlat.lon, lonlat.lat); this.moveTo(lonlat, this.zoom, { 'dragging': true, 'noEvent': true }); }, this), done: OpenLayers.Function.bind(function (lonlat) { lonlat = new OpenLayers.LonLat(lonlat.lon, lonlat.lat); this.moveTo(lonlat, this.zoom, { 'noEvent': true }); this.events.triggerEvent("moveend"); }, this) } }); } else { this.setCenter(lonlat); } }, setCenter: function (lonlat, zoom, dragging, forceZoomChange) { this.moveTo(lonlat, zoom, { 'dragging': dragging, 'forceZoomChange': forceZoomChange, 'caller': 'setCenter' }); }, moveTo: function (lonlat, zoom, options) { if (!options) { options = {}; } if (zoom != null) { zoom = parseFloat(zoom); if (!this.fractionalZoom) { zoom = Math.round(zoom); } } var dragging = options.dragging; var forceZoomChange = options.forceZoomChange; var noEvent = options.noEvent; if (this.panTween && options.caller == "setCenter") { this.panTween.stop(); } if (!this.center && !this.isValidLonLat(lonlat)) { lonlat = this.maxExtent.getCenterLonLat(); } if (this.restrictedExtent != null) { if (lonlat == null) { lonlat = this.getCenter(); } if (zoom == null) { zoom = this.getZoom(); } var resolution = this.getResolutionForZoom(zoom); var extent = this.calculateBounds(lonlat, resolution); if (!this.restrictedExtent.containsBounds(extent)) { var maxCenter = this.restrictedExtent.getCenterLonLat(); if (extent.getWidth() > this.restrictedExtent.getWidth()) { lonlat = new OpenLayers.LonLat(maxCenter.lon, lonlat.lat); } else if (extent.left < this.restrictedExtent.left) { lonlat = lonlat.add(this.restrictedExtent.left - extent.left, 0); } else if (extent.right > this.restrictedExtent.right) { lonlat = lonlat.add(this.restrictedExtent.right - extent.right, 0); } if (extent.getHeight() > this.restrictedExtent.getHeight()) { lonlat = new OpenLayers.LonLat(lonlat.lon, maxCenter.lat); } else if (extent.bottom < this.restrictedExtent.bottom) { lonlat = lonlat.add(0, this.restrictedExtent.bottom - extent.bottom); } else if (extent.top > this.restrictedExtent.top) { lonlat = lonlat.add(0, this.restrictedExtent.top - extent.top); } } } var zoomChanged = forceZoomChange || ((this.isValidZoomLevel(zoom)) && (zoom != this.getZoom())); var centerChanged = (this.isValidLonLat(lonlat)) && (!lonlat.equals(this.center)); if (zoomChanged || centerChanged || !dragging) { if (!this.dragging && !noEvent) { this.events.triggerEvent("movestart"); } if (centerChanged) { if ((!zoomChanged) && (this.center)) { this.centerLayerContainer(lonlat); } this.center = lonlat.clone(); } if ((zoomChanged) || (this.layerContainerOrigin == null)) { this.layerContainerOrigin = this.center.clone(); this.layerContainerDiv.style.left = "0px"; this.layerContainerDiv.style.top = "0px"; } if (zoomChanged) { this.zoom = zoom; this.resolution = this.getResolutionForZoom(zoom); this.viewRequestID++; } var bounds = this.getExtent(); if (this.baseLayer.visibility) { this.baseLayer.moveTo(bounds, zoomChanged, dragging); if (dragging) { this.baseLayer.events.triggerEvent("move"); } else { this.baseLayer.events.triggerEvent("moveend", { "zoomChanged": zoomChanged }); } } bounds = this.baseLayer.getExtent(); for (var i = 0, len = this.layers.length; i < len; i++) { var layer = this.layers[i]; if (layer !== this.baseLayer && !layer.isBaseLayer) { var inRange = layer.calculateInRange(); if (layer.inRange != inRange) { layer.inRange = inRange; if (!inRange) { layer.display(false); } this.events.triggerEvent("changelayer", { layer: layer, property: "visibility" }); } if (inRange && layer.visibility) { layer.moveTo(bounds, zoomChanged, dragging); if (dragging) { layer.events.triggerEvent("move"); } else { layer.events.triggerEvent("moveend", { "zoomChanged": zoomChanged }); } } } } if (zoomChanged) { for (var i = 0, len = this.popups.length; i < len; i++) { this.popups[i].updatePosition(); } } this.events.triggerEvent("move"); if (zoomChanged) { this.events.triggerEvent("zoomend"); } } if (!dragging && !noEvent) { this.events.triggerEvent("moveend"); } this.dragging = !! dragging; }, centerLayerContainer: function (lonlat) { var originPx = this.getViewPortPxFromLonLat(this.layerContainerOrigin); var newPx = this.getViewPortPxFromLonLat(lonlat); if ((originPx != null) && (newPx != null)) { this.layerContainerDiv.style.left = Math.round(originPx.x - newPx.x) + "px"; this.layerContainerDiv.style.top = Math.round(originPx.y - newPx.y) + "px"; } }, isValidZoomLevel: function (zoomLevel) { return ((zoomLevel != null) && (zoomLevel >= 0) && (zoomLevel < this.getNumZoomLevels())); }, isValidLonLat: function (lonlat) { var valid = false; if (lonlat != null) { var maxExtent = this.getMaxExtent(); valid = maxExtent.containsLonLat(lonlat); } return valid; }, getProjection: function () { var projection = this.getProjectionObject(); return projection ? projection.getCode() : null; }, getProjectionObject: function () { var projection = null; if (this.baseLayer != null) { projection = this.baseLayer.projection; } return projection; }, getMaxResolution: function () { var maxResolution = null; if (this.baseLayer != null) { maxResolution = this.baseLayer.maxResolution; } return maxResolution; }, getMaxExtent: function (options) { var maxExtent = null; if (options && options.restricted && this.restrictedExtent) { maxExtent = this.restrictedExtent; } else if (this.baseLayer != null) { maxExtent = this.baseLayer.maxExtent; } return maxExtent; }, getNumZoomLevels: function () { var numZoomLevels = null; if (this.baseLayer != null) { numZoomLevels = this.baseLayer.numZoomLevels; } return numZoomLevels; }, getExtent: function () { var extent = null; if (this.baseLayer != null) { extent = this.baseLayer.getExtent(); } return extent; }, getResolution: function () { var resolution = null; if (this.baseLayer != null) { resolution = this.baseLayer.getResolution(); } else if (this.allOverlays === true && this.layers.length > 0) { resolution = this.layers[0].getResolution(); } return resolution; }, getUnits: function () { var units = null; if (this.baseLayer != null) { units = this.baseLayer.units; } return units; }, getScale: function () { var scale = null; if (this.baseLayer != null) { var res = this.getResolution(); var units = this.baseLayer.units; scale = OpenLayers.Util.getScaleFromResolution(res, units); } return scale; }, getZoomForExtent: function (bounds, closest) { var zoom = null; if (this.baseLayer != null) { zoom = this.baseLayer.getZoomForExtent(bounds, closest); } return zoom; }, getResolutionForZoom: function (zoom) { var resolution = null; if (this.baseLayer) { resolution = this.baseLayer.getResolutionForZoom(zoom); } return resolution; }, getZoomForResolution: function (resolution, closest) { var zoom = null; if (this.baseLayer != null) { zoom = this.baseLayer.getZoomForResolution(resolution, closest); } return zoom; }, zoomTo: function (zoom) { // Boundary check added if (zoom != null) { if (zoom < 0) { zoom = 0; } else if (zoom >= this.getNumZoomLevels()) { zoom = this.getNumZoomLevels() - 1; } } if (this.isValidZoomLevel(zoom)) { this.setCenter(null, zoom); } }, zoomIn: function () { this.zoomTo(this.getZoom() + 1); }, zoomOut: function () { this.zoomTo(this.getZoom() - 1); }, zoomToExtent: function (bounds, closest) { var center = bounds.getCenterLonLat(); if (this.baseLayer.wrapDateLine) { var maxExtent = this.getMaxExtent(); bounds = bounds.clone(); while (bounds.right < bounds.left) { bounds.right += maxExtent.getWidth(); } center = bounds.getCenterLonLat().wrapDateLine(maxExtent); } this.setCenter(center, this.getZoomForExtent(bounds, closest)); }, zoomToMaxExtent: function (options) { var restricted = (options) ? options.restricted : true; var maxExtent = this.getMaxExtent({ 'restricted': restricted }); this.zoomToExtent(maxExtent); }, zoomToScale: function (scale, closest) { var res = OpenLayers.Util.getResolutionFromScale(scale, this.baseLayer.units); var size = this.getSize(); var w_deg = size.w * res; var h_deg = size.h * res; var center = this.getCenter(); var extent = new OpenLayers.Bounds(center.lon - w_deg / 2, center.lat - h_deg / 2, center.lon + w_deg / 2, center.lat + h_deg / 2); this.zoomToExtent(extent, closest); }, getLonLatFromViewPortPx: function (viewPortPx) { var lonlat = null; if (this.baseLayer != null) { lonlat = this.baseLayer.getLonLatFromViewPortPx(viewPortPx); } return lonlat; }, getViewPortPxFromLonLat: function (lonlat) { var px = null; if (this.baseLayer != null) { px = this.baseLayer.getViewPortPxFromLonLat(lonlat); } return px; }, getLonLatFromPixel: function (px) { return this.getLonLatFromViewPortPx(px); }, getPixelFromLonLat: function (lonlat) { var px = this.getViewPortPxFromLonLat(lonlat); px.x = Math.round(px.x); px.y = Math.round(px.y); return px; }, getViewPortPxFromLayerPx: function (layerPx) { var viewPortPx = null; if (layerPx != null) { var dX = parseInt(this.layerContainerDiv.style.left); var dY = parseInt(this.layerContainerDiv.style.top); viewPortPx = layerPx.add(dX, dY); } return viewPortPx; }, getLayerPxFromViewPortPx: function (viewPortPx) { var layerPx = null; if (viewPortPx != null) { var dX = -parseInt(this.layerContainerDiv.style.left); var dY = -parseInt(this.layerContainerDiv.style.top); layerPx = viewPortPx.add(dX, dY); if (isNaN(layerPx.x) || isNaN(layerPx.y)) { layerPx = null; } } return layerPx; }, getLonLatFromLayerPx: function (px) { px = this.getViewPortPxFromLayerPx(px); return this.getLonLatFromViewPortPx(px); }, getLayerPxFromLonLat: function (lonlat) { var px = this.getPixelFromLonLat(lonlat); return this.getLayerPxFromViewPortPx(px); }, CLASS_NAME: "OpenLayers.Map" }); OpenLayers.Map.TILE_WIDTH = 256; OpenLayers.Map.TILE_HEIGHT = 256; OpenLayers.Marker = OpenLayers.Class({ icon: null, lonlat: null, events: null, map: null, initialize: function (lonlat, icon) { this.lonlat = lonlat; var newIcon = (icon) ? icon : OpenLayers.Marker.defaultIcon(); if (this.icon == null) { this.icon = newIcon; } else { this.icon.url = newIcon.url; this.icon.size = newIcon.size; this.icon.offset = newIcon.offset; this.icon.calculateOffset = newIcon.calculateOffset; } this.events = new OpenLayers.Events(this, this.icon.imageDiv, null); }, destroy: function () { this.erase(); this.map = null; this.events.destroy(); this.events = null; if (this.icon != null) { this.icon.destroy(); this.icon = null; } }, draw: function (px) { return this.icon.draw(px); }, erase: function () { if (this.icon != null) { this.icon.erase(); } }, moveTo: function (px) { if ((px != null) && (this.icon != null)) { this.icon.moveTo(px); } this.lonlat = this.map.getLonLatFromLayerPx(px); }, isDrawn: function () { var isDrawn = (this.icon && this.icon.isDrawn()); return isDrawn; }, onScreen: function () { var onScreen = false; if (this.map) { var screenBounds = this.map.getExtent(); onScreen = screenBounds.containsLonLat(this.lonlat); } return onScreen; }, inflate: function (inflate) { if (this.icon) { var newSize = new OpenLayers.Size(this.icon.size.w * inflate, this.icon.size.h * inflate); this.icon.setSize(newSize); } }, setOpacity: function (opacity) { this.icon.setOpacity(opacity); }, setUrl: function (url) { this.icon.setUrl(url); }, display: function (display) { this.icon.display(display); }, CLASS_NAME: "OpenLayers.Marker" }); OpenLayers.Marker.defaultIcon = function () { var url = OpenLayers.Util.getImagesLocation() + "marker.png"; var size = new OpenLayers.Size(21, 25); var calculateOffset = function (size) { return new OpenLayers.Pixel(-(size.w / 2), -size.h); }; return new OpenLayers.Icon(url, size, null, calculateOffset); }; OpenLayers.Popup.FramedCloud = OpenLayers.Class(OpenLayers.Popup.Framed, { contentDisplayClass: "olFramedCloudPopupContent", autoSize: true, panMapIfOutOfView: true, imageSize: new OpenLayers.Size(676, 736), isAlphaImage: false, fixedRelativePosition: false, 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(-638, 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(-638, -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(-638, 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(-638, -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(-638, 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(-638, -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(-638, 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(-638, -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(600, 660), initialize: function (id, lonlat, contentSize, contentHTML, anchor, closeBox, closeBoxCallback) { this.imageSrc = OpenLayers.Util.getImagesLocation() + 'cloud-popup-relative.png'; OpenLayers.Popup.Framed.prototype.initialize.apply(this, arguments); this.contentDiv.className = this.contentDisplayClass; }, destroy: function () { OpenLayers.Popup.Framed.prototype.destroy.apply(this, arguments); }, CLASS_NAME: "OpenLayers.Popup.FramedCloud" }); OpenLayers.Request = { DEFAULT_CONFIG: { method: "GET", url: window.location.href, async: true, user: undefined, password: undefined, params: null, proxy: OpenLayers.ProxyHost, headers: {}, data: null, callback: function () {}, success: null, failure: null, scope: null }, events: new OpenLayers.Events(this, null, ["complete", "success", "failure"]), issue: function (config) { var defaultConfig = OpenLayers.Util.extend(this.DEFAULT_CONFIG, { proxy: OpenLayers.ProxyHost }); config = OpenLayers.Util.applyDefaults(config, defaultConfig); var request = new OpenLayers.Request.XMLHttpRequest(); var url = config.url; if (config.params) { var paramString = OpenLayers.Util.getParameterString(config.params); if (paramString.length > 0) { var separator = (url.indexOf('?') > -1) ? '&' : '?'; url += separator + paramString; } } if (config.proxy && (url.indexOf("http") == 0)) { if (typeof config.proxy == "function") { url = config.proxy(url); } else { url = config.proxy + encodeURIComponent(url); } } request.open(config.method, url, config.async, config.user, config.password); for (var header in config.headers) { request.setRequestHeader(header, config.headers[header]); } var events = this.events; var self = this; request.onreadystatechange = function () { if (request.readyState == OpenLayers.Request.XMLHttpRequest.DONE) { var proceed = events.triggerEvent("complete", { request: request, config: config, requestUrl: url }); if (proceed !== false) { self.runCallbacks({ request: request, config: config, requestUrl: url }); } } }; if (config.async === false) { request.send(config.data); } else { window.setTimeout(function () { request.send(config.data); }, 0); } return request; }, runCallbacks: function (options) { var request = options.request; var config = options.config; var complete = (config.scope) ? OpenLayers.Function.bind(config.callback, config.scope) : config.callback; var success; if (config.success) { success = (config.scope) ? OpenLayers.Function.bind(config.success, config.scope) : config.success; } var failure; if (config.failure) { failure = (config.scope) ? OpenLayers.Function.bind(config.failure, config.scope) : config.failure; } complete(request); if (!request.status || (request.status >= 200 && request.status < 300)) { this.events.triggerEvent("success", options); if (success) { success(request); } } if (request.status && (request.status < 200 || request.status >= 300)) { this.events.triggerEvent("failure", options); if (failure) { failure(request); } } }, GET: function (config) { config = OpenLayers.Util.extend(config, { method: "GET" }); return OpenLayers.Request.issue(config); }, POST: function (config) { config = OpenLayers.Util.extend(config, { method: "POST" }); config.headers = config.headers ? config.headers : {}; if (!("CONTENT-TYPE" in OpenLayers.Util.upperCaseObject(config.headers))) { config.headers["Content-Type"] = "application/xml"; } return OpenLayers.Request.issue(config); }, PUT: function (config) { config = OpenLayers.Util.extend(config, { method: "PUT" }); config.headers = config.headers ? config.headers : {}; if (!("CONTENT-TYPE" in OpenLayers.Util.upperCaseObject(config.headers))) { config.headers["Content-Type"] = "application/xml"; } return OpenLayers.Request.issue(config); }, DELETE: function (config) { config = OpenLayers.Util.extend(config, { method: "DELETE" }); return OpenLayers.Request.issue(config); }, HEAD: function (config) { config = OpenLayers.Util.extend(config, { method: "HEAD" }); return OpenLayers.Request.issue(config); }, OPTIONS: function (config) { config = OpenLayers.Util.extend(config, { method: "OPTIONS" }); return OpenLayers.Request.issue(config); } }; OpenLayers.Tile.Image = OpenLayers.Class(OpenLayers.Tile, { url: null, imgDiv: null, frame: null, layerAlphaHack: null, isBackBuffer: false, lastRatio: 1, isFirstDraw: true, backBufferTile: null, initialize: function (layer, position, bounds, url, size) { OpenLayers.Tile.prototype.initialize.apply(this, arguments); this.url = url; this.frame = document.createElement('div'); this.frame.style.overflow = 'hidden'; this.frame.style.position = 'absolute'; this.layerAlphaHack = this.layer.alpha && OpenLayers.Util.alphaHack(); }, destroy: function () { if (this.imgDiv != null) { if (this.layerAlphaHack) { OpenLayers.Event.stopObservingElement(this.imgDiv.childNodes[0]); } OpenLayers.Event.stopObservingElement(this.imgDiv); if (this.imgDiv.parentNode == this.frame) { this.frame.removeChild(this.imgDiv); this.imgDiv.map = null; } this.imgDiv.urls = null; this.imgDiv.src = OpenLayers.Util.getImagesLocation() + "blank.gif"; } this.imgDiv = null; if ((this.frame != null) && (this.frame.parentNode == this.layer.div)) { this.layer.div.removeChild(this.frame); } this.frame = null; if (this.backBufferTile) { this.backBufferTile.destroy(); this.backBufferTile = null; } this.layer.events.unregister("loadend", this, this.resetBackBuffer); OpenLayers.Tile.prototype.destroy.apply(this, arguments); }, clone: function (obj) { if (obj == null) { obj = new OpenLayers.Tile.Image(this.layer, this.position, this.bounds, this.url, this.size); } obj = OpenLayers.Tile.prototype.clone.apply(this, [obj]); obj.imgDiv = null; return obj; }, draw: function () { if (this.layer != this.layer.map.baseLayer && this.layer.reproject) { this.bounds = this.getBoundsFromBaseLayer(this.position); } var drawTile = OpenLayers.Tile.prototype.draw.apply(this, arguments); if (OpenLayers.Util.indexOf(this.layer.SUPPORTED_TRANSITIONS, this.layer.transitionEffect) != -1) { if (drawTile) { if (!this.backBufferTile) { this.backBufferTile = this.clone(); this.backBufferTile.hide(); this.backBufferTile.isBackBuffer = true; this.events.register('loadend', this, this.resetBackBuffer); this.layer.events.register("loadend", this, this.resetBackBuffer); } this.startTransition(); } else { if (this.backBufferTile) { this.backBufferTile.clear(); } } } else { if (drawTile && this.isFirstDraw) { this.events.register('loadend', this, this.showTile); this.isFirstDraw = false; } } if (!drawTile) { return false; } if (this.isLoading) { this.events.triggerEvent("reload"); } else { this.isLoading = true; this.events.triggerEvent("loadstart"); } return this.renderTile(); }, resetBackBuffer: function () { this.showTile(); if (this.backBufferTile && (this.isFirstDraw || !this.layer.numLoadingTiles)) { this.isFirstDraw = false; var maxExtent = this.layer.maxExtent; var withinMaxExtent = (maxExtent && this.bounds.intersectsBounds(maxExtent, false)); if (withinMaxExtent) { this.backBufferTile.position = this.position; this.backBufferTile.bounds = this.bounds; this.backBufferTile.size = this.size; this.backBufferTile.imageSize = this.layer.getImageSize(this.bounds) || this.size; this.backBufferTile.imageOffset = this.layer.imageOffset; this.backBufferTile.resolution = this.layer.getResolution(); this.backBufferTile.renderTile(); } this.backBufferTile.hide(); } }, renderTile: function () { if (this.imgDiv == null) { this.initImgDiv(); } this.imgDiv.viewRequestID = this.layer.map.viewRequestID; if (this.layer.async) { this.layer.getURLasync(this.bounds, this, "url", this.positionImage); } else { if (this.layer.url instanceof Array) { this.imgDiv.urls = this.layer.url.slice(); } this.url = this.layer.getURL(this.bounds); this.positionImage(); } return true; }, positionImage: function () { if (this.layer == null) return; OpenLayers.Util.modifyDOMElement(this.frame, null, this.position, this.size); var imageSize = this.layer.getImageSize(this.bounds); if (this.layerAlphaHack) { OpenLayers.Util.modifyAlphaImageDiv(this.imgDiv, null, null, imageSize, this.url); } else { OpenLayers.Util.modifyDOMElement(this.imgDiv, null, null, imageSize); this.imgDiv.src = this.url; } }, clear: function () { if (this.imgDiv) { this.hide(); if (OpenLayers.Tile.Image.useBlankTile) { this.imgDiv.src = OpenLayers.Util.getImagesLocation() + "blank.gif"; } } }, initImgDiv: function () { var offset = this.layer.imageOffset; var size = this.layer.getImageSize(this.bounds); if (this.layerAlphaHack) { this.imgDiv = OpenLayers.Util.createAlphaImageDiv(null, offset, size, null, "relative", null, null, null, true); } else { this.imgDiv = OpenLayers.Util.createImage(null, offset, size, null, "relative", null, null, true); } this.imgDiv.className = 'olTileImage'; this.frame.style.zIndex = this.isBackBuffer ? 0 : 1; this.frame.appendChild(this.imgDiv); this.layer.div.appendChild(this.frame); if (this.layer.opacity != null) { OpenLayers.Util.modifyDOMElement(this.imgDiv, null, null, null, null, null, null, this.layer.opacity); } this.imgDiv.map = this.layer.map; var onload = function () { if (this.isLoading) { this.isLoading = false; this.events.triggerEvent("loadend"); } }; if (this.layerAlphaHack) { OpenLayers.Event.observe(this.imgDiv.childNodes[0], 'load', OpenLayers.Function.bind(onload, this)); } else { OpenLayers.Event.observe(this.imgDiv, 'load', OpenLayers.Function.bind(onload, this)); } var onerror = function () { if (this.imgDiv._attempts > OpenLayers.IMAGE_RELOAD_ATTEMPTS) { onload.call(this); } }; OpenLayers.Event.observe(this.imgDiv, "error", OpenLayers.Function.bind(onerror, this)); }, checkImgURL: function () { if (this.layer) { var loaded = this.layerAlphaHack ? this.imgDiv.firstChild.src : this.imgDiv.src; if (!OpenLayers.Util.isEquivalentUrl(loaded, this.url)) { this.hide(); } } }, startTransition: function () { if (!this.backBufferTile || !this.backBufferTile.imgDiv) { return; } var ratio = 1; if (this.backBufferTile.resolution) { ratio = this.backBufferTile.resolution / this.layer.getResolution(); } if (ratio != this.lastRatio) { if (this.layer.transitionEffect == 'resize') { var upperLeft = new OpenLayers.LonLat(this.backBufferTile.bounds.left, this.backBufferTile.bounds.top); var size = new OpenLayers.Size(this.backBufferTile.size.w * ratio, this.backBufferTile.size.h * ratio); var px = this.layer.map.getLayerPxFromLonLat(upperLeft); OpenLayers.Util.modifyDOMElement(this.backBufferTile.frame, null, px, size); var imageSize = this.backBufferTile.imageSize; imageSize = new OpenLayers.Size(imageSize.w * ratio, imageSize.h * ratio); var imageOffset = this.backBufferTile.imageOffset; if (imageOffset) { imageOffset = new OpenLayers.Pixel(imageOffset.x * ratio, imageOffset.y * ratio); } OpenLayers.Util.modifyDOMElement(this.backBufferTile.imgDiv, null, imageOffset, imageSize); this.backBufferTile.show(); } } else { if (this.layer.singleTile) { this.backBufferTile.show(); } else { this.backBufferTile.hide(); } } this.lastRatio = ratio; }, show: function () { this.frame.style.display = ''; if (OpenLayers.Util.indexOf(this.layer.SUPPORTED_TRANSITIONS, this.layer.transitionEffect) != -1) { if (navigator.userAgent.toLowerCase().indexOf("gecko") != -1) { this.frame.scrollLeft = this.frame.scrollLeft; } } }, hide: function () { this.frame.style.display = 'none'; }, CLASS_NAME: "OpenLayers.Tile.Image" }); OpenLayers.Tile.Image.useBlankTile = (OpenLayers.Util.getBrowserName() == "safari" || OpenLayers.Util.getBrowserName() == "opera"); OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, { element: null, ovmap: null, size: new OpenLayers.Size(180, 90), layers: null, minRectSize: 15, minRectDisplayClass: "RectReplacement", minRatio: 8, maxRatio: 32, mapOptions: null, autoPan: false, handlers: null, resolutionFactor: 1, initialize: function (options) { this.layers = []; this.handlers = {}; OpenLayers.Control.prototype.initialize.apply(this, [options]); }, destroy: function () { if (!this.mapDiv) { return; } if (this.handlers.click) { this.handlers.click.destroy(); } if (this.handlers.drag) { this.handlers.drag.destroy(); } this.mapDiv.removeChild(this.extentRectangle); this.extentRectangle = null; if (this.rectEvents) { this.rectEvents.destroy(); this.rectEvents = null; } if (this.ovmap) { this.ovmap.destroy(); this.ovmap = null; } this.element.removeChild(this.mapDiv); this.mapDiv = null; this.div.removeChild(this.element); this.element = null; if (this.maximizeDiv) { OpenLayers.Event.stopObservingElement(this.maximizeDiv); this.div.removeChild(this.maximizeDiv); this.maximizeDiv = null; } if (this.minimizeDiv) { OpenLayers.Event.stopObservingElement(this.minimizeDiv); this.div.removeChild(this.minimizeDiv); this.minimizeDiv = null; } this.map.events.un({ "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 (!(this.layers.length > 0)) { if (this.map.baseLayer) { var layer = this.map.baseLayer.clone(); this.layers = [layer]; } else { this.map.events.register("changebaselayer", this, this.baseLayerDraw); return 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 = 1000; this.extentRectangle.className = this.displayClass + 'ExtentRectangle'; this.mapDiv.appendChild(this.extentRectangle); this.element.appendChild(this.mapDiv); this.div.appendChild(this.element); if (!this.outsideViewport) { this.div.className += " " + this.displayClass + 'Container'; var imgLocation = OpenLayers.Util.getImagesLocation(); var img = imgLocation + 'layer-switcher-maximize.png'; this.maximizeDiv = OpenLayers.Util.createAlphaImageDiv(this.displayClass + 'MaximizeButton', null, new OpenLayers.Size(18, 18), img, 'absolute'); this.maximizeDiv.style.display = 'none'; this.maximizeDiv.className = this.displayClass + 'MaximizeButton'; OpenLayers.Event.observe(this.maximizeDiv, 'click', OpenLayers.Function.bindAsEventListener(this.maximizeControl, this)); this.div.appendChild(this.maximizeDiv); var img = imgLocation + 'layer-switcher-minimize.png'; this.minimizeDiv = OpenLayers.Util.createAlphaImageDiv('OpenLayers_Control_minimizeDiv', null, new OpenLayers.Size(18, 18), img, 'absolute'); this.minimizeDiv.style.display = 'none'; this.minimizeDiv.className = this.displayClass + 'MinimizeButton'; OpenLayers.Event.observe(this.minimizeDiv, 'click', OpenLayers.Function.bindAsEventListener(this.minimizeControl, this)); this.div.appendChild(this.minimizeDiv); var eventsToStop = ['dblclick', 'mousedown']; for (var i = 0, len = eventsToStop.length; i < len; i++) { OpenLayers.Event.observe(this.maximizeDiv, eventsToStop[i], OpenLayers.Event.stop); OpenLayers.Event.observe(this.minimizeDiv, eventsToStop[i], OpenLayers.Event.stop); } this.minimizeControl(); } else { this.element.style.display = ''; } if (this.map.getExtent()) { this.update(); } this.map.events.register('moveend', this, this.update); return this.div; }, baseLayerDraw: function () { this.draw(); this.map.events.unregister("changebaselayer", this, this.baseLayerDraw); }, rectDrag: function (px) { var deltaX = this.handlers.drag.last.x - px.x; var deltaY = this.handlers.drag.last.y - px.y; if (deltaX != 0 || deltaY != 0) { var rectTop = this.rectPxBounds.top; var rectLeft = this.rectPxBounds.left; var rectHeight = Math.abs(this.rectPxBounds.getHeight()); var rectWidth = this.rectPxBounds.getWidth(); var newTop = Math.max(0, (rectTop - deltaY)); newTop = Math.min(newTop, this.ovmap.size.h - this.hComp - rectHeight); var newLeft = Math.max(0, (rectLeft - deltaX)); newLeft = Math.min(newLeft, this.ovmap.size.w - this.wComp - rectWidth); this.setRectPxBounds(new OpenLayers.Bounds(newLeft, newTop + rectHeight, newLeft + rectWidth, newTop)); } }, mapDivClick: function (evt) { var pxCenter = this.rectPxBounds.getCenterPixel(); var deltaX = evt.xy.x - pxCenter.x; var deltaY = evt.xy.y - pxCenter.y; var top = this.rectPxBounds.top; var left = this.rectPxBounds.left; var height = Math.abs(this.rectPxBounds.getHeight()); var width = this.rectPxBounds.getWidth(); var newTop = Math.max(0, (top + deltaY)); newTop = Math.min(newTop, this.ovmap.size.h - height); var newLeft = Math.max(0, (left + deltaX)); newLeft = Math.min(newLeft, this.ovmap.size.w - width); this.setRectPxBounds(new OpenLayers.Bounds(newLeft, newTop + height, newLeft + width, newTop)); this.updateMapToRect(); }, maximizeControl: function (e) { this.element.style.display = ''; this.showToggle(false); if (e != null) { OpenLayers.Event.stop(e); } }, minimizeControl: function (e) { this.element.style.display = 'none'; this.showToggle(true); if (e != null) { OpenLayers.Event.stop(e); } }, showToggle: function (minimize) { this.maximizeDiv.style.display = minimize ? '' : 'none'; this.minimizeDiv.style.display = minimize ? 'none' : ''; }, update: function () { if (this.ovmap == null) { this.createMap(); } if (this.autoPan || !this.isSuitableOverview()) { this.updateOverview(); } this.updateRectToMap(); }, isSuitableOverview: function () { var mapExtent = this.map.getExtent(); var maxExtent = this.map.maxExtent; var testExtent = new OpenLayers.Bounds(Math.max(mapExtent.left, maxExtent.left), Math.max(mapExtent.bottom, maxExtent.bottom), Math.min(mapExtent.right, maxExtent.right), Math.min(mapExtent.top, maxExtent.top)); if (this.ovmap.getProjection() != this.map.getProjection()) { testExtent = testExtent.transform(this.map.getProjectionObject(), this.ovmap.getProjectionObject()); } var resRatio = this.ovmap.getResolution() / this.map.getResolution(); return ((resRatio > this.minRatio) && (resRatio <= this.maxRatio) && (this.ovmap.getExtent().containsBounds(testExtent))); }, updateOverview: function () { var mapRes = this.map.getResolution(); var targetRes = this.ovmap.getResolution(); var resRatio = targetRes / mapRes; if (resRatio > this.maxRatio) { targetRes = this.minRatio * mapRes; } else if (resRatio <= this.minRatio) { targetRes = this.maxRatio * mapRes; } var center; if (this.ovmap.getProjection() != this.map.getProjection()) { center = this.map.center.clone(); center.transform(this.map.getProjectionObject(), this.ovmap.getProjectionObject()); } else { center = this.map.center; } this.ovmap.setCenter(center, this.ovmap.getZoomForResolution(targetRes * this.resolutionFactor)); this.updateRectToMap(); }, createMap: function () { var options = OpenLayers.Util.extend({ controls: [], maxResolution: 'auto', fallThrough: false }, this.mapOptions); this.ovmap = new OpenLayers.Map(this.mapDiv, options); OpenLayers.Event.stopObserving(window, 'unload', this.ovmap.unloadDestroy); this.ovmap.addLayers(this.layers); this.ovmap.zoomToMaxExtent(); this.wComp = parseInt(OpenLayers.Element.getStyle(this.extentRectangle, 'border-left-width')) + parseInt(OpenLayers.Element.getStyle(this.extentRectangle, 'border-right-width')); this.wComp = (this.wComp) ? this.wComp : 2; this.hComp = parseInt(OpenLayers.Element.getStyle(this.extentRectangle, 'border-top-width')) + parseInt(OpenLayers.Element.getStyle(this.extentRectangle, 'border-bottom-width')); this.hComp = (this.hComp) ? 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": true, "double": false, "stopSingle": true, "stopDouble": true, "pixelTolerance": 1, map: this.ovmap }); this.handlers.click.activate(); this.rectEvents = new OpenLayers.Events(this, this.extentRectangle, null, true); this.rectEvents.register("mouseover", this, function (e) { if (!this.handlers.drag.active && !this.map.dragging) { this.handlers.drag.activate(); } }); this.rectEvents.register("mouseout", this, function (e) { if (!this.handlers.drag.dragging) { this.handlers.drag.deactivate(); } }); if (this.ovmap.getProjection() != this.map.getProjection()) { var sourceUnits = this.map.getProjectionObject().getUnits() || this.map.units || this.map.baseLayer.units; var targetUnits = this.ovmap.getProjectionObject().getUnits() || this.ovmap.units || this.ovmap.baseLayer.units; this.resolutionFactor = sourceUnits && targetUnits ? OpenLayers.INCHES_PER_UNIT[sourceUnits] / OpenLayers.INCHES_PER_UNIT[targetUnits] : 1; } }, updateRectToMap: function () { var bounds; if (this.ovmap.getProjection() != this.map.getProjection()) { bounds = this.map.getExtent().transform(this.map.getProjectionObject(), this.ovmap.getProjectionObject()); } else { bounds = this.map.getExtent(); } var pxBounds = this.getRectBoundsFromMapBounds(bounds); if (pxBounds) { this.setRectPxBounds(pxBounds); } }, updateMapToRect: function () { var lonLatBounds = this.getMapBoundsFromRectBounds(this.rectPxBounds); if (this.ovmap.getProjection() != this.map.getProjection()) { lonLatBounds = lonLatBounds.transform(this.ovmap.getProjectionObject(), this.map.getProjectionObject()); } this.map.panTo(lonLatBounds.getCenterLonLat()); }, setRectPxBounds: function (pxBounds) { var top = Math.max(pxBounds.top, 0); var left = Math.max(pxBounds.left, 0); var bottom = Math.min(pxBounds.top + Math.abs(pxBounds.getHeight()), this.ovmap.size.h - this.hComp); var right = Math.min(pxBounds.left + pxBounds.getWidth(), this.ovmap.size.w - this.wComp); var width = Math.max(right - left, 0); var height = Math.max(bottom - top, 0); if (width < this.minRectSize || height < this.minRectSize) { this.extentRectangle.className = this.displayClass + this.minRectDisplayClass; var rLeft = left + (width / 2) - (this.minRectSize / 2); var rTop = top + (height / 2) - (this.minRectSize / 2); this.extentRectangle.style.top = Math.round(rTop) + 'px'; this.extentRectangle.style.left = Math.round(rLeft) + 'px'; this.extentRectangle.style.height = this.minRectSize + 'px'; this.extentRectangle.style.width = this.minRectSize + 'px'; } else { this.extentRectangle.className = this.displayClass + 'ExtentRectangle'; this.extentRectangle.style.top = Math.round(top) + 'px'; this.extentRectangle.style.left = Math.round(left) + 'px'; this.extentRectangle.style.height = Math.round(height) + 'px'; this.extentRectangle.style.width = Math.round(width) + 'px'; } this.rectPxBounds = new OpenLayers.Bounds(Math.round(left), Math.round(bottom), Math.round(right), Math.round(top)); }, getRectBoundsFromMapBounds: function (lonLatBounds) { var leftBottomLonLat = new OpenLayers.LonLat(lonLatBounds.left, lonLatBounds.bottom); var rightTopLonLat = new OpenLayers.LonLat(lonLatBounds.right, lonLatBounds.top); var leftBottomPx = this.getOverviewPxFromLonLat(leftBottomLonLat); var rightTopPx = this.getOverviewPxFromLonLat(rightTopLonLat); var bounds = null; if (leftBottomPx && rightTopPx) { bounds = new OpenLayers.Bounds(leftBottomPx.x, leftBottomPx.y, rightTopPx.x, rightTopPx.y); } return bounds; }, getMapBoundsFromRectBounds: function (pxBounds) { var leftBottomPx = new OpenLayers.Pixel(pxBounds.left, pxBounds.bottom); var rightTopPx = new OpenLayers.Pixel(pxBounds.right, pxBounds.top); var leftBottomLonLat = this.getLonLatFromOverviewPx(leftBottomPx); var rightTopLonLat = this.getLonLatFromOverviewPx(rightTopPx); return new OpenLayers.Bounds(leftBottomLonLat.lon, leftBottomLonLat.lat, rightTopLonLat.lon, rightTopLonLat.lat); }, getLonLatFromOverviewPx: function (overviewMapPx) { var size = this.ovmap.size; var res = this.ovmap.getResolution(); var center = this.ovmap.getExtent().getCenterLonLat(); var delta_x = overviewMapPx.x - (size.w / 2); var delta_y = overviewMapPx.y - (size.h / 2); return new OpenLayers.LonLat(center.lon + delta_x * res, center.lat - delta_y * res); }, getOverviewPxFromLonLat: function (lonlat) { var res = this.ovmap.getResolution(); var extent = this.ovmap.getExtent(); var px = null; if (extent) { px = new OpenLayers.Pixel(Math.round(1 / res * (lonlat.lon - extent.left)), Math.round(1 / res * (extent.top - lonlat.lat))); } return px; }, CLASS_NAME: 'OpenLayers.Control.OverviewMap' }); OpenLayers.Feature = OpenLayers.Class({ layer: null, id: null, lonlat: null, data: null, marker: null, popupClass: OpenLayers.Popup.AnchoredBubble, popup: null, initialize: function (layer, lonlat, data) { this.layer = layer; this.lonlat = lonlat; this.data = (data != null) ? data : {}; this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_"); }, destroy: function () { if ((this.layer != null) && (this.layer.map != null)) { if (this.popup != null) { this.layer.map.removePopup(this.popup); } } if (this.layer != null && this.marker != null) { this.layer.removeMarker(this.marker); } this.layer = null; this.id = null; this.lonlat = null; this.data = null; if (this.marker != null) { this.destroyMarker(this.marker); this.marker = null; } if (this.popup != null) { this.destroyPopup(this.popup); this.popup = null; } }, onScreen: function () { var onScreen = false; if ((this.layer != null) && (this.layer.map != null)) { var screenBounds = this.layer.map.getExtent(); onScreen = screenBounds.containsLonLat(this.lonlat); } return onScreen; }, createMarker: function () { if (this.lonlat != null) { this.marker = new OpenLayers.Marker(this.lonlat, this.data.icon); } return this.marker; }, destroyMarker: function () { this.marker.destroy(); }, createPopup: function (closeBox) { if (this.lonlat != null) { var id = this.id + "_popup"; var anchor = (this.marker) ? this.marker.icon : null; if (!this.popup) { this.popup = new this.popupClass(id, this.lonlat, this.data.popupSize, this.data.popupContentHTML, anchor, closeBox); } if (this.data.overflow != null) { this.popup.contentDiv.style.overflow = this.data.overflow; } this.popup.feature = this; } return this.popup; }, destroyPopup: function () { if (this.popup) { this.popup.feature = null; this.popup.destroy(); this.popup = null; } }, CLASS_NAME: "OpenLayers.Feature" }); 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, initialize: function (options) { OpenLayers.Format.XML.prototype.initialize.apply(this, [options]); }, read: function (data) { if (typeof data == "string") { data = OpenLayers.Format.XML.prototype.read.apply(this, [data]); } if (data && data.nodeType == 9) { data = data.documentElement; } var obj = {}; this.readNode(data, obj); return obj; }, readers: { "csw": { "GetDomainResponse": function (node, obj) { this.readChildNodes(node, obj); }, "DomainValues": function (node, obj) { if (!(obj.DomainValues instanceof Array)) { obj.DomainValues = []; } var attrs = node.attributes; var domainValue = {}; for (var i = 0, len = attrs.length; i < len; ++i) { domainValue[attrs[i].name] = attrs[i].nodeValue; } this.readChildNodes(node, domainValue); obj.DomainValues.push(domainValue); }, "PropertyName": function (node, obj) { obj.PropertyName = this.getChildValue(node); }, "ParameterName": function (node, obj) { obj.ParameterName = this.getChildValue(node); }, "ListOfValues": function (node, obj) { if (!(obj.ListOfValues instanceof Array)) { obj.ListOfValues = []; } this.readChildNodes(node, obj.ListOfValues); }, "Value": function (node, obj) { var attrs = node.attributes; var value = {} for (var i = 0, len = attrs.length; i < len; ++i) { value[attrs[i].name] = attrs[i].nodeValue; } value.value = this.getChildValue(node); obj.push({ Value: value }); }, "ConceptualScheme": function (node, obj) { obj.ConceptualScheme = {}; this.readChildNodes(node, obj.ConceptualScheme); }, "Name": function (node, obj) { obj.Name = this.getChildValue(node); }, "Document": function (node, obj) { obj.Document = this.getChildValue(node); }, "Authority": function (node, obj) { obj.Authority = this.getChildValue(node); }, "RangeOfValues": function (node, obj) { obj.RangeOfValues = {}; this.readChildNodes(node, obj.RangeOfValues); }, "MinValue": function (node, obj) { var attrs = node.attributes; var value = {} for (var i = 0, len = attrs.length; i < len; ++i) { value[attrs[i].name] = attrs[i].nodeValue; } value.value = this.getChildValue(node); obj.MinValue = value; }, "MaxValue": function (node, obj) { var attrs = node.attributes; var value = {} for (var i = 0, len = attrs.length; i < len; ++i) { value[attrs[i].name] = attrs[i].nodeValue; } value.value = this.getChildValue(node); obj.MaxValue = value; } } }, write: function (options) { var node = this.writeNode("csw:GetDomain", options); return OpenLayers.Format.XML.prototype.write.apply(this, [node]); }, writers: { "csw": { "GetDomain": function (options) { var node = this.createElementNSPlus("csw:GetDomain", { attributes: { service: "CSW", version: this.version } }); if (options.PropertyName || this.PropertyName) { this.writeNode("csw:PropertyName", options.PropertyName || this.PropertyName, node); } else if (options.ParameterName || this.ParameterName) { this.writeNode("csw:ParameterName", options.ParameterName || this.ParameterName, node); } this.readChildNodes(node, options); return node; }, "PropertyName": function (value) { var node = this.createElementNSPlus("csw:PropertyName", { value: value }); return node; }, "ParameterName": function (value) { var node = this.createElementNSPlus("csw:ParameterName", { value: value }); return node; } } }, CLASS_NAME: "OpenLayers.Format.CSWGetDomain.v2_0_2" }); OpenLayers.Format.OWSCommon = {}; OpenLayers.Format.OWSCommon.v1_1_0 = OpenLayers.Class(OpenLayers.Format.XML, { namespaces: { ows: "http://www.opengis.net/ows/1.1", xlink: "http://www.w3.org/1999/xlink" }, readers: { "ows": { "ServiceIdentification": function (node, obj) { obj.serviceIdentification = {}; this.readChildNodes(node, obj.serviceIdentification); }, "Title": function (node, serviceIdentification) { serviceIdentification.title = this.getChildValue(node); }, "Abstract": function (node, serviceIdentification) { serviceIdentification["abstract"] = this.getChildValue(node); }, "Keywords": function (node, serviceIdentification) { serviceIdentification.keywords = {}; this.readChildNodes(node, serviceIdentification.keywords); }, "Keyword": function (node, keywords) { keywords[this.getChildValue(node)] = true; }, "ServiceType": function (node, serviceIdentification) { serviceIdentification.serviceType = { codeSpace: node.getAttribute('codeSpace'), value: this.getChildValue(node) }; }, "ServiceTypeVersion": function (node, serviceIdentification) { serviceIdentification.serviceTypeVersion = this.getChildValue(node); }, "Fees": function (node, serviceIdentification) { serviceIdentification.fees = this.getChildValue(node); }, "AccessConstraints": function (node, serviceIdentification) { serviceIdentification.accessConstraints = this.getChildValue(node); }, "ServiceProvider": function (node, obj) { obj.serviceProvider = {}; this.readChildNodes(node, obj.serviceProvider); }, "ProviderName": function (node, serviceProvider) { serviceProvider.providerName = this.getChildValue(node); }, "ProviderSite": function (node, serviceProvider) { serviceProvider.providerSite = this.getAttributeNS(node, this.namespaces.xlink, "href"); }, "ServiceContact": function (node, serviceProvider) { serviceProvider.serviceContact = {}; this.readChildNodes(node, serviceProvider.serviceContact); }, "IndividualName": function (node, serviceContact) { serviceContact.individualName = this.getChildValue(node); }, "PositionName": function (node, serviceContact) { serviceContact.positionName = this.getChildValue(node); }, "ContactInfo": function (node, serviceContact) { serviceContact.contactInfo = {}; this.readChildNodes(node, serviceContact.contactInfo); }, "Phone": function (node, contactInfo) { contactInfo.phone = {}; this.readChildNodes(node, contactInfo.phone); }, "Voice": function (node, phone) { phone.voice = this.getChildValue(node); }, "Address": function (node, contactInfo) { contactInfo.address = {}; this.readChildNodes(node, contactInfo.address); }, "DeliveryPoint": function (node, address) { address.deliveryPoint = this.getChildValue(node); }, "City": function (node, address) { address.city = this.getChildValue(node); }, "AdministrativeArea": function (node, address) { address.administrativeArea = this.getChildValue(node); }, "PostalCode": function (node, address) { address.postalCode = this.getChildValue(node); }, "Country": function (node, address) { address.country = this.getChildValue(node); }, "ElectronicMailAddress": function (node, address) { address.electronicMailAddress = this.getChildValue(node); }, "Role": function (node, serviceContact) { serviceContact.role = this.getChildValue(node); }, "OperationsMetadata": function (node, obj) { obj.operationsMetadata = {}; this.readChildNodes(node, obj.operationsMetadata); }, "Operation": function (node, operationsMetadata) { var name = node.getAttribute("name"); operationsMetadata[name] = {}; this.readChildNodes(node, operationsMetadata[name]); }, "DCP": function (node, operation) { operation.dcp = {}; this.readChildNodes(node, operation.dcp); }, "HTTP": function (node, dcp) { dcp.http = {}; this.readChildNodes(node, dcp.http); }, "Get": function (node, http) { http.get = this.getAttributeNS(node, this.namespaces.xlink, "href"); }, "Post": function (node, http) { http.post = this.getAttributeNS(node, this.namespaces.xlink, "href"); }, "Parameter": function (node, operation) { if (!operation.parameters) { operation.parameters = {}; } var name = node.getAttribute("name"); operation.parameters[name] = {}; this.readChildNodes(node, operation.parameters[name]); }, "AllowedValues": function (node, parameter) { parameter.allowedValues = {}; this.readChildNodes(node, parameter.allowedValues); }, "AnyValue": function (node, parameter) { parameter.anyValue = true; }, "Value": function (node, allowedValues) { allowedValues[this.getChildValue(node)] = true; }, "Range": function (node, allowedValues) { allowedValues.range = {}; this.readChildNodes(node, allowedValues.range); }, "MinimumValue": function (node, range) { range.minValue = this.getChildValue(node); }, "MaximumValue": function (node, range) { range.maxValue = this.getChildValue(node); } } }, CLASS_NAME: "OpenLayers.Format.OWSCommon.v1_1_0" }); OpenLayers.Format.SOSCapabilities = OpenLayers.Class(OpenLayers.Format.XML, { defaultVersion: "1.0.0", version: null, parser: null, initialize: function (options) { OpenLayers.Format.XML.prototype.initialize.apply(this, [options]); this.options = options; }, read: function (data) { if (typeof data == "string") { data = OpenLayers.Format.XML.prototype.read.apply(this, [data]); } var root = data.documentElement; var version = this.version || root.getAttribute("version") || this.defaultVersion; if (!this.parser || this.parser.version !== version) { var constr = OpenLayers.Format.SOSCapabilities["v" + version.replace(/\./g, "_")]; if (!constr) { throw "Can't find a SOS capabilities parser for version " + version; } var parser = new constr(this.options); } var capabilities = parser.read(data); capabilities.version = version; return capabilities; }, CLASS_NAME: "OpenLayers.Format.SOSCapabilities" }); OpenLayers.Format.WFSCapabilities = OpenLayers.Class(OpenLayers.Format.XML, { defaultVersion: "1.1.0", version: null, initialize: function (options) { OpenLayers.Format.XML.prototype.initialize.apply(this, [options]); this.options = options; }, read: function (data) { if (typeof data == "string") { data = OpenLayers.Format.XML.prototype.read.apply(this, [data]); } var root = data.documentElement; var version = this.version; if (!version) { version = root.getAttribute("version"); if (!version) { version = this.defaultVersion; } } var constr = OpenLayers.Format.WFSCapabilities["v" + version.replace(/\./g, "_")]; if (!constr) { throw "Can't find a WFS capabilities parser for version " + version; } var parser = new constr(this.options); var capabilities = parser.read(data); capabilities.version = version; return capabilities; }, CLASS_NAME: "OpenLayers.Format.WFSCapabilities" }); OpenLayers.Format.WFSDescribeFeatureType = OpenLayers.Class(OpenLayers.Format.XML, { namespaces: { xsd: "http://www.w3.org/2001/XMLSchema" }, initialize: function (options) { OpenLayers.Format.XML.prototype.initialize.apply(this, [options]); }, readers: { "xsd": { "schema": function (node, obj) { var complexTypes = []; var customTypes = {}; var schema = { complexTypes: complexTypes, customTypes: customTypes }; this.readChildNodes(node, schema); var attributes = node.attributes; var attr, name; for (var i = 0, len = attributes.length; i < len; ++i) { attr = attributes[i]; name = attr.name; if (name.indexOf("xmlns") == 0) { this.setNamespace(name.split(":")[1] || "", attr.value); } else { obj[name] = attr.value; } } obj.featureTypes = complexTypes; obj.targetPrefix = this.namespaceAlias[obj.targetNamespace]; var complexType, customType; for (var i = 0, len = complexTypes.length; i < len; ++i) { complexType = complexTypes[i]; customType = customTypes[complexType.typeName]; if (customTypes[complexType.typeName]) { complexType.typeName = customType.name; } } }, "complexType": function (node, obj) { var complexType = { "typeName": node.getAttribute("name") }; this.readChildNodes(node, complexType); obj.complexTypes.push(complexType); }, "complexContent": function (node, obj) { this.readChildNodes(node, obj); }, "extension": function (node, obj) { this.readChildNodes(node, obj); }, "sequence": function (node, obj) { var sequence = { elements: [] }; this.readChildNodes(node, sequence); obj.properties = sequence.elements; }, "element": function (node, obj) { if (obj.elements) { var element = {}; var attributes = node.attributes; var attr; for (var i = 0, len = attributes.length; i < len; ++i) { attr = attributes[i]; element[attr.name] = attr.value; } var type = element.type; if (!type) { type = {}; this.readChildNodes(node, type); element.restriction = type; element.type = type.base; } var fullType = type.base || type; element.localType = fullType.split(":").pop(); obj.elements.push(element); } if (obj.complexTypes) { var type = node.getAttribute("type"); var localType = type.split(":").pop(); obj.customTypes[localType] = { "name": node.getAttribute("name"), "type": type }; } }, "simpleType": function (node, obj) { this.readChildNodes(node, obj); }, "restriction": function (node, obj) { obj.base = node.getAttribute("base"); this.readRestriction(node, obj); } } }, readRestriction: function (node, obj) { var children = node.childNodes; var child, nodeName, value; for (var i = 0, len = children.length; i < len; ++i) { child = children[i]; if (child.nodeType == 1) { nodeName = child.nodeName.split(":").pop(); value = child.getAttribute("value"); if (!obj[nodeName]) { obj[nodeName] = value; } else { if (typeof obj[nodeName] == "string") { obj[nodeName] = [obj[nodeName]]; } obj[nodeName].push(value); } } } }, read: function (data) { if (typeof data == "string") { data = OpenLayers.Format.XML.prototype.read.apply(this, [data]); } if (data && data.nodeType == 9) { data = data.documentElement; } var schema = {}; this.readNode(data, schema); return schema; }, CLASS_NAME: "OpenLayers.Format.WFSDescribeFeatureType" }); 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" }, defaultPrefix: "wfs", version: null, schemaLocations: null, srsName: null, extractAttributes: true, xy: true, stateName: null, initialize: function (options) { 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, [options]); }, getSrsName: function (feature, options) { var srsName = options && options.srsName; if (!srsName) { if (feature && feature.layer) { srsName = feature.layer.projection.getCode(); } else { srsName = this.srsName; } } return srsName; }, read: function (data) { if (typeof data == "string") { data = OpenLayers.Format.XML.prototype.read.apply(this, [data]); } if (data && data.nodeType == 9) { data = data.documentElement; } var obj = {}; if (data) { this.readNode(data, obj); } if (obj.features) { obj = obj.features; } return obj; }, readers: { "wfs": { "FeatureCollection": function (node, obj) { obj.features = []; this.readChildNodes(node, obj); } } }, write: function (features) { var node = this.writeNode("wfs:Transaction", features); var value = this.schemaLocationAttr(); if (value) { this.setAttributeNS(node, this.namespaces["xsi"], "xsi:schemaLocation", value) } return OpenLayers.Format.XML.prototype.write.apply(this, [node]); }, writers: { "wfs": { "GetFeature": function (options) { var node = this.createElementNSPlus("wfs:GetFeature", { attributes: { service: "WFS", version: this.version, outputFormat: options && options.outputFormat, maxFeatures: options && options.maxFeatures, "xsi:schemaLocation": this.schemaLocationAttr(options) } }); this.writeNode("Query", options, node); return node; }, "Transaction": function (features) { var node = this.createElementNSPlus("wfs:Transaction", { attributes: { service: "WFS", version: this.version } }); if (features) { var name, feature; for (var i = 0, len = features.length; i < len; ++i) { feature = features[i]; name = this.stateName[feature.state]; if (name) { this.writeNode(name, feature, node); } } } return node; }, "Insert": function (feature) { var node = this.createElementNSPlus("wfs:Insert"); this.srsName = this.getSrsName(feature); this.writeNode("feature:_typeName", feature, node); return node; }, "Update": function (feature) { var node = this.createElementNSPlus("wfs:Update", { attributes: { typeName: (this.featureNS ? this.featurePrefix + ":" : "") + this.featureType } }); if (this.featureNS) { node.setAttribute("xmlns:" + this.featurePrefix, this.featureNS); } if (this.geometryName !== null) { this.writeNode("Property", { name: this.geometryName, value: feature }, node); } for (var key in feature.attributes) { if (feature.attributes[key] !== undefined) { this.writeNode("Property", { name: key, value: feature.attributes[key] }, node); } } this.writeNode("ogc:Filter", new OpenLayers.Filter.FeatureId({ fids: [feature.fid] }), node); return node; }, "Property": function (obj) { var node = this.createElementNSPlus("wfs:Property"); this.writeNode("Name", obj.name, node); if (obj.value !== null) { this.writeNode("Value", obj.value, node); } return node; }, "Name": function (name) { return this.createElementNSPlus("wfs:Name", { value: name }); }, "Value": function (obj) { var node; if (obj instanceof OpenLayers.Feature.Vector) { node = this.createElementNSPlus("wfs:Value"); this.srsName = this.getSrsName(obj); var geom = this.writeNode("feature:_geometry", obj.geometry).firstChild; node.appendChild(geom); } else { node = this.createElementNSPlus("wfs:Value", { value: obj }); } return node; }, "Delete": function (feature) { var node = this.createElementNSPlus("wfs:Delete", { attributes: { typeName: (this.featureNS ? this.featurePrefix + ":" : "") + this.featureType } }); if (this.featureNS) { node.setAttribute("xmlns:" + this.featurePrefix, this.featureNS); } this.writeNode("ogc:Filter", new OpenLayers.Filter.FeatureId({ fids: [feature.fid] }), node); return node; } } }, schemaLocationAttr: function (options) { options = OpenLayers.Util.extend({ featurePrefix: this.featurePrefix, schema: this.schema }, options); var schemaLocations = OpenLayers.Util.extend({}, this.schemaLocations); if (options.schema) { schemaLocations[options.featurePrefix] = options.schema; } var parts = []; var uri; for (var key in schemaLocations) { uri = this.namespaces[key]; if (uri) { parts.push(uri + " " + schemaLocations[key]); } } var value = parts.join(" ") || undefined; return value; }, setFilterProperty: function (filter) { if (filter.filters) { for (var i = 0, len = filter.filters.length; i < len; ++i) { this.setFilterProperty(filter.filters[i]); } } else { if (filter instanceof OpenLayers.Filter.Spatial) { filter.property = this.geometryName; } } }, CLASS_NAME: "OpenLayers.Format.WFST.v1" }); OpenLayers.Format.WMC = OpenLayers.Class({ defaultVersion: "1.1.0", version: null, layerOptions: null, layerParams: null, parser: null, initialize: function (options) { OpenLayers.Util.extend(this, options); this.options = options; }, read: function (data, options) { if (typeof data == "string") { data = OpenLayers.Format.XML.prototype.read.apply(this, [data]); } var root = data.documentElement; var version = this.version; if (!version) { version = root.getAttribute("version"); } var parser = this.getParser(version); var context = parser.read(data, options); var map; if (options && options.map) { this.context = context; if (options.map instanceof OpenLayers.Map) { map = this.mergeContextToMap(context, options.map); } else { var mapOptions = options.map; if (OpenLayers.Util.isElement(mapOptions) || typeof mapOptions == "string") { mapOptions = { div: mapOptions }; } map = this.contextToMap(context, mapOptions); } } else { map = context; } return map; }, getParser: function (version) { var v = version || this.version || this.defaultVersion; if (!this.parser || this.parser.VERSION != v) { var format = OpenLayers.Format.WMC["v" + v.replace(/\./g, "_")]; if (!format) { throw "Can't find a WMC parser for version " + v; } this.parser = new format(this.options); } return this.parser; }, getLayerFromContext: function (layerContext) { var i, len; var options = { queryable: layerContext.queryable, visibility: layerContext.visibility, maxExtent: layerContext.maxExtent, numZoomLevels: layerContext.numZoomLevels, units: layerContext.units, isBaseLayer: layerContext.isBaseLayer, opacity: layerContext.opacity, displayInLayerSwitcher: layerContext.displayInLayerSwitcher, singleTile: layerContext.singleTile, minScale: layerContext.minScale, maxScale: layerContext.maxScale }; if (this.layerOptions) { OpenLayers.Util.applyDefaults(options, this.layerOptions); } var params = { layers: layerContext.name, transparent: layerContext.transparent, version: layerContext.version }; if (layerContext.formats && layerContext.formats.length > 0) { params.format = layerContext.formats[0].value; for (i = 0, len = layerContext.formats.length; i < len; i++) { var format = layerContext.formats[i]; if (format.current == true) { params.format = format.value; break; } } } if (layerContext.styles && layerContext.styles.length > 0) { for (i = 0, len = layerContext.styles.length; i < len; i++) { var style = layerContext.styles[i]; if (style.current == true) { if (style.href) { params.sld = style.href; } else if (style.body) { params.sld_body = style.body; } else { params.styles = style.name; } break; } } } if (this.layerParams) { OpenLayers.Util.applyDefaults(params, this.layerParams); } var layer = new OpenLayers.Layer.WMS(layerContext.title || layerContext.name, layerContext.url, params, options); return layer; }, getLayersFromContext: function (layersContext) { var layers = []; for (var i = 0, len = layersContext.length; i < len; i++) { layers.push(this.getLayerFromContext(layersContext[i])); } return layers; }, contextToMap: function (context, options) { options = OpenLayers.Util.applyDefaults({ maxExtent: context.maxExtent, projection: context.projection }, options); var map = new OpenLayers.Map(options); map.addLayers(this.getLayersFromContext(context.layersContext)); map.setCenter(context.bounds.getCenterLonLat(), map.getZoomForExtent(context.bounds, true)); return map; }, mergeContextToMap: function (context, map) { map.addLayers(this.getLayersFromContext(context.layersContext)); return map; }, write: function (obj, options) { obj = this.toContext(obj); var version = options && options.version; var parser = this.getParser(version); var wmc = parser.write(obj, options); return wmc; }, layerToContext: function (layer) { var parser = this.getParser(); var layerContext = { queryable: layer.queryable, visibility: layer.visibility, name: layer.params["LAYERS"], title: layer.name, metadataURL: layer.metadataURL, version: layer.params["VERSION"], url: layer.url, maxExtent: layer.maxExtent, transparent: layer.params["TRANSPARENT"], numZoomLevels: layer.numZoomLevels, units: layer.units, isBaseLayer: layer.isBaseLayer, opacity: layer.opacity, displayInLayerSwitcher: layer.displayInLayerSwitcher, singleTile: layer.singleTile, minScale: (layer.options.resolutions || layer.options.scales || layer.options.maxResolution || layer.options.minScale) ? layer.minScale : undefined, maxScale: (layer.options.resolutions || layer.options.scales || layer.options.minResolution || layer.options.maxScale) ? layer.maxScale : undefined, formats: [{ value: layer.params["FORMAT"], current: true }], styles: [{ href: layer.params["SLD"], body: layer.params["SLD_BODY"], name: layer.params["STYLES"] || parser.defaultStyleName, title: parser.defaultStyleTitle, current: true }] }; return layerContext; }, toContext: function (obj) { var context = {}; var layers = obj.layers; if (obj.CLASS_NAME == "OpenLayers.Map") { context.bounds = obj.getExtent(); context.maxExtent = obj.maxExtent; context.projection = obj.projection; context.size = obj.getSize(); } else { OpenLayers.Util.applyDefaults(context, obj); if (context.layers != undefined) { delete(context.layers); } } if (context.layersContext == undefined) { context.layersContext = []; } if (layers != undefined && layers instanceof Array) { for (var i = 0, len = layers.length; i < len; i++) { var layer = layers[i]; if (layer instanceof OpenLayers.Layer.WMS) { context.layersContext.push(this.layerToContext(layer)); } } } return context; }, CLASS_NAME: "OpenLayers.Format.WMC" }); OpenLayers.Format.WMSCapabilities = OpenLayers.Class(OpenLayers.Format.XML, { defaultVersion: "1.1.1", version: null, parser: null, initialize: function (options) { OpenLayers.Format.XML.prototype.initialize.apply(this, [options]); this.options = options; }, read: function (data) { if (typeof data == "string") { data = OpenLayers.Format.XML.prototype.read.apply(this, [data]); } var root = data.documentElement; var version = this.version || root.getAttribute("version") || this.defaultVersion; if (!this.parser || this.parser.version !== version) { var constr = OpenLayers.Format.WMSCapabilities["v" + version.replace(/\./g, "_")]; if (!constr) { throw "Can't find a WMS capabilities parser for version " + version; } var parser = new constr(this.options); } var capabilities = parser.read(data); capabilities.version = version; return capabilities; }, CLASS_NAME: "OpenLayers.Format.WMSCapabilities" }); OpenLayers.Format.WMSDescribeLayer = OpenLayers.Class(OpenLayers.Format.XML, { defaultVersion: "1.1.1", version: null, initialize: function (options) { OpenLayers.Format.XML.prototype.initialize.apply(this, [options]); this.options = options; }, read: function (data) { if (typeof data == "string") { data = OpenLayers.Format.XML.prototype.read.apply(this, [data]); } var root = data.documentElement; var version = this.version; if (!version) { version = root.getAttribute("version"); if (!version) { version = this.defaultVersion; } } if (version == "1.1.1" || version == "1.1.0") { version = "1.1"; } var constructor = OpenLayers.Format.WMSDescribeLayer["v" + version.replace(/\./g, "_")]; if (!constructor) { throw "Can't find a WMS DescribeLayer parser for version " + version; } var parser = new constructor(this.options); var describelayer = parser.read(data); describelayer.version = version; return describelayer; }, CLASS_NAME: "OpenLayers.Format.WMSDescribeLayer" }); 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, initialize: function (options) { OpenLayers.Format.XML.prototype.initialize.apply(this, arguments); OpenLayers.Util.extend(this, options); this.options = options; }, read: function (data) { var result; if (typeof data == "string") { data = OpenLayers.Format.XML.prototype.read.apply(this, [data]); } var root = data.documentElement; if (root) { var scope = this; var read = this["read_" + root.nodeName]; if (read) { result = read.call(this, root); } else { result = new OpenLayers.Format.GML((this.options ? this.options : {})).read(data); } } else { result = data; } return result; }, read_msGMLOutput: function (data) { var response = []; var layerNodes = this.getSiblingNodesByTagCriteria(data, this.layerIdentifier); if (layerNodes) { for (var i = 0, len = layerNodes.length; i < len; ++i) { var node = layerNodes[i]; var layerName = node.nodeName; if (node.prefix) { layerName = layerName.split(':')[1]; } var layerName = layerName.replace(this.layerIdentifier, ''); var featureNodes = this.getSiblingNodesByTagCriteria(node, this.featureIdentifier); if (featureNodes) { for (var j = 0; j < featureNodes.length; j++) { var featureNode = featureNodes[j]; var geomInfo = this.parseGeometry(featureNode); var attributes = this.parseAttributes(featureNode); var feature = new OpenLayers.Feature.Vector(geomInfo.geometry, attributes, null); feature.bounds = geomInfo.bounds; feature.type = layerName; response.push(feature); } } } } return response; }, read_FeatureInfoResponse: function (data) { var response = []; var featureNodes = this.getElementsByTagNameNS(data, '*', 'FIELDS'); for (var i = 0, len = featureNodes.length; i < len; i++) { var featureNode = featureNodes[i]; var geom = null; var attributes = {}; for (var j = 0, jlen = featureNode.attributes.length; j < jlen; j++) { var attribute = featureNode.attributes[j]; attributes[attribute.nodeName] = attribute.nodeValue; } response.push(new OpenLayers.Feature.Vector(geom, attributes, null)); } return response; }, getSiblingNodesByTagCriteria: function (node, criteria) { var nodes = []; var children, tagName, n, matchNodes, child; if (node && node.hasChildNodes()) { children = node.childNodes; n = children.length; for (var k = 0; k < n; k++) { child = children[k]; while (child && child.nodeType != 1) { child = child.nextSibling; k++; } tagName = (child ? child.nodeName : ''); if (tagName.length > 0 && tagName.indexOf(criteria) > -1) { nodes.push(child); } else { matchNodes = this.getSiblingNodesByTagCriteria(child, criteria); if (matchNodes.length > 0) { (nodes.length == 0) ? nodes = matchNodes : nodes.push(matchNodes); } } } } return nodes; }, parseAttributes: function (node) { var attributes = {}; if (node.nodeType == 1) { var children = node.childNodes; n = children.length; for (var i = 0; i < n; ++i) { var child = children[i]; if (child.nodeType == 1) { var grandchildren = child.childNodes; if (grandchildren.length == 1) { var grandchild = grandchildren[0]; if (grandchild.nodeType == 3 || grandchild.nodeType == 4) { var name = (child.prefix) ? child.nodeName.split(":")[1] : child.nodeName; var value = grandchild.nodeValue.replace(this.regExes.trimSpace, ""); attributes[name] = value; } } } } } return attributes; }, parseGeometry: function (node) { if (!this.gmlFormat) { this.gmlFormat = new OpenLayers.Format.GML(); } var feature = this.gmlFormat.parseFeature(node); var geometry, bounds = null; if (feature && feature.geometry) { geometry = feature.geometry.clone(); bounds = feature.bounds && feature.bounds.clone(); feature.destroy(); } return { geometry: geometry, bounds: bounds }; }, CLASS_NAME: "OpenLayers.Format.WMSGetFeatureInfo" }); OpenLayers.Handler.Click = OpenLayers.Class(OpenLayers.Handler, { delay: 300, single: true, 'double': false, pixelTolerance: 0, stopSingle: false, stopDouble: false, timerId: null, down: null, rightclickTimerId: null, initialize: function (control, callbacks, options) { OpenLayers.Handler.prototype.initialize.apply(this, arguments); if (this.pixelTolerance != null) { this.mousedown = function (evt) { this.down = evt.xy; return true; }; } }, mousedown: null, mouseup: function (evt) { var propagate = true; if (this.checkModifiers(evt) && this.control.handleRightClicks && OpenLayers.Event.isRightClick(evt)) { propagate = this.rightclick(evt); } return propagate; }, rightclick: function (evt) { if (this.passesTolerance(evt)) { if (this.rightclickTimerId != null) { this.clearTimer(); this.callback('dblrightclick', [evt]); return !this.stopDouble; } else { var clickEvent = this['double'] ? OpenLayers.Util.extend({}, evt) : this.callback('rightclick', [evt]); var delayedRightCall = OpenLayers.Function.bind(this.delayedRightCall, this, clickEvent); this.rightclickTimerId = window.setTimeout(delayedRightCall, this.delay); } } return !this.stopSingle; }, delayedRightCall: function (evt) { this.rightclickTimerId = null; if (evt) { this.callback('rightclick', [evt]); } return !this.stopSingle; }, dblclick: function (evt) { if (this.passesTolerance(evt)) { if (this["double"]) { this.callback('dblclick', [evt]); } this.clearTimer(); } return !this.stopDouble; }, click: function (evt) { if (this.passesTolerance(evt)) { if (this.timerId != null) { this.clearTimer(); } else { var clickEvent = this.single ? OpenLayers.Util.extend({}, evt) : null; this.timerId = window.setTimeout(OpenLayers.Function.bind(this.delayedCall, this, clickEvent), this.delay); } } return !this.stopSingle; }, passesTolerance: function (evt) { var passes = true; if (this.pixelTolerance != null && this.down) { var dpx = Math.sqrt(Math.pow(this.down.x - evt.xy.x, 2) + Math.pow(this.down.y - evt.xy.y, 2)); if (dpx > this.pixelTolerance) { passes = false; } } return passes; }, clearTimer: function () { if (this.timerId != null) { window.clearTimeout(this.timerId); this.timerId = null; } if (this.rightclickTimerId != null) { window.clearTimeout(this.rightclickTimerId); this.rightclickTimerId = null; } }, delayedCall: function (evt) { this.timerId = null; if (evt) { this.callback('click', [evt]); } }, deactivate: function () { var deactivated = false; if (OpenLayers.Handler.prototype.deactivate.apply(this, arguments)) { this.clearTimer(); this.down = null; deactivated = true; } return deactivated; }, CLASS_NAME: "OpenLayers.Handler.Click" }); OpenLayers.Handler.Drag = OpenLayers.Class(OpenLayers.Handler, { started: false, stopDown: true, dragging: false, last: null, start: null, oldOnselectstart: null, interval: 0, timeoutId: null, documentDrag: false, documentEvents: null, initialize: function (control, callbacks, options) { OpenLayers.Handler.prototype.initialize.apply(this, arguments); }, down: function (evt) {}, move: function (evt) {}, up: function (evt) {}, out: function (evt) {}, mousedown: function (evt) { var propagate = true; this.dragging = false; if (this.checkModifiers(evt) && OpenLayers.Event.isLeftClick(evt)) { this.started = true; this.start = evt.xy; this.last = evt.xy; OpenLayers.Element.addClass(this.map.viewPortDiv, "olDragDown"); this.down(evt); this.callback("down", [evt.xy]); OpenLayers.Event.stop(evt); if (!this.oldOnselectstart) { this.oldOnselectstart = (document.onselectstart) ? document.onselectstart : OpenLayers.Function.True; document.onselectstart = OpenLayers.Function.False; } propagate = !this.stopDown; } else { this.started = false; this.start = null; this.last = null; } return propagate; }, mousemove: function (evt) { if (this.started && !this.timeoutId && (evt.xy.x != this.last.x || evt.xy.y != this.last.y)) { if (this.documentDrag === true && this.documentEvents) { if (evt.element === document) { this.adjustXY(evt); this.setEvent(evt); } else { this.destroyDocumentEvents(); } } if (this.interval > 0) { this.timeoutId = setTimeout(OpenLayers.Function.bind(this.removeTimeout, this), this.interval); } this.dragging = true; this.move(evt); this.callback("move", [evt.xy]); if (!this.oldOnselectstart) { this.oldOnselectstart = document.onselectstart; document.onselectstart = OpenLayers.Function.False; } this.last = this.evt.xy; } return true; }, removeTimeout: function () { this.timeoutId = null; }, mouseup: function (evt) { if (this.started) { if (this.documentDrag === true && this.documentEvents) { this.adjustXY(evt); this.destroyDocumentEvents(); } var dragged = (this.start != this.last); this.started = false; this.dragging = false; OpenLayers.Element.removeClass(this.map.viewPortDiv, "olDragDown"); this.up(evt); this.callback("up", [evt.xy]); if (dragged) { this.callback("done", [evt.xy]); } document.onselectstart = this.oldOnselectstart; } return true; }, mouseout: function (evt) { if (this.started && OpenLayers.Util.mouseLeft(evt, this.map.div)) { if (this.documentDrag === true) { this.documentEvents = new OpenLayers.Events(this, document, null, null, { includeXY: true }); this.documentEvents.on({ mousemove: this.mousemove, mouseup: this.mouseup }); OpenLayers.Element.addClass(document.body, "olDragDown"); } else { var dragged = (this.start != this.last); this.started = false; this.dragging = false; OpenLayers.Element.removeClass(this.map.viewPortDiv, "olDragDown"); this.out(evt); this.callback("out", []); if (dragged) { this.callback("done", [evt.xy]); } if (document.onselectstart) { document.onselectstart = this.oldOnselectstart; } } } return true; }, click: function (evt) { return (this.start == this.last); }, activate: function () { var activated = false; if (OpenLayers.Handler.prototype.activate.apply(this, arguments)) { this.dragging = false; activated = true; } return activated; }, deactivate: function () { var deactivated = false; if (OpenLayers.Handler.prototype.deactivate.apply(this, arguments)) { this.started = false; this.dragging = false; this.start = null; this.last = null; deactivated = true; OpenLayers.Element.removeClass(this.map.viewPortDiv, "olDragDown"); } return deactivated; }, adjustXY: function (evt) { var pos = OpenLayers.Util.pagePosition(this.map.div); evt.xy.x -= pos[0]; evt.xy.y -= pos[1]; }, destroyDocumentEvents: function () { OpenLayers.Element.removeClass(document.body, "olDragDown"); this.documentEvents.destroy(); this.documentEvents = null; }, 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 } }, feature: null, lastFeature: null, down: null, up: null, clickTolerance: 4, geometryTypes: null, stopClick: true, stopDown: true, stopUp: false, initialize: function (control, layer, callbacks, options) { OpenLayers.Handler.prototype.initialize.apply(this, [control, callbacks, options]); this.layer = layer; }, mousedown: function (evt) { this.down = evt.xy; return this.handle(evt) ? !this.stopDown : true; }, mouseup: function (evt) { this.up = evt.xy; return this.handle(evt) ? !this.stopUp : true; }, click: function (evt) { return this.handle(evt) ? !this.stopClick : true; }, mousemove: function (evt) { if (!this.callbacks['over'] && !this.callbacks['out']) { return true; } this.handle(evt); return true; }, dblclick: function (evt) { return !this.handle(evt); }, geometryTypeMatches: function (feature) { return this.geometryTypes == null || OpenLayers.Util.indexOf(this.geometryTypes, feature.geometry.CLASS_NAME) > -1; }, handle: function (evt) { if (this.feature && !this.feature.layer) { this.feature = null; } var type = evt.type; var handled = false; var previouslyIn = !! (this.feature); var click = (type == "click" || type == "dblclick"); this.feature = this.layer.getFeatureFromEvent(evt); if (this.feature && !this.feature.layer) { this.feature = null; } if (this.lastFeature && !this.lastFeature.layer) { this.lastFeature = null; } if (this.feature) { var inNew = (this.feature != this.lastFeature); if (this.geometryTypeMatches(this.feature)) { if (previouslyIn && inNew) { if (this.lastFeature) { this.triggerCallback(type, 'out', [this.lastFeature]); } this.triggerCallback(type, 'in', [this.feature]); } else if (!previouslyIn || click) { this.triggerCallback(type, 'in', [this.feature]); } this.lastFeature = this.feature; handled = true; } else { if (this.lastFeature && (previouslyIn && inNew || click)) { this.triggerCallback(type, 'out', [this.lastFeature]); } this.feature = null; } } else { if (this.lastFeature && (previouslyIn || click)) { this.triggerCallback(type, 'out', [this.lastFeature]); } } return handled; }, triggerCallback: function (type, mode, args) { var key = this.EVENTMAP[type][mode]; if (key) { if (type == 'click' && this.up && this.down) { var dpx = Math.sqrt(Math.pow(this.up.x - this.down.x, 2) + Math.pow(this.up.y - this.down.y, 2)); if (dpx <= this.clickTolerance) { this.callback(key, args); } } else { this.callback(key, args); } } }, activate: function () { var activated = false; if (OpenLayers.Handler.prototype.activate.apply(this, arguments)) { this.moveLayerToTop(); this.map.events.on({ "removelayer": this.handleMapEvents, "changelayer": this.handleMapEvents, scope: this }); activated = true; } return activated; }, deactivate: function () { var deactivated = false; if (OpenLayers.Handler.prototype.deactivate.apply(this, arguments)) { this.moveLayerBack(); this.feature = null; this.lastFeature = null; this.down = null; this.up = null; this.map.events.un({ "removelayer": this.handleMapEvents, "changelayer": this.handleMapEvents, scope: this }); deactivated = true; } return deactivated; }, handleMapEvents: function (evt) { if (!evt.property || evt.property == "order") { this.moveLayerToTop(); } }, moveLayerToTop: function () { var index = Math.max(this.map.Z_INDEX_BASE['Feature'] - 1, this.layer.getZIndex()) + 1; this.layer.setZIndex(index); }, moveLayerBack: function () { var index = this.layer.getZIndex() - 1; if (index >= this.map.Z_INDEX_BASE['Feature']) { this.layer.setZIndex(index); } else { this.map.setLayerZIndex(this.layer, this.map.getLayerIndex(this.layer)); } }, CLASS_NAME: "OpenLayers.Handler.Feature" }); OpenLayers.Handler.Hover = OpenLayers.Class(OpenLayers.Handler, { delay: 500, pixelTolerance: null, stopMove: false, px: null, timerId: null, initialize: function (control, callbacks, options) { OpenLayers.Handler.prototype.initialize.apply(this, arguments); }, mousemove: function (evt) { if (this.passesTolerance(evt.xy)) { this.clearTimer(); this.callback('move', [evt]); this.px = evt.xy; evt = OpenLayers.Util.extend({}, evt); this.timerId = window.setTimeout(OpenLayers.Function.bind(this.delayedCall, this, evt), this.delay); } return !this.stopMove; }, mouseout: function (evt) { if (OpenLayers.Util.mouseLeft(evt, this.map.div)) { this.clearTimer(); this.callback('move', [evt]); } return true; }, passesTolerance: function (px) { var passes = true; if (this.pixelTolerance && this.px) { var dpx = Math.sqrt(Math.pow(this.px.x - px.x, 2) + Math.pow(this.px.y - px.y, 2)); if (dpx < this.pixelTolerance) { passes = false; } } return passes; }, clearTimer: function () { if (this.timerId != null) { window.clearTimeout(this.timerId); this.timerId = null; } }, delayedCall: function (evt) { this.callback('pause', [evt]); }, deactivate: function () { var deactivated = false; if (OpenLayers.Handler.prototype.deactivate.apply(this, arguments)) { this.clearTimer(); deactivated = true; } return deactivated; }, CLASS_NAME: "OpenLayers.Handler.Hover" }); OpenLayers.Handler.Keyboard = OpenLayers.Class(OpenLayers.Handler, { KEY_EVENTS: ["keydown", "keyup"], eventListener: null, initialize: function (control, callbacks, options) { 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)) { for (var i = 0, len = this.KEY_EVENTS.length; i < len; i++) { OpenLayers.Event.observe(document, this.KEY_EVENTS[i], this.eventListener); } return true; } else { return false; } }, deactivate: function () { var deactivated = false; if (OpenLayers.Handler.prototype.deactivate.apply(this, arguments)) { for (var i = 0, len = this.KEY_EVENTS.length; i < len; i++) { OpenLayers.Event.stopObserving(document, this.KEY_EVENTS[i], this.eventListener); } deactivated = true; } return deactivated; }, handleKeyEvent: function (evt) { if (this.checkModifiers(evt)) { this.callback(evt.type, [evt]); } }, CLASS_NAME: "OpenLayers.Handler.Keyboard" }); OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, { wheelListener: null, mousePosition: null, interval: 0, delta: 0, cumulative: true, initialize: function (control, callbacks, options) { 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 (e) { if (!this.map || !this.checkModifiers(e)) { return; } var overScrollableDiv = false; var overLayerDiv = false; var overMapDiv = false; var elem = OpenLayers.Event.element(e); while ((elem != null) && !overMapDiv && !overScrollableDiv) { if (!overScrollableDiv) { try { if (elem.currentStyle) { overflow = elem.currentStyle["overflow"]; } else { var style = document.defaultView.getComputedStyle(elem, null); var overflow = style.getPropertyValue("overflow"); } overScrollableDiv = (overflow && (overflow == "auto") || (overflow == "scroll")); } catch (err) {} } if (!overLayerDiv) { for (var i = 0, len = this.map.layers.length; i < len; i++) { if (elem == this.map.layers[i].div || elem == this.map.layers[i].pane) { overLayerDiv = true; break; } } } overMapDiv = (elem == this.map.div); elem = elem.parentNode; } if (!overScrollableDiv && overMapDiv) { if (overLayerDiv) { var delta = 0; if (!e) { e = window.event; } if (e.wheelDelta) { delta = e.wheelDelta / 120; if (window.opera && window.opera.version() < 9.2) { delta = -delta; } } else if (e.detail) { delta = -e.detail / 3; } this.delta = this.delta + delta; if (this.interval) { window.clearTimeout(this._timeoutId); this._timeoutId = window.setTimeout(OpenLayers.Function.bind(function () { this.wheelZoom(e); }, this), this.interval); } else { this.wheelZoom(e); } } OpenLayers.Event.stop(e); } }, wheelZoom: function (e) { var delta = this.delta; this.delta = 0; if (delta) { if (this.mousePosition) { e.xy = this.mousePosition; } if (!e.xy) { e.xy = this.map.getPixelFromLonLat(this.map.getCenter()); } if (delta < 0) { this.callback("down", [e, this.cumulative ? delta : -1]); } else { this.callback("up", [e, this.cumulative ? delta : 1]); } } }, mousemove: function (evt) { this.mousePosition = evt.xy; }, activate: function (evt) { if (OpenLayers.Handler.prototype.activate.apply(this, arguments)) { var wheelListener = this.wheelListener; OpenLayers.Event.observe(window, "DOMMouseScroll", wheelListener); OpenLayers.Event.observe(window, "mousewheel", wheelListener); OpenLayers.Event.observe(document, "mousewheel", wheelListener); return true; } else { return false; } }, deactivate: function (evt) { if (OpenLayers.Handler.prototype.deactivate.apply(this, arguments)) { var wheelListener = this.wheelListener; OpenLayers.Event.stopObserving(window, "DOMMouseScroll", wheelListener); OpenLayers.Event.stopObserving(window, "mousewheel", wheelListener); OpenLayers.Event.stopObserving(document, "mousewheel", wheelListener); return true; } else { return false; } }, CLASS_NAME: "OpenLayers.Handler.MouseWheel" }); OpenLayers.Layer = OpenLayers.Class({ id: null, name: null, div: null, opacity: null, alwaysInRange: null, EVENT_TYPES: ["loadstart", "loadend", "loadcancel", "visibilitychanged", "move", "moveend"], events: null, map: null, isBaseLayer: false, alpha: false, displayInLayerSwitcher: true, visibility: true, attribution: null, inRange: false, imageSize: null, imageOffset: 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: false, wrapDateLine: false, transitionEffect: null, SUPPORTED_TRANSITIONS: ['resize'], initialize: function (name, options) { this.addOptions(options); this.name = name; if (this.id == null) { 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.EVENT_TYPES); if (this.eventListeners instanceof Object) { this.events.on(this.eventListeners); } } if (this.wrapDateLine) { this.displayOutsideMaxExtent = true; } }, destroy: function (setNewBaseLayer) { if (setNewBaseLayer == null) { setNewBaseLayer = true; } if (this.map != null) { this.map.removeLayer(this, setNewBaseLayer); } this.projection = null; this.map = null; this.name = null; this.div = null; this.options = null; if (this.events) { if (this.eventListeners) { this.events.un(this.eventListeners); } this.events.destroy(); } this.eventListeners = null; this.events = null; }, clone: function (obj) { if (obj == null) { obj = new OpenLayers.Layer(this.name, this.getOptions()); } OpenLayers.Util.applyDefaults(obj, this); obj.map = null; return obj; }, getOptions: function () { var options = {}; for (var o in this.options) { options[o] = this[o]; } return options; }, setName: function (newName) { if (newName != this.name) { this.name = newName; if (this.map != null) { this.map.events.triggerEvent("changelayer", { layer: this, property: "name" }); } } }, addOptions: function (newOptions) { if (this.options == null) { this.options = {}; } OpenLayers.Util.extend(this.options, newOptions); OpenLayers.Util.extend(this, newOptions); }, onMapResize: function () {}, redraw: function () { var redrawn = false; if (this.map) { this.inRange = this.calculateInRange(); var extent = this.getExtent(); if (extent && this.inRange && this.visibility) { var zoomChanged = true; this.moveTo(extent, zoomChanged, false); this.events.triggerEvent("moveend", { "zoomChanged": zoomChanged }); redrawn = true; } } return redrawn; }, moveTo: function (bounds, zoomChanged, dragging) { var display = this.visibility; if (!this.isBaseLayer) { display = display && this.inRange; } this.display(display); }, setMap: function (map) { if (this.map == null) { this.map = map; this.maxExtent = this.maxExtent || this.map.maxExtent; this.projection = this.projection || this.map.projection; if (this.projection && typeof this.projection == "string") { this.projection = new OpenLayers.Projection(this.projection); } this.units = this.projection.getUnits() || this.units || this.map.units; this.initResolutions(); if (!this.isBaseLayer) { this.inRange = this.calculateInRange(); var show = ((this.visibility) && (this.inRange)); this.div.style.display = show ? "" : "none"; } this.setTileSize(); } }, afterAdd: function () {}, removeMap: function (map) {}, getImageSize: function (bounds) { return (this.imageSize || this.tileSize); }, setTileSize: function (size) { var tileSize = (size) ? size : ((this.tileSize) ? this.tileSize : this.map.getTileSize()); this.tileSize = tileSize; if (this.gutter) { this.imageOffset = new OpenLayers.Pixel(-this.gutter, -this.gutter); this.imageSize = new OpenLayers.Size(tileSize.w + (2 * this.gutter), tileSize.h + (2 * this.gutter)); } }, getVisibility: function () { return this.visibility; }, setVisibility: function (visibility) { if (visibility != this.visibility) { this.visibility = visibility; this.display(visibility); this.redraw(); if (this.map != null) { this.map.events.triggerEvent("changelayer", { layer: this, property: "visibility" }); } this.events.triggerEvent("visibilitychanged"); } }, display: function (display) { if (display != (this.div.style.display != "none")) { this.div.style.display = (display && this.calculateInRange()) ? "block" : "none"; } }, calculateInRange: function () { var inRange = false; if (this.alwaysInRange) { inRange = true; } else { if (this.map) { var resolution = this.map.getResolution(); inRange = ((resolution >= this.minResolution) && (resolution <= this.maxResolution)); } } return inRange; }, setIsBaseLayer: function (isBaseLayer) { if (isBaseLayer != this.isBaseLayer) { this.isBaseLayer = isBaseLayer; if (this.map != null) { this.map.events.triggerEvent("changebaselayer", { layer: this }); } } }, initResolutions: function () { var props = new Array('projection', 'units', 'scales', 'resolutions', 'maxScale', 'minScale', 'maxResolution', 'minResolution', 'minExtent', 'maxExtent', 'numZoomLevels', 'maxZoomLevel'); var notScaleProps = ['projection', 'units']; var useInRange = false; var confProps = {}; for (var i = 0, len = props.length; i < len; i++) { var property = props[i]; if (this.options[property] && OpenLayers.Util.indexOf(notScaleProps, property) == -1) { useInRange = true; } confProps[property] = this.options[property] || this.map[property]; } if (this.alwaysInRange == null) { this.alwaysInRange = !useInRange; } if ((this.options.minScale != null || this.options.maxScale != null) && this.options.scales == null) { confProps.scales = null; } if ((this.options.minResolution != null || this.options.maxResolution != null) && this.options.resolutions == null) { confProps.resolutions = null; } if ((!confProps.numZoomLevels) && (confProps.maxZoomLevel)) { confProps.numZoomLevels = confProps.maxZoomLevel + 1; } if ((confProps.scales != null) || (confProps.resolutions != null)) { if (confProps.scales != null) { confProps.resolutions = []; for (var i = 0, len = confProps.scales.length; i < len; i++) { var scale = confProps.scales[i]; confProps.resolutions[i] = OpenLayers.Util.getResolutionFromScale(scale, confProps.units); } } confProps.numZoomLevels = confProps.resolutions.length; } else { if (confProps.minScale) { confProps.maxResolution = OpenLayers.Util.getResolutionFromScale(confProps.minScale, confProps.units); } else if (confProps.maxResolution == "auto") { var viewSize = this.map.getSize(); var wRes = confProps.maxExtent.getWidth() / viewSize.w; var hRes = confProps.maxExtent.getHeight() / viewSize.h; confProps.maxResolution = Math.max(wRes, hRes); } if (confProps.maxScale != null) { confProps.minResolution = OpenLayers.Util.getResolutionFromScale(confProps.maxScale, confProps.units); } else if ((confProps.minResolution == "auto") && (confProps.minExtent != null)) { var viewSize = this.map.getSize(); var wRes = confProps.minExtent.getWidth() / viewSize.w; var hRes = confProps.minExtent.getHeight() / viewSize.h; confProps.minResolution = Math.max(wRes, hRes); } if (confProps.minResolution != null && this.options.numZoomLevels == undefined) { var ratio = confProps.maxResolution / confProps.minResolution; confProps.numZoomLevels = Math.floor(Math.log(ratio) / Math.log(2)) + 1; } confProps.resolutions = new Array(confProps.numZoomLevels); var base = 2; if (typeof confProps.minResolution == "number" && confProps.numZoomLevels > 1) { base = Math.pow((confProps.maxResolution / confProps.minResolution), (1 / (confProps.numZoomLevels - 1))); } for (var i = 0; i < confProps.numZoomLevels; i++) { var res = confProps.maxResolution / Math.pow(base, i); confProps.resolutions[i] = res; } } confProps.resolutions.sort(function (a, b) { return (b - a); }); this.resolutions = confProps.resolutions; this.maxResolution = confProps.resolutions[0]; var lastIndex = confProps.resolutions.length - 1; this.minResolution = confProps.resolutions[lastIndex]; this.scales = []; for (var i = 0, len = confProps.resolutions.length; i < len; i++) { this.scales[i] = OpenLayers.Util.getScaleFromResolution(confProps.resolutions[i], confProps.units); } this.minScale = this.scales[0]; this.maxScale = this.scales[this.scales.length - 1]; this.numZoomLevels = confProps.numZoomLevels; }, getResolution: function () { var zoom = this.map.getZoom(); return this.getResolutionForZoom(zoom); }, getExtent: function () { return this.map.calculateBounds(); }, getZoomForExtent: function (extent, closest) { var viewSize = this.map.getSize(); var idealResolution = Math.max(extent.getWidth() / viewSize.w, extent.getHeight() / viewSize.h); return this.getZoomForResolution(idealResolution, closest); }, getDataExtent: function () {}, getResolutionForZoom: function (zoom) { zoom = Math.max(0, Math.min(zoom, this.resolutions.length - 1)); var resolution; if (this.map.fractionalZoom) { var low = Math.floor(zoom); var high = Math.ceil(zoom); resolution = this.resolutions[low] - ((zoom - low) * (this.resolutions[low] - this.resolutions[high])); } else { resolution = this.resolutions[Math.round(zoom)]; } return resolution; }, getZoomForResolution: function (resolution, closest) { var zoom; if (this.map.fractionalZoom) { var lowZoom = 0; var highZoom = this.resolutions.length - 1; var highRes = this.resolutions[lowZoom]; var lowRes = this.resolutions[highZoom]; var res; for (var i = 0, len = this.resolutions.length; i < len; ++i) { res = this.resolutions[i]; if (res >= resolution) { highRes = res; lowZoom = i; } if (res <= resolution) { lowRes = res; highZoom = i; break; } } var dRes = highRes - lowRes; if (dRes > 0) { zoom = lowZoom + ((highRes - resolution) / dRes); } else { zoom = lowZoom; } } else { var diff; var minDiff = Number.POSITIVE_INFINITY; for (var i = 0, len = this.resolutions.length; i < len; i++) { if (closest) { diff = Math.abs(this.resolutions[i] - resolution); if (diff > minDiff) { break; } minDiff = diff; } else { if (this.resolutions[i] < resolution) { break; } } } zoom = Math.max(0, i - 1); } return zoom; }, getLonLatFromViewPortPx: function (viewPortPx) { var lonlat = null; if (viewPortPx != null) { var size = this.map.getSize(); var center = this.map.getCenter(); if (center) { var res = this.map.getResolution(); var delta_x = viewPortPx.x - (size.w / 2); var delta_y = viewPortPx.y - (size.h / 2); lonlat = new OpenLayers.LonLat(center.lon + delta_x * res, center.lat - delta_y * res); if (this.wrapDateLine) { lonlat = lonlat.wrapDateLine(this.maxExtent); } } } return lonlat; }, getViewPortPxFromLonLat: function (lonlat) { var px = null; if (lonlat != null) { var resolution = this.map.getResolution(); var extent = this.map.getExtent(); px = new OpenLayers.Pixel((1 / resolution * (lonlat.lon - extent.left)), (1 / resolution * (extent.top - lonlat.lat))); } return px; }, setOpacity: function (opacity) { if (opacity != this.opacity) { this.opacity = opacity; for (var i = 0, len = this.div.childNodes.length; i < len; ++i) { var element = this.div.childNodes[i].firstChild; OpenLayers.Util.modifyDOMElement(element, null, null, null, null, null, null, opacity); } if (this.map != null) { this.map.events.triggerEvent("changelayer", { layer: this, property: "opacity" }); } } }, getZIndex: function () { return this.div.style.zIndex; }, setZIndex: function (zIndex) { this.div.style.zIndex = zIndex; }, adjustBounds: function (bounds) { if (this.gutter) { var mapGutter = this.gutter * this.map.getResolution(); bounds = new OpenLayers.Bounds(bounds.left - mapGutter, bounds.bottom - mapGutter, bounds.right + mapGutter, bounds.top + mapGutter); } if (this.wrapDateLine) { var wrappingOptions = { 'rightTolerance': this.getResolution() }; bounds = bounds.wrapDateLine(this.maxExtent, wrappingOptions); } return bounds; }, CLASS_NAME: "OpenLayers.Layer" }); OpenLayers.Marker.Box = OpenLayers.Class(OpenLayers.Marker, { bounds: null, div: null, initialize: function (bounds, borderColor, borderWidth) { this.bounds = bounds; this.div = OpenLayers.Util.createDiv(); this.div.style.overflow = 'hidden'; this.events = new OpenLayers.Events(this, this.div, null); this.setBorder(borderColor, borderWidth); }, destroy: function () { this.bounds = null; this.div = null; OpenLayers.Marker.prototype.destroy.apply(this, arguments); }, setBorder: function (color, width) { if (!color) { color = "red"; } if (!width) { width = 2; } this.div.style.border = width + "px solid " + color; }, draw: function (px, sz) { OpenLayers.Util.modifyDOMElement(this.div, null, px, sz); return this.div; }, onScreen: function () { var onScreen = false; if (this.map) { var screenBounds = this.map.getExtent(); onScreen = screenBounds.containsBounds(this.bounds, true, true); } return onScreen; }, display: function (display) { this.div.style.display = (display) ? "" : "none"; }, CLASS_NAME: "OpenLayers.Marker.Box" }); (function () { var oXMLHttpRequest = window.XMLHttpRequest; var bGecko = !! window.controllers, bIE = window.document.all && !window.opera; function cXMLHttpRequest() { this._object = oXMLHttpRequest ? new oXMLHttpRequest : new window.ActiveXObject('Microsoft.XMLHTTP'); }; if (bGecko && oXMLHttpRequest.wrapped) cXMLHttpRequest.wrapped = oXMLHttpRequest.wrapped; cXMLHttpRequest.UNSENT = 0; cXMLHttpRequest.OPENED = 1; cXMLHttpRequest.HEADERS_RECEIVED = 2; cXMLHttpRequest.LOADING = 3; cXMLHttpRequest.DONE = 4; cXMLHttpRequest.prototype.readyState = cXMLHttpRequest.UNSENT; cXMLHttpRequest.prototype.responseText = ""; cXMLHttpRequest.prototype.responseXML = null; cXMLHttpRequest.prototype.status = 0; cXMLHttpRequest.prototype.statusText = ""; cXMLHttpRequest.prototype.onreadystatechange = null; cXMLHttpRequest.onreadystatechange = null; cXMLHttpRequest.onopen = null; cXMLHttpRequest.onsend = null; cXMLHttpRequest.onabort = null; cXMLHttpRequest.prototype.open = function (sMethod, sUrl, bAsync, sUser, sPassword) { this._async = bAsync; var oRequest = this, nState = this.readyState; if (bIE) { var fOnUnload = function () { if (oRequest._object.readyState != cXMLHttpRequest.DONE) fCleanTransport(oRequest); }; if (bAsync) window.attachEvent("onunload", fOnUnload); } this._object.onreadystatechange = function () { if (bGecko && !bAsync) return; oRequest.readyState = oRequest._object.readyState; fSynchronizeValues(oRequest); if (oRequest._aborted) { oRequest.readyState = cXMLHttpRequest.UNSENT; return; } if (oRequest.readyState == cXMLHttpRequest.DONE) { fCleanTransport(oRequest); if (bIE && bAsync) window.detachEvent("onunload", fOnUnload); } if (nState != oRequest.readyState) fReadyStateChange(oRequest); nState = oRequest.readyState; }; if (cXMLHttpRequest.onopen) cXMLHttpRequest.onopen.apply(this, arguments); this._object.open(sMethod, sUrl, bAsync, sUser, sPassword); if (!bAsync && bGecko) { this.readyState = cXMLHttpRequest.OPENED; fReadyStateChange(this); } }; cXMLHttpRequest.prototype.send = function (vData) { if (cXMLHttpRequest.onsend) cXMLHttpRequest.onsend.apply(this, arguments); if (vData && vData.nodeType) { vData = window.XMLSerializer ? new window.XMLSerializer().serializeToString(vData) : vData.xml; if (!this._headers["Content-Type"]) this._object.setRequestHeader("Content-Type", "application/xml"); } this._object.send(vData); if (bGecko && !this._async) { this.readyState = cXMLHttpRequest.OPENED; fSynchronizeValues(this); while (this.readyState < cXMLHttpRequest.DONE) { this.readyState++; fReadyStateChange(this); if (this._aborted) return; } } }; cXMLHttpRequest.prototype.abort = function () { if (cXMLHttpRequest.onabort) cXMLHttpRequest.onabort.apply(this, arguments); if (this.readyState > cXMLHttpRequest.UNSENT) this._aborted = true; this._object.abort(); fCleanTransport(this); }; cXMLHttpRequest.prototype.getAllResponseHeaders = function () { return this._object.getAllResponseHeaders(); }; cXMLHttpRequest.prototype.getResponseHeader = function (sName) { return this._object.getResponseHeader(sName); }; cXMLHttpRequest.prototype.setRequestHeader = function (sName, sValue) { if (!this._headers) this._headers = {}; this._headers[sName] = sValue; return this._object.setRequestHeader(sName, sValue); }; cXMLHttpRequest.prototype.toString = function () { return '[' + "object" + ' ' + "XMLHttpRequest" + ']'; }; cXMLHttpRequest.toString = function () { return '[' + "XMLHttpRequest" + ']'; }; function fReadyStateChange(oRequest) { if (oRequest.onreadystatechange) oRequest.onreadystatechange.apply(oRequest); if (cXMLHttpRequest.onreadystatechange) cXMLHttpRequest.onreadystatechange.apply(oRequest); }; function fGetDocument(oRequest) { var oDocument = oRequest.responseXML; if (bIE && oDocument && !oDocument.documentElement && oRequest.getResponseHeader("Content-Type").match(/[^\/]+\/[^\+]+\+xml/)) { oDocument = new ActiveXObject('Microsoft.XMLDOM'); oDocument.loadXML(oRequest.responseText); } if (oDocument) if ((bIE && oDocument.parseError != 0) || (oDocument.documentElement && oDocument.documentElement.tagName == "parsererror")) return null; return oDocument; }; function fSynchronizeValues(oRequest) { try { oRequest.responseText = oRequest._object.responseText; } catch (e) {} try { oRequest.responseXML = fGetDocument(oRequest._object); } catch (e) {} try { oRequest.status = oRequest._object.status; } catch (e) {} try { oRequest.statusText = oRequest._object.statusText; } catch (e) {} }; function fCleanTransport(oRequest) { oRequest._object.onreadystatechange = new window.Function; delete oRequest._headers; }; if (!window.Function.prototype.apply) { window.Function.prototype.apply = function (oRequest, oArguments) { if (!oArguments) oArguments = []; oRequest.__func = this; oRequest.__func(oArguments[0], oArguments[1], oArguments[2], oArguments[3], oArguments[4]); delete oRequest.__func; }; }; OpenLayers.Request.XMLHttpRequest = cXMLHttpRequest; })(); OpenLayers.Tile.Image.IFrame = OpenLayers.Class(OpenLayers.Tile.Image, { initialize: function (layer, position, bounds, url, size) { OpenLayers.Tile.Image.prototype.initialize.apply(this, arguments); this.layerAlphaHack = false; }, destroy: function () { if (this.imgDiv != null) { OpenLayers.Event.stopObservingElement(this.imgDiv.firstChild); } OpenLayers.Tile.Image.prototype.destroy.apply(this, arguments); }, clear: function () { if (this.imgDiv) { var iFrame = this.imgDiv.firstChild; OpenLayers.Event.stopObservingElement(iFrame); this.imgDiv.removeChild(iFrame); } }, clone: function (obj) { if (obj == null) { obj = new OpenLayers.Tile.Image.IFrame(this.layer, this.position, this.bounds, this.url, this.size); } obj = OpenLayers.Tile.Image.prototype.clone.apply(this, [obj]); return obj; }, renderTile: function () { if (OpenLayers.Tile.Image.prototype.renderTile.apply(this, arguments)) { var form = this.createRequestForm(); this.imgDiv.appendChild(form); form.submit(); this.imgDiv.removeChild(form); } }, initImgDiv: function () { this.imgDiv = this.createImgDiv() OpenLayers.Util.modifyDOMElement(this.imgDiv, this.id, null, this.layer.getImageSize(), "relative"); this.imgDiv.className = 'olTileImage'; this.frame.appendChild(this.imgDiv); this.layer.div.appendChild(this.frame); if (this.layer.opacity != null) { OpenLayers.Util.modifyDOMElement(this.imgDiv, null, null, null, null, null, null, this.layer.opacity); } this.imgDiv.map = this.layer.map; }, createImgDiv: function () { var eventPane = document.createElement("div"); if (OpenLayers.Util.getBrowserName() == "msie") { eventPane.style.backgroundColor = '#FFFFFF'; eventPane.style.filter = 'chroma(color=#FFFFFF)'; } OpenLayers.Util.modifyDOMElement(eventPane, null, new OpenLayers.Pixel(0, 0), this.layer.getImageSize(), "absolute"); var imgDiv = document.createElement("div"); imgDiv.appendChild(eventPane); return imgDiv; }, createIFrame: function () { var id = this.id + '_iFrame'; var iframe; if (OpenLayers.Util.getBrowserName() == "msie") { iframe = document.createElement('