注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

快乐小屋

 
 
 

日志

 
 

基于ArcGIS10.0和Oracle10g的空间数据管理平台九(C#开发)-空间数据导入RDBMS上-Shape格式(1)  

2013-06-14 15:16:33|  分类: Oracle |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
    这一篇博文终于要真正接触操作空间数据了,今天要完成讲解的功能就是导入Shape格式和MDB的空间数据格式到基于ArcSDE空间数据库插件的 Oracle10g数据库中。这里面涉及到的功能和操作非常的多,我准备用两篇文章来介绍,这一篇介绍导入前的准备工作和Shape格式的导入。对于空间 数据和ArcGIS没有基础知识的可以先了解和学习一下这方面的知识,在我这个项目系列博文中也有一些这方面的基础知识介绍,可以看看!下面开始具体介绍 这个过程。

1.选择导入的格式

    当然这里只支持两种格式(Shape和MDB),当然可以支持更多的空间数据格式,我在一篇博文专门介绍了八种数据格式的空间数据。为什么需要各种空间数 据格式的导入呢?因为空间数据的来源多种多样,具体来源可以到google搜索。为了统一管理各种格式或各种来源的空间数据格式,也为了从集中的空间数据 中发现更大的商业信息,所以必须找一种统一的格式来管理,我这个项目当然就是采用的基于空间数据库插件的Oracle10g,采用这种方式主要是想借用 RDBMS的强大功能。

    实现选择格式的思路相当的简单,就是用一个界面采用单选按钮来选择,具体实现选择的功能如下:

  1. /// <summary>  
  2. /// 下一步,选择导入空间数据的格式,支持Shape和MDB格式  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. private void nextBtn_Click(object sender, EventArgs e)  
  7. {  
  8.     this.Close();  
  9.     if (radioButton1.Checked)  
  10.     {  
  11.         //导入为Shape空间数据格式  
  12.         FrmImportShapeFile faif = new FrmImportShapeFile();  
  13.         faif.ShowDialog();  
  14.     }  
  15.     else  
  16.     {  
  17.         //导入为MDB空间数据格式  
  18.         FrmImportMDBFile fim = new FrmImportMDBFile();  
  19.         fim.ShowDialog();  
  20.     }  
  21. }  

     从代码可以看出我们可以通过选择会进入下一个具体导入的界面,下一个界面的功能就是很复杂了。主要复杂的功能是对于需要导入的空间数据格式的检查,包括完 整性检查、与数据库中已有表结构的数据结构是否一一对应或者能够兼容----如字段个数、字段类型、字段长度等。

2.Shape空间数据格式的导入

2.1 变量定义与初始化(在构造函数中初始化,也可以在对话框的Load函数中),见如下代码:

  1. private IFeatureWorkspace pFW;//工作空间  
  2. public int sc_id = 4326;//空间参考系的ID  
  3. private bool bSelectField = false;  
  4. private Dictionary<string, IFields> fieldDic;//用于保存需要检查各个字段  
  5.   
  6. public FrmImportShapeFile()  
  7. {  
  8.     InitializeComponent();  
  9.     if (pFW == null)  
  10.     {  
  11.         pFW = MapOperation.GetFeatrueWorkspace();  
  12.     }  
  13.     fieldDic = new Dictionary<string, IFields>();  
  14. }  

2.2  回到上一步:选择导入格式界面

  1. /// <summary>  
  2. /// 回到上一步:就是选择导入空间数据选择界面  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. private void preBtn_Click(object sender, EventArgs e)  
  7. {  
  8.     FrmSelectFileFormat fsff = new FrmSelectFileFormat();  
  9.     fsff.index = 0;  
  10.     fsff.Show();  
  11.   
  12.     this.Close();  
  13. }  

2.3 使能相应按钮功能的复选按钮功能

  1. /// <summary>  
  2. /// 根据复选按钮使能相应的其他功能按钮  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. private void checkBox1_CheckedChanged(object sender, EventArgs e)  
  7. {  
  8.     if (checkBox1.Checked)//使能选择字段  
  9.     {  
  10.         bSelectField = true;  
  11.   
  12.         selectUploadFieldBtn.Enabled = true;  
  13.         checkUploadFieldBtn.Enabled = true;  
  14.     }  
  15.     else  
  16.     {  
  17.         bSelectField = false;  
  18.         selectUploadFieldBtn.Enabled = false;  
  19.         checkUploadFieldBtn.Enabled = false;  
  20.     }  
  21. }  

2.4 转换导入Shape文件数据到SDE数据库中

  1. /// <summary>  
  2. /// 转换导入Shape文件数据到SDE数据库中  
  3. /// </summary>  
  4. /// <param name="strPath">Shape文件路径</param>  
  5. /// <param name="strFile">Shape文件名称,到后缀名的</param>  
  6. /// <param name="strTableName">导入到SDE中的表名称</param>  
  7. private void ConvertShpToSDE(string strPath, string strFile, string strTableName)  
  8. {  
  9.     //创建一个输出shp文件的工作空间  
  10.     IWorkspaceFactory pShpWorkspaceFactory = new ShapefileWorkspaceFactoryClass();  
  11.     IWorkspace pSourceWS = pShpWorkspaceFactory.OpenFromFile(strPath, 0);  
  12.     /* 
  13.     //1.遍历数据集中的要素类并导入 
  14.     IEnumDataset enumDs = pSourceWS.get_Datasets(esriDatasetType.esriDTFeatureDataset); 
  15.     IFeatureDataset featureDs = enumDs.Next() as IFeatureDataset; 
  16.     while (featureDs != null) 
  17.     { 
  18.         IFeatureClass featClass; 
  19.         IFeatureClassContainer fcContainer = featureDs as IFeatureClassContainer; 
  20.         for (int i = 0; i < fcContainer.ClassCount; i++) 
  21.         { 
  22.             featClass = fcContainer.get_Class(i); 
  23.             if (MapOperation.FindClassByName(workspace as IWorkspace, 
  24.                 null, featClass.AliasName) != null) 
  25.             { 
  26.                 MapOperation.AddFeatureClassToSDE(pSourceWS as IWorkspace, 
  27.                     workspace as IWorkspace, featClass.AliasName, featClass.AliasName); 
  28.             } 
  29.             else 
  30.             { 
  31.                 MapOperation.ConvertFeatureClass(pSourceWS as IWorkspace, 
  32.                     workspace as IWorkspace, featClass.AliasName, featClass.AliasName); 
  33.             } 
  34.         } 
  35.         featureDs = enumDs.Next() as IFeatureDataset; 
  36.     } 
  37.  
  38.     //2.遍历游离的要素类并导入 
  39.     enumDs = pSourceWS.get_Datasets(esriDatasetType.esriDTFeatureClass); 
  40.     IFeatureClass featCl = enumDs.Next() as IFeatureClass; 
  41.     while (featCl != null) 
  42.     { 
  43.         if (MapOperation.FindClassByName(workspace as IWorkspace, 
  44.                 null, featCl.AliasName) != null) 
  45.         { 
  46.             MapOperation.AddFeatureClassToSDE(pSourceWS as IWorkspace, 
  47.                     workspace as IWorkspace, featCl.AliasName, featCl.AliasName); 
  48.         } 
  49.         else 
  50.         { 
  51.             MapOperation.ConvertFeatureClass(pSourceWS as IWorkspace, 
  52.                     workspace as IWorkspace, featCl.AliasName, featCl.AliasName); 
  53.         } 
  54.         featCl = enumDs.Next() as IFeatureClass; 
  55.     }*/  
  56.       
  57.     IFeatureWorkspace pSourceFWS = (IFeatureWorkspace)pSourceWS;  
  58.     SqlHelper sh = new SqlHelper();  
  59.     IFeatureClass pFC = pSourceFWS.OpenFeatureClass(strFile);  
  60.   
  61.     IWorkspace2 pW2 = pFW as IWorkspace2;  
  62.   
  63.     string sql = string.Empty;  
  64.     //判断是否在SDE中已经存在要素类,存在就追加,否则新建  
  65.     if (pW2.get_NameExists(esriDatasetType.esriDTFeatureClass, strTableName))  
  66.     {  
  67.         //是否选择了上载字段  
  68.         if (fieldDic.ContainsKey(strFile))  
  69.         {  
  70.             //选择了上载字段,就将对应字段插入到要素类中  
  71.             AddFeatureClassToSDE(pSourceFWS, pFW, strFile, strTableName);  
  72.         }   
  73.         else  
  74.         {  
  75.             //没有就将全部字段插入要素类中  
  76.             MapOperation.AddFeatureClassToSDE(pSourceWS, pFW as IWorkspace, pFC.AliasName, strTableName);  
  77.         }  
  78.     }  
  79.     else  
  80.     {  
  81.         //新建导入,在数据字典中插入一条游离图层的记录  
  82.         MapOperation.ConvertFeatureClass(pSourceWS as IWorkspace, pFW as IWorkspace,  
  83.            pFC.AliasName, strTableName, sc_id);  
  84.         //MapOperation.CreateFeatureClass(pFW as IWorkspace2, null, strTableName, pFC.Fields, null, null, "");  
  85.         //MapOperation.AddFeatureClassToSDE(pSourceWS, pFW as IWorkspace, pFC.AliasName, strTableName);  
  86.         sql = "select * from layer where table_name='" + strTableName + "'";  
  87.         if (sh.GetRecordCount(sql) > 0)  
  88.         {  
  89.             return;  
  90.         }  
  91.   
  92.         sql = "select max(ID) from layer";  
  93.         OracleDataReader odr = sh.ReturnDataReader(sql);  
  94.         int result = 0;  
  95.         if (odr.Read())  
  96.         {  
  97.             result = int.Parse(odr[0].ToString());  
  98.             result += 1;  
  99.         }  
  100.         Hashtable ht = new Hashtable();  
  101.         ht.Add("ID", result);  
  102.         sql = "select id from element where name='游离图层'";  
  103.         odr = sh.ReturnDataReader(sql);  
  104.         if (odr.Read())  
  105.         {  
  106.             ht.Add("PID"int.Parse(odr[0].ToString()));  
  107.         }   
  108.         else  
  109.         {   
  110.             ht.Add("PID", 2025);  
  111.         }  
  112.   
  113.         ht.Add("TABLE_NAME", strTableName);  
  114.         ht.Add("TABLE_MAPNAME", strTableName);  
  115.         ht.Add("DESCRIPTION""无辅助信息!");  
  116.         if (pFC.ShapeType == esriGeometryType.esriGeometryPoint  
  117.                         || pFC.ShapeType == esriGeometryType.esriGeometryMultipoint)  
  118.         {  
  119.             ht.Add("TYPE""PT");  
  120.         }  
  121.         else if (pFC.ShapeType == esriGeometryType.esriGeometryLine  
  122.                         || pFC.ShapeType == esriGeometryType.esriGeometryPolyline)  
  123.         {  
  124.             ht.Add("TYPE""PL");  
  125.         }  
  126.         else if (pFC.ShapeType == esriGeometryType.esriGeometryPolygon)  
  127.         {  
  128.             ht.Add("TYPE""PY");  
  129.         }  
  130.         else  
  131.         {  
  132.             ht.Add("TYPE""PY");  
  133.         }  
  134.   
  135.         sh.Insert("layer", ht);  
  136.     }  
  137. }  

    上面的代码比较复杂,其中涉及到一个功能就是是否选择一些字段追加到以后的数据库表中,如果不是就全部导入,否则就是执行部分导入功能,全部导入功能是在 前面介绍的空间数据操作类((1)MapOperation.AddFeatureClassToSDE(pSourceWS, pFW as IWorkspace, pFC.AliasName, strTableName);追加功能。(2)MapOperation.ConvertFeatureClass(pSourceWS as IWorkspace, pFW as IWorkspace, pFC.AliasName, strTableName, sc_id);新建一个表导入)介绍实现的,就不在具体介绍了,下面介绍部分追求字段功能,如下:

  1. /// <summary>  
  2.  /// 将Shape文件中要素类选择的字段转换追加到sde数据库已有的要素类中  
  3.  /// </summary>  
  4.  /// <param name="pSourceFW">源要素工作空间</param>  
  5.  /// <param name="pTargetFW">目标要素工作空间</param>  
  6.  /// <param name="nameOfSourceFeatureClass">源要素类名称</param>  
  7.  /// <param name="nameOfTargetFeatureClass">目标要素类名称</param>  
  8.  public void AddFeatureClassToSDE(IFeatureWorkspace pSourceFW, IFeatureWorkspace pTargetFW,  
  9.      string nameOfSourceFeatureClass, string nameOfTargetFeatureClass)  
  10.  {  
  11.      //打开源要素类  
  12.      IFeatureClass pSourceFC = pSourceFW.OpenFeatureClass(nameOfSourceFeatureClass);  
  13.      //打开目标要素类  
  14.      IFeatureClass pTargetFC = pTargetFW.OpenFeatureClass(nameOfTargetFeatureClass);  
  15.      //遍历源要素类的要素并依次插入目标要素类  
  16.      IFeatureCursor pFeaCursor = pSourceFC.Search(nullfalse);  
  17.      IFeature pFeature = pFeaCursor.NextFeature();  
  18.   
  19.      IField pField = new FieldClass();  
  20.      int iIndex = 0;  
  21.   
  22.      while (pFeature != null)  
  23.      {  
  24.          IFeature tempFeature = pTargetFC.CreateFeature();  
  25.          tempFeature.Shape = pFeature.Shape;  
  26.   
  27.          try  
  28.          {  
  29.              //添加字段值  
  30.              IFields pFs = fieldDic[nameOfSourceFeatureClass];  
  31.              for (int j = 0; j < pFs.FieldCount; j++)  
  32.              {  
  33.                  pField = pFs.get_Field(j);  
  34.                  iIndex = tempFeature.Fields.FindField(pField.Name);  
  35.                  if (pField.Editable && iIndex != -1)  
  36.                  {  
  37.                      tempFeature.set_Value(iIndex, pFeature.get_Value(j));  
  38.                  }  
  39.              }  
  40.              tempFeature.Store();  
  41.          }  
  42.          catch (System.Exception ex)  
  43.          {  
  44.              MessageBox.Show(ex.Message);  
  45.              return;  
  46.          }  
  47.          pFeature = pFeaCursor.NextFeature();  
  48.      }  
  49.  }  

2.5 导入要素类到某一个具体的工作空间

  1. /// <summary>  
  2.  /// 导入要素类到工作空间  
  3.  /// </summary>  
  4.  /// <param name="apFD"></param>  
  5.  /// <param name="pathName"></param>  
  6.  /// <param name="fileName"></param>  
  7.  private void ImportFeatureClassToWorkSpace(IFeatureDataset apFD, string pathName, string fileName)  
  8.  {  
  9.      IWorkspaceName pInWorkspaceName;  
  10.      IFeatureDatasetName pOutFeatureDSName;  
  11.      IFeatureClassName pInFeatureClassName;  
  12.      IDatasetName pInDatasetName;  
  13.      IFeatureClassName pOutFeatureClassName;  
  14.      IDatasetName pOutDatasetName;  
  15.      long iCounter;  
  16.      IFields pOutFields, pInFields;  
  17.      IFieldChecker pFieldChecker;  
  18.      IField pGeoField;  
  19.      IGeometryDef pOutGeometryDef;  
  20.      IGeometryDefEdit pOutGeometryDefEdit;  
  21.      IName pName;  
  22.      IFeatureClass pInFeatureClass;  
  23.      IFeatureDataConverter pShpToClsConverter;  
  24.      IEnumFieldError pEnumFieldError = null;  
  25.   
  26.      //得到一个输入SHP文件的工作空间,  
  27.      pInWorkspaceName = new WorkspaceNameClass();  
  28.      pInWorkspaceName.PathName = pathName;  
  29.      pInWorkspaceName.WorkspaceFactoryProgID = "esriCore.ShapefileWorkspaceFactory.1";  
  30.      //创建一个新的要素类名称,目的是为了以来PNAME接口的OPEN方法打开SHP文件  
  31.      pInFeatureClassName = new FeatureClassNameClass();  
  32.      pInDatasetName = (IDatasetName)pInFeatureClassName;  
  33.      pInDatasetName.Name = fileName;  
  34.      pInDatasetName.WorkspaceName = pInWorkspaceName;  
  35.      //打开一个SHP文件,将要读取它的字段集合  
  36.      pName = (IName)pInFeatureClassName;  
  37.      pInFeatureClass = (IFeatureClass)pName.Open();  
  38.      //通过FIELDCHECKER检查字段的合法性,为输入要素类获得字段集合  
  39.      pInFields = pInFeatureClass.Fields;  
  40.      pFieldChecker = new FieldChecker();  
  41.      pFieldChecker.Validate(pInFields, out pEnumFieldError, out pOutFields);  
  42.      //通过循环查找几何字段  
  43.      pGeoField = null;  
  44.      for (iCounter = 0; iCounter < pOutFields.FieldCount; iCounter++)  
  45.      {  
  46.          if (pOutFields.get_Field((int)iCounter).Type == esriFieldType.esriFieldTypeGeometry)  
  47.          {  
  48.              pGeoField = pOutFields.get_Field((int)iCounter);  
  49.              break;  
  50.          }  
  51.      }  
  52.      //得到几何字段的几何定义  
  53.      pOutGeometryDef = pGeoField.GeometryDef;  
  54.      //设置几何字段的空间参考和网格  
  55.      pOutGeometryDefEdit = (IGeometryDefEdit)pOutGeometryDef;  
  56.      pOutGeometryDefEdit.GridCount_2 = 1;  
  57.      pOutGeometryDefEdit.set_GridSize(0, 1500000);  
  58.   
  59.      //创建一个新的要素类名称作为可用的参数  
  60.      pOutFeatureClassName = new FeatureClassNameClass();  
  61.      pOutDatasetName = (IDatasetName)pOutFeatureClassName;  
  62.      pOutDatasetName.Name = pInDatasetName.Name;  
  63.   
  64.      //创建一个新的数据集名称作为可用的参数  
  65.      pOutFeatureDSName = (IFeatureDatasetName)new FeatureDatasetName();  
  66.      //因为ConvertFeatureClass需要传入一个IFeatureDatasetName的参数,  
  67.      //通过它确定导入生成的要素类的工作空间和要素集合  
  68.      //情况一  
  69.      //如果本函数的参数(IFeatureDataset)是一个确切的值,  
  70.      //那么将它转换成IFeatureDatasetName接口就可以了。因为ConvertFeatureClass根据该接口就  
  71.      //可以确定工作空间和要素集合,IFeatureClassName就可以不考虑上述问题  
  72.      //情况二  
  73.      //如果本函数的参数(IFeatureDataset)是一个NULL值,表示要创建独立要素类,  
  74.      //那么ConvertFeatureClass函数无法根据IFeatureDatasetName参数确定工作空间和要素集合  
  75.      //这个时候需要IFeatureClassName参数确定工作空间和要素集合  
  76.   
  77.      //如果参数的值是NULL,说明要创建独立要素类  
  78.      if (apFD == null)  
  79.      {  
  80.          //创建一个不存在的要素集合pFDN,通过它将IFeatureClassName和工作空间连接起来,  
  81.          //而ConvertFeatureClass函数并不使用该变量作为参数,  
  82.          IFeatureDatasetName pFDN = new FeatureDatasetNameClass();  
  83.          IDatasetName pDN = (IDatasetName)pFDN;  
  84.          IDataset pDS = (IDataset)pFW;  
  85.          pDN.WorkspaceName = (IWorkspaceName)pDS.FullName;  
  86.          pDN.Name = pDS.Name;  
  87.          pOutFeatureClassName.FeatureDatasetName = (IDatasetName)pFDN;  
  88.          //将pOutFeatureDSName设置为Null,将它做为参数给ConvertFeatureClass函数,  
  89.          //因为IFeatureClassName本身已经和工作空间关联了,生成的  
  90.          //要素类在工作空间的根目录下,即独立要素类  
  91.          pOutFeatureDSName = null;  
  92.   
  93.      }  
  94.      else//创建的要素类是在给定的参数(要素集合)下  
  95.      {  
  96.          pOutFeatureDSName = (IFeatureDatasetName)apFD.FullName;  
  97.      }  
  98.   
  99.      //开始导入  
  100.      pShpToClsConverter = new FeatureDataConverterClass();  
  101.      pShpToClsConverter.ConvertFeatureClass(pInFeatureClassName, null, pOutFeatureDSName,  
  102.          pOutFeatureClassName, pOutGeometryDef, pOutFields, "", 1000, 0);  
  103.  }  

2.6 添加一个Shape文件到需要导入的空间列表中(包括具体的信息,以供查看和选择):

  1. /// <summary>  
  2. /// 添加一个Shape文件到DataGridViewX1中  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. private void addFileBtn_Click(object sender, EventArgs e)  
  7. {  
  8.     OpenFileDialog ofd = new OpenFileDialog();  
  9.   
  10.     //打开SHP文件  
  11.     string StrFilter = "SHP文件(.shp) | *.shp";  
  12.     ofd.Filter = StrFilter;  
  13.     string ImportShapeFileName;  
  14.     if (ofd.ShowDialog() == DialogResult.OK)  
  15.     {  
  16.         ImportShapeFileName = ofd.FileName;  
  17.     }  
  18.     else  
  19.     {  
  20.         return;  
  21.     }  
  22.   
  23.     string ImportFileName = System.IO.Path.GetFileName(ImportShapeFileName);  
  24.     string ImportFileShortName = System.IO.Path.GetFileNameWithoutExtension(ImportShapeFileName);  
  25.     string ImportFilePath = System.IO.Path.GetDirectoryName(ImportShapeFileName);  
  26.     //导入Shape文件的相关信息到空间中  
  27.     object[] obj = new object[3];  
  28.     obj[0] = ImportFileName;  
  29.     obj[1] = ImportFileShortName;  
  30.     obj[2] = ImportFilePath;  
  31.     dataGridViewX1.Rows.Add(obj);  
  32. }  

2.7 和上一个功能类型,不过这个是添加一个目录,即这目录下的所有Shape文件都会被添加到控件列表中。

  1. /// <summary>  
  2. /// 添加一个目录下的所有Shape文件到DataGridViewX1中  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. private void addFolderBtn_Click(object sender, EventArgs e)  
  7. {  
  8.     FolderBrowserDialog folder = new FolderBrowserDialog();   
  9.     if (folder.ShowDialog() == DialogResult.OK)   
  10.     {  
  11.         string strPath = folder.SelectedPath;  
  12.         if (strPath == "")  
  13.         {   
  14.             return ;   
  15.         }  
  16.   
  17.         string []fileNames = Directory.GetFiles(strPath);  
  18.         string strTemp;  
  19.         foreach (string str in fileNames)  
  20.         {  
  21.             strTemp = str.Remove(0, str.LastIndexOf('\\')+1);  
  22.             if (strTemp.Substring(strTemp.IndexOf('.')) == ".shp")  
  23.             {  
  24.                 object[] obj = new object[3];  
  25.                   
  26.                 obj[0] = strTemp;  
  27.                 strTemp = strTemp.Remove(strTemp.IndexOf('.'));  
  28.                 obj[1] = strTemp;  
  29.                 obj[2] = strPath;  
  30.                 dataGridViewX1.Rows.Add(obj);  
  31.             }  
  32.         }  
  33.     }  
  34. }  

2.8从显示Shape文件信息的控件列表中删除一个Shape文件的信息,就不需要导入的Shape文件可以先删除,免得影响视线。

  1. /// <summary>  
  2. /// 从DataGridViewX1删除一个文件  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. private void delFileBtn_Click(object sender, EventArgs e)  
  7. {  
  8.       
  9.     if (dataGridViewX1.CurrentRow.Index >= 0)  
  10.     {  
  11.         dataGridViewX1.Rows.Remove(dataGridViewX1.CurrentRow);  
  12.     }  
  13.     else  
  14.     {  
  15.         MessageBox.Show("请选择一个要删除的行!");  
  16.         return ;  
  17.     }  
  18. }  

2.9完成导入Shape文件的按钮功能

  1. /// <summary>  
  2. /// 完成导入的功能,当所有准备和检查功能已经做完并且通过就可以通过完成按钮完成导入了  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. private void finishBtn_Click(object sender, EventArgs e)  
  7. {  
  8.     int fileCount = dataGridViewX1.Rows.Count;  
  9.     //多个Shape文件内容依次导入  
  10.     for (int i = 0; i < fileCount; ++i)  
  11.     {  
  12.         // string str = dataGridViewX1.Rows[i].Cells[1].Value.ToString();  
  13.         // ImportFeatureClassToWorkSpace(null,dataGridViewX1.Rows[i].Cells[2].Value.ToString(), str);  
  14.         ConvertShpToSDE(dataGridViewX1.Rows[i].Cells[2].Value.ToString(),   
  15.             dataGridViewX1.Rows[i].Cells[0].Value.ToString(),  
  16.             dataGridViewX1.Rows[i].Cells[1].Value.ToString());  
  17.     }  
  18.     LogHelp.writeLog(FrmMain.username, "空间数据管理""空间数据Shape格式转换导入成功");  
  19.     MessageBox.Show("导入数据完成!");  
  20.     Close();  
  21. }  

    真正的导入函数是前面已经介绍过的ConvertShpToSDE函数。
2.10 把控件中的Shape文件信息保存起来(配置文件)以便下一次直接导入这些文件。

  1. /// <summary>  
  2. /// 保存DataGridViewX1的文件列表到配置文件中  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. private void saveSetBtn_Click(object sender, EventArgs e)  
  7. {  
  8.     System.IO.FileStream fs = new System.IO.FileStream(Directory.GetCurrentDirectory()+"\\set.ini", FileMode.Create);  
  9.     StreamWriter sw = new StreamWriter(fs);  
  10.   
  11.     int fileCount = dataGridViewX1.Rows.Count - 1;  
  12.     //开始写入  
  13.     for (int i = 0; i < fileCount; ++i)  
  14.     {  
  15.         string str = dataGridViewX1.Rows[i].Cells[0].Value.ToString();  
  16.         sw.WriteLine(str);  
  17.         str = dataGridViewX1.Rows[i].Cells[1].Value.ToString();  
  18.         sw.WriteLine(str);  
  19.         str = dataGridViewX1.Rows[i].Cells[2].Value.ToString();  
  20.         sw.WriteLine(str);  
  21.     }   
  22.     //清空缓冲区  
  23.     sw.Flush();  
  24.     //关闭流  
  25.     sw.Close();  
  26.     fs.Close();  
  27. }  
  评论这张
 
阅读(407)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018