程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> MapX從數據庫讀取數據形成新圖層(C#)

MapX從數據庫讀取數據形成新圖層(C#)

編輯:.NET實例教程

在C#中實現MapX從數據庫讀取數據形成新圖層分為兩個問題: 1. MapX從數據庫讀取數據形成新圖層; 2. 將DataTable轉換為ADO的Recordset。這裡的第二個問題是由第一個問題引起的,因為MapX是一個COM控件,而且它只支持ADO的數據訪問方式,而C#編程時一般會使用ADO.NET方式,為此需要在兩種方式之間做一下轉換。(當然也可以在C#中使用ADO方式,但這畢竟是落後的方法。該解決辦法可參考文章《Visual Basic.NET中使用ADO訪問數據庫》)。對第二個問題的解決辦法,參見作者的另一篇文章《將DataTable對象轉換為Recordset對象》(http://blog.csdn.Net/allentao/archive/2005/05/11/373634.ASPx),本文章只講述在得到了Recordset對象後,如何解決第一個問題。 步驟如下: 1. 創建CMapXFIElds對象,並對應數據庫中字段添加字段; 2. 創建CMapXBindLayer對象,指定其坐標值字段的序號; 3. 向map.DataSets中添加數據集,從而生成新的圖層; 4. 指定新圖層中要素的顯示風格,本文采用顯示位圖的方式,為此需要將要顯示的位圖放入MapX安裝目錄的CUSTSYMB文件夾下。
代碼如下:  

             private void CreatNewLayerfromDB(string layerName, ADODB.Recordset rsNoPass)    

           {                      this.DeleteLayerByName(layerName);   //將原有層刪除

                         CMapXFields flds=new FIEldsClass();

                         // Describe the structure of the Unbound dataset                      flds.Add("stationid", "theid", AggregationFunctionConstants.miAggregationIndividual,                             FieldTypeConstants.miTypeString);                      flds.Add("address", "address", AggregationFunctionConstants.miAggregationIndividual,                             FieldTypeConstants.miTypeString);                      flds.Add("longitude", "longitude", AggregationFunctionConstants.miAggregationSum,                             FieldTypeConstants.miTypeNumeric);  //經度                      flds.Add("latitude", "latitude", AggregationFunctionConstants.miAggregationSum,                             FIEldTypeConstants.miTypeNumeric);  //緯度

                         CMapXBindLayer bindLayerObject=new BindLayerClass();                      bindLayerObject.LayerName=layerName;                      bindLayerObject.RefColumn1=3;                      bindLayerObject.RefColumn2=4;                      bindLayerObject.LayerType=BindLayerTypeConstants.miBindLayerTypeXY;

                         CMapXDataset dataSet=map.DataSets.Add(DatasetTypeConstants.miDataSetADO,                             rsNoPass, layerName, "stationid", "address", bindLayerObject, flds, false );

                         CMapXLayer layer=map.Layers._Item(layerName);                      layer.OverrideStyle= true;                      string picName="icon.BMP";                      if(layer.Style.SupportsBitmapSymbols == true)                      {                             layer.Style.SymbolType = SymbolTypeConstants.miSymbolTypeBitmap;                             layer.Style.SymbolBitmapSize = 60;                             layer.Style.SymbolBitmapTransparent = true;                             layer.Style.SymbolBitmapName = picName;                    

  }                                                 

        }

                private void DeleteLayerByName(string layerName)           

    {                      int count=map.Layers.Count;                   

   for(int i=1; i              

        {              

               if(map.Layers._Item(i).Name==layerName)                          

          map.Layers.Remove(i);                

      }          

     }

說明: MapX控件中的序號是從1開始的,這一點可從上面的代碼中Layers集合與FIElds集合的序號使用上可以看出。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved