<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      基于ArcGIS10.0和Oracle10g的空間數據管理平臺十三(C#開發)-空間數據導出

      我的獨立博客網址是:http://wuyouqiang.sinaapp.com/

      我的新浪微博:http://weibo.com/freshairbrucewoo

      歡迎大家相互交流,共同提高技術。

      前面有幾篇文章專門介紹了空間數據的導入,導入的目的是為了統一管理。今天介紹空間數據導出,導出的格式支持和導入的格式一樣,導出的目的是為了方便數據的遷移。其實導入和導出用到的技術基本上都是相同的,不過為了介紹的完整性還是單獨拿出來,因為這一部分的功能也是很重要而且是必不可少的!

      1.首先定義一個用于操作SDE數據庫的工作空間并且在構造函數中初始化(調用工具類里面提供的靜態方法初始化):

      1         private IFeatureWorkspace pWorkspaceSDE;//定義SDE工作空間
      2 public FrmDataExport()
      3 {
      4 InitializeComponent();
      5 if (pWorkspaceSDE == null)
      6 {
      7 pWorkspaceSDE = MapOperation.GetFeatrueWorkspace();
      8 }
      9 }

       

      2.列出所有數據表:供用戶選擇需要導出的數據,每一個表是一個可選項,這樣用戶可以一次導出多個需要的數據表。

       1         /// <summary>
      2 /// 列出所有的表信息
      3 /// </summary>
      4 /// <param name="sender"></param>
      5 /// <param name="e"></param>
      6 private void FrmDataExport_Load(object sender, EventArgs e)
      7 {
      8 SqlHelper sh = new SqlHelper();
      9 string sql = string.Empty;
      10 sql = "select table_name,table_mapname,type from layer l,element e where "
      11 + "e.id=l.pid and e.category='矢量數據'";
      12 OracleDataReader odr = sh.ReturnDataReader(sql);
      13 object[] obj = new object[4];
      14 while (odr.Read())
      15 {
      16 obj[0] = false;
      17 obj[1] = odr[0].ToString();
      18 obj[2] = odr[2].ToString();
      19 obj[3] = odr[1].ToString();
      20 dataGridViewX1.Rows.Add(obj);
      21 }
      22 comboBoxEx1.SelectedIndex = 0;
      23 }

       

      3.根據選擇的導出數據格式打開相應的文件

       1         /// <summary>
      2 /// 根據選擇的導出數據格式打開相應的文件
      3 /// </summary>
      4 /// <param name="sender"></param>
      5 /// <param name="e"></param>
      6 private void selectPathBtn_Click(object sender, EventArgs e)
      7 {
      8 //根據導出數據格式打開相應的文件
      9 switch (comboBoxEx1.SelectedIndex)
      10 {
      11 case 0:
      12 {
      13 FolderBrowserDialog folder = new FolderBrowserDialog();
      14 if (folder.ShowDialog() == DialogResult.OK)
      15 {
      16 if (folder.SelectedPath != "")
      17 {
      18 selectPathTxt.Text = folder.SelectedPath;
      19 }
      20 }
      21 }
      22 break;
      23 case 1:
      24 {
      25 OpenFileDialog ofd = new OpenFileDialog();
      26 ofd.Filter = "MDB文件(.mdb) | *.mdb";
      27 ofd.CheckFileExists = false;
      28
      29 if (ofd.ShowDialog() == DialogResult.OK)
      30 {
      31
      32 if (ofd.FileName != "")
      33 {
      34 selectPathTxt.Text = ofd.FileName;
      35 }
      36 }
      37 }
      38 break;
      39 default:
      40 break;
      41 }
      42 }

       

      4.執行具體的導出功能:一起準備工作都做好了就開始執行具體的導出功能了,根據不同的格式執行相應導出格式的功能。

       1         /// <summary>
      2 /// 執行具體的導出功能
      3 /// </summary>
      4 /// <param name="sender"></param>
      5 /// <param name="e"></param>
      6 private void exportBtn_Click(object sender, EventArgs e)
      7 {
      8 if (selectPathTxt.Text == "")
      9 {
      10 MessageBox.Show("請選擇導出路勁");
      11 return;
      12 }
      13 IWorkspaceFactory pWF = null;
      14 switch (comboBoxEx1.SelectedIndex)
      15 {
      16 case 0:
      17 {
      18 if (!File.Exists(selectPathTxt.Text))
      19 {
      20
      21 }
      22 //創建一個輸出shp文件的工作空間
      23 pWF = new ShapefileWorkspaceFactoryClass();
      24 IFeatureWorkspace pFW = pWF.OpenFromFile(selectPathTxt.Text, 0) as IFeatureWorkspace;
      25 IWorkspace pW = pFW as IWorkspace;
      26
      27 for (int i = 0; i < dataGridViewX1.Rows.Count; ++i)
      28 {
      29 if (bool.Parse(dataGridViewX1.Rows[i].Cells[0].Value.ToString()))
      30 {
      31 if (dataGridViewX1.Rows[i].Cells[2].Value.ToString() != "PA")
      32 {
      33 string str = dataGridViewX1.Rows[i].Cells[1].Value.ToString();
      34 MapOperation.ConvertFeatureClass(pWorkspaceSDE as IWorkspace,
      35 pW, str, str, 4326);
      36 }
      37 else
      38 {
      39 MessageBox.Show("屬性表不能夠導出為Shape文件");
      40 }
      41 }
      42 }
      43 MessageBox.Show("導出數據完成!");
      44 }
      45 break;
      46 case 1:
      47 {
      48 // Instantiate an Access workspace factory and create a new personal geodatabase.
      49 pWF = new AccessWorkspaceFactoryClass();
      50 IWorkspaceName pWN = pWF.Create(Path.GetDirectoryName(selectPathTxt.Text),
      51 Path.GetFileName(selectPathTxt.Text),null, 0);
      52
      53 // Cast the workspace name object to the IName interface and open the workspace.
      54 IName pN = (IName)pWN;
      55 IWorkspace pW = (IWorkspace)pN.Open();
      56
      57 for (int i = 0; i < dataGridViewX1.Rows.Count; ++i)
      58 {
      59 if (bool.Parse(dataGridViewX1.Rows[i].Cells[0].Value.ToString()))
      60 {
      61 string str = dataGridViewX1.Rows[i].Cells[1].Value.ToString();
      62 if (dataGridViewX1.Rows[i].Cells[2].Value.ToString() != "PA")
      63 {
      64 MapOperation.ConvertFeatureClass(pWorkspaceSDE as IWorkspace,
      65 pW, str, str, 4326);
      66 }
      67 else
      68 {
      69 ITable pSourceT = pWorkspaceSDE.OpenTable(str);
      70 IFeatureWorkspace pFW = pW as IFeatureWorkspace;
      71 ITable pTargetT = pFW.CreateTable(str, pSourceT.Fields, null, null, "");
      72 FusedIndexTable(ref pSourceT, ref pTargetT);
      73 }
      74 }
      75 }
      76 MessageBox.Show("導出數據完成!");
      77 }
      78 break;
      79 default:
      80 break;
      81 }
      82 }

       

      5.如果導出的數據表或文件已經存在就以追加的方式導出數據

       1         /// <summary>
      2 /// 如果目的數據庫中已經有表,則將新的記錄追加進去
      3 /// </summary>
      4 /// <param name="FromTable">導出表</param>
      5 /// <param name="ToTable">導入表</param>
      6 private void FusedIndexTable(ref ITable FromTable, ref ITable ToTable)
      7 {
      8 if (FromTable == null || ToTable == null)
      9 {
      10 return;
      11 }
      12 IRow pFromRow;
      13 ICursor pToCursor, pFromCursor;
      14 IRowBuffer pToRowBuffer;
      15 int pIndex;
      16
      17 pToRowBuffer = ToTable.CreateRowBuffer();
      18 pToCursor = ToTable.Insert(true);
      19 pFromCursor = FromTable.Search(null, false);
      20 pFromRow = pFromCursor.NextRow();
      21 while (pFromRow != null)
      22 {
      23 for (int i = 0; i < pFromRow.Fields.FieldCount; i++)
      24 {
      25 pIndex = pToRowBuffer.Fields.FindField(pFromRow.Fields.get_Field(i).Name.Trim());
      26 if (pFromRow.Fields.get_Field(i).Editable && pIndex > -1)
      27 {
      28 pToRowBuffer.set_Value(pIndex, pFromRow.get_Value(i));
      29 }
      30 }
      31
      32 pToCursor.InsertRow(pToRowBuffer);
      33 pFromRow = pFromCursor.NextRow();
      34 }
      35 System.Runtime.InteropServices.Marshal.ReleaseComObject(pToCursor);
      36 pFromRow = null;
      37 pFromCursor = null;
      38 pToRowBuffer = null;
      39 }
      40 }

       

      6.總結:這里用到的大部分技術在前面都介紹過了,這里不過是不同的業務邏輯而已,其實很多的時候高深的技術并不會用到很多,主要是處理好各個功能的業務邏輯,至于用什么樣的技術實現都是可以的!

      posted @ 2011-12-11 16:37  薔薇理想人生  閱讀(712)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 成人一区二区三区激情视频| 丁香婷婷在线视频| 精品国产成人国产在线视| 欧美肥老太牲交大战| 三级国产在线观看| 国产AV午夜精品一区二区三区| 午夜欧美精品久久久久久久 | 精品无码一区二区三区电影| 亚洲AV无码专区亚洲AV桃| 荥经县| 人人狠狠综合久久亚洲爱咲| jizzjizz日本高潮喷水| 国产va在线观看免费| 国产午夜视频在线观看| 高清一区二区三区不卡视频 | 依依成人精品视频在线观看| 欧美猛少妇色xxxxx猛叫| 日韩av在线不卡一区二区三区| 一本色道久久加勒比综合| 日韩丝袜欧美人妻制服| 亚洲色成人一区二区三区 | 国产99久久亚洲综合精品西瓜tv| av鲁丝一区鲁丝二区鲁丝三区| 高淳县| 亚洲国产欧美在线人成AAAA| 韩国精品福利视频一区二区| 自拍第一区视频在线观看| 精品无码国产污污污免费| 久久碰国产一区二区三区| 欧美在线精品一区二区三区| 乐山市| 麻豆精品一区二区视频在线| 亚洲国产一区二区精品专| 精品无码人妻一区二区三区| 祁连县| 日韩一区二区三区av在线| 亚洲中文字字幕精品乱码| 欧美XXXX黑人又粗又长| 亚洲最大中文字幕无码网站| 开心激情站一区二区三区| 日韩高清在线亚洲专区不卡|