Вы можете сделать это с помощью функции стиля, изменяющей масштаб при изменении разрешения. Разрешение может сильно измениться, поэтому вы можете изменить масштаб в обратном соотношении квадратный корень или кубический корень из разрешения, поэкспериментируйте, чтобы увидеть, что подходит вашему приложению.
Если установлено для функции, синтаксис зависит от версии OpenLayers
OpenLayers 4:
marker.setStyle(function(resolution) {
iconStyle.getImage().setScale(1/Math.pow(resolution, 1/3));
return iconStyle;
});
OpenLayers 5:
marker.setStyle(function(feature, resolution) {
iconStyle.getImage().setScale(1/Math.pow(resolution, 1/3));
return iconStyle;
});
Или вы можете установить стиль на слое, где синтаксис одинаков в обеих версиях
var markerVectorLayer = new ol.layer.Vector({
source: vectorSource,
style: function(feature, resolution) {
iconStyle.getImage().setScale(1/Math.pow(resolution, 1/3));
return iconStyle;
}
});