Javascript 铯如何';窗帘';地形表面上的多边形或线
所以,我使用铯,我想添加一个多边形或线来表示地形表面上的属性边界 我的多边形在平面/椭球曲面上运行良好,但不幸的是,当显示地形层时,多边形不会自动覆盖在曲面上 公平地说,我实际上没有z/高度值——因此我使用promise方法根据地形插值高度值。这部分很好,我得到了我的高度值。那又怎么样 我尝试用我的高度填充位置创建多边形实体,但没有效果-它只是忽略了高度值,我真的可以看到任何对高度值的引用——所有的“位置”数组都是二维的 对高度值的唯一引用是在中,它有一个很有前途的属性,名为Javascript 铯如何';窗帘';地形表面上的多边形或线,javascript,cesium,Javascript,Cesium,所以,我使用铯,我想添加一个多边形或线来表示地形表面上的属性边界 我的多边形在平面/椭球曲面上运行良好,但不幸的是,当显示地形层时,多边形不会自动覆盖在曲面上 公平地说,我实际上没有z/高度值——因此我使用promise方法根据地形插值高度值。这部分很好,我得到了我的高度值。那又怎么样 我尝试用我的高度填充位置创建多边形实体,但没有效果-它只是忽略了高度值,我真的可以看到任何对高度值的引用——所有的“位置”数组都是二维的 对高度值的唯一引用是在中,它有一个很有前途的属性,名为perPositio
perPositionHeight
这基本上就是我想要的-我不想设置整个多边形的高度,我想使用每个点的高度值
以下是我一次失败的尝试:
实体/多边形:
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),
}
});
底线:我只想要一个多边形或多段线实体,它可以很好地位于地形表面上 编辑:
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),
}
});
使用已接受答案中的注释,结合,我已经能够模拟将多边形“悬垂”到地形上,并列出没有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);
});
铯还不支持地形上的矢量数据。它正在积极开发中,大部分功能将开始出现在将于6月1日发布的铯1.10中。任何不能发布该版本的内容都应该在7月1日的1.11版本中发布 特别是对于多边形,您可以按照GitHub pull请求进行操作: 有关广告牌和标签,请查看:
多段线尚未启动,但将在上述两项完成后立即启动。从1.13版开始,铯现在支持。它们将覆盖整个地形 看起来是这样的: 这是铯的例子:
var rectangleInstance = new Cesium.GeometryInstance({
geometry : new Cesium.RectangleGeometry({
rectangle : Cesium.Rectangle.fromDegrees(-140.0, 30.0, -100.0, 40.0)
}),
id : 'rectangle',
attributes : {
color : new Cesium.ColorGeometryInstanceAttribute(0.0, 1.0, 1.0, 0.5)
}
});
scene.primitives.add(new Cesium.GroundPrimitive({
geometryInstance : rectangleInstance
}));
如果要查看多边形,为什么要使用
alpha(0.0)
?根据0.0是零强度,我有意隐藏多边形的表面,因为我对可见的边界更感兴趣。这与我的问题无关。我使用相同的代码,但一些路径段仍在地下。有人知道原因吗?嘿@sabrina,也许值得用一个jsfiddle来演示这个问题,或者最好还是放弃这种方法,使用公认答案中建议的伟大的新GroundPrimitives。如果需要的话,也可以考虑问一个新的问题(请给我发电子邮件,我明天再看一看)。嗨,丹尼尔。我刚刚理解了我的问题(但仍然没有找到解决方案)。。。位置(路径的顶点)完全位于地面上;问题是连接两个点的线有时会在地面下相交。好吧,还没有正式的支持——但sampleTerrain.js的存在告诉我,一定有办法做到这一点,是吗?如果铯不能处理三维空间中的点,为什么有人会在开放层上使用铯?对不起,我误解了你的问题。要使用位置的高度值,请将perPositionHeight属性设置为true。本例中的橙色多边形实现了您想要的功能:我要补充的是,我们正在添加的功能是将矢量数据直接覆盖在地形上,即,就像它躺在地面上一样。设置perPositionHeight不会使多边形符合地形,它只会将高度提高到指定的高度,这样您就可以在空中拥有多边形。好的,明白了-感谢您的洞察力。因此,您能否确认当结合sampleTerrain.js插值“地面”高度时,perPositionHeight
可能是一种有效的方法?(有效地渲染多边形“在空中”,但高度与地形高程相同)。哦,很抱歉没有听到您的第一句评论,我会检查一下,谢谢。是否可以在路径中使用GroundPrimitives?这是我的代码:var target=viewer.entities.add({位置:sample,路径:{分辨率:60,材质:Cesium.Color.BLUE,宽度:4,追踪时间:360,前置时间:0});其中sampe是Cesium.SampledPositionProperty,因此路径随时间而扩展。如何在地形上覆盖路径?需要使用基本体类型并将其添加到scene.primitives集合中。看起来您正在创建一个实体。@emackey有没有办法用CZML实现这一点?@Slaiyer目前我不这么认为。试着在铯论坛上提问。