【问题标题】:Leaflet -- can't change radius on circlemarker on zoom传单 - 无法在缩放时更改圆形标记的半径
【发布时间】:2015-07-07 10:33:09
【问题描述】:

我正在使用Leaflet 来可视化点数据,并且我正在尝试根据缩放级别更改圆的半径。

用户放大越多,半径就越大

Work in progress available here.

这是我目前所拥有的。

第一行设置初始半径:

var damsRadius = 2;

然后我有一个 zoomend 事件来获取缩放级别,然后使用该缩放级别来确定新的半径:

map.on('zoomend', function(e) {
    var currentZoom = map.getZoom();
    console.log("Current Zoom" + " " + currentZoom);
    if (currentZoom <= 6) {
        damsRadius = 2;
    } else {
        damsRadius = 6;
    }
    console.log("Dams Radius" + " " + damsRadius);
});

我将半径设置为样式对象的一部分:

function damsStyle(feature) {
    return {
      fillOpacity: 0.8,
      fillColor: getColor(feature.properties.mainuse),
      weight: 1,
      opacity: 1,
      color: '#e0e0e0',
      radius: damsRadius // HERE IS WHERE I SET THE RADIUS
    };
}

然后稍后使用pointToLayer 将整个套件添加到地图:

pointToLayer: function (feature, latlng) {
    return L.circleMarker(latlng, damsStyle(feature));
} 

根据控制台,一切正常运行。放大和缩小显示damsRadius 的值正在按预期变化。

但问题是,地图上各点的半径并没有改变。因此,在此过程中的某个地方,某些事情没有得到沟通。

我用L.circle 尝试了同样的技巧,但它也没有奏效。每次更改缩放级别时是否需要使用clearLayers 函数和redraw

好像有点过分了。

建议?

【问题讨论】:

    标签: javascript leaflet mapbox


    【解决方案1】:

    zoom 更改后,您需要重置样式。

    只需在 map.on('zoomend') 函数中添加以下行

    timeline.setStyle(damsStyle)
    

    所以,你的功能应该是这样的

    map.on('zoomend', function(e) {
        var currentZoom = map.getZoom();
        console.log("Current Zoom" + " " + currentZoom);
        if (currentZoom <= 6) {
          damsRadius = 2;
        } else {
        damsRadius = 6;
        }
        console.log("Dams Radius" + " " + damsRadius);
        timeline.setStyle(damsStyle)//add this line to change the style
    });
    

    注意:您可能需要更改timeline 变量的范围,以便在zoomend 函数中访问它。

    【讨论】:

    • 啊!我什至没有想到 setStyle。你是对的——初步测试表明我必须改变范围。现在没有足够的时间深入研究,但感谢您为我指明了正确的方向!
    • 我将带有新 setStyle 行的 'zoomend' 函数从我的 AJAX 调用外部移动到内部以解决范围问题,现在它就像一个魅力。
    • 可以添加更多优化。上述函数将在每次缩放更改时运行 setStyle() ,无论是否有必要。它应该只在必要时更改样式,也就是缩放超过给定阈值的时候。将上次缩放保存在变量中,并比较缩放和先前缩放以获得更高性能的功能
    猜你喜欢
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 2017-01-30
    相关资源
    最近更新 更多