Code Sample |
The following is a complete code sample containing all of the pieces described in detail in the Visualization with Cesium topic. This demonstrates how to create a complex visualization containing multiple objects, and using analysis results to drive visualization.
var earth = CentralBodiesFacet.GetFromContext().Earth; var issTle = new TwoLineElementSet(@"1 25544U 98067A 10172.34241898 .00007451 00000-0 60420-4 0 3627 2 25544 51.6459 209.3399 0009135 352.3227 186.5240 15.71934500664129"); var issPoint = new Sgp4Propagator(issTle).CreatePoint(); var iss = new Platform { Name = "ISS", LocationPoint = issPoint, OrientationAxes = new AxesVehicleVelocityLocalHorizontal(earth.FixedFrame, issPoint), }; iss.Extensions.Add(new LabelGraphicsExtension(new LabelGraphics { Text = iss.Name, FillColor = Color.White, })); iss.Extensions.Add(new PathGraphicsExtension(new PathGraphics { Material = new PolylineOutlineMaterialGraphics { Color = Color.White, OutlineWidth = 1.0, OutlineColor = Color.Black, }, Width = 2, LeadTime = Duration.FromMinutes(44).TotalSeconds, TrailTime = Duration.FromMinutes(44).TotalSeconds, })); iss.Extensions.Add(new IdentifierExtension("ISS")); var facilityLocation = new Cartographic(-1.3191780323141054, 0.69871349190638687, 0.0); var facilityPoint = new PointCartographic(earth, facilityLocation); var facility = new Platform { Name = "AGI HQ", LocationPoint = facilityPoint, OrientationAxes = new AxesEastNorthUp(earth, facilityPoint), }; facility.Extensions.Add(new LabelGraphicsExtension(new LabelGraphics { Text = facility.Name, FillColor = Color.White, })); var link = new LinkInstantaneous(facility, iss); var constraint = new CentralBodyObstructionConstraint(link, earth); link.Extensions.Add(new LinkGraphicsExtension(new LinkGraphics { Show = new AccessQueryCesiumProperty<bool> { Query = constraint, AccessExists = true, AccessUnknown = false, NoAccess = false, }, Material = new SolidColorMaterialGraphics(Color.Yellow), })); var referenceVector = new VectorFixed(iss.OrientationAxes, UnitCartesian.UnitZ); var sensorOrientation = new AxesTargetingLink(link, LinkRole.Transmitter, referenceVector); var sensor = new Platform { LocationPoint = facility.LocationPoint, OrientationAxes = sensorOrientation, }; sensor.Extensions.Add(new FieldOfViewExtension(new RectangularPyramid { XHalfAngle = Trig.DegreesToRadians(8), YHalfAngle = Trig.DegreesToRadians(4.5), Radius = 500000, })); sensor.Extensions.Add(new FieldOfViewGraphicsExtension(new SensorFieldOfViewGraphics { DomeSurfaceMaterial = new GridMaterialGraphics { Color = Color.White, CellAlpha = 0.0, }, LateralSurfaceMaterial = new SolidColorMaterialGraphics { Color = Color.FromArgb(128, Color.Green), } })); var interval = new TimeInterval(new JulianDate(new GregorianDate(2009, 1, 1)), new JulianDate(new GregorianDate(2009, 1, 2))); var czmlDocument = new CzmlDocument { Name = "CompleteExample", Description = "A complete example", RequestedInterval = interval, Clock = new Clock { Interval = interval, CurrentTime = interval.Start } }; czmlDocument.ObjectsToWrite.Add(iss); czmlDocument.ObjectsToWrite.Add(facility); czmlDocument.ObjectsToWrite.Add(link); czmlDocument.ObjectsToWrite.Add(sensor); using (var writer = File.CreateText(Path.Combine(outputPath, "CompleteExample.czml"))) { czmlDocument.WriteDocument(writer); }