选择互动“选择”事件

时间:2016-10-10 13:31:51

标签: openlayers-3

我为ol3地图创建了一个精选互动,并附加了一个精选事件处理程序。

{{1}}

如何查询'evt'以确定:

  • 点击了哪个功能来触发事件?
  • 此功能的ID和其他属性?
  • 是否已选择或取消选择该功能?

2 个答案:

答案 0 :(得分:1)

select发出的ol.SelectInteraction事件已记录在案here

如您所见,evt.selected将是刚刚选中的所有功能的数组。在addCondition为真时单击新要素时,它不会包含已选择的已选定要素。这些是尚未选择的点击功能,并且与要包含在选择中的过滤器相匹配。

同样,evt.deselected将包含刚取消选择的所有功能。

您可以通过以下方式获取每个功能的ID和属性:

var featureID = feature.getId()
var properties = feature.getProperties()
var someSpecificProperty = feature.get("property-name")

有关该功能及其属性的详情,请参阅ol.Feature的文档。

答案 1 :(得分:0)

以下是一些可以帮助您的项目.. evt.selected可以为您提供所选的功能。此示例位于群集层上,您可以对所选要素使用get函数从所选对象中检索属性。如果您不了解可用的属性,请使用console.dir(evt)使用控制台检查对象。

   selectInteraction.on('select', function(evt){
      var coord = evt.mapBrowserEvent.coordinate;
      var selItems = evt.selected;
      var sellength = selItems.length;
      var rptFrame = parent.window.frames["rptframe"];
      for (var i = 0; i < sellength; i++) {
        var label = selItems[i].get('l');
        var url = selItems[i].get('url');
        if (url) {
          rptFrame.location.href = url;
        } else {
          var feaObj = selItems[i].get('features');
        if (feaObj.length == 1) {
           url = feaObj[0].get('url');
           rptFrame.location.href = url;
        } else {
          writeMultiSelect(rptFrame,selItems);
        }
      }
    }
  });