javascript - React + Leaflet - 图层的 Setstyle 正在绘制多个 CircleMarkers
问题描述
每当我将鼠标放在 div 上时,我都在使用 React 和 Leaflet 并尝试绘制一些 CircleMarkers。此 div 包含 1 个或多个 CircleMarkers 坐标的信息(这些是我要更改颜色的 circleMarkers)。
我像这样初始化地图:
this.map = L.map("map", { zoomControl: false });
let layer = L.tileLayer(
"https://api.tiles.mapbox.com/v4/...",
{ [...] }
);
然后像这样添加 circleMarkers:(如https://stackoverflow.com/a/43019740/2211939中所建议)
this.totalElements.forEach(value => {
let circle = new L.CircleMarker(
[value.geometry.coordinates[1], value.geometry.coordinates[0]],
{
renderer: this.myRenderer,
radius: 5,
[...]
}
)
.addTo(this.map)
}
然后,当我悬停 div 时,执行的函数是这个:
changeCirclesColor = parent => {
this.map.eachLayer(layer => {
if (layer instanceof L.CircleMarker) {
for (let child of parent.childrenGeometry) {
if ( //THE GEOMETRY IS THE SAME) {
console.log('PAINTED!'); // THIS IS PRINTED ONLY ONCE
layer.setStyle({
fillColor: "#00d3be",
[...]
});
[...]
但是,即使只有一个子元素,也有许多其他 circleMarker 也会改变它们的样式。如果只有一个孩子,当我打印“layer._latlng”时,只有一对坐标,这(我猜)意味着该层中只有 circleMarker。另外,layer.setStyle() 函数只执行一次,我想说,因为 console.log 只打印一次。
我错过了什么?
解决方案
解决了。显然,我使用的渲染存在问题,在文档的最顶部声明: this.myRenderer = L.canvas({ padding: 0.5 });
每次创建渲染器时,我都会将此渲染器添加到 CircleMarker。我不知道删除它可能会产生什么影响,但现在功能正常,所以我就这样离开它,希望我没有把事情搞砸。
老实说,我会删除这篇文章,因为它是如此具体,以至于我认为没有人会遇到同样的问题。但以防万一,我会把它留在这里,希望将来可以为某人节省一些时间。
推荐阅读
- postgresql - 插入语句中不存在的地方 - POSTGRESQL
- wordpress - 如何禁用模板中声明的 Gutenberg InnerBlock 元素的工具栏?
- python - 函数完成后的Python启动代码
- vhdl - VHDL 过程声明
- node.js - Mongodb更新'set'而不删除旧的
- python - 为什么 list1 中的更改没有反映在 list2 中?
- python - 如何迭代 ID#s 以提取 API JSON
- html - 如何使网页响应并同时设置刷新率?
- mysql - 无法在 ubuntu 16.04 上安装 mysql-server 5.7
- java - 运行 jar 时找不到或加载主类?