第一:功能不会触发点击!有关触发事件功能的信息,请查看http://openlayers.org/en/master/apidoc/ol.Feature.html。
为了检查一个特征是否被点击,有.forEachFeatureAtPixel(pixel, callback)
ol.Map 的功能。( http://openlayers.org/en/master/apidoc/ol.Map.html#forEachFeatureAtPixel ) 回调在像素的每个特征上执行。回调传递了 2 个参数:特征和特征所在的层。
.getEventPixel(event)
如果您不使用 openlayers 事件处理程序而是使用视口上的处理程序,那么很高兴知道该功能。如果您使用 openlayers 事件处理程序,则该事件有一个属性.pixel
。( http://openlayers.org/en/master/apidoc/ol.Map.html#getEventPixel ) 这些方法.getEventCoordinate(event)
也.getCoordinateFromPixels(pixels)
可能有用。
所以你会像这样将它添加到你的 map.on("click", ... :
map.on("click", function(e) {
map.forEachFeatureAtPixel(e.pixel, function (feature, layer) {
//do something
})
});
与 jQuery 相同:
$(map.getViewport()).on("click", function(e) {
map.forEachFeatureAtPixel(map.getEventPixel(e), function (feature, layer) {
//do something
});
});
与纯 JS 相同:
map.getViewport().addEventListener("click", function(e) {
map.forEachFeatureAtPixel(map.getEventPixel(e), function (feature, layer) {
//do something
});
});
您可能还想查看这个例子,这个函数有两种用途,第一种是 openlayers 事件,第二种是 jQuery 事件:
http ://openlayers.org/en/master/examples/icon.js
笔记
也可以使用 ol.interaction.Select ( http://openlayers.org/en/master/apidoc/ol.interaction.Select.html?unstable=true ) 来做到这一点,但这有点过于强大了对于这种情况。并且它有一些不直观的警告,因为 openlayers 在内部将选定的特征移动到另一个所谓的非托管层。
无论如何,这通过向属于交互的集合添加侦听器来工作。可以使用 检索该集合.getFeatures()
。
interaction.getFeatures().on("add", function (e) {
// do something. e.element is the feature which was added
});