Interaction.defaults在特定的vectorLayer上,并在地图初始化后添加

时间:2015-03-04 12:20:23

标签: openlayers-3

我在使用ol.interaction.defaults()。extend()时遇到了麻烦。我希望你能帮助我:)。

我在Drag feature example 上重新实施了plunker以进行测试。

var dragInteraction = new ol.interaction.defaults().extend([new app.Drag()]);

var map = new ol.Map({
  interactions: dragInteraction,
  layers: [
    new ol.layer.Tile({
      source: new ol.source.TileJSON({
        url: 'http://api.tiles.mapbox.com/v3/mapbox.geography-class.jsonp'
      })
    }),
    layerA,
    layerB
  ],
  target: 'map',
  view: new ol.View({
    center: [0, 0],
    zoom: 2
  })
});

//map.addInteraction(dragInteraction);

我必须提出问题:

  1. 我想只为layerA启用dragInteraction(不是 layerB);我怎么能这样做?
  2. 我想在此之后添加此互动     地图已创建。但是,我尝试,有一个执行     错误。我不知道一旦创建了地图,它是否可以将ovveride默认交互?
  3. 我搜索了OL3-Dev& API文档,但没有找到正确的解决方案。

    备注:

    • 我必须在变量
    • 中保留单独的矢量图层
    • 我真的想添加AFTER之间的交互,以便更好地进行架构设计。
    • 我的目标是检索拖拽覆盖/功能的坐标。

    求助于你:)

2 个答案:

答案 0 :(得分:1)

  

我想只为layerA(而不是layerB)启用dragInteraction;我怎么能这样做?

您可以随时在地图初始化后使用以下内容添加新的互动:

map.addInteraction(new app.Drag());
  

我想在创建地图后添加此交互。但是,我尝试,有一个执行错误。我不知道一旦创建了地图,它是否可以将ovveride默认交互?

在拖动互动中,您使用map.forEachFeatureAtPixel,其中包含参数layerFilter。您可以像这样使用它:

var layerFilter = function(layer) {
  return layer === layerA;
}

var feature = map.forEachFeatureAtPixel(evt.pixel,
    function(feature, layer) {
      return feature;
    }, this, layerFilter, this);

答案 1 :(得分:1)

喜欢上面的建议。为图层命名,实现图层过滤器,并在创建地图后添加交互。

我将你的plunker作为一个例子。

此致