Метка цезия ScaleByDistance

У меня есть массив меток, которые я добавляю к цезиевому шару, используя LabelCollection как таковой:

data.forEach(function(country) {
    countryLabels.add({
        position: new Cesium.Cartesian3.fromDegrees(country.lat, country.lng),
        text: country.name,
        font: "12px arial"
    });
});

Все отлично работает. Но метки отображаются в одном и том же относительном масштабе независимо от уровня масштабирования моей камеры. В идеале я бы хотел, чтобы метки были скрыты при достаточном увеличении и отображались только тогда, когда они не будут перекрывать друг друга.

Я знаю, что у рекламных щитов есть свойство scaleByDistance, а у надписей — нет. Есть ли способ добиться этого, не прослушивая событие масштабирования на камере и вручную очищая/повторно заполняя этот LabelCollection?

Заранее спасибо.

Ярлык ада


person Malabar Front    schedule 05.08.2015    source источник


Ответы (1)


Выполнение scaleByDistance над надписями требует немного больше дополнительной работы, чтобы получить результаты, которые вы ожидаете от масштабирования надписей. Если бы мы адаптировали ту же реализацию scaleByDistance из Billboard к меткам, каждый символ в метке правильно масштабировался бы по расстоянию, но расстояние между метками осталось бы неизменным. Это связано с тем, как геометрия для меток отправляется на графический процессор, где применяется преобразование scaleByDistance.

Ярлыки поддерживают translucencyByDistance, которые можно использовать для расхламления.

person Alex Wood    schedule 06.08.2015
comment
Это идеально. Я вообще не видел в документации translucencyByDistance вчера, когда искал. Спасибо! - person Malabar Front; 06.08.2015