マップを拡大または縮小するたびに、マーカーのサイズを変更しようとしています。現在、私はこのアプローチを使用しています:
- 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固有の問題ではなく、マップ(Google、リーフレット、またはマップボックスのいずれか)の論理的な問題であるため、Googleマップにもタグを付けます。