[英]OpenLayers.Class with OpenLayers.Control.GetFeature
我想知道是否有人可以指向我正确的方向,以迫使OpenLayers.Control.GetFeature的BBOX始终位于长/纬度坐标中。 我正在尝试通过OpenLayers.Class来实现这一点,因此新控件将仅在BBOX中进行少量修改即可继承OpenLayers.Control.GetFeature。 这是我所做的:
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中,问题可能出在哪里? 这是代码:
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没有出现在萤火虫中,所以我认为问题出在OpenLayers.Control.myGetFeature和OpenLayers.Class中。 在我看来,“ selectBox”功能是我需要的功能,但是子类本身不会被返回读取。
请对此提供帮助,在此先感谢,
您的代码示例有一些语法错误。 将来尝试使用诸如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在示例中建议使用略有不同的方法,但是它执行相同的功能:
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;
}
});
终于成功了,诀窍是使用原型和selectBox,然后在基础地图投影和displayProjection之间进行转换,在这种情况下,介于900913和4326之间。我在这里得到了这个主意: http://osgeo-org.1560 .n6.nabble.com / Order-Priority-of-Control-GetFeature-and-Control-WMSGetFeatureInfo-on-click-td4997282.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.