Cesium — использование scaleByDistance для рекламного щита, созданного с помощью CZML

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

В моем файле JS у меня есть:

var czmlDataSource = new Cesium.CzmlDataSource();
czmlDataSource.loadUrl('airports.czml');
viewer.dataSources.add(czmlDataSource);

Мой файл CZML показывает:

[
  {
    "id":"document",
    "version":"1.0"
  },
  {
    "id":"test",
    "billboard":{
      "image":"airport.png",
      "verticalOrigin":"BOTTOM",
      "show":true
    },
    "position":{
      "cartographicDegrees":[
        0.055278, 51.505278, 0
      ]
    }
  }
]

До того, как я использовал это:

entity.billboard.scaleByDistance = new Cesium.ConstantProperty(new Cesium.NearFarScalar(1.5e3, 0.3, 3.5e5, 0.0));

Очевидно, что сейчас это не работает. Но я не могу найти способ, как получить идентификатор рекламного щита и использовать scaleByDistance.


person Stefan Den Engelsman    schedule 13.02.2015    source источник


Ответы (2)


CZML еще не имеет встроенной поддержки scaleByDistance. Но вы все равно можете сделать то, что предлагаете внизу своего сообщения, а именно найти идентификатор и применить свойство таким образом.

Помните, что loadUrl является асинхронным, поэтому вы не сможете получить идентификатор, пока он не загрузится. Код выглядит следующим образом:

var czmlDataSource = new Cesium.CzmlDataSource();
viewer.dataSources.add(czmlDataSource);
czmlDataSource.loadUrl('airports.czml').then(function() {
    var entity = czmlDataSource.entities.getById('test');
    entity.billboard.scaleByDistance = new Cesium.ConstantProperty(
            new Cesium.NearFarScalar(1.5e3, 0.3, 3.5e5, 0.0));
});
person emackey    schedule 13.02.2015
comment
@StefanDenEngelsman (и emackey): смотрите мой ответ, который является обновлением. - person Andrew; 09.09.2019

Принятое решение больше не нужно. С тех пор Cesium добавил поддержку следующих действий (вместо new Cesium.NearFarScalar, что, очевидно, не будет работать с CZML, который является просто JSON):

"scaleByDistance": { "nearFarScalar": [ 1.0, 2.0, 10000.0, 3.0 ] }

Проверил эту функцию на себе, работает.

Источник:

person Andrew    schedule 09.09.2019