`
soswane
  • 浏览: 21573 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

openlayer(二)util

阅读更多
//名字空间   
OpenLayers.Util = {};   
//根据ID获取DOMElement,当参数是多个ID时,返回的是一个DOMElement数组   
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;   
};   
//判断一下$符号有没有被别的库使用,如果没使用,那就把它指向getElement函数。这样使用的时候更方便一些。   
if(typeof window.$  === "undefined") {   
    window.$ = OpenLayers.Util.getElement;   
}   
//extend在java中是继承的意思,这里执行一个源到目标的一个属性浅拷贝   
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;   
            }   
        }   
        //这里用来修正IE和Firefox的一个bug   
        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);   
            //注意下面的注释,意思是如果使用break,那么只删掉最后一个item。如果去掉break,则意思是删掉所有的item。   
            //break;more than once??   
        }   
    }   
    return array;   
};   
//清空数组   
OpenLayers.Util.clearArray = function(array) {   
    //Console是在控制台打印输出log,这里的控制台是指火狐的Firebug   
    OpenLayers.Console.warn(   
        //il8n是国际化支持,第一个参数是模板名字,后面是token的替换值   
        OpenLayers.i18n(   
            "methodDeprecated", {'newMethod': 'array = []'}   
        )   
    );   
    array.length = 0;   
};   
//这个是获取obj在array中的索引值,没有的话就返回-1   
OpenLayers.Util.indexOf = function(array, obj) {   
    for(var i=0, len=array.length; i<len; i++) {   
        if (array[i] == obj) {   
            return i;   
        }   
    }   
    return -1;      
};   
//这里是修改一个DOMElement元素的属性值,element是DOMElement的引用,id是DOMElement的id,px是Pixel值,sz是Size值,position、border、overflow、opacity都是css得对应属性,分别是位置,边框,溢出,不透明度   
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 = '';   
    }   
};   
//创建一个有指定属性的Div   
OpenLayers.Util.createDiv = function(id, px, sz, imgURL, position,    
                                     border, overflow, opacity) {   
    //创建一个Div元素   
    var dom = document.createElement('div');   
    //如果有背景图片,则设置背景   
    if (imgURL) {   
        dom.style.backgroundImage = 'url(' + imgURL + ')';   
    }   
    //没有id的话,生成一个id,前缀是OpenLayersDiv   
    if (!id) {   
        id = OpenLayers.Util.createUniqueID("OpenLayersDiv");   
    }   
    //没有position的话,默认是绝对定位   
    if (!position) {   
        position = "absolute";   
    }   
    //设置其他参数   
    OpenLayers.Util.modifyDOMElement(dom, id, px, sz, position,    
                                     border, overflow, opacity);   
    //生成完毕,返回div   
    return dom;   
};   
//创建一个image,和创建div一样。   
OpenLayers.Util.createImage = function(id, px, sz, imgURL, position, border,   
                                       opacity, delayDisplay) {   
    var image = document.createElement("img");   
    //set generic properties   
    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类封装了event对象,这个是给image注册onload事件,当发生这个时间时调用Openlayers.Util.onImageLoad函数   
        OpenLayers.Event.observe(image, "load",    
            OpenLayers.Function.bind(OpenLayers.Util.onImageLoad, image));   
        //这个同上,当加载图像失败时,它就用一个粉红色的背景图来替代   
        OpenLayers.Event.observe(image, "error",    
            OpenLayers.Function.bind(OpenLayers.Util.onImageLoadError, image));   
           
    }   
       
    //set special properties   
    image.style.alt = id;   
    //下面这个属性我还真不知道,baidu了一下发现时各IE6的过时属性,用来显示image tools工具条的。   
    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);   
};   
//image加载时会调用这个函数   
OpenLayers.Util.onImageLoad = function() {   
    if (!this.viewRequestID ||   
        (this.map && this.viewRequestID == this.map.viewRequestID)) {    
        this.style.backgroundColor ="transparent";   
        this.style.display = "";     
    }   
};   
//image加载出错时,显示的图像颜色,这个pink是粉红色,血难看!   
OpenLayers.Util.onImageLoadErrorColor = "pink";   
//image的加载次数   
OpenLayers.IMAGE_RELOAD_ATTEMPTS = 0;   
//image加载失败时调用这个函数   
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 {   
        this.style.backgroundColor = OpenLayers.Util.onImageLoadErrorColor;   
    }   
    this.style.display = "";   
};  

出处:http://blog.csdn.net/baozhifei/archive/2009/08/13/4444777.aspx
分享到:
评论

相关推荐

    ol-util:一组与OpenLayers一起使用的帮助程序类

    ol-util 一组与OpenLayers一起使用的帮助程序类 安装 npm i @ terrestris / ol - util API文档 最新的: : 其他版本的文档可通过以下格式获得: v3.0.0

    openlayers中文文档2

    OpenLayers 支持各种类型的图层,如TileLayer(瓦片图层)、VectorLayer(矢量图层)和ImageLayer(图像图层)。每个图层都有自己的属性和方法,如透明度设置、可见性控制等。 **2. Map(地图)** `map.html` 关注...

    vendor-qcom-proprietary-mm-camera

    2. **Camera HAL (Hardware Abstraction Layer)**:Camera HAL是Android系统中一个重要的组件,它作为操作系统与相机硬件之间的桥梁,定义了一系列接口,供上层应用和系统服务调用。"mm-camera"中的"HAL"通常指的是...

    完美解决java读取大文件内存溢出的问题

    解决方案二:使用Apache Commons IO库实现,利用该库提供的自定义LineIterator。该方案由于整个文件不是全部存放在内存中,这也就导致相当保守的内存消耗。 LineIterator it = FileUtils.lineIterator(theFile, ...

    2021-2022计算机二级等级考试试题及答案No.11126.docx

    - **OSI(Open System Interconnection)模型**是由国际标准化组织(ISO)制定的一个网络体系结构模型,它将网络通信功能划分为七层。 - **物理层**(Physical Layer)作为OSI模型的最低层,主要负责通过物理媒介...

    齐全的Bouncycastle--jar文件

    这个压缩包包含了Bouncy Castle库的不同组件,如X509证书处理、JCE(Java Cryptography Extension)、Crypto加密算法、Util工具类以及TLS(Transport Layer Security)协议支持。下面将详细阐述这些组件及其在IT领域...

    Yocto Project构建环境为 i.MX 板构建映像

    bitbake-layers add-layer ../fsl-i.mx-yocto ``` #### 映像构建 完成环境配置后,可以开始构建映像。在构建过程中,可以选择不同的目标配置文件来匹配 i.MX 系列的不同型号。例如,对于 i.MX 6 系列处理器,可以...

    World Wind Java配置WMS服务器

    WMS(Web Map Service)是一种OGC(Open Geospatial Consortium)标准,它允许用户从远程服务器请求地图数据。在World Wind Java中配置WMS服务器,可以让我们利用这些服务器提供的地图服务,展示丰富的地理信息。 ...

    发送 email

    使用SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议可以加密通信,保护数据不被窃听。Java提供了内置的支持,通过添加`com.sun.net.ssl.internal.ssl.Provider`作为安全提供者,并设置相应的SSL...

    layui实现左侧菜单点击右侧内容区显示

    例如,可以通过`layui.util.tabAdd()`或`layui.layer.open()`这样的layui方法来动态添加新的Tab或弹窗,显示对应URL的内容。 `layui.util.tabAdd()`函数接收的参数包括新Tab的标题、URL和类型(是否新开Tab)。在这...

    vue弹窗插件实战代码

    然而,这样的调用方式不够便捷,我们希望能像 `layer.js` 那样全局调用。为了实现这个目标,我们需要将 `popup` 组件改造成一个 Vue 插件。 首先,创建一个全局单例的弹窗实例 `popupVm.js`: ```javascript ...

    bgpgo:Go 编程语言中的 BGP

    - **Update消息**:用于通告或撤销路由,包括路径属性、NLRI(Network Layer Reachability Information)和 withdrawn routes。 - **Keepalive消息**:定期发送,以确认会话仍然活跃,没有丢失。 - **Notification...

    my_app_maps

    在Java中,`java.util.Map`接口是存储键值对的核心容器。在my_app_maps项目中,可能会广泛使用到`HashMap`、`TreeMap`或`LinkedHashMap`等具体实现,它们分别提供了不同的性能特性和排序规则。例如,`HashMap`适用...

    python3.6.5参考手册 chm

    Application-Layer Protocol Negotiation Support Other Changes sqlite3 subprocess sys sysconfig tarfile threading time timeit tkinter traceback types unicodedata unittest unittest.mock ...

Global site tag (gtag.js) - Google Analytics