【问题标题】:How to define property type in SampledProperty in Cesium如何在 Cesium 的 SampledProperty 中定义属性类型
【发布时间】:2016-04-11 02:40:37
【问题描述】:

我正在使用 Cesiumjs 创建一个围绕一个区域移动的多边形。

为了展示它的运动,我尝试创建一个sampledPropertyof PolygonHierarchy。每个样本都是Cartesian3 位置的数组(我的多边形在每个时间步的三个端点)。

我需要知道我在 sampledProperty 中使用的 property 的类型,正如 Cesiumjs 网站中提到的那样:Cesiumjs.org/SampledProperty

但我不知道如何定义它,我在网站上找不到任何关于如何识别属性类型的解释,尤其是当每个样本本身就是一组属性时。

【问题讨论】:

    标签: javascript polygon cesium


    【解决方案1】:

    SampledProperty 在这里不起作用,因为它试图在您给它的点之间平滑插值,但它不知道如何插值多边形层次结构。

    因此,您可以使用TimeIntervalCollectionProperty。这里的区别在于,这个属性是逐步动画的,而不是插值,所以这个属性不需要知道如何构造控制点之间的中间值。

    我做了一个小演示,展示它如何与多边形层次结构一起工作。点击底部的Run Code Snippet,或将JavaScript 复制并粘贴到Sandcastle

    var viewer = new Cesium.Viewer('cesiumContainer', {
        navigationInstructionsInitiallyVisible: false
    });
    
    // Set up a limited range of time for this demo.
    var time = Cesium.JulianDate.fromIso8601('2016-04-08T12:00:00Z');
    viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP;
    viewer.clock.startTime = time;
    viewer.clock.currentTime = time;
    viewer.clock.stopTime = Cesium.JulianDate.addSeconds(time, 20, new Cesium.JulianDate());
    viewer.clock.multiplier = 1;
    viewer.timeline.updateFromClock();
    viewer.timeline.zoomTo(time, viewer.clock.stopTime);
    
    // Construct a TimeIntervalCollection showing the changes to the hierarchy over time.
    var hierarchy = new Cesium.TimeIntervalCollectionProperty();
    
    for (var i = 0; i < 40; ++i) {
        var nextTime = Cesium.JulianDate.addSeconds(time, 0.5, new Cesium.JulianDate());
    
        // Inside the loop, per iteration we add one window of time for this polygon.
        hierarchy.intervals.addInterval(new Cesium.TimeInterval({
            start: time,
            stop: nextTime,
            isStartIncluded : true,
            isStopIncluded : false,
            data : Cesium.Cartesian3.fromDegreesArrayHeights([-108.0+i/4, 35.0, 100000,
                                                              -100.0+i/4, 35.0, 100000,
                                                              -100.0+i/4, 40.0, 100000,
                                                              -108.0+i/4, 40.0, 100000])
        }));
        
        time = nextTime;
    }
    
    // Create the polygon, using the animated hierarchy.
    var orangePolygon = viewer.entities.add({
        name : 'Orange polygon with time-varying position',
        polygon : {
            hierarchy : hierarchy,
            extrudedHeight: 0,
            perPositionHeight : true,
            material : Cesium.Color.ORANGE.withAlpha(0.5),
            outline : true,
            outlineColor : Cesium.Color.WHITE
        }
    });
    
    viewer.zoomTo(viewer.entities);
    html, body, #cesiumContainer {
      width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;
      font-family: sans-serif;
    }
    <link href="http://cesiumjs.org/releases/1.19/Build/Cesium/Widgets/widgets.css" 
          rel="stylesheet"/>
    <script src="http://cesiumjs.org/releases/1.19/Build/Cesium/Cesium.js">
    </script>
    <div id="cesiumContainer"></div>

    【讨论】:

    • 谢谢!根据您的回答,我无法看到多边形在一个区域上顺利移动,除非我猜我的时间步长太小。
    • 我有两个 cmets: 1. 有没有返回属性类型的方法(或者可能是列表),如果它可以插值的话。 2. 我看到了一个移动多边形的例子,它使用 CZML 中的端点位置的引用来平滑移动,但我无法让它在 javascript 中工作。它仅在 CZML 中可用吗?
    • 1.对于 SampledProperty,它是 SampledProperty.type。没有对应的 TimeIntervalCollection 类型,因为每个间隔都可能代表不同的数据类型。 2.你能发布CZML,或链接到CZML吗?通常,您可以在 CZML 中执行的任何操作都可以通过 Entity API 执行。
    • 1.谢谢,我不知道,我想我必须具体说明对象的类型。 2. 可以在onedrive link找到czml,它是根据google群link的答案。如果您认为它更有帮助,我可以将这个问题单独问为“如何使用 javascript 在 Cesium 的多边形层次结构中引用其他实体的位置”!
    • 当然,这听起来像是一个单独的问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多