zoukankan      html  css  js  c++  java
  • shp文件批量导入SDE

    仿照ArcGIS的数据导入功能做了个简易的数据导入界面:

    需要注意的问题:上篇博文中的要素类导入函数要变成静态函数,不然会报错。原因我想可能是因为非静态函数导入时,workspace与workspacefactory等类型变量未释放,希望了解的童鞋留言讨论哈。

    下面给出全部源码:

      public partial class ImportDataToSDE:DevComponents.DotNetBar.Office2007Form
        {
          
            #region 类成员变量
    
            public IGlobeControl globeControl = null;
            public IScene scene = null;
            public IWorkspace sdeWorkspace = null;
            public IFeatureWorkspace featureWorkspace = null; //矢量工作空间
            public IRasterWorkspace rasterWorkspace = null;//栅格工作空间
            public IFeatureDataset featureDataset = null;  //矢量数据集
            public IRasterDataset rasterDataset = null; //栅格数据集
    
            public List<IFeatureLayer> featurelayerList;
            public List<IRasterLayer> rasterlayerList;
    
            public string layerType = "";//图层类型
            public string outPutLayerName = "";//导出图层名称
            public string selectedDataSet_list = "";//listbox选中的图层
    
            #endregion
    
            //构造
            public ImportDataToSDE (IWorkspace ws,IGlobeControl globeControl)
            {
                this.sdeWorkspace = ws;
                this.globeControl = globeControl;
                this.scene = globeControl.GlobeDisplay.Scene;
                this.featurelayerList = new List<IFeatureLayer>();
                this.rasterlayerList = new List<IRasterLayer>();
                InitializeComponent();
            }
            //load
            private void ImportDataToSDE_Load (object sender,EventArgs e)
            {
                IAoInitialize initAO = new AoInitializeClass();
                initAO.Initialize((esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB));
            }
    
            //填充combox
            private void comboBox_DataType_SelectedIndexChanged (object sender,EventArgs e)
            {
                try
                {
                    layerType = comboBox_DataType.Text.ToString();
                    featurelayerList.Clear();
                    rasterlayerList.Clear();
                    loadAllLayers();
    
                    if(layerType == "矢量数据")
                    {
                        for(int i = 0;i < featurelayerList.Count;i++)
                        {
                            comboBox_DataSet.Items.Add(featurelayerList[i].Name);
    
                        }
                    }
                    else if(layerType == "栅格数据")
                    {
                        for(int i = 0;i < rasterlayerList.Count;i++)
                        {
                            comboBox_DataSet.Items.Add(rasterlayerList[i].Name);
    
                        }
                    }
    
                }
                catch(System.Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
              
            }
           
            //加载所有图层
            public void loadAllLayers ()
            {
                try
                {
                    for(int i = 0;i < scene.LayerCount;i++)
                    {
                        ILayer layer = scene.get_Layer(i);
                        if(layer is IFeatureLayer)
                        {
                            featurelayerList.Add(layer as IFeatureLayer);
                        }
                        else
                        {
                            rasterlayerList.Add(layer as IRasterLayer);
                        }
    
    
                    }
                }
                catch(System.Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
         
            //选择导出图层
            private void comboBox_DataSet_SelectedIndexChanged (object sender,EventArgs e)
            {
                outPutLayerName = comboBox_DataSet.Text.ToString();
            }
    
           
            // 根据名称获取图层
            private ILayer GetLayerByName (string strLayerName)
            {
                ILayer pLayer = null;
                for(int i = 0;i < scene.LayerCount;i++)
                {
                    pLayer = scene.get_Layer(i);
                    if(strLayerName == pLayer.Name)
                    {
                        break;
                    }
                }
                return pLayer;
            }
    
            //添加导出数据集
            private void button_AddDS_Click (object sender,EventArgs e)
            {
                try
                {
                    if(comboBox_DataSet.Text != "")
                    {
    
                        listBox_SelectDataSet.Items.Add(comboBox_DataSet.Text);
    
                    }
                    else
                    {
                        MessageBox.Show("未选中导出数据集");
                    }
                }
                catch(System.Exception ex)
                {
                    MessageBox.Show(ex.Message + " 添加失败!");
                }
            }
    
            private void listBox_SelectDataSet_SelectedIndexChanged (object sender,EventArgs e)
            {
                if(listBox_SelectDataSet.SelectedIndex != -1)
                {
                    selectedDataSet_list = listBox_SelectDataSet.Items[listBox_SelectDataSet.SelectedIndex].ToString();
                }
            }
            //移除数据集
            private void button_RemoveDS_Click (object sender,EventArgs e)
            {
                try
                {
                    listBox_SelectDataSet.Items.Remove(listBox_SelectDataSet.SelectedIndex);
                    listBox_SelectDataSet.Refresh();
                }
                catch(System.Exception ex)
                {
                    MessageBox.Show("移除数据集失败!");
                }
    
            }
           
            //导入
            private void button_import_Click (object sender,EventArgs e)
            {
                try
                {
                    if(layerType == "矢量数据")
                    {
                        for(int i = 0;i < listBox_SelectDataSet.Items.Count;i++)
                        {
                            IFeatureLayer featurelayer = new FeatureLayerClass();
                            featurelayer = GetLayerByName(listBox_SelectDataSet.Items[i].ToString()) as IFeatureLayer;
                            IFeatureClass outputFeatureClass = featurelayer.FeatureClass;
                            
                            DataExportHelper.FeatureClassToFeatureClass(outputFeatureClass,sdeWorkspace); 
                        }
                        this.Close();
                        MessageBox.Show("导入完成!");
                   
                    }
                    else if(layerType == "栅格数据")
                    {
                       
                    }
    
                }
                catch(System.Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    
            private void button_cancle_Click (object sender,EventArgs e)
            {
                this.Close();
                this.Dispose();
            }
          
           
        }
    现在只是实现了矢量数据的批量导入,栅格数据的导入类似,就不再赘述了。希望和大家多多交流,谢谢关注!

  • 相关阅读:
    用confluence完成室项目管理网站的初步搭建
    初中英语单词词库 for supermemo
    用supermemo背单词4年了
    武汉一点印象
    借个iPad玩玩,越狱4.2.1成功
    TIOBE在2011年3月发布的编程语言排名表
    复杂的工作机构,一把手真是不易
    自己做的项目竟然与马拉松石油公司的数字油田思路惊人的相似!
    iPhone开发笔记[1/50]:初学iPhone上用Quartz 2D画图
    背单词的词条终于达到6500
  • 原文地址:https://www.cnblogs.com/giser-whu/p/3707036.html
Copyright © 2011-2022 走看看