Код: Выделить всё
private createLabelLayer() {
const layer = new VectorLayer({
source: new VectorSource({
overlaps: true,
}),
style: (feature) => {
const vessel = this.vesselList.get(feature.get('vesselId'))
const labelText = feature.get('text')
style.getText()?.setText(labelText)
const { dimensions } = vessel || {}
let offY = 0
let offX = 0
if (dimensions) {
style.getText()?.setOffsetY(offY)
style.getText()?.setOffsetX(offX)
}
const styles = getLabelStyles(style, zIndex)
return styles
},
declutter: true,
zIndex: this.zIndexes.labels,
maxResolution: this.thresholds.webglPoints,
})
layer.set('type', 'labelLayer')
return layer
}
const baselines: CanvasTextBaseline[] = ['middle', 'top', 'bottom']
const aligns: CanvasTextAlign[] = ['center', 'left', 'right']
const getLabelStyles = (baseStyle: Style, zIndex: number) => {
const out: Style[] = [baseStyle]
for (const bl of baselines) {
for (const al of aligns) {
const style = baseStyle.clone()
const text = style.getText()
text?.setTextBaseline(bl)
text?.setTextAlign(al)
text?.setOverflow(true)
style.setZIndex(zIndex)
out.push(style)
}
}
return out
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... pen-layers