Openlayers 通过地图缩放更改图标大小

Openlayers 通过地图缩放更改图标大小,openlayers,openlayers-5,Openlayers,Openlayers 5,我正在使用一个图标20x20 pxl显示在地图上,代码如下: 当我缩放地图时,图标看起来很小,如何通过地图缩放更改图标大小 var baseMapLayer=新建ol.layer.Tile({ 来源:new ol.source.OSM() }); 变量视图=新的ol.view({ 中心:Lonlat的其他项目([-74.0061,40.712]), 缩放:17//初始缩放级别 }) var map=新ol.map({ 目标:“地图”, 图层:[baseMapLayer], 视图:视图 });

我正在使用一个图标20x20 pxl显示在地图上,代码如下:

当我缩放地图时,图标看起来很小,如何通过地图缩放更改图标大小


var baseMapLayer=新建ol.layer.Tile({
来源:new ol.source.OSM()
});
变量视图=新的ol.view({
中心:Lonlat的其他项目([-74.0061,40.712]),
缩放:17//初始缩放级别
})
var map=新ol.map({
目标:“地图”,
图层:[baseMapLayer],
视图:视图
});
//创建一个新的特征标记
变量标记=新的ol.特征({
名称:“空岛”,
人口:4000,
降雨量:500,
几何:新的ol.geom.Point(
Lonlat([-74.006,40.7127])/新点([0,0])
),//纽约市政厅科迪纳茨酒店
});
//设置标记的样式
var iconStyle=新的ol.style.style({
图片:新ol.style.Icon(({
颜色:“#ffcd46”,
交叉源:“匿名”,
src:'http://127.0.0.1:8081/static/img/truck.png'
}))
});
marker.setStyle(iconStyle);
//为特征创建一个源
var vectorSource=新的ol.source.Vector({
特征:[标记]
});
//新建一层
var markerVectorLayer=新ol.layer.Vector({
来源:矢量源,
});
map.addLayer(markerVectorLayer);

您可以使用样式功能,随着分辨率的变化而改变比例。分辨率可能会有很大的变化,所以您可能希望以分辨率的平方根或立方根的反比来改变比例,通过实验来了解什么适合您的应用程序

如果在功能上设置,则语法取决于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;
    }
});

您可以使用样式函数,随着分辨率的改变而改变比例。分辨率可能会有很大的变化,所以您可能希望以分辨率的平方根或立方根的反比来改变比例,通过实验来了解什么适合您的应用程序

如果在功能上设置,则语法取决于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;
    }
});