2016-04-11 38 views
1

Cesiumjs'i bir alanın etrafında hareket eden çokgen oluşturmak için kullanıyorum.Cesium'daki SampledProperty içinde özellik tipi nasıl tanımlanır

Onun hareketini göstermek için sampledPropertyPolygonHierarchy oluşturmaya çalıştım. Her örnek, Cartesian3 konumlarının bir dizisidir (her zaman adımında çokgenimin üç bitiş noktası). Cesiumjs.org/SampledProperty:

Ben Cesiumjs web sitesinde belirtildiği gibi ben sampledProperty içinde kullanıyorum property türünü bilmemiz gerekir.

Ama nasıl tanımlayacağımı bilmiyorum ve özellikle her bir örnek kendi başına bir özellik dizisi olduğunda özellik türünün nasıl tanımlanacağıyla ilgili web sitesinde herhangi bir açıklama bulamadım.

cevap

1

SampledProperty, burada verdiğiniz noktalar arasında düzgün bir şekilde enterpolasyon yapmaya çalıştığı ve çokgen bir hiyerarşinin nasıl enterpolasyon yapılacağını bilmediği için burada çalışmaz.

Bunun yerine, bir TimeIntervalCollectionProperty kullanabilirsiniz. Buradaki fark, bu özelliğin enterpolasyon değil, adımlarla canlandırılmasıdır, bu yüzden mülkiyetin kontrol noktaları arasındaki ara değerlerin nasıl oluşturulacağını bilmesi gerekmez.

Çok yönlü bir hiyerarşi ile bunun nasıl çalıştığını göstermek için küçük bir demo yaptım. En alttaki Run Code Snippet'u tıklayın ya da yalnızca JavaScript'i Sandcastle'a yapıştırın ve yapıştırın.

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>

+0

teşekkür ederiz! Cevabınıza dayanarak, bir zaman diliminde çok küçük adımlar atmadığım sürece, bir bölge üzerinde sorunsuz hareket eden bir poligon göremiyorum. – azar

+0

İki yorumum var: 1. İnterpolasyon yapabiliyorsa, bir mülkün türünü döndüren herhangi bir yöntem (veya belki bir liste) var mı. 2. Ben çok düzgün hareket eden ** CZML ** kendi uç noktaları pozisyonlarına referanslar kullanarak, poligon hareket için bir örnek gördüm, ben _javascript_ olsa da işe yaramaz. Sadece ** CZML ** 'de mevcut mu? – azar

+0

1. SampledProperty için, ['SampledProperty.type'] 'dir (https://cesiumjs.org/Cesium/Build/Documentation/SampledProperty.html#type). Her bir aralık potansiyel olarak farklı bir veri tipini temsil edebileceğinden, karşılık gelen bir TimeIntervalCollection türü yoktur. 2. CZML'yi gönderebilir veya CZML'ye bağlayabilir misiniz? Genel olarak CZML'de yapabileceğiniz her şey Entity API'sı aracılığıyla yapabilirsiniz. – emackey