ArcGIS Engine打开栅格数据有两种方式:
- 使用栅格工作空间工厂(RasterWorksapceFactory)打开栅格数据
- 使用栅格图层(IRasterLayer接口中)的 CreateFromFilePath方法直接创建图层
一、使用栅格工作空间工厂(RasterWorksapceFactory)打开栅格数据
思路如下:
- 打开栅格数据工作空间
栅格数据的工作空间默认为栅格数据所在文件夹,只需用工厂打开即可。
注意工作空间工厂只能打开IWorkSpace,要得到其他类型需要转换。
- 工作空间加载栅格数据集
在已存在的工作空间中,直接用文件名获得数据集
- (构建栅格金子塔)
- 栅格数据集转为栅格图层
- 栅格图层加入显示
具体实现:
1.打开文件打开窗口,选择文件:
OpenFileDialog pOpenFileDialog = new OpenFileDialog();
if (pOpenFileDialog.ShowDialog() == DialogResult.OK)
{
string pFullpath = pOpenFileDialog.FileName;
if (pFullpath == "") return;
//获得文件名和文件路径
string pFilePath = System.IO.Path.GetDirectoryName(pFullpath);
string pFileName = System.IO.Path.GetFileName(pFullpath);
2.打开栅格工作空间:
栅格工作空间使用工作空间工厂从文件夹中创建。
//获得工作空间,用栅格数据工作空间初始化
IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactory();
IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(pFilePath, 0);
//三步,最后转为栅格工作空间
IRasterWorkspace pRasterWorkspace = pWorkspace as IRasterWorkspace;
3.使用栅格工作空间打开栅格数据集
//打开栅格数据集
IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(pFileName);
4.将栅格数据集转为图层
//将栅格数据集转为图层
IRasterLayer pRasterLayer = new RasterLayerClass();
pRasterLayer.CreateFromDataset(pRasterDataset);
5.将图层添加到axMapControl中
axMapControl1.AddLayer(pLayer, 0);
二、使用栅格图层(IRasterLayer接口中)的 CreateFromFilePath方法直接创建图层
此方法简化了打开栅格数据的步骤,创建栅格图层后直接使用CreateFromFilePath指定文件位置。
思路如下:
- 创建栅格图层,并使用栅格数据存储路径初始化
- 将栅格图层添加到显示
打开窗体,选择栅格数据
OpenFileDialog pOpenFileDialog = new OpenFileDialog();
pOpenFileDialog.Title = "打开DEM";
pOpenFileDialog.Filter= "栅格数据(*.tiff;*.tif;*.jpep;*.jpg;*.png;*.bmp)|*.tiff;*.tif;*.jpep;*.jpg;*.png;*.bmp";
if (pOpenFileDialog.ShowDialog() == DialogResult.OK)
{
string path = pOpenFileDialog.FileName;
}
创建栅格图层,使用路径初始化
IRasterLayer pRL=new RasterLayer();
pRL.CreateFromFilePath(path);
axMapControl1.AddLayer(pRL);
将栅格数据添加到显示
axMapControl1.AddLayer(pRL);
全部代码:
OpenFileDialog pOpenFileDialog = new OpenFileDialog();
pOpenFileDialog.Title = "打开DEM";
pOpenFileDialog.Filter= "栅格数据(*.tiff;*.tif;*.jpep;*.jpg;*.png;*.bmp)|*.tiff;*.tif;*.jpep;*.jpg;*.png;*.bmp";
if (pOpenFileDialog.ShowDialog() == DialogResult.OK)
{
string path = pOpenFileDialog.FileName;
IRasterLayer pRL=new RasterLayer();
pRL.CreateFromFilePath(path);
axMapControl1.AddLayer(pRL);
}