标记在传单搜索中显示两次

问题描述

我根据 geojson 文件和聚类标记制作了一张地图。

然后我尝试添加传单搜索插件搜索功能有效:当我搜索 somtehing 时,它会打开好的弹出窗口(信息由“复杂”例程生成)。

但现在我的标记显示了两次:我之前创建的标记,然后是搜索插件显示标记

如何使传单搜索不显示自己的标记

我希望我说得够清楚了。下面是我的代码示例(我试图让它可读):

var geojsonFeature = { mygeojsondata };


// Runs several function to generate an "information page" for each feature
function createPopupInfo(feature,layer) {
    var pop = render_name(feature);
    //
    // ...
}

var nbfeatures = 0;
var layer1 = new L.geoJSON(geojsonFeature,{
    onEachFeature: createPopupInfo,pointToLayer: function (feature,latlng) {
        nbfeatures++;
        var marker = L.marker(latlng)
        arrayOfLatLngs.push(latlng);
        marker.on("add",function (event) {
            // Retrieve the layer through event.target http://leafletjs.com/reference-1.0.0.html#event-target
            event.target.openPopup();
            var latLngs = [marker.getLatLng()];
            var markerBounds = L.latLngBounds(latLngs);
            map.fitBounds(markerBounds);
        });
        map.maxBoundsViscosity = 0;
        return marker;
    }
});


var searchControl = new L.Control.Search({
    layer: layer1,propertyName: 'search_index',marker: false,movetoLocation: function (latlng,title,map) {
        map.setView(latlng,17);
    }
});

searchControl.on('search:locationfound',function (e) {
    if (e.layer._popup)
        e.layer.openPopup();

}).on('search:collapsed',function (e) {
    layer1.eachLayer(function (layer) { //restore feature color
        layer1.resetStyle(layer);
    });
});

// Clustering
var markers = L.markerClusterGroup();
markers.addLayer(layer1);
map.addLayer(markers);

解决方法

当搜索找到某些东西时,利用该事件删除带有所有标记的图层:

searchControl.on('search:locationfound',function (e) {
    if (e.layer._popup) e.layer.openPopup();
    markers.removeLayer(layer1)
})

当然,您还需要在关闭搜索时重新添加这些标记:

searchControlon('search:collapsed',function (e) {
    markers.addLayer(layer1);
    layer1.eachLayer(function (layer) { //restore feature color
        layer1.resetStyle(layer);
    });
});

我会说当搜索结果为空时将它们全部添加回来是很好的用户体验,但是对于传单搜索没有明显的事件。

,

我发现什么不起作用,我必须通过“聚集层”:

var searchControl = new L.Control.Search({
    layer: markers,propertyName: 'search_index',...

来源: https://gis.stackexchange.com/questions/310797/using-l-control-search-and-l-markerclustergroup https://github.com/stefanocudini/leaflet-search/issues/166 另一个例子: http://embed.plnkr.co/46VJcp/

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...