javascript - 根据当前缩放传单更改 ClusterRadius
问题描述
我正在尝试找到一种方法来根据当前缩放更改聚类半径。
我希望在较高的缩放级别上比在较低的缩放级别上更少的聚类,这是我想要实现的,但它工作得不是很好,有些东西丢失或做错了......
map.on('zoomend', function() {
var currentZoom = map.getZoom();
if (currentZoom > 9) {
return 20
} else {
return 80
}
});
var mcg = new L.MarkerClusterGroup({
chunkedLoading: true,
maxClusterRadius: currentZoom,
})
解决方案
您的
currentZoom
变量在地图 zoomend 事件的事件侦听器的内部范围内声明。您无法在该范围之外访问它。更改分配给变量的原始值不会使所有其他分配相应地更新。然而,Leaflet.markercluster 插件 API 确实提供了一种方法来覆盖这个用例:而不是为
maxClusterRadius
选项提供原始值,而是提供一个返回给定地图缩放级别的半径的函数:
https://github.com/Leaflet/Leaflet.markercluster#other-options
您还可以使用接受当前地图缩放并返回以像素为单位的最大集群半径的函数。
因此,在您的情况下:
L.markerClusterGroup({
chunkedLoading: true,
maxClusterRadius: function (mapZoom) {
if (mapZoom > 9) {
return 20;
} else {
return 80;
}
},
});
推荐阅读
- java - 仅从 editText 检测和更改“hello”文本 font-family
- php - 如何在 PHP 中包含用字符串标记的文件?
- java - 不完整的类型:
无法转换为组件 - flutter - Flutter:未处理的异常:“String”类型不是“bool”类型的子类型
- typescript - “字符串”类型的索引签名只允许读取
- javascript - 使用 PHP 和 JavaScript 以模态显示表格数据
- python - 没有使用 python 抓取从 HTML 获取数据
- interop - 有什么东西阻碍了现代语言和 COBOL 之间的互操作性吗?
- microsoft-teams - 团队 - 图形 API - 无法使用已定义的组织者/指定频道创建活动
- javascript - 如何在 time-phaser3 创建一枚硬币