我有一个OpenLayers map可以在矢量层中绘制要素。这些功能是可选的,并且在选择时会弹出一个窗口。不幸的是,在许多情况下,功能重叠,因此可能无法选择某些功能。我认为解决此问题所需要做的就是更改我的选择控件,以便它使用单击处理程序并在地图上搜索功能。我需要编写什么样的函数?之前有没有实施过的示例?
这是绘制特征的方式:
var vector_Layer = new OpenLayers.Layer.Vector();
function GetFeaturesFromKMLString (strKML) {
var format = new OpenLayers.Format.KML({
'internalProjection': new OpenLayers.Projection("EPSG:900913"),
'extranalProjection': new OpenLayers.Projection("EPSG:4326")
});
return format.read(strKML);
};
vector_Layer.addFeatures(GetFeaturesFromKMLString('$newkml'));
这是当前选择图层的方式:
var select = new OpenLayers.Control.SelectFeature(vector_Layer, {clickout: true});
vector_Layer.events.on({
"featureselected": onFeatureSelect,
"featureunselected": onFeatureUnselect});
map.addControl(select);
select.activate();
select.handlers['feature'].stopDown = false;
select.handlers['feature'].stopUp = false;
这是我计划使用的点击事件监听器:
OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {
defaultHandlerOptions: {
'single': true,
'double': false,
'pixelTolerance': 0,
'stopSingle': false,
'stopDouble': false
},
initialize: function(options) {
this.handlerOptions = OpenLayers.Util.extend(
{}, this.defaultHandlerOptions
);
OpenLayers.Control.prototype.initialize.apply(
this, arguments
);
this.handler = new OpenLayers.Handler.Click(
this, {
'click': this.onClick
}, this.handlerOptions
);
},
onClick: function(evt) {
//function that seachers for and selects features at this point
},
最佳答案
由于矢量要素使用OpenLayers.Geometry类作为几何描述,因此您应该看一下Geometry,有一种相交方法可能会有用:
参见:http://dev.openlayers.org/releases/OpenLayers-2.13/doc/apidocs/files/OpenLayers/Geometry/Point-js.html
您还需要拦截click事件以运行相交检查。