path - 铯路径到地形 : line connecting 2 points goes under the terrain

标签 path intersection terrain cesiumjs

我有一条随时间移动的路径。 我使用 Cesium.sampleTerrain 获取位置高度并将它们覆盖在地形上。 问题是,即使所有点都在地形上,连接 2 个点的线有时也会在地形下方。 我怎样才能在地形上也覆盖连接线?

这是我的代码:

var promise = Cesium.sampleTerrain(terrainProvider, 14, positions);
Cesium.when(promise, function(updatedPositions) {
    var cartesianPositions = Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray(updatedPositions);
    var sample = new Cesium.SampledPositionProperty();
    sample.setInterpolationOptions({
        interpolationDegree : 3,
        interpolationAlgorithm : Cesium.HermitePolynomialApproximation
    });

    $(cartesianPositions).each(function(index, cartPosition) {
        var time = Cesium.JulianDate.addSeconds(start, index*10, new Cesium.JulianDate());
        sample.addSample(time, cartPosition);

    })

    var target = viewer.entities.add({
        position: sample,
          path: {
            resolution: 60,
            material:Cesium.Color.BLUE,
            width: 4,
            trailTime: 422*10,
            leadTime: 0
          }
    });

});

最佳答案

所以就像马修说的; Cesium 目前不支持覆盖地形的“折线”类型实体

如果您发现 Entity API 没有提供您需要的东西,可能值得深入研究较低级别的 Primitives API 以获得更好的控制 - 更具体地说是 GroundPrimitive几何学。

等等; GroundPrimitives 目前支持 CorridorGeometry .

我没有在 Cesium 中绘制时间数据的经验,但我建议您考虑这种方法而不是异步 promise 方法,后者(IMO)似乎更像是一种由于缺乏 GroundPrimitive 类型的解决方案而诞生的 hack时间。

这是一个 GroundPrimitive 的粗略示例(注意我们不需要任何 z 值):

var viewer = new Cesium.Viewer('cesiumContainer');

var corridorInstance = new Cesium.GeometryInstance({
   geometry : new Cesium.CorridorGeometry({
      vertexFormat : Cesium.VertexFormat.POSITION_ONLY,
      positions : Cesium.Cartesian3.fromDegreesArray([
         -122.26, 46.15,  
         -122.12, 46.26, 
      ]),
      width : 100
   }),
   id : 'myCorridor',
   attributes : {
      color : new Cesium.ColorGeometryInstanceAttribute(0.0, 1.0, 1.0, 0.5)
   }
});

var corridorPrimitive = new Cesium.GroundPrimitive({
   geometryInstance : corridorInstance
});

viewer.scene.primitives.add(corridorPrimitive);
viewer.camera.setView({
   destination: Cesium.Cartesian3.fromDegrees(-122.19, 46.20, 10000.0)
});

这会给你这个:

enter image description here

关于path - 铯路径到地形 : line connecting 2 points goes under the terrain,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34310007/

相关文章:

3d - 将 2D 屏幕坐标取消投影到 3D 坐标

map - 从何处获取地形数据-免费和付费?

java - 如何在 RCP 4 应用程序中检索当前工作区路径?

asp.net-mvc - asp.net core 2.0 无法获取 css 或查看页面的确切路径

ios - 找不到图书馆

objective-c - 如何检测 UIBezierPath 是否与自身相交?

java - 根据其键的子集过滤 map 的元素,而无需遍历整个事物

XNA 随机图 block /地形生成教程?

java - 中点位移地形伪影

git - Flutter升级后Flutter找不到git