Итак, я использую цезий, и я хочу добавить полигон или линию, чтобы представить границу свойства на поверхности местности.Цезий как «драпировать» многоугольник или линию на поверхности поверхности
Мой многоугольник прекрасно работает на плоской поверхности/поверхности эллипсоида, но, к сожалению, многоугольник не может автоматически нарисоваться поверх поверхности при отображении ландшафтного слоя.
Удовлетворительно, на самом деле у меня нет значений z/height, поэтому я использую метод обещания sampleTerrain.js для интерполяции значений высоты на основе ландшафта. Эта часть работает отлично, я получаю свои значения высоты. Но что тогда?
Я попытался создать объект многоугольника с моими загруженными по высоте позициями, но безрезультатно - он просто игнорирует значения высоты. When I read the docs, я действительно вижу любую ссылку на значения высоты, принимаемые внутрь - все массивы «позиции» являются двумерными?
Единственная ссылка на рассматриваемые значения высоты находится в PolygonOutlineGeometry, которая имеет перспективный вид недвижимости, называемый perPositionHeight
.
Это, по сути, что я хочу - я не хочу, чтобы установить высоту всей поли, я хочу каждое значение точки высоты будет использоваться ..
Вот один из моих неудачных попыток:
Entity/Polygon:
var entity = viewer.entities.add({
polygon : {
hierarchy : cartesianPositions, //array of positions with z values
outline : true,
outlineColor : Cesium.Color.RED,
outlineWidth : 9,
material : Cesium.Color.BLUE.withAlpha(0.0),
}
});
Итог: Я просто хочу, многоугольник или ломаную объект который хорошо сидит на поверхности местности.
EDIT:
Использование Orange Polygon example в комментариях принятого ответа в сочетании с sampleTerrain.js, я был в состоянии имитировать «драпировка» многоугольник на местности, с перечнем позиций, которые не имеют z, вот пример:
var positions = []; // xy position array
var cesiumTerrainProvider = new Cesium.CesiumTerrainProvider({
url : '//assets.agi.com/stk-terrain/world'
});
viewer.terrainProvider = cesiumTerrainProvider;
// go off and sample the terrain layer to get interpolated z values for each position..
var promise = Cesium.sampleTerrain(cesiumTerrainProvider, 11, positions);
Cesium.when(promise, function(updatedPositions) {
var cartesianPositions = Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray(updatedPositions);
var entity = viewer.entities.add({
polygon : {
hierarchy : cartesianPositions,
outline : true,
outlineColor : Cesium.Color.RED,
outlineWidth : 9,
perPositionHeight: true,
material : Cesium.Color.BLUE.withAlpha(0.0),
}
});
viewer.flyTo(entity);
});
почему у вас 'альфа (0,0)', если вы хотите увидеть полигон? в соответствии с [Цезий spec] (http://cesiumjs.org/Cesium/Build/Documentation/Color.html) 0.0 is _zero intensity_ –
Я намеренно скрыл поверхность многоугольника, так как меня больше интересует граница, который * * *. Это не имеет отношения к моему вопросу. – danwild
Я использую тот же код, но некоторые из сегментов пути все еще находятся под землей. Кто-нибудь знает причину? – sabrina