openlayers - 如何在 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
解决方案
如果有人仍在寻找这个问题的答案,您可以使用dispatch
Map 对象上的方法手动调度操作。这样做的必要条件(在这个特定的用例中)将提供一个类型和一个像素坐标。因此,例如,要触发一条消息:
map.on('click', ({ pixel }) => {
console.debug(`Pixel ${pixel} was clicked`);
});
你可以这样做:
map.dispatchEvent({ //
type: 'click',
pixel: [100, 100],
});
推荐阅读
- java - 尝试通过 SIngleton 模式连接到 MySQL 数据库
- python - Python Numpy 数组修改
- c# - Regex Match base64 string and remove non-matching text/charcters
- matlab - 在 MATLAB 中使用 XCORR 对瞬态信号进行时延估计
- java - 正则表达式模式以允许空间
- c# - 用于溢出检查 c# 的环境配置?
- c++ - C++ 二叉树对象,带有 1 个参数的“插入”方法
- javascript - HTML - 更改复选框选择时的 div 最大宽度属性
- ssl - 如何在 IIS 上使用自签名证书在 localhost 上配置 SSL?
- h2o - 从 python 重用 h2o 模型 mojo 或 pojo 文件