如何更改传单标记聚类扩展的单个标记节点图标?

How can i change the single marker node icon of the leaflet marker clustering extension?

我想为传单标记聚类扩展的单值标记使用自定义图标。使用以下代码片段更改传单的默认图标不起作用:

var newIcon = L.Icon.Default.extend({
            options: {
                    iconUrl: 'new_icon_location.png' 
            }
         });

标记聚类扩展:https://github.com/Leaflet/Leaflet.markercluster

至于在 Leaflet 中创建图标,语法为:

var newIcon = L.icon({
    iconUrl: 'new_icon_location.png'
});

如果您希望 all 标记使用该图标而不是默认图标(即您认为的 L.Icon.Default),您应该覆盖 icon L.Marker class 的选项(当然是在开始实例化标记之前):

L.Marker.mergeOptions({
    icon: newIcon
});

关于更改 Leaflet.markercluster 插件使用的默认图标,您应该使用选项 iconCreateFunction:

var mcg = L.markerClusterGroup({
    iconCreateFunction: function (cluster) {
        // create an icon, possibly based on cluster properties.
        return clusterIcon;
    }
});

现在,当您说“为传单标记聚类的单值标记使用自定义图标”时,我不确定您打算做什么。我猜你使用选项 singleMarkerMode 并且你希望将特定图标应用到 "clusters of size 1" (实际上是普通标记,哪个图标被 Marker Cluster 插件覆盖)?

在那种情况下,一个简单的解决方案就是不使用 singleMarkerMode 选项,而是让所有的个人标记都使用该特定图标。可能确实通过替换标记的默认图标。

但是如果出于某种原因您仍想使用 singleMarkerMode 选项,那么它也没有那么复杂。例如,您可以这样做:

var mcg = L.markerClusterGroup({
    singleMarkerMode: true,
    iconCreateFunction: function (cluster) {
        var childCount = cluster.getChildCount();
        return childCount === 1 ? iconForSize1 : someOtherIcon;
    }
});