2013-07-13 26 views
1

我有一个OpenLayers map,它在矢量图层中绘制特征。这些功能是可选的,并有选择弹出。不幸的是,在许多情况下,这些特征重叠,因此选择某些特征是不可能的。我认为我需要做的是解决这个问题,就是改变我的选择控件,以便它使用点击处理程序并在此处搜索地图上的特征。我需要写什么样的功能?有没有这样的例子实施之前?javascript函数搜索覆盖像素的所有OpenLayers矢量特征

这是功能是如何得出:

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; 

这里是click事件侦听我打算用:

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 
      }, 

回答