1. 功能簡介ide
目前在地理信息領域中數據包括矢量和柵格兩種數據組織形式。每一種數據有不一樣的數據格式,目前PIE SDK支持多種數據格式的數據建立,下面對柵格數據格式的數據建立功能進行介紹。spa
2. 功能實現說明code
2.1. 實現思路及原理說明orm
第一步視頻 |
獲取要讀取的柵格數據blog |
第二步教程 |
獲取柵格數據的讀取接口 |
第三步ip |
構建新的柵格數據集ci |
第四步 |
柵格數據寫入 |
第五步 |
設置空間參考 |
第六步 |
設置仿射變換 |
2.2. 核心接口與方法
接口/類 |
方法/屬性 |
說明 |
IRasterDataset |
GetBandCount() |
獲取波段數 |
Read() |
柵格讀取 |
|
Write() |
柵格寫入 |
|
GetGeoTransform() |
獲取仿射變換參數 |
|
SetGeoTransform() |
設置仿射變換參數 |
|
SpatialReference |
空間參考 |
|
DataSource.DatasetFactory |
CreateRasterDataset() |
空間柵格數據集 |
項目路徑 |
百度雲盤地址下/PIE示例程序/04數據操做/10柵格數據的建立 |
數據路徑 |
百度雲盤地址下/PIE示例數據/柵格數據/04.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 } |