首页 > 解决方案 > 如何在 OpenLayers 地图版本 4.6.4 上触发、模拟或调度点击事件?

问题描述

我有一张地图,其中包含从地理服务器加载的 wfs 图层,这些要素是使用 bbox 策略加载的,因为其中有超过 60,000 个。我有一个简单的点击功能,可以显示每个功能的信息

map.on('click', function(evt) {
//random stuff to do here
  var pixel = evt.pixel;
  displayFeatureInfo(pixel); //function to get features and display the info
});

对于我的搜索栏,我使用easyAutocomplete 来搜索一个json,其中每个多边形都有中心坐标。它找到包裹,获取纬度和经度并平移到它并放大就好了。

onChooseEvent: function(evt) {
    var parcelValue=$("#name").getSelectedItemData().parcel;
    document.getElementById('name').value=parcelValue;
    var selectedItemCoordX = $("#name").getSelectedItemData().long;
    var selectedItemCoordY = $("#name").getSelectedItemData().lat;
    var valcoordx=parseFloat(selectedItemCoordX);
    var valcoordy=parseFloat(selectedItemCoordY);
    var coords=[valcoordx, valcoordy];
    var pixel = map.getPixelFromCoordinate(coords);
    map.getView().setCenter(ol.proj.transform(coords, 'EPSG:4326', 'EPSG:3857'));
    map.getView().setZoom(19);

  }

怎么可能使用抓取的坐标或像素,一旦你选择,点击地图,一旦你移动到那里,点击事件就会被触发并且弹出窗口会显示,而无需用户手动执行?

我在地图、视口和画布上尝试过 .trigger("click") ,我也尝试过 .click() 和 triggerEvent() 函数,但这些都不会产生错误。我也试过map.dispatchEvent("click");,这会产生这个错误Uncaught TypeError: Cannot read property 'slice' of undefined

标签: openlayers

解决方案


如果有人仍在寻找这个问题的答案,您可以使用dispatchMap 对象上的方法手动调度操作。这样做的必要条件(在这个特定的用例中)将提供一个类型和一个像素坐标。因此,例如,要触发一条消息:

map.on('click', ({ pixel }) => {
  console.debug(`Pixel ${pixel} was clicked`);
});

你可以这样做:

map.dispatchEvent({    //        
  type: 'click',
  pixel: [100, 100],
});

推荐阅读