<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://weibo.com/freshairbrucewoo

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

       

          又是晚上12點以后了,今晚等待人民網的最新新聞也是沒有結果,還是稱這個時間寫一篇博客吧!我是程序員但是也關心國家大事,自己沒有太大的要求,就喜歡有一個穩定和安心的生活和工作環境,僅此而已!

          今天這篇博客還是基于ArcGIS10.0和Oracle10g的空間數據管理平臺的設計與實現的繼續,前面有一篇博客(十三)介紹空間數據導入的,今天介紹一篇空間數據導出。空間數據導出的作用主要是以另一種形式保存,方便部分數據的轉移。下面開始介紹具體實現過程。

      1.定義個SDE的工作空間并且在構造函數中初始化

       

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

       

      2.在form的load函數中初始化表信息,這些表就是可以被導出空間數據表。

       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 jcsjk_layer l,jcsjk_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.如果導出的是mdb的格式,而且是以追加的方式,那么下面的函數將實現這個功能。

       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 }

      6.其他功能:主要就是一些小功能,例如界面的布局設計,選擇導出的文件名,導出以后即使清空文件名等。

       

      總結:其實空間數據導出功能也是主要用到一個技術:就是空間數據格式的相互轉換。這個技術也是空間數據導入使用的主要功能或技術。還有一點值得提的是:把所有的表以及表的一些描述信息以列表的形式展現出來方便用戶選擇,選擇的策略是任意多個需要導出的表,但是同時只能選擇一種格式。如果需要導出多種格式,就需要多執行幾次導出功能,這點是可以改進的地方,也可以用多選項給出,然后根據用戶選擇一次性導出多種格式,這樣也簡單的提升了用戶使用的效率。呵呵,優化無處不在。

      posted @ 2012-02-10 00:58  薔薇理想人生  閱讀(1766)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 中国国产免费毛卡片| 四虎成人精品在永久免费| 欧美精品v国产精品v日韩精品| 久久成人伊人欧洲精品| 成人亚欧欧美激情在线观看| а√在线中文网新版地址在线| 亚洲视频一区| 国产日产欧产精品精品| 免费国产一区二区不卡| 激情国产一区二区三区四区| 黑人大战欲求不满人妻| 国产在线一区二区在线视频| 亚洲中文字幕无码中字| 亚洲最大日韩精品一区| 亚洲精品不卡av在线播放| 日韩中文字幕av有码| 国产激情免费视频在线观看| 日韩国产中文字幕精品| 苍井空毛片精品久久久| 欧美福利电影A在线播放| 精品国产一区二区三区国产区| 西西人体www大胆高清| 精品熟女少妇免费久久| 一区二区不卡99精品日韩| 亚洲精品乱码久久久久红杏| 蜜臀精品视频一区二区三区| 亚洲国产精品综合久久2007| 亚洲色www永久网站| 欧美一区二区三区欧美日韩亚洲 | 欧美国产日韩久久mv| 国产亚洲欧美另类一区二区| 日韩人妻无码精品久久| 亚洲国产综合精品2020| 久久久精品人妻一区二区三区| 日本在线 | 中文| 婷婷久久综合九色综合88| 桑植县| 色伦专区97中文字幕| 国产人与禽zoz0性伦多活几年| 国产午精品午夜福利757视频播放 国产午夜A理论毛片 | 97精品伊人久久久大香线蕉|