OpenLayers 如何管理多控件的激活

本文介绍了在使用OpenLayers时如何高效地切换多种控件,包括绘制矢量要素和查询要素属性等。提供了三种切换控件的方法:使用radio标记、利用OpenLayers.Control.Panel管理控件及扩展OpenLayers的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用OpenLayers的时候,常常需要使用多个控件,来实现像:绘制矢量要素(DrawFeature),查询要素属性(WMSGetFeatureInfo),等等。这样就需要在不同的控件之间进行切换,也就是激活控件。常用的方式是,在创建控件的时候,保存到一个数组中,并给予命名,例如:

var infoControls = {
    click: new OpenLayers.Control.WMSGetFeatureInfo(), // 参数省略
    hover: new OpenLayers.Control.WMSGetFeatureInfo()// 参数省略
};

这样,我们就可以通过infoControls.click来获取到该控件。1)当我们使用radio来标记当前使用的控件,就可以通过如下函数来切换控件。

function toggleControl(element) {
    for (key in drawControls) {
        var control = drawControls[key];
        if (element.value == key && element.checked) {
            control.activate();
        } else {
            control.deactivate();
        }
    }
}

2)如果我们使用OpenLayers.Control.Panel来管理控件,可以获取buttonclick事件,来确定到底点击的是哪个控件,然后激活。

map.events.register("buttonclick", this, function(evt) {
    var button = evt.buttonElement;
    var isControlActive = false,
        control;
    for (var tempName in controls) {
        if (controls[tempName].panel_div == button) {
            controls[tempName].activate();
            isControlActive = true;
        } else {
            if (controls[tempName].active) {
                control = controls[tempName];
                controls[tempName].deactivate();
            }
        }
    }
    if (!isControlActive) {
        control.activate();
    }
});

3)当然,你还可以参考EditingToolbar去扩展OpenLayers,然后扩展一个特有的Panel对象,然后直接默认去处理。=====================================================================================

生活不仅需要激情四射,也需要闲庭信步。

DSC_0027_副本


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值