根据层级放大缩小图标
由于图标不会跟随图层的放大缩小而放大缩小,所以在某些业务应用中,可能并不合适,需要也跟随变化。 之前就有同学提到这个问题,在ol.style.Icon
中是可以设置scale
的,这样就为
我们提供了方便。 通过设置它,就可以做到。 下面这个地图中的锚点图标,就会随着地图放大缩小而变化大小:
和之前的代码绝大部分都是相同的:
<div id="map" style="width: 100%"></div>
<script type="text/javascript">
var layer = new ol.layer.Vector({
source: new ol.source.Vector()
})
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
}),
layer
],
target: 'map',
view: new ol.View({
projection: 'EPSG:4326',
center: [104, 30],
zoom: 10
})
});
var anchor = new ol.Feature({
geometry: new ol.geom.Point([104, 30])
});
anchor.setStyle(new ol.style.Style({
image: new ol.style.Icon({
src: '../img/anchor.png'
})
}));
layer.getSource().addFeature(anchor);
// 监听地图层级变化
map.getView().on('change:resolution', function(){
var style = anchor.getStyle();
// 重新设置图标的缩放率,基于层级10来做缩放
style.getImage().setScale(this.getZoom() / 10);
anchor.setStyle(style);
})
</script>
利用一个监听和scale
改变,就实现了这个同比缩放。 具体缩放多少,请根据业务来设置,可以设置的更加精细,此处只是功能示例。 其实还有另外一种方式,可以实现动态缩放大小,参见styleFunction应用。