Как избежать открытых слоев столкновения на этикетке?Javascript

Форум по Javascript
Ответить
Anonymous
 Как избежать открытых слоев столкновения на этикетке?

Сообщение Anonymous »

Я использую OpenLayers в карте отслеживания сосудов, и у меня есть пользовательский слой метки, который отображает имена судов. Это затрудняет чтение имен судов, когда несколько сосудов близки друг к другу. В идеале я хочу попробовать несколько позиций кандидатов на функцию и выбрать ту, которая не сталкивается. Я предоставляю несколько альтернативных стилей, но этого недостаточно, так как, когда исчезает множество ярлыков. Похоже, что все альтернативные стили должны быть перекрываются, иначе одна и та же метка будет появляться несколько раз. < /P>

Код: Выделить всё

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
}
Есть ли встроенный путь в OpenLayers, чтобы попробовать альтернативные позиции метки, или Declutter: True единственный вариант с ящиком?

Подробнее здесь: https://stackoverflow.com/questions/797 ... pen-layers
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»