我必须使用 OpenLayers 在地图上显示多个要素。每个功能必须由 2 个图像(2 个 SVG 图标)表示。其中一个图标必须锚定在要素坐标上,但第二个图标必须移动固定数量的像素。另一个问题是移位的也必须旋转,并且旋转中心必须是图标的中心,而不是特征的中心。作为一个例子,我可以说:有一个车辆图标始终面向北方,还有一个显示旋转方向。方向一必须始终显示在车辆顶部
我尝试使用各种偏移量和锚点,但无法精确定位第二个图标
代码是用 ExtJS 完成的,但我希望它是可读的:所以我使用函数 fot 为 ImageVector 设置样式:
me.imageVectorSource = new ol.source.ImageVector({
source: new ol.source.Vector({
features: me.features
}),
style: Ext.bind(me.pointStyleFunction,me)
});
函数看起来像:
pointStyleFunction: function(feature, resolution) {
var currentStyles =
[
new ol.style.Style({
//first icon
image: new ol.style.Icon({
src: 'resources/img/vehicle.test.svg',
scale: sc,
}),
//text shown below
text: new ol.style.Text({
text: textToShow,
scale:sc
fill: new ol.style.Fill({
color: 'yellow'
}),
offsetY: textOffset,
stroke: new ol.style.Stroke({
color: 'black',
width: 4
}),
})
}),
//second icon that should be rotated
var rpIconStyle = new ol.style.Style({
image: new ol.style.Icon({
src: 'resources/img/rp.svg',
scale: sc,
rotation: rot
}),
});
];
}
现在,如果旋转第二个图标,它会围绕特征的中心旋转,而不是在其自身的中心。我曾考虑向第二种样式(点)添加新几何,但在这种情况下,我无法指定几何与原始特征中心的偏移量(以像素为单位)。我只能使用坐标,但不知道是否可以将它们转换为像素。实际上,预期的解决方案类似于可以指定 offsetX 和 offsetY 的样式的 text 属性。
你能建议我一些解决方案吗?