//如果kml中已经保存运动轨迹,可以选择已保存好的运动轨迹
        private void cb_Track_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cb_Track.SelectedIndex == 0)
            {
                return;
            }
            this.m_sceneControl.Scene.TrackingLayer.Clear();

            String     trackName = this.cb_Track.SelectedItem as String;
            Feature3Ds features  = m_layerKML.Features;

            Feature3D[] feature3Ds = features.FindFeature(trackName, Feature3DSearchOption.AllFeatures);
            if (feature3Ds.Length > 0)
            {
                Feature3D    feature3D    = feature3Ds[0];
                GeoPlacemark geoPlacemark = feature3D.Geometry as GeoPlacemark;
                m_geoLine3D = geoPlacemark.Geometry as GeoLine3D;
                if (m_geoLine3D != null && m_geoLine3D.PartCount > 0)
                {
                    if (m_nodeAnimation != null)
                    {
                        m_nodeAnimation.SetTrack(m_geoLine3D);
                        m_nodeAnimation.TimePostition = 0;
                    }
                    this.btn_AddToKML.Enabled = false;
                }
            }
        }
        //指定模型,并设置其节点动画属性
        private void cb_Model_SelectedIndexChanged(object sender, EventArgs e)
        {
            //如果之前的模型正在运动,则停止运动
            if (m_nodeAnimation != null && m_nodeAnimation.IsEnabled == true)
            {
                m_nodeAnimation.IsEnabled = false;
            }

            //获取当前模型,并设置节点动画
            String featureName = this.cb_Model.SelectedItem as String;

            Feature3Ds features = m_layerKML.Features;

            Feature3D[] feature3Ds = features.FindFeature(featureName, Feature3DSearchOption.AllFeatures);
            if (feature3Ds.Length > 0)
            {
                Feature3D    feature3D    = feature3Ds[0];
                GeoPlacemark geoPlacemark = feature3D.Geometry as GeoPlacemark;
                m_geoModel = geoPlacemark.Geometry as GeoModel;
                if (m_geoModel != null)
                {
                    m_nodeAnimation = m_geoModel.NodeAnimation;
                    //位置变更事件
                    m_nodeAnimation.TimePositionChanged -= new TimePositionChangedEventHandler(m_nodeAnimationTimePositionChanged);
                    m_nodeAnimation.TimePositionChanged += new TimePositionChangedEventHandler(m_nodeAnimationTimePositionChanged);

                    if (m_geoLine3D != null && m_geoLine3D.PartCount > 0)
                    {
                        m_nodeAnimation.SetTrack(m_geoLine3D);
                        m_nodeAnimation.TimePostition = 0;
                    }
                }
            }
        }
        //保存节点动画
        private void btn_AddToKML_Click(object sender, EventArgs e)
        {
            if (m_bIsSaveTrack)
            {
                Feature3Ds   features     = m_layerKML.Features;
                int          nCount       = this.cb_Track.Items.Count - 1;
                Feature3D    feature3D    = new Feature3D();
                GeoPlacemark geoPlacemark = new GeoPlacemark();
                m_style3D.LineColor      = Color.Green;
                m_style3D.AltitudeMode   = AltitudeMode.RelativeToGround;
                m_style3D.BottomAltitude = 0.5;
                m_geoLine3D.Style3D      = m_style3D;
                geoPlacemark.Geometry    = m_geoLine3D;
                feature3D.Geometry       = geoPlacemark;
                feature3D.Description    = "track" + nCount;
                feature3D.Name           = feature3D.Description;
                features.Add(feature3D);

                //刷新图层树
                Layer3DsTreeNodeBase node = this.m_layersControl.Layer3DsTree.FindNode(m_layerKML);
                this.m_layersControl.Layer3DsTree.RefreshNode(node);
                node.Expand();

                //将新保存的运动轨迹添加的轨迹列表中
                if (!this.cb_Track.Items.Contains(feature3D.Name))
                {
                    this.cb_Track.Items.Add(feature3D.Name);
                    this.cb_Track.SelectedItem = feature3D.Name;
                }

                ////保存kml
                //String kmlPath = m_layerKML.DataName;
                //m_layerKML.Features.ToKMLFile(kmlPath);
            }


            this.m_sceneControl.Scene.TrackingLayer.Clear();
            this.btn_AddToKML.Enabled = false;
        }
        //获取KML图层下的模型和运动轨迹,初始化模型列表和轨迹列表
        private void InitCombox(Layer3DKML layerKML)
        {
            Feature3Ds features = layerKML.Features;

            if (features.Count > 0)
            {
                for (int i = 0; i < features.Count; i++)
                {
                    Feature3D    feature      = features[i] as Feature3D;
                    GeoPlacemark geoplacemark = feature.Geometry as GeoPlacemark;
                    if (geoplacemark != null)
                    {
                        Geometry3D geometry3D = geoplacemark.Geometry as Geometry3D;
                        if (geometry3D is GeoModel)
                        {
                            this.cb_Model.Items.Add(feature.Name);
                        }
                        else if (geometry3D is GeoLine3D)
                        {
                            this.cb_Track.Items.Add(feature.Name);
                        }
                    }
                }
            }
            if (this.cb_Model.Items.Count > 0)
            {
                this.cb_Model.SelectedIndex = 0;
            }
            if (this.cb_Track.Items.Count > 1)
            {
                this.cb_Track.SelectedIndex = 1;
            }
            else
            {
                this.cb_Track.SelectedIndex = 0;
            }
        }
        /// <summary>
        /// 由地下飞到地上
        /// </summary>
        public void FlyUndergroud()
        {
            try
            {
                // 地下飞行时,开启地下
                m_sceneControl.Scene.Underground.IsVisible = true;
                m_sceneControl.Scene.CameraFOV             = 60;
                // 加载飞行路线所需的数据和风格
                //为“北京地铁”设置风格
                DatasetVector        dataSet_ditie = m_workspace.Datasources[0].Datasets["BeijingSubway"] as DatasetVector;
                Layer3DSettingVector settingvetor  = new Layer3DSettingVector();
                settingvetor.Style.AltitudeMode   = AltitudeMode.RelativeToGround;
                settingvetor.Style.LineWidth      = 3;
                settingvetor.Style.LineSymbolID   = 962046;
                settingvetor.Style.BottomAltitude = -24;
                Layer3DDataset layer_ditie1 = m_sceneControl.Scene.Layers.Add(dataSet_ditie, settingvetor, true, "ditie");
                layer_ditie1.IsSelectable = false;

                // 加载 "Subway_Line8"数据集作为地铁八号线的站点
                DatasetVector        DataSet_ditieLine8  = m_workspace.Datasources[0].Datasets["Subway_Line8"] as DatasetVector;
                Layer3DSettingVector setvetor_ditieLine8 = new Layer3DSettingVector();
                setvetor_ditieLine8.Style = new GeoStyle3D();
                setvetor_ditieLine8.Style.AltitudeMode   = AltitudeMode.RelativeToGround;
                setvetor_ditieLine8.Style.BottomAltitude = 10;
                Layer3DDataset layer_ditieLine8 = m_sceneControl.Scene.Layers.Add(DataSet_ditieLine8, setvetor_ditieLine8, true, "地铁八号线");
                layer_ditieLine8.UpdateData();

                // 加载"BeijingSubway_Tunnel"数据集作为地铁巷道
                DatasetVector        DataSet_ditieL_2  = m_workspace.Datasources[0].Datasets["BeijingSubway_Tunnel"] as DatasetVector;
                Layer3DSettingVector setvetor_ditieL_2 = new Layer3DSettingVector();
                setvetor_ditieL_2.Style = new GeoStyle3D();
                setvetor_ditieL_2.Style.AltitudeMode   = AltitudeMode.RelativeToGround;
                setvetor_ditieL_2.Style.BottomAltitude = -26.5;
                setvetor_ditieL_2.Style.LineSymbolID   = 962047;
                setvetor_ditieL_2.Style.LineWidth      = 10;
                Layer3DDataset layer_ditieL_2 = m_sceneControl.Scene.Layers.Add(DataSet_ditieL_2, setvetor_ditieL_2, true, "地铁巷道");
                layer_ditieL_2.UpdateData();

                // 加载北京地铁动画模型KML文件到场景
                String       KMLPath      = @"..\..\SampleData\Symbol3DDisplay\Model\Subway.kml";
                Layer3DKML   layer_kml    = m_sceneControl.Scene.Layers.Add(KMLPath, Layer3DType.KML, true, "模型动画") as Layer3DKML;
                Feature3D    geofeature   = layer_kml.Features.FindFeature(1, Feature3DSearchOption.AllFeatures);
                GeoPlacemark geoplacemark = geofeature.Geometry as GeoPlacemark;
                GeoModel     geomodel     = geoplacemark.Geometry as GeoModel;
                geomodel.Animation.PlayMode = PlayMode.Once;
                layer_kml.UpdateData();

                //导入飞行路线文件
                Boolean i = flyManager.Routes.FromFile(@"..\..\SampleData\Symbol3DDisplay\flyground.fpf");
                flyManager.Routes.CurrentRouteIndex = 0;
                flyManager.Play();

                //当飞行结束后触发事件
                m_sceneControl.Focus();
                m_sceneControl.Scene.Refresh();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }