在ArcGlobe三维环境中进行数据查询2(模型定位显示)
分享
代码如下:
文章来源:http://blog.csdn.net/sydbc/article/details/17791195
void dataGridView1_CellClick(object sender,DataGridViewCellEventArgs e)
{
//取查询条件
StringstrCode = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
if (strCode== String.Empty)
{
return;
}
//取查询图层名称
StringLayerName = this.comboBox1.SelectedItem.ToString();
//获得当前视图
IScene scene= this.axGlobe.Globe.GlobeDisplay.Scene;
IQueryFilter pQueryFilter = new QueryFilterClass();
IActiveViewpActiveView;
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);
IFeaturepFeature;
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 theline 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;
stringshapeField = featureClass.ShapeFieldName;
ESRI.ArcGIS.Geodatabase.ISpatialFilter spatialFilterCls = newESRI.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;
IPointtarget = 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);
}
文章来源:http://blog.csdn.net/sydbc/article/details/17791195
0 个评论
推荐内容
相关问题
- sketchup模型导入cityengine中部分纹理丢失,怎么解决?
- arcgis10.4 离线部署js api 4.3 版本 无法显示
- ArcGis打开图层后显示unknown units,想要define一个投影坐标系,但数据大小似乎不一致
- 怎样用arcgis对已经矢量化的不同时期同一地区的土地利用图像进行时空变化分析?
- 运用ArcGIS利用大数据中哪些数据对公园可达性进行分析?
- arcgis Api for java script 4.4部署离线环境
- 在模型构建器中实现计算几何
- 网络分析时设置的停靠点为什么显示是问号?
- 按照Engine+开发手册ArcEngine_10.0_C#二次开发编写的鹰眼的代码,运行时鹰眼不显示!
- Arcmap发布tpk切片包,地图只显示上半部分,下半部分空白
- ArcGIS Runtime SDK for Android 100.0.0能不能调用ArcGIS online或者portal中的三维场景呢???