传单标记簇增加标记的权重
Leaflet Marker Cluster add weight to marker
我有一张传单地图,我正在使用 Leaflet.markerCluster 插件来聚类我的标记。我有一些标记代表同一位置的多个点。不幸的是,当它聚集时,它只代表一个点。有没有办法为每个标记添加权重?以至于集群把它看成不止一个点?
基本上我希望 clusterWeight 属性 像下面这样:
var newMarker = L.marker(coordinates, {
icon: myIcon,
clusterWeight: 5
});
但是这个属性不存在。有人知道解决方法吗?谢谢!
首先您需要创建一个支持自定义属性的标记。您可以像这样扩展默认 L.Marker
来做到这一点:
var weightMarker = L.Marker.extend({
options: {
customWeight: 0
}
});
然后您可以利用 Leaflet.markercluster 的 iconCreateFunction
创建自定义聚类标记,方法是更改标记上显示的内容:
var markers = L.markerClusterGroup({
iconCreateFunction: function(cluster) {
// iterate all markers and count
var markers = cluster.getAllChildMarkers();
var weight = 0;
for (var i = 0; i < markers.length; i++) {
if(markers[i].options.hasOwnProperty("customWeight")){
weight += markers[i].options.customWeight;
}
}
var c = ' marker-cluster-';
if (weight < 10) {
c += 'small';
} else if (weight < 100) {
c += 'medium';
} else {
c += 'large';
}
// create the icon with the "weight" count, instead of marker count
return L.divIcon({
html: '<div><span>' + weight + '</span></div>',
className: 'marker-cluster' + c, iconSize: new L.Point(40, 40)
});
}
});
我有一张传单地图,我正在使用 Leaflet.markerCluster 插件来聚类我的标记。我有一些标记代表同一位置的多个点。不幸的是,当它聚集时,它只代表一个点。有没有办法为每个标记添加权重?以至于集群把它看成不止一个点?
基本上我希望 clusterWeight 属性 像下面这样:
var newMarker = L.marker(coordinates, {
icon: myIcon,
clusterWeight: 5
});
但是这个属性不存在。有人知道解决方法吗?谢谢!
首先您需要创建一个支持自定义属性的标记。您可以像这样扩展默认 L.Marker
来做到这一点:
var weightMarker = L.Marker.extend({
options: {
customWeight: 0
}
});
然后您可以利用 Leaflet.markercluster 的 iconCreateFunction
创建自定义聚类标记,方法是更改标记上显示的内容:
var markers = L.markerClusterGroup({
iconCreateFunction: function(cluster) {
// iterate all markers and count
var markers = cluster.getAllChildMarkers();
var weight = 0;
for (var i = 0; i < markers.length; i++) {
if(markers[i].options.hasOwnProperty("customWeight")){
weight += markers[i].options.customWeight;
}
}
var c = ' marker-cluster-';
if (weight < 10) {
c += 'small';
} else if (weight < 100) {
c += 'medium';
} else {
c += 'large';
}
// create the icon with the "weight" count, instead of marker count
return L.divIcon({
html: '<div><span>' + weight + '</span></div>',
className: 'marker-cluster' + c, iconSize: new L.Point(40, 40)
});
}
});