/// <summary> /// 轨迹回放 /// </summary> /// <param name="traceInfo">轨迹数据</param> /// <param name="speedTimes">回放倍数</param> /// <param name="traceChanged">轨迹是否改变</param> public void RenderVehicleTrajectory(IList <Trajectory> traceInfos, int speedTimes, bool traceChanged = true) { try { if (traceChanged) { if (traceDynamicObj == null) { traceDynamicObj = _axRenderControl.ObjectManager.CreateDynamicObject(); traceDynamicObj.AutoRepeat = false; traceDynamicObj.CrsWKT = WKT; traceDynamicObj.TurnSpeed = 300; AppendGuidToStringBuilder(traceDynamicObj.Guid); symbol = new SimplePointSymbolClass() { FillColor = 0xff0000ff, Size = 10 }; #region 创建线 IPoint point = _geoFactory.CreatePoint(i3dVertexAttribute.i3dVertexAttributeZ); IPolyline line = (IPolyline)_geoFactory.CreateGeometry(i3dGeometryType.i3dGeometryPolyline, i3dVertexAttribute.i3dVertexAttributeZ); line.SpatialCRS = _spatialCRS; foreach (Trajectory trajectory in traceInfos) { IVector3 position = new Vector3(); position.Set(trajectory.LongitudeWgs84, trajectory.LatitudeWgs84, 1); point.Position = position; point.SpatialCRS = _spatialCRS; line.AppendPoint(point); traceDynamicObj.AddWaypoint2(point, Convert.ToDouble(30 * speedTimes)); var rPoint = _axRenderControl.ObjectManager.CreateRenderPoint(point, symbol); rPoint.MaxVisibleDistance = 12500; rPoint.ViewingDistance = 50; AppendGuidToStringBuilder(rPoint.Guid); //_axRenderControl.Camera.FlyToObject(rPoint.Guid, i3dActionCode.i3dActionFollowBehindAndAbove); } tracePolyline = _axRenderControl.ObjectManager.CreateRenderPolyline(line, new CurveSymbol { Color = 0xFFFFFF00, Width = -2 }); tracePolyline.VisibleMask = i3dViewportMask.i3dViewAllNormalView; tracePolyline.MaxVisibleDistance = 12500; tracePolyline.HeightStyle = i3dHeightStyle.i3dHeightAbsolute; AppendGuidToStringBuilder(tracePolyline.Guid); #endregion } } else { if (traceDynamicObj == null) { return; } traceDynamicObj.Stop(); traceDynamicObj.TurnSpeed = 300 * speedTimes; for (int i = 0; i < traceInfos.Count; i++) { traceDynamicObj.GetWaypoint2(i, out IPoint point, out double speed); traceDynamicObj.ModifyWaypoint2(i, point, 30); } } TraceObjectsPlay("111", traceDynamicObj, true); } catch (Exception ex) { LoggerHelper.Logger.Error(ex, $"执行RenderVehicleTrajectory错误"); throw ex; } }