PIE SDK柵格資料的建立
阿新 • • 發佈:2018-12-24
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 |