Добавить BillboardCollection к объекту в Cesium

Мне нужно создать billboardCollection в Cesium JS и поместить его в entity.

Я создал два рекламных щита и попытался добавить их к billboardColletion, а затем использовать их при создании entity, но отображается только метка... Ни один из рекламных щитов не появляется.

Это мой код до сих пор:

var pos = Cesium.Cartesian3.fromDegrees(-75.1641667, 39.9522222);
var pinBuilder = new Cesium.PinBuilder();

var pointBillboard = {
    image: pinBuilder.fromColor(Cesium.Color.SALMON, 48),
    verticalOrigin: Cesium.VerticalOrigin.BOTTOM
};

var lineBillboard = {
    color: Cesium.Color.WHITE,
    image: "img/white.png",
    pixelOffset: new Cesium.Cartesian2(0, 0),
    position: pos
};

var billboards = scene.primitives.add(new Cesium.BillboardCollection());

billboards.add(pointBillboard);
billboards.add(lineBillboard);

this.entity = mapa.getViewer.entities.add({
    position: Cesium.Cartesian3.fromDegrees(-75.1641667, 39.9522222),
    billboard: billboards,
    label: {
        text: ' Ponto',
        verticalOrigin: Cesium.VerticalOrigin.TOP,
        horizontalOrigin: Cesium.HorizontalOrigin.RIGHT,
        font: '11px Helvetica',
        fillColor: Cesium.Color.WHITE,
        outlineWidth: 1,
        style: Cesium.LabelStyle.FILL
    }
});

Есть ли способ вставить billboardCollection внутри entity?

Большое спасибо!


person Pri Santos    schedule 30.09.2015    source источник


Ответы (1)


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

Я заметил, что вы уже вызываете scene.primitives.add для BillboardCollection, так что он уже присутствует в сцене. Пин-код не отображается, потому что вы забыли добавить position: pos к определению pointBillboard. Рекламные щиты в этой коллекции могут существовать совершенно отдельно от любых сущностей, которые также присутствуют в сцене.

Каждому объекту в сцене разрешен только один рекламный щит, а не коллекция. Под капотом многие организации объединяют свои рекламные щиты в единую коллекцию. Эта коллекция отделена от коллекции, которую вы создали в своем собственном коде.

В документации обратите внимание, что entity.billboard принимает BillboardGraphics, который, по сути, представляет собой описание того, как определение одного рекламного щита меняется с течением времени. Он не требует фактического примитивного рекламного щита или BillboardCollection.

Как правило, если у вас есть только «тысячи» рекламных щитов, вы можете использовать один объект для каждого рекламного щита. Но если у вас есть намного больше, чем это, вам, возможно, придется отказаться от высокоуровневых сущностей и создать свою собственную коллекцию billboardCollection напрямую, как вы сделали здесь.

person emackey    schedule 01.10.2015
comment
если я добавлю BillboardCollection, могу ли я добавить ярлыки к каждому рекламному щиту? И спасибо за пояснение, очень понятно! - person Pri Santos; 01.10.2015
comment
Вы можете отдельно создать labelCollection и расположить метки так, чтобы они совпадали со всеми билбордами. Одним из преимуществ использования сущностей является то, что одна сущность свяжет одну метку с одним рекламным щитом в одной позиции и позволит пользователю выбрать ее и прочитать ее описание. - person emackey; 02.10.2015