zoukankan      html  css  js  c++  java
  • ArcEngine加载SDE中的栅格数据的问题

    在加载矢量数据时直接转到IFeatureWorkspace接口即可,但是在加载栅格数据时要转到IRasterWorkspaceEx接口。效果图如下,双击即可添加到Globe中。


    代码如下:

       public partial class SDEDataViewer : DevComponents.DotNetBar.Office2007Form
        {
            #region 私有变量
            private IWorkspace sdeWorkSpace; //sde工作控件
            private IGlobeControl globecontrol;
          
            private string selectedVectorName;//待添加矢量
            private string selectedRasterName;
            #endregion
    
            #region 构造函数
            public SDEDataViewer(IGlobeControl m_globecontrol , IWorkspace workspace)
            {
                this.sdeWorkSpace = workspace;
                this.globecontrol = m_globecontrol;
                InitializeComponent();
            }
            #endregion
    
            #region load
    
            private void SDEDataViewer_Load(object sender , EventArgs e)
            {
                IAoInitialize initAO = new AoInitializeClass();
                initAO.Initialize((esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB));
                loadData();
            }
            //获取所有数据
            private void loadData()
            {
                listView_vector.GridLines = true;//表格是否显示网格线
                listView_vector.FullRowSelect = true;//是否选中整行
                listView_vector.View = View.Details;//设置显示方式
                listView_vector.Scrollable = true;//是否自动显示滚动条
                listView_vector.MultiSelect = false;//是否可以选择多行
    
                listView_raster.GridLines = true;
                listView_raster.FullRowSelect = true;
                listView_raster.View = View.Details;
                listView_raster.Scrollable = true;
                listView_raster.MultiSelect = false;
    
    
                //添加表头(列)
                listView_vector.Columns.Add("要素名称" , 150 , HorizontalAlignment.Center);
                listView_vector.Columns.Add("要素类型" , 100 , HorizontalAlignment.Center);
                listView_raster.Columns.Add("数据名称" , 150 , HorizontalAlignment.Center);
                listView_raster.Columns.Add("数据类型" , 100 , HorizontalAlignment.Center);
    
              
                try
                {
                    IEnumDataset enumDataset = sdeWorkSpace.get_Datasets(esriDatasetType.esriDTAny);
                    IDataset dataset = null;
                    while ((dataset = enumDataset.Next()) != null)
                    {
                        if (dataset.Type == esriDatasetType.esriDTFeatureClass)
                        {
                            ListViewItem item = new ListViewItem();
                            item.SubItems.Clear();
                            item.SubItems[0].Text = dataset.Name;
                            string strFeatureType = GetFeatureType(dataset.Name);
                            item.SubItems.Add(strFeatureType);
                            listView_vector.Items.Add(item);
                        }
                        else if (dataset.Type == esriDatasetType.esriDTRasterDataset)
                        {
                            ListViewItem item = new ListViewItem();
                            item.SubItems.Clear();
                            item.SubItems[0].Text = dataset.Name;
                            item.SubItems.Add("栅格数据集");
                            listView_raster.Items.Add(item);
    
                        }
                        
                    }
    
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    
            //获取要素类型
            private string GetFeatureType(string pDataSetName)
            {
                string featureType = "";
                IFeatureWorkspace pFeatureWS = sdeWorkSpace as IFeatureWorkspace;
                IFeatureClass featureClass = pFeatureWS.OpenFeatureClass(pDataSetName);
    
                switch (featureClass.ShapeType)
                {
    
                    case esriGeometryType.esriGeometryPoint:
                        featureType = "点要素";
                        break;
                    case esriGeometryType.esriGeometryPolyline:
                        featureType = "线要素";
                        break;
                    case esriGeometryType.esriGeometryPolygon:
                        featureType = "面要素";
                        break;
                    default:
                        break;
                }
                // System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureWS);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(featureClass);
                return featureType;
            }
    
            #endregion
    
            #region 添加数据
          
            //添加矢量
            private void listView_vector_MouseDoubleClick(object sender , MouseEventArgs e)
            {
                
                IFeatureClass featureClass = (sdeWorkSpace as IFeatureWorkspace).OpenFeatureClass(selectedVectorName);
                IFeatureLayer featureLayer = new FeatureLayerClass()
                {
                    FeatureClass = featureClass ,
                    Name = featureClass.AliasName
                };
                VectorHelper_FeatureOpt VectorAdderHelper = new VectorHelper_FeatureOpt(globecontrol , featureLayer);
                VectorAdderHelper.ShowDialog();
                this.Close();
    
                //System.Runtime.InteropServices.Marshal.ReleaseComObject(featureClass);
                //System.Runtime.InteropServices.Marshal.ReleaseComObject(featureLayer);
                
            }
    
            //添加栅格
            private void listView_raster_MouseDoubleClick(object sender , MouseEventArgs e)
            {
    
                IRasterWorkspaceEx rasterWSEx = sdeWorkSpace as IRasterWorkspaceEx;
                IRasterDataset rasterDataset = rasterWSEx.OpenRasterDataset(selectedRasterName);
                IRasterLayer rasterLayer = new RasterLayerClass();
                rasterLayer.CreateFromDataset(rasterDataset);
    
                RasterHelper_LayerType rasterAdderHelper = new RasterHelper_LayerType(globecontrol , rasterLayer);
                rasterAdderHelper.ShowDialog();
                this.Close();
    
    
    
                //System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterLayer);
               
            }
    
            //obtain selected vector
            private void listView_vector_SelectedIndexChanged(object sender , EventArgs e)
            {
                ListViewItem item = new ListViewItem();
                item = listView_vector.SelectedItems[0];
                string featureClassName_temp = item.SubItems[0].ToString();
                int lastIndex_left = featureClassName_temp.LastIndexOf("{");
                int lastIndex_right = featureClassName_temp.LastIndexOf("}");
                selectedVectorName = featureClassName_temp.Substring(lastIndex_left + 1 , lastIndex_right - lastIndex_left - 1);
    
            }
            //obtain selected raster
            private void listView_raster_SelectedIndexChanged(object sender , EventArgs e)
            {
                ListViewItem item = new ListViewItem();
                item = listView_raster.SelectedItems[0];
                string rasterName_temp = item.SubItems[0].ToString();
                int lastIndex_left = rasterName_temp.LastIndexOf("{");
                int lastIndex_right = rasterName_temp.LastIndexOf("}");
                selectedRasterName = rasterName_temp.Substring(lastIndex_left + 1 , lastIndex_right - lastIndex_left - 1);
    
            }
            #endregion
    
        }
    欢迎留言交流。

  • 相关阅读:
    国债预发行
    解决GDI+的DrawString绘制带有偏移的问题
    大数据量下查询显示优化方案小结
    《提高C++性能的编程技术》 读书笔记
    基金TA系统简介
    关于做对和做好的一点思考
    调试网络断线工作心得
    双目视觉简介
    PCL中outofcore模块---基于核外八叉树的大规模点云的显示
    深度相机Astra Pro测试教程
  • 原文地址:https://www.cnblogs.com/giser-whu/p/3720013.html
Copyright © 2011-2022 走看看