在ArcGlobe三维环境中进行数据查询2(模型定位显示)

void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {

           //取查询条件
            String strCode = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
            if (strCode == String.Empty)
            {
                return;
            }

           //取查询图层名称
            String LayerName = this.comboBox1.SelectedItem.ToString();
           //获得当前视图
            IScene scene = this.axGlobe.Globe.GlobeDisplay.Scene;

            IQueryFilter pQueryFilter = new QueryFilterClass();
            IActiveView pActiveView;
            pActiveView = (IActiveView)scene;

            //清空上一次选择
            scene.ClearSelection();

            IFeatureLayer pFeatureLayer;
            pFeatureLayer = (IFeatureLayer)scene.get_Layer(GetLayerId(LayerName, scene));
            pQueryFilter.WhereClause = "NAME='" + strCode + "'";
            IFeatureCursor pFeatureCursor;
            pFeatureCursor = pFeatureLayer.FeatureClass.Search(pQueryFilter, false);
            IFeature pFeature;
            pFeature = pFeatureCursor.NextFeature();
            while (pFeature != null)
            {
                scene.SelectFeature(pFeatureLayer, pFeature);
                pFeature = pFeatureCursor.NextFeature();
            }
            ESRI.ArcGIS.Carto.ILayer layer = (ESRI.ArcGIS.Carto.ILayer)scene.get_Layer(GetLayerId(LayerName, scene));
            // Get the line feature selected in the layer
            ESRI.ArcGIS.Carto.IFeatureLayer featureLayer = (ESRI.ArcGIS.Carto.IFeatureLayer)layer;
            ESRI.ArcGIS.Carto.IFeatureSelection featureSelection = (ESRI.ArcGIS.Carto.IFeatureSelection)layer;

            ESRI.ArcGIS.Geodatabase.ISelectionSet selectionSet = featureSelection.SelectionSet;
            ESRI.ArcGIS.Geodatabase.IFeatureClass featureClass = featureLayer.FeatureClass;
            string shapeField = featureClass.ShapeFieldName;
            ESRI.ArcGIS.Geodatabase.ISpatialFilter spatialFilterCls = new ESRI.ArcGIS.Geodatabase.SpatialFilterClass();

            ESRI.ArcGIS.Geometry.ISpatialReference spatialReference = scene.SpatialReference;
            spatialFilterCls.GeometryField = shapeField;
            spatialFilterCls.set_OutputSpatialReference(shapeField, spatialReference);
            ESRI.ArcGIS.Geodatabase.ICursor cursor;
            selectionSet.Search(spatialFilterCls, true, out cursor);
            ESRI.ArcGIS.Geodatabase.IFeatureCursor featureCursor = (ESRI.ArcGIS.Geodatabase.IFeatureCursor)cursor;

            ESRI.ArcGIS.Geodatabase.IFeature SFeature;
            SFeature = featureCursor.NextFeature();
            ESRI.ArcGIS.Geometry.IEnvelope envelope = SFeature.Shape.Envelope;
            ESRI.ArcGIS.Analyst3D.ICamera camera = this.axGlobe.Globe.GlobeDisplay.ActiveViewer.Camera;
            ESRI.ArcGIS.GlobeCore.IGlobeCamera globeCamera = (ESRI.ArcGIS.GlobeCore.IGlobeCamera)camera;
            ESRI.ArcGIS.Analyst3D.ISceneViewer sceneViewer = this.axGlobe.Globe.GlobeDisplay.ActiveViewer;
            globeCamera.OrientationMode = esriGlobeCameraOrientationMode.esriGlobeCameraOrientationGlobal;
            IPoint target = new PointClass();
            target.PutCoords(0, 0);
            target.Z = 0;
            axGlobe.Globe.GlobeDisplay.ActiveViewer.Camera.Target = target;
            axGlobe.Globe.GlobeDisplay.ActiveViewer.Camera.ViewingDistance = 1.5;
            axGlobe.Globe.GlobeDisplay.ActiveViewer.Camera.ViewFieldAngle = 8.5;
            axGlobe.Globe.GlobeDisplay.ActiveViewer.Camera.RollAngle = 0.0;
            axGlobe.Globe.GlobeDisplay.ActiveViewer.Camera.RecalcUp();

            //定位
            globeCamera.SetToZoomToExtents(envelope, this.axGlobe.Globe, sceneViewer);

            //显示比例调整
            double vfa = this.axGlobe.Globe.GlobeDisplay.ActiveViewer.Camera.ViewFieldAngle;
            axGlobe.Globe.GlobeDisplay.ActiveViewer.Camera.ViewFieldAngle = vfa * 6;
            axGlobe.Globe.GlobeDisplay.ActiveViewer.Redraw(false);
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值