同时定位传单中的几个重叠特征

时间:2017-03-28 00:09:54

标签: leaflet geojson

我是传单的新手,但我正在尝试实现一个用例,我在这里找不到任何示例或问题。提前感谢您帮助解决这个问题:

现场演示是herehere's是GitHub存储库中感兴趣的代码。

当您将鼠标悬停在各种geoJSON功能上时,我使用onEachFeature将样式更改为“突出显示”'该地图上的特色区域,并在右上角的信息框中显示其名称:

function onEachFeature (feature, layer) {
    layer.on({
        mouseover: highlightFeature,
        mouseout: resetHighlight
    });
    layer.bindPopup(feature.properties.f2,customOptions);
}

var geojson;
geojson = L.geoJson(myData,{
    style: style,
    onEachFeature: onEachFeature,
}).addTo(map);

问题出现在功能重叠的地方。当鼠标悬停在重叠区域上时,只有一个是目标。相反,我希望所有在光标位置重叠的功能都被突出显示&#39 ;;并能够列出信息框中的所有名称。

我猜测解决方案更像是我应该检索所有mousemove事件的latlng,确定latlng是否在任何geoJSON对象的边界,如果是,则迭代这些突出显示并获取所有人的名字。我不确定是否有一个插件能够更优雅地为我处理这个问题。

无论如何在Leaflet中同时定位多个重叠的geoJSON图层?

1 个答案:

答案 0 :(得分:0)

您描述了一种简单的方法,我建议您使用它。我建议你只做一次优化 不要捕获所有mousemove事件。您需要在每个要素上使用mouseover,然后检查是否有其他要素重叠。

 function onEachFeature (feature, layer){
    layer.on('mouseover',function(e){
      var point = e.latlng;
      map.eachLayer(function(layer){
        var bounds = layer.getBounds();
        if(bounds.contains(point))
           highlite(layer);
      })
    })
 }

另一种方法是使用L.Canvas渲染器并对其进行扩展,以便为指针下的每个图层触发mouseover或其他处理程序。