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

快乐小屋

 
 
 

日志

 
 

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

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

  下载LOFTER 我的照片书  |

2.11读取配置文件的文件列表加载到控件中

  1. /// <summary>  
  2. /// 读取配置文件的文件列表加载到DataGridViewX1中  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. private void readSetBtn_Click(object sender, EventArgs e)  
  7. {  
  8.     dataGridViewX1.Rows.Clear();  
  9.   
  10.     StreamReader objReader = new StreamReader(Directory.GetCurrentDirectory() + "\\set.ini");  
  11.     string sLine = "";  
  12.     while ((sLine = objReader.ReadLine()) != null)  
  13.     {  
  14.         object[] obj = new object[3];  
  15.         obj[0] = sLine;  
  16.         obj[1] = objReader.ReadLine();  
  17.         obj[2] = objReader.ReadLine();  
  18.   
  19.         dataGridViewX1.Rows.Add(obj);  
  20.     }  
  21.     objReader.Close();  
  22. }  

2.12 选择空间参考系(空间数据都有的)

  1. /// <summary>  
  2. /// 选择空间参考系  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. private void selectBtn_Click(object sender, EventArgs e)  
  7. {  
  8.     FrmSelectSpatialReference fssr = new FrmSelectSpatialReference();  
  9.     fssr.ShowDialog();  
  10.     if (fssr.bOk)  
  11.     {  
  12.         spatialReTxt.Text = fssr.sc_id.ToString();  
  13.         sc_id = fssr.sc_id;  
  14.     }  
  15. }  

2.13选择上载字段(没有选择的将不会导入到数据库中)

  1. /// <summary>  
  2. /// 选择上载字段  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. private void selectUploadFieldBtn_Click(object sender, EventArgs e)  
  7. {  
  8.     if (dataGridViewX1.CurrentRow == null)  
  9.     {  
  10.         MessageBox.Show("选择一行!");  
  11.         return;  
  12.     }  
  13.     string strPath = dataGridViewX1.CurrentRow.Cells[2].Value.ToString();  
  14.     string strName = dataGridViewX1.CurrentRow.Cells[0].Value.ToString();  
  15.   
  16.     FrmSelectField fsf = new FrmSelectField();  
  17.     fsf.InitDataGridView();  
  18.     //创建一个输出shp文件的工作空间  
  19.     IWorkspaceFactory pShpWorkspaceFactory = new ShapefileWorkspaceFactoryClass();  
  20.     IWorkspace pSourceWS = pShpWorkspaceFactory.OpenFromFile(strPath, 0);  
  21.     IFeatureWorkspace pSourceFWS = (IFeatureWorkspace)pSourceWS;  
  22.     IFeatureClass pFC = pSourceFWS.OpenFeatureClass(strName);  
  23.     object[] obj = new object[4];  
  24.     for (int i = 0; i < pFC.Fields.FieldCount; i++)  
  25.     {  
  26.         IField field = pFC.Fields.get_Field(i);  
  27.         obj[0] = false;  
  28.         obj[1] = field.Name;  
  29.         obj[2] = field.Type;  
  30.         obj[3] = field.Length;  
  31.         fsf.AddRowToDataGridView(obj);  
  32.     }  
  33.     fsf.ShowDialog();  
  34.     //确实确定了选择,就把选择的结果和文件名对应保存起来。  
  35.     if (fsf.bSelect)  
  36.     {  
  37.         IFields pFds = new FieldsClass();  
  38.         IFieldsEdit pFdsEdit = pFds as IFieldsEdit;  
  39.         for (int i = 0; i < pFC.Fields.FieldCount; i++)  
  40.         {  
  41.             if (fsf.RowsIsSelect(i))  
  42.             {  
  43.                 IField field = pFC.Fields.get_Field(i);  
  44.                 pFdsEdit.AddField(field);  
  45.             }  
  46.         }  
  47.         if (fieldDic.ContainsKey(strName))  
  48.         {  
  49.             fieldDic.Remove(strName);  
  50.         }  
  51.         fieldDic.Add(strName, pFds);  
  52.     }  
  53. }  

2.14检查导入字段是否满足要求,不满足就提示哪些不满足,满足以后才能执行导入功能。

  1. /// <summary>  
  2. /// 检查字段按钮功能,检查需要导入字段是否满足要求  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. private void checkUploadFieldBtn_Click(object sender, EventArgs e)  
  7. {  
  8.     if (dataGridViewX1.CurrentRow == null)  
  9.     {  
  10.         MessageBox.Show("选择一行!");  
  11.         return;  
  12.     }  
  13.   
  14.     string strPath = dataGridViewX1.CurrentRow.Cells[2].Value.ToString();  
  15.     string strTableName = dataGridViewX1.CurrentRow.Cells[1].Value.ToString();  
  16.     string strName = dataGridViewX1.CurrentRow.Cells[0].Value.ToString();  
  17.     /* 
  18.     IWorkspace2 pW = pFW as IWorkspace2; 
  19.     if (!pW.get_NameExists(esriDatasetType.esriDTFeatureClass, strTableName)) 
  20.     { 
  21.         MessageBox.Show("数据库中不存在此表结构,不能检查!"); 
  22.         return; 
  23.     } 
  24.      
  25.     //1.遍历数据集中的要素类找到并打开目标要素类 
  26.      
  27.     IEnumDataset enumDs = (pFW as IWorkspace).get_Datasets(esriDatasetType.esriDTFeatureDataset); 
  28.     IFeatureDataset featureDs = enumDs.Next() as IFeatureDataset; 
  29.     IFeatureClass pSDEFC = null; 
  30.     while (featureDs != null) 
  31.     { 
  32.         IFeatureClassContainer fcContainer = featureDs as IFeatureClassContainer; 
  33.         for (int i = 0; i < fcContainer.ClassCount; i++) 
  34.         { 
  35.             IFeatureClass pTempFC = fcContainer.get_Class(i); 
  36.             string strTemp = pTempFC.AliasName; 
  37.             if (pTempFC.AliasName.IndexOf('.') >= 0) 
  38.             { 
  39.                 strTemp = strTemp.Substring(strTemp.IndexOf('.')+1); 
  40.             } 
  41.  
  42.             if (strTemp.ToUpper() == strTableName.ToUpper()) 
  43.             { 
  44.                 pSDEFC = fcContainer.get_Class(i); 
  45.                 break; 
  46.             } 
  47.         } 
  48.         if (pSDEFC != null) 
  49.         { 
  50.             break; 
  51.         } 
  52.         featureDs = enumDs.Next() as IFeatureDataset; 
  53.     } 
  54.  
  55.     //2.遍历游离的要素类 
  56.     if (pSDEFC == null) 
  57.     { 
  58.         enumDs = (pFW as IWorkspace).get_Datasets(esriDatasetType.esriDTFeatureClass); 
  59.         IFeatureClass pTempFC = enumDs.Next() as IFeatureClass; 
  60.         while (pTempFC != null) 
  61.         { 
  62.             string strTemp = pTempFC.AliasName; 
  63.             if (pTempFC.AliasName.IndexOf('.') >= 0) 
  64.             { 
  65.                 strTemp = strTemp.Substring(strTemp.IndexOf('.')+1); 
  66.             } 
  67.  
  68.             if (strTemp.ToUpper() == strTableName.ToUpper()) 
  69.             { 
  70.                 pSDEFC = pTempFC; 
  71.                 break; 
  72.             } 
  73.             pTempFC = enumDs.Next() as IFeatureClass; 
  74.         } 
  75.     } 
  76.     */  
  77.     SqlHelper sh = new SqlHelper();  
  78.     string sql = "select * from jcsjk_fielddefine where table_name='" + strTableName.ToLower() + "'";  
  79.     if (sh.GetRecordCount(sql) <= 0)  
  80.     {  
  81.         MessageBox.Show("没有定义该数据标准,不能检查!");  
  82.         return;  
  83.     }  
  84.   
  85.     if (!fieldDic.ContainsKey(strName))  
  86.     {  
  87.         if (MessageBox.Show("此文件还没有选择上载字段,默认全部上载!是否继续检查?""提示信息",  
  88.             MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)  
  89.         {  
  90.             IWorkspaceFactory pShpWorkspaceFactory = new ShapefileWorkspaceFactoryClass();  
  91.             IWorkspace pSourceWS = pShpWorkspaceFactory.OpenFromFile(strPath, 0);  
  92.             IFeatureWorkspace pSourceFWS = (IFeatureWorkspace)pSourceWS;  
  93.             IFeatureClass pFC = pSourceFWS.OpenFeatureClass(strName);  
  94.   
  95.             if (CheckFields(pFC.Fields, strTableName))  
  96.             {  
  97.                 MessageBox.Show("字段匹配");  
  98.             }  
  99.             else  
  100.             {  
  101.                 MessageBox.Show("字段不匹配");  
  102.             }  
  103.         }  
  104.     }  
  105.     else  
  106.     {  
  107.         if (CheckFields(fieldDic[strName], strTableName))  
  108.         {  
  109.             MessageBox.Show("字段匹配");  
  110.         }  
  111.         else  
  112.         {  
  113.             MessageBox.Show("字段不匹配");  
  114.         }  
  115.     }  
  116. }  
  117.   
  118. /// <summary>  
  119. /// 检查字段是否符合数据标准定义  
  120. /// </summary>  
  121. /// <param name="pSourceFileds">字段集</param>  
  122. /// <param name="strTableName">对应的标准名</param>  
  123. /// <returns></returns>  
  124. private bool CheckFields(IFields pSourceFileds, string strTableName)  
  125. {  
  126.     SqlHelper sh = new SqlHelper();  
  127.     string sql = "select * from jcsjk_fielddefine where table_name ='"  
  128.         + strTableName.ToUpper() + "' or table_name='" + strTableName.ToLower() + "'";  
  129.   
  130.     if (pSourceFileds.FieldCount != sh.GetRecordCount(sql))  
  131.     {  
  132.         MessageBox.Show("字段数量不匹配!");  
  133.         return false;  
  134.     }  
  135.     bool result = true;  
  136.     FrmFieldCheckResult ffcr = new FrmFieldCheckResult();  
  137.     ffcr.InitDataGridView1();  
  138.     ffcr.InitDataGridView2();  
  139.     OracleDataReader odr = sh.ReturnDataReader(sql);  
  140.     object[] obj1 = new object[5];  
  141.     object[] obj2 = new object[4];  
  142.     for (int i = 0; i < pSourceFileds.FieldCount; i++)  
  143.     {  
  144.         odr.Read();  
  145.         bool bMatch = true;  
  146.         if (odr["TYPE"].ToString() == "RowID")  
  147.         {  
  148.             IField pSourceField = pSourceFileds.get_Field(pSourceFileds.FindField("FID"));  
  149.   
  150.             obj1[0] = pSourceField.Name;  
  151.             obj1[1] = pSourceField.Type;  
  152.             obj1[2] = pSourceField.Length;  
  153.             obj1[3] = pSourceField.IsNullable;  
  154.   
  155.             obj2[0] = odr["NAME"].ToString();  
  156.             obj2[1] = esriFieldType.esriFieldTypeOID;  
  157.             obj2[2] = odr["LENGTH"].ToString();  
  158.             if (odr["ISNULL"].ToString() == "是")  
  159.             {  
  160.                 obj2[3] = true;  
  161.             }  
  162.             else  
  163.             {  
  164.                 obj2[3] = false;  
  165.             }  
  166.   
  167.             if (obj1[1].ToString() != obj2[1].ToString()  
  168.                 || obj1[2].ToString() != obj2[2].ToString()  
  169.                 || obj1[3].ToString() != obj2[3].ToString())  
  170.             {  
  171.                 bMatch = false;  
  172.                 result = false;  
  173.             }  
  174.             obj1[4] = bMatch;  
  175.             ffcr.AddRowToDataGridView1(obj1);  
  176.             ffcr.AddRowToDataGridView2(obj2);  
  177.         }  
  178.         else if (pSourceFileds.FindField(odr["NAME"].ToString()) >= 0)  
  179.         {  
  180.             IField pSourceField = pSourceFileds.get_Field(pSourceFileds.FindField(odr["NAME"].ToString()));  
  181.   
  182.             obj1[0] = pSourceField.Name;  
  183.             obj1[1] = pSourceField.Type;  
  184.             obj1[2] = pSourceField.Length;  
  185.             obj1[3] = pSourceField.IsNullable;  
  186.   
  187.             obj2[0] = odr["NAME"].ToString();  
  188.             if (odr["TYPE"].ToString() == "RowID")  
  189.             {  
  190.                 obj2[1] = esriFieldType.esriFieldTypeOID;  
  191.             }  
  192.             else if (odr["type"].ToString() == "整数型")  
  193.             {  
  194.                 obj2[1] = esriFieldType.esriFieldTypeInteger;  
  195.             }  
  196.             else if (odr["type"].ToString() == "浮点型")  
  197.             {  
  198.                 obj2[1] = esriFieldType.esriFieldTypeDouble;  
  199.             }  
  200.             else if (odr["type"].ToString() == "字符型")  
  201.             {  
  202.                 obj2[1] = esriFieldType.esriFieldTypeString;  
  203.             }  
  204.             else if (odr["type"].ToString() == "图元")  
  205.             {  
  206.                 obj2[1] = esriFieldType.esriFieldTypeGeometry;  
  207.             }  
  208.             obj2[2] = odr["LENGTH"].ToString();  
  209.             if (odr["ISNULL"].ToString() == "是")  
  210.             {  
  211.                 obj2[3] = true;  
  212.             }  
  213.             else  
  214.             {  
  215.                 obj2[3] = false;  
  216.             }  
  217.   
  218.             if (obj1[1].ToString() != obj2[1].ToString()   
  219.                 || obj1[2].ToString() != obj2[2].ToString()   
  220.                 || obj1[3].ToString() != obj2[3].ToString())  
  221.             {  
  222.                 bMatch = false;  
  223.                 result = false;  
  224.             }  
  225.             obj1[4] = bMatch;  
  226.             ffcr.AddRowToDataGridView1(obj1);  
  227.             ffcr.AddRowToDataGridView2(obj2);  
  228.         }  
  229.         else  
  230.         {  
  231.             MessageBox.Show("字段名称不匹配!");  
  232.             result = false;  
  233.         }  
  234.     }  
  235.     ffcr.ShowDialog();  
  236.     return result;  
  237. }  

2.15根据已有的Shape文件,打开检查字段界面,选中一个具体的Shape文件就检查一个Shape文件,通过的就在控件中标示出来。

  1. /// <summary>  
  2. /// 检查文件字段,字段类型和长度  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. private void checkFileFieldBtn_Click(object sender, EventArgs e)  
  7. {  
  8.     if (dataGridViewX1.CurrentRow == null)  
  9.     {  
  10.         MessageBox.Show("选择一行!");  
  11.         return;  
  12.     }  
  13.     string strPath = dataGridViewX1.CurrentRow.Cells[2].Value.ToString();  
  14.     string strName = dataGridViewX1.CurrentRow.Cells[0].Value.ToString();  
  15.   
  16.     FrmSelectField fsf = new FrmSelectField();  
  17.     fsf.SetBtnVisible(false);  
  18.     fsf.Text = ((ButtonX)sender).Text;  
  19.     fsf.InitDataGridView();  
  20.     //创建一个输出shp文件的工作空间  
  21.     IWorkspaceFactory pShpWorkspaceFactory = new ShapefileWorkspaceFactoryClass();  
  22.     IWorkspace pSourceWS = pShpWorkspaceFactory.OpenFromFile(strPath, 0);  
  23.     IFeatureWorkspace pSourceFWS = (IFeatureWorkspace)pSourceWS;  
  24.     IFeatureClass pFC = pSourceFWS.OpenFeatureClass(strName);  
  25.     object[] obj = new object[4];  
  26.     for (int i = 0; i < pFC.Fields.FieldCount; i++)  
  27.     {  
  28.         IField field = pFC.Fields.get_Field(i);  
  29.         obj[0] = false;  
  30.         obj[1] = field.Name;  
  31.         obj[2] = field.Type;  
  32.         obj[3] = field.Length;  
  33.         fsf.AddRowToDataGridView(obj);  
  34.     }   
  35.     fsf.SetDataGridViewColumn(0);  
  36.     fsf.ShowDialog();  
  37. }  

 

3.总结

    空间数据的转换是比较复杂和繁琐的功能,需要考虑的方面非常多,只有细心的一点一滴的做好每一步才能出色的完成这些功能,尤其是数据格式的检查是最复杂的,必须一个一个字段去对比。

    今天到此为止!
  评论这张
 
阅读(256)| 评论(0)
推荐 转载

历史上的今天

评论

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

页脚

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