每次放大或缩小地图时,我都会尝试调整标记的大小。目前我正在使用这种方法:
- 在 zoomend 方法中迭代所有标记。
- 获取当前图标大小
- 执行一些计算以根据缩放大小获得新的标记大小。
将新维度设置为图标对象。
map.on('zoomend', function() { zoomEndLevel = map.getZoom(); var difference = zoomEndLevel - zoomStartLevel; console.log("difference in zoom " + difference); markerArray.forEach(function(marker) { var icon = marker.options.icon; var oldX = icon.options.iconSize[0]; var oldY = icon.options.iconSize[1]; var newX = getNewIconAxis(oldX, difference); var newY = getNewIconAxis(oldY, difference); console.log(newX + " " + newY); icon.options.iconSize = [ newX, newY ]; marker.setIcon(icon); });
});
map.on('zoomstart', function() { zoomStartLevel = map.getZoom();
});
function getNewIconAxis(value, zoomChange) { if (zoomChange > 0) { for (var i = zoomChange; i > 0; i--) { value = value * 2; } } else { for (var i = zoomChange; i < 0; i++) { value = value / 2; } } return value;
}
问题:如果我一次放大和缩小 1 个级别,此代码可以正常工作。如果我太频繁地滚动进出鼠标,那么这段代码会给出奇怪的输出。有时标记大小会变得太大或太小。
问题:1)这是使标记在不同缩放级别上调整大小的唯一方法吗?2)如果是,那么我在这里缺少什么或者应该进行哪些更改以使其完美运行。?
注意:标记谷歌地图也是因为它更多的是地图(谷歌或传单或地图框)的逻辑问题,而不是特定于 api 的问题。