навигация по цезиевой карте местности искажает положение графики

я использую цезий в своем проекте gwt, и я использую cesium-terrain-server для ландшафта. (Не cesium-gwt, разработка моего собственного кода с помощью jsni) Моя проблема: я создаю графику на местности (многоугольник, полилиния), когда я перемещаюсь по карте, графика перемещается со своей позиции. Есть ли способ обездвижить их в точках, которые я выбрал ранее?

пример кода:

    var polygon = new Cesium.PolygonGraphics({
                   fill : true;
                   material : Cesium.Color.BLUE.withAlpha(0.5),
                   outline : true,
                   hierarchy :{
                       positions: cartesian3s
                   }
                 })

затем я добавляю полигон как объект к объектам просмотра цезия.


person hkn    schedule 27.10.2015    source источник
comment
Можете ли вы показать код, когда вы добавляете полигон к объекту?   -  person Tomislav Muic    schedule 27.10.2015
comment
@Tomislav Muic сначала я создаю объект var entity = new Cesium.Entity(), затем я устанавливаю полигон для объекта entity.polygon = polygon, наконец, я добавляю его в свою программу просмотра viewer.enties.add(entity)   -  person hkn    schedule 28.10.2015


Ответы (1)


Если графика кажется «движущейся» или скользящей при навигации по карте с нанесенным на нее ландшафтом, это обычно означает, что рассматриваемая графика рисуется под рельефом (на самом эллипсоиде WGS84) и отображается сквозь рельеф. Это своего рода оптическая иллюзия, когда глаз не понимает, что видит сквозь гору или саму землю какую-то графику далеко внизу. Только когда камера движется, становится визуально очевидно, что что-то не так. Если вы хотите, чтобы графика выглядела стационарно, она должна быть на правильной высоте для местности, на которой находится.

Возможность драпировать полигоны на местности была добавлена ​​в Cesium 1.3 и был задан вопрос о в другом месте на SO< /а>. Но похоже, что эта возможность еще не была добавлена ​​в Entity API, поэтому ваши текущие варианты: (а) если вы находитесь на плоской местности, выберите высоту в точке и переместите многоугольник на эту высоту или (б) пропустить слой Entity API и использовать графические примитивы, в частности GroundPrimitive, для рендеринга многоугольника драпированные на местности.

person emackey    schedule 27.10.2015
comment
спасибо за ваш ответ, на самом деле я пытался установить высоту или экструдированную высоту, но это не сработало. я получаю значение высоты из одного моего массива cartesian3, который я использовал для рисования многоугольника. - person hkn; 28.10.2015
comment
Попробуйте загрузить демонстрацию GeoJSON и нажмите кнопку Custom styling в верхней части 3D-окна для примера работы с extrudedHeight. Если вы по-прежнему не можете заставить его работать, задайте новый вопрос конкретно по этой теме. Спасибо! - person emackey; 28.10.2015
comment
На самом деле, sampleTerrain решил мою проблему: он не драпировал фигуры на местности, но не позволял фигурам двигаться при движении камеры. @emackey спасибо, верный ответ - person hkn; 29.10.2015