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示例数据/栅格数据/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 } |