【问题标题】:Leaflet custom marker icon scale to zoom传单自定义标记图标缩放以缩放
【发布时间】:2016-04-27 05:19:54
【问题描述】:

我使用 Leaflet 绘制 OpenStreetMap 并使用自定义图标标记附加它

var mymap = L.map('mapid').setView([x, y], 13);

    L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}', {
        attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://mapbox.com">Mapbox</a>',
        maxZoom: 18,
        id: ID,
        accessToken: accessToken
    }).addTo(mymap);

    var busIcon = new L.Icon({
        iconUrl: 'images/marker/bus.png',
        // shadowUrl: 'images/leaflet/marker-shadow.png',
        iconSize: [12, 12],
        iconAnchor: [12, 41],
        popupAnchor: [1, -34],
        // shadowSize: [41, 41]
    });

    var marker = L.marker([x, y],{icon:busIcon}).addTo(mymap);

    mymap.on('zoomed', function() {
        var currentZoom = mymap.getZoom();
        busIcon = new L.Icon({
            iconUrl: 'images/marker/bus.png',
            iconSize: [mymap.getZoom*2, mymap.getZoom*2],
            iconAnchor: [12, 41],
            popupAnchor: [1, -34],
        });
        marker.setIcon(busIcon);
    });

现在我想根据缩放级别调整标记图标的大小。我上面的代码有问题。我该怎么办?如果标记是CircleMaker,则有一个setRadius 函数可以让我轻松处理。但在这种情况下,标记是一个自定义图标,我按照上面的方法尝试过,但失败了。如何解决?

【问题讨论】:

    标签: javascript leaflet zooming openstreetmap marker


    【解决方案1】:

    正如 YaFred 所说,有一些拼写错误,例如 zoomend,还有 mymap.getZoom 应该是 mymap.getZoom()

    我对这个老问题做出了新的回答,以提出更有效的解决方案。您可以将className 添加到您的图标(请参阅leaflet documentation)。 这意味着我们可以通过css来编辑图标的高度和宽度!在您的 zoomend 函数中,无需创建新图标,只需调用此 JQuery:

    var newzoom = '' + (2*(mymap.getZoom())) +'px';
    $('#mapid .YourClassName').css({'width':newzoom,'height':newzoom}); 
    

    对于大量的标记,这将显着提高您的性能,如此 stackoverflow 问题中所述: Leaflet custom icon resize on zoom. Performance icon vs divicon

    【讨论】:

    • 绝妙的答案!
    【解决方案2】:

    你打错了:zoomed 应该是 zoomend

    map.on('zoomend', function() {
    });
    

    http://plnkr.co/edit/72ywrO8pgmmxLW6Y8mcL?p=preview

    除此之外,我会创建图标并将其保留在 zoomend 回调之外。

    事实上,每次缩放发生变化时,您的代码都会创建一个图标。

    【讨论】:

    • 我打算在每次缩放时创建新图标,因为没有setSize 功能可供我调整大小
    • 代码中的问题是缩放错字。你试过纠正它吗?
    • @YaFred,我使用了你的代码,但没有任何改变,我仍然有缩放的默认行为
    • 我知道这是一个老话题,但我也需要帮助并尝试了 OP 的代码。它在更正另一个错字后起作用:iconSize: [mymap.getZoom*2, mymap.getZoom*2]。使用括号 -mymap.getZoom()- 调用函数或使用定义的变量
    猜你喜欢
    • 1970-01-01
    • 2018-10-07
    • 2017-10-14
    • 1970-01-01
    • 2014-01-05
    • 2011-03-31
    • 1970-01-01
    • 2017-07-11
    • 2021-10-31
    相关资源
    最近更新 更多