地形上的铯路径:连接2个点的线路在地形下

时间:2015-12-16 10:49:32

标签: path intersection terrain cesium

我有一条随着时间的推移而走的路。 我使用Cesium.sampleTerrain获取位置高度并将其覆盖在地形上。 问题在于,即使所有点都在地形上,连接2点的线有时也会在地形下面。 如何覆盖地形上的连线?

这是我的代码:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "mycompany.myapp.test.xwalkshadow"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile "org.robolectric:robolectric:3.0"
    testCompile 'org.robolectric:robolectric-annotations:3.0-rc3'

    testCompile "org.powermock:powermock-module-junit4:1.6.4"
    testCompile "org.powermock:powermock-module-junit4-rule:1.6.4"
    testCompile "org.powermock:powermock-api-mockito:1.6.4"
    testCompile "org.powermock:powermock-classloading-xstream:1.6.4"
}

2 个答案:

答案 0 :(得分:2)

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

如果您发现Entity API没有满足您的需求,可能值得深入了解更低级别的Primitives API以获得更好的控制 - 更具体地说是GroundPrimitive几何体。

其中; GroundPrimitives目前支持CorridorGeometry

我对Cesium中的时态数据绘图没有经验,但我建议你考虑这种方法而不是异步承诺方法,(IMO)看起来更像是由于没有GroundPrimitive类型解决方案而产生的黑客攻击时间。

以下是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

答案 1 :(得分:1)

Cesium目前不支持地形上的垂直线,但它位于我们的路线图上,对我们来说非常重要。这实际上是一个在所有情况下都能正确处理的极其复杂的问题(由于WebGL的限制,它更加复杂)。这将需要大量的研究和实验,并且没有艰难的时间表来确定何时完成。作为我们的3D Tiles工作的一部分,我们应该有春天的静态线的版本,但动态线可能会更远。

如果您对开发此功能感兴趣,请密切关注我们的GitHub存储库中的issue #2172。当此功能是官方发布的一部分时,我们还会在我们的博客/推特/论坛上发布公告。