首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenLayers.Class与OpenLayers.Control.GetFeature

OpenLayers.Class与OpenLayers.Control.GetFeature
EN

Stack Overflow用户
提问于 2013-01-30 16:44:15
回答 2查看 1.6K关注 0票数 0

我想知道是否有人能给我指出正确的方向,迫使OpenLayers.Control.GetFeature的BBOX始终处于长/拉坐标。我正试图通过OpenLayers.Class来实现这一点,因此新控件将继承OpenLayers.Control.GetFeature,只需在BBOX中进行小修改即可。这就是我所做的:

代码语言:javascript
复制
OpenLayers.Control.myGetFeature = OpenLayers.Class(OpenLayers.Control.GetFeature,{
        selectBox: function(position){
            var opts = OpenLayers.Control.GetFeature(position);
            var baseSRSutm = this.map.getprojectionObject();
            var layerSRSdd = new OpenLayers.Projection('EPSG:4326');
            opts.params.bbox = this.map.getExtent().transform(baseSRSutm,layerSRSdd).toBBOX(null,firstLayer.reverseAxisOrder());
        }
        return opts;
    });

但我发现有些"}“不见了。这是使用OpenLayers.Class来做我想做的事情的正确方式吗?

任何帮助都是非常感谢的。

PS。我使用的是OpenLayers 2.11

编辑:

移动“返回选项”,函数内部解决了上面的问题,但是它抱怨CLASS_NAME丢失了。补充说,它仍然抱怨同样的,但经过几次点击或框发送的请求,但发送的bbox仍然在UTM,问题在哪里?这是代码:

代码语言:javascript
复制
var mycontrol = function(){
        var protocol = new OpenLayers.Protocol.HTTP({
            url: 'http://www.....',
            format: new OpenLayers.Format.GeoJSON({
                ignoreExtraDims: true,
                'internalProjection': new OpenLayers.Projection('EPSG:900913'),
                'externalProjection': new OpenLayers.Projection('EPSG:4326')
            })
        });

        OpenLayers.Control.myGetFeature = OpenLayers.Class(OpenLayers.Control.GetFeature,{
            selectBox: function(position){
                var opts = OpenLayers.Control.GetFeature(position);
                var baseSRSutm = this.map.getprojectionObject();
    console.log('this is the baseSRSutm' + baseSRSutm); // doesnt appear in firebug
                var layerSRSdd = new OpenLayers.Projection('EPSG:4326');
                opts.params.bbox = this.map.getExtent().transform(baseSRSutm,layerSRSdd).toBBOX(null,firstLayer.reverseAxisOrder());
    console.log('this is the opts.params.bbox' + opts.params.bbox); // doesnt appear in firebug
                return opts;
            },
            CLASS_NAME: "OpenLayers.Control.myGetFeature"
        });

      return new OpenLayers.Control.myGetFeature({
            protocol: protocol,
            box: true,
            click: true,
            single: false,
            clickTolerance: 10,
            eventListeners:{
                // some stuff
            }
        });
    };

因为console.log没有出现在firebug中,所以我认为问题在OpenLayers.Control.myGetFeature和OpenLayers.Class中。在我看来,"selectBox“函数是我需要的函数,但是子类本身并不是通过返回来读取的。

请帮个忙,谢谢,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-31 23:51:19

最后,它起作用了,诀窍是使用原型和selectBox,然后应用基映射投影和displayProjection之间的转换,在这种情况下,在900913到4326之间。我的想法是:http://osgeo-org.1560.n6.nabble.com/Order-Priority-of-Control-GetFeature-and-Control-WMSGetFeatureInfo-on-click-td4997282.html

票数 0
EN

Stack Overflow用户

发布于 2013-01-30 18:01:43

您的代码示例有一些语法错误。以后尝试使用一些javascript代码指针(如jsHint )来帮助调试这些错误。这是你的代码,修正如下:

代码语言:javascript
复制
OpenLayers.Control.myGetFeature = OpenLayers.Class(OpenLayers.Control.GetFeature,{
    selectBox: function(position){
        var opts = OpenLayers.Control.GetFeature(position);
        var baseSRSutm = this.map.getprojectionObject();
        var layerSRSdd = new OpenLayers.Projection('EPSG:4326');
        opts.params.bbox = this.map.getExtent().transform(baseSRSutm,layerSRSdd).toBBOX(null,firstLayer.reverseAxisOrder());
        return opts;
    }
});

关于您关于自定义GetFeature的问题,我认为您的做法是正确的。我也会这么做的。OpenLayers建议在它们的示例中采用一种稍微不同的方法,但是它执行相同的功能:

代码语言:javascript
复制
var control = new OpenLayers.Control.GetFeature();
OpenLayers.Util.extend(control, {
    selectBox: function(position){
        var opts = OpenLayers.Control.GetFeature(position);
        var baseSRSutm = this.map.getprojectionObject();
        var layerSRSdd = new OpenLayers.Projection('EPSG:4326');
        opts.params.bbox = this.map.getExtent().transform(baseSRSutm,layerSRSdd).toBBOX(null,firstLayer.reverseAxisOrder());
        return opts;
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14609174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档