1. 程式人生 > >PIE SDK柵格資料的建立

PIE SDK柵格資料的建立

 

1功能簡介

   目前在地理資訊領域中資料包括向量和柵格兩種資料組織形式。每一種資料有不同的資料格式,目前PIE SDK支援多種資料格式的資料建立,下面對柵格資料格式的資料建立功能進行介紹。

2功能實現說明

2.1 實現思路及原理說明

第一步

獲取要讀取的柵格資料

第二步

獲取柵格資料的讀取

第三步

構建新的柵格資料集

第四步

柵格資料寫入

第五步

設定空間參考

第六步

設定仿射變換

2.2 核心介面與方法

介面/類

方法/屬性

說明

 

 

 

IRasterDataset

GetBandCount()

獲取波段數

Read()

柵格讀取

Write()

柵格寫入

GetGeoTransform()

獲取仿射變換引數

SetGeoTransform()

設定仿射變換引數

SpatialReference

空間參考

DataSource.DatasetFactory

CreateRasterDataset()

空間柵格資料集

2.3示例程式碼

專案路徑

百度雲盤地址下/PIE示例程式/04資料操作/10柵格資料的建立

資料路徑

百度雲盤地址下/PIE示例資料/柵格資料/World/World.tif

視訊路徑

百度雲盤地址下/PIE示例程式/04資料操作/10柵格資料的建立.avi

示例程式碼

 1         /// <summary>
 2         /// 建立柵格資料
 3         /// </summary>
 4         /// <param name="sender"></param>
 5         /// <param name="e"></param>
 6         private void toolStripButton_CreateRasterData_Click(object sender, EventArgs e)
 7         {
 8             //1獲取當前的柵格圖層
 9             //可以自定義開啟一個tiff柵格資料DatasetFactory.OpenRasterDataset(strPath,OpenMode.ReadOnly);
10             IRasterDataset rasterDataset = (mapControlMain.FocusMap.GetLayer(0) as IRasterLayer).Dataset;
11             int BandCount = rasterDataset.GetBandCount();
12             //2柵格資料範圍等資訊的讀取
13             IEnvelope envelop = rasterDataset.GetExtent();
14             int xSize = rasterDataset.GetRasterXSize();//
15             int ySize = rasterDataset.GetRasterYSize();//
16             UInt16[] array = new UInt16[xSize * ySize * BandCount];
17             int[] bandMap = new int[BandCount];
18             for (int i = 0; i < BandCount; i++)
19             {
20                 bandMap[i] = i + 1;
21             }
22             SaveFileDialog saveFileDialog = new SaveFileDialog();
23             saveFileDialog.Title = "請選擇要儲存的路徑:";
24             saveFileDialog.Filter = "Raster File|*.tiff";
25             if (saveFileDialog.ShowDialog() != DialogResult.OK) return;
26             //3柵格資料讀取
27             bool OK = rasterDataset.Read(0, 0, xSize, ySize, array, xSize, ySize, PixelDataType.UInt16, BandCount, bandMap);
28             //4構建柵格資料集
29             IRasterDataset newRasterDataset = DatasetFactory.CreateRasterDataset(saveFileDialog.FileName, xSize, ySize, BandCount, PixelDataType.UInt16, "GTiff", null);
30             //5設設定空間參考
31             newRasterDataset.SpatialReference = rasterDataset.SpatialReference;
32             //6柵格資料的寫入
33             bool OK1 = newRasterDataset.Write(0, 0, xSize, ySize, array, xSize, ySize, PixelDataType.UInt16, BandCount, bandMap);
34             //7設定仿射變換
35             double[] geoTrans = rasterDataset.GetGeoTransform();
36             newRasterDataset.SetGeoTransform(geoTrans);
37             //8建立圖層新增到map中
38             ILayer layer = LayerFactory.CreateDefaultRasterLayer(newRasterDataset) as ILayer;
39             //第一種新增資料的方法
40             mapControlMain.FocusMap.AddLayer(layer, 0);
41             //第二種新增資料方法
42             //  mapControl1.AddLayerFromFile(saveFileDialog.FileName, 0);
43             mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll);
44         }
View Code

2.4示例截圖