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

📄 overviewmap.js

📁 用来在地图上做操作GIS,在地图上做标记
💻 JS
📖 第 1 页 / 共 2 页
字号:
        }    },    /**     * Method: rectMouseUp     * Handle browser events     *     * Parameters:     * evt - {<OpenLayers.Event>} evt     */    rectMouseUp: function(evt) {        if(!OpenLayers.Event.isLeftClick(evt)) return;        if(this.performedRectDrag) {            this.updateMapToRect();            OpenLayers.Event.stop(evt);        }                document.onselectstart = null;        this.rectDragStart = null;    },        /**     * Method: rectDblClick     * Handle browser events     *     * Parameters:     * evt - {<OpenLayers.Event>} evt     */    rectDblClick: function(evt) {        this.performedRectDrag = false;        OpenLayers.Event.stop(evt);        this.updateOverview();    },    /**     * Method: mapDivClick     * Handle browser events     *     * Parameters:     * evt - {<OpenLayers.Event>} evt     */    mapDivClick: function(evt) {        var pxBounds = this.getRectPxBounds();        var pxCenter = pxBounds.getCenterPixel();        var deltaX = evt.xy.x - pxCenter.x;        var deltaY = evt.xy.y - pxCenter.y;        var top = pxBounds.top;        var left = pxBounds.left;        var height = Math.abs(pxBounds.getHeight());        var width = pxBounds.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();        OpenLayers.Event.stop(evt);    },    /**     * Method: maximizeControl     * Unhide the control.  Called when the control is in the map viewport.     *     * Parameters:     * e - {<OpenLayers.Event>}     */    maximizeControl: function(e) {        this.element.style.display = '';        this.showToggle(false);        if (e != null) {            OpenLayers.Event.stop(e);                                                    }    },    /**     * Method: minimizeControl     * Hide all the contents of the control, shrink the size,      * add the maximize icon     *      * Parameters:     * e - {<OpenLayers.Event>}     */    minimizeControl: function(e) {        this.element.style.display = 'none';        this.showToggle(true);        if (e != null) {            OpenLayers.Event.stop(e);                                                    }    },    /**     * Method: showToggle     * Hide/Show the toggle depending on whether the control is minimized     *     * Parameters:     * minimize - {Boolean}      */    showToggle: function(minimize) {        this.maximizeDiv.style.display = minimize ? '' : 'none';        this.minimizeDiv.style.display = minimize ? 'none' : '';    },    /**     * Method: update     * Update the overview map after layers move.     */    update: function() {        if(this.ovmap == null) {            this.createMap();        }                if(!this.isSuitableOverview()) {            this.updateOverview();        }                // update extent rectangle        this.updateRectToMap();    },        /**     * Method: isSuitableOverview     * Determines if the overview map is suitable given the extent and     * resolution of the main map.     */    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));                var resRatio = this.ovmap.getResolution() / this.map.getResolution();        return ((resRatio > this.minRatio) &&                (resRatio <= this.maxRatio) &&                (this.ovmap.getExtent().containsBounds(testExtent)));    },        /**     * Method updateOverview     * Called by <update> if <isSuitableOverview> returns true     */    updateOverview: function() {        var mapRes = this.map.getResolution();        var targetRes = this.ovmap.getResolution();        var resRatio = targetRes / mapRes;        if(resRatio > this.maxRatio) {            // zoom in overview map            targetRes = this.minRatio * mapRes;                    } else if(resRatio <= this.minRatio) {            // zoom out overview map            targetRes = this.maxRatio * mapRes;        }        this.ovmap.setCenter(this.map.center,                            this.ovmap.getZoomForResolution(targetRes));        this.updateRectToMap();    },        /**     * Method: createMap     * Construct the map that this control contains     */    createMap: function() {        // create the overview map        var options = OpenLayers.Util.extend(                        {controls: [], maxResolution: 'auto'}, this.mapOptions);        this.ovmap = new OpenLayers.Map(this.mapDiv, options);        this.ovmap.addLayers(this.layers);        this.ovmap.zoomToMaxExtent();        // check extent rectangle border width        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;    },            /**     * Method: updateRectToMap     * Updates the extent rectangle position and size to match the map extent     */    updateRectToMap: function() {        // The base layer for overview map needs to be in the same projection        // as the base layer for the main map.  This should be made more robust.        if(this.map.units != 'degrees') {            if(this.ovmap.getProjection() && (this.map.getProjection() != this.ovmap.getProjection())) {                alert('The overview map only works when it is in the same projection as the main map');            }        }        var pxBounds = this.getRectBoundsFromMapBounds(this.map.getExtent());        if (pxBounds) {          this.setRectPxBounds(pxBounds);        }    },        /**     * Method: updateMapToRect     * Updates the map extent to match the extent rectangle position and size     */    updateMapToRect: function() {        var pxBounds = this.getRectPxBounds();        var lonLatBounds = this.getMapBoundsFromRectBounds(pxBounds);        this.map.setCenter(lonLatBounds.getCenterLonLat(), this.map.zoom);    },        /**     * Method: getRectPxBounds     * Get extent rectangle pixel bounds     *     * Returns:     * {<OpenLayers.Bounds>} A bounds which is the extent rectangle's pixel     * bounds (relative to the parent element)     */    getRectPxBounds: function() {        var top = parseInt(this.extentRectangle.style.top);        var left = parseInt(this.extentRectangle.style.left);        var height = parseInt(this.extentRectangle.style.height);        var width = parseInt(this.extentRectangle.style.width);        return new OpenLayers.Bounds(left, top + height, left + width, top);    },    /**     * Method: setRectPxBounds     * Set extent rectangle pixel bounds.     *     * Parameters:     * pxBounds - {<OpenLayers.Bounds>}     */    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);        this.extentRectangle.style.top = parseInt(top) + 'px';        this.extentRectangle.style.left = parseInt(left) + 'px';        this.extentRectangle.style.height = parseInt(Math.max(bottom - top, 0))+ 'px';        this.extentRectangle.style.width = parseInt(Math.max(right - left, 0)) + 'px';    },    /**     * Method: getRectBoundsFromMapBounds     * Get the rect bounds from the map bounds.     *     * Parameters:     * lonLatBounds - {<OpenLayers.Bounds>}     *     * Returns:     * {<OpenLayers.Bounds>}A bounds which is the passed-in map lon/lat extent     * translated into pixel bounds for the overview map     */    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;    },    /**     * Method: getMapBoundsFromRectBounds     * Get the map bounds from the rect bounds.     *     * Parameters:     * pxBounds - {<OpenLayers.Bounds>}     *     * Returns:     * {<OpenLayers.Bounds>} Bounds which is the passed-in overview rect bounds     * translated into lon/lat bounds for the overview map     */    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);    },    /**     * Method: getLonLatFromOverviewPx     * Get a map location from a pixel location     *     * Parameters:     * overviewMapPx - {<OpenLayers.Pixel>}     *     * Returns:     * {<OpenLayers.LonLat>} Location which is the passed-in overview map     * OpenLayers.Pixel, translated into lon/lat by the overview map     */    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);     },    /**     * Method: getOverviewPxFromLonLat     * Get a pixel location from a map location     *     * Parameters:     * lonlat - {<OpenLayers.LonLat>}     *     * Returns:     * {<OpenLayers.Pixel>} Location which is the passed-in OpenLayers.LonLat,      * translated into overview map pixels     */    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'});

⌨️ 快捷键说明

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