1. 功能简介
目前在地理信息领域中数据包括矢量和栅格两种数据组织形式。每一种数据有不同的数据格式,目前PIE SDK支持多种数据格式的数据创建,下面对内存栅格数据格式的数据创建功能进行介绍。
2. 功能实现说明
2.1. 实现思路及原理说明
第一步 |
获取要读取的栅格数据 |
第二步 |
获取栅格数据的读取 |
第三步 |
构建新的栅格数据集 |
第四步 |
栅格数据写入 |
第五步 |
设置空间参考 |
第六步 |
设置仿射变换 |
2.2. 核心接口与方法
接口/类 |
方法/属性 |
说明 |
IRasterDataset |
GetBandCount() |
获取波段数 |
Read() |
栅格读取 |
|
Write() |
栅格写入 |
|
GetGeoTransform() |
获取仿射变换参数 |
|
SetGeoTransform() |
设置仿射变换参数 |
|
SpatialReference |
空间参考 |
|
DataSource.DatasetFactory |
CreateRasterDataset() |
空间栅格数据集 |
2.3. 示例代码
项目路径 |
百度云盘地址下/PIE示例程序/04数据操作/11内存栅格数据的创建 |
数据路径 |
百度云盘地址下/PIE示例数据/栅格数据/04.World/World.tif |
视频路径 |
百度云盘地址下/PIE视频教程/04数据操作/11内存栅格数据的创建.avi |
示例代码 |
|
1 /// <summary> 2 /// 内存栅格数据集的创建 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void toolStripButton_CreateMemRasterData_Click(object sender, EventArgs e) 7 { 8 //可以自定义打开一个tiff栅格数据 9 IRasterDataset rasterDataset = (mapControlMain.FocusMap.GetLayer(0) as IRasterLayer).Dataset; 10 int BandCount = rasterDataset.GetBandCount(); 11 //栅格数据范围的读取 12 IEnvelope envelop = rasterDataset.GetExtent(); 13 int xSize = rasterDataset.GetRasterXSize();//行 14 int ySize = rasterDataset.GetRasterYSize();//列 15 UInt16[] array = new UInt16[xSize * ySize * BandCount]; 16 int[] bandMap = new int[BandCount]; 17 for (int i = 0; i < BandCount; i++) 18 { 19 bandMap[i] = i + 1; 20 } 21 SaveFileDialog saveFileDialog = new SaveFileDialog(); 22 saveFileDialog.Title = "请选择要保存的路径:"; 23 saveFileDialog.Filter = "Raster File|*.tiff"; 24 if (saveFileDialog.ShowDialog() != DialogResult.OK) return; 25 //栅格数据读取 26 bool OK = rasterDataset.Read(0, 0, xSize, ySize, array, xSize, ySize, PixelDataType.UInt16, BandCount, bandMap); 27 //构建栅格数据集 28 IRasterDataset newRasterDataset = DatasetFactory.CreateRasterDataset("", xSize, ySize, BandCount, PixelDataType.UInt16, "MEM", null); 29 //设设置空间参考 30 newRasterDataset.SpatialReference = rasterDataset.SpatialReference; 31 //栅格数据的写入 32 bool OK1 = newRasterDataset.Write(0, 0, xSize, ySize, array, xSize, ySize, PixelDataType.UInt16, BandCount, bandMap); 33 //设置仿射变换 34 double[] geoTrans = rasterDataset.GetGeoTransform(); 35 newRasterDataset.SetGeoTransform(geoTrans); 36 //创建图层添加到map中 37 ILayer layer = LayerFactory.CreateDefaultRasterLayer(newRasterDataset) as ILayer; 38 //第一种添加数据的方法 39 mapControlMain.FocusMap.AddLayer(layer, 0); 40 //第二种添加数据的方法 41 // mapControl1.AddLayerFromFile(saveFileDialog.FileName, 0); mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll); |