标记在传单搜索中显示两次
Markkers are displayed twice with Leaflet search
我根据 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/
我根据 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/