每次放大或缩小地图时,我都会尝试调整标记的大小。 目前我正在使用这种方法:
将新维度设置为图标对象。
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的问题。
答案 0 :(得分:0)
看起来您之前有几篇帖子可以指导您:
至于您的错误,而不是在value
事件中阅读当前图标大小"zoomstart"
,您可能最好记住之前的缩放值并仅在"zoomend"
事件中读取它。我不确定"zoomstart"
事件只在连续滚动(放大/缩小)时触发一次,而"zoomend"
事件可能只在最后触发。