从传单地图中删除所有 divIcon,然后恢复它们
Delete all divIcon's from leaflet map then recover them
我想在缩放级别 < 16 时从地图中删除所有 divIcon,
<MapContainer className="leaflet-map" center={[latitude, longitude]}
zoom={17} scrollWheelZoom={false}
whenCreated={(map) => this.setState({ map })}>
<TileLayer
attribution='© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
/>
</MapContainer>
我试过map._panes.markerPane.remove();
但我无法在它们删除后添加其他标记
componentDidUpdate() {
const { map } = this.state;
map.on('zoomend', function () {
var currentZoom = map.getZoom();
if (currentZoom < 16) {
//map._panes.markerPane.remove();
} else {
L.marker(latitude, longitude], {
icon: new L.DivIcon({
className: 'my-div-icon',
iconSize: [5, 5],
html: '<p class="my-div-span">' + name + '</p>'
})
})
.addTo(map);
}
});
}
虽然我不完全理解您是如何添加标记的,以及您从哪里获得纬度、经度和名称,但您必须将标记存储在一个数组中,然后使用地图引用将它们从地图中删除。
因此,如果我们考虑到当放大到等于或大于 16 的地图级别时,否则您将使用相同的文本复制相同的标记,并且如果多次添加相同的文本,文本将变为粗体,您应该做类似这样的事情:
const markers = []; // here define an empty array
class Map extends Component {
state = { map: null };
componentDidUpdate(prevProps, prevState) {
const { map } = this.state;
map.on("zoomend", function () {
var currentZoom = map.getZoom();
console.log(currentZoom);
if (currentZoom < 16) {
markers.forEach((marker) => map.removeLayer(marker));
} else {
const marker = L.marker([latitude, longitude], {
icon: new L.DivIcon({
className: "my-div-icon",
iconSize: [5, 5],
html: '<p class="my-div-span">' + name + "</p>"
})
});
markers.push(marker);
marker.addTo(map);
}
});
}
...
}
如果标记小于 16,则删除所有存储的标记,否则将它们添加到地图和标记数组中。
我想在缩放级别 < 16 时从地图中删除所有 divIcon,
<MapContainer className="leaflet-map" center={[latitude, longitude]}
zoom={17} scrollWheelZoom={false}
whenCreated={(map) => this.setState({ map })}>
<TileLayer
attribution='© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
/>
</MapContainer>
我试过map._panes.markerPane.remove();
但我无法在它们删除后添加其他标记
componentDidUpdate() {
const { map } = this.state;
map.on('zoomend', function () {
var currentZoom = map.getZoom();
if (currentZoom < 16) {
//map._panes.markerPane.remove();
} else {
L.marker(latitude, longitude], {
icon: new L.DivIcon({
className: 'my-div-icon',
iconSize: [5, 5],
html: '<p class="my-div-span">' + name + '</p>'
})
})
.addTo(map);
}
});
}
虽然我不完全理解您是如何添加标记的,以及您从哪里获得纬度、经度和名称,但您必须将标记存储在一个数组中,然后使用地图引用将它们从地图中删除。 因此,如果我们考虑到当放大到等于或大于 16 的地图级别时,否则您将使用相同的文本复制相同的标记,并且如果多次添加相同的文本,文本将变为粗体,您应该做类似这样的事情:
const markers = []; // here define an empty array
class Map extends Component {
state = { map: null };
componentDidUpdate(prevProps, prevState) {
const { map } = this.state;
map.on("zoomend", function () {
var currentZoom = map.getZoom();
console.log(currentZoom);
if (currentZoom < 16) {
markers.forEach((marker) => map.removeLayer(marker));
} else {
const marker = L.marker([latitude, longitude], {
icon: new L.DivIcon({
className: "my-div-icon",
iconSize: [5, 5],
html: '<p class="my-div-span">' + name + "</p>"
})
});
markers.push(marker);
marker.addTo(map);
}
});
}
...
}
如果标记小于 16,则删除所有存储的标记,否则将它们添加到地图和标记数组中。