Esempio n. 1
0
        /// <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;
            }
        }