mapbox-gl js использует пошаговую рампу для "смещения текста"

Я использую в слое mapbox gl в layoutблокировать поле text-offset,

layout: { // Working
  'text-field': '{point_count_abbreviated}',
  'text-size': ['step', ['get', 'point_count'], 18, 10, 14, 100, 12],
  'text-offset': [-0.84, 0.23],
}

Это работает, как и ожидалось, но теперь я хочу изменить смещение на основе свойств. Это работает очень хорошо для 'text-size', но для смещения текста я не могу найти правильный синтаксис. Я пробовал следующее:

layout: { // NOT working
  'text-field': '{point_count_abbreviated}',
  'text-size': ['step', ['get', 'point_count'], 18, 10, 14, 100, 12],
  'text-offset': [
    // [-0.84, 0.23],
    ['step', ['get', 'point_count'], -0.84, 10, -0.94, 100, -0.99],
    ['step', ['get', 'point_count'], 0.23, 10, 0.25, 100, 0.28],
  ],
},

Может быть, mapbox-gl в настоящее время не поддерживает пошаговое изменение скорости смещения текста?

Сообщение об ошибке:

Ошибка: layer.cluster-offline.layout.text-offset[0]: ожидаемое число, найденный массив


layout: { // NOT working
  'text-field': '{point_count_abbreviated}',
  'text-size': ['step', ['get', 'point_count'], 18, 10, 14, 100, 12],
  'text-offset': [
    // [-0.84, 0.23],
    ['literal', 
       ['step', ['get', 'point_count'], -0.84, 10, -0.94, 100, -0.99], 
       ['step', ['get', 'point_count'], 0.23, 10, 0.25, 100, 0.28]
    ],
  ],
},

Сообщение об ошибке:

Ошибка: layer.cluster-offline.layout.text-offset: ожидаемая длина массива 2, найденная длина 1


layout: { // NOT working
  'text-field': '{point_count_abbreviated}',
  'text-size': ['step', ['get', 'point_count'], 18, 10, 14, 100, 12],
  'text-offset': [
    ['literal', ['step', ['get', 'point_count'], -0.84, 10, -0.94, 100, -0.99]], 
    ['literal', ['step', ['get', 'point_count'], 0.23, 10, 0.25, 100, 0.28]],
  ],
},

Сообщение об ошибке:

Ошибка: layer.cluster-offline.layout.text-offset[0]: ожидаемое число, найденный массив

1 ответ

Решение

Вам нужно обернуть ваши значения смещения текста с помощью литерального преобразователя типов:

'text-offset': [
  'step',                         // Expression type (discrete matching)
  ['get', 'point_count'],         // Variable to compare to
  ['literal', [-0.84, 0.23]],     // Default value (if none of the following match)
  10, ['literal', [-0.94, 0.25]], // if point_count === 10: [-0.94, 0.25]
  100, ['literal', [-0.99, 0.28]] // if point_count === 100: [-0.94, 0.28]
]

Остановить выходные значения должны быть литеральными значениями (т.е. не функциями или выражениями)

источник

Здесь [-0.84, 0.23] Подвыражения могут быть неоднозначными для Mapbox, поэтому вам нужно явно указать их тип.

В версии 1.6.1, Другие версии не тестировал.

вам нужно только установить массив в properties,

такие как "offsetdate": [-1,0],

а затем используйте "text-offset": ['get', 'offsetdate'] получить данные.

Другие вопросы по тегам