⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 layer.js

📁 用来在地图上做操作GIS,在地图上做标记
💻 JS
📖 第 1 页 / 共 2 页
字号:
/* Copyright (c) 2006-2007 MetaCarta, Inc., published under the BSD license. * See http://svn.openlayers.org/trunk/openlayers/release-license.txt  * for the full text of the license. *//** * @requires OpenLayers/Map.js *  * Class: OpenLayers.Layer */OpenLayers.Layer = OpenLayers.Class({    /**     * APIProperty: id     * {String}     */    id: null,    /**      * APIProperty: name     * {String}     */    name: null,    /**      * APIProperty: div     * {DOMElement}     */    div: null,    /**      * Constant: EVENT_TYPES     * {Array(String)} Supported application event types     */    EVENT_TYPES: [ "loadstart", "loadend", "loadcancel", "visibilitychanged"],            /**     * APIProperty: events``     * {<OpenLayers.Events>}     */    events: null,    /**     * APIProperty: map     * {<OpenLayers.Map>} This variable is set when the layer is added to      *     the map, via the accessor function setMap().     */    map: null,        /**     * APIProperty: isBaseLayer     * {Boolean} Whether or not the layer is a base layer. This should be set      *     individually by all subclasses. Default is false     */    isBaseLayer: false,     /**     * Property: alpha     * {Boolean} The layer's images have an alpha channel.  Default is false.      */    alpha: false,    /**      * APIProperty: displayInLayerSwitcher     * {Boolean} Display the layer's name in the layer switcher.  Default is     *     true.     */    displayInLayerSwitcher: true,    /**     * APIProperty: visibility     * {Boolean} The layer should be displayed in the map.  Default is true.     */    visibility: true,    /**     * APIProperty: attribution     * {String} Attribution string, displayed when an      *     <OpenLayers.Control.Attribution> has been added to the map.     */    attribution: null,     /**      * Property: inRange     * {Boolean} The current map resolution is within the layer's min/max      *     range. This is set in <OpenLayers.Map.setCenter> whenever the zoom      *     changes.     */    inRange: false,        /**     * Propery: imageSize     * {<OpenLayers.Size>} For layers with a gutter, the image is larger than      *     the tile by twice the gutter in each dimension.     */    imageSize: null,        /**     * Property: imageOffset     * {<OpenLayers.Pixel>} For layers with a gutter, the image offset      *     represents displacement due to the gutter.     */    imageOffset: null,  // OPTIONS    /**      * Property: options     * {Object} An optional object whose properties will be set on the layer.     *     Any of the layer properties can be set as a property of the options     *     object and sent to the constructor when the layer is created.     */    options: null,    /**     * APIProperty: gutter     * {Integer} Determines the width (in pixels) of the gutter around image     *     tiles to ignore.  By setting this property to a non-zero value,     *     images will be requested that are wider and taller than the tile     *     size by a value of 2 x gutter.  This allows artifacts of rendering     *     at tile edges to be ignored.  Set a gutter value that is equal to     *     half the size of the widest symbol that needs to be displayed.     *     Defaults to zero.  Non-tiled layers always have zero gutter.     */     gutter: 0,     /**     * APIProperty: projection     * {String} Set in the layer options to override the default projection     *     string this layer - also set maxExtent, maxResolution, and units if     *     appropriate.     */    projection: null,            /**     * APIProperty: units     * {String} The layer map units.  Defaults to 'degrees'.  Possible values     *     are 'degrees' (or 'dd'), 'm', 'ft', 'km', 'mi', 'inches'.     */    units: null,    /**     * APIProperty: scales     * {Array}  An array of map scales in descending order.  The values in the     *     array correspond to the map scale denominator.  Note that these     *     values only make sense if the display (monitor) resolution of the     *     client is correctly guessed by whomever is configuring the     *     application.  In addition, the units property must also be set.     *     Use <resolutions> instead wherever possible.     */    scales: null,    /**     * APIProperty: resolutions     * {Array} A list of map resolutions (map units per pixel) in descending     *     order.  If this is not set in the layer constructor, it will be set     *     based on other resolution related properties (maxExtent,     *     maxResolution, maxScale, etc.).     */    resolutions: null,        /**     * APIProperty: maxExtent     * {<OpenLayers.Bounds>}  The center of these bounds will not stray outside     *     of the viewport extent during panning.  In addition, if     *     <displayOutsideMaxExtent> is set to false, data will not be     *     requested that falls completely outside of these bounds.     */    maxExtent: null,        /**     * APIProperty: minExtent     * {<OpenLayers.Bounds>}     */    minExtent: null,        /**     * APIProperty: maxResolution     * {Float} Default max is 360 deg / 256 px, which corresponds to     *     zoom level 0 on gmaps.  Specify a different value in the layer      *     options if you are not using a geographic projection and      *     displaying the whole world.     */    maxResolution: null,    /**     * APIProperty: minResolution     * {Float}     */    minResolution: null,    /**     * APIProperty: numZoomLevels     * {Integer}     */    numZoomLevels: null,       /**     * APIProperty: minScale     * {Float}     */    minScale: null,        /**     * APIProperty: maxScale     * {Float}     */    maxScale: null,    /**     * APIProperty: displayOutsideMaxExtent     * {Boolean} Request map tiles that are completely outside of the max      *     extent for this layer. Defaults to false.     */    displayOutsideMaxExtent: false,    /**     * APIProperty: wrapDateLine     * {Boolean} #487 for more info.        */    wrapDateLine: false,            /**     * Constructor: OpenLayers.Layer     *     * Parameters:     * name - {String} The layer name     * options - {Object} Hashtable of extra options to tag onto the layer     */    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.div.style.width = "100%";            this.div.style.height = "100%";            this.div.id = this.id;            this.events = new OpenLayers.Events(this, this.div,                                                 this.EVENT_TYPES);        }        if (this.wrapDateLine) {            this.displayOutsideMaxExtent = true;        }    },        /**     * Method: destroy     * Destroy is a destructor: this is to alleviate cyclic references which     *     the Javascript garbage cleaner can not take care of on its own.     *     * Parameters:     * setNewBaseLayer - {Boolean} Set a new base layer when this layer has     *     been destroyed.  Default is true.     */    destroy: function(setNewBaseLayer) {        if (setNewBaseLayer == null) {            setNewBaseLayer = true;        }        if (this.map != null) {            this.map.removeLayer(this, setNewBaseLayer);        }        this.map = null;        this.name = null;        this.div = null;        this.options = null;        if (this.events) {            this.events.destroy();        }        this.events = null;    },       /**    * Method: clone    *    * Parameters:    * obj - {<OpenLayers.Layer>} The layer to be cloned    *    * Returns:    * {<OpenLayers.Layer>} An exact clone of this <OpenLayers.Layer>    */    clone: function (obj) {                if (obj == null) {            obj = new OpenLayers.Layer(this.name, this.options);        }                 // catch any randomly tagged-on properties        OpenLayers.Util.applyDefaults(obj, this);                // a cloned layer should never have its map property set        //  because it has not been added to a map yet.         obj.map = null;                return obj;    },        /**      * APIMethod: setName     * Sets the new layer name for this layer.  Can trigger a changelayer event     *     on the map.     *     * Parameters:     * newName - {String} The new name.     */    setName: function(newName) {        if (newName != this.name) {            this.name = newName;            if (this.map != null) {                this.map.events.triggerEvent("changelayer");            }        }    },           /**    * APIMethod: addOptions    *     * Parameters:    * newOptions - {Object}    */    addOptions: function (newOptions) {                if (this.options == null) {            this.options = {};        }                // update our copy for clone        OpenLayers.Util.extend(this.options, newOptions);        // add new options to this        OpenLayers.Util.extend(this, newOptions);    },        /**     * APIMethod: onMapResize     * This function can be implemented by subclasses     */    onMapResize: function() {        //this function can be implemented by subclasses      },    /**     * APIMethod: redraw     * Redraws the layer.  Returns true if the layer was redrawn, false if not.     *     * Returns:     * {Boolean} The layer was redrawn.     */    redraw: function() {        var redrawn = false;        if (this.map) {            // min/max Range may have changed            this.inRange = this.calculateInRange();            // map's center might not yet be set            var extent = this.getExtent();            if (extent && this.inRange && this.visibility) {                this.moveTo(extent, true, false);                redrawn = true;            }        }        return redrawn;    },    /**     * Method: moveTo     *      * Parameters:     * bound - {<OpenLayers.Bounds>}     * zoomChanged - {Boolean} Tells when zoom has changed, as layers have to     *     do some init work in that case.     * dragging - {Boolean}     */    moveTo:function(bounds, zoomChanged, dragging) {        var display = this.visibility;        if (!this.isBaseLayer) {            display = display && this.inRange;        }        this.display(display);    },    /**     * Method: setMap     * Set the map property for the layer. This is done through an accessor     *     so that subclasses can override this and take special action once      *     they have their map variable set.      *      *     Here we take care to bring over any of the necessary default      *     properties from the map.      *      * Parameters:     * map - {<OpenLayers.Map>}     */    setMap: function(map) {        if (this.map == null) {                    this.map = map;                        // grab some essential layer data from the map if it hasn't already            //  been set            this.maxExtent = this.maxExtent || this.map.maxExtent;            this.projection = this.projection || this.map.projection;            this.units = 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";            }                        // deal with gutters            this.setTileSize();        }    },        /**     * APIMethod: removeMap     * Just as setMap() allows each layer the possibility to take a      *     personalized action on being added to the map, removeMap() allows     *     each layer to take a personalized action on being removed from it.      *     For now, this will be mostly unused, except for the EventPane layer,     *     which needs this hook so that it can remove the special invisible     *     pane.      *      * Parameters:     * map - {<OpenLayers.Map>}     */    removeMap: function(map) {        //to be overridden by subclasses    },        /**     * APIMethod: getImageSize     *      * Returns:     * {<OpenLayers.Size>} The size that the image should be, taking into      *     account gutters.     */     getImageSize: function() {         return (this.imageSize || this.tileSize);     },          /**     * APIMethod: setTileSize     * Set the tile size based on the map size.  This also sets layer.imageSize     *     and layer.imageOffset for use by Tile.Image.     *      * Parameters:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -