0

我制作了一张地图,基于 geojson 文件和集群标记。

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

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

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

我希望我足够清楚。下面是我的代码示例(我试图使其可读):

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);

4

2 回答 2

0

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

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);
    });
});

我会说它的用户体验很好,当搜索为空时也可以将它们全部重新添加,但是传单搜索没有明显的事件。

于 2021-06-15T15:42:58.160 回答
0

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

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/

于 2021-06-16T08:54:05.283 回答