<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

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

       

          本系統的分層按照“數據分類”、“要素類別”和“圖層”進行組織管理。一個數據分類包含一個或多個要素類別,一個要素類別包含一個或多個圖層。圖層分層標準可以作為創建圖庫的數據集和要素類時的參考標準。

          數據分類和要素類別的定義是通過將用戶提供的相關信息存儲到數據庫中,主要的信息有相應的名稱、ID編號、描述等,存放要素類別的表還保存有數據分類的ID,這樣就可以知道要素類別是屬于哪一個數據分類了。數據分類和要素類別的管理就是管理存放這些數據的兩種表,只需要對這兩張表通過SQL語句進行相應的添加、刪除和修改就實現了。

          圖層標準的管理通過將用戶定義的標準寫入數據庫,圖層標準主要涉及到圖層名稱、圖層映射的表名、圖層中文名稱、圖層編號、圖層描述等信息。圖層還必須對應一張數據表來存放圖層的數據,而這張表本身就是屬于圖層標準的一部分,所以在定義一個圖層標準的同時還需要定義映射表的數據結構標準,定義這種表的信息會全部存儲到另一張表中,這些信息在導入標準和創建圖層的時候都可能用到,這些信息包括字段名稱、字段類型、字段長度和字段約束等。

          “數據分類”、“要素類別”和“圖層”之間關系如下圖所示。

       

          下面根據代碼來講解具體每一個功能的詳細實現。

      1.在Load函數中初始化根節點:用樹形控件來表示數據分層管理的層次。

       1         ///<summary>
      2 /// 初始化根節點
      3 ///</summary>
      4 ///<param name="sender"></param>
      5 ///<param name="e"></param>
      6 private void FrmLayerManager_Load(object sender, EventArgs e)
      7 {
      8 Node n = new Node();
      9 n.Text = "數據分層管理";
      10 n.Image = Resources.category;
      11
      12 LayerManagerTree.Nodes.Add(n);
      13 n.Nodes.Add(new Node());
      14 }

      2.樹形一個節點展開后的處理工作,就是從數據庫中讀取以后的下層節點,并在節點中顯示。

       1         ///<summary>
      2 /// 樹形控件的節點展開以后的處理,更新所有的子節點
      3 ///</summary>
      4 ///<param name="sender"></param>
      5 ///<param name="e"></param>
      6 private void LayerManagerTree_AfterExpand(object sender, AdvTreeNodeEventArgs e)
      7 {
      8 UpdateNode(e.Node);
      9 }
      10
      11 ///<summary>
      12 /// 更新tn節點的子節點信息
      13 ///</summary>
      14 ///<param name="tn"></param>
      15 private void UpdateNode(Node tn)
      16 {
      17 string sql;
      18 SqlHelper sh = new SqlHelper();
      19 OracleDataReader odr;
      20
      21 switch (tn.Level)
      22 {
      23 case 0:
      24 tn.Nodes.Clear();
      25 sql = "select name from category where name='數據標準'";
      26 odr = sh.ReturnDataReader(sql);
      27
      28 while (odr.Read())
      29 {
      30 Node n = new Node();
      31 n.Text = odr[0].ToString();
      32 n.Image = Resources.datastand;
      33 tn.Nodes.Add(n);
      34
      35 n.Nodes.Add(new Node());
      36 }
      37 break;
      38 case 1:
      39 tn.Nodes.Clear();
      40 sql = "select name from element where category='" + tn.Text + "'";
      41 odr = sh.ReturnDataReader(sql);
      42
      43 while (odr.Read())
      44 {
      45 Node n = new Node();
      46 n.Text = odr[0].ToString();
      47 n.Image = Resources.layer;
      48 tn.Nodes.Add(n);
      49
      50 n.Nodes.Add(new Node());
      51 }
      52 break;
      53 case 2:
      54 tn.Nodes.Clear();
      55 sql = "select table_name from layer l, jcsjk_element e where e.id = l.pid and e.name='"
      56 + tn.Text + "' and e.category='數據標準'";
      57 odr = sh.ReturnDataReader(sql);
      58
      59 while (odr.Read())
      60 {
      61 Node n = new Node();
      62 n.Text = odr[0].ToString();
      63
      64 tn.Nodes.Add(n);
      65 }
      66 break;
      67 default:
      68 break;
      69 }
      70 }

      3.當在樹形控件中選擇一個節點時,在右邊控件中顯示其具體定義。

       1         ///<summary>
      2 /// 選擇樹形控件的某一個節點,在右邊的DataGridView控件中顯示定義標準
      3 ///</summary>
      4 ///<param name="sender"></param>
      5 ///<param name="e"></param>
      6 private void LayerManagerTree_AfterNodeSelect(object sender, AdvTreeNodeEventArgs e)
      7 {
      8 Node n = new Node();
      9 n = e.Node;
      10 selectNodeText = n.Text;
      11
      12 UpdateTree(n.Level);
      13 }
      14
      15 ///<summary>
      16 /// 顯示某一個標準的具體定義
      17 ///</summary>
      18 ///<param name="index"></param>
      19 private void UpdateTree(int index)
      20 {
      21 string sql = string.Empty;
      22 SqlHelper sh = new SqlHelper();
      23 DataSet ds;
      24
      25 switch (index)
      26 {
      27 case 1:
      28 sql = "select d.ID,TABLE_NAME,TABLE_MAPNAME,TYPE,d.DESCRIPTION from " +
      29 "layer d,element e,category c where d.pid=e.id" +
      30 " and category=c.name and c.name='" + selectNodeText + "'";
      31
      32 break;
      33 case 2:
      34 sql = "select l.ID,TABLE_NAME,TABLE_MAPNAME,TYPE,l.DESCRIPTION from layer l,element e " +
      35 "where l.pid=e.id and e.name = '" + selectNodeText + "' and e.category='數據標準'";
      36
      37 break;
      38 case 3:
      39 sql = "select l.ID,TABLE_NAME,TABLE_MAPNAME,TYPE,l.DESCRIPTION from layer l,element e where table_name='"
      40 + selectNodeText + "' and e.category='數據標準' and l.pid=e.id";
      41
      42 break;
      43 default:
      44 break;
      45
      46 }
      47
      48 if (index >= 1 && index <= 3)
      49 {
      50 ds = sh.ReturnDataSet(sql, "jcslayer");
      51
      52 dataGridViewX1.DataSource = ds.Tables[0];
      53 dataGridViewX1.Columns[0].HeaderText = "圖層代碼";
      54 dataGridViewX1.Columns[1].HeaderText = "圖層名";
      55 dataGridViewX1.Columns[2].HeaderText = "圖層映射名";
      56 dataGridViewX1.Columns[3].HeaderText = "類型";
      57 dataGridViewX1.Columns[4].HeaderText = "描述";
      58 }
      59 }

      4.鼠標右擊樹形控件節點,顯示對應的右擊菜單

       1         ///<summary>
      2 /// 鼠標右擊樹形控件節點,顯示對應的右擊菜單
      3 ///</summary>
      4 ///<param name="sender"></param>
      5 ///<param name="e"></param>
      6 private void LayerManagerTree_NodeMouseDown(object sender, TreeNodeMouseEventArgs e)
      7 {
      8 if (e.Button == MouseButtons.Right)
      9 {
      10 Node n = new Node();
      11 n = e.Node;
      12 selectNodeText = n.Text;
      13
      14 switch (n.Level)
      15 {
      16 case 0:
      17 contextMenuStrip1.Show(MousePosition);
      18 break;
      19 case 1:
      20 contextMenuStrip2.Show(MousePosition);
      21 break;
      22 case 2:
      23 contextMenuStrip3.Show(MousePosition);
      24 break;
      25 case 3:
      26 contextMenuStrip4.Show(MousePosition);
      27 break;
      28 default:
      29 break;
      30
      31 }
      32 }
      33 }

      5.添加數據分類

       1         ///<summary>
      2 /// 添加數據分類
      3 ///</summary>
      4 ///<param name="sender"></param>
      5 ///<param name="e"></param>
      6 private void AddDataCategory_Click(object sender, EventArgs e)
      7 {
      8 FrmCategory adl = new FrmCategory();
      9 adl.Text = "添加地圖數據分類";
      10 adl.ShowDialog();
      11
      12 Node n = LayerManagerTree.FindNodeByText(selectNodeText);
      13 UpdateTree(n.Level);//更新樹形控件
      14 UpdateNode(n);//更新節點
      15 }

          在添加數據分類、修改數據分類、添加要素分類和更新要素分類都是用到一個FrmCategory類,它也是一個和對話框關聯的類,下面是這個類具體的實現代碼(不包括界面代碼):

        1         private string saveId;//保存原ID,以備更新使用
      2 private string saveName;//保存原Name
      3 public string categoryName;//保存原分類名稱
      4
      5 public FrmCategory()
      6 {
      7 InitializeComponent();
      8 }
      9
      10 //根據Tag值的不同實現不同的功能,因為界面都是一樣的
      11 //四個功能:1.添加數據分類;2.更新數據分類;3.添加要素類分類;4.更新要素類分類
      12 private void AddBtn_Click(object sender, EventArgs e)
      13 {
      14 //1.不為空檢查
      15 if (IdTxt.Text.Trim() == "" || NameTxt.Text.Trim() == "")
      16 {
      17 ErrLabel.Text = "類別編碼和類別名稱都不能為空!";
      18 return;
      19 }
      20 //2.記錄已存在檢查
      21 SqlHelper sh = new SqlHelper();
      22 string sql;
      23 //根據標簽判斷是什么功能
      24 if (this.Tag == "update")
      25 {
      26 //更新數據分類
      27 sql = "select * from category where name='" + NameTxt.Text + "'" + " and name!='"
      28 + saveName + "'" + " or id=" + int.Parse(IdTxt.Text) + " and id!=" + saveId;
      29 }
      30 else if (this.Tag == "addElement")
      31 {
      32 //增加要素分類
      33 sql = "select * from element where id=" + int.Parse(IdTxt.Text) + " or name='"
      34 + NameTxt.Text + "' and category='" + categoryName + "'";
      35 }
      36 else if (this.Tag == "updateElement")
      37 {
      38 //更新要素分類
      39 sql = "select * from element where id=" + int.Parse(IdTxt.Text) +
      40 " and id!=" + saveId + " or name='" + NameTxt.Text + "'" +
      41 " and name!='" + saveName + "' and category='" + categoryName + "'";
      42 }
      43 else
      44 {
      45 //添加數據分類
      46 sql = "select * from category where id=" +
      47 int.Parse(IdTxt.Text) + " or name='" + NameTxt.Text + "'";
      48 }
      49
      50 if (sh.GetRecordCount(sql) > 0)
      51 {
      52 ErrLabel.Text = "類別編碼或類別名稱已存在!";
      53 return;
      54 }
      55
      56 //3.構造插入或更新哈希表
      57 Hashtable ht = new Hashtable();
      58
      59 ht.Add("ID", IdTxt.Text);
      60 ht.Add("NAME", NameTxt.Text);
      61 ht.Add("DESCRIPTION", DescTxt.Text);
      62
      63 //如果是增加要素分類,就需要多添加兩個字段的值
      64 if (this.Tag == "addElement")
      65 {
      66 ht.Add("category", categoryName);
      67 ht.Add("datasetname", comboBoxEx1.SelectedItem.ToString());
      68 }
      69
      70 if (this.Tag == "update")
      71 {
      72 //更新了數據分類的名稱,要素類分類的分類名稱跟著改變
      73 if (sh.Update("category", "ID=" + saveId, ht) <= 0)
      74 {
      75 ErrLabel.Text = "更新地圖數據分層類別失敗";
      76 return;
      77 }
      78 else
      79 {
      80 ht.Clear();
      81 ht.Add("category", NameTxt.Text);
      82 sh.Update("element", "category='" + saveName + "'", ht);
      83 }
      84 }
      85 else if (this.Tag == "addElement")
      86 {
      87 if (sh.Insert("element", ht) <= 0)
      88 {
      89 ErrLabel.Text = "添加要素分類失敗";
      90 return;
      91 }
      92 }
      93 else if (this.Tag == "updateElement")
      94 {
      95 ht.Add("datasetname", comboBoxEx1.SelectedItem.ToString());
      96 //更新了要素類分類的id,圖層的pid相應改變
      97 if (sh.Update("element", "ID=" + saveId, ht) <= 0)
      98 {
      99 ErrLabel.Text = "更新地圖數據分層類別失敗";
      100 return;
      101 }
      102 else
      103 {
      104 ht.Clear();
      105 ht.Add("pid", IdTxt.Text);
      106 sh.Update("layer", "pid='" + saveId + "'", ht);
      107 }
      108 }
      109 else
      110 {
      111 if (sh.Insert("category", ht) <= 0)
      112 {
      113 ErrLabel.Text = "添加地圖數據分層類別失敗";
      114 return;
      115 }
      116
      117 }
      118 MessageBox.Show("操作成功!");
      119 this.Close();
      120 }
      121
      122 private void CancelBtn_Click(object sender, EventArgs e)
      123 {
      124 this.Close();
      125 }
      126
      127 private void AddDataLayer_Load(object sender, EventArgs e)
      128 {
      129 //如果是更新操作就保存原來的ID和名稱
      130 if (this.Tag == "update" || this.Tag == "updateElement")
      131 {
      132 //IdTxt.Enabled = false;
      133 saveId = IdTxt.Text;
      134 saveName = NameTxt.Text;
      135 }
      136 //如果是要素類分類操作就加載具體的數據集,以便指定要素類屬于哪一個數據集
      137 if (this.Tag == "addElement" || this.Tag == "updateElement")
      138 {
      139 labelX4.Visible = true;
      140 comboBoxEx1.Visible = true;
      141 IFeatureWorkspace pFW = MapOperation.GetFeatrueWorkspace();
      142 IWorkspace pW = pFW as IWorkspace;
      143 IEnumDataset pED = pW.get_Datasets(esriDatasetType.esriDTFeatureDataset);
      144 IFeatureDataset pFD = pED.Next() as IFeatureDataset;
      145 while (pFD != null)
      146 {
      147 comboBoxEx1.Items.Add(pFD.Name);
      148 pFD = pED.Next() as IFeatureDataset;
      149 }
      150 comboBoxEx1.Items.Add("屬性表");
      151 comboBoxEx1.SelectedIndex = 0;
      152 }
      153 }
      154
      155 ///<summary>
      156 /// 設置ID
      157 ///</summary>
      158 ///<param name="id">ID值</param>
      159 public void SetId(string id)
      160 {
      161 IdTxt.Text = id;
      162 }
      163
      164 ///<summary>
      165 /// 設置名稱
      166 ///</summary>
      167 ///<param name="name">名稱值</param>
      168 public void SetName(string name)
      169 {
      170 NameTxt.Text = name;
      171 }
      172
      173 ///<summary>
      174 /// 設置描述
      175 ///</summary>
      176 ///<param name="description">描述值</param>
      177 public void SetDescription(string description)
      178 {
      179 DescTxt.Text = description;
      180 }
      181
      182 ///<summary>
      183 /// 設置數據集名稱
      184 ///</summary>
      185 ///<param name="strDataSet">數據集名稱</param>
      186
      187 public void SetDataSet(string strDataSet)
      188 {
      189 comboBoxEx1.SelectedIndex = comboBoxEx1.FindString(strDataSet);
      190 }

      6.添加要素類別,通用使用上面提到的那個類和其操作界面,通過不同的命令來執行不同的操作(用一個變量來表示)。

       1         ///<summary>
      2 /// 添加要素類別
      3 ///</summary>
      4 ///<param name="sender"></param>
      5 ///<param name="e"></param>
      6 private void AddElementCategory_Click(object sender, EventArgs e)
      7 {
      8 FrmCategory fc = new FrmCategory();
      9 fc.Tag = "addElement";
      10 fc.Text = "添加要素分類";
      11 fc.categoryName = selectNodeText;
      12
      13 fc.ShowDialog();
      14
      15 Node n = LayerManagerTree.FindNodeByText(selectNodeText);
      16 UpdateTree(n.Level);//更新樹形控件
      17 UpdateNode(n);//更新節點
      18 }

      7.刪除數據分類,就是把數據庫中定義數據分類的記錄刪除掉。

       1         ///<summary>
      2 /// 刪除數據分類
      3 ///</summary>
      4 ///<param name="sender"></param>
      5 ///<param name="e"></param>
      6 private void DelDataCategory_Click(object sender, EventArgs e)
      7 {
      8 SqlHelper sh = new SqlHelper();
      9
      10 Hashtable ht = new Hashtable();
      11 Node n = LayerManagerTree.FindNodeByText(selectNodeText);
      12
      13 foreach (Node t in n.Nodes)
      14 {
      15 DeleteElement(t.Text);
      16 }
      17
      18 ht.Add("name", n.Text);
      19 if (sh.Del("jcsjk_category", "name='" + selectNodeText + "'", ht) > 0)
      20 {
      21 n.Remove();
      22 MessageBox.Show("刪除地圖數據分類成功");
      23 }
      24 else
      25 {
      26 MessageBox.Show("刪除地圖數據分類失敗");
      27 }
      28 }

      8.更新數據分類,同樣是更新數據庫的一條定義的記錄。

       1         ///<summary>
      2 /// 更新數據分類
      3 ///</summary>
      4 ///<param name="sender"></param>
      5 ///<param name="e"></param>
      6 private void UpdateDataCategory_Click(object sender, EventArgs e)
      7 {
      8 FrmCategory fc = new FrmCategory();
      9 fc.Tag = "update";
      10 fc.Text = "更新地圖數據分類";
      11 fc.categoryName = selectNodeText;
      12
      13 SqlHelper sh = new SqlHelper();
      14 string sql = "select id,name, description from category where name='"
      15 + selectNodeText + "'";
      16 OracleDataReader odr = sh.ReturnDataReader(sql);
      17 if (odr.Read())
      18 {
      19 fc.SetId(odr[0].ToString());
      20 fc.SetName(odr[1].ToString());
      21 fc.SetDescription(odr[2].ToString());
      22 }
      23
      24 fc.ShowDialog();
      25 }

       

      9.其他操作,其他的操作包括要素類的增刪改等,具體實現方式都差不多,只是針對不同的層或內容進行操作。

        1         ///<summary>
      2 /// 添加圖層
      3 ///</summary>
      4 ///<param name="sender"></param>
      5 ///<param name="e"></param>
      6 private void AddLayerCategory_Click(object sender, EventArgs e)
      7 {
      8 FrmLayer fl = new FrmLayer();
      9 fl.Text = "添加圖層";
      10 fl.category = selectNodeText;
      11 fl.ShowDialog();
      12
      13 Node n = LayerManagerTree.FindNodeByText(selectNodeText);
      14 UpdateTree(n.Level);
      15 UpdateNode(n);
      16 }
      17
      18 ///<summary>
      19 /// 刪除要素類別
      20 ///</summary>
      21 ///<param name="sender"></param>
      22 ///<param name="e"></param>
      23 private void DelElementCategory_Click(object sender, EventArgs e)
      24 {
      25 if (DeleteElement(selectNodeText))
      26 {
      27 Node n = LayerManagerTree.FindNodeByText(selectNodeText);
      28 n.Remove();
      29 MessageBox.Show("刪除要素類別成功!");
      30 }
      31 else
      32 {
      33 MessageBox.Show("刪除要素類別失敗!");
      34 }
      35 }
      36
      37 ///<summary>
      38 /// 刪除一個要素類別
      39 ///</summary>
      40 ///<param name="name">要素名稱</param>
      41 ///<returns>成功true,失敗false</returns>
      42 private bool DeleteElement(string name)
      43 {
      44 bool result = false;
      45
      46 Node n = LayerManagerTree.FindNodeByText(name);
      47
      48 foreach (Node t in n.Nodes)
      49 {
      50 DeleteLayer(t.Text);
      51 }
      52
      53 SqlHelper sh = new SqlHelper();
      54 Hashtable ht = new Hashtable();
      55 ht.Add("name", name);
      56
      57 if (sh.Del("element", "name='" + name + "' and category='數據標準'", ht) > 0)
      58 {
      59 result = true;
      60 }
      61 else
      62 {
      63 result = false;
      64 }
      65
      66 return result;
      67 }
      68
      69 ///<summary>
      70 /// 更新要素類別
      71 ///</summary>
      72 ///<param name="sender"></param>
      73 ///<param name="e"></param>
      74 private void UpdateElementCategory_Click(object sender, EventArgs e)
      75 {
      76 FrmCategory fc = new FrmCategory();
      77 fc.Tag = "updateElement";
      78 fc.Text = "更新要素類別";
      79
      80 SqlHelper sh = new SqlHelper();
      81 string sql = "select id,name,description,datasetname from element where name='"
      82 + selectNodeText + "' and category='數據標準'";
      83 OracleDataReader odr = sh.ReturnDataReader(sql);
      84 if (odr.Read())
      85 {
      86 fc.SetId(odr[0].ToString());
      87 fc.SetName(odr[1].ToString());
      88 fc.SetDescription(odr[2].ToString());
      89 fc.SetDataSet(odr[3].ToString());
      90 }
      91
      92 fc.ShowDialog();
      93 }
      94
      95 ///<summary>
      96 /// 刪除圖層定義
      97 ///</summary>
      98 ///<param name="sender"></param>
      99 ///<param name="e"></param>
      100 private void DelLayerDefine_Click(object sender, EventArgs e)
      101 {
      102 if (DeleteLayer(selectNodeText))
      103 {
      104 Node n = LayerManagerTree.FindNodeByText(selectNodeText);
      105 n.Remove();
      106 MessageBox.Show("刪除圖層定義成功!");
      107 }
      108 else
      109 {
      110 MessageBox.Show("刪除圖層定義失敗!");
      111 }
      112 }
      113
      114 ///<summary>
      115 /// 更新圖層定義
      116 ///</summary>
      117 ///<param name="sender"></param>
      118 ///<param name="e"></param>
      119 private void UpdateLayerDefine_Click(object sender, EventArgs e)
      120 {
      121 FrmLayer fl = new FrmLayer();
      122 fl.Text = "更新圖層定義";
      123 fl.Tag = "update";
      124
      125 //fl.category = selectNodeText;
      126
      127 SqlHelper sh = new SqlHelper();
      128 string sql = "select l.ID,TABLE_NAME,TABLE_MAPNAME,TYPE,l.DESCRIPTION from " +
      129 "layer l,element e where table_name='" + selectNodeText
      130 + "' and l.pid=e.id and category='數據標準'";
      131 OracleDataReader odr = sh.ReturnDataReader(sql);
      132
      133 if (odr.Read())
      134 {
      135 fl.SetId(odr[0].ToString());
      136 fl.SetTableName(odr[1].ToString());
      137 fl.SetTabelMapName(odr[2].ToString());
      138
      139 if ("PL" == odr[3].ToString())
      140 {
      141 fl.SetType(1);
      142 }
      143 else if ("PA" == odr[3].ToString())
      144 {
      145 fl.SetType(2);
      146 }
      147 else
      148 {
      149 fl.SetType(0);
      150 }
      151 fl.SetDescription(odr[4].ToString());
      152 }
      153
      154 fl.ShowDialog();
      155 }
      156
      157 ///<summary>
      158 /// 刪除一個圖層
      159 ///</summary>
      160 ///<param name="layerName">圖層名稱</param>
      161 ///<returns>成功true,失敗false</returns>
      162 private bool DeleteLayer(string layerName)
      163 {
      164 bool result = false;
      165 SqlHelper sh = new SqlHelper();
      166 string sql = "select l.id from layer l,element e where e.id=l.pid and table_name='"
      167 + layerName + "' and category='數據標準'";
      168 OracleDataReader odr = sh.ReturnDataReader(sql);
      169 int layerId;
      170 if (odr.Read())
      171 {
      172 layerId = int.Parse(odr[0].ToString());
      173 }
      174 else
      175 {
      176 return false;
      177 }
      178 Hashtable ht = new Hashtable();
      179
      180 ht.Add("id", layerId);
      181
      182 if (sh.Del("layer", "id=" + layerId, ht) > 0)
      183 {
      184 result = true;
      185 }
      186 else
      187 {
      188 result = false;
      189 }
      190
      191 return result;
      192 }

      10.總結

          這里主要實現的是對空間數據進行分類管理的一種方案,以后導入導出或查詢的空間數據都在這些分類下面進行操作,還有一個例外,就是不屬于任何分類的數據,簡單稱為游離數據或圖層。這里的實現都比較簡單,主要是一些對數據庫的操作,在配合一些邏輯操作就OK了,沒有什么技術含量。

      posted @ 2011-11-23 22:43  薔薇理想人生  閱讀(1202)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲AV成人片不卡无码| 五月天久久综合国产一区二区| 美女裸体视频永久免费| 国产精品香港三级国产av| 精品一区精品二区制服| 做暖暖视频在线看片免费| 久久成人 久久鬼色| 色综合伊人色综合网站| 国产综合一区二区三区麻豆| 人妻放荡乱h文| 亚洲AV国产福利精品在现观看| 在线观看中文字幕码国产| 午夜男女爽爽影院在线| 久久91精品牛牛| 成人国产精品免费网站| 国产精品乱码一区二区三| 国产高在线精品亚洲三区| 日韩国产精品中文字幕| 国产一区二区不卡在线| 日本一高清二区视频久二区| 国内精品久久久久精免费| 青青狠狠噜天天噜日日噜| 国产国产午夜福利视频| 国产在线不卡精品网站| 一日本道伊人久久综合影| 亚洲综合网中文字幕在线| 久久人妻无码一区二区三区av| 亚洲欧美激情在线一区| 丝袜美腿诱惑之亚洲综合网| 99久久国产综合精品女同| 少妇被无套内谢免费看| 亚洲色成人网站www永久下载 | 亚洲精品综合第一国产综合| 天天做日日做天天添天天欢公交车| 白嫩少妇无套内谢视频| 久久久精品人妻一区二区三区 | 最新国产AV最新国产在钱| 国产精品女生自拍第一区 | 欧洲成人在线观看| 高清中文字幕国产精品| 亚洲色av天天天天天天|