tamirg / RobRob

0 stars 0 forks source link

Suggest #1

Open giovannigabriella opened 3 years ago

giovannigabriella commented 3 years ago

// This example illustrates a Callback Property, a property whose // value is lazily evaluated by a callback function. // Use a CallbackProperty when your data can't be pre-computed // or needs to be derived from other properties at runtime. var viewer = new Cesium.Viewer("cesiumContainer"); viewer.clock.shouldAnimate = true;

var startLatitude = 39.97; var startLongitude = 16.08; var startAltitude = 0; var endLongitude; var endAltitude; var startTime = Cesium.JulianDate.now();

// Add a polyline to the scene. Positions are dynamic. var isConstant = false; var redLine = viewer.entities.add({ polyline: { // This callback updates positions each frame. positions: new Cesium.CallbackProperty(function (time, result) { endLongitude = startLongitude + 0.01 Cesium.JulianDate.secondsDifference(time, startTime); endAltitude = startAltitude + 0.01 Cesium.JulianDate.secondsDifference(time, startTime); return Cesium.Cartesian3.fromDegreesArray( [startLongitude, startLatitude, startAltitude, endLongitude, endAltitude], Cesium.Ellipsoid.WGS84, result ); }, isConstant), width: 5, material: Cesium.Color.RED, }, });

var startCartographic = Cesium.Cartographic.fromDegrees( startLongitude, startLatitude, startAltitude );

// use scratch object to avoid new allocations per frame. var endCartographic = new Cesium.Cartographic(); var scratch = new Cesium.Cartographic(); var geodesic = new Cesium.EllipsoidGeodesic();

// Calculate the length of the line function getLength(time, result) { // Get the end position from the polyLine's callback. var endPoint = redLine.polyline.positions.getValue(time, result)[1]; endCartographic = Cesium.Cartographic.fromCartesian(endPoint);

geodesic.setEndPoints(startCartographic, endCartographic); var lengthInMeters = Math.round(geodesic.surfaceDistance); return (lengthInMeters / 100).toFixed(1) + " km"; }

function getMidpoint(time, result) { // Get the end position from the polyLine's callback. var endPoint = redLine.polyline.positions.getValue(time, result)[1]; endCartographic = Cesium.Cartographic.fromCartesian(endPoint);

geodesic.setEndPoints(startCartographic, endCartographic); var midpointCartographic = geodesic.interpolateUsingFraction( 0.5, scratch ); return Cesium.Cartesian3.fromRadians( midpointCartographic.longitude, midpointCartographic.latitude, midpointCartographic.latitude
); }

// Label the polyline with calculated length. var label = viewer.entities.add({ position: new Cesium.CallbackProperty(getMidpoint, isConstant), label: { // This callback updates the length to print each frame. text: new Cesium.CallbackProperty(getLength, isConstant), font: "20px sans-serif", pixelOffset: new Cesium.Cartesian2(0.0, 20), }, });

// Keep the view centered. viewer.trackedEntity = label;

giovannigabriella commented 3 years ago

Hello Community, I've a problem with the code. Anyone can give an help? Thank U Community.

"...Our Horizons are Your Horizons..."